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