From 8f81140029978aba091080760d08b202fe3d6cd8 Mon Sep 17 00:00:00 2001 From: Norbert Garnys Date: Thu, 17 May 2018 13:01:35 +0200 Subject: [PATCH] Add tests for VK_KHR_shader_atomic_int64 Add new test cases for 64 bit int atomic operations to existing glsl.atomic_operations tests New tests: dEQP-VK.glsl.atomic_operations.*signed64bit* dEQP-VK.glsl.atomic_operations.*unsigned64bit* Affected tests: dEQP-VK.glsl.atomic_operations.* Components: Vulkan, Framework, Scripts VK-GL-CTS issue:1172 Change-Id: If7e6871cc209b2086e087e0dd6c764cb8bd98a4b (cherry picked from commit 80926e1393d1a3de407b9279162056fa0a53822e) --- android/cts/master/vk-master.txt | 96 ++++++ .../vulkancts/framework/vulkan/vkBasicTypes.inl | 5 + .../framework/vulkan/vkGetStructureTypeImpl.inl | 5 + external/vulkancts/framework/vulkan/vkStrUtil.inl | 1 + .../vulkancts/framework/vulkan/vkStrUtilImpl.inl | 16 + .../vulkancts/framework/vulkan/vkStructTypes.inl | 8 + .../modules/vulkan/api/vktApiFeatureInfo.cpp | 4 +- .../shaderexecutor/vktAtomicOperationTests.cpp | 326 ++++++++++++++------- .../vulkan/shaderexecutor/vktShaderExecutor.cpp | 2 +- .../mustpass/1.1.2/vk-default-no-waivers.txt | 96 ++++++ external/vulkancts/mustpass/1.1.2/vk-default.txt | 96 ++++++ external/vulkancts/scripts/gen_framework.py | 1 + external/vulkancts/scripts/src/vulkan.h.in | 15 + 13 files changed, 568 insertions(+), 103 deletions(-) diff --git a/android/cts/master/vk-master.txt b/android/cts/master/vk-master.txt index d7e8bb5..d9850f6 100755 --- a/android/cts/master/vk-master.txt +++ b/android/cts/master/vk-master.txt @@ -240535,6 +240535,18 @@ dEQP-VK.glsl.atomic_operations.exchange_unsigned_geometry dEQP-VK.glsl.atomic_operations.exchange_unsigned_tess_ctrl dEQP-VK.glsl.atomic_operations.exchange_unsigned_tess_eval dEQP-VK.glsl.atomic_operations.exchange_unsigned_compute +dEQP-VK.glsl.atomic_operations.exchange_signed64bit_vertex +dEQP-VK.glsl.atomic_operations.exchange_signed64bit_fragment +dEQP-VK.glsl.atomic_operations.exchange_signed64bit_geometry +dEQP-VK.glsl.atomic_operations.exchange_signed64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.exchange_signed64bit_tess_eval +dEQP-VK.glsl.atomic_operations.exchange_signed64bit_compute +dEQP-VK.glsl.atomic_operations.exchange_unsigned64bit_vertex +dEQP-VK.glsl.atomic_operations.exchange_unsigned64bit_fragment +dEQP-VK.glsl.atomic_operations.exchange_unsigned64bit_geometry +dEQP-VK.glsl.atomic_operations.exchange_unsigned64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.exchange_unsigned64bit_tess_eval +dEQP-VK.glsl.atomic_operations.exchange_unsigned64bit_compute dEQP-VK.glsl.atomic_operations.comp_swap_signed_vertex dEQP-VK.glsl.atomic_operations.comp_swap_signed_fragment dEQP-VK.glsl.atomic_operations.comp_swap_signed_geometry @@ -240547,6 +240559,18 @@ dEQP-VK.glsl.atomic_operations.comp_swap_unsigned_geometry dEQP-VK.glsl.atomic_operations.comp_swap_unsigned_tess_ctrl dEQP-VK.glsl.atomic_operations.comp_swap_unsigned_tess_eval dEQP-VK.glsl.atomic_operations.comp_swap_unsigned_compute +dEQP-VK.glsl.atomic_operations.comp_swap_signed64bit_vertex +dEQP-VK.glsl.atomic_operations.comp_swap_signed64bit_fragment +dEQP-VK.glsl.atomic_operations.comp_swap_signed64bit_geometry +dEQP-VK.glsl.atomic_operations.comp_swap_signed64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.comp_swap_signed64bit_tess_eval +dEQP-VK.glsl.atomic_operations.comp_swap_signed64bit_compute +dEQP-VK.glsl.atomic_operations.comp_swap_unsigned64bit_vertex +dEQP-VK.glsl.atomic_operations.comp_swap_unsigned64bit_fragment +dEQP-VK.glsl.atomic_operations.comp_swap_unsigned64bit_geometry +dEQP-VK.glsl.atomic_operations.comp_swap_unsigned64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.comp_swap_unsigned64bit_tess_eval +dEQP-VK.glsl.atomic_operations.comp_swap_unsigned64bit_compute dEQP-VK.glsl.atomic_operations.add_signed_vertex dEQP-VK.glsl.atomic_operations.add_signed_fragment dEQP-VK.glsl.atomic_operations.add_signed_geometry @@ -240559,6 +240583,18 @@ dEQP-VK.glsl.atomic_operations.add_unsigned_geometry dEQP-VK.glsl.atomic_operations.add_unsigned_tess_ctrl dEQP-VK.glsl.atomic_operations.add_unsigned_tess_eval dEQP-VK.glsl.atomic_operations.add_unsigned_compute +dEQP-VK.glsl.atomic_operations.add_signed64bit_vertex +dEQP-VK.glsl.atomic_operations.add_signed64bit_fragment +dEQP-VK.glsl.atomic_operations.add_signed64bit_geometry +dEQP-VK.glsl.atomic_operations.add_signed64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.add_signed64bit_tess_eval +dEQP-VK.glsl.atomic_operations.add_signed64bit_compute +dEQP-VK.glsl.atomic_operations.add_unsigned64bit_vertex +dEQP-VK.glsl.atomic_operations.add_unsigned64bit_fragment +dEQP-VK.glsl.atomic_operations.add_unsigned64bit_geometry +dEQP-VK.glsl.atomic_operations.add_unsigned64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.add_unsigned64bit_tess_eval +dEQP-VK.glsl.atomic_operations.add_unsigned64bit_compute dEQP-VK.glsl.atomic_operations.min_signed_vertex dEQP-VK.glsl.atomic_operations.min_signed_fragment dEQP-VK.glsl.atomic_operations.min_signed_geometry @@ -240571,6 +240607,18 @@ dEQP-VK.glsl.atomic_operations.min_unsigned_geometry dEQP-VK.glsl.atomic_operations.min_unsigned_tess_ctrl dEQP-VK.glsl.atomic_operations.min_unsigned_tess_eval dEQP-VK.glsl.atomic_operations.min_unsigned_compute +dEQP-VK.glsl.atomic_operations.min_signed64bit_vertex +dEQP-VK.glsl.atomic_operations.min_signed64bit_fragment +dEQP-VK.glsl.atomic_operations.min_signed64bit_geometry +dEQP-VK.glsl.atomic_operations.min_signed64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.min_signed64bit_tess_eval +dEQP-VK.glsl.atomic_operations.min_signed64bit_compute +dEQP-VK.glsl.atomic_operations.min_unsigned64bit_vertex +dEQP-VK.glsl.atomic_operations.min_unsigned64bit_fragment +dEQP-VK.glsl.atomic_operations.min_unsigned64bit_geometry +dEQP-VK.glsl.atomic_operations.min_unsigned64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.min_unsigned64bit_tess_eval +dEQP-VK.glsl.atomic_operations.min_unsigned64bit_compute dEQP-VK.glsl.atomic_operations.max_signed_vertex dEQP-VK.glsl.atomic_operations.max_signed_fragment dEQP-VK.glsl.atomic_operations.max_signed_geometry @@ -240583,6 +240631,18 @@ dEQP-VK.glsl.atomic_operations.max_unsigned_geometry dEQP-VK.glsl.atomic_operations.max_unsigned_tess_ctrl dEQP-VK.glsl.atomic_operations.max_unsigned_tess_eval dEQP-VK.glsl.atomic_operations.max_unsigned_compute +dEQP-VK.glsl.atomic_operations.max_signed64bit_vertex +dEQP-VK.glsl.atomic_operations.max_signed64bit_fragment +dEQP-VK.glsl.atomic_operations.max_signed64bit_geometry +dEQP-VK.glsl.atomic_operations.max_signed64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.max_signed64bit_tess_eval +dEQP-VK.glsl.atomic_operations.max_signed64bit_compute +dEQP-VK.glsl.atomic_operations.max_unsigned64bit_vertex +dEQP-VK.glsl.atomic_operations.max_unsigned64bit_fragment +dEQP-VK.glsl.atomic_operations.max_unsigned64bit_geometry +dEQP-VK.glsl.atomic_operations.max_unsigned64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.max_unsigned64bit_tess_eval +dEQP-VK.glsl.atomic_operations.max_unsigned64bit_compute dEQP-VK.glsl.atomic_operations.and_signed_vertex dEQP-VK.glsl.atomic_operations.and_signed_fragment dEQP-VK.glsl.atomic_operations.and_signed_geometry @@ -240595,6 +240655,18 @@ dEQP-VK.glsl.atomic_operations.and_unsigned_geometry dEQP-VK.glsl.atomic_operations.and_unsigned_tess_ctrl dEQP-VK.glsl.atomic_operations.and_unsigned_tess_eval dEQP-VK.glsl.atomic_operations.and_unsigned_compute +dEQP-VK.glsl.atomic_operations.and_signed64bit_vertex +dEQP-VK.glsl.atomic_operations.and_signed64bit_fragment +dEQP-VK.glsl.atomic_operations.and_signed64bit_geometry +dEQP-VK.glsl.atomic_operations.and_signed64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.and_signed64bit_tess_eval +dEQP-VK.glsl.atomic_operations.and_signed64bit_compute +dEQP-VK.glsl.atomic_operations.and_unsigned64bit_vertex +dEQP-VK.glsl.atomic_operations.and_unsigned64bit_fragment +dEQP-VK.glsl.atomic_operations.and_unsigned64bit_geometry +dEQP-VK.glsl.atomic_operations.and_unsigned64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.and_unsigned64bit_tess_eval +dEQP-VK.glsl.atomic_operations.and_unsigned64bit_compute dEQP-VK.glsl.atomic_operations.or_signed_vertex dEQP-VK.glsl.atomic_operations.or_signed_fragment dEQP-VK.glsl.atomic_operations.or_signed_geometry @@ -240607,6 +240679,18 @@ dEQP-VK.glsl.atomic_operations.or_unsigned_geometry dEQP-VK.glsl.atomic_operations.or_unsigned_tess_ctrl dEQP-VK.glsl.atomic_operations.or_unsigned_tess_eval dEQP-VK.glsl.atomic_operations.or_unsigned_compute +dEQP-VK.glsl.atomic_operations.or_signed64bit_vertex +dEQP-VK.glsl.atomic_operations.or_signed64bit_fragment +dEQP-VK.glsl.atomic_operations.or_signed64bit_geometry +dEQP-VK.glsl.atomic_operations.or_signed64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.or_signed64bit_tess_eval +dEQP-VK.glsl.atomic_operations.or_signed64bit_compute +dEQP-VK.glsl.atomic_operations.or_unsigned64bit_vertex +dEQP-VK.glsl.atomic_operations.or_unsigned64bit_fragment +dEQP-VK.glsl.atomic_operations.or_unsigned64bit_geometry +dEQP-VK.glsl.atomic_operations.or_unsigned64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.or_unsigned64bit_tess_eval +dEQP-VK.glsl.atomic_operations.or_unsigned64bit_compute dEQP-VK.glsl.atomic_operations.xor_signed_vertex dEQP-VK.glsl.atomic_operations.xor_signed_fragment dEQP-VK.glsl.atomic_operations.xor_signed_geometry @@ -240619,6 +240703,18 @@ dEQP-VK.glsl.atomic_operations.xor_unsigned_geometry dEQP-VK.glsl.atomic_operations.xor_unsigned_tess_ctrl dEQP-VK.glsl.atomic_operations.xor_unsigned_tess_eval dEQP-VK.glsl.atomic_operations.xor_unsigned_compute +dEQP-VK.glsl.atomic_operations.xor_signed64bit_vertex +dEQP-VK.glsl.atomic_operations.xor_signed64bit_fragment +dEQP-VK.glsl.atomic_operations.xor_signed64bit_geometry +dEQP-VK.glsl.atomic_operations.xor_signed64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.xor_signed64bit_tess_eval +dEQP-VK.glsl.atomic_operations.xor_signed64bit_compute +dEQP-VK.glsl.atomic_operations.xor_unsigned64bit_vertex +dEQP-VK.glsl.atomic_operations.xor_unsigned64bit_fragment +dEQP-VK.glsl.atomic_operations.xor_unsigned64bit_geometry +dEQP-VK.glsl.atomic_operations.xor_unsigned64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.xor_unsigned64bit_tess_eval +dEQP-VK.glsl.atomic_operations.xor_unsigned64bit_compute dEQP-VK.renderpass.suballocation.simple.color dEQP-VK.renderpass.suballocation.simple.depth dEQP-VK.renderpass.suballocation.simple.stencil diff --git a/external/vulkancts/framework/vulkan/vkBasicTypes.inl b/external/vulkancts/framework/vulkan/vkBasicTypes.inl index c53aab8..a3c585c 100644 --- a/external/vulkancts/framework/vulkan/vkBasicTypes.inl +++ b/external/vulkancts/framework/vulkan/vkBasicTypes.inl @@ -330,6 +330,11 @@ enum VkStructureType VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT = 1000161003, VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT = 1000161004, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR = 1000177000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR = 1000180000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT = 1000190000, + VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT = 1000190001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT = 1000190002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR = 1000196000, }; enum VkSystemAllocationScope diff --git a/external/vulkancts/framework/vulkan/vkGetStructureTypeImpl.inl b/external/vulkancts/framework/vulkan/vkGetStructureTypeImpl.inl index f0e9df0..1ed5020 100644 --- a/external/vulkancts/framework/vulkan/vkGetStructureTypeImpl.inl +++ b/external/vulkancts/framework/vulkan/vkGetStructureTypeImpl.inl @@ -1166,3 +1166,8 @@ template<> VkStructureType getStructureType VkStructureType getStructureType (void) +{ + return VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR; +} + diff --git a/external/vulkancts/framework/vulkan/vkStrUtil.inl b/external/vulkancts/framework/vulkan/vkStrUtil.inl index 8ef0517..ef29603 100644 --- a/external/vulkancts/framework/vulkan/vkStrUtil.inl +++ b/external/vulkancts/framework/vulkan/vkStrUtil.inl @@ -601,3 +601,4 @@ std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceInlineUniformBl std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceInlineUniformBlockPropertiesEXT& value); std::ostream& operator<< (std::ostream& s, const VkWriteDescriptorSetInlineUniformBlockEXT& value); std::ostream& operator<< (std::ostream& s, const VkDescriptorPoolInlineUniformBlockCreateInfoEXT& value); +std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceShaderAtomicInt64FeaturesKHR& value); diff --git a/external/vulkancts/framework/vulkan/vkStrUtilImpl.inl b/external/vulkancts/framework/vulkan/vkStrUtilImpl.inl index 4cb2a57..93512de 100644 --- a/external/vulkancts/framework/vulkan/vkStrUtilImpl.inl +++ b/external/vulkancts/framework/vulkan/vkStrUtilImpl.inl @@ -341,6 +341,11 @@ const char* getStructureTypeName (VkStructureType value) case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT: return "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT"; case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT: return "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT"; case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT"; + case VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT: return "VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT"; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR"; default: return DE_NULL; } } @@ -6353,3 +6358,14 @@ std::ostream& operator<< (std::ostream& s, const VkDescriptorPoolInlineUniformBl s << '}'; return s; } + +std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceShaderAtomicInt64FeaturesKHR& value) +{ + s << "VkPhysicalDeviceShaderAtomicInt64FeaturesKHR = {\n"; + s << "\tsType = " << value.sType << '\n'; + s << "\tpNext = " << value.pNext << '\n'; + s << "\tshaderBufferInt64Atomics = " << value.shaderBufferInt64Atomics << '\n'; + s << "\tshaderSharedInt64Atomics = " << value.shaderSharedInt64Atomics << '\n'; + s << '}'; + return s; +} diff --git a/external/vulkancts/framework/vulkan/vkStructTypes.inl b/external/vulkancts/framework/vulkan/vkStructTypes.inl index ce8750c..bbad92b 100644 --- a/external/vulkancts/framework/vulkan/vkStructTypes.inl +++ b/external/vulkancts/framework/vulkan/vkStructTypes.inl @@ -3065,6 +3065,14 @@ struct VkDescriptorPoolInlineUniformBlockCreateInfoEXT deUint32 maxInlineUniformBlockBindings; }; +struct VkPhysicalDeviceShaderAtomicInt64FeaturesKHR +{ + VkStructureType sType; + void* pNext; + VkBool32 shaderBufferInt64Atomics; + VkBool32 shaderSharedInt64Atomics; +}; + diff --git a/external/vulkancts/modules/vulkan/api/vktApiFeatureInfo.cpp b/external/vulkancts/modules/vulkan/api/vktApiFeatureInfo.cpp index 6c2486f..47f4354 100644 --- a/external/vulkancts/modules/vulkan/api/vktApiFeatureInfo.cpp +++ b/external/vulkancts/modules/vulkan/api/vktApiFeatureInfo.cpp @@ -758,7 +758,9 @@ void checkDeviceExtensions (tcu::ResultCollector& results, const vector& "VK_KHR_multiview", "VK_KHR_maintenance3", "VK_KHR_draw_indirect_count", - "VK_KHR_create_renderpass2" + "VK_KHR_create_renderpass2", + "VK_KHR_driver_properties", + "VK_KHR_shader_atomic_int64", }; checkKhrExtensions(results, extensions, DE_LENGTH_OF_ARRAY(s_allowedDeviceKhrExtensions), s_allowedDeviceKhrExtensions); diff --git a/external/vulkancts/modules/vulkan/shaderexecutor/vktAtomicOperationTests.cpp b/external/vulkancts/modules/vulkan/shaderexecutor/vktAtomicOperationTests.cpp index 46846ce..a066f04 100644 --- a/external/vulkancts/modules/vulkan/shaderexecutor/vktAtomicOperationTests.cpp +++ b/external/vulkancts/modules/vulkan/shaderexecutor/vktAtomicOperationTests.cpp @@ -161,36 +161,104 @@ enum NUM_ELEMENTS = 32 }; -class AtomicOperationCaseInstance : public TestInstance +enum DataType +{ + DATA_TYPE_INT32 = 0, + DATA_TYPE_UINT32, + DATA_TYPE_INT64, + DATA_TYPE_UINT64, + + DATA_TYPE_LAST +}; + +std::string dataType2Str(DataType type) +{ + static const char* const s_names[] = + { + "int", + "uint", + "int64_t", + "uint64_t", + }; + return de::getSizedArrayElement(s_names, type); +} + +class BufferInterface { public: - AtomicOperationCaseInstance (Context& context, - const ShaderSpec& shaderSpec, - glu::ShaderType shaderType, - bool sign, - AtomicOperation atomicOp); - virtual ~AtomicOperationCaseInstance (void); + virtual void setBuffer(void* ptr) = 0; - virtual tcu::TestStatus iterate (void); + virtual size_t bufferSize() = 0; -private: - const ShaderSpec& m_shaderSpec; - glu::ShaderType m_shaderType; - bool m_sign; - AtomicOperation m_atomicOp; + virtual void fillWithTestData(de::Random &rnd) = 0; + + virtual void checkResults(tcu::ResultCollector& resultCollector) = 0; + + virtual ~BufferInterface() {}; +}; + +template +class TestBuffer : public BufferInterface +{ +public: - struct BufferInterface + TestBuffer(AtomicOperation atomicOp) + : m_atomicOp(atomicOp) + {} + + template + struct BufferData { // Use half the number of elements for inout to cause overlap between atomic operations. // Each inout element at index i will have two atomic operations using input from // indices i and i + NUM_ELEMENTS / 2. deInt32 index; - deUint32 inout[NUM_ELEMENTS / 2]; - deUint32 input[NUM_ELEMENTS]; - deUint32 compare[NUM_ELEMENTS]; - deUint32 output[NUM_ELEMENTS]; + T inout[NUM_ELEMENTS / 2]; + T input[NUM_ELEMENTS]; + T compare[NUM_ELEMENTS]; + T output[NUM_ELEMENTS]; }; + virtual void setBuffer(void* ptr) + { + m_ptr = static_cast*>(ptr); + } + + virtual size_t bufferSize() + { + return sizeof(BufferData); + } + + virtual void fillWithTestData(de::Random &rnd) + { + dataTypeT pattern; + deMemset(&pattern, 0xcd, sizeof(dataTypeT)); + + for (int i = 0; i < NUM_ELEMENTS / 2; i++) + { + m_ptr->inout[i] = static_cast(rnd.getUint64()); + // The first half of compare elements match with every even index. + // The second half matches with odd indices. This causes the + // overlapping operations to only select one. + m_ptr->compare[i] = m_ptr->inout[i] + (i % 2); + m_ptr->compare[i + NUM_ELEMENTS / 2] = m_ptr->inout[i] + 1 - (i % 2); + } + for (int i = 0; i < NUM_ELEMENTS; i++) + { + m_ptr->input[i] = static_cast(rnd.getUint64()); + m_ptr->output[i] = pattern; + } + m_ptr->index = 0; + + // Take a copy to be used when calculating expected values. + m_original = *m_ptr; + } + + virtual void checkResults(tcu::ResultCollector& resultCollector) + { + checkOperation(m_original, *m_ptr, resultCollector); + } + template struct Expected { @@ -204,7 +272,7 @@ private: m_output[1] = output1; } - bool compare (deUint32 inout, deUint32 output0, deUint32 output1) + bool compare (T inout, T output0, T output1) { return (deMemCmp((const void*)&m_inout, (const void*)&inout, sizeof(inout)) == 0 && deMemCmp((const void*)&m_output[0], (const void*)&output0, sizeof(output0)) == 0 @@ -212,35 +280,41 @@ private: } }; - template void checkOperation (const BufferInterface& original, - const BufferInterface& result, - tcu::ResultCollector& resultCollector); + void checkOperation (const BufferData& original, + const BufferData& result, + tcu::ResultCollector& resultCollector); -}; + const AtomicOperation m_atomicOp; -AtomicOperationCaseInstance::AtomicOperationCaseInstance (Context& context, - const ShaderSpec& shaderSpec, - glu::ShaderType shaderType, - bool sign, - AtomicOperation atomicOp) - : TestInstance (context) - , m_shaderSpec (shaderSpec) - , m_shaderType (shaderType) - , m_sign (sign) - , m_atomicOp (atomicOp) -{ -} + BufferData* m_ptr; + BufferData m_original; + +}; -AtomicOperationCaseInstance::~AtomicOperationCaseInstance (void) +static BufferInterface* createTestBuffer(DataType type, AtomicOperation atomicOp) { + switch (type) + { + case DATA_TYPE_INT32: + return new TestBuffer(atomicOp); + case DATA_TYPE_UINT32: + return new TestBuffer(atomicOp); + case DATA_TYPE_INT64: + return new TestBuffer(atomicOp); + case DATA_TYPE_UINT64: + return new TestBuffer(atomicOp); + default: + DE_ASSERT(false); + return DE_NULL; + } } // Use template to handle both signed and unsigned cases. SPIR-V should // have separate operations for both. template -void AtomicOperationCaseInstance::checkOperation (const BufferInterface& original, - const BufferInterface& result, - tcu::ResultCollector& resultCollector) +void TestBuffer::checkOperation (const BufferData& original, + const BufferData& result, + tcu::ResultCollector& resultCollector) { // originalInout = original inout // input0 = input at index i @@ -338,9 +412,10 @@ void AtomicOperationCaseInstance::checkOperation (const BufferInterface& origina break; }; - const deUint32 resIo = result.inout[elementNdx]; - const deUint32 resOutput0 = result.output[elementNdx]; - const deUint32 resOutput1 = result.output[elementNdx + NUM_ELEMENTS / 2]; + const T resIo = result.inout[elementNdx]; + const T resOutput0 = result.output[elementNdx]; + const T resOutput1 = result.output[elementNdx + NUM_ELEMENTS / 2]; + if (!exp[0].compare(resIo, resOutput0, resOutput1) && !exp[1].compare(resIo, resOutput0, resOutput1)) { @@ -360,53 +435,92 @@ void AtomicOperationCaseInstance::checkOperation (const BufferInterface& origina } } -tcu::TestStatus AtomicOperationCaseInstance::iterate (void) + +class AtomicOperationCaseInstance : public TestInstance { - //Check stores and atomic operation support. - switch (m_shaderType) - { - case glu::SHADERTYPE_VERTEX: - case glu::SHADERTYPE_TESSELLATION_CONTROL: - case glu::SHADERTYPE_TESSELLATION_EVALUATION: - case glu::SHADERTYPE_GEOMETRY: - if(!m_context.getDeviceFeatures().vertexPipelineStoresAndAtomics) - TCU_THROW(NotSupportedError, "Stores and atomic operations are not supported in Vertex, Tessellation, and Geometry shader."); - break; - case glu::SHADERTYPE_FRAGMENT: - if(!m_context.getDeviceFeatures().fragmentStoresAndAtomics) - TCU_THROW(NotSupportedError, "Stores and atomic operations are not supported in fragment shader."); - break; - case glu::SHADERTYPE_COMPUTE: - break; - default: - DE_FATAL("Unsupported shader type"); - } +public: + AtomicOperationCaseInstance (Context& context, + const ShaderSpec& shaderSpec, + glu::ShaderType shaderType, + DataType dataType, + AtomicOperation atomicOp); + + virtual tcu::TestStatus iterate (void); + +private: + const ShaderSpec& m_shaderSpec; + glu::ShaderType m_shaderType; + const DataType m_dataType; + AtomicOperation m_atomicOp; - tcu::TestLog& log = m_context.getTestContext().getLog(); - const DeviceInterface& vkd = m_context.getDeviceInterface(); - const VkDevice device = m_context.getDevice(); - de::Random rnd (0x62a15e34); - Buffer buffer (m_context, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, sizeof(BufferInterface)); - BufferInterface* ptr = (BufferInterface*)buffer.getHostPtr(); +}; - for (int i = 0; i < NUM_ELEMENTS / 2; i++) +AtomicOperationCaseInstance::AtomicOperationCaseInstance (Context& context, + const ShaderSpec& shaderSpec, + glu::ShaderType shaderType, + DataType dataType, + AtomicOperation atomicOp) + : TestInstance (context) + , m_shaderSpec (shaderSpec) + , m_shaderType (shaderType) + , m_dataType (dataType) + , m_atomicOp (atomicOp) +{ + if ((m_dataType == DATA_TYPE_INT64) || (m_dataType == DATA_TYPE_UINT64)) { - ptr->inout[i] = rnd.getUint32(); - // The first half of compare elements match with every even index. - // The second half matches with odd indices. This causes the - // overlapping operations to only select one. - ptr->compare[i] = ptr->inout[i] + (i % 2); - ptr->compare[i + NUM_ELEMENTS / 2] = ptr->inout[i] + 1 - (i % 2); + if (!isDeviceExtensionSupported(context.getUsedApiVersion(), context.getDeviceExtensions(), "VK_KHR_shader_atomic_int64")) + TCU_THROW(NotSupportedError, "Missing extension: VK_KHR_shader_atomic_int64"); + + VkPhysicalDeviceShaderAtomicInt64FeaturesKHR shaderAtomicInt64Features; + deMemset(&shaderAtomicInt64Features, 0x0, sizeof(VkPhysicalDeviceShaderAtomicInt64FeaturesKHR)); + shaderAtomicInt64Features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR; + shaderAtomicInt64Features.pNext = DE_NULL; + + VkPhysicalDeviceFeatures2 features; + deMemset(&features, 0x0, sizeof(VkPhysicalDeviceFeatures2)); + features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; + features.pNext = &shaderAtomicInt64Features; + + context.getInstanceInterface().getPhysicalDeviceFeatures2(context.getPhysicalDevice(), &features); + + if (shaderAtomicInt64Features.shaderBufferInt64Atomics == VK_FALSE) + { + TCU_THROW(NotSupportedError, "VkShaderAtomicInt64: 64-bit unsigned and signed integer atomic operations not supported"); + } } - for (int i = 0; i < NUM_ELEMENTS; i++) +} + +tcu::TestStatus AtomicOperationCaseInstance::iterate(void) +{ + //Check stores and atomic operation support. + switch (m_shaderType) { - ptr->input[i] = rnd.getUint32(); - ptr->output[i] = 0xcdcdcdcd; + case glu::SHADERTYPE_VERTEX: + case glu::SHADERTYPE_TESSELLATION_CONTROL: + case glu::SHADERTYPE_TESSELLATION_EVALUATION: + case glu::SHADERTYPE_GEOMETRY: + if (!m_context.getDeviceFeatures().vertexPipelineStoresAndAtomics) + TCU_THROW(NotSupportedError, "Stores and atomic operations are not supported in Vertex, Tessellation, and Geometry shader."); + break; + case glu::SHADERTYPE_FRAGMENT: + if (!m_context.getDeviceFeatures().fragmentStoresAndAtomics) + TCU_THROW(NotSupportedError, "Stores and atomic operations are not supported in fragment shader."); + break; + case glu::SHADERTYPE_COMPUTE: + break; + default: + DE_FATAL("Unsupported shader type"); } - ptr->index = 0; - // Take a copy to be used when calculating expected values. - BufferInterface original = *ptr; + de::UniquePtr testBuffer (createTestBuffer(m_dataType, m_atomicOp)); + tcu::TestLog& log = m_context.getTestContext().getLog(); + const DeviceInterface& vkd = m_context.getDeviceInterface(); + const VkDevice device = m_context.getDevice(); + de::Random rnd (0x62a15e34); + Buffer buffer (m_context, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, testBuffer->bufferSize()); + + testBuffer->setBuffer(buffer.getHostPtr()); + testBuffer->fillWithTestData(rnd); buffer.flush(); @@ -496,10 +610,7 @@ tcu::TestStatus AtomicOperationCaseInstance::iterate (void) tcu::ResultCollector resultCollector(log); // Check the results of the atomic operation - if (m_sign) - checkOperation(original, *ptr, resultCollector); - else - checkOperation(original, *ptr, resultCollector); + testBuffer->checkResults(resultCollector); return tcu::TestStatus(resultCollector.getResult(), resultCollector.getMessage()); } @@ -511,7 +622,7 @@ public: const char* name, const char* description, glu::ShaderType type, - bool sign, + DataType dataType, AtomicOperation atomicOp); virtual ~AtomicOperationCase (void); @@ -526,7 +637,7 @@ private: void createShaderSpec(); ShaderSpec m_shaderSpec; const glu::ShaderType m_shaderType; - const bool m_sign; + const DataType m_dataType; const AtomicOperation m_atomicOp; }; @@ -534,11 +645,11 @@ AtomicOperationCase::AtomicOperationCase (tcu::TestContext& testCtx, const char* name, const char* description, glu::ShaderType shaderType, - bool sign, + DataType dataType, AtomicOperation atomicOp) : TestCase (testCtx, name, description) , m_shaderType (shaderType) - , m_sign (sign) + , m_dataType (dataType) , m_atomicOp (atomicOp) { createShaderSpec(); @@ -551,23 +662,33 @@ AtomicOperationCase::~AtomicOperationCase (void) TestInstance* AtomicOperationCase::createInstance (Context& ctx) const { - return new AtomicOperationCaseInstance(ctx, m_shaderSpec, m_shaderType, m_sign, m_atomicOp); + return new AtomicOperationCaseInstance(ctx, m_shaderSpec, m_shaderType, m_dataType, m_atomicOp); } void AtomicOperationCase::createShaderSpec (void) { const tcu::StringTemplate shaderTemplateGlobal( - "layout (set = ${SETIDX}, binding = 0, std430) buffer AtomicBuffer\n" + "${EXTENSIONS}\n" + "layout (set = ${SETIDX}, binding = 0) buffer AtomicBuffer\n" "{\n" - " highp int index;\n" - " highp ${DATATYPE} inoutValues[${N}/2];\n" - " highp ${DATATYPE} inputValues[${N}];\n" - " highp ${DATATYPE} compareValues[${N}];\n" - " highp ${DATATYPE} outputValues[${N}];\n" + " int index;\n" + " ${DATATYPE} inoutValues[${N}/2];\n" + " ${DATATYPE} inputValues[${N}];\n" + " ${DATATYPE} compareValues[${N}];\n" + " ${DATATYPE} outputValues[${N}];\n" "} buf;\n"); std::map specializations; - specializations["DATATYPE"] = m_sign ? "int" : "uint"; + if ((m_dataType == DATA_TYPE_INT64) || (m_dataType == DATA_TYPE_UINT64)) + { + specializations["EXTENSIONS"] = "#extension GL_ARB_gpu_shader_int64 : enable\n" + "#extension GL_EXT_shader_atomic_int64 : enable\n"; + } + else + { + specializations["EXTENSIONS"] = ""; + } + specializations["DATATYPE"] = dataType2Str(m_dataType); specializations["ATOMICOP"] = atomicOp2Str(m_atomicOp); specializations["SETIDX"] = de::toString((int)EXTRA_RESOURCES_DESCRIPTOR_SET_INDEX); specializations["N"] = de::toString((int)NUM_ELEMENTS); @@ -580,6 +701,7 @@ void AtomicOperationCase::createShaderSpec (void) m_shaderSpec.outputs.push_back(Symbol("outData", glu::VarType(glu::TYPE_UINT, glu::PRECISION_HIGHP))); m_shaderSpec.globalDeclarations = shaderTemplateGlobal.specialize(specializations); m_shaderSpec.source = shaderTemplateSrc.specialize(specializations); + m_shaderSpec.glslVersion = glu::GLSL_VERSION_450; } void addAtomicOperationTests (tcu::TestCaseGroup* atomicOperationTestsGroup) @@ -602,13 +724,15 @@ void addAtomicOperationTests (tcu::TestCaseGroup* atomicOperationTestsGroup) static const struct { - bool value; + DataType dataType; const char* name; const char* description; } dataSign[] = { - { true, "signed", "Tests using signed data (int)" }, - { false, "unsigned", "Tests using unsigned data (uint)" } + { DATA_TYPE_INT32, "signed", "Tests using signed data (int)" }, + { DATA_TYPE_UINT32, "unsigned", "Tests using unsigned data (uint)" }, + { DATA_TYPE_INT64, "signed64bit", "Tests using 64 bit signed data (int64)" }, + { DATA_TYPE_UINT64, "unsigned64bit", "Tests using 64 bit unsigned data (uint64)" } }; static const struct @@ -635,7 +759,7 @@ void addAtomicOperationTests (tcu::TestCaseGroup* atomicOperationTestsGroup) { const std::string description = std::string("Tests atomic operation ") + atomicOp2Str(atomicOp[opNdx].value) + std::string("."); std::string name = std::string(atomicOp[opNdx].name) + "_" + std::string(dataSign[signNdx].name) + "_" + std::string(shaderTypes[shaderTypeNdx].name); - atomicOperationTestsGroup->addChild(new AtomicOperationCase(testCtx, name.c_str(), description.c_str(), shaderTypes[shaderTypeNdx].type, dataSign[signNdx].value, atomicOp[opNdx].value)); + atomicOperationTestsGroup->addChild(new AtomicOperationCase(testCtx, name.c_str(), description.c_str(), shaderTypes[shaderTypeNdx].type, dataSign[signNdx].dataType, atomicOp[opNdx].value)); } } } diff --git a/external/vulkancts/modules/vulkan/shaderexecutor/vktShaderExecutor.cpp b/external/vulkancts/modules/vulkan/shaderexecutor/vktShaderExecutor.cpp index c4f8b44..44872b0 100644 --- a/external/vulkancts/modules/vulkan/shaderexecutor/vktShaderExecutor.cpp +++ b/external/vulkancts/modules/vulkan/shaderexecutor/vktShaderExecutor.cpp @@ -284,7 +284,7 @@ static std::string generatePassthroughFragmentShader (const ShaderSpec& shaderSp { std::ostringstream src; - src <<"#version 310 es\n"; + src <<"#version 450\n"; if (!shaderSpec.globalDeclarations.empty()) src << shaderSpec.globalDeclarations << "\n"; diff --git a/external/vulkancts/mustpass/1.1.2/vk-default-no-waivers.txt b/external/vulkancts/mustpass/1.1.2/vk-default-no-waivers.txt index cf58b96..b92ff8c 100644 --- a/external/vulkancts/mustpass/1.1.2/vk-default-no-waivers.txt +++ b/external/vulkancts/mustpass/1.1.2/vk-default-no-waivers.txt @@ -240552,6 +240552,18 @@ dEQP-VK.glsl.atomic_operations.exchange_unsigned_geometry dEQP-VK.glsl.atomic_operations.exchange_unsigned_tess_ctrl dEQP-VK.glsl.atomic_operations.exchange_unsigned_tess_eval dEQP-VK.glsl.atomic_operations.exchange_unsigned_compute +dEQP-VK.glsl.atomic_operations.exchange_signed64bit_vertex +dEQP-VK.glsl.atomic_operations.exchange_signed64bit_fragment +dEQP-VK.glsl.atomic_operations.exchange_signed64bit_geometry +dEQP-VK.glsl.atomic_operations.exchange_signed64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.exchange_signed64bit_tess_eval +dEQP-VK.glsl.atomic_operations.exchange_signed64bit_compute +dEQP-VK.glsl.atomic_operations.exchange_unsigned64bit_vertex +dEQP-VK.glsl.atomic_operations.exchange_unsigned64bit_fragment +dEQP-VK.glsl.atomic_operations.exchange_unsigned64bit_geometry +dEQP-VK.glsl.atomic_operations.exchange_unsigned64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.exchange_unsigned64bit_tess_eval +dEQP-VK.glsl.atomic_operations.exchange_unsigned64bit_compute dEQP-VK.glsl.atomic_operations.comp_swap_signed_vertex dEQP-VK.glsl.atomic_operations.comp_swap_signed_fragment dEQP-VK.glsl.atomic_operations.comp_swap_signed_geometry @@ -240564,6 +240576,18 @@ dEQP-VK.glsl.atomic_operations.comp_swap_unsigned_geometry dEQP-VK.glsl.atomic_operations.comp_swap_unsigned_tess_ctrl dEQP-VK.glsl.atomic_operations.comp_swap_unsigned_tess_eval dEQP-VK.glsl.atomic_operations.comp_swap_unsigned_compute +dEQP-VK.glsl.atomic_operations.comp_swap_signed64bit_vertex +dEQP-VK.glsl.atomic_operations.comp_swap_signed64bit_fragment +dEQP-VK.glsl.atomic_operations.comp_swap_signed64bit_geometry +dEQP-VK.glsl.atomic_operations.comp_swap_signed64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.comp_swap_signed64bit_tess_eval +dEQP-VK.glsl.atomic_operations.comp_swap_signed64bit_compute +dEQP-VK.glsl.atomic_operations.comp_swap_unsigned64bit_vertex +dEQP-VK.glsl.atomic_operations.comp_swap_unsigned64bit_fragment +dEQP-VK.glsl.atomic_operations.comp_swap_unsigned64bit_geometry +dEQP-VK.glsl.atomic_operations.comp_swap_unsigned64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.comp_swap_unsigned64bit_tess_eval +dEQP-VK.glsl.atomic_operations.comp_swap_unsigned64bit_compute dEQP-VK.glsl.atomic_operations.add_signed_vertex dEQP-VK.glsl.atomic_operations.add_signed_fragment dEQP-VK.glsl.atomic_operations.add_signed_geometry @@ -240576,6 +240600,18 @@ dEQP-VK.glsl.atomic_operations.add_unsigned_geometry dEQP-VK.glsl.atomic_operations.add_unsigned_tess_ctrl dEQP-VK.glsl.atomic_operations.add_unsigned_tess_eval dEQP-VK.glsl.atomic_operations.add_unsigned_compute +dEQP-VK.glsl.atomic_operations.add_signed64bit_vertex +dEQP-VK.glsl.atomic_operations.add_signed64bit_fragment +dEQP-VK.glsl.atomic_operations.add_signed64bit_geometry +dEQP-VK.glsl.atomic_operations.add_signed64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.add_signed64bit_tess_eval +dEQP-VK.glsl.atomic_operations.add_signed64bit_compute +dEQP-VK.glsl.atomic_operations.add_unsigned64bit_vertex +dEQP-VK.glsl.atomic_operations.add_unsigned64bit_fragment +dEQP-VK.glsl.atomic_operations.add_unsigned64bit_geometry +dEQP-VK.glsl.atomic_operations.add_unsigned64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.add_unsigned64bit_tess_eval +dEQP-VK.glsl.atomic_operations.add_unsigned64bit_compute dEQP-VK.glsl.atomic_operations.min_signed_vertex dEQP-VK.glsl.atomic_operations.min_signed_fragment dEQP-VK.glsl.atomic_operations.min_signed_geometry @@ -240588,6 +240624,18 @@ dEQP-VK.glsl.atomic_operations.min_unsigned_geometry dEQP-VK.glsl.atomic_operations.min_unsigned_tess_ctrl dEQP-VK.glsl.atomic_operations.min_unsigned_tess_eval dEQP-VK.glsl.atomic_operations.min_unsigned_compute +dEQP-VK.glsl.atomic_operations.min_signed64bit_vertex +dEQP-VK.glsl.atomic_operations.min_signed64bit_fragment +dEQP-VK.glsl.atomic_operations.min_signed64bit_geometry +dEQP-VK.glsl.atomic_operations.min_signed64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.min_signed64bit_tess_eval +dEQP-VK.glsl.atomic_operations.min_signed64bit_compute +dEQP-VK.glsl.atomic_operations.min_unsigned64bit_vertex +dEQP-VK.glsl.atomic_operations.min_unsigned64bit_fragment +dEQP-VK.glsl.atomic_operations.min_unsigned64bit_geometry +dEQP-VK.glsl.atomic_operations.min_unsigned64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.min_unsigned64bit_tess_eval +dEQP-VK.glsl.atomic_operations.min_unsigned64bit_compute dEQP-VK.glsl.atomic_operations.max_signed_vertex dEQP-VK.glsl.atomic_operations.max_signed_fragment dEQP-VK.glsl.atomic_operations.max_signed_geometry @@ -240600,6 +240648,18 @@ dEQP-VK.glsl.atomic_operations.max_unsigned_geometry dEQP-VK.glsl.atomic_operations.max_unsigned_tess_ctrl dEQP-VK.glsl.atomic_operations.max_unsigned_tess_eval dEQP-VK.glsl.atomic_operations.max_unsigned_compute +dEQP-VK.glsl.atomic_operations.max_signed64bit_vertex +dEQP-VK.glsl.atomic_operations.max_signed64bit_fragment +dEQP-VK.glsl.atomic_operations.max_signed64bit_geometry +dEQP-VK.glsl.atomic_operations.max_signed64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.max_signed64bit_tess_eval +dEQP-VK.glsl.atomic_operations.max_signed64bit_compute +dEQP-VK.glsl.atomic_operations.max_unsigned64bit_vertex +dEQP-VK.glsl.atomic_operations.max_unsigned64bit_fragment +dEQP-VK.glsl.atomic_operations.max_unsigned64bit_geometry +dEQP-VK.glsl.atomic_operations.max_unsigned64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.max_unsigned64bit_tess_eval +dEQP-VK.glsl.atomic_operations.max_unsigned64bit_compute dEQP-VK.glsl.atomic_operations.and_signed_vertex dEQP-VK.glsl.atomic_operations.and_signed_fragment dEQP-VK.glsl.atomic_operations.and_signed_geometry @@ -240612,6 +240672,18 @@ dEQP-VK.glsl.atomic_operations.and_unsigned_geometry dEQP-VK.glsl.atomic_operations.and_unsigned_tess_ctrl dEQP-VK.glsl.atomic_operations.and_unsigned_tess_eval dEQP-VK.glsl.atomic_operations.and_unsigned_compute +dEQP-VK.glsl.atomic_operations.and_signed64bit_vertex +dEQP-VK.glsl.atomic_operations.and_signed64bit_fragment +dEQP-VK.glsl.atomic_operations.and_signed64bit_geometry +dEQP-VK.glsl.atomic_operations.and_signed64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.and_signed64bit_tess_eval +dEQP-VK.glsl.atomic_operations.and_signed64bit_compute +dEQP-VK.glsl.atomic_operations.and_unsigned64bit_vertex +dEQP-VK.glsl.atomic_operations.and_unsigned64bit_fragment +dEQP-VK.glsl.atomic_operations.and_unsigned64bit_geometry +dEQP-VK.glsl.atomic_operations.and_unsigned64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.and_unsigned64bit_tess_eval +dEQP-VK.glsl.atomic_operations.and_unsigned64bit_compute dEQP-VK.glsl.atomic_operations.or_signed_vertex dEQP-VK.glsl.atomic_operations.or_signed_fragment dEQP-VK.glsl.atomic_operations.or_signed_geometry @@ -240624,6 +240696,18 @@ dEQP-VK.glsl.atomic_operations.or_unsigned_geometry dEQP-VK.glsl.atomic_operations.or_unsigned_tess_ctrl dEQP-VK.glsl.atomic_operations.or_unsigned_tess_eval dEQP-VK.glsl.atomic_operations.or_unsigned_compute +dEQP-VK.glsl.atomic_operations.or_signed64bit_vertex +dEQP-VK.glsl.atomic_operations.or_signed64bit_fragment +dEQP-VK.glsl.atomic_operations.or_signed64bit_geometry +dEQP-VK.glsl.atomic_operations.or_signed64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.or_signed64bit_tess_eval +dEQP-VK.glsl.atomic_operations.or_signed64bit_compute +dEQP-VK.glsl.atomic_operations.or_unsigned64bit_vertex +dEQP-VK.glsl.atomic_operations.or_unsigned64bit_fragment +dEQP-VK.glsl.atomic_operations.or_unsigned64bit_geometry +dEQP-VK.glsl.atomic_operations.or_unsigned64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.or_unsigned64bit_tess_eval +dEQP-VK.glsl.atomic_operations.or_unsigned64bit_compute dEQP-VK.glsl.atomic_operations.xor_signed_vertex dEQP-VK.glsl.atomic_operations.xor_signed_fragment dEQP-VK.glsl.atomic_operations.xor_signed_geometry @@ -240636,6 +240720,18 @@ dEQP-VK.glsl.atomic_operations.xor_unsigned_geometry dEQP-VK.glsl.atomic_operations.xor_unsigned_tess_ctrl dEQP-VK.glsl.atomic_operations.xor_unsigned_tess_eval dEQP-VK.glsl.atomic_operations.xor_unsigned_compute +dEQP-VK.glsl.atomic_operations.xor_signed64bit_vertex +dEQP-VK.glsl.atomic_operations.xor_signed64bit_fragment +dEQP-VK.glsl.atomic_operations.xor_signed64bit_geometry +dEQP-VK.glsl.atomic_operations.xor_signed64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.xor_signed64bit_tess_eval +dEQP-VK.glsl.atomic_operations.xor_signed64bit_compute +dEQP-VK.glsl.atomic_operations.xor_unsigned64bit_vertex +dEQP-VK.glsl.atomic_operations.xor_unsigned64bit_fragment +dEQP-VK.glsl.atomic_operations.xor_unsigned64bit_geometry +dEQP-VK.glsl.atomic_operations.xor_unsigned64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.xor_unsigned64bit_tess_eval +dEQP-VK.glsl.atomic_operations.xor_unsigned64bit_compute dEQP-VK.renderpass.suballocation.simple.color dEQP-VK.renderpass.suballocation.simple.depth dEQP-VK.renderpass.suballocation.simple.stencil diff --git a/external/vulkancts/mustpass/1.1.2/vk-default.txt b/external/vulkancts/mustpass/1.1.2/vk-default.txt index d92c193..4bde02d 100644 --- a/external/vulkancts/mustpass/1.1.2/vk-default.txt +++ b/external/vulkancts/mustpass/1.1.2/vk-default.txt @@ -240514,6 +240514,18 @@ dEQP-VK.glsl.atomic_operations.exchange_unsigned_geometry dEQP-VK.glsl.atomic_operations.exchange_unsigned_tess_ctrl dEQP-VK.glsl.atomic_operations.exchange_unsigned_tess_eval dEQP-VK.glsl.atomic_operations.exchange_unsigned_compute +dEQP-VK.glsl.atomic_operations.exchange_signed64bit_vertex +dEQP-VK.glsl.atomic_operations.exchange_signed64bit_fragment +dEQP-VK.glsl.atomic_operations.exchange_signed64bit_geometry +dEQP-VK.glsl.atomic_operations.exchange_signed64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.exchange_signed64bit_tess_eval +dEQP-VK.glsl.atomic_operations.exchange_signed64bit_compute +dEQP-VK.glsl.atomic_operations.exchange_unsigned64bit_vertex +dEQP-VK.glsl.atomic_operations.exchange_unsigned64bit_fragment +dEQP-VK.glsl.atomic_operations.exchange_unsigned64bit_geometry +dEQP-VK.glsl.atomic_operations.exchange_unsigned64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.exchange_unsigned64bit_tess_eval +dEQP-VK.glsl.atomic_operations.exchange_unsigned64bit_compute dEQP-VK.glsl.atomic_operations.comp_swap_signed_vertex dEQP-VK.glsl.atomic_operations.comp_swap_signed_fragment dEQP-VK.glsl.atomic_operations.comp_swap_signed_geometry @@ -240526,6 +240538,18 @@ dEQP-VK.glsl.atomic_operations.comp_swap_unsigned_geometry dEQP-VK.glsl.atomic_operations.comp_swap_unsigned_tess_ctrl dEQP-VK.glsl.atomic_operations.comp_swap_unsigned_tess_eval dEQP-VK.glsl.atomic_operations.comp_swap_unsigned_compute +dEQP-VK.glsl.atomic_operations.comp_swap_signed64bit_vertex +dEQP-VK.glsl.atomic_operations.comp_swap_signed64bit_fragment +dEQP-VK.glsl.atomic_operations.comp_swap_signed64bit_geometry +dEQP-VK.glsl.atomic_operations.comp_swap_signed64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.comp_swap_signed64bit_tess_eval +dEQP-VK.glsl.atomic_operations.comp_swap_signed64bit_compute +dEQP-VK.glsl.atomic_operations.comp_swap_unsigned64bit_vertex +dEQP-VK.glsl.atomic_operations.comp_swap_unsigned64bit_fragment +dEQP-VK.glsl.atomic_operations.comp_swap_unsigned64bit_geometry +dEQP-VK.glsl.atomic_operations.comp_swap_unsigned64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.comp_swap_unsigned64bit_tess_eval +dEQP-VK.glsl.atomic_operations.comp_swap_unsigned64bit_compute dEQP-VK.glsl.atomic_operations.add_signed_vertex dEQP-VK.glsl.atomic_operations.add_signed_fragment dEQP-VK.glsl.atomic_operations.add_signed_geometry @@ -240538,6 +240562,18 @@ dEQP-VK.glsl.atomic_operations.add_unsigned_geometry dEQP-VK.glsl.atomic_operations.add_unsigned_tess_ctrl dEQP-VK.glsl.atomic_operations.add_unsigned_tess_eval dEQP-VK.glsl.atomic_operations.add_unsigned_compute +dEQP-VK.glsl.atomic_operations.add_signed64bit_vertex +dEQP-VK.glsl.atomic_operations.add_signed64bit_fragment +dEQP-VK.glsl.atomic_operations.add_signed64bit_geometry +dEQP-VK.glsl.atomic_operations.add_signed64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.add_signed64bit_tess_eval +dEQP-VK.glsl.atomic_operations.add_signed64bit_compute +dEQP-VK.glsl.atomic_operations.add_unsigned64bit_vertex +dEQP-VK.glsl.atomic_operations.add_unsigned64bit_fragment +dEQP-VK.glsl.atomic_operations.add_unsigned64bit_geometry +dEQP-VK.glsl.atomic_operations.add_unsigned64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.add_unsigned64bit_tess_eval +dEQP-VK.glsl.atomic_operations.add_unsigned64bit_compute dEQP-VK.glsl.atomic_operations.min_signed_vertex dEQP-VK.glsl.atomic_operations.min_signed_fragment dEQP-VK.glsl.atomic_operations.min_signed_geometry @@ -240550,6 +240586,18 @@ dEQP-VK.glsl.atomic_operations.min_unsigned_geometry dEQP-VK.glsl.atomic_operations.min_unsigned_tess_ctrl dEQP-VK.glsl.atomic_operations.min_unsigned_tess_eval dEQP-VK.glsl.atomic_operations.min_unsigned_compute +dEQP-VK.glsl.atomic_operations.min_signed64bit_vertex +dEQP-VK.glsl.atomic_operations.min_signed64bit_fragment +dEQP-VK.glsl.atomic_operations.min_signed64bit_geometry +dEQP-VK.glsl.atomic_operations.min_signed64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.min_signed64bit_tess_eval +dEQP-VK.glsl.atomic_operations.min_signed64bit_compute +dEQP-VK.glsl.atomic_operations.min_unsigned64bit_vertex +dEQP-VK.glsl.atomic_operations.min_unsigned64bit_fragment +dEQP-VK.glsl.atomic_operations.min_unsigned64bit_geometry +dEQP-VK.glsl.atomic_operations.min_unsigned64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.min_unsigned64bit_tess_eval +dEQP-VK.glsl.atomic_operations.min_unsigned64bit_compute dEQP-VK.glsl.atomic_operations.max_signed_vertex dEQP-VK.glsl.atomic_operations.max_signed_fragment dEQP-VK.glsl.atomic_operations.max_signed_geometry @@ -240562,6 +240610,18 @@ dEQP-VK.glsl.atomic_operations.max_unsigned_geometry dEQP-VK.glsl.atomic_operations.max_unsigned_tess_ctrl dEQP-VK.glsl.atomic_operations.max_unsigned_tess_eval dEQP-VK.glsl.atomic_operations.max_unsigned_compute +dEQP-VK.glsl.atomic_operations.max_signed64bit_vertex +dEQP-VK.glsl.atomic_operations.max_signed64bit_fragment +dEQP-VK.glsl.atomic_operations.max_signed64bit_geometry +dEQP-VK.glsl.atomic_operations.max_signed64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.max_signed64bit_tess_eval +dEQP-VK.glsl.atomic_operations.max_signed64bit_compute +dEQP-VK.glsl.atomic_operations.max_unsigned64bit_vertex +dEQP-VK.glsl.atomic_operations.max_unsigned64bit_fragment +dEQP-VK.glsl.atomic_operations.max_unsigned64bit_geometry +dEQP-VK.glsl.atomic_operations.max_unsigned64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.max_unsigned64bit_tess_eval +dEQP-VK.glsl.atomic_operations.max_unsigned64bit_compute dEQP-VK.glsl.atomic_operations.and_signed_vertex dEQP-VK.glsl.atomic_operations.and_signed_fragment dEQP-VK.glsl.atomic_operations.and_signed_geometry @@ -240574,6 +240634,18 @@ dEQP-VK.glsl.atomic_operations.and_unsigned_geometry dEQP-VK.glsl.atomic_operations.and_unsigned_tess_ctrl dEQP-VK.glsl.atomic_operations.and_unsigned_tess_eval dEQP-VK.glsl.atomic_operations.and_unsigned_compute +dEQP-VK.glsl.atomic_operations.and_signed64bit_vertex +dEQP-VK.glsl.atomic_operations.and_signed64bit_fragment +dEQP-VK.glsl.atomic_operations.and_signed64bit_geometry +dEQP-VK.glsl.atomic_operations.and_signed64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.and_signed64bit_tess_eval +dEQP-VK.glsl.atomic_operations.and_signed64bit_compute +dEQP-VK.glsl.atomic_operations.and_unsigned64bit_vertex +dEQP-VK.glsl.atomic_operations.and_unsigned64bit_fragment +dEQP-VK.glsl.atomic_operations.and_unsigned64bit_geometry +dEQP-VK.glsl.atomic_operations.and_unsigned64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.and_unsigned64bit_tess_eval +dEQP-VK.glsl.atomic_operations.and_unsigned64bit_compute dEQP-VK.glsl.atomic_operations.or_signed_vertex dEQP-VK.glsl.atomic_operations.or_signed_fragment dEQP-VK.glsl.atomic_operations.or_signed_geometry @@ -240586,6 +240658,18 @@ dEQP-VK.glsl.atomic_operations.or_unsigned_geometry dEQP-VK.glsl.atomic_operations.or_unsigned_tess_ctrl dEQP-VK.glsl.atomic_operations.or_unsigned_tess_eval dEQP-VK.glsl.atomic_operations.or_unsigned_compute +dEQP-VK.glsl.atomic_operations.or_signed64bit_vertex +dEQP-VK.glsl.atomic_operations.or_signed64bit_fragment +dEQP-VK.glsl.atomic_operations.or_signed64bit_geometry +dEQP-VK.glsl.atomic_operations.or_signed64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.or_signed64bit_tess_eval +dEQP-VK.glsl.atomic_operations.or_signed64bit_compute +dEQP-VK.glsl.atomic_operations.or_unsigned64bit_vertex +dEQP-VK.glsl.atomic_operations.or_unsigned64bit_fragment +dEQP-VK.glsl.atomic_operations.or_unsigned64bit_geometry +dEQP-VK.glsl.atomic_operations.or_unsigned64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.or_unsigned64bit_tess_eval +dEQP-VK.glsl.atomic_operations.or_unsigned64bit_compute dEQP-VK.glsl.atomic_operations.xor_signed_vertex dEQP-VK.glsl.atomic_operations.xor_signed_fragment dEQP-VK.glsl.atomic_operations.xor_signed_geometry @@ -240598,6 +240682,18 @@ dEQP-VK.glsl.atomic_operations.xor_unsigned_geometry dEQP-VK.glsl.atomic_operations.xor_unsigned_tess_ctrl dEQP-VK.glsl.atomic_operations.xor_unsigned_tess_eval dEQP-VK.glsl.atomic_operations.xor_unsigned_compute +dEQP-VK.glsl.atomic_operations.xor_signed64bit_vertex +dEQP-VK.glsl.atomic_operations.xor_signed64bit_fragment +dEQP-VK.glsl.atomic_operations.xor_signed64bit_geometry +dEQP-VK.glsl.atomic_operations.xor_signed64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.xor_signed64bit_tess_eval +dEQP-VK.glsl.atomic_operations.xor_signed64bit_compute +dEQP-VK.glsl.atomic_operations.xor_unsigned64bit_vertex +dEQP-VK.glsl.atomic_operations.xor_unsigned64bit_fragment +dEQP-VK.glsl.atomic_operations.xor_unsigned64bit_geometry +dEQP-VK.glsl.atomic_operations.xor_unsigned64bit_tess_ctrl +dEQP-VK.glsl.atomic_operations.xor_unsigned64bit_tess_eval +dEQP-VK.glsl.atomic_operations.xor_unsigned64bit_compute dEQP-VK.renderpass.suballocation.simple.color dEQP-VK.renderpass.suballocation.simple.depth dEQP-VK.renderpass.suballocation.simple.stencil diff --git a/external/vulkancts/scripts/gen_framework.py b/external/vulkancts/scripts/gen_framework.py index ca79ed6..4fb499a 100644 --- a/external/vulkancts/scripts/gen_framework.py +++ b/external/vulkancts/scripts/gen_framework.py @@ -128,6 +128,7 @@ def prefixName (prefix, name): name = name.replace("WIN_32_", "WIN32_") name = name.replace("8_BIT_", "8BIT_") name = name.replace("16_BIT_", "16BIT_") + name = name.replace("INT_64_", "INT64_") name = name.replace("D_3_D_12_", "D3D12_") name = name.replace("IOSSURFACE_", "IOS_SURFACE_") name = name.replace("MAC_OS", "MACOS_") diff --git a/external/vulkancts/scripts/src/vulkan.h.in b/external/vulkancts/scripts/src/vulkan.h.in index ae90ed2..04de561 100755 --- a/external/vulkancts/scripts/src/vulkan.h.in +++ b/external/vulkancts/scripts/src/vulkan.h.in @@ -394,6 +394,11 @@ typedef enum VkStructureType { VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT = 1000161003, VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT = 1000161004, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR = 1000177000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR = 1000180000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT = 1000190000, + VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT = 1000190001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT = 1000190002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR = 1000196000, VK_STRUCTURE_TYPE_BEGIN_RANGE = VK_STRUCTURE_TYPE_APPLICATION_INFO, VK_STRUCTURE_TYPE_END_RANGE = VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO, VK_STRUCTURE_TYPE_RANGE_SIZE = (VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO - VK_STRUCTURE_TYPE_APPLICATION_INFO + 1), @@ -7854,6 +7859,16 @@ typedef struct VkDescriptorPoolInlineUniformBlockCreateInfoEXT { uint32_t maxInlineUniformBlockBindings; } VkDescriptorPoolInlineUniformBlockCreateInfoEXT; +#define VK_KHR_shader_atomic_int64 1 +#define VK_KHR_SHADER_ATOMIC_INT64_SPEC_VERSION 1 +#define VK_KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME "VK_KHR_shader_atomic_int64" + +typedef struct VkPhysicalDeviceShaderAtomicInt64FeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 shaderBufferInt64Atomics; + VkBool32 shaderSharedInt64Atomics; +} VkPhysicalDeviceShaderAtomicInt64FeaturesKHR; #ifdef __cplusplus } -- 2.7.4