Add support for VK_EXT_shader_tile_image

This commit is contained in:
baldurk
2026-07-24 17:52:48 +01:00
parent 8251a21f89
commit 0c682d5a48
6 changed files with 65 additions and 7 deletions
+1 -1
View File
@@ -117,6 +117,7 @@ Maintainers can update this file by updating vk.xml in this folder and running `
* `VK_EXT_shader_object`
* `VK_EXT_shader_split_barrier`
* `VK_EXT_shader_stencil_export`
* `VK_EXT_shader_tile_image`
* `VK_EXT_shader_subgroup_ballot`
* `VK_EXT_shader_subgroup_partitioned`
* `VK_EXT_shader_subgroup_vote`
@@ -343,7 +344,6 @@ The portability subset is only relevant on mac, which is not a supported platfor
* `VK_EXT_shader_module_identifier`
* `VK_EXT_shader_ocp_microscaling_types`
* `VK_EXT_shader_replicated_composites`
* `VK_EXT_shader_tile_image`
* `VK_EXT_shader_uniform_buffer_unsized_array`
* `VK_EXT_subpass_merge_feedback`
* `VK_EXT_texture_compression_astc_3d`
+4
View File
@@ -1854,6 +1854,8 @@ DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderSubgroupPartitionedFeaturesEXT);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderSubgroupRotateFeatures);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderTerminateInvocationFeatures);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderTileImageFeaturesEXT);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderTileImagePropertiesEXT);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceSparseImageFormatInfo2);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceSubgroupProperties);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceSubgroupSizeControlFeatures);
@@ -2413,6 +2415,8 @@ DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderSubgroupPartitionedFeaturesEXT);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderSubgroupRotateFeatures);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderTerminateInvocationFeatures);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderTileImageFeaturesEXT);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderTileImagePropertiesEXT);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceSparseImageFormatInfo2);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceSubgroupProperties);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceSubgroupSizeControlFeatures);
+4
View File
@@ -1468,6 +1468,10 @@ static const VkExtensionProperties supportedExtensions[] = {
VK_EXT_SHADER_SUBGROUP_VOTE_EXTENSION_NAME,
VK_EXT_SHADER_SUBGROUP_VOTE_SPEC_VERSION,
},
{
VK_EXT_SHADER_TILE_IMAGE_EXTENSION_NAME,
VK_EXT_SHADER_TILE_IMAGE_SPEC_VERSION,
},
{
VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_EXTENSION_NAME,
VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_SPEC_VERSION,
+4 -2
View File
@@ -612,6 +612,10 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES, \
VkPhysicalDeviceShaderTerminateInvocationFeatures); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TILE_IMAGE_FEATURES_EXT, \
VkPhysicalDeviceShaderTileImageFeaturesEXT); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TILE_IMAGE_PROPERTIES_EXT, \
VkPhysicalDeviceShaderTileImagePropertiesEXT); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2, \
VkPhysicalDeviceSparseImageFormatInfo2); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES, \
@@ -1427,8 +1431,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
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: \
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TILE_IMAGE_FEATURES_EXT: \
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TILE_IMAGE_PROPERTIES_EXT: \
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNIFORM_BUFFER_UNSIZED_ARRAY_FEATURES_EXT: \
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNTYPED_POINTERS_FEATURES_KHR: \
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV: \
+43 -4
View File
@@ -993,6 +993,12 @@ SERIALISE_VK_HANDLES();
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_PARTITIONED_FEATURES_EXT, \
VkPhysicalDeviceShaderSubgroupPartitionedFeaturesEXT) \
\
/* VK_EXT_shader_tile_image */ \
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TILE_IMAGE_FEATURES_EXT, \
VkPhysicalDeviceShaderTileImageFeaturesEXT) \
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TILE_IMAGE_PROPERTIES_EXT, \
VkPhysicalDeviceShaderTileImagePropertiesEXT) \
\
/* VK_EXT_separate_stencil_usage */ \
PNEXT_STRUCT(VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO, VkImageStencilUsageCreateInfo) \
\
@@ -2104,10 +2110,6 @@ SERIALISE_VK_HANDLES();
/* VK_EXT_shader_replicated_composites */ \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_REPLICATED_COMPOSITES_FEATURES_EXT) \
\
/* VK_EXT_shader_tile_image */ \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TILE_IMAGE_FEATURES_EXT) \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TILE_IMAGE_PROPERTIES_EXT) \
\
/* VK_EXT_shader_uniform_buffer_unsized_array */ \
PNEXT_UNSUPPORTED( \
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_UNIFORM_BUFFER_UNSIZED_ARRAY_FEATURES_EXT) \
@@ -11798,6 +11800,41 @@ void Deserialise(const VkPhysicalDeviceShaderSubgroupPartitionedFeaturesEXT &el)
DeserialiseNext(el.pNext);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VkPhysicalDeviceShaderTileImageFeaturesEXT &el)
{
RDCASSERT(ser.IsReading() ||
el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TILE_IMAGE_FEATURES_EXT);
SerialiseNext(ser, el.sType, el.pNext);
SERIALISE_MEMBER(shaderTileImageColorReadAccess);
SERIALISE_MEMBER(shaderTileImageDepthReadAccess);
SERIALISE_MEMBER(shaderTileImageStencilReadAccess);
}
template <>
void Deserialise(const VkPhysicalDeviceShaderTileImageFeaturesEXT &el)
{
DeserialiseNext(el.pNext);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VkPhysicalDeviceShaderTileImagePropertiesEXT &el)
{
RDCASSERT(ser.IsReading() ||
el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TILE_IMAGE_PROPERTIES_EXT);
SerialiseNext(ser, el.sType, el.pNext);
SERIALISE_MEMBER(shaderTileImageCoherentReadAccelerated);
SERIALISE_MEMBER(shaderTileImageReadSampleFromPixelRateInvocation);
SERIALISE_MEMBER(shaderTileImageReadFromHelperInvocation);
}
template <>
void Deserialise(const VkPhysicalDeviceShaderTileImagePropertiesEXT &el)
{
DeserialiseNext(el.pNext);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VkPhysicalDeviceShaderSplitBarrierFeaturesEXT &el)
{
@@ -15812,6 +15849,8 @@ INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderSubgroupPartitionedFeaturesEXT)
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderSubgroupRotateFeatures);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderTerminateInvocationFeatures);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderTileImageFeaturesEXT);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderTileImagePropertiesEXT);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceSparseImageFormatInfo2);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceSubgroupProperties);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceSubgroupSizeControlFeatures);
@@ -3761,6 +3761,15 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi
CHECK_PHYS_EXT_FEATURE(shader64BitIndexing);
}
END_PHYS_EXT_CHECK();
BEGIN_PHYS_EXT_CHECK(VkPhysicalDeviceShaderTileImageFeaturesEXT,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TILE_IMAGE_FEATURES_EXT);
{
CHECK_PHYS_EXT_FEATURE(shaderTileImageColorReadAccess);
CHECK_PHYS_EXT_FEATURE(shaderTileImageDepthReadAccess);
CHECK_PHYS_EXT_FEATURE(shaderTileImageStencilReadAccess);
}
END_PHYS_EXT_CHECK();
}
if(availFeatures.depthClamp)