Mesa (main): zink: add direct conversion from pipe_shader_type->VkPipelineStageFlags
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Jun 30 04:37:11 UTC 2021
Module: Mesa
Branch: main
Commit: eade6b75c2017d5a412a6c5d07467c6b824b2c38
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=eade6b75c2017d5a412a6c5d07467c6b824b2c38
Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date: Fri May 7 07:57:19 2021 -0400
zink: add direct conversion from pipe_shader_type->VkPipelineStageFlags
Reviewed-by: Dave Airlie <airlied at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11592>
---
src/gallium/drivers/zink/zink_context.c | 10 +++++-----
src/gallium/drivers/zink/zink_context.h | 22 ++++++++++++++++++++++
src/gallium/drivers/zink/zink_draw.c | 2 +-
3 files changed, 28 insertions(+), 6 deletions(-)
diff --git a/src/gallium/drivers/zink/zink_context.c b/src/gallium/drivers/zink/zink_context.c
index 337b3384f9f..baddd132365 100644
--- a/src/gallium/drivers/zink/zink_context.c
+++ b/src/gallium/drivers/zink/zink_context.c
@@ -1010,7 +1010,7 @@ zink_set_constant_buffer(struct pipe_context *pctx,
if (!ctx->descriptor_refs_dirty[shader == PIPE_SHADER_COMPUTE])
zink_batch_reference_resource_rw(&ctx->batch, new_res, false);
zink_fake_buffer_barrier(new_res, VK_ACCESS_UNIFORM_READ_BIT,
- zink_pipeline_flags_from_stage(zink_shader_stage(shader)));
+ zink_pipeline_flags_from_pipe_stage(shader));
}
update |= ((index || screen->descriptor_mode == ZINK_DESCRIPTOR_MODE_LAZY) && ctx->ubos[shader][index].buffer_offset != offset) ||
!!res != !!buffer || (res && res->obj->buffer != new_res->obj->buffer) ||
@@ -1104,7 +1104,7 @@ zink_set_shader_buffers(struct pipe_context *pctx,
util_range_add(&new_res->base.b, &new_res->valid_buffer_range, ssbo->buffer_offset,
ssbo->buffer_offset + ssbo->buffer_size);
zink_fake_buffer_barrier(new_res, access,
- zink_pipeline_flags_from_stage(zink_shader_stage(p_stage)));
+ zink_pipeline_flags_from_pipe_stage(p_stage));
update = true;
max_slot = MAX2(max_slot, start_slot + i);
} else {
@@ -1236,7 +1236,7 @@ zink_set_shader_images(struct pipe_context *pctx,
util_range_add(&res->base.b, &res->valid_buffer_range, images[i].u.buf.offset,
images[i].u.buf.offset + images[i].u.buf.size);
zink_fake_buffer_barrier(res, access,
- zink_pipeline_flags_from_stage(zink_shader_stage(p_stage)));
+ zink_pipeline_flags_from_pipe_stage(p_stage));
} else {
struct pipe_surface tmpl = {0};
tmpl.format = images[i].format;
@@ -1327,7 +1327,7 @@ zink_set_sampler_views(struct pipe_context *pctx,
}
}
zink_fake_buffer_barrier(res, VK_ACCESS_SHADER_READ_BIT,
- zink_pipeline_flags_from_stage(zink_shader_stage(shader_type)));
+ zink_pipeline_flags_from_pipe_stage(shader_type));
if (!a || a->buffer_view->buffer_view != b->buffer_view->buffer_view)
update = true;
} else if (!res->obj->is_buffer) {
@@ -3116,7 +3116,7 @@ check_and_rebind_buffer(struct zink_context *ctx, struct zink_resource *res, uns
if (is_write)
access |= VK_ACCESS_SHADER_WRITE_BIT;
zink_resource_buffer_barrier(ctx, NULL, res, access,
- zink_pipeline_flags_from_stage(zink_shader_stage(shader)));
+ zink_pipeline_flags_from_pipe_stage(shader));
return true;
}
diff --git a/src/gallium/drivers/zink/zink_context.h b/src/gallium/drivers/zink/zink_context.h
index 164956f6e72..e0aecbe7865 100644
--- a/src/gallium/drivers/zink/zink_context.h
+++ b/src/gallium/drivers/zink/zink_context.h
@@ -417,4 +417,26 @@ zink_update_descriptor_refs(struct zink_context *ctx, bool compute);
void
zink_init_vk_sample_locations(struct zink_context *ctx, VkSampleLocationsInfoEXT *loc);
+
+
+static inline VkPipelineStageFlags
+zink_pipeline_flags_from_pipe_stage(enum pipe_shader_type pstage)
+{
+ switch (pstage) {
+ case PIPE_SHADER_VERTEX:
+ return VK_PIPELINE_STAGE_VERTEX_SHADER_BIT;
+ case PIPE_SHADER_FRAGMENT:
+ return VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT;
+ case PIPE_SHADER_GEOMETRY:
+ return VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT;
+ case PIPE_SHADER_TESS_CTRL:
+ return VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT;
+ case PIPE_SHADER_TESS_EVAL:
+ return VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT;
+ case PIPE_SHADER_COMPUTE:
+ return VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT;
+ default:
+ unreachable("unknown shader stage");
+ }
+}
#endif
diff --git a/src/gallium/drivers/zink/zink_draw.c b/src/gallium/drivers/zink/zink_draw.c
index 793c60b0793..85ae99df517 100644
--- a/src/gallium/drivers/zink/zink_draw.c
+++ b/src/gallium/drivers/zink/zink_draw.c
@@ -370,7 +370,7 @@ update_barriers(struct zink_context *ctx, bool is_compute)
else {
u_foreach_bit(stage, res->bind_history) {
if ((1 << stage) != ZINK_RESOURCE_USAGE_STREAMOUT)
- pipeline |= zink_pipeline_flags_from_stage(zink_shader_stage(stage));
+ pipeline |= zink_pipeline_flags_from_pipe_stage(stage);
}
}
if (res->base.b.target == PIPE_BUFFER)
More information about the mesa-commit
mailing list