Commit 444b703a authored by Samuel Pitoiset's avatar Samuel Pitoiset

mesa: add infrastructure for bindless samplers/images bound to units

Yes, ARB_bindless_texture allows to do this. In other words, in
a situation like:

layout (bindless_sampler) uniform sampler2D tex;

The 'tex' sampler uniform can be either set with glUniform1()
(old-style bound samplers) or with glUniformHandleui() (resident
handles).

When glUniform1() is used, we have to somehow make the texture
resident "under the hood". This is done by requesting a texture
handle to the driver, making the handle resident in the current
context and overwriting the value directly in the constant buffer.
Signed-off-by: Samuel Pitoiset's avatarSamuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: default avatarNicolai Hähnle <nicolai.haehnle@amd.com>
parent 4fe2a6ba
......@@ -1990,6 +1990,42 @@ struct gl_perf_query_state
};
/**
* A bindless sampler object.
*/
struct gl_bindless_sampler
{
/** Texture unit (set by glUniform1()). */
GLubyte unit;
/** Texture Target (TEXTURE_1D/2D/3D/etc_INDEX). */
gl_texture_index target;
/** Whether this bindless sampler is bound to a unit. */
GLboolean bound;
/** Pointer to the base of the data. */
GLvoid *data;
};
/**
* A bindless image object.
*/
struct gl_bindless_image
{
/** Image unit (set by glUniform1()). */
GLubyte unit;
/** Access qualifier (GL_READ_WRITE, GL_READ_ONLY, GL_WRITE_ONLY) */
GLenum access;
/** Whether this bindless image is bound to a unit. */
GLboolean bound;
/** Pointer to the base of the data. */
GLvoid *data;
};
/**
* Names of the various vertex/fragment program register files, etc.
*
......@@ -2124,6 +2160,22 @@ struct gl_program
*/
gl_texture_index SamplerTargets[MAX_SAMPLERS];
/**
* Number of samplers declared with the bindless_sampler layout
* qualifier as specified by ARB_bindless_texture.
*/
GLuint NumBindlessSamplers;
GLboolean HasBoundBindlessSampler;
struct gl_bindless_sampler *BindlessSamplers;
/**
* Number of images declared with the bindless_image layout qualifier
* as specified by ARB_bindless_texture.
*/
GLuint NumBindlessImages;
GLboolean HasBoundBindlessImage;
struct gl_bindless_image *BindlessImages;
union {
struct {
/**
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment