Enable TextureCompressionASTCSliced3D feature on Vulkan
Bug: 342840940
Change-Id: I60a57b7e829772b388145b8fd3c8fd52c9c8de75
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/237914
Commit-Queue: Fr <beaufort.francois@gmail.com>
Reviewed-by: Loko Kung <lokokung@google.com>
diff --git a/src/dawn/native/vulkan/PhysicalDeviceVk.cpp b/src/dawn/native/vulkan/PhysicalDeviceVk.cpp
index cf1bcbb..18437cf 100644
--- a/src/dawn/native/vulkan/PhysicalDeviceVk.cpp
+++ b/src/dawn/native/vulkan/PhysicalDeviceVk.cpp
@@ -115,6 +115,15 @@
return (properties.optimalTilingFeatures & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT) != 0;
}
+bool PhysicalDevice::IsTextureCompressionASTCSliced3DSupported(VkFormat format) const {
+ VkImageFormatProperties properties;
+ VkResult result =
+ VkResult::WrapUnsafe(mVulkanInstance->GetFunctions().GetPhysicalDeviceImageFormatProperties(
+ mVkPhysicalDevice, format, VK_IMAGE_TYPE_3D, VK_IMAGE_TILING_OPTIMAL,
+ VK_IMAGE_USAGE_SAMPLED_BIT, {}, &properties));
+ return (result == VK_SUCCESS);
+}
+
MaybeError PhysicalDevice::InitializeImpl() {
DAWN_TRY_ASSIGN(mDeviceInfo, GatherDeviceInfo(*this));
@@ -240,6 +249,29 @@
EnableFeature(Feature::TextureCompressionASTC);
}
+ bool textureCompressionASTCSliced3DSupported = true;
+ for (const auto& astcFormat :
+ {VK_FORMAT_ASTC_4x4_UNORM_BLOCK, VK_FORMAT_ASTC_4x4_SRGB_BLOCK,
+ VK_FORMAT_ASTC_5x4_UNORM_BLOCK, VK_FORMAT_ASTC_5x4_SRGB_BLOCK,
+ VK_FORMAT_ASTC_5x5_UNORM_BLOCK, VK_FORMAT_ASTC_5x5_SRGB_BLOCK,
+ VK_FORMAT_ASTC_6x5_UNORM_BLOCK, VK_FORMAT_ASTC_6x5_SRGB_BLOCK,
+ VK_FORMAT_ASTC_6x6_UNORM_BLOCK, VK_FORMAT_ASTC_6x6_SRGB_BLOCK,
+ VK_FORMAT_ASTC_8x5_UNORM_BLOCK, VK_FORMAT_ASTC_8x5_SRGB_BLOCK,
+ VK_FORMAT_ASTC_8x6_UNORM_BLOCK, VK_FORMAT_ASTC_8x6_SRGB_BLOCK,
+ VK_FORMAT_ASTC_8x8_UNORM_BLOCK, VK_FORMAT_ASTC_8x8_SRGB_BLOCK,
+ VK_FORMAT_ASTC_10x5_UNORM_BLOCK, VK_FORMAT_ASTC_10x5_SRGB_BLOCK,
+ VK_FORMAT_ASTC_10x6_UNORM_BLOCK, VK_FORMAT_ASTC_10x6_SRGB_BLOCK,
+ VK_FORMAT_ASTC_10x8_UNORM_BLOCK, VK_FORMAT_ASTC_10x8_SRGB_BLOCK,
+ VK_FORMAT_ASTC_10x10_UNORM_BLOCK, VK_FORMAT_ASTC_10x10_SRGB_BLOCK,
+ VK_FORMAT_ASTC_12x10_UNORM_BLOCK, VK_FORMAT_ASTC_12x10_SRGB_BLOCK,
+ VK_FORMAT_ASTC_12x12_UNORM_BLOCK, VK_FORMAT_ASTC_12x12_SRGB_BLOCK}) {
+ textureCompressionASTCSliced3DSupported &=
+ IsTextureCompressionASTCSliced3DSupported(astcFormat);
+ }
+ if (textureCompressionASTCSliced3DSupported) {
+ EnableFeature(Feature::TextureCompressionASTCSliced3D);
+ }
+
if (mDeviceInfo.properties.limits.timestampComputeAndGraphics == VK_TRUE) {
EnableFeature(Feature::TimestampQuery);
EnableFeature(Feature::ChromiumExperimentalTimestampQueryInsidePasses);
diff --git a/src/dawn/native/vulkan/PhysicalDeviceVk.h b/src/dawn/native/vulkan/PhysicalDeviceVk.h
index 448e569..0d15851 100644
--- a/src/dawn/native/vulkan/PhysicalDeviceVk.h
+++ b/src/dawn/native/vulkan/PhysicalDeviceVk.h
@@ -59,6 +59,7 @@
VulkanInstance* GetVulkanInstance() const;
bool IsDepthStencilFormatSupported(VkFormat format) const;
+ bool IsTextureCompressionASTCSliced3DSupported(VkFormat format) const;
bool IsAndroidQualcomm() const;
bool IsAndroidARM() const;