From 2e29857bb6574b0f3505233b82adae1b3eeb8ff7 Mon Sep 17 00:00:00 2001 From: Erik Faye-Lund Date: Mon, 31 May 2021 17:41:12 +0200 Subject: [PATCH] llvmpipe: only report supported shader-image formats LLVMpipe has a rather limited implementation of shader-images, so let's limit what we report to the formats required by the spec, as all of those seems to work fine. Reviewed-By: Mike Blumenkrantz Reviewed-by: Roland Scheidegger Part-of: --- src/gallium/drivers/llvmpipe/lp_screen.c | 48 ++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/src/gallium/drivers/llvmpipe/lp_screen.c b/src/gallium/drivers/llvmpipe/lp_screen.c index 6146b121cea..74c0617a2c7 100644 --- a/src/gallium/drivers/llvmpipe/lp_screen.c +++ b/src/gallium/drivers/llvmpipe/lp_screen.c @@ -673,6 +673,54 @@ llvmpipe_is_format_supported( struct pipe_screen *_screen, return false; } + 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: + break; + + default: + return false; + } + } + if ((bind & (PIPE_BIND_RENDER_TARGET | PIPE_BIND_SAMPLER_VIEW)) && ((bind & PIPE_BIND_DISPLAY_TARGET) == 0)) { /* Disable all 3-channel formats, where channel size != 32 bits.