r600g: Implement BPTC texture support
authorGlenn Kennard <glenn.kennard@gmail.com>
Wed, 13 Aug 2014 11:02:53 +0000 (13:02 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Thu, 14 Aug 2014 23:55:13 +0000 (01:55 +0200)
Requires Evergreen/Cayman

Signed-off-by: Glenn Kennard <glenn.kennard@gmail.com>
Signed-off-by: Marek Olšák <marek.olsak@amd.com>
docs/GL3.txt
docs/relnotes/10.3.html
src/gallium/drivers/r600/r600_state_common.c

index 9eba5257e817165a218d7eb6d8596351ac82a8e2..2c3fe2809256cdbb2693dc201e99d1937c5ffccd 100644 (file)
@@ -131,7 +131,7 @@ GL 4.1, GLSL 4.10:
 
 GL 4.2, GLSL 4.20:
 
-  GL_ARB_texture_compression_bptc                      DONE (i965, nvc0)
+  GL_ARB_texture_compression_bptc                      DONE (i965, nvc0, r600)
   GL_ARB_compressed_texture_pixel_storage              DONE (all drivers)
   GL_ARB_shader_atomic_counters                        DONE (i965)
   GL_ARB_texture_storage                               DONE (all drivers)
index 86cbabce869d59b055ed91813b2157d18918f070..8ae1ec8e1fdc1aa7981f6a8df5e2e09c830d1715 100644 (file)
@@ -64,7 +64,7 @@ Note: some of the new features are only available with certain drivers.
 <li>GL_ARB_gpu_shader5 on nvc0</li>
 <li>A new software rasterizer driver (kms_swrast_dri.so) that works with
 DRM drivers that don't have a full-fledged GEM (such as qxl or simpledrm)</li>
-<li>GL_ARB_texture_compression_bptc on i965/gen7+, nvc0</li>
+<li>GL_ARB_texture_compression_bptc on i965/gen7+, nvc0, r600/evergreen+</li>
 <li>Distribute the Khronos GL/glcorearb.h header file.
 </ul>
 
index 64a027797d176a4969be3fa56b6f9df5208f87a3..d29e137d511a6b08fce1e668cdd8726b49700736 100644 (file)
@@ -1971,6 +1971,30 @@ uint32_t r600_translate_texformat(struct pipe_screen *screen,
                }
        }
 
+       if (desc->layout == UTIL_FORMAT_LAYOUT_BPTC) {
+               if (!enable_s3tc)
+                       goto out_unknown;
+
+               if (rscreen->b.chip_class < EVERGREEN)
+                       goto out_unknown;
+
+               switch (format) {
+                       case PIPE_FORMAT_BPTC_RGBA_UNORM:
+                       case PIPE_FORMAT_BPTC_SRGBA:
+                               result = FMT_BC7;
+                               is_srgb_valid = TRUE;
+                               goto out_word4;
+                       case PIPE_FORMAT_BPTC_RGB_FLOAT:
+                               word4 |= sign_bit[0] | sign_bit[1] | sign_bit[2];
+                               /* fall through */
+                       case PIPE_FORMAT_BPTC_RGB_UFLOAT:
+                               result = FMT_BC6;
+                               goto out_word4;
+                       default:
+                               goto out_unknown;
+               }
+       }
+
        if (desc->layout == UTIL_FORMAT_LAYOUT_SUBSAMPLED) {
                switch (format) {
                case PIPE_FORMAT_R8G8_B8G8_UNORM: