From 5b5a27dccb5d41c33a311abbc0b74fbda1fb8339 Mon Sep 17 00:00:00 2001
From: Giovanni Mascellani <gmascellani@codeweavers.com>
Date: Wed, 9 Oct 2024 23:01:03 +0200
Subject: [PATCH 1/4] vkd3d-shader/ir: Disallow INPUT registers in destination
 parameters.

---
 libs/vkd3d-shader/ir.c | 15 ++-------------
 1 file changed, 2 insertions(+), 13 deletions(-)

diff --git a/libs/vkd3d-shader/ir.c b/libs/vkd3d-shader/ir.c
index 56865b25e0..91f6d02317 100644
--- a/libs/vkd3d-shader/ir.c
+++ b/libs/vkd3d-shader/ir.c
@@ -6388,23 +6388,12 @@ static void vsir_validate_dst_param(struct validation_context *ctx,
             break;
 
         case VKD3DSPR_IMMCONST:
-            validator_error(ctx, VKD3D_SHADER_ERROR_VSIR_INVALID_REGISTER_TYPE,
-                    "Invalid IMMCONST register used as destination parameter.");
-            break;
-
         case VKD3DSPR_IMMCONST64:
-            validator_error(ctx, VKD3D_SHADER_ERROR_VSIR_INVALID_REGISTER_TYPE,
-                    "Invalid IMMCONST64 register used as destination parameter.");
-            break;
-
         case VKD3DSPR_SAMPLER:
-            validator_error(ctx, VKD3D_SHADER_ERROR_VSIR_INVALID_REGISTER_TYPE,
-                    "Invalid SAMPLER register used as destination parameter.");
-            break;
-
         case VKD3DSPR_RESOURCE:
+        case VKD3DSPR_INPUT:
             validator_error(ctx, VKD3D_SHADER_ERROR_VSIR_INVALID_REGISTER_TYPE,
-                    "Invalid RESOURCE register used as destination parameter.");
+                    "Invalid %#x register used as destination parameter.", dst->reg.type);
             break;
 
         default:
-- 
GitLab


From 6cbe5ffa154e577f87dfb637c595886eaa777209 Mon Sep 17 00:00:00 2001
From: Giovanni Mascellani <gmascellani@codeweavers.com>
Date: Wed, 9 Oct 2024 23:01:50 +0200
Subject: [PATCH 2/4] vkd3d-shader/ir: Disallow OUTPUT registers in source
 parameters.

---
 libs/vkd3d-shader/ir.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/libs/vkd3d-shader/ir.c b/libs/vkd3d-shader/ir.c
index 91f6d02317..e07fcece08 100644
--- a/libs/vkd3d-shader/ir.c
+++ b/libs/vkd3d-shader/ir.c
@@ -6436,6 +6436,13 @@ static void vsir_validate_src_param(struct validation_context *ctx,
                     "Invalid NULL register used as source parameter.");
             break;
 
+        case VKD3DSPR_OUTPUT:
+            if (ctx->program->shader_version.type != VKD3D_SHADER_TYPE_HULL
+                    || (ctx->phase != VKD3DSIH_HS_FORK_PHASE && ctx->phase != VKD3DSIH_HS_JOIN_PHASE))
+                validator_error(ctx, VKD3D_SHADER_ERROR_VSIR_INVALID_REGISTER_TYPE,
+                        "Invalid OUTPUT register used as source parameter.");
+            break;
+
         default:
             break;
     }
-- 
GitLab


From f2d181e65c7e116ba7efdbf1257371e91534146e Mon Sep 17 00:00:00 2001
From: Giovanni Mascellani <gmascellani@codeweavers.com>
Date: Wed, 9 Oct 2024 23:04:19 +0200
Subject: [PATCH 3/4] vkd3d-shader/ir: Only allow PATCHCONST registers as
 source parameteres in Hull and Domain Shaders.

---
 libs/vkd3d-shader/ir.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/libs/vkd3d-shader/ir.c b/libs/vkd3d-shader/ir.c
index e07fcece08..00500554ec 100644
--- a/libs/vkd3d-shader/ir.c
+++ b/libs/vkd3d-shader/ir.c
@@ -6443,6 +6443,13 @@ static void vsir_validate_src_param(struct validation_context *ctx,
                         "Invalid OUTPUT register used as source parameter.");
             break;
 
+        case VKD3DSPR_PATCHCONST:
+            if (ctx->program->shader_version.type != VKD3D_SHADER_TYPE_DOMAIN
+                    && ctx->program->shader_version.type != VKD3D_SHADER_TYPE_HULL)
+                validator_error(ctx, VKD3D_SHADER_ERROR_VSIR_INVALID_REGISTER_TYPE,
+                        "PATCHCONST register used as source parameters are only allowed in Hull and Domain Shaders.");
+            break;
+
         default:
             break;
     }
-- 
GitLab


From f0e31dd6b339285240b444e4f372dfc735a9f753 Mon Sep 17 00:00:00 2001
From: Giovanni Mascellani <gmascellani@codeweavers.com>
Date: Wed, 9 Oct 2024 23:05:47 +0200
Subject: [PATCH 4/4] vkd3d-shader/ir: Only allow PATCHCONST registers as
 destination parameteres in Hull Shaders.

---
 libs/vkd3d-shader/ir.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/libs/vkd3d-shader/ir.c b/libs/vkd3d-shader/ir.c
index 00500554ec..b5035b3c7d 100644
--- a/libs/vkd3d-shader/ir.c
+++ b/libs/vkd3d-shader/ir.c
@@ -6396,6 +6396,12 @@ static void vsir_validate_dst_param(struct validation_context *ctx,
                     "Invalid %#x register used as destination parameter.", dst->reg.type);
             break;
 
+        case VKD3DSPR_PATCHCONST:
+            if (ctx->program->shader_version.type != VKD3D_SHADER_TYPE_HULL)
+                validator_error(ctx, VKD3D_SHADER_ERROR_VSIR_INVALID_REGISTER_TYPE,
+                        "PATCHCONST register used as destination parameters are only allowed in Hull Shaders.");
+            break;
+
         default:
             break;
     }
-- 
GitLab