[Mesa-dev] [PATCH] mesa: Return 8 bits for GL_TEXTURE_RED_SIZE on RGTC formats.

Brian Paul brianp at vmware.com
Wed Jun 6 15:43:45 CEST 2012


On 06/06/2012 07:35 AM, Brian Paul wrote:
> On 06/06/2012 12:57 AM, Kenneth Graunke wrote:
>> From the issues section of the GL_ARB_texture_compression_rgtc
>> extension:
>>
>> 15) What should glGetTexLevelParameter return for
>> GL_TEXTURE_GREEN_SIZE and GL_TEXTURE_BLUE_SIZE for the RGTC1
>> formats? What should glGetTexLevelParameter return for
>> GL_TEXTURE_BLUE_SIZE for the RGTC2 formats?
>>
>> RESOLVED: Zero bits.
>>
>> These formats always return 0.0 for these respective components
>> and have no bits devoted to these components.
>>
>> Returning 8 bits for red size of RGTC1 and the red and green
>> sizes of RGTC2 makes sense because that's the maximum potential
>> precision for the uncompressed texels.
>>
>> Thus, we need to return 8 bits for GL_TEXTURE_RED_SIZE on all RGTC
>> formats
>> and 8 bits for GL_TEXTURE_GREEN_SIZE on RGTC2 formats. BLUE should
>> be 0.
>>
>> Fixes oglconform/rgtc/advanced.texture_fetch.tex_param.
>>
>> Signed-off-by: Kenneth Graunke<kenneth at whitecape.org>
>> ---
>> src/mesa/main/formats.c | 8 ++++----
>> 1 file changed, 4 insertions(+), 4 deletions(-)
>>
>> diff --git a/src/mesa/main/formats.c b/src/mesa/main/formats.c
>> index cecb70c..ccc0b17 100644
>> --- a/src/mesa/main/formats.c
>> +++ b/src/mesa/main/formats.c
>> @@ -1319,7 +1319,7 @@ static struct gl_format_info
>> format_info[MESA_FORMAT_COUNT] =
>> "MESA_FORMAT_RED_RGTC1",
>> GL_RED,
>> GL_UNSIGNED_NORMALIZED,
>> - 4, 0, 0, 0,
>> + 8, 0, 0, 0,
>> 0, 0, 0, 0, 0,
>> 4, 4, 8 /* 8 bytes per 4x4 block */
>> },
>> @@ -1328,7 +1328,7 @@ static struct gl_format_info
>> format_info[MESA_FORMAT_COUNT] =
>> "MESA_FORMAT_SIGNED_RED_RGTC1",
>> GL_RED,
>> GL_SIGNED_NORMALIZED,
>> - 4, 0, 0, 0,
>> + 8, 0, 0, 0,
>> 0, 0, 0, 0, 0,
>> 4, 4, 8 /* 8 bytes per 4x4 block */
>> },
>> @@ -1337,7 +1337,7 @@ static struct gl_format_info
>> format_info[MESA_FORMAT_COUNT] =
>> "MESA_FORMAT_RG_RGTC2",
>> GL_RG,
>> GL_UNSIGNED_NORMALIZED,
>> - 4, 4, 0, 0,
>> + 8, 8, 0, 0,
>> 0, 0, 0, 0, 0,
>> 4, 4, 16 /* 16 bytes per 4x4 block */
>> },
>> @@ -1346,7 +1346,7 @@ static struct gl_format_info
>> format_info[MESA_FORMAT_COUNT] =
>> "MESA_FORMAT_SIGNED_RG_RGTC2",
>> GL_RG,
>> GL_SIGNED_NORMALIZED,
>> - 4, 4, 0, 0,
>> + 8, 8, 0, 0,
>> 0, 0, 0, 0, 0,
>> 4, 4, 16 /* 16 bytes per 4x4 block */
>> },
>
> Reviewed-by: Brian Paul <brianp at vmware.com>
>
> We should also check the DXT formats too...

The s3tc extension spec doesn't say but the ARB_texture_compression 
spec says:

"""
     [...]  For texture
     images with a compressed internal format, the resolutions 
returned specify
     the component resolution of an uncompressed internal format that 
produces
     an image of roughly the same quality as the compressed image in 
question.
     Since the quality of the implementation's compression algorithm 
is likely
     data-dependent, the returned component sizes should be treated 
only as
     rough approximations.  ...
"""

NVIDIA's driver returns 8 for the size queries.  We return 4.  Want to 
fix those too?

-Brian



More information about the mesa-dev mailing list