gallium: add new PIPE_CAP_IMAGE_STORE_FORMATTED

This capability is enabled for drivers supporting formatless image
writing in shader.

Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
Signed-off-by: Juan A. Suarez Romero <jasuarez@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13409>
This commit is contained in:
Juan A. Suarez Romero
2021-11-25 12:09:50 +01:00
committed by Marge Bot
parent 54cba7d297
commit 38c953e287
19 changed files with 26 additions and 1 deletions

View File

@@ -557,6 +557,7 @@ The integer capabilities:
A driver might rely on the input mapping that was defined with the original A driver might rely on the input mapping that was defined with the original
GLSL code. GLSL code.
* ``PIPE_CAP_IMAGE_LOAD_FORMATTED``: True if a format for image loads does not need to be specified in the shader IR * ``PIPE_CAP_IMAGE_LOAD_FORMATTED``: True if a format for image loads does not need to be specified in the shader IR
* ``PIPE_CAP_IMAGE_STORE_FORMATTED``: True if a format for image stores does not need to be specified in the shader IR
* ``PIPE_CAP_THROTTLE``: Whether or not gallium frontends should throttle pipe_context * ``PIPE_CAP_THROTTLE``: Whether or not gallium frontends should throttle pipe_context
execution. 0 = throttling is disabled. execution. 0 = throttling is disabled.
* ``PIPE_CAP_DMABUF``: Whether Linux DMABUF handles are supported by * ``PIPE_CAP_DMABUF``: Whether Linux DMABUF handles are supported by

View File

@@ -361,6 +361,7 @@ u_pipe_screen_get_param_defaults(struct pipe_screen *pscreen,
case PIPE_CAP_TGSI_ATOMFADD: case PIPE_CAP_TGSI_ATOMFADD:
case PIPE_CAP_TGSI_SKIP_SHRINK_IO_ARRAYS: case PIPE_CAP_TGSI_SKIP_SHRINK_IO_ARRAYS:
case PIPE_CAP_IMAGE_LOAD_FORMATTED: case PIPE_CAP_IMAGE_LOAD_FORMATTED:
case PIPE_CAP_IMAGE_STORE_FORMATTED:
case PIPE_CAP_PREFER_COMPUTE_FOR_MULTIMEDIA: case PIPE_CAP_PREFER_COMPUTE_FOR_MULTIMEDIA:
case PIPE_CAP_FRAGMENT_SHADER_INTERLOCK: case PIPE_CAP_FRAGMENT_SHADER_INTERLOCK:
case PIPE_CAP_CS_DERIVED_SYSTEM_VALUES_SUPPORTED: case PIPE_CAP_CS_DERIVED_SYSTEM_VALUES_SUPPORTED:

View File

@@ -235,6 +235,7 @@ crocus_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
case PIPE_CAP_COMPUTE_SHADER_DERIVATIVES: case PIPE_CAP_COMPUTE_SHADER_DERIVATIVES:
case PIPE_CAP_DOUBLES: case PIPE_CAP_DOUBLES:
case PIPE_CAP_MEMOBJ: case PIPE_CAP_MEMOBJ:
case PIPE_CAP_IMAGE_STORE_FORMATTED:
return devinfo->ver >= 7; return devinfo->ver >= 7;
case PIPE_CAP_QUERY_BUFFER_OBJECT: case PIPE_CAP_QUERY_BUFFER_OBJECT:
case PIPE_CAP_ROBUST_BUFFER_ACCESS_BEHAVIOR: case PIPE_CAP_ROBUST_BUFFER_ACCESS_BEHAVIOR:

View File

@@ -268,6 +268,7 @@ fd_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
return !fd_screen_get_param(pscreen, PIPE_CAP_TEXTURE_MULTISAMPLE); return !fd_screen_get_param(pscreen, PIPE_CAP_TEXTURE_MULTISAMPLE);
case PIPE_CAP_TEXTURE_MULTISAMPLE: case PIPE_CAP_TEXTURE_MULTISAMPLE:
case PIPE_CAP_IMAGE_STORE_FORMATTED:
return is_a5xx(screen) || is_a6xx(screen); return is_a5xx(screen) || is_a6xx(screen);
case PIPE_CAP_SURFACE_SAMPLE_COUNT: case PIPE_CAP_SURFACE_SAMPLE_COUNT:

View File

@@ -258,6 +258,7 @@ iris_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
case PIPE_CAP_MEMOBJ: case PIPE_CAP_MEMOBJ:
case PIPE_CAP_MIXED_COLOR_DEPTH_BITS: case PIPE_CAP_MIXED_COLOR_DEPTH_BITS:
case PIPE_CAP_FENCE_SIGNAL: case PIPE_CAP_FENCE_SIGNAL:
case PIPE_CAP_IMAGE_STORE_FORMATTED:
return true; return true;
case PIPE_CAP_FBFETCH: case PIPE_CAP_FBFETCH:
return BRW_MAX_DRAW_BUFFERS; return BRW_MAX_DRAW_BUFFERS;

View File

@@ -347,6 +347,7 @@ llvmpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
case PIPE_CAP_TGSI_TG4_COMPONENT_IN_SWIZZLE: case PIPE_CAP_TGSI_TG4_COMPONENT_IN_SWIZZLE:
case PIPE_CAP_TGSI_FS_FACE_IS_INTEGER_SYSVAL: case PIPE_CAP_TGSI_FS_FACE_IS_INTEGER_SYSVAL:
case PIPE_CAP_RESOURCE_FROM_USER_MEMORY: case PIPE_CAP_RESOURCE_FROM_USER_MEMORY:
case PIPE_CAP_IMAGE_STORE_FORMATTED:
return 1; return 1;
#ifdef PIPE_MEMORY_FD #ifdef PIPE_MEMORY_FD
case PIPE_CAP_MEMOBJ: case PIPE_CAP_MEMOBJ:

View File

@@ -256,6 +256,7 @@ nv30_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
case PIPE_CAP_IMAGE_LOAD_FORMATTED: case PIPE_CAP_IMAGE_LOAD_FORMATTED:
case PIPE_CAP_TGSI_DIV: case PIPE_CAP_TGSI_DIV:
case PIPE_CAP_TGSI_ATOMINC_WRAP: case PIPE_CAP_TGSI_ATOMINC_WRAP:
case PIPE_CAP_IMAGE_STORE_FORMATTED:
return 0; return 0;
case PIPE_CAP_MAX_GS_INVOCATIONS: case PIPE_CAP_MAX_GS_INVOCATIONS:

View File

@@ -263,6 +263,7 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
case PIPE_CAP_CLEAR_SCISSORED: case PIPE_CAP_CLEAR_SCISSORED:
case PIPE_CAP_FRAMEBUFFER_NO_ATTACHMENT: case PIPE_CAP_FRAMEBUFFER_NO_ATTACHMENT:
case PIPE_CAP_COMPUTE: case PIPE_CAP_COMPUTE:
case PIPE_CAP_IMAGE_STORE_FORMATTED:
return 1; return 1;
case PIPE_CAP_TEXTURE_TRANSFER_MODES: case PIPE_CAP_TEXTURE_TRANSFER_MODES:
return PIPE_TEXTURE_TRANSFER_BLIT; return PIPE_TEXTURE_TRANSFER_BLIT;

View File

@@ -312,6 +312,7 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
case PIPE_CAP_PACKED_STREAM_OUTPUT: case PIPE_CAP_PACKED_STREAM_OUTPUT:
case PIPE_CAP_CLEAR_SCISSORED: case PIPE_CAP_CLEAR_SCISSORED:
case PIPE_CAP_GL_CLAMP: case PIPE_CAP_GL_CLAMP:
case PIPE_CAP_IMAGE_STORE_FORMATTED:
return 1; return 1;
case PIPE_CAP_TEXTURE_TRANSFER_MODES: case PIPE_CAP_TEXTURE_TRANSFER_MODES:
return nouveau_screen(pscreen)->vram_domain & NOUVEAU_BO_VRAM ? PIPE_TEXTURE_TRANSFER_BLIT : 0; return nouveau_screen(pscreen)->vram_domain & NOUVEAU_BO_VRAM ? PIPE_TEXTURE_TRANSFER_BLIT : 0;

View File

@@ -322,6 +322,9 @@ panfrost_get_param(struct pipe_screen *screen, enum pipe_cap param)
return modes; return modes;
} }
case PIPE_CAP_IMAGE_STORE_FORMATTED:
return 1;
default: default:
return u_pipe_screen_get_param_defaults(screen, param); return u_pipe_screen_get_param_defaults(screen, param);
} }

View File

@@ -387,6 +387,7 @@ static int r600_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
case PIPE_CAP_TGSI_CLOCK: case PIPE_CAP_TGSI_CLOCK:
case PIPE_CAP_TGSI_ARRAY_COMPONENTS: case PIPE_CAP_TGSI_ARRAY_COMPONENTS:
case PIPE_CAP_QUERY_BUFFER_OBJECT: case PIPE_CAP_QUERY_BUFFER_OBJECT:
case PIPE_CAP_IMAGE_STORE_FORMATTED:
return family >= CHIP_CEDAR ? 1 : 0; return family >= CHIP_CEDAR ? 1 : 0;
case PIPE_CAP_MAX_TEXTURE_GATHER_COMPONENTS: case PIPE_CAP_MAX_TEXTURE_GATHER_COMPONENTS:
return family >= CHIP_CEDAR ? 4 : 0; return family >= CHIP_CEDAR ? 4 : 0;

View File

@@ -161,6 +161,7 @@ static int si_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
case PIPE_CAP_PREFER_REAL_BUFFER_IN_CONSTBUF0: case PIPE_CAP_PREFER_REAL_BUFFER_IN_CONSTBUF0:
case PIPE_CAP_COMPUTE_SHADER_DERIVATIVES: case PIPE_CAP_COMPUTE_SHADER_DERIVATIVES:
case PIPE_CAP_TGSI_ATOMINC_WRAP: case PIPE_CAP_TGSI_ATOMINC_WRAP:
case PIPE_CAP_IMAGE_STORE_FORMATTED:
return 1; return 1;
case PIPE_CAP_TEXTURE_TRANSFER_MODES: case PIPE_CAP_TEXTURE_TRANSFER_MODES:

View File

@@ -285,6 +285,7 @@ swr_get_param(struct pipe_screen *screen, enum pipe_cap param)
case PIPE_CAP_TGSI_TG4_COMPONENT_IN_SWIZZLE: case PIPE_CAP_TGSI_TG4_COMPONENT_IN_SWIZZLE:
case PIPE_CAP_QUERY_SO_OVERFLOW: case PIPE_CAP_QUERY_SO_OVERFLOW:
case PIPE_CAP_STREAM_OUTPUT_PAUSE_RESUME: case PIPE_CAP_STREAM_OUTPUT_PAUSE_RESUME:
case PIPE_CAP_IMAGE_STORE_FORMATTED:
return 1; return 1;
case PIPE_CAP_SHAREABLE_SHADERS: case PIPE_CAP_SHAREABLE_SHADERS:

View File

@@ -282,6 +282,9 @@ v3d_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
case PIPE_CAP_SUPPORTED_PRIM_MODES_WITH_RESTART: case PIPE_CAP_SUPPORTED_PRIM_MODES_WITH_RESTART:
return screen->prim_types; return screen->prim_types;
case PIPE_CAP_IMAGE_STORE_FORMATTED:
return false;
default: default:
return u_pipe_screen_get_param_defaults(pscreen, param); return u_pipe_screen_get_param_defaults(pscreen, param);
} }

View File

@@ -202,6 +202,7 @@ vc4_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
case PIPE_CAP_VERTEX_COLOR_CLAMPED: case PIPE_CAP_VERTEX_COLOR_CLAMPED:
case PIPE_CAP_TWO_SIDED_COLOR: case PIPE_CAP_TWO_SIDED_COLOR:
case PIPE_CAP_TEXRECT: case PIPE_CAP_TEXRECT:
case PIPE_CAP_IMAGE_STORE_FORMATTED:
return 0; return 0;
case PIPE_CAP_SUPPORTED_PRIM_MODES: case PIPE_CAP_SUPPORTED_PRIM_MODES:

View File

@@ -351,6 +351,8 @@ virgl_get_param(struct pipe_screen *screen, enum pipe_cap param)
return vscreen->caps.caps.v2.capability_bits_v2 & VIRGL_CAP_V2_STRING_MARKER; return vscreen->caps.caps.v2.capability_bits_v2 & VIRGL_CAP_V2_STRING_MARKER;
case PIPE_CAP_SURFACE_SAMPLE_COUNT: case PIPE_CAP_SURFACE_SAMPLE_COUNT:
return vscreen->caps.caps.v2.capability_bits_v2 & VIRGL_CAP_V2_IMPLICIT_MSAA; return vscreen->caps.caps.v2.capability_bits_v2 & VIRGL_CAP_V2_IMPLICIT_MSAA;
case PIPE_CAP_IMAGE_STORE_FORMATTED:
return 1;
default: default:
return u_pipe_screen_get_param_defaults(screen, param); return u_pipe_screen_get_param_defaults(screen, param);
} }

View File

@@ -567,6 +567,9 @@ zink_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
case PIPE_CAP_IMAGE_LOAD_FORMATTED: case PIPE_CAP_IMAGE_LOAD_FORMATTED:
return screen->info.feats.features.shaderStorageImageReadWithoutFormat; return screen->info.feats.features.shaderStorageImageReadWithoutFormat;
case PIPE_CAP_IMAGE_STORE_FORMATTED:
return screen->info.feats.features.shaderStorageImageWriteWithoutFormat;
case PIPE_CAP_MIXED_FRAMEBUFFER_SIZES: case PIPE_CAP_MIXED_FRAMEBUFFER_SIZES:
return 1; return 1;

View File

@@ -437,7 +437,7 @@ VKAPI_ATTR void VKAPI_CALL lvp_GetPhysicalDeviceFeatures(
.shaderStorageBufferArrayDynamicIndexing = true, .shaderStorageBufferArrayDynamicIndexing = true,
.shaderStorageImageArrayDynamicIndexing = indirect, .shaderStorageImageArrayDynamicIndexing = indirect,
.shaderStorageImageReadWithoutFormat = (pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_IMAGE_LOAD_FORMATTED) != 0), .shaderStorageImageReadWithoutFormat = (pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_IMAGE_LOAD_FORMATTED) != 0),
.shaderStorageImageWriteWithoutFormat = (min_shader_param(pdevice->pscreen, PIPE_SHADER_CAP_MAX_SHADER_IMAGES) != 0), .shaderStorageImageWriteWithoutFormat = (pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_IMAGE_STORE_FORMATTED) != 0),
.shaderClipDistance = true, .shaderClipDistance = true,
.shaderCullDistance = (pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_CULL_DISTANCE) == 1), .shaderCullDistance = (pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_CULL_DISTANCE) == 1),
.shaderFloat64 = (pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_DOUBLES) == 1), .shaderFloat64 = (pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_DOUBLES) == 1),

View File

@@ -941,6 +941,7 @@ enum pipe_cap
PIPE_CAP_COMPUTE_SHADER_DERIVATIVES, PIPE_CAP_COMPUTE_SHADER_DERIVATIVES,
PIPE_CAP_TGSI_SKIP_SHRINK_IO_ARRAYS, PIPE_CAP_TGSI_SKIP_SHRINK_IO_ARRAYS,
PIPE_CAP_IMAGE_LOAD_FORMATTED, PIPE_CAP_IMAGE_LOAD_FORMATTED,
PIPE_CAP_IMAGE_STORE_FORMATTED,
PIPE_CAP_THROTTLE, PIPE_CAP_THROTTLE,
PIPE_CAP_DMABUF, PIPE_CAP_DMABUF,
PIPE_CAP_PREFER_COMPUTE_FOR_MULTIMEDIA, PIPE_CAP_PREFER_COMPUTE_FOR_MULTIMEDIA,