mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-12-15 08:03:30 -08:00
tests/shader_runner: Restore the input layout after "draw quad" operations.
We don't want these to implicitly change the input layout.
This commit is contained in:
committed by
Henri Verbeet
parent
be3912f600
commit
b2b678bdc2
Notes:
Henri Verbeet
2025-12-11 19:10:21 +01:00
Approved-by: Giovanni Mascellani (@giomasce) Approved-by: Henri Verbeet (@hverbeet) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1229
@@ -119,7 +119,7 @@ static void input_layout_clear(struct input_layout *l)
|
||||
|
||||
for (i = 0; i < l->element_count; ++i)
|
||||
{
|
||||
free(l->elements[i].name);
|
||||
free((char *)l->elements[i].name);
|
||||
}
|
||||
l->element_count = 0;
|
||||
}
|
||||
@@ -834,6 +834,7 @@ static void parse_input_layout_directive(struct shader_runner *runner, const cha
|
||||
{
|
||||
struct input_element *element;
|
||||
const char *rest;
|
||||
char *name;
|
||||
|
||||
vkd3d_array_reserve((void **)&runner->input.elements, &runner->input.element_capacity,
|
||||
runner->input.element_count + 1, sizeof(*runner->input.elements));
|
||||
@@ -848,9 +849,10 @@ static void parse_input_layout_directive(struct shader_runner *runner, const cha
|
||||
|
||||
if (!(rest = strpbrk(line, " \n")))
|
||||
rest = line + strlen(line);
|
||||
element->name = malloc(rest - line + 1);
|
||||
memcpy(element->name, line, rest - line);
|
||||
element->name[rest - line] = 0;
|
||||
name = malloc(rest - line + 1);
|
||||
memcpy(name, line, rest - line);
|
||||
name[rest - line] = 0;
|
||||
element->name = name;
|
||||
line = rest;
|
||||
|
||||
element->index = strtoul(line, (char **)&rest, 10);
|
||||
@@ -1207,8 +1209,8 @@ static void parse_test_directive(struct shader_runner *runner, const char *line)
|
||||
}
|
||||
else if (match_string(line, "draw quad", &line))
|
||||
{
|
||||
struct input_layout input_layout;
|
||||
struct resource_params params;
|
||||
struct input_element *element;
|
||||
unsigned int i;
|
||||
|
||||
/* For simplicity, draw a large triangle instead. */
|
||||
@@ -1219,6 +1221,22 @@ static void parse_test_directive(struct shader_runner *runner, const char *line)
|
||||
{ 4.0f, -2.0f},
|
||||
};
|
||||
|
||||
static const struct input_element position_element =
|
||||
{
|
||||
.name = "position",
|
||||
.slot = 0,
|
||||
.format = DXGI_FORMAT_R32G32_FLOAT,
|
||||
.texel_size = sizeof(*quad),
|
||||
.index = 0,
|
||||
};
|
||||
|
||||
static const struct input_layout quad_layout =
|
||||
{
|
||||
.elements = (struct input_element *)&position_element,
|
||||
.element_count = 1,
|
||||
.element_capacity = 1,
|
||||
};
|
||||
|
||||
static const char vs_source[] =
|
||||
"float4 main(float4 pos : position) : sv_position\n"
|
||||
"{\n"
|
||||
@@ -1230,17 +1248,8 @@ static void parse_test_directive(struct shader_runner *runner, const char *line)
|
||||
|
||||
set_default_target(runner);
|
||||
|
||||
input_layout_clear(&runner->input);
|
||||
|
||||
vkd3d_array_reserve((void **)&runner->input.elements,
|
||||
&runner->input.element_capacity, 1, sizeof(*runner->input.elements));
|
||||
element = &runner->input.elements[0];
|
||||
element->name = strdup("position");
|
||||
element->slot = 0;
|
||||
element->format = DXGI_FORMAT_R32G32_FLOAT;
|
||||
element->texel_size = sizeof(*quad);
|
||||
element->index = 0;
|
||||
runner->input.element_count = 1;
|
||||
input_layout = runner->input;
|
||||
runner->input = quad_layout;
|
||||
|
||||
memset(¶ms, 0, sizeof(params));
|
||||
params.desc.slot = 0;
|
||||
@@ -1267,6 +1276,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);
|
||||
todo_if(runner->is_todo) bug_if(runner->is_bug)
|
||||
ok(!runner->last_render_failed, "Draw failed.\n");
|
||||
|
||||
runner->input = input_layout;
|
||||
}
|
||||
else if (match_string(line, "draw", &line))
|
||||
{
|
||||
|
||||
@@ -127,7 +127,7 @@ struct resource
|
||||
|
||||
struct input_element
|
||||
{
|
||||
char *name;
|
||||
const char *name;
|
||||
unsigned int slot;
|
||||
DXGI_FORMAT format;
|
||||
unsigned int texel_size;
|
||||
|
||||
Reference in New Issue
Block a user