/** A bitfield of per-vertex inputs read. */
uint64_t inputs_read;
+
+ /**
+ * How many user clipping planes are being uploaded to the tessellation
+ * evaluation shader as push constants.
+ *
+ * These are used for lowering legacy gl_ClipVertex/gl_Position clipping to
+ * clip distances.
+ */
+ unsigned nr_userclip_plane_consts:4;
};
/** The program key for Geometry Shaders. */
struct brw_gs_prog_key
{
struct brw_base_prog_key base;
+
+ /**
+ * How many user clipping planes are being uploaded to the geometry shader
+ * as push constants.
+ *
+ * These are used for lowering legacy gl_ClipVertex/gl_Position clipping to
+ * clip distances.
+ */
+ unsigned nr_userclip_plane_consts:4;
};
enum brw_sf_primitive {
unsigned program_size;
+ /** Does this program pull from any UBO or other constant buffers? */
+ bool has_ubo_pull;
+
/**
* Register where the thread expects to find input data from the URB
* (typically uniforms, followed by vertex or fragment attributes).
unsigned local_size[3];
unsigned simd_size;
unsigned threads;
+ unsigned slm_size;
bool uses_barrier;
bool uses_num_work_groups;
DEFINE_PROG_DATA_DOWNCAST(sf)
#undef DEFINE_PROG_DATA_DOWNCAST
+struct brw_compile_stats {
+ uint32_t dispatch_width; /**< 0 for vec4 */
+ uint32_t instructions;
+ uint32_t loops;
+ uint32_t cycles;
+ uint32_t spills;
+ uint32_t fills;
+};
+
/** @} */
struct brw_compiler *
struct brw_vs_prog_data *prog_data,
struct nir_shader *shader,
int shader_time_index,
+ struct brw_compile_stats *stats,
char **error_str);
/**
struct brw_tcs_prog_data *prog_data,
struct nir_shader *nir,
int shader_time_index,
+ struct brw_compile_stats *stats,
char **error_str);
/**
const struct brw_vue_map *input_vue_map,
struct brw_tes_prog_data *prog_data,
struct nir_shader *shader,
- struct gl_program *prog,
int shader_time_index,
+ struct brw_compile_stats *stats,
char **error_str);
/**
struct nir_shader *shader,
struct gl_program *prog,
int shader_time_index,
+ struct brw_compile_stats *stats,
char **error_str);
/**
const struct brw_wm_prog_key *key,
struct brw_wm_prog_data *prog_data,
struct nir_shader *shader,
- struct gl_program *prog,
int shader_time_index8,
int shader_time_index16,
int shader_time_index32,
bool allow_spilling,
bool use_rep_send, struct brw_vue_map *vue_map,
+ struct brw_compile_stats *stats, /**< Array of three stats */
char **error_str);
/**
struct brw_cs_prog_data *prog_data,
const struct nir_shader *shader,
int shader_time_index,
+ struct brw_compile_stats *stats,
char **error_str);
void brw_debug_key_recompile(const struct brw_compiler *c, void *log,
* '2^n - 1' for some n.
*/
static inline bool
-brw_stage_has_packed_dispatch(MAYBE_UNUSED const struct gen_device_info *devinfo,
+brw_stage_has_packed_dispatch(ASSERTED const struct gen_device_info *devinfo,
gl_shader_stage stage,
const struct brw_stage_prog_data *prog_data)
{
* to do a full test run with brw_fs_test_dispatch_packing() hooked up to
* the NIR front-end before changing this assertion.
*/
- assert(devinfo->gen <= 11);
+ assert(devinfo->gen <= 12);
switch (stage) {
case MESA_SHADER_FRAGMENT: {