compiler: pack shader_info from 160 bytes to 96 bytes

Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
This commit is contained in:
Marek Olšák 2019-11-05 19:10:09 -05:00
parent 9950523368
commit 84a1a2578d
1 changed files with 67 additions and 67 deletions

View File

@ -90,25 +90,25 @@ typedef struct shader_info {
const char *label; const char *label;
/** The shader stage, such as MESA_SHADER_VERTEX. */ /** The shader stage, such as MESA_SHADER_VERTEX. */
gl_shader_stage stage; gl_shader_stage stage:8;
/** The shader stage in a non SSO linked program that follows this stage, /** The shader stage in a non SSO linked program that follows this stage,
* such as MESA_SHADER_FRAGMENT. * such as MESA_SHADER_FRAGMENT.
*/ */
gl_shader_stage next_stage; gl_shader_stage next_stage:8;
/* Number of textures used by this shader */ /* Number of textures used by this shader */
unsigned num_textures; uint8_t num_textures;
/* Number of uniform buffers used by this shader */ /* Number of uniform buffers used by this shader */
unsigned num_ubos; uint8_t num_ubos;
/* Number of atomic buffers used by this shader */ /* Number of atomic buffers used by this shader */
unsigned num_abos; uint8_t num_abos;
/* Number of shader storage buffers used by this shader */ /* Number of shader storage buffers used by this shader */
unsigned num_ssbos; uint8_t num_ssbos;
/* Number of images used by this shader */ /* Number of images used by this shader */
unsigned num_images; uint8_t num_images;
/* Index of the last MSAA image. */ /* Index of the last MSAA image. */
int last_msaa_image; int8_t last_msaa_image;
/* Which inputs are actually read */ /* Which inputs are actually read */
uint64_t inputs_read; uint64_t inputs_read;
@ -126,47 +126,47 @@ typedef struct shader_info {
/* Which patch outputs are read */ /* Which patch outputs are read */
uint32_t patch_outputs_read; uint32_t patch_outputs_read;
/* Whether or not this shader ever uses textureGather() */
bool uses_texture_gather;
/** Bitfield of which textures are used */ /** Bitfield of which textures are used */
uint32_t textures_used; uint32_t textures_used;
/** Bitfield of which textures are used by texelFetch() */ /** Bitfield of which textures are used by texelFetch() */
uint32_t textures_used_by_txf; uint32_t textures_used_by_txf;
/* SPV_KHR_float_controls: execution mode for floating point ops */
uint16_t float_controls_execution_mode;
/* The size of the gl_ClipDistance[] array, if declared. */
uint8_t clip_distance_array_size:4;
/* The size of the gl_CullDistance[] array, if declared. */
uint8_t cull_distance_array_size:4;
/* Whether or not this shader ever uses textureGather() */
bool uses_texture_gather:1;
/** /**
* True if this shader uses the fddx/fddy opcodes. * True if this shader uses the fddx/fddy opcodes.
* *
* Note that this does not include the "fine" and "coarse" variants. * Note that this does not include the "fine" and "coarse" variants.
*/ */
bool uses_fddx_fddy; bool uses_fddx_fddy:1;
/** /**
* True if this shader uses 64-bit ALU operations * True if this shader uses 64-bit ALU operations
*/ */
bool uses_64bit; bool uses_64bit:1;
/* The size of the gl_ClipDistance[] array, if declared. */
unsigned clip_distance_array_size;
/* The size of the gl_CullDistance[] array, if declared. */
unsigned cull_distance_array_size;
/* Whether the first UBO is the default uniform buffer, i.e. uniforms. */ /* Whether the first UBO is the default uniform buffer, i.e. uniforms. */
bool first_ubo_is_default_ubo; bool first_ubo_is_default_ubo:1;
/* Whether or not separate shader objects were used */ /* Whether or not separate shader objects were used */
bool separate_shader; bool separate_shader:1;
/** Was this shader linked with any transform feedback varyings? */ /** Was this shader linked with any transform feedback varyings? */
bool has_transform_feedback_varyings; bool has_transform_feedback_varyings:1;
/* Whether flrp has been lowered. */ /* Whether flrp has been lowered. */
bool flrp_lowered; bool flrp_lowered:1;
/* SPV_KHR_float_controls: execution mode for floating point ops */
unsigned float_controls_execution_mode;
union { union {
struct { struct {
@ -178,37 +178,37 @@ typedef struct shader_info {
* *
* Valid values: SI_VS_BLIT_SGPRS_POS_* * Valid values: SI_VS_BLIT_SGPRS_POS_*
*/ */
unsigned blit_sgprs_amd; uint8_t blit_sgprs_amd:4;
/* True if the shader writes position in window space coordinates pre-transform */ /* True if the shader writes position in window space coordinates pre-transform */
bool window_space_position; bool window_space_position:1;
} vs; } vs;
struct { struct {
/** The number of vertices recieves per input primitive */
unsigned vertices_in;
/** The output primitive type (GL enum value) */ /** The output primitive type (GL enum value) */
unsigned output_primitive; uint16_t output_primitive;
/** The input primitive type (GL enum value) */ /** The input primitive type (GL enum value) */
unsigned input_primitive; uint16_t input_primitive;
/** The maximum number of vertices the geometry shader might write. */ /** The maximum number of vertices the geometry shader might write. */
unsigned vertices_out; uint16_t vertices_out;
/** 1 .. MAX_GEOMETRY_SHADER_INVOCATIONS */ /** 1 .. MAX_GEOMETRY_SHADER_INVOCATIONS */
unsigned invocations; uint8_t invocations;
/** The number of vertices recieves per input primitive (max. 6) */
uint8_t vertices_in:3;
/** Whether or not this shader uses EndPrimitive */ /** Whether or not this shader uses EndPrimitive */
bool uses_end_primitive; bool uses_end_primitive:1;
/** Whether or not this shader uses non-zero streams */ /** Whether or not this shader uses non-zero streams */
bool uses_streams; bool uses_streams:1;
} gs; } gs;
struct { struct {
bool uses_discard; bool uses_discard:1;
/** /**
* True if this fragment shader requires helper invocations. This * True if this fragment shader requires helper invocations. This
@ -216,38 +216,38 @@ typedef struct shader_info {
* instructions which do implicit derivatives, and the use of quad * instructions which do implicit derivatives, and the use of quad
* subgroup operations. * subgroup operations.
*/ */
bool needs_helper_invocations; bool needs_helper_invocations:1;
/** /**
* Whether any inputs are declared with the "sample" qualifier. * Whether any inputs are declared with the "sample" qualifier.
*/ */
bool uses_sample_qualifier; bool uses_sample_qualifier:1;
/** /**
* Whether early fragment tests are enabled as defined by * Whether early fragment tests are enabled as defined by
* ARB_shader_image_load_store. * ARB_shader_image_load_store.
*/ */
bool early_fragment_tests; bool early_fragment_tests:1;
/** /**
* Defined by INTEL_conservative_rasterization. * Defined by INTEL_conservative_rasterization.
*/ */
bool inner_coverage; bool inner_coverage:1;
bool post_depth_coverage; bool post_depth_coverage:1;
/** /**
* \name ARB_fragment_coord_conventions * \name ARB_fragment_coord_conventions
* @{ * @{
*/ */
bool pixel_center_integer; bool pixel_center_integer:1;
bool origin_upper_left; bool origin_upper_left:1;
/*@}*/ /*@}*/
bool pixel_interlock_ordered; bool pixel_interlock_ordered:1;
bool pixel_interlock_unordered; bool pixel_interlock_unordered:1;
bool sample_interlock_ordered; bool sample_interlock_ordered:1;
bool sample_interlock_unordered; bool sample_interlock_unordered:1;
/** /**
* Flags whether NIR's base types on the FS color outputs should be * Flags whether NIR's base types on the FS color outputs should be
@ -266,24 +266,29 @@ typedef struct shader_info {
* fixups are necessary to handle effectively untyped data being * fixups are necessary to handle effectively untyped data being
* output from the FS. * output from the FS.
*/ */
bool untyped_color_outputs; bool untyped_color_outputs:1;
/** gl_FragDepth layout for ARB_conservative_depth. */ /** gl_FragDepth layout for ARB_conservative_depth. */
enum gl_frag_depth_layout depth_layout; enum gl_frag_depth_layout depth_layout:3;
} fs; } fs;
struct { struct {
unsigned local_size[3]; uint16_t local_size[3];
bool local_size_variable; bool local_size_variable:1;
char user_data_components_amd; uint8_t user_data_components_amd:3;
/*
* Arrangement of invocations used to calculate derivatives in a compute
* shader. From NV_compute_shader_derivatives.
*/
enum gl_derivative_group derivative_group:2;
/** /**
* Size of shared variables accessed by the compute shader. * Size of shared variables accessed by the compute shader.
*/ */
unsigned shared_size; unsigned shared_size;
/** /**
* pointer size is: * pointer size is:
* AddressingModelLogical: 0 (default) * AddressingModelLogical: 0 (default)
@ -291,24 +296,19 @@ typedef struct shader_info {
* AddressingModelPhysical64: 64 * AddressingModelPhysical64: 64
*/ */
unsigned ptr_size; unsigned ptr_size;
/*
* Arrangement of invocations used to calculate derivatives in a compute
* shader. From NV_compute_shader_derivatives.
*/
enum gl_derivative_group derivative_group;
} cs; } cs;
/* Applies to both TCS and TES. */ /* Applies to both TCS and TES. */
struct { struct {
/** The number of vertices in the TCS output patch. */ uint16_t primitive_mode; /* GL_TRIANGLES, GL_QUADS or GL_ISOLINES */
unsigned tcs_vertices_out;
/** The number of vertices in the TCS output patch. */
uint8_t tcs_vertices_out;
enum gl_tess_spacing spacing:2;
uint32_t primitive_mode; /* GL_TRIANGLES, GL_QUADS or GL_ISOLINES */
enum gl_tess_spacing spacing;
/** Is the vertex order counterclockwise? */ /** Is the vertex order counterclockwise? */
bool ccw; bool ccw:1;
bool point_mode; bool point_mode:1;
} tess; } tess;
}; };
} shader_info; } shader_info;