From: Francisco Casas fcasas@codeweavers.com
So, if there is an error or a trace on "[pixel shader]" or similar blocks, they get reported in the line with the tag at the beginning of the block and no on the line where the next block starts. --- tests/shader_runner.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-)
diff --git a/tests/shader_runner.c b/tests/shader_runner.c index 5eafbcbe4..53f41773b 100644 --- a/tests/shader_runner.c +++ b/tests/shader_runner.c @@ -1476,6 +1476,12 @@ static void trace_tags(const struct shader_runner_caps *caps) trace("%s.\n", tags); }
+static void update_line_number_context(const char *testname, unsigned int line_number) +{ + vkd3d_test_pop_context(); + vkd3d_test_push_context("%s:%u", testname, line_number); +} + void run_shader_tests(struct shader_runner *runner, const struct shader_runner_caps *caps, const struct shader_runner_ops *ops, void *dxc_compiler) { @@ -1517,14 +1523,14 @@ void run_shader_tests(struct shader_runner *runner, const struct shader_runner_c else testname = test_options.filename;
+ vkd3d_test_push_context("%s:%u", testname, line_number); + for (;;) { char *ret = fgets(line_buffer, sizeof(line_buffer), f); const char *line = line_buffer;
- if (line_number++) - vkd3d_test_pop_context(); - vkd3d_test_push_context("%s:%u", testname, line_number); + line_number++;
if (!ret || line[0] == '[') { @@ -1679,6 +1685,8 @@ void run_shader_tests(struct shader_runner *runner, const struct shader_runner_c { unsigned int index;
+ update_line_number_context(testname, line_number); + if (match_directive_substring(line, "[compute shader", &line)) { state = STATE_SHADER_COMPUTE; @@ -1808,10 +1816,12 @@ void run_shader_tests(struct shader_runner *runner, const struct shader_runner_c switch (state) { case STATE_NONE: + update_line_number_context(testname, line_number); fatal_error("Malformed line '%s'.\n", line); break;
case STATE_INPUT_LAYOUT: + update_line_number_context(testname, line_number); parse_input_layout_directive(runner, line); break;
@@ -1835,18 +1845,22 @@ void run_shader_tests(struct shader_runner *runner, const struct shader_runner_c }
case STATE_REQUIRE: + update_line_number_context(testname, line_number); parse_require_directive(runner, line); break;
case STATE_RESOURCE: + update_line_number_context(testname, line_number); parse_resource_directive(¤t_resource, line); break;
case STATE_SAMPLER: + update_line_number_context(testname, line_number); parse_sampler_directive(current_sampler, line); break;
case STATE_TEST: + update_line_number_context(testname, line_number); /* Compilation which fails with dxcompiler is not 'todo', therefore the tests are * not 'todo' either. They cannot run, so skip them entirely. */ if (!skip_tests && SUCCEEDED(expect_hr)) @@ -1856,8 +1870,8 @@ void run_shader_tests(struct shader_runner *runner, const struct shader_runner_c } }
- if (line_number) - vkd3d_test_pop_context(); + /* Pop line_number context. */ + vkd3d_test_pop_context();
for (i = 0; i < runner->input_element_count; ++i) free(runner->input_elements[i].name);