mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-23 02:30:12 +01:00
st/mesa: call prog_to_nir sooner for ARB_fp
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
This commit is contained in:
parent
f54dcaf232
commit
5d0630e504
1 changed files with 32 additions and 34 deletions
|
|
@ -760,26 +760,6 @@ bool
|
||||||
st_translate_fragment_program(struct st_context *st,
|
st_translate_fragment_program(struct st_context *st,
|
||||||
struct st_fragment_program *stfp)
|
struct st_fragment_program *stfp)
|
||||||
{
|
{
|
||||||
ubyte outputMapping[2 * FRAG_RESULT_MAX];
|
|
||||||
ubyte inputMapping[VARYING_SLOT_MAX];
|
|
||||||
ubyte inputSlotToAttr[VARYING_SLOT_MAX];
|
|
||||||
ubyte interpMode[PIPE_MAX_SHADER_INPUTS]; /* XXX size? */
|
|
||||||
GLuint attr;
|
|
||||||
GLbitfield64 inputsRead;
|
|
||||||
struct ureg_program *ureg;
|
|
||||||
|
|
||||||
GLboolean write_all = GL_FALSE;
|
|
||||||
|
|
||||||
ubyte input_semantic_name[PIPE_MAX_SHADER_INPUTS];
|
|
||||||
ubyte input_semantic_index[PIPE_MAX_SHADER_INPUTS];
|
|
||||||
uint fs_num_inputs = 0;
|
|
||||||
|
|
||||||
ubyte fs_output_semantic_name[PIPE_MAX_SHADER_OUTPUTS];
|
|
||||||
ubyte fs_output_semantic_index[PIPE_MAX_SHADER_OUTPUTS];
|
|
||||||
uint fs_num_outputs = 0;
|
|
||||||
|
|
||||||
memset(inputSlotToAttr, ~0, sizeof(inputSlotToAttr));
|
|
||||||
|
|
||||||
/* Non-GLSL programs: */
|
/* Non-GLSL programs: */
|
||||||
if (!stfp->glsl_to_tgsi) {
|
if (!stfp->glsl_to_tgsi) {
|
||||||
_mesa_remove_output_reads(&stfp->Base, PROGRAM_OUTPUT);
|
_mesa_remove_output_reads(&stfp->Base, PROGRAM_OUTPUT);
|
||||||
|
|
@ -805,25 +785,43 @@ st_translate_fragment_program(struct st_context *st,
|
||||||
stfp->affected_states |= ST_NEW_FS_SAMPLER_VIEWS |
|
stfp->affected_states |= ST_NEW_FS_SAMPLER_VIEWS |
|
||||||
ST_NEW_FS_SAMPLERS;
|
ST_NEW_FS_SAMPLERS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Translate to NIR. */
|
||||||
|
if (!stfp->ati_fs &&
|
||||||
|
st->pipe->screen->get_shader_param(st->pipe->screen,
|
||||||
|
PIPE_SHADER_FRAGMENT,
|
||||||
|
PIPE_SHADER_CAP_PREFERRED_IR)) {
|
||||||
|
nir_shader *nir =
|
||||||
|
st_translate_prog_to_nir(st, &stfp->Base, MESA_SHADER_FRAGMENT);
|
||||||
|
|
||||||
|
if (stfp->tgsi.ir.nir)
|
||||||
|
ralloc_free(stfp->tgsi.ir.nir);
|
||||||
|
stfp->tgsi.type = PIPE_SHADER_IR_NIR;
|
||||||
|
stfp->tgsi.ir.nir = nir;
|
||||||
|
stfp->Base.nir = nir;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ubyte outputMapping[2 * FRAG_RESULT_MAX];
|
||||||
|
ubyte inputMapping[VARYING_SLOT_MAX];
|
||||||
|
ubyte inputSlotToAttr[VARYING_SLOT_MAX];
|
||||||
|
ubyte interpMode[PIPE_MAX_SHADER_INPUTS]; /* XXX size? */
|
||||||
|
GLuint attr;
|
||||||
|
GLbitfield64 inputsRead;
|
||||||
|
struct ureg_program *ureg;
|
||||||
|
|
||||||
bool use_nir = PIPE_SHADER_IR_NIR ==
|
GLboolean write_all = GL_FALSE;
|
||||||
st->pipe->screen->get_shader_param(st->pipe->screen,
|
|
||||||
PIPE_SHADER_FRAGMENT,
|
|
||||||
PIPE_SHADER_CAP_PREFERRED_IR);
|
|
||||||
|
|
||||||
if (use_nir && !stfp->ati_fs) {
|
ubyte input_semantic_name[PIPE_MAX_SHADER_INPUTS];
|
||||||
nir_shader *nir =
|
ubyte input_semantic_index[PIPE_MAX_SHADER_INPUTS];
|
||||||
st_translate_prog_to_nir(st, &stfp->Base, MESA_SHADER_FRAGMENT);
|
uint fs_num_inputs = 0;
|
||||||
|
|
||||||
if (stfp->tgsi.ir.nir)
|
ubyte fs_output_semantic_name[PIPE_MAX_SHADER_OUTPUTS];
|
||||||
ralloc_free(stfp->tgsi.ir.nir);
|
ubyte fs_output_semantic_index[PIPE_MAX_SHADER_OUTPUTS];
|
||||||
stfp->tgsi.type = PIPE_SHADER_IR_NIR;
|
uint fs_num_outputs = 0;
|
||||||
stfp->tgsi.ir.nir = nir;
|
|
||||||
stfp->Base.nir = nir;
|
memset(inputSlotToAttr, ~0, sizeof(inputSlotToAttr));
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Convert Mesa program inputs to TGSI input register semantics.
|
* Convert Mesa program inputs to TGSI input register semantics.
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue