}
static void
-setup_ngg_lds_layout(nir_shader *nir, struct radv_shader_info *info,
+setup_ngg_lds_layout(struct radv_device *device, nir_shader *nir, struct radv_shader_info *info,
unsigned max_vtx_in)
{
unsigned scratch_lds_base = 0;
unsigned pervertex_lds_bytes =
ac_ngg_nogs_get_pervertex_lds_size(stage,
nir->num_outputs,
- false, /* streamout */
+ device->physical_device->use_ngg_streamout,
info->outinfo.export_prim_id,
false, /* user edge flag */
info->has_ngg_culling,
ac_ngg_get_scratch_lds_size(stage,
info->workgroup_size,
info->wave_size,
- false, /* streamout */
+ device->physical_device->use_ngg_streamout,
info->has_ngg_culling);
/* Get total LDS usage. */
/* Invocations that process an input vertex */
unsigned max_vtx_in = MIN2(256, ngg_info->hw_max_esverts);
- setup_ngg_lds_layout(nir, &ngg_stage->info, max_vtx_in);
+ setup_ngg_lds_layout(device, nir, &ngg_stage->info, max_vtx_in);
ac_nir_lower_ngg_options options = {0};
options.family = device->physical_device->rad_info.family;
options.max_workgroup_size = info->workgroup_size;
options.wave_size = info->wave_size;
options.can_cull = nir->info.stage != MESA_SHADER_GEOMETRY && info->has_ngg_culling;
- options.disable_streamout = true;
+ options.disable_streamout = !device->physical_device->use_ngg_streamout;
if (nir->info.stage == MESA_SHADER_VERTEX ||
nir->info.stage == MESA_SHADER_TESS_EVAL) {