mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 05:08:08 +02:00
glsl: add fragdata arrays to program resource list
This makes sure that user is still able to query properties about variables that have gotten removed by opt_dead_builtin_varyings pass. Fixes following OpenGL ES 3.1 test: ES31-CTS.program_interface_query.output-layout No Piglit regressions. v2: cleanup, drop extra parenthesis (Topi) Signed-off-by: Tapani Pälli <tapani.palli@intel.com> Reviewed-by: Marta Lofstedt <marta.lofstedt@intel.com>
This commit is contained in:
parent
6ce0857e30
commit
afbe8b6085
1 changed files with 29 additions and 0 deletions
|
|
@ -3386,6 +3386,12 @@ add_interface_variables(struct gl_shader_program *shProg,
|
|||
if (strncmp(var->name, "packed:", 7) == 0)
|
||||
continue;
|
||||
|
||||
/* Skip fragdata arrays, these are handled separately
|
||||
* by add_fragdata_arrays.
|
||||
*/
|
||||
if (strncmp(var->name, "gl_out_FragData", 15) == 0)
|
||||
continue;
|
||||
|
||||
if (!add_program_resource(shProg, programInterface, var,
|
||||
build_stageref(shProg, var->name,
|
||||
var->data.mode) | mask))
|
||||
|
|
@ -3425,6 +3431,26 @@ add_packed_varyings(struct gl_shader_program *shProg, int stage)
|
|||
return true;
|
||||
}
|
||||
|
||||
static bool
|
||||
add_fragdata_arrays(struct gl_shader_program *shProg)
|
||||
{
|
||||
struct gl_shader *sh = shProg->_LinkedShaders[MESA_SHADER_FRAGMENT];
|
||||
|
||||
if (!sh || !sh->fragdata_arrays)
|
||||
return true;
|
||||
|
||||
foreach_in_list(ir_instruction, node, sh->fragdata_arrays) {
|
||||
ir_variable *var = node->as_variable();
|
||||
if (var) {
|
||||
assert(var->data.mode == ir_var_shader_out);
|
||||
if (!add_program_resource(shProg, GL_PROGRAM_OUTPUT, var,
|
||||
1 << MESA_SHADER_FRAGMENT))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static char*
|
||||
get_top_level_name(const char *name)
|
||||
{
|
||||
|
|
@ -3701,6 +3727,9 @@ build_program_resource_list(struct gl_shader_program *shProg)
|
|||
return;
|
||||
}
|
||||
|
||||
if (!add_fragdata_arrays(shProg))
|
||||
return;
|
||||
|
||||
/* Add inputs and outputs to the resource list. */
|
||||
if (!add_interface_variables(shProg, shProg->_LinkedShaders[input_stage]->ir,
|
||||
GL_PROGRAM_INPUT))
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue