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

Brian Paul brianp at vmware.com
Wed Jun 6 20:40:23 CEST 2012


On 06/06/2012 12:19 PM, Kenneth Graunke wrote:
> On 06/06/2012 06:43 AM, Brian Paul wrote:
>> 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
>
> I just checked on my Radeon 3650 and discovered that it returns
> something different:
>
> COMPRESSED_RGB_S3TC_DXT1_EXT  - 5, 6, 5, 0
> COMPRESSED_RGBA_S3TC_DXT1_EXT - 5, 6, 5, 1
> COMPRESSED_RGBA_S3TC_DXT3_EXT - 5, 6, 5, 4
> COMPRESSED_RGBA_S3TC_DXT5_EXT - 5, 6, 5, 8
>
> If they both did 8, 8, 8, {0,8}, I'd definitely favor changing it.  But
> I'm not sure there really is a right answer, so maybe ours is as good as
> any?
>
> (In case anyone wants to reproduce this, I've attached the patch I used
> for testing; apply it to piglit, rebuild, and run
> .bin/sized-texture-format-channels)

When I run it here with the NVIDIA driver I don't see any of the 
compressed formats listed, which I guess it means the returned values 
are all 8 (or zero) per the format info in the test:
	FORMAT(GL_COMPRESSED_RGB_S3TC_DXT1_EXT, UN8, UN8, UN8, NONE, NONE, 
NONE, NONE, NONE),

-Brian


More information about the mesa-dev mailing list