summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlyssa Rosenzweig <[email protected]>2019-07-31 15:19:09 -0700
committerAlyssa Rosenzweig <[email protected]>2019-08-01 16:23:03 -0700
commitc228046b4b48b7cd13220867195181937a688a61 (patch)
tree5843117935c55229d91be42d525d557f8fe001f4
parent428bed3bded5426d621cbbb1c3161c8984f0779d (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.c20
-rw-r--r--src/gallium/drivers/panfrost/pan_context.c7
-rw-r--r--src/gallium/drivers/panfrost/pan_context.h9
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(