diff options
| author | Chia-I Wu <olv@google.com> | 2016-05-16 12:27:03 +0800 |
|---|---|---|
| committer | Tobin Ehlis <tobine@google.com> | 2016-05-24 06:29:13 -0600 |
| commit | fe38080414008c680ea05d1affd34b34d426670f (patch) | |
| tree | b582cf815046c39d718dda2f7935c3ef55896b73 | |
| parent | e3a00781d1d512dbc36c71086a8e61eed386c587 (diff) | |
| download | usermoji-fe38080414008c680ea05d1affd34b34d426670f.tar.xz | |
vk-layer-generate.py: add intercept_core_*_command
Replace layer_intercept_instance_proc with
intercept_core_instance_command, which returns all intercepted core
instance commands.
Replace layer_intercept_device_proc with intercept_core_device_command,
which returns all intercepted core device commands.
The only user visible difference should be that vkGetDeviceProcAddr now
returns NULL for instance commands.
| -rwxr-xr-x | vk-layer-generate.py | 69 |
1 files changed, 21 insertions, 48 deletions
diff --git a/vk-layer-generate.py b/vk-layer-generate.py index 4e39c561..19eb535f 100755 --- a/vk-layer-generate.py +++ b/vk-layer-generate.py @@ -428,8 +428,9 @@ class Subcommand(object): funcs = [] intercepted = [] for proto in self.protos: - if proto.name == "GetDeviceProcAddr" or proto.name == "GetInstanceProcAddr": - continue + if proto.name in ["GetDeviceProcAddr", + "GetInstanceProcAddr"]: + intercepted.append(proto) else: intercept = self.generate_intercept(proto, qual) if intercept is None: @@ -455,45 +456,35 @@ class Subcommand(object): intercepted.append(proto) prefix="vk" - lookups = [] + instance_lookups = [] + device_lookups = [] for proto in intercepted: - lookups.append("if (!strcmp(name, \"%s\"))" % proto.name) - lookups.append(" return (PFN_vkVoidFunction) %s%s;" % - (prefix, proto.name)) + if proto_is_global(proto): + instance_lookups.append("if (!strcmp(name, \"%s\"))" % proto.name) + instance_lookups.append(" return (PFN_vkVoidFunction) %s%s;" % (prefix, proto.name)) + else: + device_lookups.append("if (!strcmp(name, \"%s\"))" % proto.name) + device_lookups.append(" return (PFN_vkVoidFunction) %s%s;" % (prefix, proto.name)) - # add customized layer_intercept_proc + # add customized intercept_core_device_command body = [] body.append('%s' % self.lineinfo.get()) - body.append("static inline PFN_vkVoidFunction layer_intercept_proc(const char *name)") + body.append("static inline PFN_vkVoidFunction intercept_core_device_command(const char *name)") body.append("{") body.append(generate_get_proc_addr_check("name")) body.append("") body.append(" name += 2;") - body.append(" %s" % "\n ".join(lookups)) + body.append(" %s" % "\n ".join(device_lookups)) body.append("") body.append(" return NULL;") body.append("}") - # add layer_intercept_instance_proc - lookups = [] - for proto in self.protos: - if not proto_is_global(proto): - continue - - if not proto in intercepted: - continue - if proto.name == "CreateInstance": - continue - if proto.name == "CreateDevice": - continue - lookups.append("if (!strcmp(name, \"%s\"))" % proto.name) - lookups.append(" return (PFN_vkVoidFunction) %s%s;" % (prefix, proto.name)) - - body.append("static inline PFN_vkVoidFunction layer_intercept_instance_proc(const char *name)") + # add intercept_core_instance_command + body.append("static inline PFN_vkVoidFunction intercept_core_instance_command(const char *name)") body.append("{") body.append(generate_get_proc_addr_check("name")) body.append("") body.append(" name += 2;") - body.append(" %s" % "\n ".join(lookups)) + body.append(" %s" % "\n ".join(instance_lookups)) body.append("") body.append(" return NULL;") body.append("}") @@ -518,10 +509,7 @@ class Subcommand(object): func_body.append("VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(VkDevice device, const char* funcName)\n" "{\n" " PFN_vkVoidFunction addr;\n" - " if (!strcmp(\"vkGetDeviceProcAddr\", funcName)) {\n" - " return (PFN_vkVoidFunction) vkGetDeviceProcAddr;\n" - " }\n\n" - " addr = layer_intercept_proc(funcName);\n" + " addr = intercept_core_device_command(funcName);\n" " if (addr)\n" " return addr;\n" " if (device == VK_NULL_HANDLE) {\n" @@ -547,13 +535,7 @@ class Subcommand(object): func_body.append("VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(VkInstance instance, const char* funcName)\n" "{\n" " PFN_vkVoidFunction addr;\n" - " if (!strcmp(funcName, \"vkGetInstanceProcAddr\"))\n" - " return (PFN_vkVoidFunction) vkGetInstanceProcAddr;\n" - " if (!strcmp(funcName, \"vkCreateInstance\"))\n" - " return (PFN_vkVoidFunction) vkCreateInstance;\n" - " if (!strcmp(funcName, \"vkCreateDevice\"))\n" - " return (PFN_vkVoidFunction) vkCreateDevice;\n" - " addr = layer_intercept_instance_proc(funcName);\n" + " addr = intercept_core_instance_command(funcName);\n" " if (addr) {\n" " return addr;" " }\n" @@ -603,10 +585,7 @@ class Subcommand(object): " PFN_vkVoidFunction addr;\n") func_body.append("\n" " loader_platform_thread_once(&initOnce, init%s);\n\n" - " if (!strcmp(\"vkGetDeviceProcAddr\", funcName)) {\n" - " return (PFN_vkVoidFunction) vkGetDeviceProcAddr;\n" - " }\n\n" - " addr = layer_intercept_proc(funcName);\n" + " addr = intercept_core_device_command(funcName);\n" " if (addr)\n" " return addr;" % self.layer_name) func_body.append(" if (device == VK_NULL_HANDLE) {\n" @@ -637,16 +616,10 @@ class Subcommand(object): func_body.append("VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(VkInstance instance, const char* funcName)\n" "{\n" " PFN_vkVoidFunction addr;\n" - " if (!strcmp(funcName, \"vkGetInstanceProcAddr\"))\n" - " return (PFN_vkVoidFunction) vkGetInstanceProcAddr;\n" - " if (!strcmp(funcName, \"vkCreateInstance\"))\n" - " return (PFN_vkVoidFunction) vkCreateInstance;\n" - " if (!strcmp(funcName, \"vkCreateDevice\"))\n" - " return (PFN_vkVoidFunction) vkCreateDevice;\n" ) func_body.append( " loader_platform_thread_once(&initOnce, init%s);\n\n" - " addr = layer_intercept_instance_proc(funcName);\n" + " addr = intercept_core_instance_command(funcName);\n" " if (addr)\n" " return addr;" % self.layer_name) func_body.append(" if (instance == VK_NULL_HANDLE) {\n" |
