This MR includes: - A fix to a comment in vkd3d-shader/ir.c (out of MR scope but really tiny!). - A fix when creating UAV buffers in the shader_runner d3d12 backend. - Fixes to (hopefully) all the memory leaks in the shader_runner reported by valgrind when running all tests.
From: Francisco Casas fcasas@codeweavers.com
--- libs/vkd3d-shader/ir.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libs/vkd3d-shader/ir.c b/libs/vkd3d-shader/ir.c index 865a292cd..36d96ebdf 100644 --- a/libs/vkd3d-shader/ir.c +++ b/libs/vkd3d-shader/ir.c @@ -2239,7 +2239,7 @@ static enum vkd3d_result flatten_control_flow_constructs(struct vkd3d_shader_par }
vkd3d_free(flattener.control_flow_info); - /* Simpler to always free these in free_shader_desc(). */ + /* Simpler to always free these in vsir_program_cleanup(). */ program->block_names = flattener.block_names; program->block_name_count = flattener.block_name_count;
From: Francisco Casas fcasas@codeweavers.com
The implementation of upload_buffer_data_with_states(), unlike the implementation of upload_texture_data_with_states(), does not expect a pointer to a D3D12_SUBRESOURCE_DATA, but rather, a direct pointer to the data. --- tests/shader_runner_d3d12.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/shader_runner_d3d12.c b/tests/shader_runner_d3d12.c index d6b80d9ea..233feca19 100644 --- a/tests/shader_runner_d3d12.c +++ b/tests/shader_runner_d3d12.c @@ -197,7 +197,7 @@ static struct resource *d3d12_runner_create_resource(struct shader_runner *r, co
resource->resource = create_default_buffer(device, params->data_size, D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_COPY_DEST); - upload_buffer_data_with_states(resource->resource, 0, params->data_size, resource_data, + upload_buffer_data_with_states(resource->resource, 0, params->data_size, resource_data[0].pData, test_context->queue, test_context->list, RESOURCE_STATE_DO_NOT_CHANGE, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); reset_command_list(test_context->list, test_context->allocator);
From: Francisco Casas fcasas@codeweavers.com
--- tests/shader_runner.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/tests/shader_runner.c b/tests/shader_runner.c index bac3a8f26..e92442c8a 100644 --- a/tests/shader_runner.c +++ b/tests/shader_runner.c @@ -616,6 +616,7 @@ static void parse_test_directive(struct shader_runner *runner, const char *line) memcpy(params.data, quad, sizeof(quad)); params.data_size = sizeof(quad); set_resource(runner, runner->ops->create_resource(runner, ¶ms)); + free(params.data);
if (!runner->vs_source) runner->vs_source = strdup(vs_source);
From: Francisco Casas fcasas@codeweavers.com
--- tests/shader_runner.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/tests/shader_runner.c b/tests/shader_runner.c index e92442c8a..6a1fdc4d4 100644 --- a/tests/shader_runner.c +++ b/tests/shader_runner.c @@ -1511,6 +1511,7 @@ void run_shader_tests(struct shader_runner *runner, const struct shader_runner_o free(runner->input_elements); free(runner->vs_source); free(runner->ps_source); + free(runner->uniforms); for (i = 0; i < runner->resource_count; ++i) { if (runner->resources[i])
From: Francisco Casas fcasas@codeweavers.com
--- tests/shader_runner_vulkan.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/tests/shader_runner_vulkan.c b/tests/shader_runner_vulkan.c index bb6b3a30a..eba08a22b 100644 --- a/tests/shader_runner_vulkan.c +++ b/tests/shader_runner_vulkan.c @@ -1245,10 +1245,12 @@ static bool check_device_extensions(struct vulkan_shader_runner *runner) if (!has_extension(extensions, count, required_device_extensions[i])) { skip("The selected Vulkan device does not support %s.\n", required_device_extensions[i]); + free(extensions); return false; } }
+ free(extensions); return true; }
From: Francisco Casas fcasas@codeweavers.com
--- tests/shader_runner.c | 4 ++++ 1 file changed, 4 insertions(+)
diff --git a/tests/shader_runner.c b/tests/shader_runner.c index 6a1fdc4d4..d82017f32 100644 --- a/tests/shader_runner.c +++ b/tests/shader_runner.c @@ -569,6 +569,7 @@ static void parse_test_directive(struct shader_runner *runner, const char *line) { struct resource_params params; struct input_element *element; + unsigned int i;
/* For simplicity, draw a large triangle instead. */ static const struct vec2 quad[] = @@ -599,6 +600,9 @@ static void parse_test_directive(struct shader_runner *runner, const char *line) set_resource(runner, runner->ops->create_resource(runner, ¶ms)); }
+ for (i = 0; i < runner->input_element_count; ++i) + free(runner->input_elements[i].name); + vkd3d_array_reserve((void **)&runner->input_elements, &runner->input_element_capacity, 1, sizeof(*runner->input_elements)); element = &runner->input_elements[0];
From: Francisco Casas fcasas@codeweavers.com
--- tests/shader_runner.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/tests/shader_runner.c b/tests/shader_runner.c index d82017f32..7ab4846ed 100644 --- a/tests/shader_runner.c +++ b/tests/shader_runner.c @@ -1515,6 +1515,8 @@ void run_shader_tests(struct shader_runner *runner, const struct shader_runner_o free(runner->input_elements); free(runner->vs_source); free(runner->ps_source); + free(runner->cs_source); + free(runner->fx_source); free(runner->uniforms); for (i = 0; i < runner->resource_count; ++i) {
This merge request was approved by Giovanni Mascellani.
Notice that we usually convert underscores to dashes in commit subject prefixes: so it is `d3d-asm` rather than `d3d_asm` and `shader-runner` rather than `shader_runner`. I am not sure of why we do that, but it seems to be the convention.
This merge request was approved by Henri Verbeet.