(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 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.dstAccessMask = dstAccess;
@ -756,7 +759,7 @@ void vulkan_image_layout_transition(
barrier.subresourceRange.levelCount = 1;
barrier.subresourceRange.layerCount = 1;
vkCmdPipelineBarrier(cmd,
VKFUNC(vkCmdPipelineBarrier)(cmd,
srcStages,
dstStages,
0,
@ -1136,7 +1139,6 @@ bool vulkan_context_init(gfx_ctx_vulkan_data_t *vk,
/* Images */
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, CmdCopyImage);
/* Image Views */
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);
/* Descriptor sets */
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CmdBindDescriptorSets);
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, UpdateDescriptorSets);
/* 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);
/* 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 */
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, CreatePipelineCache);
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CmdBindPipeline);
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, DestroyPipeline);
/* Command buffers */
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CreateCommandPool);
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)
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 */
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CmdBeginRenderPass);
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, DestroySampler);
/* Fixed-function vertex postprocessing */
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CmdSetViewport);
/* Clear commands */
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 */
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CmdDraw);

View File

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