[Piglit] [PATCH - Piglit 02/10] Make multisample accuracy test set GL_FRAMEBUFFER_SRGB when resolving.

Kenneth Graunke kenneth at whitecape.org
Thu Aug 4 23:14:43 UTC 2016

For a long time, the Mesa i965 driver has contained a hack to override
color spaces to sRGB when doing multisample resolves, with the following

* It has been observed that mulitisample resolves produce slightly better
* looking images when averaging is done using destination format. NVIDIA's
* proprietary OpenGL driver also follow this approach.  So, we choose to
* follow it in our driver.
* When multisampling, if the source and destination formats are equal
* (aside from the color space), we choose to blit in sRGB space to get
* this higher quality image.

I've never understood the purpose of this hack.  It sort of makes sense
in a "never decode, never encode" world.  But with the new GL 4.4 rules,
where encoding and decoding is optional, I'm not sure that it has any
place - the colorspaces should be application directed.

That said, this Piglit test appears to expect that resolves will be
done in the sRGB color space for TEST_TYPE_SRGB, so let's make it
explicitly request OpenGL to make that happen.

This makes a number of subtests pass on NVIDIA 367.35 on a GTX 980:
- accuracy {2,4,8,32} srgb depthstencil
- accuracy {2,4,8,32} srgb depthstencil linear
- accuracy {2,4,8,32} srgb small depthstencil
- accuracy {2,4,8,32} srgb small depthstencil linear
(The 16x and all_samples variants still fail on NVIDIA.)

No change on i965, as it currently ignores GL_FRAMEBUFFER_SRGB but
has the hack to do resolves in sRGB regardless.  It will soon drop
the hack, but start respecting GL_FRAMEBUFFER_SRGB.

Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
 tests/spec/ext_framebuffer_multisample/common.cpp | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/tests/spec/ext_framebuffer_multisample/common.cpp b/tests/spec/ext_framebuffer_multisample/common.cpp
index 735bcc5..b6df91c 100644
--- a/tests/spec/ext_framebuffer_multisample/common.cpp
+++ b/tests/spec/ext_framebuffer_multisample/common.cpp
@@ -326,10 +326,14 @@ Test::resolve(Fbo *fbo, GLbitfield which_buffers)
 	glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo->handle);
 	glBindFramebuffer(GL_DRAW_FRAMEBUFFER, resolve_fbo.handle);
+	if (srgb)
 	glBlitFramebuffer(0, 0, fbo->config.width, fbo->config.height,
 			  0, 0, resolve_fbo.config.width,
 			  which_buffers, filter_mode);

More information about the Piglit mailing list