[Mesa-dev] [PATCH 3/3] radeonsi: use #pragma pack to pack si_shader_key
Nicolai Hähnle
nhaehnle at gmail.com
Thu Jun 22 07:19:52 UTC 2017
On 20.06.2017 20:00, Marek Olšák wrote:
> From: Marek Olšák <marek.olsak at amd.com>
>
> sizeof(struct si_shader_key):
> Before reverting the 2 commits: 120 bytes
> After reverting the 2 commits: 128 bytes
> With #pragma pack: 107 bytes
>
> I'm not sure if memcmp with a byte-aligned size is a good idea.
Does this have a measurable impact? The code is nicer to read with the
structure after the patches, but I'm not sure it's worth the risk of
getting misaligned data somewhere.
Nicolai
> ---
> src/gallium/drivers/radeonsi/si_shader.h | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
> diff --git a/src/gallium/drivers/radeonsi/si_shader.h b/src/gallium/drivers/radeonsi/si_shader.h
> index 185bb8d..6432126 100644
> --- a/src/gallium/drivers/radeonsi/si_shader.h
> +++ b/src/gallium/drivers/radeonsi/si_shader.h
> @@ -371,20 +371,25 @@ struct si_shader_selector {
> * GFX6 - with GS: ES | | | GS | VS | PS
> * - with tess: LS | HS | VS | | | PS
> * - with both: LS | HS | ES | GS | VS | PS
> * GFX9 - with GS: -> | | | GS | VS | PS
> * - with tess: -> | HS | VS | | | PS
> * - with both: -> | HS | -> | GS | VS | PS
> *
> * -> = merged with the next stage
> */
>
> +/* Use the byte alignment for all following structure members for optimal
> + * shader key memory footprint.
> + */
> +#pragma pack(push, 1)
> +
> /* Common VS bits between the shader key and the prolog key. */
> struct si_vs_prolog_bits {
> unsigned instance_divisors[SI_MAX_ATTRIBS];
> };
>
> /* Common TCS bits between the shader key and the epilog key. */
> struct si_tcs_epilog_bits {
> unsigned prim_mode:3;
> unsigned tes_reads_tess_factors:1;
> };
> @@ -507,20 +512,23 @@ struct si_shader_key {
> /* For shaders where monolithic variants have better code.
> *
> * This is a flag that has no effect on code generation,
> * but forces monolithic shaders to be used as soon as
> * possible, because it's in the "opt" group.
> */
> unsigned prefer_mono:1;
> } opt;
> };
>
> +/* Restore the pack alignment to default. */
> +#pragma pack(pop)
> +
> struct si_shader_config {
> unsigned num_sgprs;
> unsigned num_vgprs;
> unsigned spilled_sgprs;
> unsigned spilled_vgprs;
> unsigned private_mem_vgprs;
> unsigned lds_size;
> unsigned spi_ps_input_ena;
> unsigned spi_ps_input_addr;
> unsigned float_mode;
>
--
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.
More information about the mesa-dev
mailing list