mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-03 18:00:10 +01:00
zink: add helper for image resource barriers and avoid unnecessary barriers
same as buffer barriers now Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8945>
This commit is contained in:
parent
b00f407996
commit
03030f87a1
2 changed files with 14 additions and 0 deletions
|
|
@ -1075,12 +1075,24 @@ zink_resource_access_is_write(VkAccessFlags flags)
|
|||
return (flags & ALL_READ_ACCESS_FLAGS) != flags;
|
||||
}
|
||||
|
||||
bool
|
||||
zink_resource_image_needs_barrier(struct zink_resource *res, VkImageLayout new_layout, VkPipelineStageFlags pipeline)
|
||||
{
|
||||
if (!pipeline)
|
||||
pipeline = pipeline_dst_stage(new_layout);
|
||||
return res->layout != new_layout || (res->access_stage & pipeline) != pipeline ||
|
||||
(access_src_flags(res->layout) & access_dst_flags(new_layout)) != access_dst_flags(new_layout) ||
|
||||
(zink_resource_access_is_write(access_dst_flags(new_layout)) && util_bitcount(access_dst_flags(new_layout)) > 1);
|
||||
}
|
||||
|
||||
void
|
||||
zink_resource_barrier(VkCommandBuffer cmdbuf, struct zink_resource *res,
|
||||
VkImageLayout new_layout, VkPipelineStageFlags pipeline)
|
||||
{
|
||||
if (!pipeline)
|
||||
pipeline = pipeline_dst_stage(new_layout);
|
||||
if (!zink_resource_image_needs_barrier(res, new_layout, pipeline))
|
||||
return;
|
||||
VkImageSubresourceRange isr = {
|
||||
res->aspect,
|
||||
0, VK_REMAINING_MIP_LEVELS,
|
||||
|
|
|
|||
|
|
@ -217,6 +217,8 @@ zink_resource_buffer_needs_barrier(struct zink_resource *res, VkAccessFlags flag
|
|||
void
|
||||
zink_resource_buffer_barrier(VkCommandBuffer cmdbuf, struct zink_resource *res, VkAccessFlags flags, VkPipelineStageFlags pipeline);
|
||||
|
||||
bool
|
||||
zink_resource_image_needs_barrier(struct zink_resource *res, VkImageLayout new_layout, VkPipelineStageFlags pipeline);
|
||||
void
|
||||
zink_resource_barrier(VkCommandBuffer cmdbuf, struct zink_resource *res,
|
||||
VkImageLayout new_layout, VkPipelineStageFlags pipeline);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue