diff options
author | Alyssa Rosenzweig <[email protected]> | 2019-07-31 15:19:09 -0700 |
---|---|---|
committer | Alyssa Rosenzweig <[email protected]> | 2019-08-01 16:23:03 -0700 |
commit | c228046b4b48b7cd13220867195181937a688a61 (patch) | |
tree | 5843117935c55229d91be42d525d557f8fe001f4 | |
parent | 428bed3bded5426d621cbbb1c3161c8984f0779d (diff) |
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 <[email protected]>
-rw-r--r-- | src/gallium/drivers/panfrost/pan_assemble.c | 20 | ||||
-rw-r--r-- | src/gallium/drivers/panfrost/pan_context.c | 7 | ||||
-rw-r--r-- | 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( |