summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/mesa/main/accum.c3
-rw-r--r--src/mesa/main/clear.c16
-rw-r--r--src/mesa/main/drawpix.c11
3 files changed, 25 insertions, 5 deletions
diff --git a/src/mesa/main/accum.c b/src/mesa/main/accum.c
index 6a83930a13d..d7ed3a849be 100644
--- a/src/mesa/main/accum.c
+++ b/src/mesa/main/accum.c
@@ -97,6 +97,9 @@ _mesa_Accum( GLenum op, GLfloat value )
return;
}
+ if (ctx->TransformFeedback.RasterDiscard)
+ return;
+
if (ctx->RenderMode == GL_RENDER) {
ctx->Driver.Accum(ctx, op, value);
}
diff --git a/src/mesa/main/clear.c b/src/mesa/main/clear.c
index 301fe694cda..c35675fb4d1 100644
--- a/src/mesa/main/clear.c
+++ b/src/mesa/main/clear.c
@@ -200,6 +200,9 @@ _mesa_Clear( GLbitfield mask )
ctx->DrawBuffer->_Ymin >= ctx->DrawBuffer->_Ymax)
return;
+ if (ctx->TransformFeedback.RasterDiscard)
+ return;
+
if (ctx->RenderMode == GL_RENDER) {
GLbitfield bufferMask;
@@ -328,7 +331,7 @@ _mesa_ClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint *value)
drawbuffer);
return;
}
- else {
+ else if (!ctx->TransformFeedback.RasterDiscard) {
/* Save current stencil clear value, set to 'value', do the
* stencil clear and restore the clear value.
* XXX in the future we may have a new ctx->Driver.ClearBuffer()
@@ -352,7 +355,7 @@ _mesa_ClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint *value)
drawbuffer);
return;
}
- else if (mask) {
+ else if (mask && !ctx->TransformFeedback.RasterDiscard) {
union gl_color_union clearSave;
/* save color */
@@ -403,7 +406,7 @@ _mesa_ClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint *value)
drawbuffer);
return;
}
- else if (mask) {
+ else if (mask && !ctx->TransformFeedback.RasterDiscard) {
union gl_color_union clearSave;
/* save color */
@@ -452,7 +455,7 @@ _mesa_ClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat *value)
drawbuffer);
return;
}
- else {
+ else if (!ctx->TransformFeedback.RasterDiscard) {
/* Save current depth clear value, set to 'value', do the
* depth clear and restore the clear value.
* XXX in the future we may have a new ctx->Driver.ClearBuffer()
@@ -477,7 +480,7 @@ _mesa_ClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat *value)
drawbuffer);
return;
}
- else if (mask) {
+ else if (mask && !ctx->TransformFeedback.RasterDiscard) {
union gl_color_union clearSave;
/* save color */
@@ -528,6 +531,9 @@ _mesa_ClearBufferfi(GLenum buffer, GLint drawbuffer,
return;
}
+ if (ctx->TransformFeedback.RasterDiscard)
+ return;
+
if (ctx->NewState) {
_mesa_update_state( ctx );
}
diff --git a/src/mesa/main/drawpix.c b/src/mesa/main/drawpix.c
index b7e2c36e192..412cc15af4e 100644
--- a/src/mesa/main/drawpix.c
+++ b/src/mesa/main/drawpix.c
@@ -80,6 +80,10 @@ _mesa_DrawPixels( GLsizei width, GLsizei height,
goto end; /* the error code was recorded */
}
+ if (ctx->TransformFeedback.RasterDiscard) {
+ goto end;
+ }
+
if (!ctx->Current.RasterPosValid) {
goto end; /* no-op, not an error */
}
@@ -188,6 +192,10 @@ _mesa_CopyPixels( GLint srcx, GLint srcy, GLsizei width, GLsizei height,
goto end;
}
+ if (ctx->TransformFeedback.RasterDiscard) {
+ goto end;
+ }
+
if (!ctx->Current.RasterPosValid || width == 0 || height == 0) {
goto end; /* no-op, not an error */
}
@@ -242,6 +250,9 @@ _mesa_Bitmap( GLsizei width, GLsizei height,
return;
}
+ if (ctx->TransformFeedback.RasterDiscard)
+ return;
+
if (ctx->RenderMode == GL_RENDER) {
/* Truncate, to satisfy conformance tests (matches SGI's OpenGL). */
if (width > 0 && height > 0) {