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 <alyssa.rosenzweig@collabora.com>
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
This commit is contained in:
Alyssa Rosenzweig 2019-08-07 10:26:12 -07:00
parent f714eab882
commit 5b0a1a4e49
4 changed files with 12 additions and 4 deletions

View File

@ -41,7 +41,8 @@ panfrost_shader_compile(
enum pipe_shader_ir ir_type, enum pipe_shader_ir ir_type,
const void *ir, const void *ir,
gl_shader_stage stage, 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); struct panfrost_screen *screen = pan_screen(ctx->base.screen);
uint8_t *dst; uint8_t *dst;
@ -118,6 +119,9 @@ panfrost_shader_compile(
state->reads_point_coord = false; state->reads_point_coord = false;
state->helper_invocations = s->info.fs.needs_helper_invocations; 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 */ /* Separate as primary uniform count is truncated */
state->uniform_count = program.uniform_count; state->uniform_count = program.uniform_count;

View File

@ -53,7 +53,7 @@ panfrost_create_compute_state(
panfrost_shader_compile(ctx, v->tripipe, panfrost_shader_compile(ctx, v->tripipe,
cso->ir_type, cso->prog, cso->ir_type, cso->prog,
MESA_SHADER_COMPUTE, v); MESA_SHADER_COMPUTE, v, NULL);

View File

@ -2118,12 +2118,15 @@ panfrost_bind_shader_state(
/* We finally have a variant, so compile it */ /* We finally have a variant, so compile it */
if (!shader_state->compiled) { if (!shader_state->compiled) {
uint64_t outputs_written = 0;
panfrost_shader_compile(ctx, shader_state->tripipe, panfrost_shader_compile(ctx, shader_state->tripipe,
variants->base.type, variants->base.type,
variants->base.type == PIPE_SHADER_IR_NIR ? variants->base.type == PIPE_SHADER_IR_NIR ?
variants->base.ir.nir : variants->base.ir.nir :
variants->base.tokens, 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; shader_state->compiled = true;
} }

View File

@ -333,7 +333,8 @@ panfrost_shader_compile(
enum pipe_shader_ir ir_type, enum pipe_shader_ir ir_type,
const void *ir, const void *ir,
gl_shader_stage stage, gl_shader_stage stage,
struct panfrost_shader_state *state); struct panfrost_shader_state *state,
uint64_t *outputs_written);
void void
panfrost_pack_work_groups_compute( panfrost_pack_work_groups_compute(