diff --git a/.pick_status.json b/.pick_status.json index 54c3e385f65..f874df64fc6 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -3354,7 +3354,7 @@ "description": "freedreno: Force single wavesize if double threadsize is unsupported", "nominated": true, "nomination_type": 2, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "c323848b0b70686e856d69699356b8cd71ddb6c8", "notes": null diff --git a/src/gallium/drivers/freedreno/ir3/ir3_gallium.c b/src/gallium/drivers/freedreno/ir3/ir3_gallium.c index f550b62c1f6..9f486a3df9b 100644 --- a/src/gallium/drivers/freedreno/ir3/ir3_gallium.c +++ b/src/gallium/drivers/freedreno/ir3/ir3_gallium.c @@ -268,6 +268,11 @@ ir3_shader_compute_state_create(struct pipe_context *pctx, enum ir3_wavesize_option api_wavesize = IR3_SINGLE_OR_DOUBLE; enum ir3_wavesize_option real_wavesize = IR3_SINGLE_OR_DOUBLE; + if (ctx->screen->gen >= 6 && !ctx->screen->info->props.supports_double_threadsize) { + api_wavesize = IR3_SINGLE_ONLY; + real_wavesize = IR3_SINGLE_ONLY; + } + const struct ir3_shader_options ir3_options = { /* TODO: force to single on a6xx with legacy ballot extension that uses * 64-bit masks @@ -293,11 +298,6 @@ ir3_shader_compute_state_create(struct pipe_context *pctx, if (ctx->screen->gen >= 6) ir3_nir_lower_io_to_bindless(nir); - if (ctx->screen->gen >= 6 && !ctx->screen->info->props.supports_double_threadsize) { - api_wavesize = IR3_SINGLE_ONLY; - real_wavesize = IR3_SINGLE_ONLY; - } - struct ir3_shader *shader = ir3_shader_from_nir(compiler, nir, &ir3_options, NULL); shader->cs.req_local_mem = cso->static_shared_mem; @@ -352,6 +352,14 @@ ir3_shader_state_create(struct pipe_context *pctx, if (ctx->screen->gen >= 6) ir3_nir_lower_io_to_bindless(nir); + enum ir3_wavesize_option api_wavesize = IR3_SINGLE_OR_DOUBLE; + enum ir3_wavesize_option real_wavesize = IR3_SINGLE_OR_DOUBLE; + + if (ctx->screen->gen >= 6 && !ctx->screen->info->props.supports_double_threadsize) { + api_wavesize = IR3_SINGLE_ONLY; + real_wavesize = IR3_SINGLE_ONLY; + } + /* * Create ir3_shader: * @@ -366,8 +374,8 @@ ir3_shader_state_create(struct pipe_context *pctx, /* TODO: force to single on a6xx with legacy * ballot extension that uses 64-bit masks */ - .api_wavesize = IR3_SINGLE_OR_DOUBLE, - .real_wavesize = IR3_SINGLE_OR_DOUBLE, + .api_wavesize = api_wavesize, + .real_wavesize = real_wavesize, }, &stream_output);