aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlyssa Rosenzweig <[email protected]>2019-06-04 23:47:35 +0000
committerAlyssa Rosenzweig <[email protected]>2019-06-12 14:27:47 -0700
commitf8a4090f80cfd87d9648e90c39292b0d0611b2e6 (patch)
treecf5d1957d9d350691213f66fda55fcf062b57870
parent15fae1e38c55bb985cee1b005139dd5a2733bd5f (diff)
panfrost: Add panfrost_job_type_for_pipe helper
This logic is repeated in a bunch of places and will only grow worse as we support more job types; collect it. Signed-off-by: Alyssa Rosenzweig <[email protected]>
-rw-r--r--src/gallium/drivers/panfrost/pan_context.c31
1 files changed, 29 insertions, 2 deletions
diff --git a/src/gallium/drivers/panfrost/pan_context.c b/src/gallium/drivers/panfrost/pan_context.c
index cacad77d162..d9939641cff 100644
--- a/src/gallium/drivers/panfrost/pan_context.c
+++ b/src/gallium/drivers/panfrost/pan_context.c
@@ -53,6 +53,31 @@ extern const char *pan_counters_base;
/* Do not actually send anything to the GPU; merely generate the cmdstream as fast as possible. Disables framebuffer writes */
//#define DRY_RUN
+static enum mali_job_type
+panfrost_job_type_for_pipe(enum pipe_shader_type type)
+{
+ switch (type) {
+ case PIPE_SHADER_VERTEX:
+ return JOB_TYPE_VERTEX;
+
+ case PIPE_SHADER_FRAGMENT:
+ /* Note: JOB_TYPE_FRAGMENT is different.
+ * JOB_TYPE_FRAGMENT actually executes the
+ * fragment shader, but JOB_TYPE_TILER is how you
+ * specify it*/
+ return JOB_TYPE_TILER;
+
+ case PIPE_SHADER_GEOMETRY:
+ return JOB_TYPE_GEOMETRY;
+
+ case PIPE_SHADER_COMPUTE:
+ return JOB_TYPE_COMPUTE;
+
+ default:
+ unreachable("Unsupported shader stage");
+ }
+}
+
static void
panfrost_enable_checksum(struct panfrost_context *ctx, struct panfrost_resource *rsrc)
{
@@ -1808,7 +1833,8 @@ panfrost_bind_fs_state(
/* Now we have a variant selected, so compile and go */
if (!shader_state->compiled) {
- panfrost_shader_compile(ctx, shader_state->tripipe, NULL, JOB_TYPE_TILER, shader_state);
+ panfrost_shader_compile(ctx, shader_state->tripipe, NULL,
+ panfrost_job_type_for_pipe(PIPE_SHADER_FRAGMENT), shader_state);
shader_state->compiled = true;
}
}
@@ -1834,7 +1860,8 @@ panfrost_bind_vs_state(
ctx->vs->variants[0].tripipe = (struct mali_shader_meta *) transfer.cpu;
ctx->vs->variants[0].tripipe_gpu = transfer.gpu;
- panfrost_shader_compile(ctx, ctx->vs->variants[0].tripipe, NULL, JOB_TYPE_VERTEX, &ctx->vs->variants[0]);
+ panfrost_shader_compile(ctx, ctx->vs->variants[0].tripipe, NULL,
+ panfrost_job_type_for_pipe(PIPE_SHADER_VERTEX), &ctx->vs->variants[0]);
ctx->vs->variants[0].compiled = true;
}
}