Commit 65d4258f authored by Chris Blume's avatar Chris Blume Committed by Commit Bot

Refactor Vulkan's generate_bindings.py

The existing generate_bindings.py has some duplicate code.

This patch will refactor it to reduce duplication.

BUG=856360

Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux_optional_gpu_tests_rel;luci.chromium.try:mac_optional_gpu_tests_rel;luci.chromium.try:win_optional_gpu_tests_rel
Change-Id: I9776b291f9d984f252c3223d15e755a41156827a
Reviewed-on: https://chromium-review.googlesource.com/1116184
Commit-Queue: Chris Blume <cblume@chromium.org>
Reviewed-by: default avatarAntoine Labour <piman@chromium.org>
Cr-Commit-Position: refs/heads/master@{#570948}
parent 0e45f802
...@@ -9,6 +9,7 @@ import optparse ...@@ -9,6 +9,7 @@ import optparse
import os import os
import platform import platform
import sys import sys
from string import Template
from subprocess import call from subprocess import call
VULKAN_UNASSOCIATED_FUNCTIONS = [ VULKAN_UNASSOCIATED_FUNCTIONS = [
...@@ -109,6 +110,11 @@ LICENSE_AND_HEADER = """\ ...@@ -109,6 +110,11 @@ LICENSE_AND_HEADER = """\
""" """
def WriteFunctionDeclarations(file, functions):
template = Template(' PFN_$name $name = nullptr;\n')
for func in functions:
file.write(template.substitute(func));
def GenerateHeaderFile(file, unassociated_functions, instance_functions, def GenerateHeaderFile(file, unassociated_functions, instance_functions,
physical_device_functions, device_functions, physical_device_functions, device_functions,
queue_functions, command_buffer_functions, queue_functions, command_buffer_functions,
...@@ -152,16 +158,14 @@ struct VulkanFunctionPointers { ...@@ -152,16 +158,14 @@ struct VulkanFunctionPointers {
PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr = nullptr; PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr = nullptr;
""") """)
for func in unassociated_functions: WriteFunctionDeclarations(file, unassociated_functions)
file.write(' PFN_' + func['name'] + ' ' + func['name'] + ' = nullptr;\n')
file.write("""\ file.write("""\
// Instance functions // Instance functions
""") """)
for func in instance_functions: WriteFunctionDeclarations(file, instance_functions)
file.write(' PFN_' + func['name'] + ' ' + func['name'] + ' = nullptr;\n')
file.write("""\ file.write("""\
PFN_vkDestroySurfaceKHR vkDestroySurfaceKHR = nullptr; PFN_vkDestroySurfaceKHR vkDestroySurfaceKHR = nullptr;
...@@ -169,8 +173,7 @@ struct VulkanFunctionPointers { ...@@ -169,8 +173,7 @@ struct VulkanFunctionPointers {
// Physical Device functions // Physical Device functions
""") """)
for func in physical_device_functions: WriteFunctionDeclarations(file, physical_device_functions)
file.write(' PFN_' + func['name'] + ' ' + func['name'] + ' = nullptr;\n')
file.write("""\ file.write("""\
PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR
...@@ -183,32 +186,28 @@ struct VulkanFunctionPointers { ...@@ -183,32 +186,28 @@ struct VulkanFunctionPointers {
// Device functions // Device functions
""") """)
for func in device_functions: WriteFunctionDeclarations(file, device_functions)
file.write(' PFN_' + func['name'] + ' ' + func['name'] + ' = nullptr;\n')
file.write("""\ file.write("""\
// Queue functions // Queue functions
""") """)
for func in queue_functions: WriteFunctionDeclarations(file, queue_functions)
file.write(' PFN_' + func['name'] + ' ' + func['name'] + ' = nullptr;\n')
file.write("""\ file.write("""\
// Command Buffer functions // Command Buffer functions
""") """)
for func in command_buffer_functions: WriteFunctionDeclarations(file, command_buffer_functions)
file.write(' PFN_' + func['name'] + ' ' + func['name'] + ' = nullptr;\n')
file.write("""\ file.write("""\
// Swapchain functions // Swapchain functions
""") """)
for func in swapchain_functions: WriteFunctionDeclarations(file, swapchain_functions)
file.write(' PFN_' + func['name'] + ' ' + func['name'] + ' = nullptr;\n')
file.write("""\ file.write("""\
}; };
...@@ -218,6 +217,31 @@ struct VulkanFunctionPointers { ...@@ -218,6 +217,31 @@ struct VulkanFunctionPointers {
#endif // GPU_VULKAN_VULKAN_FUNCTION_POINTERS_H_ #endif // GPU_VULKAN_VULKAN_FUNCTION_POINTERS_H_
""") """)
def WriteFunctionPointerInitialization(file, proc_addr_function, parent,
functions):
template = Template(""" $name = reinterpret_cast<PFN_$name>(
$get_proc_addr($parent, "$name"));
if (!$name)
return false;
""")
for func in functions:
file.write(template.substitute(name=func['name'], get_proc_addr =
proc_addr_function, parent=parent))
def WriteUnassociatedFunctionPointerInitialization(file, functions):
WriteFunctionPointerInitialization(file, 'vkGetInstanceProcAddr', 'nullptr',
functions)
def WriteInstanceFunctionPointerInitialization(file, functions):
WriteFunctionPointerInitialization(file, 'vkGetInstanceProcAddr',
'vk_instance', functions)
def WriteDeviceFunctionPointerInitialization(file, functions):
WriteFunctionPointerInitialization(file, 'vkGetDeviceProcAddr', 'vk_device',
functions)
def GenerateSourceFile(file, unassociated_functions, instance_functions, def GenerateSourceFile(file, unassociated_functions, instance_functions,
physical_device_functions, device_functions, physical_device_functions, device_functions,
queue_functions, command_buffer_functions, queue_functions, command_buffer_functions,
...@@ -253,11 +277,7 @@ bool VulkanFunctionPointers::BindUnassociatedFunctionPointers() { ...@@ -253,11 +277,7 @@ bool VulkanFunctionPointers::BindUnassociatedFunctionPointers() {
""") """)
for func in unassociated_functions: WriteUnassociatedFunctionPointerInitialization(file, unassociated_functions)
file.write(' ' + func['name'] + ' = reinterpret_cast<PFN_' + func['name']
+ '>(vkGetInstanceProcAddr(nullptr, "' + func['name'] + '"));\n')
file.write(' if (!' + func['name'] + ')\n')
file.write(' return false;\n\n')
file.write("""\ file.write("""\
...@@ -268,11 +288,7 @@ bool VulkanFunctionPointers::BindInstanceFunctionPointers( ...@@ -268,11 +288,7 @@ bool VulkanFunctionPointers::BindInstanceFunctionPointers(
VkInstance vk_instance) { VkInstance vk_instance) {
""") """)
for func in instance_functions: WriteInstanceFunctionPointerInitialization(file, instance_functions)
file.write(' ' + func['name'] + ' = reinterpret_cast<PFN_' + func['name']
+ '>(vkGetInstanceProcAddr(vk_instance, "' + func['name'] + '"));\n')
file.write(' if (!' + func['name'] + ')\n')
file.write(' return false;\n\n')
file.write("""\ file.write("""\
...@@ -283,11 +299,7 @@ bool VulkanFunctionPointers::BindPhysicalDeviceFunctionPointers( ...@@ -283,11 +299,7 @@ bool VulkanFunctionPointers::BindPhysicalDeviceFunctionPointers(
VkInstance vk_instance) { VkInstance vk_instance) {
""") """)
for func in physical_device_functions: WriteInstanceFunctionPointerInitialization(file, physical_device_functions)
file.write(' ' + func['name'] + ' = reinterpret_cast<PFN_' + func['name']
+ '>(vkGetInstanceProcAddr(vk_instance, "' + func['name'] + '"));\n')
file.write(' if (!' + func['name'] + ')\n')
file.write(' return false;\n\n')
file.write("""\ file.write("""\
...@@ -297,31 +309,19 @@ bool VulkanFunctionPointers::BindPhysicalDeviceFunctionPointers( ...@@ -297,31 +309,19 @@ bool VulkanFunctionPointers::BindPhysicalDeviceFunctionPointers(
bool VulkanFunctionPointers::BindDeviceFunctionPointers(VkDevice vk_device) { bool VulkanFunctionPointers::BindDeviceFunctionPointers(VkDevice vk_device) {
// Device functions // Device functions
""") """)
for func in device_functions: WriteDeviceFunctionPointerInitialization(file, device_functions)
file.write(' ' + func['name'] + ' = reinterpret_cast<PFN_' + func['name'] +
'>(vkGetDeviceProcAddr(vk_device, "' + func['name'] + '"));\n')
file.write(' if (!' + func['name'] + ')\n')
file.write(' return false;\n\n')
file.write("""\ file.write("""\
// Queue functions // Queue functions
""") """)
for func in queue_functions: WriteDeviceFunctionPointerInitialization(file, queue_functions)
file.write(' ' + func['name'] + ' = reinterpret_cast<PFN_' + func['name'] +
'>(vkGetDeviceProcAddr(vk_device, "' + func['name'] + '"));\n')
file.write(' if (!' + func['name'] + ')\n')
file.write(' return false;\n\n')
file.write("""\ file.write("""\
// Command Buffer functions // Command Buffer functions
""") """)
for func in command_buffer_functions: WriteDeviceFunctionPointerInitialization(file, command_buffer_functions)
file.write(' ' + func['name'] + ' = reinterpret_cast<PFN_' + func['name'] +
'>(vkGetDeviceProcAddr(vk_device, "' + func['name'] + '"));\n')
file.write(' if (!' + func['name'] + ')\n')
file.write(' return false;\n\n')
file.write("""\ file.write("""\
...@@ -332,11 +332,7 @@ bool VulkanFunctionPointers::BindDeviceFunctionPointers(VkDevice vk_device) { ...@@ -332,11 +332,7 @@ bool VulkanFunctionPointers::BindDeviceFunctionPointers(VkDevice vk_device) {
bool VulkanFunctionPointers::BindSwapchainFunctionPointers(VkDevice vk_device) { bool VulkanFunctionPointers::BindSwapchainFunctionPointers(VkDevice vk_device) {
""") """)
for func in swapchain_functions: WriteDeviceFunctionPointerInitialization(file, swapchain_functions)
file.write(' ' + func['name'] + ' = reinterpret_cast<PFN_' + func['name'] +
'>(vkGetDeviceProcAddr(vk_device, "' + func['name'] + '"));\n')
file.write(' if (!' + func['name'] + ')\n')
file.write(' return false;\n\n')
file.write("""\ file.write("""\
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment