diff options
author | Alyssa Rosenzweig <[email protected]> | 2019-08-07 10:26:12 -0700 |
---|---|---|
committer | Alyssa Rosenzweig <[email protected]> | 2019-08-13 09:43:17 -0700 |
commit | 5b0a1a4e49b49cb61d9369d3aaacfe1d124571c8 (patch) | |
tree | 84c5fce845d85598f178a6920bba66510c02a0e0 | |
parent | f714eab882d90f4b9c8643dc070cbc81a48bb323 (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.c | 6 | ||||
-rw-r--r-- | src/gallium/drivers/panfrost/pan_compute.c | 2 | ||||
-rw-r--r-- | src/gallium/drivers/panfrost/pan_context.c | 5 | ||||
-rw-r--r-- | src/gallium/drivers/panfrost/pan_context.h | 3 |
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( |