diff options
| author | Mark Lobodzinski <mark@lunarg.com> | 2017-07-19 12:37:04 -0600 |
|---|---|---|
| committer | Mark Lobodzinski <mark@lunarg.com> | 2017-07-24 10:21:38 -0600 |
| commit | 16f9f4e2df30154bc4abee5185e3469f87459e34 (patch) | |
| tree | 5be9ea3dc1472e30f4e013a423a2e4866ad82230 /layers | |
| parent | 00130684167baf30eba7a105df92831a8d91b14a (diff) | |
| download | usermoji-16f9f4e2df30154bc4abee5185e3469f87459e34.tar.xz | |
layers: Move CreateComputePipelines in OT
Moved to manually-generated, it has an odd corner case that's a one-
off and not worth code-generating.
Change-Id: I2631dd2107fffcd7e641b5a98bee126502d61ba8
Diffstat (limited to 'layers')
| -rw-r--r-- | layers/object_tracker.cpp | 44 | ||||
| -rw-r--r-- | layers/object_tracker.h | 3 | ||||
| -rw-r--r-- | layers/object_tracker_utils.cpp | 45 |
3 files changed, 48 insertions, 44 deletions
diff --git a/layers/object_tracker.cpp b/layers/object_tracker.cpp index d474ba5f..c23bb05f 100644 --- a/layers/object_tracker.cpp +++ b/layers/object_tracker.cpp @@ -2782,50 +2782,6 @@ VKAPI_ATTR VkResult VKAPI_CALL CreateGraphicsPipelines(VkDevice device, VkPipeli return result; } -VKAPI_ATTR VkResult VKAPI_CALL CreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, - const VkComputePipelineCreateInfo *pCreateInfos, - const VkAllocationCallbacks *pAllocator, VkPipeline *pPipelines) { - bool skip = VK_FALSE; - std::unique_lock<std::mutex> lock(global_lock); - skip |= ValidateObject(device, device, kVulkanObjectTypeDevice, false, VALIDATION_ERROR_1f205601, VALIDATION_ERROR_UNDEFINED); - if (pCreateInfos) { - for (uint32_t idx0 = 0; idx0 < createInfoCount; ++idx0) { - if (pCreateInfos[idx0].basePipelineHandle) { - skip |= ValidateObject(device, pCreateInfos[idx0].basePipelineHandle, kVulkanObjectTypePipeline, true, - VALIDATION_ERROR_03000572, VALIDATION_ERROR_03000009); - } - if (pCreateInfos[idx0].layout) { - skip |= ValidateObject(device, pCreateInfos[idx0].layout, kVulkanObjectTypePipelineLayout, false, - VALIDATION_ERROR_0300be01, VALIDATION_ERROR_03000009); - } - if (pCreateInfos[idx0].stage.module) { - skip |= ValidateObject(device, pCreateInfos[idx0].stage.module, kVulkanObjectTypeShaderModule, false, - VALIDATION_ERROR_1060d201, VALIDATION_ERROR_UNDEFINED); - } - } - } - if (pipelineCache) { - skip |= ValidateObject(device, pipelineCache, kVulkanObjectTypePipelineCache, true, VALIDATION_ERROR_1f228001, - VALIDATION_ERROR_1f228007); - } - lock.unlock(); - if (skip) { - for (uint32_t i = 0; i < createInfoCount; i++) { - pPipelines[i] = VK_NULL_HANDLE; - } - return VK_ERROR_VALIDATION_FAILED_EXT; - } - VkResult result = get_dispatch_table(ot_device_table_map, device) - ->CreateComputePipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines); - lock.lock(); - for (uint32_t idx1 = 0; idx1 < createInfoCount; ++idx1) { - if (pPipelines[idx1] != VK_NULL_HANDLE) { - CreateObject(device, pPipelines[idx1], kVulkanObjectTypePipeline, pAllocator); - } - } - lock.unlock(); - return result; -} // VK_KHR_display Extension VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceDisplayPropertiesKHR(VkPhysicalDevice physicalDevice, uint32_t *pPropertyCount, diff --git a/layers/object_tracker.h b/layers/object_tracker.h index 249d3f98..b19ee615 100644 --- a/layers/object_tracker.h +++ b/layers/object_tracker.h @@ -207,6 +207,9 @@ VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetDeviceProcAddr(VkDevice device, cons VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetInstanceProcAddr(VkInstance instance, const char *funcName); VKAPI_ATTR void VKAPI_CALL DestroyDebugReportCallbackEXT(VkInstance instance, VkDebugReportCallbackEXT msgCallback, const VkAllocationCallbacks *pAllocator); +VKAPI_ATTR VkResult VKAPI_CALL CreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, + const VkComputePipelineCreateInfo *pCreateInfos, + const VkAllocationCallbacks *pAllocator, VkPipeline *pPipelines); template <typename T1, typename T2> bool ValidateObject(T1 dispatchable_object, T2 object, VulkanObjectType object_type, bool null_allowed, diff --git a/layers/object_tracker_utils.cpp b/layers/object_tracker_utils.cpp index 82184fef..298c089e 100644 --- a/layers/object_tracker_utils.cpp +++ b/layers/object_tracker_utils.cpp @@ -400,6 +400,51 @@ VKAPI_ATTR void VKAPI_CALL UpdateDescriptorSets(VkDevice device, uint32_t descri ->UpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies); } +VKAPI_ATTR VkResult VKAPI_CALL CreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, + const VkComputePipelineCreateInfo *pCreateInfos, + const VkAllocationCallbacks *pAllocator, VkPipeline *pPipelines) { + bool skip = VK_FALSE; + std::unique_lock<std::mutex> lock(global_lock); + skip |= ValidateObject(device, device, kVulkanObjectTypeDevice, false, VALIDATION_ERROR_1f205601, VALIDATION_ERROR_UNDEFINED); + if (pCreateInfos) { + for (uint32_t idx0 = 0; idx0 < createInfoCount; ++idx0) { + if (pCreateInfos[idx0].basePipelineHandle) { + skip |= ValidateObject(device, pCreateInfos[idx0].basePipelineHandle, kVulkanObjectTypePipeline, true, + VALIDATION_ERROR_03000572, VALIDATION_ERROR_03000009); + } + if (pCreateInfos[idx0].layout) { + skip |= ValidateObject(device, pCreateInfos[idx0].layout, kVulkanObjectTypePipelineLayout, false, + VALIDATION_ERROR_0300be01, VALIDATION_ERROR_03000009); + } + if (pCreateInfos[idx0].stage.module) { + skip |= ValidateObject(device, pCreateInfos[idx0].stage.module, kVulkanObjectTypeShaderModule, false, + VALIDATION_ERROR_1060d201, VALIDATION_ERROR_UNDEFINED); + } + } + } + if (pipelineCache) { + skip |= ValidateObject(device, pipelineCache, kVulkanObjectTypePipelineCache, true, VALIDATION_ERROR_1f228001, + VALIDATION_ERROR_1f228007); + } + lock.unlock(); + if (skip) { + for (uint32_t i = 0; i < createInfoCount; i++) { + pPipelines[i] = VK_NULL_HANDLE; + } + return VK_ERROR_VALIDATION_FAILED_EXT; + } + VkResult result = get_dispatch_table(ot_device_table_map, device) + ->CreateComputePipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines); + lock.lock(); + for (uint32_t idx1 = 0; idx1 < createInfoCount; ++idx1) { + if (pPipelines[idx1] != VK_NULL_HANDLE) { + CreateObject(device, pPipelines[idx1], kVulkanObjectTypePipeline, pAllocator); + } + } + lock.unlock(); + return result; +} + VKAPI_ATTR VkResult VKAPI_CALL ResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags) { bool skip = false; |
