From 0273ff007b9886ab162b41eddf95d4f5e3dd51ae Mon Sep 17 00:00:00 2001
From: Shaun Ren <sren@codeweavers.com>
Date: Sat, 24 Aug 2024 14:41:08 -0400
Subject: [PATCH] vkd3d-shader/tpf: Write domain shader declarations.

---
 libs/vkd3d-shader/hlsl_codegen.c | 3 +++
 libs/vkd3d-shader/tpf.c          | 5 +++++
 2 files changed, 8 insertions(+)

diff --git a/libs/vkd3d-shader/hlsl_codegen.c b/libs/vkd3d-shader/hlsl_codegen.c
index d0bd821bd1..cc85fa84c9 100644
--- a/libs/vkd3d-shader/hlsl_codegen.c
+++ b/libs/vkd3d-shader/hlsl_codegen.c
@@ -7898,6 +7898,9 @@ int hlsl_emit_bytecode(struct hlsl_ctx *ctx, struct hlsl_ir_function_decl *entry
     else if (profile->type == VKD3D_SHADER_TYPE_COMPUTE && !ctx->found_numthreads)
         hlsl_error(ctx, &entry_func->loc, VKD3D_SHADER_ERROR_HLSL_MISSING_ATTRIBUTE,
                 "Entry point \"%s\" is missing a [numthreads] attribute.", entry_func->func->name);
+    else if (profile->type == VKD3D_SHADER_TYPE_DOMAIN && ctx->domain == VKD3D_TESSELLATOR_DOMAIN_INVALID)
+        hlsl_error(ctx, &entry_func->loc, VKD3D_SHADER_ERROR_HLSL_MISSING_ATTRIBUTE,
+                "Entry point \"%s\" is missing a [domain] attribute.", entry_func->func->name);
 
     hlsl_block_init(&global_uniform_block);
 
diff --git a/libs/vkd3d-shader/tpf.c b/libs/vkd3d-shader/tpf.c
index 8b67b00ab1..fdd21a8a14 100644
--- a/libs/vkd3d-shader/tpf.c
+++ b/libs/vkd3d-shader/tpf.c
@@ -6603,6 +6603,11 @@ static void tpf_write_shdr(struct tpf_compiler *tpf, struct hlsl_ir_function_dec
         tpf_write_dcl_tessellator_partitioning(tpf, ctx->partitioning);
         tpf_write_dcl_tessellator_output_primitive(tpf, ctx->output_primitive);
     }
+    else if (version->type == VKD3D_SHADER_TYPE_DOMAIN)
+    {
+        tpf_write_dcl_input_control_point_count(tpf, 0); /* TODO: Obtain from OutputPatch */
+        tpf_write_dcl_tessellator_domain(tpf, ctx->domain);
+    }
 
     LIST_FOR_EACH_ENTRY(cbuffer, &ctx->buffers, struct hlsl_buffer, entry)
     {
-- 
GitLab