You've already forked wine-staging
mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2025-09-12 18:50:20 -07:00
139 lines
6.1 KiB
Diff
139 lines
6.1 KiB
Diff
From ec08bb5bfc8d67b975516a5a2dc34e9eaf7306ae Mon Sep 17 00:00:00 2001
|
|
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
|
Date: Tue, 10 Jun 2025 07:48:09 +1000
|
|
Subject: [PATCH] Updated vkd3d to 8da518f2cd4021ef8d642bbb8050881d7ff490c1.
|
|
|
|
---
|
|
libs/vkd3d/libs/vkd3d-shader/msl.c | 45 +++++++++++++++++++++++++++++-
|
|
1 file changed, 44 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/libs/vkd3d/libs/vkd3d-shader/msl.c b/libs/vkd3d/libs/vkd3d-shader/msl.c
|
|
index 62981811ee4..b3e251eff28 100644
|
|
--- a/libs/vkd3d/libs/vkd3d-shader/msl.c
|
|
+++ b/libs/vkd3d/libs/vkd3d-shader/msl.c
|
|
@@ -382,6 +382,19 @@ static enum msl_data_type msl_print_register_name(struct vkd3d_string_buffer *bu
|
|
return MSL_DATA_UNION;
|
|
}
|
|
|
|
+ case VKD3DSPR_IDXTEMP:
|
|
+ vkd3d_string_buffer_printf(buffer, "x%u", reg->idx[0].offset);
|
|
+ msl_print_subscript(buffer, gen, reg->idx[1].rel_addr, reg->idx[1].offset);
|
|
+ return MSL_DATA_UNION;
|
|
+
|
|
+ case VKD3DSPR_SAMPLEMASK:
|
|
+ if (gen->program->shader_version.type != VKD3D_SHADER_TYPE_PIXEL)
|
|
+ msl_compiler_error(gen, VKD3D_SHADER_ERROR_MSL_INTERNAL,
|
|
+ "Internal compiler error: Unhandled sample coverage mask in shader type #%x.",
|
|
+ gen->program->shader_version.type);
|
|
+ vkd3d_string_buffer_printf(buffer, "o_mask");
|
|
+ return MSL_DATA_FLOAT;
|
|
+
|
|
default:
|
|
msl_compiler_error(gen, VKD3D_SHADER_ERROR_MSL_INTERNAL,
|
|
"Internal compiler error: Unhandled register type %#x.", reg->type);
|
|
@@ -901,6 +914,14 @@ static void msl_ret(struct msl_generator *gen, const struct vkd3d_shader_instruc
|
|
vkd3d_string_buffer_printf(gen->buffer, "return;\n");
|
|
}
|
|
|
|
+static void msl_dcl_indexable_temp(struct msl_generator *gen, const struct vkd3d_shader_instruction *ins)
|
|
+{
|
|
+ msl_print_indent(gen->buffer, gen->indent);
|
|
+ vkd3d_string_buffer_printf(gen->buffer, "vkd3d_vec4 x%u[%u];\n",
|
|
+ ins->declaration.indexable_temp.register_idx,
|
|
+ ins->declaration.indexable_temp.register_size);
|
|
+}
|
|
+
|
|
static void msl_handle_instruction(struct msl_generator *gen, const struct vkd3d_shader_instruction *ins)
|
|
{
|
|
gen->location = ins->location;
|
|
@@ -908,11 +929,15 @@ static void msl_handle_instruction(struct msl_generator *gen, const struct vkd3d
|
|
switch (ins->opcode)
|
|
{
|
|
case VKD3DSIH_ADD:
|
|
+ case VKD3DSIH_IADD:
|
|
msl_binop(gen, ins, "+");
|
|
break;
|
|
case VKD3DSIH_AND:
|
|
msl_binop(gen, ins, "&");
|
|
break;
|
|
+ case VKD3DSIH_DCL_INDEXABLE_TEMP:
|
|
+ msl_dcl_indexable_temp(gen, ins);
|
|
+ break;
|
|
case VKD3DSIH_NOP:
|
|
break;
|
|
case VKD3DSIH_DIV:
|
|
@@ -933,6 +958,7 @@ static void msl_handle_instruction(struct msl_generator *gen, const struct vkd3d
|
|
case VKD3DSIH_ENDIF:
|
|
msl_end_block(gen);
|
|
break;
|
|
+ case VKD3DSIH_EQO:
|
|
case VKD3DSIH_IEQ:
|
|
msl_relop(gen, ins, "==");
|
|
break;
|
|
@@ -949,6 +975,7 @@ static void msl_handle_instruction(struct msl_generator *gen, const struct vkd3d
|
|
msl_cast(gen, ins, "uint");
|
|
break;
|
|
case VKD3DSIH_GEO:
|
|
+ case VKD3DSIH_IGE:
|
|
msl_relop(gen, ins, ">=");
|
|
break;
|
|
case VKD3DSIH_IF:
|
|
@@ -1276,6 +1303,12 @@ static void msl_generate_output_struct_declarations(struct msl_generator *gen)
|
|
vkd3d_string_buffer_printf(buffer, "float shader_out_depth [[depth(any)]];\n");
|
|
}
|
|
|
|
+ if (bitmap_is_set(gen->program->io_dcls, VKD3DSPR_SAMPLEMASK))
|
|
+ {
|
|
+ msl_print_indent(gen->buffer, 1);
|
|
+ vkd3d_string_buffer_printf(buffer, "uint shader_out_mask [[sample_mask]];\n");
|
|
+ }
|
|
+
|
|
vkd3d_string_buffer_printf(buffer, "};\n\n");
|
|
}
|
|
|
|
@@ -1371,6 +1404,9 @@ static void msl_generate_entrypoint_epilogue(struct msl_generator *gen)
|
|
}
|
|
vkd3d_string_buffer_printf(buffer, ";\n");
|
|
}
|
|
+
|
|
+ if (bitmap_is_set(gen->program->io_dcls, VKD3DSPR_SAMPLEMASK))
|
|
+ vkd3d_string_buffer_printf(gen->buffer, " output.shader_out_mask = as_type<uint>(o_mask);\n");
|
|
}
|
|
|
|
static void msl_generate_entrypoint(struct msl_generator *gen)
|
|
@@ -1414,6 +1450,9 @@ static void msl_generate_entrypoint(struct msl_generator *gen)
|
|
vkd3d_string_buffer_printf(gen->buffer, " vkd3d_vec4 %s_in[%u];\n", gen->prefix, 32);
|
|
vkd3d_string_buffer_printf(gen->buffer, " vkd3d_vec4 %s_out[%u];\n", gen->prefix, 32);
|
|
vkd3d_string_buffer_printf(gen->buffer, " vkd3d_%s_out output;\n", gen->prefix);
|
|
+ if (bitmap_is_set(gen->program->io_dcls, VKD3DSPR_SAMPLEMASK))
|
|
+ vkd3d_string_buffer_printf(gen->buffer, " float o_mask;\n");
|
|
+ vkd3d_string_buffer_printf(gen->buffer, "\n");
|
|
|
|
msl_generate_entrypoint_prologue(gen);
|
|
|
|
@@ -1422,9 +1461,11 @@ static void msl_generate_entrypoint(struct msl_generator *gen)
|
|
vkd3d_string_buffer_printf(gen->buffer, ", vertex_id");
|
|
if (bitmap_is_set(gen->program->io_dcls, VKD3DSPR_DEPTHOUT))
|
|
vkd3d_string_buffer_printf(gen->buffer, ", output.shader_out_depth");
|
|
+ if (bitmap_is_set(gen->program->io_dcls, VKD3DSPR_SAMPLEMASK))
|
|
+ vkd3d_string_buffer_printf(gen->buffer, ", o_mask");
|
|
if (gen->program->descriptors.descriptor_count)
|
|
vkd3d_string_buffer_printf(gen->buffer, ", descriptors");
|
|
- vkd3d_string_buffer_printf(gen->buffer, ");\n");
|
|
+ vkd3d_string_buffer_printf(gen->buffer, ");\n\n");
|
|
|
|
msl_generate_entrypoint_epilogue(gen);
|
|
|
|
@@ -1486,6 +1527,8 @@ static int msl_generator_generate(struct msl_generator *gen, struct vkd3d_shader
|
|
vkd3d_string_buffer_printf(gen->buffer, ", uint vertex_id");
|
|
if (bitmap_is_set(gen->program->io_dcls, VKD3DSPR_DEPTHOUT))
|
|
vkd3d_string_buffer_printf(gen->buffer, ", thread float &o_depth");
|
|
+ if (bitmap_is_set(gen->program->io_dcls, VKD3DSPR_SAMPLEMASK))
|
|
+ vkd3d_string_buffer_printf(gen->buffer, ", thread float &o_mask");
|
|
if (gen->program->descriptors.descriptor_count)
|
|
vkd3d_string_buffer_printf(gen->buffer, ", constant descriptor *descriptors");
|
|
vkd3d_string_buffer_printf(gen->buffer, ")\n{\n");
|
|
--
|
|
2.47.2
|
|
|