nir/linker: Add BUFFER_VARIABLEs to the prog resource list
v2: use link_util_should_add_buffer_variable() (Arcady) Signed-off-by: Arcady Goldmints-Orlov <agoldmints@igalia.com> Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
This commit is contained in:

committed by
Alejandro Piñeiro

parent
ffdb44d3a0
commit
53087a89ac
@@ -159,6 +159,10 @@ nir_build_program_resource_list(struct gl_context *ctx,
|
|||||||
* Here, it is expected that nir_link_uniforms() has already been
|
* Here, it is expected that nir_link_uniforms() has already been
|
||||||
* called, so that UniformStorage table is already available.
|
* called, so that UniformStorage table is already available.
|
||||||
*/
|
*/
|
||||||
|
int top_level_array_base_offset = -1;
|
||||||
|
int top_level_array_size_in_bytes = -1;
|
||||||
|
int second_element_offset = -1;
|
||||||
|
int block_index = -1;
|
||||||
for (unsigned i = 0; i < prog->data->NumUniformStorage; i++) {
|
for (unsigned i = 0; i < prog->data->NumUniformStorage; i++) {
|
||||||
struct gl_uniform_storage *uniform = &prog->data->UniformStorage[i];
|
struct gl_uniform_storage *uniform = &prog->data->UniformStorage[i];
|
||||||
|
|
||||||
@@ -166,7 +170,33 @@ nir_build_program_resource_list(struct gl_context *ctx,
|
|||||||
if (uniform->hidden)
|
if (uniform->hidden)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!link_util_add_program_resource(prog, resource_set, GL_UNIFORM, uniform,
|
if (!link_util_should_add_buffer_variable(prog, uniform,
|
||||||
|
top_level_array_base_offset,
|
||||||
|
top_level_array_size_in_bytes,
|
||||||
|
second_element_offset, block_index))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
|
||||||
|
if (prog->data->UniformStorage[i].offset >= second_element_offset) {
|
||||||
|
top_level_array_base_offset =
|
||||||
|
prog->data->UniformStorage[i].offset;
|
||||||
|
|
||||||
|
top_level_array_size_in_bytes =
|
||||||
|
prog->data->UniformStorage[i].top_level_array_size *
|
||||||
|
prog->data->UniformStorage[i].top_level_array_stride;
|
||||||
|
|
||||||
|
/* Set or reset the second element offset. For non arrays this
|
||||||
|
* will be set to -1.
|
||||||
|
*/
|
||||||
|
second_element_offset = top_level_array_size_in_bytes ?
|
||||||
|
top_level_array_base_offset +
|
||||||
|
prog->data->UniformStorage[i].top_level_array_stride : -1;
|
||||||
|
}
|
||||||
|
block_index = uniform->block_index;
|
||||||
|
|
||||||
|
|
||||||
|
GLenum interface = uniform->is_shader_storage ? GL_BUFFER_VARIABLE : GL_UNIFORM;
|
||||||
|
if (!link_util_add_program_resource(prog, resource_set, interface, uniform,
|
||||||
uniform->active_shader_mask)) {
|
uniform->active_shader_mask)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user