zink: add a stage param for buffer resource barriers

it's useful to be able to set this more granularly when doing resource
barriers

Reviewed-by: Hoe Hao Cheng <haochengho12907@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8669>
This commit is contained in:
Mike Blumenkrantz
2020-08-17 16:09:26 -04:00
committed by Marge Bot
parent 37cd4070e8
commit 1077bd0c64
3 changed files with 19 additions and 8 deletions
+17 -7
View File
@@ -1116,14 +1116,23 @@ zink_resource_barrier(VkCommandBuffer cmdbuf, struct zink_resource *res,
static VkPipelineStageFlags
pipeline_access_stage(VkAccessFlags flags)
{
switch (flags) {
default:
return VK_PIPELINE_STAGE_TRANSFER_BIT;
}
if (flags & (VK_ACCESS_UNIFORM_READ_BIT |
VK_ACCESS_SHADER_READ_BIT |
VK_ACCESS_SHADER_WRITE_BIT))
return VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV |
VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV |
VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR |
VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT |
VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT |
VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT |
VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT;
return VK_PIPELINE_STAGE_TRANSFER_BIT;
}
void
zink_resource_buffer_barrier(VkCommandBuffer cmdbuf, struct zink_resource *res, VkAccessFlags flags)
zink_resource_buffer_barrier(VkCommandBuffer cmdbuf, struct zink_resource *res, VkAccessFlags flags, VkPipelineStageFlags pipeline)
{
/* TODO: maybe make this more flexible using flags? */
VkBufferMemoryBarrier bmb = {
@@ -1140,14 +1149,15 @@ zink_resource_buffer_barrier(VkCommandBuffer cmdbuf, struct zink_resource *res,
vkCmdPipelineBarrier(
cmdbuf,
pipeline_access_stage(res->access),
pipeline_access_stage(flags),
res->access_stage ? res->access_stage : pipeline_access_stage(res->access),
pipeline ? pipeline : pipeline_access_stage(flags),
0,
0, NULL,
1, &bmb,
0, NULL
);
res->access = flags;
res->access_stage = pipeline ? pipeline : pipeline_access_stage(flags);
}
VkShaderStageFlagBits
+1 -1
View File
@@ -193,7 +193,7 @@ void
zink_wait_on_batch(struct zink_context *ctx, int batch_id);
void
zink_resource_buffer_barrier(VkCommandBuffer cmdbuf, struct zink_resource *res, VkAccessFlags flags);
zink_resource_buffer_barrier(VkCommandBuffer cmdbuf, struct zink_resource *res, VkAccessFlags flags, VkPipelineStageFlags pipeline);
void
zink_resource_barrier(VkCommandBuffer cmdbuf, struct zink_resource *res,
+1
View File
@@ -40,6 +40,7 @@ struct zink_resource {
enum pipe_format internal_format:16;
VkPipelineStageFlagBits access_stage;
union {
struct {
VkAccessFlags access;