[Mesa-dev] [PATCH 2/2] anv/entrypoints: VkGetDeviceProcAddr returns NULL for core instance commands

Iago Toral Quiroga itoral at igalia.com
Mon Mar 12 08:40:27 UTC 2018


af5f2322d0c64 addressed this for extension commands, but the spec mandates
this behavior also for core API commands. From the Vulkan spec,
Table 2. vkGetDeviceProcAddr behavior:

device     pname                            return
----------------------------------------------------------
(..)
device     core device-level command        fp
(...)

See that it specifically states "device-level".

Since the vk.xml file doesn't state if core commands are instance or
device level, we identify device level commands as the ones that take a
VkDevice, VkQueue or VkCommandBuffer as their first parameter.

Fixes test failures in new work-in-progress CTS tests.

Also see the public issue:
https://github.com/KhronosGroup/Vulkan-LoaderAndValidationLayers/issues/2323

v2:
  - Include reference to github issue (Emil)
  - Rebased on top of Vulkan 1.1 changes.

Reviewed-by: Emil Velikov <emil.velikov at collabora.com> (v1)
---

Emil, I had to rebase the patch on top of Jason's 1.1 changes. He had already
accounted for device dispatches in that work, so now I just build on top of
that now. With that, I am not sure whether the comment you were asking for makes
sense in this patch any more (I think it should have gone in Jason's, when he
added is_device_entrypoint()). I you want a comment for that I can send
another patch to include it, or maybe ammend the first patch in this series to
include that. However, do notice that the comment you were referring to has
been removed from the spec, since now it is clearly stated that only
core device-level commands return non-NULL pointers, so I think my preference
would be to not add ny comments.

Also, this version won't do for 18.0, but I guess we can still use the
previous version for that if you want to put it in.

 src/intel/vulkan/anv_entrypoints_gen.py | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/src/intel/vulkan/anv_entrypoints_gen.py b/src/intel/vulkan/anv_entrypoints_gen.py
index 2dddd7f1aa..8e0d036469 100644
--- a/src/intel/vulkan/anv_entrypoints_gen.py
+++ b/src/intel/vulkan/anv_entrypoints_gen.py
@@ -274,7 +274,11 @@ anv_entrypoint_is_enabled(int index, uint32_t core_version,
    case ${e.num}:
       /* ${e.name} */
    % if e.core_version:
-      return ${e.core_version.c_vk_version()} <= core_version;
+      % if not e.is_device_entrypoint():
+         return !device && ${e.core_version.c_vk_version()} <= core_version;
+      % else:
+         return ${e.core_version.c_vk_version()} <= core_version;
+      % endif
    % elif e.extensions:
      % for ext in e.extensions:
        % if ext.type == 'instance':
-- 
2.14.1



More information about the mesa-dev mailing list