(Vulkan) Add pipeline barrier function pointer

This commit is contained in:
twinaphex 2016-02-29 22:30:23 +01:00
parent bd96ab3585
commit a53e7a5437
2 changed files with 27 additions and 9 deletions

View File

@ -743,7 +743,10 @@ void vulkan_image_layout_transition(
VkPipelineStageFlags srcStages, VkPipelineStageFlags srcStages,
VkPipelineStageFlags dstStages) VkPipelineStageFlags dstStages)
{ {
VkImageMemoryBarrier barrier = { VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER }; struct vulkan_context_fp *vkcfp =
(struct vulkan_context_fp*)&vk->context->fp;
VkImageMemoryBarrier barrier =
{ VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER };
barrier.srcAccessMask = srcAccess; barrier.srcAccessMask = srcAccess;
barrier.dstAccessMask = dstAccess; barrier.dstAccessMask = dstAccess;
@ -756,7 +759,7 @@ void vulkan_image_layout_transition(
barrier.subresourceRange.levelCount = 1; barrier.subresourceRange.levelCount = 1;
barrier.subresourceRange.layerCount = 1; barrier.subresourceRange.layerCount = 1;
vkCmdPipelineBarrier(cmd, VKFUNC(vkCmdPipelineBarrier)(cmd,
srcStages, srcStages,
dstStages, dstStages,
0, 0,
@ -1136,7 +1139,6 @@ bool vulkan_context_init(gfx_ctx_vulkan_data_t *vk,
/* Images */ /* Images */
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CreateImage); VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CreateImage);
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, DestroyImage); VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, DestroyImage);
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CmdCopyImage);
/* Image Views */ /* Image Views */
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CreateImageView); VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CreateImageView);
@ -1146,7 +1148,6 @@ bool vulkan_context_init(gfx_ctx_vulkan_data_t *vk,
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CreateDescriptorPool); VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CreateDescriptorPool);
/* Descriptor sets */ /* Descriptor sets */
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CmdBindDescriptorSets);
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, UpdateDescriptorSets); VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, UpdateDescriptorSets);
/* Descriptor Set Layout */ /* Descriptor Set Layout */
@ -1168,19 +1169,15 @@ bool vulkan_context_init(gfx_ctx_vulkan_data_t *vk,
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, DestroyRenderPass); VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, DestroyRenderPass);
/* Fragment operations */
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CmdSetScissor);
/* Fixed-function vertex postprocessing */
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CmdSetViewport);
/* Pipelines */ /* Pipelines */
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CreatePipelineLayout); VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CreatePipelineLayout);
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, DestroyPipelineLayout); VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, DestroyPipelineLayout);
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CreatePipelineCache); VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CreatePipelineCache);
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CmdBindPipeline);
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, DestroyPipeline); VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, DestroyPipeline);
/* Command buffers */ /* Command buffers */
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CreateCommandPool); VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CreateCommandPool);
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, DestroyCommandPool); VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, DestroyCommandPool);
@ -1264,6 +1261,15 @@ bool vulkan_context_init(gfx_ctx_vulkan_data_t *vk,
NULL, &vk->context.device) != VK_SUCCESS) NULL, &vk->context.device) != VK_SUCCESS)
return false; return false;
/* Image commands */
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CmdCopyImage);
/* Descriptor Set commands */
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CmdBindDescriptorSets);
/* Fragment operations */
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CmdSetScissor);
/* Render Pass commands */ /* Render Pass commands */
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CmdBeginRenderPass); VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CmdBeginRenderPass);
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CmdEndRenderPass); VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CmdEndRenderPass);
@ -1272,9 +1278,18 @@ bool vulkan_context_init(gfx_ctx_vulkan_data_t *vk,
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CreateSampler); VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CreateSampler);
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, DestroySampler); VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, DestroySampler);
/* Fixed-function vertex postprocessing */
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CmdSetViewport);
/* Clear commands */ /* Clear commands */
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CmdClearAttachments); VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CmdClearAttachments);
/* Pipeline */
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CmdBindPipeline);
/* Pipeline Barriers */
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CmdPipelineBarrier);
/* Drawing commands */ /* Drawing commands */
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CmdDraw); VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CmdDraw);

View File

@ -170,6 +170,9 @@ typedef struct vulkan_context
/* Pipeline Cache */ /* Pipeline Cache */
PFN_vkCreatePipelineCache vkCreatePipelineCache; PFN_vkCreatePipelineCache vkCreatePipelineCache;
/* Pipeline Barriers */
PFN_vkCmdPipelineBarrier vkCmdPipelineBarrier;
/* Descriptor pools */ /* Descriptor pools */
PFN_vkCreateDescriptorPool vkCreateDescriptorPool; PFN_vkCreateDescriptorPool vkCreateDescriptorPool;