r600: Disable eight bit three channel formats
authorGert Wollny <gert.wollny@collabora.com>
Mon, 18 Nov 2019 10:57:00 +0000 (11:57 +0100)
committerGert Wollny <gert.wollny@collabora.com>
Tue, 26 Nov 2019 08:28:52 +0000 (09:28 +0100)
Commit 0899bf55 made some deqp-gles3 tests related to RGB8 PBOs fail
on R600 because it exposed PIPE_FORMAT_R8G8B8_UNORM and R600 doesn't
propely handle this. Disabling this format also for buffers fixes the
issue.

In addition, disabling also the related RGB8 integer formats for buffers
fixes some deqp-gles3 tests:

  dEQP-GLES3.functional.texture.specification.teximage2d_pbo.rgb8ui_cube
  dEQP-GLES3.functional.texture.specification.texsubimage2d_pbo.rgb8i_2d
  dEQP-GLES3.functional.texture.specification.texsubimage2d_pbo.rgb8i_cube
  dEQP-GLES3.functional.texture.specification.texsubimage2d_pbo.rgb8ui_2d
  dEQP-GLES3.functional.texture.specification.texsubimage2d_pbo.rgb8ui_cube
  dEQP-GLES3.functional.texture.specification.teximage3d_pbo.rgb8i_2d_array
  dEQP-GLES3.functional.texture.specification.teximage3d_pbo.rgb8i_3d
  dEQP-GLES3.functional.texture.specification.teximage3d_pbo.rgb8ui_2d_array
  dEQP-GLES3.functional.texture.specification.teximage3d_pbo.rgb8ui_3d
  dEQP-GLES3.functional.texture.specification.texsubimage3d_pbo.rgb8i_2d_array
  dEQP-GLES3.functional.texture.specification.texsubimage3d_pbo.rgb8i_3d
  dEQP-GLES3.functional.texture.specification.texsubimage3d_pbo.rgb8ui_2d_array
  dEQP-GLES3.functional.texture.specification.texsubimage3d_pbo.rgb8ui_3d

Fixes: 0899bf55
  st/mesa: Map MESA_FORMAT_RGB_UNORM8 <-> PIPE_FORMAT_R8G8B8_UNORM

Closes #2118

Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
src/gallium/drivers/r600/r600_formats.h

index df9d1367bff9913e6c24269fd4b005544759add2..6c94a24700bd6b39d609a93ea08a2854a8431fea 100644 (file)
@@ -115,6 +115,10 @@ static inline bool r600_is_vertex_format_supported(enum pipe_format format)
             desc->channel[i].type == UTIL_FORMAT_TYPE_UNSIGNED))
                return false;
 
+       /* No 8 bit 3 channel formats */
+       if (desc->channel[i].size == 8 && desc->nr_channels == 3)
+               return false;
+
        return true;
 }