return true;
}
+static uint32_t
+zink_flat_flags(struct nir_shader *shader)
+{
+ uint32_t flat_flags = 0, c = 0;
+ nir_foreach_shader_in_variable(var, shader) {
+ if (var->data.interpolation == INTERP_MODE_FLAT)
+ flat_flags |= 1u << (c++);
+ }
+
+ return flat_flags;
+}
+
struct zink_shader *
zink_shader_create(struct zink_screen *screen, struct nir_shader *nir,
const struct pipe_stream_output_info *so_info)
if (nir->info.stage < MESA_SHADER_FRAGMENT)
have_psiz = check_psiz(nir);
+ if (nir->info.stage == MESA_SHADER_FRAGMENT)
+ ret->flat_flags = zink_flat_flags(nir);
if (!gl_shader_stage_is_compute(nir->info.stage) && nir->info.separate_shader)
NIR_PASS_V(nir, fixup_io_locations);
++shader->info.num_inlinable_uniforms;
}
-static uint32_t
-zink_flat_flags(struct nir_shader *shader)
-{
- uint32_t flat_flags = 0, c = 0;
- nir_foreach_shader_in_variable(var, shader) {
- if (var->data.interpolation == INTERP_MODE_FLAT)
- flat_flags |= 1u << (c++);
- }
-
- return flat_flags;
-}
-
static unsigned
encode_lower_pv_mode(enum pipe_prim_type prim_type)
{
}
ctx->base.set_inlinable_constants(&ctx->base, MESA_SHADER_GEOMETRY, 2,
- (uint32_t []){zink_flat_flags(ctx->gfx_stages[MESA_SHADER_FRAGMENT]->nir),
+ (uint32_t []){ctx->gfx_stages[MESA_SHADER_FRAGMENT]->flat_flags,
ctx->gfx_pipeline_state.dyn_state3.pv_last});
} else if (ctx->gfx_stages[MESA_SHADER_GEOMETRY] &&
ctx->gfx_stages[MESA_SHADER_GEOMETRY]->non_fs.is_generated)
unsigned num_texel_buffers;
uint32_t ubos_used; // bitfield of which ubo indices are used
uint32_t ssbos_used; // bitfield of which ssbo indices are used
+ uint32_t flat_flags;
bool bindless;
bool can_inline;
bool has_uniforms;