[Mesa-dev] [RFC PATCH 11/65] mesa: add infrastructure for bindless samplers/images bound to units
Nicolai Hähnle
nhaehnle at gmail.com
Wed May 24 10:28:08 UTC 2017
On 19.05.2017 18:52, Samuel Pitoiset wrote:
> 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 <samuel.pitoiset at gmail.com>
> ---
> src/mesa/main/mtypes.h | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 52 insertions(+)
>
> diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
> index 70865b373d..1d168e8c68 100644
> --- a/src/mesa/main/mtypes.h
> +++ b/src/mesa/main/mtypes.h
> @@ -1988,6 +1988,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.
> *
> * NOTE: first four tokens must fit into 2 bits (see t_vb_arbprogram.c)
> @@ -2121,6 +2157,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;
> +
This could go into the sh part of the union below, couldn't it?
Cheers,
Nicolai
> union {
> struct {
> /**
>
--
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.
More information about the mesa-dev
mailing list