From 238e34aa35ab095dea70fcccfa38b9bf0a560446 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marcin=20Zaj=C4=85c?= Date: Fri, 20 May 2022 16:01:05 +0200 Subject: [PATCH] Missing VK_KHR_object_refresh VKSC only, featureless, non-core extension forces modifications to the gen_framework.py script. Components: Vulkan VK-GL-CTS issue: 3699 Change-Id: I07ebd24f5172a3008072ef6a64543f1df949dbf9 --- android/cts/main/vksc-main/api.txt | 1 + .../generated/vulkansc/vkDeviceExtensions.inl | 1 + .../vulkancts/mustpass/main/vksc-default/api.txt | 1 + external/vulkancts/scripts/gen_framework.py | 29 ++++++++++++++++++---- .../src/extensions/VK_KHR_object_refresh.json | 14 +++++++++++ 5 files changed, 41 insertions(+), 5 deletions(-) create mode 100644 external/vulkancts/scripts/src/extensions/VK_KHR_object_refresh.json diff --git a/android/cts/main/vksc-main/api.txt b/android/cts/main/vksc-main/api.txt index ebfbfa9..860dac4 100644 --- a/android/cts/main/vksc-main/api.txt +++ b/android/cts/main/vksc-main/api.txt @@ -200683,6 +200683,7 @@ dEQP-VKSC.api.descriptor_pool.repeated_reset_long dEQP-VKSC.api.descriptor_pool.repeated_free_reset_short dEQP-VKSC.api.descriptor_pool.repeated_free_reset_long dEQP-VKSC.api.descriptor_pool.out_of_pool_memory +dEQP-VKSC.api.descriptor_pool.zero_pool_size_count dEQP-VKSC.api.null_handle.destroy_buffer dEQP-VKSC.api.null_handle.destroy_buffer_view dEQP-VKSC.api.null_handle.destroy_descriptor_set_layout diff --git a/external/vulkancts/framework/vulkan/generated/vulkansc/vkDeviceExtensions.inl b/external/vulkancts/framework/vulkan/generated/vulkansc/vkDeviceExtensions.inl index 460c674..17291c1 100644 --- a/external/vulkancts/framework/vulkan/generated/vulkansc/vkDeviceExtensions.inl +++ b/external/vulkancts/framework/vulkan/generated/vulkansc/vkDeviceExtensions.inl @@ -42,6 +42,7 @@ static const char* s_allowedDeviceKhrExtensions[] = "VK_KHR_maintenance3", "VK_KHR_maintenance4", "VK_KHR_multiview", + "VK_KHR_object_refresh", "VK_KHR_performance_query", "VK_KHR_pipeline_executable_properties", "VK_KHR_pipeline_library", diff --git a/external/vulkancts/mustpass/main/vksc-default/api.txt b/external/vulkancts/mustpass/main/vksc-default/api.txt index 9866e57..7a56658 100644 --- a/external/vulkancts/mustpass/main/vksc-default/api.txt +++ b/external/vulkancts/mustpass/main/vksc-default/api.txt @@ -200680,6 +200680,7 @@ dEQP-VKSC.api.descriptor_pool.repeated_reset_long dEQP-VKSC.api.descriptor_pool.repeated_free_reset_short dEQP-VKSC.api.descriptor_pool.repeated_free_reset_long dEQP-VKSC.api.descriptor_pool.out_of_pool_memory +dEQP-VKSC.api.descriptor_pool.zero_pool_size_count dEQP-VKSC.api.null_handle.destroy_buffer dEQP-VKSC.api.null_handle.destroy_buffer_view dEQP-VKSC.api.null_handle.destroy_descriptor_set_layout diff --git a/external/vulkancts/scripts/gen_framework.py b/external/vulkancts/scripts/gen_framework.py index 58622ca..04afae4 100755 --- a/external/vulkancts/scripts/gen_framework.py +++ b/external/vulkancts/scripts/gen_framework.py @@ -2703,8 +2703,9 @@ def writeMandatoryFeatures(api, filename): listStructFeatures = sorted(data['mandatory_features'].items(), key=lambda tup: tup[0]) for structure, featuresList in listStructFeatures: for featureData in featuresList: - assert('features' in featureData.keys()) - assert('requirements' in featureData.keys()) + # allow for featureless VKSC only extensions + if not 'features' in featureData.keys() or 'requirements' not in featureData.keys(): + continue requirements = featureData['requirements'] mandatory_variant = '' @@ -2835,7 +2836,7 @@ def writeMandatoryFeatures(api, filename): stream.append('}\n') writeInlFile(filename, INL_HEADER, stream) -def writeExtensionList(api, filename, extensionType): +def writeExtensionList(apiName, api, filename, extensionType): extensionList = [] for extensionName, data in api.additionalExtensionData: # make sure extension name starts with VK_KHR @@ -2844,6 +2845,24 @@ def writeExtensionList(api, filename, extensionType): # make sure that this extension was registered if 'register_extension' not in data.keys(): continue + # make sure extension is intended for the vulkan variant + is_sc_only = False + + if apiName != 'SC': + if 'mandatory_features' in data.keys(): + for structure, listStruct in data['mandatory_features'].items(): + for featureData in listStruct: + mandatory_variant = '' + try: + mandatory_variant = featureData['mandatory_variant'] + except KeyError: + mandatory_variant = '' + # VKSC only + if 'vulkansc' in mandatory_variant: + is_sc_only = True + if is_sc_only: + continue + # make sure extension has proper type if extensionType == data['register_extension']['type']: extensionList.append(extensionName) @@ -3006,8 +3025,8 @@ if __name__ == "__main__": writeExtensionFunctions (api, os.path.join(outputPath, "vkExtensionFunctions.inl")) writeDeviceFeatures2 (api, os.path.join(outputPath, "vkDeviceFeatures2.inl")) writeMandatoryFeatures (api, os.path.join(outputPath, "vkMandatoryFeatures.inl")) - writeExtensionList (api, os.path.join(outputPath, "vkInstanceExtensions.inl"), 'instance') - writeExtensionList (api, os.path.join(outputPath, "vkDeviceExtensions.inl"), 'device') + writeExtensionList (args.api, api, os.path.join(outputPath, "vkInstanceExtensions.inl"), 'instance') + writeExtensionList (args.api, api, os.path.join(outputPath, "vkDeviceExtensions.inl"), 'device') writeDriverIds (args.api, os.path.join(outputPath, "vkKnownDriverIds.inl")) writeObjTypeImpl (api, os.path.join(outputPath, "vkObjTypeImpl.inl")) # NOTE: when new files are generated then they should also be added to the diff --git a/external/vulkancts/scripts/src/extensions/VK_KHR_object_refresh.json b/external/vulkancts/scripts/src/extensions/VK_KHR_object_refresh.json new file mode 100644 index 0000000..93d0b33 --- /dev/null +++ b/external/vulkancts/scripts/src/extensions/VK_KHR_object_refresh.json @@ -0,0 +1,14 @@ +{ + "register_extension": + { + "type": "device", + "core": "" + }, + "mandatory_features": + { + "": + [ + { "mandatory_variant": ["vulkansc"] } + ] + } +} -- 2.7.4