[Mesa-dev] [PATCH 3/8] gallium: add hw atomic buffer binding API.

Dave Airlie airlied at gmail.com
Tue Nov 7 06:31:02 UTC 2017


From: Dave Airlie <airlied at redhat.com>

This API binds atomic buffers for all bound shaders (as per the
GL semantics).

This is needed to support cross shader hw atomic counters.

Signed-off-by: Dave Airlie <airlied at redhat.com>
---
 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 ba7fef8..5898157 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 4609d4d..c2153f7 100644
--- a/src/gallium/include/pipe/p_context.h
+++ b/src/gallium/include/pipe/p_context.h
@@ -332,6 +332,22 @@ struct pipe_context {
                               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
     * will be unbound.
-- 
2.9.5



More information about the mesa-dev mailing list