counter<VkDebugReportCallbackEXT> c_VkDebugReportCallbackEXT;
counter<VkObjectTableNVX> c_VkObjectTableNVX;
counter<VkIndirectCommandsLayoutNVX> c_VkIndirectCommandsLayoutNVX;
+ counter<VkDisplayKHR> c_VkDisplayKHR;
+ counter<VkDisplayModeKHR> c_VkDisplayModeKHR;
+ counter<VkSurfaceKHR> c_VkSurfaceKHR;
+ counter<VkSwapchainKHR> c_VkSwapchainKHR;
#else // DISTINCT_NONDISPATCHABLE_HANDLES
counter<uint64_t> c_uint64_t;
#endif // DISTINCT_NONDISPATCHABLE_HANDLES
c_VkShaderModule("VkShaderModule", VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT),
c_VkDebugReportCallbackEXT("VkDebugReportCallbackEXT", VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT),
c_VkObjectTableNVX("VkObjectTableNVX", VK_DEBUG_REPORT_OBJECT_TYPE_OBJECT_TABLE_NVX_EXT),
- c_VkIndirectCommandsLayoutNVX("VkIndirectCommandsLayoutNVX", VK_DEBUG_REPORT_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX_EXT)
+ c_VkIndirectCommandsLayoutNVX("VkIndirectCommandsLayoutNVX", VK_DEBUG_REPORT_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX_EXT),
+ c_VkDisplayKHR("VkDisplayKHR", VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT),
+ c_VkDisplayModeKHR("VkDisplayModeKHR", VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT),
+ c_VkSurfaceKHR("VkSurfaceKHR", VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT),
+ c_VkSwapchainKHR("VkSwapchainKHR", VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT)
#else // DISTINCT_NONDISPATCHABLE_HANDLES
c_uint64_t("NON_DISPATCHABLE_HANDLE", VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT)
#endif // DISTINCT_NONDISPATCHABLE_HANDLES
WRAPPER(VkDebugReportCallbackEXT)
WRAPPER(VkObjectTableNVX)
WRAPPER(VkIndirectCommandsLayoutNVX)
+WRAPPER(VkDisplayKHR)
+WRAPPER(VkDisplayModeKHR)
+WRAPPER(VkSurfaceKHR)
+WRAPPER(VkSwapchainKHR)
#else // DISTINCT_NONDISPATCHABLE_HANDLES
WRAPPER(uint64_t)
#endif // DISTINCT_NONDISPATCHABLE_HANDLES
def paramIsPointer(self, param):
ispointer = False
for elem in param:
- #write('paramIsPointer '+elem.text, file=sys.stderr)
- #write('elem.tag '+elem.tag, file=sys.stderr)
- #if (elem.tail is None):
- # write('elem.tail is None', file=sys.stderr)
- #else:
- # write('elem.tail '+elem.tail, file=sys.stderr)
if ((elem.tag is not 'type') and (elem.tail is not None)) and '*' in elem.tail:
ispointer = True
- # write('is pointer', file=sys.stderr)
return ispointer
def makeThreadUseBlock(self, cmd, functionprefix):
"""Generate C function pointer typedef for <command> Element"""
paramdecl = ''
+ # TODO: We should generate these lists
thread_check_dispatchable_objects = [
"VkCommandBuffer",
"VkDevice",
"VkSampler",
"VkSemaphore",
"VkShaderModule",
+ "VkObjectTableNVX",
+ "VkIndirectCommandsLayoutNVX",
+ "VkDisplayKHR",
+ "VkDisplayModeKHR",
+ "VkSurfaceKHR",
+ "VkSwapchainKHR",
]
# Find and add any parameters that are thread unsafe
# externsync can list members to synchronize
for member in externsync.split(","):
member = str(member).replace("::", "->")
+ member = str(member).replace(".", "->")
paramdecl += ' ' + functionprefix + 'WriteObject(my_data, ' + member + ');\n'
else:
paramtype = param.find('type')
paramtype = 'None'
if paramtype in thread_check_dispatchable_objects or paramtype in thread_check_nondispatchable_objects:
if self.paramIsArray(param) and ('pPipelines' != paramname.text):
- paramdecl += ' for (uint32_t index=0;index<' + param.attrib.get('len') + ';index++) {\n'
+ # Add pointer dereference for array counts that are pointer values
+ dereference = ''
+ for candidate in params:
+ if param.attrib.get('len') == candidate.find('name').text:
+ if self.paramIsPointer(candidate):
+ dereference = '*'
+ paramdecl += ' for (uint32_t index = 0; index < ' + dereference + param.attrib.get('len') + '; index++) {\n'
paramdecl += ' ' + functionprefix + 'ReadObject(my_data, ' + paramname.text + '[index]);\n'
paramdecl += ' }\n'
elif not self.paramIsPointer(param):
self.appendSection('command', decls[0])
self.intercepts += [ ' {"%s", reinterpret_cast<PFN_vkVoidFunction>(%s)},' % (name,name[2:]) ]
return
- if ("KHR" in name) or ("KHX" in name):
- self.appendSection('command', '// TODO - not wrapping KHR function ' + name)
- return
- if ("NN" in name):
- self.appendSection('command', '// TODO - not wrapping NN function ' + name)
- return
- if ("DebugMarker" in name) and ("EXT" in name):
+ if "QueuePresentKHR" in name or ("DebugMarker" in name and "EXT" in name):
self.appendSection('command', '// TODO - not wrapping EXT function ' + name)
return
# Determine first if this function needs to be intercepted