Timothy Arceri <tarc...@itsqueeze.com> writes: > On 10/05/18 02:46, Eric Anholt wrote: >> Timothy Arceri <tarc...@itsqueeze.com> writes: >> >>> --- >>> src/mesa/state_tracker/st_program.c | 65 +++++++++++++++++++++++++---- >>> 1 file changed, 58 insertions(+), 7 deletions(-) >>> >>> diff --git a/src/mesa/state_tracker/st_program.c >>> b/src/mesa/state_tracker/st_program.c >>> index fe72ddaf2c0..4e2476a26ef 100644 >>> --- a/src/mesa/state_tracker/st_program.c >>> +++ b/src/mesa/state_tracker/st_program.c >>> @@ -37,6 +37,7 @@ >>> #include "main/mtypes.h" >>> #include "program/prog_parameter.h" >>> #include "program/prog_print.h" >>> +#include "program/prog_to_nir.h" >>> #include "program/programopt.h" >>> >>> #include "compiler/nir/nir.h" >>> @@ -377,6 +378,28 @@ st_release_cp_variants(struct st_context *st, struct >>> st_compute_program *stcp) >>> } >>> } >>> >>> +/** >>> + * Translate ARB (asm) program to NIR >>> + */ >>> +static nir_shader * >>> +st_translate_prog_to_nir(struct st_context *st, struct gl_program *prog, >>> + gl_shader_stage stage) >>> +{ >>> + const struct gl_shader_compiler_options *options = >>> + &st->ctx->Const.ShaderCompilerOptions[stage]; >>> + >>> + /* Translate to NIR */ >>> + nir_shader *nir = prog_to_nir(prog, options->NirOptions); >>> + NIR_PASS_V(nir, nir_lower_regs_to_ssa); /* turn registers into SSA */ >>> + nir_validate_shader(nir); >>> + >>> + /* Optimise NIR */ >>> + st_nir_opts(nir); >>> + nir_validate_shader(nir); >>> + >>> + return nir; >>> +} >>> + >>> /** >>> * Translate a vertex program. >>> */ >>> @@ -458,15 +481,28 @@ st_translate_vertex_program(struct st_context *st, >>> /* No samplers are allowed in ARB_vp. */ >>> } >>> >>> - if (stvp->shader_program) { >>> - struct gl_program *prog = stvp->shader_program->last_vert_prog; >>> - if (prog) { >>> - st_translate_stream_output_info2(prog->sh.LinkedTransformFeedback, >>> - stvp->result_to_output, >>> - &stvp->tgsi.stream_output); >>> + enum pipe_shader_ir preferred_ir = (enum pipe_shader_ir) >>> + st->pipe->screen->get_shader_param(st->pipe->screen, >>> PIPE_SHADER_VERTEX, >>> + PIPE_SHADER_CAP_PREFERRED_IR); >>> + >>> + if (preferred_ir == PIPE_SHADER_IR_NIR) { >>> + if (stvp->shader_program) { >>> + struct gl_program *prog = stvp->shader_program->last_vert_prog; >>> + if (prog) { >>> + >>> st_translate_stream_output_info2(prog->sh.LinkedTransformFeedback, >>> + stvp->result_to_output, >>> + &stvp->tgsi.stream_output); >>> + } >>> + >>> + st_store_ir_in_disk_cache(st, &stvp->Base, true); >> >> Doesn't this block want to be run in the shader_program && >> !PIPE_SHADER_IR_NIR case? > > There is no such case. stvp->shader_program is equal to > PIPE_SHADER_IR_NIR for GLSL shaders.
This code is so twisty. You're right. For both: Reviewed-by: Eric Anholt <e...@anholt.net>
signature.asc
Description: PGP signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev