[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