struct brw_wm_prog_data prog_data;
nir_shader *nir = brw_blorp_build_nir_shader(blorp, mem_ctx, prog_key);
- nir->info.name = ralloc_strdup(nir, blorp_shader_type_to_name(prog_key->shader_type));
+ nir->info.name =
+ ralloc_strdup(nir, blorp_shader_type_to_name(prog_key->base.shader_type));
struct brw_wm_prog_key wm_key;
brw_blorp_init_wm_prog_key(&wm_key);
isl_format_get_layout(params.src.view.format);
struct brw_blorp_blit_prog_key wm_prog_key = {
- .shader_type = BLORP_SHADER_TYPE_BLIT,
+ .base = BRW_BLORP_BASE_KEY_INIT(BLORP_SHADER_TYPE_BLIT),
.filter = filter,
.sint32_to_uint = src_fmtl->channels.r.bits == 32 &&
isl_format_has_sint_channel(params.src.view.format) &&
dst_layer, ISL_FORMAT_UNSUPPORTED, true);
struct brw_blorp_blit_prog_key wm_prog_key = {
- .shader_type = BLORP_SHADER_TYPE_COPY,
+ .base = BRW_BLORP_BASE_KEY_INIT(BLORP_SHADER_TYPE_COPY),
.filter = BLORP_FILTER_NONE,
.need_src_offset = src_surf->tile_x_sa || src_surf->tile_y_sa,
.need_dst_offset = dst_surf->tile_x_sa || dst_surf->tile_y_sa,
#pragma pack(push, 1)
struct brw_blorp_const_color_prog_key
{
- enum blorp_shader_type shader_type; /* Must be BLORP_SHADER_TYPE_CLEAR */
+ struct brw_blorp_base_key base;
bool use_simd16_replicated_data;
bool clear_rgb_as_red;
};
struct blorp_context *blorp = batch->blorp;
const struct brw_blorp_const_color_prog_key blorp_key = {
- .shader_type = BLORP_SHADER_TYPE_CLEAR,
+ .base = BRW_BLORP_BASE_KEY_INIT(BLORP_SHADER_TYPE_CLEAR),
.use_simd16_replicated_data = use_replicated_data,
.clear_rgb_as_red = clear_rgb_as_red,
};
nir_builder b;
blorp_nir_init_shader(&b, mem_ctx, MESA_SHADER_FRAGMENT,
- blorp_shader_type_to_name(blorp_key.shader_type));
+ blorp_shader_type_to_name(blorp_key.base.shader_type));
nir_variable *v_color =
BLORP_CREATE_NIR_INPUT(b.shader, clear_color, glsl_vec4_type());
#pragma pack(push, 1)
struct layer_offset_vs_key {
- enum blorp_shader_type shader_type;
+ struct brw_blorp_base_key base;
unsigned num_inputs;
};
#pragma pack(pop)
{
struct blorp_context *blorp = batch->blorp;
struct layer_offset_vs_key blorp_key = {
- .shader_type = BLORP_SHADER_TYPE_LAYER_OFFSET_VS,
+ .base = BRW_BLORP_BASE_KEY_INIT(BLORP_SHADER_TYPE_LAYER_OFFSET_VS),
};
if (params->wm_prog_data)
nir_builder b;
blorp_nir_init_shader(&b, mem_ctx, MESA_SHADER_VERTEX,
- blorp_shader_type_to_name(blorp_key.shader_type));
+ blorp_shader_type_to_name(blorp_key.base.shader_type));
const struct glsl_type *uvec4_type = glsl_vector_type(GLSL_TYPE_UINT, 4);
#pragma pack(push, 1)
struct blorp_mcs_partial_resolve_key
{
- enum blorp_shader_type shader_type;
+ struct brw_blorp_base_key base;
bool indirect_clear_color;
bool int_format;
uint32_t num_samples;
{
struct blorp_context *blorp = batch->blorp;
const struct blorp_mcs_partial_resolve_key blorp_key = {
- .shader_type = BLORP_SHADER_TYPE_MCS_PARTIAL_RESOLVE,
+ .base = BRW_BLORP_BASE_KEY_INIT(BLORP_SHADER_TYPE_MCS_PARTIAL_RESOLVE),
.indirect_clear_color = params->dst.clear_color_addr.buffer != NULL,
.int_format = isl_format_has_int_channel(params->dst.view.format),
.num_samples = params->num_samples,
nir_builder b;
blorp_nir_init_shader(&b, mem_ctx, MESA_SHADER_FRAGMENT,
- blorp_shader_type_to_name(blorp_key.shader_type));
+ blorp_shader_type_to_name(blorp_key.base.shader_type));
nir_variable *v_color =
BLORP_CREATE_NIR_INPUT(b.shader, clear_color, glsl_vec4_type());
BLORP_SHADER_TYPE_GFX4_SF,
};
+struct brw_blorp_base_key
+{
+ char name[8];
+ enum blorp_shader_type shader_type;
+};
+
+#define BRW_BLORP_BASE_KEY_INIT(_type) \
+ (struct brw_blorp_base_key) { \
+ .name = "blorp", \
+ .shader_type = _type, \
+ }
+
struct brw_blorp_blit_prog_key
{
- enum blorp_shader_type shader_type; /* Must be BLORP_SHADER_TYPE_BLIT */
+ struct brw_blorp_base_key base;
/* Number of samples per pixel that have been configured in the surface
* state for texturing from.