diff options
| author | Mark Lobodzinski <mark@lunarg.com> | 2015-07-03 15:58:09 -0600 |
|---|---|---|
| committer | Courtney Goeltzenleuchter <courtney@LunarG.com> | 2015-07-08 17:17:40 -0600 |
| commit | 19bf53be9621007568b90ea99b5aa828aa502b4f (patch) | |
| tree | 457cba4f45c5f9ae362dd5ee546fe4e15533986e /layers | |
| parent | dd6169d82d5bc0e1518687c8d0b1374911cf1f1c (diff) | |
| download | usermoji-19bf53be9621007568b90ea99b5aa828aa502b4f.tar.xz | |
vulkan.h: V136 -- Vulkan Sparse Resource Issues
Totally reworked sparse resources. This commit also incorporates the
changes for bug 14237.
Diffstat (limited to 'layers')
| -rw-r--r-- | layers/mem_tracker.cpp | 16 | ||||
| -rw-r--r-- | layers/object_track.h | 37 | ||||
| -rw-r--r-- | layers/param_checker.cpp | 52 |
3 files changed, 46 insertions, 59 deletions
diff --git a/layers/mem_tracker.cpp b/layers/mem_tracker.cpp index f873a822..e7a55000 100644 --- a/layers/mem_tracker.cpp +++ b/layers/mem_tracker.cpp @@ -1191,20 +1191,18 @@ VK_LAYER_EXPORT VkResult VKAPI vkBindObjectMemory( } VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory( - VkQueue queue, - VkBuffer buffer, - VkDeviceSize rangeOffset, - VkDeviceSize rangeSize, - VkDeviceMemory mem, - VkDeviceSize memOffset) + VkQueue queue, + VkBuffer buffer, + uint32_t numBindings, + const VkSparseMemoryBindInfo* pBindInfo) { VkResult result = get_dispatch_table(mem_tracker_device_table_map, queue)->QueueBindSparseBufferMemory( - queue, buffer, rangeOffset, rangeSize, mem, memOffset); + queue, buffer, numBindings, pBindInfo); loader_platform_thread_lock_mutex(&globalLock); // Track objects tied to memory - if (VK_FALSE == set_sparse_buffer_binding(buffer, mem)) { + if (VK_FALSE == set_sparse_buffer_binding(buffer, pBindInfo->mem)) { log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, VK_OBJECT_TYPE_BUFFER, buffer, 0, MEMTRACK_MEMORY_BINDING_ERROR, "MEM", - "Unable to set object %p binding to mem obj %p", (void*)buffer, (void*)mem); + "Unable to set object %p binding to mem obj %p", (void*)buffer, (void*)pBindInfo->mem); } print_object_list(queue); print_mem_list(queue); diff --git a/layers/object_track.h b/layers/object_track.h index 8dcffcf0..cc751872 100644 --- a/layers/object_track.h +++ b/layers/object_track.h @@ -688,38 +688,49 @@ explicit_GetObjectMemoryRequirements( VkResult explicit_QueueBindSparseBufferMemory( - VkQueue queue, - VkBuffer buffer, - VkDeviceSize rangeOffset, - VkDeviceSize rangeSize, - VkDeviceMemory mem, - VkDeviceSize memOffset) + VkQueue queue, + VkBuffer buffer, + uint32_t numBindings, + const VkSparseMemoryBindInfo* pBindInfo) { loader_platform_thread_lock_mutex(&objLock); validateQueueFlags(queue, "QueueBindSparseBufferMemory"); validate_object(queue, buffer); loader_platform_thread_unlock_mutex(&objLock); - VkResult result = get_dispatch_table(ObjectTracker_device_table_map, queue)->QueueBindSparseBufferMemory(queue, buffer, rangeOffset, rangeSize, mem, memOffset); + VkResult result = get_dispatch_table(ObjectTracker_device_table_map, queue)->QueueBindSparseBufferMemory(queue, buffer, numBindings, pBindInfo); return result; } VkResult explicit_QueueBindSparseImageMemory( - VkQueue queue, - VkImage image, - const VkImageMemoryBindInfo *pBindInfo, - VkDeviceMemory mem, - VkDeviceSize memOffset) + VkQueue queue, + VkImage image, + uint32_t numBindings, + const VkSparseImageMemoryBindInfo* pBindInfo) { loader_platform_thread_lock_mutex(&objLock); validateQueueFlags(queue, "QueueBindSparseImageMemory"); loader_platform_thread_unlock_mutex(&objLock); - VkResult result = get_dispatch_table(ObjectTracker_device_table_map, queue)->QueueBindSparseImageMemory(queue, image, pBindInfo, mem, memOffset); + VkResult result = get_dispatch_table(ObjectTracker_device_table_map, queue)->QueueBindSparseImageMemory(queue, image, numBindings, pBindInfo); return result; } +VkResult +explicit_QueueBindSparseImageOpaqueMemory( + VkQueue queue, + VkImage image, + uint32_t numBindings, + const VkSparseMemoryBindInfo* pBindInfo) +{ + loader_platform_thread_lock_mutex(&objLock); + validateQueueFlags(queue, "QueueBindSparseImageOpaqueMemory"); + loader_platform_thread_unlock_mutex(&objLock); + + VkResult result = get_dispatch_table(ObjectTracker_device_table_map, queue)->QueueBindSparseImageOpaqueMemory(queue, image, numBindings, pBindInfo); + return result; +} VkResult explicit_GetFenceStatus( diff --git a/layers/param_checker.cpp b/layers/param_checker.cpp index 8d53751e..1f55e38f 100644 --- a/layers/param_checker.cpp +++ b/layers/param_checker.cpp @@ -2888,10 +2888,8 @@ void PreQueueBindSparseBufferMemory( void PostQueueBindSparseBufferMemory( VkQueue queue, VkBuffer buffer, - VkDeviceSize rangeOffset, - VkDeviceSize rangeSize, - VkDeviceMemory mem, - VkDeviceSize memOffset, + uint32_t numBindings, + const VkSparseMemoryBindInfo* pBindInfo, VkResult result) { if(queue == nullptr) @@ -2908,16 +2906,6 @@ void PostQueueBindSparseBufferMemory( return; } - - - if(mem == nullptr) - { - log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", - "vkQueueBindSparseBufferMemory parameter, VkDeviceMemory mem, is null pointer"); - return; - } - - if(result != VK_SUCCESS) { std::string reason = "vkQueueBindSparseBufferMemory parameter, VkResult result, is " + EnumeratorString(result); @@ -2927,24 +2915,22 @@ void PostQueueBindSparseBufferMemory( } VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory( - VkQueue queue, - VkBuffer buffer, - VkDeviceSize rangeOffset, - VkDeviceSize rangeSize, - VkDeviceMemory mem, - VkDeviceSize memOffset) + VkQueue queue, + VkBuffer buffer, + uint32_t numBindings, + const VkSparseMemoryBindInfo* pBindInfo) { PreQueueBindSparseBufferMemory(queue); - VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseBufferMemory(queue, buffer, rangeOffset, rangeSize, mem, memOffset); + VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseBufferMemory(queue, buffer, numBindings, pBindInfo); - PostQueueBindSparseBufferMemory(queue, buffer, rangeOffset, rangeSize, mem, memOffset, result); + PostQueueBindSparseBufferMemory(queue, buffer, numBindings, pBindInfo, result); return result; } void PreQueueBindSparseImageMemory( VkQueue queue, - const VkImageMemoryBindInfo* pBindInfo) + const VkSparseImageMemoryBindInfo* pBindInfo) { if(queue == nullptr) { @@ -2959,13 +2945,6 @@ void PreQueueBindSparseImageMemory( "vkQueueBindSparseImageMemory parameter, const VkImageMemoryBindInfo* pBindInfo, is null pointer"); return; } - if(pBindInfo->subresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE || - pBindInfo->subresource.aspect > VK_IMAGE_ASPECT_END_RANGE) - { - log_msg(mdd(queue), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", - "vkQueueBindSparseImageMemory parameter, VkImageAspect pBindInfo->subresource.aspect, is unrecognized enumerator"); - return; - } } void PostQueueBindSparseImageMemory( @@ -3006,16 +2985,15 @@ void PostQueueBindSparseImageMemory( } VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory( - VkQueue queue, - VkImage image, - const VkImageMemoryBindInfo* pBindInfo, - VkDeviceMemory mem, - VkDeviceSize memOffset) + VkQueue queue, + VkImage image, + uint32_t numBindings, + const VkSparseImageMemoryBindInfo* pBindInfo) { PreQueueBindSparseImageMemory(queue, pBindInfo); - VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageMemory(queue, image, pBindInfo, mem, memOffset); + VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageMemory(queue, image, numBindings, pBindInfo); - PostQueueBindSparseImageMemory(queue, image, mem, memOffset, result); + PostQueueBindSparseImageMemory(queue, image, pBindInfo->mem, pBindInfo->memOffset, result); return result; } |
