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<[email protected]>
---
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<[email protected]>

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
_______________________________________________
mesa-dev mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to