On Fri, May 12, 2017 at 01:33:54PM -0700, Nanley Chery wrote:
> The procedure for decompressing an opaque DXT1 OpenGL format is
> dependant on the comparison of two colors stored in the first 32 bits of
> the compressed block. Here's the specified OpenGL behavior for
> reference:
> 
>    The RGB color for a texel at location (x,y) in the block is given by:
> 
>       RGB0,              if color0 > color1 and code(x,y) == 0
>       RGB1,              if color0 > color1 and code(x,y) == 1
>       (2*RGB0+RGB1)/3,   if color0 > color1 and code(x,y) == 2
>       (RGB0+2*RGB1)/3,   if color0 > color1 and code(x,y) == 3
> 
>       RGB0,              if color0 <= color1 and code(x,y) == 0
>       RGB1,              if color0 <= color1 and code(x,y) == 1
>       (RGB0+RGB1)/2,     if color0 <= color1 and code(x,y) == 2
>       BLACK,             if color0 <= color1 and code(x,y) == 3
> 
> The sampling operation performed on an opaque DXT1 Intel format essentially
> hard-codes the comparison result of the two colors as color0 > color1.
> This means that the behavior is incompatible with OpenGL. This is stated
> in the SKL PRM, Vol 5: Memory Views:
> 
>    Opaque Textures (DXT1_RGB)
>       Texture format DXT1_RGB is identical to DXT1, with the exception that 
> the
>       One-bit Alpha encoding is removed. Color 0 and Color 1 are not 
> compared, and
>       the resulting texel color is derived strictly from the Opaque Color 
> Encoding.
>       The alpha channel defaults to 1.0.
> 
>       Programming Note
>       Context: Opaque Textures (DXT1_RGB)
>       The behavior of this format is not compliant with the OGL spec.
> 
> The opaque and non-opaque DXT1 OpenGL formats are specified to be
> decoded in exactly the same way except the BLACK value must have a
> transparent alpha channel in the latter. Use the four-channel BC1 Intel
> formats with the alpha set to 1 to provide the behavior required by the
> spec. Note that the alpha is already set to 1 for RGB formats in
> brw_get_texture_swizzle().

The last sentence actually turned out to be false. I plan to send out a
v3 of this patch along with the Piglit test used to find this issue.
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to