[PATCH 10/21] etnaviv: compiler: avoid using tgsi_shader_info

Philipp Zabel p.zabel at pengutronix.de
Tue Jun 5 14:38:34 UTC 2018


From: Michael Tretter <m.tretter at pengutronix.de>

For NIR shaders, get the shader stage from the nir_shader structure
instead from tgsi_shader_info.

Signed-off-by: Michael Tretter <m.tretter at pengutronix.de>
Signed-off-by: Philipp Zabel <p.zabel at pengutronix.de>
---
 .../drivers/etnaviv/etnaviv_compiler.c        | 37 ++++++++++++++++++-
 1 file changed, 35 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/etnaviv/etnaviv_compiler.c b/src/gallium/drivers/etnaviv/etnaviv_compiler.c
index f87708d33f03..59caff435e64 100644
--- a/src/gallium/drivers/etnaviv/etnaviv_compiler.c
+++ b/src/gallium/drivers/etnaviv/etnaviv_compiler.c
@@ -255,6 +255,39 @@ sort_rec_compar(const struct sort_rec *a, const struct sort_rec *b)
    return 0;
 }
 
+static inline enum pipe_shader_type
+st_shader_stage_to_ptarget(gl_shader_stage stage)
+{
+   switch (stage) {
+   case MESA_SHADER_VERTEX:
+      return PIPE_SHADER_VERTEX;
+   case MESA_SHADER_FRAGMENT:
+      return PIPE_SHADER_FRAGMENT;
+   case MESA_SHADER_GEOMETRY:
+      return PIPE_SHADER_GEOMETRY;
+   case MESA_SHADER_TESS_CTRL:
+      return PIPE_SHADER_TESS_CTRL;
+   case MESA_SHADER_TESS_EVAL:
+      return PIPE_SHADER_TESS_EVAL;
+   case MESA_SHADER_COMPUTE:
+      return PIPE_SHADER_COMPUTE;
+   default:
+      break;
+   }
+
+   assert(!"Invalid shader type");
+   return PIPE_SHADER_VERTEX;
+}
+
+static inline bool
+etna_shader_is_stage(struct etna_compile *c, gl_shader_stage stage)
+{
+   if (!c->s)
+      return c->info.processor == st_shader_stage_to_ptarget(stage);
+   else
+      return c->s->info.stage == stage;
+}
+
 /* Calculate "mystery meat" load balancing value. This value determines how
  * work is scheduled between VS and PS in the unified shader architecture.
  * More precisely, it is determined from the number of VS outputs, as well as
@@ -658,7 +691,7 @@ etna_compile_pass_check_usage(struct etna_compile *c)
 static void
 assign_special_inputs(struct etna_compile *c)
 {
-   if (c->info.processor == PIPE_SHADER_FRAGMENT) {
+   if (etna_shader_is_stage(c, MESA_SHADER_FRAGMENT)) {
       /* never assign t0 as it is the position output, start assigning at t1 */
       c->next_free_native = 1;
 
@@ -2424,7 +2457,7 @@ fill_in_vs_outputs(struct etna_shader_variant *sobj, struct etna_compile *c)
 static bool
 etna_compile_check_limits(struct etna_compile *c)
 {
-   int max_uniforms = (c->info.processor == PIPE_SHADER_VERTEX)
+   int max_uniforms = etna_shader_is_stage(c, MESA_SHADER_VERTEX)
                          ? c->specs->max_vs_uniforms
                          : c->specs->max_ps_uniforms;
    /* round up number of uniforms, including immediates, in units of four */
-- 
2.17.1



More information about the etnaviv mailing list