From 8a68b4de080ea3e88a9dee91730d9c35d496f6e0 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Wed, 29 Mar 2017 01:34:05 +0200 Subject: [PATCH] gallium: add ARB_bindless_texture interface MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Samuel Pitoiset Reviewed-by: Marek Olšák Reviewed-by: Nicolai Hähnle --- src/gallium/docs/source/context.rst | 20 ++++++++++ src/gallium/include/pipe/p_context.h | 59 ++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) 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); }; -- 2.30.2