mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2024-11-21 16:46:41 -08:00
tests: Mark some tests in wave-reconvergence.shader_test as buggy on MoltenVK.
This commit is contained in:
parent
ba5c3b576e
commit
7450c4a368
Notes:
Henri Verbeet
2024-11-06 23:02:04 +01:00
Approved-by: Giovanni Mascellani (@giomasce) Approved-by: Henri Verbeet (@hverbeet) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1250
@ -1,3 +1,8 @@
|
|||||||
|
% Many of these tests fail on MoltenVK because of a bug in Metal, which causes
|
||||||
|
% SIMD operations (i.e., wave operations for Apple) to be hoisted out of the
|
||||||
|
% "if"statement, thereby changing which threads (i.e., wave groups for Apple)
|
||||||
|
% appear as active. This was reported to Apple as FB15624583.
|
||||||
|
|
||||||
[require]
|
[require]
|
||||||
shader model >= 6.0
|
shader model >= 6.0
|
||||||
format r32-uint uav-load
|
format r32-uint uav-load
|
||||||
@ -59,25 +64,25 @@ void main(uint id : SV_GroupIndex)
|
|||||||
[test]
|
[test]
|
||||||
dispatch 1 1 1
|
dispatch 1 1 1
|
||||||
probe uav 2 (0) rui (0xf01)
|
probe uav 2 (0) rui (0xf01)
|
||||||
probe uav 2 (1) rui (0x503)
|
bug(mvk) probe uav 2 (1) rui (0x503)
|
||||||
probe uav 2 (2) rui (0x511)
|
probe uav 2 (2) rui (0x511)
|
||||||
probe uav 2 (3) rui (0x113)
|
bug(mvk) probe uav 2 (3) rui (0x113)
|
||||||
probe uav 2 (4) rui (0xf24)
|
probe uav 2 (4) rui (0xf24)
|
||||||
|
|
||||||
probe uav 2 (5) rui (0xf01)
|
probe uav 2 (5) rui (0xf01)
|
||||||
probe uav 2 (6) rui (0xa02)
|
bug(mvk) probe uav 2 (6) rui (0xa02)
|
||||||
probe uav 2 (7) rui (0xf04)
|
probe uav 2 (7) rui (0xf04)
|
||||||
probe uav 2 (8) rui (0)
|
probe uav 2 (8) rui (0)
|
||||||
probe uav 2 (9) rui (0)
|
probe uav 2 (9) rui (0)
|
||||||
|
|
||||||
probe uav 2 (10) rui (0xf01)
|
probe uav 2 (10) rui (0xf01)
|
||||||
probe uav 2 (11) rui (0x503)
|
bug(mvk) probe uav 2 (11) rui (0x503)
|
||||||
probe uav 2 (12) rui (0x511)
|
probe uav 2 (12) rui (0x511)
|
||||||
probe uav 2 (13) rui (0x412)
|
bug(mvk) probe uav 2 (13) rui (0x412)
|
||||||
probe uav 2 (14) rui (0xf14)
|
probe uav 2 (14) rui (0xf14)
|
||||||
|
|
||||||
probe uav 2 (15) rui (0xf01)
|
probe uav 2 (15) rui (0xf01)
|
||||||
probe uav 2 (16) rui (0xa02)
|
bug(mvk) probe uav 2 (16) rui (0xa02)
|
||||||
probe uav 2 (17) rui (0xf04)
|
probe uav 2 (17) rui (0xf04)
|
||||||
probe uav 2 (18) rui (0)
|
probe uav 2 (18) rui (0)
|
||||||
probe uav 2 (19) rui (0)
|
probe uav 2 (19) rui (0)
|
||||||
@ -127,21 +132,21 @@ void main(uint id : SV_GroupIndex)
|
|||||||
[test]
|
[test]
|
||||||
dispatch 1 1 1
|
dispatch 1 1 1
|
||||||
probe uav 2 (0) rui (0x701)
|
probe uav 2 (0) rui (0x701)
|
||||||
probe uav 2 (1) rui (0x503)
|
bug(mvk) probe uav 2 (1) rui (0x503)
|
||||||
probe uav 2 (2) rui (0x511)
|
probe uav 2 (2) rui (0x511)
|
||||||
probe uav 2 (3) rui (0x113)
|
bug(mvk) probe uav 2 (3) rui (0x113)
|
||||||
probe uav 2 (4) rui (0x724)
|
probe uav 2 (4) rui (0x724)
|
||||||
|
|
||||||
probe uav 2 (5) rui (0x701)
|
probe uav 2 (5) rui (0x701)
|
||||||
probe uav 2 (6) rui (0x202)
|
bug(mvk) probe uav 2 (6) rui (0x202)
|
||||||
probe uav 2 (7) rui (0x704)
|
probe uav 2 (7) rui (0x704)
|
||||||
probe uav 2 (8) rui (0)
|
probe uav 2 (8) rui (0)
|
||||||
probe uav 2 (9) rui (0)
|
probe uav 2 (9) rui (0)
|
||||||
|
|
||||||
probe uav 2 (10) rui (0x701)
|
probe uav 2 (10) rui (0x701)
|
||||||
probe uav 2 (11) rui (0x503)
|
bug(mvk) probe uav 2 (11) rui (0x503)
|
||||||
probe uav 2 (12) rui (0x511)
|
probe uav 2 (12) rui (0x511)
|
||||||
probe uav 2 (13) rui (0x412)
|
bug(mvk) probe uav 2 (13) rui (0x412)
|
||||||
probe uav 2 (14) rui (0x714)
|
probe uav 2 (14) rui (0x714)
|
||||||
|
|
||||||
probe uav 2 (15) rui (0)
|
probe uav 2 (15) rui (0)
|
||||||
|
@ -879,6 +879,7 @@ static void parse_test_directive(struct shader_runner *runner, const char *line)
|
|||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
runner->is_todo = false;
|
runner->is_todo = false;
|
||||||
|
runner->is_bug = false;
|
||||||
|
|
||||||
while (match)
|
while (match)
|
||||||
{
|
{
|
||||||
@ -890,6 +891,12 @@ static void parse_test_directive(struct shader_runner *runner, const char *line)
|
|||||||
match = true;
|
match = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (match_string_with_args(runner, line, "bug", &line))
|
||||||
|
{
|
||||||
|
runner->is_bug = true;
|
||||||
|
match = true;
|
||||||
|
}
|
||||||
|
|
||||||
line_ini = line;
|
line_ini = line;
|
||||||
if (match_string_with_args(runner, line, "if", &line))
|
if (match_string_with_args(runner, line, "if", &line))
|
||||||
{
|
{
|
||||||
@ -923,7 +930,8 @@ static void parse_test_directive(struct shader_runner *runner, const char *line)
|
|||||||
fatal_error("Malformed dispatch arguments '%s'.\n", line);
|
fatal_error("Malformed dispatch arguments '%s'.\n", line);
|
||||||
|
|
||||||
runner->last_render_failed = !runner->ops->dispatch(runner, x, y, z);
|
runner->last_render_failed = !runner->ops->dispatch(runner, x, y, z);
|
||||||
todo_if(runner->is_todo) ok(!runner->last_render_failed, "Dispatch failed.\n");
|
todo_if(runner->is_todo) bug_if(runner->is_bug)
|
||||||
|
ok(!runner->last_render_failed, "Dispatch failed.\n");
|
||||||
}
|
}
|
||||||
else if (match_string(line, "clear rtv", &line))
|
else if (match_string(line, "clear rtv", &line))
|
||||||
{
|
{
|
||||||
@ -1025,7 +1033,8 @@ static void parse_test_directive(struct shader_runner *runner, const char *line)
|
|||||||
}
|
}
|
||||||
|
|
||||||
runner->last_render_failed = !runner->ops->draw(runner, D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST, 3, 1);
|
runner->last_render_failed = !runner->ops->draw(runner, D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST, 3, 1);
|
||||||
todo_if(runner->is_todo) ok(!runner->last_render_failed, "Draw failed.\n");
|
todo_if(runner->is_todo) bug_if(runner->is_bug)
|
||||||
|
ok(!runner->last_render_failed, "Draw failed.\n");
|
||||||
}
|
}
|
||||||
else if (match_string(line, "draw", &line))
|
else if (match_string(line, "draw", &line))
|
||||||
{
|
{
|
||||||
@ -1070,7 +1079,8 @@ static void parse_test_directive(struct shader_runner *runner, const char *line)
|
|||||||
}
|
}
|
||||||
|
|
||||||
runner->last_render_failed = !runner->ops->draw(runner, topology, vertex_count, instance_count);
|
runner->last_render_failed = !runner->ops->draw(runner, topology, vertex_count, instance_count);
|
||||||
todo_if(runner->is_todo) ok(!runner->last_render_failed, "Draw failed.\n");
|
todo_if(runner->is_todo) bug_if(runner->is_bug)
|
||||||
|
ok(!runner->last_render_failed, "Draw failed.\n");
|
||||||
}
|
}
|
||||||
else if (match_string(line, "copy", &line))
|
else if (match_string(line, "copy", &line))
|
||||||
{
|
{
|
||||||
@ -1090,7 +1100,8 @@ static void parse_test_directive(struct shader_runner *runner, const char *line)
|
|||||||
fatal_error("Resource dimensions don't match.\n");
|
fatal_error("Resource dimensions don't match.\n");
|
||||||
|
|
||||||
ret = runner->ops->copy(runner, src, dst);
|
ret = runner->ops->copy(runner, src, dst);
|
||||||
todo_if(runner->is_todo) ok(ret, "Failed to copy resource.\n");
|
todo_if(runner->is_todo) bug_if(runner->is_bug)
|
||||||
|
ok(ret, "Failed to copy resource.\n");
|
||||||
}
|
}
|
||||||
else if (match_string(line, "probe", &line))
|
else if (match_string(line, "probe", &line))
|
||||||
{
|
{
|
||||||
@ -1164,7 +1175,8 @@ static void parse_test_directive(struct shader_runner *runner, const char *line)
|
|||||||
++line;
|
++line;
|
||||||
read_uint4(&line, &v, false);
|
read_uint4(&line, &v, false);
|
||||||
line = close_parentheses(line);
|
line = close_parentheses(line);
|
||||||
todo_if(runner->is_todo) check_readback_data_uvec4(rb, &rect, &v);
|
todo_if(runner->is_todo) bug_if(runner->is_bug)
|
||||||
|
check_readback_data_uvec4(rb, &rect, &v);
|
||||||
}
|
}
|
||||||
else if (match_string(line, "rgbai", &line))
|
else if (match_string(line, "rgbai", &line))
|
||||||
{
|
{
|
||||||
@ -1175,7 +1187,8 @@ static void parse_test_directive(struct shader_runner *runner, const char *line)
|
|||||||
++line;
|
++line;
|
||||||
read_int4(&line, &v, false);
|
read_int4(&line, &v, false);
|
||||||
line = close_parentheses(line);
|
line = close_parentheses(line);
|
||||||
todo_if(runner->is_todo) check_readback_data_ivec4(rb, &rect, &v);
|
todo_if(runner->is_todo) bug_if(runner->is_bug)
|
||||||
|
check_readback_data_ivec4(rb, &rect, &v);
|
||||||
}
|
}
|
||||||
else if (match_string(line, "rgba", &line))
|
else if (match_string(line, "rgba", &line))
|
||||||
{
|
{
|
||||||
@ -1186,7 +1199,8 @@ static void parse_test_directive(struct shader_runner *runner, const char *line)
|
|||||||
fatal_error("Malformed probe arguments '%s'.\n", line);
|
fatal_error("Malformed probe arguments '%s'.\n", line);
|
||||||
if (ret < 5)
|
if (ret < 5)
|
||||||
ulps = 0;
|
ulps = 0;
|
||||||
todo_if(runner->is_todo) check_readback_data_vec4(rb, &rect, &v, ulps);
|
todo_if(runner->is_todo) bug_if(runner->is_bug)
|
||||||
|
check_readback_data_vec4(rb, &rect, &v, ulps);
|
||||||
}
|
}
|
||||||
else if (match_string(line, "rg", &line))
|
else if (match_string(line, "rg", &line))
|
||||||
{
|
{
|
||||||
@ -1197,7 +1211,8 @@ static void parse_test_directive(struct shader_runner *runner, const char *line)
|
|||||||
fatal_error("Malformed probe arguments '%s'.\n", line);
|
fatal_error("Malformed probe arguments '%s'.\n", line);
|
||||||
if (ret < 3)
|
if (ret < 3)
|
||||||
ulps = 0;
|
ulps = 0;
|
||||||
todo_if(runner->is_todo) check_readback_data_vec2(rb, &rect, &v, ulps);
|
todo_if(runner->is_todo) bug_if(runner->is_bug)
|
||||||
|
check_readback_data_vec2(rb, &rect, &v, ulps);
|
||||||
}
|
}
|
||||||
else if (match_string(line, "rui", &line) || (is_signed = match_string(line, "ri", &line)))
|
else if (match_string(line, "rui", &line) || (is_signed = match_string(line, "ri", &line)))
|
||||||
{
|
{
|
||||||
@ -1218,7 +1233,8 @@ static void parse_test_directive(struct shader_runner *runner, const char *line)
|
|||||||
else
|
else
|
||||||
read_uint(&line, &expect, false);
|
read_uint(&line, &expect, false);
|
||||||
line = close_parentheses(line);
|
line = close_parentheses(line);
|
||||||
todo_if(runner->is_todo) check_readback_data_uint(rb, &box, expect, 0);
|
todo_if(runner->is_todo) bug_if(runner->is_bug)
|
||||||
|
check_readback_data_uint(rb, &box, expect, 0);
|
||||||
}
|
}
|
||||||
else if (match_string(line, "rui64", &line) || (is_signed = match_string(line, "ri64", &line)))
|
else if (match_string(line, "rui64", &line) || (is_signed = match_string(line, "ri64", &line)))
|
||||||
{
|
{
|
||||||
@ -1239,7 +1255,8 @@ static void parse_test_directive(struct shader_runner *runner, const char *line)
|
|||||||
else
|
else
|
||||||
read_uint64(&line, &expect, false);
|
read_uint64(&line, &expect, false);
|
||||||
line = close_parentheses(line);
|
line = close_parentheses(line);
|
||||||
todo_if(runner->is_todo) check_readback_data_uint64(rb, &box, expect, 0);
|
todo_if(runner->is_todo) bug_if(runner->is_bug)
|
||||||
|
check_readback_data_uint64(rb, &box, expect, 0);
|
||||||
}
|
}
|
||||||
else if (match_string(line, "rd", &line))
|
else if (match_string(line, "rd", &line))
|
||||||
{
|
{
|
||||||
@ -1250,7 +1267,8 @@ static void parse_test_directive(struct shader_runner *runner, const char *line)
|
|||||||
fatal_error("Malformed probe arguments '%s'.\n", line);
|
fatal_error("Malformed probe arguments '%s'.\n", line);
|
||||||
if (ret < 2)
|
if (ret < 2)
|
||||||
ulps = 0;
|
ulps = 0;
|
||||||
todo_if(runner->is_todo) check_readback_data_double(rb, &rect, expect, ulps);
|
todo_if(runner->is_todo) bug_if(runner->is_bug)
|
||||||
|
check_readback_data_double(rb, &rect, expect, ulps);
|
||||||
}
|
}
|
||||||
else if (match_string(line, "r", &line))
|
else if (match_string(line, "r", &line))
|
||||||
{
|
{
|
||||||
@ -1261,7 +1279,8 @@ static void parse_test_directive(struct shader_runner *runner, const char *line)
|
|||||||
fatal_error("Malformed probe arguments '%s'.\n", line);
|
fatal_error("Malformed probe arguments '%s'.\n", line);
|
||||||
if (ret < 2)
|
if (ret < 2)
|
||||||
ulps = 0;
|
ulps = 0;
|
||||||
todo_if(runner->is_todo) check_readback_data_float(rb, &rect, expect, ulps);
|
todo_if(runner->is_todo) bug_if(runner->is_bug)
|
||||||
|
check_readback_data_float(rb, &rect, expect, ulps);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -179,6 +179,7 @@ struct shader_runner
|
|||||||
const struct shader_runner_caps *caps;
|
const struct shader_runner_caps *caps;
|
||||||
|
|
||||||
bool is_todo;
|
bool is_todo;
|
||||||
|
bool is_bug;
|
||||||
|
|
||||||
char *shader_source[SHADER_TYPE_COUNT];
|
char *shader_source[SHADER_TYPE_COUNT];
|
||||||
enum shader_model minimum_shader_model;
|
enum shader_model minimum_shader_model;
|
||||||
|
Loading…
Reference in New Issue
Block a user