mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-04-13 05:43:18 -07:00
vkd3d-shader/msl: Implement support for VKD3DSPSM_ABS modifiers.
This commit is contained in:
Notes:
Henri Verbeet
2024-11-24 00:11:21 +01:00
Approved-by: Giovanni Mascellani (@giomasce) Approved-by: Henri Verbeet (@hverbeet) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1274
@@ -246,19 +246,40 @@ static void msl_src_init(struct msl_src *msl_src, struct msl_generator *gen,
|
|||||||
const struct vkd3d_shader_src_param *vsir_src, uint32_t mask)
|
const struct vkd3d_shader_src_param *vsir_src, uint32_t mask)
|
||||||
{
|
{
|
||||||
const struct vkd3d_shader_register *reg = &vsir_src->reg;
|
const struct vkd3d_shader_register *reg = &vsir_src->reg;
|
||||||
|
struct vkd3d_string_buffer *str;
|
||||||
|
|
||||||
msl_src->str = vkd3d_string_buffer_get(&gen->string_buffers);
|
msl_src->str = vkd3d_string_buffer_get(&gen->string_buffers);
|
||||||
|
|
||||||
if (reg->non_uniform)
|
if (reg->non_uniform)
|
||||||
msl_compiler_error(gen, VKD3D_SHADER_ERROR_MSL_INTERNAL,
|
msl_compiler_error(gen, VKD3D_SHADER_ERROR_MSL_INTERNAL,
|
||||||
"Internal compiler error: Unhandled 'non-uniform' modifier.");
|
"Internal compiler error: Unhandled 'non-uniform' modifier.");
|
||||||
if (vsir_src->modifiers)
|
|
||||||
|
if (!vsir_src->modifiers)
|
||||||
|
str = msl_src->str;
|
||||||
|
else
|
||||||
|
str = vkd3d_string_buffer_get(&gen->string_buffers);
|
||||||
|
|
||||||
|
msl_print_register_name(str, gen, reg);
|
||||||
|
if (reg->dimension == VSIR_DIMENSION_VEC4)
|
||||||
|
msl_print_swizzle(str, vsir_src->swizzle, mask);
|
||||||
|
|
||||||
|
switch (vsir_src->modifiers)
|
||||||
|
{
|
||||||
|
case VKD3DSPSM_NONE:
|
||||||
|
break;
|
||||||
|
case VKD3DSPSM_ABS:
|
||||||
|
vkd3d_string_buffer_printf(msl_src->str, "abs(%s)", str->buffer);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
vkd3d_string_buffer_printf(msl_src->str, "<unhandled modifier %#x>(%s)",
|
||||||
|
vsir_src->modifiers, str->buffer);
|
||||||
msl_compiler_error(gen, VKD3D_SHADER_ERROR_MSL_INTERNAL,
|
msl_compiler_error(gen, VKD3D_SHADER_ERROR_MSL_INTERNAL,
|
||||||
"Internal compiler error: Unhandled source modifier(s) %#x.", vsir_src->modifiers);
|
"Internal compiler error: Unhandled source modifier(s) %#x.", vsir_src->modifiers);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
msl_print_register_name(msl_src->str, gen, reg);
|
if (str != msl_src->str)
|
||||||
if (reg->dimension == VSIR_DIMENSION_VEC4)
|
vkd3d_string_buffer_release(&gen->string_buffers, str);
|
||||||
msl_print_swizzle(msl_src->str, vsir_src->swizzle, mask);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void msl_dst_cleanup(struct msl_dst *dst, struct vkd3d_string_buffer_cache *cache)
|
static void msl_dst_cleanup(struct msl_dst *dst, struct vkd3d_string_buffer_cache *cache)
|
||||||
@@ -841,6 +862,8 @@ static int msl_generator_generate(struct msl_generator *gen, struct vkd3d_shader
|
|||||||
MESSAGE("Generating a MSL shader. This is unsupported; you get to keep all the pieces if it breaks.\n");
|
MESSAGE("Generating a MSL shader. This is unsupported; you get to keep all the pieces if it breaks.\n");
|
||||||
|
|
||||||
vkd3d_string_buffer_printf(gen->buffer, "/* Generated by %s. */\n\n", vkd3d_shader_get_version(NULL, NULL));
|
vkd3d_string_buffer_printf(gen->buffer, "/* Generated by %s. */\n\n", vkd3d_shader_get_version(NULL, NULL));
|
||||||
|
vkd3d_string_buffer_printf(gen->buffer, "#include <metal_common>\n\n");
|
||||||
|
vkd3d_string_buffer_printf(gen->buffer, "using namespace metal;\n\n");
|
||||||
|
|
||||||
if (gen->program->global_flags)
|
if (gen->program->global_flags)
|
||||||
msl_compiler_error(gen, VKD3D_SHADER_ERROR_MSL_INTERNAL,
|
msl_compiler_error(gen, VKD3D_SHADER_ERROR_MSL_INTERNAL,
|
||||||
|
@@ -8,8 +8,8 @@ float4 main() : sv_target
|
|||||||
|
|
||||||
[test]
|
[test]
|
||||||
uniform 0 float4 0.1 0.7 0.0 0.0
|
uniform 0 float4 0.1 0.7 0.0 0.0
|
||||||
todo(msl) draw quad
|
draw quad
|
||||||
probe (0, 0) rgba (0.1, 0.7, 0.4, 0.4)
|
probe (0, 0) rgba (0.1, 0.7, 0.4, 0.4)
|
||||||
uniform 0 float4 -0.7 0.1 0.0 0.0
|
uniform 0 float4 -0.7 0.1 0.0 0.0
|
||||||
todo(msl) draw quad
|
draw quad
|
||||||
probe (0, 0) rgba (0.7, 0.1, 1.2, 0.4)
|
probe (0, 0) rgba (0.7, 0.1, 1.2, 0.4)
|
||||||
|
Reference in New Issue
Block a user