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)
|
for (i = 0; i < l->element_count; ++i)
|
||||||
{
|
{
|
||||||
free(l->elements[i].name);
|
free((char *)l->elements[i].name);
|
||||||
}
|
}
|
||||||
l->element_count = 0;
|
l->element_count = 0;
|
||||||
}
|
}
|
||||||
@@ -834,6 +834,7 @@ static void parse_input_layout_directive(struct shader_runner *runner, const cha
|
|||||||
{
|
{
|
||||||
struct input_element *element;
|
struct input_element *element;
|
||||||
const char *rest;
|
const char *rest;
|
||||||
|
char *name;
|
||||||
|
|
||||||
vkd3d_array_reserve((void **)&runner->input.elements, &runner->input.element_capacity,
|
vkd3d_array_reserve((void **)&runner->input.elements, &runner->input.element_capacity,
|
||||||
runner->input.element_count + 1, sizeof(*runner->input.elements));
|
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")))
|
if (!(rest = strpbrk(line, " \n")))
|
||||||
rest = line + strlen(line);
|
rest = line + strlen(line);
|
||||||
element->name = malloc(rest - line + 1);
|
name = malloc(rest - line + 1);
|
||||||
memcpy(element->name, line, rest - line);
|
memcpy(name, line, rest - line);
|
||||||
element->name[rest - line] = 0;
|
name[rest - line] = 0;
|
||||||
|
element->name = name;
|
||||||
line = rest;
|
line = rest;
|
||||||
|
|
||||||
element->index = strtoul(line, (char **)&rest, 10);
|
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))
|
else if (match_string(line, "draw quad", &line))
|
||||||
{
|
{
|
||||||
|
struct input_layout input_layout;
|
||||||
struct resource_params params;
|
struct resource_params params;
|
||||||
struct input_element *element;
|
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
/* For simplicity, draw a large triangle instead. */
|
/* 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},
|
{ 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[] =
|
static const char vs_source[] =
|
||||||
"float4 main(float4 pos : position) : sv_position\n"
|
"float4 main(float4 pos : position) : sv_position\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
@@ -1230,17 +1248,8 @@ static void parse_test_directive(struct shader_runner *runner, const char *line)
|
|||||||
|
|
||||||
set_default_target(runner);
|
set_default_target(runner);
|
||||||
|
|
||||||
input_layout_clear(&runner->input);
|
input_layout = runner->input;
|
||||||
|
runner->input = quad_layout;
|
||||||
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;
|
|
||||||
|
|
||||||
memset(¶ms, 0, sizeof(params));
|
memset(¶ms, 0, sizeof(params));
|
||||||
params.desc.slot = 0;
|
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);
|
runner->last_render_failed = !runner->ops->draw(runner, D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST, 3, 1);
|
||||||
todo_if(runner->is_todo) bug_if(runner->is_bug)
|
todo_if(runner->is_todo) bug_if(runner->is_bug)
|
||||||
ok(!runner->last_render_failed, "Draw failed.\n");
|
ok(!runner->last_render_failed, "Draw failed.\n");
|
||||||
|
|
||||||
|
runner->input = input_layout;
|
||||||
}
|
}
|
||||||
else if (match_string(line, "draw", &line))
|
else if (match_string(line, "draw", &line))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -127,7 +127,7 @@ struct resource
|
|||||||
|
|
||||||
struct input_element
|
struct input_element
|
||||||
{
|
{
|
||||||
char *name;
|
const char *name;
|
||||||
unsigned int slot;
|
unsigned int slot;
|
||||||
DXGI_FORMAT format;
|
DXGI_FORMAT format;
|
||||||
unsigned int texel_size;
|
unsigned int texel_size;
|
||||||
|
|||||||
Reference in New Issue
Block a user