|  |  | @@ -106,6 +106,31 @@ _mesa_ClearColorIuiEXT(GLuint r, GLuint g, GLuint b, GLuint a) | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * Returns true if color writes are enabled for the given color attachment. | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | * Beyond checking ColorMask, this uses _mesa_format_has_color_component to | 
		
	
		
			
			|  |  |  | * ignore components that don't actually exist in the format (such as X in | 
		
	
		
			
			|  |  |  | * XRGB). | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | static bool | 
		
	
		
			
			|  |  |  | color_buffer_writes_enabled(const struct gl_context *ctx, unsigned idx) | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | struct gl_renderbuffer *rb = ctx->DrawBuffer->_ColorDrawBuffers[idx]; | 
		
	
		
			
			|  |  |  | GLuint c; | 
		
	
		
			
			|  |  |  | GLubyte colorMask = 0; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | if (rb) { | 
		
	
		
			
			|  |  |  | for (c = 0; c < 4; c++) { | 
		
	
		
			
			|  |  |  | if (_mesa_format_has_color_component(rb->Format, c)) | 
		
	
		
			
			|  |  |  | colorMask |= ctx->Color.ColorMask[idx][c]; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | return colorMask != 0; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * Clear buffers. | 
		
	
		
			
			|  |  |  | * | 
		
	
	
		
			
			|  |  | @@ -181,7 +206,7 @@ _mesa_Clear( GLbitfield mask ) | 
		
	
		
			
			|  |  |  | for (i = 0; i < ctx->DrawBuffer->_NumColorDrawBuffers; i++) { | 
		
	
		
			
			|  |  |  | GLint buf = ctx->DrawBuffer->_ColorDrawBufferIndexes[i]; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | if (buf >= 0) { | 
		
	
		
			
			|  |  |  | if (buf >= 0 && color_buffer_writes_enabled(ctx, i)) { | 
		
	
		
			
			|  |  |  | bufferMask |= 1 << buf; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } |