mesa: add support for glUniformHandleui64*ARB()
Bindless sampler/image handles are represented using 64-bit unsigned integers. The ARB_bindless_texture spec says: "The error INVALID_OPERATION is generated by UniformHandleui64{v}ARB if the sampler or image uniform being updated has the "bound_sampler" or "bound_image" layout qualifier"." Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
This commit is contained in:
@@ -201,6 +201,12 @@ struct gl_uniform_storage {
|
||||
* top-level shader storage block member. (GL_TOP_LEVEL_ARRAY_STRIDE).
|
||||
*/
|
||||
unsigned top_level_array_stride;
|
||||
|
||||
/**
|
||||
* Whether this uniform variable has the bindless_sampler or bindless_image
|
||||
* layout qualifier as specified by ARB_bindless_texture.
|
||||
*/
|
||||
bool is_bindless;
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
@@ -754,6 +754,7 @@ private:
|
||||
|
||||
this->uniforms[id].is_shader_storage =
|
||||
current_var->is_in_shader_storage_block();
|
||||
this->uniforms[id].is_bindless = current_var->data.bindless;
|
||||
|
||||
/* Do not assign storage if the uniform is a builtin or buffer object */
|
||||
if (!this->uniforms[id].builtin &&
|
||||
|
@@ -578,6 +578,7 @@ write_uniforms(struct blob *metadata, struct gl_shader_program *prog)
|
||||
blob_write_uint32(metadata, prog->data->UniformStorage[i].is_shader_storage);
|
||||
blob_write_uint32(metadata, prog->data->UniformStorage[i].matrix_stride);
|
||||
blob_write_uint32(metadata, prog->data->UniformStorage[i].row_major);
|
||||
blob_write_uint32(metadata, prog->data->UniformStorage[i].is_bindless);
|
||||
blob_write_uint32(metadata,
|
||||
prog->data->UniformStorage[i].num_compatible_subroutines);
|
||||
blob_write_uint32(metadata,
|
||||
@@ -642,6 +643,7 @@ read_uniforms(struct blob_reader *metadata, struct gl_shader_program *prog)
|
||||
uniforms[i].is_shader_storage = blob_read_uint32(metadata);
|
||||
uniforms[i].matrix_stride = blob_read_uint32(metadata);
|
||||
uniforms[i].row_major = blob_read_uint32(metadata);
|
||||
uniforms[i].is_bindless = blob_read_uint32(metadata);
|
||||
uniforms[i].num_compatible_subroutines = blob_read_uint32(metadata);
|
||||
uniforms[i].top_level_array_size = blob_read_uint32(metadata);
|
||||
uniforms[i].top_level_array_stride = blob_read_uint32(metadata);
|
||||
|
Reference in New Issue
Block a user