summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Chia-I Wu <olv@google.com> 2016-04-13 15:01:00 +0800
committer Chia-I Wu <olv@google.com> 2016-04-14 08:43:04 +0800
commitcbe07ef239121dc99a31a19b9593d76d76abb08b (patch)
tree5d029198e2b436fe883d3b441cdec3721f26a410
parenta0a4e0ee2c4e4c2b186c180ba0970931e24c1d66 (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.tmpl15
-rw-r--r--vulkan/libvulkan/driver.cpp8
-rw-r--r--vulkan/libvulkan/driver.h4
-rw-r--r--vulkan/libvulkan/driver_gen.cpp16
-rw-r--r--vulkan/libvulkan/driver_gen.h9
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