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>

Attachment: signature.asc
Description: PGP signature

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to