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:
@@ -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
|
||||
----------------------
|
||||
|
||||
|
@@ -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);
|
||||
};
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user