diff --git a/src/gallium/drivers/zink/zink_context.c b/src/gallium/drivers/zink/zink_context.c index aeefb1e8820..28abc3d2e41 100644 --- a/src/gallium/drivers/zink/zink_context.c +++ b/src/gallium/drivers/zink/zink_context.c @@ -1076,6 +1076,34 @@ pipeline_src_stage(VkImageLayout layout) } } +#define ALL_READ_ACCESS_FLAGS \ + (VK_ACCESS_INDIRECT_COMMAND_READ_BIT | \ + VK_ACCESS_INDEX_READ_BIT | \ + VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT | \ + VK_ACCESS_UNIFORM_READ_BIT | \ + VK_ACCESS_INPUT_ATTACHMENT_READ_BIT | \ + VK_ACCESS_SHADER_READ_BIT | \ + VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | \ + VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | \ + VK_ACCESS_TRANSFER_READ_BIT |\ + VK_ACCESS_HOST_READ_BIT |\ + VK_ACCESS_MEMORY_READ_BIT |\ + VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT |\ + VK_ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT |\ + VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT |\ + VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR |\ + VK_ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV |\ + VK_ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT |\ + VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_NV |\ + VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_NV |\ + VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_NV) + + +bool +zink_resource_access_is_write(VkAccessFlags flags) +{ + return (flags & ALL_READ_ACCESS_FLAGS) != flags; +} void zink_resource_barrier(VkCommandBuffer cmdbuf, struct zink_resource *res, diff --git a/src/gallium/drivers/zink/zink_context.h b/src/gallium/drivers/zink/zink_context.h index 5e516cfd30e..630bb7f4c07 100644 --- a/src/gallium/drivers/zink/zink_context.h +++ b/src/gallium/drivers/zink/zink_context.h @@ -192,6 +192,9 @@ zink_fence_wait(struct pipe_context *ctx); void zink_wait_on_batch(struct zink_context *ctx, int batch_id); +bool +zink_resource_access_is_write(VkAccessFlags flags); + void zink_resource_buffer_barrier(VkCommandBuffer cmdbuf, struct zink_resource *res, VkAccessFlags flags, VkPipelineStageFlags pipeline);