Add support for VK_KHR_shader_quad_control

This commit is contained in:
baldurk
2025-02-13 18:32:21 +00:00
parent eeec813f70
commit 839f543bae
7 changed files with 39 additions and 7 deletions
@@ -437,7 +437,7 @@ void Reflector::CheckDebuggable(bool &debuggable, rdcstr &debugStatus) const
"SPV_KHR_non_semantic_info",
"SPV_KHR_physical_storage_buffer",
"SPV_KHR_post_depth_coverage",
// SPV_KHR_quad_control
"SPV_KHR_quad_control",
// SPV_KHR_ray_cull_mask
// SPV_KHR_ray_query
// SPV_KHR_ray_tracing
@@ -603,6 +603,7 @@ void Reflector::CheckDebuggable(bool &debuggable, rdcstr &debugStatus) const
case Capability::SignedZeroInfNanPreserve:
case Capability::PhysicalStorageBufferAddresses:
case Capability::MeshShadingEXT:
case Capability::QuadControlKHR:
{
supported = true;
break;
@@ -805,7 +806,6 @@ void Reflector::CheckDebuggable(bool &debuggable, rdcstr &debugStatus) const
case Capability::FPGAArgumentInterfacesINTEL:
case Capability::TextureBlockMatch2QCOM:
case Capability::ShaderEnqueueAMDX:
case Capability::QuadControlKHR:
case Capability::DisplacementMicromapNV:
case Capability::AtomicFloat16VectorNV:
case Capability::RayTracingDisplacementMicromapNV:
+1 -1
View File
@@ -199,6 +199,7 @@ Maintainers can update this file by updating vk.xml in this folder and running `
* `VK_KHR_shader_float16_int8`
* `VK_KHR_shader_integer_dot_product`
* `VK_KHR_shader_non_semantic_info`
* `VK_KHR_shader_quad_control`
* `VK_KHR_shader_relaxed_extended_instruction`
* `VK_KHR_shader_subgroup_extended_types`
* `VK_KHR_shader_subgroup_uniform_control_flow`
@@ -259,7 +260,6 @@ KHR extensions will definitely be implemented at some point, though KHR extensio
* `VK_KHR_shader_expect_assume`
* `VK_KHR_shader_float_controls2`
* `VK_KHR_shader_maximal_reconvergence`
* `VK_KHR_shader_quad_control`
* `VK_KHR_shader_subgroup_rotate`
## KHR Portability
+2
View File
@@ -1492,6 +1492,7 @@ DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderIntegerDotProductFeatures);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderIntegerDotProductProperties);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderObjectFeaturesEXT);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderObjectPropertiesEXT);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderQuadControlFeaturesKHR);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR);
@@ -1936,6 +1937,7 @@ DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderIntegerDotProductFeatures);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderIntegerDotProductProperties);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderObjectFeaturesEXT);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderObjectPropertiesEXT);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderQuadControlFeaturesKHR);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR);
+4
View File
@@ -1706,6 +1706,10 @@ static const VkExtensionProperties supportedExtensions[] = {
VK_KHR_SHADER_NON_SEMANTIC_INFO_EXTENSION_NAME,
VK_KHR_SHADER_NON_SEMANTIC_INFO_SPEC_VERSION,
},
{
VK_KHR_SHADER_QUAD_CONTROL_EXTENSION_NAME,
VK_KHR_SHADER_QUAD_CONTROL_SPEC_VERSION,
},
{
VK_KHR_SHADER_RELAXED_EXTENDED_INSTRUCTION_EXTENSION_NAME,
VK_KHR_SHADER_RELAXED_EXTENDED_INSTRUCTION_SPEC_VERSION,
+2 -1
View File
@@ -466,6 +466,8 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
VkPhysicalDeviceShaderObjectFeaturesEXT); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OBJECT_PROPERTIES_EXT, \
VkPhysicalDeviceShaderObjectPropertiesEXT); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_QUAD_CONTROL_FEATURES_KHR, \
VkPhysicalDeviceShaderQuadControlFeaturesKHR); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_RELAXED_EXTENDED_INSTRUCTION_FEATURES_KHR, \
VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES, \
@@ -1150,7 +1152,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MAXIMAL_RECONVERGENCE_FEATURES_KHR: \
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_FEATURES_EXT: \
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_PROPERTIES_EXT: \
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_QUAD_CONTROL_FEATURES_KHR: \
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_REPLICATED_COMPOSITES_FEATURES_EXT: \
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV: \
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV: \
+21 -3
View File
@@ -1354,6 +1354,10 @@ SERIALISE_VK_HANDLES();
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OBJECT_PROPERTIES_EXT, \
VkPhysicalDeviceShaderObjectPropertiesEXT) \
\
/* VK_KHR_shader_quad_control */ \
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_QUAD_CONTROL_FEATURES_KHR, \
VkPhysicalDeviceShaderQuadControlFeaturesKHR) \
\
/* VK_KHR_shader_relaxed_extended_instruction */ \
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_RELAXED_EXTENDED_INSTRUCTION_FEATURES_KHR, \
VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR) \
@@ -1834,9 +1838,6 @@ SERIALISE_VK_HANDLES();
/* VK_KHR_shader_maximal_reconvergence */ \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MAXIMAL_RECONVERGENCE_FEATURES_KHR) \
\
/* VK_KHR_shader_quad_control */ \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_QUAD_CONTROL_FEATURES_KHR) \
\
/* VK_KHR_shader_subgroup_rotate */ \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES) \
\
@@ -10400,6 +10401,22 @@ void Deserialise(const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures &el)
DeserialiseNext(el.pNext);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VkPhysicalDeviceShaderQuadControlFeaturesKHR &el)
{
RDCASSERT(ser.IsReading() ||
el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_QUAD_CONTROL_FEATURES_KHR);
SerialiseNext(ser, el.sType, el.pNext);
SERIALISE_MEMBER(shaderQuadControl);
}
template <>
void Deserialise(const VkPhysicalDeviceShaderQuadControlFeaturesKHR &el)
{
DeserialiseNext(el.pNext);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR &el)
{
@@ -12975,6 +12992,7 @@ INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderIntegerDotProductFeatures);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderIntegerDotProductProperties);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderObjectFeaturesEXT);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderObjectPropertiesEXT);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderQuadControlFeaturesKHR);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR);
@@ -3367,6 +3367,13 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi
}
END_PHYS_EXT_CHECK();
BEGIN_PHYS_EXT_CHECK(VkPhysicalDeviceShaderQuadControlFeaturesKHR,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_QUAD_CONTROL_FEATURES_KHR);
{
CHECK_PHYS_EXT_FEATURE(shaderQuadControl);
}
END_PHYS_EXT_CHECK();
BEGIN_PHYS_EXT_CHECK(VkPhysicalDeviceRayTracingPipelineFeaturesKHR,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR);
{