Add support for VK_EXT_texture_compression_astc_hdr

This commit is contained in:
baldurk
2022-01-12 15:08:36 +00:00
parent c6ee124ef0
commit 4a339a4369
6 changed files with 160 additions and 33 deletions
+1 -1
View File
@@ -85,6 +85,7 @@ Maintainers can update this file by updating vk.xml in this folder and running `
* `VK_EXT_subgroup_size_control`
* `VK_EXT_swapchain_colorspace`
* `VK_EXT_texel_buffer_alignment`
* `VK_EXT_texture_compression_astc_hdr`
* `VK_EXT_tooling_info`
* `VK_EXT_transform_feedback`
* `VK_EXT_validation_cache`
@@ -233,7 +234,6 @@ Ray tracing extensions are now standard and will likely be supported at some poi
* `VK_EXT_physical_device_drm`
* `VK_EXT_primitive_topology_list_restart`
* `VK_EXT_provoking_vertex`
* `VK_EXT_texture_compression_astc_hdr`
## Platform/IHV Extensions
+2
View File
@@ -1020,6 +1020,7 @@ DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceSurfaceInfo2KHR);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceSynchronization2FeaturesKHR);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceTimelineSemaphoreFeatures);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceTimelineSemaphoreProperties);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceToolPropertiesEXT);
@@ -1378,6 +1379,7 @@ DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceSurfaceInfo2KHR);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceSynchronization2FeaturesKHR);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceTimelineSemaphoreFeatures);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceTimelineSemaphoreProperties);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceToolPropertiesEXT);
+2 -1
View File
@@ -386,6 +386,8 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT, \
VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT, \
VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES, \
VkPhysicalDeviceTimelineSemaphoreFeatures); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES, \
@@ -794,7 +796,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV: \
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_FEATURES_HUAWEI: \
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_PROPERTIES_HUAWEI: \
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT: \
case VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT: \
case VK_STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD: \
case VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV: \
+126 -28
View File
@@ -1161,60 +1161,158 @@ VkFormat GetViewCastedFormat(VkFormat f, CompType typeCast)
return (typeCast == CompType::UNormSRGB) ? VK_FORMAT_BC7_SRGB_BLOCK : VK_FORMAT_BC7_UNORM_BLOCK;
case VK_FORMAT_ASTC_4x4_UNORM_BLOCK:
case VK_FORMAT_ASTC_4x4_SRGB_BLOCK:
return (typeCast == CompType::UNormSRGB) ? VK_FORMAT_ASTC_4x4_SRGB_BLOCK
: VK_FORMAT_ASTC_4x4_UNORM_BLOCK;
case VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT:
{
if(typeCast == CompType::UNormSRGB)
return VK_FORMAT_ASTC_4x4_SRGB_BLOCK;
else if(typeCast == CompType::Float)
return VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT;
else
return VK_FORMAT_ASTC_4x4_UNORM_BLOCK;
}
case VK_FORMAT_ASTC_5x4_UNORM_BLOCK:
case VK_FORMAT_ASTC_5x4_SRGB_BLOCK:
return (typeCast == CompType::UNormSRGB) ? VK_FORMAT_ASTC_5x4_SRGB_BLOCK
: VK_FORMAT_ASTC_5x4_UNORM_BLOCK;
case VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT:
{
if(typeCast == CompType::UNormSRGB)
return VK_FORMAT_ASTC_5x4_SRGB_BLOCK;
else if(typeCast == CompType::Float)
return VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT;
else
return VK_FORMAT_ASTC_5x4_UNORM_BLOCK;
}
case VK_FORMAT_ASTC_5x5_UNORM_BLOCK:
case VK_FORMAT_ASTC_5x5_SRGB_BLOCK:
return (typeCast == CompType::UNormSRGB) ? VK_FORMAT_ASTC_5x5_SRGB_BLOCK
: VK_FORMAT_ASTC_5x5_UNORM_BLOCK;
case VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT:
{
if(typeCast == CompType::UNormSRGB)
return VK_FORMAT_ASTC_5x5_SRGB_BLOCK;
else if(typeCast == CompType::Float)
return VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT;
else
return VK_FORMAT_ASTC_5x5_UNORM_BLOCK;
}
case VK_FORMAT_ASTC_6x5_UNORM_BLOCK:
case VK_FORMAT_ASTC_6x5_SRGB_BLOCK:
return (typeCast == CompType::UNormSRGB) ? VK_FORMAT_ASTC_6x5_SRGB_BLOCK
: VK_FORMAT_ASTC_6x5_UNORM_BLOCK;
case VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT:
{
if(typeCast == CompType::UNormSRGB)
return VK_FORMAT_ASTC_6x5_SRGB_BLOCK;
else if(typeCast == CompType::Float)
return VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT;
else
return VK_FORMAT_ASTC_6x5_UNORM_BLOCK;
}
case VK_FORMAT_ASTC_6x6_UNORM_BLOCK:
case VK_FORMAT_ASTC_6x6_SRGB_BLOCK:
return (typeCast == CompType::UNormSRGB) ? VK_FORMAT_ASTC_6x6_SRGB_BLOCK
: VK_FORMAT_ASTC_6x6_UNORM_BLOCK;
case VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT:
{
if(typeCast == CompType::UNormSRGB)
return VK_FORMAT_ASTC_6x6_SRGB_BLOCK;
else if(typeCast == CompType::Float)
return VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT;
else
return VK_FORMAT_ASTC_6x6_UNORM_BLOCK;
}
case VK_FORMAT_ASTC_8x5_UNORM_BLOCK:
case VK_FORMAT_ASTC_8x5_SRGB_BLOCK:
return (typeCast == CompType::UNormSRGB) ? VK_FORMAT_ASTC_8x5_SRGB_BLOCK
: VK_FORMAT_ASTC_8x5_UNORM_BLOCK;
case VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT:
{
if(typeCast == CompType::UNormSRGB)
return VK_FORMAT_ASTC_8x5_SRGB_BLOCK;
else if(typeCast == CompType::Float)
return VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT;
else
return VK_FORMAT_ASTC_8x5_UNORM_BLOCK;
}
case VK_FORMAT_ASTC_8x6_UNORM_BLOCK:
case VK_FORMAT_ASTC_8x6_SRGB_BLOCK:
return (typeCast == CompType::UNormSRGB) ? VK_FORMAT_ASTC_8x6_SRGB_BLOCK
: VK_FORMAT_ASTC_8x6_UNORM_BLOCK;
case VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT:
{
if(typeCast == CompType::UNormSRGB)
return VK_FORMAT_ASTC_8x6_SRGB_BLOCK;
else if(typeCast == CompType::Float)
return VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT;
else
return VK_FORMAT_ASTC_8x6_UNORM_BLOCK;
}
case VK_FORMAT_ASTC_8x8_UNORM_BLOCK:
case VK_FORMAT_ASTC_8x8_SRGB_BLOCK:
return (typeCast == CompType::UNormSRGB) ? VK_FORMAT_ASTC_8x8_SRGB_BLOCK
: VK_FORMAT_ASTC_8x8_UNORM_BLOCK;
case VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT:
{
if(typeCast == CompType::UNormSRGB)
return VK_FORMAT_ASTC_8x8_SRGB_BLOCK;
else if(typeCast == CompType::Float)
return VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT;
else
return VK_FORMAT_ASTC_8x8_UNORM_BLOCK;
}
case VK_FORMAT_ASTC_10x5_UNORM_BLOCK:
case VK_FORMAT_ASTC_10x5_SRGB_BLOCK:
return (typeCast == CompType::UNormSRGB) ? VK_FORMAT_ASTC_10x5_SRGB_BLOCK
: VK_FORMAT_ASTC_10x5_UNORM_BLOCK;
case VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT:
{
if(typeCast == CompType::UNormSRGB)
return VK_FORMAT_ASTC_10x5_SRGB_BLOCK;
else if(typeCast == CompType::Float)
return VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT;
else
return VK_FORMAT_ASTC_10x5_UNORM_BLOCK;
}
case VK_FORMAT_ASTC_10x6_UNORM_BLOCK:
case VK_FORMAT_ASTC_10x6_SRGB_BLOCK:
return (typeCast == CompType::UNormSRGB) ? VK_FORMAT_ASTC_10x6_SRGB_BLOCK
: VK_FORMAT_ASTC_10x6_UNORM_BLOCK;
case VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT:
{
if(typeCast == CompType::UNormSRGB)
return VK_FORMAT_ASTC_10x6_SRGB_BLOCK;
else if(typeCast == CompType::Float)
return VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT;
else
return VK_FORMAT_ASTC_10x6_UNORM_BLOCK;
}
case VK_FORMAT_ASTC_10x8_UNORM_BLOCK:
case VK_FORMAT_ASTC_10x8_SRGB_BLOCK:
return (typeCast == CompType::UNormSRGB) ? VK_FORMAT_ASTC_10x8_SRGB_BLOCK
: VK_FORMAT_ASTC_10x8_UNORM_BLOCK;
case VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT:
{
if(typeCast == CompType::UNormSRGB)
return VK_FORMAT_ASTC_10x8_SRGB_BLOCK;
else if(typeCast == CompType::Float)
return VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT;
else
return VK_FORMAT_ASTC_10x8_UNORM_BLOCK;
}
case VK_FORMAT_ASTC_10x10_UNORM_BLOCK:
case VK_FORMAT_ASTC_10x10_SRGB_BLOCK:
return (typeCast == CompType::UNormSRGB) ? VK_FORMAT_ASTC_10x10_SRGB_BLOCK
: VK_FORMAT_ASTC_10x10_UNORM_BLOCK;
case VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT:
{
if(typeCast == CompType::UNormSRGB)
return VK_FORMAT_ASTC_10x10_SRGB_BLOCK;
else if(typeCast == CompType::Float)
return VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT;
else
return VK_FORMAT_ASTC_10x10_UNORM_BLOCK;
}
case VK_FORMAT_ASTC_12x10_UNORM_BLOCK:
case VK_FORMAT_ASTC_12x10_SRGB_BLOCK:
return (typeCast == CompType::UNormSRGB) ? VK_FORMAT_ASTC_12x10_SRGB_BLOCK
: VK_FORMAT_ASTC_12x10_UNORM_BLOCK;
case VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT:
{
if(typeCast == CompType::UNormSRGB)
return VK_FORMAT_ASTC_12x10_SRGB_BLOCK;
else if(typeCast == CompType::Float)
return VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT;
else
return VK_FORMAT_ASTC_12x10_UNORM_BLOCK;
}
case VK_FORMAT_ASTC_12x12_UNORM_BLOCK:
case VK_FORMAT_ASTC_12x12_SRGB_BLOCK:
return (typeCast == CompType::UNormSRGB) ? VK_FORMAT_ASTC_12x12_SRGB_BLOCK
: VK_FORMAT_ASTC_12x12_UNORM_BLOCK;
case VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT:
{
if(typeCast == CompType::UNormSRGB)
return VK_FORMAT_ASTC_12x12_SRGB_BLOCK;
else if(typeCast == CompType::Float)
return VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT;
else
return VK_FORMAT_ASTC_12x12_UNORM_BLOCK;
}
case VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG:
case VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG:
return (typeCast == CompType::UNormSRGB) ? VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG
+21 -3
View File
@@ -806,6 +806,10 @@ SERIALISE_VK_HANDLES();
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT, \
VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT) \
\
/* VK_EXT_texture_compression_astc_hdr */ \
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT, \
VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT) \
\
/* VK_EXT_tooling_info */ \
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT, \
VkPhysicalDeviceToolPropertiesEXT) \
@@ -1327,9 +1331,6 @@ SERIALISE_VK_HANDLES();
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_PROVOKING_VERTEX_STATE_CREATE_INFO_EXT) \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_PROPERTIES_EXT) \
\
/* VK_EXT_texture_compression_astc_hdr */ \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT) \
\
/* VK_HUAWEI_invocation_mask */ \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI) \
\
@@ -6547,6 +6548,22 @@ void Deserialise(const VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT &el)
DeserialiseNext(el.pNext);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT &el)
{
RDCASSERT(ser.IsReading() ||
el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT);
SerialiseNext(ser, el.sType, el.pNext);
SERIALISE_MEMBER(textureCompressionASTC_HDR);
}
template <>
void Deserialise(const VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT &el)
{
DeserialiseNext(el.pNext);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VkPhysicalDeviceToolPropertiesEXT &el)
{
@@ -10097,6 +10114,7 @@ INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceSurfaceInfo2KHR);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceSynchronization2FeaturesKHR);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceTimelineSemaphoreFeatures);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceTimelineSemaphoreProperties);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceToolPropertiesEXT);
@@ -2844,6 +2844,14 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi
CHECK_PHYS_EXT_FEATURE(formatA4B4G4R4);
}
END_PHYS_EXT_CHECK();
BEGIN_PHYS_EXT_CHECK(
VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT);
{
CHECK_PHYS_EXT_FEATURE(textureCompressionASTC_HDR);
}
END_PHYS_EXT_CHECK();
}
if(availFeatures.depthClamp)