From cca5617348ad2544f2cf8e201828de3fa942df3c Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Wed, 1 Nov 2017 14:17:49 +1000 Subject: [PATCH] gallium: add hw atomic buffer binding API. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This API binds atomic buffers for all bound shaders (as per the GL semantics). This is needed to support cross shader hw atomic counters. Reviewed-by: Nicolai Hähnle Reviewed-by: Marek Olšák Tested-By: Gert Wollny Signed-off-by: Dave Airlie --- src/gallium/docs/source/context.rst | 8 ++++++++ src/gallium/include/pipe/p_context.h | 16 ++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/gallium/docs/source/context.rst b/src/gallium/docs/source/context.rst index 8aee21b2ed4..9d069b37d7e 100644 --- a/src/gallium/docs/source/context.rst +++ b/src/gallium/docs/source/context.rst @@ -145,6 +145,14 @@ to the array index which is used for sampling. * ``sampler_view_destroy`` destroys a sampler view and releases its reference to associated texture. +Hardware Atomic buffers +^^^^^^^^^^^^^^^^^^^^^^^ + +Buffers containing hw atomics are required to support the feature +on some drivers. + +Drivers that require this need to fill the ``set_hw_atomic_buffers`` method. + Shader Resources ^^^^^^^^^^^^^^^^ diff --git a/src/gallium/include/pipe/p_context.h b/src/gallium/include/pipe/p_context.h index 0dd4ad12424..b74e6492196 100644 --- a/src/gallium/include/pipe/p_context.h +++ b/src/gallium/include/pipe/p_context.h @@ -331,6 +331,22 @@ struct pipe_context { unsigned start_slot, unsigned count, const struct pipe_shader_buffer *buffers); + /** + * Bind an array of hw atomic buffers for use by all shaders. + * And buffers that were previously bound to the specified range + * will be unbound. + * + * \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_hw_atomic_buffers)(struct pipe_context *, + unsigned start_slot, unsigned count, + const 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 -- 2.30.2