summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlyssa Rosenzweig <[email protected]>2019-08-07 10:26:12 -0700
committerAlyssa Rosenzweig <[email protected]>2019-08-13 09:43:17 -0700
commit5b0a1a4e49b49cb61d9369d3aaacfe1d124571c8 (patch)
tree84c5fce845d85598f178a6920bba66510c02a0e0
parentf714eab882d90f4b9c8643dc070cbc81a48bb323 (diff)
panfrost: Route outputs_written through the compiler
It's there in shader_info, but we need to access it from pan_context.c Signed-off-by: Alyssa Rosenzweig <[email protected]> Reviewed-by: Boris Brezillon <[email protected]>
-rw-r--r--src/gallium/drivers/panfrost/pan_assemble.c6
-rw-r--r--src/gallium/drivers/panfrost/pan_compute.c2
-rw-r--r--src/gallium/drivers/panfrost/pan_context.c5
-rw-r--r--src/gallium/drivers/panfrost/pan_context.h3
4 files changed, 12 insertions, 4 deletions
diff --git a/src/gallium/drivers/panfrost/pan_assemble.c b/src/gallium/drivers/panfrost/pan_assemble.c
index 337f97bddbd..47f6c1e5312 100644
--- a/src/gallium/drivers/panfrost/pan_assemble.c
+++ b/src/gallium/drivers/panfrost/pan_assemble.c
@@ -41,7 +41,8 @@ panfrost_shader_compile(
enum pipe_shader_ir ir_type,
const void *ir,
gl_shader_stage stage,
- struct panfrost_shader_state *state)
+ struct panfrost_shader_state *state,
+ uint64_t *outputs_written)
{
struct panfrost_screen *screen = pan_screen(ctx->base.screen);
uint8_t *dst;
@@ -118,6 +119,9 @@ panfrost_shader_compile(
state->reads_point_coord = false;
state->helper_invocations = s->info.fs.needs_helper_invocations;
+ if (outputs_written)
+ *outputs_written = s->info.outputs_written;
+
/* Separate as primary uniform count is truncated */
state->uniform_count = program.uniform_count;
diff --git a/src/gallium/drivers/panfrost/pan_compute.c b/src/gallium/drivers/panfrost/pan_compute.c
index 5ca63c15929..d0b2e132295 100644
--- a/src/gallium/drivers/panfrost/pan_compute.c
+++ b/src/gallium/drivers/panfrost/pan_compute.c
@@ -53,7 +53,7 @@ panfrost_create_compute_state(
panfrost_shader_compile(ctx, v->tripipe,
cso->ir_type, cso->prog,
- MESA_SHADER_COMPUTE, v);
+ MESA_SHADER_COMPUTE, v, NULL);
diff --git a/src/gallium/drivers/panfrost/pan_context.c b/src/gallium/drivers/panfrost/pan_context.c
index e6cbd057818..79995fa11c7 100644
--- a/src/gallium/drivers/panfrost/pan_context.c
+++ b/src/gallium/drivers/panfrost/pan_context.c
@@ -2118,12 +2118,15 @@ panfrost_bind_shader_state(
/* We finally have a variant, so compile it */
if (!shader_state->compiled) {
+ uint64_t outputs_written = 0;
+
panfrost_shader_compile(ctx, shader_state->tripipe,
variants->base.type,
variants->base.type == PIPE_SHADER_IR_NIR ?
variants->base.ir.nir :
variants->base.tokens,
- tgsi_processor_to_shader_stage(type), shader_state);
+ tgsi_processor_to_shader_stage(type), shader_state,
+ &outputs_written);
shader_state->compiled = true;
}
diff --git a/src/gallium/drivers/panfrost/pan_context.h b/src/gallium/drivers/panfrost/pan_context.h
index 3eac35023ce..cf9b93d68c5 100644
--- a/src/gallium/drivers/panfrost/pan_context.h
+++ b/src/gallium/drivers/panfrost/pan_context.h
@@ -333,7 +333,8 @@ panfrost_shader_compile(
enum pipe_shader_ir ir_type,
const void *ir,
gl_shader_stage stage,
- struct panfrost_shader_state *state);
+ struct panfrost_shader_state *state,
+ uint64_t *outputs_written);
void
panfrost_pack_work_groups_compute(