[virglrenderer-devel] [PATCH] renderer: swizzle sampler border color channel if we emulate alpha format
Elie Tournier
tournier.elie at gmail.com
Wed Jul 11 16:06:31 UTC 2018
Fixes:
dEQP-GLES31.functional.texture.border_clamp.formats.alpha.nearest_size_pot
dEQP-GLES31.functional.texture.border_clamp.formats.alpha.nearest_size_npot
dEQP-GLES31.functional.texture.border_clamp.formats.alpha.linear_size_pot
dEQP-GLES31.functional.texture.border_clamp.formats.alpha.linear_size_npot
dEQP-GLES31.functional.texture.border_clamp.unused_channels.alpha
Signed-off-by: Elie Tournier <elie.tournier at collabora.com>
---
src/vrend_renderer.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/src/vrend_renderer.c b/src/vrend_renderer.c
index cc99087..f32e8fd 100644
--- a/src/vrend_renderer.c
+++ b/src/vrend_renderer.c
@@ -4173,7 +4173,19 @@ static void vrend_apply_sampler_state(struct vrend_context *ctx,
return;
}
+ /*
+ * If we emulate alpha format with red, we need to tell
+ * the sampler to use the red channel and not the alpha one
+ * by swizzling the GL_TEXTURE_BORDER_COLOR parameter.
+ */
if (vrend_state.have_samplers) {
+ if (vrend_format_is_emulated_alpha(res->base.format)) {
+ union pipe_color_union border_color;
+ border_color = vstate->base.border_color;
+ border_color.ui[0] = border_color.ui[3];
+ border_color.ui[3] = 0;
+ glSamplerParameterIuiv(vstate->id, GL_TEXTURE_BORDER_COLOR, border_color.ui);
+ }
glBindSampler(sampler_id, vstate->id);
glSamplerParameteri(vstate->id, GL_TEXTURE_SRGB_DECODE_EXT,
srgb_decode);
--
2.18.0
More information about the virglrenderer-devel
mailing list