Consider this series of events: glColorMask(GL_FALSE, GL_TRUE, GL_TRUE, GL_TRUE); glClearColor(0.125f, 0.25f, 0.5f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); glClearColor(0.1f, 0.1f, 0.1f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); With virgl, this may render an incorrect result. This is because there our two paths for clears in Gallium -- one for full clears (st->pipe->clear) and another for color-masked/scissored clears (clear_with_quad). We only encode the color mask in the virgl_encode_blend_state in the clear_with_quad case. We should set the colormask the case of full clears as well, since we need to update the GL state on the host driver. With this patch, the number of dEQP GLES2 failures on Virgl with a nvidia host driver goes from 260 to 136 with no regressions. Some representative test cases are: dEQP-GLES2.functional.color_clear.masked_scissored_rgb dEQP-GLES2.functional.color_clear.masked_scissored_rgba dEQP-GLES2.functional.depth_stencil_clear.depth_stencil_scissored dEQP-GLES2.functional.fragment_ops.random.0 dEQP-GLES2.functional.fragment_ops.interaction.basic_shader.0 v2: Revise comments, fix curly braces (Elie) Signed-off-by: Dave Airlie <airlied@redhat.com>macos/master
parent
3cd2caad2b
commit
252b00d77c
Loading…
Reference in new issue