From 8cf6756e49e60b7a10751e5b31e77daebf0ae13b Mon Sep 17 00:00:00 2001 From: Mike Stroyan Date: Mon, 11 May 2015 17:18:14 -0600 Subject: layers: rework Threading layer to match version 91 Handle multiple thread checked parameters. Thread-check parameters in some calls that start with a VkDevice parameter. Use more recent WSI name pattern. --- vk-layer-generate.py | 82 ++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 63 insertions(+), 19 deletions(-) diff --git a/vk-layer-generate.py b/vk-layer-generate.py index ab112232..369d63b1 100755 --- a/vk-layer-generate.py +++ b/vk-layer-generate.py @@ -1364,7 +1364,7 @@ class ThreadingSubcommand(Subcommand): header_txt.append(' if (objectsInUse.find(object) == objectsInUse.end()) {') header_txt.append(' objectsInUse[object] = tid;') header_txt.append(' } else {') - header_txt.append(' if (objectsInUse[object] == tid) {') + header_txt.append(' if (objectsInUse[object] != tid) {') header_txt.append(' char str[1024];') header_txt.append(' sprintf(str, "THREADING ERROR : object of type %s is simultaneously used in thread %ld and thread %ld", type, objectsInUse[object], tid);') header_txt.append(' layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, 0, 0, THREADING_CHECKER_MULTIPLE_THREADS, "THREADING", str);') @@ -1390,6 +1390,17 @@ class ThreadingSubcommand(Subcommand): # use default version return None decl = proto.c_func(prefix="vk", attr="VKAPI") + thread_check_objects = [ + "VkQueue", + "VkDeviceMemory", + "VkObject", + "VkBuffer", + "VkImage", + "VkDescriptorSet", + "VkDescriptorPool", + "VkCmdBuffer", + "VkSemaphore" + ] ret_val = '' stmt = '' funcs = [] @@ -1414,35 +1425,68 @@ class ThreadingSubcommand(Subcommand): ' return VK_SUCCESS;\n' ' }\n' '}' % (qual, decl, proto.params[0].name, self.layer_name, ret_val, proto.c_call(), stmt, self.layer_name)) + return "\n".join(funcs) + # Memory range calls are special in needed thread checking within structs + if proto.name in ["FlushMappedMemoryRanges","InvalidateMappedMemoryRanges"]: + funcs.append('%s%s\n' + '{\n' + ' for (int i=0; i