gallium: Flip the default value of PIPE_CAP_SHAREABLE_SHADERS.
We should be exposing it in every driver, since it's required eventually to reduce jank. Make drivers have to explicitly opt out instead of opt in. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Marek Olšák <marek.olsak@amd.com> Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9088>
This commit is contained in:
@@ -306,7 +306,8 @@ The integer capabilities:
|
||||
selecting the interpolation weights with a conditional assignment
|
||||
in the shader.
|
||||
* ``PIPE_CAP_SHAREABLE_SHADERS``: Whether shader CSOs can be used by any
|
||||
pipe_context.
|
||||
pipe_context. Important for reducing jank at draw time by letting GL shaders
|
||||
linked in one thread be used in another thread without recompiling.
|
||||
* ``PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS``:
|
||||
Whether copying between compressed and plain formats is supported where
|
||||
a compressed block is copied to/from a plain pixel of the same size.
|
||||
|
@@ -226,7 +226,15 @@ u_pipe_screen_get_param_defaults(struct pipe_screen *pscreen,
|
||||
case PIPE_CAP_DEPTH_BOUNDS_TEST:
|
||||
case PIPE_CAP_TGSI_TXQS:
|
||||
case PIPE_CAP_FORCE_PERSAMPLE_INTERP:
|
||||
return 0;
|
||||
|
||||
/* All drivers should expose this cap, as it is required for applications to
|
||||
* be able to efficiently compile GL shaders from multiple threads during
|
||||
* load.
|
||||
*/
|
||||
case PIPE_CAP_SHAREABLE_SHADERS:
|
||||
return 1;
|
||||
|
||||
case PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS:
|
||||
case PIPE_CAP_CLEAR_TEXTURE:
|
||||
case PIPE_CAP_CLEAR_SCISSORED:
|
||||
|
@@ -259,9 +259,6 @@ d3d12_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||
case PIPE_CAP_TEXTURE_HALF_FLOAT_LINEAR:
|
||||
return 1;
|
||||
|
||||
case PIPE_CAP_SHAREABLE_SHADERS:
|
||||
return 1;
|
||||
|
||||
#if 0 /* TODO: Enable me. Enables GL_ARB_shader_storage_buffer_object */
|
||||
case PIPE_CAP_SHADER_BUFFER_OFFSET_ALIGNMENT:
|
||||
return screen->max_feature_level >= D3D_FEATURE_LEVEL_10_0;
|
||||
|
@@ -155,7 +155,6 @@ etna_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||
case PIPE_CAP_MIXED_COLOR_DEPTH_BITS:
|
||||
case PIPE_CAP_MIXED_FRAMEBUFFER_SIZES:
|
||||
case PIPE_CAP_STRING_MARKER:
|
||||
case PIPE_CAP_SHAREABLE_SHADERS:
|
||||
return 1;
|
||||
case PIPE_CAP_NATIVE_FENCE_FD:
|
||||
return screen->drm_version >= ETNA_DRM_VERSION_FENCE_FD;
|
||||
|
@@ -226,6 +226,12 @@ i915_get_param(struct pipe_screen *screen, enum pipe_cap cap)
|
||||
case PIPE_CAP_ALLOW_MAPPED_BUFFERS_DURING_EXECUTION:
|
||||
return 0;
|
||||
|
||||
case PIPE_CAP_SHAREABLE_SHADERS:
|
||||
/* Can't expose shareable shaders because the draw shaders reference the
|
||||
* draw module's state, which is per-context.
|
||||
*/
|
||||
return 0;
|
||||
|
||||
case PIPE_CAP_MAX_GS_INVOCATIONS:
|
||||
return 32;
|
||||
|
||||
|
@@ -260,7 +260,6 @@ iris_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||
case PIPE_CAP_NATIVE_FENCE_FD:
|
||||
case PIPE_CAP_MIXED_COLOR_DEPTH_BITS:
|
||||
case PIPE_CAP_FENCE_SIGNAL:
|
||||
case PIPE_CAP_SHAREABLE_SHADERS:
|
||||
return true;
|
||||
case PIPE_CAP_FBFETCH:
|
||||
return BRW_MAX_DRAW_BUFFERS;
|
||||
|
@@ -143,6 +143,7 @@ lima_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||
return 0;
|
||||
|
||||
case PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER:
|
||||
case PIPE_CAP_SHAREABLE_SHADERS:
|
||||
return 0;
|
||||
|
||||
case PIPE_CAP_ALPHA_TEST:
|
||||
|
@@ -324,6 +324,13 @@ llvmpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
||||
case PIPE_CAP_GLSL_OPTIMIZE_CONSERVATIVELY:
|
||||
case PIPE_CAP_ALLOW_MAPPED_BUFFERS_DURING_EXECUTION:
|
||||
return 0;
|
||||
|
||||
case PIPE_CAP_SHAREABLE_SHADERS:
|
||||
/* Can't expose shareable shaders because the draw shaders reference the
|
||||
* draw module's state, which is per-context.
|
||||
*/
|
||||
return 0;
|
||||
|
||||
case PIPE_CAP_MAX_GS_INVOCATIONS:
|
||||
return 32;
|
||||
case PIPE_CAP_MAX_SHADER_BUFFER_SIZE:
|
||||
|
@@ -183,8 +183,8 @@ nv30_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||
case PIPE_CAP_TEXTURE_HALF_FLOAT_LINEAR:
|
||||
case PIPE_CAP_TGSI_TXQS:
|
||||
case PIPE_CAP_FORCE_PERSAMPLE_INTERP:
|
||||
case PIPE_CAP_SHAREABLE_SHADERS:
|
||||
case PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS:
|
||||
case PIPE_CAP_SHAREABLE_SHADERS:
|
||||
case PIPE_CAP_CLEAR_TEXTURE:
|
||||
case PIPE_CAP_DRAW_PARAMETERS:
|
||||
case PIPE_CAP_TGSI_PACK_HALF_FLOAT:
|
||||
|
@@ -217,7 +217,6 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||
case PIPE_CAP_DEPTH_BOUNDS_TEST:
|
||||
case PIPE_CAP_TGSI_TXQS:
|
||||
case PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS:
|
||||
case PIPE_CAP_SHAREABLE_SHADERS:
|
||||
case PIPE_CAP_CLEAR_TEXTURE:
|
||||
case PIPE_CAP_TGSI_FS_FACE_IS_INTEGER_SYSVAL:
|
||||
case PIPE_CAP_INVALIDATE_BUFFER:
|
||||
|
@@ -261,7 +261,6 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||
case PIPE_CAP_TGSI_TXQS:
|
||||
case PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS:
|
||||
case PIPE_CAP_FORCE_PERSAMPLE_INTERP:
|
||||
case PIPE_CAP_SHAREABLE_SHADERS:
|
||||
case PIPE_CAP_CLEAR_TEXTURE:
|
||||
case PIPE_CAP_DRAW_PARAMETERS:
|
||||
case PIPE_CAP_TGSI_PACK_HALF_FLOAT:
|
||||
|
@@ -283,6 +283,9 @@ panfrost_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
||||
case PIPE_CAP_NIR_IMAGES_AS_DEREF:
|
||||
return 0;
|
||||
|
||||
case PIPE_CAP_SHAREABLE_SHADERS:
|
||||
return 0;
|
||||
|
||||
default:
|
||||
return u_pipe_screen_get_param_defaults(screen, param);
|
||||
}
|
||||
|
@@ -175,6 +175,8 @@ static int r300_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
|
||||
|
||||
case PIPE_CAP_GLSL_OPTIMIZE_CONSERVATIVELY:
|
||||
return 0;
|
||||
case PIPE_CAP_SHAREABLE_SHADERS:
|
||||
return 0;
|
||||
|
||||
case PIPE_CAP_MAX_GS_INVOCATIONS:
|
||||
return 32;
|
||||
|
@@ -322,6 +322,9 @@ static int r600_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
|
||||
case PIPE_CAP_NIR_ATOMICS_AS_DEREF:
|
||||
return 1;
|
||||
|
||||
case PIPE_CAP_SHAREABLE_SHADERS:
|
||||
return 0;
|
||||
|
||||
case PIPE_CAP_MAX_TEXTURE_UPLOAD_MEMORY_BUDGET:
|
||||
/* Optimal number for good TexSubImage performance on Polaris10. */
|
||||
return 64 * 1024 * 1024;
|
||||
|
@@ -105,7 +105,6 @@ static int si_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||
case PIPE_CAP_CONDITIONAL_RENDER_INVERTED:
|
||||
case PIPE_CAP_TEXTURE_FLOAT_LINEAR:
|
||||
case PIPE_CAP_TEXTURE_HALF_FLOAT_LINEAR:
|
||||
case PIPE_CAP_SHAREABLE_SHADERS:
|
||||
case PIPE_CAP_DEPTH_BOUNDS_TEST:
|
||||
case PIPE_CAP_SAMPLER_VIEW_TARGET:
|
||||
case PIPE_CAP_TEXTURE_QUERY_LOD:
|
||||
|
@@ -245,6 +245,12 @@ softpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
||||
case PIPE_CAP_NIR_IMAGES_AS_DEREF:
|
||||
return 0;
|
||||
|
||||
case PIPE_CAP_SHAREABLE_SHADERS:
|
||||
/* Can't expose shareable shaders because the draw shaders reference the
|
||||
* draw module's state, which is per-context.
|
||||
*/
|
||||
return 0;
|
||||
|
||||
case PIPE_CAP_VENDOR_ID:
|
||||
return 0xFFFFFFFF;
|
||||
case PIPE_CAP_DEVICE_ID:
|
||||
|
@@ -366,6 +366,9 @@ svga_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
||||
case PIPE_CAP_BUFFER_MAP_PERSISTENT_COHERENT:
|
||||
return sws->have_coherent;
|
||||
|
||||
case PIPE_CAP_SHAREABLE_SHADERS:
|
||||
return 0;
|
||||
|
||||
case PIPE_CAP_PCI_GROUP:
|
||||
case PIPE_CAP_PCI_BUS:
|
||||
case PIPE_CAP_PCI_DEVICE:
|
||||
|
@@ -287,6 +287,9 @@ swr_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
||||
case PIPE_CAP_STREAM_OUTPUT_PAUSE_RESUME:
|
||||
return 1;
|
||||
|
||||
case PIPE_CAP_SHAREABLE_SHADERS:
|
||||
return 0;
|
||||
|
||||
/* MSAA support
|
||||
* If user has explicitly set max_sample_count = 1 (via SWR_MSAA_MAX_COUNT)
|
||||
* then disable all MSAA support and go back to old (FAKE_SW_MSAA) caps. */
|
||||
|
@@ -112,7 +112,6 @@ v3d_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||
case PIPE_CAP_VERTEX_COLOR_UNCLAMPED:
|
||||
case PIPE_CAP_BUFFER_MAP_PERSISTENT_COHERENT:
|
||||
case PIPE_CAP_NPOT_TEXTURES:
|
||||
case PIPE_CAP_SHAREABLE_SHADERS:
|
||||
case PIPE_CAP_BLEND_EQUATION_SEPARATE:
|
||||
case PIPE_CAP_TEXTURE_MULTISAMPLE:
|
||||
case PIPE_CAP_TEXTURE_SWIZZLE:
|
||||
|
@@ -142,7 +142,6 @@ vc4_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||
case PIPE_CAP_FRAGMENT_COLOR_CLAMPED:
|
||||
case PIPE_CAP_BUFFER_MAP_PERSISTENT_COHERENT:
|
||||
case PIPE_CAP_NPOT_TEXTURES:
|
||||
case PIPE_CAP_SHAREABLE_SHADERS:
|
||||
case PIPE_CAP_BLEND_EQUATION_SEPARATE:
|
||||
case PIPE_CAP_TEXTURE_MULTISAMPLE:
|
||||
case PIPE_CAP_TEXTURE_SWIZZLE:
|
||||
|
@@ -328,6 +328,8 @@ virgl_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
||||
(vscreen->caps.caps.v2.host_feature_check_version < 1);
|
||||
case PIPE_CAP_TGSI_SKIP_SHRINK_IO_ARRAYS:
|
||||
return vscreen->caps.caps.v2.capability_bits & VIRGL_CAP_INDIRECT_INPUT_ADDR;
|
||||
case PIPE_CAP_SHAREABLE_SHADERS:
|
||||
return 0;
|
||||
default:
|
||||
return u_pipe_screen_get_param_defaults(screen, param);
|
||||
}
|
||||
|
@@ -400,9 +400,6 @@ zink_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||
case PIPE_CAP_TEXTURE_HALF_FLOAT_LINEAR:
|
||||
return 1;
|
||||
|
||||
case PIPE_CAP_SHAREABLE_SHADERS:
|
||||
return 1;
|
||||
|
||||
case PIPE_CAP_SHADER_BUFFER_OFFSET_ALIGNMENT:
|
||||
return screen->info.props.limits.minStorageBufferOffsetAlignment;
|
||||
|
||||
|
Reference in New Issue
Block a user