diff options
| author | Cody Northrop <cody@lunarg.com> | 2015-07-09 18:08:05 -0600 |
|---|---|---|
| committer | Courtney Goeltzenleuchter <courtney@LunarG.com> | 2015-07-17 10:05:20 -0600 |
| commit | e91de3b255afc4a84b5bd7a6815278646beee60d (patch) | |
| tree | 1e64e33616e2a78f4e35aaa22828220e41e8e58a | |
| parent | 860c33b07f995910cf266993a126f67ec641aab1 (diff) | |
| download | usermoji-e91de3b255afc4a84b5bd7a6815278646beee60d.tar.xz | |
icd: Support for command pools
| -rw-r--r-- | icd/nulldrv/nulldrv.c | 29 | ||||
| -rw-r--r-- | include/vk_debug_report_lunarg.h | 5 | ||||
| -rw-r--r-- | include/vk_layer.h | 3 | ||||
| -rw-r--r-- | include/vulkan.h | 51 | ||||
| -rw-r--r-- | layers/draw_state.cpp | 10 | ||||
| -rw-r--r-- | layers/draw_state.h | 2 | ||||
| -rw-r--r-- | layers/mem_tracker.cpp | 5 | ||||
| -rw-r--r-- | loader/gpa_helper.h | 6 | ||||
| -rw-r--r-- | loader/loader.c | 2 | ||||
| -rw-r--r-- | loader/table_ops.h | 9 | ||||
| -rw-r--r-- | loader/trampoline.c | 31 | ||||
| -rwxr-xr-x | vulkan.py | 19 |
12 files changed, 153 insertions, 19 deletions
diff --git a/icd/nulldrv/nulldrv.c b/icd/nulldrv/nulldrv.c index e4c2313d..e2d36c08 100644 --- a/icd/nulldrv/nulldrv.c +++ b/icd/nulldrv/nulldrv.c @@ -711,6 +711,32 @@ ICD_EXPORT VkResult VKAPI vkDestroyBuffer( return VK_SUCCESS; } +ICD_EXPORT VkResult VKAPI vkCreateCommandPool( + VkDevice device, + const VkCmdPoolCreateInfo* pCreateInfo, + VkCmdPool* pCmdPool) +{ + NULLDRV_LOG_FUNC; + return VK_SUCCESS; +} + +ICD_EXPORT VkResult VKAPI vkDestroyCommandPool( + VkDevice device, + VkCmdPool cmdPool) +{ + NULLDRV_LOG_FUNC; + return VK_SUCCESS; +} + +ICD_EXPORT VkResult VKAPI vkResetCommandPool( + VkDevice device, + VkCmdPool cmdPool, + VkCmdPoolResetFlags flags) +{ + NULLDRV_LOG_FUNC; + return VK_SUCCESS; +} + ICD_EXPORT VkResult VKAPI vkCreateCommandBuffer( VkDevice device, const VkCmdBufferCreateInfo* pCreateInfo, @@ -747,7 +773,8 @@ ICD_EXPORT VkResult VKAPI vkEndCommandBuffer( } ICD_EXPORT VkResult VKAPI vkResetCommandBuffer( - VkCmdBuffer cmdBuffer) + VkCmdBuffer cmdBuffer, + VkCmdBufferResetFlags flags) { NULLDRV_LOG_FUNC; return VK_SUCCESS; diff --git a/include/vk_debug_report_lunarg.h b/include/vk_debug_report_lunarg.h index 89dd02e6..eef78364 100644 --- a/include/vk_debug_report_lunarg.h +++ b/include/vk_debug_report_lunarg.h @@ -78,9 +78,10 @@ typedef enum { VK_OBJECT_TYPE_RENDER_PASS = 29, VK_OBJECT_TYPE_PIPELINE_CACHE = 30, VK_OBJECT_TYPE_SWAP_CHAIN_WSI = 31, + VK_OBJECT_TYPE_CMD_POOL = 32, VK_OBJECT_TYPE_BEGIN_RANGE = VK_OBJECT_TYPE_INSTANCE, - VK_OBJECT_TYPE_END_RANGE = VK_OBJECT_TYPE_SWAP_CHAIN_WSI, - VK_OBJECT_TYPE_NUM = (VK_OBJECT_TYPE_SWAP_CHAIN_WSI - VK_OBJECT_TYPE_INSTANCE + 1), + VK_OBJECT_TYPE_END_RANGE = VK_OBJECT_TYPE_CMD_POOL, + VK_OBJECT_TYPE_NUM = (VK_OBJECT_TYPE_CMD_POOL - VK_OBJECT_TYPE_INSTANCE + 1), VK_OBJECT_TYPE_MAX_ENUM = 0x7FFFFFFF } VkDbgObjectType; diff --git a/include/vk_layer.h b/include/vk_layer.h index 6d1945bf..25c30e22 100644 --- a/include/vk_layer.h +++ b/include/vk_layer.h @@ -110,6 +110,9 @@ typedef struct VkLayerDispatchTable_ PFN_vkDestroyDynamicColorBlendState DestroyDynamicColorBlendState; PFN_vkCreateDynamicDepthStencilState CreateDynamicDepthStencilState; PFN_vkDestroyDynamicDepthStencilState DestroyDynamicDepthStencilState; + PFN_vkCreateCommandPool CreateCommandPool; + PFN_vkDestroyCommandPool DestroyCommandPool; + PFN_vkResetCommandPool ResetCommandPool; PFN_vkCreateCommandBuffer CreateCommandBuffer; PFN_vkDestroyCommandBuffer DestroyCommandBuffer; PFN_vkBeginCommandBuffer BeginCommandBuffer; diff --git a/include/vulkan.h b/include/vulkan.h index 62049412..bd8de375 100644 --- a/include/vulkan.h +++ b/include/vulkan.h @@ -106,6 +106,7 @@ VK_DEFINE_NONDISP_HANDLE(VkDynamicColorBlendState) VK_DEFINE_NONDISP_HANDLE(VkDynamicDepthStencilState) VK_DEFINE_NONDISP_HANDLE(VkRenderPass) VK_DEFINE_NONDISP_HANDLE(VkFramebuffer) +VK_DEFINE_NONDISP_HANDLE(VkCmdPool) #define VK_MAX_PHYSICAL_DEVICE_NAME 256 #define VK_MAX_EXTENSION_NAME 256 @@ -793,8 +794,9 @@ typedef enum VkStructureType_ VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION = 48, VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY = 49, VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO = 50, + VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO = 51, - VK_ENUM_RANGE(STRUCTURE_TYPE, APPLICATION_INFO, RENDER_PASS_BEGIN_INFO) + VK_ENUM_RANGE(STRUCTURE_TYPE, APPLICATION_INFO, CMD_POOL_CREATE_INFO) } VkStructureType; // ------------------------------------------------------------------------------------------------ @@ -906,6 +908,17 @@ typedef enum VkMemoryInputFlagBits_ VK_MEMORY_INPUT_TRANSFER_BIT = VK_BIT(9), // Controls input coherency of transfer operations } VkMemoryInputFlagBits; +typedef enum { + VK_CMD_POOL_CREATE_TRANSIENT_BIT = 0x00000001, + VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT = 0x00000002, +} VkCmdPoolCreateFlagBits; +typedef VkFlags VkCmdPoolCreateFlags; + +typedef enum { + VK_CMD_POOL_RESET_RELEASE_RESOURCES = 0x00000001, +} VkCmdPoolResetFlagBits; +typedef VkFlags VkCmdPoolResetFlags; + // Buffer usage flags typedef VkFlags VkBufferUsageFlags; typedef enum VkBufferUsageFlagBits_ @@ -1120,6 +1133,11 @@ typedef enum VkCmdBufferOptimizeFlagBits_ VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT = 0x00000010, } VkCmdBufferOptimizeFlagBits; +typedef enum { + VK_CMD_BUFFER_RESET_RELEASE_RESOURCES = 0x00000001, +} VkCmdBufferResetFlagBits; +typedef VkFlags VkCmdBufferResetFlags; + // Pipeline statistics flags typedef VkFlags VkQueryPipelineStatisticFlags; typedef enum VkQueryPipelineStatisticFlagBits_ { @@ -2066,11 +2084,18 @@ typedef struct VkDynamicDepthStencilStateCreateInfo_ uint32_t stencilBackRef; } VkDynamicDepthStencilStateCreateInfo; +typedef struct { + VkStructureType sType; + const void* pNext; + uint32_t queueFamilyIndex; + VkCmdPoolCreateFlags flags; +} VkCmdPoolCreateInfo; + typedef struct VkCmdBufferCreateInfo_ { VkStructureType sType; // Must be VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO const void* pNext; // Pointer to next structure - uint32_t queueNodeIndex; + VkCmdPool cmdPool; VkCmdBufferLevel level; VkCmdBufferCreateFlags flags; // Command buffer creation flags } VkCmdBufferCreateInfo; @@ -2357,11 +2382,14 @@ typedef VkResult (VKAPI *PFN_vkCreateDynamicColorBlendState)(VkDevice device, co typedef VkResult (VKAPI *PFN_vkDestroyDynamicColorBlendState)(VkDevice device, VkDynamicColorBlendState dynamicColorBlendState); typedef VkResult (VKAPI *PFN_vkCreateDynamicDepthStencilState)(VkDevice device, const VkDynamicDepthStencilStateCreateInfo* pCreateInfo, VkDynamicDepthStencilState* pState); typedef VkResult (VKAPI *PFN_vkDestroyDynamicDepthStencilState)(VkDevice device, VkDynamicDepthStencilState dynamicDepthStencilState); +typedef VkResult (VKAPI *PFN_vkCreateCommandPool)(VkDevice device, const VkCmdPoolCreateInfo* pCreateInfo, VkCmdPool* pCmdPool); +typedef VkResult (VKAPI *PFN_vkDestroyCommandPool)(VkDevice device, VkCmdPool cmdPool); +typedef VkResult (VKAPI *PFN_vkResetCommandPool)(VkDevice device, VkCmdPool cmdPool, VkCmdPoolResetFlags flags); typedef VkResult (VKAPI *PFN_vkCreateCommandBuffer)(VkDevice device, const VkCmdBufferCreateInfo* pCreateInfo, VkCmdBuffer* pCmdBuffer); typedef VkResult (VKAPI *PFN_vkDestroyCommandBuffer)(VkDevice device, VkCmdBuffer commandBuffer); typedef VkResult (VKAPI *PFN_vkBeginCommandBuffer)(VkCmdBuffer cmdBuffer, const VkCmdBufferBeginInfo* pBeginInfo); typedef VkResult (VKAPI *PFN_vkEndCommandBuffer)(VkCmdBuffer cmdBuffer); -typedef VkResult (VKAPI *PFN_vkResetCommandBuffer)(VkCmdBuffer cmdBuffer); +typedef VkResult (VKAPI *PFN_vkResetCommandBuffer)(VkCmdBuffer cmdBuffer, VkCmdBufferResetFlags flags); typedef void (VKAPI *PFN_vkCmdBindPipeline)(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline); typedef void (VKAPI *PFN_vkCmdBindDynamicViewportState)(VkCmdBuffer cmdBuffer, VkDynamicViewportState dynamicViewportState); typedef void (VKAPI *PFN_vkCmdBindDynamicRasterState)(VkCmdBuffer cmdBuffer, VkDynamicRasterState dynamicRasterState); @@ -2933,6 +2961,20 @@ VkResult VKAPI vkDestroyDynamicDepthStencilState( // Command buffer functions +VkResult VKAPI vkCreateCommandPool( + VkDevice device, + const VkCmdPoolCreateInfo* pCreateInfo, + VkCmdPool* pCmdPool); + +VkResult VKAPI vkDestroyCommandPool( + VkDevice device, + VkCmdPool cmdPool); + +VkResult VKAPI vkResetCommandPool( + VkDevice device, + VkCmdPool cmdPool, + VkCmdPoolResetFlags flags); + VkResult VKAPI vkCreateCommandBuffer( VkDevice device, const VkCmdBufferCreateInfo* pCreateInfo, @@ -2950,7 +2992,8 @@ VkResult VKAPI vkEndCommandBuffer( VkCmdBuffer cmdBuffer); VkResult VKAPI vkResetCommandBuffer( - VkCmdBuffer cmdBuffer); + VkCmdBuffer cmdBuffer, + VkCmdBufferResetFlags flags); // Command buffer building functions diff --git a/layers/draw_state.cpp b/layers/draw_state.cpp index 0ce4e6ae..4738426a 100644 --- a/layers/draw_state.cpp +++ b/layers/draw_state.cpp @@ -1116,11 +1116,11 @@ static void resetCB(const VkCmdBuffer cb) pCB->pCmds.clear(); // Reset CB state VkFlags saveFlags = pCB->flags; - uint32_t saveQueueNodeIndex = pCB->queueNodeIndex; + VkCmdPool savedPool = pCB->pool; memset(pCB, 0, sizeof(GLOBAL_CB_NODE)); pCB->cmdBuffer = cb; pCB->flags = saveFlags; - pCB->queueNodeIndex = saveQueueNodeIndex; + pCB->pool = savedPool; pCB->lastVtxBinding = MAX_BINDING; } } @@ -1987,7 +1987,7 @@ VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandBuffer(VkDevice device, const VkCm memset(pCB, 0, sizeof(GLOBAL_CB_NODE)); pCB->cmdBuffer = *pCmdBuffer; pCB->flags = pCreateInfo->flags; - pCB->queueNodeIndex = pCreateInfo->queueNodeIndex; + pCB->pool = pCreateInfo->cmdPool; pCB->lastVtxBinding = MAX_BINDING; cmdBufferMap[*pCmdBuffer] = pCB; loader_platform_thread_unlock_mutex(&globalLock); @@ -2036,9 +2036,9 @@ VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer(VkCmdBuffer cmdBuffer) return result; } -VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(VkCmdBuffer cmdBuffer) +VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(VkCmdBuffer cmdBuffer, VkCmdBufferResetFlags flags) { - VkResult result = get_dispatch_table(draw_state_device_table_map, cmdBuffer)->ResetCommandBuffer(cmdBuffer); + VkResult result = get_dispatch_table(draw_state_device_table_map, cmdBuffer)->ResetCommandBuffer(cmdBuffer, flags); if (VK_SUCCESS == result) { resetCB(cmdBuffer); updateCBTracking(cmdBuffer); diff --git a/layers/draw_state.h b/layers/draw_state.h index e4fbec3a..5491e488 100644 --- a/layers/draw_state.h +++ b/layers/draw_state.h @@ -234,7 +234,7 @@ typedef enum _CBStatusFlagBits // Cmd Buffer Wrapper Struct typedef struct _GLOBAL_CB_NODE { VkCmdBuffer cmdBuffer; - uint32_t queueNodeIndex; + VkCmdPool pool; VkFlags flags; VkFence fence; // fence tracking this cmd buffer uint64_t numCmds; // number of cmds in this CB diff --git a/layers/mem_tracker.cpp b/layers/mem_tracker.cpp index fd279505..80a86a29 100644 --- a/layers/mem_tracker.cpp +++ b/layers/mem_tracker.cpp @@ -2325,7 +2325,8 @@ VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer( } VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer( - VkCmdBuffer cmdBuffer) + VkCmdBuffer cmdBuffer, + VkCmdBufferResetFlags flags) { loader_platform_thread_lock_mutex(&globalLock); // Verify that CB is complete (not in-flight) @@ -2338,7 +2339,7 @@ VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer( // Clear memory references as this point. clear_cmd_buf_and_mem_references(cmdBuffer); loader_platform_thread_unlock_mutex(&globalLock); - VkResult result = get_dispatch_table(mem_tracker_device_table_map, cmdBuffer)->ResetCommandBuffer(cmdBuffer); + VkResult result = get_dispatch_table(mem_tracker_device_table_map, cmdBuffer)->ResetCommandBuffer(cmdBuffer, flags); return result; } // TODO : For any vkCmdBind* calls that include an object which has mem bound to it, diff --git a/loader/gpa_helper.h b/loader/gpa_helper.h index a6d88085..08d3b60d 100644 --- a/loader/gpa_helper.h +++ b/loader/gpa_helper.h @@ -227,6 +227,12 @@ static inline void* globalGetProcAddr(const char *name) return (void*) vkCreateDynamicDepthStencilState; if (!strcmp(name, "DestroyDynamicDepthStencilState")) return (void*) vkDestroyDynamicDepthStencilState; + if (!strcmp(name, "CreateCommandPool")) + return (void*) vkCreateCommandPool; + if (!strcmp(name, "DestroyCommandPool")) + return (void*) vkDestroyCommandPool; + if (!strcmp(name, "ResetCommandPool")) + return (void*) vkResetCommandPool; if (!strcmp(name, "CreateCommandBuffer")) return (void*) vkCreateCommandBuffer; if (!strcmp(name, "DestroyCommandBuffer")) diff --git a/loader/loader.c b/loader/loader.c index 20ff816c..75701cf2 100644 --- a/loader/loader.c +++ b/loader/loader.c @@ -2331,7 +2331,7 @@ VkResult loader_validate_instance_extensions( VkResult loader_validate_device_extensions( struct loader_icd *icd, - u_int32_t gpu_index, + uint32_t gpu_index, const VkDeviceCreateInfo *pCreateInfo) { struct loader_extension_property *extension_prop; diff --git a/loader/table_ops.h b/loader/table_ops.h index 601be425..9bcd1296 100644 --- a/loader/table_ops.h +++ b/loader/table_ops.h @@ -118,6 +118,9 @@ static inline void loader_init_device_dispatch_table(VkLayerDispatchTable *table table->DestroyDynamicColorBlendState = (PFN_vkDestroyDynamicColorBlendState) gpa(dev, "vkDestroyDynamicColorBlendState"); table->CreateDynamicDepthStencilState = (PFN_vkCreateDynamicDepthStencilState) gpa(dev, "vkCreateDynamicDepthStencilState"); table->DestroyDynamicDepthStencilState = (PFN_vkDestroyDynamicDepthStencilState) gpa(dev, "vkDestroyDynamicDepthStencilState"); + table->CreateCommandPool = (PFN_vkCreateCommandPool) gpa(dev, "vkCreateCommandPool"); + table->DestroyCommandPool = (PFN_vkDestroyCommandPool) gpa(dev, "vkDestroyCommandPool"); + table->ResetCommandPool = (PFN_vkResetCommandPool) gpa(dev, "vkResetCommandPool"); table->CreateCommandBuffer = (PFN_vkCreateCommandBuffer) gpa(dev, "vkCreateCommandBuffer"); table->DestroyCommandBuffer = (PFN_vkDestroyCommandBuffer) gpa(dev, "vkDestroyCommandBuffer"); table->BeginCommandBuffer = (PFN_vkBeginCommandBuffer) gpa(dev, "vkBeginCommandBuffer"); @@ -347,6 +350,12 @@ static inline void *loader_lookup_device_dispatch_table( return (void *) table->CreateDynamicDepthStencilState; if (!strcmp(name, "DestroyDynamicDepthStencilState")) return (void *) table->DestroyDynamicDepthStencilState; + if (!strcmp(name, "CreateCommandPool")) + return (void *) table->CreateCommandPool; + if (!strcmp(name, "DestroyCommandPool")) + return (void *) table->DestroyCommandPool; + if (!strcmp(name, "ResetCommandPool")) + return (void *) table->ResetCommandPool; if (!strcmp(name, "CreateCommandBuffer")) return (void *) table->CreateCommandBuffer; if (!strcmp(name, "DestroyCommandBuffer")) diff --git a/loader/trampoline.c b/loader/trampoline.c index 0e102741..183062c4 100644 --- a/loader/trampoline.c +++ b/loader/trampoline.c @@ -1052,6 +1052,33 @@ LOADER_EXPORT VkResult VKAPI vkDestroyDynamicDepthStencilState(VkDevice device, return disp->DestroyDynamicDepthStencilState(device, dynamicDepthStencilState); } +LOADER_EXPORT VkResult VKAPI vkCreateCommandPool(VkDevice device, const VkCmdPoolCreateInfo* pCreateInfo, VkCmdPool* pCmdPool) +{ + const VkLayerDispatchTable *disp; + + disp = loader_get_dispatch(device); + + return disp->CreateCommandPool(device, pCreateInfo, pCmdPool); +} + +LOADER_EXPORT VkResult VKAPI vkDestroyCommandPool(VkDevice device, VkCmdPool cmdPool) +{ + const VkLayerDispatchTable *disp; + + disp = loader_get_dispatch(device); + + return disp->DestroyCommandPool(device, cmdPool); +} + +LOADER_EXPORT VkResult VKAPI vkResetCommandPool(VkDevice device, VkCmdPool cmdPool, VkCmdPoolResetFlags flags) +{ + const VkLayerDispatchTable *disp; + + disp = loader_get_dispatch(device); + + return disp->ResetCommandPool(device, cmdPool, flags); +} + LOADER_EXPORT VkResult VKAPI vkCreateCommandBuffer(VkDevice device, const VkCmdBufferCreateInfo* pCreateInfo, VkCmdBuffer* pCmdBuffer) { const VkLayerDispatchTable *disp; @@ -1094,13 +1121,13 @@ LOADER_EXPORT VkResult VKAPI vkEndCommandBuffer(VkCmdBuffer cmdBuffer) return disp->EndCommandBuffer(cmdBuffer); } -LOADER_EXPORT VkResult VKAPI vkResetCommandBuffer(VkCmdBuffer cmdBuffer) +LOADER_EXPORT VkResult VKAPI vkResetCommandBuffer(VkCmdBuffer cmdBuffer, VkCmdBufferResetFlags flags) { const VkLayerDispatchTable *disp; disp = loader_get_dispatch(cmdBuffer); - return disp->ResetCommandBuffer(cmdBuffer); + return disp->ResetCommandBuffer(cmdBuffer, flags); } LOADER_EXPORT void VKAPI vkCmdBindPipeline(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline) @@ -188,6 +188,7 @@ core = Extension( "VkDevice", "VkQueue", "VkCmdBuffer", + "VkCmdPool", "VkFence", "VkDeviceMemory", "VkBuffer", @@ -699,6 +700,20 @@ core = Extension( [Param("VkDevice", "device"), Param("VkDynamicDepthStencilState", "dynamicDepthStencilState")]), + Proto("VkResult", "CreateCommandPool", + [Param("VkDevice", "device"), + Param("const VkCmdPoolCreateInfo*", "pCreateInfo"), + Param("VkCmdPool*", "pCmdPool")]), + + Proto("VkResult", "DestroyCommandPool", + [Param("VkDevice", "device"), + Param("VkCmdPool", "cmdPool")]), + + Proto("VkResult", "ResetCommandPool", + [Param("VkDevice", "device"), + Param("VkCmdPool", "cmdPool"), + Param("VkCmdPoolResetFlags", "flags")]), + Proto("VkResult", "CreateCommandBuffer", [Param("VkDevice", "device"), Param("const VkCmdBufferCreateInfo*", "pCreateInfo"), @@ -716,7 +731,8 @@ core = Extension( [Param("VkCmdBuffer", "cmdBuffer")]), Proto("VkResult", "ResetCommandBuffer", - [Param("VkCmdBuffer", "cmdBuffer")]), + [Param("VkCmdBuffer", "cmdBuffer"), + Param("VkCmdBufferResetFlags", "flags")]), Proto("void", "CmdBindPipeline", [Param("VkCmdBuffer", "cmdBuffer"), @@ -1047,6 +1063,7 @@ object_dispatch_list = [ ] object_non_dispatch_list = [ + "VkCmdPool", "VkFence", "VkDeviceMemory", "VkBuffer", |
