Module: Mesa Branch: main Commit: 7f0e213a577ca916f32f27ace3fcc3346a8eec77 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=7f0e213a577ca916f32f27ace3fcc3346a8eec77
Author: Mike Blumenkrantz <[email protected]> Date: Wed May 26 11:25:21 2021 -0400 zink: NV_compute_shader_derivatives nothing complicated here Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12120> --- src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c | 8 ++++++++ src/gallium/drivers/zink/zink_device_info.py | 4 ++++ src/gallium/drivers/zink/zink_screen.c | 3 +++ 3 files changed, 15 insertions(+) diff --git a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c index 53b5eee1838..342d52182ef 100644 --- a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c +++ b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c @@ -4654,6 +4654,14 @@ nir_to_spirv(struct nir_shader *s, const struct zink_shader_info *sinfo, uint32_ spirv_builder_emit_name(&ctx.builder, ctx.local_group_size_var, "gl_LocalGroupSize"); spirv_builder_emit_builtin(&ctx.builder, ctx.local_group_size_var, SpvBuiltInWorkgroupSize); } + if (s->info.cs.derivative_group) { + SpvCapability caps[] = { 0, SpvCapabilityComputeDerivativeGroupQuadsNV, SpvCapabilityComputeDerivativeGroupLinearNV }; + SpvExecutionMode modes[] = { 0, SpvExecutionModeDerivativeGroupQuadsNV, SpvExecutionModeDerivativeGroupLinearNV }; + spirv_builder_emit_extension(&ctx.builder, "SPV_NV_compute_shader_derivatives"); + spirv_builder_emit_cap(&ctx.builder, caps[s->info.cs.derivative_group]); + spirv_builder_emit_exec_mode(&ctx.builder, entry_point, modes[s->info.cs.derivative_group]); + ctx.explicit_lod = false; + } break; default: break; diff --git a/src/gallium/drivers/zink/zink_device_info.py b/src/gallium/drivers/zink/zink_device_info.py index 7fd3fdcb86b..ea9287d579c 100644 --- a/src/gallium/drivers/zink/zink_device_info.py +++ b/src/gallium/drivers/zink/zink_device_info.py @@ -224,6 +224,10 @@ EXTENSIONS = [ alias="portability_subset", features=True, guard=True), + Extension("VK_NV_compute_shader_derivatives", + alias="shader_derivs", + features=True, + conditions=["$feats.computeDerivativeGroupQuads", "$feats.computeDerivativeGroupLinear"]), Extension("VK_KHR_timeline_semaphore", alias="timeline", features=True), diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c index 8e1b01abf28..ca0be9510cd 100644 --- a/src/gallium/drivers/zink/zink_screen.c +++ b/src/gallium/drivers/zink/zink_screen.c @@ -618,6 +618,9 @@ zink_get_param(struct pipe_screen *pscreen, enum pipe_cap param) case PIPE_CAP_MAX_VERTEX_STREAMS: return screen->info.tf_props.maxTransformFeedbackStreams; + case PIPE_CAP_COMPUTE_SHADER_DERIVATIVES: + return screen->info.have_NV_compute_shader_derivatives; + case PIPE_CAP_INT64: case PIPE_CAP_INT64_DIVMOD: case PIPE_CAP_DOUBLES:
