vulkan-1.0.0: Rework memory barriers
This commit is contained in:
@@ -2315,8 +2315,8 @@ typedef void (VKAPI_PTR *PFN_vkCmdClearAttachments)(VkCommandBuffer commandBuffe
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdResolveImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageResolve* pRegions);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdSetEvent)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdResetEvent)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdWaitEvents)(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, uint32_t memoryBarrierCount, const void* const* ppMemoryBarriers);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdPipelineBarrier)(VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, uint32_t memoryBarrierCount, const void* const* ppMemoryBarriers);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdWaitEvents)(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdPipelineBarrier)(VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdBeginQuery)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdEndQuery)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdResetQueryPool)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount);
|
||||
@@ -3050,7 +3050,11 @@ VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents(
|
||||
VkPipelineStageFlags srcStageMask,
|
||||
VkPipelineStageFlags dstStageMask,
|
||||
uint32_t memoryBarrierCount,
|
||||
const void* const* ppMemoryBarriers);
|
||||
const VkMemoryBarrier* pMemoryBarriers,
|
||||
uint32_t bufferMemoryBarrierCount,
|
||||
const VkBufferMemoryBarrier* pBufferMemoryBarriers,
|
||||
uint32_t imageMemoryBarrierCount,
|
||||
const VkImageMemoryBarrier* pImageMemoryBarriers);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier(
|
||||
VkCommandBuffer commandBuffer,
|
||||
@@ -3058,7 +3062,11 @@ VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier(
|
||||
VkPipelineStageFlags dstStageMask,
|
||||
VkDependencyFlags dependencyFlags,
|
||||
uint32_t memoryBarrierCount,
|
||||
const void* const* ppMemoryBarriers);
|
||||
const VkMemoryBarrier* pMemoryBarriers,
|
||||
uint32_t bufferMemoryBarrierCount,
|
||||
const VkBufferMemoryBarrier* pBufferMemoryBarriers,
|
||||
uint32_t imageMemoryBarrierCount,
|
||||
const VkImageMemoryBarrier* pImageMemoryBarriers);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdBeginQuery(
|
||||
VkCommandBuffer commandBuffer,
|
||||
|
@@ -127,8 +127,8 @@ anv_dump_image_to_ppm(struct anv_device *device,
|
||||
ANV_CALL(CmdPipelineBarrier)(cmd,
|
||||
VK_PIPELINE_STAGE_TRANSFER_BIT,
|
||||
VK_PIPELINE_STAGE_TRANSFER_BIT,
|
||||
true, 1,
|
||||
(const void * []) { &(VkImageMemoryBarrier) {
|
||||
true, 0, NULL, 0, NULL, 1,
|
||||
&(VkImageMemoryBarrier) {
|
||||
.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
|
||||
.srcAccessMask = VK_ACCESS_HOST_READ_BIT,
|
||||
.dstAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT,
|
||||
@@ -144,7 +144,7 @@ anv_dump_image_to_ppm(struct anv_device *device,
|
||||
.baseArrayLayer = 0,
|
||||
.layerCount = 1,
|
||||
},
|
||||
}});
|
||||
});
|
||||
|
||||
result = anv_EndCommandBuffer(cmd);
|
||||
assert(result == VK_SUCCESS);
|
||||
|
@@ -888,8 +888,12 @@ void genX(CmdWaitEvents)(
|
||||
const VkEvent* pEvents,
|
||||
VkPipelineStageFlags srcStageMask,
|
||||
VkPipelineStageFlags destStageMask,
|
||||
uint32_t memBarrierCount,
|
||||
const void* const* ppMemBarriers)
|
||||
uint32_t memoryBarrierCount,
|
||||
const VkMemoryBarrier* pMemoryBarriers,
|
||||
uint32_t bufferMemoryBarrierCount,
|
||||
const VkBufferMemoryBarrier* pBufferMemoryBarriers,
|
||||
uint32_t imageMemoryBarrierCount,
|
||||
const VkImageMemoryBarrier* pImageMemoryBarriers)
|
||||
{
|
||||
stub();
|
||||
}
|
||||
|
@@ -1147,8 +1147,12 @@ void genX(CmdWaitEvents)(
|
||||
const VkEvent* pEvents,
|
||||
VkPipelineStageFlags srcStageMask,
|
||||
VkPipelineStageFlags destStageMask,
|
||||
uint32_t memBarrierCount,
|
||||
const void* const* ppMemBarriers)
|
||||
uint32_t memoryBarrierCount,
|
||||
const VkMemoryBarrier* pMemoryBarriers,
|
||||
uint32_t bufferMemoryBarrierCount,
|
||||
const VkBufferMemoryBarrier* pBufferMemoryBarriers,
|
||||
uint32_t imageMemoryBarrierCount,
|
||||
const VkImageMemoryBarrier* pImageMemoryBarriers)
|
||||
{
|
||||
ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, commandBuffer);
|
||||
for (uint32_t i = 0; i < eventCount; i++) {
|
||||
@@ -1166,5 +1170,7 @@ void genX(CmdWaitEvents)(
|
||||
|
||||
genX(CmdPipelineBarrier)(commandBuffer, srcStageMask, destStageMask,
|
||||
false, /* byRegion */
|
||||
memBarrierCount, ppMemBarriers);
|
||||
memoryBarrierCount, pMemoryBarriers,
|
||||
bufferMemoryBarrierCount, pBufferMemoryBarriers,
|
||||
imageMemoryBarrierCount, pImageMemoryBarriers);
|
||||
}
|
||||
|
@@ -143,8 +143,12 @@ void genX(CmdPipelineBarrier)(
|
||||
VkPipelineStageFlags srcStageMask,
|
||||
VkPipelineStageFlags destStageMask,
|
||||
VkBool32 byRegion,
|
||||
uint32_t memBarrierCount,
|
||||
const void* const* ppMemBarriers)
|
||||
uint32_t memoryBarrierCount,
|
||||
const VkMemoryBarrier* pMemoryBarriers,
|
||||
uint32_t bufferMemoryBarrierCount,
|
||||
const VkBufferMemoryBarrier* pBufferMemoryBarriers,
|
||||
uint32_t imageMemoryBarrierCount,
|
||||
const VkImageMemoryBarrier* pImageMemoryBarriers)
|
||||
{
|
||||
ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, commandBuffer);
|
||||
uint32_t b, *dw;
|
||||
@@ -197,30 +201,19 @@ void genX(CmdPipelineBarrier)(
|
||||
VkAccessFlags src_flags = 0;
|
||||
VkAccessFlags dst_flags = 0;
|
||||
|
||||
for (uint32_t i = 0; i < memBarrierCount; i++) {
|
||||
const struct anv_common *common = ppMemBarriers[i];
|
||||
switch (common->sType) {
|
||||
case VK_STRUCTURE_TYPE_MEMORY_BARRIER: {
|
||||
ANV_COMMON_TO_STRUCT(VkMemoryBarrier, barrier, common);
|
||||
src_flags |= barrier->srcAccessMask;
|
||||
dst_flags |= barrier->dstAccessMask;
|
||||
break;
|
||||
}
|
||||
case VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER: {
|
||||
ANV_COMMON_TO_STRUCT(VkBufferMemoryBarrier, barrier, common);
|
||||
src_flags |= barrier->srcAccessMask;
|
||||
dst_flags |= barrier->dstAccessMask;
|
||||
break;
|
||||
}
|
||||
case VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER: {
|
||||
ANV_COMMON_TO_STRUCT(VkImageMemoryBarrier, barrier, common);
|
||||
src_flags |= barrier->srcAccessMask;
|
||||
dst_flags |= barrier->dstAccessMask;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
unreachable("Invalid memory barrier type");
|
||||
}
|
||||
for (uint32_t i = 0; i < memoryBarrierCount; i++) {
|
||||
src_flags |= pMemoryBarriers[i].srcAccessMask;
|
||||
dst_flags |= pMemoryBarriers[i].dstAccessMask;
|
||||
}
|
||||
|
||||
for (uint32_t i = 0; i < bufferMemoryBarrierCount; i++) {
|
||||
src_flags |= pBufferMemoryBarriers[i].srcAccessMask;
|
||||
dst_flags |= pBufferMemoryBarriers[i].dstAccessMask;
|
||||
}
|
||||
|
||||
for (uint32_t i = 0; i < imageMemoryBarrierCount; i++) {
|
||||
src_flags |= pImageMemoryBarriers[i].srcAccessMask;
|
||||
dst_flags |= pImageMemoryBarriers[i].dstAccessMask;
|
||||
}
|
||||
|
||||
/* The src flags represent how things were used previously. This is
|
||||
|
Reference in New Issue
Block a user