From: Jeff Bolz Date: Sun, 2 Jun 2019 04:11:00 +0000 (-0500) Subject: New tests for VK_EXT_shader_demote_to_helper_invocation X-Git-Tag: upstream/1.3.5~1811^2~42 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=21004be055ea6db845ca5f6bdcfc5bd5ab616e9a;p=platform%2Fupstream%2FVK-GL-CTS.git New tests for VK_EXT_shader_demote_to_helper_invocation Based on dEQP-VK.glsl.discard.* New Tests: dEQP-VK.glsl.demote.* Components: Vulkan Change-Id: I9c2346592cac51cfe2de10f9586c4790c04766b6 (cherry picked from commit 529b996513d092334de3dabd4b3e44031201bdd9) --- diff --git a/android/cts/master/vk-master.txt b/android/cts/master/vk-master.txt index 030cc40..8890b61 100644 --- a/android/cts/master/vk-master.txt +++ b/android/cts/master/vk-master.txt @@ -290061,6 +290061,36 @@ dEQP-VK.glsl.discard.function_static_loop_never dEQP-VK.glsl.discard.function_static_loop_uniform dEQP-VK.glsl.discard.function_static_loop_dynamic dEQP-VK.glsl.discard.function_static_loop_texture +dEQP-VK.glsl.demote.basic_always +dEQP-VK.glsl.demote.basic_never +dEQP-VK.glsl.demote.basic_uniform +dEQP-VK.glsl.demote.basic_dynamic +dEQP-VK.glsl.demote.basic_texture +dEQP-VK.glsl.demote.basic_deriv +dEQP-VK.glsl.demote.function_always +dEQP-VK.glsl.demote.function_never +dEQP-VK.glsl.demote.function_uniform +dEQP-VK.glsl.demote.function_dynamic +dEQP-VK.glsl.demote.function_texture +dEQP-VK.glsl.demote.function_deriv +dEQP-VK.glsl.demote.static_loop_always +dEQP-VK.glsl.demote.static_loop_never +dEQP-VK.glsl.demote.static_loop_uniform +dEQP-VK.glsl.demote.static_loop_dynamic +dEQP-VK.glsl.demote.static_loop_texture +dEQP-VK.glsl.demote.static_loop_deriv +dEQP-VK.glsl.demote.dynamic_loop_always +dEQP-VK.glsl.demote.dynamic_loop_never +dEQP-VK.glsl.demote.dynamic_loop_uniform +dEQP-VK.glsl.demote.dynamic_loop_dynamic +dEQP-VK.glsl.demote.dynamic_loop_texture +dEQP-VK.glsl.demote.dynamic_loop_deriv +dEQP-VK.glsl.demote.function_static_loop_always +dEQP-VK.glsl.demote.function_static_loop_never +dEQP-VK.glsl.demote.function_static_loop_uniform +dEQP-VK.glsl.demote.function_static_loop_dynamic +dEQP-VK.glsl.demote.function_static_loop_texture +dEQP-VK.glsl.demote.function_static_loop_deriv dEQP-VK.glsl.indexing.varying_array.float_static_write_static_read dEQP-VK.glsl.indexing.varying_array.float_static_write_dynamic_read dEQP-VK.glsl.indexing.varying_array.float_static_write_static_loop_read diff --git a/external/fetch_sources.py b/external/fetch_sources.py index 95cde69..1482dde 100644 --- a/external/fetch_sources.py +++ b/external/fetch_sources.py @@ -321,13 +321,13 @@ PACKAGES = [ GitRepo( "https://github.com/KhronosGroup/glslang.git", None, - "a549bb81752365526f6d7334f00961ea08689211", + "6a50a7850d9fe6fea5eb911dfd19f7efe9057481", "glslang", removeTags = ["master-tot"]), GitRepo( "https://github.com/KhronosGroup/SPIRV-Headers.git", None, - "8b911bd2ba37677037b38c9bd286c7c05701bcda", + "123dc278f204f8e833e1a88d31c46d0edf81d4b2", "spirv-headers"), GitRepo( "https://github.com/google/amber.git", diff --git a/external/vulkancts/framework/vulkan/vkBasicTypes.inl b/external/vulkancts/framework/vulkan/vkBasicTypes.inl index 43dacdf..2fa9839 100644 --- a/external/vulkancts/framework/vulkan/vkBasicTypes.inl +++ b/external/vulkancts/framework/vulkan/vkBasicTypes.inl @@ -453,6 +453,7 @@ enum VkStructureType VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT = 1000256000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT = 1000261000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT = 1000265000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT = 1000276000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR = 1000269000, VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR = 1000269001, VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR = 1000269002, @@ -2832,6 +2833,7 @@ VK_DEFINE_PLATFORM_TYPE(CAMetalLayer, void*); #define VK_EXT_HEADLESS_SURFACE_SPEC_VERSION 0 #define VK_EXT_HOST_QUERY_RESET_SPEC_VERSION 1 #define VK_EXT_INDEX_TYPE_UINT8_SPEC_VERSION 1 +#define VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION 1 #define VK_KHR_ANDROID_SURFACE_SPEC_VERSION 6 #define VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION 3 #define VK_FUCHSIA_IMAGEPIPE_SURFACE_SPEC_VERSION 1 diff --git a/external/vulkancts/framework/vulkan/vkDeviceFeatures.inl b/external/vulkancts/framework/vulkan/vkDeviceFeatures.inl index 68d4d12..b876a40 100644 --- a/external/vulkancts/framework/vulkan/vkDeviceFeatures.inl +++ b/external/vulkancts/framework/vulkan/vkDeviceFeatures.inl @@ -38,6 +38,7 @@ namespace vk #define VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME "VK_KHR_uniform_buffer_standard_layout" #define VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME "VK_EXT_host_query_reset" #define VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME "VK_EXT_index_type_uint8" +#define VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME "VK_EXT_shader_demote_to_helper_invocation" #define VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME "VK_KHR_pipeline_executable_properties" #define VK_KHR_MULTIVIEW_EXTENSION_NAME "VK_KHR_multiview" #define VK_KHR_16BIT_STORAGE_EXTENSION_NAME "VK_KHR_16bit_storage" @@ -45,39 +46,40 @@ namespace vk #define VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME "VK_KHR_sampler_ycbcr_conversion" -template<> FeatureDesc makeFeatureDesc(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES, DECL_PROTECTED_MEMORY_EXTENSION_NAME, 0, 38); } -template<> FeatureDesc makeFeatureDesc(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, 37); } -template<> FeatureDesc makeFeatureDesc(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT, VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME, VK_EXT_TRANSFORM_FEEDBACK_SPEC_VERSION, 36); } -template<> FeatureDesc makeFeatureDesc(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, 35); } -template<> FeatureDesc makeFeatureDesc(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT, VK_EXT_CONDITIONAL_RENDERING_EXTENSION_NAME, VK_EXT_CONDITIONAL_RENDERING_SPEC_VERSION, 34); } -template<> FeatureDesc makeFeatureDesc(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR, VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME, VK_KHR_SHADER_FLOAT16_INT8_SPEC_VERSION, 33); } -template<> FeatureDesc makeFeatureDesc(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, 32); } -template<> FeatureDesc makeFeatureDesc(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES_KHR, VK_KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME, VK_KHR_IMAGELESS_FRAMEBUFFER_SPEC_VERSION, 31); } -template<> FeatureDesc makeFeatureDesc(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(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, 29); } -template<> FeatureDesc makeFeatureDesc(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT, VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME, VK_EXT_DESCRIPTOR_INDEXING_SPEC_VERSION, 28); } -template<> FeatureDesc makeFeatureDesc(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, 27); } -template<> FeatureDesc makeFeatureDesc(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, 26); } -template<> FeatureDesc makeFeatureDesc(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR, VK_KHR_8BIT_STORAGE_EXTENSION_NAME, VK_KHR_8BIT_STORAGE_SPEC_VERSION, 25); } -template<> FeatureDesc makeFeatureDesc(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, 24); } -template<> FeatureDesc makeFeatureDesc(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT, VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME, VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION, 23); } -template<> FeatureDesc makeFeatureDesc(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, 22); } -template<> FeatureDesc makeFeatureDesc(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV, VK_NV_MESH_SHADER_EXTENSION_NAME, VK_NV_MESH_SHADER_SPEC_VERSION, 21); } -template<> FeatureDesc makeFeatureDesc(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, 20); } -template<> FeatureDesc makeFeatureDesc(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, 19); } -template<> FeatureDesc makeFeatureDesc(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV, VK_NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME, VK_NV_SCISSOR_EXCLUSIVE_SPEC_VERSION, 18); } -template<> FeatureDesc makeFeatureDesc(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES_KHR, VK_KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME, VK_KHR_VULKAN_MEMORY_MODEL_SPEC_VERSION, 17); } -template<> FeatureDesc makeFeatureDesc(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, 16); } -template<> FeatureDesc makeFeatureDesc(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, 15); } -template<> FeatureDesc makeFeatureDesc(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT, VK_EXT_MEMORY_PRIORITY_EXTENSION_NAME, VK_EXT_MEMORY_PRIORITY_SPEC_VERSION, 14); } -template<> FeatureDesc makeFeatureDesc(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, 13); } -template<> FeatureDesc makeFeatureDesc(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, 12); } -template<> FeatureDesc makeFeatureDesc(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV, VK_NV_COOPERATIVE_MATRIX_EXTENSION_NAME, VK_NV_COOPERATIVE_MATRIX_SPEC_VERSION, 11); } -template<> FeatureDesc makeFeatureDesc(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, 10); } -template<> FeatureDesc makeFeatureDesc(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT, VK_EXT_YCBCR_IMAGE_ARRAYS_EXTENSION_NAME, VK_EXT_YCBCR_IMAGE_ARRAYS_SPEC_VERSION, 9); } -template<> FeatureDesc makeFeatureDesc(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR, VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME, VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_SPEC_VERSION, 8); } -template<> FeatureDesc makeFeatureDesc(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, 7); } -template<> FeatureDesc makeFeatureDesc(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, 6); } +template<> FeatureDesc makeFeatureDesc(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES, DECL_PROTECTED_MEMORY_EXTENSION_NAME, 0, 39); } +template<> FeatureDesc makeFeatureDesc(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, 38); } +template<> FeatureDesc makeFeatureDesc(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT, VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME, VK_EXT_TRANSFORM_FEEDBACK_SPEC_VERSION, 37); } +template<> FeatureDesc makeFeatureDesc(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, 36); } +template<> FeatureDesc makeFeatureDesc(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT, VK_EXT_CONDITIONAL_RENDERING_EXTENSION_NAME, VK_EXT_CONDITIONAL_RENDERING_SPEC_VERSION, 35); } +template<> FeatureDesc makeFeatureDesc(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR, VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME, VK_KHR_SHADER_FLOAT16_INT8_SPEC_VERSION, 34); } +template<> FeatureDesc makeFeatureDesc(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, 33); } +template<> FeatureDesc makeFeatureDesc(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(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(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, 30); } +template<> FeatureDesc makeFeatureDesc(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT, VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME, VK_EXT_DESCRIPTOR_INDEXING_SPEC_VERSION, 29); } +template<> FeatureDesc makeFeatureDesc(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, 28); } +template<> FeatureDesc makeFeatureDesc(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, 27); } +template<> FeatureDesc makeFeatureDesc(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR, VK_KHR_8BIT_STORAGE_EXTENSION_NAME, VK_KHR_8BIT_STORAGE_SPEC_VERSION, 26); } +template<> FeatureDesc makeFeatureDesc(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, 25); } +template<> FeatureDesc makeFeatureDesc(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT, VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME, VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION, 24); } +template<> FeatureDesc makeFeatureDesc(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, 23); } +template<> FeatureDesc makeFeatureDesc(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV, VK_NV_MESH_SHADER_EXTENSION_NAME, VK_NV_MESH_SHADER_SPEC_VERSION, 22); } +template<> FeatureDesc makeFeatureDesc(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, 21); } +template<> FeatureDesc makeFeatureDesc(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, 20); } +template<> FeatureDesc makeFeatureDesc(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV, VK_NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME, VK_NV_SCISSOR_EXCLUSIVE_SPEC_VERSION, 19); } +template<> FeatureDesc makeFeatureDesc(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES_KHR, VK_KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME, VK_KHR_VULKAN_MEMORY_MODEL_SPEC_VERSION, 18); } +template<> FeatureDesc makeFeatureDesc(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, 17); } +template<> FeatureDesc makeFeatureDesc(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, 16); } +template<> FeatureDesc makeFeatureDesc(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT, VK_EXT_MEMORY_PRIORITY_EXTENSION_NAME, VK_EXT_MEMORY_PRIORITY_SPEC_VERSION, 15); } +template<> FeatureDesc makeFeatureDesc(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, 14); } +template<> FeatureDesc makeFeatureDesc(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, 13); } +template<> FeatureDesc makeFeatureDesc(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV, VK_NV_COOPERATIVE_MATRIX_EXTENSION_NAME, VK_NV_COOPERATIVE_MATRIX_SPEC_VERSION, 12); } +template<> FeatureDesc makeFeatureDesc(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, 11); } +template<> FeatureDesc makeFeatureDesc(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT, VK_EXT_YCBCR_IMAGE_ARRAYS_EXTENSION_NAME, VK_EXT_YCBCR_IMAGE_ARRAYS_SPEC_VERSION, 10); } +template<> FeatureDesc makeFeatureDesc(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR, VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME, VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_SPEC_VERSION, 9); } +template<> FeatureDesc makeFeatureDesc(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, 8); } +template<> FeatureDesc makeFeatureDesc(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, 7); } +template<> FeatureDesc makeFeatureDesc(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, 6); } template<> FeatureDesc makeFeatureDesc(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, 5); } template<> FeatureDesc makeFeatureDesc(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHR, VK_KHR_MULTIVIEW_EXTENSION_NAME, VK_KHR_MULTIVIEW_SPEC_VERSION, 4); } template<> FeatureDesc makeFeatureDesc(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR, VK_KHR_16BIT_STORAGE_EXTENSION_NAME, VK_KHR_16BIT_STORAGE_SPEC_VERSION, 3); } @@ -120,6 +122,7 @@ static const FeatureStructMapItem featureStructCreatorMap[] = { createFeatureStructWrapper, VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME, VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_SPEC_VERSION }, { createFeatureStructWrapper, VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME, VK_EXT_HOST_QUERY_RESET_SPEC_VERSION }, { createFeatureStructWrapper, VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME, VK_EXT_INDEX_TYPE_UINT8_SPEC_VERSION }, + { createFeatureStructWrapper, VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME, VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION }, { createFeatureStructWrapper, VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME, VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_SPEC_VERSION }, { createFeatureStructWrapper, VK_KHR_MULTIVIEW_EXTENSION_NAME, VK_KHR_MULTIVIEW_SPEC_VERSION }, { createFeatureStructWrapper, VK_KHR_16BIT_STORAGE_EXTENSION_NAME, VK_KHR_16BIT_STORAGE_SPEC_VERSION }, diff --git a/external/vulkancts/framework/vulkan/vkDeviceFeaturesForContextDecl.inl b/external/vulkancts/framework/vulkan/vkDeviceFeaturesForContextDecl.inl index a18294f..c945847 100644 --- a/external/vulkancts/framework/vulkan/vkDeviceFeaturesForContextDecl.inl +++ b/external/vulkancts/framework/vulkan/vkDeviceFeaturesForContextDecl.inl @@ -34,6 +34,7 @@ const vk::VkPhysicalDeviceYcbcrImageArraysFeaturesEXT& getYcbcrImageArraysFe const vk::VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR& getUniformBufferStandardLayoutFeatures (void) const; const vk::VkPhysicalDeviceHostQueryResetFeaturesEXT& getHostQueryResetFeatures (void) const; const vk::VkPhysicalDeviceIndexTypeUint8FeaturesEXT& getIndexTypeUint8Features (void) const; +const vk::VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT& getShaderDemoteToHelperInvocationFeatures (void) const; const vk::VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR& getPipelineExecutablePropertiesFeatures (void) const; const vk::VkPhysicalDeviceMultiviewFeatures& getMultiviewFeatures (void) const; const vk::VkPhysicalDevice16BitStorageFeatures& get16BitStorageFeatures (void) const; diff --git a/external/vulkancts/framework/vulkan/vkDeviceFeaturesForContextDefs.inl b/external/vulkancts/framework/vulkan/vkDeviceFeaturesForContextDefs.inl index d9a8a94..91c6243 100644 --- a/external/vulkancts/framework/vulkan/vkDeviceFeaturesForContextDefs.inl +++ b/external/vulkancts/framework/vulkan/vkDeviceFeaturesForContextDefs.inl @@ -34,6 +34,7 @@ const vk::VkPhysicalDeviceYcbcrImageArraysFeaturesEXT& Context::getYcbcrImag const vk::VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR& Context::getUniformBufferStandardLayoutFeatures (void) const { return m_device->getUniformBufferStandardLayoutFeatures(); } const vk::VkPhysicalDeviceHostQueryResetFeaturesEXT& Context::getHostQueryResetFeatures (void) const { return m_device->getHostQueryResetFeatures(); } const vk::VkPhysicalDeviceIndexTypeUint8FeaturesEXT& Context::getIndexTypeUint8Features (void) const { return m_device->getIndexTypeUint8Features(); } +const vk::VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT& Context::getShaderDemoteToHelperInvocationFeatures (void) const { return m_device->getShaderDemoteToHelperInvocationFeatures(); } const vk::VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR& Context::getPipelineExecutablePropertiesFeatures (void) const { return m_device->getPipelineExecutablePropertiesFeatures(); } const vk::VkPhysicalDeviceMultiviewFeatures& Context::getMultiviewFeatures (void) const { return m_device->getMultiviewFeatures(); } const vk::VkPhysicalDevice16BitStorageFeatures& Context::get16BitStorageFeatures (void) const { return m_device->get16BitStorageFeatures(); } diff --git a/external/vulkancts/framework/vulkan/vkDeviceFeaturesForDefaultDeviceDefs.inl b/external/vulkancts/framework/vulkan/vkDeviceFeaturesForDefaultDeviceDefs.inl index d134756..a51e99a 100644 --- a/external/vulkancts/framework/vulkan/vkDeviceFeaturesForDefaultDeviceDefs.inl +++ b/external/vulkancts/framework/vulkan/vkDeviceFeaturesForDefaultDeviceDefs.inl @@ -34,6 +34,7 @@ const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT& getYcbcrImageArraysFeatur const VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR& getUniformBufferStandardLayoutFeatures (void) const { return m_deviceFeatures.getFeatureType(); } const VkPhysicalDeviceHostQueryResetFeaturesEXT& getHostQueryResetFeatures (void) const { return m_deviceFeatures.getFeatureType(); } const VkPhysicalDeviceIndexTypeUint8FeaturesEXT& getIndexTypeUint8Features (void) const { return m_deviceFeatures.getFeatureType(); } +const VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT& getShaderDemoteToHelperInvocationFeatures (void) const { return m_deviceFeatures.getFeatureType(); } const VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR& getPipelineExecutablePropertiesFeatures (void) const { return m_deviceFeatures.getFeatureType(); } const VkPhysicalDeviceMultiviewFeatures& getMultiviewFeatures (void) const { return m_deviceFeatures.getFeatureType(); } const VkPhysicalDevice16BitStorageFeatures& get16BitStorageFeatures (void) const { return m_deviceFeatures.getFeatureType(); } diff --git a/external/vulkancts/framework/vulkan/vkGetStructureTypeImpl.inl b/external/vulkancts/framework/vulkan/vkGetStructureTypeImpl.inl index 510b26a..e456521 100644 --- a/external/vulkancts/framework/vulkan/vkGetStructureTypeImpl.inl +++ b/external/vulkancts/framework/vulkan/vkGetStructureTypeImpl.inl @@ -1561,6 +1561,11 @@ template<> VkStructureType getStructureType VkStructureType getStructureType (void) +{ + return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT; +} + template<> VkStructureType getStructureType (void) { return VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR; diff --git a/external/vulkancts/framework/vulkan/vkStrUtil.inl b/external/vulkancts/framework/vulkan/vkStrUtil.inl index 4a64fd2..9f14065 100644 --- a/external/vulkancts/framework/vulkan/vkStrUtil.inl +++ b/external/vulkancts/framework/vulkan/vkStrUtil.inl @@ -774,6 +774,7 @@ std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceYcbcrImageArray std::ostream& operator<< (std::ostream& s, const VkHeadlessSurfaceCreateInfoEXT& value); std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceHostQueryResetFeaturesEXT& value); std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceIndexTypeUint8FeaturesEXT& value); +std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT& value); std::ostream& operator<< (std::ostream& s, const VkAndroidSurfaceCreateInfoKHR& value); std::ostream& operator<< (std::ostream& s, const VkAndroidHardwareBufferUsageANDROID& value); std::ostream& operator<< (std::ostream& s, const VkAndroidHardwareBufferPropertiesANDROID& value); diff --git a/external/vulkancts/framework/vulkan/vkStrUtilImpl.inl b/external/vulkancts/framework/vulkan/vkStrUtilImpl.inl index 2a17832..c2d92c1 100644 --- a/external/vulkancts/framework/vulkan/vkStrUtilImpl.inl +++ b/external/vulkancts/framework/vulkan/vkStrUtilImpl.inl @@ -465,6 +465,7 @@ const char* getStructureTypeName (VkStructureType value) case VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT: return "VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR"; case VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR: return "VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR"; case VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR: return "VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR"; @@ -8241,6 +8242,16 @@ std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceIndexTypeUint8F return s; } +std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT& value) +{ + s << "VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT = {\n"; + s << "\tsType = " << value.sType << '\n'; + s << "\tpNext = " << value.pNext << '\n'; + s << "\tshaderDemoteToHelperInvocation = " << value.shaderDemoteToHelperInvocation << '\n'; + s << '}'; + return s; +} + std::ostream& operator<< (std::ostream& s, const VkAndroidSurfaceCreateInfoKHR& value) { s << "VkAndroidSurfaceCreateInfoKHR = {\n"; diff --git a/external/vulkancts/framework/vulkan/vkStructTypes.inl b/external/vulkancts/framework/vulkan/vkStructTypes.inl index a699140..ce5f9c1 100644 --- a/external/vulkancts/framework/vulkan/vkStructTypes.inl +++ b/external/vulkancts/framework/vulkan/vkStructTypes.inl @@ -3873,6 +3873,13 @@ struct VkPhysicalDeviceIndexTypeUint8FeaturesEXT VkBool32 indexTypeUint8; }; +struct VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT +{ + VkStructureType sType; + void* pNext; + VkBool32 shaderDemoteToHelperInvocation; +}; + struct VkAndroidSurfaceCreateInfoKHR { VkStructureType sType; diff --git a/external/vulkancts/framework/vulkan/vkVulkan_c.inl b/external/vulkancts/framework/vulkan/vkVulkan_c.inl index cdd96e8..194907a 100644 --- a/external/vulkancts/framework/vulkan/vkVulkan_c.inl +++ b/external/vulkancts/framework/vulkan/vkVulkan_c.inl @@ -503,6 +503,7 @@ typedef enum VkStructureType { VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT = 1000256000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT = 1000261000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT = 1000265000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT = 1000276000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR = 1000269000, VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR = 1000269001, VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR = 1000269002, @@ -9444,6 +9445,16 @@ typedef struct VkPhysicalDeviceIndexTypeUint8FeaturesEXT { } VkPhysicalDeviceIndexTypeUint8FeaturesEXT; +#define VK_EXT_shader_demote_to_helper_invocation 1 +#define VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION 1 +#define VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME "VK_EXT_shader_demote_to_helper_invocation" +typedef struct VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 shaderDemoteToHelperInvocation; +} VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT; + + #ifdef __cplusplus } #endif diff --git a/external/vulkancts/modules/vulkan/shaderrender/vktShaderRender.cpp b/external/vulkancts/modules/vulkan/shaderrender/vktShaderRender.cpp index 16633dd..e48436a 100644 --- a/external/vulkancts/modules/vulkan/shaderrender/vktShaderRender.cpp +++ b/external/vulkancts/modules/vulkan/shaderrender/vktShaderRender.cpp @@ -548,6 +548,7 @@ ShaderRenderCaseInstance::ShaderRenderCaseInstance (Context& context) , m_uniformSetup (DE_NULL) , m_attribFunc (DE_NULL) , m_sampleCount (VK_SAMPLE_COUNT_1_BIT) + , m_fuzzyCompare (true) { } @@ -558,7 +559,8 @@ ShaderRenderCaseInstance::ShaderRenderCaseInstance (Context& context, const UniformSetup& uniformSetup, const AttributeSetupFunc attribFunc, const ImageBackingMode imageBackingMode, - const deUint32 gridSize) + const deUint32 gridSize, + const bool fuzzyCompare) : vkt::TestInstance (context) , m_imageBackingMode (imageBackingMode) , m_quadGridSize (gridSize == static_cast(GRID_SIZE_DEFAULTS) @@ -577,6 +579,7 @@ ShaderRenderCaseInstance::ShaderRenderCaseInstance (Context& context, , m_uniformSetup (&uniformSetup) , m_attribFunc (attribFunc) , m_sampleCount (VK_SAMPLE_COUNT_1_BIT) + , m_fuzzyCompare (fuzzyCompare) { } @@ -2430,7 +2433,10 @@ void ShaderRenderCaseInstance::computeFragmentReference (tcu::Surface& result, c bool ShaderRenderCaseInstance::compareImages (const tcu::Surface& resImage, const tcu::Surface& refImage, float errorThreshold) { - return tcu::fuzzyCompare(m_context.getTestContext().getLog(), "ComparisonResult", "Image comparison result", refImage, resImage, errorThreshold, tcu::COMPARE_LOG_EVERYTHING); + if (m_fuzzyCompare) + return tcu::fuzzyCompare(m_context.getTestContext().getLog(), "ComparisonResult", "Image comparison result", refImage, resImage, errorThreshold, tcu::COMPARE_LOG_EVERYTHING); + else + return tcu::pixelThresholdCompare(m_context.getTestContext().getLog(), "ComparisonResult", "Image comparison result", refImage, resImage, tcu::RGBA(1, 1, 1, 1), tcu::COMPARE_LOG_EVERYTHING); } } // sr diff --git a/external/vulkancts/modules/vulkan/shaderrender/vktShaderRender.hpp b/external/vulkancts/modules/vulkan/shaderrender/vktShaderRender.hpp index 5069665..e3064ad 100644 --- a/external/vulkancts/modules/vulkan/shaderrender/vktShaderRender.hpp +++ b/external/vulkancts/modules/vulkan/shaderrender/vktShaderRender.hpp @@ -459,7 +459,8 @@ public: const UniformSetup& uniformSetup, const AttributeSetupFunc attribFunc, const ImageBackingMode imageBackingMode = IMAGE_BACKING_MODE_REGULAR, - const deUint32 gridSize = static_cast(GRID_SIZE_DEFAULTS)); + const deUint32 gridSize = static_cast(GRID_SIZE_DEFAULTS), + const bool fuzzyCompare = true); virtual ~ShaderRenderCaseInstance (void); virtual tcu::TestStatus iterate (void); @@ -656,6 +657,8 @@ private: vk::VkSampleCountFlagBits m_sampleCount; std::vector m_pushConstantRanges; + bool m_fuzzyCompare; + vk::VkDevice getDevice (void) const; deUint32 getUniversalQueueFamilyIndex (void) const; deUint32 getSparseQueueFamilyIndex (void) const; diff --git a/external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderDiscardTests.cpp b/external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderDiscardTests.cpp index 8d89b7c..8af40be 100644 --- a/external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderDiscardTests.cpp +++ b/external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderDiscardTests.cpp @@ -66,7 +66,8 @@ public: bool isVertexCase, const ShaderEvaluator& evaluator, const UniformSetup& uniformSetup, - bool usesTexture); + bool usesTexture, + bool fuzzyCompare); virtual ~ShaderDiscardCaseInstance (void); }; @@ -74,8 +75,9 @@ ShaderDiscardCaseInstance::ShaderDiscardCaseInstance (Context& context, bool isVertexCase, const ShaderEvaluator& evaluator, const UniformSetup& uniformSetup, - bool usesTexture) - : ShaderRenderCaseInstance (context, isVertexCase, evaluator, uniformSetup, DE_NULL) + bool usesTexture, + bool fuzzyCompare) + : ShaderRenderCaseInstance (context, isVertexCase, evaluator, uniformSetup, DE_NULL, IMAGE_BACKING_MODE_REGULAR, static_cast(GRID_SIZE_DEFAULTS), fuzzyCompare) { if (usesTexture) { @@ -103,16 +105,22 @@ public: const char* description, const char* shaderSource, const ShaderEvalFunc evalFunc, - bool usesTexture); + bool usesTexture, + bool fuzzyCompare, + bool demote); virtual TestInstance* createInstance (Context& context) const { DE_ASSERT(m_evaluator != DE_NULL); DE_ASSERT(m_uniformSetup != DE_NULL); - return new ShaderDiscardCaseInstance(context, m_isVertexCase, *m_evaluator, *m_uniformSetup, m_usesTexture); + return new ShaderDiscardCaseInstance(context, m_isVertexCase, *m_evaluator, *m_uniformSetup, m_usesTexture, m_fuzzyCompare); } + virtual void checkSupport (Context& context) const; + private: const bool m_usesTexture; + const bool m_fuzzyCompare; + const bool m_demote; }; ShaderDiscardCase::ShaderDiscardCase (tcu::TestContext& testCtx, @@ -120,25 +128,37 @@ ShaderDiscardCase::ShaderDiscardCase (tcu::TestContext& testCtx, const char* description, const char* shaderSource, const ShaderEvalFunc evalFunc, - bool usesTexture) + bool usesTexture, + bool fuzzyCompare, + bool demote) : ShaderRenderCase (testCtx, name, description, false, evalFunc, new SamplerUniformSetup(usesTexture), DE_NULL) , m_usesTexture (usesTexture) + , m_fuzzyCompare (fuzzyCompare) + , m_demote (demote) { m_fragShaderSource = shaderSource; m_vertShaderSource = "#version 310 es\n" "layout(location=0) in highp vec4 a_position;\n" "layout(location=1) in highp vec4 a_coords;\n" + "layout(location=2) in highp vec4 a_one;\n" "layout(location=0) out mediump vec4 v_color;\n" "layout(location=1) out mediump vec4 v_coords;\n\n" + "layout(location=2) out mediump vec4 v_one;\n" "void main (void)\n" "{\n" " gl_Position = a_position;\n" " v_color = vec4(a_coords.xyz, 1.0);\n" " v_coords = a_coords;\n" + " v_one = a_one;\n" "}\n"; } +void ShaderDiscardCase::checkSupport(Context& context) const +{ + if (m_demote && !context.getShaderDemoteToHelperInvocationFeatures().shaderDemoteToHelperInvocation) + TCU_THROW(NotSupportedError, "VK_EXT_shader_demote_to_helper_invocation not supported"); +} enum DiscardMode { @@ -147,6 +167,7 @@ enum DiscardMode DISCARDMODE_UNIFORM, DISCARDMODE_DYNAMIC, DISCARDMODE_TEXTURE, + DISCARDMODE_DERIV, DISCARDMODE_LAST }; @@ -183,6 +204,7 @@ static ShaderEvalFunc getEvalFunc (DiscardMode mode) case DISCARDMODE_UNIFORM: return evalDiscardAlways; case DISCARDMODE_DYNAMIC: return evalDiscardDynamic; case DISCARDMODE_TEXTURE: return evalDiscardTexture; + case DISCARDMODE_DERIV: return evalDiscardAlways; default: DE_ASSERT(DE_FALSE); return evalDiscardAlways; @@ -193,8 +215,10 @@ static const char* getTemplate (DiscardTemplate variant) { #define GLSL_SHADER_TEMPLATE_HEADER \ "#version 310 es\n" \ + "#extension GL_EXT_demote_to_helper_invocation : enable\n" \ "layout(location = 0) in mediump vec4 v_color;\n" \ "layout(location = 1) in mediump vec4 v_coords;\n" \ + "layout(location = 2) in mediump vec4 a_one;\n" \ "layout(location = 0) out mediump vec4 o_color;\n" \ "layout(set = 0, binding = 2) uniform sampler2D ut_brick;\n" \ "layout(set = 0, binding = 0) uniform block0 { mediump int ui_one; };\n\n" @@ -228,8 +252,9 @@ static const char* getTemplate (DiscardTemplate variant) " o_color = v_color;\n" " for (int i = 0; i < 2; i++)\n" " {\n" - " if (i > 0)\n" + " if (i > 0) {\n" " ${DISCARD};\n" + " }\n" " }\n" "}\n"; @@ -241,8 +266,9 @@ static const char* getTemplate (DiscardTemplate variant) " o_color = v_color;\n" " for (int i = 0; i < ui_two; i++)\n" " {\n" - " if (i > 0)\n" + " if (i > 0) {\n" " ${DISCARD};\n" + " }\n" " }\n" "}\n"; @@ -252,8 +278,9 @@ static const char* getTemplate (DiscardTemplate variant) "{\n" " for (int i = 0; i < 2; i++)\n" " {\n" - " if (i > 0)\n" + " if (i > 0) {\n" " ${DISCARD};\n" + " }\n" " }\n" "}\n\n" "void main (void)\n" @@ -294,6 +321,7 @@ static const char* getModeName (DiscardMode mode) case DISCARDMODE_UNIFORM: return "uniform"; case DISCARDMODE_DYNAMIC: return "dynamic"; case DISCARDMODE_TEXTURE: return "texture"; + case DISCARDMODE_DERIV: return "deriv"; default: DE_ASSERT(DE_FALSE); return DE_NULL; @@ -324,13 +352,14 @@ static const char* getModeDesc (DiscardMode mode) case DISCARDMODE_UNIFORM: return "Discard based on uniform value"; case DISCARDMODE_DYNAMIC: return "Discard based on varying values"; case DISCARDMODE_TEXTURE: return "Discard based on texture value"; + case DISCARDMODE_DERIV: return "Discard based on derivatives after an earlier discard"; default: DE_ASSERT(DE_FALSE); return DE_NULL; } } -de::MovePtr makeDiscardCase (tcu::TestContext& testCtx, DiscardTemplate tmpl, DiscardMode mode) +de::MovePtr makeDiscardCase (tcu::TestContext& testCtx, DiscardTemplate tmpl, DiscardMode mode, const std::string& discardStr) { StringTemplate shaderTemplate(getTemplate(tmpl)); @@ -338,11 +367,29 @@ de::MovePtr makeDiscardCase (tcu::TestContext& testCtx, Disca switch (mode) { - case DISCARDMODE_ALWAYS: params["DISCARD"] = "discard"; break; - case DISCARDMODE_NEVER: params["DISCARD"] = "if (false) discard"; break; - case DISCARDMODE_UNIFORM: params["DISCARD"] = "if (ui_one > 0) discard"; break; - case DISCARDMODE_DYNAMIC: params["DISCARD"] = "if (v_coords.x+v_coords.y > 0.0) discard"; break; - case DISCARDMODE_TEXTURE: params["DISCARD"] = "if (texture(ut_brick, v_coords.xy*0.25+0.5).x < 0.7) discard"; break; + case DISCARDMODE_ALWAYS: params["DISCARD"] = discardStr; break; + case DISCARDMODE_NEVER: params["DISCARD"] = "if (false) " + discardStr; break; + case DISCARDMODE_UNIFORM: params["DISCARD"] = "if (ui_one > 0) " + discardStr; break; + case DISCARDMODE_DYNAMIC: params["DISCARD"] = "if (v_coords.x+v_coords.y > 0.0) " + discardStr; break; + case DISCARDMODE_TEXTURE: params["DISCARD"] = "if (texture(ut_brick, v_coords.xy*0.25+0.5).x < 0.7) " + discardStr; break; + case DISCARDMODE_DERIV: params["DISCARD"] = + // First demote pixels where fragCoord.xy LSBs are not both zero, leaving only one + // non-helper pixel per quad. Then compute derivatives of "one+fragCoord" and check they + // are 0 or 1 as appropriate. Also check that helperInvocationEXT varies in the quad and + // is false on non-helper pixels. Demote the pixel if it gets the right values, so the final + // image should be entirely the clear color. If we don't get the right values, output red. + // This test case would not work for discard, because derivatives become undefined. + " ivec2 f = ivec2(gl_FragCoord.xy);\n" + " int lsb = (f.x | f.y)&1;\n" + " if (lsb != 0) demote;\n" + " bool isHelper = helperInvocationEXT();\n" + " highp vec2 dx = dFdx(a_one.xy + gl_FragCoord.xy);\n" + " highp vec2 dy = dFdy(a_one.xy + gl_FragCoord.xy);\n" + " highp float dh = dFdx(float(isHelper));\n" + " bool valid = abs(dx.x-1.0) < 0.01 && dx.y == 0.0 && dy.x == 0.0 && abs(dy.y-1.0) < 0.01 && abs(dh-1.0) < 0.1 && !isHelper;\n" + " if (valid) demote;\n" + " o_color = vec4(1,0,0,1);\n"; + break; default: DE_ASSERT(DE_FALSE); break; @@ -351,13 +398,19 @@ de::MovePtr makeDiscardCase (tcu::TestContext& testCtx, Disca std::string name = std::string(getTemplateName(tmpl)) + "_" + getModeName(mode); std::string description = std::string(getModeDesc(mode)) + " in " + getTemplateDesc(tmpl); - return de::MovePtr(new ShaderDiscardCase(testCtx, name.c_str(), description.c_str(), shaderTemplate.specialize(params).c_str(), getEvalFunc(mode), mode == DISCARDMODE_TEXTURE)); + return de::MovePtr(new ShaderDiscardCase(testCtx, name.c_str(), + description.c_str(), + shaderTemplate.specialize(params).c_str(), + getEvalFunc(mode), + mode == DISCARDMODE_TEXTURE, // usesTexture + mode != DISCARDMODE_DERIV, // fuzzyCompare + discardStr == "demote")); // demote } class ShaderDiscardTests : public tcu::TestCaseGroup { public: - ShaderDiscardTests (tcu::TestContext& textCtx); + ShaderDiscardTests (tcu::TestContext& textCtx, const char *groupName); virtual ~ShaderDiscardTests (void); virtual void init (void); @@ -365,10 +418,12 @@ public: private: ShaderDiscardTests (const ShaderDiscardTests&); // not allowed! ShaderDiscardTests& operator= (const ShaderDiscardTests&); // not allowed! + const std::string m_groupName; }; -ShaderDiscardTests::ShaderDiscardTests (tcu::TestContext& testCtx) - : TestCaseGroup(testCtx, "discard", "Discard statement tests") +ShaderDiscardTests::ShaderDiscardTests (tcu::TestContext& testCtx, const char *groupName) + : TestCaseGroup(testCtx, groupName, "Discard statement tests") + , m_groupName(groupName) { } @@ -379,15 +434,26 @@ ShaderDiscardTests::~ShaderDiscardTests (void) void ShaderDiscardTests::init (void) { for (int tmpl = 0; tmpl < DISCARDTEMPLATE_LAST; tmpl++) + { for (int mode = 0; mode < DISCARDMODE_LAST; mode++) - addChild(makeDiscardCase(m_testCtx, (DiscardTemplate)tmpl, (DiscardMode)mode).release()); + { + if (mode == DISCARDMODE_DERIV && m_groupName == "discard") + continue; + addChild(makeDiscardCase(m_testCtx, (DiscardTemplate)tmpl, (DiscardMode)mode, m_groupName).release()); + } + } } } // anonymous tcu::TestCaseGroup* createDiscardTests (tcu::TestContext& testCtx) { - return new ShaderDiscardTests(testCtx); + return new ShaderDiscardTests(testCtx, "discard"); +} + +tcu::TestCaseGroup* createDemoteTests (tcu::TestContext& testCtx) +{ + return new ShaderDiscardTests(testCtx, "demote"); } } // sr diff --git a/external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderDiscardTests.hpp b/external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderDiscardTests.hpp index ccc8f67..08eefef 100644 --- a/external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderDiscardTests.hpp +++ b/external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderDiscardTests.hpp @@ -33,6 +33,7 @@ namespace sr { tcu::TestCaseGroup* createDiscardTests (tcu::TestContext& testCtx); +tcu::TestCaseGroup* createDemoteTests (tcu::TestContext& testCtx); } // sr } // vkt diff --git a/external/vulkancts/modules/vulkan/vktTestPackage.cpp b/external/vulkancts/modules/vulkan/vktTestPackage.cpp index 6cbe18b..d2b8984 100644 --- a/external/vulkancts/modules/vulkan/vktTestPackage.cpp +++ b/external/vulkancts/modules/vulkan/vktTestPackage.cpp @@ -434,6 +434,7 @@ void createGlslTests (tcu::TestCaseGroup* glslTests) // ShaderRenderCase-based tests glslTests->addChild(sr::createDerivateTests (testCtx)); glslTests->addChild(sr::createDiscardTests (testCtx)); + glslTests->addChild(sr::createDemoteTests (testCtx)); glslTests->addChild(sr::createIndexingTests (testCtx)); glslTests->addChild(sr::createLimitTests (testCtx)); glslTests->addChild(sr::createLoopTests (testCtx)); diff --git a/external/vulkancts/mustpass/master/vk-default-no-waivers.txt b/external/vulkancts/mustpass/master/vk-default-no-waivers.txt index a5b632f..e0eabd6 100644 --- a/external/vulkancts/mustpass/master/vk-default-no-waivers.txt +++ b/external/vulkancts/mustpass/master/vk-default-no-waivers.txt @@ -289966,6 +289966,36 @@ dEQP-VK.glsl.discard.function_static_loop_never dEQP-VK.glsl.discard.function_static_loop_uniform dEQP-VK.glsl.discard.function_static_loop_dynamic dEQP-VK.glsl.discard.function_static_loop_texture +dEQP-VK.glsl.demote.basic_always +dEQP-VK.glsl.demote.basic_never +dEQP-VK.glsl.demote.basic_uniform +dEQP-VK.glsl.demote.basic_dynamic +dEQP-VK.glsl.demote.basic_texture +dEQP-VK.glsl.demote.basic_deriv +dEQP-VK.glsl.demote.function_always +dEQP-VK.glsl.demote.function_never +dEQP-VK.glsl.demote.function_uniform +dEQP-VK.glsl.demote.function_dynamic +dEQP-VK.glsl.demote.function_texture +dEQP-VK.glsl.demote.function_deriv +dEQP-VK.glsl.demote.static_loop_always +dEQP-VK.glsl.demote.static_loop_never +dEQP-VK.glsl.demote.static_loop_uniform +dEQP-VK.glsl.demote.static_loop_dynamic +dEQP-VK.glsl.demote.static_loop_texture +dEQP-VK.glsl.demote.static_loop_deriv +dEQP-VK.glsl.demote.dynamic_loop_always +dEQP-VK.glsl.demote.dynamic_loop_never +dEQP-VK.glsl.demote.dynamic_loop_uniform +dEQP-VK.glsl.demote.dynamic_loop_dynamic +dEQP-VK.glsl.demote.dynamic_loop_texture +dEQP-VK.glsl.demote.dynamic_loop_deriv +dEQP-VK.glsl.demote.function_static_loop_always +dEQP-VK.glsl.demote.function_static_loop_never +dEQP-VK.glsl.demote.function_static_loop_uniform +dEQP-VK.glsl.demote.function_static_loop_dynamic +dEQP-VK.glsl.demote.function_static_loop_texture +dEQP-VK.glsl.demote.function_static_loop_deriv dEQP-VK.glsl.indexing.varying_array.float_static_write_static_read dEQP-VK.glsl.indexing.varying_array.float_static_write_dynamic_read dEQP-VK.glsl.indexing.varying_array.float_static_write_static_loop_read diff --git a/external/vulkancts/mustpass/master/vk-default.txt b/external/vulkancts/mustpass/master/vk-default.txt index 9651b9c..5ca8dca 100644 --- a/external/vulkancts/mustpass/master/vk-default.txt +++ b/external/vulkancts/mustpass/master/vk-default.txt @@ -289966,6 +289966,36 @@ dEQP-VK.glsl.discard.function_static_loop_never dEQP-VK.glsl.discard.function_static_loop_uniform dEQP-VK.glsl.discard.function_static_loop_dynamic dEQP-VK.glsl.discard.function_static_loop_texture +dEQP-VK.glsl.demote.basic_always +dEQP-VK.glsl.demote.basic_never +dEQP-VK.glsl.demote.basic_uniform +dEQP-VK.glsl.demote.basic_dynamic +dEQP-VK.glsl.demote.basic_texture +dEQP-VK.glsl.demote.basic_deriv +dEQP-VK.glsl.demote.function_always +dEQP-VK.glsl.demote.function_never +dEQP-VK.glsl.demote.function_uniform +dEQP-VK.glsl.demote.function_dynamic +dEQP-VK.glsl.demote.function_texture +dEQP-VK.glsl.demote.function_deriv +dEQP-VK.glsl.demote.static_loop_always +dEQP-VK.glsl.demote.static_loop_never +dEQP-VK.glsl.demote.static_loop_uniform +dEQP-VK.glsl.demote.static_loop_dynamic +dEQP-VK.glsl.demote.static_loop_texture +dEQP-VK.glsl.demote.static_loop_deriv +dEQP-VK.glsl.demote.dynamic_loop_always +dEQP-VK.glsl.demote.dynamic_loop_never +dEQP-VK.glsl.demote.dynamic_loop_uniform +dEQP-VK.glsl.demote.dynamic_loop_dynamic +dEQP-VK.glsl.demote.dynamic_loop_texture +dEQP-VK.glsl.demote.dynamic_loop_deriv +dEQP-VK.glsl.demote.function_static_loop_always +dEQP-VK.glsl.demote.function_static_loop_never +dEQP-VK.glsl.demote.function_static_loop_uniform +dEQP-VK.glsl.demote.function_static_loop_dynamic +dEQP-VK.glsl.demote.function_static_loop_texture +dEQP-VK.glsl.demote.function_static_loop_deriv dEQP-VK.glsl.indexing.varying_array.float_static_write_static_read dEQP-VK.glsl.indexing.varying_array.float_static_write_dynamic_read dEQP-VK.glsl.indexing.varying_array.float_static_write_static_loop_read diff --git a/external/vulkancts/scripts/src/vulkan_core.h b/external/vulkancts/scripts/src/vulkan_core.h index 5c75a42..45a2530 100755 --- a/external/vulkancts/scripts/src/vulkan_core.h +++ b/external/vulkancts/scripts/src/vulkan_core.h @@ -500,6 +500,7 @@ typedef enum VkStructureType { VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT = 1000256000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT = 1000261000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT = 1000265000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT = 1000276000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR = 1000269000, VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR = 1000269001, VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR = 1000269002, @@ -9441,6 +9442,16 @@ typedef struct VkPhysicalDeviceIndexTypeUint8FeaturesEXT { } VkPhysicalDeviceIndexTypeUint8FeaturesEXT; +#define VK_EXT_shader_demote_to_helper_invocation 1 +#define VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION 1 +#define VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME "VK_EXT_shader_demote_to_helper_invocation" +typedef struct VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 shaderDemoteToHelperInvocation; +} VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT; + + #ifdef __cplusplus } #endif