diff options
| author | James Jones <jajones@nvidia.com> | 2017-02-28 17:26:09 -0800 |
|---|---|---|
| committer | Mark Young <marky@lunarg.com> | 2017-03-01 16:14:21 -0700 |
| commit | 11cf4ae8a7d98c74d79eab9cb6c21ef62ed0f447 (patch) | |
| tree | 2689a9fe2187b2f848b1aa7dfe875100b6fdd8e7 | |
| parent | 3782bbd1fb33565647639a17a54b413ccf2e09a7 (diff) | |
| download | usermoji-11cf4ae8a7d98c74d79eab9cb6c21ef62ed0f447.tar.xz | |
loader: Fix handling of surface parameters
The loader code generation scripts had a bug that
caused all the surface->ICD surface translation C
code to be placed inside a block that only ran if
the ICD didn't support the extension function,
making it effectively a no-op. ICDs that
supported the extension were instead called with
the un-translated surface handle, which could
cause a crash if they were expecting their local
surface handle.
Also, speculatively fix up return handling in this
same class of functions by handling the void
return type.
| -rw-r--r-- | scripts/loader_extension_generator.py | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/scripts/loader_extension_generator.py b/scripts/loader_extension_generator.py index 105073d1..1d2d984c 100644 --- a/scripts/loader_extension_generator.py +++ b/scripts/loader_extension_generator.py @@ -1090,13 +1090,14 @@ class LoaderExtensionOutputGenerator(OutputGenerator): funcs += ' "ICD associated with VkPhysicalDevice does not support ' funcs += base_name funcs += '");\n' + funcs += ' }\n' if has_surface == 1: - funcs += ' VkIcdSurface *icd_surface = (VkIcdSurface *)(surface);\n' - funcs += ' uint8_t icd_index = phys_dev_term->icd_index;\n' - funcs += ' if (NULL != icd_surface->real_icd_surfaces) {\n' - funcs += ' if (NULL != (void *)icd_surface->real_icd_surfaces[icd_index]) {\n' - funcs += ' return icd_term->dispatch.' + funcs += ' VkIcdSurface *icd_surface = (VkIcdSurface *)(surface);\n' + funcs += ' uint8_t icd_index = phys_dev_term->icd_index;\n' + funcs += ' if (NULL != icd_surface->real_icd_surfaces) {\n' + funcs += ' if (NULL != (void *)icd_surface->real_icd_surfaces[icd_index]) {\n' + funcs += ' ' + return_prefix + 'icd_term->dispatch.' funcs += base_name funcs += '(' count = 0 @@ -1113,10 +1114,10 @@ class LoaderExtensionOutputGenerator(OutputGenerator): count += 1 funcs += ');\n' - funcs += ' }\n' + if not has_return_type: + funcs += ' return;\n' funcs += ' }\n' - - funcs += ' }\n' + funcs += ' }\n' funcs += return_prefix funcs += 'icd_term->dispatch.' @@ -1160,7 +1161,7 @@ class LoaderExtensionOutputGenerator(OutputGenerator): funcs += ' return;\n' funcs += ' }\n' funcs += ' }\n' - funcs += ' %sicd_term->dispatch.%s(' % (return_prefix, base_name) + funcs += ' %sicd_term->dispatch.%s(' % (return_prefix, base_name) count = 0 for param in ext_cmd.params: if count != 0: @@ -1168,7 +1169,7 @@ class LoaderExtensionOutputGenerator(OutputGenerator): funcs += param.name count += 1 funcs += ');\n' - funcs += ' }\n' + funcs += ' }\n' if has_return_type: funcs += ' return VK_SUCCESS;\n' |
