From cfb37e738331a747b6458100ccd41a442021a33f Mon Sep 17 00:00:00 2001 From: Konstantin Seurer Date: Wed, 19 Apr 2023 23:00:40 +0200 Subject: [PATCH] llvmpipe: Add lp_storage_image_format_supported Reviewed-by: Dave Airlie Part-of: --- src/gallium/drivers/llvmpipe/lp_screen.c | 99 +++++++++++++++++--------------- src/gallium/drivers/llvmpipe/lp_screen.h | 4 ++ 2 files changed, 57 insertions(+), 46 deletions(-) diff --git a/src/gallium/drivers/llvmpipe/lp_screen.c b/src/gallium/drivers/llvmpipe/lp_screen.c index b6c3230..56b515d 100644 --- a/src/gallium/drivers/llvmpipe/lp_screen.c +++ b/src/gallium/drivers/llvmpipe/lp_screen.c @@ -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)) && diff --git a/src/gallium/drivers/llvmpipe/lp_screen.h b/src/gallium/drivers/llvmpipe/lp_screen.h index 41e3be7..82aeb3d 100644 --- a/src/gallium/drivers/llvmpipe/lp_screen.h +++ b/src/gallium/drivers/llvmpipe/lp_screen.h @@ -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 */ -- 2.7.4