d3dcompiler/tests: Add constant buffer test.

This commit is contained in:
Rico Schüller 2011-02-27 22:51:05 +01:00 committed by Alexandre Julliard
parent 3c1ffbf2e7
commit a0abef6b45
1 changed files with 336 additions and 0 deletions

View File

@ -1091,6 +1091,341 @@ static void test_reflection_bound_resources(void)
ok(count == 0, "Release failed %u\n", count);
}
/*
* fxc.exe /E PS /Tps_5_0 /Fx
*/
#if 0
cbuffer c1
{
float a;
float b[2];
int i;
struct s {
float a;
float b;
} t;
};
interface iTest
{
float4 test(float2 vec);
};
class cTest : iTest
{
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;
}
iTest 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, 0xe6470e0d, 0x0d5698bb, 0x29373c30, 0x64a5d268, 0x00000001, 0x00000590, 0x00000006,
0x00000038, 0x00000318, 0x0000034c, 0x00000380, 0x000003d8, 0x000004f4, 0x46454452, 0x000002d8,
0x00000002, 0x00000060, 0x00000001, 0x0000003c, 0xffff0500, 0x00000100, 0x000002a4, 0x31314452,
0x0000003c, 0x00000018, 0x00000020, 0x00000028, 0x00000024, 0x0000000c, 0x00000001, 0x0000005c,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0xab003163,
0x00000090, 0x00000001, 0x000000a0, 0x00000010, 0x00000000, 0x00000002, 0x0000005c, 0x00000004,
0x00000120, 0x00000040, 0x00000000, 0x00000000, 0x69685424, 0x696f5073, 0x7265746e, 0xababab00,
0x000000c8, 0x00000000, 0x00000001, 0x00000006, 0x000000fc, 0x00000000, 0xffffffff, 0x00000000,
0xffffffff, 0x00000000, 0x65545f67, 0x69007473, 0x74736554, 0xababab00, 0x00000006, 0x00000001,
0x00000000, 0x000000d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000cf, 0x00250007,
0x00040001, 0x00000000, 0x00000000, 0x000000d8, 0x00000000, 0x00000000, 0x00000000, 0x000000cf,
0x000001c0, 0x00000000, 0x00000004, 0x00000000, 0x000001c8, 0x00000000, 0xffffffff, 0x00000000,
0xffffffff, 0x00000000, 0x000001ec, 0x00000010, 0x00000014, 0x00000000, 0x000001f0, 0x00000000,
0xffffffff, 0x00000000, 0xffffffff, 0x00000000, 0x00000214, 0x00000024, 0x00000004, 0x00000000,
0x0000021c, 0x00000000, 0xffffffff, 0x00000000, 0xffffffff, 0x00000000, 0x00000240, 0x00000030,
0x00000008, 0x00000002, 0x00000280, 0x00000000, 0xffffffff, 0x00000000, 0xffffffff, 0x00000000,
0x6c660061, 0x0074616f, 0x00030000, 0x00010001, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x000001c2, 0xabab0062, 0x00030000, 0x00010001, 0x00000002, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000001c2, 0x6e690069, 0xabab0074, 0x00020000,
0x00010001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000216,
0x00730074, 0x00030000, 0x00010001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x000001c2, 0x000001c0, 0x00000244, 0x00000000, 0x000001ec, 0x00000244, 0x00000004,
0x00000005, 0x00020001, 0x00020000, 0x00000268, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000242, 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,
0x45434649, 0x00000050, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000040, 0x00000034,
0x00000024, 0x00000000, 0x4e47534f, 0x00000001, 0x00000001, 0x00000040, 0x00000044, 0x00000048,
0x00010000, 0x00000000, 0xabab0000, 0x00000000, 0x73655463, 0xabab0074, 0x58454853, 0x00000114,
0x00000050, 0x00000045, 0x0100086a, 0x04000059, 0x00208e46, 0x00000000, 0x00000004, 0x03000091,
0x00000000, 0x00000000, 0x05000092, 0x00000000, 0x00000000, 0x00010001, 0x00000000, 0x03001062,
0x00101032, 0x00000000, 0x03000065, 0x001020f2, 0x00000000, 0x02000068, 0x00000002, 0x07000000,
0x00100042, 0x00000000, 0x0010101a, 0x00000000, 0x0010100a, 0x00000000, 0x05000036, 0x00100032,
0x00000000, 0x00101046, 0x00000000, 0x05000036, 0x00100082, 0x00000000, 0x00004001, 0x00000000,
0x05000036, 0x00100032, 0x00000001, 0x0011d516, 0x00000000, 0x0a000001, 0x001000f2, 0x00000000,
0x00100e46, 0x00000000, 0x04a08006, 0x0010001a, 0x00000001, 0x0010000a, 0x00000001, 0x08000000,
0x00102012, 0x00000000, 0x0010000a, 0x00000000, 0x0020800a, 0x00000000, 0x00000003, 0x05000036,
0x001020e2, 0x00000000, 0x00100e56, 0x00000000, 0x0100003e, 0x54415453, 0x00000094, 0x00000008,
0x00000002, 0x00000000, 0x00000002, 0x00000002, 0x00000000, 0x00000001, 0x00000001, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000,
};
static const D3D11_SHADER_BUFFER_DESC test_reflection_constant_buffer_cb_result[] =
{
{"$ThisPointer", D3D_CT_INTERFACE_POINTERS, 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[] =
{
{{"g_Test", 0, 1, 6, 0}, 0},
{{"a", 0, 4, 0, 0}, 1},
{{"b", 16, 20, 0, 0}, 2},
{{"i", 36, 4, 0, 0}, 3},
{{"t", 48, 8, 2, 0}, 4},
};
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},
{D3D_SVC_SCALAR, D3D_SVT_FLOAT, 1, 1, 0, 1, 0},
{D3D_SVC_SCALAR, D3D_SVT_FLOAT, 1, 1, 2, 1, 0},
{D3D_SVC_SCALAR, D3D_SVT_INT, 1, 1, 0, 1, 0},
{D3D_SVC_STRUCT, D3D_SVT_VOID, 1, 2, 0, 1, 0},
};
static void test_reflection_constant_buffer(void)
{
HRESULT hr;
ULONG count;
ID3D11ShaderReflection *ref11;
ID3D11ShaderReflectionConstantBuffer *cb11, *cb11_dummy = NULL, *cb11_valid = NULL;
ID3D11ShaderReflectionVariable *v11, *v11_dummy = NULL, *v11_valid = NULL;
ID3D11ShaderReflectionType *t11, *t11_dummy = NULL, *t11_valid = NULL;
D3D11_SHADER_BUFFER_DESC cbdesc = {0};
D3D11_SHADER_VARIABLE_DESC vdesc = {0};
D3D11_SHADER_TYPE_DESC tdesc = {0};
D3D11_SHADER_DESC sdesc = {0};
const D3D11_SHADER_BUFFER_DESC *pcbdesc;
const D3D11_SHADER_VARIABLE_DESC *pvdesc;
const D3D11_SHADER_TYPE_DESC *ptdesc;
unsigned int i;
hr = D3DReflect(test_reflection_constant_buffer_blob, test_reflection_constant_buffer_blob[6], &IID_ID3D11ShaderReflection, (void **)&ref11);
ok(hr == S_OK, "D3DReflect failed %x\n", hr);
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);
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);
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);
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);
ok(sdesc.TextureNormalInstructions == 0, "GetDesc failed, got %u, expected %u\n", sdesc.TextureNormalInstructions, 0);
ok(sdesc.TextureLoadInstructions == 0, "GetDesc failed, got %u, expected %u\n", sdesc.TextureLoadInstructions, 0);
ok(sdesc.TextureCompInstructions == 0, "GetDesc failed, got %u, expected %u\n", sdesc.TextureCompInstructions, 0);
ok(sdesc.TextureBiasInstructions == 0, "GetDesc failed, got %u, expected %u\n", sdesc.TextureBiasInstructions, 0);
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);
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);
ok(sdesc.ArrayInstructionCount == 0, "GetDesc failed, got %u, expected %u\n", sdesc.ArrayInstructionCount, 0);
ok(sdesc.CutInstructionCount == 0, "GetDesc failed, got %u, expected %u\n", sdesc.CutInstructionCount, 0);
ok(sdesc.EmitInstructionCount == 0, "GetDesc failed, got %u, expected %u\n", sdesc.EmitInstructionCount, 0);
ok(sdesc.GSOutputTopology == 0, "GetDesc failed, got %x, expected %x\n", sdesc.GSOutputTopology, 0);
ok(sdesc.GSMaxOutputVertexCount == 0, "GetDesc failed, got %u, expected %u\n", sdesc.GSMaxOutputVertexCount, 0);
ok(sdesc.InputPrimitive == 0, "GetDesc failed, got %x, expected %x\n", sdesc.InputPrimitive, 0);
ok(sdesc.PatchConstantParameters == 0, "GetDesc failed, got %u, expected %u\n", sdesc.PatchConstantParameters, 0);
ok(sdesc.cGSInstanceCount == 0, "GetDesc failed, got %u, expected %u\n", sdesc.cGSInstanceCount, 0);
ok(sdesc.cControlPoints == 0, "GetDesc failed, got %u, expected %u\n", sdesc.cControlPoints, 0);
ok(sdesc.HSOutputPrimitive == 0, "GetDesc failed, got %x, expected %x\n", sdesc.HSOutputPrimitive, 0);
ok(sdesc.HSPartitioning == 0, "GetDesc failed, got %x, expected %x\n", sdesc.HSPartitioning, 0);
ok(sdesc.TessellatorDomain == 0, "GetDesc failed, got %x, expected %x\n", sdesc.TessellatorDomain, 0);
ok(sdesc.cBarrierInstructions == 0, "GetDesc failed, got %u, expected %u\n", sdesc.cBarrierInstructions, 0);
ok(sdesc.cInterlockedInstructions == 0, "GetDesc failed, got %u, expected %u\n", sdesc.cInterlockedInstructions, 0);
ok(sdesc.cTextureStoreInstructions == 0, "GetDesc failed, got %u, expected %u\n", sdesc.cTextureStoreInstructions, 0);
/* get the dummys for comparison */
cb11_dummy = ref11->lpVtbl->GetConstantBufferByIndex(ref11, 0xffffffff);
ok(cb11_dummy != NULL, "GetConstantBufferByIndex failed\n");
v11_dummy = cb11_dummy->lpVtbl->GetVariableByIndex(cb11_dummy, 0xffffffff);
ok(v11_dummy != NULL, "GetVariableByIndex failed\n");
t11_dummy = v11_dummy->lpVtbl->GetType(v11_dummy);
ok(t11_dummy != NULL, "GetType failed\n");
/* get the valid variables */
cb11_valid = ref11->lpVtbl->GetConstantBufferByIndex(ref11, 1);
ok(cb11_valid != cb11_dummy && cb11_valid, "GetConstantBufferByIndex failed\n");
v11_valid = cb11_valid->lpVtbl->GetVariableByIndex(cb11_valid, 0);
ok(v11_valid != v11_dummy && v11_valid, "GetVariableByIndex failed\n");
t11_valid = v11_valid->lpVtbl->GetType(v11_valid);
ok(t11_valid != t11_dummy && t11_valid, "GetType failed\n");
/* reflection calls */
cb11 = ref11->lpVtbl->GetConstantBufferByName(ref11, "invaild");
ok(cb11_dummy == cb11, "GetConstantBufferByName failed, got %p, expected %p\n", cb11, cb11_dummy);
cb11 = ref11->lpVtbl->GetConstantBufferByName(ref11, NULL);
ok(cb11_dummy == cb11, "GetConstantBufferByName failed, got %p, expected %p\n", cb11, cb11_dummy);
v11 = ref11->lpVtbl->GetVariableByName(ref11, NULL);
ok(v11_dummy == v11, "GetVariableByIndex failed, got %p, expected %p\n", v11, v11_dummy);
v11 = ref11->lpVtbl->GetVariableByName(ref11, "invaild");
ok(v11_dummy == v11, "GetVariableByName failed, got %p, expected %p\n", v11, v11_dummy);
v11 = ref11->lpVtbl->GetVariableByName(ref11, "a");
ok(v11_valid == v11, "GetVariableByName failed, got %p, expected %p\n", v11, v11_valid);
/* constant buffer calls */
v11 = cb11_dummy->lpVtbl->GetVariableByName(cb11_dummy, NULL);
ok(v11_dummy == v11, "GetVariableByName failed, got %p, expected %p\n", v11, v11_dummy);
v11 = cb11_dummy->lpVtbl->GetVariableByName(cb11_dummy, "invalid");
ok(v11_dummy == v11, "GetVariableByName failed, got %p, expected %p\n", v11, v11_dummy);
v11 = cb11_valid->lpVtbl->GetVariableByName(cb11_valid, NULL);
ok(v11_dummy == v11, "GetVariableByName failed, got %p, expected %p\n", v11, v11_dummy);
v11 = cb11_valid->lpVtbl->GetVariableByName(cb11_valid, "invalid");
ok(v11_dummy == v11, "GetVariableByName failed, got %p, expected %p\n", v11, v11_dummy);
v11 = cb11_valid->lpVtbl->GetVariableByName(cb11_valid, "a");
ok(v11_valid == v11, "GetVariableByName failed, got %p, expected %p\n", v11, v11_valid);
hr = cb11_dummy->lpVtbl->GetDesc(cb11_dummy, NULL);
ok(hr == E_FAIL, "GetDesc failed, got %x, expected %x\n", hr, E_FAIL);
hr = cb11_dummy->lpVtbl->GetDesc(cb11_dummy, &cbdesc);
ok(hr == E_FAIL, "GetDesc failed, got %x, expected %x\n", hr, E_FAIL);
hr = cb11_valid->lpVtbl->GetDesc(cb11_valid, NULL);
ok(hr == E_FAIL, "GetDesc failed, got %x, expected %x\n", hr, E_FAIL);
/* variable calls */
hr = v11_dummy->lpVtbl->GetDesc(v11_dummy, NULL);
ok(hr == E_FAIL, "GetDesc failed, got %x, expected %x\n", hr, E_FAIL);
hr = v11_dummy->lpVtbl->GetDesc(v11_dummy, &vdesc);
ok(hr == E_FAIL, "GetDesc failed, got %x, expected %x\n", hr, E_FAIL);
hr = v11_valid->lpVtbl->GetDesc(v11_valid, NULL);
ok(hr == E_FAIL, "GetDesc failed, got %x, expected %x\n", hr, E_FAIL);
/* type calls */
hr = t11_dummy->lpVtbl->GetDesc(t11_dummy, NULL);
ok(hr == E_FAIL, "GetDesc failed, got %x, expected %x\n", hr, E_FAIL);
hr = t11_dummy->lpVtbl->GetDesc(t11_dummy, &tdesc);
ok(hr == E_FAIL, "GetDesc failed, got %x, expected %x\n", hr, E_FAIL);
hr = t11_valid->lpVtbl->GetDesc(t11_valid, NULL);
ok(hr == E_FAIL, "GetDesc failed, got %x, expected %x\n", hr, E_FAIL);
/* constant buffers */
for (i = 0; i < sizeof(test_reflection_constant_buffer_cb_result)/sizeof(*test_reflection_constant_buffer_cb_result); ++i)
{
pcbdesc = &test_reflection_constant_buffer_cb_result[i];
cb11 = ref11->lpVtbl->GetConstantBufferByIndex(ref11, i);
ok(cb11_dummy != cb11, "GetConstantBufferByIndex(%u) failed\n", i);
hr = cb11->lpVtbl->GetDesc(cb11, &cbdesc);
ok(hr == S_OK, "GetDesc(%u) failed, got %x, expected %x\n", i, hr, S_OK);
ok(!strcmp(cbdesc.Name, pcbdesc->Name), "GetDesc(%u) Name failed, got \"%s\", expected \"%s\"\n",
i, cbdesc.Name, pcbdesc->Name);
ok(cbdesc.Type == pcbdesc->Type, "GetDesc(%u) Type failed, got %x, expected %x\n",
i, cbdesc.Type, pcbdesc->Type);
ok(cbdesc.Variables == pcbdesc->Variables, "GetDesc(%u) Variables failed, got %u, expected %u\n",
i, cbdesc.Variables, pcbdesc->Variables);
ok(cbdesc.Size == pcbdesc->Size, "GetDesc(%u) Size failed, got %u, expected %u\n",
i, cbdesc.Size, pcbdesc->Size);
ok(cbdesc.uFlags == pcbdesc->uFlags, "GetDesc(%u) uFlags failed, got %u, expected %u\n",
i, cbdesc.uFlags, pcbdesc->uFlags);
}
/* variables */
for (i = 0; i < sizeof(test_reflection_constant_buffer_variable_result)/sizeof(*test_reflection_constant_buffer_variable_result); ++i)
{
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);
hr = v11->lpVtbl->GetDesc(v11, &vdesc);
ok(hr == S_OK, "GetDesc(%u) failed, got %x, expected %x\n", i, hr, S_OK);
ok(!strcmp(vdesc.Name, pvdesc->Name), "GetDesc(%u) Name failed, got \"%s\", expected \"%s\"\n",
i, vdesc.Name, pvdesc->Name);
ok(vdesc.StartOffset == pvdesc->StartOffset, "GetDesc(%u) StartOffset failed, got %u, expected %u\n",
i, vdesc.StartOffset, pvdesc->StartOffset);
ok(vdesc.Size == pvdesc->Size, "GetDesc(%u) Size failed, got %u, expected %u\n",
i, vdesc.Size, pvdesc->Size);
ok(vdesc.uFlags == pvdesc->uFlags, "GetDesc(%u) uFlags failed, got %u, expected %u\n",
i, vdesc.uFlags, pvdesc->uFlags);
ok(vdesc.DefaultValue == pvdesc->DefaultValue, "GetDesc(%u) DefaultValue failed\n", i);
/* types */
ptdesc = &test_reflection_constant_buffer_type_result[test_reflection_constant_buffer_variable_result[i].type];
t11 = v11->lpVtbl->GetType(v11);
ok(t11_dummy != t11, "GetType(%u) failed\n", i);
hr = t11->lpVtbl->GetDesc(t11, &tdesc);
ok(hr == S_OK, "GetDesc(%u) failed, got %x, expected %x\n", i, hr, S_OK);
ok(tdesc.Class == ptdesc->Class, "GetDesc(%u) Class failed, got %x, expected %x\n",
i, tdesc.Class, ptdesc->Class);
ok(tdesc.Type == ptdesc->Type, "GetDesc(%u) Type failed, got %x, expected %x\n",
i, tdesc.Type, ptdesc->Type);
ok(tdesc.Rows == ptdesc->Rows, "GetDesc(%u) Rows failed, got %x, expected %x\n",
i, tdesc.Rows, ptdesc->Rows);
ok(tdesc.Columns == ptdesc->Columns, "GetDesc(%u) Columns failed, got %u, expected %u\n",
i, tdesc.Columns, ptdesc->Columns);
ok(tdesc.Elements == ptdesc->Elements, "GetDesc(%u) Elements failed, got %u, expected %u\n",
i, tdesc.Elements, ptdesc->Elements);
ok(tdesc.Offset == ptdesc->Offset, "GetDesc(%u) Offset failed, got %u, expected %u\n",
i, tdesc.Offset, ptdesc->Offset);
}
count = ref11->lpVtbl->Release(ref11);
ok(count == 0, "Release failed %u\n", count);
}
START_TEST(reflection)
{
test_reflection_references();
@ -1098,4 +1433,5 @@ START_TEST(reflection)
test_reflection_desc_ps();
test_reflection_desc_ps_output();
test_reflection_bound_resources();
test_reflection_constant_buffer();
}