ole32: Fix memory leaks in the storage test.
[wine] / dlls / d3d10 / tests / effect.c
1 /*
2  * Copyright 2008 Henri Verbeet for CodeWeavers
3  * Copyright 2009 Rico Schüller
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
18  */
19
20 #define COBJMACROS
21 #include "d3d10.h"
22 #include "wine/test.h"
23
24 static ID3D10Device *create_device(void)
25 {
26     ID3D10Device *device;
27
28     if (SUCCEEDED(D3D10CreateDevice(NULL, D3D10_DRIVER_TYPE_HARDWARE, NULL, 0, D3D10_SDK_VERSION, &device)))
29     {
30         trace("Created a HW device\n");
31         return device;
32     }
33
34     trace("Failed to create a HW device, trying REF\n");
35     if (SUCCEEDED(D3D10CreateDevice(NULL, D3D10_DRIVER_TYPE_REFERENCE, NULL, 0, D3D10_SDK_VERSION, &device)))
36     {
37         trace("Created a REF device\n");
38         return device;
39     }
40
41     trace("Failed to create a device, returning NULL\n");
42     return NULL;
43 }
44
45 /*
46  * test_effect_constant_buffer_type
47  */
48 #if 0
49 cbuffer cb
50 {
51     float   f1 : SV_POSITION;
52     float   f2 : COLOR0;
53 };
54 #endif
55 static DWORD fx_test_ecbt[] = {
56 0x43425844, 0xc92a4732, 0xbd0d68c0, 0x877f71ee,
57 0x871fc277, 0x00000001, 0x0000010a, 0x00000001,
58 0x00000024, 0x30315846, 0x000000de, 0xfeff1001,
59 0x00000001, 0x00000002, 0x00000000, 0x00000000,
60 0x00000000, 0x00000000, 0x00000000, 0x00000042,
61 0x00000000, 0x00000000, 0x00000000, 0x00000000,
62 0x00000000, 0x00000000, 0x00000000, 0x00000000,
63 0x00000000, 0x00000000, 0x00000000, 0x66006263,
64 0x74616f6c, 0x00000700, 0x00000100, 0x00000000,
65 0x00000400, 0x00001000, 0x00000400, 0x00090900,
66 0x00316600, 0x505f5653, 0x5449534f, 0x004e4f49,
67 0x43003266, 0x524f4c4f, 0x00040030, 0x00100000,
68 0x00000000, 0x00020000, 0xffff0000, 0x0000ffff,
69 0x00290000, 0x000d0000, 0x002c0000, 0x00000000,
70 0x00000000, 0x00000000, 0x00000000, 0x00380000,
71 0x000d0000, 0x003b0000, 0x00040000, 0x00000000,
72 0x00000000, 0x00000000, 0x52590000,
73 };
74
75 static void test_effect_constant_buffer_type(ID3D10Device *device)
76 {
77     ID3D10Effect *effect;
78     ID3D10EffectConstantBuffer *constantbuffer;
79     ID3D10EffectType *type, *type2, *null_type;
80     D3D10_EFFECT_TYPE_DESC type_desc;
81     HRESULT hr;
82     LPCSTR string;
83     unsigned int i;
84
85     /*
86      * Don't use sizeof(fx_test_ecbt), use fx_test_ecbt[6] as size,
87      * because the DWORD fx_test_ecbt[] has only complete DWORDs and
88      * so it could happen that there are padded bytes at the end.
89      *
90      * The fx size (fx_test_ecbt[6]) could be up to 3 BYTEs smaller
91      * than the sizeof(fx_test_ecbt).
92      */
93     hr = D3D10CreateEffectFromMemory(fx_test_ecbt, fx_test_ecbt[6], 0, device, NULL, &effect);
94     ok(SUCCEEDED(hr), "D3D10CreateEffectFromMemory failed (%x)\n", hr);
95
96     constantbuffer = effect->lpVtbl->GetConstantBufferByIndex(effect, 0);
97     type = constantbuffer->lpVtbl->GetType(constantbuffer);
98
99     hr = type->lpVtbl->GetDesc(type, &type_desc);
100     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
101
102     ok(strcmp(type_desc.TypeName, "cbuffer") == 0, "TypeName is \"%s\", expected \"cbuffer\"\n", type_desc.TypeName);
103     ok(type_desc.Class == D3D10_SVC_OBJECT, "Class is %x, expected %x\n", type_desc.Class, D3D10_SVC_OBJECT);
104     ok(type_desc.Type == D3D10_SVT_CBUFFER, "Type is %x, expected %x\n", type_desc.Type, D3D10_SVT_CBUFFER);
105     ok(type_desc.Elements == 0, "Elements is %u, expected 0\n", type_desc.Elements);
106     ok(type_desc.Members == 2, "Members is %u, expected 2\n", type_desc.Members);
107     ok(type_desc.Rows == 0, "Rows is %u, expected 0\n", type_desc.Rows);
108     ok(type_desc.Columns == 0, "Columns is %u, expected 0\n", type_desc.Columns);
109     ok(type_desc.PackedSize == 0x8, "PackedSize is %#x, expected 0x8\n", type_desc.PackedSize);
110     ok(type_desc.UnpackedSize == 0x10, "UnpackedSize is %#x, expected 0x10\n", type_desc.UnpackedSize);
111     ok(type_desc.Stride == 0x10, "Stride is %#x, expected 0x10\n", type_desc.Stride);
112
113     string = type->lpVtbl->GetMemberName(type, 0);
114     ok(strcmp(string, "f1") == 0, "GetMemberName is \"%s\", expected \"f1\"\n", string);
115
116     string = type->lpVtbl->GetMemberSemantic(type, 0);
117     ok(strcmp(string, "SV_POSITION") == 0, "GetMemberSemantic is \"%s\", expected \"SV_POSITION\"\n", string);
118
119     string = type->lpVtbl->GetMemberName(type, 1);
120     ok(strcmp(string, "f2") == 0, "GetMemberName is \"%s\", expected \"f2\"\n", string);
121
122     string = type->lpVtbl->GetMemberSemantic(type, 1);
123     ok(strcmp(string, "COLOR0") == 0, "GetMemberSemantic is \"%s\", expected \"COLOR0\"\n", string);
124
125     for (i = 0; i < 3; ++i)
126     {
127         if (i == 0) type2 = type->lpVtbl->GetMemberTypeByIndex(type, 0);
128         else if (i == 1) type2 = type->lpVtbl->GetMemberTypeByName(type, "f1");
129         else type2 = type->lpVtbl->GetMemberTypeBySemantic(type, "SV_POSITION");
130
131         hr = type2->lpVtbl->GetDesc(type2, &type_desc);
132         ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
133
134         ok(strcmp(type_desc.TypeName, "float") == 0, "TypeName is \"%s\", expected \"float\"\n", type_desc.TypeName);
135         ok(type_desc.Class == D3D10_SVC_SCALAR, "Class is %x, expected %x\n", type_desc.Class, D3D10_SVC_SCALAR);
136         ok(type_desc.Type == D3D10_SVT_FLOAT, "Type is %x, expected %x\n", type_desc.Type, D3D10_SVT_FLOAT);
137         ok(type_desc.Elements == 0, "Elements is %u, expected 0\n", type_desc.Elements);
138         ok(type_desc.Members == 0, "Members is %u, expected 0\n", type_desc.Members);
139         ok(type_desc.Rows == 1, "Rows is %u, expected 1\n", type_desc.Rows);
140         ok(type_desc.Columns == 1, "Columns is %u, expected 1\n", type_desc.Columns);
141         ok(type_desc.PackedSize == 0x4, "PackedSize is %#x, expected 0x4\n", type_desc.PackedSize);
142         ok(type_desc.UnpackedSize == 0x4, "UnpackedSize is %#x, expected 0x4\n", type_desc.UnpackedSize);
143         ok(type_desc.Stride == 0x10, "Stride is %#x, expected 0x10\n", type_desc.Stride);
144
145         if (i == 0) type2 = type->lpVtbl->GetMemberTypeByIndex(type, 1);
146         else if (i == 1) type2 = type->lpVtbl->GetMemberTypeByName(type, "f2");
147         else type2 = type->lpVtbl->GetMemberTypeBySemantic(type, "COLOR0");
148
149         hr = type2->lpVtbl->GetDesc(type2, &type_desc);
150         ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
151
152         ok(strcmp(type_desc.TypeName, "float") == 0, "TypeName is \"%s\", expected \"float\"\n", type_desc.TypeName);
153         ok(type_desc.Class == D3D10_SVC_SCALAR, "Class is %x, expected %x\n", type_desc.Class, D3D10_SVC_SCALAR);
154         ok(type_desc.Type == D3D10_SVT_FLOAT, "Type is %x, expected %x\n", type_desc.Type, D3D10_SVT_FLOAT);
155         ok(type_desc.Elements == 0, "Elements is %u, expected 0\n", type_desc.Elements);
156         ok(type_desc.Members == 0, "Members is %u, expected 0\n", type_desc.Members);
157         ok(type_desc.Rows == 1, "Rows is %u, expected 1\n", type_desc.Rows);
158         ok(type_desc.Columns == 1, "Columns is %u, expected 1\n", type_desc.Columns);
159         ok(type_desc.PackedSize == 0x4, "PackedSize is %#x, expected 0x4\n", type_desc.PackedSize);
160         ok(type_desc.UnpackedSize == 0x4, "UnpackedSize is %#x, expected 0x4\n", type_desc.UnpackedSize);
161         ok(type_desc.Stride == 0x10, "Stride is %#x, expected 0x10\n", type_desc.Stride);
162     }
163
164     type2 = type->lpVtbl->GetMemberTypeByIndex(type, 0);
165     hr = type2->lpVtbl->GetDesc(type2, NULL);
166     ok(hr == E_INVALIDARG, "GetDesc got %x, expected %x\n", hr, E_INVALIDARG);
167
168     null_type = type->lpVtbl->GetMemberTypeByIndex(type, 3);
169     hr = null_type->lpVtbl->GetDesc(null_type, &type_desc);
170     ok(hr == E_FAIL, "GetDesc got %x, expected %x\n", hr, E_FAIL);
171
172     hr = null_type->lpVtbl->GetDesc(null_type, NULL);
173     ok(hr == E_FAIL, "GetDesc got %x, expected %x\n", hr, E_FAIL);
174
175     type2 = type->lpVtbl->GetMemberTypeByName(type, "invalid");
176     ok(type2 == null_type, "GetMemberTypeByName got wrong type %p, expected %p\n", type2, null_type);
177
178     type2 = type->lpVtbl->GetMemberTypeByName(type, NULL);
179     ok(type2 == null_type, "GetMemberTypeByName got wrong type %p, expected %p\n", type2, null_type);
180
181     type2 = type->lpVtbl->GetMemberTypeBySemantic(type, "invalid");
182     ok(type2 == null_type, "GetMemberTypeBySemantic got wrong type %p, expected %p\n", type2, null_type);
183
184     type2 = type->lpVtbl->GetMemberTypeBySemantic(type, NULL);
185     ok(type2 == null_type, "GetMemberTypeBySemantic got wrong type %p, expected %p\n", type2, null_type);
186
187     string = type->lpVtbl->GetMemberName(type, 3);
188     ok(string == NULL, "GetMemberName is \"%s\", expected \"NULL\"\n", string);
189
190     string = type->lpVtbl->GetMemberSemantic(type, 3);
191     ok(string == NULL, "GetMemberSemantic is \"%s\", expected \"NULL\"\n", string);
192
193     effect->lpVtbl->Release(effect);
194 }
195
196 /*
197  * test_effect_variable_type
198  */
199 #if 0
200 struct test
201 {
202     float   f3 : SV_POSITION;
203     float   f4 : COLOR0;
204 };
205 struct test1
206 {
207     float   f1;
208     float   f2;
209     test    t;
210 };
211 cbuffer cb
212 {
213     test1 t1;
214 };
215 #endif
216 static DWORD fx_test_evt[] = {
217 0x43425844, 0xe079efed, 0x90bda0f2, 0xa6e2d0b4,
218 0xd2d6c200, 0x00000001, 0x0000018c, 0x00000001,
219 0x00000024, 0x30315846, 0x00000160, 0xfeff1001,
220 0x00000001, 0x00000001, 0x00000000, 0x00000000,
221 0x00000000, 0x00000000, 0x00000000, 0x000000e0,
222 0x00000000, 0x00000000, 0x00000000, 0x00000000,
223 0x00000000, 0x00000000, 0x00000000, 0x00000000,
224 0x00000000, 0x00000000, 0x00000000, 0x74006263,
225 0x31747365, 0x00316600, 0x616f6c66, 0x00100074,
226 0x00010000, 0x00000000, 0x00040000, 0x00100000,
227 0x00040000, 0x09090000, 0x32660000, 0x74007400,
228 0x00747365, 0x53003366, 0x4f505f56, 0x49544953,
229 0x66004e4f, 0x4f430034, 0x30524f4c, 0x00003700,
230 0x00000300, 0x00000000, 0x00000800, 0x00001000,
231 0x00000800, 0x00000200, 0x00003c00, 0x00003f00,
232 0x00000000, 0x00001600, 0x00004b00, 0x00004e00,
233 0x00000400, 0x00001600, 0x00000700, 0x00000300,
234 0x00000000, 0x00001800, 0x00002000, 0x00001000,
235 0x00000300, 0x00000d00, 0x00000000, 0x00000000,
236 0x00001600, 0x00003200, 0x00000000, 0x00000400,
237 0x00001600, 0x00003500, 0x00000000, 0x00001000,
238 0x00005500, 0x00317400, 0x00000004, 0x00000020,
239 0x00000000, 0x00000001, 0xffffffff, 0x00000000,
240 0x000000dd, 0x00000091, 0x00000000, 0x00000000,
241 0x00000000, 0x00000000, 0x00000000,
242 };
243
244 static void test_effect_variable_type(ID3D10Device *device)
245 {
246     ID3D10Effect *effect;
247     ID3D10EffectConstantBuffer *constantbuffer;
248     ID3D10EffectVariable *variable;
249     ID3D10EffectType *type, *type2, *type3;
250     D3D10_EFFECT_TYPE_DESC type_desc;
251     HRESULT hr;
252     LPCSTR string;
253     unsigned int i;
254
255     hr = D3D10CreateEffectFromMemory(fx_test_evt, fx_test_evt[6], 0, device, NULL, &effect);
256     ok(SUCCEEDED(hr), "D3D10CreateEffectFromMemory failed (%x)\n", hr);
257
258     constantbuffer = effect->lpVtbl->GetConstantBufferByIndex(effect, 0);
259     type = constantbuffer->lpVtbl->GetType(constantbuffer);
260     hr = type->lpVtbl->GetDesc(type, &type_desc);
261     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
262
263     ok(strcmp(type_desc.TypeName, "cbuffer") == 0, "TypeName is \"%s\", expected \"cbuffer\"\n", type_desc.TypeName);
264     ok(type_desc.Class == D3D10_SVC_OBJECT, "Class is %x, expected %x\n", type_desc.Class, D3D10_SVC_OBJECT);
265     ok(type_desc.Type == D3D10_SVT_CBUFFER, "Type is %x, expected %x\n", type_desc.Type, D3D10_SVT_CBUFFER);
266     ok(type_desc.Elements == 0, "Elements is %u, expected 0\n", type_desc.Elements);
267     ok(type_desc.Members == 1, "Members is %u, expected 1\n", type_desc.Members);
268     ok(type_desc.Rows == 0, "Rows is %u, expected 0\n", type_desc.Rows);
269     ok(type_desc.Columns == 0, "Columns is %u, expected 0\n", type_desc.Columns);
270     ok(type_desc.PackedSize == 0x10, "PackedSize is %#x, expected 0x10\n", type_desc.PackedSize);
271     ok(type_desc.UnpackedSize == 0x20, "UnpackedSize is %#x, expected 0x20\n", type_desc.UnpackedSize);
272     ok(type_desc.Stride == 0x20, "Stride is %#x, expected 0x20\n", type_desc.Stride);
273
274     constantbuffer = effect->lpVtbl->GetConstantBufferByIndex(effect, 0);
275     variable = constantbuffer->lpVtbl->GetMemberByIndex(constantbuffer, 0);
276     type = variable->lpVtbl->GetType(variable);
277     hr = type->lpVtbl->GetDesc(type, &type_desc);
278     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
279
280     ok(strcmp(type_desc.TypeName, "test1") == 0, "TypeName is \"%s\", expected \"test1\"\n", type_desc.TypeName);
281     ok(type_desc.Class == D3D10_SVC_STRUCT, "Class is %x, expected %x\n", type_desc.Class, D3D10_SVC_STRUCT);
282     ok(type_desc.Type == D3D10_SVT_VOID, "Type is %x, expected %x\n", type_desc.Type, D3D10_SVT_VOID);
283     ok(type_desc.Elements == 0, "Elements is %u, expected 0\n", type_desc.Elements);
284     ok(type_desc.Members == 3, "Members is %u, expected 3\n", type_desc.Members);
285     ok(type_desc.Rows == 0, "Rows is %u, expected 0\n", type_desc.Rows);
286     ok(type_desc.Columns == 0, "Columns is %u, expected 0\n", type_desc.Columns);
287     ok(type_desc.PackedSize == 0x10, "PackedSize is %#x, expected 0x10\n", type_desc.PackedSize);
288     ok(type_desc.UnpackedSize == 0x18, "UnpackedSize is %#x, expected 0x18\n", type_desc.UnpackedSize);
289     ok(type_desc.Stride == 0x20, "Stride is %#x, expected 0x20\n", type_desc.Stride);
290
291     string = type->lpVtbl->GetMemberName(type, 0);
292     ok(strcmp(string, "f1") == 0, "GetMemberName is \"%s\", expected \"f1\"\n", string);
293
294     string = type->lpVtbl->GetMemberName(type, 1);
295     ok(strcmp(string, "f2") == 0, "GetMemberName is \"%s\", expected \"f2\"\n", string);
296
297     string = type->lpVtbl->GetMemberName(type, 2);
298     ok(strcmp(string, "t") == 0, "GetMemberName is \"%s\", expected \"t\"\n", string);
299
300     type2 = type->lpVtbl->GetMemberTypeByIndex(type, 0);
301     hr = type2->lpVtbl->GetDesc(type2, &type_desc);
302     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
303
304     ok(strcmp(type_desc.TypeName, "float") == 0, "TypeName is \"%s\", expected \"float\"\n", type_desc.TypeName);
305     ok(type_desc.Class == D3D10_SVC_SCALAR, "Class is %x, expected %x\n", type_desc.Class, D3D10_SVC_SCALAR);
306     ok(type_desc.Type == D3D10_SVT_FLOAT, "Type is %x, expected %x\n", type_desc.Type, D3D10_SVT_FLOAT);
307     ok(type_desc.Elements == 0, "Elements is %u, expected 0\n", type_desc.Elements);
308     ok(type_desc.Members == 0, "Members is %u, expected 0\n", type_desc.Members);
309     ok(type_desc.Rows == 1, "Rows is %u, expected 1\n", type_desc.Rows);
310     ok(type_desc.Columns == 1, "Columns is %u, expected 1\n", type_desc.Columns);
311     ok(type_desc.PackedSize == 0x4, "PackedSize is %#x, expected 0x4\n", type_desc.PackedSize);
312     ok(type_desc.UnpackedSize == 0x4, "UnpackedSize is %#x, expected 0x4\n", type_desc.UnpackedSize);
313     ok(type_desc.Stride == 0x10, "Stride is %#x, expected 0x10\n", type_desc.Stride);
314
315     type2 = type->lpVtbl->GetMemberTypeByIndex(type, 1);
316     hr = type2->lpVtbl->GetDesc(type2, &type_desc);
317     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
318
319     ok(strcmp(type_desc.TypeName, "float") == 0, "TypeName is \"%s\", expected \"float\"\n", type_desc.TypeName);
320     ok(type_desc.Class == D3D10_SVC_SCALAR, "Class is %x, expected %x\n", type_desc.Class, D3D10_SVC_SCALAR);
321     ok(type_desc.Type == D3D10_SVT_FLOAT, "Type is %x, expected %x\n", type_desc.Type, D3D10_SVT_FLOAT);
322     ok(type_desc.Elements == 0, "Elements is %u, expected 0\n", type_desc.Elements);
323     ok(type_desc.Members == 0, "Members is %u, expected 0\n", type_desc.Members);
324     ok(type_desc.Rows == 1, "Rows is %u, expected 1\n", type_desc.Rows);
325     ok(type_desc.Columns == 1, "Columns is %u, expected 1\n", type_desc.Columns);
326     ok(type_desc.PackedSize == 0x4, "PackedSize is %#x, expected 0x4\n", type_desc.PackedSize);
327     ok(type_desc.UnpackedSize == 0x4, "UnpackedSize is %#x, expected 0x4\n", type_desc.UnpackedSize);
328     ok(type_desc.Stride == 0x10, "Stride is %#x, expected 0x10\n", type_desc.Stride);
329
330     type2 = type->lpVtbl->GetMemberTypeByIndex(type, 2);
331     hr = type2->lpVtbl->GetDesc(type2, &type_desc);
332     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
333
334     ok(strcmp(type_desc.TypeName, "test") == 0, "TypeName is \"%s\", expected \"test\"\n", type_desc.TypeName);
335     ok(type_desc.Class == D3D10_SVC_STRUCT, "Class is %x, expected %x\n", type_desc.Class, D3D10_SVC_STRUCT);
336     ok(type_desc.Type == D3D10_SVT_VOID, "Type is %x, expected %x\n", type_desc.Type, D3D10_SVT_VOID);
337     ok(type_desc.Elements == 0, "Elements is %u, expected 0\n", type_desc.Elements);
338     ok(type_desc.Members == 2, "Members is %u, expected 2\n", type_desc.Members);
339     ok(type_desc.Rows == 0, "Rows is %u, expected 0\n", type_desc.Rows);
340     ok(type_desc.Columns == 0, "Columns is %u, expected 0\n", type_desc.Columns);
341     ok(type_desc.PackedSize == 0x8, "PackedSize is %#x, expected 0x8\n", type_desc.PackedSize);
342     ok(type_desc.UnpackedSize == 0x8, "UnpackedSize is %#x, expected 0x8\n", type_desc.UnpackedSize);
343     ok(type_desc.Stride == 0x10, "Stride is %x, expected 0x10\n", type_desc.Stride);
344
345     for (i = 0; i < 3; ++i)
346     {
347         if (i == 0) type3 = type2->lpVtbl->GetMemberTypeByIndex(type2, 0);
348         else if (i == 1) type3 = type2->lpVtbl->GetMemberTypeByName(type2, "f3");
349         else type3 = type2->lpVtbl->GetMemberTypeBySemantic(type2, "SV_POSITION");
350
351         hr = type3->lpVtbl->GetDesc(type3, &type_desc);
352         ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
353
354         ok(strcmp(type_desc.TypeName, "float") == 0, "TypeName is \"%s\", expected \"float\"\n",
355             type_desc.TypeName);
356         ok(type_desc.Class == D3D10_SVC_SCALAR, "Class is %x, expected %x\n", type_desc.Class, D3D10_SVC_SCALAR);
357         ok(type_desc.Type == D3D10_SVT_FLOAT, "Type is %x, expected %x\n", type_desc.Type, D3D10_SVT_FLOAT);
358         ok(type_desc.Elements == 0, "Elements is %u, expected 0\n", type_desc.Elements);
359         ok(type_desc.Members == 0, "Members is %u, expected 0\n", type_desc.Members);
360         ok(type_desc.Rows == 1, "Rows is %u, expected 1\n", type_desc.Rows);
361         ok(type_desc.Columns == 1, "Columns is %u, expected 1\n", type_desc.Columns);
362         ok(type_desc.PackedSize == 0x4, "PackedSize is %#x, expected 0x4\n", type_desc.PackedSize);
363         ok(type_desc.UnpackedSize == 0x4, "UnpackedSize is %#x, expected 0x4\n", type_desc.UnpackedSize);
364         ok(type_desc.Stride == 0x10, "Stride is %#x, expected 0x10\n", type_desc.Stride);
365
366         if (i == 0) type3 = type2->lpVtbl->GetMemberTypeByIndex(type2, 1);
367         else if (i == 1) type3 = type2->lpVtbl->GetMemberTypeByName(type2, "f4");
368         else type3 = type2->lpVtbl->GetMemberTypeBySemantic(type2, "COLOR0");
369
370         hr = type3->lpVtbl->GetDesc(type3, &type_desc);
371         ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
372
373         ok(strcmp(type_desc.TypeName, "float") == 0, "TypeName is \"%s\", expected \"float\"\n",
374             type_desc.TypeName);
375         ok(type_desc.Class == D3D10_SVC_SCALAR, "Class is %x, expected %x\n", type_desc.Class, D3D10_SVC_SCALAR);
376         ok(type_desc.Type == D3D10_SVT_FLOAT, "Type is %x, expected %x\n", type_desc.Type, D3D10_SVT_FLOAT);
377         ok(type_desc.Elements == 0, "Elements is %u, expected 0\n", type_desc.Elements);
378         ok(type_desc.Members == 0, "Members is %u, expected 0\n", type_desc.Members);
379         ok(type_desc.Rows == 1, "Rows is %u, expected 1\n", type_desc.Rows);
380         ok(type_desc.Columns == 1, "Columns is %u, expected 1\n", type_desc.Columns);
381         ok(type_desc.PackedSize == 0x4, "PackedSize is %#x, expected 0x4\n", type_desc.PackedSize);
382         ok(type_desc.UnpackedSize == 0x4, "UnpackedSize is %#x, expected 0x4\n", type_desc.UnpackedSize);
383         ok(type_desc.Stride == 0x10, "Stride is %#x, expected 0x10\n", type_desc.Stride);
384     }
385
386     type2 = type->lpVtbl->GetMemberTypeByIndex(type, 0);
387     hr = type2->lpVtbl->GetDesc(type2, NULL);
388     ok(hr == E_INVALIDARG, "GetDesc got %x, expected %x\n", hr, E_INVALIDARG);
389
390     type2 = type->lpVtbl->GetMemberTypeByIndex(type, 4);
391     hr = type2->lpVtbl->GetDesc(type2, &type_desc);
392     ok(hr == E_FAIL, "GetDesc got %x, expected %x\n", hr, E_FAIL);
393
394     type2 = type->lpVtbl->GetMemberTypeByName(type, "invalid");
395     hr = type2->lpVtbl->GetDesc(type2, &type_desc);
396     ok(hr == E_FAIL, "GetDesc got %x, expected %x\n", hr, E_FAIL);
397
398     type2 = type->lpVtbl->GetMemberTypeByName(type, NULL);
399     hr = type2->lpVtbl->GetDesc(type2, &type_desc);
400     ok(hr == E_FAIL, "GetDesc got %x, expected %x\n", hr, E_FAIL);
401
402     type2 = type->lpVtbl->GetMemberTypeBySemantic(type, "invalid");
403     hr = type2->lpVtbl->GetDesc(type2, &type_desc);
404     ok(hr == E_FAIL, "GetDesc got %x, expected %x\n", hr, E_FAIL);
405
406     type2 = type->lpVtbl->GetMemberTypeBySemantic(type, NULL);
407     hr = type2->lpVtbl->GetDesc(type2, &type_desc);
408     ok(hr == E_FAIL, "GetDesc got %x, expected %x\n", hr, E_FAIL);
409
410     string = type->lpVtbl->GetMemberName(type, 4);
411     ok(string == NULL, "GetMemberName is \"%s\", expected NULL\n", string);
412
413     string = type->lpVtbl->GetMemberSemantic(type, 4);
414     ok(string == NULL, "GetMemberSemantic is \"%s\", expected NULL\n", string);
415
416     effect->lpVtbl->Release(effect);
417 }
418
419 /*
420  * test_effect_variable_member
421  */
422 #if 0
423 struct test
424 {
425     float   f3 : SV_POSITION;
426     float   f4 : COLOR0;
427 };
428 struct test1
429 {
430     float   f1;
431     float   f2;
432     test    t;
433 };
434 cbuffer cb
435 {
436     test1 t1;
437 };
438 #endif
439 static DWORD fx_test_evm[] = {
440 0x43425844, 0xe079efed, 0x90bda0f2, 0xa6e2d0b4,
441 0xd2d6c200, 0x00000001, 0x0000018c, 0x00000001,
442 0x00000024, 0x30315846, 0x00000160, 0xfeff1001,
443 0x00000001, 0x00000001, 0x00000000, 0x00000000,
444 0x00000000, 0x00000000, 0x00000000, 0x000000e0,
445 0x00000000, 0x00000000, 0x00000000, 0x00000000,
446 0x00000000, 0x00000000, 0x00000000, 0x00000000,
447 0x00000000, 0x00000000, 0x00000000, 0x74006263,
448 0x31747365, 0x00316600, 0x616f6c66, 0x00100074,
449 0x00010000, 0x00000000, 0x00040000, 0x00100000,
450 0x00040000, 0x09090000, 0x32660000, 0x74007400,
451 0x00747365, 0x53003366, 0x4f505f56, 0x49544953,
452 0x66004e4f, 0x4f430034, 0x30524f4c, 0x00003700,
453 0x00000300, 0x00000000, 0x00000800, 0x00001000,
454 0x00000800, 0x00000200, 0x00003c00, 0x00003f00,
455 0x00000000, 0x00001600, 0x00004b00, 0x00004e00,
456 0x00000400, 0x00001600, 0x00000700, 0x00000300,
457 0x00000000, 0x00001800, 0x00002000, 0x00001000,
458 0x00000300, 0x00000d00, 0x00000000, 0x00000000,
459 0x00001600, 0x00003200, 0x00000000, 0x00000400,
460 0x00001600, 0x00003500, 0x00000000, 0x00001000,
461 0x00005500, 0x00317400, 0x00000004, 0x00000020,
462 0x00000000, 0x00000001, 0xffffffff, 0x00000000,
463 0x000000dd, 0x00000091, 0x00000000, 0x00000000,
464 0x00000000, 0x00000000, 0x00000000,
465 };
466
467 static void test_effect_variable_member(ID3D10Device *device)
468 {
469     ID3D10Effect *effect;
470     ID3D10EffectConstantBuffer *constantbuffer;
471     ID3D10EffectVariable *variable, *variable2, *variable3, *null_variable;
472     D3D10_EFFECT_VARIABLE_DESC desc;
473     HRESULT hr;
474
475     hr = D3D10CreateEffectFromMemory(fx_test_evm, fx_test_evm[6], 0, device, NULL, &effect);
476     ok(SUCCEEDED(hr), "D3D10CreateEffectFromMemory failed (%x)\n", hr);
477
478     constantbuffer = effect->lpVtbl->GetConstantBufferByIndex(effect, 0);
479     hr = constantbuffer->lpVtbl->GetDesc(constantbuffer, &desc);
480     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
481
482     ok(strcmp(desc.Name, "cb") == 0, "Name is \"%s\", expected \"cb\"\n", desc.Name);
483     ok(desc.Semantic == NULL, "Semantic is \"%s\", expected NULL\n", desc.Semantic);
484     ok(desc.Flags == 0, "Type is %u, expected 0\n", desc.Flags);
485     ok(desc.Annotations == 0, "Elements is %u, expected 0\n", desc.Annotations);
486     ok(desc.BufferOffset == 0, "Members is %u, expected 0\n", desc.BufferOffset);
487     ok(desc.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", desc.ExplicitBindPoint);
488
489     null_variable = constantbuffer->lpVtbl->GetMemberByIndex(constantbuffer, 1);
490     hr = null_variable->lpVtbl->GetDesc(null_variable, &desc);
491     ok(hr == E_FAIL, "GetDesc got %x, expected %x\n", hr, E_FAIL);
492
493     variable = constantbuffer->lpVtbl->GetMemberByIndex(constantbuffer, 0);
494     hr = variable->lpVtbl->GetDesc(variable, &desc);
495     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
496
497     variable2 = constantbuffer->lpVtbl->GetMemberByName(constantbuffer, "t1");
498     ok(variable == variable2, "GetMemberByName got %p, expected %p\n", variable2, variable);
499     hr = variable2->lpVtbl->GetDesc(variable2, &desc);
500     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
501
502     ok(strcmp(desc.Name, "t1") == 0, "Name is \"%s\", expected \"t1\"\n", desc.Name);
503     ok(desc.Semantic == NULL, "Semantic is \"%s\", expected NULL\n", desc.Semantic);
504     ok(desc.Flags == 0, "Flags is %u, expected 0\n", desc.Flags);
505     ok(desc.Annotations == 0, "Annotations is %u, expected 0\n", desc.Annotations);
506     ok(desc.BufferOffset == 0, "BufferOffset is %u, expected 0\n", desc.BufferOffset);
507     ok(desc.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", desc.ExplicitBindPoint);
508
509     variable2 = constantbuffer->lpVtbl->GetMemberByName(constantbuffer, "invalid");
510     ok(null_variable == variable2, "GetMemberByName got %p, expected %p\n", variable2, null_variable);
511
512     variable2 = constantbuffer->lpVtbl->GetMemberByName(constantbuffer, NULL);
513     ok(null_variable == variable2, "GetMemberByName got %p, expected %p\n", variable2, null_variable);
514
515     variable2 = constantbuffer->lpVtbl->GetMemberBySemantic(constantbuffer, "invalid");
516     ok(null_variable == variable2, "GetMemberBySemantic got %p, expected %p\n", variable2, null_variable);
517
518     variable2 = constantbuffer->lpVtbl->GetMemberBySemantic(constantbuffer, NULL);
519     ok(null_variable == variable2, "GetMemberBySemantic got %p, expected %p\n", variable2, null_variable);
520
521     /* check members of "t1" */
522     variable2 = variable->lpVtbl->GetMemberByName(variable, "f1");
523     hr = variable2->lpVtbl->GetDesc(variable2, &desc);
524     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
525
526     ok(strcmp(desc.Name, "f1") == 0, "Name is \"%s\", expected \"f1\"\n", desc.Name);
527     ok(desc.Semantic == NULL, "Semantic is \"%s\", expected NULL\n", desc.Semantic);
528     ok(desc.Flags == 0, "Flags is %u, expected 0\n", desc.Flags);
529     ok(desc.Annotations == 0, "Annotations is %u, expected 0\n", desc.Annotations);
530     ok(desc.BufferOffset == 0, "BufferOffset is %u, expected 0\n", desc.BufferOffset);
531     ok(desc.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", desc.ExplicitBindPoint);
532
533     variable3 = variable->lpVtbl->GetMemberByIndex(variable, 0);
534     ok(variable2 == variable3, "GetMemberByIndex got %p, expected %p\n", variable3, variable2);
535
536     variable2 = variable->lpVtbl->GetMemberByName(variable, "f2");
537     hr = variable2->lpVtbl->GetDesc(variable2, &desc);
538     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
539
540     ok(strcmp(desc.Name, "f2") == 0, "Name is \"%s\", expected \"f2\"\n", desc.Name);
541     ok(desc.Semantic == NULL, "Semantic is \"%s\", expected NULL\n", desc.Semantic);
542     ok(desc.Flags == 0, "Flags is %u, expected 0\n", desc.Flags);
543     ok(desc.Annotations == 0, "Annotations is %u, expected 0\n", desc.Annotations);
544     ok(desc.BufferOffset == 4, "BufferOffset is %u, expected 4\n", desc.BufferOffset);
545     ok(desc.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", desc.ExplicitBindPoint);
546
547     variable3 = variable->lpVtbl->GetMemberByIndex(variable, 1);
548     ok(variable2 == variable3, "GetMemberByIndex got %p, expected %p\n", variable3, variable2);
549
550     variable2 = variable->lpVtbl->GetMemberByName(variable, "t");
551     hr = variable2->lpVtbl->GetDesc(variable2, &desc);
552     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
553
554     ok(strcmp(desc.Name, "t") == 0, "Name is \"%s\", expected \"t\"\n", desc.Name);
555     ok(desc.Semantic == NULL, "Semantic is \"%s\", expected NULL\n", desc.Semantic);
556     ok(desc.Flags == 0, "Flags is %u, expected 0\n", desc.Flags);
557     ok(desc.Annotations == 0, "Annotations is %u, expected 0\n", desc.Annotations);
558     ok(desc.BufferOffset == 16, "BufferOffset is %u, expected 16\n", desc.BufferOffset);
559     ok(desc.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", desc.ExplicitBindPoint);
560
561     variable3 = variable->lpVtbl->GetMemberByIndex(variable, 2);
562     ok(variable2 == variable3, "GetMemberByIndex got %p, expected %p\n", variable3, variable2);
563
564     /* check members of "t" */
565     variable3 = variable2->lpVtbl->GetMemberByName(variable2, "f3");
566     hr = variable3->lpVtbl->GetDesc(variable3, &desc);
567     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
568
569     ok(strcmp(desc.Name, "f3") == 0, "Name is \"%s\", expected \"f3\"\n", desc.Name);
570     ok(strcmp(desc.Semantic, "SV_POSITION") == 0, "Semantic is \"%s\", expected \"SV_POSITION\"\n", desc.Semantic);
571     ok(desc.Flags == 0, "Flags is %u, expected 0\n", desc.Flags);
572     ok(desc.Annotations == 0, "Annotations is %u, expected 0\n", desc.Annotations);
573     ok(desc.BufferOffset == 16, "BufferOffset is %u, expected 16\n", desc.BufferOffset);
574     ok(desc.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", desc.ExplicitBindPoint);
575
576     variable = variable2->lpVtbl->GetMemberBySemantic(variable2, "SV_POSITION");
577     ok(variable == variable3, "GetMemberBySemantic got %p, expected %p\n", variable, variable3);
578
579     variable = variable2->lpVtbl->GetMemberByIndex(variable2, 0);
580     ok(variable == variable3, "GetMemberByIndex got %p, expected %p\n", variable, variable3);
581
582     variable3 = variable2->lpVtbl->GetMemberByName(variable2, "f4");
583     hr = variable3->lpVtbl->GetDesc(variable3, &desc);
584     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
585
586     ok(strcmp(desc.Name, "f4") == 0, "Name is \"%s\", expected \"f4\"\n", desc.Name);
587     ok(strcmp(desc.Semantic, "COLOR0") == 0, "Semantic is \"%s\", expected \"COLOR0\"\n", desc.Semantic);
588     ok(desc.Flags == 0, "Flags is %u, expected 0\n", desc.Flags);
589     ok(desc.Annotations == 0, "Annotations is %u, expected 0\n", desc.Annotations);
590     ok(desc.BufferOffset == 20, "BufferOffset is %u, expected 20\n", desc.BufferOffset);
591     ok(desc.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", desc.ExplicitBindPoint);
592
593     variable = variable2->lpVtbl->GetMemberBySemantic(variable2, "COLOR0");
594     ok(variable == variable3, "GetMemberBySemantic got %p, expected %p\n", variable, variable3);
595
596     variable = variable2->lpVtbl->GetMemberByIndex(variable2, 1);
597     ok(variable == variable3, "GetMemberByIndex got %p, expected %p\n", variable, variable3);
598
599     effect->lpVtbl->Release(effect);
600 }
601
602 /*
603  * test_effect_variable_element
604  */
605 #if 0
606 struct test
607 {
608     float   f3 : SV_POSITION;
609     float   f4 : COLOR0;
610     float   f5 : COLOR1;
611 };
612 struct test1
613 {
614     float   f1;
615     float   f2[3];
616     test    t[2];
617 };
618 cbuffer cb
619 {
620     test1 t1;
621 };
622 #endif
623 static DWORD fx_test_eve[] = {
624 0x43425844, 0x6ea69fd9, 0x9b4e6390, 0x006f9f71,
625 0x57ad58f4, 0x00000001, 0x000001c2, 0x00000001,
626 0x00000024, 0x30315846, 0x00000196, 0xfeff1001,
627 0x00000001, 0x00000001, 0x00000000, 0x00000000,
628 0x00000000, 0x00000000, 0x00000000, 0x00000116,
629 0x00000000, 0x00000000, 0x00000000, 0x00000000,
630 0x00000000, 0x00000000, 0x00000000, 0x00000000,
631 0x00000000, 0x00000000, 0x00000000, 0x74006263,
632 0x31747365, 0x00316600, 0x616f6c66, 0x00100074,
633 0x00010000, 0x00000000, 0x00040000, 0x00100000,
634 0x00040000, 0x09090000, 0x32660000, 0x00001000,
635 0x00000100, 0x00000300, 0x00002400, 0x00001000,
636 0x00000c00, 0x00090900, 0x74007400, 0x00747365,
637 0x53003366, 0x4f505f56, 0x49544953, 0x66004e4f,
638 0x4f430034, 0x30524f4c, 0x00356600, 0x4f4c4f43,
639 0x53003152, 0x03000000, 0x02000000, 0x1c000000,
640 0x10000000, 0x18000000, 0x03000000, 0x58000000,
641 0x5b000000, 0x00000000, 0x16000000, 0x67000000,
642 0x6a000000, 0x04000000, 0x16000000, 0x71000000,
643 0x74000000, 0x08000000, 0x16000000, 0x07000000,
644 0x03000000, 0x00000000, 0x5c000000, 0x60000000,
645 0x28000000, 0x03000000, 0x0d000000, 0x00000000,
646 0x00000000, 0x16000000, 0x32000000, 0x00000000,
647 0x10000000, 0x35000000, 0x51000000, 0x00000000,
648 0x40000000, 0x7b000000, 0x74000000, 0x00040031,
649 0x00600000, 0x00000000, 0x00010000, 0xffff0000,
650 0x0000ffff, 0x01130000, 0x00c70000, 0x00000000,
651 0x00000000, 0x00000000, 0x00000000, 0x00000000,
652 0x00000000,
653 };
654
655 static void test_effect_variable_element(ID3D10Device *device)
656 {
657     ID3D10Effect *effect;
658     ID3D10EffectConstantBuffer *constantbuffer, *parent;
659     ID3D10EffectVariable *variable, *variable2, *variable3, *variable4, *variable5;
660     ID3D10EffectType *type, *type2;
661     D3D10_EFFECT_VARIABLE_DESC desc;
662     D3D10_EFFECT_TYPE_DESC type_desc;
663     HRESULT hr;
664
665     hr = D3D10CreateEffectFromMemory(fx_test_eve, fx_test_eve[6], 0, device, NULL, &effect);
666     ok(SUCCEEDED(hr), "D3D10CreateEffectFromMemory failed (%x)\n", hr);
667
668     constantbuffer = effect->lpVtbl->GetConstantBufferByIndex(effect, 0);
669     hr = constantbuffer->lpVtbl->GetDesc(constantbuffer, &desc);
670     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
671
672     ok(strcmp(desc.Name, "cb") == 0, "Name is \"%s\", expected \"cb\"\n", desc.Name);
673     ok(desc.Semantic == NULL, "Semantic is \"%s\", expected NULL\n", desc.Semantic);
674     ok(desc.Flags == 0, "Type is %u, expected 0\n", desc.Flags);
675     ok(desc.Annotations == 0, "Elements is %u, expected 0\n", desc.Annotations);
676     ok(desc.BufferOffset == 0, "Members is %u, expected 0\n", desc.BufferOffset);
677     ok(desc.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", desc.ExplicitBindPoint);
678
679     variable = constantbuffer->lpVtbl->GetMemberByIndex(constantbuffer, 0);
680     hr = variable->lpVtbl->GetDesc(variable, &desc);
681     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
682
683     parent = variable->lpVtbl->GetParentConstantBuffer(variable);
684     ok(parent == constantbuffer, "GetParentConstantBuffer got %p, expected %p\n",
685         parent, constantbuffer);
686
687     variable2 = constantbuffer->lpVtbl->GetMemberByName(constantbuffer, "t1");
688     hr = variable2->lpVtbl->GetDesc(variable2, &desc);
689     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
690
691     parent = variable2->lpVtbl->GetParentConstantBuffer(variable2);
692     ok(parent == constantbuffer, "GetParentConstantBuffer got %p, expected %p\n", parent, constantbuffer);
693
694     /* check variable f1 */
695     variable3 = variable2->lpVtbl->GetMemberByName(variable2, "f1");
696     hr = variable3->lpVtbl->GetDesc(variable3, &desc);
697     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
698
699     ok(strcmp(desc.Name, "f1") == 0, "Name is \"%s\", expected \"f1\"\n", desc.Name);
700     ok(desc.Semantic == NULL, "Semantic is \"%s\", expected NULL\n", desc.Semantic);
701     ok(desc.Flags == 0, "Flags is %u, expected 0\n", desc.Flags);
702     ok(desc.Annotations == 0, "Annotations is %u, expected 0\n", desc.Annotations);
703     ok(desc.BufferOffset == 0, "BufferOffset is %u, expected 0\n", desc.BufferOffset);
704     ok(desc.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", desc.ExplicitBindPoint);
705
706     parent = variable3->lpVtbl->GetParentConstantBuffer(variable3);
707     ok(parent == constantbuffer, "GetParentConstantBuffer got %p, expected %p\n",
708         parent, constantbuffer);
709
710     type = variable3->lpVtbl->GetType(variable3);
711     hr = type->lpVtbl->GetDesc(type, &type_desc);
712     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
713
714     ok(strcmp(type_desc.TypeName, "float") == 0, "TypeName is \"%s\", expected \"float\"\n", type_desc.TypeName);
715     ok(type_desc.Class == D3D10_SVC_SCALAR, "Class is %x, expected %x\n", type_desc.Class, D3D10_SVC_SCALAR);
716     ok(type_desc.Type == D3D10_SVT_FLOAT, "Type is %x, expected %x\n", type_desc.Type, D3D10_SVT_FLOAT);
717     ok(type_desc.Elements == 0, "Elements is %u, expected 0\n", type_desc.Elements);
718     ok(type_desc.Members == 0, "Members is %u, expected 0\n", type_desc.Members);
719     ok(type_desc.Rows == 1, "Rows is %u, expected 1\n", type_desc.Rows);
720     ok(type_desc.Columns == 1, "Columns is %u, expected 1\n", type_desc.Columns);
721     ok(type_desc.PackedSize == 0x4, "PackedSize is %#x, expected 0x4\n", type_desc.PackedSize);
722     ok(type_desc.UnpackedSize == 0x4, "UnpackedSize is %#x, expected 0x4\n", type_desc.UnpackedSize);
723     ok(type_desc.Stride == 0x10, "Stride is %#x, expected 0x10\n", type_desc.Stride);
724
725     /* check variable f2 */
726     variable3 = variable2->lpVtbl->GetMemberByName(variable2, "f2");
727     hr = variable3->lpVtbl->GetDesc(variable3, &desc);
728     ok(SUCCEEDED(hr), "GetDesc failed (%x)!\n", hr);
729
730     ok(strcmp(desc.Name, "f2") == 0, "Name is \"%s\", expected \"f2\"\n", desc.Name);
731     ok(desc.Semantic == NULL, "Semantic is \"%s\", expected NULL\n", desc.Semantic);
732     ok(desc.Flags == 0, "Flags is %u, expected 0\n", desc.Flags);
733     ok(desc.Annotations == 0, "Annotations is %u, expected 0\n", desc.Annotations);
734     ok(desc.BufferOffset == 16, "BufferOffset is %u, expected 16\n", desc.BufferOffset);
735     ok(desc.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", desc.ExplicitBindPoint);
736
737     parent = variable3->lpVtbl->GetParentConstantBuffer(variable3);
738     ok(parent == constantbuffer, "GetParentConstantBuffer got %p, expected %p\n",
739         parent, constantbuffer);
740
741     type = variable3->lpVtbl->GetType(variable3);
742     hr = type->lpVtbl->GetDesc(type, &type_desc);
743     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
744
745     ok(strcmp(type_desc.TypeName, "float") == 0, "TypeName is \"%s\", expected \"float\"\n", type_desc.TypeName);
746     ok(type_desc.Class == D3D10_SVC_SCALAR, "Class is %x, expected %x\n", type_desc.Class, D3D10_SVC_SCALAR);
747     ok(type_desc.Type == D3D10_SVT_FLOAT, "Type is %x, expected %x\n", type_desc.Type, D3D10_SVT_FLOAT);
748     ok(type_desc.Elements == 3, "Elements is %u, expected 3\n", type_desc.Elements);
749     ok(type_desc.Members == 0, "Members is %u, expected 0\n", type_desc.Members);
750     ok(type_desc.Rows == 1, "Rows is %u, expected 1\n", type_desc.Rows);
751     ok(type_desc.Columns == 1, "Columns is %u, expected 1\n", type_desc.Columns);
752     ok(type_desc.PackedSize == 0xc, "PackedSize is %#x, expected 0xc\n", type_desc.PackedSize);
753     ok(type_desc.UnpackedSize == 0x24, "UnpackedSize is %#x, expected 0x24\n", type_desc.UnpackedSize);
754     ok(type_desc.Stride == 0x10, "Stride is %#x, expected 0x10\n", type_desc.Stride);
755
756     variable4 = variable3->lpVtbl->GetElement(variable3, 0);
757     hr = variable4->lpVtbl->GetDesc(variable4, &desc);
758     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
759
760     ok(strcmp(desc.Name, "f2") == 0, "Name is \"%s\", expected \"f2\"\n", desc.Name);
761     ok(desc.Semantic == NULL, "Semantic is \"%s\", expected NULL\n", desc.Semantic);
762     ok(desc.Flags == 0, "Flags is %u, expected 0\n", desc.Flags);
763     ok(desc.Annotations == 0, "Annotations is %u, expected 0\n", desc.Annotations);
764     ok(desc.BufferOffset == 16, "BufferOffset is %u, expected 16\n", desc.BufferOffset);
765     ok(desc.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", desc.ExplicitBindPoint);
766
767     parent = variable4->lpVtbl->GetParentConstantBuffer(variable4);
768     ok(parent == constantbuffer, "GetParentConstantBuffer got %p, expected %p\n",
769         parent, constantbuffer);
770
771     type = variable4->lpVtbl->GetType(variable4);
772     hr = type->lpVtbl->GetDesc(type, &type_desc);
773     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
774
775     ok(strcmp(type_desc.TypeName, "float") == 0, "TypeName is \"%s\", expected \"float\"\n", type_desc.TypeName);
776     ok(type_desc.Class == D3D10_SVC_SCALAR, "Class is %x, expected %x\n", type_desc.Class, D3D10_SVC_SCALAR);
777     ok(type_desc.Type == D3D10_SVT_FLOAT, "Type is %x, expected %x\n", type_desc.Type, D3D10_SVT_FLOAT);
778     ok(type_desc.Elements == 0, "Elements is %u, expected 0\n", type_desc.Elements);
779     ok(type_desc.Members == 0, "Members is %u, expected 0\n", type_desc.Members);
780     ok(type_desc.Rows == 1, "Rows is %u, expected 1\n", type_desc.Rows);
781     ok(type_desc.Columns == 1, "Columns is %u, expected 1\n", type_desc.Columns);
782     ok(type_desc.PackedSize == 0x4, "PackedSize is %#x, expected 0x4\n", type_desc.PackedSize);
783     ok(type_desc.UnpackedSize == 0x4, "UnpackedSize is %#x, expected 0x4\n", type_desc.UnpackedSize);
784     ok(type_desc.Stride == 0x10, "Stride is %#x, expected 0x10\n", type_desc.Stride);
785
786     variable4 = variable3->lpVtbl->GetElement(variable3, 1);
787     hr = variable4->lpVtbl->GetDesc(variable4, &desc);
788     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
789
790     ok(strcmp(desc.Name, "f2") == 0, "Name is \"%s\", expected \"f2\"\n", desc.Name);
791     ok(desc.Semantic == NULL, "Semantic is \"%s\", expected NULL\n", desc.Semantic);
792     ok(desc.Flags == 0, "Flags is %u, expected 0\n", desc.Flags);
793     ok(desc.Annotations == 0, "Annotations is %u, expected 0\n", desc.Annotations);
794     ok(desc.BufferOffset == 32, "BufferOffset is %u, expected 32\n", desc.BufferOffset);
795     ok(desc.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", desc.ExplicitBindPoint);
796
797     parent = variable4->lpVtbl->GetParentConstantBuffer(variable4);
798     ok(parent == constantbuffer, "GetParentConstantBuffer got %p, expected %p\n",
799         parent, constantbuffer);
800
801     type2 = variable4->lpVtbl->GetType(variable4);
802     hr = type2->lpVtbl->GetDesc(type2, &type_desc);
803     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
804     ok(type == type2, "type(%p) != type2(%p)\n", type, type2);
805
806     ok(strcmp(type_desc.TypeName, "float") == 0, "TypeName is \"%s\", expected \"float\"\n", type_desc.TypeName);
807     ok(type_desc.Class == D3D10_SVC_SCALAR, "Class is %x, expected %x\n", type_desc.Class, D3D10_SVC_SCALAR);
808     ok(type_desc.Type == D3D10_SVT_FLOAT, "Type is %x, expected %x\n", type_desc.Type, D3D10_SVT_FLOAT);
809     ok(type_desc.Elements == 0, "Elements is %u, expected 0\n", type_desc.Elements);
810     ok(type_desc.Members == 0, "Members is %u, expected 0\n", type_desc.Members);
811     ok(type_desc.Rows == 1, "Rows is %u, expected 1\n", type_desc.Rows);
812     ok(type_desc.Columns == 1, "Columns is %u, expected 1\n", type_desc.Columns);
813     ok(type_desc.PackedSize == 0x4, "PackedSize is %#x, expected 0x4\n", type_desc.PackedSize);
814     ok(type_desc.UnpackedSize == 0x4, "UnpackedSize is %#x, expected 0x4\n", type_desc.UnpackedSize);
815     ok(type_desc.Stride == 0x10, "Stride is %#x, expected 0x10\n", type_desc.Stride);
816
817     variable4 = variable3->lpVtbl->GetElement(variable3, 2);
818     hr = variable4->lpVtbl->GetDesc(variable4, &desc);
819     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
820
821     ok(strcmp(desc.Name, "f2") == 0, "Name is \"%s\", expected \"f2\"\n", desc.Name);
822     ok(desc.Semantic == NULL, "Semantic is \"%s\", expected NULL\n", desc.Semantic);
823     ok(desc.Flags == 0, "Flags is %u, expected 0\n", desc.Flags);
824     ok(desc.Annotations == 0, "Annotations is %u, expected 0\n", desc.Annotations);
825     ok(desc.BufferOffset == 48, "BufferOffset is %u, expected 48\n", desc.BufferOffset);
826     ok(desc.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", desc.ExplicitBindPoint);
827
828     parent = variable4->lpVtbl->GetParentConstantBuffer(variable4);
829     ok(parent == constantbuffer, "GetParentConstantBuffer got %p, expected %p\n",
830         parent, constantbuffer);
831
832     type2 = variable4->lpVtbl->GetType(variable4);
833     hr = type2->lpVtbl->GetDesc(type2, &type_desc);
834     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
835     ok(type == type2, "type(%p) != type2(%p)\n", type, type2);
836
837     ok(strcmp(type_desc.TypeName, "float") == 0, "TypeName is \"%s\", expected \"float\"\n", type_desc.TypeName);
838     ok(type_desc.Class == D3D10_SVC_SCALAR, "Class is %x, expected %x\n", type_desc.Class, D3D10_SVC_SCALAR);
839     ok(type_desc.Type == D3D10_SVT_FLOAT, "Type is %x, expected %x\n", type_desc.Type, D3D10_SVT_FLOAT);
840     ok(type_desc.Elements == 0, "Elements is %u, expected 0\n", type_desc.Elements);
841     ok(type_desc.Members == 0, "Members is %u, expected 0\n", type_desc.Members);
842     ok(type_desc.Rows == 1, "Rows is %u, expected 1\n", type_desc.Rows);
843     ok(type_desc.Columns == 1, "Columns is %u, expected 1\n", type_desc.Columns);
844     ok(type_desc.PackedSize == 0x4, "PackedSize is %#x, expected 0x4\n", type_desc.PackedSize);
845     ok(type_desc.UnpackedSize == 0x4, "UnpackedSize is %#x, expected 0x4\n", type_desc.UnpackedSize);
846     ok(type_desc.Stride == 0x10, "Stride is %#x, expected 0x10\n", type_desc.Stride);
847
848     /* check variable t */
849     variable3 = variable2->lpVtbl->GetMemberByName(variable2, "t");
850     hr = variable3->lpVtbl->GetDesc(variable3, &desc);
851     ok(SUCCEEDED(hr), "GetDesc failed (%x)!\n", hr);
852
853     ok(strcmp(desc.Name, "t") == 0, "Name is \"%s\", expected \"t\"\n", desc.Name);
854     ok(desc.Semantic == NULL, "Semantic is \"%s\", expected NULL\n", desc.Semantic);
855     ok(desc.Flags == 0, "Flags is %u, expected 0\n", desc.Flags);
856     ok(desc.Annotations == 0, "Annotations is %u, expected 0\n", desc.Annotations);
857     ok(desc.BufferOffset == 64, "BufferOffset is %u, expected 64\n", desc.BufferOffset);
858     ok(desc.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", desc.ExplicitBindPoint);
859
860     parent = variable3->lpVtbl->GetParentConstantBuffer(variable3);
861     ok(parent == constantbuffer, "GetParentConstantBuffer got %p, expected %p\n",
862         parent, constantbuffer);
863
864     type = variable3->lpVtbl->GetType(variable3);
865     hr = type->lpVtbl->GetDesc(type, &type_desc);
866     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
867
868     ok(strcmp(type_desc.TypeName, "test") == 0, "TypeName is \"%s\", expected \"test\"\n", type_desc.TypeName);
869     ok(type_desc.Class == D3D10_SVC_STRUCT, "Class is %x, expected %x\n", type_desc.Class, D3D10_SVC_STRUCT);
870     ok(type_desc.Type == D3D10_SVT_VOID, "Type is %x, expected %x\n", type_desc.Type, D3D10_SVT_VOID);
871     ok(type_desc.Elements == 2, "Elements is %u, expected 2\n", type_desc.Elements);
872     ok(type_desc.Members == 3, "Members is %u, expected 3\n", type_desc.Members);
873     ok(type_desc.Rows == 0, "Rows is %u, expected 0\n", type_desc.Rows);
874     ok(type_desc.Columns == 0, "Columns is %u, expected 0\n", type_desc.Columns);
875     ok(type_desc.PackedSize == 0x18, "PackedSize is %#x, expected 0x18\n", type_desc.PackedSize);
876     ok(type_desc.UnpackedSize == 0x1c, "UnpackedSize is %#x, expected 0x1c\n", type_desc.UnpackedSize);
877     ok(type_desc.Stride == 0x10, "Stride is %#x, expected 0x10\n", type_desc.Stride);
878
879     variable4 = variable3->lpVtbl->GetElement(variable3, 0);
880     hr = variable4->lpVtbl->GetDesc(variable4, &desc);
881     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
882
883     ok(strcmp(desc.Name, "t") == 0, "Name is \"%s\", expected \"t\"\n", desc.Name);
884     ok(desc.Semantic == NULL, "Semantic is \"%s\", expected NULL\n", desc.Semantic);
885     ok(desc.Flags == 0, "Flags is %u, expected 0\n", desc.Flags);
886     ok(desc.Annotations == 0, "Annotations is %u, expected 0\n", desc.Annotations);
887     ok(desc.BufferOffset == 64, "BufferOffset is %u, expected 64\n", desc.BufferOffset);
888     ok(desc.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", desc.ExplicitBindPoint);
889
890     parent = variable4->lpVtbl->GetParentConstantBuffer(variable4);
891     ok(parent == constantbuffer, "GetParentConstantBuffer got %p, expected %p\n",
892         parent, constantbuffer);
893
894     type = variable4->lpVtbl->GetType(variable4);
895     hr = type->lpVtbl->GetDesc(type, &type_desc);
896     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
897
898     ok(strcmp(type_desc.TypeName, "test") == 0, "TypeName is \"%s\", expected \"test\"\n", type_desc.TypeName);
899     ok(type_desc.Class == D3D10_SVC_STRUCT, "Class is %x, expected %x\n", type_desc.Class, D3D10_SVC_STRUCT);
900     ok(type_desc.Type == D3D10_SVT_VOID, "Type is %x, expected %x\n", type_desc.Type, D3D10_SVT_VOID);
901     ok(type_desc.Elements == 0, "Elements is %u, expected 0\n", type_desc.Elements);
902     ok(type_desc.Members == 3, "Members is %u, expected 3\n", type_desc.Members);
903     ok(type_desc.Rows == 0, "Rows is %u, expected 0\n", type_desc.Rows);
904     ok(type_desc.Columns == 0, "Columns is %u, expected 0\n", type_desc.Columns);
905     ok(type_desc.PackedSize == 0xc, "PackedSize is %#x, expected 0xc\n", type_desc.PackedSize);
906     ok(type_desc.UnpackedSize == 0xc, "UnpackedSize is %#x, expected 0xc\n", type_desc.UnpackedSize);
907     ok(type_desc.Stride == 0x10, "Stride is %#x, expected 0x10\n", type_desc.Stride);
908
909     variable5 = variable4->lpVtbl->GetMemberByIndex(variable4, 0);
910     hr = variable5->lpVtbl->GetDesc(variable5, &desc);
911     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
912
913     ok(strcmp(desc.Name, "f3") == 0, "Name is \"%s\", expected \"f3\"\n", desc.Name);
914     ok(strcmp(desc.Semantic, "SV_POSITION") == 0, "Semantic is \"%s\", expected \"SV_POSITION\"\n", desc.Semantic);
915     ok(desc.Flags == 0, "Flags is %u, expected 0\n", desc.Flags);
916     ok(desc.Annotations == 0, "Annotations is %u, expected 0\n", desc.Annotations);
917     ok(desc.BufferOffset == 64, "BufferOffset is %u, expected 64\n", desc.BufferOffset);
918     ok(desc.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", desc.ExplicitBindPoint);
919
920     parent = variable5->lpVtbl->GetParentConstantBuffer(variable5);
921     ok(parent == constantbuffer, "GetParentConstantBuffer got %p, expected %p\n", parent, constantbuffer);
922
923     type = variable5->lpVtbl->GetType(variable5);
924     hr = type->lpVtbl->GetDesc(type, &type_desc);
925     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
926
927     ok(strcmp(type_desc.TypeName, "float") == 0, "TypeName is \"%s\", expected \"float\"\n", type_desc.TypeName);
928     ok(type_desc.Class == D3D10_SVC_SCALAR, "Class is %x, expected %x\n", type_desc.Class, D3D10_SVC_SCALAR);
929     ok(type_desc.Type == D3D10_SVT_FLOAT, "Type is %x, expected %x\n", type_desc.Type, D3D10_SVT_FLOAT);
930     ok(type_desc.Elements == 0, "Elements is %u, expected 0\n", type_desc.Elements);
931     ok(type_desc.Members == 0, "Members is %u, expected 0\n", type_desc.Members);
932     ok(type_desc.Rows == 1, "Rows is %u, expected 1\n", type_desc.Rows);
933     ok(type_desc.Columns == 1, "Columns is %u, expected 1\n", type_desc.Columns);
934     ok(type_desc.PackedSize == 0x4, "PackedSize is %#x, expected 0x4\n", type_desc.PackedSize);
935     ok(type_desc.UnpackedSize == 0x4, "UnpackedSize is %#x, expected 0x4\n", type_desc.UnpackedSize);
936     ok(type_desc.Stride == 0x10, "Stride is %#x, expected 0x10\n", type_desc.Stride);
937
938     variable5 = variable4->lpVtbl->GetMemberByIndex(variable4, 1);
939     hr = variable5->lpVtbl->GetDesc(variable5, &desc);
940     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
941
942     ok(strcmp(desc.Name, "f4") == 0, "Name is \"%s\", expected \"f4\"\n", desc.Name);
943     ok(strcmp(desc.Semantic, "COLOR0") == 0, "Semantic is \"%s\", expected \"COLOR0\"\n", desc.Semantic);
944     ok(desc.Flags == 0, "Flags is %u, expected 0\n", desc.Flags);
945     ok(desc.Annotations == 0, "Annotations is %u, expected 0\n", desc.Annotations);
946     ok(desc.BufferOffset == 68, "BufferOffset is %u, expected 68\n", desc.BufferOffset);
947     ok(desc.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", desc.ExplicitBindPoint);
948
949     parent = variable5->lpVtbl->GetParentConstantBuffer(variable5);
950     ok(parent == constantbuffer, "GetParentConstantBuffer got %p, expected %p\n", parent, constantbuffer);
951
952     type = variable5->lpVtbl->GetType(variable5);
953     hr = type->lpVtbl->GetDesc(type, &type_desc);
954     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
955
956     ok(strcmp(type_desc.TypeName, "float") == 0, "TypeName is \"%s\", expected \"float\"\n", type_desc.TypeName);
957     ok(type_desc.Class == D3D10_SVC_SCALAR, "Class is %x, expected %x\n", type_desc.Class, D3D10_SVC_SCALAR);
958     ok(type_desc.Type == D3D10_SVT_FLOAT, "Type is %x, expected %x\n", type_desc.Type, D3D10_SVT_FLOAT);
959     ok(type_desc.Elements == 0, "Elements is %u, expected 0\n", type_desc.Elements);
960     ok(type_desc.Members == 0, "Members is %u, expected 0\n", type_desc.Members);
961     ok(type_desc.Rows == 1, "Rows is %u, expected 1\n", type_desc.Rows);
962     ok(type_desc.Columns == 1, "Columns is %u, expected 1\n", type_desc.Columns);
963     ok(type_desc.PackedSize == 0x4, "PackedSize is %#x, expected 0x4\n", type_desc.PackedSize);
964     ok(type_desc.UnpackedSize == 0x4, "UnpackedSize is %#x, expected 0x4\n", type_desc.UnpackedSize);
965     ok(type_desc.Stride == 0x10, "Stride is %#x, expected 0x10\n", type_desc.Stride);
966
967     variable5 = variable4->lpVtbl->GetMemberByIndex(variable4, 2);
968     hr = variable5->lpVtbl->GetDesc(variable5, &desc);
969     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
970
971     ok(strcmp(desc.Name, "f5") == 0, "Name is \"%s\", expected \"f5\"\n", desc.Name);
972     ok(strcmp(desc.Semantic, "COLOR1") == 0, "Semantic is \"%s\", expected \"COLOR1\"\n", desc.Semantic);
973     ok(desc.Flags == 0, "Flags is %u, expected 0\n", desc.Flags);
974     ok(desc.Annotations == 0, "Annotations is %u, expected 0\n", desc.Annotations);
975     ok(desc.BufferOffset == 72, "BufferOffset is %u, expected 72\n", desc.BufferOffset);
976     ok(desc.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", desc.ExplicitBindPoint);
977
978     parent = variable5->lpVtbl->GetParentConstantBuffer(variable5);
979     ok(parent == constantbuffer, "GetParentConstantBuffer got %p, expected %p\n", parent, constantbuffer);
980
981     type = variable5->lpVtbl->GetType(variable5);
982     hr = type->lpVtbl->GetDesc(type, &type_desc);
983     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
984
985     ok(strcmp(type_desc.TypeName, "float") == 0, "TypeName is \"%s\", expected \"float\"\n", type_desc.TypeName);
986     ok(type_desc.Class == D3D10_SVC_SCALAR, "Class is %x, expected %x\n", type_desc.Class, D3D10_SVC_SCALAR);
987     ok(type_desc.Type == D3D10_SVT_FLOAT, "Type is %x, expected %x\n", type_desc.Type, D3D10_SVT_FLOAT);
988     ok(type_desc.Elements == 0, "Elements is %u, expected 0\n", type_desc.Elements);
989     ok(type_desc.Members == 0, "Members is %u, expected 0\n", type_desc.Members);
990     ok(type_desc.Rows == 1, "Rows is %u, expected 1\n", type_desc.Rows);
991     ok(type_desc.Columns == 1, "Columns is %u, expected 1\n", type_desc.Columns);
992     ok(type_desc.PackedSize == 0x4, "PackedSize is %#x, expected 0x4\n", type_desc.PackedSize);
993     ok(type_desc.UnpackedSize == 0x4, "UnpackedSize is %#x, expected 0x4\n", type_desc.UnpackedSize);
994     ok(type_desc.Stride == 0x10, "Stride is %#x, expected 0x10\n", type_desc.Stride);
995
996     variable4 = variable3->lpVtbl->GetElement(variable3, 1);
997     hr = variable4->lpVtbl->GetDesc(variable4, &desc);
998     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
999
1000     ok(strcmp(desc.Name, "t") == 0, "Name is \"%s\", expected \"t\"\n", desc.Name);
1001     ok(desc.Semantic == NULL, "Semantic is \"%s\", expected NULL\n", desc.Semantic);
1002     ok(desc.Flags == 0, "Flags is %u, expected 0\n", desc.Flags);
1003     ok(desc.Annotations == 0, "Annotations is %u, expected 0\n", desc.Annotations);
1004     ok(desc.BufferOffset == 80, "BufferOffset is %u, expected 80\n", desc.BufferOffset);
1005     ok(desc.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", desc.ExplicitBindPoint);
1006
1007     parent = variable4->lpVtbl->GetParentConstantBuffer(variable4);
1008     ok(parent == constantbuffer, "GetParentConstantBuffer got %p, expected %p\n",
1009         parent, constantbuffer);
1010
1011     type = variable4->lpVtbl->GetType(variable4);
1012     hr = type->lpVtbl->GetDesc(type, &type_desc);
1013     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1014
1015     ok(strcmp(type_desc.TypeName, "test") == 0, "TypeName is \"%s\", expected \"test\"\n", type_desc.TypeName);
1016     ok(type_desc.Class == D3D10_SVC_STRUCT, "Class is %x, expected %x\n", type_desc.Class, D3D10_SVC_STRUCT);
1017     ok(type_desc.Type == D3D10_SVT_VOID, "Type is %x, expected %x\n", type_desc.Type, D3D10_SVT_VOID);
1018     ok(type_desc.Elements == 0, "Elements is %u, expected 0\n", type_desc.Elements);
1019     ok(type_desc.Members == 3, "Members is %u, expected 3\n", type_desc.Members);
1020     ok(type_desc.Rows == 0, "Rows is %u, expected 0\n", type_desc.Rows);
1021     ok(type_desc.Columns == 0, "Columns is %u, expected 0\n", type_desc.Columns);
1022     ok(type_desc.PackedSize == 0xc, "PackedSize is %#x, expected 0xc\n", type_desc.PackedSize);
1023     ok(type_desc.UnpackedSize == 0xc, "UnpackedSize is %#x, expected 0xc\n", type_desc.UnpackedSize);
1024     ok(type_desc.Stride == 0x10, "Stride is %#x, expected 0x10\n", type_desc.Stride);
1025
1026     variable5 = variable4->lpVtbl->GetMemberByIndex(variable4, 0);
1027     hr = variable5->lpVtbl->GetDesc(variable5, &desc);
1028     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1029
1030     ok(strcmp(desc.Name, "f3") == 0, "Name is \"%s\", expected \"f3\"\n", desc.Name);
1031     ok(strcmp(desc.Semantic, "SV_POSITION") == 0, "Semantic is \"%s\", expected \"SV_POSITION\"\n", desc.Semantic);
1032     ok(desc.Flags == 0, "Flags is %u, expected 0\n", desc.Flags);
1033     ok(desc.Annotations == 0, "Annotations is %u, expected 0\n", desc.Annotations);
1034     ok(desc.BufferOffset == 80, "BufferOffset is %u, expected 80\n", desc.BufferOffset);
1035     ok(desc.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", desc.ExplicitBindPoint);
1036
1037     parent = variable5->lpVtbl->GetParentConstantBuffer(variable5);
1038     ok(parent == constantbuffer, "GetParentConstantBuffer got %p, expected %p\n", parent, constantbuffer);
1039
1040     type = variable5->lpVtbl->GetType(variable5);
1041     hr = type->lpVtbl->GetDesc(type, &type_desc);
1042     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1043
1044     ok(strcmp(type_desc.TypeName, "float") == 0, "TypeName is \"%s\", expected \"float\"\n", type_desc.TypeName);
1045     ok(type_desc.Class == D3D10_SVC_SCALAR, "Class is %x, expected %x\n", type_desc.Class, D3D10_SVC_SCALAR);
1046     ok(type_desc.Type == D3D10_SVT_FLOAT, "Type is %x, expected %x\n", type_desc.Type, D3D10_SVT_FLOAT);
1047     ok(type_desc.Elements == 0, "Elements is %u, expected 0\n", type_desc.Elements);
1048     ok(type_desc.Members == 0, "Members is %u, expected 0\n", type_desc.Members);
1049     ok(type_desc.Rows == 1, "Rows is %u, expected 1\n", type_desc.Rows);
1050     ok(type_desc.Columns == 1, "Columns is %u, expected 1\n", type_desc.Columns);
1051     ok(type_desc.PackedSize == 0x4, "PackedSize is %#x, expected 0x4\n", type_desc.PackedSize);
1052     ok(type_desc.UnpackedSize == 0x4, "UnpackedSize is %#x, expected 0x4\n", type_desc.UnpackedSize);
1053     ok(type_desc.Stride == 0x10, "Stride is %#x, expected 0x10\n", type_desc.Stride);
1054
1055     variable5 = variable4->lpVtbl->GetMemberByIndex(variable4, 1);
1056     hr = variable5->lpVtbl->GetDesc(variable5, &desc);
1057     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1058
1059     ok(strcmp(desc.Name, "f4") == 0, "Name is \"%s\", expected \"f4\"\n", desc.Name);
1060     ok(strcmp(desc.Semantic, "COLOR0") == 0, "Semantic is \"%s\", expected \"COLOR0\"\n", desc.Semantic);
1061     ok(desc.Flags == 0, "Flags is %u, expected 0\n", desc.Flags);
1062     ok(desc.Annotations == 0, "Annotations is %u, expected 0\n", desc.Annotations);
1063     ok(desc.BufferOffset == 84, "BufferOffset is %u, expected 84\n", desc.BufferOffset);
1064     ok(desc.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", desc.ExplicitBindPoint);
1065
1066     parent = variable5->lpVtbl->GetParentConstantBuffer(variable5);
1067     ok(parent == constantbuffer, "GetParentConstantBuffer got %p, expected %p\n", parent, constantbuffer);
1068
1069     type = variable5->lpVtbl->GetType(variable5);
1070     hr = type->lpVtbl->GetDesc(type, &type_desc);
1071     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1072
1073     ok(strcmp(type_desc.TypeName, "float") == 0, "TypeName is \"%s\", expected \"float\"\n", type_desc.TypeName);
1074     ok(type_desc.Class == D3D10_SVC_SCALAR, "Class is %x, expected %x\n", type_desc.Class, D3D10_SVC_SCALAR);
1075     ok(type_desc.Type == D3D10_SVT_FLOAT, "Type is %x, expected %x\n", type_desc.Type, D3D10_SVT_FLOAT);
1076     ok(type_desc.Elements == 0, "Elements is %u, expected 0\n", type_desc.Elements);
1077     ok(type_desc.Members == 0, "Members is %u, expected 0\n", type_desc.Members);
1078     ok(type_desc.Rows == 1, "Rows is %u, expected 1\n", type_desc.Rows);
1079     ok(type_desc.Columns == 1, "Columns is %u, expected 1\n", type_desc.Columns);
1080     ok(type_desc.PackedSize == 0x4, "PackedSize is %#x, expected 0x4\n", type_desc.PackedSize);
1081     ok(type_desc.UnpackedSize == 0x4, "UnpackedSize is %#x, expected 0x4\n", type_desc.UnpackedSize);
1082     ok(type_desc.Stride == 0x10, "Stride is %#x, expected 0x10\n", type_desc.Stride);
1083
1084     variable5 = variable4->lpVtbl->GetMemberByIndex(variable4, 2);
1085     hr = variable5->lpVtbl->GetDesc(variable5, &desc);
1086     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1087
1088     ok(strcmp(desc.Name, "f5") == 0, "Name is \"%s\", expected \"f5\"\n", desc.Name);
1089     ok(strcmp(desc.Semantic, "COLOR1") == 0, "Semantic is \"%s\", expected \"COLOR1\"\n", desc.Semantic);
1090     ok(desc.Flags == 0, "Flags is %u, expected 0\n", desc.Flags);
1091     ok(desc.Annotations == 0, "Annotations is %u, expected 0\n", desc.Annotations);
1092     ok(desc.BufferOffset == 88, "BufferOffset is %u, expected 88\n", desc.BufferOffset);
1093     ok(desc.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", desc.ExplicitBindPoint);
1094
1095     parent = variable5->lpVtbl->GetParentConstantBuffer(variable5);
1096     ok(parent == constantbuffer, "GetParentConstantBuffer got %p, expected %p\n", parent, constantbuffer);
1097
1098     type = variable5->lpVtbl->GetType(variable5);
1099     hr = type->lpVtbl->GetDesc(type, &type_desc);
1100     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1101
1102     ok(strcmp(type_desc.TypeName, "float") == 0, "TypeName is \"%s\", expected \"float\"\n", type_desc.TypeName);
1103     ok(type_desc.Class == D3D10_SVC_SCALAR, "Class is %x, expected %x\n", type_desc.Class, D3D10_SVC_SCALAR);
1104     ok(type_desc.Type == D3D10_SVT_FLOAT, "Type is %x, expected %x\n", type_desc.Type, D3D10_SVT_FLOAT);
1105     ok(type_desc.Elements == 0, "Elements is %u, expected 0\n", type_desc.Elements);
1106     ok(type_desc.Members == 0, "Members is %u, expected 0\n", type_desc.Members);
1107     ok(type_desc.Rows == 1, "Rows is %u, expected 1\n", type_desc.Rows);
1108     ok(type_desc.Columns == 1, "Columns is %u, expected 1\n", type_desc.Columns);
1109     ok(type_desc.PackedSize == 0x4, "PackedSize is %#x, expected 0x4\n", type_desc.PackedSize);
1110     ok(type_desc.UnpackedSize == 0x4, "UnpackedSize is %#x, expected 0x4\n", type_desc.UnpackedSize);
1111     ok(type_desc.Stride == 0x10, "Stride is %#x, expected 0x10\n", type_desc.Stride);
1112
1113     effect->lpVtbl->Release(effect);
1114 }
1115
1116 /*
1117  * test_effect_variable_type_class
1118  */
1119 #if 0
1120 cbuffer cb <String s = "STRING";>
1121 {
1122     float f;
1123     vector <int, 2> i;
1124     matrix <uint, 2, 3> u;
1125     row_major matrix <bool, 2, 3> b;
1126 };
1127 BlendState blend;
1128 DepthStencilState depthstencil;
1129 RasterizerState rast;
1130 SamplerState sam;
1131 RenderTargetView rtv;
1132 DepthStencilView dsv;
1133 Texture1D t1;
1134 Texture1DArray t1a;
1135 Texture2D t2;
1136 Texture2DMS <float4, 4> t2dms;
1137 Texture2DArray t2a;
1138 Texture2DMSArray <float4, 4> t2dmsa;
1139 Texture3D t3;
1140 TextureCube tq;
1141 GeometryShader gs[2];
1142 PixelShader ps;
1143 VertexShader vs[1];
1144 #endif
1145 static DWORD fx_test_evtc[] = {
1146 0x43425844, 0xc04c50cb, 0x0afeb4ef, 0xbb93f346,
1147 0x97a29499, 0x00000001, 0x00000659, 0x00000001,
1148 0x00000024, 0x30315846, 0x0000062d, 0xfeff1001,
1149 0x00000001, 0x00000004, 0x00000011, 0x00000000,
1150 0x00000000, 0x00000000, 0x00000000, 0x000003d9,
1151 0x00000000, 0x00000008, 0x00000001, 0x00000001,
1152 0x00000001, 0x00000001, 0x00000001, 0x00000001,
1153 0x00000004, 0x00000000, 0x00000000, 0x53006263,
1154 0x6e697274, 0x00070067, 0x00020000, 0x00000000,
1155 0x00000000, 0x00000000, 0x00000000, 0x00010000,
1156 0x00730000, 0x49525453, 0x6600474e, 0x74616f6c,
1157 0x00003300, 0x00000100, 0x00000000, 0x00000400,
1158 0x00001000, 0x00000400, 0x00090900, 0x69006600,
1159 0x0032746e, 0x00000057, 0x00000001, 0x00000000,
1160 0x00000008, 0x00000010, 0x00000008, 0x00001112,
1161 0x69750069, 0x7832746e, 0x007a0033, 0x00010000,
1162 0x00000000, 0x00280000, 0x00300000, 0x00180000,
1163 0x5a1b0000, 0x00750000, 0x6c6f6f62, 0x00337832,
1164 0x000000a0, 0x00000001, 0x00000000, 0x0000001c,
1165 0x00000020, 0x00000018, 0x00001a23, 0x6c420062,
1166 0x53646e65, 0x65746174, 0x0000c600, 0x00000200,
1167 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1168 0x00000200, 0x656c6200, 0x4400646e, 0x68747065,
1169 0x6e657453, 0x536c6963, 0x65746174, 0x0000f300,
1170 0x00000200, 0x00000000, 0x00000000, 0x00000000,
1171 0x00000000, 0x00000300, 0x70656400, 0x74736874,
1172 0x69636e65, 0x6152006c, 0x72657473, 0x72657a69,
1173 0x74617453, 0x012e0065, 0x00020000, 0x00000000,
1174 0x00000000, 0x00000000, 0x00000000, 0x00040000,
1175 0x61720000, 0x53007473, 0x6c706d61, 0x74537265,
1176 0x00657461, 0x0000015f, 0x00000002, 0x00000000,
1177 0x00000000, 0x00000000, 0x00000000, 0x00000015,
1178 0x006d6173, 0x646e6552, 0x61547265, 0x74656772,
1179 0x77656956, 0x00018c00, 0x00000200, 0x00000000,
1180 0x00000000, 0x00000000, 0x00000000, 0x00001300,
1181 0x76747200, 0x70654400, 0x74536874, 0x69636e65,
1182 0x6569566c, 0x01bd0077, 0x00020000, 0x00000000,
1183 0x00000000, 0x00000000, 0x00000000, 0x00140000,
1184 0x73640000, 0x65540076, 0x72757478, 0x00443165,
1185 0x000001ee, 0x00000002, 0x00000000, 0x00000000,
1186 0x00000000, 0x00000000, 0x0000000a, 0x54003174,
1187 0x75747865, 0x44316572, 0x61727241, 0x02170079,
1188 0x00020000, 0x00000000, 0x00000000, 0x00000000,
1189 0x00000000, 0x000b0000, 0x31740000, 0x65540061,
1190 0x72757478, 0x00443265, 0x00000246, 0x00000002,
1191 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1192 0x0000000c, 0x54003274, 0x75747865, 0x44326572,
1193 0x6f00534d, 0x02000002, 0x00000000, 0x00000000,
1194 0x00000000, 0x00000000, 0x0e000000, 0x74000000,
1195 0x736d6432, 0x78655400, 0x65727574, 0x72414432,
1196 0x00796172, 0x0000029d, 0x00000002, 0x00000000,
1197 0x00000000, 0x00000000, 0x00000000, 0x0000000d,
1198 0x00613274, 0x74786554, 0x32657275, 0x41534d44,
1199 0x79617272, 0x0002cc00, 0x00000200, 0x00000000,
1200 0x00000000, 0x00000000, 0x00000000, 0x00000f00,
1201 0x64327400, 0x0061736d, 0x74786554, 0x33657275,
1202 0x03000044, 0x00020000, 0x00000000, 0x00000000,
1203 0x00000000, 0x00000000, 0x00100000, 0x33740000,
1204 0x78655400, 0x65727574, 0x65627543, 0x00032900,
1205 0x00000200, 0x00000000, 0x00000000, 0x00000000,
1206 0x00000000, 0x00001100, 0x00717400, 0x6d6f6547,
1207 0x79727465, 0x64616853, 0x54007265, 0x02000003,
1208 0x02000000, 0x00000000, 0x00000000, 0x00000000,
1209 0x07000000, 0x67000000, 0x69500073, 0x536c6578,
1210 0x65646168, 0x03820072, 0x00020000, 0x00000000,
1211 0x00000000, 0x00000000, 0x00000000, 0x00050000,
1212 0x73700000, 0x72655600, 0x53786574, 0x65646168,
1213 0x03ad0072, 0x00020000, 0x00010000, 0x00000000,
1214 0x00000000, 0x00000000, 0x00060000, 0x73760000,
1215 0x00000400, 0x00006000, 0x00000000, 0x00000400,
1216 0xffffff00, 0x000001ff, 0x00002a00, 0x00000e00,
1217 0x00002c00, 0x00005500, 0x00003900, 0x00000000,
1218 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1219 0x00007800, 0x00005c00, 0x00000000, 0x00000400,
1220 0x00000000, 0x00000000, 0x00000000, 0x00009e00,
1221 0x00008200, 0x00000000, 0x00001000, 0x00000000,
1222 0x00000000, 0x00000000, 0x0000c400, 0x0000a800,
1223 0x00000000, 0x00004000, 0x00000000, 0x00000000,
1224 0x00000000, 0x0000ed00, 0x0000d100, 0x00000000,
1225 0xffffff00, 0x000000ff, 0x00000000, 0x00012100,
1226 0x00010500, 0x00000000, 0xffffff00, 0x000000ff,
1227 0x00000000, 0x00015a00, 0x00013e00, 0x00000000,
1228 0xffffff00, 0x000000ff, 0x00000000, 0x00018800,
1229 0x00016c00, 0x00000000, 0xffffff00, 0x000000ff,
1230 0x00000000, 0x0001b900, 0x00019d00, 0x00000000,
1231 0xffffff00, 0x000000ff, 0x0001ea00, 0x0001ce00,
1232 0x00000000, 0xffffff00, 0x000000ff, 0x00021400,
1233 0x0001f800, 0x00000000, 0xffffff00, 0x000000ff,
1234 0x00024200, 0x00022600, 0x00000000, 0xffffff00,
1235 0x000000ff, 0x00026c00, 0x00025000, 0x00000000,
1236 0xffffff00, 0x000000ff, 0x00029700, 0x00027b00,
1237 0x00000000, 0xffffff00, 0x000000ff, 0x0002c800,
1238 0x0002ac00, 0x00000000, 0xffffff00, 0x000000ff,
1239 0x0002f900, 0x0002dd00, 0x00000000, 0xffffff00,
1240 0x000000ff, 0x00032600, 0x00030a00, 0x00000000,
1241 0xffffff00, 0x000000ff, 0x00035100, 0x00033500,
1242 0x00000000, 0xffffff00, 0x000000ff, 0x00037f00,
1243 0x00036300, 0x00000000, 0xffffff00, 0x000000ff,
1244 0x00000000, 0x00000000, 0x0003aa00, 0x00038e00,
1245 0x00000000, 0xffffff00, 0x000000ff, 0x00000000,
1246 0x0003d600, 0x0003ba00, 0x00000000, 0xffffff00,
1247 0x000000ff, 0x00000000, 0x00000000,
1248 };
1249
1250 static BOOL is_valid_check(BOOL a, BOOL b)
1251 {
1252     return (a && b) || (!a && !b);
1253 }
1254
1255 static void check_as(ID3D10EffectVariable *variable)
1256 {
1257     ID3D10EffectVariable *variable2;
1258     ID3D10EffectType *type;
1259     D3D10_EFFECT_TYPE_DESC td;
1260     BOOL ret, is_valid;
1261     HRESULT hr;
1262
1263     type = variable->lpVtbl->GetType(variable);
1264     hr = type->lpVtbl->GetDesc(type, &td);
1265     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1266
1267     variable2 = (ID3D10EffectVariable *)variable->lpVtbl->AsConstantBuffer(variable);
1268     is_valid = variable2->lpVtbl->IsValid(variable2);
1269     ret = is_valid_check(is_valid, td.Type == D3D10_SVT_CBUFFER);
1270     ok(ret, "AsConstantBuffer valid check failed (Type is %x)\n", td.Type);
1271
1272     variable2 = (ID3D10EffectVariable *)variable->lpVtbl->AsString(variable);
1273     is_valid = variable2->lpVtbl->IsValid(variable2);
1274     ret = is_valid_check(is_valid, td.Type == D3D10_SVT_STRING);
1275     ok(ret, "AsString valid check failed (Type is %x)\n", td.Type);
1276
1277     variable2 = (ID3D10EffectVariable *)variable->lpVtbl->AsScalar(variable);
1278     is_valid = variable2->lpVtbl->IsValid(variable2);
1279     ret = is_valid_check(is_valid, td.Class == D3D10_SVC_SCALAR);
1280     ok(ret, "AsScalar valid check failed (Class is %x)\n", td.Class);
1281
1282     variable2 = (ID3D10EffectVariable *)variable->lpVtbl->AsVector(variable);
1283     is_valid = variable2->lpVtbl->IsValid(variable2);
1284     ret = is_valid_check(is_valid, td.Class == D3D10_SVC_VECTOR);
1285     ok(ret, "AsVector valid check failed (Class is %x)\n", td.Class);
1286
1287     variable2 = (ID3D10EffectVariable *)variable->lpVtbl->AsMatrix(variable);
1288     is_valid = variable2->lpVtbl->IsValid(variable2);
1289     ret = is_valid_check(is_valid, td.Class == D3D10_SVC_MATRIX_ROWS
1290         || td.Class == D3D10_SVC_MATRIX_COLUMNS);
1291     ok(ret, "AsMatrix valid check failed (Class is %x)\n", td.Class);
1292
1293     variable2 = (ID3D10EffectVariable *)variable->lpVtbl->AsBlend(variable);
1294     is_valid = variable2->lpVtbl->IsValid(variable2);
1295     ret = is_valid_check(is_valid, td.Type == D3D10_SVT_BLEND);
1296     ok(ret, "AsBlend valid check failed (Type is %x)\n", td.Type);
1297
1298     variable2 = (ID3D10EffectVariable *)variable->lpVtbl->AsDepthStencil(variable);
1299     is_valid = variable2->lpVtbl->IsValid(variable2);
1300     ret = is_valid_check(is_valid, td.Type == D3D10_SVT_DEPTHSTENCIL);
1301     ok(ret, "AsDepthStencil valid check failed (Type is %x)\n", td.Type);
1302
1303     variable2 = (ID3D10EffectVariable *)variable->lpVtbl->AsRasterizer(variable);
1304     is_valid = variable2->lpVtbl->IsValid(variable2);
1305     ret = is_valid_check(is_valid, td.Type == D3D10_SVT_RASTERIZER);
1306     ok(ret, "AsRasterizer valid check failed (Type is %x)\n", td.Type);
1307
1308     variable2 = (ID3D10EffectVariable *)variable->lpVtbl->AsSampler(variable);
1309     is_valid = variable2->lpVtbl->IsValid(variable2);
1310     ret = is_valid_check(is_valid, td.Type == D3D10_SVT_SAMPLER);
1311     ok(ret, "AsSampler valid check failed (Type is %x)\n", td.Type);
1312
1313     variable2 = (ID3D10EffectVariable *)variable->lpVtbl->AsDepthStencilView(variable);
1314     is_valid = variable2->lpVtbl->IsValid(variable2);
1315     ret = is_valid_check(is_valid, td.Type == D3D10_SVT_DEPTHSTENCILVIEW);
1316     ok(ret, "AsDepthStencilView valid check failed (Type is %x)\n", td.Type);
1317
1318     variable2 = (ID3D10EffectVariable *)variable->lpVtbl->AsRenderTargetView(variable);
1319     is_valid = variable2->lpVtbl->IsValid(variable2);
1320     ret = is_valid_check(is_valid, td.Type == D3D10_SVT_RENDERTARGETVIEW);
1321     ok(ret, "AsRenderTargetView valid check failed (Type is %x)\n", td.Type);
1322
1323     variable2 = (ID3D10EffectVariable *)variable->lpVtbl->AsShaderResource(variable);
1324     is_valid = variable2->lpVtbl->IsValid(variable2);
1325     ret = is_valid_check(is_valid, td.Type == D3D10_SVT_TEXTURE1D
1326         || td.Type == D3D10_SVT_TEXTURE1DARRAY || td.Type == D3D10_SVT_TEXTURE2D
1327         || td.Type == D3D10_SVT_TEXTURE2DMS || td.Type == D3D10_SVT_TEXTURE2DARRAY
1328         || td.Type == D3D10_SVT_TEXTURE2DMSARRAY || td.Type == D3D10_SVT_TEXTURE3D
1329         || td.Type == D3D10_SVT_TEXTURECUBE);
1330     ok(ret, "AsShaderResource valid check failed (Type is %x)\n", td.Type);
1331
1332     variable2 = (ID3D10EffectVariable *)variable->lpVtbl->AsShader(variable);
1333     is_valid = variable2->lpVtbl->IsValid(variable2);
1334     ret = is_valid_check(is_valid, td.Type == D3D10_SVT_GEOMETRYSHADER
1335         || td.Type == D3D10_SVT_PIXELSHADER || td.Type == D3D10_SVT_VERTEXSHADER);
1336     ok(ret, "AsShader valid check failed (Type is %x)\n", td.Type);
1337 }
1338
1339 static void test_effect_variable_type_class(ID3D10Device *device)
1340 {
1341     ID3D10Effect *effect;
1342     ID3D10EffectConstantBuffer *constantbuffer, *null_buffer, *parent;
1343     ID3D10EffectVariable *variable;
1344     ID3D10EffectType *type;
1345     D3D10_EFFECT_VARIABLE_DESC vd;
1346     D3D10_EFFECT_TYPE_DESC td;
1347     HRESULT hr;
1348     unsigned int variable_nr = 0;
1349
1350     hr = D3D10CreateEffectFromMemory(fx_test_evtc, fx_test_evtc[6], 0, device, NULL, &effect);
1351     ok(SUCCEEDED(hr), "D3D10CreateEffectFromMemory failed (%x)\n", hr);
1352
1353     /* get the null_constantbuffer, so that we can compare it to variables->GetParentConstantBuffer */
1354     null_buffer = effect->lpVtbl->GetConstantBufferByIndex(effect, 1);
1355
1356     /* check constantbuffer cb */
1357     constantbuffer = effect->lpVtbl->GetConstantBufferByIndex(effect, 0);
1358     hr = constantbuffer->lpVtbl->GetDesc(constantbuffer, &vd);
1359     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1360
1361     ok(strcmp(vd.Name, "cb") == 0, "Name is \"%s\", expected \"cb\"\n", vd.Name);
1362     ok(vd.Semantic == NULL, "Semantic is \"%s\", expected NULL\n", vd.Semantic);
1363     ok(vd.Flags == 0, "Type is %u, expected 0\n", vd.Flags);
1364     ok(vd.Annotations == 1, "Elements is %u, expected 1\n", vd.Annotations);
1365     ok(vd.BufferOffset == 0, "Members is %u, expected 0\n", vd.BufferOffset);
1366     ok(vd.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", vd.ExplicitBindPoint);
1367
1368     check_as((ID3D10EffectVariable *)constantbuffer);
1369
1370     parent = constantbuffer->lpVtbl->GetParentConstantBuffer(constantbuffer);
1371     ok(null_buffer == parent, "GetParentConstantBuffer got %p, expected %p\n", parent, null_buffer);
1372
1373     type = constantbuffer->lpVtbl->GetType(constantbuffer);
1374     hr = type->lpVtbl->GetDesc(type, &td);
1375     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1376
1377     ok(strcmp(td.TypeName, "cbuffer") == 0, "TypeName is \"%s\", expected \"cbuffer\"\n", td.TypeName);
1378     ok(td.Class == D3D10_SVC_OBJECT, "Class is %x, expected %x\n", td.Class, D3D10_SVC_OBJECT);
1379     ok(td.Type == D3D10_SVT_CBUFFER, "Type is %x, expected %x\n", td.Type, D3D10_SVT_CBUFFER);
1380     ok(td.Elements == 0, "Elements is %u, expected 0\n", td.Elements);
1381     ok(td.Members == 4, "Members is %u, expected 4\n", td.Members);
1382     ok(td.Rows == 0, "Rows is %u, expected 0\n", td.Rows);
1383     ok(td.Columns == 0, "Columns is %u, expected 0\n", td.Columns);
1384     ok(td.PackedSize == 0x3c, "PackedSize is %#x, expected 0x3c\n", td.PackedSize);
1385     ok(td.UnpackedSize == 0x60, "UnpackedSize is %#x, expected 0x60\n", td.UnpackedSize);
1386     ok(td.Stride == 0x60, "Stride is %#x, expected 0x60\n", td.Stride);
1387
1388     /* check annotation a */
1389     variable = constantbuffer->lpVtbl->GetAnnotationByIndex(constantbuffer, 0);
1390     hr = variable->lpVtbl->GetDesc(variable, &vd);
1391     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1392
1393     ok(strcmp(vd.Name, "s") == 0, "Name is \"%s\", expected \"s\"\n", vd.Name);
1394     ok(vd.Semantic == NULL, "Semantic is \"%s\", expected NULL\n", vd.Semantic);
1395     ok(vd.Flags == 2, "Flags is %u, expected 2\n", vd.Flags);
1396     ok(vd.Annotations == 0, "Annotations is %u, expected 0\n", vd.Annotations);
1397     ok(vd.BufferOffset == 0, "BufferOffset is %u, expected 0\n", vd.BufferOffset);
1398     ok(vd.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", vd.ExplicitBindPoint);
1399
1400     check_as((ID3D10EffectVariable *)variable);
1401
1402     parent = variable->lpVtbl->GetParentConstantBuffer(variable);
1403     ok(null_buffer == parent, "GetParentConstantBuffer got %p, expected %p\n", parent, null_buffer);
1404
1405     type = variable->lpVtbl->GetType(variable);
1406     hr = type->lpVtbl->GetDesc(type, &td);
1407     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1408
1409     ok(strcmp(td.TypeName, "String") == 0, "TypeName is \"%s\", expected \"String\"\n", td.TypeName);
1410     ok(td.Class == D3D10_SVC_OBJECT, "Class is %x, expected %x\n", td.Class, D3D10_SVC_OBJECT);
1411     ok(td.Type == D3D10_SVT_STRING, "Type is %x, expected %x\n", td.Type, D3D10_SVT_STRING);
1412     ok(td.Elements == 0, "Elements is %u, expected 0\n", td.Elements);
1413     ok(td.Members == 0, "Members is %u, expected 0\n", td.Members);
1414     ok(td.Rows == 0, "Rows is %u, expected 0\n", td.Rows);
1415     ok(td.Columns == 0, "Columns is %u, expected 0\n", td.Columns);
1416     ok(td.PackedSize == 0x0, "PackedSize is %#x, expected 0x0\n", td.PackedSize);
1417     ok(td.UnpackedSize == 0x0, "UnpackedSize is %#x, expected 0x0\n", td.UnpackedSize);
1418     ok(td.Stride == 0x0, "Stride is %#x, expected 0x0\n", td.Stride);
1419
1420     /* check float f */
1421     variable = constantbuffer->lpVtbl->GetMemberByIndex(constantbuffer, variable_nr++);
1422     hr = variable->lpVtbl->GetDesc(variable, &vd);
1423     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1424
1425     ok(strcmp(vd.Name, "f") == 0, "Name is \"%s\", expected \"f\"\n", vd.Name);
1426     ok(vd.Semantic == NULL, "Semantic is \"%s\", expected NULL\n", vd.Semantic);
1427     ok(vd.Flags == 0, "Flags is %u, expected 0\n", vd.Flags);
1428     ok(vd.Annotations == 0, "Annotations is %u, expected 0\n", vd.Annotations);
1429     ok(vd.BufferOffset == 0, "BufferOffset is %u, expected 0\n", vd.BufferOffset);
1430     ok(vd.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", vd.ExplicitBindPoint);
1431
1432     check_as((ID3D10EffectVariable *)variable);
1433
1434     parent = variable->lpVtbl->GetParentConstantBuffer(variable);
1435     ok(constantbuffer == parent, "GetParentConstantBuffer got %p, expected %p\n", parent, constantbuffer);
1436
1437     type = variable->lpVtbl->GetType(variable);
1438     hr = type->lpVtbl->GetDesc(type, &td);
1439     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1440
1441     ok(strcmp(td.TypeName, "float") == 0, "TypeName is \"%s\", expected \"float\"\n", td.TypeName);
1442     ok(td.Class == D3D10_SVC_SCALAR, "Class is %x, expected %x\n", td.Class, D3D10_SVC_SCALAR);
1443     ok(td.Type == D3D10_SVT_FLOAT, "Type is %x, expected %x\n", td.Type, D3D10_SVT_FLOAT);
1444     ok(td.Elements == 0, "Elements is %u, expected 0\n", td.Elements);
1445     ok(td.Members == 0, "Members is %u, expected 0\n", td.Members);
1446     ok(td.Rows == 1, "Rows is %u, expected 1\n", td.Rows);
1447     ok(td.Columns == 1, "Columns is %u, expected 1\n", td.Columns);
1448     ok(td.PackedSize == 0x4, "PackedSize is %#x, expected 0x4\n", td.PackedSize);
1449     ok(td.UnpackedSize == 0x4, "UnpackedSize is %#x, expected 0x4\n", td.UnpackedSize);
1450     ok(td.Stride == 0x10, "Stride is %#x, expected 0x10\n", td.Stride);
1451
1452     /* check int2 i */
1453     variable = constantbuffer->lpVtbl->GetMemberByIndex(constantbuffer, variable_nr++);
1454     hr = variable->lpVtbl->GetDesc(variable, &vd);
1455     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1456
1457     ok(strcmp(vd.Name, "i") == 0, "Name is \"%s\", expected \"i\"\n", vd.Name);
1458     ok(vd.Semantic == NULL, "Semantic is \"%s\", expected NULL\n", vd.Semantic);
1459     ok(vd.Flags == 0, "Flags is %u, expected 0\n", vd.Flags);
1460     ok(vd.Annotations == 0, "Annotations is %u, expected 0\n", vd.Annotations);
1461     ok(vd.BufferOffset == 4, "BufferOffset is %u, expected 4\n", vd.BufferOffset);
1462     ok(vd.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", vd.ExplicitBindPoint);
1463
1464     check_as((ID3D10EffectVariable *)variable);
1465
1466     parent = variable->lpVtbl->GetParentConstantBuffer(variable);
1467     ok(constantbuffer == parent, "GetParentConstantBuffer got %p, expected %p\n", parent, constantbuffer);
1468
1469     type = variable->lpVtbl->GetType(variable);
1470     hr = type->lpVtbl->GetDesc(type, &td);
1471     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1472
1473     ok(strcmp(td.TypeName, "int2") == 0, "TypeName is \"%s\", expected \"int2\"\n", td.TypeName);
1474     ok(td.Class == D3D10_SVC_VECTOR, "Class is %x, expected %x\n", td.Class, D3D10_SVC_VECTOR);
1475     ok(td.Type == D3D10_SVT_INT, "Type is %x, expected %x\n", td.Type, D3D10_SVT_INT);
1476     ok(td.Elements == 0, "Elements is %u, expected 0\n", td.Elements);
1477     ok(td.Members == 0, "Members is %u, expected 0\n", td.Members);
1478     ok(td.Rows == 1, "Rows is %u, expected 1\n", td.Rows);
1479     ok(td.Columns == 2, "Columns is %u, expected 2\n", td.Columns);
1480     ok(td.PackedSize == 0x8, "PackedSize is %#x, expected 0x8\n", td.PackedSize);
1481     ok(td.UnpackedSize == 0x8, "UnpackedSize is %#x, expected 0x8\n", td.UnpackedSize);
1482     ok(td.Stride == 0x10, "Stride is %#x, expected 0x10\n", td.Stride);
1483
1484     /* check uint2x3 u */
1485     variable = constantbuffer->lpVtbl->GetMemberByIndex(constantbuffer, variable_nr++);
1486     hr = variable->lpVtbl->GetDesc(variable, &vd);
1487     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1488
1489     ok(strcmp(vd.Name, "u") == 0, "Name is \"%s\", expected \"u\"\n", vd.Name);
1490     ok(vd.Semantic == NULL, "Semantic is \"%s\", expected NULL\n", vd.Semantic);
1491     ok(vd.Flags == 0, "Flags is %u, expected 0\n", vd.Flags);
1492     ok(vd.Annotations == 0, "Annotations is %u, expected 0\n", vd.Annotations);
1493     ok(vd.BufferOffset == 16, "BufferOffset is %u, expected 16\n", vd.BufferOffset);
1494     ok(vd.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", vd.ExplicitBindPoint);
1495
1496     check_as((ID3D10EffectVariable *)variable);
1497
1498     parent = variable->lpVtbl->GetParentConstantBuffer(variable);
1499     ok(constantbuffer == parent, "GetParentConstantBuffer got %p, expected %p\n", parent, constantbuffer);
1500
1501     type = variable->lpVtbl->GetType(variable);
1502     hr = type->lpVtbl->GetDesc(type, &td);
1503     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1504
1505     ok(strcmp(td.TypeName, "uint2x3") == 0, "TypeName is \"%s\", expected \"uint2x3\"\n", td.TypeName);
1506     ok(td.Class == D3D10_SVC_MATRIX_COLUMNS, "Class is %x, expected %x\n", td.Class, D3D10_SVC_MATRIX_COLUMNS);
1507     ok(td.Type == D3D10_SVT_UINT, "Type is %x, expected %x\n", td.Type, D3D10_SVT_UINT);
1508     ok(td.Elements == 0, "Elements is %u, expected 0\n", td.Elements);
1509     ok(td.Members == 0, "Members is %u, expected 0\n", td.Members);
1510     ok(td.Rows == 2, "Rows is %u, expected 2\n", td.Rows);
1511     ok(td.Columns == 3, "Columns is %u, expected 3\n", td.Columns);
1512     ok(td.PackedSize == 0x18, "PackedSize is %#x, expected 0x18\n", td.PackedSize);
1513     ok(td.UnpackedSize == 0x28, "UnpackedSize is %#x, expected 0x28\n", td.UnpackedSize);
1514     ok(td.Stride == 0x30, "Stride is %#x, expected 0x30\n", td.Stride);
1515
1516     /* check bool2x3 b */
1517     variable = constantbuffer->lpVtbl->GetMemberByIndex(constantbuffer, variable_nr++);
1518     hr = variable->lpVtbl->GetDesc(variable, &vd);
1519     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1520
1521     ok(strcmp(vd.Name, "b") == 0, "Name is \"%s\", expected \"b\"\n", vd.Name);
1522     ok(vd.Semantic == NULL, "Semantic is \"%s\", expected NULL\n", vd.Semantic);
1523     ok(vd.Flags == 0, "Flags is %u, expected 0\n", vd.Flags);
1524     ok(vd.Annotations == 0, "Annotations is %u, expected 0\n", vd.Annotations);
1525     ok(vd.BufferOffset == 64, "BufferOffset is %u, expected 64\n", vd.BufferOffset);
1526     ok(vd.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", vd.ExplicitBindPoint);
1527
1528     check_as((ID3D10EffectVariable *)variable);
1529
1530     parent = variable->lpVtbl->GetParentConstantBuffer(variable);
1531     ok(constantbuffer == parent, "GetParentConstantBuffer got %p, expected %p\n", parent, constantbuffer);
1532
1533     type = variable->lpVtbl->GetType(variable);
1534     hr = type->lpVtbl->GetDesc(type, &td);
1535     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1536
1537     ok(strcmp(td.TypeName, "bool2x3") == 0, "TypeName is \"%s\", expected \"bool2x3\"\n", td.TypeName);
1538     ok(td.Class == D3D10_SVC_MATRIX_ROWS, "Class is %x, expected %x\n", td.Class, D3D10_SVC_MATRIX_ROWS);
1539     ok(td.Type == D3D10_SVT_BOOL, "Type is %x, expected %x\n", td.Type, D3D10_SVT_BOOL);
1540     ok(td.Elements == 0, "Elements is %u, expected 0\n", td.Elements);
1541     ok(td.Members == 0, "Members is %u, expected 0\n", td.Members);
1542     ok(td.Rows == 2, "Rows is %u, expected 2\n", td.Rows);
1543     ok(td.Columns == 3, "Columns is %u, expected 3\n", td.Columns);
1544     ok(td.PackedSize == 0x18, "PackedSize is %#x, expected 0x18\n", td.PackedSize);
1545     ok(td.UnpackedSize == 0x1c, "UnpackedSize is %#x, expected 0x1c\n", td.UnpackedSize);
1546     ok(td.Stride == 0x20, "Stride is %#x, expected 0x20\n", td.Stride);
1547
1548     /* check BlendState blend */
1549     variable = effect->lpVtbl->GetVariableByIndex(effect, variable_nr++);
1550     hr = variable->lpVtbl->GetDesc(variable, &vd);
1551     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1552
1553     ok(strcmp(vd.Name, "blend") == 0, "Name is \"%s\", expected \"blend\"\n", vd.Name);
1554     ok(vd.Semantic == NULL, "Semantic is \"%s\", expected NULL\n", vd.Semantic);
1555     ok(vd.Flags == 0, "Flags is %u, expected 0\n", vd.Flags);
1556     ok(vd.Annotations == 0, "Annotations is %u, expected 0\n", vd.Annotations);
1557     ok(vd.BufferOffset == 0, "BufferOffset is %u, expected 0\n", vd.BufferOffset);
1558     ok(vd.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", vd.ExplicitBindPoint);
1559
1560     check_as((ID3D10EffectVariable *)variable);
1561
1562     parent = variable->lpVtbl->GetParentConstantBuffer(variable);
1563     ok(null_buffer == parent, "GetParentConstantBuffer got %p, expected %p\n", parent, null_buffer);
1564
1565     type = variable->lpVtbl->GetType(variable);
1566     hr = type->lpVtbl->GetDesc(type, &td);
1567     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1568
1569     ok(strcmp(td.TypeName, "BlendState") == 0, "TypeName is \"%s\", expected \"BlendState\"\n", td.TypeName);
1570     ok(td.Class == D3D10_SVC_OBJECT, "Class is %x, expected %x\n", td.Class, D3D10_SVC_OBJECT);
1571     ok(td.Type == D3D10_SVT_BLEND, "Type is %x, expected %x\n", td.Type, D3D10_SVT_BLEND);
1572     ok(td.Elements == 0, "Elements is %u, expected 0\n", td.Elements);
1573     ok(td.Members == 0, "Members is %u, expected 0\n", td.Members);
1574     ok(td.Rows == 0, "Rows is %u, expected 0\n", td.Rows);
1575     ok(td.Columns == 0, "Columns is %u, expected 0\n", td.Columns);
1576     ok(td.PackedSize == 0x0, "PackedSize is %#x, expected 0x0\n", td.PackedSize);
1577     ok(td.UnpackedSize == 0x0, "UnpackedSize is %#x, expected 0x0\n", td.UnpackedSize);
1578     ok(td.Stride == 0x0, "Stride is %#x, expected 0x0\n", td.Stride);
1579
1580     /* check DepthStencilState depthstencil */
1581     variable = effect->lpVtbl->GetVariableByIndex(effect, variable_nr++);
1582     hr = variable->lpVtbl->GetDesc(variable, &vd);
1583     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1584
1585     ok(strcmp(vd.Name, "depthstencil") == 0, "Name is \"%s\", expected \"depthstencil\"\n", vd.Name);
1586     ok(vd.Semantic == NULL, "Semantic is \"%s\", expected NULL\n", vd.Semantic);
1587     ok(vd.Flags == 0, "Flags is %u, expected 0\n", vd.Flags);
1588     ok(vd.Annotations == 0, "Annotations is %u, expected 0\n", vd.Annotations);
1589     ok(vd.BufferOffset == 0, "BufferOffset is %u, expected 0\n", vd.BufferOffset);
1590     ok(vd.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", vd.ExplicitBindPoint);
1591
1592     check_as((ID3D10EffectVariable *)variable);
1593
1594     parent = variable->lpVtbl->GetParentConstantBuffer(variable);
1595     ok(null_buffer == parent, "GetParentConstantBuffer got %p, expected %p\n", parent, null_buffer);
1596
1597     type = variable->lpVtbl->GetType(variable);
1598     hr = type->lpVtbl->GetDesc(type, &td);
1599     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1600
1601     ok(strcmp(td.TypeName, "DepthStencilState") == 0, "TypeName is \"%s\", expected \"DepthStencilState\"\n", td.TypeName);
1602     ok(td.Class == D3D10_SVC_OBJECT, "Class is %x, expected %x\n", td.Class, D3D10_SVC_OBJECT);
1603     ok(td.Type == D3D10_SVT_DEPTHSTENCIL, "Type is %x, expected %x\n", td.Type, D3D10_SVT_DEPTHSTENCIL);
1604     ok(td.Elements == 0, "Elements is %u, expected 0\n", td.Elements);
1605     ok(td.Members == 0, "Members is %u, expected 0\n", td.Members);
1606     ok(td.Rows == 0, "Rows is %u, expected 0\n", td.Rows);
1607     ok(td.Columns == 0, "Columns is %u, expected 0\n", td.Columns);
1608     ok(td.PackedSize == 0x0, "PackedSize is %#x, expected 0x0\n", td.PackedSize);
1609     ok(td.UnpackedSize == 0x0, "UnpackedSize is %#x, expected 0x0\n", td.UnpackedSize);
1610     ok(td.Stride == 0x0, "Stride is %#x, expected 0x0\n", td.Stride);
1611
1612     /* check RasterizerState rast */
1613     variable = effect->lpVtbl->GetVariableByIndex(effect, variable_nr++);
1614     hr = variable->lpVtbl->GetDesc(variable, &vd);
1615     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1616
1617     ok(strcmp(vd.Name, "rast") == 0, "Name is \"%s\", expected \"rast\"\n", vd.Name);
1618     ok(vd.Semantic == NULL, "Semantic is \"%s\", expected NULL\n", vd.Semantic);
1619     ok(vd.Flags == 0, "Flags is %u, expected 0\n", vd.Flags);
1620     ok(vd.Annotations == 0, "Annotations is %u, expected 0\n", vd.Annotations);
1621     ok(vd.BufferOffset == 0, "BufferOffset is %u, expected 0\n", vd.BufferOffset);
1622     ok(vd.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", vd.ExplicitBindPoint);
1623
1624     check_as((ID3D10EffectVariable *)variable);
1625
1626     parent = variable->lpVtbl->GetParentConstantBuffer(variable);
1627     ok(null_buffer == parent, "GetParentConstantBuffer got %p, expected %p\n", parent, null_buffer);
1628
1629     type = variable->lpVtbl->GetType(variable);
1630     hr = type->lpVtbl->GetDesc(type, &td);
1631     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1632
1633     ok(strcmp(td.TypeName, "RasterizerState") == 0, "TypeName is \"%s\", expected \"RasterizerState\"\n", td.TypeName);
1634     ok(td.Class == D3D10_SVC_OBJECT, "Class is %x, expected %x\n", td.Class, D3D10_SVC_OBJECT);
1635     ok(td.Type == D3D10_SVT_RASTERIZER, "Type is %x, expected %x\n", td.Type, D3D10_SVT_RASTERIZER);
1636     ok(td.Elements == 0, "Elements is %u, expected 0\n", td.Elements);
1637     ok(td.Members == 0, "Members is %u, expected 0\n", td.Members);
1638     ok(td.Rows == 0, "Rows is %u, expected 0\n", td.Rows);
1639     ok(td.Columns == 0, "Columns is %u, expected 0\n", td.Columns);
1640     ok(td.PackedSize == 0x0, "PackedSize is %#x, expected 0x0\n", td.PackedSize);
1641     ok(td.UnpackedSize == 0x0, "UnpackedSize is %#x, expected 0x0\n", td.UnpackedSize);
1642     ok(td.Stride == 0x0, "Stride is %#x, expected 0x0\n", td.Stride);
1643
1644     /* check SamplerState sam */
1645     variable = effect->lpVtbl->GetVariableByIndex(effect, variable_nr++);
1646     hr = variable->lpVtbl->GetDesc(variable, &vd);
1647     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1648
1649     ok(strcmp(vd.Name, "sam") == 0, "Name is \"%s\", expected \"sam\"\n", vd.Name);
1650     ok(vd.Semantic == NULL, "Semantic is \"%s\", expected NULL\n", vd.Semantic);
1651     ok(vd.Flags == 0, "Flags is %u, expected 0\n", vd.Flags);
1652     ok(vd.Annotations == 0, "Annotations is %u, expected 0\n", vd.Annotations);
1653     ok(vd.BufferOffset == 0, "BufferOffset is %u, expected 0\n", vd.BufferOffset);
1654     ok(vd.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", vd.ExplicitBindPoint);
1655
1656     check_as((ID3D10EffectVariable *)variable);
1657
1658     parent = variable->lpVtbl->GetParentConstantBuffer(variable);
1659     ok(null_buffer == parent, "GetParentConstantBuffer got %p, expected %p\n", parent, null_buffer);
1660
1661     type = variable->lpVtbl->GetType(variable);
1662     hr = type->lpVtbl->GetDesc(type, &td);
1663     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1664
1665     ok(strcmp(td.TypeName, "SamplerState") == 0, "TypeName is \"%s\", expected \"SamplerState\"\n", td.TypeName);
1666     ok(td.Class == D3D10_SVC_OBJECT, "Class is %x, expected %x\n", td.Class, D3D10_SVC_OBJECT);
1667     ok(td.Type == D3D10_SVT_SAMPLER, "Type is %x, expected %x\n", td.Type, D3D10_SVT_SAMPLER);
1668     ok(td.Elements == 0, "Elements is %u, expected 0\n", td.Elements);
1669     ok(td.Members == 0, "Members is %u, expected 0\n", td.Members);
1670     ok(td.Rows == 0, "Rows is %u, expected 0\n", td.Rows);
1671     ok(td.Columns == 0, "Columns is %u, expected 0\n", td.Columns);
1672     ok(td.PackedSize == 0x0, "PackedSize is %#x, expected 0x0\n", td.PackedSize);
1673     ok(td.UnpackedSize == 0x0, "UnpackedSize is %#x, expected 0x0\n", td.UnpackedSize);
1674     ok(td.Stride == 0x0, "Stride is %#x, expected 0x0\n", td.Stride);
1675
1676     /* check RenderTargetView rtv */
1677     variable = effect->lpVtbl->GetVariableByIndex(effect, variable_nr++);
1678     hr = variable->lpVtbl->GetDesc(variable, &vd);
1679     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1680
1681     ok(strcmp(vd.Name, "rtv") == 0, "Name is \"%s\", expected \"rtv\"\n", vd.Name);
1682     ok(vd.Semantic == NULL, "Semantic is \"%s\", expected NULL\n", vd.Semantic);
1683     ok(vd.Flags == 0, "Flags is %u, expected 0\n", vd.Flags);
1684     ok(vd.Annotations == 0, "Annotations is %u, expected 0\n", vd.Annotations);
1685     ok(vd.BufferOffset == 0, "BufferOffset is %u, expected 0\n", vd.BufferOffset);
1686     ok(vd.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", vd.ExplicitBindPoint);
1687
1688     check_as((ID3D10EffectVariable *)variable);
1689
1690     parent = variable->lpVtbl->GetParentConstantBuffer(variable);
1691     ok(null_buffer == parent, "GetParentConstantBuffer got %p, expected %p\n", parent, null_buffer);
1692
1693     type = variable->lpVtbl->GetType(variable);
1694     hr = type->lpVtbl->GetDesc(type, &td);
1695     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1696
1697     ok(strcmp(td.TypeName, "RenderTargetView") == 0, "TypeName is \"%s\", expected \"RenderTargetView\"\n", td.TypeName);
1698     ok(td.Class == D3D10_SVC_OBJECT, "Class is %x, expected %x\n", td.Class, D3D10_SVC_OBJECT);
1699     ok(td.Type == D3D10_SVT_RENDERTARGETVIEW, "Type is %x, expected %x\n", td.Type, D3D10_SVT_RENDERTARGETVIEW);
1700     ok(td.Elements == 0, "Elements is %u, expected 0\n", td.Elements);
1701     ok(td.Members == 0, "Members is %u, expected 0\n", td.Members);
1702     ok(td.Rows == 0, "Rows is %u, expected 0\n", td.Rows);
1703     ok(td.Columns == 0, "Columns is %u, expected 0\n", td.Columns);
1704     ok(td.PackedSize == 0x0, "PackedSize is %#x, expected 0x0\n", td.PackedSize);
1705     ok(td.UnpackedSize == 0x0, "UnpackedSize is %#x, expected 0x0\n", td.UnpackedSize);
1706     ok(td.Stride == 0x0, "Stride is %#x, expected 0x0\n", td.Stride);
1707
1708     /* check DepthStencilView dsv */
1709     variable = effect->lpVtbl->GetVariableByIndex(effect, variable_nr++);
1710     hr = variable->lpVtbl->GetDesc(variable, &vd);
1711     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1712
1713     ok(strcmp(vd.Name, "dsv") == 0, "Name is \"%s\", expected \"dsv\"\n", vd.Name);
1714     ok(vd.Semantic == NULL, "Semantic is \"%s\", expected NULL\n", vd.Semantic);
1715     ok(vd.Flags == 0, "Flags is %u, expected 0\n", vd.Flags);
1716     ok(vd.Annotations == 0, "Annotations is %u, expected 0\n", vd.Annotations);
1717     ok(vd.BufferOffset == 0, "BufferOffset is %u, expected 0\n", vd.BufferOffset);
1718     ok(vd.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", vd.ExplicitBindPoint);
1719
1720     check_as((ID3D10EffectVariable *)variable);
1721
1722     parent = variable->lpVtbl->GetParentConstantBuffer(variable);
1723     ok(null_buffer == parent, "GetParentConstantBuffer got %p, expected %p\n", parent, null_buffer);
1724
1725     type = variable->lpVtbl->GetType(variable);
1726     hr = type->lpVtbl->GetDesc(type, &td);
1727     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1728
1729     ok(strcmp(td.TypeName, "DepthStencilView") == 0, "TypeName is \"%s\", expected \"DepthStencilView\"\n", td.TypeName);
1730     ok(td.Class == D3D10_SVC_OBJECT, "Class is %x, expected %x\n", td.Class, D3D10_SVC_OBJECT);
1731     ok(td.Type == D3D10_SVT_DEPTHSTENCILVIEW, "Type is %x, expected %x\n", td.Type, D3D10_SVT_DEPTHSTENCILVIEW);
1732     ok(td.Elements == 0, "Elements is %u, expected 0\n", td.Elements);
1733     ok(td.Members == 0, "Members is %u, expected 0\n", td.Members);
1734     ok(td.Rows == 0, "Rows is %u, expected 0\n", td.Rows);
1735     ok(td.Columns == 0, "Columns is %u, expected 0\n", td.Columns);
1736     ok(td.PackedSize == 0x0, "PackedSize is %#x, expected 0x0\n", td.PackedSize);
1737     ok(td.UnpackedSize == 0x0, "UnpackedSize is %#x, expected 0x0\n", td.UnpackedSize);
1738     ok(td.Stride == 0x0, "Stride is %#x, expected 0x0\n", td.Stride);
1739
1740     /* check Texture1D t1 */
1741     variable = effect->lpVtbl->GetVariableByIndex(effect, variable_nr++);
1742     hr = variable->lpVtbl->GetDesc(variable, &vd);
1743     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1744
1745     ok(strcmp(vd.Name, "t1") == 0, "Name is \"%s\", expected \"t1\"\n", vd.Name);
1746     ok(vd.Semantic == NULL, "Semantic is \"%s\", expected NULL\n", vd.Semantic);
1747     ok(vd.Flags == 0, "Flags is %u, expected 0\n", vd.Flags);
1748     ok(vd.Annotations == 0, "Annotations is %u, expected 0\n", vd.Annotations);
1749     ok(vd.BufferOffset == 0, "BufferOffset is %u, expected 0\n", vd.BufferOffset);
1750     ok(vd.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", vd.ExplicitBindPoint);
1751
1752     check_as((ID3D10EffectVariable *)variable);
1753
1754     parent = variable->lpVtbl->GetParentConstantBuffer(variable);
1755     ok(null_buffer == parent, "GetParentConstantBuffer got %p, expected %p\n", parent, null_buffer);
1756
1757     type = variable->lpVtbl->GetType(variable);
1758     hr = type->lpVtbl->GetDesc(type, &td);
1759     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1760
1761     ok(strcmp(td.TypeName, "Texture1D") == 0, "TypeName is \"%s\", expected \"Texture1D\"\n", td.TypeName);
1762     ok(td.Class == D3D10_SVC_OBJECT, "Class is %x, expected %x\n", td.Class, D3D10_SVC_OBJECT);
1763     ok(td.Type == D3D10_SVT_TEXTURE1D, "Type is %x, expected %x\n", td.Type, D3D10_SVT_TEXTURE1D);
1764     ok(td.Elements == 0, "Elements is %u, expected 0\n", td.Elements);
1765     ok(td.Members == 0, "Members is %u, expected 0\n", td.Members);
1766     ok(td.Rows == 0, "Rows is %u, expected 0\n", td.Rows);
1767     ok(td.Columns == 0, "Columns is %u, expected 0\n", td.Columns);
1768     ok(td.PackedSize == 0x0, "PackedSize is %#x, expected 0x0\n", td.PackedSize);
1769     ok(td.UnpackedSize == 0x0, "UnpackedSize is %#x, expected 0x0\n", td.UnpackedSize);
1770     ok(td.Stride == 0x0, "Stride is %#x, expected 0x0\n", td.Stride);
1771
1772     /* check Texture1DArray t1a */
1773     variable = effect->lpVtbl->GetVariableByIndex(effect, variable_nr++);
1774     hr = variable->lpVtbl->GetDesc(variable, &vd);
1775     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1776
1777     ok(strcmp(vd.Name, "t1a") == 0, "Name is \"%s\", expected \"t1a\"\n", vd.Name);
1778     ok(vd.Semantic == NULL, "Semantic is \"%s\", expected NULL\n", vd.Semantic);
1779     ok(vd.Flags == 0, "Flags is %u, expected 0\n", vd.Flags);
1780     ok(vd.Annotations == 0, "Annotations is %u, expected 0\n", vd.Annotations);
1781     ok(vd.BufferOffset == 0, "BufferOffset is %u, expected 0\n", vd.BufferOffset);
1782     ok(vd.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", vd.ExplicitBindPoint);
1783
1784     check_as((ID3D10EffectVariable *)variable);
1785
1786     parent = variable->lpVtbl->GetParentConstantBuffer(variable);
1787     ok(null_buffer == parent, "GetParentConstantBuffer got %p, expected %p\n", parent, null_buffer);
1788
1789     type = variable->lpVtbl->GetType(variable);
1790     hr = type->lpVtbl->GetDesc(type, &td);
1791     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1792
1793     ok(strcmp(td.TypeName, "Texture1DArray") == 0, "TypeName is \"%s\", expected \"Texture1DArray\"\n", td.TypeName);
1794     ok(td.Class == D3D10_SVC_OBJECT, "Class is %x, expected %x\n", td.Class, D3D10_SVC_OBJECT);
1795     ok(td.Type == D3D10_SVT_TEXTURE1DARRAY, "Type is %x, expected %x\n", td.Type, D3D10_SVT_TEXTURE1DARRAY);
1796     ok(td.Elements == 0, "Elements is %u, expected 0\n", td.Elements);
1797     ok(td.Members == 0, "Members is %u, expected 0\n", td.Members);
1798     ok(td.Rows == 0, "Rows is %u, expected 0\n", td.Rows);
1799     ok(td.Columns == 0, "Columns is %u, expected 0\n", td.Columns);
1800     ok(td.PackedSize == 0x0, "PackedSize is %#x, expected 0x0\n", td.PackedSize);
1801     ok(td.UnpackedSize == 0x0, "UnpackedSize is %#x, expected 0x0\n", td.UnpackedSize);
1802     ok(td.Stride == 0x0, "Stride is %#x, expected 0x0\n", td.Stride);
1803
1804     /* check Texture2D t2 */
1805     variable = effect->lpVtbl->GetVariableByIndex(effect, variable_nr++);
1806     hr = variable->lpVtbl->GetDesc(variable, &vd);
1807     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1808
1809     ok(strcmp(vd.Name, "t2") == 0, "Name is \"%s\", expected \"t2\"\n", vd.Name);
1810     ok(vd.Semantic == NULL, "Semantic is \"%s\", expected NULL\n", vd.Semantic);
1811     ok(vd.Flags == 0, "Flags is %u, expected 0\n", vd.Flags);
1812     ok(vd.Annotations == 0, "Annotations is %u, expected 0\n", vd.Annotations);
1813     ok(vd.BufferOffset == 0, "BufferOffset is %u, expected 0\n", vd.BufferOffset);
1814     ok(vd.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", vd.ExplicitBindPoint);
1815
1816     check_as((ID3D10EffectVariable *)variable);
1817
1818     parent = variable->lpVtbl->GetParentConstantBuffer(variable);
1819     ok(null_buffer == parent, "GetParentConstantBuffer got %p, expected %p\n", parent, null_buffer);
1820
1821     type = variable->lpVtbl->GetType(variable);
1822     hr = type->lpVtbl->GetDesc(type, &td);
1823     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1824
1825     ok(strcmp(td.TypeName, "Texture2D") == 0, "TypeName is \"%s\", expected \"Texture2D\"\n", td.TypeName);
1826     ok(td.Class == D3D10_SVC_OBJECT, "Class is %x, expected %x\n", td.Class, D3D10_SVC_OBJECT);
1827     ok(td.Type == D3D10_SVT_TEXTURE2D, "Type is %x, expected %x\n", td.Type, D3D10_SVT_TEXTURE2D);
1828     ok(td.Elements == 0, "Elements is %u, expected 0\n", td.Elements);
1829     ok(td.Members == 0, "Members is %u, expected 0\n", td.Members);
1830     ok(td.Rows == 0, "Rows is %u, expected 0\n", td.Rows);
1831     ok(td.Columns == 0, "Columns is %u, expected 0\n", td.Columns);
1832     ok(td.PackedSize == 0x0, "PackedSize is %#x, expected 0x0\n", td.PackedSize);
1833     ok(td.UnpackedSize == 0x0, "UnpackedSize is %#x, expected 0x0\n", td.UnpackedSize);
1834     ok(td.Stride == 0x0, "Stride is %#x, expected 0x0\n", td.Stride);
1835
1836     /* check Texture2DMS t2dms */
1837     variable = effect->lpVtbl->GetVariableByIndex(effect, variable_nr++);
1838     hr = variable->lpVtbl->GetDesc(variable, &vd);
1839     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1840
1841     ok(strcmp(vd.Name, "t2dms") == 0, "Name is \"%s\", expected \"t2dms\"\n", vd.Name);
1842     ok(vd.Semantic == NULL, "Semantic is \"%s\", expected NULL\n", vd.Semantic);
1843     ok(vd.Flags == 0, "Flags is %u, expected 0\n", vd.Flags);
1844     ok(vd.Annotations == 0, "Annotations is %u, expected 0\n", vd.Annotations);
1845     ok(vd.BufferOffset == 0, "BufferOffset is %u, expected 0\n", vd.BufferOffset);
1846     ok(vd.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", vd.ExplicitBindPoint);
1847
1848     check_as((ID3D10EffectVariable *)variable);
1849
1850     parent = variable->lpVtbl->GetParentConstantBuffer(variable);
1851     ok(null_buffer == parent, "GetParentConstantBuffer got %p, expected %p\n", parent, null_buffer);
1852
1853     type = variable->lpVtbl->GetType(variable);
1854     hr = type->lpVtbl->GetDesc(type, &td);
1855     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1856
1857     ok(strcmp(td.TypeName, "Texture2DMS") == 0, "TypeName is \"%s\", expected \"Texture2DMS\"\n", td.TypeName);
1858     ok(td.Class == D3D10_SVC_OBJECT, "Class is %x, expected %x\n", td.Class, D3D10_SVC_OBJECT);
1859     ok(td.Type == D3D10_SVT_TEXTURE2DMS, "Type is %x, expected %x\n", td.Type, D3D10_SVT_TEXTURE2DMS);
1860     ok(td.Elements == 0, "Elements is %u, expected 0\n", td.Elements);
1861     ok(td.Members == 0, "Members is %u, expected 0\n", td.Members);
1862     ok(td.Rows == 0, "Rows is %u, expected 0\n", td.Rows);
1863     ok(td.Columns == 0, "Columns is %u, expected 0\n", td.Columns);
1864     ok(td.PackedSize == 0x0, "PackedSize is %#x, expected 0x0\n", td.PackedSize);
1865     ok(td.UnpackedSize == 0x0, "UnpackedSize is %#x, expected 0x0\n", td.UnpackedSize);
1866     ok(td.Stride == 0x0, "Stride is %#x, expected 0x0\n", td.Stride);
1867
1868     /* check Texture2DArray t2a */
1869     variable = effect->lpVtbl->GetVariableByIndex(effect, variable_nr++);
1870     hr = variable->lpVtbl->GetDesc(variable, &vd);
1871     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1872
1873     ok(strcmp(vd.Name, "t2a") == 0, "Name is \"%s\", expected \"t2a\"\n", vd.Name);
1874     ok(vd.Semantic == NULL, "Semantic is \"%s\", expected NULL\n", vd.Semantic);
1875     ok(vd.Flags == 0, "Flags is %u, expected 0\n", vd.Flags);
1876     ok(vd.Annotations == 0, "Annotations is %u, expected 0\n", vd.Annotations);
1877     ok(vd.BufferOffset == 0, "BufferOffset is %u, expected 0\n", vd.BufferOffset);
1878     ok(vd.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", vd.ExplicitBindPoint);
1879
1880     check_as((ID3D10EffectVariable *)variable);
1881
1882     parent = variable->lpVtbl->GetParentConstantBuffer(variable);
1883     ok(null_buffer == parent, "GetParentConstantBuffer got %p, expected %p\n", parent, null_buffer);
1884
1885     type = variable->lpVtbl->GetType(variable);
1886     hr = type->lpVtbl->GetDesc(type, &td);
1887     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1888
1889     ok(strcmp(td.TypeName, "Texture2DArray") == 0, "TypeName is \"%s\", expected \"Texture2DArray\"\n", td.TypeName);
1890     ok(td.Class == D3D10_SVC_OBJECT, "Class is %x, expected %x\n", td.Class, D3D10_SVC_OBJECT);
1891     ok(td.Type == D3D10_SVT_TEXTURE2DARRAY, "Type is %x, expected %x\n", td.Type, D3D10_SVT_TEXTURE2DARRAY);
1892     ok(td.Elements == 0, "Elements is %u, expected 0\n", td.Elements);
1893     ok(td.Members == 0, "Members is %u, expected 0\n", td.Members);
1894     ok(td.Rows == 0, "Rows is %u, expected 0\n", td.Rows);
1895     ok(td.Columns == 0, "Columns is %u, expected 0\n", td.Columns);
1896     ok(td.PackedSize == 0x0, "PackedSize is %#x, expected 0x0\n", td.PackedSize);
1897     ok(td.UnpackedSize == 0x0, "UnpackedSize is %#x, expected 0x0\n", td.UnpackedSize);
1898     ok(td.Stride == 0x0, "Stride is %#x, expected 0x0\n", td.Stride);
1899
1900     /* check Texture2DMSArray t2dmsa */
1901     variable = effect->lpVtbl->GetVariableByIndex(effect, variable_nr++);
1902     hr = variable->lpVtbl->GetDesc(variable, &vd);
1903     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1904
1905     ok(strcmp(vd.Name, "t2dmsa") == 0, "Name is \"%s\", expected \"t2dmsa\"\n", vd.Name);
1906     ok(vd.Semantic == NULL, "Semantic is \"%s\", expected NULL\n", vd.Semantic);
1907     ok(vd.Flags == 0, "Flags is %u, expected 0\n", vd.Flags);
1908     ok(vd.Annotations == 0, "Annotations is %u, expected 0\n", vd.Annotations);
1909     ok(vd.BufferOffset == 0, "BufferOffset is %u, expected 0\n", vd.BufferOffset);
1910     ok(vd.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", vd.ExplicitBindPoint);
1911
1912     check_as((ID3D10EffectVariable *)variable);
1913
1914     parent = variable->lpVtbl->GetParentConstantBuffer(variable);
1915     ok(null_buffer == parent, "GetParentConstantBuffer got %p, expected %p\n", parent, null_buffer);
1916
1917     type = variable->lpVtbl->GetType(variable);
1918     hr = type->lpVtbl->GetDesc(type, &td);
1919     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1920
1921     ok(strcmp(td.TypeName, "Texture2DMSArray") == 0, "TypeName is \"%s\", expected \"TTexture2DMSArray\"\n", td.TypeName);
1922     ok(td.Class == D3D10_SVC_OBJECT, "Class is %x, expected %x\n", td.Class, D3D10_SVC_OBJECT);
1923     ok(td.Type == D3D10_SVT_TEXTURE2DMSARRAY, "Type is %x, expected %x\n", td.Type, D3D10_SVT_TEXTURE2DMSARRAY);
1924     ok(td.Elements == 0, "Elements is %u, expected 0\n", td.Elements);
1925     ok(td.Members == 0, "Members is %u, expected 0\n", td.Members);
1926     ok(td.Rows == 0, "Rows is %u, expected 0\n", td.Rows);
1927     ok(td.Columns == 0, "Columns is %u, expected 0\n", td.Columns);
1928     ok(td.PackedSize == 0x0, "PackedSize is %#x, expected 0x0\n", td.PackedSize);
1929     ok(td.UnpackedSize == 0x0, "UnpackedSize is %#x, expected 0x0\n", td.UnpackedSize);
1930     ok(td.Stride == 0x0, "Stride is %#x, expected 0x0\n", td.Stride);
1931
1932     /* check Texture3D t3 */
1933     variable = effect->lpVtbl->GetVariableByIndex(effect, variable_nr++);
1934     hr = variable->lpVtbl->GetDesc(variable, &vd);
1935     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1936
1937     ok(strcmp(vd.Name, "t3") == 0, "Name is \"%s\", expected \"t3\"\n", vd.Name);
1938     ok(vd.Semantic == NULL, "Semantic is \"%s\", expected NULL\n", vd.Semantic);
1939     ok(vd.Flags == 0, "Flags is %u, expected 0\n", vd.Flags);
1940     ok(vd.Annotations == 0, "Annotations is %u, expected 0\n", vd.Annotations);
1941     ok(vd.BufferOffset == 0, "BufferOffset is %u, expected 0\n", vd.BufferOffset);
1942     ok(vd.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", vd.ExplicitBindPoint);
1943
1944     check_as((ID3D10EffectVariable *)variable);
1945
1946     parent = variable->lpVtbl->GetParentConstantBuffer(variable);
1947     ok(null_buffer == parent, "GetParentConstantBuffer got %p, expected %p\n", parent, null_buffer);
1948
1949     type = variable->lpVtbl->GetType(variable);
1950     hr = type->lpVtbl->GetDesc(type, &td);
1951     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1952
1953     ok(strcmp(td.TypeName, "Texture3D") == 0, "TypeName is \"%s\", expected \"Texture3D\"\n", td.TypeName);
1954     ok(td.Class == D3D10_SVC_OBJECT, "Class is %x, expected %x\n", td.Class, D3D10_SVC_OBJECT);
1955     ok(td.Type == D3D10_SVT_TEXTURE3D, "Type is %x, expected %x\n", td.Type, D3D10_SVT_TEXTURE3D);
1956     ok(td.Elements == 0, "Elements is %u, expected 0\n", td.Elements);
1957     ok(td.Members == 0, "Members is %u, expected 0\n", td.Members);
1958     ok(td.Rows == 0, "Rows is %u, expected 0\n", td.Rows);
1959     ok(td.Columns == 0, "Columns is %u, expected 0\n", td.Columns);
1960     ok(td.PackedSize == 0x0, "PackedSize is %#x, expected 0x0\n", td.PackedSize);
1961     ok(td.UnpackedSize == 0x0, "UnpackedSize is %#x, expected 0x0\n", td.UnpackedSize);
1962     ok(td.Stride == 0x0, "Stride is %#x, expected 0x0\n", td.Stride);
1963
1964     /* check TextureCube tq */
1965     variable = effect->lpVtbl->GetVariableByIndex(effect, variable_nr++);
1966     hr = variable->lpVtbl->GetDesc(variable, &vd);
1967     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1968
1969     ok(strcmp(vd.Name, "tq") == 0, "Name is \"%s\", expected \"tq\"\n", vd.Name);
1970     ok(vd.Semantic == NULL, "Semantic is \"%s\", expected NULL\n", vd.Semantic);
1971     ok(vd.Flags == 0, "Flags is %u, expected 0\n", vd.Flags);
1972     ok(vd.Annotations == 0, "Annotations is %u, expected 0\n", vd.Annotations);
1973     ok(vd.BufferOffset == 0, "BufferOffset is %u, expected 0\n", vd.BufferOffset);
1974     ok(vd.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", vd.ExplicitBindPoint);
1975
1976     check_as((ID3D10EffectVariable *)variable);
1977
1978     parent = variable->lpVtbl->GetParentConstantBuffer(variable);
1979     ok(null_buffer == parent, "GetParentConstantBuffer got %p, expected %p\n", parent, null_buffer);
1980
1981     type = variable->lpVtbl->GetType(variable);
1982     hr = type->lpVtbl->GetDesc(type, &td);
1983     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
1984
1985     ok(strcmp(td.TypeName, "TextureCube") == 0, "TypeName is \"%s\", expected \"TextureCube\"\n", td.TypeName);
1986     ok(td.Class == D3D10_SVC_OBJECT, "Class is %x, expected %x\n", td.Class, D3D10_SVC_OBJECT);
1987     ok(td.Type == D3D10_SVT_TEXTURECUBE, "Type is %x, expected %x\n", td.Type, D3D10_SVT_TEXTURECUBE);
1988     ok(td.Elements == 0, "Elements is %u, expected 0\n", td.Elements);
1989     ok(td.Members == 0, "Members is %u, expected 0\n", td.Members);
1990     ok(td.Rows == 0, "Rows is %u, expected 0\n", td.Rows);
1991     ok(td.Columns == 0, "Columns is %u, expected 0\n", td.Columns);
1992     ok(td.PackedSize == 0x0, "PackedSize is %#x, expected 0x0\n", td.PackedSize);
1993     ok(td.UnpackedSize == 0x0, "UnpackedSize is %#x, expected 0x0\n", td.UnpackedSize);
1994     ok(td.Stride == 0x0, "Stride is %#x, expected 0x0\n", td.Stride);
1995
1996     /* check GeometryShader gs[2] */
1997     variable = effect->lpVtbl->GetVariableByIndex(effect, variable_nr++);
1998     hr = variable->lpVtbl->GetDesc(variable, &vd);
1999     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
2000
2001     ok(strcmp(vd.Name, "gs") == 0, "Name is \"%s\", expected \"gs\"\n", vd.Name);
2002     ok(vd.Semantic == NULL, "Semantic is \"%s\", expected NULL\n", vd.Semantic);
2003     ok(vd.Flags == 0, "Flags is %u, expected 0\n", vd.Flags);
2004     ok(vd.Annotations == 0, "Annotations is %u, expected 0\n", vd.Annotations);
2005     ok(vd.BufferOffset == 0, "BufferOffset is %u, expected 0\n", vd.BufferOffset);
2006     ok(vd.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", vd.ExplicitBindPoint);
2007
2008     check_as((ID3D10EffectVariable *)variable);
2009
2010     parent = variable->lpVtbl->GetParentConstantBuffer(variable);
2011     ok(null_buffer == parent, "GetParentConstantBuffer got %p, expected %p\n", parent, null_buffer);
2012
2013     type = variable->lpVtbl->GetType(variable);
2014     hr = type->lpVtbl->GetDesc(type, &td);
2015     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
2016
2017     ok(strcmp(td.TypeName, "GeometryShader") == 0, "TypeName is \"%s\", expected \"GeometryShader\"\n", td.TypeName);
2018     ok(td.Class == D3D10_SVC_OBJECT, "Class is %x, expected %x\n", td.Class, D3D10_SVC_OBJECT);
2019     ok(td.Type == D3D10_SVT_GEOMETRYSHADER, "Type is %x, expected %x\n", td.Type, D3D10_SVT_GEOMETRYSHADER);
2020     ok(td.Elements == 2, "Elements is %u, expected 2\n", td.Elements);
2021     ok(td.Members == 0, "Members is %u, expected 0\n", td.Members);
2022     ok(td.Rows == 0, "Rows is %u, expected 0\n", td.Rows);
2023     ok(td.Columns == 0, "Columns is %u, expected 0\n", td.Columns);
2024     ok(td.PackedSize == 0x0, "PackedSize is %#x, expected 0x0\n", td.PackedSize);
2025     ok(td.UnpackedSize == 0x0, "UnpackedSize is %#x, expected 0x0\n", td.UnpackedSize);
2026     ok(td.Stride == 0x0, "Stride is %#x, expected 0x0\n", td.Stride);
2027
2028     /* check PixelShader ps */
2029     variable = effect->lpVtbl->GetVariableByIndex(effect, variable_nr++);
2030     hr = variable->lpVtbl->GetDesc(variable, &vd);
2031     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
2032
2033     ok(strcmp(vd.Name, "ps") == 0, "Name is \"%s\", expected \"ps\"\n", vd.Name);
2034     ok(vd.Semantic == NULL, "Semantic is \"%s\", expected NULL\n", vd.Semantic);
2035     ok(vd.Flags == 0, "Flags is %u, expected 0\n", vd.Flags);
2036     ok(vd.Annotations == 0, "Annotations is %u, expected 0\n", vd.Annotations);
2037     ok(vd.BufferOffset == 0, "BufferOffset is %u, expected 0\n", vd.BufferOffset);
2038     ok(vd.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", vd.ExplicitBindPoint);
2039
2040     check_as((ID3D10EffectVariable *)variable);
2041
2042     parent = variable->lpVtbl->GetParentConstantBuffer(variable);
2043     ok(null_buffer == parent, "GetParentConstantBuffer got %p, expected %p\n", parent, null_buffer);
2044
2045     type = variable->lpVtbl->GetType(variable);
2046     hr = type->lpVtbl->GetDesc(type, &td);
2047     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
2048
2049     ok(strcmp(td.TypeName, "PixelShader") == 0, "TypeName is \"%s\", expected \"PixelShader\"\n", td.TypeName);
2050     ok(td.Class == D3D10_SVC_OBJECT, "Class is %x, expected %x\n", td.Class, D3D10_SVC_OBJECT);
2051     ok(td.Type == D3D10_SVT_PIXELSHADER, "Type is %x, expected %x\n", td.Type, D3D10_SVT_PIXELSHADER);
2052     ok(td.Elements == 0, "Elements is %u, expected 0\n", td.Elements);
2053     ok(td.Members == 0, "Members is %u, expected 0\n", td.Members);
2054     ok(td.Rows == 0, "Rows is %u, expected 0\n", td.Rows);
2055     ok(td.Columns == 0, "Columns is %u, expected 0\n", td.Columns);
2056     ok(td.PackedSize == 0x0, "PackedSize is %#x, expected 0x0\n", td.PackedSize);
2057     ok(td.UnpackedSize == 0x0, "UnpackedSize is %#x, expected 0x0\n", td.UnpackedSize);
2058     ok(td.Stride == 0x0, "Stride is %#x, expected 0x0\n", td.Stride);
2059
2060     /* check VertexShader vs[1] */
2061     variable = effect->lpVtbl->GetVariableByIndex(effect, variable_nr++);
2062     hr = variable->lpVtbl->GetDesc(variable, &vd);
2063     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
2064
2065     ok(strcmp(vd.Name, "vs") == 0, "Name is \"%s\", expected \"vs\"\n", vd.Name);
2066     ok(vd.Semantic == NULL, "Semantic is \"%s\", expected NULL\n", vd.Semantic);
2067     ok(vd.Flags == 0, "Flags is %u, expected 0\n", vd.Flags);
2068     ok(vd.Annotations == 0, "Annotations is %u, expected 0\n", vd.Annotations);
2069     ok(vd.BufferOffset == 0, "BufferOffset is %u, expected 0\n", vd.BufferOffset);
2070     ok(vd.ExplicitBindPoint == 0, "ExplicitBindPoint is %u, expected 0\n", vd.ExplicitBindPoint);
2071
2072     check_as((ID3D10EffectVariable *)variable);
2073
2074     parent = variable->lpVtbl->GetParentConstantBuffer(variable);
2075     ok(null_buffer == parent, "GetParentConstantBuffer got %p, expected %p\n", parent, null_buffer);
2076
2077     type = variable->lpVtbl->GetType(variable);
2078     hr = type->lpVtbl->GetDesc(type, &td);
2079     ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
2080
2081     ok(strcmp(td.TypeName, "VertexShader") == 0, "TypeName is \"%s\", expected \"VertexShader\"\n", td.TypeName);
2082     ok(td.Class == D3D10_SVC_OBJECT, "Class is %x, expected %x\n", td.Class, D3D10_SVC_OBJECT);
2083     ok(td.Type == D3D10_SVT_VERTEXSHADER, "Type is %x, expected %x\n", td.Type, D3D10_SVT_VERTEXSHADER);
2084     ok(td.Elements == 1, "Elements is %u, expected 1\n", td.Elements);
2085     ok(td.Members == 0, "Members is %u, expected 0\n", td.Members);
2086     ok(td.Rows == 0, "Rows is %u, expected 0\n", td.Rows);
2087     ok(td.Columns == 0, "Columns is %u, expected 0\n", td.Columns);
2088     ok(td.PackedSize == 0x0, "PackedSize is %#x, expected 0x0\n", td.PackedSize);
2089     ok(td.UnpackedSize == 0x0, "UnpackedSize is %#x, expected 0x0\n", td.UnpackedSize);
2090     ok(td.Stride == 0x0, "Stride is %#x, expected 0x0\n", td.Stride);
2091
2092     effect->lpVtbl->Release(effect);
2093 }
2094
2095 /*
2096  * test_effect_constant_buffer_stride
2097  */
2098 #if 0
2099 cbuffer cb1
2100 {
2101     float   a1;
2102     float   b1;
2103     float   c1;
2104     float   d1;
2105 };
2106 cbuffer cb2
2107 {
2108     float   a2;
2109     float2  b2;
2110 };
2111 cbuffer cb3
2112 {
2113     float2  a3;
2114     float3  b3;
2115 };
2116 cbuffer cb4
2117 {
2118     float2  a4;
2119     float3  b4;
2120     float2  c4;
2121 };
2122 cbuffer cb5
2123 {
2124     float2  a5;
2125     float2  b5;
2126     float3  c5;
2127 };
2128 cbuffer cb6
2129 {
2130     float2  a6 : packoffset(c0);
2131     float3  b6 : packoffset(c1);
2132     float2  c6 : packoffset(c0.z);
2133 };
2134 cbuffer cb7
2135 {
2136     float2  a7 : packoffset(c0);
2137     float3  b7 : packoffset(c1);
2138     float2  c7 : packoffset(c2);
2139 };
2140 cbuffer cb8
2141 {
2142     float2  a8 : packoffset(c0);
2143     float3  b8 : packoffset(c0.y);
2144     float4  c8 : packoffset(c2);
2145 };
2146 cbuffer cb9
2147 {
2148     float2  a9 : packoffset(c0);
2149     float2  b9 : packoffset(c0.y);
2150     float2  c9 : packoffset(c0.z);
2151 };
2152 cbuffer cb10
2153 {
2154     float4  a10 : packoffset(c2);
2155 };
2156 cbuffer cb11
2157 {
2158     struct {
2159         float4 a11;
2160         float  b11;
2161     } s11;
2162     float  c11;
2163 };
2164 cbuffer cb12
2165 {
2166     float  c12;
2167     struct {
2168         float  b12;
2169         float4 a12;
2170     } s12;
2171 };
2172 cbuffer cb13
2173 {
2174     float  a13;
2175     struct {
2176         float  b13;
2177     } s13;
2178 };
2179 cbuffer cb14
2180 {
2181     struct {
2182         float  a14;
2183     } s14;
2184     struct {
2185         float  b14;
2186     } t14;
2187 };
2188 cbuffer cb15
2189 {
2190     float2  a15[2] : packoffset(c0);
2191 };
2192 #endif
2193 static DWORD fx_test_ecbs[] = {
2194 0x43425844, 0x615d7d77, 0x21289d92, 0xe9e8d98e,
2195 0xcae7b74e, 0x00000001, 0x00000855, 0x00000001,
2196 0x00000024, 0x30315846, 0x00000829, 0xfeff1001,
2197 0x0000000f, 0x00000024, 0x00000000, 0x00000000,
2198 0x00000000, 0x00000000, 0x00000000, 0x00000285,
2199 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2200 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2201 0x00000000, 0x00000000, 0x00000000, 0x00316263,
2202 0x616f6c66, 0x00080074, 0x00010000, 0x00000000,
2203 0x00040000, 0x00100000, 0x00040000, 0x09090000,
2204 0x31610000, 0x00316200, 0x64003163, 0x62630031,
2205 0x32610032, 0x6f6c6600, 0x00327461, 0x0000003d,
2206 0x00000001, 0x00000000, 0x00000008, 0x00000010,
2207 0x00000008, 0x0000110a, 0x63003262, 0x61003362,
2208 0x6c660033, 0x3374616f, 0x00006a00, 0x00000100,
2209 0x00000000, 0x00000c00, 0x00001000, 0x00000c00,
2210 0x00190a00, 0x00336200, 0x00346263, 0x62003461,
2211 0x34630034, 0x35626300, 0x00356100, 0x63003562,
2212 0x62630035, 0x36610036, 0x00366200, 0x63003663,
2213 0x61003762, 0x37620037, 0x00376300, 0x00386263,
2214 0x62003861, 0x6c660038, 0x3474616f, 0x0000ce00,
2215 0x00000100, 0x00000000, 0x00001000, 0x00001000,
2216 0x00001000, 0x00210a00, 0x00386300, 0x00396263,
2217 0x62003961, 0x39630039, 0x31626300, 0x31610030,
2218 0x62630030, 0x3c003131, 0x616e6e75, 0x3e64656d,
2219 0x31316100, 0x31316200, 0x00010f00, 0x00000300,
2220 0x00000000, 0x00001400, 0x00002000, 0x00001400,
2221 0x00000200, 0x00011900, 0x00000000, 0x00000000,
2222 0x0000d500, 0x00011d00, 0x00000000, 0x00001000,
2223 0x00000e00, 0x31317300, 0x31316300, 0x31626300,
2224 0x31630032, 0x31620032, 0x31610032, 0x010f0032,
2225 0x00030000, 0x00000000, 0x00200000, 0x00200000,
2226 0x00140000, 0x00020000, 0x016e0000, 0x00000000,
2227 0x00000000, 0x000e0000, 0x01720000, 0x00000000,
2228 0x00100000, 0x00d50000, 0x31730000, 0x62630032,
2229 0x61003331, 0x62003331, 0x0f003331, 0x03000001,
2230 0x00000000, 0x04000000, 0x10000000, 0x04000000,
2231 0x01000000, 0xbf000000, 0x00000001, 0x00000000,
2232 0x0e000000, 0x73000000, 0x63003331, 0x00343162,
2233 0x00343161, 0x0000010f, 0x00000003, 0x00000000,
2234 0x00000004, 0x00000010, 0x00000004, 0x00000001,
2235 0x000001f8, 0x00000000, 0x00000000, 0x0000000e,
2236 0x00343173, 0x00343162, 0x0000010f, 0x00000003,
2237 0x00000000, 0x00000004, 0x00000010, 0x00000004,
2238 0x00000001, 0x0000022c, 0x00000000, 0x00000000,
2239 0x0000000e, 0x00343174, 0x35316263, 0x00003d00,
2240 0x00000100, 0x00000200, 0x00001800, 0x00001000,
2241 0x00001000, 0x00110a00, 0x35316100, 0x00000400,
2242 0x00001000, 0x00000000, 0x00000400, 0xffffff00,
2243 0x000000ff, 0x00002a00, 0x00000e00, 0x00000000,
2244 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2245 0x00002d00, 0x00000e00, 0x00000000, 0x00000400,
2246 0x00000000, 0x00000000, 0x00000000, 0x00003000,
2247 0x00000e00, 0x00000000, 0x00000800, 0x00000000,
2248 0x00000000, 0x00000000, 0x00003300, 0x00000e00,
2249 0x00000000, 0x00000c00, 0x00000000, 0x00000000,
2250 0x00000000, 0x00003600, 0x00001000, 0x00000000,
2251 0x00000200, 0xffffff00, 0x000000ff, 0x00003a00,
2252 0x00000e00, 0x00000000, 0x00000000, 0x00000000,
2253 0x00000000, 0x00000000, 0x00006000, 0x00004400,
2254 0x00000000, 0x00000400, 0x00000000, 0x00000000,
2255 0x00000000, 0x00006300, 0x00002000, 0x00000000,
2256 0x00000200, 0xffffff00, 0x000000ff, 0x00006700,
2257 0x00004400, 0x00000000, 0x00000000, 0x00000000,
2258 0x00000000, 0x00000000, 0x00008d00, 0x00007100,
2259 0x00000000, 0x00001000, 0x00000000, 0x00000000,
2260 0x00000000, 0x00009000, 0x00003000, 0x00000000,
2261 0x00000300, 0xffffff00, 0x000000ff, 0x00009400,
2262 0x00004400, 0x00000000, 0x00000000, 0x00000000,
2263 0x00000000, 0x00000000, 0x00009700, 0x00007100,
2264 0x00000000, 0x00001000, 0x00000000, 0x00000000,
2265 0x00000000, 0x00009a00, 0x00004400, 0x00000000,
2266 0x00002000, 0x00000000, 0x00000000, 0x00000000,
2267 0x00009d00, 0x00002000, 0x00000000, 0x00000300,
2268 0xffffff00, 0x000000ff, 0x0000a100, 0x00004400,
2269 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2270 0x00000000, 0x0000a400, 0x00004400, 0x00000000,
2271 0x00000800, 0x00000000, 0x00000000, 0x00000000,
2272 0x0000a700, 0x00007100, 0x00000000, 0x00001000,
2273 0x00000000, 0x00000000, 0x00000000, 0x0000aa00,
2274 0x00002000, 0x00000000, 0x00000300, 0xffffff00,
2275 0x000000ff, 0x0000ae00, 0x00004400, 0x00000000,
2276 0x00000000, 0x00000000, 0x00000400, 0x00000000,
2277 0x0000b100, 0x00007100, 0x00000000, 0x00001000,
2278 0x00000000, 0x00000400, 0x00000000, 0x0000b400,
2279 0x00004400, 0x00000000, 0x00000800, 0x00000000,
2280 0x00000400, 0x00000000, 0x0000b700, 0x00003000,
2281 0x00000000, 0x00000300, 0xffffff00, 0x000000ff,
2282 0x0000bb00, 0x00004400, 0x00000000, 0x00000000,
2283 0x00000000, 0x00000400, 0x00000000, 0x0000be00,
2284 0x00007100, 0x00000000, 0x00001000, 0x00000000,
2285 0x00000400, 0x00000000, 0x0000c100, 0x00004400,
2286 0x00000000, 0x00002000, 0x00000000, 0x00000400,
2287 0x00000000, 0x0000c400, 0x00003000, 0x00000000,
2288 0x00000300, 0xffffff00, 0x000000ff, 0x0000c800,
2289 0x00004400, 0x00000000, 0x00000000, 0x00000000,
2290 0x00000400, 0x00000000, 0x0000cb00, 0x00007100,
2291 0x00000000, 0x00000400, 0x00000000, 0x00000400,
2292 0x00000000, 0x0000f100, 0x0000d500, 0x00000000,
2293 0x00002000, 0x00000000, 0x00000400, 0x00000000,
2294 0x0000f400, 0x00001000, 0x00000000, 0x00000300,
2295 0xffffff00, 0x000000ff, 0x0000f800, 0x00004400,
2296 0x00000000, 0x00000000, 0x00000000, 0x00000400,
2297 0x00000000, 0x0000fb00, 0x00004400, 0x00000000,
2298 0x00000400, 0x00000000, 0x00000400, 0x00000000,
2299 0x0000fe00, 0x00004400, 0x00000000, 0x00000800,
2300 0x00000000, 0x00000400, 0x00000000, 0x00010100,
2301 0x00003000, 0x00000000, 0x00000100, 0xffffff00,
2302 0x000000ff, 0x00010600, 0x0000d500, 0x00000000,
2303 0x00002000, 0x00000000, 0x00000400, 0x00000000,
2304 0x00010a00, 0x00002000, 0x00000000, 0x00000200,
2305 0xffffff00, 0x000000ff, 0x00015d00, 0x00012100,
2306 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2307 0x00000000, 0x00016100, 0x00000e00, 0x00000000,
2308 0x00001400, 0x00000000, 0x00000000, 0x00000000,
2309 0x00016500, 0x00003000, 0x00000000, 0x00000200,
2310 0xffffff00, 0x000000ff, 0x00016a00, 0x00000e00,
2311 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2312 0x00000000, 0x0001b200, 0x00017600, 0x00000000,
2313 0x00001000, 0x00000000, 0x00000000, 0x00000000,
2314 0x0001b600, 0x00002000, 0x00000000, 0x00000200,
2315 0xffffff00, 0x000000ff, 0x0001bb00, 0x00000e00,
2316 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2317 0x00000000, 0x0001ef00, 0x0001c300, 0x00000000,
2318 0x00001000, 0x00000000, 0x00000000, 0x00000000,
2319 0x0001f300, 0x00002000, 0x00000000, 0x00000200,
2320 0xffffff00, 0x000000ff, 0x00022800, 0x0001fc00,
2321 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2322 0x00000000, 0x00025c00, 0x00023000, 0x00000000,
2323 0x00001000, 0x00000000, 0x00000000, 0x00000000,
2324 0x00026000, 0x00002000, 0x00000000, 0x00000100,
2325 0xffffff00, 0x000000ff, 0x00028100, 0x00026500,
2326 0x00000000, 0x00000000, 0x00000000, 0x00000400,
2327 0x00000000, 0x00000000,
2328 };
2329
2330 static void test_effect_constant_buffer_stride(ID3D10Device *device)
2331 {
2332     ID3D10Effect *effect;
2333     ID3D10EffectConstantBuffer *constantbuffer;
2334     ID3D10EffectType *type;
2335     D3D10_EFFECT_TYPE_DESC tdesc;
2336     HRESULT hr;
2337     unsigned int i;
2338
2339     static const struct {
2340         unsigned int m; /* members */
2341         unsigned int p; /* packed size */
2342         unsigned int u; /* unpacked size */
2343         unsigned int s; /* stride */
2344     } tv_ecbs[] = {
2345         {4, 0x10,  0x10,  0x10},
2346         {2,  0xc,  0x10,  0x10},
2347         {2, 0x14,  0x20,  0x20},
2348         {3, 0x1c,  0x30,  0x30},
2349         {3, 0x1c,  0x20,  0x20},
2350         {3, 0x1c,  0x20,  0x20},
2351         {3, 0x1c,  0x30,  0x30},
2352         {3, 0x24,  0x30,  0x30},
2353         {3, 0x18,  0x10,  0x10},
2354         {1, 0x10,  0x30,  0x30},
2355         {2, 0x18,  0x20,  0x20},
2356         {2, 0x18,  0x30,  0x30},
2357         {2,  0x8,  0x20,  0x20},
2358         {2,  0x8,  0x20,  0x20},
2359         {1, 0x10,  0x20,  0x20},
2360     };
2361
2362     hr = D3D10CreateEffectFromMemory(fx_test_ecbs, fx_test_ecbs[6], 0, device, NULL, &effect);
2363     ok(SUCCEEDED(hr), "D3D10CreateEffectFromMemory failed (%x)\n", hr);
2364
2365     for (i=0; i<sizeof(tv_ecbs)/sizeof(tv_ecbs[0]); i++)
2366     {
2367         constantbuffer = effect->lpVtbl->GetConstantBufferByIndex(effect, i);
2368         type = constantbuffer->lpVtbl->GetType(constantbuffer);
2369
2370         hr = type->lpVtbl->GetDesc(type, &tdesc);
2371         ok(SUCCEEDED(hr), "GetDesc failed (%x)\n", hr);
2372
2373         ok(strcmp(tdesc.TypeName, "cbuffer") == 0, "TypeName is \"%s\", expected \"cbuffer\"\n", tdesc.TypeName);
2374         ok(tdesc.Class == D3D10_SVC_OBJECT, "Class is %x, expected %x\n", tdesc.Class, D3D10_SVC_OBJECT);
2375         ok(tdesc.Type == D3D10_SVT_CBUFFER, "Type is %x, expected %x\n", tdesc.Type, D3D10_SVT_CBUFFER);
2376         ok(tdesc.Elements == 0, "Elements is %u, expected 0\n", tdesc.Elements);
2377         ok(tdesc.Members == tv_ecbs[i].m, "Members is %u, expected %u\n", tdesc.Members, tv_ecbs[i].m);
2378         ok(tdesc.Rows == 0, "Rows is %u, expected 0\n", tdesc.Rows);
2379         ok(tdesc.Columns == 0, "Columns is %u, expected 0\n", tdesc.Columns);
2380         ok(tdesc.PackedSize == tv_ecbs[i].p, "PackedSize is %#x, expected %#x\n", tdesc.PackedSize, tv_ecbs[i].p);
2381         ok(tdesc.UnpackedSize == tv_ecbs[i].u, "UnpackedSize is %#x, expected %#x\n", tdesc.UnpackedSize, tv_ecbs[i].u);
2382         ok(tdesc.Stride == tv_ecbs[i].s, "Stride is %#x, expected %#x\n", tdesc.Stride, tv_ecbs[i].s);
2383     }
2384
2385     effect->lpVtbl->Release(effect);
2386 }
2387
2388 START_TEST(effect)
2389 {
2390     ID3D10Device *device;
2391     ULONG refcount;
2392
2393     device = create_device();
2394     if (!device)
2395     {
2396         skip("Failed to create device, skipping tests\n");
2397         return;
2398     }
2399
2400     test_effect_constant_buffer_type(device);
2401     test_effect_variable_type(device);
2402     test_effect_variable_member(device);
2403     test_effect_variable_element(device);
2404     test_effect_variable_type_class(device);
2405     test_effect_constant_buffer_stride(device);
2406
2407     refcount = ID3D10Device_Release(device);
2408     ok(!refcount, "Device has %u references left\n", refcount);
2409 }