vk/device: Add stub support for command pools

Real support isn't really that far away.  We just need a data structure
with a linked list and a few tests.
This commit is contained in:
Jason Ekstrand 2015-07-14 17:39:58 -07:00
parent ca7243b54e
commit 1f658bed70
2 changed files with 78 additions and 5 deletions

View File

@ -109,6 +109,7 @@ VK_DEFINE_NONDISP_SUBCLASS_HANDLE(VkDynamicRasterState, VkDynamicStateObject)
VK_DEFINE_NONDISP_SUBCLASS_HANDLE(VkDynamicColorBlendState, VkDynamicStateObject) VK_DEFINE_NONDISP_SUBCLASS_HANDLE(VkDynamicColorBlendState, VkDynamicStateObject)
VK_DEFINE_NONDISP_SUBCLASS_HANDLE(VkDynamicDepthStencilState, VkDynamicStateObject) VK_DEFINE_NONDISP_SUBCLASS_HANDLE(VkDynamicDepthStencilState, VkDynamicStateObject)
VK_DEFINE_NONDISP_SUBCLASS_HANDLE(VkFramebuffer, VkNonDispatchable) VK_DEFINE_NONDISP_SUBCLASS_HANDLE(VkFramebuffer, VkNonDispatchable)
VK_DEFINE_NONDISP_SUBCLASS_HANDLE(VkCmdPool, VkNonDispatchable)
typedef enum { typedef enum {
@ -209,9 +210,10 @@ typedef enum {
VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION = 47, VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION = 47,
VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY = 48, VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY = 48,
VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO = 49, VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO = 49,
VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO = 50,
VK_STRUCTURE_TYPE_BEGIN_RANGE = VK_STRUCTURE_TYPE_APPLICATION_INFO, VK_STRUCTURE_TYPE_BEGIN_RANGE = VK_STRUCTURE_TYPE_APPLICATION_INFO,
VK_STRUCTURE_TYPE_END_RANGE = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO, VK_STRUCTURE_TYPE_END_RANGE = VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO,
VK_STRUCTURE_TYPE_NUM = (VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO - VK_STRUCTURE_TYPE_APPLICATION_INFO + 1), VK_STRUCTURE_TYPE_NUM = (VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO - VK_STRUCTURE_TYPE_APPLICATION_INFO + 1),
VK_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF VK_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF
} VkStructureType; } VkStructureType;
@ -470,6 +472,7 @@ typedef enum {
VK_OBJECT_TYPE_FRAMEBUFFER = 27, VK_OBJECT_TYPE_FRAMEBUFFER = 27,
VK_OBJECT_TYPE_RENDER_PASS = 28, VK_OBJECT_TYPE_RENDER_PASS = 28,
VK_OBJECT_TYPE_PIPELINE_CACHE = 29, VK_OBJECT_TYPE_PIPELINE_CACHE = 29,
VK_OBJECT_TYPE_CMD_POOL = 30,
VK_OBJECT_TYPE_BEGIN_RANGE = VK_OBJECT_TYPE_INSTANCE, VK_OBJECT_TYPE_BEGIN_RANGE = VK_OBJECT_TYPE_INSTANCE,
VK_OBJECT_TYPE_END_RANGE = VK_OBJECT_TYPE_PIPELINE_CACHE, VK_OBJECT_TYPE_END_RANGE = VK_OBJECT_TYPE_PIPELINE_CACHE,
VK_OBJECT_TYPE_NUM = (VK_OBJECT_TYPE_PIPELINE_CACHE - VK_OBJECT_TYPE_INSTANCE + 1), VK_OBJECT_TYPE_NUM = (VK_OBJECT_TYPE_PIPELINE_CACHE - VK_OBJECT_TYPE_INSTANCE + 1),
@ -1076,6 +1079,17 @@ typedef enum {
VK_MEMORY_INPUT_TRANSFER_BIT = 0x00000200, VK_MEMORY_INPUT_TRANSFER_BIT = 0x00000200,
} VkMemoryInputFlagBits; } VkMemoryInputFlagBits;
typedef VkFlags VkMemoryInputFlags; typedef VkFlags VkMemoryInputFlags;
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;
typedef VkFlags VkCmdBufferCreateFlags; typedef VkFlags VkCmdBufferCreateFlags;
typedef enum { typedef enum {
@ -1087,6 +1101,11 @@ typedef enum {
} VkCmdBufferOptimizeFlagBits; } VkCmdBufferOptimizeFlagBits;
typedef VkFlags VkCmdBufferOptimizeFlags; typedef VkFlags VkCmdBufferOptimizeFlags;
typedef enum {
VK_CMD_BUFFER_RESET_RELEASE_RESOURCES = 0x00000001,
} VkCmdBufferResetFlagBits;
typedef VkFlags VkCmdBufferResetFlags;
typedef enum { typedef enum {
VK_IMAGE_ASPECT_COLOR_BIT = 0x00000001, VK_IMAGE_ASPECT_COLOR_BIT = 0x00000001,
VK_IMAGE_ASPECT_DEPTH_BIT = 0x00000002, VK_IMAGE_ASPECT_DEPTH_BIT = 0x00000002,
@ -1943,6 +1962,13 @@ typedef struct {
VkStructureType sType; VkStructureType sType;
const void* pNext; const void* pNext;
uint32_t queueFamilyIndex; uint32_t queueFamilyIndex;
VkCmdPoolCreateFlags flags;
} VkCmdPoolCreateInfo;
typedef struct {
VkStructureType sType;
const void* pNext;
VkCmdPool cmdPool;
VkCmdBufferLevel level; VkCmdBufferLevel level;
VkCmdBufferCreateFlags flags; VkCmdBufferCreateFlags flags;
} VkCmdBufferCreateInfo; } VkCmdBufferCreateInfo;
@ -2184,11 +2210,14 @@ typedef VkResult (VKAPI *PFN_vkDestroyFramebuffer)(VkDevice device, VkFramebuffe
typedef VkResult (VKAPI *PFN_vkCreateRenderPass)(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, VkRenderPass* pRenderPass); typedef VkResult (VKAPI *PFN_vkCreateRenderPass)(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, VkRenderPass* pRenderPass);
typedef VkResult (VKAPI *PFN_vkDestroyRenderPass)(VkDevice device, VkRenderPass renderPass); typedef VkResult (VKAPI *PFN_vkDestroyRenderPass)(VkDevice device, VkRenderPass renderPass);
typedef VkResult (VKAPI *PFN_vkGetRenderAreaGranularity)(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity); typedef VkResult (VKAPI *PFN_vkGetRenderAreaGranularity)(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity);
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_vkCreateCommandBuffer)(VkDevice device, const VkCmdBufferCreateInfo* pCreateInfo, VkCmdBuffer* pCmdBuffer);
typedef VkResult (VKAPI *PFN_vkDestroyCommandBuffer)(VkDevice device, VkCmdBuffer commandBuffer); typedef VkResult (VKAPI *PFN_vkDestroyCommandBuffer)(VkDevice device, VkCmdBuffer commandBuffer);
typedef VkResult (VKAPI *PFN_vkBeginCommandBuffer)(VkCmdBuffer cmdBuffer, const VkCmdBufferBeginInfo* pBeginInfo); typedef VkResult (VKAPI *PFN_vkBeginCommandBuffer)(VkCmdBuffer cmdBuffer, const VkCmdBufferBeginInfo* pBeginInfo);
typedef VkResult (VKAPI *PFN_vkEndCommandBuffer)(VkCmdBuffer cmdBuffer); 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_vkCmdBindPipeline)(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline);
typedef void (VKAPI *PFN_vkCmdBindDynamicViewportState)(VkCmdBuffer cmdBuffer, VkDynamicViewportState dynamicViewportState); typedef void (VKAPI *PFN_vkCmdBindDynamicViewportState)(VkCmdBuffer cmdBuffer, VkDynamicViewportState dynamicViewportState);
typedef void (VKAPI *PFN_vkCmdBindDynamicRasterState)(VkCmdBuffer cmdBuffer, VkDynamicRasterState dynamicRasterState); typedef void (VKAPI *PFN_vkCmdBindDynamicRasterState)(VkCmdBuffer cmdBuffer, VkDynamicRasterState dynamicRasterState);
@ -2741,6 +2770,20 @@ VkResult VKAPI vkGetRenderAreaGranularity(
VkRenderPass renderPass, VkRenderPass renderPass,
VkExtent2D* pGranularity); VkExtent2D* pGranularity);
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( VkResult VKAPI vkCreateCommandBuffer(
VkDevice device, VkDevice device,
const VkCmdBufferCreateInfo* pCreateInfo, const VkCmdBufferCreateInfo* pCreateInfo,
@ -2758,7 +2801,8 @@ VkResult VKAPI vkEndCommandBuffer(
VkCmdBuffer cmdBuffer); VkCmdBuffer cmdBuffer);
VkResult VKAPI vkResetCommandBuffer( VkResult VKAPI vkResetCommandBuffer(
VkCmdBuffer cmdBuffer); VkCmdBuffer cmdBuffer,
VkCmdBufferResetFlags flags);
void VKAPI vkCmdBindPipeline( void VKAPI vkCmdBindPipeline(
VkCmdBuffer cmdBuffer, VkCmdBuffer cmdBuffer,

View File

@ -1287,6 +1287,9 @@ VkResult anv_DestroyObject(
case VK_OBJECT_TYPE_EVENT: case VK_OBJECT_TYPE_EVENT:
return anv_DestroyEvent(_device, (VkEvent) _object); return anv_DestroyEvent(_device, (VkEvent) _object);
case VK_OBJECT_TYPE_CMD_POOL:
return anv_DestroyCommandPool(_device, (VkCmdPool) _object);
default: default:
unreachable("Invalid object type"); unreachable("Invalid object type");
} }
@ -2516,6 +2519,31 @@ anv_cmd_buffer_chain_batch(struct anv_batch *batch, void *_data)
return VK_SUCCESS; return VK_SUCCESS;
} }
VkResult anv_CreateCommandPool(
VkDevice device,
const VkCmdPoolCreateInfo* pCreateInfo,
VkCmdPool* pCmdPool)
{
*pCmdPool = 7;
stub_return(VK_SUCCESS);
}
VkResult anv_DestroyCommandPool(
VkDevice device,
VkCmdPool cmdPool)
{
stub_return(VK_SUCCESS);
}
VkResult anv_ResetCommandPool(
VkDevice device,
VkCmdPool cmdPool,
VkCmdPoolResetFlags flags)
{
stub_return(VK_UNSUPPORTED);
}
VkResult anv_CreateCommandBuffer( VkResult anv_CreateCommandBuffer(
VkDevice _device, VkDevice _device,
const VkCmdBufferCreateInfo* pCreateInfo, const VkCmdBufferCreateInfo* pCreateInfo,
@ -2863,7 +2891,8 @@ VkResult anv_EndCommandBuffer(
} }
VkResult anv_ResetCommandBuffer( VkResult anv_ResetCommandBuffer(
VkCmdBuffer cmdBuffer) VkCmdBuffer cmdBuffer,
VkCmdBufferResetFlags flags)
{ {
ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, cmdBuffer); ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, cmdBuffer);