Create tests for VK_EXT_astc_decode_mode
authorPiotr Byszewski <piotr.byszewski@mobica.com>
Wed, 30 Oct 2019 16:04:22 +0000 (17:04 +0100)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Wed, 4 Dec 2019 17:40:32 +0000 (12:40 -0500)
VK-GL-CTS issue: 1672

Components: Vulkan

Affects:
dEQP-VK.image.astc_decode_mode.*

Change-Id: Ib76e7cca25a82e8712ea2fd4028f8b1d6db3f8c2

13 files changed:
AndroidGen.mk
android/cts/master/vk-master.txt
external/vulkancts/framework/vulkan/vkDeviceFeatures.inl
external/vulkancts/framework/vulkan/vkDeviceFeaturesForContextDecl.inl
external/vulkancts/framework/vulkan/vkDeviceFeaturesForContextDefs.inl
external/vulkancts/framework/vulkan/vkDeviceFeaturesForDefaultDeviceDefs.inl
external/vulkancts/modules/vulkan/image/CMakeLists.txt
external/vulkancts/modules/vulkan/image/vktImageAstcDecodeModeTests.cpp [new file with mode: 0644]
external/vulkancts/modules/vulkan/image/vktImageAstcDecodeModeTests.hpp [new file with mode: 0644]
external/vulkancts/modules/vulkan/image/vktImageTests.cpp
external/vulkancts/mustpass/master/vk-default-no-waivers.txt
external/vulkancts/mustpass/master/vk-default.txt
external/vulkancts/scripts/gen_framework.py

index f743c98..692a186 100644 (file)
@@ -156,6 +156,7 @@ LOCAL_SRC_FILES := \
        external/vulkancts/modules/vulkan/geometry/vktGeometryTests.cpp \
        external/vulkancts/modules/vulkan/geometry/vktGeometryTestsUtil.cpp \
        external/vulkancts/modules/vulkan/geometry/vktGeometryVaryingGeometryShaderTests.cpp \
+       external/vulkancts/modules/vulkan/image/vktImageAstcDecodeModeTests.cpp \
        external/vulkancts/modules/vulkan/image/vktImageAtomicOperationTests.cpp \
        external/vulkancts/modules/vulkan/image/vktImageCompressionTranscodingSupport.cpp \
        external/vulkancts/modules/vulkan/image/vktImageLoadStoreTests.cpp \
index 5cb9c12..72d5c17 100644 (file)
@@ -425963,6 +425963,90 @@ dEQP-VK.image.extend_operands_spirv1p4.r8_sint_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r8_sint_force_sign_extend
 dEQP-VK.image.extend_operands_spirv1p4.r8_sint_relaxed_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r8_sint_relaxed_force_sign_extend
+dEQP-VK.image.astc_decode_mode.4x4_unorm_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.4x4_unorm_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.4x4_unorm_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.4x4_srgb_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.4x4_srgb_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.4x4_srgb_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.5x4_unorm_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.5x4_unorm_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.5x4_unorm_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.5x4_srgb_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.5x4_srgb_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.5x4_srgb_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.5x5_unorm_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.5x5_unorm_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.5x5_unorm_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.5x5_srgb_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.5x5_srgb_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.5x5_srgb_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.6x5_unorm_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.6x5_unorm_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.6x5_unorm_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.6x5_srgb_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.6x5_srgb_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.6x5_srgb_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.6x6_unorm_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.6x6_unorm_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.6x6_unorm_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.6x6_srgb_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.6x6_srgb_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.6x6_srgb_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.8x5_unorm_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.8x5_unorm_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.8x5_unorm_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.8x5_srgb_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.8x5_srgb_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.8x5_srgb_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.8x6_unorm_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.8x6_unorm_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.8x6_unorm_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.8x6_srgb_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.8x6_srgb_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.8x6_srgb_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.8x8_unorm_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.8x8_unorm_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.8x8_unorm_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.8x8_srgb_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.8x8_srgb_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.8x8_srgb_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.10x5_unorm_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.10x5_unorm_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.10x5_unorm_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.10x5_srgb_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.10x5_srgb_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.10x5_srgb_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.10x6_unorm_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.10x6_unorm_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.10x6_unorm_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.10x6_srgb_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.10x6_srgb_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.10x6_srgb_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.10x8_unorm_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.10x8_unorm_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.10x8_unorm_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.10x8_srgb_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.10x8_srgb_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.10x8_srgb_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.10x10_unorm_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.10x10_unorm_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.10x10_unorm_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.10x10_srgb_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.10x10_srgb_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.10x10_srgb_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.12x10_unorm_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.12x10_unorm_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.12x10_unorm_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.12x10_srgb_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.12x10_srgb_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.12x10_srgb_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.12x12_unorm_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.12x12_unorm_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.12x12_unorm_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.12x12_srgb_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.12x12_srgb_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.12x12_srgb_to_e5b9g9r9_ufloat_pack32
 dEQP-VK.image.misaligned_cube.7
 dEQP-VK.image.misaligned_cube.8
 dEQP-VK.image.misaligned_cube.9
index 67766b2..cef4bd3 100644 (file)
@@ -7,6 +7,7 @@ namespace vk
 {
 #define VK_KHR_16BIT_STORAGE_EXTENSION_NAME "VK_KHR_16bit_storage"
 #define VK_KHR_8BIT_STORAGE_EXTENSION_NAME "VK_KHR_8bit_storage"
+#define VK_EXT_ASTC_DECODE_MODE_EXTENSION_NAME "VK_EXT_astc_decode_mode"
 #define VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME "VK_EXT_blend_operation_advanced"
 #define VK_EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME "VK_EXT_buffer_device_address"
 #define DECL_AMD_COHERENT_MEMORY_EXTENSION_NAME "not_existent_feature"
@@ -44,6 +45,7 @@ namespace vk
 #define VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME "VK_KHR_shader_float16_int8"
 #define VK_NV_SHADER_IMAGE_FOOTPRINT_EXTENSION_NAME "VK_NV_shader_image_footprint"
 #define VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_EXTENSION_NAME "VK_INTEL_shader_integer_functions2"
+#define VK_NV_SHADER_SM_BUILTINS_EXTENSION_NAME "VK_NV_shader_sm_builtins"
 #define VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_EXTENSION_NAME "VK_KHR_shader_subgroup_extended_types"
 #define VK_NV_SHADING_RATE_IMAGE_EXTENSION_NAME "VK_NV_shading_rate_image"
 #define VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME "VK_EXT_subgroup_size_control"
@@ -57,45 +59,47 @@ namespace vk
 #define VK_EXT_YCBCR_IMAGE_ARRAYS_EXTENSION_NAME "VK_EXT_ycbcr_image_arrays"
 
 
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDevice16BitStorageFeatures>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES, VK_KHR_16BIT_STORAGE_EXTENSION_NAME, VK_KHR_16BIT_STORAGE_SPEC_VERSION, 50); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDevice8BitStorageFeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR, VK_KHR_8BIT_STORAGE_EXTENSION_NAME, VK_KHR_8BIT_STORAGE_SPEC_VERSION, 49); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT, VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME, VK_EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION, 48); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceBufferDeviceAddressFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT, VK_EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME, VK_EXT_BUFFER_DEVICE_ADDRESS_SPEC_VERSION, 47); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceCoherentMemoryFeaturesAMD>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD, DECL_AMD_COHERENT_MEMORY_EXTENSION_NAME, 0, 46); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceComputeShaderDerivativesFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV, VK_NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME, VK_NV_COMPUTE_SHADER_DERIVATIVES_SPEC_VERSION, 45); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceConditionalRenderingFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT, VK_EXT_CONDITIONAL_RENDERING_EXTENSION_NAME, VK_EXT_CONDITIONAL_RENDERING_SPEC_VERSION, 44); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceCooperativeMatrixFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV, VK_NV_COOPERATIVE_MATRIX_EXTENSION_NAME, VK_NV_COOPERATIVE_MATRIX_SPEC_VERSION, 43); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceCornerSampledImageFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV, VK_NV_CORNER_SAMPLED_IMAGE_EXTENSION_NAME, VK_NV_CORNER_SAMPLED_IMAGE_SPEC_VERSION, 42); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceCoverageReductionModeFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV, VK_NV_COVERAGE_REDUCTION_MODE_EXTENSION_NAME, VK_NV_COVERAGE_REDUCTION_MODE_SPEC_VERSION, 41); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV, VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_EXTENSION_NAME, VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_SPEC_VERSION, 40); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDepthClipEnableFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT, VK_EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME, VK_EXT_DEPTH_CLIP_ENABLE_SPEC_VERSION, 39); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDescriptorIndexingFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT, VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME, VK_EXT_DESCRIPTOR_INDEXING_SPEC_VERSION, 38); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceExclusiveScissorFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV, VK_NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME, VK_NV_SCISSOR_EXCLUSIVE_SPEC_VERSION, 37); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentDensityMapFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT, VK_EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME, VK_EXT_FRAGMENT_DENSITY_MAP_SPEC_VERSION, 36); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV, VK_NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME, VK_NV_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION, 35); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT, VK_EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME, VK_EXT_FRAGMENT_SHADER_INTERLOCK_SPEC_VERSION, 34); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceHostQueryResetFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT, VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME, VK_EXT_HOST_QUERY_RESET_SPEC_VERSION, 33); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceImagelessFramebufferFeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES_KHR, VK_KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME, VK_KHR_IMAGELESS_FRAMEBUFFER_SPEC_VERSION, 32); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceIndexTypeUint8FeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT, VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME, VK_EXT_INDEX_TYPE_UINT8_SPEC_VERSION, 31); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceInlineUniformBlockFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT, VK_EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME, VK_EXT_INLINE_UNIFORM_BLOCK_SPEC_VERSION, 30); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceLineRasterizationFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT, VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME, VK_EXT_LINE_RASTERIZATION_SPEC_VERSION, 29); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceMemoryPriorityFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT, VK_EXT_MEMORY_PRIORITY_EXTENSION_NAME, VK_EXT_MEMORY_PRIORITY_SPEC_VERSION, 28); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceMeshShaderFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV, VK_NV_MESH_SHADER_EXTENSION_NAME, VK_NV_MESH_SHADER_SPEC_VERSION, 27); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceMultiviewFeatures>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES, VK_KHR_MULTIVIEW_EXTENSION_NAME, VK_KHR_MULTIVIEW_SPEC_VERSION, 26); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDevicePerformanceQueryFeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR, VK_KHR_PERFORMANCE_QUERY_EXTENSION_NAME, VK_KHR_PERFORMANCE_QUERY_SPEC_VERSION, 25); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR, VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME, VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_SPEC_VERSION, 24); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceProtectedMemoryFeatures>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES, DECL_PROTECTED_MEMORY_EXTENSION_NAME, 0, 23); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV, VK_NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME, VK_NV_REPRESENTATIVE_FRAGMENT_TEST_SPEC_VERSION, 22); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceSamplerYcbcrConversionFeatures>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES, VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME, VK_KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION, 21); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceScalarBlockLayoutFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT, VK_EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME, VK_EXT_SCALAR_BLOCK_LAYOUT_SPEC_VERSION, 20); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES_KHR, VK_KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_EXTENSION_NAME, VK_KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_SPEC_VERSION, 19); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderAtomicInt64FeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR, VK_KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME, VK_KHR_SHADER_ATOMIC_INT64_SPEC_VERSION, 18); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderClockFeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR, VK_KHR_SHADER_CLOCK_EXTENSION_NAME, VK_KHR_SHADER_CLOCK_SPEC_VERSION, 17); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT, VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME, VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION, 16); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderDrawParametersFeatures>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES, VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME, VK_KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION, 15); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderFloat16Int8FeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES_KHR, VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME, VK_KHR_SHADER_FLOAT16_INT8_SPEC_VERSION, 14); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderImageFootprintFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV, VK_NV_SHADER_IMAGE_FOOTPRINT_EXTENSION_NAME, VK_NV_SHADER_IMAGE_FOOTPRINT_SPEC_VERSION, 13); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL, VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_EXTENSION_NAME, VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_SPEC_VERSION, 12); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDevice16BitStorageFeatures>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES, VK_KHR_16BIT_STORAGE_EXTENSION_NAME, VK_KHR_16BIT_STORAGE_SPEC_VERSION, 52); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDevice8BitStorageFeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR, VK_KHR_8BIT_STORAGE_EXTENSION_NAME, VK_KHR_8BIT_STORAGE_SPEC_VERSION, 51); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceASTCDecodeFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT, VK_EXT_ASTC_DECODE_MODE_EXTENSION_NAME, VK_EXT_ASTC_DECODE_MODE_SPEC_VERSION, 50); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT, VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME, VK_EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION, 49); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceBufferDeviceAddressFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT, VK_EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME, VK_EXT_BUFFER_DEVICE_ADDRESS_SPEC_VERSION, 48); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceCoherentMemoryFeaturesAMD>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD, DECL_AMD_COHERENT_MEMORY_EXTENSION_NAME, 0, 47); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceComputeShaderDerivativesFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV, VK_NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME, VK_NV_COMPUTE_SHADER_DERIVATIVES_SPEC_VERSION, 46); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceConditionalRenderingFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT, VK_EXT_CONDITIONAL_RENDERING_EXTENSION_NAME, VK_EXT_CONDITIONAL_RENDERING_SPEC_VERSION, 45); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceCooperativeMatrixFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV, VK_NV_COOPERATIVE_MATRIX_EXTENSION_NAME, VK_NV_COOPERATIVE_MATRIX_SPEC_VERSION, 44); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceCornerSampledImageFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV, VK_NV_CORNER_SAMPLED_IMAGE_EXTENSION_NAME, VK_NV_CORNER_SAMPLED_IMAGE_SPEC_VERSION, 43); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceCoverageReductionModeFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV, VK_NV_COVERAGE_REDUCTION_MODE_EXTENSION_NAME, VK_NV_COVERAGE_REDUCTION_MODE_SPEC_VERSION, 42); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV, VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_EXTENSION_NAME, VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_SPEC_VERSION, 41); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDepthClipEnableFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT, VK_EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME, VK_EXT_DEPTH_CLIP_ENABLE_SPEC_VERSION, 40); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceDescriptorIndexingFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT, VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME, VK_EXT_DESCRIPTOR_INDEXING_SPEC_VERSION, 39); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceExclusiveScissorFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV, VK_NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME, VK_NV_SCISSOR_EXCLUSIVE_SPEC_VERSION, 38); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentDensityMapFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT, VK_EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME, VK_EXT_FRAGMENT_DENSITY_MAP_SPEC_VERSION, 37); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV, VK_NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME, VK_NV_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION, 36); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT, VK_EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME, VK_EXT_FRAGMENT_SHADER_INTERLOCK_SPEC_VERSION, 35); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceHostQueryResetFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT, VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME, VK_EXT_HOST_QUERY_RESET_SPEC_VERSION, 34); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceImagelessFramebufferFeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES_KHR, VK_KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME, VK_KHR_IMAGELESS_FRAMEBUFFER_SPEC_VERSION, 33); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceIndexTypeUint8FeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT, VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME, VK_EXT_INDEX_TYPE_UINT8_SPEC_VERSION, 32); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceInlineUniformBlockFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT, VK_EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME, VK_EXT_INLINE_UNIFORM_BLOCK_SPEC_VERSION, 31); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceLineRasterizationFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT, VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME, VK_EXT_LINE_RASTERIZATION_SPEC_VERSION, 30); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceMemoryPriorityFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT, VK_EXT_MEMORY_PRIORITY_EXTENSION_NAME, VK_EXT_MEMORY_PRIORITY_SPEC_VERSION, 29); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceMeshShaderFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV, VK_NV_MESH_SHADER_EXTENSION_NAME, VK_NV_MESH_SHADER_SPEC_VERSION, 28); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceMultiviewFeatures>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES, VK_KHR_MULTIVIEW_EXTENSION_NAME, VK_KHR_MULTIVIEW_SPEC_VERSION, 27); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDevicePerformanceQueryFeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR, VK_KHR_PERFORMANCE_QUERY_EXTENSION_NAME, VK_KHR_PERFORMANCE_QUERY_SPEC_VERSION, 26); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR, VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME, VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_SPEC_VERSION, 25); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceProtectedMemoryFeatures>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES, DECL_PROTECTED_MEMORY_EXTENSION_NAME, 0, 24); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV, VK_NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME, VK_NV_REPRESENTATIVE_FRAGMENT_TEST_SPEC_VERSION, 23); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceSamplerYcbcrConversionFeatures>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES, VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME, VK_KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION, 22); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceScalarBlockLayoutFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT, VK_EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME, VK_EXT_SCALAR_BLOCK_LAYOUT_SPEC_VERSION, 21); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES_KHR, VK_KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_EXTENSION_NAME, VK_KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_SPEC_VERSION, 20); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderAtomicInt64FeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR, VK_KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME, VK_KHR_SHADER_ATOMIC_INT64_SPEC_VERSION, 19); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderClockFeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR, VK_KHR_SHADER_CLOCK_EXTENSION_NAME, VK_KHR_SHADER_CLOCK_SPEC_VERSION, 18); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT, VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME, VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION, 17); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderDrawParametersFeatures>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES, VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME, VK_KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION, 16); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderFloat16Int8FeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES_KHR, VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME, VK_KHR_SHADER_FLOAT16_INT8_SPEC_VERSION, 15); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderImageFootprintFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV, VK_NV_SHADER_IMAGE_FOOTPRINT_EXTENSION_NAME, VK_NV_SHADER_IMAGE_FOOTPRINT_SPEC_VERSION, 14); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL, VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_EXTENSION_NAME, VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_SPEC_VERSION, 13); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderSMBuiltinsFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV, VK_NV_SHADER_SM_BUILTINS_EXTENSION_NAME, VK_NV_SHADER_SM_BUILTINS_SPEC_VERSION, 12); }
 template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES_KHR, VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_EXTENSION_NAME, VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_SPEC_VERSION, 11); }
 template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceShadingRateImageFeaturesNV>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV, VK_NV_SHADING_RATE_IMAGE_EXTENSION_NAME, VK_NV_SHADING_RATE_IMAGE_SPEC_VERSION, 10); }
 template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceSubgroupSizeControlFeaturesEXT>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT, VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME, VK_EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION, 9); }
@@ -113,6 +117,7 @@ static const FeatureStructMapItem featureStructCreatorMap[] =
 {
        { createFeatureStructWrapper<VkPhysicalDevice16BitStorageFeatures>, VK_KHR_16BIT_STORAGE_EXTENSION_NAME, VK_KHR_16BIT_STORAGE_SPEC_VERSION },
        { createFeatureStructWrapper<VkPhysicalDevice8BitStorageFeaturesKHR>, VK_KHR_8BIT_STORAGE_EXTENSION_NAME, VK_KHR_8BIT_STORAGE_SPEC_VERSION },
+       { createFeatureStructWrapper<VkPhysicalDeviceASTCDecodeFeaturesEXT>, VK_EXT_ASTC_DECODE_MODE_EXTENSION_NAME, VK_EXT_ASTC_DECODE_MODE_SPEC_VERSION },
        { createFeatureStructWrapper<VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT>, VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME, VK_EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION },
        { createFeatureStructWrapper<VkPhysicalDeviceBufferDeviceAddressFeaturesEXT>, VK_EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME, VK_EXT_BUFFER_DEVICE_ADDRESS_SPEC_VERSION },
        { createFeatureStructWrapper<VkPhysicalDeviceCoherentMemoryFeaturesAMD>, DECL_AMD_COHERENT_MEMORY_EXTENSION_NAME, 0 },
@@ -150,6 +155,7 @@ static const FeatureStructMapItem featureStructCreatorMap[] =
        { createFeatureStructWrapper<VkPhysicalDeviceShaderFloat16Int8FeaturesKHR>, VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME, VK_KHR_SHADER_FLOAT16_INT8_SPEC_VERSION },
        { createFeatureStructWrapper<VkPhysicalDeviceShaderImageFootprintFeaturesNV>, VK_NV_SHADER_IMAGE_FOOTPRINT_EXTENSION_NAME, VK_NV_SHADER_IMAGE_FOOTPRINT_SPEC_VERSION },
        { createFeatureStructWrapper<VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL>, VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_EXTENSION_NAME, VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_SPEC_VERSION },
+       { createFeatureStructWrapper<VkPhysicalDeviceShaderSMBuiltinsFeaturesNV>, VK_NV_SHADER_SM_BUILTINS_EXTENSION_NAME, VK_NV_SHADER_SM_BUILTINS_SPEC_VERSION },
        { createFeatureStructWrapper<VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR>, VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_EXTENSION_NAME, VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_SPEC_VERSION },
        { createFeatureStructWrapper<VkPhysicalDeviceShadingRateImageFeaturesNV>, VK_NV_SHADING_RATE_IMAGE_EXTENSION_NAME, VK_NV_SHADING_RATE_IMAGE_SPEC_VERSION },
        { createFeatureStructWrapper<VkPhysicalDeviceSubgroupSizeControlFeaturesEXT>, VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME, VK_EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION },
index 0d0c748..812aa23 100644 (file)
@@ -3,6 +3,7 @@
  */
 const vk::VkPhysicalDevice16BitStorageFeatures&                                                        get16BitStorageFeatures                                         (void) const;
 const vk::VkPhysicalDevice8BitStorageFeaturesKHR&                                              get8BitStorageFeatures                                          (void) const;
+const vk::VkPhysicalDeviceASTCDecodeFeaturesEXT&                                               getASTCDecodeFeatures                                           (void) const;
 const vk::VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT&                   getBlendOperationAdvancedFeatures                       (void) const;
 const vk::VkPhysicalDeviceBufferDeviceAddressFeaturesEXT&                              getBufferDeviceAddressFeatures                          (void) const;
 const vk::VkPhysicalDeviceCoherentMemoryFeaturesAMD&                                   getCoherentMemoryFeaturesAMD                            (void) const;
@@ -40,6 +41,7 @@ const vk::VkPhysicalDeviceShaderDrawParametersFeatures&                                       getShaderDrawParamet
 const vk::VkPhysicalDeviceShaderFloat16Int8FeaturesKHR&                                        getShaderFloat16Int8Features                            (void) const;
 const vk::VkPhysicalDeviceShaderImageFootprintFeaturesNV&                              getShaderImageFootprintFeatures                         (void) const;
 const vk::VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL&                        getShaderIntegerFunctions2FeaturesINTEL         (void) const;
+const vk::VkPhysicalDeviceShaderSMBuiltinsFeaturesNV&                                  getShaderSMBuiltinsFeatures                                     (void) const;
 const vk::VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR&              getShaderSubgroupExtendedTypesFeatures          (void) const;
 const vk::VkPhysicalDeviceShadingRateImageFeaturesNV&                                  getShadingRateImageFeatures                                     (void) const;
 const vk::VkPhysicalDeviceSubgroupSizeControlFeaturesEXT&                              getSubgroupSizeControlFeatures                          (void) const;
index 44ccff2..a055f8b 100644 (file)
@@ -3,6 +3,7 @@
  */
 const vk::VkPhysicalDevice16BitStorageFeatures&                                                        Context::get16BitStorageFeatures                                                (void) const { return m_device->get16BitStorageFeatures();                                              }
 const vk::VkPhysicalDevice8BitStorageFeaturesKHR&                                              Context::get8BitStorageFeatures                                                 (void) const { return m_device->get8BitStorageFeatures();                                               }
+const vk::VkPhysicalDeviceASTCDecodeFeaturesEXT&                                               Context::getASTCDecodeFeatures                                                  (void) const { return m_device->getASTCDecodeFeatures();                                                }
 const vk::VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT&                   Context::getBlendOperationAdvancedFeatures                              (void) const { return m_device->getBlendOperationAdvancedFeatures();                    }
 const vk::VkPhysicalDeviceBufferDeviceAddressFeaturesEXT&                              Context::getBufferDeviceAddressFeatures                                 (void) const { return m_device->getBufferDeviceAddressFeatures();                               }
 const vk::VkPhysicalDeviceCoherentMemoryFeaturesAMD&                                   Context::getCoherentMemoryFeaturesAMD                                   (void) const { return m_device->getCoherentMemoryFeaturesAMD();                                 }
@@ -40,6 +41,7 @@ const vk::VkPhysicalDeviceShaderDrawParametersFeatures&                                       Context::getShaderDr
 const vk::VkPhysicalDeviceShaderFloat16Int8FeaturesKHR&                                        Context::getShaderFloat16Int8Features                                   (void) const { return m_device->getShaderFloat16Int8Features();                                 }
 const vk::VkPhysicalDeviceShaderImageFootprintFeaturesNV&                              Context::getShaderImageFootprintFeatures                                (void) const { return m_device->getShaderImageFootprintFeatures();                              }
 const vk::VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL&                        Context::getShaderIntegerFunctions2FeaturesINTEL                (void) const { return m_device->getShaderIntegerFunctions2FeaturesINTEL();              }
+const vk::VkPhysicalDeviceShaderSMBuiltinsFeaturesNV&                                  Context::getShaderSMBuiltinsFeatures                                    (void) const { return m_device->getShaderSMBuiltinsFeatures();                                  }
 const vk::VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR&              Context::getShaderSubgroupExtendedTypesFeatures                 (void) const { return m_device->getShaderSubgroupExtendedTypesFeatures();               }
 const vk::VkPhysicalDeviceShadingRateImageFeaturesNV&                                  Context::getShadingRateImageFeatures                                    (void) const { return m_device->getShadingRateImageFeatures();                                  }
 const vk::VkPhysicalDeviceSubgroupSizeControlFeaturesEXT&                              Context::getSubgroupSizeControlFeatures                                 (void) const { return m_device->getSubgroupSizeControlFeatures();                               }
index 4d3d6b7..1a994a6 100644 (file)
@@ -3,6 +3,7 @@
  */
 const VkPhysicalDevice16BitStorageFeatures&                                                    get16BitStorageFeatures                                         (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDevice16BitStorageFeatures>();                                                  }
 const VkPhysicalDevice8BitStorageFeaturesKHR&                                          get8BitStorageFeatures                                          (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDevice8BitStorageFeaturesKHR>();                                                }
+const VkPhysicalDeviceASTCDecodeFeaturesEXT&                                           getASTCDecodeFeatures                                           (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceASTCDecodeFeaturesEXT>();                                                 }
 const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT&                       getBlendOperationAdvancedFeatures                       (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT>();                             }
 const VkPhysicalDeviceBufferDeviceAddressFeaturesEXT&                          getBufferDeviceAddressFeatures                          (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceBufferDeviceAddressFeaturesEXT>();                                }
 const VkPhysicalDeviceCoherentMemoryFeaturesAMD&                                       getCoherentMemoryFeaturesAMD                            (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceCoherentMemoryFeaturesAMD>();                                             }
@@ -40,6 +41,7 @@ const VkPhysicalDeviceShaderDrawParametersFeatures&                                   getShaderDrawParametersF
 const VkPhysicalDeviceShaderFloat16Int8FeaturesKHR&                                    getShaderFloat16Int8Features                            (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderFloat16Int8FeaturesKHR>();                                  }
 const VkPhysicalDeviceShaderImageFootprintFeaturesNV&                          getShaderImageFootprintFeatures                         (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderImageFootprintFeaturesNV>();                                }
 const VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL&                    getShaderIntegerFunctions2FeaturesINTEL         (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL>();                  }
+const VkPhysicalDeviceShaderSMBuiltinsFeaturesNV&                                      getShaderSMBuiltinsFeatures                                     (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderSMBuiltinsFeaturesNV>();                                    }
 const VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR&          getShaderSubgroupExtendedTypesFeatures          (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR>();                }
 const VkPhysicalDeviceShadingRateImageFeaturesNV&                                      getShadingRateImageFeatures                                     (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShadingRateImageFeaturesNV>();                                    }
 const VkPhysicalDeviceSubgroupSizeControlFeaturesEXT&                          getSubgroupSizeControlFeatures                          (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceSubgroupSizeControlFeaturesEXT>();                                }
index d4e32b1..19ba98c 100644 (file)
@@ -5,6 +5,8 @@ set(DEQP_VK_IMAGE_SRCS
        vktImageTests.hpp
        vktImageTestsUtil.cpp
        vktImageTestsUtil.hpp
+       vktImageAstcDecodeModeTests.cpp
+       vktImageAstcDecodeModeTests.hpp
        vktImageAtomicOperationTests.cpp
        vktImageAtomicOperationTests.hpp
        vktImageLoadStoreTests.cpp
diff --git a/external/vulkancts/modules/vulkan/image/vktImageAstcDecodeModeTests.cpp b/external/vulkancts/modules/vulkan/image/vktImageAstcDecodeModeTests.cpp
new file mode 100644 (file)
index 0000000..a821d3c
--- /dev/null
@@ -0,0 +1,574 @@
+/*------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2019 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ *//*!
+ * \file  vktImageAstcDecodeModeTests.cpp
+ * \brief Astc decode mode tests
+ *//*--------------------------------------------------------------------*/
+
+#include "vktImageAstcDecodeModeTests.hpp"
+#include "vktImageLoadStoreUtil.hpp"
+
+#include "vktTestCaseUtil.hpp"
+#include "vkBarrierUtil.hpp"
+#include "vkBuilderUtil.hpp"
+#include "vkQueryUtil.hpp"
+#include "vkCmdUtil.hpp"
+#include "vkObjUtil.hpp"
+
+#include "tcuTextureUtil.hpp"
+#include "tcuTexture.hpp"
+#include "tcuCompressedTexture.hpp"
+#include "tcuImageCompare.hpp"
+
+#include "deRandom.hpp"
+#include <vector>
+
+using namespace vk;
+namespace vkt
+{
+namespace image
+{
+namespace
+{
+using std::string;
+using std::vector;
+using tcu::TestContext;
+using tcu::TestStatus;
+using tcu::UVec3;
+using tcu::IVec3;
+using tcu::CompressedTexFormat;
+using tcu::CompressedTexture;
+using de::MovePtr;
+using de::SharedPtr;
+using de::Random;
+
+struct TestParameters
+{
+       ImageType                       imageType;
+       UVec3                           imageSize;
+
+       VkFormat                        testedFormat;
+       deBool                          testedIsUnorm;
+       VkFormat                        testedDecodeMode;
+       VkImageUsageFlags       testedImageUsage;
+
+       VkFormat                        resultFormat;
+       VkImageUsageFlags       resultImageUsage;
+};
+
+class BasicComputeTestInstance : public TestInstance
+{
+public:
+                                       BasicComputeTestInstance        (Context&                                       context,
+                                                                                                const TestParameters&          parameters);
+
+       TestStatus              iterate                                         (void);
+
+protected:
+
+       void                    generateData                            (deUint8*               toFill,
+                                                                                                const size_t   size,
+                                                                                                const VkFormat format,
+                                                                                                const deUint32 layer,
+                                                                                                const deUint32 level);
+
+protected:
+
+       const TestParameters    m_parameters;
+};
+
+BasicComputeTestInstance::BasicComputeTestInstance (Context& context, const TestParameters& parameters)
+       : TestInstance  (context)
+       , m_parameters  (parameters)
+{
+}
+
+TestStatus BasicComputeTestInstance::iterate (void)
+{
+       Allocator&                                              allocator                       = m_context.getDefaultAllocator();
+       const DeviceInterface&                  vk                                      = m_context.getDeviceInterface();
+       const VkDevice                                  device                          = m_context.getDevice();
+       const VkQueue                                   queue                           = m_context.getUniversalQueue();
+       const deUint32                                  queueFamilyIndex        = m_context.getUniversalQueueFamilyIndex();
+       const VkImageType                               imageType                       = mapImageType(m_parameters.imageType);
+       const VkExtent3D                                extentCompressed        = makeExtent3D(getCompressedImageResolutionInBlocks(m_parameters.testedFormat, m_parameters.imageSize));
+       const Unique<VkCommandPool>             cmdPool                         (createCommandPool(vk, device, VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT, queueFamilyIndex));
+       const Unique<VkCommandBuffer>   cmdBuffer                       (allocateCommandBuffer(vk, device, *cmdPool, VK_COMMAND_BUFFER_LEVEL_PRIMARY));
+       const Unique<VkShaderModule>    shaderModule            (createShaderModule(vk, device, m_context.getBinaryCollection().get("comp"), 0));
+
+       const VkImageCreateInfo compressedImageInfo =
+       {
+               VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,                                    // VkStructureType                      sType;
+               DE_NULL,                                                                                                // const void*                          pNext;
+               VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT |
+               VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT,                // VkImageCreateFlags           flags;
+               imageType,                                                                                              // VkImageType                          imageType;
+               m_parameters.testedFormat,                                                              // VkFormat                                     format;
+               extentCompressed,                                                                               // VkExtent3D                           extent;
+               1u,                                                                                                             // deUint32                                     mipLevels;
+               1u,                                                                                                             // deUint32                                     arrayLayers;
+               VK_SAMPLE_COUNT_1_BIT,                                                                  // VkSampleCountFlagBits        samples;
+               VK_IMAGE_TILING_OPTIMAL,                                                                // VkImageTiling                        tiling;
+               VK_IMAGE_USAGE_SAMPLED_BIT |
+               VK_IMAGE_USAGE_TRANSFER_DST_BIT,                                                // VkImageUsageFlags            usage;
+               VK_SHARING_MODE_EXCLUSIVE,                                                              // VkSharingMode                        sharingMode;
+               0u,                                                                                                             // deUint32                                     queueFamilyIndexCount;
+               DE_NULL,                                                                                                // const deUint32*                      pQueueFamilyIndices;
+               VK_IMAGE_LAYOUT_UNDEFINED,                                                              // VkImageLayout                        initialLayout;
+       };
+
+       const VkImageCreateInfo resultImageInfo =
+       {
+               VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,                                    // VkStructureType                      sType;
+               DE_NULL,                                                                                                // const void*                          pNext;
+               0u,                                                                                                             // VkImageCreateFlags           flags;
+               imageType,                                                                                              // VkImageType                          imageType;
+               m_parameters.resultFormat,                                                              // VkFormat                                     format;
+               extentCompressed,                                                                               // VkExtent3D                           extent;
+               1u,                                                                                                             // deUint32                                     mipLevels;
+               1u,                                                                                                             // deUint32                                     arrayLayers;
+               VK_SAMPLE_COUNT_1_BIT,                                                                  // VkSampleCountFlagBits        samples;
+               VK_IMAGE_TILING_OPTIMAL,                                                                // VkImageTiling                        tiling;
+               VK_IMAGE_USAGE_SAMPLED_BIT |
+               VK_IMAGE_USAGE_STORAGE_BIT |
+               VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
+               VK_IMAGE_USAGE_TRANSFER_DST_BIT,                                                // VkImageUsageFlags            usage;
+               VK_SHARING_MODE_EXCLUSIVE,                                                              // VkSharingMode                        sharingMode;
+               0u,                                                                                                             // deUint32                                     queueFamilyIndexCount;
+               DE_NULL,                                                                                                // const deUint32*                      pQueueFamilyIndices;
+               VK_IMAGE_LAYOUT_UNDEFINED,                                                              // VkImageLayout                        initialLayout;
+       };
+
+       // create images
+       Image                                                   testedImage                             (vk, device, allocator, compressedImageInfo, MemoryRequirement::Any);
+       Image                                                   referenceImage                  (vk, device, allocator, compressedImageInfo, MemoryRequirement::Any);
+       Image                                                   resultImage                             (vk, device, allocator, resultImageInfo, MemoryRequirement::Any);
+
+       // create image views
+       const VkImageViewType                   imageViewType                   (mapImageViewType(m_parameters.imageType));
+       VkImageSubresourceRange                 subresourceRange                = makeImageSubresourceRange(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u);
+       VkFormat                                                viewFormat                              = m_parameters.testedIsUnorm ? VK_FORMAT_R32G32B32A32_UINT : VK_FORMAT_R32G32B32A32_SINT;
+
+       VkImageViewASTCDecodeModeEXT decodeMode =
+       {
+               VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT,
+               DE_NULL,
+               m_parameters.testedDecodeMode
+       };
+
+       const VkImageViewCreateInfo imageViewParams =
+       {
+               VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,               // VkStructureType                      sType;
+               &decodeMode,                                                                    // const void*                          pNext;
+               0u,                                                                                             // VkImageViewCreateFlags       flags;
+               testedImage.get(),                                                              // VkImage                                      image;
+               imageViewType,                                                                  // VkImageViewType                      viewType;
+               viewFormat,                                                                             // VkFormat                                     format;
+               makeComponentMappingRGBA(),                                             // VkComponentMapping           components;
+               subresourceRange,                                                               // VkImageSubresourceRange      subresourceRange;
+       };
+
+       Move<VkImageView>                               testedView                              = createImageView(vk, device, &imageViewParams);
+       Move<VkImageView>                               referenceView                   = makeImageView(vk, device, referenceImage.get(), imageViewType, viewFormat, subresourceRange);
+       Move<VkImageView>                               resultView                              = makeImageView(vk, device, resultImage.get(), imageViewType, m_parameters.resultFormat,
+                                                                                                                               makeImageSubresourceRange(VK_IMAGE_ASPECT_COLOR_BIT, 0u, resultImageInfo.extent.depth, 0u, resultImageInfo.arrayLayers));
+
+       Move<VkDescriptorSetLayout>             descriptorSetLayout             = DescriptorSetLayoutBuilder()
+                                                                                                                               .addSingleBinding(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_SHADER_STAGE_COMPUTE_BIT)
+                                                                                                                               .addSingleBinding(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_SHADER_STAGE_COMPUTE_BIT)
+                                                                                                                               .addSingleBinding(VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, VK_SHADER_STAGE_COMPUTE_BIT)
+                                                                                                                               .build(vk, device);
+       Move<VkDescriptorPool>                  descriptorPool                  = DescriptorPoolBuilder()
+                                                                                                                               .addType(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, compressedImageInfo.arrayLayers)
+                                                                                                                               .addType(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, compressedImageInfo.arrayLayers)
+                                                                                                                               .addType(VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, resultImageInfo.arrayLayers)
+                                                                                                                               .build(vk, device, VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, resultImageInfo.arrayLayers);
+
+       Move<VkDescriptorSet>                   descriptorSet                   = makeDescriptorSet(vk, device, *descriptorPool, *descriptorSetLayout);
+       const Unique<VkPipelineLayout>  pipelineLayout                  (makePipelineLayout(vk, device, *descriptorSetLayout));
+       const Unique<VkPipeline>                pipeline                                (makeComputePipeline(vk, device, *pipelineLayout, *shaderModule));
+
+       const VkDeviceSize                              bufferSizeCompresed             = getCompressedImageSizeInBytes(m_parameters.testedFormat, m_parameters.imageSize);
+       const VkDeviceSize                              bufferSizeUncompressed  = getImageSizeBytes(IVec3((int)extentCompressed.width, (int)extentCompressed.height, (int)extentCompressed.depth), m_parameters.resultFormat);
+       VkBufferCreateInfo                              compressedBufferCI              = makeBufferCreateInfo(bufferSizeCompresed, VK_BUFFER_USAGE_TRANSFER_SRC_BIT);
+       VkBufferCreateInfo                              uncompressedBufferCI    = makeBufferCreateInfo(bufferSizeUncompressed, VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT);
+       Buffer                                                  inBuffer                                (vk, device, allocator, compressedBufferCI, MemoryRequirement::HostVisible);
+       Buffer                                                  resultBuffer                    (vk, device, allocator, uncompressedBufferCI, MemoryRequirement::HostVisible);
+       Move<VkSampler>                                 sampler;
+
+       // generate data for compressed image and copy it to in buffer
+       {
+               vector<deUint8> generatedData;
+               generatedData.resize(static_cast<size_t>(bufferSizeCompresed));
+               generateData(generatedData.data(), generatedData.size(), m_parameters.testedFormat, 0u, 0u);
+
+               const Allocation& alloc = inBuffer.getAllocation();
+               deMemcpy(alloc.getHostPtr(), generatedData.data(), generatedData.size());
+               flushAlloc(vk, device, alloc);
+       }
+
+       {
+               const VkSamplerCreateInfo createInfo    =
+               {
+                       VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO,                  //VkStructureType               sType;
+                       DE_NULL,                                                                                //const void*                   pNext;
+                       0u,                                                                                             //VkSamplerCreateFlags  flags;
+                       VK_FILTER_NEAREST,                                                              //VkFilter                              magFilter;
+                       VK_FILTER_NEAREST,                                                              //VkFilter                              minFilter;
+                       VK_SAMPLER_MIPMAP_MODE_NEAREST,                                 //VkSamplerMipmapMode   mipmapMode;
+                       VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE,                  //VkSamplerAddressMode  addressModeU;
+                       VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE,                  //VkSamplerAddressMode  addressModeV;
+                       VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE,                  //VkSamplerAddressMode  addressModeW;
+                       0.0f,                                                                                   //float                                 mipLodBias;
+                       VK_FALSE,                                                                               //VkBool32                              anisotropyEnable;
+                       1.0f,                                                                                   //float                                 maxAnisotropy;
+                       VK_FALSE,                                                                               //VkBool32                              compareEnable;
+                       VK_COMPARE_OP_EQUAL,                                                    //VkCompareOp                   compareOp;
+                       0.0f,                                                                                   //float                                 minLod;
+                       1.0f,                                                                                   //float                                 maxLod;
+                       VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK,                //VkBorderColor                 borderColor;
+                       VK_FALSE,                                                                               //VkBool32                              unnormalizedCoordinates;
+               };
+               sampler = createSampler(vk, device, &createInfo);
+       }
+
+       VkDescriptorImageInfo descriptorImageInfos[] =
+       {
+               makeDescriptorImageInfo(*sampler,       *testedView,    VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL),
+               makeDescriptorImageInfo(*sampler,       *referenceView, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL),
+               makeDescriptorImageInfo(DE_NULL,        *resultView,    VK_IMAGE_LAYOUT_GENERAL),
+       };
+       DescriptorSetUpdateBuilder()
+               .writeSingle(descriptorSet.get(), DescriptorSetUpdateBuilder::Location::binding(0u), VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, &descriptorImageInfos[0])
+               .writeSingle(descriptorSet.get(), DescriptorSetUpdateBuilder::Location::binding(1u), VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, &descriptorImageInfos[1])
+               .writeSingle(descriptorSet.get(), DescriptorSetUpdateBuilder::Location::binding(2u), VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, &descriptorImageInfos[2])
+               .update(vk, device);
+
+       beginCommandBuffer(vk, *cmdBuffer);
+       {
+               // copy input buffer to tested and reference images
+               {
+                       Image* inImages[] = { &testedImage, &referenceImage };
+                       for (Image* image : inImages)
+                       {
+                               const VkImageMemoryBarrier preCopyImageBarrier = makeImageMemoryBarrier(
+                                       0u, VK_ACCESS_TRANSFER_WRITE_BIT,
+                                       VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
+                                       image->get(), subresourceRange);
+
+                               const VkBufferMemoryBarrier flushHostCopyBarrier = makeBufferMemoryBarrier(
+                                       VK_ACCESS_HOST_WRITE_BIT, VK_ACCESS_TRANSFER_READ_BIT,
+                                       inBuffer.get(), 0ull, bufferSizeCompresed);
+
+                               vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT,
+                                       (VkDependencyFlags)0, 0u, (const VkMemoryBarrier*)DE_NULL, 1u, &flushHostCopyBarrier, 1u, &preCopyImageBarrier);
+
+                               const VkBufferImageCopy copyRegion =
+                               {
+                                       0ull,                                                                                                                                                   //VkDeviceSize                          bufferOffset;
+                                       0u,                                                                                                                                                             //deUint32                                      bufferRowLength;
+                                       0u,                                                                                                                                                             //deUint32                                      bufferImageHeight;
+                                       makeImageSubresourceLayers(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 0u, 1u),                              //VkImageSubresourceLayers      imageSubresource;
+                                       makeOffset3D(0, 0, 0),                                                                                                                  //VkOffset3D                            imageOffset;
+                                       extentCompressed,                                                                                                                               //VkExtent3D                            imageExtent;
+                               };
+
+                               vk.cmdCopyBufferToImage(*cmdBuffer, inBuffer.get(), image->get(), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1u, &copyRegion);
+                       }
+               }
+
+               // bind pipeline and descriptors
+               vk.cmdBindPipeline(*cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, *pipeline);
+               vk.cmdBindDescriptorSets(*cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, *pipelineLayout, 0u, 1u, &descriptorSet.get(), 0u, DE_NULL);
+
+               {
+                       const VkImageMemoryBarrier preShaderImageBarriers[] =
+                       {
+                               makeImageMemoryBarrier(VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_SHADER_READ_BIT,
+                                       VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
+                                       testedImage.get(), subresourceRange),
+
+                               makeImageMemoryBarrier(VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_SHADER_READ_BIT,
+                                       VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
+                                       referenceImage.get(), subresourceRange),
+
+                               makeImageMemoryBarrier(0u, VK_ACCESS_SHADER_WRITE_BIT,
+                                       VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_GENERAL,
+                                       resultImage.get(), subresourceRange)
+                       };
+
+                       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
+                               (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 0u, (const VkBufferMemoryBarrier*)DE_NULL,
+                               DE_LENGTH_OF_ARRAY(preShaderImageBarriers), preShaderImageBarriers);
+               }
+
+               vk.cmdDispatch(*cmdBuffer, extentCompressed.width, extentCompressed.height, extentCompressed.depth);
+
+               {
+                       const VkImageMemoryBarrier postShaderImageBarriers[] =
+                       {
+                               makeImageMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_TRANSFER_READ_BIT,
+                                       VK_IMAGE_LAYOUT_GENERAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
+                                       resultImage.get(), subresourceRange)
+                       };
+
+                       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT,
+                               (VkDependencyFlags)0, 0u, (const VkMemoryBarrier*)DE_NULL, 0u, (const VkBufferMemoryBarrier*)DE_NULL,
+                               DE_LENGTH_OF_ARRAY(postShaderImageBarriers), postShaderImageBarriers);
+               }
+
+               const VkBufferImageCopy copyRegion =
+               {
+                       0ull,                                                                                                                           //      VkDeviceSize                            bufferOffset;
+                       0u,                                                                                                                                     //      deUint32                                        bufferRowLength;
+                       0u,                                                                                                                                     //      deUint32                                        bufferImageHeight;
+                       makeImageSubresourceLayers(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 0u, 1u),      //      VkImageSubresourceLayers        imageSubresource;
+                       makeOffset3D(0, 0, 0),                                                                                          //      VkOffset3D                                      imageOffset;
+                       resultImageInfo.extent,                                                                                         //      VkExtent3D                                      imageExtent;
+               };
+               vk.cmdCopyImageToBuffer(*cmdBuffer, resultImage.get(), VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, resultBuffer.get(), 1u, &copyRegion);
+
+               {
+                       const VkBufferMemoryBarrier postCopyBufferBarrier[] =
+                       {
+                               makeBufferMemoryBarrier(VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT,
+                                       resultBuffer.get(), 0ull, bufferSizeUncompressed),
+                       };
+
+                       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT,
+                               (VkDependencyFlags)0, 0u, (const VkMemoryBarrier*)DE_NULL, DE_LENGTH_OF_ARRAY(postCopyBufferBarrier), postCopyBufferBarrier,
+                               0u, (const VkImageMemoryBarrier*)DE_NULL);
+               }
+       }
+       endCommandBuffer(vk, *cmdBuffer);
+       submitCommandsAndWait(vk, device, queue, *cmdBuffer);
+
+       const Allocation& resultAlloc = resultBuffer.getAllocation();
+       invalidateAlloc(vk, device, resultAlloc);
+
+       // verification is done in shader - here we just check if one of pixels has wrong value
+       const size_t    numBytes                = static_cast<size_t>(bufferSizeUncompressed);
+       deUint8*                result          = static_cast<deUint8*>(resultAlloc.getHostPtr());
+       for (size_t i = 0 ; i < numBytes ; i += 4)
+       {
+               // expected result should be around 128 (if reference is same as tested mode then we return 0.5)
+               if ((result[i] < 100) || (result[i] > 150))
+                       return TestStatus::fail("Fail");
+       }
+
+       return TestStatus::pass("Pass");
+}
+
+void BasicComputeTestInstance::generateData (deUint8*          toFill,
+                                                                                        const size_t   size,
+                                                                                        const VkFormat format,
+                                                                                        const deUint32 layer,
+                                                                                        const deUint32 level)
+{
+       // Random data
+       deUint32*       start32         = reinterpret_cast<deUint32*>(toFill);
+       size_t          sizeToRnd32     = size / sizeof(deUint32);
+       deUint32        seed            = (layer << 24) ^ (level << 16) ^ static_cast<deUint32>(format);
+       Random          rnd                     (seed);
+
+       for (size_t i = 0; i < sizeToRnd32; i++)
+               start32[i] = rnd.getUint32();
+}
+
+class AstcDecodeModeCase : public TestCase
+{
+public:
+                                       AstcDecodeModeCase      (TestContext&                   testCtx,
+                                                                                const std::string&             name,
+                                                                                const std::string&             desc,
+                                                                                const TestParameters&  parameters);
+       virtual void    checkSupport            (Context&                               context) const;
+       void                    initPrograms            (SourceCollections&             programCollection) const;
+       TestInstance*   createInstance          (Context&                               context) const;
+
+protected:
+
+       const TestParameters m_parameters;
+};
+
+AstcDecodeModeCase::AstcDecodeModeCase (TestContext&                   testCtx,
+                                                                               const std::string&              name,
+                                                                               const std::string&              desc,
+                                                                               const TestParameters&   parameters)
+       : TestCase              (testCtx, name, desc)
+       , m_parameters  (parameters)
+{
+}
+
+void AstcDecodeModeCase::checkSupport (Context& context) const
+{
+       const VkPhysicalDevice          physicalDevice  = context.getPhysicalDevice();
+       const InstanceInterface&        vk                              = context.getInstanceInterface();
+
+       context.requireDeviceFunctionality("VK_EXT_astc_decode_mode");
+       if (!getPhysicalDeviceFeatures(vk, physicalDevice).textureCompressionASTC_LDR)
+               TCU_THROW(NotSupportedError, "textureCompressionASTC_LDR not supported");
+
+       VkImageFormatProperties imageFormatProperties;
+       if (VK_ERROR_FORMAT_NOT_SUPPORTED == vk.getPhysicalDeviceImageFormatProperties(physicalDevice, m_parameters.testedFormat,
+                                                                                                 mapImageType(m_parameters.imageType), VK_IMAGE_TILING_OPTIMAL,
+                                                                                                 m_parameters.testedImageUsage, 0u, &imageFormatProperties))
+               TCU_THROW(NotSupportedError, "Operation not supported with this image format");
+
+       if (VK_ERROR_FORMAT_NOT_SUPPORTED == vk.getPhysicalDeviceImageFormatProperties(physicalDevice, m_parameters.resultFormat,
+                                                                                                 mapImageType(m_parameters.imageType), VK_IMAGE_TILING_OPTIMAL,
+                                                                                                 m_parameters.resultImageUsage, 0u, &imageFormatProperties))
+               TCU_THROW(NotSupportedError, "Operation not supported with this image format");
+
+       if ((m_parameters.testedDecodeMode == VK_FORMAT_E5B9G9R9_UFLOAT_PACK32) &&
+               !context.getASTCDecodeFeatures().decodeModeSharedExponent)
+               TCU_THROW(NotSupportedError, "decodeModeSharedExponent not supported");
+
+       VkFormatProperties properties;
+       context.getInstanceInterface().getPhysicalDeviceFormatProperties(context.getPhysicalDevice(), m_parameters.resultFormat, &properties);
+       if (!(properties.optimalTilingFeatures & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT))
+               TCU_THROW(NotSupportedError, "Format storage feature not supported");
+}
+
+void AstcDecodeModeCase::initPrograms (vk::SourceCollections& programCollection) const
+{
+       DE_ASSERT(m_parameters.imageSize.x() > 0);
+       DE_ASSERT(m_parameters.imageSize.y() > 0);
+
+       VkFormat                                        compatibileFormat       = m_parameters.testedIsUnorm ? VK_FORMAT_R32G32B32A32_UINT : VK_FORMAT_R32G32B32A32_SINT;
+       tcu::TextureFormat                      testedTextureFormat     = mapVkFormat(compatibileFormat);
+       VkImageViewType                         imageViewType           = mapImageViewType(m_parameters.imageType);
+       string                                          samplerType                     = getGlslSamplerType(testedTextureFormat, imageViewType);
+       const string                            formatQualifierStr      = getShaderImageFormatQualifier(mapVkFormat(m_parameters.resultFormat));
+       const string                            imageTypeStr            = getShaderImageType(mapVkFormat(m_parameters.resultFormat), m_parameters.imageType);
+
+       std::ostringstream      src;
+       src << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_450) << "\n"
+               << "layout (local_size_x = 1, local_size_y = 1, local_size_z = 1) in;\n\n"
+               << "layout (binding = 0) uniform " << samplerType << " compressed_tested;\n"
+               << "layout (binding = 1) uniform " << samplerType << " compressed_reference;\n"
+               << "layout (binding = 2, " << formatQualifierStr << ") writeonly uniform " << imageTypeStr << " result;\n"
+               << "void main (void)\n"
+               << "{\n"
+               << "    const vec2 pixels_resolution = vec2(gl_NumWorkGroups.xy);\n"
+               << "    const vec2 cord = vec2(gl_GlobalInvocationID.xy) / vec2(pixels_resolution);\n"
+               << "    const ivec2 pos = ivec2(gl_GlobalInvocationID.xy); \n"
+               << "    vec4 tested = texture(compressed_tested, cord);\n"
+               << "    vec4 reference = texture(compressed_reference, cord);\n";
+
+       // special case for e5b9g9r9 decode mode that was set on unorm astc formats
+       // here negative values are clamped to zero and alpha is set to 1
+       if (m_parameters.testedIsUnorm && (m_parameters.testedDecodeMode == VK_FORMAT_E5B9G9R9_UFLOAT_PACK32))
+               src << "    reference = max(vec4(0,0,0,1), reference);\n"
+                          "    float result_color = 0.5 * float(distance(tested, reference) < 0.01);\n";
+       else
+               src << "    float result_color = 0.5 * float(distance(tested, reference) < 0.01);\n";
+
+       src << "    imageStore(result, pos, vec4(result_color));\n"
+               << "}\n";
+
+       programCollection.glslSources.add("comp") << glu::ComputeSource(src.str());
+}
+
+TestInstance* AstcDecodeModeCase::createInstance (Context& context) const
+{
+       return new BasicComputeTestInstance(context, m_parameters);
+}
+
+} // anonymous ns
+
+tcu::TestCaseGroup* createImageAstcDecodeModeTests (tcu::TestContext& testCtx)
+{
+       struct FormatData
+       {
+               VkFormat                format;
+               std::string             name;
+               deBool                  isUnorm;
+       };
+       const FormatData astcFormats[] =
+       {
+               { VK_FORMAT_ASTC_4x4_UNORM_BLOCK,               "4x4_unorm",    DE_TRUE },
+               { VK_FORMAT_ASTC_4x4_SRGB_BLOCK,                "4x4_srgb",             DE_FALSE },
+               { VK_FORMAT_ASTC_5x4_UNORM_BLOCK,               "5x4_unorm",    DE_TRUE },
+               { VK_FORMAT_ASTC_5x4_SRGB_BLOCK,                "5x4_srgb",             DE_FALSE },
+               { VK_FORMAT_ASTC_5x5_UNORM_BLOCK,               "5x5_unorm",    DE_TRUE },
+               { VK_FORMAT_ASTC_5x5_SRGB_BLOCK,                "5x5_srgb",             DE_FALSE },
+               { VK_FORMAT_ASTC_6x5_UNORM_BLOCK,               "6x5_unorm",    DE_TRUE },
+               { VK_FORMAT_ASTC_6x5_SRGB_BLOCK,                "6x5_srgb",             DE_FALSE },
+               { VK_FORMAT_ASTC_6x6_UNORM_BLOCK,               "6x6_unorm",    DE_TRUE },
+               { VK_FORMAT_ASTC_6x6_SRGB_BLOCK,                "6x6_srgb",             DE_FALSE },
+               { VK_FORMAT_ASTC_8x5_UNORM_BLOCK,               "8x5_unorm",    DE_TRUE },
+               { VK_FORMAT_ASTC_8x5_SRGB_BLOCK,                "8x5_srgb",             DE_FALSE },
+               { VK_FORMAT_ASTC_8x6_UNORM_BLOCK,               "8x6_unorm",    DE_TRUE },
+               { VK_FORMAT_ASTC_8x6_SRGB_BLOCK,                "8x6_srgb",             DE_FALSE },
+               { VK_FORMAT_ASTC_8x8_UNORM_BLOCK,               "8x8_unorm",    DE_TRUE },
+               { VK_FORMAT_ASTC_8x8_SRGB_BLOCK,                "8x8_srgb",             DE_FALSE },
+               { VK_FORMAT_ASTC_10x5_UNORM_BLOCK,              "10x5_unorm",   DE_TRUE },
+               { VK_FORMAT_ASTC_10x5_SRGB_BLOCK,               "10x5_srgb",    DE_FALSE },
+               { VK_FORMAT_ASTC_10x6_UNORM_BLOCK,              "10x6_unorm",   DE_TRUE },
+               { VK_FORMAT_ASTC_10x6_SRGB_BLOCK,               "10x6_srgb",    DE_FALSE },
+               { VK_FORMAT_ASTC_10x8_UNORM_BLOCK,              "10x8_unorm",   DE_TRUE },
+               { VK_FORMAT_ASTC_10x8_SRGB_BLOCK,               "10x8_srgb",    DE_FALSE },
+               { VK_FORMAT_ASTC_10x10_UNORM_BLOCK,             "10x10_unorm",  DE_TRUE },
+               { VK_FORMAT_ASTC_10x10_SRGB_BLOCK,              "10x10_srgb",   DE_FALSE },
+               { VK_FORMAT_ASTC_12x10_UNORM_BLOCK,             "12x10_unorm",  DE_TRUE },
+               { VK_FORMAT_ASTC_12x10_SRGB_BLOCK,              "12x10_srgb",   DE_FALSE },
+               { VK_FORMAT_ASTC_12x12_UNORM_BLOCK,             "12x12_unorm",  DE_TRUE },
+               { VK_FORMAT_ASTC_12x12_SRGB_BLOCK,              "12x12_srgb",   DE_FALSE },
+       };
+
+       struct DecodeModeData
+       {
+               VkFormat                mode;
+               std::string             name;
+       };
+       const DecodeModeData decodeModes[] =
+       {
+               { VK_FORMAT_R16G16B16A16_SFLOAT,        "r16g16b16a16_sfloat" },
+               { VK_FORMAT_R8G8B8A8_UNORM,                     "r8g8b8a8_unorm" },
+               { VK_FORMAT_E5B9G9R9_UFLOAT_PACK32,     "e5b9g9r9_ufloat_pack32" }
+       };
+
+       MovePtr<tcu::TestCaseGroup> astcDecodeModeTests(new tcu::TestCaseGroup(testCtx, "astc_decode_mode", "Intermediate decoding precision cases"));
+       for (const FormatData& format : astcFormats)
+       {
+               for (const DecodeModeData& mode : decodeModes)
+               {
+                       const TestParameters parameters =
+                       {
+                               IMAGE_TYPE_2D,
+                               UVec3(64u, 64u, 1u),
+                               format.format,
+                               format.isUnorm,
+                               mode.mode,
+                               VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT,
+                               VK_FORMAT_R8G8B8A8_UNORM,
+                               VK_IMAGE_USAGE_STORAGE_BIT
+                       };
+
+                       std::string name = format.name + "_to_" + mode.name;
+                       astcDecodeModeTests->addChild(new AstcDecodeModeCase(testCtx, name, "", parameters));
+               }
+       }
+
+       return astcDecodeModeTests.release();
+}
+
+} // image
+} // vkt
diff --git a/external/vulkancts/modules/vulkan/image/vktImageAstcDecodeModeTests.hpp b/external/vulkancts/modules/vulkan/image/vktImageAstcDecodeModeTests.hpp
new file mode 100644 (file)
index 0000000..9932d81
--- /dev/null
@@ -0,0 +1,39 @@
+#ifndef _VKTIMAGEASTCDECODEMODETESTS_HPP
+#define _VKTIMAGEASTCDECODEMODETESTS_HPP
+/*------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2019 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ *//*!
+ * \file  vktImageAstcDecodeModeTests.hpp
+ * \brief Astc decode mode tests
+ *//*--------------------------------------------------------------------*/
+
+#include "tcuDefs.hpp"
+#include "tcuTestCase.hpp"
+
+namespace vkt
+{
+namespace image
+{
+
+tcu::TestCaseGroup* createImageAstcDecodeModeTests (tcu::TestContext& testCtx);
+
+} // image
+} // vkt
+
+#endif // _VKTIMAGEASTCDECODEMODETESTS_HPP
index 223e718..793c21d 100644 (file)
@@ -31,6 +31,7 @@
 #include "vktImageAtomicOperationTests.hpp"
 #include "vktImageCompressionTranscodingSupport.hpp"
 #include "vktImageTranscodingSupportTests.hpp"
+#include "vktImageAstcDecodeModeTests.hpp"
 #include "vktImageMisalignedCubeTests.hpp"
 
 namespace vkt
@@ -57,6 +58,7 @@ void createChildren (tcu::TestCaseGroup* imageTests)
        imageTests->addChild(createImageCompressionTranscodingTests(testCtx));
        imageTests->addChild(createImageTranscodingSupportTests(testCtx));
        imageTests->addChild(createImageExtendOperandsTests(testCtx));
+       imageTests->addChild(createImageAstcDecodeModeTests(testCtx));
        imageTests->addChild(createMisalignedCubeTests(testCtx));
 }
 
index 4c16ea1..8f34487 100644 (file)
@@ -425980,6 +425980,90 @@ dEQP-VK.image.extend_operands_spirv1p4.r8_sint_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r8_sint_force_sign_extend
 dEQP-VK.image.extend_operands_spirv1p4.r8_sint_relaxed_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r8_sint_relaxed_force_sign_extend
+dEQP-VK.image.astc_decode_mode.4x4_unorm_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.4x4_unorm_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.4x4_unorm_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.4x4_srgb_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.4x4_srgb_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.4x4_srgb_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.5x4_unorm_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.5x4_unorm_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.5x4_unorm_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.5x4_srgb_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.5x4_srgb_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.5x4_srgb_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.5x5_unorm_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.5x5_unorm_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.5x5_unorm_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.5x5_srgb_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.5x5_srgb_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.5x5_srgb_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.6x5_unorm_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.6x5_unorm_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.6x5_unorm_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.6x5_srgb_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.6x5_srgb_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.6x5_srgb_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.6x6_unorm_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.6x6_unorm_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.6x6_unorm_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.6x6_srgb_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.6x6_srgb_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.6x6_srgb_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.8x5_unorm_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.8x5_unorm_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.8x5_unorm_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.8x5_srgb_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.8x5_srgb_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.8x5_srgb_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.8x6_unorm_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.8x6_unorm_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.8x6_unorm_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.8x6_srgb_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.8x6_srgb_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.8x6_srgb_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.8x8_unorm_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.8x8_unorm_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.8x8_unorm_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.8x8_srgb_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.8x8_srgb_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.8x8_srgb_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.10x5_unorm_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.10x5_unorm_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.10x5_unorm_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.10x5_srgb_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.10x5_srgb_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.10x5_srgb_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.10x6_unorm_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.10x6_unorm_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.10x6_unorm_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.10x6_srgb_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.10x6_srgb_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.10x6_srgb_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.10x8_unorm_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.10x8_unorm_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.10x8_unorm_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.10x8_srgb_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.10x8_srgb_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.10x8_srgb_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.10x10_unorm_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.10x10_unorm_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.10x10_unorm_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.10x10_srgb_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.10x10_srgb_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.10x10_srgb_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.12x10_unorm_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.12x10_unorm_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.12x10_unorm_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.12x10_srgb_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.12x10_srgb_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.12x10_srgb_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.12x12_unorm_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.12x12_unorm_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.12x12_unorm_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.12x12_srgb_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.12x12_srgb_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.12x12_srgb_to_e5b9g9r9_ufloat_pack32
 dEQP-VK.image.misaligned_cube.7
 dEQP-VK.image.misaligned_cube.8
 dEQP-VK.image.misaligned_cube.9
index 645d9ad..e091e43 100644 (file)
@@ -425941,6 +425941,90 @@ dEQP-VK.image.extend_operands_spirv1p4.r8_sint_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r8_sint_force_sign_extend
 dEQP-VK.image.extend_operands_spirv1p4.r8_sint_relaxed_matching_extend
 dEQP-VK.image.extend_operands_spirv1p4.r8_sint_relaxed_force_sign_extend
+dEQP-VK.image.astc_decode_mode.4x4_unorm_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.4x4_unorm_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.4x4_unorm_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.4x4_srgb_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.4x4_srgb_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.4x4_srgb_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.5x4_unorm_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.5x4_unorm_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.5x4_unorm_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.5x4_srgb_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.5x4_srgb_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.5x4_srgb_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.5x5_unorm_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.5x5_unorm_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.5x5_unorm_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.5x5_srgb_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.5x5_srgb_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.5x5_srgb_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.6x5_unorm_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.6x5_unorm_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.6x5_unorm_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.6x5_srgb_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.6x5_srgb_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.6x5_srgb_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.6x6_unorm_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.6x6_unorm_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.6x6_unorm_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.6x6_srgb_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.6x6_srgb_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.6x6_srgb_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.8x5_unorm_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.8x5_unorm_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.8x5_unorm_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.8x5_srgb_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.8x5_srgb_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.8x5_srgb_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.8x6_unorm_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.8x6_unorm_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.8x6_unorm_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.8x6_srgb_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.8x6_srgb_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.8x6_srgb_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.8x8_unorm_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.8x8_unorm_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.8x8_unorm_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.8x8_srgb_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.8x8_srgb_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.8x8_srgb_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.10x5_unorm_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.10x5_unorm_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.10x5_unorm_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.10x5_srgb_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.10x5_srgb_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.10x5_srgb_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.10x6_unorm_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.10x6_unorm_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.10x6_unorm_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.10x6_srgb_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.10x6_srgb_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.10x6_srgb_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.10x8_unorm_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.10x8_unorm_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.10x8_unorm_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.10x8_srgb_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.10x8_srgb_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.10x8_srgb_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.10x10_unorm_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.10x10_unorm_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.10x10_unorm_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.10x10_srgb_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.10x10_srgb_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.10x10_srgb_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.12x10_unorm_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.12x10_unorm_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.12x10_unorm_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.12x10_srgb_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.12x10_srgb_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.12x10_srgb_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.12x12_unorm_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.12x12_unorm_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.12x12_unorm_to_e5b9g9r9_ufloat_pack32
+dEQP-VK.image.astc_decode_mode.12x12_srgb_to_r16g16b16a16_sfloat
+dEQP-VK.image.astc_decode_mode.12x12_srgb_to_r8g8b8a8_unorm
+dEQP-VK.image.astc_decode_mode.12x12_srgb_to_e5b9g9r9_ufloat_pack32
 dEQP-VK.image.misaligned_cube.7
 dEQP-VK.image.misaligned_cube.8
 dEQP-VK.image.misaligned_cube.9
index 2d49cf7..64c6edd 100644 (file)
@@ -1547,11 +1547,15 @@ def generateDeviceFeaturesDefs(src):
        for sType, sSuffix in matches:
                structName                      = re.sub("[_0-9][a-z]", lambda match: match.group(0).upper(), sType.capitalize()).replace('_', '')
                ptrnStructName          = r'\s*typedef\s+struct\s+(VkPhysicalDevice' + structName + 'Features' + sSuffix[1:] + ')'
-               matchStructName         = re.search(ptrnStructName, src, re.M)
+               matchStructName         = re.search(ptrnStructName, src, re.IGNORECASE)
                if matchStructName:
                        # handle special cases
                        if sType == "EXCLUSIVE_SCISSOR":
                                sType = "SCISSOR_EXCLUSIVE"
+                       elif sType == "ASTC_DECODE":
+                               sType = "ASTC_DECODE_MODE"
+                       elif sType == "TEXTURE_COMPRESSION_ASTC_HDR":
+                               continue # skip due to const pNext
                        # end handling special cases
                        ptrnExtensionName       = r'^\s*#define\s+(\w+' + sSuffix + '_' + sType + '_EXTENSION_NAME).+$'
                        matchExtensionName      = re.search(ptrnExtensionName, src, re.M)
@@ -1579,6 +1583,8 @@ def writeDeviceFeatures(dfDefs, filename):
                # handle special cases
                if sType == "SCISSOR_EXCLUSIVE":
                        sType = "EXCLUSIVE_SCISSOR"
+               elif sType == "ASTC_DECODE_MODE":
+                       sType = "ASTC_DECODE"
                # end handling special cases
                # construct makeFeatureDesc template function definitions
                sTypeName = "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_{0}_FEATURES{1}".format(sType, sSuffix)