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:

committed by
Marge Bot

parent
54cba7d297
commit
38c953e287
@@ -557,6 +557,7 @@ The integer capabilities:
|
||||
A driver might rely on the input mapping that was defined with the original
|
||||
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_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
|
||||
execution. 0 = throttling is disabled.
|
||||
* ``PIPE_CAP_DMABUF``: Whether Linux DMABUF handles are supported by
|
||||
|
@@ -361,6 +361,7 @@ u_pipe_screen_get_param_defaults(struct pipe_screen *pscreen,
|
||||
case PIPE_CAP_TGSI_ATOMFADD:
|
||||
case PIPE_CAP_TGSI_SKIP_SHRINK_IO_ARRAYS:
|
||||
case PIPE_CAP_IMAGE_LOAD_FORMATTED:
|
||||
case PIPE_CAP_IMAGE_STORE_FORMATTED:
|
||||
case PIPE_CAP_PREFER_COMPUTE_FOR_MULTIMEDIA:
|
||||
case PIPE_CAP_FRAGMENT_SHADER_INTERLOCK:
|
||||
case PIPE_CAP_CS_DERIVED_SYSTEM_VALUES_SUPPORTED:
|
||||
|
@@ -235,6 +235,7 @@ crocus_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||
case PIPE_CAP_COMPUTE_SHADER_DERIVATIVES:
|
||||
case PIPE_CAP_DOUBLES:
|
||||
case PIPE_CAP_MEMOBJ:
|
||||
case PIPE_CAP_IMAGE_STORE_FORMATTED:
|
||||
return devinfo->ver >= 7;
|
||||
case PIPE_CAP_QUERY_BUFFER_OBJECT:
|
||||
case PIPE_CAP_ROBUST_BUFFER_ACCESS_BEHAVIOR:
|
||||
|
@@ -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);
|
||||
|
||||
case PIPE_CAP_TEXTURE_MULTISAMPLE:
|
||||
case PIPE_CAP_IMAGE_STORE_FORMATTED:
|
||||
return is_a5xx(screen) || is_a6xx(screen);
|
||||
|
||||
case PIPE_CAP_SURFACE_SAMPLE_COUNT:
|
||||
|
@@ -258,6 +258,7 @@ iris_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||
case PIPE_CAP_MEMOBJ:
|
||||
case PIPE_CAP_MIXED_COLOR_DEPTH_BITS:
|
||||
case PIPE_CAP_FENCE_SIGNAL:
|
||||
case PIPE_CAP_IMAGE_STORE_FORMATTED:
|
||||
return true;
|
||||
case PIPE_CAP_FBFETCH:
|
||||
return BRW_MAX_DRAW_BUFFERS;
|
||||
|
@@ -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_FS_FACE_IS_INTEGER_SYSVAL:
|
||||
case PIPE_CAP_RESOURCE_FROM_USER_MEMORY:
|
||||
case PIPE_CAP_IMAGE_STORE_FORMATTED:
|
||||
return 1;
|
||||
#ifdef PIPE_MEMORY_FD
|
||||
case PIPE_CAP_MEMOBJ:
|
||||
|
@@ -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_TGSI_DIV:
|
||||
case PIPE_CAP_TGSI_ATOMINC_WRAP:
|
||||
case PIPE_CAP_IMAGE_STORE_FORMATTED:
|
||||
return 0;
|
||||
|
||||
case PIPE_CAP_MAX_GS_INVOCATIONS:
|
||||
|
@@ -263,6 +263,7 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||
case PIPE_CAP_CLEAR_SCISSORED:
|
||||
case PIPE_CAP_FRAMEBUFFER_NO_ATTACHMENT:
|
||||
case PIPE_CAP_COMPUTE:
|
||||
case PIPE_CAP_IMAGE_STORE_FORMATTED:
|
||||
return 1;
|
||||
case PIPE_CAP_TEXTURE_TRANSFER_MODES:
|
||||
return PIPE_TEXTURE_TRANSFER_BLIT;
|
||||
|
@@ -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_CLEAR_SCISSORED:
|
||||
case PIPE_CAP_GL_CLAMP:
|
||||
case PIPE_CAP_IMAGE_STORE_FORMATTED:
|
||||
return 1;
|
||||
case PIPE_CAP_TEXTURE_TRANSFER_MODES:
|
||||
return nouveau_screen(pscreen)->vram_domain & NOUVEAU_BO_VRAM ? PIPE_TEXTURE_TRANSFER_BLIT : 0;
|
||||
|
@@ -322,6 +322,9 @@ panfrost_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
||||
return modes;
|
||||
}
|
||||
|
||||
case PIPE_CAP_IMAGE_STORE_FORMATTED:
|
||||
return 1;
|
||||
|
||||
default:
|
||||
return u_pipe_screen_get_param_defaults(screen, param);
|
||||
}
|
||||
|
@@ -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_ARRAY_COMPONENTS:
|
||||
case PIPE_CAP_QUERY_BUFFER_OBJECT:
|
||||
case PIPE_CAP_IMAGE_STORE_FORMATTED:
|
||||
return family >= CHIP_CEDAR ? 1 : 0;
|
||||
case PIPE_CAP_MAX_TEXTURE_GATHER_COMPONENTS:
|
||||
return family >= CHIP_CEDAR ? 4 : 0;
|
||||
|
@@ -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_COMPUTE_SHADER_DERIVATIVES:
|
||||
case PIPE_CAP_TGSI_ATOMINC_WRAP:
|
||||
case PIPE_CAP_IMAGE_STORE_FORMATTED:
|
||||
return 1;
|
||||
|
||||
case PIPE_CAP_TEXTURE_TRANSFER_MODES:
|
||||
|
@@ -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_QUERY_SO_OVERFLOW:
|
||||
case PIPE_CAP_STREAM_OUTPUT_PAUSE_RESUME:
|
||||
case PIPE_CAP_IMAGE_STORE_FORMATTED:
|
||||
return 1;
|
||||
|
||||
case PIPE_CAP_SHAREABLE_SHADERS:
|
||||
|
@@ -282,6 +282,9 @@ v3d_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||
case PIPE_CAP_SUPPORTED_PRIM_MODES_WITH_RESTART:
|
||||
return screen->prim_types;
|
||||
|
||||
case PIPE_CAP_IMAGE_STORE_FORMATTED:
|
||||
return false;
|
||||
|
||||
default:
|
||||
return u_pipe_screen_get_param_defaults(pscreen, param);
|
||||
}
|
||||
|
@@ -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_TWO_SIDED_COLOR:
|
||||
case PIPE_CAP_TEXRECT:
|
||||
case PIPE_CAP_IMAGE_STORE_FORMATTED:
|
||||
return 0;
|
||||
|
||||
case PIPE_CAP_SUPPORTED_PRIM_MODES:
|
||||
|
@@ -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;
|
||||
case PIPE_CAP_SURFACE_SAMPLE_COUNT:
|
||||
return vscreen->caps.caps.v2.capability_bits_v2 & VIRGL_CAP_V2_IMPLICIT_MSAA;
|
||||
case PIPE_CAP_IMAGE_STORE_FORMATTED:
|
||||
return 1;
|
||||
default:
|
||||
return u_pipe_screen_get_param_defaults(screen, param);
|
||||
}
|
||||
|
@@ -567,6 +567,9 @@ zink_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||
case PIPE_CAP_IMAGE_LOAD_FORMATTED:
|
||||
return screen->info.feats.features.shaderStorageImageReadWithoutFormat;
|
||||
|
||||
case PIPE_CAP_IMAGE_STORE_FORMATTED:
|
||||
return screen->info.feats.features.shaderStorageImageWriteWithoutFormat;
|
||||
|
||||
case PIPE_CAP_MIXED_FRAMEBUFFER_SIZES:
|
||||
return 1;
|
||||
|
||||
|
@@ -437,7 +437,7 @@ VKAPI_ATTR void VKAPI_CALL lvp_GetPhysicalDeviceFeatures(
|
||||
.shaderStorageBufferArrayDynamicIndexing = true,
|
||||
.shaderStorageImageArrayDynamicIndexing = indirect,
|
||||
.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,
|
||||
.shaderCullDistance = (pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_CULL_DISTANCE) == 1),
|
||||
.shaderFloat64 = (pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_DOUBLES) == 1),
|
||||
|
@@ -941,6 +941,7 @@ enum pipe_cap
|
||||
PIPE_CAP_COMPUTE_SHADER_DERIVATIVES,
|
||||
PIPE_CAP_TGSI_SKIP_SHRINK_IO_ARRAYS,
|
||||
PIPE_CAP_IMAGE_LOAD_FORMATTED,
|
||||
PIPE_CAP_IMAGE_STORE_FORMATTED,
|
||||
PIPE_CAP_THROTTLE,
|
||||
PIPE_CAP_DMABUF,
|
||||
PIPE_CAP_PREFER_COMPUTE_FOR_MULTIMEDIA,
|
||||
|
Reference in New Issue
Block a user