summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSamuel Pitoiset <[email protected]>2017-03-29 01:34:05 +0200
committerSamuel Pitoiset <[email protected]>2017-06-14 10:04:36 +0200
commit8a68b4de080ea3e88a9dee91730d9c35d496f6e0 (patch)
tree7ce674b435275d9c4b4cf94a9ee6427e5f82ad15 /src
parent973822bcee577a01f8b8281bbcd2261d18f074b3 (diff)
gallium: add ARB_bindless_texture interface
Signed-off-by: Samuel Pitoiset <[email protected]> Reviewed-by: Marek Olšák <[email protected]> Reviewed-by: Nicolai Hähnle <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/gallium/docs/source/context.rst20
-rw-r--r--src/gallium/include/pipe/p_context.h59
2 files changed, 79 insertions, 0 deletions
diff --git a/src/gallium/docs/source/context.rst b/src/gallium/docs/source/context.rst
index 9bcc0e6c7b5..6563a7e1503 100644
--- a/src/gallium/docs/source/context.rst
+++ b/src/gallium/docs/source/context.rst
@@ -757,6 +757,26 @@ notifications are single-shot, i.e. subsequent calls to
* ``set_device_reset_callback`` sets a callback which will be called when
a device reset is detected. The callback is only called synchronously.
+Bindless
+^^^^^^^^
+
+If PIPE_CAP_BINDLESS_TEXTURE is TRUE, the following ``pipe_context`` functions
+are used to create/delete bindless handles, and to make them resident in the
+current context when they are going to be used by shaders.
+
+* ``create_texture_handle`` creates a 64-bit unsigned integer texture handle
+ that is going to be directly used in shaders.
+* ``delete_texture_handle`` deletes a 64-bit unsigned integer texture handle.
+* ``make_texture_handle_resident`` makes a 64-bit unsigned texture handle
+ resident in the current context to be accessible by shaders for texture
+ mapping.
+* ``create_image_handle`` creates a 64-bit unsigned integer image handle that
+ is going to be directly used in shaders.
+* ``delete_image_handle`` deletes a 64-bit unsigned integer image handle.
+* ``make_image_handle_resident`` makes a 64-bit unsigned integer image handle
+ resident in the current context to be accessible by shaders for image loads,
+ stores and atomic operations.
+
Using several contexts
----------------------
diff --git a/src/gallium/include/pipe/p_context.h b/src/gallium/include/pipe/p_context.h
index 4b75386a65b..c2b1ad217c8 100644
--- a/src/gallium/include/pipe/p_context.h
+++ b/src/gallium/include/pipe/p_context.h
@@ -766,6 +766,65 @@ struct pipe_context {
unsigned last_level,
unsigned first_layer,
unsigned last_layer);
+
+ /**
+ * Create a 64-bit texture handle.
+ *
+ * \param ctx pipe context
+ * \param view pipe sampler view object
+ * \param state pipe sampler state template
+ * \return a 64-bit texture handle if success, 0 otherwise
+ */
+ uint64_t (*create_texture_handle)(struct pipe_context *ctx,
+ struct pipe_sampler_view *view,
+ const struct pipe_sampler_state *state);
+
+ /**
+ * Delete a texture handle.
+ *
+ * \param ctx pipe context
+ * \param handle 64-bit texture handle
+ */
+ void (*delete_texture_handle)(struct pipe_context *ctx, uint64_t handle);
+
+ /**
+ * Make a texture handle resident.
+ *
+ * \param ctx pipe context
+ * \param handle 64-bit texture handle
+ * \param resident TRUE for resident, FALSE otherwise
+ */
+ void (*make_texture_handle_resident)(struct pipe_context *ctx,
+ uint64_t handle, bool resident);
+
+ /**
+ * Create a 64-bit image handle.
+ *
+ * \param ctx pipe context
+ * \param image pipe image view template
+ * \return a 64-bit image handle if success, 0 otherwise
+ */
+ uint64_t (*create_image_handle)(struct pipe_context *ctx,
+ const struct pipe_image_view *image);
+
+ /**
+ * Delete an image handle.
+ *
+ * \param ctx pipe context
+ * \param handle 64-bit image handle
+ */
+ void (*delete_image_handle)(struct pipe_context *ctx, uint64_t handle);
+
+ /**
+ * Make an image handle resident.
+ *
+ * \param ctx pipe context
+ * \param handle 64-bit image handle
+ * \param access GL_READ_ONLY, GL_WRITE_ONLY or GL_READ_WRITE
+ * \param resident TRUE for resident, FALSE otherwise
+ */
+ void (*make_image_handle_resident)(struct pipe_context *ctx, uint64_t handle,
+ unsigned access, bool resident);
};