[virglrenderer-devel] [PATCH] renderer: swizzle sampler border color channel if we emulate alpha format

Erik Faye-Lund erik.faye-lund at collabora.com
Tue Jul 17 10:40:15 UTC 2018


On 17. juli 2018 12:36, Elie Tournier wrote:
> On Mon, Jul 16, 2018 at 11:56:45AM +0200, Erik Faye-Lund wrote:
>> On 11. juli 2018 18:06, Elie Tournier wrote:
>>> 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);
>> I suspect that the glTexParameterIuiv-variant also needs a similar fix...
>> something along these lines?
> The code looks good to me. But we are suppose to hit this path when we call
> vrend_apply_sampler_state without having a sampler. Not sure it's happen once.
> I will run the non regression tests tonight.

You'd need to run on OpenGL 3.2 or earlier without 
GL_ARB_sampler_objects to trigger it, so it's pretty unlikely.

You should be able to use MESA_GL_VERSION_OVERRIDE=3.2 and 
MESA_EXTENSION_OVERRIDE="-GL_ARB_sampler_objects" when running qemu on 
the host, I guess.


More information about the virglrenderer-devel mailing list