i965/mesa/st/swrast: set fs shader_info directly and switch to using it

Note we access shader_info from the program struct rather than the
nir_shader pointer because shader cache won't create a nir_shader.

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
Timothy Arceri
2016-10-19 13:45:18 +11:00
parent 91d5b0eda9
commit 17e28a1571
17 changed files with 30 additions and 54 deletions

View File

@@ -26,8 +26,6 @@
*
* Sets the InputsRead and OutputsWritten of Mesa programs.
*
* Additionally, for fragment shaders, set the IsSample bitfield.
*
* Mesa programs (gl_program, not gl_shader_program) have a set of
* flags indicating which varyings are read and written. Computing
* which are actually read from some sort of backend code can be
@@ -123,9 +121,7 @@ mark(struct gl_program *prog, ir_variable *var, int offset, int len,
prog->DoubleInputsRead |= bitfield;
if (stage == MESA_SHADER_FRAGMENT) {
gl_fragment_program *fprog = (gl_fragment_program *) prog;
if (var->data.sample)
fprog->IsSample |= bitfield;
prog->info.fs.uses_sample_qualifier |= var->data.sample;
}
} else if (var->data.mode == ir_var_system_value) {
prog->SystemValuesRead |= bitfield;
@@ -411,8 +407,7 @@ ir_set_program_inouts_visitor::visit_enter(ir_discard *)
/* discards are only allowed in fragment shaders. */
assert(this->shader_stage == MESA_SHADER_FRAGMENT);
gl_fragment_program *fprog = (gl_fragment_program *) prog;
fprog->UsesKill = true;
prog->info.fs.uses_discard = true;
return visit_continue;
}
@@ -439,9 +434,8 @@ do_set_program_inouts(exec_list *instructions, struct gl_program *prog,
prog->PatchOutputsWritten = 0;
prog->SystemValuesRead = 0;
if (shader_stage == MESA_SHADER_FRAGMENT) {
gl_fragment_program *fprog = (gl_fragment_program *) prog;
fprog->IsSample = 0;
fprog->UsesKill = false;
prog->info.fs.uses_sample_qualifier = false;
prog->info.fs.uses_discard = false;
}
visit_list_elements(&v, instructions);
}

View File

@@ -44,10 +44,7 @@ copy_shader_info(const struct gl_shader_program *shader_prog,
struct gl_fragment_program *fp =
(struct gl_fragment_program *)sh->Program;
info->fs.uses_discard = fp->UsesKill;
info->fs.uses_sample_qualifier = fp->IsSample != 0;
info->fs.early_fragment_tests = sh->info.EarlyFragmentTests;
info->fs.depth_layout = fp->FragDepthLayout;
break;
}