Mesa (master): anv: Move the physical device dispatch table to anv_instance
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Mon Jan 20 22:25:53 UTC 2020
Module: Mesa
Branch: master
Commit: 02044be23f179959872158dbf2a470ed49df774c
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=02044be23f179959872158dbf2a470ed49df774c
Author: Jason Ekstrand <jason at jlekstrand.net>
Date: Fri Jan 17 23:17:48 2020 -0600
anv: Move the physical device dispatch table to anv_instance
We don't actually have genX versions of any physical device level
commands so we don't need the trampoline versions and we don't need to
have a separate table per physical device.
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3461>
---
src/intel/vulkan/anv_device.c | 11 ++++---
src/intel/vulkan/anv_entrypoints_gen.py | 51 ++++++++++++---------------------
src/intel/vulkan/anv_private.h | 2 +-
3 files changed, 24 insertions(+), 40 deletions(-)
diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c
index 880d8d9844c..6d7c7ad3c97 100644
--- a/src/intel/vulkan/anv_device.c
+++ b/src/intel/vulkan/anv_device.c
@@ -709,16 +709,15 @@ VkResult anv_CreateInstance(
}
}
- struct anv_physical_device *pdevice = &instance->physicalDevice;
- for (unsigned i = 0; i < ARRAY_SIZE(pdevice->dispatch.entrypoints); i++) {
+ for (unsigned i = 0; i < ARRAY_SIZE(instance->physical_device_dispatch.entrypoints); i++) {
/* Vulkan requires that entrypoints for extensions which have not been
* enabled must not be advertised.
*/
if (!anv_physical_device_entrypoint_is_enabled(i, instance->app_info.api_version,
&instance->enabled_extensions)) {
- pdevice->dispatch.entrypoints[i] = NULL;
+ instance->physical_device_dispatch.entrypoints[i] = NULL;
} else {
- pdevice->dispatch.entrypoints[i] =
+ instance->physical_device_dispatch.entrypoints[i] =
anv_physical_device_dispatch_table.entrypoints[i];
}
}
@@ -2214,7 +2213,7 @@ PFN_vkVoidFunction anv_GetInstanceProcAddr(
idx = anv_get_physical_device_entrypoint_index(pName);
if (idx >= 0)
- return instance->physicalDevice.dispatch.entrypoints[idx];
+ return instance->physical_device_dispatch.entrypoints[idx];
idx = anv_get_device_entrypoint_index(pName);
if (idx >= 0)
@@ -2276,7 +2275,7 @@ PFN_vkVoidFunction vk_icdGetPhysicalDeviceProcAddr(
if (idx < 0)
return NULL;
- return instance->physicalDevice.dispatch.entrypoints[idx];
+ return instance->physical_device_dispatch.entrypoints[idx];
}
diff --git a/src/intel/vulkan/anv_entrypoints_gen.py b/src/intel/vulkan/anv_entrypoints_gen.py
index 6b90786577d..b524897a0f6 100644
--- a/src/intel/vulkan/anv_entrypoints_gen.py
+++ b/src/intel/vulkan/anv_entrypoints_gen.py
@@ -302,45 +302,30 @@ const struct anv_instance_dispatch_table anv_instance_dispatch_table = {
% endfor
};
-% for layer in LAYERS:
- % for e in physical_device_entrypoints:
- % if e.alias:
- <% continue %>
- % endif
- % if e.guard is not None:
+% for e in physical_device_entrypoints:
+ % if e.alias and e.alias.enabled:
+ <% continue %>
+ % endif
+ % if e.guard is not None:
#ifdef ${e.guard}
- % endif
- % if layer == 'anv':
- ${e.return_type} __attribute__ ((weak))
- ${e.prefixed_name('anv')}(${e.decl_params()})
- {
- % if e.params[0].type == 'VkPhysicalDevice':
- ANV_FROM_HANDLE(anv_physical_device, anv_physical_device, ${e.params[0].name});
- return anv_physical_device->dispatch.${e.name}(${e.call_params()});
- % else:
- assert(!"Unhandled device child trampoline case: ${e.params[0].type}");
- % endif
- }
- % else:
- ${e.return_type} ${e.prefixed_name(layer)}(${e.decl_params()}) __attribute__ ((weak));
- % endif
- % if e.guard is not None:
+ % endif
+ ${e.return_type} ${e.prefixed_name('anv')}(${e.decl_params()}) __attribute__ ((weak));
+ % if e.guard is not None:
#endif // ${e.guard}
- % endif
- % endfor
+ % endif
+% endfor
- const struct anv_physical_device_dispatch_table ${layer}_physical_device_dispatch_table = {
- % for e in physical_device_entrypoints:
- % if e.guard is not None:
+const struct anv_physical_device_dispatch_table anv_physical_device_dispatch_table = {
+% for e in physical_device_entrypoints:
+ % if e.guard is not None:
#ifdef ${e.guard}
- % endif
- .${e.name} = ${e.prefixed_name(layer)},
- % if e.guard is not None:
+ % endif
+ .${e.name} = ${e.prefixed_name('anv')},
+ % if e.guard is not None:
#endif // ${e.guard}
- % endif
- % endfor
- };
+ % endif
% endfor
+};
% for layer in LAYERS:
diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h
index afc1b14953e..838f27dc45f 100644
--- a/src/intel/vulkan/anv_private.h
+++ b/src/intel/vulkan/anv_private.h
@@ -1014,7 +1014,6 @@ struct anv_physical_device {
bool always_flush_cache;
struct anv_device_extension_table supported_extensions;
- struct anv_physical_device_dispatch_table dispatch;
uint32_t eu_total;
uint32_t subslice_total;
@@ -1055,6 +1054,7 @@ struct anv_instance {
struct anv_instance_extension_table enabled_extensions;
struct anv_instance_dispatch_table dispatch;
+ struct anv_physical_device_dispatch_table physical_device_dispatch;
struct anv_device_dispatch_table device_dispatch;
int physicalDeviceCount;
More information about the mesa-commit
mailing list