Mesa (master): zink: add set_shader_buffers pipe_context method

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Jan 14 18:35:22 UTC 2021


Module: Mesa
Branch: master
Commit: f5ab1a1f00c1495da7c3b9cb645f268041c42f50
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=f5ab1a1f00c1495da7c3b9cb645f268041c42f50

Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date:   Tue Aug  4 14:21:00 2020 -0400

zink: add set_shader_buffers pipe_context method

Reviewed-by: Erik Faye-Lund <erik.faye-lund at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8330>

---

 src/gallium/drivers/zink/zink_context.c | 25 +++++++++++++++++++++++++
 src/gallium/drivers/zink/zink_context.h |  1 +
 2 files changed, 26 insertions(+)

diff --git a/src/gallium/drivers/zink/zink_context.c b/src/gallium/drivers/zink/zink_context.c
index 8d5d4e6415b..42d882967bb 100644
--- a/src/gallium/drivers/zink/zink_context.c
+++ b/src/gallium/drivers/zink/zink_context.c
@@ -574,6 +574,30 @@ zink_set_constant_buffer(struct pipe_context *pctx,
    }
 }
 
+static void
+zink_set_shader_buffers(struct pipe_context *pctx,
+                        enum pipe_shader_type p_stage,
+                        unsigned start_slot, unsigned count,
+                        const struct pipe_shader_buffer *buffers,
+                        unsigned writable_bitmask)
+{
+   struct zink_context *ctx = zink_context(pctx);
+
+   for (unsigned i = 0; i < count; i++) {
+      struct pipe_shader_buffer *ssbo = &ctx->ssbos[p_stage][start_slot + i];
+      if (buffers && buffers[i].buffer) {
+         struct zink_resource *res = zink_resource(buffers[i].buffer);
+         pipe_resource_reference(&ssbo->buffer, &res->base);
+         ssbo->buffer_offset = buffers[i].buffer_offset;
+         ssbo->buffer_size = MIN2(buffers[i].buffer_size, res->size - ssbo->buffer_offset);
+      } else {
+         pipe_resource_reference(&ssbo->buffer, NULL);
+         ssbo->buffer_offset = 0;
+         ssbo->buffer_size = 0;
+      }
+   }
+}
+
 static void
 zink_set_sampler_views(struct pipe_context *pctx,
                        enum pipe_shader_type shader_type,
@@ -1308,6 +1332,7 @@ zink_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags)
    ctx->base.set_viewport_states = zink_set_viewport_states;
    ctx->base.set_scissor_states = zink_set_scissor_states;
    ctx->base.set_constant_buffer = zink_set_constant_buffer;
+   ctx->base.set_shader_buffers = zink_set_shader_buffers;
    ctx->base.set_framebuffer_state = zink_set_framebuffer_state;
    ctx->base.set_stencil_ref = zink_set_stencil_ref;
    ctx->base.set_clip_state = zink_set_clip_state;
diff --git a/src/gallium/drivers/zink/zink_context.h b/src/gallium/drivers/zink/zink_context.h
index 3c0352e5eb6..a1879d344cf 100644
--- a/src/gallium/drivers/zink/zink_context.h
+++ b/src/gallium/drivers/zink/zink_context.h
@@ -91,6 +91,7 @@ struct zink_context {
    VkQueue queue;
 
    struct pipe_constant_buffer ubos[PIPE_SHADER_TYPES][PIPE_MAX_CONSTANT_BUFFERS];
+   struct pipe_shader_buffer ssbos[PIPE_SHADER_TYPES][PIPE_MAX_SHADER_BUFFERS];
    struct pipe_framebuffer_state fb_state;
 
    struct zink_vertex_elements_state *element_state;



More information about the mesa-commit mailing list