d3dcompiler/tests: Make test_reflection_constant_buffer() work on d3d10.

Signed-off-by: Matteo Bruni <mbruni@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Matteo Bruni 2020-02-14 19:31:04 +01:00 committed by Alexandre Julliard
parent 4e8ec8a6e0
commit d4682017d6
1 changed files with 131 additions and 16 deletions

View File

@ -1307,7 +1307,8 @@ static const D3D11_SHADER_BUFFER_DESC test_reflection_constant_buffer_cb_result[
{"c1", D3D_CT_CBUFFER, 4, 64, 0},
};
static const struct {
static const struct
{
D3D11_SHADER_VARIABLE_DESC desc;
unsigned int type;
} test_reflection_constant_buffer_variable_result[] =
@ -1319,6 +1320,104 @@ static const struct {
{{"t", 48, 8, 2, 0}, 4},
};
#else
/*
* fxc.exe /E PS /Tps_4_0 /Fx
*/
#if 0
cbuffer c1
{
float a;
float b[2];
int i;
struct s {
float a;
float b;
} t;
};
class cTest
{
bool m_on;
float4 test(float2 vec);
};
float4 cTest::test(float2 vec)
{
float4 res;
if(m_on)
res = float4(vec.x, vec.y, vec.x+vec.y, 0);
else
res = 0;
return res;
}
cTest g_Test;
float4 PS(float2 uv : TEXCOORD0) : sv_target
{
float4 q = g_Test.test(uv);
q.x = q.x + t.a;
return q;
}
#endif
static DWORD test_reflection_constant_buffer_blob[] = {
0x43425844, 0x0241ca0a, 0xa3bf8da0, 0xdd5f853e, 0xfe868252, 0x00000001, 0x00000414, 0x00000005,
0x00000034, 0x00000230, 0x00000264, 0x00000298, 0x00000398, 0x46454452, 0x000001f4, 0x00000002,
0x00000068, 0x00000002, 0x0000001c, 0xffff0400, 0x00000100, 0x000001c0, 0x0000005c, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000065, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000000, 0x6f6c4724, 0x736c6162,
0x00316300, 0x0000005c, 0x00000001, 0x00000098, 0x00000010, 0x00000000, 0x00000000, 0x00000065,
0x00000004, 0x000000e8, 0x00000040, 0x00000000, 0x00000000, 0x000000b0, 0x00000000, 0x00000004,
0x00000002, 0x000000d8, 0x00000000, 0x65545f67, 0x6d007473, 0x006e6f5f, 0x00010000, 0x00010001,
0x00000000, 0x00000000, 0x000000b7, 0x000000bc, 0x00000000, 0x00000005, 0x00010001, 0x00010000,
0x000000cc, 0x00000148, 0x00000000, 0x00000004, 0x00000000, 0x0000014c, 0x00000000, 0x0000015c,
0x00000010, 0x00000014, 0x00000000, 0x00000160, 0x00000000, 0x00000170, 0x00000024, 0x00000004,
0x00000000, 0x00000174, 0x00000000, 0x00000184, 0x00000030, 0x00000008, 0x00000002, 0x000001b0,
0x00000000, 0xabab0061, 0x00030000, 0x00010001, 0x00000000, 0x00000000, 0xabab0062, 0x00030000,
0x00010001, 0x00000002, 0x00000000, 0xabab0069, 0x00020000, 0x00010001, 0x00000000, 0x00000000,
0xabab0074, 0x00030000, 0x00010001, 0x00000000, 0x00000000, 0x00000148, 0x00000188, 0x00000000,
0x0000015c, 0x00000188, 0x00000004, 0x00000005, 0x00020001, 0x00020000, 0x00000198, 0x7263694d,
0x666f736f, 0x52282074, 0x4c482029, 0x53204c53, 0x65646168, 0x6f432072, 0x6c69706d, 0x39207265,
0x2e39322e, 0x2e323539, 0x31313133, 0xababab00, 0x4e475349, 0x0000002c, 0x00000001, 0x00000008,
0x00000020, 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000303, 0x43584554, 0x44524f4f,
0xababab00, 0x4e47534f, 0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000000,
0x00000003, 0x00000000, 0x0000000f, 0x745f7673, 0x65677261, 0xabab0074, 0x52444853, 0x000000f8,
0x00000040, 0x0000003e, 0x04000059, 0x00208e46, 0x00000000, 0x00000001, 0x04000059, 0x00208e46,
0x00000001, 0x00000004, 0x03001062, 0x00101032, 0x00000000, 0x03000065, 0x001020f2, 0x00000000,
0x02000068, 0x00000001, 0x07000000, 0x00100042, 0x00000000, 0x0010101a, 0x00000000, 0x0010100a,
0x00000000, 0x05000036, 0x00100032, 0x00000000, 0x00101046, 0x00000000, 0x05000036, 0x00100082,
0x00000000, 0x00004001, 0x00000000, 0x0d000037, 0x001000f2, 0x00000000, 0x00208006, 0x00000000,
0x00000000, 0x00100e46, 0x00000000, 0x00004002, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x08000000, 0x00102012, 0x00000000, 0x0010000a, 0x00000000, 0x0020800a, 0x00000001, 0x00000003,
0x05000036, 0x001020e2, 0x00000000, 0x00100e56, 0x00000000, 0x0100003e, 0x54415453, 0x00000074,
0x00000007, 0x00000001, 0x00000000, 0x00000002, 0x00000002, 0x00000000, 0x00000000, 0x00000001,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000001, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
};
static const D3D11_SHADER_BUFFER_DESC test_reflection_constant_buffer_cb_result[] =
{
{"$Globals", D3D_CT_CBUFFER, 1, 16, 0},
{"c1", D3D_CT_CBUFFER, 4, 64, 0},
};
static const struct
{
D3D11_SHADER_VARIABLE_DESC desc;
unsigned int type;
} test_reflection_constant_buffer_variable_result[] =
{
{{"a", 0, 4, 0, 0}, 1},
{{"b", 16, 20, 0, 0}, 2},
{{"i", 36, 4, 0, 0}, 3},
{{"t", 48, 8, 2, 0}, 4},
};
#endif
static const D3D11_SHADER_TYPE_DESC test_reflection_constant_buffer_type_result[] =
{
{D3D11_SVC_INTERFACE_POINTER, D3D11_SVT_INTERFACE_POINTER, 1, 4, 0, 1, 0, "iTest"},
@ -1343,7 +1442,7 @@ static void test_reflection_constant_buffer(void)
const D3D11_SHADER_BUFFER_DESC *pcbdesc;
const D3D11_SHADER_VARIABLE_DESC *pvdesc;
const D3D11_SHADER_TYPE_DESC *ptdesc;
unsigned int i;
unsigned int i, expected;
LPCSTR string;
hr = call_reflect(test_reflection_constant_buffer_blob, test_reflection_constant_buffer_blob[6],
@ -1353,15 +1452,19 @@ static void test_reflection_constant_buffer(void)
hr = ref11->lpVtbl->GetDesc(ref11, &sdesc);
ok(hr == S_OK, "GetDesc failed %x\n", hr);
ok(sdesc.Version == 80, "GetDesc failed, got %u, expected %u\n", sdesc.Version, 80);
expected = D3D_COMPILER_VERSION ? 80 : 64;
ok(sdesc.Version == expected, "Got unexpected version %u.\n", sdesc.Version);
ok(strcmp(sdesc.Creator, (char*) shader_creator) == 0, "GetDesc failed, got \"%s\", expected \"%s\"\n", sdesc.Creator, (char*)shader_creator);
ok(sdesc.Flags == 256, "GetDesc failed, got %u, expected %u\n", sdesc.Flags, 256);
ok(sdesc.ConstantBuffers == 2, "GetDesc failed, got %u, expected %u\n", sdesc.ConstantBuffers, 2);
ok(sdesc.BoundResources == 1, "GetDesc failed, got %u, expected %u\n", sdesc.BoundResources, 1);
expected = D3D_COMPILER_VERSION ? 1 : 2;
ok(sdesc.BoundResources == expected, "Got unexpected BoundResources %u.\n", sdesc.BoundResources);
ok(sdesc.InputParameters == 1, "GetDesc failed, got %u, expected %u\n", sdesc.InputParameters, 1);
ok(sdesc.OutputParameters == 1, "GetDesc failed, got %u, expected %u\n", sdesc.OutputParameters, 1);
ok(sdesc.InstructionCount == 8, "GetDesc failed, got %u, expected %u\n", sdesc.InstructionCount, 8);
ok(sdesc.TempRegisterCount == 2, "GetDesc failed, got %u, expected %u\n", sdesc.TempRegisterCount, 2);
expected = D3D_COMPILER_VERSION ? 8 : 7;
ok(sdesc.InstructionCount == expected, "Got unexpected InstructionCount %u.\n", sdesc.InstructionCount);
expected = D3D_COMPILER_VERSION ? 2 : 1;
ok(sdesc.TempRegisterCount == expected, "Got unexpected TempRegisterCount %u.\n", sdesc.TempRegisterCount);
ok(sdesc.TempArrayCount == 0, "GetDesc failed, got %u, expected %u\n", sdesc.TempArrayCount, 0);
ok(sdesc.DefCount == 0, "GetDesc failed, got %u, expected %u\n", sdesc.DefCount, 0);
ok(sdesc.DclCount == 2, "GetDesc failed, got %u, expected %u\n", sdesc.DclCount, 2);
@ -1372,7 +1475,9 @@ static void test_reflection_constant_buffer(void)
ok(sdesc.TextureGradientInstructions == 0, "GetDesc failed, got %u, expected %u\n", sdesc.TextureGradientInstructions, 0);
ok(sdesc.FloatInstructionCount == 2, "GetDesc failed, got %u, expected %u\n", sdesc.FloatInstructionCount, 2);
ok(sdesc.IntInstructionCount == 0, "GetDesc failed, got %u, expected %u\n", sdesc.IntInstructionCount, 0);
ok(sdesc.UintInstructionCount == 1, "GetDesc failed, got %u, expected %u\n", sdesc.UintInstructionCount, 1);
expected = D3D_COMPILER_VERSION ? 1 : 0;
ok(sdesc.UintInstructionCount == expected, "Got unexpected UintInstructionCount %u.\n",
sdesc.UintInstructionCount);
ok(sdesc.StaticFlowControlCount == 1, "GetDesc failed, got %u, expected %u\n", sdesc.StaticFlowControlCount, 1);
ok(sdesc.DynamicFlowControlCount == 0, "GetDesc failed, got %u, expected %u\n", sdesc.DynamicFlowControlCount, 0);
ok(sdesc.MacroInstructionCount == 0, "GetDesc failed, got %u, expected %u\n", sdesc.MacroInstructionCount, 0);
@ -1419,6 +1524,7 @@ static void test_reflection_constant_buffer(void)
cb11 = ref11->lpVtbl->GetConstantBufferByName(ref11, NULL);
ok(cb11_dummy == cb11, "GetConstantBufferByName failed, got %p, expected %p\n", cb11, cb11_dummy);
#if D3D_COMPILER_VERSION
v11 = ref11->lpVtbl->GetVariableByName(ref11, NULL);
ok(v11_dummy == v11, "GetVariableByIndex failed, got %p, expected %p\n", v11, v11_dummy);
@ -1427,6 +1533,7 @@ static void test_reflection_constant_buffer(void)
v11 = ref11->lpVtbl->GetVariableByName(ref11, "a");
ok(v11_valid == v11, "GetVariableByName failed, got %p, expected %p\n", v11, v11_valid);
#endif
/* constant buffer calls */
v11 = cb11_dummy->lpVtbl->GetVariableByName(cb11_dummy, NULL);
@ -1497,6 +1604,7 @@ static void test_reflection_constant_buffer(void)
t11 = t11_valid->lpVtbl->GetMemberTypeByName(t11_valid, "invalid");
ok(t11_dummy == t11, "GetMemberTypeByName failed, got %p, expected %p\n", t11, t11_dummy);
#if D3D_COMPILER_VERSION
hr = t11_dummy->lpVtbl->IsEqual(t11_dummy, t11_dummy);
ok(hr == E_FAIL, "IsEqual failed, got %x, expected %x\n", hr, E_FAIL);
@ -1508,6 +1616,7 @@ static void test_reflection_constant_buffer(void)
hr = t11_valid->lpVtbl->IsEqual(t11_valid, t11_valid);
ok(hr == S_OK, "IsEqual failed, got %x, expected %x\n", hr, S_OK);
#endif
/* constant buffers */
for (i = 0; i < ARRAY_SIZE(test_reflection_constant_buffer_cb_result); ++i)
@ -1537,8 +1646,11 @@ static void test_reflection_constant_buffer(void)
{
pvdesc = &test_reflection_constant_buffer_variable_result[i].desc;
v11 = ref11->lpVtbl->GetVariableByName(ref11, pvdesc->Name);
ok(v11_dummy != v11, "GetVariableByName(%u) failed\n", i);
if (D3D_COMPILER_VERSION)
v11 = ref11->lpVtbl->GetVariableByName(ref11, pvdesc->Name);
else
v11 = cb11_valid->lpVtbl->GetVariableByName(cb11_valid, pvdesc->Name);
ok(v11_dummy != v11, "Test %u: got unexpected variable %p.\n", i, v11);
hr = v11->lpVtbl->GetDesc(v11, &vdesc);
ok(hr == S_OK, "GetDesc(%u) failed, got %x, expected %x\n", i, hr, S_OK);
@ -1574,13 +1686,17 @@ static void test_reflection_constant_buffer(void)
i, tdesc.Elements, ptdesc->Elements);
ok(tdesc.Offset == ptdesc->Offset, "GetDesc(%u) Offset failed, got %u, expected %u\n",
i, tdesc.Offset, ptdesc->Offset);
ok(!strcmp(tdesc.Name, ptdesc->Name), "GetDesc(%u) Name failed, got %s, expected %s\n",
i, tdesc.Name, ptdesc->Name);
if (D3D_COMPILER_VERSION)
ok(!strcmp(tdesc.Name, ptdesc->Name), "Test %u: got unexpected Name %s.\n",
i, debugstr_a(tdesc.Name));
}
/* types */
v11 = ref11->lpVtbl->GetVariableByName(ref11, "t");
ok(v11_dummy != v11, "GetVariableByName failed\n");
if (D3D_COMPILER_VERSION)
v11 = ref11->lpVtbl->GetVariableByName(ref11, "t");
else
v11 = cb11_valid->lpVtbl->GetVariableByName(cb11_valid, pvdesc->Name);
ok(v11_dummy != v11, "Got unexpected variable %p.\n", v11);
t11 = v11->lpVtbl->GetType(v11);
ok(t11 != t11_dummy, "GetType failed\n");
@ -1603,6 +1719,7 @@ static void test_reflection_constant_buffer(void)
string = t11->lpVtbl->GetMemberTypeName(t11, 1);
ok(!strcmp(string, "b"), "GetMemberTypeName failed, got \"%s\", expected \"%s\"\n", string, "b");
#if D3D_COMPILER_VERSION
/* float vs float (in struct) */
hr = t11->lpVtbl->IsEqual(t11, t11_valid);
ok(hr == S_FALSE, "IsEqual failed, got %x, expected %x\n", hr, S_FALSE);
@ -1619,11 +1736,11 @@ static void test_reflection_constant_buffer(void)
hr = t->lpVtbl->IsEqual(t, t2);
ok(hr == S_OK, "IsEqual failed, got %x, expected %x\n", hr, S_OK);
#endif
count = ref11->lpVtbl->Release(ref11);
ok(count == 0, "Release failed %u\n", count);
}
#endif
static BOOL load_d3dreflect(void)
{
@ -1658,7 +1775,5 @@ START_TEST(reflection)
test_reflection_desc_ps();
test_reflection_desc_ps_output();
test_reflection_bound_resources();
#if D3D_COMPILER_VERSION
test_reflection_constant_buffer();
#endif
}