vkd3d-shader: Enable SPV_EXT_shader_viewport_index_layer if necessary.

Signed-off-by: Philip Rebohle <philip.rebohle@tu-dortmund.de>
This commit is contained in:
Philip Rebohle 2020-04-03 15:02:57 +02:00 committed by Hans-Kristian Arntzen
parent c07f46f09c
commit 3ee4ab56d7
1 changed files with 9 additions and 0 deletions

View File

@ -1711,6 +1711,7 @@ enum vkd3d_spirv_extension
VKD3D_SPV_EXT_DEMOTE_TO_HELPER_INVOCATION = 0x00000002, VKD3D_SPV_EXT_DEMOTE_TO_HELPER_INVOCATION = 0x00000002,
VKD3D_SPV_EXT_DESCRIPTOR_INDEXING = 0x00000004, VKD3D_SPV_EXT_DESCRIPTOR_INDEXING = 0x00000004,
VKD3D_SPV_KHR_PHYSICAL_STORAGE_BUFFER = 0x00000008, VKD3D_SPV_KHR_PHYSICAL_STORAGE_BUFFER = 0x00000008,
VKD3D_SPV_EXT_SHADER_VIEWPORT_INDEX_LAYER = 0x00000010,
}; };
struct vkd3d_spirv_extension_info struct vkd3d_spirv_extension_info
@ -1724,6 +1725,7 @@ static const vkd3d_spirv_extensions[] =
{VKD3D_SPV_KHR_SHADER_DRAW_PARAMETERS, "SPV_KHR_shader_draw_parameters"}, {VKD3D_SPV_KHR_SHADER_DRAW_PARAMETERS, "SPV_KHR_shader_draw_parameters"},
{VKD3D_SPV_EXT_DEMOTE_TO_HELPER_INVOCATION, "SPV_EXT_demote_to_helper_invocation"}, {VKD3D_SPV_EXT_DEMOTE_TO_HELPER_INVOCATION, "SPV_EXT_demote_to_helper_invocation"},
{VKD3D_SPV_EXT_DESCRIPTOR_INDEXING, "SPV_EXT_descriptor_indexing"}, {VKD3D_SPV_EXT_DESCRIPTOR_INDEXING, "SPV_EXT_descriptor_indexing"},
{VKD3D_SPV_EXT_SHADER_VIEWPORT_INDEX_LAYER, "SPV_EXT_shader_viewport_index_layer"},
}; };
struct vkd3d_spirv_capability_extension_mapping struct vkd3d_spirv_capability_extension_mapping
@ -1738,6 +1740,7 @@ static const vkd3d_spirv_capability_extensions[] =
{SpvCapabilityDemoteToHelperInvocationEXT, VKD3D_SPV_EXT_DEMOTE_TO_HELPER_INVOCATION}, {SpvCapabilityDemoteToHelperInvocationEXT, VKD3D_SPV_EXT_DEMOTE_TO_HELPER_INVOCATION},
{SpvCapabilityRuntimeDescriptorArrayEXT, VKD3D_SPV_EXT_DESCRIPTOR_INDEXING}, {SpvCapabilityRuntimeDescriptorArrayEXT, VKD3D_SPV_EXT_DESCRIPTOR_INDEXING},
{SpvCapabilityShaderNonUniformEXT, VKD3D_SPV_EXT_DESCRIPTOR_INDEXING}, {SpvCapabilityShaderNonUniformEXT, VKD3D_SPV_EXT_DESCRIPTOR_INDEXING},
{SpvCapabilityShaderViewportIndexLayerEXT, VKD3D_SPV_EXT_SHADER_VIEWPORT_INDEX_LAYER},
}; };
static bool vkd3d_spirv_compile_module(struct vkd3d_spirv_builder *builder, static bool vkd3d_spirv_compile_module(struct vkd3d_spirv_builder *builder,
@ -3618,9 +3621,15 @@ static void vkd3d_dxbc_compiler_decorate_builtin(struct vkd3d_dxbc_compiler *com
break; break;
case SpvBuiltInLayer: case SpvBuiltInLayer:
vkd3d_spirv_enable_capability(builder, SpvCapabilityGeometry); vkd3d_spirv_enable_capability(builder, SpvCapabilityGeometry);
if (compiler->shader_type == VKD3D_SHADER_TYPE_VERTEX || compiler->shader_type == VKD3D_SHADER_TYPE_DOMAIN)
vkd3d_spirv_enable_capability(builder, SpvCapabilityShaderViewportIndexLayerEXT);
break; break;
case SpvBuiltInViewportIndex: case SpvBuiltInViewportIndex:
vkd3d_spirv_enable_capability(builder, SpvCapabilityMultiViewport); vkd3d_spirv_enable_capability(builder, SpvCapabilityMultiViewport);
if (compiler->shader_type == VKD3D_SHADER_TYPE_VERTEX || compiler->shader_type == VKD3D_SHADER_TYPE_DOMAIN)
vkd3d_spirv_enable_capability(builder, SpvCapabilityShaderViewportIndexLayerEXT);
break; break;
case SpvBuiltInSampleId: case SpvBuiltInSampleId:
vkd3d_spirv_enable_capability(builder, SpvCapabilitySampleRateShading); vkd3d_spirv_enable_capability(builder, SpvCapabilitySampleRateShading);