diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-12 14:27:29 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-13 09:35:20 +0000 |
commit | c30a6232df03e1efbd9f3b226777b07e087a1122 (patch) | |
tree | e992f45784689f373bcc38d1b79a239ebe17ee23 /chromium/gpu/vulkan/generate_bindings.py | |
parent | 7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (diff) | |
download | qtwebengine-chromium-85-based.tar.gz |
BASELINE: Update Chromium to 85.0.4183.14085-based
Change-Id: Iaa42f4680837c57725b1344f108c0196741f6057
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/gpu/vulkan/generate_bindings.py')
-rwxr-xr-x | chromium/gpu/vulkan/generate_bindings.py | 177 |
1 files changed, 80 insertions, 97 deletions
diff --git a/chromium/gpu/vulkan/generate_bindings.py b/chromium/gpu/vulkan/generate_bindings.py index eed96c896b9..1067f8fa5c2 100755 --- a/chromium/gpu/vulkan/generate_bindings.py +++ b/chromium/gpu/vulkan/generate_bindings.py @@ -22,11 +22,13 @@ from reg import Registry registry = Registry() registry.loadFile(open(path.join(vulkan_reg_path, "vk.xml"))) +VULKAN_REQUIRED_API_VERSION = 'VK_API_VERSION_1_1' + VULKAN_UNASSOCIATED_FUNCTIONS = [ { 'functions': [ # vkGetInstanceProcAddr belongs here but is handled specially. - # vkEnumerateInstanceVersion belongs here but is handled specially. + 'vkEnumerateInstanceVersion', 'vkCreateInstance', 'vkEnumerateInstanceExtensionProperties', 'vkEnumerateInstanceLayerProperties', @@ -43,9 +45,11 @@ VULKAN_INSTANCE_FUNCTIONS = [ 'vkEnumerateDeviceLayerProperties', 'vkEnumeratePhysicalDevices', 'vkGetDeviceProcAddr', - 'vkGetPhysicalDeviceFeatures', + 'vkGetPhysicalDeviceFeatures2', 'vkGetPhysicalDeviceFormatProperties', + 'vkGetPhysicalDeviceImageFormatProperties2', 'vkGetPhysicalDeviceMemoryProperties', + 'vkGetPhysicalDeviceMemoryProperties2', 'vkGetPhysicalDeviceProperties', 'vkGetPhysicalDeviceQueueFamilyProperties', ] @@ -97,22 +101,6 @@ VULKAN_INSTANCE_FUNCTIONS = [ 'vkCreateImagePipeSurfaceFUCHSIA', ] }, - { - 'min_api_version': 'VK_API_VERSION_1_1', - 'functions': [ - 'vkGetPhysicalDeviceImageFormatProperties2', - ] - }, - { - # vkGetPhysicalDeviceFeatures2() is defined in Vulkan 1.1 or suffixed in the - # VK_KHR_get_physical_device_properties2 extension. - 'min_api_version': 'VK_API_VERSION_1_1', - 'extension': 'VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME', - 'extension_suffix': 'KHR', - 'functions': [ - 'vkGetPhysicalDeviceFeatures2', - ] - }, ] VULKAN_DEVICE_FUNCTIONS = [ @@ -123,7 +111,9 @@ VULKAN_DEVICE_FUNCTIONS = [ 'vkAllocateMemory', 'vkBeginCommandBuffer', 'vkBindBufferMemory', + 'vkBindBufferMemory2', 'vkBindImageMemory', + 'vkBindImageMemory2', 'vkCmdBeginRenderPass', 'vkCmdCopyBuffer', 'vkCmdCopyBufferToImage', @@ -164,9 +154,12 @@ VULKAN_DEVICE_FUNCTIONS = [ 'vkFreeMemory', 'vkInvalidateMappedMemoryRanges', 'vkGetBufferMemoryRequirements', + 'vkGetBufferMemoryRequirements2', 'vkGetDeviceQueue', + 'vkGetDeviceQueue2', 'vkGetFenceStatus', 'vkGetImageMemoryRequirements', + 'vkGetImageMemoryRequirements2', 'vkMapMemory', 'vkQueueSubmit', 'vkQueueWaitIdle', @@ -178,14 +171,6 @@ VULKAN_DEVICE_FUNCTIONS = [ ] }, { - 'min_api_version': 'VK_API_VERSION_1_1', - 'functions': [ - 'vkGetDeviceQueue2', - 'vkGetBufferMemoryRequirements2', - 'vkGetImageMemoryRequirements2', - ] - }, - { 'ifdef': 'defined(OS_ANDROID)', 'extension': 'VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME', @@ -278,10 +263,11 @@ LICENSE_AND_HEADER = """\ """ -def WriteFunctionsInternal(file, functions, gen_content, check_extension=False): +def WriteFunctionsInternal(out_file, functions, gen_content, + check_extension=False): for group in functions: if 'ifdef' in group: - file.write('#if %s\n' % group['ifdef']) + out_file.write('#if %s\n' % group['ifdef']) extension = group['extension'] if 'extension' in group else '' min_api_version = \ @@ -289,53 +275,53 @@ def WriteFunctionsInternal(file, functions, gen_content, check_extension=False): if not check_extension: for func in group['functions']: - file.write(gen_content(func)) + out_file.write(gen_content(func)) elif not extension and not min_api_version: for func in group['functions']: - file.write(gen_content(func)) + out_file.write(gen_content(func)) else: if min_api_version: - file.write(' if (api_version >= %s) {\n' % min_api_version) + out_file.write(' if (api_version >= %s) {\n' % min_api_version) for func in group['functions']: - file.write( + out_file.write( gen_content(func)) - file.write('}\n') + out_file.write('}\n') if extension: - file.write('else ') + out_file.write('else ') if extension: - file.write('if (gfx::HasExtension(enabled_extensions, %s)) {\n' % + out_file.write('if (gfx::HasExtension(enabled_extensions, %s)) {\n' % extension) extension_suffix = \ group['extension_suffix'] if 'extension_suffix' in group \ else '' for func in group['functions']: - file.write(gen_content(func, extension_suffix)) + out_file.write(gen_content(func, extension_suffix)) - file.write('}\n') + out_file.write('}\n') if 'ifdef' in group: - file.write('#endif // %s\n' % group['ifdef']) - file.write('\n') + out_file.write('#endif // %s\n' % group['ifdef']) + out_file.write('\n') -def WriteFunctions(file, functions, template, check_extension=False): +def WriteFunctions(out_file, functions, template, check_extension=False): def gen_content(func, suffix=''): return template.substitute({'name': func,'extension_suffix': suffix}) - WriteFunctionsInternal(file, functions, gen_content, check_extension) + WriteFunctionsInternal(out_file, functions, gen_content, check_extension) -def WriteFunctionDeclarations(file, functions): - template = Template(' VulkanFunction<PFN_${name}> ${name}Fn;\n') - WriteFunctions(file, functions, template) +def WriteFunctionDeclarations(out_file, functions): + template = Template(' VulkanFunction<PFN_${name}> ${name};\n') + WriteFunctions(out_file, functions, template) -def WriteMacros(file, functions): +def WriteMacros(out_file, functions): def gen_content(func, suffix=''): if func not in registry.cmddict: # Some fuchsia functions are not in the vulkan registry, so use macro for # them. template = Template( - '#define $name gpu::GetVulkanFunctionPointers()->${name}Fn\n') + '#define $name gpu::GetVulkanFunctionPointers()->${name}\n') return template.substitute({'name': func, 'extension_suffix' : suffix}) none_str = lambda s: s if s else '' cmd = registry.cmddict[func].elem @@ -348,7 +334,7 @@ def WriteMacros(file, functions): pdecl += text + tail n = len(params) - callstat = 'return gpu::GetVulkanFunctionPointers()->%sFn(' % func + callstat = 'return gpu::GetVulkanFunctionPointers()->%s(' % func paramdecl = '(' if n > 0: paramnames = (''.join(t for t in p.itertext()) @@ -364,12 +350,12 @@ def WriteMacros(file, functions): pdecl += paramdecl return 'ALWAYS_INLINE %s { %s; }\n' % (pdecl, callstat) - WriteFunctionsInternal(file, functions, gen_content) + WriteFunctionsInternal(out_file, functions, gen_content) -def GenerateHeaderFile(file): +def GenerateHeaderFile(out_file): """Generates gpu/vulkan/vulkan_function_pointers.h""" - file.write(LICENSE_AND_HEADER + + out_file.write(LICENSE_AND_HEADER + """ #ifndef GPU_VULKAN_VULKAN_FUNCTION_POINTERS_H_ @@ -408,6 +394,8 @@ namespace gpu { struct VulkanFunctionPointers; +constexpr uint32_t kVulkanRequiredApiVersion = %s; + COMPONENT_EXPORT(VULKAN) VulkanFunctionPointers* GetVulkanFunctionPointers(); struct COMPONENT_EXPORT(VULKAN) VulkanFunctionPointers { @@ -437,12 +425,12 @@ struct COMPONENT_EXPORT(VULKAN) VulkanFunctionPointers { public: using Fn = R(VKAPI_PTR*)(Args...); - explicit operator bool() { + explicit operator bool() const { return !!fn_; } NO_SANITIZE("cfi-icall") - R operator()(Args... args) { + R operator()(Args... args) const { return fn_(args...); } @@ -460,28 +448,27 @@ struct COMPONENT_EXPORT(VULKAN) VulkanFunctionPointers { }; // Unassociated functions - VulkanFunction<PFN_vkEnumerateInstanceVersion> vkEnumerateInstanceVersionFn; - VulkanFunction<PFN_vkGetInstanceProcAddr> vkGetInstanceProcAddrFn; + VulkanFunction<PFN_vkGetInstanceProcAddr> vkGetInstanceProcAddr; -""") +""" % VULKAN_REQUIRED_API_VERSION) - WriteFunctionDeclarations(file, VULKAN_UNASSOCIATED_FUNCTIONS) + WriteFunctionDeclarations(out_file, VULKAN_UNASSOCIATED_FUNCTIONS) - file.write("""\ + out_file.write("""\ // Instance functions """) - WriteFunctionDeclarations(file, VULKAN_INSTANCE_FUNCTIONS); + WriteFunctionDeclarations(out_file, VULKAN_INSTANCE_FUNCTIONS); - file.write("""\ + out_file.write("""\ // Device functions """) - WriteFunctionDeclarations(file, VULKAN_DEVICE_FUNCTIONS) + WriteFunctionDeclarations(out_file, VULKAN_DEVICE_FUNCTIONS) - file.write("""\ + out_file.write("""\ }; } // namespace gpu @@ -489,33 +476,32 @@ struct COMPONENT_EXPORT(VULKAN) VulkanFunctionPointers { // Unassociated functions """) - WriteMacros(file, [{'functions': [ 'vkGetInstanceProcAddr' , - 'vkEnumerateInstanceVersion']}]) - WriteMacros(file, VULKAN_UNASSOCIATED_FUNCTIONS) + WriteMacros(out_file, [{'functions': [ 'vkGetInstanceProcAddr']}]) + WriteMacros(out_file, VULKAN_UNASSOCIATED_FUNCTIONS) - file.write("""\ + out_file.write("""\ // Instance functions """) - WriteMacros(file, VULKAN_INSTANCE_FUNCTIONS); + WriteMacros(out_file, VULKAN_INSTANCE_FUNCTIONS); - file.write("""\ + out_file.write("""\ // Device functions """) - WriteMacros(file, VULKAN_DEVICE_FUNCTIONS) + WriteMacros(out_file, VULKAN_DEVICE_FUNCTIONS) - file.write("""\ + out_file.write("""\ #endif // GPU_VULKAN_VULKAN_FUNCTION_POINTERS_H_""") -def WriteFunctionPointerInitialization(file, proc_addr_function, parent, +def WriteFunctionPointerInitialization(out_file, proc_addr_function, parent, functions): - template = Template(""" ${name}Fn = reinterpret_cast<PFN_${name}>( + template = Template(""" ${name} = reinterpret_cast<PFN_${name}>( ${get_proc_addr}(${parent}, "${name}${extension_suffix}")); - if (!${name}Fn) { + if (!${name}) { DLOG(WARNING) << "Failed to bind vulkan entrypoint: " << "${name}${extension_suffix}"; return false; @@ -529,24 +515,24 @@ def WriteFunctionPointerInitialization(file, proc_addr_function, parent, 'name': '${name}', 'extension_suffix': '${extension_suffix}', 'get_proc_addr': proc_addr_function, 'parent': parent})) - WriteFunctions(file, functions, template, check_extension=True) + WriteFunctions(out_file, functions, template, check_extension=True) -def WriteUnassociatedFunctionPointerInitialization(file, functions): - WriteFunctionPointerInitialization(file, 'vkGetInstanceProcAddr', 'nullptr', - functions) +def WriteUnassociatedFunctionPointerInitialization(out_file, functions): + WriteFunctionPointerInitialization(out_file, 'vkGetInstanceProcAddr', + 'nullptr', functions) -def WriteInstanceFunctionPointerInitialization(file, functions): - WriteFunctionPointerInitialization(file, 'vkGetInstanceProcAddr', +def WriteInstanceFunctionPointerInitialization(out_file, functions): + WriteFunctionPointerInitialization(out_file, 'vkGetInstanceProcAddr', 'vk_instance', functions) -def WriteDeviceFunctionPointerInitialization(file, functions): - WriteFunctionPointerInitialization(file, 'vkGetDeviceProcAddr', 'vk_device', - functions) +def WriteDeviceFunctionPointerInitialization(out_file, functions): + WriteFunctionPointerInitialization(out_file, 'vkGetDeviceProcAddr', + 'vk_device', functions) -def GenerateSourceFile(file): +def GenerateSourceFile(out_file): """Generates gpu/vulkan/vulkan_function_pointers.cc""" - file.write(LICENSE_AND_HEADER + + out_file.write(LICENSE_AND_HEADER + """ #include "gpu/vulkan/vulkan_function_pointers.h" @@ -568,23 +554,17 @@ bool VulkanFunctionPointers::BindUnassociatedFunctionPointers() { // vkGetInstanceProcAddr must be handled specially since it gets its function // pointer through base::GetFunctionPOinterFromNativeLibrary(). Other Vulkan // functions don't do this. - vkGetInstanceProcAddrFn = reinterpret_cast<PFN_vkGetInstanceProcAddr>( + vkGetInstanceProcAddr = reinterpret_cast<PFN_vkGetInstanceProcAddr>( base::GetFunctionPointerFromNativeLibrary(vulkan_loader_library, "vkGetInstanceProcAddr")); - if (!vkGetInstanceProcAddrFn) + if (!vkGetInstanceProcAddr) return false; - - vkEnumerateInstanceVersionFn = - reinterpret_cast<PFN_vkEnumerateInstanceVersion>( - vkGetInstanceProcAddr(nullptr, "vkEnumerateInstanceVersion")); - // vkEnumerateInstanceVersion didn't exist in Vulkan 1.0, so we should - // proceed even if we fail to get vkEnumerateInstanceVersion pointer. """) WriteUnassociatedFunctionPointerInitialization( - file, VULKAN_UNASSOCIATED_FUNCTIONS) + out_file, VULKAN_UNASSOCIATED_FUNCTIONS) - file.write("""\ + out_file.write("""\ return true; } @@ -593,11 +573,13 @@ bool VulkanFunctionPointers::BindInstanceFunctionPointers( VkInstance vk_instance, uint32_t api_version, const gfx::ExtensionSet& enabled_extensions) { + DCHECK_GE(api_version, kVulkanRequiredApiVersion); """) - WriteInstanceFunctionPointerInitialization(file, VULKAN_INSTANCE_FUNCTIONS); + WriteInstanceFunctionPointerInitialization( + out_file, VULKAN_INSTANCE_FUNCTIONS); - file.write("""\ + out_file.write("""\ return true; } @@ -606,11 +588,12 @@ bool VulkanFunctionPointers::BindDeviceFunctionPointers( VkDevice vk_device, uint32_t api_version, const gfx::ExtensionSet& enabled_extensions) { + DCHECK_GE(api_version, kVulkanRequiredApiVersion); // Device functions """) - WriteDeviceFunctionPointerInitialization(file, VULKAN_DEVICE_FUNCTIONS) + WriteDeviceFunctionPointerInitialization(out_file, VULKAN_DEVICE_FUNCTIONS) - file.write("""\ + out_file.write("""\ return true; } |