diff options
author | 2016-04-13 15:01:00 +0800 | |
---|---|---|
committer | 2016-04-14 08:43:04 +0800 | |
commit | cbe07ef239121dc99a31a19b9593d76d76abb08b (patch) | |
tree | 5d029198e2b436fe883d3b441cdec3721f26a410 | |
parent | a0a4e0ee2c4e4c2b186c180ba0970931e24c1d66 (diff) |
vulkan: pass hal_extensions to InitDriverTable
We only need hal_extensions to initialize the driver tables. There is no
need to save it in driver::{Instance,Device}Data.
Change-Id: I56ebc0ee9c5bc5e543e7a84412b03b842bd8ced5
-rw-r--r-- | vulkan/libvulkan/code-generator.tmpl | 15 | ||||
-rw-r--r-- | vulkan/libvulkan/driver.cpp | 8 | ||||
-rw-r--r-- | vulkan/libvulkan/driver.h | 4 | ||||
-rw-r--r-- | vulkan/libvulkan/driver_gen.cpp | 16 | ||||
-rw-r--r-- | vulkan/libvulkan/driver_gen.h | 9 |
5 files changed, 31 insertions, 21 deletions
diff --git a/vulkan/libvulkan/code-generator.tmpl b/vulkan/libvulkan/code-generator.tmpl index 7517e91a2e..ad1693a095 100644 --- a/vulkan/libvulkan/code-generator.tmpl +++ b/vulkan/libvulkan/code-generator.tmpl @@ -163,6 +163,7 @@ bool InitDispatchTable(VkDevice dev, PFN_vkGetDeviceProcAddr get_proc) { #ifndef LIBVULKAN_DRIVER_GEN_H #define LIBVULKAN_DRIVER_GEN_H ¶ +#include <bitset> #include <vulkan/vulkan.h> #include <vulkan/vk_android_native_buffer.h> ¶ @@ -194,8 +195,10 @@ struct DeviceDriverTable { const ProcHook* GetProcHook(const char* name); ProcHook::Extension GetProcHookExtension(const char* name); ¶ -bool InitDriverTable(VkInstance instance, PFN_vkGetInstanceProcAddr get_proc); -bool InitDriverTable(VkDevice dev, PFN_vkGetDeviceProcAddr get_proc); +bool InitDriverTable(VkInstance instance, PFN_vkGetInstanceProcAddr get_proc, + const std::bitset<ProcHook::EXTENSION_COUNT> &extensions); +bool InitDriverTable(VkDevice dev, PFN_vkGetDeviceProcAddr get_proc, + const std::bitset<ProcHook::EXTENSION_COUNT> &extensions); ¶ »} // namespace driver »} // namespace vulkan @@ -273,7 +276,8 @@ ProcHook::Extension GetProcHookExtension(const char* name) { ¶ {{Macro "driver.C++.DefineInitProcExtMacro"}} ¶ -bool InitDriverTable(VkInstance instance, PFN_vkGetInstanceProcAddr get_proc) +bool InitDriverTable(VkInstance instance, PFN_vkGetInstanceProcAddr get_proc, + const std::bitset<ProcHook::EXTENSION_COUNT> &extensions) { auto& data = GetData(instance); bool success = true; @@ -289,7 +293,8 @@ bool InitDriverTable(VkInstance instance, PFN_vkGetInstanceProcAddr get_proc) return success; } ¶ -bool InitDriverTable(VkDevice dev, PFN_vkGetDeviceProcAddr get_proc) +bool InitDriverTable(VkDevice dev, PFN_vkGetDeviceProcAddr get_proc, + const std::bitset<ProcHook::EXTENSION_COUNT> &extensions) { auto& data = GetData(dev); bool success = true; @@ -699,7 +704,7 @@ VK_KHR_swapchain */}} {{define "driver.C++.DefineInitProcExtMacro"}} #define INIT_PROC_EXT(ext, obj, proc) do { \ - if (data.hal_extensions[ProcHook::ext]) \ + if (extensions[ProcHook::ext]) \ INIT_PROC(obj, proc); \ } while(0) {{end}} diff --git a/vulkan/libvulkan/driver.cpp b/vulkan/libvulkan/driver.cpp index c5ea20b9b1..1f1b14448b 100644 --- a/vulkan/libvulkan/driver.cpp +++ b/vulkan/libvulkan/driver.cpp @@ -616,7 +616,6 @@ VkResult CreateInstance(const VkInstanceCreateInfo* pCreateInfo, return VK_ERROR_OUT_OF_HOST_MEMORY; data->hook_extensions |= wrapper.GetHookExtensions(); - data->hal_extensions |= wrapper.GetHalExtensions(); // call into the driver VkInstance instance; @@ -630,7 +629,8 @@ VkResult CreateInstance(const VkInstanceCreateInfo* pCreateInfo, // initialize InstanceDriverTable if (!SetData(instance, *data) || - !InitDriverTable(instance, g_hwdevice->GetInstanceProcAddr)) { + !InitDriverTable(instance, g_hwdevice->GetInstanceProcAddr, + wrapper.GetHalExtensions())) { data->driver.DestroyInstance = reinterpret_cast<PFN_vkDestroyInstance>( g_hwdevice->GetInstanceProcAddr(instance, "vkDestroyInstance")); if (data->driver.DestroyInstance) @@ -687,7 +687,6 @@ VkResult CreateDevice(VkPhysicalDevice physicalDevice, return VK_ERROR_OUT_OF_HOST_MEMORY; data->hook_extensions |= wrapper.GetHookExtensions(); - data->hal_extensions |= wrapper.GetHalExtensions(); // call into the driver VkDevice dev; @@ -701,7 +700,8 @@ VkResult CreateDevice(VkPhysicalDevice physicalDevice, // initialize DeviceDriverTable if (!SetData(dev, *data) || - !InitDriverTable(dev, instance_data.get_device_proc_addr)) { + !InitDriverTable(dev, instance_data.get_device_proc_addr, + wrapper.GetHalExtensions())) { data->driver.DestroyDevice = reinterpret_cast<PFN_vkDestroyDevice>( instance_data.get_device_proc_addr(dev, "vkDestroyDevice")); if (data->driver.DestroyDevice) diff --git a/vulkan/libvulkan/driver.h b/vulkan/libvulkan/driver.h index 55437923d5..85b36b6bfb 100644 --- a/vulkan/libvulkan/driver.h +++ b/vulkan/libvulkan/driver.h @@ -74,7 +74,6 @@ struct InstanceData { driver(), get_device_proc_addr(nullptr) { hook_extensions.set(ProcHook::EXTENSION_CORE); - hal_extensions.set(ProcHook::EXTENSION_CORE); } api::InstanceData opaque_api_data; @@ -82,7 +81,6 @@ struct InstanceData { const VkAllocationCallbacks allocator; std::bitset<ProcHook::EXTENSION_COUNT> hook_extensions; - std::bitset<ProcHook::EXTENSION_COUNT> hal_extensions; InstanceDriverTable driver; PFN_vkGetDeviceProcAddr get_device_proc_addr; @@ -94,7 +92,6 @@ struct DeviceData { DeviceData(const VkAllocationCallbacks& alloc) : opaque_api_data(), allocator(alloc), driver() { hook_extensions.set(ProcHook::EXTENSION_CORE); - hal_extensions.set(ProcHook::EXTENSION_CORE); } api::DeviceData opaque_api_data; @@ -102,7 +99,6 @@ struct DeviceData { const VkAllocationCallbacks allocator; std::bitset<ProcHook::EXTENSION_COUNT> hook_extensions; - std::bitset<ProcHook::EXTENSION_COUNT> hal_extensions; DeviceDriverTable driver; }; diff --git a/vulkan/libvulkan/driver_gen.cpp b/vulkan/libvulkan/driver_gen.cpp index 8b816bac96..59f3200a27 100644 --- a/vulkan/libvulkan/driver_gen.cpp +++ b/vulkan/libvulkan/driver_gen.cpp @@ -381,13 +381,15 @@ ProcHook::Extension GetProcHookExtension(const char* name) { } \ } while (0) -#define INIT_PROC_EXT(ext, obj, proc) \ - do { \ - if (data.hal_extensions[ProcHook::ext]) \ - INIT_PROC(obj, proc); \ +#define INIT_PROC_EXT(ext, obj, proc) \ + do { \ + if (extensions[ProcHook::ext]) \ + INIT_PROC(obj, proc); \ } while (0) -bool InitDriverTable(VkInstance instance, PFN_vkGetInstanceProcAddr get_proc) { +bool InitDriverTable(VkInstance instance, + PFN_vkGetInstanceProcAddr get_proc, + const std::bitset<ProcHook::EXTENSION_COUNT>& extensions) { auto& data = GetData(instance); bool success = true; @@ -406,7 +408,9 @@ bool InitDriverTable(VkInstance instance, PFN_vkGetInstanceProcAddr get_proc) { return success; } -bool InitDriverTable(VkDevice dev, PFN_vkGetDeviceProcAddr get_proc) { +bool InitDriverTable(VkDevice dev, + PFN_vkGetDeviceProcAddr get_proc, + const std::bitset<ProcHook::EXTENSION_COUNT>& extensions) { auto& data = GetData(dev); bool success = true; diff --git a/vulkan/libvulkan/driver_gen.h b/vulkan/libvulkan/driver_gen.h index 1eb7d79096..1984302099 100644 --- a/vulkan/libvulkan/driver_gen.h +++ b/vulkan/libvulkan/driver_gen.h @@ -19,6 +19,7 @@ #ifndef LIBVULKAN_DRIVER_GEN_H #define LIBVULKAN_DRIVER_GEN_H +#include <bitset> #include <vulkan/vulkan.h> #include <vulkan/vk_android_native_buffer.h> @@ -83,8 +84,12 @@ struct DeviceDriverTable { const ProcHook* GetProcHook(const char* name); ProcHook::Extension GetProcHookExtension(const char* name); -bool InitDriverTable(VkInstance instance, PFN_vkGetInstanceProcAddr get_proc); -bool InitDriverTable(VkDevice dev, PFN_vkGetDeviceProcAddr get_proc); +bool InitDriverTable(VkInstance instance, + PFN_vkGetInstanceProcAddr get_proc, + const std::bitset<ProcHook::EXTENSION_COUNT>& extensions); +bool InitDriverTable(VkDevice dev, + PFN_vkGetDeviceProcAddr get_proc, + const std::bitset<ProcHook::EXTENSION_COUNT>& extensions); } // namespace driver } // namespace vulkan |