zink: add vk/spirv caps/extension for shader LAYER variable
this is required if gl_Layer is used outside of GEOMETRY stage
Fixes: c77df59c9e
("zink: export PIPE_CAP_TGSI_VS_LAYER_VIEWPORT")
Reviewed-by: Dave Airlie <airlied@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9410>
This commit is contained in:

committed by
Marge Bot

parent
1186fbcdf1
commit
55b57db84d
@@ -3611,6 +3611,15 @@ nir_to_spirv(struct nir_shader *s, const struct zink_so_info *so_info,
|
||||
unreachable("invalid stage");
|
||||
}
|
||||
|
||||
if (s->info.stage != MESA_SHADER_GEOMETRY) {
|
||||
if (s->info.outputs_written & BITFIELD64_BIT(VARYING_SLOT_LAYER) ||
|
||||
s->info.inputs_read & BITFIELD64_BIT(VARYING_SLOT_LAYER)) {
|
||||
spirv_builder_emit_extension(&ctx.builder, "SPV_EXT_shader_viewport_index_layer");
|
||||
spirv_builder_emit_cap(&ctx.builder, SpvCapabilityShaderViewportIndexLayerEXT);
|
||||
spirv_builder_emit_cap(&ctx.builder, SpvCapabilityShaderLayer);
|
||||
}
|
||||
}
|
||||
|
||||
if (s->info.num_ssbos)
|
||||
spirv_builder_emit_extension(&ctx.builder, "SPV_KHR_storage_buffer_storage_class");
|
||||
|
||||
|
@@ -65,6 +65,7 @@ EXTENSIONS = [
|
||||
Extension("VK_KHR_external_memory"),
|
||||
Extension("VK_KHR_external_memory_fd"),
|
||||
Extension("VK_KHR_vulkan_memory_model"),
|
||||
Extension("VK_EXT_shader_viewport_index_layer"),
|
||||
Extension("VK_KHR_driver_properties",
|
||||
alias="driver",
|
||||
properties=True),
|
||||
|
@@ -413,8 +413,9 @@ zink_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||
return 1;
|
||||
|
||||
case PIPE_CAP_TGSI_VS_LAYER_VIEWPORT:
|
||||
return screen->info.feats12.shaderOutputLayer &&
|
||||
screen->info.feats12.shaderOutputViewportIndex;
|
||||
return screen->info.have_EXT_shader_viewport_index_layer ||
|
||||
(screen->info.feats12.shaderOutputLayer &&
|
||||
screen->info.feats12.shaderOutputViewportIndex);
|
||||
|
||||
case PIPE_CAP_TEXTURE_FLOAT_LINEAR:
|
||||
case PIPE_CAP_TEXTURE_HALF_FLOAT_LINEAR:
|
||||
|
Reference in New Issue
Block a user