From 8fba933ca2dd3c3487281135a9063b6ca9bed359 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Sun, 5 Jul 2015 15:00:22 +0200 Subject: [PATCH] gallium: add interface for writable shader buffers Reviewed-by: Ilia Mirkin --- src/gallium/include/pipe/p_context.h | 18 ++++++++++++++++++ src/gallium/include/pipe/p_state.h | 10 ++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/gallium/include/pipe/p_context.h b/src/gallium/include/pipe/p_context.h index 76873956cc0..f89dae98a2f 100644 --- a/src/gallium/include/pipe/p_context.h +++ b/src/gallium/include/pipe/p_context.h @@ -58,6 +58,7 @@ struct pipe_resource; struct pipe_sampler_state; struct pipe_sampler_view; struct pipe_scissor_state; +struct pipe_shader_buffer; struct pipe_shader_state; struct pipe_stencil_ref; struct pipe_stream_output_target; @@ -236,6 +237,23 @@ struct pipe_context { const float default_outer_level[4], const float default_inner_level[2]); + /** + * Bind an array of shader buffers that will be used by a shader. + * Any buffers that were previously bound to the specified range + * will be unbound. + * + * \param shader selects shader stage + * \param start_slot first buffer slot to bind. + * \param count number of consecutive buffers to bind. + * \param buffers array of pointers to the buffers to bind, it + * should contain at least \a count elements + * unless it's NULL, in which case no buffers will + * be bound. + */ + void (*set_shader_buffers)(struct pipe_context *, unsigned shader, + unsigned start_slot, unsigned count, + struct pipe_shader_buffer *buffers); + /** * Bind an array of images that will be used by a shader. * Any images that were previously bound to the specified range diff --git a/src/gallium/include/pipe/p_state.h b/src/gallium/include/pipe/p_state.h index 78dc5785332..a233610ead6 100644 --- a/src/gallium/include/pipe/p_state.h +++ b/src/gallium/include/pipe/p_state.h @@ -493,6 +493,16 @@ struct pipe_constant_buffer }; +/** + * An untyped shader buffer supporting loads, stores, and atomics. + */ +struct pipe_shader_buffer { + struct pipe_resource *buffer; /**< the actual buffer */ + unsigned buffer_offset; /**< offset to start of data in buffer, in bytes */ + unsigned buffer_size; /**< how much data can be read in shader */ +}; + + /** * A stream output target. The structure specifies the range vertices can * be written to. -- 2.30.2