diff --git a/src/mesa/state_tracker/st_pbo.c b/src/mesa/state_tracker/st_pbo.c index 66ffb54428a..a3fb0e65208 100644 --- a/src/mesa/state_tracker/st_pbo.c +++ b/src/mesa/state_tracker/st_pbo.c @@ -648,7 +648,13 @@ st_init_pbo_helpers(struct st_context *st) if (screen->get_param(screen, PIPE_CAP_TGSI_INSTANCEID)) { if (screen->get_param(screen, PIPE_CAP_TGSI_VS_LAYER_VIEWPORT)) { st->pbo.layers = true; - } else if (screen->get_param(screen, PIPE_CAP_MAX_GEOMETRY_OUTPUT_VERTICES) >= 3) { + } else if (screen->get_param(screen, PIPE_CAP_MAX_GEOMETRY_OUTPUT_VERTICES) >= 3 && + screen->get_shader_param(screen, PIPE_SHADER_GEOMETRY, + PIPE_SHADER_CAP_PREFERRED_IR) != PIPE_SHADER_IR_NIR) { + /* As the download GS is created in TGSI, and TGSI to NIR translation + * is not implemented for GS, avoid using GS for drivers preferring + * NIR shaders. + */ st->pbo.layers = true; st->pbo.use_gs = true; }