From c228046b4b48b7cd13220867195181937a688a61 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Wed, 31 Jul 2019 15:19:09 -0700 Subject: [PATCH] panfrost: Remove CSO dependency from shader_compile We want this routine to be generic across graphics and compute, so let the caller deal with the typing. Signed-off-by: Alyssa Rosenzweig --- src/gallium/drivers/panfrost/pan_assemble.c | 20 ++++++++++++-------- src/gallium/drivers/panfrost/pan_context.c | 7 ++++++- src/gallium/drivers/panfrost/pan_context.h | 9 ++++++++- 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/src/gallium/drivers/panfrost/pan_assemble.c b/src/gallium/drivers/panfrost/pan_assemble.c index 4d69cd136bd..3f3e866f54a 100644 --- a/src/gallium/drivers/panfrost/pan_assemble.c +++ b/src/gallium/drivers/panfrost/pan_assemble.c @@ -35,20 +35,24 @@ #include "tgsi/tgsi_dump.h" void -panfrost_shader_compile(struct panfrost_context *ctx, struct mali_shader_meta *meta, const char *src, int type, struct panfrost_shader_state *state) +panfrost_shader_compile( + struct panfrost_context *ctx, + struct mali_shader_meta *meta, + enum pipe_shader_ir ir_type, + const void *ir, + const char *src, + int type, + struct panfrost_shader_state *state) { uint8_t *dst; nir_shader *s; - struct pipe_shader_state *cso = state->base; - - if (cso->type == PIPE_SHADER_IR_NIR) { - s = nir_shader_clone(NULL, cso->ir.nir); + if (ir_type == PIPE_SHADER_IR_NIR) { + s = nir_shader_clone(NULL, ir); } else { - assert (cso->type == PIPE_SHADER_IR_TGSI); - //tgsi_dump(cso->tokens, 0); - s = tgsi_to_nir(cso->tokens, ctx->base.screen); + assert (ir_type == PIPE_SHADER_IR_TGSI); + s = tgsi_to_nir(ir, ctx->base.screen); } s->info.stage = type == JOB_TYPE_VERTEX ? MESA_SHADER_VERTEX : MESA_SHADER_FRAGMENT; diff --git a/src/gallium/drivers/panfrost/pan_context.c b/src/gallium/drivers/panfrost/pan_context.c index fbf2e07f985..e1de285ae8c 100644 --- a/src/gallium/drivers/panfrost/pan_context.c +++ b/src/gallium/drivers/panfrost/pan_context.c @@ -2120,7 +2120,12 @@ panfrost_bind_shader_state( /* We finally have a variant, so compile it */ if (!shader_state->compiled) { - panfrost_shader_compile(ctx, shader_state->tripipe, NULL, + panfrost_shader_compile(ctx, shader_state->tripipe, + variants->base.type, + variants->base.type == PIPE_SHADER_IR_NIR ? + variants->base.ir.nir : + variants->base.tokens, + NULL, panfrost_job_type_for_pipe(type), shader_state); shader_state->compiled = true; diff --git a/src/gallium/drivers/panfrost/pan_context.h b/src/gallium/drivers/panfrost/pan_context.h index eefd9eff43f..1b607fa53a0 100644 --- a/src/gallium/drivers/panfrost/pan_context.h +++ b/src/gallium/drivers/panfrost/pan_context.h @@ -302,7 +302,14 @@ mali_ptr panfrost_fragment_job(struct panfrost_context *ctx, bool has_draws); void -panfrost_shader_compile(struct panfrost_context *ctx, struct mali_shader_meta *meta, const char *src, int type, struct panfrost_shader_state *state); +panfrost_shader_compile( + struct panfrost_context *ctx, + struct mali_shader_meta *meta, + enum pipe_shader_ir ir_type, + const void *ir, + const char *src, + int type, + struct panfrost_shader_state *state); void panfrost_pack_work_groups_compute( -- 2.30.2