mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 15:20:10 +01:00
linker: Split set_uniform_binding into separate functions for blocks and samplers
The two code paths are quite different, and there are some problems in the handling of uniform blocks. Future changes will cause these paths to diverge further. Ultimately, selecting between the two functions will happen at the set_uniform_binding call site, and set_uniform_binding will be deleted. NOTE: This patch just moves code around. Signed-off-by: Ian Romanick <ian.d.romanick@intel.com> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=76323 Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Cc: "10.1" <mesa-stable@lists.freedesktop.org> Cc: github@socker.lepus.uberspace.de
This commit is contained in:
parent
c8e7568f97
commit
6e2f63b69e
1 changed files with 39 additions and 3 deletions
|
|
@ -84,7 +84,7 @@ copy_constant_to_storage(union gl_constant_value *storage,
|
|||
}
|
||||
|
||||
void
|
||||
set_uniform_binding(void *mem_ctx, gl_shader_program *prog,
|
||||
set_sampler_binding(void *mem_ctx, gl_shader_program *prog,
|
||||
const char *name, const glsl_type *type, int binding)
|
||||
{
|
||||
struct gl_uniform_storage *const storage =
|
||||
|
|
@ -95,7 +95,7 @@ set_uniform_binding(void *mem_ctx, gl_shader_program *prog,
|
|||
return;
|
||||
}
|
||||
|
||||
if (storage->type->is_sampler()) {
|
||||
{
|
||||
unsigned elements = MAX2(storage->array_elements, 1);
|
||||
|
||||
/* From section 4.4.4 of the GLSL 4.20 specification:
|
||||
|
|
@ -118,7 +118,24 @@ set_uniform_binding(void *mem_ctx, gl_shader_program *prog,
|
|||
}
|
||||
}
|
||||
}
|
||||
} else if (storage->block_index != -1) {
|
||||
}
|
||||
|
||||
storage->initialized = true;
|
||||
}
|
||||
|
||||
void
|
||||
set_block_binding(void *mem_ctx, gl_shader_program *prog,
|
||||
const char *name, const glsl_type *type, int binding)
|
||||
{
|
||||
struct gl_uniform_storage *const storage =
|
||||
get_storage(prog->UniformStorage, prog->NumUserUniformStorage, name);
|
||||
|
||||
if (storage == NULL) {
|
||||
assert(storage != NULL);
|
||||
return;
|
||||
}
|
||||
|
||||
if (storage->block_index != -1) {
|
||||
/* This is a field of a UBO. val is the binding index. */
|
||||
for (int i = 0; i < MESA_SHADER_STAGES; i++) {
|
||||
int stage_index = prog->UniformBlockStageIndex[i][storage->block_index];
|
||||
|
|
@ -133,6 +150,25 @@ set_uniform_binding(void *mem_ctx, gl_shader_program *prog,
|
|||
storage->initialized = true;
|
||||
}
|
||||
|
||||
void
|
||||
set_uniform_binding(void *mem_ctx, gl_shader_program *prog,
|
||||
const char *name, const glsl_type *type, int binding)
|
||||
{
|
||||
struct gl_uniform_storage *const storage =
|
||||
get_storage(prog->UniformStorage, prog->NumUserUniformStorage, name);
|
||||
|
||||
if (storage == NULL) {
|
||||
assert(storage != NULL);
|
||||
return;
|
||||
}
|
||||
|
||||
if (storage->type->is_sampler()) {
|
||||
set_sampler_binding(mem_ctx, prog, name, type, binding);
|
||||
} else if (storage->block_index != -1) {
|
||||
set_block_binding(mem_ctx, prog, name, type, binding);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
set_uniform_initializer(void *mem_ctx, gl_shader_program *prog,
|
||||
const char *name, const glsl_type *type,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue