mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-01-28 13:05:02 -08:00
tests: Import invalid HLSL shader tests from Wine.
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
57a8a90856
commit
ce4c7a1634
@ -53,6 +53,7 @@ vkd3d_shader_tests = \
|
|||||||
tests/conditional.shader_test \
|
tests/conditional.shader_test \
|
||||||
tests/hlsl-array-dimension.shader_test \
|
tests/hlsl-array-dimension.shader_test \
|
||||||
tests/hlsl-comma.shader_test \
|
tests/hlsl-comma.shader_test \
|
||||||
|
tests/hlsl-invalid.shader_test \
|
||||||
tests/hlsl-majority-pragma.shader_test \
|
tests/hlsl-majority-pragma.shader_test \
|
||||||
tests/hlsl-majority-typedef.shader_test \
|
tests/hlsl-majority-typedef.shader_test \
|
||||||
tests/hlsl-return-implicit-conversion.shader_test \
|
tests/hlsl-return-implicit-conversion.shader_test \
|
||||||
@ -194,6 +195,7 @@ XFAIL_TESTS = \
|
|||||||
tests/conditional.shader_test \
|
tests/conditional.shader_test \
|
||||||
tests/hlsl-array-dimension.shader_test \
|
tests/hlsl-array-dimension.shader_test \
|
||||||
tests/hlsl-comma.shader_test \
|
tests/hlsl-comma.shader_test \
|
||||||
|
tests/hlsl-invalid.shader_test \
|
||||||
tests/hlsl-majority-pragma.shader_test \
|
tests/hlsl-majority-pragma.shader_test \
|
||||||
tests/hlsl-majority-typedef.shader_test \
|
tests/hlsl-majority-typedef.shader_test \
|
||||||
tests/hlsl-return-implicit-conversion.shader_test \
|
tests/hlsl-return-implicit-conversion.shader_test \
|
||||||
|
117
tests/hlsl-invalid.shader_test
Normal file
117
tests/hlsl-invalid.shader_test
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
[pixel shader fail]
|
||||||
|
float4 main() : sv_target
|
||||||
|
{
|
||||||
|
return y;
|
||||||
|
}
|
||||||
|
|
||||||
|
[pixel shader fail]
|
||||||
|
float4 main() : sv_target
|
||||||
|
{
|
||||||
|
float4 x = float4(0, 0, 0, 0);
|
||||||
|
x.xzzx = float4(1, 2, 3, 4);
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
[pixel shader fail]
|
||||||
|
float4 main(float2 pos : TEXCOORD0) : sv_target
|
||||||
|
{
|
||||||
|
float4 x = pos;
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
[pixel shader fail]
|
||||||
|
float4 563r(float2 45s : TEXCOORD0) : sv_target
|
||||||
|
{
|
||||||
|
float4 x = 45s;
|
||||||
|
return float4(x.x, x.y, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[pixel shader fail]
|
||||||
|
float4 main() : sv_target
|
||||||
|
{
|
||||||
|
struct { int b,c; } x = {0};
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
[pixel shader fail]
|
||||||
|
float4 main() : sv_target
|
||||||
|
{
|
||||||
|
struct {} x = {};
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
[pixel shader fail]
|
||||||
|
float4 main(float2 pos : TEXCOORD0) : sv_target
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
[pixel shader fail]
|
||||||
|
void main(float2 pos : TEXCOORD0)
|
||||||
|
{
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
|
|
||||||
|
[pixel shader fail]
|
||||||
|
float4 main(float2 pos : TEXCOORD0) : sv_target
|
||||||
|
{
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
|
|
||||||
|
[pixel shader fail]
|
||||||
|
float4 main() : sv_target
|
||||||
|
{
|
||||||
|
float a[0];
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
[pixel shader fail]
|
||||||
|
float4 main() : sv_target
|
||||||
|
{
|
||||||
|
float a[65537];
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
[pixel shader fail]
|
||||||
|
float4 main() : sv_target
|
||||||
|
{
|
||||||
|
int x;
|
||||||
|
float a[(x = 2)];
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
[pixel shader fail]
|
||||||
|
uniform float4 main() : sv_target
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
[pixel shader fail]
|
||||||
|
typedef row_major float4x4 matrix_t;
|
||||||
|
typedef column_major matrix_t matrix2_t;
|
||||||
|
|
||||||
|
float4 main() : sv_target
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
[pixel shader fail]
|
||||||
|
float4 main()
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
[pixel shader fail]
|
||||||
|
float4 main(out float4 o : sv_target)
|
||||||
|
{
|
||||||
|
o = 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
[pixel shader fail]
|
||||||
|
struct {float4 a;};
|
||||||
|
|
||||||
|
float4 main() : sv_target
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
@ -102,6 +102,7 @@ static ID3D10Blob *compile_shader(const char *source, const char *target)
|
|||||||
enum parse_state
|
enum parse_state
|
||||||
{
|
{
|
||||||
STATE_NONE,
|
STATE_NONE,
|
||||||
|
STATE_SHADER_INVALID_PIXEL,
|
||||||
STATE_SHADER_PIXEL,
|
STATE_SHADER_PIXEL,
|
||||||
STATE_TEST,
|
STATE_TEST,
|
||||||
};
|
};
|
||||||
@ -269,10 +270,10 @@ START_TEST(shader_runner_d3d12)
|
|||||||
};
|
};
|
||||||
size_t shader_source_size = 0, shader_source_len = 0;
|
size_t shader_source_size = 0, shader_source_len = 0;
|
||||||
enum parse_state state = STATE_NONE;
|
enum parse_state state = STATE_NONE;
|
||||||
|
unsigned int i, line_number = 0;
|
||||||
struct shader_context context;
|
struct shader_context context;
|
||||||
const char *filename = NULL;
|
const char *filename = NULL;
|
||||||
char *shader_source = NULL;
|
char *shader_source = NULL;
|
||||||
unsigned int i;
|
|
||||||
char line[256];
|
char line[256];
|
||||||
FILE *f;
|
FILE *f;
|
||||||
|
|
||||||
@ -304,12 +305,13 @@ START_TEST(shader_runner_d3d12)
|
|||||||
memset(&context, 0, sizeof(context));
|
memset(&context, 0, sizeof(context));
|
||||||
init_test_context(&context.c, &desc);
|
init_test_context(&context.c, &desc);
|
||||||
|
|
||||||
while (fgets(line, sizeof(line), f))
|
for (;;)
|
||||||
{
|
{
|
||||||
if (line[0] == '\n')
|
char *ret = fgets(line, sizeof(line), f);
|
||||||
continue;
|
|
||||||
|
|
||||||
if (line[0] == '[')
|
++line_number;
|
||||||
|
|
||||||
|
if (!ret || line[0] == '[')
|
||||||
{
|
{
|
||||||
switch (state)
|
switch (state)
|
||||||
{
|
{
|
||||||
@ -322,14 +324,43 @@ START_TEST(shader_runner_d3d12)
|
|||||||
return;
|
return;
|
||||||
shader_source_len = 0;
|
shader_source_len = 0;
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
|
case STATE_SHADER_INVALID_PIXEL:
|
||||||
|
{
|
||||||
|
ID3D10Blob *blob = NULL, *errors = NULL;
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
|
hr = D3DCompile(shader_source, strlen(shader_source), NULL,
|
||||||
|
NULL, NULL, "main", "ps_4_0", 0, 0, &blob, &errors);
|
||||||
|
ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
|
||||||
|
ok(!blob, "Expected no compiled shader blob.\n");
|
||||||
|
ok(!!errors, "Expected non-NULL error blob.\n");
|
||||||
|
|
||||||
|
if (vkd3d_test_state.debug_level)
|
||||||
|
trace("%s\n", (char *)ID3D10Blob_GetBufferPointer(errors));
|
||||||
|
ID3D10Blob_Release(errors);
|
||||||
|
|
||||||
|
shader_source_len = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ret)
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (line[0] == '[')
|
||||||
|
{
|
||||||
if (!strcmp(line, "[pixel shader]\n"))
|
if (!strcmp(line, "[pixel shader]\n"))
|
||||||
state = STATE_SHADER_PIXEL;
|
state = STATE_SHADER_PIXEL;
|
||||||
|
else if (!strcmp(line, "[pixel shader fail]\n"))
|
||||||
|
state = STATE_SHADER_INVALID_PIXEL;
|
||||||
else if (!strcmp(line, "[test]\n"))
|
else if (!strcmp(line, "[test]\n"))
|
||||||
state = STATE_TEST;
|
state = STATE_TEST;
|
||||||
|
|
||||||
|
vkd3d_test_set_context("Section %.*s, line %u", strlen(line) - 1, line, line_number);
|
||||||
}
|
}
|
||||||
else
|
else if (line[0] != '\n')
|
||||||
{
|
{
|
||||||
switch (state)
|
switch (state)
|
||||||
{
|
{
|
||||||
@ -338,6 +369,7 @@ START_TEST(shader_runner_d3d12)
|
|||||||
fprintf(stderr, "Ignoring line '%s' in %s.\n", line, argv[1]);
|
fprintf(stderr, "Ignoring line '%s' in %s.\n", line, argv[1]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case STATE_SHADER_INVALID_PIXEL:
|
||||||
case STATE_SHADER_PIXEL:
|
case STATE_SHADER_PIXEL:
|
||||||
{
|
{
|
||||||
size_t len = strlen(line);
|
size_t len = strlen(line);
|
||||||
@ -356,7 +388,8 @@ START_TEST(shader_runner_d3d12)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ID3D10Blob_Release(context.ps_code);
|
if (context.ps_code)
|
||||||
|
ID3D10Blob_Release(context.ps_code);
|
||||||
destroy_test_context(&context.c);
|
destroy_test_context(&context.c);
|
||||||
|
|
||||||
fclose(f);
|
fclose(f);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user