#include "intel/compiler/brw_nir.h"
#include "iris_context.h"
-#define KEY_INIT_NO_ID \
+#define KEY_INIT_NO_ID(gen) \
.tex.swizzles[0 ... MAX_SAMPLERS - 1] = 0x688, \
.tex.compressed_multisample_layout_mask = ~0, \
- .tex.msaa_16 = ~0
-#define KEY_INIT .program_string_id = ish->program_id, KEY_INIT_NO_ID
+ .tex.msaa_16 = (gen >= 9 ? ~0 : 0)
+#define KEY_INIT(gen) .program_string_id = ish->program_id, KEY_INIT_NO_ID(gen)
static unsigned
get_new_program_id(struct iris_screen *screen)
{
struct iris_uncompiled_shader *ish =
ice->shaders.uncompiled[MESA_SHADER_VERTEX];
+ struct iris_screen *screen = (struct iris_screen *)ice->ctx.screen;
+ const struct gen_device_info *devinfo = &screen->devinfo;
- struct brw_vs_prog_key key = { KEY_INIT };
+ struct brw_vs_prog_key key = { KEY_INIT(devinfo->gen) };
ice->vtbl.populate_vs_key(ice, &ish->nir->info, &key);
struct iris_compiled_shader *old = ice->shaders.prog[IRIS_CACHE_VS];
{
struct iris_uncompiled_shader *tcs =
ice->shaders.uncompiled[MESA_SHADER_TESS_CTRL];
+ struct iris_screen *screen = (struct iris_screen *)ice->ctx.screen;
+ const struct gen_device_info *devinfo = &screen->devinfo;
const struct shader_info *tes_info =
iris_get_shader_info(ice, MESA_SHADER_TESS_EVAL);
struct brw_tcs_prog_key key = {
- KEY_INIT_NO_ID,
+ KEY_INIT_NO_ID(devinfo->gen),
.program_string_id = tcs ? tcs->program_id : 0,
.tes_primitive_mode = tes_info->tess.primitive_mode,
.input_vertices = ice->state.vertices_per_patch,
{
struct iris_uncompiled_shader *ish =
ice->shaders.uncompiled[MESA_SHADER_TESS_EVAL];
+ struct iris_screen *screen = (struct iris_screen *)ice->ctx.screen;
+ const struct gen_device_info *devinfo = &screen->devinfo;
- struct brw_tes_prog_key key = { KEY_INIT };
+ struct brw_tes_prog_key key = { KEY_INIT(devinfo->gen) };
get_unified_tess_slots(ice, &key.inputs_read, &key.patch_inputs_read);
ice->vtbl.populate_tes_key(ice, &key);
struct iris_compiled_shader *shader = NULL;
if (ish) {
- struct brw_gs_prog_key key = { KEY_INIT };
+ struct iris_screen *screen = (struct iris_screen *)ice->ctx.screen;
+ const struct gen_device_info *devinfo = &screen->devinfo;
+ struct brw_gs_prog_key key = { KEY_INIT(devinfo->gen) };
ice->vtbl.populate_gs_key(ice, &key);
shader =
{
struct iris_uncompiled_shader *ish =
ice->shaders.uncompiled[MESA_SHADER_FRAGMENT];
- struct brw_wm_prog_key key = { KEY_INIT };
+ struct iris_screen *screen = (struct iris_screen *)ice->ctx.screen;
+ const struct gen_device_info *devinfo = &screen->devinfo;
+ struct brw_wm_prog_key key = { KEY_INIT(devinfo->gen) };
ice->vtbl.populate_fs_key(ice, &key);
if (ish->nos & (1ull << IRIS_NOS_LAST_VUE_MAP))
struct iris_uncompiled_shader *ish =
ice->shaders.uncompiled[MESA_SHADER_COMPUTE];
- struct brw_cs_prog_key key = { KEY_INIT };
+ struct iris_screen *screen = (struct iris_screen *)ice->ctx.screen;
+ const struct gen_device_info *devinfo = &screen->devinfo;
+ struct brw_cs_prog_key key = { KEY_INIT(devinfo->gen) };
ice->vtbl.populate_cs_key(ice, &key);
struct iris_compiled_shader *old = ice->shaders.prog[IRIS_CACHE_CS];
ish->nos |= (1ull << IRIS_NOS_RASTERIZER);
if (screen->precompile) {
- struct brw_vs_prog_key key = { KEY_INIT };
+ const struct gen_device_info *devinfo = &screen->devinfo;
+ struct brw_vs_prog_key key = { KEY_INIT(devinfo->gen) };
iris_compile_vs(ice, ish, &key);
}
if (screen->precompile) {
const unsigned _GL_TRIANGLES = 0x0004;
+ const struct gen_device_info *devinfo = &screen->devinfo;
struct brw_tcs_prog_key key = {
- KEY_INIT,
+ KEY_INIT(devinfo->gen),
// XXX: make sure the linker fills this out from the TES...
.tes_primitive_mode =
info->tess.primitive_mode ? info->tess.primitive_mode
// XXX: NOS?
if (screen->precompile) {
+ const struct gen_device_info *devinfo = &screen->devinfo;
struct brw_tes_prog_key key = {
- KEY_INIT,
+ KEY_INIT(devinfo->gen),
// XXX: not ideal, need TCS output/TES input unification
.inputs_read = info->inputs_read,
.patch_inputs_read = info->patch_inputs_read,
// XXX: NOS?
if (screen->precompile) {
- struct brw_gs_prog_key key = { KEY_INIT };
+ const struct gen_device_info *devinfo = &screen->devinfo;
+ struct brw_gs_prog_key key = { KEY_INIT(devinfo->gen) };
iris_compile_gs(ice, ish, &key);
}
bool can_rearrange_varyings =
util_bitcount64(info->inputs_read & BRW_FS_VARYING_INPUT_MASK) <= 16;
+ const struct gen_device_info *devinfo = &screen->devinfo;
struct brw_wm_prog_key key = {
- KEY_INIT,
+ KEY_INIT(devinfo->gen),
.nr_color_regions = util_bitcount(color_outputs),
.coherent_fb_fetch = true,
.input_slots_valid =
// XXX: disallow more than 64KB of shared variables
if (screen->precompile) {
- struct brw_cs_prog_key key = { KEY_INIT };
+ const struct gen_device_info *devinfo = &screen->devinfo;
+ struct brw_cs_prog_key key = { KEY_INIT(devinfo->gen) };
iris_compile_cs(ice, ish, &key);
}