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<kenn...@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 <bri...@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)
diff --git a/tests/util/sized-internalformats.c b/tests/util/sized-internalformats.c index 6d8babc..0883958 100644 --- a/tests/util/sized-internalformats.c +++ b/tests/util/sized-internalformats.c @@ -172,6 +172,12 @@ const struct sized_internalformat sized_internalformats[] = { FORMAT(GL_COMPRESSED_RED_RGTC1, UCMP, NONE, NONE, NONE, NONE, NONE, NONE, NONE), FORMAT(GL_COMPRESSED_SIGNED_RED_RGTC1, SCMP, NONE, NONE, NONE, NONE, NONE, NONE, NONE), + /* S3TC */ + FORMAT(GL_COMPRESSED_RGB_S3TC_DXT1_EXT, UN8, UN8, UN8, NONE, NONE, NONE, NONE, NONE), + FORMAT(GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, UN8, UN8, UN8, UN8, NONE, NONE, NONE, NONE), + FORMAT(GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, UN8, UN8, UN8, UN8, NONE, NONE, NONE, NONE), + FORMAT(GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, UN8, UN8, UN8, UN8, NONE, NONE, NONE, NONE), + { GL_NONE }, };
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev