New tests for VK_EXT_shader_demote_to_helper_invocation
authorJeff Bolz <jbolz@nvidia.com>
Sun, 2 Jun 2019 04:11:00 +0000 (23:11 -0500)
committerAlexander Galazin <alexander.galazin@arm.com>
Mon, 26 Aug 2019 15:39:08 +0000 (17:39 +0200)
Based on dEQP-VK.glsl.discard.*

New Tests: dEQP-VK.glsl.demote.*

Components: Vulkan
Change-Id: I9c2346592cac51cfe2de10f9586c4790c04766b6
(cherry picked from commit 529b996513d092334de3dabd4b3e44031201bdd9)

20 files changed:
android/cts/master/vk-master.txt
external/fetch_sources.py
external/vulkancts/framework/vulkan/vkBasicTypes.inl
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/framework/vulkan/vkGetStructureTypeImpl.inl
external/vulkancts/framework/vulkan/vkStrUtil.inl
external/vulkancts/framework/vulkan/vkStrUtilImpl.inl
external/vulkancts/framework/vulkan/vkStructTypes.inl
external/vulkancts/framework/vulkan/vkVulkan_c.inl
external/vulkancts/modules/vulkan/shaderrender/vktShaderRender.cpp
external/vulkancts/modules/vulkan/shaderrender/vktShaderRender.hpp
external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderDiscardTests.cpp
external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderDiscardTests.hpp
external/vulkancts/modules/vulkan/vktTestPackage.cpp
external/vulkancts/mustpass/master/vk-default-no-waivers.txt
external/vulkancts/mustpass/master/vk-default.txt
external/vulkancts/scripts/src/vulkan_core.h

index 030cc40..8890b61 100644 (file)
@@ -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
index 95cde69..1482dde 100644 (file)
@@ -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",
index 43dacdf..2fa9839 100644 (file)
@@ -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
index 68d4d12..b876a40 100644 (file)
@@ -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<VkPhysicalDeviceProtectedMemoryFeatures>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES, DECL_PROTECTED_MEMORY_EXTENSION_NAME, 0, 38); }
-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, 37); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceTransformFeedbackFeaturesEXT>(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<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, 35); }
-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, 34); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFloat16Int8FeaturesKHR>(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<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, 32); }
-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, 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<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, 29); }
-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, 28); }
-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, 27); }
-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, 26); }
-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, 25); }
-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, 24); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT>(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<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, 22); }
-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, 21); }
-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, 20); }
-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, 19); }
-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, 18); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceVulkanMemoryModelFeaturesKHR>(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<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, 16); }
-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, 15); }
-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, 14); }
-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, 13); }
-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, 12); }
-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, 11); }
-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, 10); }
-template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceYcbcrImageArraysFeaturesEXT>(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<VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR>(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<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, 7); }
-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, 6); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceProtectedMemoryFeatures>(void) { return FeatureDesc(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES, DECL_PROTECTED_MEMORY_EXTENSION_NAME, 0, 39); }
+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, 38); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceTransformFeedbackFeaturesEXT>(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<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, 36); }
+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, 35); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceFloat16Int8FeaturesKHR>(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<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, 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<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<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, 30); }
+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, 29); }
+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, 28); }
+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, 27); }
+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, 26); }
+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, 25); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT>(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<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, 23); }
+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, 22); }
+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, 21); }
+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, 20); }
+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, 19); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceVulkanMemoryModelFeaturesKHR>(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<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, 17); }
+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, 16); }
+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, 15); }
+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, 14); }
+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, 13); }
+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, 12); }
+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, 11); }
+template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceYcbcrImageArraysFeaturesEXT>(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<VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR>(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<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, 8); }
+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, 7); }
+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, 6); }
 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, 5); }
 template<> FeatureDesc makeFeatureDesc<VkPhysicalDeviceMultiviewFeatures>(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<VkPhysicalDevice16BitStorageFeatures>(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<VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR>, VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME, VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_SPEC_VERSION },
        { createFeatureStructWrapper<VkPhysicalDeviceHostQueryResetFeaturesEXT>, VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME, VK_EXT_HOST_QUERY_RESET_SPEC_VERSION },
        { createFeatureStructWrapper<VkPhysicalDeviceIndexTypeUint8FeaturesEXT>, VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME, VK_EXT_INDEX_TYPE_UINT8_SPEC_VERSION },
+       { createFeatureStructWrapper<VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT>, VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME, VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION },
        { createFeatureStructWrapper<VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR>, VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME, VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_SPEC_VERSION },
        { createFeatureStructWrapper<VkPhysicalDeviceMultiviewFeatures>, VK_KHR_MULTIVIEW_EXTENSION_NAME, VK_KHR_MULTIVIEW_SPEC_VERSION },
        { createFeatureStructWrapper<VkPhysicalDevice16BitStorageFeatures>, VK_KHR_16BIT_STORAGE_EXTENSION_NAME, VK_KHR_16BIT_STORAGE_SPEC_VERSION },
index a18294f..c945847 100644 (file)
@@ -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;
index d9a8a94..91c6243 100644 (file)
@@ -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();                                              }
index d134756..a51e99a 100644 (file)
@@ -34,6 +34,7 @@ const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT&                                    getYcbcrImageArraysFeatur
 const VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR&          getUniformBufferStandardLayoutFeatures          (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR>();                }
 const VkPhysicalDeviceHostQueryResetFeaturesEXT&                                       getHostQueryResetFeatures                                       (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceHostQueryResetFeaturesEXT>();                                             }
 const VkPhysicalDeviceIndexTypeUint8FeaturesEXT&                                       getIndexTypeUint8Features                                       (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceIndexTypeUint8FeaturesEXT>();                                             }
+const VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT&       getShaderDemoteToHelperInvocationFeatures       (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT>();             }
 const VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR&         getPipelineExecutablePropertiesFeatures         (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR>();               }
 const VkPhysicalDeviceMultiviewFeatures&                                                       getMultiviewFeatures                                            (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDeviceMultiviewFeatures>();                                                             }
 const VkPhysicalDevice16BitStorageFeatures&                                                    get16BitStorageFeatures                                         (void) const { return m_deviceFeatures.getFeatureType<VkPhysicalDevice16BitStorageFeatures>();                                                  }
index 510b26a..e456521 100644 (file)
@@ -1561,6 +1561,11 @@ template<> VkStructureType getStructureType<VkPhysicalDeviceIndexTypeUint8Featur
        return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT;
 }
 
+template<> VkStructureType getStructureType<VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT> (void)
+{
+       return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT;
+}
+
 template<> VkStructureType getStructureType<VkAndroidSurfaceCreateInfoKHR> (void)
 {
        return VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR;
index 4a64fd2..9f14065 100644 (file)
@@ -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);
index 2a17832..c2d92c1 100644 (file)
@@ -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";
index a699140..ce5f9c1 100644 (file)
@@ -3873,6 +3873,13 @@ struct VkPhysicalDeviceIndexTypeUint8FeaturesEXT
        VkBool32                indexTypeUint8;
 };
 
+struct VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT
+{
+       VkStructureType sType;
+       void*                   pNext;
+       VkBool32                shaderDemoteToHelperInvocation;
+};
+
 struct VkAndroidSurfaceCreateInfoKHR
 {
        VkStructureType                                         sType;
index cdd96e8..194907a 100644 (file)
@@ -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
index 16633dd..e48436a 100644 (file)
@@ -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<deUint32>(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
index 5069665..e3064ad 100644 (file)
@@ -459,7 +459,8 @@ public:
                                                                                                                                                                        const UniformSetup&                     uniformSetup,
                                                                                                                                                                        const AttributeSetupFunc        attribFunc,
                                                                                                                                                                        const ImageBackingMode          imageBackingMode = IMAGE_BACKING_MODE_REGULAR,
-                                                                                                                                                                       const deUint32                          gridSize = static_cast<deUint32>(GRID_SIZE_DEFAULTS));
+                                                                                                                                                                       const deUint32                          gridSize = static_cast<deUint32>(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<vk::VkPushConstantRange>                            m_pushConstantRanges;
 
+       bool                                                                                            m_fuzzyCompare;
+
        vk::VkDevice                                                                            getDevice                                               (void) const;
        deUint32                                                                                        getUniversalQueueFamilyIndex    (void) const;
        deUint32                                                                                        getSparseQueueFamilyIndex               (void) const;
index 8d89b7c..8af40be 100644 (file)
@@ -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<deUint32>(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<ShaderDiscardCase> makeDiscardCase (tcu::TestContext& testCtx, DiscardTemplate tmpl, DiscardMode mode)
+de::MovePtr<ShaderDiscardCase> makeDiscardCase (tcu::TestContext& testCtx, DiscardTemplate tmpl, DiscardMode mode, const std::string& discardStr)
 {
        StringTemplate shaderTemplate(getTemplate(tmpl));
 
@@ -338,11 +367,29 @@ de::MovePtr<ShaderDiscardCase> 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<ShaderDiscardCase> 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<ShaderDiscardCase>(new ShaderDiscardCase(testCtx, name.c_str(), description.c_str(), shaderTemplate.specialize(params).c_str(), getEvalFunc(mode), mode == DISCARDMODE_TEXTURE));
+       return de::MovePtr<ShaderDiscardCase>(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
index ccc8f67..08eefef 100644 (file)
@@ -33,6 +33,7 @@ namespace sr
 {
 
 tcu::TestCaseGroup*    createDiscardTests      (tcu::TestContext& testCtx);
+tcu::TestCaseGroup*    createDemoteTests       (tcu::TestContext& testCtx);
 
 } // sr
 } // vkt
index 6cbe18b..d2b8984 100644 (file)
@@ -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));
index a5b632f..e0eabd6 100644 (file)
@@ -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
index 9651b9c..5ca8dca 100644 (file)
@@ -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
index 5c75a42..45a2530 100755 (executable)
@@ -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