diff options
author | Marek Olšák <marek.olsak@amd.com> | 2017-06-09 17:26:27 +0200 |
---|---|---|
committer | Marek Olšák <marek.olsak@amd.com> | 2017-06-12 18:24:37 +0200 |
commit | 6b6fed3a3c81c2b0d319ef121df20a0dc914705f (patch) | |
tree | 7c6c044428bf8a1c9bb840ec595ba94592272b1a | |
parent | 7b2240ac9ce3ba9bd86f4ae8aac53af8878c0b10 (diff) |
radeonsi: remove 8 bytes from si_shader_key with uint32_t ff_tcs_inputs_to_copy
The previous patch helps with this.
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
-rw-r--r-- | src/gallium/drivers/radeonsi/si_shader.c | 8 | ||||
-rw-r--r-- | src/gallium/drivers/radeonsi/si_shader.h | 3 | ||||
-rw-r--r-- | src/gallium/drivers/radeonsi/si_state_shaders.c | 8 |
3 files changed, 14 insertions, 5 deletions
diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c index 4ee4a64f53..e525a18076 100644 --- a/src/gallium/drivers/radeonsi/si_shader.c +++ b/src/gallium/drivers/radeonsi/si_shader.c @@ -2493,7 +2493,8 @@ static void si_copy_tcs_inputs(struct lp_build_tgsi_context *bld_base) lds_base = get_tcs_in_current_patch_offset(ctx); lds_base = LLVMBuildAdd(gallivm->builder, lds_base, lds_vertex_offset, ""); - inputs = ctx->shader->key.mono.u.ff_tcs_inputs_to_copy; + inputs = ctx->shader->key.mono.u.ff_tcs_inputs_to_copy[0] | + ((uint64_t)ctx->shader->key.mono.u.ff_tcs_inputs_to_copy[1] << 32); while (inputs) { unsigned i = u_bit_scan64(&inputs); @@ -5284,7 +5285,10 @@ static void si_dump_shader_key(unsigned processor, const struct si_shader *shade "part.tcs.ls_prolog", f); } fprintf(f, " part.tcs.epilog.prim_mode = %u\n", key->part.tcs.epilog.prim_mode); - fprintf(f, " mono.u.ff_tcs_inputs_to_copy = 0x%"PRIx64"\n", key->mono.u.ff_tcs_inputs_to_copy); + fprintf(f, " mono.u.ff_tcs_inputs_to_copy[0] = 0x%x\n", + key->mono.u.ff_tcs_inputs_to_copy[0]); + fprintf(f, " mono.u.ff_tcs_inputs_to_copy[1] = 0x%x\n", + key->mono.u.ff_tcs_inputs_to_copy[1]); break; case PIPE_SHADER_TESS_EVAL: diff --git a/src/gallium/drivers/radeonsi/si_shader.h b/src/gallium/drivers/radeonsi/si_shader.h index 76e09b27e7..ed1df2bfa7 100644 --- a/src/gallium/drivers/radeonsi/si_shader.h +++ b/src/gallium/drivers/radeonsi/si_shader.h @@ -492,7 +492,8 @@ struct si_shader_key { uint8_t vs_fix_fetch[SI_MAX_ATTRIBS]; union { - uint64_t ff_tcs_inputs_to_copy; /* for fixed-func TCS */ + /* Don't use "uint64_t" in order to get 32-bit alignment. */ + uint32_t ff_tcs_inputs_to_copy[2]; /* for fixed-func TCS */ /* When PS needs PrimID and GS is disabled. */ unsigned vs_export_prim_id:1; } u; diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.c b/src/gallium/drivers/radeonsi/si_state_shaders.c index 15e46b5a5e..6247b9c006 100644 --- a/src/gallium/drivers/radeonsi/si_state_shaders.c +++ b/src/gallium/drivers/radeonsi/si_state_shaders.c @@ -1283,8 +1283,12 @@ static inline void si_shader_selector_key(struct pipe_context *ctx, key->part.tcs.epilog.tes_reads_tess_factors = sctx->tes_shader.cso->info.reads_tess_factors; - if (sel == sctx->fixed_func_tcs_shader.cso) - key->mono.u.ff_tcs_inputs_to_copy = sctx->vs_shader.cso->outputs_written; + if (sel == sctx->fixed_func_tcs_shader.cso) { + uint64_t outputs_written = sctx->vs_shader.cso->outputs_written; + + key->mono.u.ff_tcs_inputs_to_copy[0] = outputs_written; + key->mono.u.ff_tcs_inputs_to_copy[1] = outputs_written >> 32; + } break; case PIPE_SHADER_TESS_EVAL: if (sctx->gs_shader.cso) |