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