device->rad_info.has_dedicated_vram &&
!(device->instance->debug_flags & RADV_DEBUG_NO_NGG);
+ /* FIXME: ACO NGG GS randomly hangs the GPU with CTS. */
+ device->use_ngg_gs = device->use_ngg && device->use_llvm;
device->use_ngg_streamout = false;
/* Determine the number of threads per wave for all stages. */
keys[MESA_SHADER_TESS_EVAL].vs_common_out.as_ngg = false;
}
+ if (!device->physical_device->use_ngg_gs) {
+ if (nir[MESA_SHADER_GEOMETRY]) {
+ if (nir[MESA_SHADER_TESS_CTRL])
+ keys[MESA_SHADER_TESS_EVAL].vs_common_out.as_ngg = false;
+ else
+ keys[MESA_SHADER_VERTEX].vs_common_out.as_ngg = false;
+ }
+ }
+
gl_shader_stage last_xfb_stage = MESA_SHADER_VERTEX;
for (int i = MESA_SHADER_VERTEX; i <= MESA_SHADER_GEOMETRY; i++) {
/* Whether to enable NGG. */
bool use_ngg;
+ /* Whether to enable NGG GS. */
+ bool use_ngg_gs;
+
/* Whether to enable NGG streamout. */
bool use_ngg_streamout;
* TODO: fix use of NGG GS and non-NGG GS inside the same begin/end
* query.
*/
- return device->physical_device->use_ngg &&
+ return device->physical_device->use_ngg_gs &&
(pool->pipeline_stats_mask & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT);
}
if (nir->info.stage == MESA_SHADER_GEOMETRY) {
unsigned nir_gs_flags = nir_lower_gs_intrinsics_per_stream;
- if (device->physical_device->use_ngg && !radv_use_llvm_for_stage(device, stage)) {
+ if (device->physical_device->use_ngg_gs && !radv_use_llvm_for_stage(device, stage)) {
/* ACO needs NIR to do some of the hard lifting */
nir_gs_flags |= nir_lower_gs_intrinsics_count_primitives |
nir_lower_gs_intrinsics_count_vertices_per_primitive |