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:
parent
9950523368
commit
84a1a2578d
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue