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:
Mike Blumenkrantz
2020-12-11 18:56:46 -05:00
committed by Marge Bot
parent 1186fbcdf1
commit 55b57db84d
3 changed files with 13 additions and 2 deletions

View File

@@ -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");

View File

@@ -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),

View File

@@ -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: