From: Marek Olšák Date: Sun, 5 Jul 2015 13:00:22 +0000 (+0200) Subject: gallium: add interface for writable shader buffers X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=8fba933ca2dd3c3487281135a9063b6ca9bed359;p=mesa.git gallium: add interface for writable shader buffers Reviewed-by: Ilia Mirkin --- 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.