ReactOS 0.4.15-dev-7887-g64a59a1
effect.c
Go to the documentation of this file.
1/*
2 * Copyright 2010 Christian Costa
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17 */
18
19#define COBJMACROS
20#include "initguid.h"
21#include <limits.h>
22#include "wine/test.h"
23#include "d3dx9.h"
24
25/* helper functions */
27{
28 INT x = *(INT *)&f;
29 INT y = *(INT *)&g;
30
31 if (x < 0)
32 x = INT_MIN - x;
33 if (y < 0)
34 y = INT_MIN - y;
35
36 if (abs(x - y) > ulps)
37 return FALSE;
38
39 return TRUE;
40}
41
42static inline INT get_int(D3DXPARAMETER_TYPE type, const void *data)
43{
44 INT i;
45
46 switch (type)
47 {
48 case D3DXPT_FLOAT:
49 i = *(FLOAT *)data;
50 break;
51
52 case D3DXPT_INT:
53 i = *(INT *)data;
54 break;
55
56 case D3DXPT_BOOL:
57 i = *(BOOL *)data;
58 break;
59
60 default:
61 i = 0;
62 ok(0, "Unhandled type %x.\n", type);
63 break;
64 }
65
66 return i;
67}
68
69static inline float get_float(D3DXPARAMETER_TYPE type, const void *data)
70{
71 float f;
72
73 switch (type)
74 {
75 case D3DXPT_FLOAT:
76 f = *(FLOAT *)data;
77 break;
78
79 case D3DXPT_INT:
80 f = *(INT *)data;
81 break;
82
83 case D3DXPT_BOOL:
84 f = *(BOOL *)data;
85 break;
86
87 default:
88 f = 0.0f;
89 ok(0, "Unhandled type %x.\n", type);
90 break;
91 }
92
93 return f;
94}
95
96static inline BOOL get_bool(const void *data)
97{
98 return !!*(BOOL *)data;
99}
100
101static void set_number(void *outdata, D3DXPARAMETER_TYPE outtype, const void *indata, D3DXPARAMETER_TYPE intype)
102{
103 switch (outtype)
104 {
105 case D3DXPT_FLOAT:
106 *(FLOAT *)outdata = get_float(intype, indata);
107 break;
108
109 case D3DXPT_BOOL:
110 *(BOOL *)outdata = get_bool(indata);
111 break;
112
113 case D3DXPT_INT:
114 *(INT *)outdata = get_int(intype, indata);
115 break;
116
119 case D3DXPT_TEXTURE2D:
120 case D3DXPT_STRING:
121 *(INT *)outdata = 0x12345678;
122 break;
123
124 default:
125 ok(0, "Unhandled type %x.\n", outtype);
126 *(INT *)outdata = 0;
127 break;
128 }
129}
130
131static IDirect3DDevice9 *create_device(HWND *window)
132{
133 D3DPRESENT_PARAMETERS present_parameters = { 0 };
134 IDirect3DDevice9 *device;
135 IDirect3D9 *d3d;
136 HRESULT hr;
137 HWND wnd;
138
139 *window = NULL;
140
141 if (!(wnd = CreateWindowA("static", "d3dx9_test", WS_OVERLAPPEDWINDOW, 0, 0,
142 640, 480, NULL, NULL, NULL, NULL)))
143 {
144 skip("Couldn't create application window.\n");
145 return NULL;
146 }
147
148 if (!(d3d = Direct3DCreate9(D3D_SDK_VERSION)))
149 {
150 skip("Couldn't create IDirect3D9 object.\n");
151 DestroyWindow(wnd);
152 return NULL;
153 }
154
155 present_parameters.Windowed = TRUE;
156 present_parameters.SwapEffect = D3DSWAPEFFECT_DISCARD;
158 &present_parameters, &device);
160 if (FAILED(hr))
161 {
162 skip("Failed to create IDirect3DDevice9 object %#x.\n", hr);
163 DestroyWindow(wnd);
164 return NULL;
165 }
166
167 *window = wnd;
168 return device;
169}
170
171static char temp_path[MAX_PATH];
172
173static BOOL create_file(const char *filename, const char *data, const unsigned int size, char *out_path)
174{
175 DWORD written;
176 HANDLE hfile;
177 char path[MAX_PATH];
178
179 if (!*temp_path)
181
185 if (hfile == INVALID_HANDLE_VALUE)
186 return FALSE;
187
188 if (WriteFile(hfile, data, size, &written, NULL))
189 {
190 CloseHandle(hfile);
191
192 if (out_path)
193 strcpy(out_path, path);
194 return TRUE;
195 }
196
197 CloseHandle(hfile);
198 return FALSE;
199}
200
201static void delete_file(const char *filename)
202{
203 char path[MAX_PATH];
204
208}
209
210static BOOL create_directory(const char *name)
211{
212 char path[MAX_PATH];
213
215 strcat(path, name);
216 return CreateDirectoryA(path, NULL);
217}
218
219static void delete_directory(const char *name)
220{
221 char path[MAX_PATH];
222
224 strcat(path, name);
226}
227
228static const char effect_desc[] =
229"Technique\n"
230"{\n"
231"}\n";
232
233static void test_create_effect_and_pool(IDirect3DDevice9 *device)
234{
235 HRESULT hr;
236 ID3DXEffect *effect;
237 ID3DXBaseEffect *base;
238 ULONG count;
239 IDirect3DDevice9 *device2;
240 ID3DXEffectStateManager *manager = (ID3DXEffectStateManager *)0xdeadbeef;
241 ID3DXEffectPool *pool = (ID3DXEffectPool *)0xdeadbeef, *pool2;
242
244 ok(hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3D_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL);
245
247 ok(hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3DERR_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL);
248
250 ok(hr == E_FAIL, "Got result %x, expected %x (D3DXERR_INVALIDDATA)\n", hr, E_FAIL);
251
253 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr);
254
255 hr = D3DXCreateEffect(device, effect_desc, sizeof(effect_desc), NULL, NULL, 0, NULL, &effect, NULL);
256 todo_wine ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr);
257 if (FAILED(hr))
258 {
259 skip("Failed to compile effect, skipping test.\n");
260 return;
261 }
262
263 hr = effect->lpVtbl->QueryInterface(effect, &IID_ID3DXBaseEffect, (void **)&base);
264 ok(hr == E_NOINTERFACE, "QueryInterface failed, got %x, expected %x (E_NOINTERFACE)\n", hr, E_NOINTERFACE);
265
266 hr = effect->lpVtbl->GetStateManager(effect, NULL);
267 ok(hr == D3DERR_INVALIDCALL, "GetStateManager failed, got %x, expected %x (D3DERR_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL);
268
269 hr = effect->lpVtbl->GetStateManager(effect, &manager);
270 ok(hr == D3D_OK, "GetStateManager failed, got %x, expected 0 (D3D_OK)\n", hr);
271 ok(!manager, "GetStateManager failed, got %p\n", manager);
272
273 /* this works, but it is not recommended! */
274 hr = effect->lpVtbl->SetStateManager(effect, (ID3DXEffectStateManager *)device);
275 ok(hr == D3D_OK, "SetStateManager failed, got %x, expected 0 (D3D_OK)\n", hr);
276
277 hr = effect->lpVtbl->GetStateManager(effect, &manager);
278 ok(hr == D3D_OK, "GetStateManager failed, got %x, expected 0 (D3D_OK)\n", hr);
279 ok(manager != NULL, "GetStateManager failed\n");
280
283 ok(count == 4, "Release failed, got %u, expected 4\n", count);
284
285 count = IUnknown_Release(manager);
286 ok(count == 3, "Release failed, got %u, expected 3\n", count);
287
288 hr = effect->lpVtbl->SetStateManager(effect, NULL);
289 ok(hr == D3D_OK, "SetStateManager failed, got %x, expected 0 (D3D_OK)\n", hr);
290
291 hr = effect->lpVtbl->GetPool(effect, &pool);
292 ok(hr == D3D_OK, "GetPool failed, got %x, expected 0 (D3D_OK)\n", hr);
293 ok(!pool, "GetPool failed, got %p\n", pool);
294
295 hr = effect->lpVtbl->GetPool(effect, NULL);
296 ok(hr == D3DERR_INVALIDCALL, "GetPool failed, got %x, expected %x (D3DERR_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL);
297
298 hr = effect->lpVtbl->GetDevice(effect, &device2);
299 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr);
300
301 hr = effect->lpVtbl->GetDevice(effect, NULL);
302 ok(hr == D3DERR_INVALIDCALL, "GetDevice failed, got %x, expected %x (D3DERR_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL);
303
305 ok(count == 2, "Release failed, got %u, expected 2\n", count);
306
307 count = effect->lpVtbl->Release(effect);
308 ok(count == 0, "Release failed %u\n", count);
309
311 ok(hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3D_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL);
312
314 ok(hr == S_OK, "Got result %x, expected 0 (S_OK)\n", hr);
315
316 count = pool->lpVtbl->Release(pool);
317 ok(count == 0, "Release failed %u\n", count);
318
320 ok(hr == S_OK, "Got result %x, expected 0 (S_OK)\n", hr);
321
323 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr);
324
325 hr = pool->lpVtbl->QueryInterface(pool, &IID_ID3DXEffectPool, (void **)&pool2);
326 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr);
327 ok(pool == pool2, "Got effect pool %p, expected %p.\n", pool2, pool);
328
329 count = pool2->lpVtbl->Release(pool2);
330 ok(count == 1, "Release failed, got %u, expected 1\n", count);
331
332 hr = IDirect3DDevice9_QueryInterface(device, &IID_IDirect3DDevice9, (void **)&device2);
333 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr);
334
336 ok(count == 1, "Release failed, got %u, expected 1\n", count);
337
338 hr = D3DXCreateEffect(device, effect_desc, sizeof(effect_desc), NULL, NULL, 0, pool, &effect, NULL);
339 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr);
340
341 hr = effect->lpVtbl->GetPool(effect, &pool);
342 ok(hr == D3D_OK, "GetPool failed, got %x, expected 0 (D3D_OK)\n", hr);
343 ok(pool == pool2, "Got effect pool %p, expected %p.\n", pool2, pool);
344
345 count = pool2->lpVtbl->Release(pool2);
346 ok(count == 2, "Release failed, got %u, expected 2\n", count);
347
348 count = effect->lpVtbl->Release(effect);
349 ok(count == 0, "Release failed %u\n", count);
350
351 count = pool->lpVtbl->Release(pool);
352 ok(count == 0, "Release failed %u\n", count);
353}
354
356{
357 HRESULT hr;
358 ID3DXEffectCompiler *compiler, *compiler2;
359 ID3DXBaseEffect *base;
361 ULONG count;
362
363 hr = D3DXCreateEffectCompiler(NULL, 0, NULL, NULL, 0, &compiler, NULL);
364 ok(hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3D_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL);
365
367 ok(hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3D_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL);
368
369 hr = D3DXCreateEffectCompiler(effect_desc, 0, NULL, NULL, 0, &compiler, NULL);
370 ok(hr == D3D_OK, "Got result %x, expected %x (D3D_OK)\n", hr, D3D_OK);
371 if (FAILED(hr))
372 {
373 skip("D3DXCreateEffectCompiler failed, skipping test.\n");
374 return;
375 }
376
377 count = compiler->lpVtbl->Release(compiler);
378 ok(count == 0, "Release failed %u\n", count);
379
381 ok(hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3D_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL);
382
383 hr = D3DXCreateEffectCompiler(NULL, sizeof(effect_desc), NULL, NULL, 0, &compiler, NULL);
384 ok(hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3D_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL);
385
387 ok(hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3D_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL);
388
390 ok(hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3DERR_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL);
391
392 hr = D3DXCreateEffectCompiler(effect_desc, sizeof(effect_desc), NULL, NULL, 0, &compiler, NULL);
393 ok(hr == D3D_OK, "Got result %x, expected %x (D3D_OK)\n", hr, D3D_OK);
394
395 hr = compiler->lpVtbl->QueryInterface(compiler, &IID_ID3DXBaseEffect, (void **)&base);
396 ok(hr == E_NOINTERFACE, "QueryInterface failed, got %x, expected %x (E_NOINTERFACE)\n", hr, E_NOINTERFACE);
397
398 hr = compiler->lpVtbl->QueryInterface(compiler, &IID_ID3DXEffectCompiler, (void **)&compiler2);
399 ok(hr == D3D_OK, "QueryInterface failed, got %x, expected %x (D3D_OK)\n", hr, D3D_OK);
400
401 hr = compiler->lpVtbl->QueryInterface(compiler, &IID_IUnknown, (void **)&unknown);
402 ok(hr == D3D_OK, "QueryInterface failed, got %x, expected %x (D3D_OK)\n", hr, D3D_OK);
403
404 count = unknown->lpVtbl->Release(unknown);
405 ok(count == 2, "Release failed, got %u, expected %u\n", count, 2);
406
407 count = compiler2->lpVtbl->Release(compiler2);
408 ok(count == 1, "Release failed, got %u, expected %u\n", count, 1);
409
410 count = compiler->lpVtbl->Release(compiler);
411 ok(count == 0, "Release failed %u\n", count);
412}
413
414/*
415 * Parameter value test
416 */
418{
419 const char *full_name;
421 UINT value_offset; /* start position for the value in the blob */
422};
423
424/*
425 * fxc.exe /Tfx_2_0
426 */
427#if 0
428float f = 0.1;
429float1 f1 = {1.1};
430float2 f2 = {2.1, 2.2};
431float3 f3 = {3.1, 3.2, 3.3};
432float4 f4 = {4.1, 4.2, 4.3, 4.4};
433float1x1 f11 = {11.1};
434float1x2 f12 = {12.1, 12.2};
435float1x3 f13 = {13.1, 13.2, 13.3};
436float1x4 f14 = {14.1, 14.2, 14.3, 14.4};
437float2x1 f21 = {{21.11, 21.21}};
438float2x2 f22 = {{22.11, 22.21}, {22.12, 22.22}};
439float2x3 f23 = {{23.11, 23.21}, {23.12, 23.22}, {23.13, 23.23}};
440float2x4 f24 = {{24.11, 24.21}, {24.12, 24.22}, {24.13, 24.23}, {24.14, 24.24}};
441float3x1 f31 = {{31.11, 31.21, 31.31}};
442float3x2 f32 = {{32.11, 32.21, 32.31}, {32.12, 32.22, 32.32}};
443float3x3 f33 = {{33.11, 33.21, 33.31}, {33.12, 33.22, 33.32},
444 {33.13, 33.23, 33.33}};
445float3x4 f34 = {{34.11, 34.21, 34.31}, {34.12, 34.22, 34.32},
446 {34.13, 34.23, 34.33}, {34.14, 34.24, 34.34}};
447float4x1 f41 = {{41.11, 41.21, 41.31, 41.41}};
448float4x2 f42 = {{42.11, 42.21, 42.31, 42.41}, {42.12, 42.22, 42.32, 42.42}};
449float4x3 f43 = {{43.11, 43.21, 43.31, 43.41}, {43.12, 43.22, 43.32, 43.42},
450 {43.13, 43.23, 43.33, 43.43}};
451float4x4 f44 = {{44.11, 44.21, 44.31, 44.41}, {44.12, 44.22, 44.32, 44.42},
452 {44.13, 44.23, 44.33, 44.43}, {44.14, 44.24, 44.34, 44.44}};
453float f_2[2] = {0.101, 0.102};
454float1 f1_2[2] = {{1.101}, {1.102}};
455float2 f2_2[2] = {{2.101, 2.201}, {2.102, 2.202}};
456float3 f3_2[2] = {{3.101, 3.201, 3.301}, {3.102, 3.202, 3.302}};
457float4 f4_2[2] = {{4.101, 4.201, 4.301, 4.401}, {4.102, 4.202, 4.302, 4.402}};
458float1x1 f11_2[2] = {{11.101}, {11.102}};
459float1x2 f12_2[2] = {{12.101, 12.201}, {12.102, 12.202}};
460float1x3 f13_2[2] = {{13.101, 13.201, 13.301}, {13.102, 13.202, 13.302}};
461float1x4 f14_2[2] = {{14.101, 14.201, 14.301, 14.401}, {14.102, 14.202, 14.302, 14.402}};
462float2x1 f21_2[2] = {{{21.1101, 21.2101}}, {{21.1102, 21.2102}}};
463float2x2 f22_2[2] = {{{22.1101, 22.2101}, {22.1201, 22.2201}}, {{22.1102, 22.2102}, {22.1202, 22.2202}}};
464float2x3 f23_2[2] = {{{23.1101, 23.2101}, {23.1201, 23.2201}, {23.1301, 23.2301}}, {{23.1102, 23.2102},
465 {23.1202, 23.2202}, {23.1302, 23.2302}}};
466float2x4 f24_2[2] = {{{24.1101, 24.2101}, {24.1201, 24.2201}, {24.1301, 24.2301}, {24.1401, 24.2401}},
467 {{24.1102, 24.2102}, {24.1202, 24.2202}, {24.1302, 24.2302}, {24.1402, 24.2402}}};
468float3x1 f31_2[2] = {{{31.1101, 31.2101, 31.3101}}, {{31.1102, 31.2102, 31.3102}}};
469float3x2 f32_2[2] = {{{32.1101, 32.2101, 32.3101}, {32.1201, 32.2201, 32.3201}},
470 {{32.1102, 32.2102, 32.3102}, {32.1202, 32.2202, 32.3202}}};
471float3x3 f33_2[2] = {{{33.1101, 33.2101, 33.3101}, {33.1201, 33.2201, 33.3201},
472 {33.1301, 33.2301, 33.3301}}, {{33.1102, 33.2102, 33.3102}, {33.1202, 33.2202, 33.3202},
473 {33.1302, 33.2302, 33.3302}}};
474float3x4 f34_2[2] = {{{34.1101, 34.2101, 34.3101}, {34.1201, 34.2201, 34.3201},
475 {34.1301, 34.2301, 34.3301}, {34.1401, 34.2401, 34.3401}}, {{34.1102, 34.2102, 34.3102},
476 {34.1202, 34.2202, 34.3202}, {34.1302, 34.2302, 34.3302}, {34.1402, 34.2402, 34.3402}}};
477float4x1 f41_2[2] = {{{41.1101, 41.2101, 41.3101, 41.4101}}, {{41.1102, 41.2102, 41.3102, 41.4102}}};
478float4x2 f42_2[2] = {{{42.1101, 42.2101, 42.3101, 42.4101}, {42.1201, 42.2201, 42.3201, 42.4201}},
479 {{42.1102, 42.2102, 42.3102, 42.4102}, {42.1202, 42.2202, 42.3202, 42.4202}}};
480float4x3 f43_2[2] = {{{43.1101, 43.2101, 43.3101, 43.4101}, {43.1201, 43.2201, 43.3201, 43.4201},
481 {43.1301, 43.2301, 43.3301, 43.4301}}, {{43.1102, 43.2102, 43.3102, 43.4102},
482 {43.1202, 43.2202, 43.3202, 43.4202}, {43.1302, 43.2302, 43.3302, 43.4302}}};
483float4x4 f44_2[2] = {{{44.1101, 44.2101, 44.3101, 44.4101}, {44.1201, 44.2201, 44.3201, 44.4201},
484 {44.1301, 44.2301, 44.3301, 44.4301}, {44.1401, 44.2401, 44.3401, 44.4401}},
485 {{44.1102, 44.2102, 44.3102, 44.4102}, {44.1202, 44.2202, 44.3202, 44.4202},
486 {44.1302, 44.2302, 44.3302, 44.4302}, {44.1402, 44.2402, 44.3402, 44.4402}}};
487technique t { pass p { } }
488#endif
490{
4910xfeff0901, 0x00000b80, 0x00000000, 0x00000003, 0x00000000, 0x00000024, 0x00000000, 0x00000000,
4920x00000001, 0x00000001, 0x3dcccccd, 0x00000002, 0x00000066, 0x00000003, 0x00000001, 0x0000004c,
4930x00000000, 0x00000000, 0x00000001, 0x00000001, 0x3f8ccccd, 0x00000003, 0x00003166, 0x00000003,
4940x00000001, 0x00000078, 0x00000000, 0x00000000, 0x00000002, 0x00000001, 0x40066666, 0x400ccccd,
4950x00000003, 0x00003266, 0x00000003, 0x00000001, 0x000000a8, 0x00000000, 0x00000000, 0x00000003,
4960x00000001, 0x40466666, 0x404ccccd, 0x40533333, 0x00000003, 0x00003366, 0x00000003, 0x00000001,
4970x000000dc, 0x00000000, 0x00000000, 0x00000004, 0x00000001, 0x40833333, 0x40866666, 0x4089999a,
4980x408ccccd, 0x00000003, 0x00003466, 0x00000003, 0x00000002, 0x00000104, 0x00000000, 0x00000000,
4990x00000001, 0x00000001, 0x4131999a, 0x00000004, 0x00313166, 0x00000003, 0x00000002, 0x00000130,
5000x00000000, 0x00000000, 0x00000001, 0x00000002, 0x4141999a, 0x41433333, 0x00000004, 0x00323166,
5010x00000003, 0x00000002, 0x00000160, 0x00000000, 0x00000000, 0x00000001, 0x00000003, 0x4151999a,
5020x41533333, 0x4154cccd, 0x00000004, 0x00333166, 0x00000003, 0x00000002, 0x00000194, 0x00000000,
5030x00000000, 0x00000001, 0x00000004, 0x4161999a, 0x41633333, 0x4164cccd, 0x41666666, 0x00000004,
5040x00343166, 0x00000003, 0x00000002, 0x000001c0, 0x00000000, 0x00000000, 0x00000002, 0x00000001,
5050x41a8e148, 0x41a9ae14, 0x00000004, 0x00313266, 0x00000003, 0x00000002, 0x000001f4, 0x00000000,
5060x00000000, 0x00000002, 0x00000002, 0x41b0e148, 0x41b1ae14, 0x41b0f5c3, 0x41b1c28f, 0x00000004,
5070x00323266, 0x00000003, 0x00000002, 0x00000230, 0x00000000, 0x00000000, 0x00000002, 0x00000003,
5080x41b8e148, 0x41b9ae14, 0x41b8f5c3, 0x41b9c28f, 0x41b90a3d, 0x41b9d70a, 0x00000004, 0x00333266,
5090x00000003, 0x00000002, 0x00000274, 0x00000000, 0x00000000, 0x00000002, 0x00000004, 0x41c0e148,
5100x41c1ae14, 0x41c0f5c3, 0x41c1c28f, 0x41c10a3d, 0x41c1d70a, 0x41c11eb8, 0x41c1eb85, 0x00000004,
5110x00343266, 0x00000003, 0x00000002, 0x000002a4, 0x00000000, 0x00000000, 0x00000003, 0x00000001,
5120x41f8e148, 0x41f9ae14, 0x41fa7ae1, 0x00000004, 0x00313366, 0x00000003, 0x00000002, 0x000002e0,
5130x00000000, 0x00000000, 0x00000003, 0x00000002, 0x420070a4, 0x4200d70a, 0x42013d71, 0x42007ae1,
5140x4200e148, 0x420147ae, 0x00000004, 0x00323366, 0x00000003, 0x00000002, 0x00000328, 0x00000000,
5150x00000000, 0x00000003, 0x00000003, 0x420470a4, 0x4204d70a, 0x42053d71, 0x42047ae1, 0x4204e148,
5160x420547ae, 0x4204851f, 0x4204eb85, 0x420551ec, 0x00000004, 0x00333366, 0x00000003, 0x00000002,
5170x0000037c, 0x00000000, 0x00000000, 0x00000003, 0x00000004, 0x420870a4, 0x4208d70a, 0x42093d71,
5180x42087ae1, 0x4208e148, 0x420947ae, 0x4208851f, 0x4208eb85, 0x420951ec, 0x42088f5c, 0x4208f5c3,
5190x42095c29, 0x00000004, 0x00343366, 0x00000003, 0x00000002, 0x000003b0, 0x00000000, 0x00000000,
5200x00000004, 0x00000001, 0x422470a4, 0x4224d70a, 0x42253d71, 0x4225a3d7, 0x00000004, 0x00313466,
5210x00000003, 0x00000002, 0x000003f4, 0x00000000, 0x00000000, 0x00000004, 0x00000002, 0x422870a4,
5220x4228d70a, 0x42293d71, 0x4229a3d7, 0x42287ae1, 0x4228e148, 0x422947ae, 0x4229ae14, 0x00000004,
5230x00323466, 0x00000003, 0x00000002, 0x00000448, 0x00000000, 0x00000000, 0x00000004, 0x00000003,
5240x422c70a4, 0x422cd70a, 0x422d3d71, 0x422da3d7, 0x422c7ae1, 0x422ce148, 0x422d47ae, 0x422dae14,
5250x422c851f, 0x422ceb85, 0x422d51ec, 0x422db852, 0x00000004, 0x00333466, 0x00000003, 0x00000002,
5260x000004ac, 0x00000000, 0x00000000, 0x00000004, 0x00000004, 0x423070a4, 0x4230d70a, 0x42313d71,
5270x4231a3d7, 0x42307ae1, 0x4230e148, 0x423147ae, 0x4231ae14, 0x4230851f, 0x4230eb85, 0x423151ec,
5280x4231b852, 0x42308f5c, 0x4230f5c3, 0x42315c29, 0x4231c28f, 0x00000004, 0x00343466, 0x00000003,
5290x00000000, 0x000004d8, 0x00000000, 0x00000002, 0x00000001, 0x00000001, 0x3dced917, 0x3dd0e560,
5300x00000004, 0x00325f66, 0x00000003, 0x00000001, 0x00000504, 0x00000000, 0x00000002, 0x00000001,
5310x00000001, 0x3f8ced91, 0x3f8d0e56, 0x00000005, 0x325f3166, 0x00000000, 0x00000003, 0x00000001,
5320x0000053c, 0x00000000, 0x00000002, 0x00000002, 0x00000001, 0x400676c9, 0x400cdd2f, 0x4006872b,
5330x400ced91, 0x00000005, 0x325f3266, 0x00000000, 0x00000003, 0x00000001, 0x0000057c, 0x00000000,
5340x00000002, 0x00000003, 0x00000001, 0x404676c9, 0x404cdd2f, 0x40534396, 0x4046872b, 0x404ced91,
5350x405353f8, 0x00000005, 0x325f3366, 0x00000000, 0x00000003, 0x00000001, 0x000005c4, 0x00000000,
5360x00000002, 0x00000004, 0x00000001, 0x40833b64, 0x40866e98, 0x4089a1cb, 0x408cd4fe, 0x40834396,
5370x408676c9, 0x4089a9fc, 0x408cdd2f, 0x00000005, 0x325f3466, 0x00000000, 0x00000003, 0x00000002,
5380x000005f4, 0x00000000, 0x00000002, 0x00000001, 0x00000001, 0x41319db2, 0x4131a1cb, 0x00000006,
5390x5f313166, 0x00000032, 0x00000003, 0x00000002, 0x0000062c, 0x00000000, 0x00000002, 0x00000001,
5400x00000002, 0x41419db2, 0x4143374c, 0x4141a1cb, 0x41433b64, 0x00000006, 0x5f323166, 0x00000032,
5410x00000003, 0x00000002, 0x0000066c, 0x00000000, 0x00000002, 0x00000001, 0x00000003, 0x41519db2,
5420x4153374c, 0x4154d0e5, 0x4151a1cb, 0x41533b64, 0x4154d4fe, 0x00000006, 0x5f333166, 0x00000032,
5430x00000003, 0x00000002, 0x000006b4, 0x00000000, 0x00000002, 0x00000001, 0x00000004, 0x41619db2,
5440x4163374c, 0x4164d0e5, 0x41666a7f, 0x4161a1cb, 0x41633b64, 0x4164d4fe, 0x41666e98, 0x00000006,
5450x5f343166, 0x00000032, 0x00000003, 0x00000002, 0x000006ec, 0x00000000, 0x00000002, 0x00000002,
5460x00000001, 0x41a8e17c, 0x41a9ae49, 0x41a8e1b1, 0x41a9ae7d, 0x00000006, 0x5f313266, 0x00000032,
5470x00000003, 0x00000002, 0x00000734, 0x00000000, 0x00000002, 0x00000002, 0x00000002, 0x41b0e17c,
5480x41b1ae49, 0x41b0f5f7, 0x41b1c2c4, 0x41b0e1b1, 0x41b1ae7d, 0x41b0f62b, 0x41b1c2f8, 0x00000006,
5490x5f323266, 0x00000032, 0x00000003, 0x00000002, 0x0000078c, 0x00000000, 0x00000002, 0x00000002,
5500x00000003, 0x41b8e17c, 0x41b9ae49, 0x41b8f5f7, 0x41b9c2c4, 0x41b90a72, 0x41b9d73f, 0x41b8e1b1,
5510x41b9ae7d, 0x41b8f62b, 0x41b9c2f8, 0x41b90aa6, 0x41b9d773, 0x00000006, 0x5f333266, 0x00000032,
5520x00000003, 0x00000002, 0x000007f4, 0x00000000, 0x00000002, 0x00000002, 0x00000004, 0x41c0e17c,
5530x41c1ae49, 0x41c0f5f7, 0x41c1c2c4, 0x41c10a72, 0x41c1d73f, 0x41c11eed, 0x41c1ebba, 0x41c0e1b1,
5540x41c1ae7d, 0x41c0f62b, 0x41c1c2f8, 0x41c10aa6, 0x41c1d773, 0x41c11f21, 0x41c1ebee, 0x00000006,
5550x5f343266, 0x00000032, 0x00000003, 0x00000002, 0x00000834, 0x00000000, 0x00000002, 0x00000003,
5560x00000001, 0x41f8e17c, 0x41f9ae49, 0x41fa7b16, 0x41f8e1b1, 0x41f9ae7d, 0x41fa7b4a, 0x00000006,
5570x5f313366, 0x00000032, 0x00000003, 0x00000002, 0x0000088c, 0x00000000, 0x00000002, 0x00000003,
5580x00000002, 0x420070be, 0x4200d724, 0x42013d8b, 0x42007afb, 0x4200e162, 0x420147c8, 0x420070d8,
5590x4200d73f, 0x42013da5, 0x42007b16, 0x4200e17c, 0x420147e3, 0x00000006, 0x5f323366, 0x00000032,
5600x00000003, 0x00000002, 0x000008fc, 0x00000000, 0x00000002, 0x00000003, 0x00000003, 0x420470be,
5610x4204d724, 0x42053d8b, 0x42047afb, 0x4204e162, 0x420547c8, 0x42048539, 0x4204eb9f, 0x42055206,
5620x420470d8, 0x4204d73f, 0x42053da5, 0x42047b16, 0x4204e17c, 0x420547e3, 0x42048553, 0x4204ebba,
5630x42055220, 0x00000006, 0x5f333366, 0x00000032, 0x00000003, 0x00000002, 0x00000984, 0x00000000,
5640x00000002, 0x00000003, 0x00000004, 0x420870be, 0x4208d724, 0x42093d8b, 0x42087afb, 0x4208e162,
5650x420947c8, 0x42088539, 0x4208eb9f, 0x42095206, 0x42088f76, 0x4208f5dd, 0x42095c43, 0x420870d8,
5660x4208d73f, 0x42093da5, 0x42087b16, 0x4208e17c, 0x420947e3, 0x42088553, 0x4208ebba, 0x42095220,
5670x42088f91, 0x4208f5f7, 0x42095c5d, 0x00000006, 0x5f343366, 0x00000032, 0x00000003, 0x00000002,
5680x000009cc, 0x00000000, 0x00000002, 0x00000004, 0x00000001, 0x422470be, 0x4224d724, 0x42253d8b,
5690x4225a3f1, 0x422470d8, 0x4224d73f, 0x42253da5, 0x4225a40b, 0x00000006, 0x5f313466, 0x00000032,
5700x00000003, 0x00000002, 0x00000a34, 0x00000000, 0x00000002, 0x00000004, 0x00000002, 0x422870be,
5710x4228d724, 0x42293d8b, 0x4229a3f1, 0x42287afb, 0x4228e162, 0x422947c8, 0x4229ae2f, 0x422870d8,
5720x4228d73f, 0x42293da5, 0x4229a40b, 0x42287b16, 0x4228e17c, 0x422947e3, 0x4229ae49, 0x00000006,
5730x5f323466, 0x00000032, 0x00000003, 0x00000002, 0x00000abc, 0x00000000, 0x00000002, 0x00000004,
5740x00000003, 0x422c70be, 0x422cd724, 0x422d3d8b, 0x422da3f1, 0x422c7afb, 0x422ce162, 0x422d47c8,
5750x422dae2f, 0x422c8539, 0x422ceb9f, 0x422d5206, 0x422db86c, 0x422c70d8, 0x422cd73f, 0x422d3da5,
5760x422da40b, 0x422c7b16, 0x422ce17c, 0x422d47e3, 0x422dae49, 0x422c8553, 0x422cebba, 0x422d5220,
5770x422db886, 0x00000006, 0x5f333466, 0x00000032, 0x00000003, 0x00000002, 0x00000b64, 0x00000000,
5780x00000002, 0x00000004, 0x00000004, 0x423070be, 0x4230d724, 0x42313d8b, 0x4231a3f1, 0x42307afb,
5790x4230e162, 0x423147c8, 0x4231ae2f, 0x42308539, 0x4230eb9f, 0x42315206, 0x4231b86c, 0x42308f76,
5800x4230f5dd, 0x42315c43, 0x4231c2aa, 0x423070d8, 0x4230d73f, 0x42313da5, 0x4231a40b, 0x42307b16,
5810x4230e17c, 0x423147e3, 0x4231ae49, 0x42308553, 0x4230ebba, 0x42315220, 0x4231b886, 0x42308f91,
5820x4230f5f7, 0x42315c5d, 0x4231c2c4, 0x00000006, 0x5f343466, 0x00000032, 0x00000002, 0x00000070,
5830x00000002, 0x00000074, 0x0000002a, 0x00000001, 0x00000001, 0x00000001, 0x00000004, 0x00000020,
5840x00000000, 0x00000000, 0x0000002c, 0x00000048, 0x00000000, 0x00000000, 0x00000054, 0x00000070,
5850x00000000, 0x00000000, 0x00000080, 0x0000009c, 0x00000000, 0x00000000, 0x000000b0, 0x000000cc,
5860x00000000, 0x00000000, 0x000000e4, 0x00000100, 0x00000000, 0x00000000, 0x0000010c, 0x00000128,
5870x00000000, 0x00000000, 0x00000138, 0x00000154, 0x00000000, 0x00000000, 0x00000168, 0x00000184,
5880x00000000, 0x00000000, 0x0000019c, 0x000001b8, 0x00000000, 0x00000000, 0x000001c8, 0x000001e4,
5890x00000000, 0x00000000, 0x000001fc, 0x00000218, 0x00000000, 0x00000000, 0x00000238, 0x00000254,
5900x00000000, 0x00000000, 0x0000027c, 0x00000298, 0x00000000, 0x00000000, 0x000002ac, 0x000002c8,
5910x00000000, 0x00000000, 0x000002e8, 0x00000304, 0x00000000, 0x00000000, 0x00000330, 0x0000034c,
5920x00000000, 0x00000000, 0x00000384, 0x000003a0, 0x00000000, 0x00000000, 0x000003b8, 0x000003d4,
5930x00000000, 0x00000000, 0x000003fc, 0x00000418, 0x00000000, 0x00000000, 0x00000450, 0x0000046c,
5940x00000000, 0x00000000, 0x000004b4, 0x000004d0, 0x00000000, 0x00000000, 0x000004e0, 0x000004fc,
5950x00000000, 0x00000000, 0x00000510, 0x0000052c, 0x00000000, 0x00000000, 0x00000548, 0x00000564,
5960x00000000, 0x00000000, 0x00000588, 0x000005a4, 0x00000000, 0x00000000, 0x000005d0, 0x000005ec,
5970x00000000, 0x00000000, 0x00000600, 0x0000061c, 0x00000000, 0x00000000, 0x00000638, 0x00000654,
5980x00000000, 0x00000000, 0x00000678, 0x00000694, 0x00000000, 0x00000000, 0x000006c0, 0x000006dc,
5990x00000000, 0x00000000, 0x000006f8, 0x00000714, 0x00000000, 0x00000000, 0x00000740, 0x0000075c,
6000x00000000, 0x00000000, 0x00000798, 0x000007b4, 0x00000000, 0x00000000, 0x00000800, 0x0000081c,
6010x00000000, 0x00000000, 0x00000840, 0x0000085c, 0x00000000, 0x00000000, 0x00000898, 0x000008b4,
6020x00000000, 0x00000000, 0x00000908, 0x00000924, 0x00000000, 0x00000000, 0x00000990, 0x000009ac,
6030x00000000, 0x00000000, 0x000009d8, 0x000009f4, 0x00000000, 0x00000000, 0x00000a40, 0x00000a5c,
6040x00000000, 0x00000000, 0x00000ac8, 0x00000ae4, 0x00000000, 0x00000000, 0x00000b78, 0x00000000,
6050x00000001, 0x00000b70, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
606};
607
609{
610 {"f", {"f", NULL, D3DXPC_SCALAR, D3DXPT_FLOAT, 1, 1, 0, 0, 0, 0, 4}, 10},
611 {"f1", {"f1", NULL, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 1, 0, 0, 0, 0, 4}, 20},
612 {"f2", {"f2", NULL, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 2, 0, 0, 0, 0, 8}, 30},
613 {"f3", {"f3", NULL, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 3, 0, 0, 0, 0, 12}, 41},
614 {"f4", {"f4", NULL, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 4, 0, 0, 0, 0, 16}, 53},
615 {"f11", {"f11", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 1, 1, 0, 0, 0, 0, 4}, 66},
616 {"f12", {"f12", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 1, 2, 0, 0, 0, 0, 8}, 76},
617 {"f13", {"f13", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 1, 3, 0, 0, 0, 0, 12}, 87},
618 {"f14", {"f14", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 1, 4, 0, 0, 0, 0, 16}, 99},
619 {"f21", {"f21", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 2, 1, 0, 0, 0, 0, 8}, 112},
620 {"f22", {"f22", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 2, 2, 0, 0, 0, 0, 16}, 123},
621 {"f23", {"f23", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 2, 3, 0, 0, 0, 0, 24}, 136},
622 {"f24", {"f24", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 2, 4, 0, 0, 0, 0, 32}, 151},
623 {"f31", {"f31", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 3, 1, 0, 0, 0, 0, 12}, 168},
624 {"f32", {"f32", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 3, 2, 0, 0, 0, 0, 24}, 180},
625 {"f33", {"f33", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 3, 3, 0, 0, 0, 0, 36}, 195},
626 {"f34", {"f34", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 3, 4, 0, 0, 0, 0, 48}, 213},
627 {"f41", {"f41", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 4, 1, 0, 0, 0, 0, 16}, 234},
628 {"f42", {"f42", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 4, 2, 0, 0, 0, 0, 32}, 247},
629 {"f43", {"f43", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 4, 3, 0, 0, 0, 0, 48}, 264},
630 {"f44", {"f44", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 4, 4, 0, 0, 0, 0, 64}, 285},
631 {"f_2", {"f_2", NULL, D3DXPC_SCALAR, D3DXPT_FLOAT, 1, 1, 2, 0, 0, 0, 8}, 310},
632 {"f1_2", {"f1_2", NULL, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 1, 2, 0, 0, 0, 8}, 321},
633 {"f2_2", {"f2_2", NULL, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 2, 2, 0, 0, 0, 16}, 333},
634 {"f3_2", {"f3_2", NULL, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 3, 2, 0, 0, 0, 24}, 347},
635 {"f4_2", {"f4_2", NULL, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 4, 2, 0, 0, 0, 32}, 363},
636 {"f11_2", {"f11_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 1, 1, 2, 0, 0, 0, 8}, 381},
637 {"f12_2", {"f12_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 1, 2, 2, 0, 0, 0, 16}, 393},
638 {"f13_2", {"f13_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 1, 3, 2, 0, 0, 0, 24}, 407},
639 {"f14_2", {"f14_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 1, 4, 2, 0, 0, 0, 32}, 423},
640 {"f21_2", {"f21_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 2, 1, 2, 0, 0, 0, 16}, 441},
641 {"f22_2", {"f22_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 2, 2, 2, 0, 0, 0, 32}, 455},
642 {"f23_2", {"f23_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 2, 3, 2, 0, 0, 0, 48}, 473},
643 {"f24_2", {"f24_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 2, 4, 2, 0, 0, 0, 64}, 495},
644 {"f31_2", {"f31_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 3, 1, 2, 0, 0, 0, 24}, 521},
645 {"f32_2", {"f32_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 3, 2, 2, 0, 0, 0, 48}, 537},
646 {"f33_2", {"f33_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 3, 3, 2, 0, 0, 0, 72}, 559},
647 {"f34_2", {"f34_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 3, 4, 2, 0, 0, 0, 96}, 587},
648 {"f41_2", {"f41_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 4, 1, 2, 0, 0, 0, 32}, 621},
649 {"f42_2", {"f42_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 4, 2, 2, 0, 0, 0, 64}, 639},
650 {"f43_2", {"f43_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 4, 3, 2, 0, 0, 0, 96}, 665},
651 {"f44_2", {"f44_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 4, 4, 2, 0, 0, 0, 128}, 699},
652};
653
654/*
655 * fxc.exe /Tfx_2_0
656 */
657#if 0
658int i = 1;
659int1 i1 = {11};
660int2 i2 = {21, 22};
661int3 i3 = {31, 32, 33};
662int4 i4 = {41, 42, 43, 44};
663int1x1 i11 = {111};
664int1x2 i12 = {121, 122};
665int1x3 i13 = {131, 132, 133};
666int1x4 i14 = {141, 142, 143, 144};
667int2x1 i21 = {{2111, 2121}};
668int2x2 i22 = {{2211, 2221}, {2212, 2222}};
669int2x3 i23 = {{2311, 2321}, {2312, 2322}, {2313, 2323}};
670int2x4 i24 = {{2411, 2421}, {2412, 2422}, {2413, 2423}, {2414, 2424}};
671int3x1 i31 = {{3111, 3121, 3131}};
672int3x2 i32 = {{3211, 3221, 3231}, {3212, 3222, 3232}};
673int3x3 i33 = {{3311, 3321, 3331}, {3312, 3322, 3332},
674 {3313, 3323, 3333}};
675int3x4 i34 = {{3411, 3421, 3431}, {3412, 3422, 3432},
676 {3413, 3423, 3433}, {3414, 3424, 3434}};
677int4x1 i41 = {{4111, 4121, 4131, 4141}};
678int4x2 i42 = {{4211, 4221, 4231, 4241}, {4212, 4222, 4232, 4242}};
679int4x3 i43 = {{4311, 4321, 4331, 4341}, {4312, 4322, 4332, 4342},
680 {4313, 4323, 4333, 4343}};
681int4x4 i44 = {{4411, 4421, 4431, 4441}, {4412, 4422, 4432, 4442},
682 {4413, 4423, 4433, 4443}, {4414, 4424, 4434, 4444}};
683int i_2[2] = {0101, 0102};
684int1 i1_2[2] = {{1101}, {1102}};
685int2 i2_2[2] = {{2101, 2201}, {2102, 2202}};
686int3 i3_2[2] = {{3101, 3201, 3301}, {3102, 3202, 3302}};
687int4 i4_2[2] = {{4101, 4201, 4301, 4401}, {4102, 4202, 4302, 4402}};
688int1x1 i11_2[2] = {{11101}, {11102}};
689int1x2 i12_2[2] = {{12101, 12201}, {12102, 12202}};
690int1x3 i13_2[2] = {{13101, 13201, 13301}, {13102, 13202, 13302}};
691int1x4 i14_2[2] = {{14101, 14201, 14301, 14401}, {14102, 14202, 14302, 14402}};
692int2x1 i21_2[2] = {{{211101, 212101}}, {{211102, 212102}}};
693int2x2 i22_2[2] = {{{221101, 222101}, {221201, 222201}}, {{221102, 222102}, {221202, 222202}}};
694int2x3 i23_2[2] = {{{231101, 232101}, {231201, 232201}, {231301, 232301}}, {{231102, 232102},
695 {231202, 232202}, {231302, 232302}}};
696int2x4 i24_2[2] = {{{241101, 242101}, {241201, 242201}, {241301, 242301}, {241401, 242401}},
697 {{241102, 242102}, {241202, 242202}, {241302, 242302}, {241402, 242402}}};
698int3x1 i31_2[2] = {{{311101, 312101, 313101}}, {{311102, 312102, 313102}}};
699int3x2 i32_2[2] = {{{321101, 322101, 323101}, {321201, 322201, 323201}},
700 {{321102, 322102, 323102}, {321202, 322202, 323202}}};
701int3x3 i33_2[2] = {{{331101, 332101, 333101}, {331201, 332201, 333201},
702 {331301, 332301, 333301}}, {{331102, 332102, 333102}, {331202, 332202, 333202},
703 {331302, 332302, 333302}}};
704int3x4 i34_2[2] = {{{341101, 342101, 343101}, {341201, 342201, 343201},
705 {341301, 342301, 343301}, {341401, 342401, 343401}}, {{341102, 342102, 343102},
706 {341202, 342202, 343202}, {341302, 342302, 343302}, {341402, 342402, 343402}}};
707int4x1 i41_2[2] = {{{411101, 412101, 413101, 414101}}, {{411102, 412102, 413102, 414102}}};
708int4x2 i42_2[2] = {{{421101, 422101, 423101, 424101}, {421201, 422201, 423201, 424201}},
709 {{421102, 422102, 423102, 424102}, {421202, 422202, 423202, 424202}}};
710int4x3 i43_2[2] = {{{431101, 432101, 433101, 434101}, {431201, 432201, 433201, 434201},
711 {431301, 432301, 433301, 434301}}, {{431102, 432102, 433102, 434102},
712 {431202, 432202, 433202, 434202}, {431302, 432302, 433302, 434302}}};
713int4x4 i44_2[2] = {{{441101, 442101, 443101, 444101}, {441201, 442201, 443201, 444201},
714 {441301, 442301, 443301, 444301}, {441401, 442401, 443401, 444401}},
715 {{441102, 442102, 443102, 444102}, {441202, 442202, 443202, 444202},
716 {441302, 442302, 443302, 444302}, {441402, 442402, 443402, 444402}}};
717technique t { pass p { } }
718#endif
720{
7210xfeff0901, 0x00000b80, 0x00000000, 0x00000002, 0x00000000, 0x00000024, 0x00000000, 0x00000000,
7220x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000069, 0x00000002, 0x00000001, 0x0000004c,
7230x00000000, 0x00000000, 0x00000001, 0x00000001, 0x0000000b, 0x00000003, 0x00003169, 0x00000002,
7240x00000001, 0x00000078, 0x00000000, 0x00000000, 0x00000002, 0x00000001, 0x00000015, 0x00000016,
7250x00000003, 0x00003269, 0x00000002, 0x00000001, 0x000000a8, 0x00000000, 0x00000000, 0x00000003,
7260x00000001, 0x0000001f, 0x00000020, 0x00000021, 0x00000003, 0x00003369, 0x00000002, 0x00000001,
7270x000000dc, 0x00000000, 0x00000000, 0x00000004, 0x00000001, 0x00000029, 0x0000002a, 0x0000002b,
7280x0000002c, 0x00000003, 0x00003469, 0x00000002, 0x00000002, 0x00000104, 0x00000000, 0x00000000,
7290x00000001, 0x00000001, 0x0000006f, 0x00000004, 0x00313169, 0x00000002, 0x00000002, 0x00000130,
7300x00000000, 0x00000000, 0x00000001, 0x00000002, 0x00000079, 0x0000007a, 0x00000004, 0x00323169,
7310x00000002, 0x00000002, 0x00000160, 0x00000000, 0x00000000, 0x00000001, 0x00000003, 0x00000083,
7320x00000084, 0x00000085, 0x00000004, 0x00333169, 0x00000002, 0x00000002, 0x00000194, 0x00000000,
7330x00000000, 0x00000001, 0x00000004, 0x0000008d, 0x0000008e, 0x0000008f, 0x00000090, 0x00000004,
7340x00343169, 0x00000002, 0x00000002, 0x000001c0, 0x00000000, 0x00000000, 0x00000002, 0x00000001,
7350x0000083f, 0x00000849, 0x00000004, 0x00313269, 0x00000002, 0x00000002, 0x000001f4, 0x00000000,
7360x00000000, 0x00000002, 0x00000002, 0x000008a3, 0x000008ad, 0x000008a4, 0x000008ae, 0x00000004,
7370x00323269, 0x00000002, 0x00000002, 0x00000230, 0x00000000, 0x00000000, 0x00000002, 0x00000003,
7380x00000907, 0x00000911, 0x00000908, 0x00000912, 0x00000909, 0x00000913, 0x00000004, 0x00333269,
7390x00000002, 0x00000002, 0x00000274, 0x00000000, 0x00000000, 0x00000002, 0x00000004, 0x0000096b,
7400x00000975, 0x0000096c, 0x00000976, 0x0000096d, 0x00000977, 0x0000096e, 0x00000978, 0x00000004,
7410x00343269, 0x00000002, 0x00000002, 0x000002a4, 0x00000000, 0x00000000, 0x00000003, 0x00000001,
7420x00000c27, 0x00000c31, 0x00000c3b, 0x00000004, 0x00313369, 0x00000002, 0x00000002, 0x000002e0,
7430x00000000, 0x00000000, 0x00000003, 0x00000002, 0x00000c8b, 0x00000c95, 0x00000c9f, 0x00000c8c,
7440x00000c96, 0x00000ca0, 0x00000004, 0x00323369, 0x00000002, 0x00000002, 0x00000328, 0x00000000,
7450x00000000, 0x00000003, 0x00000003, 0x00000cef, 0x00000cf9, 0x00000d03, 0x00000cf0, 0x00000cfa,
7460x00000d04, 0x00000cf1, 0x00000cfb, 0x00000d05, 0x00000004, 0x00333369, 0x00000002, 0x00000002,
7470x0000037c, 0x00000000, 0x00000000, 0x00000003, 0x00000004, 0x00000d53, 0x00000d5d, 0x00000d67,
7480x00000d54, 0x00000d5e, 0x00000d68, 0x00000d55, 0x00000d5f, 0x00000d69, 0x00000d56, 0x00000d60,
7490x00000d6a, 0x00000004, 0x00343369, 0x00000002, 0x00000002, 0x000003b0, 0x00000000, 0x00000000,
7500x00000004, 0x00000001, 0x0000100f, 0x00001019, 0x00001023, 0x0000102d, 0x00000004, 0x00313469,
7510x00000002, 0x00000002, 0x000003f4, 0x00000000, 0x00000000, 0x00000004, 0x00000002, 0x00001073,
7520x0000107d, 0x00001087, 0x00001091, 0x00001074, 0x0000107e, 0x00001088, 0x00001092, 0x00000004,
7530x00323469, 0x00000002, 0x00000002, 0x00000448, 0x00000000, 0x00000000, 0x00000004, 0x00000003,
7540x000010d7, 0x000010e1, 0x000010eb, 0x000010f5, 0x000010d8, 0x000010e2, 0x000010ec, 0x000010f6,
7550x000010d9, 0x000010e3, 0x000010ed, 0x000010f7, 0x00000004, 0x00333469, 0x00000002, 0x00000002,
7560x000004ac, 0x00000000, 0x00000000, 0x00000004, 0x00000004, 0x0000113b, 0x00001145, 0x0000114f,
7570x00001159, 0x0000113c, 0x00001146, 0x00001150, 0x0000115a, 0x0000113d, 0x00001147, 0x00001151,
7580x0000115b, 0x0000113e, 0x00001148, 0x00001152, 0x0000115c, 0x00000004, 0x00343469, 0x00000002,
7590x00000000, 0x000004d8, 0x00000000, 0x00000002, 0x00000001, 0x00000001, 0x00000041, 0x00000042,
7600x00000004, 0x00325f69, 0x00000002, 0x00000001, 0x00000504, 0x00000000, 0x00000002, 0x00000001,
7610x00000001, 0x0000044d, 0x0000044e, 0x00000005, 0x325f3169, 0x00000000, 0x00000002, 0x00000001,
7620x0000053c, 0x00000000, 0x00000002, 0x00000002, 0x00000001, 0x00000835, 0x00000899, 0x00000836,
7630x0000089a, 0x00000005, 0x325f3269, 0x00000000, 0x00000002, 0x00000001, 0x0000057c, 0x00000000,
7640x00000002, 0x00000003, 0x00000001, 0x00000c1d, 0x00000c81, 0x00000ce5, 0x00000c1e, 0x00000c82,
7650x00000ce6, 0x00000005, 0x325f3369, 0x00000000, 0x00000002, 0x00000001, 0x000005c4, 0x00000000,
7660x00000002, 0x00000004, 0x00000001, 0x00001005, 0x00001069, 0x000010cd, 0x00001131, 0x00001006,
7670x0000106a, 0x000010ce, 0x00001132, 0x00000005, 0x325f3469, 0x00000000, 0x00000002, 0x00000002,
7680x000005f4, 0x00000000, 0x00000002, 0x00000001, 0x00000001, 0x00002b5d, 0x00002b5e, 0x00000006,
7690x5f313169, 0x00000032, 0x00000002, 0x00000002, 0x0000062c, 0x00000000, 0x00000002, 0x00000001,
7700x00000002, 0x00002f45, 0x00002fa9, 0x00002f46, 0x00002faa, 0x00000006, 0x5f323169, 0x00000032,
7710x00000002, 0x00000002, 0x0000066c, 0x00000000, 0x00000002, 0x00000001, 0x00000003, 0x0000332d,
7720x00003391, 0x000033f5, 0x0000332e, 0x00003392, 0x000033f6, 0x00000006, 0x5f333169, 0x00000032,
7730x00000002, 0x00000002, 0x000006b4, 0x00000000, 0x00000002, 0x00000001, 0x00000004, 0x00003715,
7740x00003779, 0x000037dd, 0x00003841, 0x00003716, 0x0000377a, 0x000037de, 0x00003842, 0x00000006,
7750x5f343169, 0x00000032, 0x00000002, 0x00000002, 0x000006ec, 0x00000000, 0x00000002, 0x00000002,
7760x00000001, 0x0003389d, 0x00033c85, 0x0003389e, 0x00033c86, 0x00000006, 0x5f313269, 0x00000032,
7770x00000002, 0x00000002, 0x00000734, 0x00000000, 0x00000002, 0x00000002, 0x00000002, 0x00035fad,
7780x00036395, 0x00036011, 0x000363f9, 0x00035fae, 0x00036396, 0x00036012, 0x000363fa, 0x00000006,
7790x5f323269, 0x00000032, 0x00000002, 0x00000002, 0x0000078c, 0x00000000, 0x00000002, 0x00000002,
7800x00000003, 0x000386bd, 0x00038aa5, 0x00038721, 0x00038b09, 0x00038785, 0x00038b6d, 0x000386be,
7810x00038aa6, 0x00038722, 0x00038b0a, 0x00038786, 0x00038b6e, 0x00000006, 0x5f333269, 0x00000032,
7820x00000002, 0x00000002, 0x000007f4, 0x00000000, 0x00000002, 0x00000002, 0x00000004, 0x0003adcd,
7830x0003b1b5, 0x0003ae31, 0x0003b219, 0x0003ae95, 0x0003b27d, 0x0003aef9, 0x0003b2e1, 0x0003adce,
7840x0003b1b6, 0x0003ae32, 0x0003b21a, 0x0003ae96, 0x0003b27e, 0x0003aefa, 0x0003b2e2, 0x00000006,
7850x5f343269, 0x00000032, 0x00000002, 0x00000002, 0x00000834, 0x00000000, 0x00000002, 0x00000003,
7860x00000001, 0x0004bf3d, 0x0004c325, 0x0004c70d, 0x0004bf3e, 0x0004c326, 0x0004c70e, 0x00000006,
7870x5f313369, 0x00000032, 0x00000002, 0x00000002, 0x0000088c, 0x00000000, 0x00000002, 0x00000003,
7880x00000002, 0x0004e64d, 0x0004ea35, 0x0004ee1d, 0x0004e6b1, 0x0004ea99, 0x0004ee81, 0x0004e64e,
7890x0004ea36, 0x0004ee1e, 0x0004e6b2, 0x0004ea9a, 0x0004ee82, 0x00000006, 0x5f323369, 0x00000032,
7900x00000002, 0x00000002, 0x000008fc, 0x00000000, 0x00000002, 0x00000003, 0x00000003, 0x00050d5d,
7910x00051145, 0x0005152d, 0x00050dc1, 0x000511a9, 0x00051591, 0x00050e25, 0x0005120d, 0x000515f5,
7920x00050d5e, 0x00051146, 0x0005152e, 0x00050dc2, 0x000511aa, 0x00051592, 0x00050e26, 0x0005120e,
7930x000515f6, 0x00000006, 0x5f333369, 0x00000032, 0x00000002, 0x00000002, 0x00000984, 0x00000000,
7940x00000002, 0x00000003, 0x00000004, 0x0005346d, 0x00053855, 0x00053c3d, 0x000534d1, 0x000538b9,
7950x00053ca1, 0x00053535, 0x0005391d, 0x00053d05, 0x00053599, 0x00053981, 0x00053d69, 0x0005346e,
7960x00053856, 0x00053c3e, 0x000534d2, 0x000538ba, 0x00053ca2, 0x00053536, 0x0005391e, 0x00053d06,
7970x0005359a, 0x00053982, 0x00053d6a, 0x00000006, 0x5f343369, 0x00000032, 0x00000002, 0x00000002,
7980x000009cc, 0x00000000, 0x00000002, 0x00000004, 0x00000001, 0x000645dd, 0x000649c5, 0x00064dad,
7990x00065195, 0x000645de, 0x000649c6, 0x00064dae, 0x00065196, 0x00000006, 0x5f313469, 0x00000032,
8000x00000002, 0x00000002, 0x00000a34, 0x00000000, 0x00000002, 0x00000004, 0x00000002, 0x00066ced,
8010x000670d5, 0x000674bd, 0x000678a5, 0x00066d51, 0x00067139, 0x00067521, 0x00067909, 0x00066cee,
8020x000670d6, 0x000674be, 0x000678a6, 0x00066d52, 0x0006713a, 0x00067522, 0x0006790a, 0x00000006,
8030x5f323469, 0x00000032, 0x00000002, 0x00000002, 0x00000abc, 0x00000000, 0x00000002, 0x00000004,
8040x00000003, 0x000693fd, 0x000697e5, 0x00069bcd, 0x00069fb5, 0x00069461, 0x00069849, 0x00069c31,
8050x0006a019, 0x000694c5, 0x000698ad, 0x00069c95, 0x0006a07d, 0x000693fe, 0x000697e6, 0x00069bce,
8060x00069fb6, 0x00069462, 0x0006984a, 0x00069c32, 0x0006a01a, 0x000694c6, 0x000698ae, 0x00069c96,
8070x0006a07e, 0x00000006, 0x5f333469, 0x00000032, 0x00000002, 0x00000002, 0x00000b64, 0x00000000,
8080x00000002, 0x00000004, 0x00000004, 0x0006bb0d, 0x0006bef5, 0x0006c2dd, 0x0006c6c5, 0x0006bb71,
8090x0006bf59, 0x0006c341, 0x0006c729, 0x0006bbd5, 0x0006bfbd, 0x0006c3a5, 0x0006c78d, 0x0006bc39,
8100x0006c021, 0x0006c409, 0x0006c7f1, 0x0006bb0e, 0x0006bef6, 0x0006c2de, 0x0006c6c6, 0x0006bb72,
8110x0006bf5a, 0x0006c342, 0x0006c72a, 0x0006bbd6, 0x0006bfbe, 0x0006c3a6, 0x0006c78e, 0x0006bc3a,
8120x0006c022, 0x0006c40a, 0x0006c7f2, 0x00000006, 0x5f343469, 0x00000032, 0x00000002, 0x00000070,
8130x00000002, 0x00000074, 0x0000002a, 0x00000001, 0x00000001, 0x00000001, 0x00000004, 0x00000020,
8140x00000000, 0x00000000, 0x0000002c, 0x00000048, 0x00000000, 0x00000000, 0x00000054, 0x00000070,
8150x00000000, 0x00000000, 0x00000080, 0x0000009c, 0x00000000, 0x00000000, 0x000000b0, 0x000000cc,
8160x00000000, 0x00000000, 0x000000e4, 0x00000100, 0x00000000, 0x00000000, 0x0000010c, 0x00000128,
8170x00000000, 0x00000000, 0x00000138, 0x00000154, 0x00000000, 0x00000000, 0x00000168, 0x00000184,
8180x00000000, 0x00000000, 0x0000019c, 0x000001b8, 0x00000000, 0x00000000, 0x000001c8, 0x000001e4,
8190x00000000, 0x00000000, 0x000001fc, 0x00000218, 0x00000000, 0x00000000, 0x00000238, 0x00000254,
8200x00000000, 0x00000000, 0x0000027c, 0x00000298, 0x00000000, 0x00000000, 0x000002ac, 0x000002c8,
8210x00000000, 0x00000000, 0x000002e8, 0x00000304, 0x00000000, 0x00000000, 0x00000330, 0x0000034c,
8220x00000000, 0x00000000, 0x00000384, 0x000003a0, 0x00000000, 0x00000000, 0x000003b8, 0x000003d4,
8230x00000000, 0x00000000, 0x000003fc, 0x00000418, 0x00000000, 0x00000000, 0x00000450, 0x0000046c,
8240x00000000, 0x00000000, 0x000004b4, 0x000004d0, 0x00000000, 0x00000000, 0x000004e0, 0x000004fc,
8250x00000000, 0x00000000, 0x00000510, 0x0000052c, 0x00000000, 0x00000000, 0x00000548, 0x00000564,
8260x00000000, 0x00000000, 0x00000588, 0x000005a4, 0x00000000, 0x00000000, 0x000005d0, 0x000005ec,
8270x00000000, 0x00000000, 0x00000600, 0x0000061c, 0x00000000, 0x00000000, 0x00000638, 0x00000654,
8280x00000000, 0x00000000, 0x00000678, 0x00000694, 0x00000000, 0x00000000, 0x000006c0, 0x000006dc,
8290x00000000, 0x00000000, 0x000006f8, 0x00000714, 0x00000000, 0x00000000, 0x00000740, 0x0000075c,
8300x00000000, 0x00000000, 0x00000798, 0x000007b4, 0x00000000, 0x00000000, 0x00000800, 0x0000081c,
8310x00000000, 0x00000000, 0x00000840, 0x0000085c, 0x00000000, 0x00000000, 0x00000898, 0x000008b4,
8320x00000000, 0x00000000, 0x00000908, 0x00000924, 0x00000000, 0x00000000, 0x00000990, 0x000009ac,
8330x00000000, 0x00000000, 0x000009d8, 0x000009f4, 0x00000000, 0x00000000, 0x00000a40, 0x00000a5c,
8340x00000000, 0x00000000, 0x00000ac8, 0x00000ae4, 0x00000000, 0x00000000, 0x00000b78, 0x00000000,
8350x00000001, 0x00000b70, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
836};
837
839{
840 {"i", {"i", NULL, D3DXPC_SCALAR, D3DXPT_INT, 1, 1, 0, 0, 0, 0, 4}, 10},
841 {"i1", {"i1", NULL, D3DXPC_VECTOR, D3DXPT_INT, 1, 1, 0, 0, 0, 0, 4}, 20},
842 {"i2", {"i2", NULL, D3DXPC_VECTOR, D3DXPT_INT, 1, 2, 0, 0, 0, 0, 8}, 30},
843 {"i3", {"i3", NULL, D3DXPC_VECTOR, D3DXPT_INT, 1, 3, 0, 0, 0, 0, 12}, 41},
844 {"i4", {"i4", NULL, D3DXPC_VECTOR, D3DXPT_INT, 1, 4, 0, 0, 0, 0, 16}, 53},
845 {"i11", {"i11", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 1, 1, 0, 0, 0, 0, 4}, 66},
846 {"i12", {"i12", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 1, 2, 0, 0, 0, 0, 8}, 76},
847 {"i13", {"i13", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 1, 3, 0, 0, 0, 0, 12}, 87},
848 {"i14", {"i14", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 1, 4, 0, 0, 0, 0, 16}, 99},
849 {"i21", {"i21", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 2, 1, 0, 0, 0, 0, 8}, 112},
850 {"i22", {"i22", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 2, 2, 0, 0, 0, 0, 16}, 123},
851 {"i23", {"i23", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 2, 3, 0, 0, 0, 0, 24}, 136},
852 {"i24", {"i24", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 2, 4, 0, 0, 0, 0, 32}, 151},
853 {"i31", {"i31", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 3, 1, 0, 0, 0, 0, 12}, 168},
854 {"i32", {"i32", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 3, 2, 0, 0, 0, 0, 24}, 180},
855 {"i33", {"i33", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 3, 3, 0, 0, 0, 0, 36}, 195},
856 {"i34", {"i34", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 3, 4, 0, 0, 0, 0, 48}, 213},
857 {"i41", {"i41", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 4, 1, 0, 0, 0, 0, 16}, 234},
858 {"i42", {"i42", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 4, 2, 0, 0, 0, 0, 32}, 247},
859 {"i43", {"i43", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 4, 3, 0, 0, 0, 0, 48}, 264},
860 {"i44", {"i44", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 4, 4, 0, 0, 0, 0, 64}, 285},
861 {"i_2", {"i_2", NULL, D3DXPC_SCALAR, D3DXPT_INT, 1, 1, 2, 0, 0, 0, 8}, 310},
862 {"i1_2", {"i1_2", NULL, D3DXPC_VECTOR, D3DXPT_INT, 1, 1, 2, 0, 0, 0, 8}, 321},
863 {"i2_2", {"i2_2", NULL, D3DXPC_VECTOR, D3DXPT_INT, 1, 2, 2, 0, 0, 0, 16}, 333},
864 {"i3_2", {"i3_2", NULL, D3DXPC_VECTOR, D3DXPT_INT, 1, 3, 2, 0, 0, 0, 24}, 347},
865 {"i4_2", {"i4_2", NULL, D3DXPC_VECTOR, D3DXPT_INT, 1, 4, 2, 0, 0, 0, 32}, 363},
866 {"i11_2", {"i11_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 1, 1, 2, 0, 0, 0, 8}, 381},
867 {"i12_2", {"i12_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 1, 2, 2, 0, 0, 0, 16}, 393},
868 {"i13_2", {"i13_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 1, 3, 2, 0, 0, 0, 24}, 407},
869 {"i14_2", {"i14_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 1, 4, 2, 0, 0, 0, 32}, 423},
870 {"i21_2", {"i21_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 2, 1, 2, 0, 0, 0, 16}, 441},
871 {"i22_2", {"i22_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 2, 2, 2, 0, 0, 0, 32}, 455},
872 {"i23_2", {"i23_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 2, 3, 2, 0, 0, 0, 48}, 473},
873 {"i24_2", {"i24_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 2, 4, 2, 0, 0, 0, 64}, 495},
874 {"i31_2", {"i31_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 3, 1, 2, 0, 0, 0, 24}, 521},
875 {"i32_2", {"i32_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 3, 2, 2, 0, 0, 0, 48}, 537},
876 {"i33_2", {"i33_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 3, 3, 2, 0, 0, 0, 72}, 559},
877 {"i34_2", {"i34_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 3, 4, 2, 0, 0, 0, 96}, 587},
878 {"i41_2", {"i41_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 4, 1, 2, 0, 0, 0, 32}, 621},
879 {"i42_2", {"i42_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 4, 2, 2, 0, 0, 0, 64}, 639},
880 {"i43_2", {"i43_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 4, 3, 2, 0, 0, 0, 96}, 665},
881 {"i44_2", {"i44_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 4, 4, 2, 0, 0, 0, 128}, 699},
882};
883
884/*
885 * fxc.exe /Tfx_2_0
886 */
887#if 0
888string s = "test";
889string s_2[2] = {"test1", "test2"};
890texture2D tex;
891Vertexshader v;
892Vertexshader v_2[2];
893Pixelshader p;
894Pixelshader p_2[2];
895technique t { pass p { } }
896#endif
898{
8990xfeff0901, 0x00000100, 0x00000000, 0x00000004, 0x00000004, 0x0000001c, 0x00000000, 0x00000000,
9000x00000001, 0x00000002, 0x00000073, 0x00000004, 0x00000004, 0x00000040, 0x00000000, 0x00000002,
9010x00000002, 0x00000003, 0x00000004, 0x00325f73, 0x00000007, 0x00000004, 0x00000060, 0x00000000,
9020x00000000, 0x00000004, 0x00000004, 0x00786574, 0x00000010, 0x00000004, 0x00000080, 0x00000000,
9030x00000000, 0x00000005, 0x00000002, 0x00000076, 0x00000010, 0x00000004, 0x000000a4, 0x00000000,
9040x00000002, 0x00000006, 0x00000007, 0x00000004, 0x00325f76, 0x0000000f, 0x00000004, 0x000000c4,
9050x00000000, 0x00000000, 0x00000008, 0x00000002, 0x00000070, 0x0000000f, 0x00000004, 0x000000e8,
9060x00000000, 0x00000002, 0x00000009, 0x0000000a, 0x00000004, 0x00325f70, 0x00000002, 0x00000070,
9070x00000002, 0x00000074, 0x00000007, 0x00000001, 0x00000007, 0x0000000b, 0x00000004, 0x00000018,
9080x00000000, 0x00000000, 0x00000024, 0x00000038, 0x00000000, 0x00000000, 0x00000048, 0x0000005c,
9090x00000000, 0x00000000, 0x00000068, 0x0000007c, 0x00000000, 0x00000000, 0x00000088, 0x0000009c,
9100x00000000, 0x00000000, 0x000000ac, 0x000000c0, 0x00000000, 0x00000000, 0x000000cc, 0x000000e0,
9110x00000000, 0x00000000, 0x000000f8, 0x00000000, 0x00000001, 0x000000f0, 0x00000000, 0x00000000,
9120x0000000a, 0x00000000, 0x00000009, 0x00000000, 0x0000000a, 0x00000000, 0x00000008, 0x00000000,
9130x00000006, 0x00000000, 0x00000007, 0x00000000, 0x00000005, 0x00000000, 0x00000004, 0x00000000,
9140x00000002, 0x00000006, 0x74736574, 0x00000031, 0x00000003, 0x00000006, 0x74736574, 0x00000032,
9150x00000001, 0x00000005, 0x74736574, 0x00000000,
916};
917
919{
920 {"s", {"s", NULL, D3DXPC_OBJECT, D3DXPT_STRING, 0, 0, 0, 0, 0, 0, sizeof(void *)}, 0},
921 {"s_2", {"s_2", NULL, D3DXPC_OBJECT, D3DXPT_STRING, 0, 0, 2, 0, 0, 0, 2 * sizeof(void *)}, 0},
922 {"tex", {"tex", NULL, D3DXPC_OBJECT, D3DXPT_TEXTURE2D, 0, 0, 0, 0, 0, 0, sizeof(void *)}, 0},
923 {"v", {"v", NULL, D3DXPC_OBJECT, D3DXPT_VERTEXSHADER, 0, 0, 0, 0, 0, 0, sizeof(void *)}, 0},
924 {"v_2", {"v_2", NULL, D3DXPC_OBJECT, D3DXPT_VERTEXSHADER, 0, 0, 2, 0, 0, 0, 2 * sizeof(void *)}, 0},
925 {"p", {"p", NULL, D3DXPC_OBJECT, D3DXPT_PIXELSHADER, 0, 0, 0, 0, 0, 0, sizeof(void *)}, 0},
926 {"p_2", {"p_2", NULL, D3DXPC_OBJECT, D3DXPT_PIXELSHADER, 0, 0, 2, 0, 0, 0, 2 * sizeof(void *)}, 0},
927};
928
929/*
930 * fxc.exe /Tfx_2_0
931 */
932#if 0
933float3 f3 = {-3.1, 153.2, 283.3};
934float3 f3min = {-31.1, -31.2, -31.3};
935float3 f3max = {320.1, 320.2, 320.3};
936float4 f4 = {-4.1, 154.2, 284.3, 34.4};
937float4 f4min = {-41.1, -41.2, -41.3, -41.4};
938float4 f4max = {420.1, 42.20, 420.3, 420.4};
939technique t { pass p { } }
940#endif
942{
9430xfeff0901, 0x00000150, 0x00000000, 0x00000003, 0x00000001, 0x0000002c, 0x00000000, 0x00000000,
9440x00000003, 0x00000001, 0xc0466666, 0x43193333, 0x438da666, 0x00000003, 0x00003366, 0x00000003,
9450x00000001, 0x0000005c, 0x00000000, 0x00000000, 0x00000003, 0x00000001, 0xc1f8cccd, 0xc1f9999a,
9460xc1fa6666, 0x00000006, 0x696d3366, 0x0000006e, 0x00000003, 0x00000001, 0x00000090, 0x00000000,
9470x00000000, 0x00000003, 0x00000001, 0x43a00ccd, 0x43a0199a, 0x43a02666, 0x00000006, 0x616d3366,
9480x00000078, 0x00000003, 0x00000001, 0x000000c8, 0x00000000, 0x00000000, 0x00000004, 0x00000001,
9490xc0833333, 0x431a3333, 0x438e2666, 0x4209999a, 0x00000003, 0x00003466, 0x00000003, 0x00000001,
9500x000000fc, 0x00000000, 0x00000000, 0x00000004, 0x00000001, 0xc2246666, 0xc224cccd, 0xc2253333,
9510xc225999a, 0x00000006, 0x696d3466, 0x0000006e, 0x00000003, 0x00000001, 0x00000134, 0x00000000,
9520x00000000, 0x00000004, 0x00000001, 0x43d20ccd, 0x4228cccd, 0x43d22666, 0x43d23333, 0x00000006,
9530x616d3466, 0x00000078, 0x00000002, 0x00000070, 0x00000002, 0x00000074, 0x00000006, 0x00000001,
9540x00000001, 0x00000001, 0x00000004, 0x00000020, 0x00000000, 0x00000000, 0x00000034, 0x00000050,
9550x00000000, 0x00000000, 0x00000068, 0x00000084, 0x00000000, 0x00000000, 0x0000009c, 0x000000b8,
9560x00000000, 0x00000000, 0x000000d0, 0x000000ec, 0x00000000, 0x00000000, 0x00000108, 0x00000124,
9570x00000000, 0x00000000, 0x00000148, 0x00000000, 0x00000001, 0x00000140, 0x00000000, 0x00000000,
9580x00000000, 0x00000000,
959};
960
962{
963 {"f3", {"f3", NULL, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 3, 0, 0, 0, 0, 12}, 10},
964 {"f3min", {"f3min", NULL, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 3, 0, 0, 0, 0, 12}, 22},
965 {"f3max", {"f3max", NULL, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 3, 0, 0, 0, 0, 12}, 35},
966 {"f4", {"f4", NULL, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 4, 0, 0, 0, 0, 16}, 48},
967 {"f4min", {"f4min", NULL, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 4, 0, 0, 0, 0, 16}, 61},
968 {"f4max", {"f4max", NULL, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 4, 0, 0, 0, 0, 16}, 75},
969};
970
971#define ADD_PARAMETER_VALUE(x) {\
972 test_effect_parameter_value_blob_ ## x,\
973 sizeof(test_effect_parameter_value_blob_ ## x),\
974 test_effect_parameter_value_result_ ## x,\
975 ARRAY_SIZE(test_effect_parameter_value_result_ ## x),\
976}
977
978static const struct
979{
980 const DWORD *blob;
984}
986{
987 ADD_PARAMETER_VALUE(float),
989 ADD_PARAMETER_VALUE(object),
990 ADD_PARAMETER_VALUE(special),
992
993#undef ADD_PARAMETER_VALUE
994
995/* Multiple of 16 to cover complete matrices */
996#define EFFECT_PARAMETER_VALUE_ARRAY_SIZE 48
997/* Constants for special INT/FLOAT conversation */
998#define INT_FLOAT_MULTI 255.0f
999#define INT_FLOAT_MULTI_INVERSE (1/INT_FLOAT_MULTI)
1000
1002 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1003{
1004 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1005 const char *res_full_name = res->full_name;
1007 HRESULT hr;
1008 UINT l;
1009
1010 memset(value, 0xab, sizeof(value));
1011 hr = effect->lpVtbl->GetValue(effect, parameter, value, res_desc->Bytes);
1012 if (res_desc->Class == D3DXPC_SCALAR
1013 || res_desc->Class == D3DXPC_VECTOR
1014 || res_desc->Class == D3DXPC_MATRIX_ROWS)
1015 {
1016 ok(hr == D3D_OK, "%u - %s: GetValue failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1017
1018 for (l = 0; l < res_desc->Bytes / sizeof(*value); ++l)
1019 {
1020 ok(value[l] == res_value[l], "%u - %s: GetValue value[%u] failed, got %#x, expected %#x\n",
1021 i, res_full_name, l, value[l], res_value[l]);
1022 }
1023
1024 for (l = res_desc->Bytes / sizeof(*value); l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l)
1025 {
1026 ok(value[l] == 0xabababab, "%u - %s: GetValue value[%u] failed, got %#x, expected %#x\n",
1027 i, res_full_name, l, value[l], 0xabababab);
1028 }
1029 }
1030 else if (res_desc->Class == D3DXPC_OBJECT)
1031 {
1032 switch (res_desc->Type)
1033 {
1034 case D3DXPT_PIXELSHADER:
1036 case D3DXPT_TEXTURE2D:
1037 ok(hr == D3D_OK, "%u - %s: GetValue failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1038
1039 for (l = 0; l < (res_desc->Elements ? res_desc->Elements : 1); ++l)
1040 {
1041 IUnknown *unk = *((IUnknown **)value + l);
1042 if (unk) IUnknown_Release(unk);
1043 }
1044 break;
1045
1046 case D3DXPT_STRING:
1047 ok(hr == D3D_OK, "%u - %s: GetValue failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1048 break;
1049
1050 default:
1051 ok(0, "Type is %u, this should not happen!\n", res_desc->Type);
1052 break;
1053 }
1054 }
1055 else
1056 {
1057 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetValue failed, got %#x, expected %#x\n",
1058 i, res_full_name, hr, D3DERR_INVALIDCALL);
1059
1060 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l)
1061 {
1062 ok(value[l] == 0xabababab, "%u - %s: GetValue value[%u] failed, got %#x, expected %#x\n",
1063 i, res_full_name, l, value[l], 0xabababab);
1064 }
1065 }
1066}
1067
1069 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1070{
1071 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1072 const char *res_full_name = res->full_name;
1073 BOOL bvalue = 0xabababab;
1074 HRESULT hr;
1075
1076 hr = effect->lpVtbl->GetBool(effect, parameter, &bvalue);
1077 if (!res_desc->Elements && res_desc->Rows == 1 && res_desc->Columns == 1)
1078 {
1079 ok(hr == D3D_OK, "%u - %s: GetBool failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1080 ok(bvalue == get_bool(res_value), "%u - %s: GetBool bvalue failed, got %#x, expected %#x\n",
1081 i, res_full_name, bvalue, get_bool(res_value));
1082 }
1083 else
1084 {
1085 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetBool failed, got %#x, expected %#x\n",
1086 i, res_full_name, hr, D3DERR_INVALIDCALL);
1087 ok(bvalue == 0xabababab, "%u - %s: GetBool bvalue failed, got %#x, expected %#x\n",
1088 i, res_full_name, bvalue, 0xabababab);
1089 }
1090}
1091
1093 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1094{
1095 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1096 const char *res_full_name = res->full_name;
1098 HRESULT hr;
1099 UINT l, err = 0;
1100
1101 memset(bavalue, 0xab, sizeof(bavalue));
1102 hr = effect->lpVtbl->GetBoolArray(effect, parameter, bavalue, res_desc->Bytes / sizeof(*bavalue));
1103 if (res_desc->Class == D3DXPC_SCALAR
1104 || res_desc->Class == D3DXPC_VECTOR
1105 || res_desc->Class == D3DXPC_MATRIX_ROWS)
1106 {
1107 ok(hr == D3D_OK, "%u - %s: GetBoolArray failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1108
1109 for (l = 0; l < res_desc->Bytes / sizeof(*bavalue); ++l)
1110 {
1111 if (bavalue[l] != get_bool(&res_value[l])) ++err;
1112 }
1113
1114 for (l = res_desc->Bytes / sizeof(*bavalue); l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l)
1115 {
1116 if (bavalue[l] != 0xabababab) ++err;
1117 }
1118 }
1119 else
1120 {
1121 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetBoolArray failed, got %#x, expected %#x\n",
1122 i, res_full_name, hr, D3DERR_INVALIDCALL);
1123
1124 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (bavalue[l] != 0xabababab) ++err;
1125 }
1126 ok(!err, "%u - %s: GetBoolArray failed with %u errors\n", i, res_full_name, err);
1127}
1128
1130 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1131{
1132 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1133 const char *res_full_name = res->full_name;
1134 INT ivalue = 0xabababab;
1135 HRESULT hr;
1136
1137 hr = effect->lpVtbl->GetInt(effect, parameter, &ivalue);
1138 if (!res_desc->Elements && res_desc->Columns == 1 && res_desc->Rows == 1)
1139 {
1140 ok(hr == D3D_OK, "%u - %s: GetInt failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1141 ok(ivalue == get_int(res_desc->Type, res_value), "%u - %s: GetInt ivalue failed, got %i, expected %i\n",
1142 i, res_full_name, ivalue, get_int(res_desc->Type, res_value));
1143 }
1144 else if(!res_desc->Elements && res_desc->Type == D3DXPT_FLOAT &&
1145 ((res_desc->Class == D3DXPC_VECTOR && res_desc->Columns != 2) ||
1146 (res_desc->Class == D3DXPC_MATRIX_ROWS && res_desc->Rows != 2 && res_desc->Columns == 1)))
1147 {
1148 INT tmp;
1149
1150 ok(hr == D3D_OK, "%u - %s: GetInt failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1151
1152 tmp = (INT)(min(max(0.0f, *((FLOAT *)res_value + 2)), 1.0f) * INT_FLOAT_MULTI);
1153 tmp += ((INT)(min(max(0.0f, *((FLOAT *)res_value + 1)), 1.0f) * INT_FLOAT_MULTI)) << 8;
1154 tmp += ((INT)(min(max(0.0f, *((FLOAT *)res_value + 0)), 1.0f) * INT_FLOAT_MULTI)) << 16;
1155 if (res_desc->Columns * res_desc->Rows > 3)
1156 {
1157 tmp += ((INT)(min(max(0.0f, *((FLOAT *)res_value + 3)), 1.0f) * INT_FLOAT_MULTI)) << 24;
1158 }
1159
1160 ok(ivalue == tmp, "%u - %s: GetInt ivalue failed, got %x, expected %x\n",
1161 i, res_full_name, ivalue, tmp);
1162 }
1163 else
1164 {
1165 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetInt failed, got %#x, expected %#x\n",
1166 i, res_full_name, hr, D3DERR_INVALIDCALL);
1167 ok(ivalue == 0xabababab, "%u - %s: GetInt ivalue failed, got %i, expected %i\n",
1168 i, res_full_name, ivalue, 0xabababab);
1169 }
1170}
1171
1173 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1174{
1175 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1176 const char *res_full_name = res->full_name;
1178 HRESULT hr;
1179 UINT l, err = 0;
1180
1181 memset(iavalue, 0xab, sizeof(iavalue));
1182 hr = effect->lpVtbl->GetIntArray(effect, parameter, iavalue, res_desc->Bytes / sizeof(*iavalue));
1183 if (res_desc->Class == D3DXPC_SCALAR
1184 || res_desc->Class == D3DXPC_VECTOR
1185 || res_desc->Class == D3DXPC_MATRIX_ROWS)
1186 {
1187 ok(hr == D3D_OK, "%u - %s: GetIntArray failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1188
1189 for (l = 0; l < res_desc->Bytes / sizeof(*iavalue); ++l)
1190 {
1191 if (iavalue[l] != get_int(res_desc->Type, &res_value[l])) ++err;
1192 }
1193
1194 for (l = res_desc->Bytes / sizeof(*iavalue); l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l)
1195 {
1196 if (iavalue[l] != 0xabababab) ++err;
1197 }
1198 }
1199 else
1200 {
1201 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetIntArray failed, got %#x, expected %#x\n",
1202 i, res_full_name, hr, D3DERR_INVALIDCALL);
1203
1204 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (iavalue[l] != 0xabababab) ++err;
1205 }
1206 ok(!err, "%u - %s: GetIntArray failed with %u errors\n", i, res_full_name, err);
1207}
1208
1210 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1211{
1212 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1213 const char *res_full_name = res->full_name;
1214 HRESULT hr;
1215 DWORD cmp = 0xabababab;
1216 FLOAT fvalue = *(FLOAT *)&cmp;
1217
1218 hr = effect->lpVtbl->GetFloat(effect, parameter, &fvalue);
1219 if (!res_desc->Elements && res_desc->Columns == 1 && res_desc->Rows == 1)
1220 {
1221 ok(hr == D3D_OK, "%u - %s: GetFloat failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1222 ok(compare_float(fvalue, get_float(res_desc->Type, res_value), 512), "%u - %s: GetFloat fvalue failed, got %f, expected %f\n",
1223 i, res_full_name, fvalue, get_float(res_desc->Type, res_value));
1224 }
1225 else
1226 {
1227 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetFloat failed, got %#x, expected %#x\n",
1228 i, res_full_name, hr, D3DERR_INVALIDCALL);
1229 ok(fvalue == *(FLOAT *)&cmp, "%u - %s: GetFloat fvalue failed, got %f, expected %f\n",
1230 i, res_full_name, fvalue, *(FLOAT *)&cmp);
1231 }
1232}
1233
1235 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1236{
1237 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1238 const char *res_full_name = res->full_name;
1240 HRESULT hr;
1241 UINT l, err = 0;
1242 DWORD cmp = 0xabababab;
1243
1244 memset(favalue, 0xab, sizeof(favalue));
1245 hr = effect->lpVtbl->GetFloatArray(effect, parameter, favalue, res_desc->Bytes / sizeof(*favalue));
1246 if (res_desc->Class == D3DXPC_SCALAR
1247 || res_desc->Class == D3DXPC_VECTOR
1248 || res_desc->Class == D3DXPC_MATRIX_ROWS)
1249 {
1250 ok(hr == D3D_OK, "%u - %s: GetFloatArray failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1251
1252 for (l = 0; l < res_desc->Bytes / sizeof(*favalue); ++l)
1253 {
1254 if (!compare_float(favalue[l], get_float(res_desc->Type, &res_value[l]), 512)) ++err;
1255 }
1256
1257 for (l = res_desc->Bytes / sizeof(*favalue); l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l)
1258 {
1259 if (favalue[l] != *(FLOAT *)&cmp) ++err;
1260 }
1261 }
1262 else
1263 {
1264 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetFloatArray failed, got %#x, expected %#x\n",
1265 i, res_full_name, hr, D3DERR_INVALIDCALL);
1266
1267 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (favalue[l] != *(FLOAT *)&cmp) ++err;
1268 }
1269 ok(!err, "%u - %s: GetFloatArray failed with %u errors\n", i, res_full_name, err);
1270}
1271
1273 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1274{
1275 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1276 const char *res_full_name = res->full_name;
1277 HRESULT hr;
1278 DWORD cmp = 0xabababab;
1279 FLOAT fvalue[4];
1280 UINT l, err = 0;
1281
1282 memset(fvalue, 0xab, sizeof(fvalue));
1283 hr = effect->lpVtbl->GetVector(effect, parameter, (D3DXVECTOR4 *)&fvalue);
1284 if (!res_desc->Elements &&
1285 (res_desc->Class == D3DXPC_SCALAR || res_desc->Class == D3DXPC_VECTOR) &&
1286 res_desc->Type == D3DXPT_INT && res_desc->Bytes == 4)
1287 {
1288 DWORD tmp;
1289
1290 ok(hr == D3D_OK, "%u - %s: GetVector failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1291
1292 tmp = (DWORD)(*(fvalue + 2) * INT_FLOAT_MULTI);
1293 tmp += ((DWORD)(*(fvalue + 1) * INT_FLOAT_MULTI)) << 8;
1294 tmp += ((DWORD)(*fvalue * INT_FLOAT_MULTI)) << 16;
1295 tmp += ((DWORD)(*(fvalue + 3) * INT_FLOAT_MULTI)) << 24;
1296
1297 if (*res_value != tmp) ++err;
1298 }
1299 else if (!res_desc->Elements && (res_desc->Class == D3DXPC_SCALAR || res_desc->Class == D3DXPC_VECTOR))
1300 {
1301 ok(hr == D3D_OK, "%u - %s: GetVector failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1302
1303 for (l = 0; l < res_desc->Columns; ++l)
1304 {
1305 if (!compare_float(fvalue[l], get_float(res_desc->Type, &res_value[l]), 512)) ++err;
1306 }
1307
1308 for (l = res_desc->Columns; l < 4; ++l) if (fvalue[l] != 0.0f) ++err;
1309 }
1310 else
1311 {
1312 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetVector failed, got %#x, expected %#x\n",
1313 i, res_full_name, hr, D3DERR_INVALIDCALL);
1314
1315 for (l = 0; l < 4; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1316 }
1317 ok(!err, "%u - %s: GetVector failed with %u errors\n", i, res_full_name, err);
1318}
1319
1321 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1322{
1323 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1324 const char *res_full_name = res->full_name;
1325 HRESULT hr;
1326 DWORD cmp = 0xabababab;
1328 UINT l, k, element, err = 0;
1329
1330 for (element = 0; element <= res_desc->Elements + 1; ++element)
1331 {
1332 memset(fvalue, 0xab, sizeof(fvalue));
1333 hr = effect->lpVtbl->GetVectorArray(effect, parameter, (D3DXVECTOR4 *)&fvalue, element);
1334 if (!element)
1335 {
1336 ok(hr == D3D_OK, "%u - %s[%u]: GetVectorArray failed, got %#x, expected %#x\n", i, res_full_name, element, hr, D3D_OK);
1337
1338 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1339 }
1340 else if (element <= res_desc->Elements && res_desc->Class == D3DXPC_VECTOR)
1341 {
1342 ok(hr == D3D_OK, "%u - %s[%u]: GetVectorArray failed, got %#x, expected %#x\n", i, res_full_name, element, hr, D3D_OK);
1343
1344 for (k = 0; k < element; ++k)
1345 {
1346 for (l = 0; l < res_desc->Columns; ++l)
1347 {
1348 if (!compare_float(fvalue[l + k * 4], get_float(res_desc->Type,
1349 &res_value[l + k * res_desc->Columns]), 512))
1350 ++err;
1351 }
1352
1353 for (l = res_desc->Columns; l < 4; ++l) if (fvalue[l + k * 4] != 0.0f) ++err;
1354 }
1355
1356 for (l = element * 4; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1357 }
1358 else
1359 {
1360 ok(hr == D3DERR_INVALIDCALL, "%u - %s[%u]: GetVectorArray failed, got %#x, expected %#x\n",
1361 i, res_full_name, element, hr, D3DERR_INVALIDCALL);
1362
1363 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1364 }
1365 ok(!err, "%u - %s[%u]: GetVectorArray failed with %u errors\n", i, res_full_name, element, err);
1366 }
1367}
1368
1370 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1371{
1372 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1373 const char *res_full_name = res->full_name;
1374 HRESULT hr;
1375 union
1376 {
1377 DWORD d;
1378 float f;
1379 } cmp;
1380 float fvalue[16];
1381 UINT l, k, err = 0;
1382
1383 cmp.d = 0xabababab;
1384 memset(fvalue, 0xab, sizeof(fvalue));
1385 hr = effect->lpVtbl->GetMatrix(effect, parameter, (D3DXMATRIX *)&fvalue);
1386 if (!res_desc->Elements && res_desc->Class == D3DXPC_MATRIX_ROWS)
1387 {
1388 ok(hr == D3D_OK, "%u - %s: GetMatrix failed, got %#x, expected %#x.\n", i, res_full_name, hr, D3D_OK);
1389
1390 for (k = 0; k < 4; ++k)
1391 {
1392 for (l = 0; l < 4; ++l)
1393 {
1394 if (k < res_desc->Columns && l < res_desc->Rows)
1395 {
1396 if (!compare_float(fvalue[l * 4 + k], get_float(res_desc->Type,
1397 &res_value[l * res_desc->Columns + k]), 512))
1398 ++err;
1399 }
1400 else if (fvalue[l * 4 + k] != 0.0f) ++err;
1401 }
1402 }
1403 }
1404 else
1405 {
1406 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrix failed, got %#x, expected %#x.\n",
1407 i, res_full_name, hr, D3DERR_INVALIDCALL);
1408
1409 for (l = 0; l < ARRAY_SIZE(fvalue); ++l)
1410 if (fvalue[l] != cmp.f)
1411 ++err;
1412 }
1413 ok(!err, "%u - %s: GetMatrix failed with %u errors.\n", i, res_full_name, err);
1414}
1415
1417 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1418{
1419 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1420 const char *res_full_name = res->full_name;
1421 HRESULT hr;
1422 DWORD cmp = 0xabababab;
1424 UINT l, k, m, element, err = 0;
1425
1426 for (element = 0; element <= res_desc->Elements + 1; ++element)
1427 {
1428 memset(fvalue, 0xab, sizeof(fvalue));
1429 hr = effect->lpVtbl->GetMatrixArray(effect, parameter, (D3DXMATRIX *)&fvalue, element);
1430 if (!element)
1431 {
1432 ok(hr == D3D_OK, "%u - %s[%u]: GetMatrixArray failed, got %#x, expected %#x\n", i, res_full_name, element, hr, D3D_OK);
1433
1434 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1435 }
1436 else if (element <= res_desc->Elements && res_desc->Class == D3DXPC_MATRIX_ROWS)
1437 {
1438 ok(hr == D3D_OK, "%u - %s[%u]: GetMatrixArray failed, got %#x, expected %#x\n", i, res_full_name, element, hr, D3D_OK);
1439
1440 for (m = 0; m < element; ++m)
1441 {
1442 for (k = 0; k < 4; ++k)
1443 {
1444 for (l = 0; l < 4; ++l)
1445 {
1446 if (k < res_desc->Columns && l < res_desc->Rows)
1447 {
1448 if (!compare_float(fvalue[m * 16 + l * 4 + k], get_float(res_desc->Type,
1449 &res_value[m * res_desc->Columns * res_desc->Rows + l * res_desc->Columns + k]), 512))
1450 ++err;
1451 }
1452 else if (fvalue[m * 16 + l * 4 + k] != 0.0f) ++err;
1453 }
1454 }
1455 }
1456
1457 for (l = element * 16; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1458 }
1459 else
1460 {
1461 ok(hr == D3DERR_INVALIDCALL, "%u - %s[%u]: GetMatrixArray failed, got %#x, expected %#x\n",
1462 i, res_full_name, element, hr, D3DERR_INVALIDCALL);
1463
1464 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1465 }
1466 ok(!err, "%u - %s[%u]: GetMatrixArray failed with %u errors\n", i, res_full_name, element, err);
1467 }
1468}
1469
1471 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1472{
1473 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1474 const char *res_full_name = res->full_name;
1475 HRESULT hr;
1476 DWORD cmp = 0xabababab;
1478 D3DXMATRIX *matrix_pointer_array[sizeof(fvalue)/sizeof(D3DXMATRIX)];
1479 UINT l, k, m, element, err = 0;
1480
1481 for (element = 0; element <= res_desc->Elements + 1; ++element)
1482 {
1483 memset(fvalue, 0xab, sizeof(fvalue));
1484 for (l = 0; l < element; ++l)
1485 {
1486 matrix_pointer_array[l] = (D3DXMATRIX *)&fvalue[l * sizeof(**matrix_pointer_array) / sizeof(FLOAT)];
1487 }
1488 hr = effect->lpVtbl->GetMatrixPointerArray(effect, parameter, matrix_pointer_array, element);
1489 if (!element)
1490 {
1491 ok(hr == D3D_OK, "%u - %s[%u]: GetMatrixPointerArray failed, got %#x, expected %#x\n",
1492 i, res_full_name, element, hr, D3D_OK);
1493
1494 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1495 }
1496 else if (element <= res_desc->Elements && res_desc->Class == D3DXPC_MATRIX_ROWS)
1497 {
1498 ok(hr == D3D_OK, "%u - %s[%u]: GetMatrixPointerArray failed, got %#x, expected %#x\n",
1499 i, res_full_name, element, hr, D3D_OK);
1500
1501 for (m = 0; m < element; ++m)
1502 {
1503 for (k = 0; k < 4; ++k)
1504 {
1505 for (l = 0; l < 4; ++l)
1506 {
1507 if (k < res_desc->Columns && l < res_desc->Rows)
1508 {
1509 if (!compare_float(fvalue[m * 16 + l * 4 + k], get_float(res_desc->Type,
1510 &res_value[m * res_desc->Columns * res_desc->Rows + l * res_desc->Columns + k]), 512))
1511 ++err;
1512 }
1513 else if (fvalue[m * 16 + l * 4 + k] != 0.0f) ++err;
1514 }
1515 }
1516 }
1517
1518 for (l = element * 16; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1519 }
1520 else
1521 {
1522 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1523
1524 ok(hr == D3DERR_INVALIDCALL, "%u - %s[%u]: GetMatrixPointerArray failed, got %#x, expected %#x\n",
1525 i, res_full_name, element, hr, D3DERR_INVALIDCALL);
1526 }
1527 ok(!err, "%u - %s[%u]: GetMatrixPointerArray failed with %u errors\n", i, res_full_name, element, err);
1528 }
1529}
1530
1532 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1533{
1534 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1535 const char *res_full_name = res->full_name;
1536 HRESULT hr;
1537 union
1538 {
1539 DWORD d;
1540 float f;
1541 } cmp;
1542 float fvalue[16];
1543 UINT l, k, err = 0;
1544
1545 cmp.d = 0xabababab;
1546 memset(fvalue, 0xab, sizeof(fvalue));
1547 hr = effect->lpVtbl->GetMatrixTranspose(effect, parameter, (D3DXMATRIX *)&fvalue);
1548 if (!res_desc->Elements && res_desc->Class == D3DXPC_MATRIX_ROWS)
1549 {
1550 ok(hr == D3D_OK, "%u - %s: GetMatrixTranspose failed, got %#x, expected %#x.\n", i, res_full_name, hr, D3D_OK);
1551
1552 for (k = 0; k < 4; ++k)
1553 {
1554 for (l = 0; l < 4; ++l)
1555 {
1556 if (k < res_desc->Columns && l < res_desc->Rows)
1557 {
1558 if (!compare_float(fvalue[l + k * 4], get_float(res_desc->Type,
1559 &res_value[l * res_desc->Columns + k]), 512))
1560 ++err;
1561 }
1562 else if (fvalue[l + k * 4] != 0.0f) ++err;
1563 }
1564 }
1565 }
1566 else if (!res_desc->Elements && (res_desc->Class == D3DXPC_VECTOR || res_desc->Class == D3DXPC_SCALAR))
1567 {
1568 ok(hr == D3D_OK, "%u - %s: GetMatrixTranspose failed, got %#x, expected %#x.\n", i, res_full_name, hr, D3D_OK);
1569
1570 for (k = 0; k < 4; ++k)
1571 {
1572 for (l = 0; l < 4; ++l)
1573 {
1574 if (k < res_desc->Columns && l < res_desc->Rows)
1575 {
1576 if (!compare_float(fvalue[l * 4 + k], get_float(res_desc->Type,
1577 &res_value[l * res_desc->Columns + k]), 512))
1578 ++err;
1579 }
1580 else if (fvalue[l * 4 + k] != 0.0f) ++err;
1581 }
1582 }
1583 }
1584 else
1585 {
1586 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrixTranspose failed, got %#x, expected %#x.\n",
1587 i, res_full_name, hr, D3DERR_INVALIDCALL);
1588
1589 for (l = 0; l < ARRAY_SIZE(fvalue); ++l)
1590 if (fvalue[l] != cmp.f)
1591 ++err;
1592 }
1593 ok(!err, "%u - %s: GetMatrixTranspose failed with %u errors.\n", i, res_full_name, err);
1594}
1595
1597 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1598{
1599 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1600 const char *res_full_name = res->full_name;
1601 HRESULT hr;
1602 DWORD cmp = 0xabababab;
1604 UINT l, k, m, element, err = 0;
1605
1606 for (element = 0; element <= res_desc->Elements + 1; ++element)
1607 {
1608 memset(fvalue, 0xab, sizeof(fvalue));
1609 hr = effect->lpVtbl->GetMatrixTransposeArray(effect, parameter, (D3DXMATRIX *)&fvalue, element);
1610 if (!element)
1611 {
1612 ok(hr == D3D_OK, "%u - %s[%u]: GetMatrixTransposeArray failed, got %#x, expected %#x\n",
1613 i, res_full_name, element, hr, D3D_OK);
1614
1615 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1616 }
1617 else if (element <= res_desc->Elements && res_desc->Class == D3DXPC_MATRIX_ROWS)
1618 {
1619 ok(hr == D3D_OK, "%u - %s[%u]: GetMatrixTransposeArray failed, got %#x, expected %#x\n",
1620 i, res_full_name, element, hr, D3D_OK);
1621
1622 for (m = 0; m < element; ++m)
1623 {
1624 for (k = 0; k < 4; ++k)
1625 {
1626 for (l = 0; l < 4; ++l)
1627 {
1628 if (k < res_desc->Columns && l < res_desc->Rows)
1629 {
1630 if (!compare_float(fvalue[m * 16 + l + k * 4], get_float(res_desc->Type,
1631 &res_value[m * res_desc->Columns * res_desc->Rows + l * res_desc->Columns + k]), 512))
1632 ++err;
1633 }
1634 else if (fvalue[m * 16 + l + k * 4] != 0.0f) ++err;
1635 }
1636 }
1637 }
1638
1639 for (l = element * 16; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1640 }
1641 else
1642 {
1643 ok(hr == D3DERR_INVALIDCALL, "%u - %s[%u]: GetMatrixTransposeArray failed, got %#x, expected %#x\n",
1644 i, res_full_name, element, hr, D3DERR_INVALIDCALL);
1645
1646 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1647 }
1648 ok(!err, "%u - %s[%u]: GetMatrixTransposeArray failed with %u errors\n", i, res_full_name, element, err);
1649 }
1650}
1651
1653 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1654{
1655 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1656 const char *res_full_name = res->full_name;
1657 HRESULT hr;
1658 DWORD cmp = 0xabababab;
1660 D3DXMATRIX *matrix_pointer_array[sizeof(fvalue)/sizeof(D3DXMATRIX)];
1661 UINT l, k, m, element, err = 0;
1662
1663 for (element = 0; element <= res_desc->Elements + 1; ++element)
1664 {
1665 memset(fvalue, 0xab, sizeof(fvalue));
1666 for (l = 0; l < element; ++l)
1667 {
1668 matrix_pointer_array[l] = (D3DXMATRIX *)&fvalue[l * sizeof(**matrix_pointer_array) / sizeof(FLOAT)];
1669 }
1670 hr = effect->lpVtbl->GetMatrixTransposePointerArray(effect, parameter, matrix_pointer_array, element);
1671 if (!element)
1672 {
1673 ok(hr == D3D_OK, "%u - %s[%u]: GetMatrixTransposePointerArray failed, got %#x, expected %#x\n",
1674 i, res_full_name, element, hr, D3D_OK);
1675
1676 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1677 }
1678 else if (element <= res_desc->Elements && res_desc->Class == D3DXPC_MATRIX_ROWS)
1679 {
1680 ok(hr == D3D_OK, "%u - %s[%u]: GetMatrixTransposePointerArray failed, got %#x, expected %#x\n",
1681 i, res_full_name, element, hr, D3D_OK);
1682
1683 for (m = 0; m < element; ++m)
1684 {
1685 for (k = 0; k < 4; ++k)
1686 {
1687 for (l = 0; l < 4; ++l)
1688 {
1689 if (k < res_desc->Columns && l < res_desc->Rows)
1690 {
1691 if (!compare_float(fvalue[m * 16 + l + k * 4], get_float(res_desc->Type,
1692 &res_value[m * res_desc->Columns * res_desc->Rows + l * res_desc->Columns + k]), 512))
1693 ++err;
1694 }
1695 else if (fvalue[m * 16 + l + k * 4] != 0.0f) ++err;
1696 }
1697 }
1698 }
1699
1700 for (l = element * 16; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1701 }
1702 else
1703 {
1704 ok(hr == D3DERR_INVALIDCALL, "%u - %s[%u]: GetMatrixTransposePointerArray failed, got %#x, expected %#x\n",
1705 i, res_full_name, element, hr, D3DERR_INVALIDCALL);
1706
1707 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1708 }
1709 ok(!err, "%u - %s[%u]: GetMatrixTransposePointerArray failed with %u errors\n", i, res_full_name, element, err);
1710 }
1711}
1712
1714 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1715{
1716 test_effect_parameter_value_GetValue(res, effect, res_value, parameter, i);
1717 test_effect_parameter_value_GetBool(res, effect, res_value, parameter, i);
1718 test_effect_parameter_value_GetBoolArray(res, effect, res_value, parameter, i);
1719 test_effect_parameter_value_GetInt(res, effect, res_value, parameter, i);
1720 test_effect_parameter_value_GetIntArray(res, effect, res_value, parameter, i);
1721 test_effect_parameter_value_GetFloat(res, effect, res_value, parameter, i);
1722 test_effect_parameter_value_GetFloatArray(res, effect, res_value, parameter, i);
1723 test_effect_parameter_value_GetVector(res, effect, res_value, parameter, i);
1724 test_effect_parameter_value_GetVectorArray(res, effect, res_value, parameter, i);
1725 test_effect_parameter_value_GetMatrix(res, effect, res_value, parameter, i);
1726 test_effect_parameter_value_GetMatrixArray(res, effect, res_value, parameter, i);
1727 test_effect_parameter_value_GetMatrixPointerArray(res, effect, res_value, parameter, i);
1728 test_effect_parameter_value_GetMatrixTranspose(res, effect, res_value, parameter, i);
1729 test_effect_parameter_value_GetMatrixTransposeArray(res, effect, res_value, parameter, i);
1731}
1732
1734 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1735{
1736 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1737 const char *res_full_name = res->full_name;
1738 HRESULT hr;
1739
1740 if (res_desc->Class == D3DXPC_SCALAR
1741 || res_desc->Class == D3DXPC_VECTOR
1742 || res_desc->Class == D3DXPC_MATRIX_ROWS)
1743 {
1744 hr = effect->lpVtbl->SetValue(effect, parameter, res_value, res_desc->Bytes);
1745 ok(hr == D3D_OK, "%u - %s: SetValue failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1746 }
1747 else
1748 {
1749 /* nothing to do */
1750 switch (res_desc->Type)
1751 {
1752 case D3DXPT_PIXELSHADER:
1754 case D3DXPT_TEXTURE2D:
1755 case D3DXPT_STRING:
1756 break;
1757
1758 default:
1759 ok(0, "Type is %u, this should not happen!\n", res_desc->Type);
1760 break;
1761 }
1762 }
1763}
1764
1765static void test_effect_parameter_value(IDirect3DDevice9 *device)
1766{
1767 unsigned int effect_count = ARRAY_SIZE(test_effect_parameter_value_data), i;
1768
1769 for (i = 0; i < effect_count; ++i)
1770 {
1775 HRESULT hr;
1776 ID3DXEffect *effect;
1777 D3DXEFFECT_DESC edesc;
1778 ULONG count;
1779 UINT k;
1780
1781 hr = D3DXCreateEffect(device, blob, blob_size, NULL, NULL, 0, NULL, &effect, NULL);
1782 ok(hr == D3D_OK, "%u: D3DXCreateEffect failed, got %#x, expected %#x\n", i, hr, D3D_OK);
1783
1784 hr = effect->lpVtbl->GetDesc(effect, &edesc);
1785 ok(hr == D3D_OK, "%u: GetDesc failed, got %#x, expected %#x\n", i, hr, D3D_OK);
1786 ok(edesc.Parameters == res_count, "%u: Parameters failed, got %u, expected %u\n",
1787 i, edesc.Parameters, res_count);
1788
1789 for (k = 0; k < res_count; ++k)
1790 {
1791 const D3DXPARAMETER_DESC *res_desc = &res[k].desc;
1792 const char *res_full_name = res[k].full_name;
1793 UINT res_value_offset = res[k].value_offset;
1794 D3DXHANDLE parameter;
1795 D3DXPARAMETER_DESC pdesc;
1796 BOOL bvalue = TRUE;
1797 INT ivalue = 42;
1798 FLOAT fvalue = 2.71828f;
1801 UINT l, n, m, element;
1802 const D3DXMATRIX *matrix_pointer_array[sizeof(input_value)/sizeof(D3DXMATRIX)];
1803
1804 parameter = effect->lpVtbl->GetParameterByName(effect, NULL, res_full_name);
1805 ok(parameter != NULL, "%u - %s: GetParameterByName failed\n", i, res_full_name);
1806
1807 hr = effect->lpVtbl->GetParameterDesc(effect, parameter, &pdesc);
1808 ok(hr == D3D_OK, "%u - %s: GetParameterDesc failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1809
1810 ok(res_desc->Name ? !strcmp(pdesc.Name, res_desc->Name) : !pdesc.Name,
1811 "%u - %s: GetParameterDesc Name failed, got \"%s\", expected \"%s\"\n",
1812 i, res_full_name, pdesc.Name, res_desc->Name);
1813 ok(res_desc->Semantic ? !strcmp(pdesc.Semantic, res_desc->Semantic) : !pdesc.Semantic,
1814 "%u - %s: GetParameterDesc Semantic failed, got \"%s\", expected \"%s\"\n",
1815 i, res_full_name, pdesc.Semantic, res_desc->Semantic);
1816 ok(res_desc->Class == pdesc.Class, "%u - %s: GetParameterDesc Class failed, got %#x, expected %#x\n",
1817 i, res_full_name, pdesc.Class, res_desc->Class);
1818 ok(res_desc->Type == pdesc.Type, "%u - %s: GetParameterDesc Type failed, got %#x, expected %#x\n",
1819 i, res_full_name, pdesc.Type, res_desc->Type);
1820 ok(res_desc->Rows == pdesc.Rows, "%u - %s: GetParameterDesc Rows failed, got %u, expected %u\n",
1821 i, res_full_name, pdesc.Rows, res_desc->Rows);
1822 ok(res_desc->Columns == pdesc.Columns, "%u - %s: GetParameterDesc Columns failed, got %u, expected %u\n",
1823 i, res_full_name, pdesc.Columns, res_desc->Columns);
1824 ok(res_desc->Elements == pdesc.Elements, "%u - %s: GetParameterDesc Elements failed, got %u, expected %u\n",
1825 i, res_full_name, pdesc.Elements, res_desc->Elements);
1826 ok(res_desc->Annotations == pdesc.Annotations, "%u - %s: GetParameterDesc Annotations failed, got %u, expected %u\n",
1827 i, res_full_name, pdesc.Annotations, res_desc->Annotations);
1828 ok(res_desc->StructMembers == pdesc.StructMembers, "%u - %s: GetParameterDesc StructMembers failed, got %u, expected %u\n",
1829 i, res_full_name, pdesc.StructMembers, res_desc->StructMembers);
1830 ok(res_desc->Flags == pdesc.Flags, "%u - %s: GetParameterDesc Flags failed, got %u, expected %u\n",
1831 i, res_full_name, pdesc.Flags, res_desc->Flags);
1832 ok(res_desc->Bytes == pdesc.Bytes, "%u - %s: GetParameterDesc Bytes, got %u, expected %u\n",
1833 i, res_full_name, pdesc.Bytes, res_desc->Bytes);
1834
1835 /* check size */
1836 ok(EFFECT_PARAMETER_VALUE_ARRAY_SIZE >= res_desc->Bytes / 4 +
1837 (res_desc->Elements ? res_desc->Bytes / 4 / res_desc->Elements : 0),
1838 "%u - %s: Warning: Array size too small\n", i, res_full_name);
1839
1840 test_effect_parameter_value_GetTestGroup(&res[k], effect, &blob[res_value_offset], parameter, i);
1841 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
1842 test_effect_parameter_value_GetTestGroup(&res[k], effect, &blob[res_value_offset], parameter, i);
1843
1844 /*
1845 * check invalid calls
1846 * These will crash:
1847 * effect->lpVtbl->SetBoolArray(effect, parameter, NULL, res_desc->Bytes / sizeof(BOOL));
1848 * effect->lpVtbl->SetIntArray(effect, parameter, NULL, res_desc->Bytes / sizeof(INT));
1849 * effect->lpVtbl->SetFloatArray(effect, parameter, NULL, res_desc->Bytes / sizeof(FLOAT));
1850 * effect->lpVtbl->SetVector(effect, parameter, NULL);
1851 * effect->lpVtbl->SetVectorArray(effect, parameter, NULL, res_desc->Elements ? res_desc->Elements : 1);
1852 * effect->lpVtbl->SetMatrix(effect, parameter, NULL);
1853 * effect->lpVtbl->GetMatrix(effect, parameter, NULL);
1854 * effect->lpVtbl->SetMatrixArray(effect, parameter, NULL, res_desc->Elements ? res_desc->Elements : 1);
1855 * effect->lpVtbl->SetMatrixPointerArray(effect, parameter, NULL, res_desc->Elements ? res_desc->Elements : 1);
1856 * effect->lpVtbl->SetMatrixTranspose(effect, parameter, NULL);
1857 * effect->lpVtbl->SetMatrixTransposeArray(effect, parameter, NULL, res_desc->Elements ? res_desc->Elements : 1);
1858 * effect->lpVtbl->SetMatrixTransposePointerArray(effect, parameter, NULL, res_desc->Elements ? res_desc->Elements : 1);
1859 * effect->lpVtbl->GetValue(effect, parameter, NULL, res_desc->Bytes);
1860 * effect->lpVtbl->SetValue(effect, parameter, NULL, res_desc->Bytes);
1861 */
1862 hr = effect->lpVtbl->SetBool(effect, NULL, bvalue);
1863 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetBool failed, got %#x, expected %#x\n",
1864 i, res_full_name, hr, D3DERR_INVALIDCALL);
1865
1866 hr = effect->lpVtbl->GetBool(effect, NULL, &bvalue);
1867 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetBool failed, got %#x, expected %#x\n",
1868 i, res_full_name, hr, D3DERR_INVALIDCALL);
1869
1870 hr = effect->lpVtbl->GetBool(effect, parameter, NULL);
1871 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetBool failed, got %#x, expected %#x\n",
1872 i, res_full_name, hr, D3DERR_INVALIDCALL);
1873
1874 hr = effect->lpVtbl->SetBoolArray(effect, NULL, (BOOL *)input_value, res_desc->Bytes / sizeof(BOOL));
1875 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetBoolArray failed, got %#x, expected %#x\n",
1876 i, res_full_name, hr, D3DERR_INVALIDCALL);
1877
1878 hr = effect->lpVtbl->GetBoolArray(effect, NULL, (BOOL *)input_value, res_desc->Bytes / sizeof(BOOL));
1879 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetBoolArray failed, got %#x, expected %#x\n",
1880 i, res_full_name, hr, D3DERR_INVALIDCALL);
1881
1882 hr = effect->lpVtbl->GetBoolArray(effect, parameter, NULL, res_desc->Bytes / sizeof(BOOL));
1883 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetBoolArray failed, got %#x, expected %#x\n",
1884 i, res_full_name, hr, D3DERR_INVALIDCALL);
1885
1886 hr = effect->lpVtbl->SetInt(effect, NULL, ivalue);
1887 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetInt failed, got %#x, expected %#x\n",
1888 i, res_full_name, hr, D3DERR_INVALIDCALL);
1889
1890 hr = effect->lpVtbl->GetInt(effect, NULL, &ivalue);
1891 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetInt failed, got %#x, expected %#x\n",
1892 i, res_full_name, hr, D3DERR_INVALIDCALL);
1893
1894 hr = effect->lpVtbl->GetInt(effect, parameter, NULL);
1895 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetInt failed, got %#x, expected %#x\n",
1896 i, res_full_name, hr, D3DERR_INVALIDCALL);
1897
1898 hr = effect->lpVtbl->SetIntArray(effect, NULL, (INT *)input_value, res_desc->Bytes / sizeof(INT));
1899 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetIntArray failed, got %#x, expected %#x\n",
1900 i, res_full_name, hr, D3DERR_INVALIDCALL);
1901
1902 hr = effect->lpVtbl->GetIntArray(effect, NULL, (INT *)input_value, res_desc->Bytes / sizeof(INT));
1903 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetIntArray failed, got %#x, expected %#x\n",
1904 i, res_full_name, hr, D3DERR_INVALIDCALL);
1905
1906 hr = effect->lpVtbl->GetIntArray(effect, parameter, NULL, res_desc->Bytes / sizeof(INT));
1907 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetIntArray failed, got %#x, expected %#x\n",
1908 i, res_full_name, hr, D3DERR_INVALIDCALL);
1909
1910 hr = effect->lpVtbl->SetFloat(effect, NULL, fvalue);
1911 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetFloat failed, got %#x, expected %#x\n",
1912 i, res_full_name, hr, D3DERR_INVALIDCALL);
1913
1914 hr = effect->lpVtbl->GetFloat(effect, NULL, &fvalue);
1915 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetFloat failed, got %#x, expected %#x\n",
1916 i, res_full_name, hr, D3DERR_INVALIDCALL);
1917
1918 hr = effect->lpVtbl->GetFloat(effect, parameter, NULL);
1919 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetFloat failed, got %#x, expected %#x\n",
1920 i, res_full_name, hr, D3DERR_INVALIDCALL);
1921
1922 hr = effect->lpVtbl->SetFloatArray(effect, NULL, (FLOAT *)input_value, res_desc->Bytes / sizeof(FLOAT));
1923 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetFloatArray failed, got %#x, expected %#x\n",
1924 i, res_full_name, hr, D3DERR_INVALIDCALL);
1925
1926 hr = effect->lpVtbl->GetFloatArray(effect, NULL, (FLOAT *)input_value, res_desc->Bytes / sizeof(FLOAT));
1927 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetFloatArray failed, got %#x, expected %#x\n",
1928 i, res_full_name, hr, D3DERR_INVALIDCALL);
1929
1930 hr = effect->lpVtbl->GetFloatArray(effect, parameter, NULL, res_desc->Bytes / sizeof(FLOAT));
1931 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetFloatArray failed, got %#x, expected %#x\n",
1932 i, res_full_name, hr, D3DERR_INVALIDCALL);
1933
1934 hr = effect->lpVtbl->SetVector(effect, NULL, (D3DXVECTOR4 *)input_value);
1935 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetVector failed, got %#x, expected %#x\n",
1936 i, res_full_name, hr, D3DERR_INVALIDCALL);
1937
1938 hr = effect->lpVtbl->GetVector(effect, NULL, (D3DXVECTOR4 *)input_value);
1939 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetVector failed, got %#x, expected %#x\n",
1940 i, res_full_name, hr, D3DERR_INVALIDCALL);
1941
1942 hr = effect->lpVtbl->GetVector(effect, parameter, NULL);
1943 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetVector failed, got %#x, expected %#x\n",
1944 i, res_full_name, hr, D3DERR_INVALIDCALL);
1945
1946 hr = effect->lpVtbl->SetVectorArray(effect, NULL, (D3DXVECTOR4 *)input_value, res_desc->Elements ? res_desc->Elements : 1);
1947 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetVectorArray failed, got %#x, expected %#x\n",
1948 i, res_full_name, hr, D3DERR_INVALIDCALL);
1949
1950 hr = effect->lpVtbl->GetVectorArray(effect, NULL, (D3DXVECTOR4 *)input_value, res_desc->Elements ? res_desc->Elements : 1);
1951 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetVectorArray failed, got %#x, expected %#x\n",
1952 i, res_full_name, hr, D3DERR_INVALIDCALL);
1953
1954 hr = effect->lpVtbl->GetVectorArray(effect, parameter, NULL, res_desc->Elements ? res_desc->Elements : 1);
1955 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetVectorArray failed, got %#x, expected %#x\n",
1956 i, res_full_name, hr, D3DERR_INVALIDCALL);
1957
1958 hr = effect->lpVtbl->SetMatrix(effect, NULL, (D3DXMATRIX *)input_value);
1959 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrix failed, got %#x, expected %#x\n",
1960 i, res_full_name, hr, D3DERR_INVALIDCALL);
1961
1962 hr = effect->lpVtbl->GetMatrix(effect, NULL, (D3DXMATRIX *)input_value);
1963 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrix failed, got %#x, expected %#x\n",
1964 i, res_full_name, hr, D3DERR_INVALIDCALL);
1965
1966 hr = effect->lpVtbl->SetMatrixArray(effect, NULL, (D3DXMATRIX *)input_value, res_desc->Elements ? res_desc->Elements : 1);
1967 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrixArray failed, got %#x, expected %#x\n",
1968 i, res_full_name, hr, D3DERR_INVALIDCALL);
1969
1970 hr = effect->lpVtbl->GetMatrixArray(effect, NULL, (D3DXMATRIX *)input_value, res_desc->Elements ? res_desc->Elements : 1);
1971 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrixArray failed, got %#x, expected %#x\n",
1972 i, res_full_name, hr, D3DERR_INVALIDCALL);
1973
1974 hr = effect->lpVtbl->GetMatrixArray(effect, parameter, NULL, res_desc->Elements ? res_desc->Elements : 1);
1975 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrixArray failed, got %#x, expected %#x\n",
1976 i, res_full_name, hr, D3DERR_INVALIDCALL);
1977
1978 hr = effect->lpVtbl->SetMatrixPointerArray(effect, NULL, matrix_pointer_array, res_desc->Elements ? res_desc->Elements : 1);
1979 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrixPointerArray failed, got %#x, expected %#x\n",
1980 i, res_full_name, hr, D3DERR_INVALIDCALL);
1981
1982 hr = effect->lpVtbl->SetMatrixPointerArray(effect, NULL, matrix_pointer_array, 0);
1983 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrixPointerArray failed, got %#x, expected %#x\n",
1984 i, res_full_name, hr, D3DERR_INVALIDCALL);
1985
1986 hr = effect->lpVtbl->GetMatrixPointerArray(effect, NULL, NULL, 0);
1987 ok(hr == D3D_OK, "%u - %s: GetMatrixPointerArray failed, got %#x, expected %#x\n",
1988 i, res_full_name, hr, D3D_OK);
1989
1990 hr = effect->lpVtbl->GetMatrixPointerArray(effect, NULL, NULL, res_desc->Elements ? res_desc->Elements : 1);
1991 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrixPointerArray failed, got %#x, expected %#x\n",
1992 i, res_full_name, hr, D3DERR_INVALIDCALL);
1993
1994 hr = effect->lpVtbl->GetMatrixPointerArray(effect, parameter, NULL, res_desc->Elements ? res_desc->Elements : 1);
1995 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrixPointerArray failed, got %#x, expected %#x\n",
1996 i, res_full_name, hr, D3DERR_INVALIDCALL);
1997
1998 hr = effect->lpVtbl->SetMatrixTranspose(effect, NULL, (D3DXMATRIX *)input_value);
1999 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrixTranspose failed, got %#x, expected %#x\n",
2000 i, res_full_name, hr, D3DERR_INVALIDCALL);
2001
2002 hr = effect->lpVtbl->GetMatrixTranspose(effect, NULL, (D3DXMATRIX *)input_value);
2003 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrixTranspose failed, got %#x, expected %#x\n",
2004 i, res_full_name, hr, D3DERR_INVALIDCALL);
2005
2006 hr = effect->lpVtbl->GetMatrixTranspose(effect, parameter, NULL);
2007 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrixTranspose failed, got %#x, expected %#x\n",
2008 i, res_full_name, hr, D3DERR_INVALIDCALL);
2009
2010 hr = effect->lpVtbl->SetMatrixTransposeArray(effect, NULL, (D3DXMATRIX *)input_value, res_desc->Elements ? res_desc->Elements : 1);
2011 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrixTransposeArray failed, got %#x, expected %#x\n",
2012 i, res_full_name, hr, D3DERR_INVALIDCALL);
2013
2014 hr = effect->lpVtbl->GetMatrixTransposeArray(effect, NULL, (D3DXMATRIX *)input_value, res_desc->Elements ? res_desc->Elements : 1);
2015 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrixTransposeArray failed, got %#x, expected %#x\n",
2016 i, res_full_name, hr, D3DERR_INVALIDCALL);
2017
2018 hr = effect->lpVtbl->GetMatrixTransposeArray(effect, parameter, NULL, res_desc->Elements ? res_desc->Elements : 1);
2019 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrixTransposeArray failed, got %#x, expected %#x\n",
2020 i, res_full_name, hr, D3DERR_INVALIDCALL);
2021
2022 hr = effect->lpVtbl->SetMatrixTransposePointerArray(effect, NULL, matrix_pointer_array, res_desc->Elements ? res_desc->Elements : 1);
2023 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrixTransposePointerArray failed, got %#x, expected %#x\n",
2024 i, res_full_name, hr, D3DERR_INVALIDCALL);
2025
2026 hr = effect->lpVtbl->SetMatrixTransposePointerArray(effect, NULL, matrix_pointer_array, 0);
2027 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrixTransposePointerArray failed, got %#x, expected %#x\n",
2028 i, res_full_name, hr, D3DERR_INVALIDCALL);
2029
2030 hr = effect->lpVtbl->GetMatrixTransposePointerArray(effect, NULL, NULL, 0);
2031 ok(hr == D3D_OK, "%u - %s: GetMatrixTransposePointerArray failed, got %#x, expected %#x\n",
2032 i, res_full_name, hr, D3D_OK);
2033
2034 hr = effect->lpVtbl->GetMatrixTransposePointerArray(effect, NULL, NULL, res_desc->Elements ? res_desc->Elements : 1);
2035 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrixTransposePointerArray failed, got %#x, expected %#x\n",
2036 i, res_full_name, hr, D3DERR_INVALIDCALL);
2037
2038 hr = effect->lpVtbl->GetMatrixTransposePointerArray(effect, parameter, NULL, res_desc->Elements ? res_desc->Elements : 1);
2039 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrixTransposePointerArray failed, got %#x, expected %#x\n",
2040 i, res_full_name, hr, D3DERR_INVALIDCALL);
2041
2042 hr = effect->lpVtbl->SetValue(effect, NULL, input_value, res_desc->Bytes);
2043 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetValue failed, got %#x, expected %#x\n",
2044 i, res_full_name, hr, D3DERR_INVALIDCALL);
2045
2046 hr = effect->lpVtbl->SetValue(effect, parameter, input_value, res_desc->Bytes - 1);
2047 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetValue failed, got %#x, expected %#x\n",
2048 i, res_full_name, hr, D3DERR_INVALIDCALL);
2049
2050 hr = effect->lpVtbl->GetValue(effect, NULL, input_value, res_desc->Bytes);
2051 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetValue failed, got %#x, expected %#x\n",
2052 i, res_full_name, hr, D3DERR_INVALIDCALL);
2053
2054 hr = effect->lpVtbl->GetValue(effect, parameter, input_value, res_desc->Bytes - 1);
2055 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetValue failed, got %#x, expected %#x\n",
2056 i, res_full_name, hr, D3DERR_INVALIDCALL);
2057
2058 test_effect_parameter_value_GetTestGroup(&res[k], effect, &blob[res_value_offset], parameter, i);
2059
2060 /* SetBool */
2061 bvalue = 5;
2062 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
2063 hr = effect->lpVtbl->SetBool(effect, parameter, bvalue);
2064 if (!res_desc->Elements && res_desc->Rows == 1 && res_desc->Columns == 1)
2065 {
2066 bvalue = TRUE;
2067 set_number(expected_value, res_desc->Type, &bvalue, D3DXPT_BOOL);
2068 ok(hr == D3D_OK, "%u - %s: SetBool failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
2069 }
2070 else
2071 {
2072 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetBool failed, got %#x, expected %#x\n",
2073 i, res_full_name, hr, D3DERR_INVALIDCALL);
2074 }
2075 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
2076 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
2077
2078 /* SetBoolArray */
2079 *input_value = 1;
2080 for (l = 1; l < res_desc->Bytes / sizeof(*input_value); ++l)
2081 {
2082 *(input_value + l) = *(input_value + l - 1) + 1;
2083 }
2084 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
2085 hr = effect->lpVtbl->SetBoolArray(effect, parameter, (BOOL *)input_value, res_desc->Bytes / sizeof(*input_value));
2086 if (res_desc->Class == D3DXPC_SCALAR
2087 || res_desc->Class == D3DXPC_VECTOR
2088 || res_desc->Class == D3DXPC_MATRIX_ROWS)
2089 {
2090 for (l = 0; l < res_desc->Bytes / sizeof(*input_value); ++l)
2091 {
2092 set_number(expected_value + l, res_desc->Type, input_value + l, D3DXPT_BOOL);
2093 }
2094 ok(hr == D3D_OK, "%u - %s: SetBoolArray failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
2095 }
2096 else
2097 {
2098 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetBoolArray failed, got %#x, expected %#x\n",
2099 i, res_full_name, hr, D3DERR_INVALIDCALL);
2100 }
2101 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
2102 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
2103
2104 /* SetInt */
2105 ivalue = 0x1fbf02ff;
2106 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
2107 hr = effect->lpVtbl->SetInt(effect, parameter, ivalue);
2108 if (!res_desc->Elements && res_desc->Rows == 1 && res_desc->Columns == 1)
2109 {
2110 set_number(expected_value, res_desc->Type, &ivalue, D3DXPT_INT);
2111 ok(hr == D3D_OK, "%u - %s: SetInt failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
2112 }
2113 else if(!res_desc->Elements && res_desc->Type == D3DXPT_FLOAT &&
2114 ((res_desc->Class == D3DXPC_VECTOR && res_desc->Columns != 2) ||
2115 (res_desc->Class == D3DXPC_MATRIX_ROWS && res_desc->Rows != 2 && res_desc->Columns == 1)))
2116 {
2117 FLOAT tmp = ((ivalue & 0xff0000) >> 16) * INT_FLOAT_MULTI_INVERSE;
2118 set_number(expected_value, res_desc->Type, &tmp, D3DXPT_FLOAT);
2119 tmp = ((ivalue & 0xff00) >> 8) * INT_FLOAT_MULTI_INVERSE;
2120 set_number(expected_value + 1, res_desc->Type, &tmp, D3DXPT_FLOAT);
2121 tmp = (ivalue & 0xff) * INT_FLOAT_MULTI_INVERSE;
2122 set_number(expected_value + 2, res_desc->Type, &tmp, D3DXPT_FLOAT);
2123 tmp = ((ivalue & 0xff000000) >> 24) * INT_FLOAT_MULTI_INVERSE;
2124 set_number(expected_value + 3, res_desc->Type, &tmp, D3DXPT_FLOAT);
2125
2126 ok(hr == D3D_OK, "%u - %s: SetInt failed, got %#x, expected %#x\n",
2127 i, res_full_name, hr, D3D_OK);
2128 }
2129 else
2130 {
2131 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetInt failed, got %#x, expected %#x\n",
2132 i, res_full_name, hr, D3DERR_INVALIDCALL);
2133 }
2134 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
2135 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
2136
2137 /* SetIntArray */
2138 *input_value = 123456;
2139 for (l = 0; l < res_desc->Bytes / sizeof(*input_value); ++l)
2140 {
2141 *(input_value + l) = *(input_value + l - 1) + 23;
2142 }
2143 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
2144 hr = effect->lpVtbl->SetIntArray(effect, parameter, (INT *)input_value, res_desc->Bytes / sizeof(*input_value));
2145 if (res_desc->Class == D3DXPC_SCALAR
2146 || res_desc->Class == D3DXPC_VECTOR
2147 || res_desc->Class == D3DXPC_MATRIX_ROWS)
2148 {
2149 for (l = 0; l < res_desc->Bytes / sizeof(*input_value); ++l)
2150 {
2151 set_number(expected_value + l, res_desc->Type, input_value + l, D3DXPT_INT);
2152 }
2153 ok(hr == D3D_OK, "%u - %s: SetIntArray failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
2154 }
2155 else
2156 {
2157 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetIntArray failed, got %#x, expected %#x\n",
2158 i, res_full_name, hr, D3DERR_INVALIDCALL);
2159 }
2160 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
2161 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
2162
2163 /* SetFloat */
2164 fvalue = 1.33;
2165 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
2166 hr = effect->lpVtbl->SetFloat(effect, parameter, fvalue);
2167 if (!res_desc->Elements && res_desc->Rows == 1 && res_desc->Columns == 1)
2168 {
2169 set_number(expected_value, res_desc->Type, &fvalue, D3DXPT_FLOAT);
2170 ok(hr == D3D_OK, "%u - %s: SetFloat failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
2171 }
2172 else
2173 {
2174 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetFloat failed, got %#x, expected %#x\n",
2175 i, res_full_name, hr, D3DERR_INVALIDCALL);
2176 }
2177 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
2178 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
2179
2180 /* SetFloatArray */
2181 fvalue = 1.33;
2182 for (l = 0; l < res_desc->Bytes / sizeof(fvalue); ++l)
2183 {
2184 *(input_value + l) = *(DWORD *)&fvalue;
2185 fvalue += 1.12;
2186 }
2187 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
2188 hr = effect->lpVtbl->SetFloatArray(effect, parameter, (FLOAT *)input_value, res_desc->Bytes / sizeof(*input_value));
2189 if (res_desc->Class == D3DXPC_SCALAR
2190 || res_desc->Class == D3DXPC_VECTOR
2191 || res_desc->Class == D3DXPC_MATRIX_ROWS)
2192 {
2193 for (l = 0; l < res_desc->Bytes / sizeof(*input_value); ++l)
2194 {
2195 set_number(expected_value + l, res_desc->Type, input_value + l, D3DXPT_FLOAT);
2196 }
2197 ok(hr == D3D_OK, "%u - %s: SetFloatArray failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
2198 }
2199 else
2200 {
2201 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetFloatArray failed, got %#x, expected %#x\n",
2202 i, res_full_name, hr, D3DERR_INVALIDCALL);
2203 }
2204 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
2205 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
2206
2207 /* SetVector */
2208 fvalue = -1.33;
2209 for (l = 0; l < 4; ++l)
2210 {
2211 *(input_value + l) = *(DWORD *)&fvalue;
2212 fvalue += 1.12;
2213 }
2214 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
2215 hr = effect->lpVtbl->SetVector(effect, parameter, (D3DXVECTOR4 *)input_value);
2216 if (!res_desc->Elements &&
2217 (res_desc->Class == D3DXPC_SCALAR
2218 || res_desc->Class == D3DXPC_VECTOR))
2219 {
2220 /* only values between 0 and INT_FLOAT_MULTI are valid */
2221 if (res_desc->Type == D3DXPT_INT && res_desc->Bytes == 4)
2222 {
2223 *expected_value = (DWORD)(max(min(*(FLOAT *)(input_value + 2), 1.0f), 0.0f) * INT_FLOAT_MULTI);
2224 *expected_value += ((DWORD)(max(min(*(FLOAT *)(input_value + 1), 1.0f), 0.0f) * INT_FLOAT_MULTI)) << 8;
2225 *expected_value += ((DWORD)(max(min(*(FLOAT *)input_value, 1.0f), 0.0f) * INT_FLOAT_MULTI)) << 16;
2226 *expected_value += ((DWORD)(max(min(*(FLOAT *)(input_value + 3), 1.0f), 0.0f) * INT_FLOAT_MULTI)) << 24;
2227 }
2228 else
2229 {
2230 for (l = 0; l < 4; ++l)
2231 {
2232 set_number(expected_value + l, res_desc->Type, input_value + l, D3DXPT_FLOAT);
2233 }
2234 }
2235 ok(hr == D3D_OK, "%u - %s: SetVector failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
2236 }
2237 else
2238 {
2239 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetVector failed, got %#x, expected %#x\n",
2240 i, res_full_name, hr, D3DERR_INVALIDCALL);
2241 }
2242 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
2243 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
2244
2245 /* SetVectorArray */
2246 for (element = 0; element < res_desc->Elements + 1; ++element)
2247 {
2248 fvalue = 1.33;
2249 for (l = 0; l < element * 4; ++l)
2250 {
2251 *(input_value + l) = *(DWORD *)&fvalue;
2252 fvalue += 1.12;
2253 }
2254 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
2255 hr = effect->lpVtbl->SetVectorArray(effect, parameter, (D3DXVECTOR4 *)input_value, element);
2256 if (res_desc->Elements && res_desc->Class == D3DXPC_VECTOR && element <= res_desc->Elements)
2257 {
2258 for (m = 0; m < element; ++m)
2259 {
2260 for (l = 0; l < res_desc->Columns; ++l)
2261 {
2262 set_number(expected_value + m * res_desc->Columns + l, res_desc->Type, input_value + m * 4 + l, D3DXPT_FLOAT);
2263 }
2264 }
2265 ok(hr == D3D_OK, "%u - %s: SetVectorArray failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
2266 }
2267 else
2268 {
2269 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetVectorArray failed, got %#x, expected %#x\n",
2270 i, res_full_name, hr, D3DERR_INVALIDCALL);
2271 }
2272 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
2273 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
2274 }
2275
2276 /* SetMatrix */
2277 fvalue = 1.33;
2278 for (l = 0; l < 16; ++l)
2279 {
2280 *(input_value + l) = *(DWORD *)&fvalue;
2281 fvalue += 1.12;
2282 }
2283 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
2284 hr = effect->lpVtbl->SetMatrix(effect, parameter, (D3DXMATRIX *)input_value);
2285 if (!res_desc->Elements && res_desc->Class == D3DXPC_MATRIX_ROWS)
2286 {
2287 for (l = 0; l < 4; ++l)
2288 {
2289 for (m = 0; m < 4; ++m)
2290 {
2291 if (m < res_desc->Rows && l < res_desc->Columns)
2292 set_number(expected_value + l + m * res_desc->Columns, res_desc->Type,
2293 input_value + l + m * 4, D3DXPT_FLOAT);
2294 }
2295
2296 }
2297 ok(hr == D3D_OK, "%u - %s: SetMatrix failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
2298 }
2299 else
2300 {
2301 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrix failed, got %#x, expected %#x\n",
2302 i, res_full_name, hr, D3DERR_INVALIDCALL);
2303 }
2304 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
2305 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
2306
2307 /* SetMatrixArray */
2308 for (element = 0; element < res_desc->Elements + 1; ++element)
2309 {
2310 fvalue = 1.33;
2311 for (l = 0; l < element * 16; ++l)
2312 {
2313 *(input_value + l) = *(DWORD *)&fvalue;
2314 fvalue += 1.12;
2315 }
2316 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
2317 hr = effect->lpVtbl->SetMatrixArray(effect, parameter, (D3DXMATRIX *)input_value, element);
2318 if (res_desc->Class == D3DXPC_MATRIX_ROWS && element <= res_desc->Elements)
2319 {
2320 for (n = 0; n < element; ++n)
2321 {
2322 for (l = 0; l < 4; ++l)
2323 {
2324 for (m = 0; m < 4; ++m)
2325 {
2326 if (m < res_desc->Rows && l < res_desc->Columns)
2327 set_number(expected_value + l + m * res_desc->Columns + n * res_desc->Columns * res_desc->Rows,
2328 res_desc->Type, input_value + l + m * 4 + n * 16, D3DXPT_FLOAT);
2329 }
2330
2331 }
2332 }
2333 ok(hr == D3D_OK, "%u - %s: SetMatrixArray failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
2334 }
2335 else
2336 {
2337 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrixArray failed, got %#x, expected %#x\n",
2338 i, res_full_name, hr, D3DERR_INVALIDCALL);
2339 }
2340 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
2341 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
2342 }
2343
2344 /* SetMatrixPointerArray */
2345 for (element = 0; element < res_desc->Elements + 1; ++element)
2346 {
2347 fvalue = 1.33;
2348 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l)
2349 {
2350 *(input_value + l) = *(DWORD *)&fvalue;
2351 fvalue += 1.12;
2352 }
2353 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
2354 for (l = 0; l < element; ++l)
2355 {
2356 matrix_pointer_array[l] = (D3DXMATRIX *)&input_value[l * sizeof(**matrix_pointer_array) / sizeof(FLOAT)];
2357 }
2358 hr = effect->lpVtbl->SetMatrixPointerArray(effect, parameter, matrix_pointer_array, element);
2359 if (res_desc->Class == D3DXPC_MATRIX_ROWS && res_desc->Elements >= element)
2360 {
2361 for (n = 0; n < element; ++n)
2362 {
2363 for (l = 0; l < 4; ++l)
2364 {
2365 for (m = 0; m < 4; ++m)
2366 {
2367 if (m < res_desc->Rows && l < res_desc->Columns)
2368 set_number(expected_value + l + m * res_desc->Columns + n * res_desc->Columns * res_desc->Rows,
2369 res_desc->Type, input_value + l + m * 4 + n * 16, D3DXPT_FLOAT);
2370 }
2371
2372 }
2373 }
2374 ok(hr == D3D_OK, "%u - %s: SetMatrixPointerArray failed, got %#x, expected %#x\n",
2375 i, res_full_name, hr, D3D_OK);
2376 }
2377 else
2378 {
2379 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrixPointerArray failed, got %#x, expected %#x\n",
2380 i, res_full_name, hr, D3DERR_INVALIDCALL);
2381 }
2382 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
2383 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
2384 }
2385
2386 /* SetMatrixTranspose */
2387 fvalue = 1.33;
2388 for (l = 0; l < 16; ++l)
2389 {
2390 *(input_value + l) = *(DWORD *)&fvalue;
2391 fvalue += 1.12;
2392 }
2393 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
2394 hr = effect->lpVtbl->SetMatrixTranspose(effect, parameter, (D3DXMATRIX *)input_value);
2395 if (!res_desc->Elements && res_desc->Class == D3DXPC_MATRIX_ROWS)
2396 {
2397 for (l = 0; l < 4; ++l)
2398 {
2399 for (m = 0; m < 4; ++m)
2400 {
2401 if (m < res_desc->Rows && l < res_desc->Columns)
2402 set_number(expected_value + l + m * res_desc->Columns, res_desc->Type,
2403 input_value + l * 4 + m, D3DXPT_FLOAT);
2404 }
2405
2406 }
2407 ok(hr == D3D_OK, "%u - %s: SetMatrixTranspose failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
2408 }
2409 else
2410 {
2411 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrixTranspose failed, got %#x, expected %#x\n",
2412 i, res_full_name, hr, D3DERR_INVALIDCALL);
2413 }
2414 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
2415 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
2416
2417 /* SetMatrixTransposeArray */
2418 for (element = 0; element < res_desc->Elements + 1; ++element)
2419 {
2420 fvalue = 1.33;
2421 for (l = 0; l < element * 16; ++l)
2422 {
2423 *(input_value + l) = *(DWORD *)&fvalue;
2424 fvalue += 1.12;
2425 }
2426 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
2427 hr = effect->lpVtbl->SetMatrixTransposeArray(effect, parameter, (D3DXMATRIX *)input_value, element);
2428 if (res_desc->Class == D3DXPC_MATRIX_ROWS && element <= res_desc->Elements)
2429 {
2430 for (n = 0; n < element; ++n)
2431 {
2432 for (l = 0; l < 4; ++l)
2433 {
2434 for (m = 0; m < 4; ++m)
2435 {
2436 if (m < res_desc->Rows && l < res_desc->Columns)
2437 set_number(expected_value + l + m * res_desc->Columns + n * res_desc->Columns * res_desc->Rows,
2438 res_desc->Type, input_value + l * 4 + m + n * 16, D3DXPT_FLOAT);
2439 }
2440
2441 }
2442 }
2443 ok(hr == D3D_OK, "%u - %s: SetMatrixTransposeArray failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
2444 }
2445 else
2446 {
2447 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrixTransposeArray failed, got %#x, expected %#x\n",
2448 i, res_full_name, hr, D3DERR_INVALIDCALL);
2449 }
2450 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
2451 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
2452 }
2453
2454 /* SetMatrixTransposePointerArray */
2455 for (element = 0; element < res_desc->Elements + 1; ++element)
2456 {
2457 fvalue = 1.33;
2458 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l)
2459 {
2460 *(input_value + l) = *(DWORD *)&fvalue;
2461 fvalue += 1.12;
2462 }
2463 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
2464 for (l = 0; l < element; ++l)
2465 {
2466 matrix_pointer_array[l] = (D3DXMATRIX *)&input_value[l * sizeof(**matrix_pointer_array) / sizeof(FLOAT)];
2467 }
2468 hr = effect->lpVtbl->SetMatrixTransposePointerArray(effect, parameter, matrix_pointer_array, element);
2469 if (res_desc->Class == D3DXPC_MATRIX_ROWS && res_desc->Elements >= element)
2470 {
2471 for (n = 0; n < element; ++n)
2472 {
2473 for (l = 0; l < 4; ++l)
2474 {
2475 for (m = 0; m < 4; ++m)
2476 {
2477 if (m < res_desc->Rows && l < res_desc->Columns)
2478 set_number(expected_value + l + m * res_desc->Columns + n * res_desc->Columns * res_desc->Rows,
2479 res_desc->Type, input_value + l * 4 + m + n * 16, D3DXPT_FLOAT);
2480 }
2481
2482 }
2483 }
2484 ok(hr == D3D_OK, "%u - %s: SetMatrixTransposePointerArray failed, got %#x, expected %#x\n",
2485 i, res_full_name, hr, D3D_OK);
2486 }
2487 else
2488 {
2489 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrixTransposePointerArray failed, got %#x, expected %#x\n",
2490 i, res_full_name, hr, D3DERR_INVALIDCALL);
2491 }
2492 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
2493 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
2494 }
2495 }
2496
2497 count = effect->lpVtbl->Release(effect);
2498 ok(!count, "Release failed %u\n", count);
2499 }
2500}
2501
2502static void test_effect_setvalue_object(IDirect3DDevice9 *device)
2503{
2504 static const char expected_string[] = "test_string_1";
2505 static const char expected_string2[] = "test_longer_string_2";
2506 static const char *expected_string_array[] = {expected_string, expected_string2};
2507 const char *string_array[ARRAY_SIZE(expected_string_array)];
2508 const char *string, *string2;
2509 IDirect3DTexture9 *texture_set;
2510 IDirect3DTexture9 *texture;
2511 D3DXHANDLE parameter;
2512 ID3DXEffect *effect;
2513 unsigned int i;
2514 ULONG count;
2515 HRESULT hr;
2516
2519 ok(hr == D3D_OK, "Got result %#x, expected 0 (D3D_OK).\n", hr);
2520
2521 parameter = effect->lpVtbl->GetParameterByName(effect, NULL, "tex");
2522 ok(parameter != NULL, "GetParameterByName failed, got %p\n", parameter);
2523
2524 texture = NULL;
2526 ok(hr == D3D_OK, "Got result %#x, expected 0 (D3D_OK).\n", hr);
2527 hr = effect->lpVtbl->SetValue(effect, parameter, &texture, sizeof(texture));
2528 ok(hr == D3D_OK, "Got result %#x, expected 0 (D3D_OK).\n", hr);
2529 texture_set = NULL;
2530 hr = effect->lpVtbl->GetValue(effect, parameter, &texture_set, sizeof(texture_set));
2531 ok(hr == D3D_OK, "Got result %#x, expected 0 (D3D_OK).\n", hr);
2532 ok(texture == texture_set, "Texture does not match.\n");
2533
2534 count = IDirect3DTexture9_Release(texture_set);
2535 ok(count == 2, "Got reference count %u, expected 2.\n", count);
2536 texture_set = NULL;
2537 hr = effect->lpVtbl->SetValue(effect, parameter, &texture_set, sizeof(texture_set));
2538 ok(hr == D3D_OK, "Got result %#x, expected 0 (D3D_OK).\n", hr);
2540 ok(!count, "Got reference count %u, expected 0.\n", count);
2541
2542 hr = effect->lpVtbl->SetString(effect, "s", expected_string);
2543 ok(hr == D3D_OK, "Got result %#x.\n", hr);
2544 string = NULL;
2545 hr = effect->lpVtbl->GetString(effect, "s", &string);
2546 ok(hr == D3D_OK, "Got result %#x.\n", hr);
2547 hr = effect->lpVtbl->GetString(effect, "s", &string2);
2548 ok(hr == D3D_OK, "Got result %#x.\n", hr);
2549
2550 ok(string != expected_string, "String pointers are the same.\n");
2551 ok(string == string2, "String pointers differ.\n");
2552 ok(!strcmp(string, expected_string), "Unexpected string '%s'.\n", string);
2553
2554 string = expected_string2;
2555 hr = effect->lpVtbl->SetValue(effect, "s", &string, sizeof(string) - 1);
2556 ok(hr == D3DERR_INVALIDCALL, "Got result %#x.\n", hr);
2557 hr = effect->lpVtbl->SetValue(effect, "s", &string, sizeof(string));
2558 ok(hr == D3D_OK, "Got result %#x.\n", hr);
2559 hr = effect->lpVtbl->SetValue(effect, "s", &string, sizeof(string) * 2);
2560 ok(hr == D3D_OK, "Got result %#x.\n", hr);
2561 string = NULL;
2562 hr = effect->lpVtbl->GetValue(effect, "s", &string, sizeof(string));
2563 ok(hr == D3D_OK, "Got result %#x.\n", hr);
2564
2565 ok(string != expected_string2, "String pointers are the same.\n");
2566 ok(!strcmp(string, expected_string2), "Unexpected string '%s'.\n", string);
2567
2568 hr = effect->lpVtbl->SetValue(effect, "s_2", expected_string_array,
2569 sizeof(expected_string_array));
2570 ok(hr == D3D_OK, "Got result %#x.\n", hr);
2571 hr = effect->lpVtbl->GetValue(effect, "s_2", string_array,
2572 sizeof(string_array));
2573 ok(hr == D3D_OK, "Got result %#x.\n", hr);
2574 for (i = 0; i < ARRAY_SIZE(expected_string_array); ++i)
2575 {
2576 ok(!strcmp(string_array[i], expected_string_array[i]), "Unexpected string '%s', i %u.\n",
2577 string_array[i], i);
2578 }
2579 effect->lpVtbl->Release(effect);
2580}
2581
2582/*
2583 * fxc.exe /Tfx_2_0
2584 */
2585#if 0
2586float a = 2.1;
2587float b[1];
2588float c <float d = 3;>;
2589struct {float e;} f;
2590float g <float h[1] = {3};>;
2591struct s {float j;};
2592float i <s k[1] = {4};>;
2593technique t <s l[1] = {5};> { pass p <s m[1] = {6};> { } }
2594#endif
2596{
25970xfeff0901, 0x0000024c, 0x00000000, 0x00000003, 0x00000000, 0x00000024, 0x00000000, 0x00000000,
25980x00000001, 0x00000001, 0x40066666, 0x00000002, 0x00000061, 0x00000003, 0x00000000, 0x0000004c,
25990x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000002, 0x00000062, 0x00000003,
26000x00000000, 0x0000009c, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000000, 0x40400000,
26010x00000003, 0x00000000, 0x00000094, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000002,
26020x00000064, 0x00000002, 0x00000063, 0x00000000, 0x00000005, 0x000000dc, 0x00000000, 0x00000000,
26030x00000001, 0x00000003, 0x00000000, 0x000000e4, 0x00000000, 0x00000000, 0x00000001, 0x00000001,
26040x00000000, 0x00000002, 0x00000066, 0x00000002, 0x00000065, 0x00000003, 0x00000000, 0x00000134,
26050x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000000, 0x40400000, 0x00000003, 0x00000000,
26060x0000012c, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000068, 0x00000002,
26070x00000067, 0x00000003, 0x00000000, 0x000001a4, 0x00000000, 0x00000000, 0x00000001, 0x00000001,
26080x00000000, 0x40800000, 0x00000000, 0x00000005, 0x00000194, 0x00000000, 0x00000001, 0x00000001,
26090x00000003, 0x00000000, 0x0000019c, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000002,
26100x0000006b, 0x00000002, 0x0000006a, 0x00000002, 0x00000069, 0x40a00000, 0x00000000, 0x00000005,
26110x000001e4, 0x00000000, 0x00000001, 0x00000001, 0x00000003, 0x00000000, 0x000001ec, 0x00000000,
26120x00000000, 0x00000001, 0x00000001, 0x00000002, 0x0000006c, 0x00000002, 0x0000006a, 0x40c00000,
26130x00000000, 0x00000005, 0x0000022c, 0x00000000, 0x00000001, 0x00000001, 0x00000003, 0x00000000,
26140x00000234, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000002, 0x0000006d, 0x00000002,
26150x0000006a, 0x00000002, 0x00000070, 0x00000002, 0x00000074, 0x00000006, 0x00000001, 0x00000001,
26160x00000001, 0x00000004, 0x00000020, 0x00000000, 0x00000000, 0x0000002c, 0x00000048, 0x00000000,
26170x00000000, 0x00000054, 0x00000070, 0x00000000, 0x00000001, 0x00000078, 0x00000074, 0x000000a4,
26180x000000d8, 0x00000000, 0x00000000, 0x000000ec, 0x00000108, 0x00000000, 0x00000001, 0x00000110,
26190x0000010c, 0x0000013c, 0x00000158, 0x00000000, 0x00000001, 0x00000160, 0x0000015c, 0x00000244,
26200x00000001, 0x00000001, 0x000001b0, 0x000001ac, 0x0000023c, 0x00000001, 0x00000000, 0x000001f8,
26210x000001f4, 0x00000000, 0x00000000,
2622};
2623
2624static void test_effect_variable_names(IDirect3DDevice9 *device)
2625{
2626 ID3DXEffect *effect;
2627 ULONG count;
2628 HRESULT hr;
2629 D3DXHANDLE parameter, p;
2630
2632 sizeof(test_effect_variable_names_blob), NULL, NULL, 0, NULL, &effect, NULL);
2633 ok(hr == D3D_OK, "D3DXCreateEffect failed, got %#x, expected %#x\n", hr, D3D_OK);
2634
2635 /*
2636 * check invalid calls
2637 * This will crash:
2638 * effect->lpVtbl->GetAnnotationByName(effect, "invalid1", "invalid2");
2639 */
2640 p = effect->lpVtbl->GetParameterByName(effect, NULL, NULL);
2641 ok(p == NULL, "GetParameterByName failed, got %p, expected %p\n", p, NULL);
2642
2643 p = effect->lpVtbl->GetParameterByName(effect, NULL, "invalid1");
2644 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2645
2646 p = effect->lpVtbl->GetParameterByName(effect, "invalid1", NULL);
2647 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2648
2649 p = effect->lpVtbl->GetParameterByName(effect, "invalid1", "invalid2");
2650 ok(p == NULL, "GetParameterByName failed, got %p, expected %p\n", p, NULL);
2651
2652 /* float a; */
2653 parameter = effect->lpVtbl->GetParameterByName(effect, NULL, "a");
2654 ok(parameter != NULL, "GetParameterByName failed, got %p\n", parameter);
2655
2656 p = effect->lpVtbl->GetParameterByName(effect, "a", NULL);
2657 ok(parameter == p, "GetParameterByName failed, got %p, expected %p\n", p, parameter);
2658
2659 /* members */
2660 p = effect->lpVtbl->GetParameterByName(effect, NULL, "a.");
2661 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2662
2663 p = effect->lpVtbl->GetParameterByName(effect, "a.", NULL);
2664 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2665
2666 p = effect->lpVtbl->GetParameterByName(effect, "a", ".");
2667 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2668
2669 p = effect->lpVtbl->GetParameterByName(effect, NULL, "a.invalid");
2670 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2671
2672 p = effect->lpVtbl->GetParameterByName(effect, "a.invalid", NULL);
2673 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2674
2675 p = effect->lpVtbl->GetParameterByName(effect, "a", ".invalid");
2676 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2677
2678 p = effect->lpVtbl->GetParameterByName(effect, "a.", "invalid");
2679 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2680
2681 p = effect->lpVtbl->GetParameterByName(effect, "a", "invalid");
2682 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2683
2684 /* elements */
2685 p = effect->lpVtbl->GetParameterByName(effect, NULL, "a[]");
2686 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2687
2688 p = effect->lpVtbl->GetParameterByName(effect, "a[]", NULL);
2689 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2690
2691 p = effect->lpVtbl->GetParameterByName(effect, NULL, "a[0]");
2692 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2693
2694 p = effect->lpVtbl->GetParameterByName(effect, "a[0]", NULL);
2695 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2696
2697 p = effect->lpVtbl->GetParameterByName(effect, "a", "[0]");
2698 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2699
2700 p = effect->lpVtbl->GetParameterElement(effect, "a", 0);
2701 ok(p == NULL, "GetParameterElement failed, got %p\n", p);
2702
2703 /* annotations */
2704 p = effect->lpVtbl->GetParameterByName(effect, NULL, "a@");
2705 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2706
2707 p = effect->lpVtbl->GetParameterByName(effect, "a@", NULL);
2708 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2709
2710 p = effect->lpVtbl->GetParameterByName(effect, "a", "@invalid");
2711 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2712
2713 p = effect->lpVtbl->GetParameterByName(effect, "a@", "invalid");
2714 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2715
2716 p = effect->lpVtbl->GetParameterByName(effect, NULL, "a@invalid");
2717 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2718
2719 p = effect->lpVtbl->GetParameterByName(effect, "a@invalid", NULL);
2720 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2721
2722 p = effect->lpVtbl->GetAnnotationByName(effect, "a", NULL);
2723 ok(p == NULL, "GetAnnotationByName failed, got %p\n", p);
2724
2725 p = effect->lpVtbl->GetAnnotationByName(effect, "a", "invalid");
2726 ok(p == NULL, "GetAnnotationByName failed, got %p\n", p);
2727
2728 p = effect->lpVtbl->GetAnnotation(effect, "a", 0);
2729 ok(p == NULL, "GetAnnotation failed, got %p\n", p);
2730
2731 /* float b[1]; */
2732 parameter = effect->lpVtbl->GetParameterByName(effect, NULL, "b");
2733 ok(parameter != NULL, "GetParameterByName failed, got %p\n", parameter);
2734
2735 p = effect->lpVtbl->GetParameterByName(effect, "b", NULL);
2736 ok(parameter == p, "GetParameterByName failed, got %p, expected %p\n", p, parameter);
2737
2738 /* elements */
2739 p = effect->lpVtbl->GetParameterByName(effect, NULL, "b[]");
2740 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2741
2742 parameter = effect->lpVtbl->GetParameterByName(effect, NULL, "b[0]");
2743 ok(parameter != NULL, "GetParameterByName failed, got %p\n", parameter);
2744
2745 p = effect->lpVtbl->GetParameterByName(effect, "b[0]", NULL);
2746 ok(parameter == p, "GetParameterByName failed, got %p, expected %p\n", p, parameter);
2747
2748 p = effect->lpVtbl->GetParameterElement(effect, "b", 0);
2749 ok(parameter == p, "GetParameterElement failed, got %p, expected %p\n", p, parameter);
2750
2751 p = effect->lpVtbl->GetParameterByName(effect, "b", "[0]");
2752 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2753
2754 p = effect->lpVtbl->GetParameterByName(effect, NULL, "b[1]");
2755 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2756
2757 p = effect->lpVtbl->GetParameterElement(effect, "b", 1);
2758 ok(p == NULL, "GetParameterElement failed, got %p\n", p);
2759
2760 /* float c <float d = 3;>; */
2761 parameter = effect->lpVtbl->GetParameterByName(effect, NULL, "c");
2762 ok(parameter != NULL, "GetParameterByName failed, got %p\n", parameter);
2763
2764 p = effect->lpVtbl->GetParameterByName(effect, "c", NULL);
2765 ok(parameter == p, "GetParameterByName failed, got %p, expected %p\n", p, parameter);
2766
2767 /* annotations */
2768 p = effect->lpVtbl->GetParameterByName(effect, "c", "@d");
2769 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2770
2771 p = effect->lpVtbl->GetParameterByName(effect, "c@", "d");
2772 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2773
2774 p = effect->lpVtbl->GetParameterByName(effect, NULL, "c@invalid");
2775 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2776
2777 p = effect->lpVtbl->GetParameterByName(effect, "c@invalid", NULL);
2778 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2779
2780 p = effect->lpVtbl->GetAnnotationByName(effect, "c", NULL);
2781 ok(p == NULL, "GetAnnotationByName failed, got %p\n", p);
2782
2783 p = effect->lpVtbl->GetAnnotationByName(effect, "c", "invalid");
2784 ok(p == NULL, "GetAnnotationByName failed, got %p\n", p);
2785
2786 parameter = effect->lpVtbl->GetParameterByName(effect, NULL, "c@d");
2787 ok(parameter != NULL, "GetParameterByName failed, got %p\n", parameter);
2788
2789 p = effect->lpVtbl->GetParameterByName(effect, "c@d", NULL);
2790 ok(parameter == p, "GetParameterByName failed, got %p, expected %p\n", p, parameter);
2791
2792 p = effect->lpVtbl->GetAnnotationByName(effect, "c", "d");
2793 ok(parameter == p, "GetAnnotationByName failed, got %p, expected %p\n", p, parameter);
2794
2795 p = effect->lpVtbl->GetAnnotation(effect, "c", 0);
2796 ok(parameter == p, "GetAnnotation failed, got %p, expected %p\n", p, parameter);
2797
2798 p = effect->lpVtbl->GetAnnotation(effect, "c", 1);
2799 ok(p == NULL, "GetAnnotation failed, got %p\n", p);
2800
2801 /* struct {float e;} f; */
2802 parameter = effect->lpVtbl->GetParameterByName(effect, NULL, "f");
2803 ok(parameter != NULL, "GetParameterByName failed, got %p\n", parameter);
2804
2805 p = effect->lpVtbl->GetParameterByName(effect, "f", NULL);
2806 ok(parameter == p, "GetParameterByName failed, got %p, expected %p\n", p, parameter);
2807
2808 /* members */
2809 parameter = effect->lpVtbl->GetParameterByName(effect, NULL, "f.e");
2810 ok(parameter != NULL, "GetParameterByName failed, got %p\n", parameter);
2811
2812 p = effect->lpVtbl->GetParameterByName(effect, "f.e", NULL);
2813 ok(parameter == p, "GetParameterByName failed, got %p, expected %p\n", p, parameter);
2814
2815 p = effect->lpVtbl->GetParameterByName(effect, "f", "e");
2816 ok(parameter == p, "GetParameterByName failed, got %p, expected %p\n", p, parameter);
2817
2818 p = effect->lpVtbl->GetParameterByName(effect, "f", ".e");
2819 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2820
2821 p = effect->lpVtbl->GetParameterByName(effect, "f.", "e");
2822 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2823
2824 p = effect->lpVtbl->GetParameterByName(effect, "f.invalid", NULL);
2825 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2826
2827 p = effect->lpVtbl->GetParameterByName(effect, NULL, "f.invalid");
2828 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2829
2830 /* float g <float h[1] = {3};>; */
2831 parameter = effect->lpVtbl->GetParameterByName(effect, NULL, "g@h[0]");
2832 ok(parameter != NULL, "GetParameterByName failed, got %p\n", parameter);
2833
2834 p = effect->lpVtbl->GetAnnotationByName(effect, "g", "h[0]");
2835 ok(parameter == p, "GetAnnotationByName failed, got %p, expected %p\n", p, parameter);
2836
2837 p = effect->lpVtbl->GetParameterElement(effect, "g@h", 0);
2838 ok(parameter == p, "GetParameterElement failed, got %p, expected %p\n", p, parameter);
2839
2840 p = effect->lpVtbl->GetParameterElement(effect, effect->lpVtbl->GetAnnotation(effect, "g", 0), 0);
2841 ok(parameter == p, "GetParameterElement failed, got %p, expected %p\n", p, parameter);
2842
2843 /* struct s {float j;}; float i <s k[1] = {4};>; */
2844 parameter = effect->lpVtbl->GetParameterByName(effect, NULL, "i@k[0].j");
2845 ok(parameter != NULL, "GetParameterByName failed, got %p\n", parameter);
2846
2847 p = effect->lpVtbl->GetAnnotationByName(effect, "i", "k[0].j");
2848 ok(parameter == p, "GetAnnotationByName failed, got %p, expected %p\n", p, parameter);
2849
2850 p = effect->lpVtbl->GetParameterByName(effect, effect->lpVtbl->GetParameterElement(effect, "i@k", 0), "j");
2851 ok(parameter == p, "GetParameterElement failed, got %p, expected %p\n", p, parameter);
2852
2853 /* technique t <s l[1] = {5};> */
2854 parameter = effect->lpVtbl->GetAnnotationByName(effect, "t", "l[0].j");
2855 ok(parameter != NULL, "GetParameterByName failed, got %p\n", parameter);
2856
2857 /* pass p <s m[1] = {6};> */
2858 parameter = effect->lpVtbl->GetAnnotationByName(effect, effect->lpVtbl->GetPassByName(effect, "t", "p"), "m[0].j");
2859 ok(parameter != NULL, "GetParameterByName failed, got %p\n", parameter);
2860
2861 count = effect->lpVtbl->Release(effect);
2862 ok(!count, "Release failed %u\n", count);
2863}
2864
2865static void test_effect_compilation_errors(IDirect3DDevice9 *device)
2866{
2867 ID3DXEffect *effect;
2868 ID3DXBuffer *compilation_errors;
2869 HRESULT hr;
2870
2871 /* Test binary effect */
2872 compilation_errors = (ID3DXBuffer*)0xdeadbeef;
2873 hr = D3DXCreateEffect(NULL, NULL, 0, NULL, NULL, 0, NULL, NULL, &compilation_errors);
2874 ok(hr == D3DERR_INVALIDCALL, "D3DXCreateEffect failed, got %#x, expected %#x\n", hr, D3DERR_INVALIDCALL);
2875 ok(!compilation_errors, "Returned %p\n", compilation_errors);
2876
2877 compilation_errors = (ID3DXBuffer*)0xdeadbeef;
2879 sizeof(test_effect_variable_names_blob), NULL, NULL, 0, NULL, &effect, &compilation_errors);
2880 ok(hr == D3D_OK, "D3DXCreateEffect failed, got %#x, expected %#x\n", hr, D3D_OK);
2881 ok(!compilation_errors, "Returned %p\n", compilation_errors);
2882 effect->lpVtbl->Release(effect);
2883}
2884
2885/*
2886 * fxc.exe /Tfx_2_0
2887 */
2888#if 0
2889vertexshader vs_arr1[2] =
2890{
2891 asm
2892 {
2893 vs_1_1
2894 def c0, 1, 1, 1, 1
2895 mov oPos, c0
2896 },
2897 asm
2898 {
2899 vs_2_0
2900 def c0, 2, 2, 2, 2
2901 mov oPos, c0
2902 }
2903};
2904
2905sampler sampler1 =
2906 sampler_state
2907 {
2908 MipFilter = LINEAR;
2909 };
2910
2911float4x4 camera : VIEW = {4.0,0.0,0.0,0.0, 0.0,0.0,0.0,0.0, 0.0,0.0,0.0,0.0, 0.0,0.0,0.0,6.0};
2912technique tech0
2913{
2914 pass p0
2915 {
2916 vertexshader = vs_arr1[1];
2917 VertexShaderConstant1[1] = 3.0f;
2918 VertexShaderConstant4[2] = 1;
2919 VertexShaderConstant1[3] = {2, 2, 2, 2};
2920 VertexShaderConstant4[4] = {4, 4, 4, 4, 5, 5, 5, 5, 6};
2921 BlendOp = 2;
2922 AlphaOp[3] = 4;
2923 ZEnable = true;
2924 WorldTransform[1]={2.0,0.0,0.0,0.0, 0.0,0.0,0.0,0.0, 0.0,0.0,0.0,0.0, 0.0,0.0,0.0,4.0};
2925 ViewTransform=(camera);
2926 LightEnable[2] = TRUE;
2927 LightType[2] = POINT;
2928 LightPosition[2] = {4.0f, 5.0f, 6.0f};
2929 Sampler[1] = sampler1;
2930 }
2931}
2932#endif
2934{
2935 0xfeff0901, 0x00000368, 0x00000000, 0x00000010, 0x00000004, 0x00000020, 0x00000000, 0x00000002,
2936 0x00000001, 0x00000002, 0x00000008, 0x615f7376, 0x00317272, 0x0000000a, 0x00000004, 0x00000074,
2937 0x00000000, 0x00000000, 0x00000002, 0x00000002, 0x00000002, 0x00000000, 0x00000000, 0x00000000,
2938 0x00000001, 0x00000001, 0x00000001, 0x000000ab, 0x00000100, 0x00000044, 0x00000040, 0x00000009,
2939 0x706d6173, 0x3172656c, 0x00000000, 0x00000003, 0x00000002, 0x000000e0, 0x000000ec, 0x00000000,
2940 0x00000004, 0x00000004, 0x40800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2941 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2942 0x00000000, 0x40c00000, 0x00000007, 0x656d6163, 0x00006172, 0x00000005, 0x57454956, 0x00000000,
2943 0x00000003, 0x00000010, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x40400000, 0x00000003,
2944 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x3f800000, 0x00000003,
2945 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x40000000, 0x40000000,
2946 0x40000000, 0x40000000, 0x00000003, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000004,
2947 0x00000001, 0x40800000, 0x40800000, 0x40800000, 0x40800000, 0x40a00000, 0x40a00000, 0x40a00000,
2948 0x40a00000, 0x40c00000, 0x00000003, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000009,
2949 0x00000001, 0x00000002, 0x00000002, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000001,
2950 0x00000001, 0x00000004, 0x00000002, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000001,
2951 0x00000001, 0x00000001, 0x00000002, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000001,
2952 0x00000001, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2953 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2954 0x40800000, 0x00000003, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0x00000001,
2955 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2956 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2957 0x00000003, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000004, 0x00000004, 0x00000001,
2958 0x00000002, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001,
2959 0x00000002, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x40800000,
2960 0x40a00000, 0x40c00000, 0x00000003, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000003,
2961 0x00000001, 0x00000000, 0x0000000a, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000003,
2962 0x00003070, 0x00000006, 0x68636574, 0x00000030, 0x00000003, 0x00000001, 0x00000005, 0x00000004,
2963 0x00000004, 0x00000018, 0x00000000, 0x00000000, 0x0000002c, 0x00000060, 0x00000000, 0x00000000,
2964 0x00000084, 0x000000a0, 0x00000000, 0x00000000, 0x0000035c, 0x00000000, 0x00000001, 0x00000354,
2965 0x00000000, 0x0000000e, 0x00000092, 0x00000000, 0x000000fc, 0x000000f8, 0x00000098, 0x00000001,
2966 0x00000114, 0x00000110, 0x0000009b, 0x00000002, 0x00000134, 0x00000130, 0x00000098, 0x00000003,
2967 0x00000160, 0x00000150, 0x0000009b, 0x00000004, 0x000001a0, 0x0000017c, 0x0000004b, 0x00000000,
2968 0x000001c0, 0x000001bc, 0x0000006b, 0x00000003, 0x000001e0, 0x000001dc, 0x00000000, 0x00000000,
2969 0x00000200, 0x000001fc, 0x0000007d, 0x00000001, 0x0000025c, 0x0000021c, 0x0000007c, 0x00000000,
2970 0x000002b8, 0x00000278, 0x00000091, 0x00000002, 0x000002d8, 0x000002d4, 0x00000084, 0x00000002,
2971 0x000002f8, 0x000002f4, 0x00000088, 0x00000002, 0x00000320, 0x00000314, 0x000000b2, 0x00000001,
2972 0x00000340, 0x0000033c, 0x00000002, 0x00000003, 0x00000001, 0x0000002c, 0xfffe0101, 0x00000051,
2973 0xa00f0000, 0x3f800000, 0x3f800000, 0x3f800000, 0x3f800000, 0x00000001, 0xc00f0000, 0xa0e40000,
2974 0x0000ffff, 0x00000002, 0x0000002c, 0xfffe0200, 0x05000051, 0xa00f0000, 0x40000000, 0x40000000,
2975 0x40000000, 0x40000000, 0x02000001, 0xc00f0000, 0xa0e40000, 0x0000ffff, 0x00000000, 0x00000000,
2976 0xffffffff, 0x0000000d, 0x00000001, 0x00000009, 0x706d6173, 0x3172656c, 0x00000000, 0x00000000,
2977 0x00000000, 0xffffffff, 0x00000009, 0x00000000, 0x0000016c, 0x46580200, 0x0030fffe, 0x42415443,
2978 0x0000001c, 0x0000008b, 0x46580200, 0x00000001, 0x0000001c, 0x20000100, 0x00000088, 0x00000030,
2979 0x00000002, 0x00000004, 0x00000038, 0x00000048, 0x656d6163, 0xab006172, 0x00030003, 0x00040004,
2980 0x00000001, 0x00000000, 0x40800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2981 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2982 0x00000000, 0x40c00000, 0x4d007874, 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c,
2983 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131, 0x0002fffe,
2984 0x54494c43, 0x00000000, 0x0024fffe, 0x434c5846, 0x00000004, 0x10000004, 0x00000001, 0x00000000,
2985 0x00000002, 0x00000000, 0x00000000, 0x00000004, 0x00000000, 0x10000004, 0x00000001, 0x00000000,
2986 0x00000002, 0x00000004, 0x00000000, 0x00000004, 0x00000004, 0x10000004, 0x00000001, 0x00000000,
2987 0x00000002, 0x00000008, 0x00000000, 0x00000004, 0x00000008, 0x10000004, 0x00000001, 0x00000000,
2988 0x00000002, 0x0000000c, 0x00000000, 0x00000004, 0x0000000c, 0xf0f0f0f0, 0x0f0f0f0f, 0x0000ffff,
2989 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000001, 0x0000000b, 0x615f7376, 0x5b317272,
2990 0x00005d31,
2991};
2992#define TEST_EFFECT_STATES_VSHADER_POS 315
2993
2994static const D3DXVECTOR4 fvect_filler = {-9999.0f, -9999.0f, -9999.0f, -9999.0f};
2995
2996static void test_effect_clear_vconsts(IDirect3DDevice9 *device)
2997{
2998 unsigned int i;
2999 HRESULT hr;
3000
3001 for (i = 0; i < 256; ++i)
3002 {
3004 ok(hr == D3D_OK, "Got result %#x.\n", hr);
3005 }
3006}
3007
3008static void test_effect_states(IDirect3DDevice9 *device)
3009{
3010 static const D3DMATRIX test_mat =
3011 {{{
3012 -1.0f, 0.0f, 0.0f, 0.0f,
3013 0.0f, 0.0f, 0.0f, 0.0f,
3014 0.0f, 0.0f, 0.0f, 0.0f,
3015 0.0f, 0.0f, 0.0f, 0.0f
3016 }}};
3017 static const D3DMATRIX test_mat_camera =
3018 {{{
3019 4.0f, 0.0f, 0.0f, 0.0f,
3020 0.0f, 0.0f, 0.0f, 0.0f,
3021 0.0f, 0.0f, 0.0f, 0.0f,
3022 0.0f, 0.0f, 0.0f, 6.0f
3023 }}};
3024 static const D3DMATRIX test_mat_world1 =
3025 {{{
3026 2.0f, 0.0f, 0.0f, 0.0f,
3027 0.0f, 0.0f, 0.0f, 0.0f,
3028 0.0f, 0.0f, 0.0f, 0.0f,
3029 0.0f, 0.0f, 0.0f, 4.0f
3030 }}};
3031
3032 IDirect3DVertexShader9 *vshader;
3033 ID3DXEffect *effect;
3034 UINT byte_code_size;
3035 D3DXVECTOR4 fvect;
3036 void *byte_code;
3038 D3DMATRIX mat;
3039 UINT npasses;
3040 DWORD value;
3041 HRESULT hr;
3042 BOOL bval;
3043
3045 NULL, NULL, 0, NULL, &effect, NULL);
3046 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3047
3048 /* State affected in passes saved/restored even if no pass
3049 was performed. States not present in passes are not saved &
3050 restored */
3052 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3054 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3055
3056 hr = effect->lpVtbl->Begin(effect, &npasses, 0);
3057 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3058 ok(npasses == 1, "Expected 1 pass, got %u\n", npasses);
3059
3061 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3063 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3064
3065 hr = effect->lpVtbl->End(effect);
3066 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3067
3069 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3070 ok(value == 1, "Got result %u, expected %u.\n", value, 1);
3072 ok(value == 2, "Got result %u, expected %u.\n", value, 2);
3073
3074 /* Test states application in BeginPass. No states are restored
3075 on EndPass. */
3077 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3079 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3080
3082 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3083 if (hr == D3D_OK)
3084 ok(!bval, "Got result %u, expected 0.\n", bval);
3085
3087 hr = effect->lpVtbl->Begin(effect, NULL, 0);
3088 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3089
3091 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3092 ok(!memcmp(mat.m, test_mat.m, sizeof(mat)), "World matrix does not match.\n");
3093
3095
3096 hr = effect->lpVtbl->BeginPass(effect, 0);
3097 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3098
3100 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3101 ok(!memcmp(mat.m, test_mat_world1.m, sizeof(mat)), "World matrix does not match.\n");
3102
3104 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3105 ok(!memcmp(mat.m, test_mat_camera.m, sizeof(mat)), "View matrix does not match.\n");
3106
3108 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3109 ok(value == 2, "Got result %u, expected %u\n", value, 2);
3110
3112 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3113 ok(vshader != NULL, "Got NULL vshader.\n");
3114 if (vshader)
3115 {
3116 hr = IDirect3DVertexShader9_GetFunction(vshader, NULL, &byte_code_size);
3117 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3118 byte_code = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, byte_code_size);
3119 hr = IDirect3DVertexShader9_GetFunction(vshader, byte_code, &byte_code_size);
3120 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3121 ok(byte_code_size > 1, "Got unexpected byte code size %u.\n", byte_code_size);
3123 "Incorrect shader selected.\n");
3124 HeapFree(GetProcessHeap(), 0, byte_code);
3126 }
3127
3129 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3130 if (hr == D3D_OK)
3131 ok(bval, "Got result %u, expected TRUE.\n", bval);
3133 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3134 if (hr == D3D_OK)
3135 ok(light.Position.x == 4.0f && light.Position.y == 5.0f && light.Position.z == 6.0f,
3136 "Got unexpected light position (%f, %f, %f).\n", light.Position.x, light.Position.y, light.Position.z);
3137
3138 /* Testing first value only for constants 1, 2 as the rest of the vector seem to
3139 * contain garbage data on native. */
3141 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3142 ok(fvect.x == 3.0f, "Got unexpected vertex shader constant (%.8e, %.8e, %.8e, %.8e).\n",
3143 fvect.x, fvect.y, fvect.z, fvect.w);
3145 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3146 ok(fvect.x == 1.0f, "Got unexpected vertex shader constant (%.8e, %.8e, %.8e, %.8e).\n",
3147 fvect.x, fvect.y, fvect.z, fvect.w);
3148
3150 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3151 ok(fvect.x == 2.0f && fvect.y == 2.0f && fvect.z == 2.0f && fvect.w == 2.0f,
3152 "Got unexpected vertex shader constant (%.8e, %.8e, %.8e, %.8e).\n",
3153 fvect.x, fvect.y, fvect.z, fvect.w);
3154
3156 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3157 ok(fvect.x == 4.0f && fvect.y == 4.0f && fvect.z == 4.0f && fvect.w == 4.0f,
3158 "Got unexpected vertex shader constant (%.8e, %.8e, %.8e, %.8e).\n",
3159 fvect.x, fvect.y, fvect.z, fvect.w);
3161 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3162 ok(fvect.x == 0.0f && fvect.y == 0.0f && fvect.z == 0.0f && fvect.w == 0.0f,
3163 "Got unexpected vertex shader constant (%.8e, %.8e, %.8e, %.8e).\n",
3164 fvect.x, fvect.y, fvect.z, fvect.w);
3166 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3167 ok(fvect.x == 0.0f && fvect.y == 0.0f && fvect.z == 0.0f && fvect.w == 0.0f,
3168 "Got unexpected vertex shader constant (%.8e, %.8e, %.8e, %.8e).\n",
3169 fvect.x, fvect.y, fvect.z, fvect.w);
3171 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3172 ok(!memcmp(&fvect, &fvect_filler, sizeof(fvect_filler)),
3173 "Got unexpected vertex shader constant (%.8e, %.8e, %.8e, %.8e).\n",
3174 fvect.x, fvect.y, fvect.z, fvect.w);
3175