On 08/20/2012 03:34 PM, Anuj Phogat wrote:
On Fri, Aug 17, 2012 at 8:28 PM, Ian Romanick<i...@freedesktop.org>  wrote:
On 08/16/2012 02:29 PM, Anuj Phogat wrote:

On Thu, Aug 16, 2012 at 10:23 AM, Brian Paul<bri...@vmware.com>  wrote:

On 08/15/2012 02:31 PM, Anuj Phogat wrote:


On Tue, May 1, 2012 at 2:07 PM, Brian Paul<bri...@vmware.com
<mailto:bri...@vmware.com>>  wrote:

      When glTexImage or glCopyTexImage is called with internalFormat
      being a
      generic compressed format (like GL_COMPRESSED_RGB) we need to do
      the same
      error checks as for specific compressed formats.  In particular,
      check if
      the texture target is compatible with the format.  None of the
texture
      compression formats we support so far work with GL_TEXTURE_1D, for
      example.

      See also https://bugs.freedesktop.org/show_bug.cgi?id=49124


Brian, generic texture compression formats with GL_TEXTURE_1D seem to
work fine
on i965 drivers.


Does that wind up using one of the DXT formats?

It uses RGTC for GL_COMPRESSED_RED&  GL_COMPRESSED_RG
FXT for GL_COMPRESSED_RGB&  GL_COMPRESSED_RGBA


I wonder if that produces correct results.  There are lots of limitations
with those formats...

I noticed failures in case of GL_TEXTURE_3D with GL_COMPRESSED_RGBA
format. Failures disappeared when I made changes to pick an uncompressed
format.
   I verified this by allowing generic texture


compression formats for
GL_TEXTURE_1D in piglit copyteximage test case and reverting the
changes due to
this patch on mesa. Is this an issue only on swrast?



That's what the bug reported, don't recall testing other drivers.



Returning
GL_INVALID_ENUM
error for generic texture compression formats in glTexImage1D() and
glCopyTexImage1D() doesn't seem to follow the OpenGL
specification. Spec does allow
GL_INVALID_ENUM error for a similar scenario in case
of glCompressedTexImage1D().
Please correct me if I'm missing something.



I guess I'd like to check what either NVIDIA or AMD do in some of these
cases.

AFAIK, the various DXT, LATC, etc compressed formats are only spec'd to
work
with 2D textures, not 1D.  Since 1D textures are generally pretty small
to
start with, there's not a lot of value in compressed 1D textures.  Plus,
if
a compressed 1D texture uses 4 or 8 bytes to store a 4x1 block of texels,
there's only 50% or 0% memory savings with compression.


Most of the specific formats are specified to only work with 2D textures.

 From EXT_texture_compression_s3tc (note that 1D variants of TexImage,
CopyTexImage, etc are missing):

     Accepted by the<internalformat>  parameter of TexImage2D,
CopyTexImage2D,
     and CompressedTexImage2DARB and the<format>  parameter of
     CompressedTexSubImage2DARB:

         COMPRESSED_RGB_S3TC_DXT1_EXT                   0x83F0
         COMPRESSED_RGBA_S3TC_DXT1_EXT                  0x83F1
         COMPRESSED_RGBA_S3TC_DXT3_EXT                  0x83F2
         COMPRESSED_RGBA_S3TC_DXT5_EXT                  0x83F3

Same for 3DFX_texture_compression_FXT1:

     Accepted by the<internalformat>  parameter of TexImage2D,
     CopyTexImage2D, TexImage3D, CopyTexImage3D, and by the
     <internalformat>  and<format>  parameters of
     CompressedTexImage2D_ARB, CompressedTexSubImage2D_ARB,
     CompressedTexImage3D_ARB, CompressedTexSubImage3D_ARB:

         COMPRESSED_RGB_FXT1_3DFX                          0x86B0
         COMPRESSED_RGBA_FXT1_3DFX                         0x86B1

However, the generic formats should be accepted.  From
ARB_texture_compression:

     Accepted by the<internalformat>  parameter of TexImage1D, TexImage2D,
     TexImage3D, CopyTexImage1D, and CopyTexImage2D:

         COMPRESSED_ALPHA_ARB                            0x84E9
         COMPRESSED_LUMINANCE_ARB                        0x84EA
         COMPRESSED_LUMINANCE_ALPHA_ARB                  0x84EB
         COMPRESSED_INTENSITY_ARB                        0x84EC
         COMPRESSED_RGB_ARB                              0x84ED
         COMPRESSED_RGBA_ARB                             0x84EE

When the application specifies a generic format, the driver is always free
to pick an uncompressed format.  Many Mesa drivers (primarily the ones we
removed a couple years ago) have done that for ages. :)

ok. I will make changes to allow these formats for 1D/3D textures as well and
and pick a matching uncompressed format internally.
Do we need any special treatment for 2D textures? I mean picking a matching
compressed format as they are well supported on 2D targets.

Feel free to revert a36581ccc06693231011c3fe136207e73191b1ce.

I think we'll ultimately want to add a texture target parameter to the ctx->Driver.ChooseTextureFormat() function so that the chooser code can do the right thing when internalFormat is a generic compressed format.

BTW, I've just found some other glTexImage error checking mistakes. Patch to follow...

-Brian
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to