llvmpipe: Add lp_storage_image_format_supported
authorKonstantin Seurer <konstantin.seurer@gmail.com>
Wed, 19 Apr 2023 21:00:40 +0000 (23:00 +0200)
committerMarge Bot <emma+marge@anholt.net>
Thu, 8 Jun 2023 06:07:37 +0000 (06:07 +0000)
Reviewed-by: Dave Airlie <airlied@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23515>

src/gallium/drivers/llvmpipe/lp_screen.c
src/gallium/drivers/llvmpipe/lp_screen.h

index b6c3230..56b515d 100644 (file)
@@ -672,6 +672,57 @@ llvmpipe_get_compiler_options(struct pipe_screen *screen,
 }
 
 
+bool
+lp_storage_image_format_supported(enum pipe_format format)
+{
+   switch (format) {
+   case PIPE_FORMAT_R32G32B32A32_FLOAT:
+   case PIPE_FORMAT_R16G16B16A16_FLOAT:
+   case PIPE_FORMAT_R32G32_FLOAT:
+   case PIPE_FORMAT_R16G16_FLOAT:
+   case PIPE_FORMAT_R11G11B10_FLOAT:
+   case PIPE_FORMAT_R32_FLOAT:
+   case PIPE_FORMAT_R16_FLOAT:
+   case PIPE_FORMAT_R32G32B32A32_UINT:
+   case PIPE_FORMAT_R16G16B16A16_UINT:
+   case PIPE_FORMAT_R10G10B10A2_UINT:
+   case PIPE_FORMAT_R8G8B8A8_UINT:
+   case PIPE_FORMAT_R32G32_UINT:
+   case PIPE_FORMAT_R16G16_UINT:
+   case PIPE_FORMAT_R8G8_UINT:
+   case PIPE_FORMAT_R32_UINT:
+   case PIPE_FORMAT_R16_UINT:
+   case PIPE_FORMAT_R8_UINT:
+   case PIPE_FORMAT_R32G32B32A32_SINT:
+   case PIPE_FORMAT_R16G16B16A16_SINT:
+   case PIPE_FORMAT_R8G8B8A8_SINT:
+   case PIPE_FORMAT_R32G32_SINT:
+   case PIPE_FORMAT_R16G16_SINT:
+   case PIPE_FORMAT_R8G8_SINT:
+   case PIPE_FORMAT_R32_SINT:
+   case PIPE_FORMAT_R16_SINT:
+   case PIPE_FORMAT_R8_SINT:
+   case PIPE_FORMAT_R16G16B16A16_UNORM:
+   case PIPE_FORMAT_R10G10B10A2_UNORM:
+   case PIPE_FORMAT_R8G8B8A8_UNORM:
+   case PIPE_FORMAT_R16G16_UNORM:
+   case PIPE_FORMAT_R8G8_UNORM:
+   case PIPE_FORMAT_R16_UNORM:
+   case PIPE_FORMAT_R8_UNORM:
+   case PIPE_FORMAT_R16G16B16A16_SNORM:
+   case PIPE_FORMAT_R8G8B8A8_SNORM:
+   case PIPE_FORMAT_R16G16_SNORM:
+   case PIPE_FORMAT_R8G8_SNORM:
+   case PIPE_FORMAT_R16_SNORM:
+   case PIPE_FORMAT_R8_SNORM:
+   case PIPE_FORMAT_B8G8R8A8_UNORM:
+      return true;
+   default:
+      return false;
+   }
+}
+
+
 /**
  * Query format support for creating a texture, drawing surface, etc.
  * \param format  the format to test
@@ -728,52 +779,8 @@ llvmpipe_is_format_supported(struct pipe_screen *_screen,
    }
 
    if (bind & PIPE_BIND_SHADER_IMAGE) {
-      switch (format) {
-         case PIPE_FORMAT_R32G32B32A32_FLOAT:
-         case PIPE_FORMAT_R16G16B16A16_FLOAT:
-         case PIPE_FORMAT_R32G32_FLOAT:
-         case PIPE_FORMAT_R16G16_FLOAT:
-         case PIPE_FORMAT_R11G11B10_FLOAT:
-         case PIPE_FORMAT_R32_FLOAT:
-         case PIPE_FORMAT_R16_FLOAT:
-         case PIPE_FORMAT_R32G32B32A32_UINT:
-         case PIPE_FORMAT_R16G16B16A16_UINT:
-         case PIPE_FORMAT_R10G10B10A2_UINT:
-         case PIPE_FORMAT_R8G8B8A8_UINT:
-         case PIPE_FORMAT_R32G32_UINT:
-         case PIPE_FORMAT_R16G16_UINT:
-         case PIPE_FORMAT_R8G8_UINT:
-         case PIPE_FORMAT_R32_UINT:
-         case PIPE_FORMAT_R16_UINT:
-         case PIPE_FORMAT_R8_UINT:
-         case PIPE_FORMAT_R32G32B32A32_SINT:
-         case PIPE_FORMAT_R16G16B16A16_SINT:
-         case PIPE_FORMAT_R8G8B8A8_SINT:
-         case PIPE_FORMAT_R32G32_SINT:
-         case PIPE_FORMAT_R16G16_SINT:
-         case PIPE_FORMAT_R8G8_SINT:
-         case PIPE_FORMAT_R32_SINT:
-         case PIPE_FORMAT_R16_SINT:
-         case PIPE_FORMAT_R8_SINT:
-         case PIPE_FORMAT_R16G16B16A16_UNORM:
-         case PIPE_FORMAT_R10G10B10A2_UNORM:
-         case PIPE_FORMAT_R8G8B8A8_UNORM:
-         case PIPE_FORMAT_R16G16_UNORM:
-         case PIPE_FORMAT_R8G8_UNORM:
-         case PIPE_FORMAT_R16_UNORM:
-         case PIPE_FORMAT_R8_UNORM:
-         case PIPE_FORMAT_R16G16B16A16_SNORM:
-         case PIPE_FORMAT_R8G8B8A8_SNORM:
-         case PIPE_FORMAT_R16G16_SNORM:
-         case PIPE_FORMAT_R8G8_SNORM:
-         case PIPE_FORMAT_R16_SNORM:
-         case PIPE_FORMAT_R8_SNORM:
-         case PIPE_FORMAT_B8G8R8A8_UNORM:
-            break;
-
-         default:
-            return false;
-      }
+      if (!lp_storage_image_format_supported(format))
+         return false;
    }
 
    if ((bind & (PIPE_BIND_RENDER_TARGET | PIPE_BIND_SAMPLER_VIEW)) &&
index 41e3be7..82aeb3d 100644 (file)
@@ -107,4 +107,8 @@ lp_get_constant_buffer_stride(struct pipe_screen *_screen)
 }
 
 
+bool
+lp_storage_image_format_supported(enum pipe_format format);
+
+
 #endif /* LP_SCREEN_H */