gallium: add ARB_bindless_texture interface

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
This commit is contained in:
Samuel Pitoiset
2017-03-29 01:34:05 +02:00
parent 973822bcee
commit 8a68b4de08
2 changed files with 79 additions and 0 deletions

View File

@@ -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
----------------------

View File

@@ -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);
};