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