zink: fix longstanding TODO for generated tcs
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Thu, 6 Apr 2023 19:00:46 +0000 (15:00 -0400)
committerMarge Bot <emma+marge@anholt.net>
Wed, 26 Apr 2023 05:12:25 +0000 (05:12 +0000)
with dynamic pcp this doesn't matter, and this should only be reached
in async mode if dynamic pcp is available

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22671>

src/gallium/drivers/zink/zink_program.c

index 68a1160..4590759 100644 (file)
@@ -264,9 +264,13 @@ create_shader_module_for_stage_optimal(struct zink_context *ctx, struct zink_scr
       return NULL;
    }
    if (stage == MESA_SHADER_TESS_CTRL && zs->non_fs.is_generated && zs->spirv) {
-      assert(ctx); //TODO async
-      struct zink_tcs_key *tcs = (struct zink_tcs_key*)key;
-      struct zink_shader_object obj = zink_shader_tcs_compile(screen, zs, tcs->patch_vertices);
+      assert(ctx || screen->info.dynamic_state2_feats.extendedDynamicState2PatchControlPoints);
+      unsigned patch_vertices = 3;
+      if (ctx) {
+         struct zink_tcs_key *tcs = (struct zink_tcs_key*)key;
+         patch_vertices = tcs->patch_vertices;
+      }
+      struct zink_shader_object obj = zink_shader_tcs_compile(screen, zs, patch_vertices);
       mod = obj.mod;
    } else {
       mod = zink_shader_compile(screen, zs, zink_shader_blob_deserialize(screen, &prog->blobs[stage]), (struct zink_shader_key*)key, shadow_needs_shader_swizzle ? &ctx->di.zs_swizzle[stage] : NULL);