include: Make ARRAY_SIZE() available in wine/test.h.
[wine.git] / dlls / d3dx9_36 / tests / effect.c
blob4f26b63a130da2d516f5690cc9ccb1eb6e89f522
1 /*
2 * Copyright 2010 Christian Costa
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.
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.
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
19 #define COBJMACROS
20 #include "initguid.h"
21 #include <limits.h>
22 #include "wine/test.h"
23 #include "d3dx9.h"
25 #ifndef INFINITY
26 static inline float __port_infinity(void)
28 static const unsigned __inf_bytes = 0x7f800000;
29 return *(const float *)&__inf_bytes;
31 #define INFINITY __port_infinity()
32 #endif /* INFINITY */
34 #ifndef NAN
35 static float get_nan(void)
37 DWORD nan = 0x7fc00000;
39 return *(float *)&nan;
41 #define NAN get_nan()
42 #endif
44 /* helper functions */
45 static BOOL compare_float(FLOAT f, FLOAT g, UINT ulps)
47 INT x = *(INT *)&f;
48 INT y = *(INT *)&g;
50 if (x < 0)
51 x = INT_MIN - x;
52 if (y < 0)
53 y = INT_MIN - y;
55 if (abs(x - y) > ulps)
56 return FALSE;
58 return TRUE;
61 static inline INT get_int(D3DXPARAMETER_TYPE type, const void *data)
63 INT i;
65 switch (type)
67 case D3DXPT_FLOAT:
68 i = *(FLOAT *)data;
69 break;
71 case D3DXPT_INT:
72 i = *(INT *)data;
73 break;
75 case D3DXPT_BOOL:
76 i = *(BOOL *)data;
77 break;
79 default:
80 i = 0;
81 ok(0, "Unhandled type %x.\n", type);
82 break;
85 return i;
88 static inline float get_float(D3DXPARAMETER_TYPE type, const void *data)
90 float f;
92 switch (type)
94 case D3DXPT_FLOAT:
95 f = *(FLOAT *)data;
96 break;
98 case D3DXPT_INT:
99 f = *(INT *)data;
100 break;
102 case D3DXPT_BOOL:
103 f = *(BOOL *)data;
104 break;
106 default:
107 f = 0.0f;
108 ok(0, "Unhandled type %x.\n", type);
109 break;
112 return f;
115 static inline BOOL get_bool(const void *data)
117 return !!*(BOOL *)data;
120 static void set_number(void *outdata, D3DXPARAMETER_TYPE outtype, const void *indata, D3DXPARAMETER_TYPE intype)
122 switch (outtype)
124 case D3DXPT_FLOAT:
125 *(FLOAT *)outdata = get_float(intype, indata);
126 break;
128 case D3DXPT_BOOL:
129 *(BOOL *)outdata = get_bool(indata);
130 break;
132 case D3DXPT_INT:
133 *(INT *)outdata = get_int(intype, indata);
134 break;
136 case D3DXPT_PIXELSHADER:
137 case D3DXPT_VERTEXSHADER:
138 case D3DXPT_TEXTURE2D:
139 case D3DXPT_STRING:
140 *(INT *)outdata = 0x12345678;
141 break;
143 default:
144 ok(0, "Unhandled type %x.\n", outtype);
145 *(INT *)outdata = 0;
146 break;
150 static IDirect3DDevice9 *create_device(HWND *window)
152 D3DPRESENT_PARAMETERS present_parameters = { 0 };
153 IDirect3DDevice9 *device;
154 IDirect3D9 *d3d;
155 HRESULT hr;
156 HWND wnd;
158 *window = NULL;
160 if (!(wnd = CreateWindowA("static", "d3dx9_test", WS_OVERLAPPEDWINDOW, 0, 0,
161 640, 480, NULL, NULL, NULL, NULL)))
163 skip("Couldn't create application window.\n");
164 return NULL;
167 if (!(d3d = Direct3DCreate9(D3D_SDK_VERSION)))
169 skip("Couldn't create IDirect3D9 object.\n");
170 DestroyWindow(wnd);
171 return NULL;
174 present_parameters.Windowed = TRUE;
175 present_parameters.SwapEffect = D3DSWAPEFFECT_DISCARD;
176 hr = IDirect3D9_CreateDevice(d3d, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, wnd, D3DCREATE_HARDWARE_VERTEXPROCESSING,
177 &present_parameters, &device);
178 IDirect3D9_Release(d3d);
179 if (FAILED(hr))
181 skip("Failed to create IDirect3DDevice9 object %#x.\n", hr);
182 DestroyWindow(wnd);
183 return NULL;
186 *window = wnd;
187 return device;
190 static char temp_path[MAX_PATH];
192 static BOOL create_file(const char *filename, const char *data, const unsigned int size, char *out_path)
194 DWORD written;
195 HANDLE hfile;
196 char path[MAX_PATH];
198 if (!*temp_path)
199 GetTempPathA(sizeof(temp_path), temp_path);
201 strcpy(path, temp_path);
202 strcat(path, filename);
203 hfile = CreateFileA(path, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
204 if (hfile == INVALID_HANDLE_VALUE)
205 return FALSE;
207 if (WriteFile(hfile, data, size, &written, NULL))
209 CloseHandle(hfile);
211 if (out_path)
212 strcpy(out_path, path);
213 return TRUE;
216 CloseHandle(hfile);
217 return FALSE;
220 static void delete_file(const char *filename)
222 char path[MAX_PATH];
224 strcpy(path, temp_path);
225 strcat(path, filename);
226 DeleteFileA(path);
229 static BOOL create_directory(const char *name)
231 char path[MAX_PATH];
233 strcpy(path, temp_path);
234 strcat(path, name);
235 return CreateDirectoryA(path, NULL);
238 static void delete_directory(const char *name)
240 char path[MAX_PATH];
242 strcpy(path, temp_path);
243 strcat(path, name);
244 RemoveDirectoryA(path);
247 static const char effect_desc[] =
248 "Technique\n"
249 "{\n"
250 "}\n";
252 static void test_create_effect_and_pool(IDirect3DDevice9 *device)
254 HRESULT hr;
255 ID3DXEffect *effect;
256 ID3DXBaseEffect *base;
257 ULONG count;
258 IDirect3DDevice9 *device2;
259 ID3DXEffectStateManager *manager = (ID3DXEffectStateManager *)0xdeadbeef;
260 ID3DXEffectPool *pool = (ID3DXEffectPool *)0xdeadbeef, *pool2;
262 hr = D3DXCreateEffect(NULL, effect_desc, sizeof(effect_desc), NULL, NULL, 0, NULL, NULL, NULL);
263 ok(hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3D_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL);
265 hr = D3DXCreateEffect(device, NULL, 0, NULL, NULL, 0, NULL, NULL, NULL);
266 ok(hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3DERR_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL);
268 hr = D3DXCreateEffect(device, effect_desc, 0, NULL, NULL, 0, NULL, NULL, NULL);
269 ok(hr == E_FAIL, "Got result %x, expected %x (D3DXERR_INVALIDDATA)\n", hr, E_FAIL);
271 hr = D3DXCreateEffect(device, effect_desc, sizeof(effect_desc), NULL, NULL, 0, NULL, NULL, NULL);
272 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr);
274 hr = D3DXCreateEffect(device, effect_desc, sizeof(effect_desc), NULL, NULL, 0, NULL, &effect, NULL);
275 todo_wine ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr);
276 if (FAILED(hr))
278 skip("Failed to compile effect, skipping test.\n");
279 return;
282 hr = effect->lpVtbl->QueryInterface(effect, &IID_ID3DXBaseEffect, (void **)&base);
283 ok(hr == E_NOINTERFACE, "QueryInterface failed, got %x, expected %x (E_NOINTERFACE)\n", hr, E_NOINTERFACE);
285 hr = effect->lpVtbl->GetStateManager(effect, NULL);
286 ok(hr == D3DERR_INVALIDCALL, "GetStateManager failed, got %x, expected %x (D3DERR_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL);
288 hr = effect->lpVtbl->GetStateManager(effect, &manager);
289 ok(hr == D3D_OK, "GetStateManager failed, got %x, expected 0 (D3D_OK)\n", hr);
290 ok(!manager, "GetStateManager failed, got %p\n", manager);
292 /* this works, but it is not recommended! */
293 hr = effect->lpVtbl->SetStateManager(effect, (ID3DXEffectStateManager *)device);
294 ok(hr == D3D_OK, "SetStateManager failed, got %x, expected 0 (D3D_OK)\n", hr);
296 hr = effect->lpVtbl->GetStateManager(effect, &manager);
297 ok(hr == D3D_OK, "GetStateManager failed, got %x, expected 0 (D3D_OK)\n", hr);
298 ok(manager != NULL, "GetStateManager failed\n");
300 IDirect3DDevice9_AddRef(device);
301 count = IDirect3DDevice9_Release(device);
302 ok(count == 4, "Release failed, got %u, expected 4\n", count);
304 count = IUnknown_Release(manager);
305 ok(count == 3, "Release failed, got %u, expected 3\n", count);
307 hr = effect->lpVtbl->SetStateManager(effect, NULL);
308 ok(hr == D3D_OK, "SetStateManager failed, got %x, expected 0 (D3D_OK)\n", hr);
310 hr = effect->lpVtbl->GetPool(effect, &pool);
311 ok(hr == D3D_OK, "GetPool failed, got %x, expected 0 (D3D_OK)\n", hr);
312 ok(!pool, "GetPool failed, got %p\n", pool);
314 hr = effect->lpVtbl->GetPool(effect, NULL);
315 ok(hr == D3DERR_INVALIDCALL, "GetPool failed, got %x, expected %x (D3DERR_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL);
317 hr = effect->lpVtbl->GetDevice(effect, &device2);
318 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr);
320 hr = effect->lpVtbl->GetDevice(effect, NULL);
321 ok(hr == D3DERR_INVALIDCALL, "GetDevice failed, got %x, expected %x (D3DERR_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL);
323 count = IDirect3DDevice9_Release(device2);
324 ok(count == 2, "Release failed, got %u, expected 2\n", count);
326 count = effect->lpVtbl->Release(effect);
327 ok(count == 0, "Release failed %u\n", count);
329 hr = D3DXCreateEffectPool(NULL);
330 ok(hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3D_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL);
332 hr = D3DXCreateEffectPool(&pool);
333 ok(hr == S_OK, "Got result %x, expected 0 (S_OK)\n", hr);
335 count = pool->lpVtbl->Release(pool);
336 ok(count == 0, "Release failed %u\n", count);
338 hr = D3DXCreateEffectPool(&pool);
339 ok(hr == S_OK, "Got result %x, expected 0 (S_OK)\n", hr);
341 hr = D3DXCreateEffect(device, effect_desc, sizeof(effect_desc), NULL, NULL, 0, pool, NULL, NULL);
342 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr);
344 hr = pool->lpVtbl->QueryInterface(pool, &IID_ID3DXEffectPool, (void **)&pool2);
345 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr);
346 ok(pool == pool2, "Release failed, got %p, expected %p\n", pool2, pool);
348 count = pool2->lpVtbl->Release(pool2);
349 ok(count == 1, "Release failed, got %u, expected 1\n", count);
351 hr = IDirect3DDevice9_QueryInterface(device, &IID_IDirect3DDevice9, (void **)&device2);
352 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr);
354 count = IDirect3DDevice9_Release(device2);
355 ok(count == 1, "Release failed, got %u, expected 1\n", count);
357 hr = D3DXCreateEffect(device, effect_desc, sizeof(effect_desc), NULL, NULL, 0, pool, &effect, NULL);
358 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr);
360 hr = effect->lpVtbl->GetPool(effect, &pool);
361 ok(hr == D3D_OK, "GetPool failed, got %x, expected 0 (D3D_OK)\n", hr);
362 ok(pool == pool2, "GetPool failed, got %p, expected %p\n", pool2, pool);
364 count = pool2->lpVtbl->Release(pool2);
365 ok(count == 2, "Release failed, got %u, expected 2\n", count);
367 count = effect->lpVtbl->Release(effect);
368 ok(count == 0, "Release failed %u\n", count);
370 count = pool->lpVtbl->Release(pool);
371 ok(count == 0, "Release failed %u\n", count);
374 static void test_create_effect_compiler(void)
376 HRESULT hr;
377 ID3DXEffectCompiler *compiler, *compiler2;
378 ID3DXBaseEffect *base;
379 IUnknown *unknown;
380 ULONG count;
382 hr = D3DXCreateEffectCompiler(NULL, 0, NULL, NULL, 0, &compiler, NULL);
383 ok(hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3D_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL);
385 hr = D3DXCreateEffectCompiler(NULL, 0, NULL, NULL, 0, NULL, NULL);
386 ok(hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3D_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL);
388 hr = D3DXCreateEffectCompiler(effect_desc, 0, NULL, NULL, 0, &compiler, NULL);
389 ok(hr == D3D_OK, "Got result %x, expected %x (D3D_OK)\n", hr, D3D_OK);
390 if (FAILED(hr))
392 skip("D3DXCreateEffectCompiler failed, skipping test.\n");
393 return;
396 count = compiler->lpVtbl->Release(compiler);
397 ok(count == 0, "Release failed %u\n", count);
399 hr = D3DXCreateEffectCompiler(effect_desc, 0, NULL, NULL, 0, NULL, NULL);
400 ok(hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3D_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL);
402 hr = D3DXCreateEffectCompiler(NULL, sizeof(effect_desc), NULL, NULL, 0, &compiler, NULL);
403 ok(hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3D_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL);
405 hr = D3DXCreateEffectCompiler(NULL, sizeof(effect_desc), NULL, NULL, 0, NULL, NULL);
406 ok(hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3D_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL);
408 hr = D3DXCreateEffectCompiler(effect_desc, sizeof(effect_desc), NULL, NULL, 0, NULL, NULL);
409 ok(hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3DERR_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL);
411 hr = D3DXCreateEffectCompiler(effect_desc, sizeof(effect_desc), NULL, NULL, 0, &compiler, NULL);
412 ok(hr == D3D_OK, "Got result %x, expected %x (D3D_OK)\n", hr, D3D_OK);
414 hr = compiler->lpVtbl->QueryInterface(compiler, &IID_ID3DXBaseEffect, (void **)&base);
415 ok(hr == E_NOINTERFACE, "QueryInterface failed, got %x, expected %x (E_NOINTERFACE)\n", hr, E_NOINTERFACE);
417 hr = compiler->lpVtbl->QueryInterface(compiler, &IID_ID3DXEffectCompiler, (void **)&compiler2);
418 ok(hr == D3D_OK, "QueryInterface failed, got %x, expected %x (D3D_OK)\n", hr, D3D_OK);
420 hr = compiler->lpVtbl->QueryInterface(compiler, &IID_IUnknown, (void **)&unknown);
421 ok(hr == D3D_OK, "QueryInterface failed, got %x, expected %x (D3D_OK)\n", hr, D3D_OK);
423 count = unknown->lpVtbl->Release(unknown);
424 ok(count == 2, "Release failed, got %u, expected %u\n", count, 2);
426 count = compiler2->lpVtbl->Release(compiler2);
427 ok(count == 1, "Release failed, got %u, expected %u\n", count, 1);
429 count = compiler->lpVtbl->Release(compiler);
430 ok(count == 0, "Release failed %u\n", count);
434 * Parameter value test
436 struct test_effect_parameter_value_result
438 const char *full_name;
439 D3DXPARAMETER_DESC desc;
440 UINT value_offset; /* start position for the value in the blob */
444 * fxc.exe /Tfx_2_0
446 #if 0
447 float f = 0.1;
448 float1 f1 = {1.1};
449 float2 f2 = {2.1, 2.2};
450 float3 f3 = {3.1, 3.2, 3.3};
451 float4 f4 = {4.1, 4.2, 4.3, 4.4};
452 float1x1 f11 = {11.1};
453 float1x2 f12 = {12.1, 12.2};
454 float1x3 f13 = {13.1, 13.2, 13.3};
455 float1x4 f14 = {14.1, 14.2, 14.3, 14.4};
456 float2x1 f21 = {{21.11, 21.21}};
457 float2x2 f22 = {{22.11, 22.21}, {22.12, 22.22}};
458 float2x3 f23 = {{23.11, 23.21}, {23.12, 23.22}, {23.13, 23.23}};
459 float2x4 f24 = {{24.11, 24.21}, {24.12, 24.22}, {24.13, 24.23}, {24.14, 24.24}};
460 float3x1 f31 = {{31.11, 31.21, 31.31}};
461 float3x2 f32 = {{32.11, 32.21, 32.31}, {32.12, 32.22, 32.32}};
462 float3x3 f33 = {{33.11, 33.21, 33.31}, {33.12, 33.22, 33.32},
463 {33.13, 33.23, 33.33}};
464 float3x4 f34 = {{34.11, 34.21, 34.31}, {34.12, 34.22, 34.32},
465 {34.13, 34.23, 34.33}, {34.14, 34.24, 34.34}};
466 float4x1 f41 = {{41.11, 41.21, 41.31, 41.41}};
467 float4x2 f42 = {{42.11, 42.21, 42.31, 42.41}, {42.12, 42.22, 42.32, 42.42}};
468 float4x3 f43 = {{43.11, 43.21, 43.31, 43.41}, {43.12, 43.22, 43.32, 43.42},
469 {43.13, 43.23, 43.33, 43.43}};
470 float4x4 f44 = {{44.11, 44.21, 44.31, 44.41}, {44.12, 44.22, 44.32, 44.42},
471 {44.13, 44.23, 44.33, 44.43}, {44.14, 44.24, 44.34, 44.44}};
472 float f_2[2] = {0.101, 0.102};
473 float1 f1_2[2] = {{1.101}, {1.102}};
474 float2 f2_2[2] = {{2.101, 2.201}, {2.102, 2.202}};
475 float3 f3_2[2] = {{3.101, 3.201, 3.301}, {3.102, 3.202, 3.302}};
476 float4 f4_2[2] = {{4.101, 4.201, 4.301, 4.401}, {4.102, 4.202, 4.302, 4.402}};
477 float1x1 f11_2[2] = {{11.101}, {11.102}};
478 float1x2 f12_2[2] = {{12.101, 12.201}, {12.102, 12.202}};
479 float1x3 f13_2[2] = {{13.101, 13.201, 13.301}, {13.102, 13.202, 13.302}};
480 float1x4 f14_2[2] = {{14.101, 14.201, 14.301, 14.401}, {14.102, 14.202, 14.302, 14.402}};
481 float2x1 f21_2[2] = {{{21.1101, 21.2101}}, {{21.1102, 21.2102}}};
482 float2x2 f22_2[2] = {{{22.1101, 22.2101}, {22.1201, 22.2201}}, {{22.1102, 22.2102}, {22.1202, 22.2202}}};
483 float2x3 f23_2[2] = {{{23.1101, 23.2101}, {23.1201, 23.2201}, {23.1301, 23.2301}}, {{23.1102, 23.2102},
484 {23.1202, 23.2202}, {23.1302, 23.2302}}};
485 float2x4 f24_2[2] = {{{24.1101, 24.2101}, {24.1201, 24.2201}, {24.1301, 24.2301}, {24.1401, 24.2401}},
486 {{24.1102, 24.2102}, {24.1202, 24.2202}, {24.1302, 24.2302}, {24.1402, 24.2402}}};
487 float3x1 f31_2[2] = {{{31.1101, 31.2101, 31.3101}}, {{31.1102, 31.2102, 31.3102}}};
488 float3x2 f32_2[2] = {{{32.1101, 32.2101, 32.3101}, {32.1201, 32.2201, 32.3201}},
489 {{32.1102, 32.2102, 32.3102}, {32.1202, 32.2202, 32.3202}}};
490 float3x3 f33_2[2] = {{{33.1101, 33.2101, 33.3101}, {33.1201, 33.2201, 33.3201},
491 {33.1301, 33.2301, 33.3301}}, {{33.1102, 33.2102, 33.3102}, {33.1202, 33.2202, 33.3202},
492 {33.1302, 33.2302, 33.3302}}};
493 float3x4 f34_2[2] = {{{34.1101, 34.2101, 34.3101}, {34.1201, 34.2201, 34.3201},
494 {34.1301, 34.2301, 34.3301}, {34.1401, 34.2401, 34.3401}}, {{34.1102, 34.2102, 34.3102},
495 {34.1202, 34.2202, 34.3202}, {34.1302, 34.2302, 34.3302}, {34.1402, 34.2402, 34.3402}}};
496 float4x1 f41_2[2] = {{{41.1101, 41.2101, 41.3101, 41.4101}}, {{41.1102, 41.2102, 41.3102, 41.4102}}};
497 float4x2 f42_2[2] = {{{42.1101, 42.2101, 42.3101, 42.4101}, {42.1201, 42.2201, 42.3201, 42.4201}},
498 {{42.1102, 42.2102, 42.3102, 42.4102}, {42.1202, 42.2202, 42.3202, 42.4202}}};
499 float4x3 f43_2[2] = {{{43.1101, 43.2101, 43.3101, 43.4101}, {43.1201, 43.2201, 43.3201, 43.4201},
500 {43.1301, 43.2301, 43.3301, 43.4301}}, {{43.1102, 43.2102, 43.3102, 43.4102},
501 {43.1202, 43.2202, 43.3202, 43.4202}, {43.1302, 43.2302, 43.3302, 43.4302}}};
502 float4x4 f44_2[2] = {{{44.1101, 44.2101, 44.3101, 44.4101}, {44.1201, 44.2201, 44.3201, 44.4201},
503 {44.1301, 44.2301, 44.3301, 44.4301}, {44.1401, 44.2401, 44.3401, 44.4401}},
504 {{44.1102, 44.2102, 44.3102, 44.4102}, {44.1202, 44.2202, 44.3202, 44.4202},
505 {44.1302, 44.2302, 44.3302, 44.4302}, {44.1402, 44.2402, 44.3402, 44.4402}}};
506 technique t { pass p { } }
507 #endif
508 static const DWORD test_effect_parameter_value_blob_float[] =
510 0xfeff0901, 0x00000b80, 0x00000000, 0x00000003, 0x00000000, 0x00000024, 0x00000000, 0x00000000,
511 0x00000001, 0x00000001, 0x3dcccccd, 0x00000002, 0x00000066, 0x00000003, 0x00000001, 0x0000004c,
512 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x3f8ccccd, 0x00000003, 0x00003166, 0x00000003,
513 0x00000001, 0x00000078, 0x00000000, 0x00000000, 0x00000002, 0x00000001, 0x40066666, 0x400ccccd,
514 0x00000003, 0x00003266, 0x00000003, 0x00000001, 0x000000a8, 0x00000000, 0x00000000, 0x00000003,
515 0x00000001, 0x40466666, 0x404ccccd, 0x40533333, 0x00000003, 0x00003366, 0x00000003, 0x00000001,
516 0x000000dc, 0x00000000, 0x00000000, 0x00000004, 0x00000001, 0x40833333, 0x40866666, 0x4089999a,
517 0x408ccccd, 0x00000003, 0x00003466, 0x00000003, 0x00000002, 0x00000104, 0x00000000, 0x00000000,
518 0x00000001, 0x00000001, 0x4131999a, 0x00000004, 0x00313166, 0x00000003, 0x00000002, 0x00000130,
519 0x00000000, 0x00000000, 0x00000001, 0x00000002, 0x4141999a, 0x41433333, 0x00000004, 0x00323166,
520 0x00000003, 0x00000002, 0x00000160, 0x00000000, 0x00000000, 0x00000001, 0x00000003, 0x4151999a,
521 0x41533333, 0x4154cccd, 0x00000004, 0x00333166, 0x00000003, 0x00000002, 0x00000194, 0x00000000,
522 0x00000000, 0x00000001, 0x00000004, 0x4161999a, 0x41633333, 0x4164cccd, 0x41666666, 0x00000004,
523 0x00343166, 0x00000003, 0x00000002, 0x000001c0, 0x00000000, 0x00000000, 0x00000002, 0x00000001,
524 0x41a8e148, 0x41a9ae14, 0x00000004, 0x00313266, 0x00000003, 0x00000002, 0x000001f4, 0x00000000,
525 0x00000000, 0x00000002, 0x00000002, 0x41b0e148, 0x41b1ae14, 0x41b0f5c3, 0x41b1c28f, 0x00000004,
526 0x00323266, 0x00000003, 0x00000002, 0x00000230, 0x00000000, 0x00000000, 0x00000002, 0x00000003,
527 0x41b8e148, 0x41b9ae14, 0x41b8f5c3, 0x41b9c28f, 0x41b90a3d, 0x41b9d70a, 0x00000004, 0x00333266,
528 0x00000003, 0x00000002, 0x00000274, 0x00000000, 0x00000000, 0x00000002, 0x00000004, 0x41c0e148,
529 0x41c1ae14, 0x41c0f5c3, 0x41c1c28f, 0x41c10a3d, 0x41c1d70a, 0x41c11eb8, 0x41c1eb85, 0x00000004,
530 0x00343266, 0x00000003, 0x00000002, 0x000002a4, 0x00000000, 0x00000000, 0x00000003, 0x00000001,
531 0x41f8e148, 0x41f9ae14, 0x41fa7ae1, 0x00000004, 0x00313366, 0x00000003, 0x00000002, 0x000002e0,
532 0x00000000, 0x00000000, 0x00000003, 0x00000002, 0x420070a4, 0x4200d70a, 0x42013d71, 0x42007ae1,
533 0x4200e148, 0x420147ae, 0x00000004, 0x00323366, 0x00000003, 0x00000002, 0x00000328, 0x00000000,
534 0x00000000, 0x00000003, 0x00000003, 0x420470a4, 0x4204d70a, 0x42053d71, 0x42047ae1, 0x4204e148,
535 0x420547ae, 0x4204851f, 0x4204eb85, 0x420551ec, 0x00000004, 0x00333366, 0x00000003, 0x00000002,
536 0x0000037c, 0x00000000, 0x00000000, 0x00000003, 0x00000004, 0x420870a4, 0x4208d70a, 0x42093d71,
537 0x42087ae1, 0x4208e148, 0x420947ae, 0x4208851f, 0x4208eb85, 0x420951ec, 0x42088f5c, 0x4208f5c3,
538 0x42095c29, 0x00000004, 0x00343366, 0x00000003, 0x00000002, 0x000003b0, 0x00000000, 0x00000000,
539 0x00000004, 0x00000001, 0x422470a4, 0x4224d70a, 0x42253d71, 0x4225a3d7, 0x00000004, 0x00313466,
540 0x00000003, 0x00000002, 0x000003f4, 0x00000000, 0x00000000, 0x00000004, 0x00000002, 0x422870a4,
541 0x4228d70a, 0x42293d71, 0x4229a3d7, 0x42287ae1, 0x4228e148, 0x422947ae, 0x4229ae14, 0x00000004,
542 0x00323466, 0x00000003, 0x00000002, 0x00000448, 0x00000000, 0x00000000, 0x00000004, 0x00000003,
543 0x422c70a4, 0x422cd70a, 0x422d3d71, 0x422da3d7, 0x422c7ae1, 0x422ce148, 0x422d47ae, 0x422dae14,
544 0x422c851f, 0x422ceb85, 0x422d51ec, 0x422db852, 0x00000004, 0x00333466, 0x00000003, 0x00000002,
545 0x000004ac, 0x00000000, 0x00000000, 0x00000004, 0x00000004, 0x423070a4, 0x4230d70a, 0x42313d71,
546 0x4231a3d7, 0x42307ae1, 0x4230e148, 0x423147ae, 0x4231ae14, 0x4230851f, 0x4230eb85, 0x423151ec,
547 0x4231b852, 0x42308f5c, 0x4230f5c3, 0x42315c29, 0x4231c28f, 0x00000004, 0x00343466, 0x00000003,
548 0x00000000, 0x000004d8, 0x00000000, 0x00000002, 0x00000001, 0x00000001, 0x3dced917, 0x3dd0e560,
549 0x00000004, 0x00325f66, 0x00000003, 0x00000001, 0x00000504, 0x00000000, 0x00000002, 0x00000001,
550 0x00000001, 0x3f8ced91, 0x3f8d0e56, 0x00000005, 0x325f3166, 0x00000000, 0x00000003, 0x00000001,
551 0x0000053c, 0x00000000, 0x00000002, 0x00000002, 0x00000001, 0x400676c9, 0x400cdd2f, 0x4006872b,
552 0x400ced91, 0x00000005, 0x325f3266, 0x00000000, 0x00000003, 0x00000001, 0x0000057c, 0x00000000,
553 0x00000002, 0x00000003, 0x00000001, 0x404676c9, 0x404cdd2f, 0x40534396, 0x4046872b, 0x404ced91,
554 0x405353f8, 0x00000005, 0x325f3366, 0x00000000, 0x00000003, 0x00000001, 0x000005c4, 0x00000000,
555 0x00000002, 0x00000004, 0x00000001, 0x40833b64, 0x40866e98, 0x4089a1cb, 0x408cd4fe, 0x40834396,
556 0x408676c9, 0x4089a9fc, 0x408cdd2f, 0x00000005, 0x325f3466, 0x00000000, 0x00000003, 0x00000002,
557 0x000005f4, 0x00000000, 0x00000002, 0x00000001, 0x00000001, 0x41319db2, 0x4131a1cb, 0x00000006,
558 0x5f313166, 0x00000032, 0x00000003, 0x00000002, 0x0000062c, 0x00000000, 0x00000002, 0x00000001,
559 0x00000002, 0x41419db2, 0x4143374c, 0x4141a1cb, 0x41433b64, 0x00000006, 0x5f323166, 0x00000032,
560 0x00000003, 0x00000002, 0x0000066c, 0x00000000, 0x00000002, 0x00000001, 0x00000003, 0x41519db2,
561 0x4153374c, 0x4154d0e5, 0x4151a1cb, 0x41533b64, 0x4154d4fe, 0x00000006, 0x5f333166, 0x00000032,
562 0x00000003, 0x00000002, 0x000006b4, 0x00000000, 0x00000002, 0x00000001, 0x00000004, 0x41619db2,
563 0x4163374c, 0x4164d0e5, 0x41666a7f, 0x4161a1cb, 0x41633b64, 0x4164d4fe, 0x41666e98, 0x00000006,
564 0x5f343166, 0x00000032, 0x00000003, 0x00000002, 0x000006ec, 0x00000000, 0x00000002, 0x00000002,
565 0x00000001, 0x41a8e17c, 0x41a9ae49, 0x41a8e1b1, 0x41a9ae7d, 0x00000006, 0x5f313266, 0x00000032,
566 0x00000003, 0x00000002, 0x00000734, 0x00000000, 0x00000002, 0x00000002, 0x00000002, 0x41b0e17c,
567 0x41b1ae49, 0x41b0f5f7, 0x41b1c2c4, 0x41b0e1b1, 0x41b1ae7d, 0x41b0f62b, 0x41b1c2f8, 0x00000006,
568 0x5f323266, 0x00000032, 0x00000003, 0x00000002, 0x0000078c, 0x00000000, 0x00000002, 0x00000002,
569 0x00000003, 0x41b8e17c, 0x41b9ae49, 0x41b8f5f7, 0x41b9c2c4, 0x41b90a72, 0x41b9d73f, 0x41b8e1b1,
570 0x41b9ae7d, 0x41b8f62b, 0x41b9c2f8, 0x41b90aa6, 0x41b9d773, 0x00000006, 0x5f333266, 0x00000032,
571 0x00000003, 0x00000002, 0x000007f4, 0x00000000, 0x00000002, 0x00000002, 0x00000004, 0x41c0e17c,
572 0x41c1ae49, 0x41c0f5f7, 0x41c1c2c4, 0x41c10a72, 0x41c1d73f, 0x41c11eed, 0x41c1ebba, 0x41c0e1b1,
573 0x41c1ae7d, 0x41c0f62b, 0x41c1c2f8, 0x41c10aa6, 0x41c1d773, 0x41c11f21, 0x41c1ebee, 0x00000006,
574 0x5f343266, 0x00000032, 0x00000003, 0x00000002, 0x00000834, 0x00000000, 0x00000002, 0x00000003,
575 0x00000001, 0x41f8e17c, 0x41f9ae49, 0x41fa7b16, 0x41f8e1b1, 0x41f9ae7d, 0x41fa7b4a, 0x00000006,
576 0x5f313366, 0x00000032, 0x00000003, 0x00000002, 0x0000088c, 0x00000000, 0x00000002, 0x00000003,
577 0x00000002, 0x420070be, 0x4200d724, 0x42013d8b, 0x42007afb, 0x4200e162, 0x420147c8, 0x420070d8,
578 0x4200d73f, 0x42013da5, 0x42007b16, 0x4200e17c, 0x420147e3, 0x00000006, 0x5f323366, 0x00000032,
579 0x00000003, 0x00000002, 0x000008fc, 0x00000000, 0x00000002, 0x00000003, 0x00000003, 0x420470be,
580 0x4204d724, 0x42053d8b, 0x42047afb, 0x4204e162, 0x420547c8, 0x42048539, 0x4204eb9f, 0x42055206,
581 0x420470d8, 0x4204d73f, 0x42053da5, 0x42047b16, 0x4204e17c, 0x420547e3, 0x42048553, 0x4204ebba,
582 0x42055220, 0x00000006, 0x5f333366, 0x00000032, 0x00000003, 0x00000002, 0x00000984, 0x00000000,
583 0x00000002, 0x00000003, 0x00000004, 0x420870be, 0x4208d724, 0x42093d8b, 0x42087afb, 0x4208e162,
584 0x420947c8, 0x42088539, 0x4208eb9f, 0x42095206, 0x42088f76, 0x4208f5dd, 0x42095c43, 0x420870d8,
585 0x4208d73f, 0x42093da5, 0x42087b16, 0x4208e17c, 0x420947e3, 0x42088553, 0x4208ebba, 0x42095220,
586 0x42088f91, 0x4208f5f7, 0x42095c5d, 0x00000006, 0x5f343366, 0x00000032, 0x00000003, 0x00000002,
587 0x000009cc, 0x00000000, 0x00000002, 0x00000004, 0x00000001, 0x422470be, 0x4224d724, 0x42253d8b,
588 0x4225a3f1, 0x422470d8, 0x4224d73f, 0x42253da5, 0x4225a40b, 0x00000006, 0x5f313466, 0x00000032,
589 0x00000003, 0x00000002, 0x00000a34, 0x00000000, 0x00000002, 0x00000004, 0x00000002, 0x422870be,
590 0x4228d724, 0x42293d8b, 0x4229a3f1, 0x42287afb, 0x4228e162, 0x422947c8, 0x4229ae2f, 0x422870d8,
591 0x4228d73f, 0x42293da5, 0x4229a40b, 0x42287b16, 0x4228e17c, 0x422947e3, 0x4229ae49, 0x00000006,
592 0x5f323466, 0x00000032, 0x00000003, 0x00000002, 0x00000abc, 0x00000000, 0x00000002, 0x00000004,
593 0x00000003, 0x422c70be, 0x422cd724, 0x422d3d8b, 0x422da3f1, 0x422c7afb, 0x422ce162, 0x422d47c8,
594 0x422dae2f, 0x422c8539, 0x422ceb9f, 0x422d5206, 0x422db86c, 0x422c70d8, 0x422cd73f, 0x422d3da5,
595 0x422da40b, 0x422c7b16, 0x422ce17c, 0x422d47e3, 0x422dae49, 0x422c8553, 0x422cebba, 0x422d5220,
596 0x422db886, 0x00000006, 0x5f333466, 0x00000032, 0x00000003, 0x00000002, 0x00000b64, 0x00000000,
597 0x00000002, 0x00000004, 0x00000004, 0x423070be, 0x4230d724, 0x42313d8b, 0x4231a3f1, 0x42307afb,
598 0x4230e162, 0x423147c8, 0x4231ae2f, 0x42308539, 0x4230eb9f, 0x42315206, 0x4231b86c, 0x42308f76,
599 0x4230f5dd, 0x42315c43, 0x4231c2aa, 0x423070d8, 0x4230d73f, 0x42313da5, 0x4231a40b, 0x42307b16,
600 0x4230e17c, 0x423147e3, 0x4231ae49, 0x42308553, 0x4230ebba, 0x42315220, 0x4231b886, 0x42308f91,
601 0x4230f5f7, 0x42315c5d, 0x4231c2c4, 0x00000006, 0x5f343466, 0x00000032, 0x00000002, 0x00000070,
602 0x00000002, 0x00000074, 0x0000002a, 0x00000001, 0x00000001, 0x00000001, 0x00000004, 0x00000020,
603 0x00000000, 0x00000000, 0x0000002c, 0x00000048, 0x00000000, 0x00000000, 0x00000054, 0x00000070,
604 0x00000000, 0x00000000, 0x00000080, 0x0000009c, 0x00000000, 0x00000000, 0x000000b0, 0x000000cc,
605 0x00000000, 0x00000000, 0x000000e4, 0x00000100, 0x00000000, 0x00000000, 0x0000010c, 0x00000128,
606 0x00000000, 0x00000000, 0x00000138, 0x00000154, 0x00000000, 0x00000000, 0x00000168, 0x00000184,
607 0x00000000, 0x00000000, 0x0000019c, 0x000001b8, 0x00000000, 0x00000000, 0x000001c8, 0x000001e4,
608 0x00000000, 0x00000000, 0x000001fc, 0x00000218, 0x00000000, 0x00000000, 0x00000238, 0x00000254,
609 0x00000000, 0x00000000, 0x0000027c, 0x00000298, 0x00000000, 0x00000000, 0x000002ac, 0x000002c8,
610 0x00000000, 0x00000000, 0x000002e8, 0x00000304, 0x00000000, 0x00000000, 0x00000330, 0x0000034c,
611 0x00000000, 0x00000000, 0x00000384, 0x000003a0, 0x00000000, 0x00000000, 0x000003b8, 0x000003d4,
612 0x00000000, 0x00000000, 0x000003fc, 0x00000418, 0x00000000, 0x00000000, 0x00000450, 0x0000046c,
613 0x00000000, 0x00000000, 0x000004b4, 0x000004d0, 0x00000000, 0x00000000, 0x000004e0, 0x000004fc,
614 0x00000000, 0x00000000, 0x00000510, 0x0000052c, 0x00000000, 0x00000000, 0x00000548, 0x00000564,
615 0x00000000, 0x00000000, 0x00000588, 0x000005a4, 0x00000000, 0x00000000, 0x000005d0, 0x000005ec,
616 0x00000000, 0x00000000, 0x00000600, 0x0000061c, 0x00000000, 0x00000000, 0x00000638, 0x00000654,
617 0x00000000, 0x00000000, 0x00000678, 0x00000694, 0x00000000, 0x00000000, 0x000006c0, 0x000006dc,
618 0x00000000, 0x00000000, 0x000006f8, 0x00000714, 0x00000000, 0x00000000, 0x00000740, 0x0000075c,
619 0x00000000, 0x00000000, 0x00000798, 0x000007b4, 0x00000000, 0x00000000, 0x00000800, 0x0000081c,
620 0x00000000, 0x00000000, 0x00000840, 0x0000085c, 0x00000000, 0x00000000, 0x00000898, 0x000008b4,
621 0x00000000, 0x00000000, 0x00000908, 0x00000924, 0x00000000, 0x00000000, 0x00000990, 0x000009ac,
622 0x00000000, 0x00000000, 0x000009d8, 0x000009f4, 0x00000000, 0x00000000, 0x00000a40, 0x00000a5c,
623 0x00000000, 0x00000000, 0x00000ac8, 0x00000ae4, 0x00000000, 0x00000000, 0x00000b78, 0x00000000,
624 0x00000001, 0x00000b70, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
627 struct test_effect_parameter_value_result test_effect_parameter_value_result_float[] =
629 {"f", {"f", NULL, D3DXPC_SCALAR, D3DXPT_FLOAT, 1, 1, 0, 0, 0, 0, 4}, 10},
630 {"f1", {"f1", NULL, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 1, 0, 0, 0, 0, 4}, 20},
631 {"f2", {"f2", NULL, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 2, 0, 0, 0, 0, 8}, 30},
632 {"f3", {"f3", NULL, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 3, 0, 0, 0, 0, 12}, 41},
633 {"f4", {"f4", NULL, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 4, 0, 0, 0, 0, 16}, 53},
634 {"f11", {"f11", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 1, 1, 0, 0, 0, 0, 4}, 66},
635 {"f12", {"f12", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 1, 2, 0, 0, 0, 0, 8}, 76},
636 {"f13", {"f13", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 1, 3, 0, 0, 0, 0, 12}, 87},
637 {"f14", {"f14", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 1, 4, 0, 0, 0, 0, 16}, 99},
638 {"f21", {"f21", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 2, 1, 0, 0, 0, 0, 8}, 112},
639 {"f22", {"f22", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 2, 2, 0, 0, 0, 0, 16}, 123},
640 {"f23", {"f23", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 2, 3, 0, 0, 0, 0, 24}, 136},
641 {"f24", {"f24", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 2, 4, 0, 0, 0, 0, 32}, 151},
642 {"f31", {"f31", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 3, 1, 0, 0, 0, 0, 12}, 168},
643 {"f32", {"f32", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 3, 2, 0, 0, 0, 0, 24}, 180},
644 {"f33", {"f33", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 3, 3, 0, 0, 0, 0, 36}, 195},
645 {"f34", {"f34", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 3, 4, 0, 0, 0, 0, 48}, 213},
646 {"f41", {"f41", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 4, 1, 0, 0, 0, 0, 16}, 234},
647 {"f42", {"f42", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 4, 2, 0, 0, 0, 0, 32}, 247},
648 {"f43", {"f43", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 4, 3, 0, 0, 0, 0, 48}, 264},
649 {"f44", {"f44", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 4, 4, 0, 0, 0, 0, 64}, 285},
650 {"f_2", {"f_2", NULL, D3DXPC_SCALAR, D3DXPT_FLOAT, 1, 1, 2, 0, 0, 0, 8}, 310},
651 {"f1_2", {"f1_2", NULL, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 1, 2, 0, 0, 0, 8}, 321},
652 {"f2_2", {"f2_2", NULL, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 2, 2, 0, 0, 0, 16}, 333},
653 {"f3_2", {"f3_2", NULL, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 3, 2, 0, 0, 0, 24}, 347},
654 {"f4_2", {"f4_2", NULL, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 4, 2, 0, 0, 0, 32}, 363},
655 {"f11_2", {"f11_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 1, 1, 2, 0, 0, 0, 8}, 381},
656 {"f12_2", {"f12_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 1, 2, 2, 0, 0, 0, 16}, 393},
657 {"f13_2", {"f13_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 1, 3, 2, 0, 0, 0, 24}, 407},
658 {"f14_2", {"f14_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 1, 4, 2, 0, 0, 0, 32}, 423},
659 {"f21_2", {"f21_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 2, 1, 2, 0, 0, 0, 16}, 441},
660 {"f22_2", {"f22_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 2, 2, 2, 0, 0, 0, 32}, 455},
661 {"f23_2", {"f23_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 2, 3, 2, 0, 0, 0, 48}, 473},
662 {"f24_2", {"f24_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 2, 4, 2, 0, 0, 0, 64}, 495},
663 {"f31_2", {"f31_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 3, 1, 2, 0, 0, 0, 24}, 521},
664 {"f32_2", {"f32_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 3, 2, 2, 0, 0, 0, 48}, 537},
665 {"f33_2", {"f33_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 3, 3, 2, 0, 0, 0, 72}, 559},
666 {"f34_2", {"f34_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 3, 4, 2, 0, 0, 0, 96}, 587},
667 {"f41_2", {"f41_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 4, 1, 2, 0, 0, 0, 32}, 621},
668 {"f42_2", {"f42_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 4, 2, 2, 0, 0, 0, 64}, 639},
669 {"f43_2", {"f43_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 4, 3, 2, 0, 0, 0, 96}, 665},
670 {"f44_2", {"f44_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 4, 4, 2, 0, 0, 0, 128}, 699},
674 * fxc.exe /Tfx_2_0
676 #if 0
677 int i = 1;
678 int1 i1 = {11};
679 int2 i2 = {21, 22};
680 int3 i3 = {31, 32, 33};
681 int4 i4 = {41, 42, 43, 44};
682 int1x1 i11 = {111};
683 int1x2 i12 = {121, 122};
684 int1x3 i13 = {131, 132, 133};
685 int1x4 i14 = {141, 142, 143, 144};
686 int2x1 i21 = {{2111, 2121}};
687 int2x2 i22 = {{2211, 2221}, {2212, 2222}};
688 int2x3 i23 = {{2311, 2321}, {2312, 2322}, {2313, 2323}};
689 int2x4 i24 = {{2411, 2421}, {2412, 2422}, {2413, 2423}, {2414, 2424}};
690 int3x1 i31 = {{3111, 3121, 3131}};
691 int3x2 i32 = {{3211, 3221, 3231}, {3212, 3222, 3232}};
692 int3x3 i33 = {{3311, 3321, 3331}, {3312, 3322, 3332},
693 {3313, 3323, 3333}};
694 int3x4 i34 = {{3411, 3421, 3431}, {3412, 3422, 3432},
695 {3413, 3423, 3433}, {3414, 3424, 3434}};
696 int4x1 i41 = {{4111, 4121, 4131, 4141}};
697 int4x2 i42 = {{4211, 4221, 4231, 4241}, {4212, 4222, 4232, 4242}};
698 int4x3 i43 = {{4311, 4321, 4331, 4341}, {4312, 4322, 4332, 4342},
699 {4313, 4323, 4333, 4343}};
700 int4x4 i44 = {{4411, 4421, 4431, 4441}, {4412, 4422, 4432, 4442},
701 {4413, 4423, 4433, 4443}, {4414, 4424, 4434, 4444}};
702 int i_2[2] = {0101, 0102};
703 int1 i1_2[2] = {{1101}, {1102}};
704 int2 i2_2[2] = {{2101, 2201}, {2102, 2202}};
705 int3 i3_2[2] = {{3101, 3201, 3301}, {3102, 3202, 3302}};
706 int4 i4_2[2] = {{4101, 4201, 4301, 4401}, {4102, 4202, 4302, 4402}};
707 int1x1 i11_2[2] = {{11101}, {11102}};
708 int1x2 i12_2[2] = {{12101, 12201}, {12102, 12202}};
709 int1x3 i13_2[2] = {{13101, 13201, 13301}, {13102, 13202, 13302}};
710 int1x4 i14_2[2] = {{14101, 14201, 14301, 14401}, {14102, 14202, 14302, 14402}};
711 int2x1 i21_2[2] = {{{211101, 212101}}, {{211102, 212102}}};
712 int2x2 i22_2[2] = {{{221101, 222101}, {221201, 222201}}, {{221102, 222102}, {221202, 222202}}};
713 int2x3 i23_2[2] = {{{231101, 232101}, {231201, 232201}, {231301, 232301}}, {{231102, 232102},
714 {231202, 232202}, {231302, 232302}}};
715 int2x4 i24_2[2] = {{{241101, 242101}, {241201, 242201}, {241301, 242301}, {241401, 242401}},
716 {{241102, 242102}, {241202, 242202}, {241302, 242302}, {241402, 242402}}};
717 int3x1 i31_2[2] = {{{311101, 312101, 313101}}, {{311102, 312102, 313102}}};
718 int3x2 i32_2[2] = {{{321101, 322101, 323101}, {321201, 322201, 323201}},
719 {{321102, 322102, 323102}, {321202, 322202, 323202}}};
720 int3x3 i33_2[2] = {{{331101, 332101, 333101}, {331201, 332201, 333201},
721 {331301, 332301, 333301}}, {{331102, 332102, 333102}, {331202, 332202, 333202},
722 {331302, 332302, 333302}}};
723 int3x4 i34_2[2] = {{{341101, 342101, 343101}, {341201, 342201, 343201},
724 {341301, 342301, 343301}, {341401, 342401, 343401}}, {{341102, 342102, 343102},
725 {341202, 342202, 343202}, {341302, 342302, 343302}, {341402, 342402, 343402}}};
726 int4x1 i41_2[2] = {{{411101, 412101, 413101, 414101}}, {{411102, 412102, 413102, 414102}}};
727 int4x2 i42_2[2] = {{{421101, 422101, 423101, 424101}, {421201, 422201, 423201, 424201}},
728 {{421102, 422102, 423102, 424102}, {421202, 422202, 423202, 424202}}};
729 int4x3 i43_2[2] = {{{431101, 432101, 433101, 434101}, {431201, 432201, 433201, 434201},
730 {431301, 432301, 433301, 434301}}, {{431102, 432102, 433102, 434102},
731 {431202, 432202, 433202, 434202}, {431302, 432302, 433302, 434302}}};
732 int4x4 i44_2[2] = {{{441101, 442101, 443101, 444101}, {441201, 442201, 443201, 444201},
733 {441301, 442301, 443301, 444301}, {441401, 442401, 443401, 444401}},
734 {{441102, 442102, 443102, 444102}, {441202, 442202, 443202, 444202},
735 {441302, 442302, 443302, 444302}, {441402, 442402, 443402, 444402}}};
736 technique t { pass p { } }
737 #endif
738 static const DWORD test_effect_parameter_value_blob_int[] =
740 0xfeff0901, 0x00000b80, 0x00000000, 0x00000002, 0x00000000, 0x00000024, 0x00000000, 0x00000000,
741 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000069, 0x00000002, 0x00000001, 0x0000004c,
742 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x0000000b, 0x00000003, 0x00003169, 0x00000002,
743 0x00000001, 0x00000078, 0x00000000, 0x00000000, 0x00000002, 0x00000001, 0x00000015, 0x00000016,
744 0x00000003, 0x00003269, 0x00000002, 0x00000001, 0x000000a8, 0x00000000, 0x00000000, 0x00000003,
745 0x00000001, 0x0000001f, 0x00000020, 0x00000021, 0x00000003, 0x00003369, 0x00000002, 0x00000001,
746 0x000000dc, 0x00000000, 0x00000000, 0x00000004, 0x00000001, 0x00000029, 0x0000002a, 0x0000002b,
747 0x0000002c, 0x00000003, 0x00003469, 0x00000002, 0x00000002, 0x00000104, 0x00000000, 0x00000000,
748 0x00000001, 0x00000001, 0x0000006f, 0x00000004, 0x00313169, 0x00000002, 0x00000002, 0x00000130,
749 0x00000000, 0x00000000, 0x00000001, 0x00000002, 0x00000079, 0x0000007a, 0x00000004, 0x00323169,
750 0x00000002, 0x00000002, 0x00000160, 0x00000000, 0x00000000, 0x00000001, 0x00000003, 0x00000083,
751 0x00000084, 0x00000085, 0x00000004, 0x00333169, 0x00000002, 0x00000002, 0x00000194, 0x00000000,
752 0x00000000, 0x00000001, 0x00000004, 0x0000008d, 0x0000008e, 0x0000008f, 0x00000090, 0x00000004,
753 0x00343169, 0x00000002, 0x00000002, 0x000001c0, 0x00000000, 0x00000000, 0x00000002, 0x00000001,
754 0x0000083f, 0x00000849, 0x00000004, 0x00313269, 0x00000002, 0x00000002, 0x000001f4, 0x00000000,
755 0x00000000, 0x00000002, 0x00000002, 0x000008a3, 0x000008ad, 0x000008a4, 0x000008ae, 0x00000004,
756 0x00323269, 0x00000002, 0x00000002, 0x00000230, 0x00000000, 0x00000000, 0x00000002, 0x00000003,
757 0x00000907, 0x00000911, 0x00000908, 0x00000912, 0x00000909, 0x00000913, 0x00000004, 0x00333269,
758 0x00000002, 0x00000002, 0x00000274, 0x00000000, 0x00000000, 0x00000002, 0x00000004, 0x0000096b,
759 0x00000975, 0x0000096c, 0x00000976, 0x0000096d, 0x00000977, 0x0000096e, 0x00000978, 0x00000004,
760 0x00343269, 0x00000002, 0x00000002, 0x000002a4, 0x00000000, 0x00000000, 0x00000003, 0x00000001,
761 0x00000c27, 0x00000c31, 0x00000c3b, 0x00000004, 0x00313369, 0x00000002, 0x00000002, 0x000002e0,
762 0x00000000, 0x00000000, 0x00000003, 0x00000002, 0x00000c8b, 0x00000c95, 0x00000c9f, 0x00000c8c,
763 0x00000c96, 0x00000ca0, 0x00000004, 0x00323369, 0x00000002, 0x00000002, 0x00000328, 0x00000000,
764 0x00000000, 0x00000003, 0x00000003, 0x00000cef, 0x00000cf9, 0x00000d03, 0x00000cf0, 0x00000cfa,
765 0x00000d04, 0x00000cf1, 0x00000cfb, 0x00000d05, 0x00000004, 0x00333369, 0x00000002, 0x00000002,
766 0x0000037c, 0x00000000, 0x00000000, 0x00000003, 0x00000004, 0x00000d53, 0x00000d5d, 0x00000d67,
767 0x00000d54, 0x00000d5e, 0x00000d68, 0x00000d55, 0x00000d5f, 0x00000d69, 0x00000d56, 0x00000d60,
768 0x00000d6a, 0x00000004, 0x00343369, 0x00000002, 0x00000002, 0x000003b0, 0x00000000, 0x00000000,
769 0x00000004, 0x00000001, 0x0000100f, 0x00001019, 0x00001023, 0x0000102d, 0x00000004, 0x00313469,
770 0x00000002, 0x00000002, 0x000003f4, 0x00000000, 0x00000000, 0x00000004, 0x00000002, 0x00001073,
771 0x0000107d, 0x00001087, 0x00001091, 0x00001074, 0x0000107e, 0x00001088, 0x00001092, 0x00000004,
772 0x00323469, 0x00000002, 0x00000002, 0x00000448, 0x00000000, 0x00000000, 0x00000004, 0x00000003,
773 0x000010d7, 0x000010e1, 0x000010eb, 0x000010f5, 0x000010d8, 0x000010e2, 0x000010ec, 0x000010f6,
774 0x000010d9, 0x000010e3, 0x000010ed, 0x000010f7, 0x00000004, 0x00333469, 0x00000002, 0x00000002,
775 0x000004ac, 0x00000000, 0x00000000, 0x00000004, 0x00000004, 0x0000113b, 0x00001145, 0x0000114f,
776 0x00001159, 0x0000113c, 0x00001146, 0x00001150, 0x0000115a, 0x0000113d, 0x00001147, 0x00001151,
777 0x0000115b, 0x0000113e, 0x00001148, 0x00001152, 0x0000115c, 0x00000004, 0x00343469, 0x00000002,
778 0x00000000, 0x000004d8, 0x00000000, 0x00000002, 0x00000001, 0x00000001, 0x00000041, 0x00000042,
779 0x00000004, 0x00325f69, 0x00000002, 0x00000001, 0x00000504, 0x00000000, 0x00000002, 0x00000001,
780 0x00000001, 0x0000044d, 0x0000044e, 0x00000005, 0x325f3169, 0x00000000, 0x00000002, 0x00000001,
781 0x0000053c, 0x00000000, 0x00000002, 0x00000002, 0x00000001, 0x00000835, 0x00000899, 0x00000836,
782 0x0000089a, 0x00000005, 0x325f3269, 0x00000000, 0x00000002, 0x00000001, 0x0000057c, 0x00000000,
783 0x00000002, 0x00000003, 0x00000001, 0x00000c1d, 0x00000c81, 0x00000ce5, 0x00000c1e, 0x00000c82,
784 0x00000ce6, 0x00000005, 0x325f3369, 0x00000000, 0x00000002, 0x00000001, 0x000005c4, 0x00000000,
785 0x00000002, 0x00000004, 0x00000001, 0x00001005, 0x00001069, 0x000010cd, 0x00001131, 0x00001006,
786 0x0000106a, 0x000010ce, 0x00001132, 0x00000005, 0x325f3469, 0x00000000, 0x00000002, 0x00000002,
787 0x000005f4, 0x00000000, 0x00000002, 0x00000001, 0x00000001, 0x00002b5d, 0x00002b5e, 0x00000006,
788 0x5f313169, 0x00000032, 0x00000002, 0x00000002, 0x0000062c, 0x00000000, 0x00000002, 0x00000001,
789 0x00000002, 0x00002f45, 0x00002fa9, 0x00002f46, 0x00002faa, 0x00000006, 0x5f323169, 0x00000032,
790 0x00000002, 0x00000002, 0x0000066c, 0x00000000, 0x00000002, 0x00000001, 0x00000003, 0x0000332d,
791 0x00003391, 0x000033f5, 0x0000332e, 0x00003392, 0x000033f6, 0x00000006, 0x5f333169, 0x00000032,
792 0x00000002, 0x00000002, 0x000006b4, 0x00000000, 0x00000002, 0x00000001, 0x00000004, 0x00003715,
793 0x00003779, 0x000037dd, 0x00003841, 0x00003716, 0x0000377a, 0x000037de, 0x00003842, 0x00000006,
794 0x5f343169, 0x00000032, 0x00000002, 0x00000002, 0x000006ec, 0x00000000, 0x00000002, 0x00000002,
795 0x00000001, 0x0003389d, 0x00033c85, 0x0003389e, 0x00033c86, 0x00000006, 0x5f313269, 0x00000032,
796 0x00000002, 0x00000002, 0x00000734, 0x00000000, 0x00000002, 0x00000002, 0x00000002, 0x00035fad,
797 0x00036395, 0x00036011, 0x000363f9, 0x00035fae, 0x00036396, 0x00036012, 0x000363fa, 0x00000006,
798 0x5f323269, 0x00000032, 0x00000002, 0x00000002, 0x0000078c, 0x00000000, 0x00000002, 0x00000002,
799 0x00000003, 0x000386bd, 0x00038aa5, 0x00038721, 0x00038b09, 0x00038785, 0x00038b6d, 0x000386be,
800 0x00038aa6, 0x00038722, 0x00038b0a, 0x00038786, 0x00038b6e, 0x00000006, 0x5f333269, 0x00000032,
801 0x00000002, 0x00000002, 0x000007f4, 0x00000000, 0x00000002, 0x00000002, 0x00000004, 0x0003adcd,
802 0x0003b1b5, 0x0003ae31, 0x0003b219, 0x0003ae95, 0x0003b27d, 0x0003aef9, 0x0003b2e1, 0x0003adce,
803 0x0003b1b6, 0x0003ae32, 0x0003b21a, 0x0003ae96, 0x0003b27e, 0x0003aefa, 0x0003b2e2, 0x00000006,
804 0x5f343269, 0x00000032, 0x00000002, 0x00000002, 0x00000834, 0x00000000, 0x00000002, 0x00000003,
805 0x00000001, 0x0004bf3d, 0x0004c325, 0x0004c70d, 0x0004bf3e, 0x0004c326, 0x0004c70e, 0x00000006,
806 0x5f313369, 0x00000032, 0x00000002, 0x00000002, 0x0000088c, 0x00000000, 0x00000002, 0x00000003,
807 0x00000002, 0x0004e64d, 0x0004ea35, 0x0004ee1d, 0x0004e6b1, 0x0004ea99, 0x0004ee81, 0x0004e64e,
808 0x0004ea36, 0x0004ee1e, 0x0004e6b2, 0x0004ea9a, 0x0004ee82, 0x00000006, 0x5f323369, 0x00000032,
809 0x00000002, 0x00000002, 0x000008fc, 0x00000000, 0x00000002, 0x00000003, 0x00000003, 0x00050d5d,
810 0x00051145, 0x0005152d, 0x00050dc1, 0x000511a9, 0x00051591, 0x00050e25, 0x0005120d, 0x000515f5,
811 0x00050d5e, 0x00051146, 0x0005152e, 0x00050dc2, 0x000511aa, 0x00051592, 0x00050e26, 0x0005120e,
812 0x000515f6, 0x00000006, 0x5f333369, 0x00000032, 0x00000002, 0x00000002, 0x00000984, 0x00000000,
813 0x00000002, 0x00000003, 0x00000004, 0x0005346d, 0x00053855, 0x00053c3d, 0x000534d1, 0x000538b9,
814 0x00053ca1, 0x00053535, 0x0005391d, 0x00053d05, 0x00053599, 0x00053981, 0x00053d69, 0x0005346e,
815 0x00053856, 0x00053c3e, 0x000534d2, 0x000538ba, 0x00053ca2, 0x00053536, 0x0005391e, 0x00053d06,
816 0x0005359a, 0x00053982, 0x00053d6a, 0x00000006, 0x5f343369, 0x00000032, 0x00000002, 0x00000002,
817 0x000009cc, 0x00000000, 0x00000002, 0x00000004, 0x00000001, 0x000645dd, 0x000649c5, 0x00064dad,
818 0x00065195, 0x000645de, 0x000649c6, 0x00064dae, 0x00065196, 0x00000006, 0x5f313469, 0x00000032,
819 0x00000002, 0x00000002, 0x00000a34, 0x00000000, 0x00000002, 0x00000004, 0x00000002, 0x00066ced,
820 0x000670d5, 0x000674bd, 0x000678a5, 0x00066d51, 0x00067139, 0x00067521, 0x00067909, 0x00066cee,
821 0x000670d6, 0x000674be, 0x000678a6, 0x00066d52, 0x0006713a, 0x00067522, 0x0006790a, 0x00000006,
822 0x5f323469, 0x00000032, 0x00000002, 0x00000002, 0x00000abc, 0x00000000, 0x00000002, 0x00000004,
823 0x00000003, 0x000693fd, 0x000697e5, 0x00069bcd, 0x00069fb5, 0x00069461, 0x00069849, 0x00069c31,
824 0x0006a019, 0x000694c5, 0x000698ad, 0x00069c95, 0x0006a07d, 0x000693fe, 0x000697e6, 0x00069bce,
825 0x00069fb6, 0x00069462, 0x0006984a, 0x00069c32, 0x0006a01a, 0x000694c6, 0x000698ae, 0x00069c96,
826 0x0006a07e, 0x00000006, 0x5f333469, 0x00000032, 0x00000002, 0x00000002, 0x00000b64, 0x00000000,
827 0x00000002, 0x00000004, 0x00000004, 0x0006bb0d, 0x0006bef5, 0x0006c2dd, 0x0006c6c5, 0x0006bb71,
828 0x0006bf59, 0x0006c341, 0x0006c729, 0x0006bbd5, 0x0006bfbd, 0x0006c3a5, 0x0006c78d, 0x0006bc39,
829 0x0006c021, 0x0006c409, 0x0006c7f1, 0x0006bb0e, 0x0006bef6, 0x0006c2de, 0x0006c6c6, 0x0006bb72,
830 0x0006bf5a, 0x0006c342, 0x0006c72a, 0x0006bbd6, 0x0006bfbe, 0x0006c3a6, 0x0006c78e, 0x0006bc3a,
831 0x0006c022, 0x0006c40a, 0x0006c7f2, 0x00000006, 0x5f343469, 0x00000032, 0x00000002, 0x00000070,
832 0x00000002, 0x00000074, 0x0000002a, 0x00000001, 0x00000001, 0x00000001, 0x00000004, 0x00000020,
833 0x00000000, 0x00000000, 0x0000002c, 0x00000048, 0x00000000, 0x00000000, 0x00000054, 0x00000070,
834 0x00000000, 0x00000000, 0x00000080, 0x0000009c, 0x00000000, 0x00000000, 0x000000b0, 0x000000cc,
835 0x00000000, 0x00000000, 0x000000e4, 0x00000100, 0x00000000, 0x00000000, 0x0000010c, 0x00000128,
836 0x00000000, 0x00000000, 0x00000138, 0x00000154, 0x00000000, 0x00000000, 0x00000168, 0x00000184,
837 0x00000000, 0x00000000, 0x0000019c, 0x000001b8, 0x00000000, 0x00000000, 0x000001c8, 0x000001e4,
838 0x00000000, 0x00000000, 0x000001fc, 0x00000218, 0x00000000, 0x00000000, 0x00000238, 0x00000254,
839 0x00000000, 0x00000000, 0x0000027c, 0x00000298, 0x00000000, 0x00000000, 0x000002ac, 0x000002c8,
840 0x00000000, 0x00000000, 0x000002e8, 0x00000304, 0x00000000, 0x00000000, 0x00000330, 0x0000034c,
841 0x00000000, 0x00000000, 0x00000384, 0x000003a0, 0x00000000, 0x00000000, 0x000003b8, 0x000003d4,
842 0x00000000, 0x00000000, 0x000003fc, 0x00000418, 0x00000000, 0x00000000, 0x00000450, 0x0000046c,
843 0x00000000, 0x00000000, 0x000004b4, 0x000004d0, 0x00000000, 0x00000000, 0x000004e0, 0x000004fc,
844 0x00000000, 0x00000000, 0x00000510, 0x0000052c, 0x00000000, 0x00000000, 0x00000548, 0x00000564,
845 0x00000000, 0x00000000, 0x00000588, 0x000005a4, 0x00000000, 0x00000000, 0x000005d0, 0x000005ec,
846 0x00000000, 0x00000000, 0x00000600, 0x0000061c, 0x00000000, 0x00000000, 0x00000638, 0x00000654,
847 0x00000000, 0x00000000, 0x00000678, 0x00000694, 0x00000000, 0x00000000, 0x000006c0, 0x000006dc,
848 0x00000000, 0x00000000, 0x000006f8, 0x00000714, 0x00000000, 0x00000000, 0x00000740, 0x0000075c,
849 0x00000000, 0x00000000, 0x00000798, 0x000007b4, 0x00000000, 0x00000000, 0x00000800, 0x0000081c,
850 0x00000000, 0x00000000, 0x00000840, 0x0000085c, 0x00000000, 0x00000000, 0x00000898, 0x000008b4,
851 0x00000000, 0x00000000, 0x00000908, 0x00000924, 0x00000000, 0x00000000, 0x00000990, 0x000009ac,
852 0x00000000, 0x00000000, 0x000009d8, 0x000009f4, 0x00000000, 0x00000000, 0x00000a40, 0x00000a5c,
853 0x00000000, 0x00000000, 0x00000ac8, 0x00000ae4, 0x00000000, 0x00000000, 0x00000b78, 0x00000000,
854 0x00000001, 0x00000b70, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
857 struct test_effect_parameter_value_result test_effect_parameter_value_result_int[] =
859 {"i", {"i", NULL, D3DXPC_SCALAR, D3DXPT_INT, 1, 1, 0, 0, 0, 0, 4}, 10},
860 {"i1", {"i1", NULL, D3DXPC_VECTOR, D3DXPT_INT, 1, 1, 0, 0, 0, 0, 4}, 20},
861 {"i2", {"i2", NULL, D3DXPC_VECTOR, D3DXPT_INT, 1, 2, 0, 0, 0, 0, 8}, 30},
862 {"i3", {"i3", NULL, D3DXPC_VECTOR, D3DXPT_INT, 1, 3, 0, 0, 0, 0, 12}, 41},
863 {"i4", {"i4", NULL, D3DXPC_VECTOR, D3DXPT_INT, 1, 4, 0, 0, 0, 0, 16}, 53},
864 {"i11", {"i11", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 1, 1, 0, 0, 0, 0, 4}, 66},
865 {"i12", {"i12", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 1, 2, 0, 0, 0, 0, 8}, 76},
866 {"i13", {"i13", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 1, 3, 0, 0, 0, 0, 12}, 87},
867 {"i14", {"i14", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 1, 4, 0, 0, 0, 0, 16}, 99},
868 {"i21", {"i21", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 2, 1, 0, 0, 0, 0, 8}, 112},
869 {"i22", {"i22", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 2, 2, 0, 0, 0, 0, 16}, 123},
870 {"i23", {"i23", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 2, 3, 0, 0, 0, 0, 24}, 136},
871 {"i24", {"i24", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 2, 4, 0, 0, 0, 0, 32}, 151},
872 {"i31", {"i31", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 3, 1, 0, 0, 0, 0, 12}, 168},
873 {"i32", {"i32", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 3, 2, 0, 0, 0, 0, 24}, 180},
874 {"i33", {"i33", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 3, 3, 0, 0, 0, 0, 36}, 195},
875 {"i34", {"i34", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 3, 4, 0, 0, 0, 0, 48}, 213},
876 {"i41", {"i41", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 4, 1, 0, 0, 0, 0, 16}, 234},
877 {"i42", {"i42", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 4, 2, 0, 0, 0, 0, 32}, 247},
878 {"i43", {"i43", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 4, 3, 0, 0, 0, 0, 48}, 264},
879 {"i44", {"i44", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 4, 4, 0, 0, 0, 0, 64}, 285},
880 {"i_2", {"i_2", NULL, D3DXPC_SCALAR, D3DXPT_INT, 1, 1, 2, 0, 0, 0, 8}, 310},
881 {"i1_2", {"i1_2", NULL, D3DXPC_VECTOR, D3DXPT_INT, 1, 1, 2, 0, 0, 0, 8}, 321},
882 {"i2_2", {"i2_2", NULL, D3DXPC_VECTOR, D3DXPT_INT, 1, 2, 2, 0, 0, 0, 16}, 333},
883 {"i3_2", {"i3_2", NULL, D3DXPC_VECTOR, D3DXPT_INT, 1, 3, 2, 0, 0, 0, 24}, 347},
884 {"i4_2", {"i4_2", NULL, D3DXPC_VECTOR, D3DXPT_INT, 1, 4, 2, 0, 0, 0, 32}, 363},
885 {"i11_2", {"i11_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 1, 1, 2, 0, 0, 0, 8}, 381},
886 {"i12_2", {"i12_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 1, 2, 2, 0, 0, 0, 16}, 393},
887 {"i13_2", {"i13_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 1, 3, 2, 0, 0, 0, 24}, 407},
888 {"i14_2", {"i14_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 1, 4, 2, 0, 0, 0, 32}, 423},
889 {"i21_2", {"i21_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 2, 1, 2, 0, 0, 0, 16}, 441},
890 {"i22_2", {"i22_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 2, 2, 2, 0, 0, 0, 32}, 455},
891 {"i23_2", {"i23_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 2, 3, 2, 0, 0, 0, 48}, 473},
892 {"i24_2", {"i24_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 2, 4, 2, 0, 0, 0, 64}, 495},
893 {"i31_2", {"i31_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 3, 1, 2, 0, 0, 0, 24}, 521},
894 {"i32_2", {"i32_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 3, 2, 2, 0, 0, 0, 48}, 537},
895 {"i33_2", {"i33_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 3, 3, 2, 0, 0, 0, 72}, 559},
896 {"i34_2", {"i34_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 3, 4, 2, 0, 0, 0, 96}, 587},
897 {"i41_2", {"i41_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 4, 1, 2, 0, 0, 0, 32}, 621},
898 {"i42_2", {"i42_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 4, 2, 2, 0, 0, 0, 64}, 639},
899 {"i43_2", {"i43_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 4, 3, 2, 0, 0, 0, 96}, 665},
900 {"i44_2", {"i44_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 4, 4, 2, 0, 0, 0, 128}, 699},
904 * fxc.exe /Tfx_2_0
906 #if 0
907 string s = "test";
908 string s_2[2] = {"test1", "test2"};
909 texture2D tex;
910 Vertexshader v;
911 Vertexshader v_2[2];
912 Pixelshader p;
913 Pixelshader p_2[2];
914 technique t { pass p { } }
915 #endif
916 static const DWORD test_effect_parameter_value_blob_object[] =
918 0xfeff0901, 0x00000100, 0x00000000, 0x00000004, 0x00000004, 0x0000001c, 0x00000000, 0x00000000,
919 0x00000001, 0x00000002, 0x00000073, 0x00000004, 0x00000004, 0x00000040, 0x00000000, 0x00000002,
920 0x00000002, 0x00000003, 0x00000004, 0x00325f73, 0x00000007, 0x00000004, 0x00000060, 0x00000000,
921 0x00000000, 0x00000004, 0x00000004, 0x00786574, 0x00000010, 0x00000004, 0x00000080, 0x00000000,
922 0x00000000, 0x00000005, 0x00000002, 0x00000076, 0x00000010, 0x00000004, 0x000000a4, 0x00000000,
923 0x00000002, 0x00000006, 0x00000007, 0x00000004, 0x00325f76, 0x0000000f, 0x00000004, 0x000000c4,
924 0x00000000, 0x00000000, 0x00000008, 0x00000002, 0x00000070, 0x0000000f, 0x00000004, 0x000000e8,
925 0x00000000, 0x00000002, 0x00000009, 0x0000000a, 0x00000004, 0x00325f70, 0x00000002, 0x00000070,
926 0x00000002, 0x00000074, 0x00000007, 0x00000001, 0x00000007, 0x0000000b, 0x00000004, 0x00000018,
927 0x00000000, 0x00000000, 0x00000024, 0x00000038, 0x00000000, 0x00000000, 0x00000048, 0x0000005c,
928 0x00000000, 0x00000000, 0x00000068, 0x0000007c, 0x00000000, 0x00000000, 0x00000088, 0x0000009c,
929 0x00000000, 0x00000000, 0x000000ac, 0x000000c0, 0x00000000, 0x00000000, 0x000000cc, 0x000000e0,
930 0x00000000, 0x00000000, 0x000000f8, 0x00000000, 0x00000001, 0x000000f0, 0x00000000, 0x00000000,
931 0x0000000a, 0x00000000, 0x00000009, 0x00000000, 0x0000000a, 0x00000000, 0x00000008, 0x00000000,
932 0x00000006, 0x00000000, 0x00000007, 0x00000000, 0x00000005, 0x00000000, 0x00000004, 0x00000000,
933 0x00000002, 0x00000006, 0x74736574, 0x00000031, 0x00000003, 0x00000006, 0x74736574, 0x00000032,
934 0x00000001, 0x00000005, 0x74736574, 0x00000000,
937 struct test_effect_parameter_value_result test_effect_parameter_value_result_object[] =
939 {"s", {"s", NULL, D3DXPC_OBJECT, D3DXPT_STRING, 0, 0, 0, 0, 0, 0, sizeof(void *)}, 0},
940 {"s_2", {"s_2", NULL, D3DXPC_OBJECT, D3DXPT_STRING, 0, 0, 2, 0, 0, 0, 2 * sizeof(void *)}, 0},
941 {"tex", {"tex", NULL, D3DXPC_OBJECT, D3DXPT_TEXTURE2D, 0, 0, 0, 0, 0, 0, sizeof(void *)}, 0},
942 {"v", {"v", NULL, D3DXPC_OBJECT, D3DXPT_VERTEXSHADER, 0, 0, 0, 0, 0, 0, sizeof(void *)}, 0},
943 {"v_2", {"v_2", NULL, D3DXPC_OBJECT, D3DXPT_VERTEXSHADER, 0, 0, 2, 0, 0, 0, 2 * sizeof(void *)}, 0},
944 {"p", {"p", NULL, D3DXPC_OBJECT, D3DXPT_PIXELSHADER, 0, 0, 0, 0, 0, 0, sizeof(void *)}, 0},
945 {"p_2", {"p_2", NULL, D3DXPC_OBJECT, D3DXPT_PIXELSHADER, 0, 0, 2, 0, 0, 0, 2 * sizeof(void *)}, 0},
949 * fxc.exe /Tfx_2_0
951 #if 0
952 float3 f3 = {-3.1, 153.2, 283.3};
953 float3 f3min = {-31.1, -31.2, -31.3};
954 float3 f3max = {320.1, 320.2, 320.3};
955 float4 f4 = {-4.1, 154.2, 284.3, 34.4};
956 float4 f4min = {-41.1, -41.2, -41.3, -41.4};
957 float4 f4max = {420.1, 42.20, 420.3, 420.4};
958 technique t { pass p { } }
959 #endif
960 static const DWORD test_effect_parameter_value_blob_special[] =
962 0xfeff0901, 0x00000150, 0x00000000, 0x00000003, 0x00000001, 0x0000002c, 0x00000000, 0x00000000,
963 0x00000003, 0x00000001, 0xc0466666, 0x43193333, 0x438da666, 0x00000003, 0x00003366, 0x00000003,
964 0x00000001, 0x0000005c, 0x00000000, 0x00000000, 0x00000003, 0x00000001, 0xc1f8cccd, 0xc1f9999a,
965 0xc1fa6666, 0x00000006, 0x696d3366, 0x0000006e, 0x00000003, 0x00000001, 0x00000090, 0x00000000,
966 0x00000000, 0x00000003, 0x00000001, 0x43a00ccd, 0x43a0199a, 0x43a02666, 0x00000006, 0x616d3366,
967 0x00000078, 0x00000003, 0x00000001, 0x000000c8, 0x00000000, 0x00000000, 0x00000004, 0x00000001,
968 0xc0833333, 0x431a3333, 0x438e2666, 0x4209999a, 0x00000003, 0x00003466, 0x00000003, 0x00000001,
969 0x000000fc, 0x00000000, 0x00000000, 0x00000004, 0x00000001, 0xc2246666, 0xc224cccd, 0xc2253333,
970 0xc225999a, 0x00000006, 0x696d3466, 0x0000006e, 0x00000003, 0x00000001, 0x00000134, 0x00000000,
971 0x00000000, 0x00000004, 0x00000001, 0x43d20ccd, 0x4228cccd, 0x43d22666, 0x43d23333, 0x00000006,
972 0x616d3466, 0x00000078, 0x00000002, 0x00000070, 0x00000002, 0x00000074, 0x00000006, 0x00000001,
973 0x00000001, 0x00000001, 0x00000004, 0x00000020, 0x00000000, 0x00000000, 0x00000034, 0x00000050,
974 0x00000000, 0x00000000, 0x00000068, 0x00000084, 0x00000000, 0x00000000, 0x0000009c, 0x000000b8,
975 0x00000000, 0x00000000, 0x000000d0, 0x000000ec, 0x00000000, 0x00000000, 0x00000108, 0x00000124,
976 0x00000000, 0x00000000, 0x00000148, 0x00000000, 0x00000001, 0x00000140, 0x00000000, 0x00000000,
977 0x00000000, 0x00000000,
980 struct test_effect_parameter_value_result test_effect_parameter_value_result_special[] =
982 {"f3", {"f3", NULL, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 3, 0, 0, 0, 0, 12}, 10},
983 {"f3min", {"f3min", NULL, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 3, 0, 0, 0, 0, 12}, 22},
984 {"f3max", {"f3max", NULL, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 3, 0, 0, 0, 0, 12}, 35},
985 {"f4", {"f4", NULL, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 4, 0, 0, 0, 0, 16}, 48},
986 {"f4min", {"f4min", NULL, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 4, 0, 0, 0, 0, 16}, 61},
987 {"f4max", {"f4max", NULL, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 4, 0, 0, 0, 0, 16}, 75},
990 #define ADD_PARAMETER_VALUE(x) {\
991 test_effect_parameter_value_blob_ ## x,\
992 sizeof(test_effect_parameter_value_blob_ ## x),\
993 test_effect_parameter_value_result_ ## x,\
994 sizeof(test_effect_parameter_value_result_ ## x)/sizeof(*test_effect_parameter_value_result_ ## x),\
997 static const struct
999 const DWORD *blob;
1000 UINT blob_size;
1001 const struct test_effect_parameter_value_result *res;
1002 UINT res_count;
1004 test_effect_parameter_value_data[] =
1006 ADD_PARAMETER_VALUE(float),
1007 ADD_PARAMETER_VALUE(int),
1008 ADD_PARAMETER_VALUE(object),
1009 ADD_PARAMETER_VALUE(special),
1012 #undef ADD_PARAMETER_VALUE
1014 /* Multiple of 16 to cover complete matrices */
1015 #define EFFECT_PARAMETER_VALUE_ARRAY_SIZE 48
1016 /* Constants for special INT/FLOAT conversation */
1017 #define INT_FLOAT_MULTI 255.0f
1018 #define INT_FLOAT_MULTI_INVERSE (1/INT_FLOAT_MULTI)
1020 static void test_effect_parameter_value_GetValue(const struct test_effect_parameter_value_result *res,
1021 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1023 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1024 const char *res_full_name = res->full_name;
1025 DWORD value[EFFECT_PARAMETER_VALUE_ARRAY_SIZE];
1026 HRESULT hr;
1027 UINT l;
1029 memset(value, 0xab, sizeof(value));
1030 hr = effect->lpVtbl->GetValue(effect, parameter, value, res_desc->Bytes);
1031 if (res_desc->Class == D3DXPC_SCALAR
1032 || res_desc->Class == D3DXPC_VECTOR
1033 || res_desc->Class == D3DXPC_MATRIX_ROWS)
1035 ok(hr == D3D_OK, "%u - %s: GetValue failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1037 for (l = 0; l < res_desc->Bytes / sizeof(*value); ++l)
1039 ok(value[l] == res_value[l], "%u - %s: GetValue value[%u] failed, got %#x, expected %#x\n",
1040 i, res_full_name, l, value[l], res_value[l]);
1043 for (l = res_desc->Bytes / sizeof(*value); l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l)
1045 ok(value[l] == 0xabababab, "%u - %s: GetValue value[%u] failed, got %#x, expected %#x\n",
1046 i, res_full_name, l, value[l], 0xabababab);
1049 else if (res_desc->Class == D3DXPC_OBJECT)
1051 switch (res_desc->Type)
1053 case D3DXPT_PIXELSHADER:
1054 case D3DXPT_VERTEXSHADER:
1055 case D3DXPT_TEXTURE2D:
1056 ok(hr == D3D_OK, "%u - %s: GetValue failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1058 for (l = 0; l < (res_desc->Elements ? res_desc->Elements : 1); ++l)
1060 IUnknown *unk = *((IUnknown **)value + l);
1061 if (unk) IUnknown_Release(unk);
1063 break;
1065 case D3DXPT_STRING:
1066 ok(hr == D3D_OK, "%u - %s: GetValue failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1067 break;
1069 default:
1070 ok(0, "Type is %u, this should not happen!\n", res_desc->Type);
1071 break;
1074 else
1076 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetValue failed, got %#x, expected %#x\n",
1077 i, res_full_name, hr, D3DERR_INVALIDCALL);
1079 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l)
1081 ok(value[l] == 0xabababab, "%u - %s: GetValue value[%u] failed, got %#x, expected %#x\n",
1082 i, res_full_name, l, value[l], 0xabababab);
1087 static void test_effect_parameter_value_GetBool(const struct test_effect_parameter_value_result *res,
1088 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1090 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1091 const char *res_full_name = res->full_name;
1092 BOOL bvalue = 0xabababab;
1093 HRESULT hr;
1095 hr = effect->lpVtbl->GetBool(effect, parameter, &bvalue);
1096 if (!res_desc->Elements && res_desc->Rows == 1 && res_desc->Columns == 1)
1098 ok(hr == D3D_OK, "%u - %s: GetBool failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1099 ok(bvalue == get_bool(res_value), "%u - %s: GetBool bvalue failed, got %#x, expected %#x\n",
1100 i, res_full_name, bvalue, get_bool(res_value));
1102 else
1104 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetBool failed, got %#x, expected %#x\n",
1105 i, res_full_name, hr, D3DERR_INVALIDCALL);
1106 ok(bvalue == 0xabababab, "%u - %s: GetBool bvalue failed, got %#x, expected %#x\n",
1107 i, res_full_name, bvalue, 0xabababab);
1111 static void test_effect_parameter_value_GetBoolArray(const struct test_effect_parameter_value_result *res,
1112 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1114 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1115 const char *res_full_name = res->full_name;
1116 BOOL bavalue[EFFECT_PARAMETER_VALUE_ARRAY_SIZE];
1117 HRESULT hr;
1118 UINT l, err = 0;
1120 memset(bavalue, 0xab, sizeof(bavalue));
1121 hr = effect->lpVtbl->GetBoolArray(effect, parameter, bavalue, res_desc->Bytes / sizeof(*bavalue));
1122 if (res_desc->Class == D3DXPC_SCALAR
1123 || res_desc->Class == D3DXPC_VECTOR
1124 || res_desc->Class == D3DXPC_MATRIX_ROWS)
1126 ok(hr == D3D_OK, "%u - %s: GetBoolArray failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1128 for (l = 0; l < res_desc->Bytes / sizeof(*bavalue); ++l)
1130 if (bavalue[l] != get_bool(&res_value[l])) ++err;
1133 for (l = res_desc->Bytes / sizeof(*bavalue); l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l)
1135 if (bavalue[l] != 0xabababab) ++err;
1138 else
1140 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetBoolArray failed, got %#x, expected %#x\n",
1141 i, res_full_name, hr, D3DERR_INVALIDCALL);
1143 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (bavalue[l] != 0xabababab) ++err;
1145 ok(!err, "%u - %s: GetBoolArray failed with %u errors\n", i, res_full_name, err);
1148 static void test_effect_parameter_value_GetInt(const struct test_effect_parameter_value_result *res,
1149 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1151 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1152 const char *res_full_name = res->full_name;
1153 INT ivalue = 0xabababab;
1154 HRESULT hr;
1156 hr = effect->lpVtbl->GetInt(effect, parameter, &ivalue);
1157 if (!res_desc->Elements && res_desc->Columns == 1 && res_desc->Rows == 1)
1159 ok(hr == D3D_OK, "%u - %s: GetInt failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1160 ok(ivalue == get_int(res_desc->Type, res_value), "%u - %s: GetInt ivalue failed, got %i, expected %i\n",
1161 i, res_full_name, ivalue, get_int(res_desc->Type, res_value));
1163 else if(!res_desc->Elements && res_desc->Type == D3DXPT_FLOAT &&
1164 ((res_desc->Class == D3DXPC_VECTOR && res_desc->Columns != 2) ||
1165 (res_desc->Class == D3DXPC_MATRIX_ROWS && res_desc->Rows != 2 && res_desc->Columns == 1)))
1167 INT tmp;
1169 ok(hr == D3D_OK, "%u - %s: GetInt failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1171 tmp = (INT)(min(max(0.0f, *((FLOAT *)res_value + 2)), 1.0f) * INT_FLOAT_MULTI);
1172 tmp += ((INT)(min(max(0.0f, *((FLOAT *)res_value + 1)), 1.0f) * INT_FLOAT_MULTI)) << 8;
1173 tmp += ((INT)(min(max(0.0f, *((FLOAT *)res_value + 0)), 1.0f) * INT_FLOAT_MULTI)) << 16;
1174 if (res_desc->Columns * res_desc->Rows > 3)
1176 tmp += ((INT)(min(max(0.0f, *((FLOAT *)res_value + 3)), 1.0f) * INT_FLOAT_MULTI)) << 24;
1179 ok(ivalue == tmp, "%u - %s: GetInt ivalue failed, got %x, expected %x\n",
1180 i, res_full_name, ivalue, tmp);
1182 else
1184 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetInt failed, got %#x, expected %#x\n",
1185 i, res_full_name, hr, D3DERR_INVALIDCALL);
1186 ok(ivalue == 0xabababab, "%u - %s: GetInt ivalue failed, got %i, expected %i\n",
1187 i, res_full_name, ivalue, 0xabababab);
1191 static void test_effect_parameter_value_GetIntArray(const struct test_effect_parameter_value_result *res,
1192 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1194 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1195 const char *res_full_name = res->full_name;
1196 INT iavalue[EFFECT_PARAMETER_VALUE_ARRAY_SIZE];
1197 HRESULT hr;
1198 UINT l, err = 0;
1200 memset(iavalue, 0xab, sizeof(iavalue));
1201 hr = effect->lpVtbl->GetIntArray(effect, parameter, iavalue, res_desc->Bytes / sizeof(*iavalue));
1202 if (res_desc->Class == D3DXPC_SCALAR
1203 || res_desc->Class == D3DXPC_VECTOR
1204 || res_desc->Class == D3DXPC_MATRIX_ROWS)
1206 ok(hr == D3D_OK, "%u - %s: GetIntArray failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1208 for (l = 0; l < res_desc->Bytes / sizeof(*iavalue); ++l)
1210 if (iavalue[l] != get_int(res_desc->Type, &res_value[l])) ++err;
1213 for (l = res_desc->Bytes / sizeof(*iavalue); l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l)
1215 if (iavalue[l] != 0xabababab) ++err;
1218 else
1220 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetIntArray failed, got %#x, expected %#x\n",
1221 i, res_full_name, hr, D3DERR_INVALIDCALL);
1223 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (iavalue[l] != 0xabababab) ++err;
1225 ok(!err, "%u - %s: GetIntArray failed with %u errors\n", i, res_full_name, err);
1228 static void test_effect_parameter_value_GetFloat(const struct test_effect_parameter_value_result *res,
1229 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1231 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1232 const char *res_full_name = res->full_name;
1233 HRESULT hr;
1234 DWORD cmp = 0xabababab;
1235 FLOAT fvalue = *(FLOAT *)&cmp;
1237 hr = effect->lpVtbl->GetFloat(effect, parameter, &fvalue);
1238 if (!res_desc->Elements && res_desc->Columns == 1 && res_desc->Rows == 1)
1240 ok(hr == D3D_OK, "%u - %s: GetFloat failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1241 ok(compare_float(fvalue, get_float(res_desc->Type, res_value), 512), "%u - %s: GetFloat fvalue failed, got %f, expected %f\n",
1242 i, res_full_name, fvalue, get_float(res_desc->Type, res_value));
1244 else
1246 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetFloat failed, got %#x, expected %#x\n",
1247 i, res_full_name, hr, D3DERR_INVALIDCALL);
1248 ok(fvalue == *(FLOAT *)&cmp, "%u - %s: GetFloat fvalue failed, got %f, expected %f\n",
1249 i, res_full_name, fvalue, *(FLOAT *)&cmp);
1253 static void test_effect_parameter_value_GetFloatArray(const struct test_effect_parameter_value_result *res,
1254 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1256 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1257 const char *res_full_name = res->full_name;
1258 FLOAT favalue[EFFECT_PARAMETER_VALUE_ARRAY_SIZE];
1259 HRESULT hr;
1260 UINT l, err = 0;
1261 DWORD cmp = 0xabababab;
1263 memset(favalue, 0xab, sizeof(favalue));
1264 hr = effect->lpVtbl->GetFloatArray(effect, parameter, favalue, res_desc->Bytes / sizeof(*favalue));
1265 if (res_desc->Class == D3DXPC_SCALAR
1266 || res_desc->Class == D3DXPC_VECTOR
1267 || res_desc->Class == D3DXPC_MATRIX_ROWS)
1269 ok(hr == D3D_OK, "%u - %s: GetFloatArray failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1271 for (l = 0; l < res_desc->Bytes / sizeof(*favalue); ++l)
1273 if (!compare_float(favalue[l], get_float(res_desc->Type, &res_value[l]), 512)) ++err;
1276 for (l = res_desc->Bytes / sizeof(*favalue); l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l)
1278 if (favalue[l] != *(FLOAT *)&cmp) ++err;
1281 else
1283 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetFloatArray failed, got %#x, expected %#x\n",
1284 i, res_full_name, hr, D3DERR_INVALIDCALL);
1286 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (favalue[l] != *(FLOAT *)&cmp) ++err;
1288 ok(!err, "%u - %s: GetFloatArray failed with %u errors\n", i, res_full_name, err);
1291 static void test_effect_parameter_value_GetVector(const struct test_effect_parameter_value_result *res,
1292 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1294 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1295 const char *res_full_name = res->full_name;
1296 HRESULT hr;
1297 DWORD cmp = 0xabababab;
1298 FLOAT fvalue[4];
1299 UINT l, err = 0;
1301 memset(fvalue, 0xab, sizeof(fvalue));
1302 hr = effect->lpVtbl->GetVector(effect, parameter, (D3DXVECTOR4 *)&fvalue);
1303 if (!res_desc->Elements &&
1304 (res_desc->Class == D3DXPC_SCALAR || res_desc->Class == D3DXPC_VECTOR) &&
1305 res_desc->Type == D3DXPT_INT && res_desc->Bytes == 4)
1307 DWORD tmp;
1309 ok(hr == D3D_OK, "%u - %s: GetVector failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1311 tmp = (DWORD)(*(fvalue + 2) * INT_FLOAT_MULTI);
1312 tmp += ((DWORD)(*(fvalue + 1) * INT_FLOAT_MULTI)) << 8;
1313 tmp += ((DWORD)(*fvalue * INT_FLOAT_MULTI)) << 16;
1314 tmp += ((DWORD)(*(fvalue + 3) * INT_FLOAT_MULTI)) << 24;
1316 if (*res_value != tmp) ++err;
1318 else if (!res_desc->Elements && (res_desc->Class == D3DXPC_SCALAR || res_desc->Class == D3DXPC_VECTOR))
1320 ok(hr == D3D_OK, "%u - %s: GetVector failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1322 for (l = 0; l < res_desc->Columns; ++l)
1324 if (!compare_float(fvalue[l], get_float(res_desc->Type, &res_value[l]), 512)) ++err;
1327 for (l = res_desc->Columns; l < 4; ++l) if (fvalue[l] != 0.0f) ++err;
1329 else
1331 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetVector failed, got %#x, expected %#x\n",
1332 i, res_full_name, hr, D3DERR_INVALIDCALL);
1334 for (l = 0; l < 4; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1336 ok(!err, "%u - %s: GetVector failed with %u errors\n", i, res_full_name, err);
1339 static void test_effect_parameter_value_GetVectorArray(const struct test_effect_parameter_value_result *res,
1340 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1342 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1343 const char *res_full_name = res->full_name;
1344 HRESULT hr;
1345 DWORD cmp = 0xabababab;
1346 FLOAT fvalue[EFFECT_PARAMETER_VALUE_ARRAY_SIZE];
1347 UINT l, k, element, err = 0;
1349 for (element = 0; element <= res_desc->Elements + 1; ++element)
1351 memset(fvalue, 0xab, sizeof(fvalue));
1352 hr = effect->lpVtbl->GetVectorArray(effect, parameter, (D3DXVECTOR4 *)&fvalue, element);
1353 if (!element)
1355 ok(hr == D3D_OK, "%u - %s[%u]: GetVectorArray failed, got %#x, expected %#x\n", i, res_full_name, element, hr, D3D_OK);
1357 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1359 else if (element <= res_desc->Elements && res_desc->Class == D3DXPC_VECTOR)
1361 ok(hr == D3D_OK, "%u - %s[%u]: GetVectorArray failed, got %#x, expected %#x\n", i, res_full_name, element, hr, D3D_OK);
1363 for (k = 0; k < element; ++k)
1365 for (l = 0; l < res_desc->Columns; ++l)
1367 if (!compare_float(fvalue[l + k * 4], get_float(res_desc->Type,
1368 &res_value[l + k * res_desc->Columns]), 512))
1369 ++err;
1372 for (l = res_desc->Columns; l < 4; ++l) if (fvalue[l + k * 4] != 0.0f) ++err;
1375 for (l = element * 4; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1377 else
1379 ok(hr == D3DERR_INVALIDCALL, "%u - %s[%u]: GetVectorArray failed, got %#x, expected %#x\n",
1380 i, res_full_name, element, hr, D3DERR_INVALIDCALL);
1382 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1384 ok(!err, "%u - %s[%u]: GetVectorArray failed with %u errors\n", i, res_full_name, element, err);
1388 static void test_effect_parameter_value_GetMatrix(const struct test_effect_parameter_value_result *res,
1389 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1391 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1392 const char *res_full_name = res->full_name;
1393 HRESULT hr;
1394 union
1396 DWORD d;
1397 float f;
1398 } cmp;
1399 float fvalue[16];
1400 UINT l, k, err = 0;
1402 cmp.d = 0xabababab;
1403 memset(fvalue, 0xab, sizeof(fvalue));
1404 hr = effect->lpVtbl->GetMatrix(effect, parameter, (D3DXMATRIX *)&fvalue);
1405 if (!res_desc->Elements && res_desc->Class == D3DXPC_MATRIX_ROWS)
1407 ok(hr == D3D_OK, "%u - %s: GetMatrix failed, got %#x, expected %#x.\n", i, res_full_name, hr, D3D_OK);
1409 for (k = 0; k < 4; ++k)
1411 for (l = 0; l < 4; ++l)
1413 if (k < res_desc->Columns && l < res_desc->Rows)
1415 if (!compare_float(fvalue[l * 4 + k], get_float(res_desc->Type,
1416 &res_value[l * res_desc->Columns + k]), 512))
1417 ++err;
1419 else if (fvalue[l * 4 + k] != 0.0f) ++err;
1423 else
1425 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrix failed, got %#x, expected %#x.\n",
1426 i, res_full_name, hr, D3DERR_INVALIDCALL);
1428 for (l = 0; l < ARRAY_SIZE(fvalue); ++l)
1429 if (fvalue[l] != cmp.f)
1430 ++err;
1432 ok(!err, "%u - %s: GetMatrix failed with %u errors.\n", i, res_full_name, err);
1435 static void test_effect_parameter_value_GetMatrixArray(const struct test_effect_parameter_value_result *res,
1436 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1438 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1439 const char *res_full_name = res->full_name;
1440 HRESULT hr;
1441 DWORD cmp = 0xabababab;
1442 FLOAT fvalue[EFFECT_PARAMETER_VALUE_ARRAY_SIZE];
1443 UINT l, k, m, element, err = 0;
1445 for (element = 0; element <= res_desc->Elements + 1; ++element)
1447 memset(fvalue, 0xab, sizeof(fvalue));
1448 hr = effect->lpVtbl->GetMatrixArray(effect, parameter, (D3DXMATRIX *)&fvalue, element);
1449 if (!element)
1451 ok(hr == D3D_OK, "%u - %s[%u]: GetMatrixArray failed, got %#x, expected %#x\n", i, res_full_name, element, hr, D3D_OK);
1453 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1455 else if (element <= res_desc->Elements && res_desc->Class == D3DXPC_MATRIX_ROWS)
1457 ok(hr == D3D_OK, "%u - %s[%u]: GetMatrixArray failed, got %#x, expected %#x\n", i, res_full_name, element, hr, D3D_OK);
1459 for (m = 0; m < element; ++m)
1461 for (k = 0; k < 4; ++k)
1463 for (l = 0; l < 4; ++l)
1465 if (k < res_desc->Columns && l < res_desc->Rows)
1467 if (!compare_float(fvalue[m * 16 + l * 4 + k], get_float(res_desc->Type,
1468 &res_value[m * res_desc->Columns * res_desc->Rows + l * res_desc->Columns + k]), 512))
1469 ++err;
1471 else if (fvalue[m * 16 + l * 4 + k] != 0.0f) ++err;
1476 for (l = element * 16; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1478 else
1480 ok(hr == D3DERR_INVALIDCALL, "%u - %s[%u]: GetMatrixArray failed, got %#x, expected %#x\n",
1481 i, res_full_name, element, hr, D3DERR_INVALIDCALL);
1483 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1485 ok(!err, "%u - %s[%u]: GetMatrixArray failed with %u errors\n", i, res_full_name, element, err);
1489 static void test_effect_parameter_value_GetMatrixPointerArray(const struct test_effect_parameter_value_result *res,
1490 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1492 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1493 const char *res_full_name = res->full_name;
1494 HRESULT hr;
1495 DWORD cmp = 0xabababab;
1496 FLOAT fvalue[EFFECT_PARAMETER_VALUE_ARRAY_SIZE];
1497 D3DXMATRIX *matrix_pointer_array[sizeof(fvalue)/sizeof(D3DXMATRIX)];
1498 UINT l, k, m, element, err = 0;
1500 for (element = 0; element <= res_desc->Elements + 1; ++element)
1502 memset(fvalue, 0xab, sizeof(fvalue));
1503 for (l = 0; l < element; ++l)
1505 matrix_pointer_array[l] = (D3DXMATRIX *)&fvalue[l * sizeof(**matrix_pointer_array) / sizeof(FLOAT)];
1507 hr = effect->lpVtbl->GetMatrixPointerArray(effect, parameter, matrix_pointer_array, element);
1508 if (!element)
1510 ok(hr == D3D_OK, "%u - %s[%u]: GetMatrixPointerArray failed, got %#x, expected %#x\n",
1511 i, res_full_name, element, hr, D3D_OK);
1513 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1515 else if (element <= res_desc->Elements && res_desc->Class == D3DXPC_MATRIX_ROWS)
1517 ok(hr == D3D_OK, "%u - %s[%u]: GetMatrixPointerArray failed, got %#x, expected %#x\n",
1518 i, res_full_name, element, hr, D3D_OK);
1520 for (m = 0; m < element; ++m)
1522 for (k = 0; k < 4; ++k)
1524 for (l = 0; l < 4; ++l)
1526 if (k < res_desc->Columns && l < res_desc->Rows)
1528 if (!compare_float(fvalue[m * 16 + l * 4 + k], get_float(res_desc->Type,
1529 &res_value[m * res_desc->Columns * res_desc->Rows + l * res_desc->Columns + k]), 512))
1530 ++err;
1532 else if (fvalue[m * 16 + l * 4 + k] != 0.0f) ++err;
1537 for (l = element * 16; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1539 else
1541 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1543 ok(hr == D3DERR_INVALIDCALL, "%u - %s[%u]: GetMatrixPointerArray failed, got %#x, expected %#x\n",
1544 i, res_full_name, element, hr, D3DERR_INVALIDCALL);
1546 ok(!err, "%u - %s[%u]: GetMatrixPointerArray failed with %u errors\n", i, res_full_name, element, err);
1550 static void test_effect_parameter_value_GetMatrixTranspose(const struct test_effect_parameter_value_result *res,
1551 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1553 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1554 const char *res_full_name = res->full_name;
1555 HRESULT hr;
1556 union
1558 DWORD d;
1559 float f;
1560 } cmp;
1561 float fvalue[16];
1562 UINT l, k, err = 0;
1564 cmp.d = 0xabababab;
1565 memset(fvalue, 0xab, sizeof(fvalue));
1566 hr = effect->lpVtbl->GetMatrixTranspose(effect, parameter, (D3DXMATRIX *)&fvalue);
1567 if (!res_desc->Elements && res_desc->Class == D3DXPC_MATRIX_ROWS)
1569 ok(hr == D3D_OK, "%u - %s: GetMatrixTranspose failed, got %#x, expected %#x.\n", i, res_full_name, hr, D3D_OK);
1571 for (k = 0; k < 4; ++k)
1573 for (l = 0; l < 4; ++l)
1575 if (k < res_desc->Columns && l < res_desc->Rows)
1577 if (!compare_float(fvalue[l + k * 4], get_float(res_desc->Type,
1578 &res_value[l * res_desc->Columns + k]), 512))
1579 ++err;
1581 else if (fvalue[l + k * 4] != 0.0f) ++err;
1585 else if (!res_desc->Elements && (res_desc->Class == D3DXPC_VECTOR || res_desc->Class == D3DXPC_SCALAR))
1587 ok(hr == D3D_OK, "%u - %s: GetMatrixTranspose failed, got %#x, expected %#x.\n", i, res_full_name, hr, D3D_OK);
1589 for (k = 0; k < 4; ++k)
1591 for (l = 0; l < 4; ++l)
1593 if (k < res_desc->Columns && l < res_desc->Rows)
1595 if (!compare_float(fvalue[l * 4 + k], get_float(res_desc->Type,
1596 &res_value[l * res_desc->Columns + k]), 512))
1597 ++err;
1599 else if (fvalue[l * 4 + k] != 0.0f) ++err;
1603 else
1605 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrixTranspose failed, got %#x, expected %#x.\n",
1606 i, res_full_name, hr, D3DERR_INVALIDCALL);
1608 for (l = 0; l < ARRAY_SIZE(fvalue); ++l)
1609 if (fvalue[l] != cmp.f)
1610 ++err;
1612 ok(!err, "%u - %s: GetMatrixTranspose failed with %u errors.\n", i, res_full_name, err);
1615 static void test_effect_parameter_value_GetMatrixTransposeArray(const struct test_effect_parameter_value_result *res,
1616 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1618 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1619 const char *res_full_name = res->full_name;
1620 HRESULT hr;
1621 DWORD cmp = 0xabababab;
1622 FLOAT fvalue[EFFECT_PARAMETER_VALUE_ARRAY_SIZE];
1623 UINT l, k, m, element, err = 0;
1625 for (element = 0; element <= res_desc->Elements + 1; ++element)
1627 memset(fvalue, 0xab, sizeof(fvalue));
1628 hr = effect->lpVtbl->GetMatrixTransposeArray(effect, parameter, (D3DXMATRIX *)&fvalue, element);
1629 if (!element)
1631 ok(hr == D3D_OK, "%u - %s[%u]: GetMatrixTransposeArray failed, got %#x, expected %#x\n",
1632 i, res_full_name, element, hr, D3D_OK);
1634 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1636 else if (element <= res_desc->Elements && res_desc->Class == D3DXPC_MATRIX_ROWS)
1638 ok(hr == D3D_OK, "%u - %s[%u]: GetMatrixTransposeArray failed, got %#x, expected %#x\n",
1639 i, res_full_name, element, hr, D3D_OK);
1641 for (m = 0; m < element; ++m)
1643 for (k = 0; k < 4; ++k)
1645 for (l = 0; l < 4; ++l)
1647 if (k < res_desc->Columns && l < res_desc->Rows)
1649 if (!compare_float(fvalue[m * 16 + l + k * 4], get_float(res_desc->Type,
1650 &res_value[m * res_desc->Columns * res_desc->Rows + l * res_desc->Columns + k]), 512))
1651 ++err;
1653 else if (fvalue[m * 16 + l + k * 4] != 0.0f) ++err;
1658 for (l = element * 16; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1660 else
1662 ok(hr == D3DERR_INVALIDCALL, "%u - %s[%u]: GetMatrixTransposeArray failed, got %#x, expected %#x\n",
1663 i, res_full_name, element, hr, D3DERR_INVALIDCALL);
1665 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1667 ok(!err, "%u - %s[%u]: GetMatrixTransposeArray failed with %u errors\n", i, res_full_name, element, err);
1671 static void test_effect_parameter_value_GetMatrixTransposePointerArray(const struct test_effect_parameter_value_result *res,
1672 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1674 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1675 const char *res_full_name = res->full_name;
1676 HRESULT hr;
1677 DWORD cmp = 0xabababab;
1678 FLOAT fvalue[EFFECT_PARAMETER_VALUE_ARRAY_SIZE];
1679 D3DXMATRIX *matrix_pointer_array[sizeof(fvalue)/sizeof(D3DXMATRIX)];
1680 UINT l, k, m, element, err = 0;
1682 for (element = 0; element <= res_desc->Elements + 1; ++element)
1684 memset(fvalue, 0xab, sizeof(fvalue));
1685 for (l = 0; l < element; ++l)
1687 matrix_pointer_array[l] = (D3DXMATRIX *)&fvalue[l * sizeof(**matrix_pointer_array) / sizeof(FLOAT)];
1689 hr = effect->lpVtbl->GetMatrixTransposePointerArray(effect, parameter, matrix_pointer_array, element);
1690 if (!element)
1692 ok(hr == D3D_OK, "%u - %s[%u]: GetMatrixTransposePointerArray failed, got %#x, expected %#x\n",
1693 i, res_full_name, element, hr, D3D_OK);
1695 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1697 else if (element <= res_desc->Elements && res_desc->Class == D3DXPC_MATRIX_ROWS)
1699 ok(hr == D3D_OK, "%u - %s[%u]: GetMatrixTransposePointerArray failed, got %#x, expected %#x\n",
1700 i, res_full_name, element, hr, D3D_OK);
1702 for (m = 0; m < element; ++m)
1704 for (k = 0; k < 4; ++k)
1706 for (l = 0; l < 4; ++l)
1708 if (k < res_desc->Columns && l < res_desc->Rows)
1710 if (!compare_float(fvalue[m * 16 + l + k * 4], get_float(res_desc->Type,
1711 &res_value[m * res_desc->Columns * res_desc->Rows + l * res_desc->Columns + k]), 512))
1712 ++err;
1714 else if (fvalue[m * 16 + l + k * 4] != 0.0f) ++err;
1719 for (l = element * 16; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1721 else
1723 ok(hr == D3DERR_INVALIDCALL, "%u - %s[%u]: GetMatrixTransposePointerArray failed, got %#x, expected %#x\n",
1724 i, res_full_name, element, hr, D3DERR_INVALIDCALL);
1726 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1728 ok(!err, "%u - %s[%u]: GetMatrixTransposePointerArray failed with %u errors\n", i, res_full_name, element, err);
1732 static void test_effect_parameter_value_GetTestGroup(const struct test_effect_parameter_value_result *res,
1733 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1735 test_effect_parameter_value_GetValue(res, effect, res_value, parameter, i);
1736 test_effect_parameter_value_GetBool(res, effect, res_value, parameter, i);
1737 test_effect_parameter_value_GetBoolArray(res, effect, res_value, parameter, i);
1738 test_effect_parameter_value_GetInt(res, effect, res_value, parameter, i);
1739 test_effect_parameter_value_GetIntArray(res, effect, res_value, parameter, i);
1740 test_effect_parameter_value_GetFloat(res, effect, res_value, parameter, i);
1741 test_effect_parameter_value_GetFloatArray(res, effect, res_value, parameter, i);
1742 test_effect_parameter_value_GetVector(res, effect, res_value, parameter, i);
1743 test_effect_parameter_value_GetVectorArray(res, effect, res_value, parameter, i);
1744 test_effect_parameter_value_GetMatrix(res, effect, res_value, parameter, i);
1745 test_effect_parameter_value_GetMatrixArray(res, effect, res_value, parameter, i);
1746 test_effect_parameter_value_GetMatrixPointerArray(res, effect, res_value, parameter, i);
1747 test_effect_parameter_value_GetMatrixTranspose(res, effect, res_value, parameter, i);
1748 test_effect_parameter_value_GetMatrixTransposeArray(res, effect, res_value, parameter, i);
1749 test_effect_parameter_value_GetMatrixTransposePointerArray(res, effect, res_value, parameter, i);
1752 static void test_effect_parameter_value_ResetValue(const struct test_effect_parameter_value_result *res,
1753 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1755 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1756 const char *res_full_name = res->full_name;
1757 HRESULT hr;
1759 if (res_desc->Class == D3DXPC_SCALAR
1760 || res_desc->Class == D3DXPC_VECTOR
1761 || res_desc->Class == D3DXPC_MATRIX_ROWS)
1763 hr = effect->lpVtbl->SetValue(effect, parameter, res_value, res_desc->Bytes);
1764 ok(hr == D3D_OK, "%u - %s: SetValue failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1766 else
1768 /* nothing to do */
1769 switch (res_desc->Type)
1771 case D3DXPT_PIXELSHADER:
1772 case D3DXPT_VERTEXSHADER:
1773 case D3DXPT_TEXTURE2D:
1774 case D3DXPT_STRING:
1775 break;
1777 default:
1778 ok(0, "Type is %u, this should not happen!\n", res_desc->Type);
1779 break;
1784 static void test_effect_parameter_value(IDirect3DDevice9 *device)
1786 unsigned int effect_count = ARRAY_SIZE(test_effect_parameter_value_data), i;
1788 for (i = 0; i < effect_count; ++i)
1790 const struct test_effect_parameter_value_result *res = test_effect_parameter_value_data[i].res;
1791 UINT res_count = test_effect_parameter_value_data[i].res_count;
1792 const DWORD *blob = test_effect_parameter_value_data[i].blob;
1793 UINT blob_size = test_effect_parameter_value_data[i].blob_size;
1794 HRESULT hr;
1795 ID3DXEffect *effect;
1796 D3DXEFFECT_DESC edesc;
1797 ULONG count;
1798 UINT k;
1800 hr = D3DXCreateEffect(device, blob, blob_size, NULL, NULL, 0, NULL, &effect, NULL);
1801 ok(hr == D3D_OK, "%u: D3DXCreateEffect failed, got %#x, expected %#x\n", i, hr, D3D_OK);
1803 hr = effect->lpVtbl->GetDesc(effect, &edesc);
1804 ok(hr == D3D_OK, "%u: GetDesc failed, got %#x, expected %#x\n", i, hr, D3D_OK);
1805 ok(edesc.Parameters == res_count, "%u: Parameters failed, got %u, expected %u\n",
1806 i, edesc.Parameters, res_count);
1808 for (k = 0; k < res_count; ++k)
1810 const D3DXPARAMETER_DESC *res_desc = &res[k].desc;
1811 const char *res_full_name = res[k].full_name;
1812 UINT res_value_offset = res[k].value_offset;
1813 D3DXHANDLE parameter;
1814 D3DXPARAMETER_DESC pdesc;
1815 BOOL bvalue = TRUE;
1816 INT ivalue = 42;
1817 FLOAT fvalue = 2.71828f;
1818 DWORD input_value[EFFECT_PARAMETER_VALUE_ARRAY_SIZE];
1819 DWORD expected_value[EFFECT_PARAMETER_VALUE_ARRAY_SIZE];
1820 UINT l, n, m, element;
1821 const D3DXMATRIX *matrix_pointer_array[sizeof(input_value)/sizeof(D3DXMATRIX)];
1823 parameter = effect->lpVtbl->GetParameterByName(effect, NULL, res_full_name);
1824 ok(parameter != NULL, "%u - %s: GetParameterByName failed\n", i, res_full_name);
1826 hr = effect->lpVtbl->GetParameterDesc(effect, parameter, &pdesc);
1827 ok(hr == D3D_OK, "%u - %s: GetParameterDesc failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1829 ok(res_desc->Name ? !strcmp(pdesc.Name, res_desc->Name) : !pdesc.Name,
1830 "%u - %s: GetParameterDesc Name failed, got \"%s\", expected \"%s\"\n",
1831 i, res_full_name, pdesc.Name, res_desc->Name);
1832 ok(res_desc->Semantic ? !strcmp(pdesc.Semantic, res_desc->Semantic) : !pdesc.Semantic,
1833 "%u - %s: GetParameterDesc Semantic failed, got \"%s\", expected \"%s\"\n",
1834 i, res_full_name, pdesc.Semantic, res_desc->Semantic);
1835 ok(res_desc->Class == pdesc.Class, "%u - %s: GetParameterDesc Class failed, got %#x, expected %#x\n",
1836 i, res_full_name, pdesc.Class, res_desc->Class);
1837 ok(res_desc->Type == pdesc.Type, "%u - %s: GetParameterDesc Type failed, got %#x, expected %#x\n",
1838 i, res_full_name, pdesc.Type, res_desc->Type);
1839 ok(res_desc->Rows == pdesc.Rows, "%u - %s: GetParameterDesc Rows failed, got %u, expected %u\n",
1840 i, res_full_name, pdesc.Rows, res_desc->Rows);
1841 ok(res_desc->Columns == pdesc.Columns, "%u - %s: GetParameterDesc Columns failed, got %u, expected %u\n",
1842 i, res_full_name, pdesc.Columns, res_desc->Columns);
1843 ok(res_desc->Elements == pdesc.Elements, "%u - %s: GetParameterDesc Elements failed, got %u, expected %u\n",
1844 i, res_full_name, pdesc.Elements, res_desc->Elements);
1845 ok(res_desc->Annotations == pdesc.Annotations, "%u - %s: GetParameterDesc Annotations failed, got %u, expected %u\n",
1846 i, res_full_name, pdesc.Annotations, res_desc->Annotations);
1847 ok(res_desc->StructMembers == pdesc.StructMembers, "%u - %s: GetParameterDesc StructMembers failed, got %u, expected %u\n",
1848 i, res_full_name, pdesc.StructMembers, res_desc->StructMembers);
1849 ok(res_desc->Flags == pdesc.Flags, "%u - %s: GetParameterDesc Flags failed, got %u, expected %u\n",
1850 i, res_full_name, pdesc.Flags, res_desc->Flags);
1851 ok(res_desc->Bytes == pdesc.Bytes, "%u - %s: GetParameterDesc Bytes, got %u, expected %u\n",
1852 i, res_full_name, pdesc.Bytes, res_desc->Bytes);
1854 /* check size */
1855 ok(EFFECT_PARAMETER_VALUE_ARRAY_SIZE >= res_desc->Bytes / 4 +
1856 (res_desc->Elements ? res_desc->Bytes / 4 / res_desc->Elements : 0),
1857 "%u - %s: Warning: Array size too small\n", i, res_full_name);
1859 test_effect_parameter_value_GetTestGroup(&res[k], effect, &blob[res_value_offset], parameter, i);
1860 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
1861 test_effect_parameter_value_GetTestGroup(&res[k], effect, &blob[res_value_offset], parameter, i);
1864 * check invalid calls
1865 * These will crash:
1866 * effect->lpVtbl->SetBoolArray(effect, parameter, NULL, res_desc->Bytes / sizeof(BOOL));
1867 * effect->lpVtbl->SetIntArray(effect, parameter, NULL, res_desc->Bytes / sizeof(INT));
1868 * effect->lpVtbl->SetFloatArray(effect, parameter, NULL, res_desc->Bytes / sizeof(FLOAT));
1869 * effect->lpVtbl->SetVector(effect, parameter, NULL);
1870 * effect->lpVtbl->SetVectorArray(effect, parameter, NULL, res_desc->Elements ? res_desc->Elements : 1);
1871 * effect->lpVtbl->SetMatrix(effect, parameter, NULL);
1872 * effect->lpVtbl->GetMatrix(effect, parameter, NULL);
1873 * effect->lpVtbl->SetMatrixArray(effect, parameter, NULL, res_desc->Elements ? res_desc->Elements : 1);
1874 * effect->lpVtbl->SetMatrixPointerArray(effect, parameter, NULL, res_desc->Elements ? res_desc->Elements : 1);
1875 * effect->lpVtbl->SetMatrixTranspose(effect, parameter, NULL);
1876 * effect->lpVtbl->SetMatrixTransposeArray(effect, parameter, NULL, res_desc->Elements ? res_desc->Elements : 1);
1877 * effect->lpVtbl->SetMatrixTransposePointerArray(effect, parameter, NULL, res_desc->Elements ? res_desc->Elements : 1);
1878 * effect->lpVtbl->GetValue(effect, parameter, NULL, res_desc->Bytes);
1879 * effect->lpVtbl->SetValue(effect, parameter, NULL, res_desc->Bytes);
1881 hr = effect->lpVtbl->SetBool(effect, NULL, bvalue);
1882 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetBool failed, got %#x, expected %#x\n",
1883 i, res_full_name, hr, D3DERR_INVALIDCALL);
1885 hr = effect->lpVtbl->GetBool(effect, NULL, &bvalue);
1886 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetBool failed, got %#x, expected %#x\n",
1887 i, res_full_name, hr, D3DERR_INVALIDCALL);
1889 hr = effect->lpVtbl->GetBool(effect, parameter, NULL);
1890 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetBool failed, got %#x, expected %#x\n",
1891 i, res_full_name, hr, D3DERR_INVALIDCALL);
1893 hr = effect->lpVtbl->SetBoolArray(effect, NULL, (BOOL *)input_value, res_desc->Bytes / sizeof(BOOL));
1894 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetBoolArray failed, got %#x, expected %#x\n",
1895 i, res_full_name, hr, D3DERR_INVALIDCALL);
1897 hr = effect->lpVtbl->GetBoolArray(effect, NULL, (BOOL *)input_value, res_desc->Bytes / sizeof(BOOL));
1898 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetBoolArray failed, got %#x, expected %#x\n",
1899 i, res_full_name, hr, D3DERR_INVALIDCALL);
1901 hr = effect->lpVtbl->GetBoolArray(effect, parameter, NULL, res_desc->Bytes / sizeof(BOOL));
1902 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetBoolArray failed, got %#x, expected %#x\n",
1903 i, res_full_name, hr, D3DERR_INVALIDCALL);
1905 hr = effect->lpVtbl->SetInt(effect, NULL, ivalue);
1906 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetInt failed, got %#x, expected %#x\n",
1907 i, res_full_name, hr, D3DERR_INVALIDCALL);
1909 hr = effect->lpVtbl->GetInt(effect, NULL, &ivalue);
1910 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetInt failed, got %#x, expected %#x\n",
1911 i, res_full_name, hr, D3DERR_INVALIDCALL);
1913 hr = effect->lpVtbl->GetInt(effect, parameter, NULL);
1914 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetInt failed, got %#x, expected %#x\n",
1915 i, res_full_name, hr, D3DERR_INVALIDCALL);
1917 hr = effect->lpVtbl->SetIntArray(effect, NULL, (INT *)input_value, res_desc->Bytes / sizeof(INT));
1918 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetIntArray failed, got %#x, expected %#x\n",
1919 i, res_full_name, hr, D3DERR_INVALIDCALL);
1921 hr = effect->lpVtbl->GetIntArray(effect, NULL, (INT *)input_value, res_desc->Bytes / sizeof(INT));
1922 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetIntArray failed, got %#x, expected %#x\n",
1923 i, res_full_name, hr, D3DERR_INVALIDCALL);
1925 hr = effect->lpVtbl->GetIntArray(effect, parameter, NULL, res_desc->Bytes / sizeof(INT));
1926 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetIntArray failed, got %#x, expected %#x\n",
1927 i, res_full_name, hr, D3DERR_INVALIDCALL);
1929 hr = effect->lpVtbl->SetFloat(effect, NULL, fvalue);
1930 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetFloat failed, got %#x, expected %#x\n",
1931 i, res_full_name, hr, D3DERR_INVALIDCALL);
1933 hr = effect->lpVtbl->GetFloat(effect, NULL, &fvalue);
1934 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetFloat failed, got %#x, expected %#x\n",
1935 i, res_full_name, hr, D3DERR_INVALIDCALL);
1937 hr = effect->lpVtbl->GetFloat(effect, parameter, NULL);
1938 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetFloat failed, got %#x, expected %#x\n",
1939 i, res_full_name, hr, D3DERR_INVALIDCALL);
1941 hr = effect->lpVtbl->SetFloatArray(effect, NULL, (FLOAT *)input_value, res_desc->Bytes / sizeof(FLOAT));
1942 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetFloatArray failed, got %#x, expected %#x\n",
1943 i, res_full_name, hr, D3DERR_INVALIDCALL);
1945 hr = effect->lpVtbl->GetFloatArray(effect, NULL, (FLOAT *)input_value, res_desc->Bytes / sizeof(FLOAT));
1946 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetFloatArray failed, got %#x, expected %#x\n",
1947 i, res_full_name, hr, D3DERR_INVALIDCALL);
1949 hr = effect->lpVtbl->GetFloatArray(effect, parameter, NULL, res_desc->Bytes / sizeof(FLOAT));
1950 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetFloatArray failed, got %#x, expected %#x\n",
1951 i, res_full_name, hr, D3DERR_INVALIDCALL);
1953 hr = effect->lpVtbl->SetVector(effect, NULL, (D3DXVECTOR4 *)input_value);
1954 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetVector failed, got %#x, expected %#x\n",
1955 i, res_full_name, hr, D3DERR_INVALIDCALL);
1957 hr = effect->lpVtbl->GetVector(effect, NULL, (D3DXVECTOR4 *)input_value);
1958 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetVector failed, got %#x, expected %#x\n",
1959 i, res_full_name, hr, D3DERR_INVALIDCALL);
1961 hr = effect->lpVtbl->GetVector(effect, parameter, NULL);
1962 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetVector failed, got %#x, expected %#x\n",
1963 i, res_full_name, hr, D3DERR_INVALIDCALL);
1965 hr = effect->lpVtbl->SetVectorArray(effect, NULL, (D3DXVECTOR4 *)input_value, res_desc->Elements ? res_desc->Elements : 1);
1966 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetVectorArray failed, got %#x, expected %#x\n",
1967 i, res_full_name, hr, D3DERR_INVALIDCALL);
1969 hr = effect->lpVtbl->GetVectorArray(effect, NULL, (D3DXVECTOR4 *)input_value, res_desc->Elements ? res_desc->Elements : 1);
1970 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetVectorArray failed, got %#x, expected %#x\n",
1971 i, res_full_name, hr, D3DERR_INVALIDCALL);
1973 hr = effect->lpVtbl->GetVectorArray(effect, parameter, NULL, res_desc->Elements ? res_desc->Elements : 1);
1974 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetVectorArray failed, got %#x, expected %#x\n",
1975 i, res_full_name, hr, D3DERR_INVALIDCALL);
1977 hr = effect->lpVtbl->SetMatrix(effect, NULL, (D3DXMATRIX *)input_value);
1978 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrix failed, got %#x, expected %#x\n",
1979 i, res_full_name, hr, D3DERR_INVALIDCALL);
1981 hr = effect->lpVtbl->GetMatrix(effect, NULL, (D3DXMATRIX *)input_value);
1982 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrix failed, got %#x, expected %#x\n",
1983 i, res_full_name, hr, D3DERR_INVALIDCALL);
1985 hr = effect->lpVtbl->SetMatrixArray(effect, NULL, (D3DXMATRIX *)input_value, res_desc->Elements ? res_desc->Elements : 1);
1986 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrixArray failed, got %#x, expected %#x\n",
1987 i, res_full_name, hr, D3DERR_INVALIDCALL);
1989 hr = effect->lpVtbl->GetMatrixArray(effect, NULL, (D3DXMATRIX *)input_value, res_desc->Elements ? res_desc->Elements : 1);
1990 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrixArray failed, got %#x, expected %#x\n",
1991 i, res_full_name, hr, D3DERR_INVALIDCALL);
1993 hr = effect->lpVtbl->GetMatrixArray(effect, parameter, NULL, res_desc->Elements ? res_desc->Elements : 1);
1994 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrixArray failed, got %#x, expected %#x\n",
1995 i, res_full_name, hr, D3DERR_INVALIDCALL);
1997 hr = effect->lpVtbl->SetMatrixPointerArray(effect, NULL, matrix_pointer_array, res_desc->Elements ? res_desc->Elements : 1);
1998 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrixPointerArray failed, got %#x, expected %#x\n",
1999 i, res_full_name, hr, D3DERR_INVALIDCALL);
2001 hr = effect->lpVtbl->SetMatrixPointerArray(effect, NULL, matrix_pointer_array, 0);
2002 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrixPointerArray failed, got %#x, expected %#x\n",
2003 i, res_full_name, hr, D3DERR_INVALIDCALL);
2005 hr = effect->lpVtbl->GetMatrixPointerArray(effect, NULL, NULL, 0);
2006 ok(hr == D3D_OK, "%u - %s: GetMatrixPointerArray failed, got %#x, expected %#x\n",
2007 i, res_full_name, hr, D3D_OK);
2009 hr = effect->lpVtbl->GetMatrixPointerArray(effect, NULL, NULL, res_desc->Elements ? res_desc->Elements : 1);
2010 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrixPointerArray failed, got %#x, expected %#x\n",
2011 i, res_full_name, hr, D3DERR_INVALIDCALL);
2013 hr = effect->lpVtbl->GetMatrixPointerArray(effect, parameter, NULL, res_desc->Elements ? res_desc->Elements : 1);
2014 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrixPointerArray failed, got %#x, expected %#x\n",
2015 i, res_full_name, hr, D3DERR_INVALIDCALL);
2017 hr = effect->lpVtbl->SetMatrixTranspose(effect, NULL, (D3DXMATRIX *)input_value);
2018 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrixTranspose failed, got %#x, expected %#x\n",
2019 i, res_full_name, hr, D3DERR_INVALIDCALL);
2021 hr = effect->lpVtbl->GetMatrixTranspose(effect, NULL, (D3DXMATRIX *)input_value);
2022 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrixTranspose failed, got %#x, expected %#x\n",
2023 i, res_full_name, hr, D3DERR_INVALIDCALL);
2025 hr = effect->lpVtbl->GetMatrixTranspose(effect, parameter, NULL);
2026 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrixTranspose failed, got %#x, expected %#x\n",
2027 i, res_full_name, hr, D3DERR_INVALIDCALL);
2029 hr = effect->lpVtbl->SetMatrixTransposeArray(effect, NULL, (D3DXMATRIX *)input_value, res_desc->Elements ? res_desc->Elements : 1);
2030 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrixTransposeArray failed, got %#x, expected %#x\n",
2031 i, res_full_name, hr, D3DERR_INVALIDCALL);
2033 hr = effect->lpVtbl->GetMatrixTransposeArray(effect, NULL, (D3DXMATRIX *)input_value, res_desc->Elements ? res_desc->Elements : 1);
2034 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrixTransposeArray failed, got %#x, expected %#x\n",
2035 i, res_full_name, hr, D3DERR_INVALIDCALL);
2037 hr = effect->lpVtbl->GetMatrixTransposeArray(effect, parameter, NULL, res_desc->Elements ? res_desc->Elements : 1);
2038 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrixTransposeArray failed, got %#x, expected %#x\n",
2039 i, res_full_name, hr, D3DERR_INVALIDCALL);
2041 hr = effect->lpVtbl->SetMatrixTransposePointerArray(effect, NULL, matrix_pointer_array, res_desc->Elements ? res_desc->Elements : 1);
2042 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrixTransposePointerArray failed, got %#x, expected %#x\n",
2043 i, res_full_name, hr, D3DERR_INVALIDCALL);
2045 hr = effect->lpVtbl->SetMatrixTransposePointerArray(effect, NULL, matrix_pointer_array, 0);
2046 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrixTransposePointerArray failed, got %#x, expected %#x\n",
2047 i, res_full_name, hr, D3DERR_INVALIDCALL);
2049 hr = effect->lpVtbl->GetMatrixTransposePointerArray(effect, NULL, NULL, 0);
2050 ok(hr == D3D_OK, "%u - %s: GetMatrixTransposePointerArray failed, got %#x, expected %#x\n",
2051 i, res_full_name, hr, D3D_OK);
2053 hr = effect->lpVtbl->GetMatrixTransposePointerArray(effect, NULL, NULL, res_desc->Elements ? res_desc->Elements : 1);
2054 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrixTransposePointerArray failed, got %#x, expected %#x\n",
2055 i, res_full_name, hr, D3DERR_INVALIDCALL);
2057 hr = effect->lpVtbl->GetMatrixTransposePointerArray(effect, parameter, NULL, res_desc->Elements ? res_desc->Elements : 1);
2058 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrixTransposePointerArray failed, got %#x, expected %#x\n",
2059 i, res_full_name, hr, D3DERR_INVALIDCALL);
2061 hr = effect->lpVtbl->SetValue(effect, NULL, input_value, res_desc->Bytes);
2062 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetValue failed, got %#x, expected %#x\n",
2063 i, res_full_name, hr, D3DERR_INVALIDCALL);
2065 hr = effect->lpVtbl->SetValue(effect, parameter, input_value, res_desc->Bytes - 1);
2066 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetValue failed, got %#x, expected %#x\n",
2067 i, res_full_name, hr, D3DERR_INVALIDCALL);
2069 hr = effect->lpVtbl->GetValue(effect, NULL, input_value, res_desc->Bytes);
2070 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetValue failed, got %#x, expected %#x\n",
2071 i, res_full_name, hr, D3DERR_INVALIDCALL);
2073 hr = effect->lpVtbl->GetValue(effect, parameter, input_value, res_desc->Bytes - 1);
2074 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetValue failed, got %#x, expected %#x\n",
2075 i, res_full_name, hr, D3DERR_INVALIDCALL);
2077 test_effect_parameter_value_GetTestGroup(&res[k], effect, &blob[res_value_offset], parameter, i);
2079 /* SetBool */
2080 bvalue = 5;
2081 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
2082 hr = effect->lpVtbl->SetBool(effect, parameter, bvalue);
2083 if (!res_desc->Elements && res_desc->Rows == 1 && res_desc->Columns == 1)
2085 bvalue = TRUE;
2086 set_number(expected_value, res_desc->Type, &bvalue, D3DXPT_BOOL);
2087 ok(hr == D3D_OK, "%u - %s: SetBool failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
2089 else
2091 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetBool failed, got %#x, expected %#x\n",
2092 i, res_full_name, hr, D3DERR_INVALIDCALL);
2094 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
2095 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
2097 /* SetBoolArray */
2098 *input_value = 1;
2099 for (l = 1; l < res_desc->Bytes / sizeof(*input_value); ++l)
2101 *(input_value + l) = *(input_value + l - 1) + 1;
2103 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
2104 hr = effect->lpVtbl->SetBoolArray(effect, parameter, (BOOL *)input_value, res_desc->Bytes / sizeof(*input_value));
2105 if (res_desc->Class == D3DXPC_SCALAR
2106 || res_desc->Class == D3DXPC_VECTOR
2107 || res_desc->Class == D3DXPC_MATRIX_ROWS)
2109 for (l = 0; l < res_desc->Bytes / sizeof(*input_value); ++l)
2111 set_number(expected_value + l, res_desc->Type, input_value + l, D3DXPT_BOOL);
2113 ok(hr == D3D_OK, "%u - %s: SetBoolArray failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
2115 else
2117 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetBoolArray failed, got %#x, expected %#x\n",
2118 i, res_full_name, hr, D3DERR_INVALIDCALL);
2120 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
2121 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
2123 /* SetInt */
2124 ivalue = 0x1fbf02ff;
2125 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
2126 hr = effect->lpVtbl->SetInt(effect, parameter, ivalue);
2127 if (!res_desc->Elements && res_desc->Rows == 1 && res_desc->Columns == 1)
2129 set_number(expected_value, res_desc->Type, &ivalue, D3DXPT_INT);
2130 ok(hr == D3D_OK, "%u - %s: SetInt failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
2132 else if(!res_desc->Elements && res_desc->Type == D3DXPT_FLOAT &&
2133 ((res_desc->Class == D3DXPC_VECTOR && res_desc->Columns != 2) ||
2134 (res_desc->Class == D3DXPC_MATRIX_ROWS && res_desc->Rows != 2 && res_desc->Columns == 1)))
2136 FLOAT tmp = ((ivalue & 0xff0000) >> 16) * INT_FLOAT_MULTI_INVERSE;
2137 set_number(expected_value, res_desc->Type, &tmp, D3DXPT_FLOAT);
2138 tmp = ((ivalue & 0xff00) >> 8) * INT_FLOAT_MULTI_INVERSE;
2139 set_number(expected_value + 1, res_desc->Type, &tmp, D3DXPT_FLOAT);
2140 tmp = (ivalue & 0xff) * INT_FLOAT_MULTI_INVERSE;
2141 set_number(expected_value + 2, res_desc->Type, &tmp, D3DXPT_FLOAT);
2142 tmp = ((ivalue & 0xff000000) >> 24) * INT_FLOAT_MULTI_INVERSE;
2143 set_number(expected_value + 3, res_desc->Type, &tmp, D3DXPT_FLOAT);
2145 ok(hr == D3D_OK, "%u - %s: SetInt failed, got %#x, expected %#x\n",
2146 i, res_full_name, hr, D3D_OK);
2148 else
2150 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetInt failed, got %#x, expected %#x\n",
2151 i, res_full_name, hr, D3DERR_INVALIDCALL);
2153 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
2154 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
2156 /* SetIntArray */
2157 *input_value = 123456;
2158 for (l = 0; l < res_desc->Bytes / sizeof(*input_value); ++l)
2160 *(input_value + l) = *(input_value + l - 1) + 23;
2162 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
2163 hr = effect->lpVtbl->SetIntArray(effect, parameter, (INT *)input_value, res_desc->Bytes / sizeof(*input_value));
2164 if (res_desc->Class == D3DXPC_SCALAR
2165 || res_desc->Class == D3DXPC_VECTOR
2166 || res_desc->Class == D3DXPC_MATRIX_ROWS)
2168 for (l = 0; l < res_desc->Bytes / sizeof(*input_value); ++l)
2170 set_number(expected_value + l, res_desc->Type, input_value + l, D3DXPT_INT);
2172 ok(hr == D3D_OK, "%u - %s: SetIntArray failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
2174 else
2176 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetIntArray failed, got %#x, expected %#x\n",
2177 i, res_full_name, hr, D3DERR_INVALIDCALL);
2179 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
2180 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
2182 /* SetFloat */
2183 fvalue = 1.33;
2184 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
2185 hr = effect->lpVtbl->SetFloat(effect, parameter, fvalue);
2186 if (!res_desc->Elements && res_desc->Rows == 1 && res_desc->Columns == 1)
2188 set_number(expected_value, res_desc->Type, &fvalue, D3DXPT_FLOAT);
2189 ok(hr == D3D_OK, "%u - %s: SetFloat failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
2191 else
2193 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetFloat failed, got %#x, expected %#x\n",
2194 i, res_full_name, hr, D3DERR_INVALIDCALL);
2196 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
2197 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
2199 /* SetFloatArray */
2200 fvalue = 1.33;
2201 for (l = 0; l < res_desc->Bytes / sizeof(fvalue); ++l)
2203 *(input_value + l) = *(DWORD *)&fvalue;
2204 fvalue += 1.12;
2206 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
2207 hr = effect->lpVtbl->SetFloatArray(effect, parameter, (FLOAT *)input_value, res_desc->Bytes / sizeof(*input_value));
2208 if (res_desc->Class == D3DXPC_SCALAR
2209 || res_desc->Class == D3DXPC_VECTOR
2210 || res_desc->Class == D3DXPC_MATRIX_ROWS)
2212 for (l = 0; l < res_desc->Bytes / sizeof(*input_value); ++l)
2214 set_number(expected_value + l, res_desc->Type, input_value + l, D3DXPT_FLOAT);
2216 ok(hr == D3D_OK, "%u - %s: SetFloatArray failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
2218 else
2220 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetFloatArray failed, got %#x, expected %#x\n",
2221 i, res_full_name, hr, D3DERR_INVALIDCALL);
2223 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
2224 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
2226 /* SetVector */
2227 fvalue = -1.33;
2228 for (l = 0; l < 4; ++l)
2230 *(input_value + l) = *(DWORD *)&fvalue;
2231 fvalue += 1.12;
2233 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
2234 hr = effect->lpVtbl->SetVector(effect, parameter, (D3DXVECTOR4 *)input_value);
2235 if (!res_desc->Elements &&
2236 (res_desc->Class == D3DXPC_SCALAR
2237 || res_desc->Class == D3DXPC_VECTOR))
2239 /* only values between 0 and INT_FLOAT_MULTI are valid */
2240 if (res_desc->Type == D3DXPT_INT && res_desc->Bytes == 4)
2242 *expected_value = (DWORD)(max(min(*(FLOAT *)(input_value + 2), 1.0f), 0.0f) * INT_FLOAT_MULTI);
2243 *expected_value += ((DWORD)(max(min(*(FLOAT *)(input_value + 1), 1.0f), 0.0f) * INT_FLOAT_MULTI)) << 8;
2244 *expected_value += ((DWORD)(max(min(*(FLOAT *)input_value, 1.0f), 0.0f) * INT_FLOAT_MULTI)) << 16;
2245 *expected_value += ((DWORD)(max(min(*(FLOAT *)(input_value + 3), 1.0f), 0.0f) * INT_FLOAT_MULTI)) << 24;
2247 else
2249 for (l = 0; l < 4; ++l)
2251 set_number(expected_value + l, res_desc->Type, input_value + l, D3DXPT_FLOAT);
2254 ok(hr == D3D_OK, "%u - %s: SetVector failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
2256 else
2258 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetVector failed, got %#x, expected %#x\n",
2259 i, res_full_name, hr, D3DERR_INVALIDCALL);
2261 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
2262 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
2264 /* SetVectorArray */
2265 for (element = 0; element < res_desc->Elements + 1; ++element)
2267 fvalue = 1.33;
2268 for (l = 0; l < element * 4; ++l)
2270 *(input_value + l) = *(DWORD *)&fvalue;
2271 fvalue += 1.12;
2273 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
2274 hr = effect->lpVtbl->SetVectorArray(effect, parameter, (D3DXVECTOR4 *)input_value, element);
2275 if (res_desc->Elements && res_desc->Class == D3DXPC_VECTOR && element <= res_desc->Elements)
2277 for (m = 0; m < element; ++m)
2279 for (l = 0; l < res_desc->Columns; ++l)
2281 set_number(expected_value + m * res_desc->Columns + l, res_desc->Type, input_value + m * 4 + l, D3DXPT_FLOAT);
2284 ok(hr == D3D_OK, "%u - %s: SetVectorArray failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
2286 else
2288 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetVectorArray failed, got %#x, expected %#x\n",
2289 i, res_full_name, hr, D3DERR_INVALIDCALL);
2291 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
2292 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
2295 /* SetMatrix */
2296 fvalue = 1.33;
2297 for (l = 0; l < 16; ++l)
2299 *(input_value + l) = *(DWORD *)&fvalue;
2300 fvalue += 1.12;
2302 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
2303 hr = effect->lpVtbl->SetMatrix(effect, parameter, (D3DXMATRIX *)input_value);
2304 if (!res_desc->Elements && res_desc->Class == D3DXPC_MATRIX_ROWS)
2306 for (l = 0; l < 4; ++l)
2308 for (m = 0; m < 4; ++m)
2310 if (m < res_desc->Rows && l < res_desc->Columns)
2311 set_number(expected_value + l + m * res_desc->Columns, res_desc->Type,
2312 input_value + l + m * 4, D3DXPT_FLOAT);
2316 ok(hr == D3D_OK, "%u - %s: SetMatrix failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
2318 else
2320 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrix failed, got %#x, expected %#x\n",
2321 i, res_full_name, hr, D3DERR_INVALIDCALL);
2323 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
2324 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
2326 /* SetMatrixArray */
2327 for (element = 0; element < res_desc->Elements + 1; ++element)
2329 fvalue = 1.33;
2330 for (l = 0; l < element * 16; ++l)
2332 *(input_value + l) = *(DWORD *)&fvalue;
2333 fvalue += 1.12;
2335 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
2336 hr = effect->lpVtbl->SetMatrixArray(effect, parameter, (D3DXMATRIX *)input_value, element);
2337 if (res_desc->Class == D3DXPC_MATRIX_ROWS && element <= res_desc->Elements)
2339 for (n = 0; n < element; ++n)
2341 for (l = 0; l < 4; ++l)
2343 for (m = 0; m < 4; ++m)
2345 if (m < res_desc->Rows && l < res_desc->Columns)
2346 set_number(expected_value + l + m * res_desc->Columns + n * res_desc->Columns * res_desc->Rows,
2347 res_desc->Type, input_value + l + m * 4 + n * 16, D3DXPT_FLOAT);
2352 ok(hr == D3D_OK, "%u - %s: SetMatrixArray failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
2354 else
2356 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrixArray failed, got %#x, expected %#x\n",
2357 i, res_full_name, hr, D3DERR_INVALIDCALL);
2359 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
2360 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
2363 /* SetMatrixPointerArray */
2364 for (element = 0; element < res_desc->Elements + 1; ++element)
2366 fvalue = 1.33;
2367 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l)
2369 *(input_value + l) = *(DWORD *)&fvalue;
2370 fvalue += 1.12;
2372 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
2373 for (l = 0; l < element; ++l)
2375 matrix_pointer_array[l] = (D3DXMATRIX *)&input_value[l * sizeof(**matrix_pointer_array) / sizeof(FLOAT)];
2377 hr = effect->lpVtbl->SetMatrixPointerArray(effect, parameter, matrix_pointer_array, element);
2378 if (res_desc->Class == D3DXPC_MATRIX_ROWS && res_desc->Elements >= element)
2380 for (n = 0; n < element; ++n)
2382 for (l = 0; l < 4; ++l)
2384 for (m = 0; m < 4; ++m)
2386 if (m < res_desc->Rows && l < res_desc->Columns)
2387 set_number(expected_value + l + m * res_desc->Columns + n * res_desc->Columns * res_desc->Rows,
2388 res_desc->Type, input_value + l + m * 4 + n * 16, D3DXPT_FLOAT);
2393 ok(hr == D3D_OK, "%u - %s: SetMatrixPointerArray failed, got %#x, expected %#x\n",
2394 i, res_full_name, hr, D3D_OK);
2396 else
2398 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrixPointerArray failed, got %#x, expected %#x\n",
2399 i, res_full_name, hr, D3DERR_INVALIDCALL);
2401 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
2402 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
2405 /* SetMatrixTranspose */
2406 fvalue = 1.33;
2407 for (l = 0; l < 16; ++l)
2409 *(input_value + l) = *(DWORD *)&fvalue;
2410 fvalue += 1.12;
2412 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
2413 hr = effect->lpVtbl->SetMatrixTranspose(effect, parameter, (D3DXMATRIX *)input_value);
2414 if (!res_desc->Elements && res_desc->Class == D3DXPC_MATRIX_ROWS)
2416 for (l = 0; l < 4; ++l)
2418 for (m = 0; m < 4; ++m)
2420 if (m < res_desc->Rows && l < res_desc->Columns)
2421 set_number(expected_value + l + m * res_desc->Columns, res_desc->Type,
2422 input_value + l * 4 + m, D3DXPT_FLOAT);
2426 ok(hr == D3D_OK, "%u - %s: SetMatrixTranspose failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
2428 else
2430 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrixTranspose failed, got %#x, expected %#x\n",
2431 i, res_full_name, hr, D3DERR_INVALIDCALL);
2433 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
2434 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
2436 /* SetMatrixTransposeArray */
2437 for (element = 0; element < res_desc->Elements + 1; ++element)
2439 fvalue = 1.33;
2440 for (l = 0; l < element * 16; ++l)
2442 *(input_value + l) = *(DWORD *)&fvalue;
2443 fvalue += 1.12;
2445 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
2446 hr = effect->lpVtbl->SetMatrixTransposeArray(effect, parameter, (D3DXMATRIX *)input_value, element);
2447 if (res_desc->Class == D3DXPC_MATRIX_ROWS && element <= res_desc->Elements)
2449 for (n = 0; n < element; ++n)
2451 for (l = 0; l < 4; ++l)
2453 for (m = 0; m < 4; ++m)
2455 if (m < res_desc->Rows && l < res_desc->Columns)
2456 set_number(expected_value + l + m * res_desc->Columns + n * res_desc->Columns * res_desc->Rows,
2457 res_desc->Type, input_value + l * 4 + m + n * 16, D3DXPT_FLOAT);
2462 ok(hr == D3D_OK, "%u - %s: SetMatrixTransposeArray failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
2464 else
2466 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrixTransposeArray failed, got %#x, expected %#x\n",
2467 i, res_full_name, hr, D3DERR_INVALIDCALL);
2469 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
2470 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
2473 /* SetMatrixTransposePointerArray */
2474 for (element = 0; element < res_desc->Elements + 1; ++element)
2476 fvalue = 1.33;
2477 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l)
2479 *(input_value + l) = *(DWORD *)&fvalue;
2480 fvalue += 1.12;
2482 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
2483 for (l = 0; l < element; ++l)
2485 matrix_pointer_array[l] = (D3DXMATRIX *)&input_value[l * sizeof(**matrix_pointer_array) / sizeof(FLOAT)];
2487 hr = effect->lpVtbl->SetMatrixTransposePointerArray(effect, parameter, matrix_pointer_array, element);
2488 if (res_desc->Class == D3DXPC_MATRIX_ROWS && res_desc->Elements >= element)
2490 for (n = 0; n < element; ++n)
2492 for (l = 0; l < 4; ++l)
2494 for (m = 0; m < 4; ++m)
2496 if (m < res_desc->Rows && l < res_desc->Columns)
2497 set_number(expected_value + l + m * res_desc->Columns + n * res_desc->Columns * res_desc->Rows,
2498 res_desc->Type, input_value + l * 4 + m + n * 16, D3DXPT_FLOAT);
2503 ok(hr == D3D_OK, "%u - %s: SetMatrixTransposePointerArray failed, got %#x, expected %#x\n",
2504 i, res_full_name, hr, D3D_OK);
2506 else
2508 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrixTransposePointerArray failed, got %#x, expected %#x\n",
2509 i, res_full_name, hr, D3DERR_INVALIDCALL);
2511 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
2512 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
2516 count = effect->lpVtbl->Release(effect);
2517 ok(!count, "Release failed %u\n", count);
2521 static void test_effect_setvalue_object(IDirect3DDevice9 *device)
2523 static const char expected_string[] = "test_string_1";
2524 static const char expected_string2[] = "test_longer_string_2";
2525 static const char *expected_string_array[] = {expected_string, expected_string2};
2526 const char *string_array[ARRAY_SIZE(expected_string_array)];
2527 const char *string, *string2;
2528 IDirect3DTexture9 *texture_set;
2529 IDirect3DTexture9 *texture;
2530 D3DXHANDLE parameter;
2531 ID3DXEffect *effect;
2532 unsigned int i;
2533 ULONG count;
2534 HRESULT hr;
2536 hr = D3DXCreateEffect(device, test_effect_parameter_value_blob_object,
2537 sizeof(test_effect_parameter_value_blob_object), NULL, NULL, 0, NULL, &effect, NULL);
2538 ok(hr == D3D_OK, "Got result %#x, expected 0 (D3D_OK).\n", hr);
2540 parameter = effect->lpVtbl->GetParameterByName(effect, NULL, "tex");
2541 ok(parameter != NULL, "GetParameterByName failed, got %p\n", parameter);
2543 texture = NULL;
2544 hr = D3DXCreateTexture(device, D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, 0, 0, D3DPOOL_DEFAULT, &texture);
2545 ok(hr == D3D_OK, "Got result %#x, expected 0 (D3D_OK).\n", hr);
2546 hr = effect->lpVtbl->SetValue(effect, parameter, &texture, sizeof(texture));
2547 ok(hr == D3D_OK, "Got result %#x, expected 0 (D3D_OK).\n", hr);
2548 texture_set = NULL;
2549 hr = effect->lpVtbl->GetValue(effect, parameter, &texture_set, sizeof(texture_set));
2550 ok(hr == D3D_OK, "Got result %#x, expected 0 (D3D_OK).\n", hr);
2551 ok(texture == texture_set, "Texture does not match.\n");
2553 count = IDirect3DTexture9_Release(texture_set);
2554 ok(count == 2, "Got reference count %u, expected 2.\n", count);
2555 texture_set = NULL;
2556 hr = effect->lpVtbl->SetValue(effect, parameter, &texture_set, sizeof(texture_set));
2557 ok(hr == D3D_OK, "Got result %#x, expected 0 (D3D_OK).\n", hr);
2558 count = IDirect3DTexture9_Release(texture);
2559 ok(!count, "Got reference count %u, expected 0.\n", count);
2561 hr = effect->lpVtbl->SetString(effect, "s", expected_string);
2562 ok(hr == D3D_OK, "Got result %#x.\n", hr);
2563 string = NULL;
2564 hr = effect->lpVtbl->GetString(effect, "s", &string);
2565 ok(hr == D3D_OK, "Got result %#x.\n", hr);
2566 hr = effect->lpVtbl->GetString(effect, "s", &string2);
2567 ok(hr == D3D_OK, "Got result %#x.\n", hr);
2569 ok(string != expected_string, "String pointers are the same.\n");
2570 ok(string == string2, "String pointers differ.\n");
2571 ok(!strcmp(string, expected_string), "Unexpected string '%s'.\n", string);
2573 string = expected_string2;
2574 hr = effect->lpVtbl->SetValue(effect, "s", &string, sizeof(string) - 1);
2575 ok(hr == D3DERR_INVALIDCALL, "Got result %#x.\n", hr);
2576 hr = effect->lpVtbl->SetValue(effect, "s", &string, sizeof(string));
2577 ok(hr == D3D_OK, "Got result %#x.\n", hr);
2578 hr = effect->lpVtbl->SetValue(effect, "s", &string, sizeof(string) * 2);
2579 ok(hr == D3D_OK, "Got result %#x.\n", hr);
2580 string = NULL;
2581 hr = effect->lpVtbl->GetValue(effect, "s", &string, sizeof(string));
2582 ok(hr == D3D_OK, "Got result %#x.\n", hr);
2584 ok(string != expected_string2, "String pointers are the same.\n");
2585 ok(!strcmp(string, expected_string2), "Unexpected string '%s'.\n", string);
2587 hr = effect->lpVtbl->SetValue(effect, "s_2", expected_string_array,
2588 sizeof(expected_string_array));
2589 ok(hr == D3D_OK, "Got result %#x.\n", hr);
2590 hr = effect->lpVtbl->GetValue(effect, "s_2", string_array,
2591 sizeof(string_array));
2592 ok(hr == D3D_OK, "Got result %#x.\n", hr);
2593 for (i = 0; i < ARRAY_SIZE(expected_string_array); ++i)
2595 ok(!strcmp(string_array[i], expected_string_array[i]), "Unexpected string '%s', i %u.\n",
2596 string_array[i], i);
2598 effect->lpVtbl->Release(effect);
2602 * fxc.exe /Tfx_2_0
2604 #if 0
2605 float a = 2.1;
2606 float b[1];
2607 float c <float d = 3;>;
2608 struct {float e;} f;
2609 float g <float h[1] = {3};>;
2610 struct s {float j;};
2611 float i <s k[1] = {4};>;
2612 technique t <s l[1] = {5};> { pass p <s m[1] = {6};> { } }
2613 #endif
2614 static const DWORD test_effect_variable_names_blob[] =
2616 0xfeff0901, 0x0000024c, 0x00000000, 0x00000003, 0x00000000, 0x00000024, 0x00000000, 0x00000000,
2617 0x00000001, 0x00000001, 0x40066666, 0x00000002, 0x00000061, 0x00000003, 0x00000000, 0x0000004c,
2618 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000002, 0x00000062, 0x00000003,
2619 0x00000000, 0x0000009c, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000000, 0x40400000,
2620 0x00000003, 0x00000000, 0x00000094, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000002,
2621 0x00000064, 0x00000002, 0x00000063, 0x00000000, 0x00000005, 0x000000dc, 0x00000000, 0x00000000,
2622 0x00000001, 0x00000003, 0x00000000, 0x000000e4, 0x00000000, 0x00000000, 0x00000001, 0x00000001,
2623 0x00000000, 0x00000002, 0x00000066, 0x00000002, 0x00000065, 0x00000003, 0x00000000, 0x00000134,
2624 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000000, 0x40400000, 0x00000003, 0x00000000,
2625 0x0000012c, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000068, 0x00000002,
2626 0x00000067, 0x00000003, 0x00000000, 0x000001a4, 0x00000000, 0x00000000, 0x00000001, 0x00000001,
2627 0x00000000, 0x40800000, 0x00000000, 0x00000005, 0x00000194, 0x00000000, 0x00000001, 0x00000001,
2628 0x00000003, 0x00000000, 0x0000019c, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000002,
2629 0x0000006b, 0x00000002, 0x0000006a, 0x00000002, 0x00000069, 0x40a00000, 0x00000000, 0x00000005,
2630 0x000001e4, 0x00000000, 0x00000001, 0x00000001, 0x00000003, 0x00000000, 0x000001ec, 0x00000000,
2631 0x00000000, 0x00000001, 0x00000001, 0x00000002, 0x0000006c, 0x00000002, 0x0000006a, 0x40c00000,
2632 0x00000000, 0x00000005, 0x0000022c, 0x00000000, 0x00000001, 0x00000001, 0x00000003, 0x00000000,
2633 0x00000234, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000002, 0x0000006d, 0x00000002,
2634 0x0000006a, 0x00000002, 0x00000070, 0x00000002, 0x00000074, 0x00000006, 0x00000001, 0x00000001,
2635 0x00000001, 0x00000004, 0x00000020, 0x00000000, 0x00000000, 0x0000002c, 0x00000048, 0x00000000,
2636 0x00000000, 0x00000054, 0x00000070, 0x00000000, 0x00000001, 0x00000078, 0x00000074, 0x000000a4,
2637 0x000000d8, 0x00000000, 0x00000000, 0x000000ec, 0x00000108, 0x00000000, 0x00000001, 0x00000110,
2638 0x0000010c, 0x0000013c, 0x00000158, 0x00000000, 0x00000001, 0x00000160, 0x0000015c, 0x00000244,
2639 0x00000001, 0x00000001, 0x000001b0, 0x000001ac, 0x0000023c, 0x00000001, 0x00000000, 0x000001f8,
2640 0x000001f4, 0x00000000, 0x00000000,
2643 static void test_effect_variable_names(IDirect3DDevice9 *device)
2645 ID3DXEffect *effect;
2646 ULONG count;
2647 HRESULT hr;
2648 D3DXHANDLE parameter, p;
2650 hr = D3DXCreateEffect(device, test_effect_variable_names_blob,
2651 sizeof(test_effect_variable_names_blob), NULL, NULL, 0, NULL, &effect, NULL);
2652 ok(hr == D3D_OK, "D3DXCreateEffect failed, got %#x, expected %#x\n", hr, D3D_OK);
2655 * check invalid calls
2656 * This will crash:
2657 * effect->lpVtbl->GetAnnotationByName(effect, "invalid1", "invalid2");
2659 p = effect->lpVtbl->GetParameterByName(effect, NULL, NULL);
2660 ok(p == NULL, "GetParameterByName failed, got %p, expected %p\n", p, NULL);
2662 p = effect->lpVtbl->GetParameterByName(effect, NULL, "invalid1");
2663 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2665 p = effect->lpVtbl->GetParameterByName(effect, "invalid1", NULL);
2666 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2668 p = effect->lpVtbl->GetParameterByName(effect, "invalid1", "invalid2");
2669 ok(p == NULL, "GetParameterByName failed, got %p, expected %p\n", p, NULL);
2671 /* float a; */
2672 parameter = effect->lpVtbl->GetParameterByName(effect, NULL, "a");
2673 ok(parameter != NULL, "GetParameterByName failed, got %p\n", parameter);
2675 p = effect->lpVtbl->GetParameterByName(effect, "a", NULL);
2676 ok(parameter == p, "GetParameterByName failed, got %p, expected %p\n", p, parameter);
2678 /* members */
2679 p = effect->lpVtbl->GetParameterByName(effect, NULL, "a.");
2680 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2682 p = effect->lpVtbl->GetParameterByName(effect, "a.", NULL);
2683 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2685 p = effect->lpVtbl->GetParameterByName(effect, "a", ".");
2686 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2688 p = effect->lpVtbl->GetParameterByName(effect, NULL, "a.invalid");
2689 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2691 p = effect->lpVtbl->GetParameterByName(effect, "a.invalid", NULL);
2692 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2694 p = effect->lpVtbl->GetParameterByName(effect, "a", ".invalid");
2695 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2697 p = effect->lpVtbl->GetParameterByName(effect, "a.", "invalid");
2698 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2700 p = effect->lpVtbl->GetParameterByName(effect, "a", "invalid");
2701 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2703 /* elements */
2704 p = effect->lpVtbl->GetParameterByName(effect, NULL, "a[]");
2705 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2707 p = effect->lpVtbl->GetParameterByName(effect, "a[]", NULL);
2708 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2710 p = effect->lpVtbl->GetParameterByName(effect, NULL, "a[0]");
2711 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2713 p = effect->lpVtbl->GetParameterByName(effect, "a[0]", NULL);
2714 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2716 p = effect->lpVtbl->GetParameterByName(effect, "a", "[0]");
2717 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2719 p = effect->lpVtbl->GetParameterElement(effect, "a", 0);
2720 ok(p == NULL, "GetParameterElement failed, got %p\n", p);
2722 /* annotations */
2723 p = effect->lpVtbl->GetParameterByName(effect, NULL, "a@");
2724 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2726 p = effect->lpVtbl->GetParameterByName(effect, "a@", NULL);
2727 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2729 p = effect->lpVtbl->GetParameterByName(effect, "a", "@invalid");
2730 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2732 p = effect->lpVtbl->GetParameterByName(effect, "a@", "invalid");
2733 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2735 p = effect->lpVtbl->GetParameterByName(effect, NULL, "a@invalid");
2736 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2738 p = effect->lpVtbl->GetParameterByName(effect, "a@invalid", NULL);
2739 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2741 p = effect->lpVtbl->GetAnnotationByName(effect, "a", NULL);
2742 ok(p == NULL, "GetAnnotationByName failed, got %p\n", p);
2744 p = effect->lpVtbl->GetAnnotationByName(effect, "a", "invalid");
2745 ok(p == NULL, "GetAnnotationByName failed, got %p\n", p);
2747 p = effect->lpVtbl->GetAnnotation(effect, "a", 0);
2748 ok(p == NULL, "GetAnnotation failed, got %p\n", p);
2750 /* float b[1]; */
2751 parameter = effect->lpVtbl->GetParameterByName(effect, NULL, "b");
2752 ok(parameter != NULL, "GetParameterByName failed, got %p\n", parameter);
2754 p = effect->lpVtbl->GetParameterByName(effect, "b", NULL);
2755 ok(parameter == p, "GetParameterByName failed, got %p, expected %p\n", p, parameter);
2757 /* elements */
2758 p = effect->lpVtbl->GetParameterByName(effect, NULL, "b[]");
2759 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2761 parameter = effect->lpVtbl->GetParameterByName(effect, NULL, "b[0]");
2762 ok(parameter != NULL, "GetParameterByName failed, got %p\n", parameter);
2764 p = effect->lpVtbl->GetParameterByName(effect, "b[0]", NULL);
2765 ok(parameter == p, "GetParameterByName failed, got %p, expected %p\n", p, parameter);
2767 p = effect->lpVtbl->GetParameterElement(effect, "b", 0);
2768 ok(parameter == p, "GetParameterElement failed, got %p, expected %p\n", p, parameter);
2770 p = effect->lpVtbl->GetParameterByName(effect, "b", "[0]");
2771 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2773 p = effect->lpVtbl->GetParameterByName(effect, NULL, "b[1]");
2774 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2776 p = effect->lpVtbl->GetParameterElement(effect, "b", 1);
2777 ok(p == NULL, "GetParameterElement failed, got %p\n", p);
2779 /* float c <float d = 3;>; */
2780 parameter = effect->lpVtbl->GetParameterByName(effect, NULL, "c");
2781 ok(parameter != NULL, "GetParameterByName failed, got %p\n", parameter);
2783 p = effect->lpVtbl->GetParameterByName(effect, "c", NULL);
2784 ok(parameter == p, "GetParameterByName failed, got %p, expected %p\n", p, parameter);
2786 /* annotations */
2787 p = effect->lpVtbl->GetParameterByName(effect, "c", "@d");
2788 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2790 p = effect->lpVtbl->GetParameterByName(effect, "c@", "d");
2791 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2793 p = effect->lpVtbl->GetParameterByName(effect, NULL, "c@invalid");
2794 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2796 p = effect->lpVtbl->GetParameterByName(effect, "c@invalid", NULL);
2797 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2799 p = effect->lpVtbl->GetAnnotationByName(effect, "c", NULL);
2800 ok(p == NULL, "GetAnnotationByName failed, got %p\n", p);
2802 p = effect->lpVtbl->GetAnnotationByName(effect, "c", "invalid");
2803 ok(p == NULL, "GetAnnotationByName failed, got %p\n", p);
2805 parameter = effect->lpVtbl->GetParameterByName(effect, NULL, "c@d");
2806 ok(parameter != NULL, "GetParameterByName failed, got %p\n", parameter);
2808 p = effect->lpVtbl->GetParameterByName(effect, "c@d", NULL);
2809 ok(parameter == p, "GetParameterByName failed, got %p, expected %p\n", p, parameter);
2811 p = effect->lpVtbl->GetAnnotationByName(effect, "c", "d");
2812 ok(parameter == p, "GetAnnotationByName failed, got %p, expected %p\n", p, parameter);
2814 p = effect->lpVtbl->GetAnnotation(effect, "c", 0);
2815 ok(parameter == p, "GetAnnotation failed, got %p, expected %p\n", p, parameter);
2817 p = effect->lpVtbl->GetAnnotation(effect, "c", 1);
2818 ok(p == NULL, "GetAnnotation failed, got %p\n", p);
2820 /* struct {float e;} f; */
2821 parameter = effect->lpVtbl->GetParameterByName(effect, NULL, "f");
2822 ok(parameter != NULL, "GetParameterByName failed, got %p\n", parameter);
2824 p = effect->lpVtbl->GetParameterByName(effect, "f", NULL);
2825 ok(parameter == p, "GetParameterByName failed, got %p, expected %p\n", p, parameter);
2827 /* members */
2828 parameter = effect->lpVtbl->GetParameterByName(effect, NULL, "f.e");
2829 ok(parameter != NULL, "GetParameterByName failed, got %p\n", parameter);
2831 p = effect->lpVtbl->GetParameterByName(effect, "f.e", NULL);
2832 ok(parameter == p, "GetParameterByName failed, got %p, expected %p\n", p, parameter);
2834 p = effect->lpVtbl->GetParameterByName(effect, "f", "e");
2835 ok(parameter == p, "GetParameterByName failed, got %p, expected %p\n", p, parameter);
2837 p = effect->lpVtbl->GetParameterByName(effect, "f", ".e");
2838 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2840 p = effect->lpVtbl->GetParameterByName(effect, "f.", "e");
2841 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2843 p = effect->lpVtbl->GetParameterByName(effect, "f.invalid", NULL);
2844 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2846 p = effect->lpVtbl->GetParameterByName(effect, NULL, "f.invalid");
2847 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2849 /* float g <float h[1] = {3};>; */
2850 parameter = effect->lpVtbl->GetParameterByName(effect, NULL, "g@h[0]");
2851 ok(parameter != NULL, "GetParameterByName failed, got %p\n", parameter);
2853 p = effect->lpVtbl->GetAnnotationByName(effect, "g", "h[0]");
2854 ok(parameter == p, "GetAnnotationByName failed, got %p, expected %p\n", p, parameter);
2856 p = effect->lpVtbl->GetParameterElement(effect, "g@h", 0);
2857 ok(parameter == p, "GetParameterElement failed, got %p, expected %p\n", p, parameter);
2859 p = effect->lpVtbl->GetParameterElement(effect, effect->lpVtbl->GetAnnotation(effect, "g", 0), 0);
2860 ok(parameter == p, "GetParameterElement failed, got %p, expected %p\n", p, parameter);
2862 /* struct s {float j;}; float i <s k[1] = {4};>; */
2863 parameter = effect->lpVtbl->GetParameterByName(effect, NULL, "i@k[0].j");
2864 ok(parameter != NULL, "GetParameterByName failed, got %p\n", parameter);
2866 p = effect->lpVtbl->GetAnnotationByName(effect, "i", "k[0].j");
2867 ok(parameter == p, "GetAnnotationByName failed, got %p, expected %p\n", p, parameter);
2869 p = effect->lpVtbl->GetParameterByName(effect, effect->lpVtbl->GetParameterElement(effect, "i@k", 0), "j");
2870 ok(parameter == p, "GetParameterElement failed, got %p, expected %p\n", p, parameter);
2872 /* technique t <s l[1] = {5};> */
2873 parameter = effect->lpVtbl->GetAnnotationByName(effect, "t", "l[0].j");
2874 ok(parameter != NULL, "GetParameterByName failed, got %p\n", parameter);
2876 /* pass p <s m[1] = {6};> */
2877 parameter = effect->lpVtbl->GetAnnotationByName(effect, effect->lpVtbl->GetPassByName(effect, "t", "p"), "m[0].j");
2878 ok(parameter != NULL, "GetParameterByName failed, got %p\n", parameter);
2880 count = effect->lpVtbl->Release(effect);
2881 ok(!count, "Release failed %u\n", count);
2884 static void test_effect_compilation_errors(IDirect3DDevice9 *device)
2886 ID3DXEffect *effect;
2887 ID3DXBuffer *compilation_errors;
2888 HRESULT hr;
2890 /* Test binary effect */
2891 compilation_errors = (ID3DXBuffer*)0xdeadbeef;
2892 hr = D3DXCreateEffect(NULL, NULL, 0, NULL, NULL, 0, NULL, NULL, &compilation_errors);
2893 ok(hr == D3DERR_INVALIDCALL, "D3DXCreateEffect failed, got %#x, expected %#x\n", hr, D3DERR_INVALIDCALL);
2894 ok(!compilation_errors, "Returned %p\n", compilation_errors);
2896 compilation_errors = (ID3DXBuffer*)0xdeadbeef;
2897 hr = D3DXCreateEffect(device, test_effect_variable_names_blob,
2898 sizeof(test_effect_variable_names_blob), NULL, NULL, 0, NULL, &effect, &compilation_errors);
2899 ok(hr == D3D_OK, "D3DXCreateEffect failed, got %#x, expected %#x\n", hr, D3D_OK);
2900 ok(!compilation_errors, "Returned %p\n", compilation_errors);
2901 effect->lpVtbl->Release(effect);
2905 * fxc.exe /Tfx_2_0
2907 #if 0
2908 vertexshader vs_arr1[2] =
2912 vs_1_1
2913 def c0, 1, 1, 1, 1
2914 mov oPos, c0
2918 vs_2_0
2919 def c0, 2, 2, 2, 2
2920 mov oPos, c0
2924 sampler sampler1 =
2925 sampler_state
2927 MipFilter = LINEAR;
2930 float4x4 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};
2931 technique tech0
2933 pass p0
2935 vertexshader = vs_arr1[1];
2936 VertexShaderConstant1[3] = {2,2,2,2};
2937 BlendOp = 2;
2938 AlphaOp[3] = 4;
2939 ZEnable = true;
2940 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};
2941 ViewTransform=(camera);
2942 LightEnable[2] = TRUE;
2943 LightType[2] = POINT;
2944 LightPosition[2] = {4.0f, 5.0f, 6.0f};
2945 Sampler[1] = sampler1;
2948 #endif
2949 static const DWORD test_effect_states_effect_blob[] =
2951 0xfeff0901, 0x000002e8, 0x00000000, 0x00000010, 0x00000004, 0x00000020, 0x00000000, 0x00000002,
2952 0x00000001, 0x00000002, 0x00000008, 0x615f7376, 0x00317272, 0x0000000a, 0x00000004, 0x00000074,
2953 0x00000000, 0x00000000, 0x00000002, 0x00000002, 0x00000002, 0x00000000, 0x00000000, 0x00000000,
2954 0x00000001, 0x00000001, 0x00000001, 0x000000ab, 0x00000100, 0x00000044, 0x00000040, 0x00000009,
2955 0x706d6173, 0x3172656c, 0x00000000, 0x00000003, 0x00000002, 0x000000e0, 0x000000ec, 0x00000000,
2956 0x00000004, 0x00000004, 0x40800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2957 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2958 0x00000000, 0x40c00000, 0x00000007, 0x656d6163, 0x00006172, 0x00000005, 0x57454956, 0x00000000,
2959 0x00000003, 0x00000010, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x40000000, 0x40000000,
2960 0x40000000, 0x40000000, 0x00000003, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000004,
2961 0x00000001, 0x00000002, 0x00000002, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000001,
2962 0x00000001, 0x00000004, 0x00000002, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000001,
2963 0x00000001, 0x00000001, 0x00000002, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000001,
2964 0x00000001, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2965 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2966 0x40800000, 0x00000003, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0x00000001,
2967 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2968 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2969 0x00000003, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000004, 0x00000004, 0x00000001,
2970 0x00000002, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001,
2971 0x00000002, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x40800000,
2972 0x40a00000, 0x40c00000, 0x00000003, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000003,
2973 0x00000001, 0x00000000, 0x0000000a, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000003,
2974 0x00003070, 0x00000006, 0x68636574, 0x00000030, 0x00000003, 0x00000001, 0x00000005, 0x00000004,
2975 0x00000004, 0x00000018, 0x00000000, 0x00000000, 0x0000002c, 0x00000060, 0x00000000, 0x00000000,
2976 0x00000084, 0x000000a0, 0x00000000, 0x00000000, 0x000002dc, 0x00000000, 0x00000001, 0x000002d4,
2977 0x00000000, 0x0000000b, 0x00000092, 0x00000000, 0x000000fc, 0x000000f8, 0x00000098, 0x00000003,
2978 0x00000120, 0x00000110, 0x0000004b, 0x00000000, 0x00000140, 0x0000013c, 0x0000006b, 0x00000003,
2979 0x00000160, 0x0000015c, 0x00000000, 0x00000000, 0x00000180, 0x0000017c, 0x0000007d, 0x00000001,
2980 0x000001dc, 0x0000019c, 0x0000007c, 0x00000000, 0x00000238, 0x000001f8, 0x00000091, 0x00000002,
2981 0x00000258, 0x00000254, 0x00000084, 0x00000002, 0x00000278, 0x00000274, 0x00000088, 0x00000002,
2982 0x000002a0, 0x00000294, 0x000000b2, 0x00000001, 0x000002c0, 0x000002bc, 0x00000002, 0x00000003,
2983 0x00000001, 0x0000002c, 0xfffe0101, 0x00000051, 0xa00f0000, 0x3f800000, 0x3f800000, 0x3f800000,
2984 0x3f800000, 0x00000001, 0xc00f0000, 0xa0e40000, 0x0000ffff, 0x00000002, 0x0000002c, 0xfffe0200,
2985 0x05000051, 0xa00f0000, 0x40000000, 0x40000000, 0x40000000, 0x40000000, 0x02000001, 0xc00f0000,
2986 0xa0e40000, 0x0000ffff, 0x00000000, 0x00000000, 0xffffffff, 0x0000000a, 0x00000001, 0x00000009,
2987 0x706d6173, 0x3172656c, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000006, 0x00000000,
2988 0x0000016c, 0x46580200, 0x0030fffe, 0x42415443, 0x0000001c, 0x0000008b, 0x46580200, 0x00000001,
2989 0x0000001c, 0x20000100, 0x00000088, 0x00000030, 0x00000002, 0x00000004, 0x00000038, 0x00000048,
2990 0x656d6163, 0xab006172, 0x00030003, 0x00040004, 0x00000001, 0x00000000, 0x40800000, 0x00000000,
2991 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2992 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40c00000, 0x4d007874, 0x6f726369,
2993 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072,
2994 0x392e3932, 0x332e3235, 0x00313131, 0x0002fffe, 0x54494c43, 0x00000000, 0x0024fffe, 0x434c5846,
2995 0x00000004, 0x10000004, 0x00000001, 0x00000000, 0x00000002, 0x00000000, 0x00000000, 0x00000004,
2996 0x00000000, 0x10000004, 0x00000001, 0x00000000, 0x00000002, 0x00000004, 0x00000000, 0x00000004,
2997 0x00000004, 0x10000004, 0x00000001, 0x00000000, 0x00000002, 0x00000008, 0x00000000, 0x00000004,
2998 0x00000008, 0x10000004, 0x00000001, 0x00000000, 0x00000002, 0x0000000c, 0x00000000, 0x00000004,
2999 0x0000000c, 0xf0f0f0f0, 0x0f0f0f0f, 0x0000ffff, 0x00000000, 0x00000000, 0xffffffff, 0x00000000,
3000 0x00000001, 0x0000000b, 0x615f7376, 0x5b317272, 0x00005d31,
3002 #define TEST_EFFECT_STATES_VSHADER_POS 271
3004 static void test_effect_states(IDirect3DDevice9 *device)
3006 D3DMATRIX test_mat =
3008 -1.0f, 0.0f, 0.0f, 0.0f,
3009 0.0f, 0.0f, 0.0f, 0.0f,
3010 0.0f, 0.0f, 0.0f, 0.0f,
3011 0.0f, 0.0f, 0.0f, 0.0f
3012 }}};
3013 D3DMATRIX test_mat_camera =
3015 4.0f, 0.0f, 0.0f, 0.0f,
3016 0.0f, 0.0f, 0.0f, 0.0f,
3017 0.0f, 0.0f, 0.0f, 0.0f,
3018 0.0f, 0.0f, 0.0f, 6.0f
3019 }}};
3020 D3DMATRIX test_mat_world1 =
3022 2.0f, 0.0f, 0.0f, 0.0f,
3023 0.0f, 0.0f, 0.0f, 0.0f,
3024 0.0f, 0.0f, 0.0f, 0.0f,
3025 0.0f, 0.0f, 0.0f, 4.0f
3026 }}};
3027 D3DMATRIX mat;
3028 HRESULT hr;
3029 ID3DXEffect *effect;
3030 UINT npasses;
3031 DWORD value;
3032 IDirect3DVertexShader9 *vshader;
3033 void *byte_code;
3034 UINT byte_code_size;
3035 BOOL bval;
3036 D3DLIGHT9 light;
3037 float float_data[4];
3039 hr = D3DXCreateEffect(device, test_effect_states_effect_blob, sizeof(test_effect_states_effect_blob),
3040 NULL, NULL, 0, NULL, &effect, NULL);
3041 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3043 /* State affected in passes saved/restored even if no pass
3044 was performed. States not present in passes are not saved &
3045 restored */
3046 hr = IDirect3DDevice9_SetRenderState(device, D3DRS_BLENDOP, 1);
3047 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3048 hr = IDirect3DDevice9_SetRenderState(device, D3DRS_ALPHAFUNC, 1);
3049 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3051 hr = effect->lpVtbl->Begin(effect, &npasses, 0);
3052 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3053 ok(npasses == 1, "Expected 1 pass, got %u\n", npasses);
3055 hr = IDirect3DDevice9_SetRenderState(device, D3DRS_BLENDOP, 3);
3056 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3057 hr = IDirect3DDevice9_SetRenderState(device, D3DRS_ALPHAFUNC, 2);
3058 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3060 hr = effect->lpVtbl->End(effect);
3061 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3063 hr = IDirect3DDevice9_GetRenderState(device, D3DRS_BLENDOP, &value);
3064 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3065 ok(value == 1, "Got result %u, expected %u.\n", value, 1);
3066 hr = IDirect3DDevice9_GetRenderState(device, D3DRS_ALPHAFUNC, &value);
3067 ok(value == 2, "Got result %u, expected %u.\n", value, 2);
3069 /* Test states application in BeginPass. No states are restored
3070 on EndPass. */
3071 hr = IDirect3DDevice9_SetSamplerState(device, 1, D3DSAMP_MIPFILTER, 0);
3072 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3073 hr = IDirect3DDevice9_SetRenderState(device, D3DRS_ZENABLE, 0);
3074 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3076 hr = IDirect3DDevice9_GetLightEnable(device, 2, &bval);
3077 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3078 if (hr == D3D_OK)
3079 ok(!bval, "Got result %u, expected 0.\n", bval);
3081 hr = IDirect3DDevice9_SetTransform(device, D3DTS_WORLDMATRIX(1), &test_mat);
3082 hr = effect->lpVtbl->Begin(effect, NULL, 0);
3083 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3085 hr = IDirect3DDevice9_GetTransform(device, D3DTS_WORLDMATRIX(1), &mat);
3086 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3087 ok(!memcmp(mat.m, test_mat.m, sizeof(mat)), "World matrix does not match.\n");
3089 hr = effect->lpVtbl->BeginPass(effect, 0);
3090 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3092 hr = IDirect3DDevice9_GetTransform(device, D3DTS_WORLDMATRIX(1), &mat);
3093 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3094 ok(!memcmp(mat.m, test_mat_world1.m, sizeof(mat)), "World matrix does not match.\n");
3096 hr = IDirect3DDevice9_GetTransform(device, D3DTS_VIEW, &mat);
3097 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3098 ok(!memcmp(mat.m, test_mat_camera.m, sizeof(mat)), "View matrix does not match.\n");
3100 hr = IDirect3DDevice9_GetRenderState(device, D3DRS_BLENDOP, &value);
3101 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3102 ok(value == 2, "Got result %u, expected %u\n", value, 2);
3104 hr = IDirect3DDevice9_GetVertexShader(device, &vshader);
3105 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3106 ok(vshader != NULL, "Got NULL vshader.\n");
3107 if (vshader)
3109 hr = IDirect3DVertexShader9_GetFunction(vshader, NULL, &byte_code_size);
3110 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3111 byte_code = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, byte_code_size);
3112 hr = IDirect3DVertexShader9_GetFunction(vshader, byte_code, &byte_code_size);
3113 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3114 ok(byte_code_size > 1, "Got unexpected byte code size %u.\n", byte_code_size);
3115 ok(!memcmp(byte_code, &test_effect_states_effect_blob[TEST_EFFECT_STATES_VSHADER_POS], byte_code_size),
3116 "Incorrect shader selected.\n");
3117 HeapFree(GetProcessHeap(), 0, byte_code);
3118 IDirect3DVertexShader9_Release(vshader);
3121 hr = IDirect3DDevice9_GetLightEnable(device, 2, &bval);
3122 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3123 if (hr == D3D_OK)
3124 ok(bval, "Got result %u, expected TRUE.\n", bval);
3125 hr = IDirect3DDevice9_GetLight(device, 2, &light);
3126 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3127 if (hr == D3D_OK)
3128 ok(light.Position.x == 4.0f && light.Position.y == 5.0f && light.Position.z == 6.0f,
3129 "Got unexpected light position (%f, %f, %f).\n", light.Position.x, light.Position.y, light.Position.z);
3130 hr = IDirect3DDevice9_GetVertexShaderConstantF(device, 3, float_data, 1);
3131 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3132 ok(float_data[0] == 2.0f && float_data[1] == 2.0f && float_data[2] == 2.0f && float_data[3] == 2.0f,
3133 "Got unexpected vertex shader floats: (%f %f %f %f).\n",
3134 float_data[0], float_data[1], float_data[2], float_data[3]);
3136 hr = effect->lpVtbl->EndPass(effect);
3137 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3138 hr = IDirect3DDevice9_GetRenderState(device, D3DRS_BLENDOP, &value);
3139 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3140 ok(value == 2, "Got result %u, expected %u\n", value, 2);
3142 hr = IDirect3DDevice9_GetRenderState(device, D3DRS_ZENABLE, &value);
3143 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3144 ok(value, "Got result %u, expected TRUE.\n", value);
3146 hr = IDirect3DDevice9_GetSamplerState(device, 1, D3DSAMP_MIPFILTER, &value);
3147 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3148 ok(value == D3DTEXF_LINEAR, "Unexpected sampler 1 mipfilter %u.\n", value);
3150 hr = IDirect3DDevice9_GetTextureStageState(device, 3, D3DTSS_ALPHAOP, &value);
3151 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3152 ok(value == 4, "Unexpected texture stage 3 AlphaOp %u.\n", value);
3154 hr = effect->lpVtbl->End(effect);
3155 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3157 hr = IDirect3DDevice9_GetTransform(device, D3DTS_WORLDMATRIX(1), &mat);
3158 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3159 ok(!memcmp(mat.m, test_mat.m, sizeof(mat)), "World matrix not restored.\n");
3161 hr = IDirect3DDevice9_GetLightEnable(device, 2, &bval);
3162 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3163 if (hr == D3D_OK)
3164 ok(!bval, "Got result %u, expected 0.\n", bval);
3166 /* State is not restored if effect is released without End call */
3167 hr = IDirect3DDevice9_SetRenderState(device, D3DRS_BLENDOP, 1);
3168 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3170 hr = effect->lpVtbl->Begin(effect, &npasses, 0);
3171 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3173 hr = IDirect3DDevice9_SetRenderState(device, D3DRS_BLENDOP, 3);
3174 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3176 effect->lpVtbl->Release(effect);
3178 hr = IDirect3DDevice9_GetRenderState(device, D3DRS_BLENDOP, &value);
3179 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
3180 ok(value == 3, "Got result %u, expected %u.\n", value, 1);
3184 * fxc.exe /Tfx_2_0
3186 #if 0
3187 float4 g_Pos1;
3188 float4 g_Pos2;
3189 float4 g_Selector[3] = {{0, 0, 0, 0}, {10, 10, 10, 10}, {5001, 5002, 5003, 5004}};
3191 float4 opvect1 = {0.0, -0.0, -2.2, 3.402823466e+38F};
3192 float4 opvect2 = {1.0, 2.0, -3.0, 4.0};
3193 float4 opvect3 = {0.0, -0.0, -2.2, 3.402823466e+38F};
3195 float4 vect_sampler = {1, 2, 3, 4};
3197 float3 vec3 = {1001, 1002, 1003};
3199 int4 g_iVect = {4, 3, 2, 1};
3201 vertexshader vs_arr[3] =
3205 vs_1_0
3206 def c0, 1, 1, 1, 1
3207 mov oPos, c0
3211 vs_1_1
3212 def c0, 2, 2, 2, 2
3213 mov oPos, c0
3217 vs_2_0
3218 def c0, 3, 3, 3, 3
3219 mov oPos, c0
3223 float4x4 m4x4 = {{11, 12, 13, 14}, {21, 22, 23, 24}, {31, 32, 33, 34}, {41, 42, 43, 44}};
3225 row_major float4x3 m4x3row = {{11, 12, 13}, {21, 22, 23}, {31, 32, 33}, {41, 42, 43}};
3226 row_major float3x4 m3x4row = {{11, 12, 13, 14}, {21, 22, 23, 24}, {31, 32, 33, 34}};
3227 column_major float4x3 m4x3column = {{11, 12, 13},{21, 22, 23},{31, 32, 33},{41, 42, 43}};
3228 column_major float3x4 m3x4column = {{11, 12, 13, 14}, {21, 22, 23, 24}, {31, 32, 33, 34}};
3229 row_major float2x2 m2x2row = {{11, 12}, {21, 22}};
3230 column_major float2x2 m2x2column = {{11, 12}, {21, 22}};
3231 row_major float2x3 m2x3row = {{11, 12, 13}, {21, 22, 23}};
3232 column_major float2x3 m2x3column = {{11, 12, 13}, {21, 22, 23}};
3233 row_major float3x2 m3x2row = {{11, 12}, {21, 22}, {31, 32}};
3234 column_major float3x2 m3x2column = {{11, 12}, {21, 22}, {31, 32}};
3236 row_major bool2x3 mb2x3row = {{true, false, true}, {false, true, true}};
3237 column_major bool2x3 mb2x3column = {{true, false, true}, {false, true, true}};
3239 struct test_struct
3241 float3 v1;
3242 float fv;
3243 float4 v2;
3246 struct struct_array
3248 test_struct ts[2];
3251 test_struct ts1[1] = {{{9, 10, 11}, 12, {13, 14, 15, 16}}};
3252 shared test_struct ts2[2] = {{{0, 0, 0}, 0, {0, 0, 0, 0}}, {{1, 2, 3}, 4, {5, 6, 7, 8}}};
3253 struct_array ts3 = {{{1, 2, 3}, 4, {5, 6, 7, 8}}, {{9, 10, 11}, 12, {13, 14, 15, 16}}};
3255 float arr1[1] = {91};
3256 shared float arr2[2] = {92, 93};
3258 Texture2D tex1;
3259 Texture2D tex2;
3260 sampler sampler1 =
3261 sampler_state
3263 Texture = tex1;
3264 MinFilter = g_iVect.y;
3265 MagFilter = vect_sampler.x + vect_sampler.y;
3268 sampler samplers_array[2] =
3270 sampler_state
3272 MinFilter = 1;
3273 MagFilter = vect_sampler.x;
3275 sampler_state
3277 MinFilter = 2;
3278 MagFilter = vect_sampler.y;
3282 struct VS_OUTPUT
3284 float4 Position : POSITION;
3285 float2 TextureUV : TEXCOORD0;
3286 float4 Diffuse : COLOR0;
3288 VS_OUTPUT RenderSceneVS(float4 vPos : POSITION,
3289 float3 vNormal : NORMAL,
3290 float2 vTexCoord0 : TEXCOORD0,
3291 uniform int nNumLights,
3292 uniform bool bTexture)
3294 VS_OUTPUT Output;
3296 if (g_Selector[1].y > float4(0.5, 0.5, 0.5, 0.5).y)
3297 Output.Position = -g_Pos1 * 2 - float4(-4, -5, -6, -7);
3298 else
3299 Output.Position = -g_Pos2 * 3 - float4(-4, -5, -6, -7);
3300 Output.TextureUV = float2(0, 0);
3301 Output.Diffuse = 0;
3302 Output.Diffuse.xyz = mul(vPos, m4x3column);
3303 Output.Diffuse += mul(vPos, m3x4column);
3304 Output.Diffuse += mul(vPos, m3x4row);
3305 Output.Diffuse.xyz += mul(vPos, m4x3row);
3306 Output.Diffuse += mul(vPos, ts1[0].fv);
3307 Output.Diffuse += mul(vPos, ts1[0].v2);
3308 Output.Diffuse += mul(vPos, ts2[1].fv);
3309 Output.Diffuse += mul(vPos, ts2[1].v2);
3310 Output.Diffuse += mul(vPos, arr1[0]);
3311 Output.Diffuse += mul(vPos, arr2[1]);
3312 Output.Diffuse += mul(vPos, ts3.ts[1].fv);
3313 Output.Diffuse += mul(vPos, ts3.ts[1].v2);
3314 Output.Diffuse += tex2Dlod(sampler1, g_Pos1);
3315 Output.Diffuse += tex2Dlod(samplers_array[1], g_Pos1);
3316 return Output;
3319 VS_OUTPUT RenderSceneVS2(float4 vPos : POSITION)
3321 VS_OUTPUT Output;
3323 Output.Position = g_Pos1;
3324 Output.TextureUV = float2(0, 0);
3325 Output.Diffuse = 0;
3326 return Output;
3329 struct PS_OUTPUT
3331 float4 RGBColor : COLOR0; /* Pixel color */
3333 PS_OUTPUT RenderScenePS( VS_OUTPUT In, uniform bool2x3 mb)
3335 PS_OUTPUT Output;
3336 int i;
3338 Output.RGBColor = In.Diffuse;
3339 Output.RGBColor.xy += mul(In.Diffuse, m2x2row);
3340 Output.RGBColor.xy += mul(In.Diffuse, m2x2column);
3341 Output.RGBColor.xy += mul(In.Diffuse, m3x2row);
3342 Output.RGBColor.xy += mul(In.Diffuse, m3x2column);
3343 Output.RGBColor.xyz += mul(In.Diffuse, m2x3row);
3344 Output.RGBColor.xyz += mul(In.Diffuse, m2x3column);
3345 for (i = 0; i < g_iVect.x; ++i)
3346 Output.RGBColor.xyz += mul(In.Diffuse, m2x3column);
3347 if (mb[1][1])
3349 Output.RGBColor += sin(Output.RGBColor);
3350 Output.RGBColor += cos(Output.RGBColor);
3351 Output.RGBColor.xyz += mul(Output.RGBColor, m2x3column);
3352 Output.RGBColor.xyz += mul(Output.RGBColor, m2x3row);
3353 Output.RGBColor.xy += mul(Output.RGBColor, m3x2column);
3354 Output.RGBColor.xy += mul(Output.RGBColor, m3x2row);
3356 if (mb2x3column[0][0])
3358 Output.RGBColor += sin(Output.RGBColor);
3359 Output.RGBColor += cos(Output.RGBColor);
3360 Output.RGBColor.xyz += mul(Output.RGBColor, m2x3column);
3361 Output.RGBColor.xyz += mul(Output.RGBColor, m2x3row);
3362 Output.RGBColor.xy += mul(Output.RGBColor, m3x2column);
3363 Output.RGBColor.xy += mul(Output.RGBColor, m3x2row);
3365 Output.RGBColor += tex2D(sampler1, In.TextureUV);
3366 Output.RGBColor += tex2D(samplers_array[0], In.TextureUV);
3367 return Output;
3370 shared vertexshader vs_arr2[2] = {compile vs_3_0 RenderSceneVS(1, true), compile vs_3_0 RenderSceneVS2()};
3371 pixelshader ps_arr[1] = {compile ps_3_0 RenderScenePS(mb2x3row)};
3373 technique tech0
3375 pass p0
3377 VertexShader = vs_arr2[g_iVect.w - 1];
3378 PixelShader = ps_arr[g_iVect.w - 1];
3380 LightEnable[0] = TRUE;
3381 LightEnable[1] = TRUE;
3382 LightEnable[2] = TRUE;
3383 LightEnable[3] = TRUE;
3384 LightEnable[4] = TRUE;
3385 LightEnable[5] = TRUE;
3386 LightEnable[6] = TRUE;
3387 LightEnable[7] = TRUE;
3388 LightType[0] = POINT;
3389 LightType[1] = POINT;
3390 LightType[2] = POINT;
3391 LightType[3] = POINT;
3392 LightType[4] = POINT;
3393 LightType[5] = POINT;
3394 LightType[6] = POINT;
3395 LightType[7] = POINT;
3396 LightDiffuse[0] = 1 / opvect1;
3397 LightDiffuse[1] = rsqrt(opvect1);
3398 LightDiffuse[2] = opvect1 * opvect2;
3399 LightDiffuse[3] = opvect1 + opvect2;
3400 LightDiffuse[4] = float4(opvect1 < opvect2);
3401 LightDiffuse[5] = float4(opvect1 >= opvect2);
3402 LightDiffuse[6] = -opvect1;
3403 LightDiffuse[7] = rcp(opvect1);
3405 LightAmbient[0] = frac(opvect1);
3406 LightAmbient[1] = min(opvect1, opvect2);
3407 LightAmbient[2] = max(opvect1, opvect2);
3408 LightAmbient[3] = sin(opvect1);
3409 LightAmbient[4] = cos(opvect1);
3410 LightAmbient[5] = 1e-2 / opvect1;
3411 LightAmbient[6] = float4(0, dot(opvect1, opvect2), dot(opvect2, opvect2), 0);
3412 LightAmbient[7] = opvect1 + 1e-12 * opvect2 - opvect3;
3414 LightSpecular[0] = float4(dot(opvect1.zx, opvect2.xy), dot(opvect1.zzx, opvect2.xyz),
3415 dot(opvect1.zzzx, opvect2.xxyy), 0);
3416 LightSpecular[1] = float4(opvect1[g_iVect.z], g_iVect[opvect2.y + 1],
3417 g_Selector[4 + g_iVect.w].x + g_Selector[7 + g_iVect.w].y,
3418 g_Selector[g_iVect.w].x + g_Selector[g_iVect.x].y);
3419 LightSpecular[2] = float4(dot(m4x4[3 + g_iVect.z], m4x4[g_iVect.w * 2]), ts3.ts[g_iVect.x].fv,
3420 vec3[g_iVect.z], float3(1, 2, 3)[g_iVect.w]);
3422 FogEnable = TRUE;
3423 FogDensity = ts2[0].fv;
3424 FogStart = ts2[1].fv;
3425 PointScale_A = ts3.ts[0].fv;
3426 PointScale_B = ts3.ts[1].fv;
3428 pass p1
3430 VertexShader = vs_arr[g_iVect.z];
3433 #endif
3434 static const DWORD test_effect_preshader_effect_blob[] =
3436 0xfeff0901, 0x00001160, 0x00000000, 0x00000003, 0x00000001, 0x00000030, 0x00000000, 0x00000000,
3437 0x00000004, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000007, 0x6f505f67,
3438 0x00003173, 0x00000003, 0x00000001, 0x00000068, 0x00000000, 0x00000000, 0x00000004, 0x00000001,
3439 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000007, 0x6f505f67, 0x00003273, 0x00000003,
3440 0x00000001, 0x000000c0, 0x00000000, 0x00000003, 0x00000004, 0x00000001, 0x00000000, 0x00000000,
3441 0x00000000, 0x00000000, 0x41200000, 0x41200000, 0x41200000, 0x41200000, 0x459c4800, 0x459c5000,
3442 0x459c5800, 0x459c6000, 0x0000000b, 0x65535f67, 0x7463656c, 0x0000726f, 0x00000003, 0x00000001,
3443 0x000000fc, 0x00000000, 0x00000000, 0x00000004, 0x00000001, 0x00000000, 0x80000000, 0xc00ccccd,
3444 0x7f7fffff, 0x00000008, 0x6576706f, 0x00317463, 0x00000003, 0x00000001, 0x00000134, 0x00000000,
3445 0x00000000, 0x00000004, 0x00000001, 0x3f800000, 0x40000000, 0xc0400000, 0x40800000, 0x00000008,
3446 0x6576706f, 0x00327463, 0x00000003, 0x00000001, 0x0000016c, 0x00000000, 0x00000000, 0x00000004,
3447 0x00000001, 0x00000000, 0x80000000, 0xc00ccccd, 0x7f7fffff, 0x00000008, 0x6576706f, 0x00337463,
3448 0x00000003, 0x00000001, 0x000001a4, 0x00000000, 0x00000000, 0x00000004, 0x00000001, 0x3f800000,
3449 0x40000000, 0x40400000, 0x40800000, 0x0000000d, 0x74636576, 0x6d61735f, 0x72656c70, 0x00000000,
3450 0x00000003, 0x00000001, 0x000001e0, 0x00000000, 0x00000000, 0x00000003, 0x00000001, 0x447a4000,
3451 0x447a8000, 0x447ac000, 0x00000005, 0x33636576, 0x00000000, 0x00000002, 0x00000001, 0x00000218,
3452 0x00000000, 0x00000000, 0x00000004, 0x00000001, 0x00000004, 0x00000003, 0x00000002, 0x00000001,
3453 0x00000008, 0x56695f67, 0x00746365, 0x00000010, 0x00000004, 0x00000244, 0x00000000, 0x00000003,
3454 0x00000001, 0x00000002, 0x00000003, 0x00000007, 0x615f7376, 0x00007272, 0x00000003, 0x00000002,
3455 0x000002ac, 0x00000000, 0x00000000, 0x00000004, 0x00000004, 0x41300000, 0x41400000, 0x41500000,
3456 0x41600000, 0x41a80000, 0x41b00000, 0x41b80000, 0x41c00000, 0x41f80000, 0x42000000, 0x42040000,
3457 0x42080000, 0x42240000, 0x42280000, 0x422c0000, 0x42300000, 0x00000005, 0x3478346d, 0x00000000,
3458 0x00000003, 0x00000002, 0x00000304, 0x00000000, 0x00000000, 0x00000004, 0x00000003, 0x41300000,
3459 0x41400000, 0x41500000, 0x41a80000, 0x41b00000, 0x41b80000, 0x41f80000, 0x42000000, 0x42040000,
3460 0x42240000, 0x42280000, 0x422c0000, 0x00000008, 0x3378346d, 0x00776f72, 0x00000003, 0x00000002,
3461 0x0000035c, 0x00000000, 0x00000000, 0x00000003, 0x00000004, 0x41300000, 0x41400000, 0x41500000,
3462 0x41600000, 0x41a80000, 0x41b00000, 0x41b80000, 0x41c00000, 0x41f80000, 0x42000000, 0x42040000,
3463 0x42080000, 0x00000008, 0x3478336d, 0x00776f72, 0x00000003, 0x00000002, 0x000003b4, 0x00000000,
3464 0x00000000, 0x00000004, 0x00000003, 0x41300000, 0x41400000, 0x41500000, 0x41a80000, 0x41b00000,
3465 0x41b80000, 0x41f80000, 0x42000000, 0x42040000, 0x42240000, 0x42280000, 0x422c0000, 0x0000000b,
3466 0x3378346d, 0x756c6f63, 0x00006e6d, 0x00000003, 0x00000002, 0x00000410, 0x00000000, 0x00000000,
3467 0x00000003, 0x00000004, 0x41300000, 0x41400000, 0x41500000, 0x41600000, 0x41a80000, 0x41b00000,
3468 0x41b80000, 0x41c00000, 0x41f80000, 0x42000000, 0x42040000, 0x42080000, 0x0000000b, 0x3478336d,
3469 0x756c6f63, 0x00006e6d, 0x00000003, 0x00000002, 0x0000044c, 0x00000000, 0x00000000, 0x00000002,
3470 0x00000002, 0x41300000, 0x41400000, 0x41a80000, 0x41b00000, 0x00000008, 0x3278326d, 0x00776f72,
3471 0x00000003, 0x00000002, 0x00000484, 0x00000000, 0x00000000, 0x00000002, 0x00000002, 0x41300000,
3472 0x41400000, 0x41a80000, 0x41b00000, 0x0000000b, 0x3278326d, 0x756c6f63, 0x00006e6d, 0x00000003,
3473 0x00000002, 0x000004c8, 0x00000000, 0x00000000, 0x00000002, 0x00000003, 0x41300000, 0x41400000,
3474 0x41500000, 0x41a80000, 0x41b00000, 0x41b80000, 0x00000008, 0x3378326d, 0x00776f72, 0x00000003,
3475 0x00000002, 0x00000508, 0x00000000, 0x00000000, 0x00000002, 0x00000003, 0x41300000, 0x41400000,
3476 0x41500000, 0x41a80000, 0x41b00000, 0x41b80000, 0x0000000b, 0x3378326d, 0x756c6f63, 0x00006e6d,
3477 0x00000003, 0x00000002, 0x0000054c, 0x00000000, 0x00000000, 0x00000003, 0x00000002, 0x41300000,
3478 0x41400000, 0x41a80000, 0x41b00000, 0x41f80000, 0x42000000, 0x00000008, 0x3278336d, 0x00776f72,
3479 0x00000003, 0x00000002, 0x0000058c, 0x00000000, 0x00000000, 0x00000003, 0x00000002, 0x41300000,
3480 0x41400000, 0x41a80000, 0x41b00000, 0x41f80000, 0x42000000, 0x0000000b, 0x3278336d, 0x756c6f63,
3481 0x00006e6d, 0x00000001, 0x00000002, 0x000005d0, 0x00000000, 0x00000000, 0x00000002, 0x00000003,
3482 0x00000001, 0x00000000, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x00000009, 0x7832626d,
3483 0x776f7233, 0x00000000, 0x00000001, 0x00000002, 0x00000614, 0x00000000, 0x00000000, 0x00000002,
3484 0x00000003, 0x00000001, 0x00000000, 0x00000001, 0x00000000, 0x00000001, 0x00000001, 0x0000000c,
3485 0x7832626d, 0x6c6f6333, 0x006e6d75, 0x00000000, 0x00000005, 0x000006b0, 0x00000000, 0x00000001,
3486 0x00000003, 0x00000003, 0x00000001, 0x000006b8, 0x00000000, 0x00000000, 0x00000003, 0x00000001,
3487 0x00000003, 0x00000000, 0x000006c0, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000003,
3488 0x00000001, 0x000006c8, 0x00000000, 0x00000000, 0x00000004, 0x00000001, 0x41100000, 0x41200000,
3489 0x41300000, 0x41400000, 0x41500000, 0x41600000, 0x41700000, 0x41800000, 0x00000004, 0x00317374,
3490 0x00000003, 0x00003176, 0x00000003, 0x00007666, 0x00000003, 0x00003276, 0x00000000, 0x00000005,
3491 0x0000077c, 0x00000000, 0x00000002, 0x00000003, 0x00000003, 0x00000001, 0x00000784, 0x00000000,
3492 0x00000000, 0x00000003, 0x00000001, 0x00000003, 0x00000000, 0x0000078c, 0x00000000, 0x00000000,
3493 0x00000001, 0x00000001, 0x00000003, 0x00000001, 0x00000794, 0x00000000, 0x00000000, 0x00000004,
3494 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3495 0x00000000, 0x3f800000, 0x40000000, 0x40400000, 0x40800000, 0x40a00000, 0x40c00000, 0x40e00000,
3496 0x41000000, 0x00000004, 0x00327374, 0x00000003, 0x00003176, 0x00000003, 0x00007666, 0x00000003,
3497 0x00003276, 0x00000000, 0x00000005, 0x00000860, 0x00000000, 0x00000000, 0x00000001, 0x00000000,
3498 0x00000005, 0x00000868, 0x00000000, 0x00000002, 0x00000003, 0x00000003, 0x00000001, 0x00000870,
3499 0x00000000, 0x00000000, 0x00000003, 0x00000001, 0x00000003, 0x00000000, 0x00000878, 0x00000000,
3500 0x00000000, 0x00000001, 0x00000001, 0x00000003, 0x00000001, 0x00000880, 0x00000000, 0x00000000,
3501 0x00000004, 0x00000001, 0x3f800000, 0x40000000, 0x40400000, 0x40800000, 0x40a00000, 0x40c00000,
3502 0x40e00000, 0x41000000, 0x41100000, 0x41200000, 0x41300000, 0x41400000, 0x41500000, 0x41600000,
3503 0x41700000, 0x41800000, 0x00000004, 0x00337374, 0x00000003, 0x00007374, 0x00000003, 0x00003176,
3504 0x00000003, 0x00007666, 0x00000003, 0x00003276, 0x00000003, 0x00000000, 0x000008a8, 0x00000000,
3505 0x00000001, 0x00000001, 0x00000001, 0x42b60000, 0x00000005, 0x31727261, 0x00000000, 0x00000003,
3506 0x00000000, 0x000008d8, 0x00000000, 0x00000002, 0x00000001, 0x00000001, 0x42b80000, 0x42ba0000,
3507 0x00000005, 0x32727261, 0x00000000, 0x00000007, 0x00000004, 0x000008fc, 0x00000000, 0x00000000,
3508 0x00000004, 0x00000005, 0x31786574, 0x00000000, 0x00000007, 0x00000004, 0x00000920, 0x00000000,
3509 0x00000000, 0x00000005, 0x00000005, 0x32786574, 0x00000000, 0x0000000a, 0x00000004, 0x000009cc,
3510 0x00000000, 0x00000000, 0x00000006, 0x00000007, 0x00000004, 0x00000000, 0x00000000, 0x00000000,
3511 0x00000000, 0x00000002, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001,
3512 0x00000000, 0x00000003, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001,
3513 0x00000003, 0x000000a4, 0x00000100, 0x00000944, 0x00000940, 0x000000aa, 0x00000100, 0x0000095c,
3514 0x00000958, 0x000000a9, 0x00000100, 0x0000097c, 0x00000978, 0x00000009, 0x706d6173, 0x3172656c,
3515 0x00000000, 0x0000000a, 0x00000004, 0x00000ab8, 0x00000000, 0x00000002, 0x00000001, 0x00000002,
3516 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000000, 0x00000003,
3517 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000002, 0x00000002,
3518 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000000, 0x00000003,
3519 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000002, 0x000000aa,
3520 0x00000100, 0x000009f4, 0x000009f0, 0x000000a9, 0x00000100, 0x00000a14, 0x00000a10, 0x00000002,
3521 0x000000aa, 0x00000100, 0x00000a34, 0x00000a30, 0x000000a9, 0x00000100, 0x00000a54, 0x00000a50,
3522 0x0000000f, 0x706d6173, 0x7372656c, 0x7272615f, 0x00007961, 0x00000010, 0x00000004, 0x00000ae8,
3523 0x00000000, 0x00000002, 0x00000007, 0x00000008, 0x00000008, 0x615f7376, 0x00327272, 0x0000000f,
3524 0x00000004, 0x00000b0c, 0x00000000, 0x00000001, 0x00000009, 0x00000007, 0x615f7370, 0x00007272,
3525 0x0000000a, 0x00000010, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x0000000b, 0x0000000f,
3526 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000002, 0x00000002, 0x00000000,
3527 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002, 0x00000000,
3528 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002, 0x00000000,
3529 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002, 0x00000000,
3530 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002, 0x00000000,
3531 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002, 0x00000000,
3532 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002, 0x00000000,
3533 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002, 0x00000000,
3534 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002, 0x00000000,
3535 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002, 0x00000000,
3536 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002, 0x00000000,
3537 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002, 0x00000000,
3538 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002, 0x00000000,
3539 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002, 0x00000000,
3540 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002, 0x00000000,
3541 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002, 0x00000000,
3542 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3543 0x00000003, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000004, 0x00000001, 0x00000000,
3544 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000002, 0x00000000, 0x00000000, 0x00000000,
3545 0x00000004, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000002,
3546 0x00000000, 0x00000000, 0x00000000, 0x00000004, 0x00000001, 0x00000000, 0x00000000, 0x00000000,
3547 0x00000000, 0x00000003, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000004, 0x00000001,
3548 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000002, 0x00000000, 0x00000000,
3549 0x00000000, 0x00000004, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000003,
3550 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000004, 0x00000001, 0x00000000, 0x00000000,
3551 0x00000000, 0x00000000, 0x00000003, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000004,
3552 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000002, 0x00000000,
3553 0x00000000, 0x00000000, 0x00000004, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3554 0x00000003, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000004, 0x00000001, 0x00000000,
3555 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000002, 0x00000000, 0x00000000, 0x00000000,
3556 0x00000004, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000002,
3557 0x00000000, 0x00000000, 0x00000000, 0x00000004, 0x00000001, 0x00000000, 0x00000000, 0x00000000,
3558 0x00000000, 0x00000003, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000004, 0x00000001,
3559 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000002, 0x00000000, 0x00000000,
3560 0x00000000, 0x00000004, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000003,
3561 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000004, 0x00000001, 0x00000000, 0x00000000,
3562 0x00000000, 0x00000000, 0x00000003, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000004,
3563 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000002, 0x00000000,
3564 0x00000000, 0x00000000, 0x00000004, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3565 0x00000003, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000004, 0x00000001, 0x00000000,
3566 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000002, 0x00000000, 0x00000000, 0x00000000,
3567 0x00000004, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000002,
3568 0x00000000, 0x00000000, 0x00000000, 0x00000004, 0x00000001, 0x00000001, 0x00000002, 0x00000002,
3569 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000000, 0x00000003, 0x00000002,
3570 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000000, 0x00000003, 0x00000002,
3571 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000000, 0x00000003, 0x00000002,
3572 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000000, 0x00000003, 0x00000002,
3573 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000003, 0x00003070, 0x0000000c,
3574 0x00000010, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00003170, 0x00000006,
3575 0x68636574, 0x00000030, 0x00000022, 0x00000001, 0x0000000e, 0x0000000d, 0x00000004, 0x00000020,
3576 0x00000000, 0x00000000, 0x0000003c, 0x00000058, 0x00000000, 0x00000000, 0x00000074, 0x00000090,
3577 0x00000000, 0x00000000, 0x000000d0, 0x000000ec, 0x00000000, 0x00000000, 0x00000108, 0x00000124,
3578 0x00000000, 0x00000000, 0x00000140, 0x0000015c, 0x00000000, 0x00000000, 0x00000178, 0x00000194,
3579 0x00000000, 0x00000000, 0x000001b8, 0x000001d4, 0x00000000, 0x00000000, 0x000001ec, 0x00000208,
3580 0x00000000, 0x00000000, 0x00000224, 0x00000238, 0x00000000, 0x00000000, 0x00000250, 0x0000026c,
3581 0x00000000, 0x00000000, 0x000002b8, 0x000002d4, 0x00000000, 0x00000000, 0x00000310, 0x0000032c,
3582 0x00000000, 0x00000000, 0x00000368, 0x00000384, 0x00000000, 0x00000000, 0x000003c4, 0x000003e0,
3583 0x00000000, 0x00000000, 0x00000420, 0x0000043c, 0x00000000, 0x00000000, 0x00000458, 0x00000474,
3584 0x00000000, 0x00000000, 0x00000494, 0x000004b0, 0x00000000, 0x00000000, 0x000004d4, 0x000004f0,
3585 0x00000000, 0x00000000, 0x00000518, 0x00000534, 0x00000000, 0x00000000, 0x00000558, 0x00000574,
3586 0x00000000, 0x00000000, 0x0000059c, 0x000005b8, 0x00000000, 0x00000000, 0x000005e0, 0x000005fc,
3587 0x00000000, 0x00000000, 0x00000624, 0x00000690, 0x00000000, 0x00000000, 0x000006d0, 0x0000073c,
3588 0x00000001, 0x00000000, 0x0000079c, 0x00000820, 0x00000000, 0x00000000, 0x00000888, 0x000008a4,
3589 0x00000000, 0x00000000, 0x000008b4, 0x000008d0, 0x00000001, 0x00000000, 0x000008e4, 0x000008f8,
3590 0x00000000, 0x00000000, 0x00000908, 0x0000091c, 0x00000000, 0x00000000, 0x0000092c, 0x00000998,
3591 0x00000000, 0x00000000, 0x000009dc, 0x00000a70, 0x00000000, 0x00000000, 0x00000acc, 0x00000ae0,
3592 0x00000001, 0x00000000, 0x00000af4, 0x00000b08, 0x00000000, 0x00000000, 0x00001154, 0x00000000,
3593 0x00000002, 0x0000112c, 0x00000000, 0x0000002a, 0x00000092, 0x00000000, 0x00000b1c, 0x00000b18,
3594 0x00000093, 0x00000000, 0x00000b34, 0x00000b30, 0x00000091, 0x00000000, 0x00000b4c, 0x00000b48,
3595 0x00000091, 0x00000001, 0x00000b6c, 0x00000b68, 0x00000091, 0x00000002, 0x00000b8c, 0x00000b88,
3596 0x00000091, 0x00000003, 0x00000bac, 0x00000ba8, 0x00000091, 0x00000004, 0x00000bcc, 0x00000bc8,
3597 0x00000091, 0x00000005, 0x00000bec, 0x00000be8, 0x00000091, 0x00000006, 0x00000c0c, 0x00000c08,
3598 0x00000091, 0x00000007, 0x00000c2c, 0x00000c28, 0x00000084, 0x00000000, 0x00000c4c, 0x00000c48,
3599 0x00000084, 0x00000001, 0x00000c6c, 0x00000c68, 0x00000084, 0x00000002, 0x00000c8c, 0x00000c88,
3600 0x00000084, 0x00000003, 0x00000cac, 0x00000ca8, 0x00000084, 0x00000004, 0x00000ccc, 0x00000cc8,
3601 0x00000084, 0x00000005, 0x00000cec, 0x00000ce8, 0x00000084, 0x00000006, 0x00000d0c, 0x00000d08,
3602 0x00000084, 0x00000007, 0x00000d2c, 0x00000d28, 0x00000085, 0x00000000, 0x00000d58, 0x00000d48,
3603 0x00000085, 0x00000001, 0x00000d84, 0x00000d74, 0x00000085, 0x00000002, 0x00000db0, 0x00000da0,
3604 0x00000085, 0x00000003, 0x00000ddc, 0x00000dcc, 0x00000085, 0x00000004, 0x00000e08, 0x00000df8,
3605 0x00000085, 0x00000005, 0x00000e34, 0x00000e24, 0x00000085, 0x00000006, 0x00000e60, 0x00000e50,
3606 0x00000085, 0x00000007, 0x00000e8c, 0x00000e7c, 0x00000087, 0x00000000, 0x00000eb8, 0x00000ea8,
3607 0x00000087, 0x00000001, 0x00000ee4, 0x00000ed4, 0x00000087, 0x00000002, 0x00000f10, 0x00000f00,
3608 0x00000087, 0x00000003, 0x00000f3c, 0x00000f2c, 0x00000087, 0x00000004, 0x00000f68, 0x00000f58,
3609 0x00000087, 0x00000005, 0x00000f94, 0x00000f84, 0x00000087, 0x00000006, 0x00000fc0, 0x00000fb0,
3610 0x00000087, 0x00000007, 0x00000fec, 0x00000fdc, 0x00000086, 0x00000000, 0x00001018, 0x00001008,
3611 0x00000086, 0x00000001, 0x00001044, 0x00001034, 0x00000086, 0x00000002, 0x00001070, 0x00001060,
3612 0x0000000e, 0x00000000, 0x00001090, 0x0000108c, 0x00000014, 0x00000000, 0x000010b0, 0x000010ac,
3613 0x00000012, 0x00000000, 0x000010d0, 0x000010cc, 0x00000041, 0x00000000, 0x000010f0, 0x000010ec,
3614 0x00000042, 0x00000000, 0x00001110, 0x0000110c, 0x0000114c, 0x00000000, 0x00000001, 0x00000092,
3615 0x00000000, 0x00001138, 0x00001134, 0x00000008, 0x0000001f, 0x00000009, 0x00000ad0, 0xffff0300,
3616 0x00d9fffe, 0x42415443, 0x0000001c, 0x0000032f, 0xffff0300, 0x0000000b, 0x0000001c, 0x00000000,
3617 0x00000328, 0x000000f8, 0x00000001, 0x00000001, 0x00000100, 0x00000110, 0x00000120, 0x00080002,
3618 0x00000002, 0x0000012c, 0x0000013c, 0x0000015c, 0x00060002, 0x00000002, 0x00000164, 0x00000174,
3619 0x00000194, 0x00000002, 0x00000003, 0x000001a0, 0x000001b0, 0x000001e0, 0x000a0002, 0x00000002,
3620 0x000001e8, 0x000001f8, 0x00000218, 0x000c0002, 0x00000002, 0x00000224, 0x00000234, 0x00000254,
3621 0x00030002, 0x00000003, 0x0000025c, 0x0000026c, 0x0000029c, 0x00050000, 0x00000001, 0x000002a8,
3622 0x000002b8, 0x000002d0, 0x00000000, 0x00000005, 0x000002dc, 0x000002b8, 0x000002ec, 0x00000003,
3623 0x00000001, 0x000002f8, 0x00000000, 0x00000308, 0x00010003, 0x00000001, 0x00000318, 0x00000000,
3624 0x56695f67, 0x00746365, 0x00020001, 0x00040001, 0x00000001, 0x00000000, 0x00000004, 0x00000003,
3625 0x00000002, 0x00000001, 0x3278326d, 0x756c6f63, 0xab006e6d, 0x00030003, 0x00020002, 0x00000001,
3626 0x00000000, 0x41300000, 0x41a80000, 0x00000000, 0x00000000, 0x41400000, 0x41b00000, 0x00000000,
3627 0x00000000, 0x3278326d, 0x00776f72, 0x00030002, 0x00020002, 0x00000001, 0x00000000, 0x41300000,
3628 0x41400000, 0x00000000, 0x00000000, 0x41a80000, 0x41b00000, 0x00000000, 0x00000000, 0x3378326d,
3629 0x756c6f63, 0xab006e6d, 0x00030003, 0x00030002, 0x00000001, 0x00000000, 0x41300000, 0x41a80000,
3630 0x00000000, 0x00000000, 0x41400000, 0x41b00000, 0x00000000, 0x00000000, 0x41500000, 0x41b80000,
3631 0x00000000, 0x00000000, 0x3378326d, 0x00776f72, 0x00030002, 0x00030002, 0x00000001, 0x00000000,
3632 0x41300000, 0x41400000, 0x41500000, 0x00000000, 0x41a80000, 0x41b00000, 0x41b80000, 0x00000000,
3633 0x3278336d, 0x756c6f63, 0xab006e6d, 0x00030003, 0x00020003, 0x00000001, 0x00000000, 0x41300000,
3634 0x41a80000, 0x41f80000, 0x00000000, 0x41400000, 0x41b00000, 0x42000000, 0x00000000, 0x3278336d,
3635 0x00776f72, 0x00030002, 0x00020003, 0x00000001, 0x00000000, 0x41300000, 0x41400000, 0x00000000,
3636 0x00000000, 0x41a80000, 0x41b00000, 0x00000000, 0x00000000, 0x41f80000, 0x42000000, 0x00000000,
3637 0x00000000, 0x7832626d, 0x6c6f6333, 0x006e6d75, 0x00010003, 0x00030002, 0x00000001, 0x00000000,
3638 0xffffffff, 0x00000000, 0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, 0x7832626d, 0x776f7233,
3639 0xababab00, 0x00010002, 0x00030002, 0x00000001, 0x00000000, 0x706d6173, 0x3172656c, 0xababab00,
3640 0x000c0004, 0x00010001, 0x00000001, 0x00000000, 0x706d6173, 0x7372656c, 0x7272615f, 0xab007961,
3641 0x000c0004, 0x00010001, 0x00000002, 0x00000000, 0x335f7370, 0x4d00305f, 0x6f726369, 0x74666f73,
3642 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932,
3643 0x332e3235, 0x00313131, 0x05000051, 0xa00f000e, 0x3d2aaaa4, 0xbf000000, 0x3f800000, 0xbe22f983,
3644 0x05000051, 0xa00f000f, 0x40c90fdb, 0xc0490fdb, 0xb4878163, 0x37cfb5a1, 0x05000051, 0xa00f0010,
3645 0x00000000, 0x3e22f983, 0x3e800000, 0xbab609ba, 0x0200001f, 0x80000005, 0x90030000, 0x0200001f,
3646 0x8000000a, 0x900f0001, 0x0200001f, 0x90000000, 0xa00f0800, 0x0200001f, 0x90000000, 0xa00f0801,
3647 0x03000005, 0x80030000, 0xa0e40007, 0x90550001, 0x04000004, 0x80030000, 0x90000001, 0xa0e40006,
3648 0x80e40000, 0x03000002, 0x80030000, 0x80e40000, 0x90e40001, 0x02000001, 0x80010001, 0xa0000010,
3649 0x0400005a, 0x80010002, 0x90e40001, 0xa0e40008, 0x80000001, 0x0400005a, 0x80020002, 0x90e40001,
3650 0xa0e40009, 0x80000001, 0x03000002, 0x80030000, 0x80e40000, 0x80e40002, 0x03000005, 0x800c0000,
3651 0xa0440004, 0x90550001, 0x04000004, 0x800c0000, 0x90000001, 0xa0440003, 0x80e40000, 0x04000004,
3652 0x800c0000, 0x90aa0001, 0xa0440005, 0x80e40000, 0x03000002, 0x80030000, 0x80ee0000, 0x80e40000,
3653 0x03000008, 0x80010002, 0x90e40001, 0xa0e4000c, 0x03000008, 0x80020002, 0x90e40001, 0xa0e4000d,
3654 0x03000002, 0x80030000, 0x80e40000, 0x80e40002, 0x03000005, 0x800e0001, 0xa090000b, 0x90550001,
3655 0x04000004, 0x800e0001, 0x90000001, 0xa090000a, 0x80e40001, 0x02000001, 0x80040000, 0x90aa0001,
3656 0x03000002, 0x80070000, 0x80e40000, 0x80f90001, 0x0400005a, 0x80010002, 0x90e40001, 0xa0e40000,
3657 0x80000001, 0x0400005a, 0x80020002, 0x90e40001, 0xa0e40001, 0x80000001, 0x0400005a, 0x80040002,
3658 0x90e40001, 0xa0e40002, 0x80000001, 0x03000002, 0x80070000, 0x80e40000, 0x80e40002, 0x02000001,
3659 0x80070003, 0x80e40000, 0x01000026, 0xf0e40000, 0x03000002, 0x80070003, 0x80e40002, 0x80e40003,
3660 0x00000027, 0x01000028, 0xe0e40804, 0x02000001, 0x80080003, 0x90ff0001, 0x04000004, 0x800f0000,
3661 0x80e40003, 0xa0550010, 0xa0aa0010, 0x02000013, 0x800f0000, 0x80e40000, 0x04000004, 0x800f0000,
3662 0x80e40000, 0xa000000f, 0xa055000f, 0x03000005, 0x800f0000, 0x80e40000, 0x80e40000, 0x04000004,
3663 0x800f0002, 0x80e40000, 0xa0aa000f, 0xa0ff000f, 0x04000004, 0x800f0002, 0x80e40000, 0x80e40002,
3664 0xa0ff0010, 0x04000004, 0x800f0002, 0x80e40000, 0x80e40002, 0xa000000e, 0x04000004, 0x800f0002,
3665 0x80e40000, 0x80e40002, 0xa055000e, 0x04000004, 0x800f0000, 0x80e40000, 0x80e40002, 0x80e40003,
3666 0x03000002, 0x800f0000, 0x80e40000, 0xa0aa000e, 0x04000004, 0x800f0002, 0x80e40000, 0xa1ff000e,
3667 0xa155000e, 0x02000013, 0x800f0002, 0x80e40002, 0x04000004, 0x800f0002, 0x80e40002, 0xa000000f,
3668 0xa055000f, 0x03000005, 0x800f0002, 0x80e40002, 0x80e40002, 0x04000004, 0x800f0004, 0x80e40002,
3669 0xa0aa000f, 0xa0ff000f, 0x04000004, 0x800f0004, 0x80e40002, 0x80e40004, 0xa0ff0010, 0x04000004,
3670 0x800f0004, 0x80e40002, 0x80e40004, 0xa000000e, 0x04000004, 0x800f0004, 0x80e40002, 0x80e40004,
3671 0xa055000e, 0x04000004, 0x800f0000, 0x80e40002, 0x80e40004, 0x80e40000, 0x03000002, 0x800f0003,
3672 0x80e40000, 0xa0aa000e, 0x0400005a, 0x80010000, 0x80e40003, 0xa0e40000, 0x80000001, 0x0400005a,
3673 0x80020000, 0x80e40003, 0xa0e40001, 0x80000001, 0x0400005a, 0x80040000, 0x80e40003, 0xa0e40002,
3674 0x80000001, 0x03000002, 0x80070000, 0x80e40000, 0x80e40003, 0x03000005, 0x800e0001, 0x80550000,
3675 0xa090000b, 0x04000004, 0x800e0001, 0x80000000, 0xa090000a, 0x80e40001, 0x03000002, 0x80070003,
3676 0x80e40000, 0x80f90001, 0x03000008, 0x80010000, 0x80e40003, 0xa0e4000c, 0x03000008, 0x80020000,
3677 0x80e40003, 0xa0e4000d, 0x03000002, 0x80030000, 0x80e40000, 0x80e40003, 0x03000005, 0x800c0000,
3678 0x80550000, 0xa0440004, 0x04000004, 0x800c0000, 0x80000000, 0xa0440003, 0x80e40000, 0x04000004,
3679 0x800c0000, 0x80aa0003, 0xa0440005, 0x80e40000, 0x03000002, 0x80030003, 0x80ee0000, 0x80e40000,
3680 0x0000002a, 0x02000001, 0x80080003, 0x90ff0001, 0x0000002b, 0x01000028, 0xe0e40805, 0x04000004,
3681 0x800f0000, 0x80e40003, 0xa0550010, 0xa0aa0010, 0x02000013, 0x800f0000, 0x80e40000, 0x04000004,
3682 0x800f0000, 0x80e40000, 0xa000000f, 0xa055000f, 0x03000005, 0x800f0000, 0x80e40000, 0x80e40000,
3683 0x04000004, 0x800f0002, 0x80e40000, 0xa0aa000f, 0xa0ff000f, 0x04000004, 0x800f0002, 0x80e40000,
3684 0x80e40002, 0xa0ff0010, 0x04000004, 0x800f0002, 0x80e40000, 0x80e40002, 0xa000000e, 0x04000004,
3685 0x800f0002, 0x80e40000, 0x80e40002, 0xa055000e, 0x04000004, 0x800f0000, 0x80e40000, 0x80e40002,
3686 0x80e40003, 0x03000002, 0x800f0000, 0x80e40000, 0xa0aa000e, 0x04000004, 0x800f0002, 0x80e40000,
3687 0xa1ff000e, 0xa155000e, 0x02000013, 0x800f0002, 0x80e40002, 0x04000004, 0x800f0002, 0x80e40002,
3688 0xa000000f, 0xa055000f, 0x03000005, 0x800f0002, 0x80e40002, 0x80e40002, 0x04000004, 0x800f0004,
3689 0x80e40002, 0xa0aa000f, 0xa0ff000f, 0x04000004, 0x800f0004, 0x80e40002, 0x80e40004, 0xa0ff0010,
3690 0x04000004, 0x800f0004, 0x80e40002, 0x80e40004, 0xa000000e, 0x04000004, 0x800f0004, 0x80e40002,
3691 0x80e40004, 0xa055000e, 0x04000004, 0x800f0000, 0x80e40002, 0x80e40004, 0x80e40000, 0x03000002,
3692 0x800f0003, 0x80e40000, 0xa0aa000e, 0x0400005a, 0x80010000, 0x80e40003, 0xa0e40000, 0x80000001,
3693 0x0400005a, 0x80020000, 0x80e40003, 0xa0e40001, 0x80000001, 0x0400005a, 0x80040000, 0x80e40003,
3694 0xa0e40002, 0x80000001, 0x03000002, 0x80070000, 0x80e40000, 0x80e40003, 0x03000005, 0x80070001,
3695 0x80550000, 0xa0e4000b, 0x04000004, 0x80070001, 0x80000000, 0xa0e4000a, 0x80e40001, 0x03000002,
3696 0x80070003, 0x80e40000, 0x80e40001, 0x03000008, 0x80010000, 0x80e40003, 0xa0e4000c, 0x03000008,
3697 0x80020000, 0x80e40003, 0xa0e4000d, 0x03000002, 0x80030000, 0x80e40000, 0x80e40003, 0x03000005,
3698 0x800c0000, 0x80550000, 0xa0440004, 0x04000004, 0x800c0000, 0x80000000, 0xa0440003, 0x80e40000,
3699 0x04000004, 0x800c0000, 0x80aa0003, 0xa0440005, 0x80e40000, 0x03000002, 0x80030003, 0x80ee0000,
3700 0x80e40000, 0x0000002b, 0x03000042, 0x800f0000, 0x90e40000, 0xa0e40800, 0x03000002, 0x800f0000,
3701 0x80e40000, 0x80e40003, 0x03000042, 0x800f0001, 0x90e40000, 0xa0e40801, 0x03000002, 0x800f0800,
3702 0x80e40000, 0x80e40001, 0x0000ffff, 0x00000007, 0x00000b6c, 0xfffe0300, 0x013cfffe, 0x42415443,
3703 0x0000001c, 0x000004bb, 0xfffe0300, 0x0000000c, 0x0000001c, 0x00000000, 0x000004b4, 0x0000010c,
3704 0x00200002, 0x00000001, 0x00000114, 0x00000124, 0x00000134, 0x001d0002, 0x00000002, 0x0000013c,
3705 0x0000014c, 0x0000016c, 0x001f0002, 0x00000001, 0x00000174, 0x00000184, 0x00000194, 0x00100002,
3706 0x00000004, 0x000001a0, 0x000001b0, 0x000001f0, 0x00140002, 0x00000003, 0x000001f8, 0x00000208,
3707 0x00000238, 0x00170002, 0x00000003, 0x00000244, 0x00000254, 0x00000284, 0x000c0002, 0x00000004,
3708 0x0000028c, 0x0000029c, 0x000002dc, 0x00020003, 0x00000001, 0x000002e8, 0x00000000, 0x000002f8,
3709 0x00000003, 0x00000002, 0x00000308, 0x00000000, 0x00000318, 0x001a0002, 0x00000003, 0x00000370,
3710 0x00000380, 0x000003b0, 0x00000002, 0x00000006, 0x000003b4, 0x000003c4, 0x00000424, 0x00060002,
3711 0x00000006, 0x00000444, 0x00000454, 0x31727261, 0xababab00, 0x00030000, 0x00010001, 0x00000001,
3712 0x00000000, 0x42b60000, 0x00000000, 0x00000000, 0x00000000, 0x32727261, 0xababab00, 0x00030000,
3713 0x00010001, 0x00000002, 0x00000000, 0x42b80000, 0x00000000, 0x00000000, 0x00000000, 0x42ba0000,
3714 0x00000000, 0x00000000, 0x00000000, 0x6f505f67, 0xab003173, 0x00030001, 0x00040001, 0x00000001,
3715 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3478336d, 0x756c6f63, 0xab006e6d,
3716 0x00030003, 0x00040003, 0x00000001, 0x00000000, 0x41300000, 0x41a80000, 0x41f80000, 0x00000000,
3717 0x41400000, 0x41b00000, 0x42000000, 0x00000000, 0x41500000, 0x41b80000, 0x42040000, 0x00000000,
3718 0x41600000, 0x41c00000, 0x42080000, 0x00000000, 0x3478336d, 0x00776f72, 0x00030002, 0x00040003,
3719 0x00000001, 0x00000000, 0x41300000, 0x41400000, 0x41500000, 0x41600000, 0x41a80000, 0x41b00000,
3720 0x41b80000, 0x41c00000, 0x41f80000, 0x42000000, 0x42040000, 0x42080000, 0x3378346d, 0x756c6f63,
3721 0xab006e6d, 0x00030003, 0x00030004, 0x00000001, 0x00000000, 0x41300000, 0x41a80000, 0x41f80000,
3722 0x42240000, 0x41400000, 0x41b00000, 0x42000000, 0x42280000, 0x41500000, 0x41b80000, 0x42040000,
3723 0x422c0000, 0x3378346d, 0x00776f72, 0x00030002, 0x00030004, 0x00000001, 0x00000000, 0x41300000,
3724 0x41400000, 0x41500000, 0x00000000, 0x41a80000, 0x41b00000, 0x41b80000, 0x00000000, 0x41f80000,
3725 0x42000000, 0x42040000, 0x00000000, 0x42240000, 0x42280000, 0x422c0000, 0x00000000, 0x706d6173,
3726 0x3172656c, 0xababab00, 0x000c0004, 0x00010001, 0x00000001, 0x00000000, 0x706d6173, 0x7372656c,
3727 0x7272615f, 0xab007961, 0x000c0004, 0x00010001, 0x00000002, 0x00000000, 0x00317374, 0xab003176,
3728 0x00030001, 0x00030001, 0x00000001, 0x00000000, 0xab007666, 0x00030000, 0x00010001, 0x00000001,
3729 0x00000000, 0xab003276, 0x00030001, 0x00040001, 0x00000001, 0x00000000, 0x0000031c, 0x00000320,
3730 0x00000330, 0x00000334, 0x00000344, 0x00000348, 0x00000005, 0x00080001, 0x00030001, 0x00000358,
3731 0x41100000, 0x41200000, 0x41300000, 0x00000000, 0x41400000, 0x00000000, 0x00000000, 0x00000000,
3732 0x41500000, 0x41600000, 0x41700000, 0x41800000, 0x00327374, 0x00000005, 0x00080001, 0x00030002,
3733 0x00000358, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3734 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x40000000, 0x40400000,
3735 0x00000000, 0x40800000, 0x00000000, 0x00000000, 0x00000000, 0x40a00000, 0x40c00000, 0x40e00000,
3736 0x41000000, 0x00337374, 0xab007374, 0x00000005, 0x00080001, 0x00030002, 0x00000358, 0x00000428,
3737 0x0000042c, 0x00000005, 0x00100001, 0x00010001, 0x0000043c, 0x3f800000, 0x40000000, 0x40400000,
3738 0x00000000, 0x40800000, 0x00000000, 0x00000000, 0x00000000, 0x40a00000, 0x40c00000, 0x40e00000,
3739 0x41000000, 0x41100000, 0x41200000, 0x41300000, 0x00000000, 0x41400000, 0x00000000, 0x00000000,
3740 0x00000000, 0x41500000, 0x41600000, 0x41700000, 0x41800000, 0x335f7376, 0x4d00305f, 0x6f726369,
3741 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072,
3742 0x392e3932, 0x332e3235, 0x00313131, 0x00f0fffe, 0x53455250, 0x46580201, 0x0047fffe, 0x42415443,
3743 0x0000001c, 0x000000e7, 0x46580201, 0x00000003, 0x0000001c, 0x00000100, 0x000000e4, 0x00000058,
3744 0x00020002, 0x00000001, 0x00000060, 0x00000070, 0x00000080, 0x00030002, 0x00000001, 0x00000088,
3745 0x00000070, 0x00000098, 0x00000002, 0x00000002, 0x000000a4, 0x000000b4, 0x6f505f67, 0xab003173,
3746 0x00030001, 0x00040001, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3747 0x6f505f67, 0xab003273, 0x00030001, 0x00040001, 0x00000001, 0x00000000, 0x65535f67, 0x7463656c,
3748 0xab00726f, 0x00030001, 0x00040001, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3749 0x00000000, 0x41200000, 0x41200000, 0x41200000, 0x41200000, 0x459c4800, 0x459c5000, 0x459c5800,
3750 0x459c6000, 0x4d007874, 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c, 0x72656461,
3751 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131, 0x000cfffe, 0x49535250,
3752 0x00000021, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000001, 0x00000021,
3753 0x00000001, 0x00000000, 0x00000000, 0x0032fffe, 0x54494c43, 0x00000018, 0x00000000, 0x00000000,
3754 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3755 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3756 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3757 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3fe00000,
3758 0x00000000, 0xc0000000, 0x00000000, 0xc0080000, 0x00000000, 0x00000000, 0x00000000, 0x40100000,
3759 0x00000000, 0x40140000, 0x00000000, 0x40180000, 0x00000000, 0x401c0000, 0x0064fffe, 0x434c5846,
3760 0x00000009, 0xa0500004, 0x00000002, 0x00000000, 0x00000001, 0x00000011, 0x00000000, 0x00000002,
3761 0x00000008, 0x00000000, 0x00000007, 0x00000000, 0x20400004, 0x00000002, 0x00000000, 0x00000007,
3762 0x00000000, 0x00000000, 0x00000001, 0x00000014, 0x00000000, 0x00000007, 0x00000004, 0xa0500004,
3763 0x00000002, 0x00000000, 0x00000001, 0x00000012, 0x00000000, 0x00000002, 0x0000000c, 0x00000000,
3764 0x00000007, 0x00000000, 0x20400004, 0x00000002, 0x00000000, 0x00000007, 0x00000000, 0x00000000,
3765 0x00000001, 0x00000014, 0x00000000, 0x00000007, 0x00000008, 0x10100004, 0x00000001, 0x00000000,
3766 0x00000007, 0x00000008, 0x00000000, 0x00000007, 0x00000000, 0x20400004, 0x00000002, 0x00000000,
3767 0x00000007, 0x00000000, 0x00000000, 0x00000007, 0x00000004, 0x00000000, 0x00000007, 0x0000000c,
3768 0xa0200001, 0x00000002, 0x00000000, 0x00000001, 0x00000010, 0x00000000, 0x00000002, 0x00000005,
3769 0x00000000, 0x00000007, 0x00000000, 0xa0500004, 0x00000002, 0x00000000, 0x00000007, 0x00000000,
3770 0x00000000, 0x00000007, 0x0000000c, 0x00000000, 0x00000007, 0x00000004, 0x20400004, 0x00000002,
3771 0x00000000, 0x00000007, 0x00000004, 0x00000000, 0x00000007, 0x00000008, 0x00000000, 0x00000004,
3772 0x00000084, 0xf0f0f0f0, 0x0f0f0f0f, 0x0000ffff, 0x05000051, 0xa00f0022, 0x00000000, 0x00000000,
3773 0x00000000, 0x00000000, 0x0200001f, 0x80000000, 0x900f0000, 0x0200001f, 0x90000000, 0xa00f0801,
3774 0x0200001f, 0x90000000, 0xa00f0802, 0x0200001f, 0x80000000, 0xe00f0000, 0x0200001f, 0x80000005,
3775 0xe0030001, 0x0200001f, 0x8000000a, 0xe00f0002, 0x03000009, 0x80010000, 0x90e40000, 0xa0e40017,
3776 0x03000009, 0x80020000, 0x90e40000, 0xa0e40018, 0x03000009, 0x80040000, 0x90e40000, 0xa0e40019,
3777 0x03000008, 0x80010001, 0x90e40000, 0xa0e40010, 0x03000008, 0x80020001, 0x90e40000, 0xa0e40011,
3778 0x03000008, 0x80040001, 0x90e40000, 0xa0e40012, 0x03000008, 0x80080001, 0x90e40000, 0xa0e40013,
3779 0x02000001, 0x80080000, 0xa0000022, 0x03000002, 0x800f0000, 0x80e40000, 0x80e40001, 0x03000005,
3780 0x800f0001, 0xa0e40015, 0x90550000, 0x04000004, 0x800f0001, 0x90000000, 0xa0e40014, 0x80e40001,
3781 0x04000004, 0x800f0001, 0x90aa0000, 0xa0e40016, 0x80e40001, 0x03000002, 0x800f0000, 0x80e40000,
3782 0x80e40001, 0x03000005, 0x80070001, 0xa0e4000d, 0x90550000, 0x04000004, 0x80070001, 0x90000000,
3783 0xa0e4000c, 0x80e40001, 0x04000004, 0x80070001, 0x90aa0000, 0xa0e4000e, 0x80e40001, 0x04000004,
3784 0x80070001, 0x90ff0000, 0xa0e4000f, 0x80e40001, 0x03000002, 0x80070000, 0x80e40000, 0x80e40001,
3785 0x04000004, 0x800f0000, 0x90e40000, 0xa000001b, 0x80e40000, 0x03000009, 0x80010001, 0x90e40000,
3786 0xa0e4001c, 0x03000002, 0x800f0000, 0x80e40000, 0x80000001, 0x04000004, 0x800f0000, 0x90e40000,
3787 0xa0000004, 0x80e40000, 0x03000009, 0x80010001, 0x90e40000, 0xa0e40005, 0x03000002, 0x800f0000,
3788 0x80e40000, 0x80000001, 0x04000004, 0x800f0000, 0x90e40000, 0xa0000020, 0x80e40000, 0x04000004,
3789 0x800f0000, 0x90e40000, 0xa000001e, 0x80e40000, 0x04000004, 0x800f0000, 0x90e40000, 0xa000000a,
3790 0x80e40000, 0x03000009, 0x80010001, 0x90e40000, 0xa0e4000b, 0x03000002, 0x800f0000, 0x80e40000,
3791 0x80000001, 0x0300005f, 0x800f0001, 0xa0e4001f, 0xa0e40802, 0x03000002, 0x800f0000, 0x80e40000,
3792 0x80e40001, 0x0300005f, 0x800f0001, 0xa0e4001f, 0xa0e40801, 0x03000002, 0xe00f0002, 0x80e40000,
3793 0x80e40001, 0x02000001, 0xe00f0000, 0xa0e40021, 0x02000001, 0xe0030001, 0xa0000022, 0x0000ffff,
3794 0x00000008, 0x000001dc, 0xfffe0300, 0x0016fffe, 0x42415443, 0x0000001c, 0x00000023, 0xfffe0300,
3795 0x00000000, 0x00000000, 0x00000000, 0x0000001c, 0x335f7376, 0x4d00305f, 0x6f726369, 0x74666f73,
3796 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932,
3797 0x332e3235, 0x00313131, 0x0045fffe, 0x53455250, 0x46580201, 0x0024fffe, 0x42415443, 0x0000001c,
3798 0x0000005b, 0x46580201, 0x00000001, 0x0000001c, 0x00000100, 0x00000058, 0x00000030, 0x00000002,
3799 0x00000001, 0x00000038, 0x00000048, 0x6f505f67, 0xab003173, 0x00030001, 0x00040001, 0x00000001,
3800 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x4d007874, 0x6f726369, 0x74666f73,
3801 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932,
3802 0x332e3235, 0x00313131, 0x000cfffe, 0x49535250, 0x00000000, 0x00000000, 0x00000000, 0x00000001,
3803 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x0002fffe,
3804 0x54494c43, 0x00000000, 0x000cfffe, 0x434c5846, 0x00000001, 0x10000004, 0x00000001, 0x00000000,
3805 0x00000002, 0x00000000, 0x00000000, 0x00000004, 0x00000000, 0xf0f0f0f0, 0x0f0f0f0f, 0x0000ffff,
3806 0x05000051, 0xa00f0001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0200001f, 0x80000000,
3807 0xe00f0000, 0x0200001f, 0x80000005, 0xe0030001, 0x0200001f, 0x8000000a, 0xe00f0002, 0x02000001,
3808 0xe00f0000, 0xa0e40000, 0x02000001, 0xe0030001, 0xa0000001, 0x02000001, 0xe00f0002, 0xa0000001,
3809 0x0000ffff, 0x00000005, 0x00000000, 0x00000004, 0x00000000, 0x00000001, 0x0000002c, 0xfffe0101,
3810 0x00000051, 0xa00f0000, 0x3f800000, 0x3f800000, 0x3f800000, 0x3f800000, 0x00000001, 0xc00f0000,
3811 0xa0e40000, 0x0000ffff, 0x00000002, 0x0000002c, 0xfffe0101, 0x00000051, 0xa00f0000, 0x40000000,
3812 0x40000000, 0x40000000, 0x40000000, 0x00000001, 0xc00f0000, 0xa0e40000, 0x0000ffff, 0x00000003,
3813 0x0000002c, 0xfffe0200, 0x05000051, 0xa00f0000, 0x40400000, 0x40400000, 0x40400000, 0x40400000,
3814 0x02000001, 0xc00f0000, 0xa0e40000, 0x0000ffff, 0x00000000, 0x00000001, 0xffffffff, 0x00000000,
3815 0x00000002, 0x000000e8, 0x00000008, 0x615f7376, 0x00007272, 0x46580200, 0x0024fffe, 0x42415443,
3816 0x0000001c, 0x0000005b, 0x46580200, 0x00000001, 0x0000001c, 0x00000100, 0x00000058, 0x00000030,
3817 0x00000002, 0x00000001, 0x00000038, 0x00000048, 0x56695f67, 0x00746365, 0x00020001, 0x00040001,
3818 0x00000001, 0x00000000, 0x40800000, 0x40400000, 0x40000000, 0x3f800000, 0x4d007874, 0x6f726369,
3819 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072,
3820 0x392e3932, 0x332e3235, 0x00313131, 0x0002fffe, 0x54494c43, 0x00000000, 0x000cfffe, 0x434c5846,
3821 0x00000001, 0x10000001, 0x00000001, 0x00000000, 0x00000002, 0x00000002, 0x00000000, 0x00000004,
3822 0x00000000, 0xf0f0f0f0, 0x0f0f0f0f, 0x0000ffff, 0x00000000, 0x00000000, 0xffffffff, 0x00000029,
3823 0x00000000, 0x00000198, 0x46580200, 0x0053fffe, 0x42415443, 0x0000001c, 0x00000117, 0x46580200,
3824 0x00000001, 0x0000001c, 0x20000100, 0x00000114, 0x00000030, 0x00000002, 0x00000005, 0x000000a4,
3825 0x000000b4, 0x00337374, 0x76007374, 0xabab0031, 0x00030001, 0x00030001, 0x00000001, 0x00000000,
3826 0xab007666, 0x00030000, 0x00010001, 0x00000001, 0x00000000, 0xab003276, 0x00030001, 0x00040001,
3827 0x00000001, 0x00000000, 0x00000037, 0x0000003c, 0x0000004c, 0x00000050, 0x00000060, 0x00000064,
3828 0x00000005, 0x00080001, 0x00030002, 0x00000074, 0x00000034, 0x0000008c, 0x00000005, 0x00100001,
3829 0x00010001, 0x0000009c, 0x3f800000, 0x40000000, 0x40400000, 0x00000000, 0x40800000, 0x00000000,
3830 0x00000000, 0x00000000, 0x40a00000, 0x40c00000, 0x40e00000, 0x41000000, 0x41100000, 0x41200000,
3831 0x41300000, 0x00000000, 0x41400000, 0x00000000, 0x00000000, 0x00000000, 0x41500000, 0x41600000,
3832 0x41700000, 0x41800000, 0x4d007874, 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c,
3833 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131, 0x0002fffe,
3834 0x54494c43, 0x00000000, 0x000cfffe, 0x434c5846, 0x00000001, 0x10000001, 0x00000001, 0x00000000,
3835 0x00000002, 0x00000010, 0x00000000, 0x00000004, 0x00000000, 0xf0f0f0f0, 0x0f0f0f0f, 0x0000ffff,
3836 0x00000000, 0x00000000, 0xffffffff, 0x00000028, 0x00000000, 0x00000198, 0x46580200, 0x0053fffe,
3837 0x42415443, 0x0000001c, 0x00000117, 0x46580200, 0x00000001, 0x0000001c, 0x20000100, 0x00000114,
3838 0x00000030, 0x00000002, 0x00000002, 0x000000a4, 0x000000b4, 0x00337374, 0x76007374, 0xabab0031,
3839 0x00030001, 0x00030001, 0x00000001, 0x00000000, 0xab007666, 0x00030000, 0x00010001, 0x00000001,
3840 0x00000000, 0xab003276, 0x00030001, 0x00040001, 0x00000001, 0x00000000, 0x00000037, 0x0000003c,
3841 0x0000004c, 0x00000050, 0x00000060, 0x00000064, 0x00000005, 0x00080001, 0x00030002, 0x00000074,
3842 0x00000034, 0x0000008c, 0x00000005, 0x00100001, 0x00010001, 0x0000009c, 0x3f800000, 0x40000000,
3843 0x40400000, 0x00000000, 0x40800000, 0x00000000, 0x00000000, 0x00000000, 0x40a00000, 0x40c00000,
3844 0x40e00000, 0x41000000, 0x41100000, 0x41200000, 0x41300000, 0x00000000, 0x41400000, 0x00000000,
3845 0x00000000, 0x00000000, 0x41500000, 0x41600000, 0x41700000, 0x41800000, 0x4d007874, 0x6f726369,
3846 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072,
3847 0x392e3932, 0x332e3235, 0x00313131, 0x0002fffe, 0x54494c43, 0x00000000, 0x000cfffe, 0x434c5846,
3848 0x00000001, 0x10000001, 0x00000001, 0x00000000, 0x00000002, 0x00000004, 0x00000000, 0x00000004,
3849 0x00000000, 0xf0f0f0f0, 0x0f0f0f0f, 0x0000ffff, 0x00000000, 0x00000000, 0xffffffff, 0x00000027,
3850 0x00000000, 0x0000017c, 0x46580200, 0x004cfffe, 0x42415443, 0x0000001c, 0x000000fb, 0x46580200,
3851 0x00000001, 0x0000001c, 0x20000100, 0x000000f8, 0x00000030, 0x00000002, 0x00000005, 0x00000088,
3852 0x00000098, 0x00327374, 0xab003176, 0x00030001, 0x00030001, 0x00000001, 0x00000000, 0xab007666,
3853 0x00030000, 0x00010001, 0x00000001, 0x00000000, 0xab003276, 0x00030001, 0x00040001, 0x00000001,
3854 0x00000000, 0x00000034, 0x00000038, 0x00000048, 0x0000004c, 0x0000005c, 0x00000060, 0x00000005,
3855 0x00080001, 0x00030002, 0x00000070, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3856 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000,
3857 0x40000000, 0x40400000, 0x00000000, 0x40800000, 0x00000000, 0x00000000, 0x00000000, 0x40a00000,
3858 0x40c00000, 0x40e00000, 0x41000000, 0x4d007874, 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820,
3859 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131,
3860 0x0002fffe, 0x54494c43, 0x00000000, 0x000cfffe, 0x434c5846, 0x00000001, 0x10000001, 0x00000001,
3861 0x00000000, 0x00000002, 0x00000010, 0x00000000, 0x00000004, 0x00000000, 0xf0f0f0f0, 0x0f0f0f0f,
3862 0x0000ffff, 0x00000000, 0x00000000, 0xffffffff, 0x00000026, 0x00000000, 0x0000017c, 0x46580200,
3863 0x004cfffe, 0x42415443, 0x0000001c, 0x000000fb, 0x46580200, 0x00000001, 0x0000001c, 0x20000100,
3864 0x000000f8, 0x00000030, 0x00000002, 0x00000002, 0x00000088, 0x00000098, 0x00327374, 0xab003176,
3865 0x00030001, 0x00030001, 0x00000001, 0x00000000, 0xab007666, 0x00030000, 0x00010001, 0x00000001,
3866 0x00000000, 0xab003276, 0x00030001, 0x00040001, 0x00000001, 0x00000000, 0x00000034, 0x00000038,
3867 0x00000048, 0x0000004c, 0x0000005c, 0x00000060, 0x00000005, 0x00080001, 0x00030002, 0x00000070,
3868 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3869 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x40000000, 0x40400000, 0x00000000,
3870 0x40800000, 0x00000000, 0x00000000, 0x00000000, 0x40a00000, 0x40c00000, 0x40e00000, 0x41000000,
3871 0x4d007874, 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320,
3872 0x656c6970, 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131, 0x0002fffe, 0x54494c43, 0x00000000,
3873 0x000cfffe, 0x434c5846, 0x00000001, 0x10000001, 0x00000001, 0x00000000, 0x00000002, 0x00000004,
3874 0x00000000, 0x00000004, 0x00000000, 0xf0f0f0f0, 0x0f0f0f0f, 0x0000ffff, 0x00000000, 0x00000000,
3875 0xffffffff, 0x00000024, 0x00000000, 0x00000770, 0x46580200, 0x008cfffe, 0x42415443, 0x0000001c,
3876 0x000001fb, 0x46580200, 0x00000004, 0x0000001c, 0x20000100, 0x000001f8, 0x0000006c, 0x000b0002,
3877 0x00000001, 0x00000074, 0x00000084, 0x00000094, 0x00060002, 0x00000004, 0x0000009c, 0x000000ac,
3878 0x000000ec, 0x00000002, 0x00000006, 0x00000160, 0x00000170, 0x000001d0, 0x000a0002, 0x00000001,
3879 0x000001d8, 0x000001e8, 0x56695f67, 0x00746365, 0x00020001, 0x00040001, 0x00000001, 0x00000000,
3880 0x40800000, 0x40400000, 0x40000000, 0x3f800000, 0x3478346d, 0xababab00, 0x00030003, 0x00040004,
3881 0x00000001, 0x00000000, 0x41300000, 0x41a80000, 0x41f80000, 0x42240000, 0x41400000, 0x41b00000,
3882 0x42000000, 0x42280000, 0x41500000, 0x41b80000, 0x42040000, 0x422c0000, 0x41600000, 0x41c00000,
3883 0x42080000, 0x42300000, 0x00337374, 0x76007374, 0xabab0031, 0x00030001, 0x00030001, 0x00000001,
3884 0x00000000, 0xab007666, 0x00030000, 0x00010001, 0x00000001, 0x00000000, 0xab003276, 0x00030001,
3885 0x00040001, 0x00000001, 0x00000000, 0x000000f3, 0x000000f8, 0x00000108, 0x0000010c, 0x0000011c,
3886 0x00000120, 0x00000005, 0x00080001, 0x00030002, 0x00000130, 0x000000f0, 0x00000148, 0x00000005,
3887 0x00100001, 0x00010001, 0x00000158, 0x3f800000, 0x40000000, 0x40400000, 0x00000000, 0x40800000,
3888 0x00000000, 0x00000000, 0x00000000, 0x40a00000, 0x40c00000, 0x40e00000, 0x41000000, 0x41100000,
3889 0x41200000, 0x41300000, 0x00000000, 0x41400000, 0x00000000, 0x00000000, 0x00000000, 0x41500000,
3890 0x41600000, 0x41700000, 0x41800000, 0x33636576, 0xababab00, 0x00030001, 0x00030001, 0x00000001,
3891 0x00000000, 0x447a4000, 0x447a8000, 0x447ac000, 0x00000000, 0x4d007874, 0x6f726369, 0x74666f73,
3892 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932,
3893 0x332e3235, 0x00313131, 0x008afffe, 0x54494c43, 0x00000044, 0x00000000, 0x00000000, 0x00000000,
3894 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3895 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3896 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3897 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3898 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3899 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3900 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3901 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3902 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3903 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3904 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3905 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3ff00000, 0x00000000,
3906 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3907 0x3ff00000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3908 0x00000000, 0x00000000, 0x3ff00000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3909 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3ff00000, 0x00000000, 0x40080000, 0x00000000,
3910 0x3ff00000, 0x00000000, 0x40000000, 0x00000000, 0x00000000, 0x00c1fffe, 0x434c5846, 0x0000000e,
3911 0x50000004, 0x00000002, 0x00000000, 0x00000002, 0x00000018, 0x00000001, 0x00000002, 0x0000002e,
3912 0x00000001, 0x0000003c, 0x00000000, 0x00000007, 0x00000000, 0x50000004, 0x00000002, 0x00000000,
3913 0x00000002, 0x0000001c, 0x00000001, 0x00000002, 0x0000002e, 0x00000001, 0x0000003c, 0x00000000,
3914 0x00000007, 0x00000001, 0x50000004, 0x00000002, 0x00000000, 0x00000002, 0x00000020, 0x00000001,
3915 0x00000002, 0x0000002e, 0x00000001, 0x0000003c, 0x00000000, 0x00000007, 0x00000002, 0x50000004,
3916 0x00000002, 0x00000000, 0x00000002, 0x00000024, 0x00000001, 0x00000002, 0x0000002e, 0x00000001,
3917 0x0000003c, 0x00000000, 0x00000007, 0x00000003, 0xa0400001, 0x00000002, 0x00000000, 0x00000002,
3918 0x0000002f, 0x00000000, 0x00000002, 0x0000002f, 0x00000000, 0x00000007, 0x00000004, 0x50000004,
3919 0x00000002, 0x00000000, 0x00000002, 0x00000018, 0x00000001, 0x00000007, 0x00000004, 0x00000001,
3920 0x00000030, 0x00000000, 0x00000007, 0x00000008, 0x50000004, 0x00000002, 0x00000000, 0x00000002,
3921 0x0000001c, 0x00000001, 0x00000007, 0x00000004, 0x00000001, 0x00000030, 0x00000000, 0x00000007,
3922 0x00000009, 0x50000004, 0x00000002, 0x00000000, 0x00000002, 0x00000020, 0x00000001, 0x00000007,
3923 0x00000004, 0x00000001, 0x00000030, 0x00000000, 0x00000007, 0x0000000a, 0x50000004, 0x00000002,
3924 0x00000000, 0x00000002, 0x00000024, 0x00000001, 0x00000007, 0x00000004, 0x00000001, 0x00000030,
3925 0x00000000, 0x00000007, 0x0000000b, 0x50000004, 0x00000002, 0x00000000, 0x00000007, 0x00000000,
3926 0x00000000, 0x00000007, 0x00000008, 0x00000000, 0x00000004, 0x00000000, 0x50000003, 0x00000002,
3927 0x00000000, 0x00000002, 0x00000028, 0x00000001, 0x00000002, 0x0000002e, 0x00000001, 0x00000030,
3928 0x00000000, 0x00000004, 0x00000002, 0x70e00001, 0x00000006, 0x00000000, 0x00000001, 0x00000041,
3929 0x00000000, 0x00000001, 0x00000042, 0x00000000, 0x00000001, 0x00000040, 0x00000001, 0x00000002,
3930 0x0000002f, 0x00000001, 0x00000030, 0x00000001, 0x00000002, 0x0000002f, 0x00000001, 0x00000031,
3931 0x00000001, 0x00000002, 0x0000002f, 0x00000001, 0x00000032, 0x00000000, 0x00000004, 0x00000003,
3932 0xa0500001, 0x00000002, 0x00000000, 0x00000002, 0x0000002c, 0x00000000, 0x00000001, 0x00000040,
3933 0x00000000, 0x00000007, 0x00000000, 0x10000001, 0x00000001, 0x00000001, 0x00000007, 0x00000000,
3934 0x00000002, 0x00000004, 0x00000000, 0x00000004, 0x00000001, 0xf0f0f0f0, 0x0f0f0f0f, 0x0000ffff,
3935 0x00000000, 0x00000000, 0xffffffff, 0x00000023, 0x00000000, 0x000004ec, 0x46580200, 0x005afffe,
3936 0x42415443, 0x0000001c, 0x00000133, 0x46580200, 0x00000004, 0x0000001c, 0x20000100, 0x00000130,
3937 0x0000006c, 0x00000002, 0x00000003, 0x00000078, 0x00000088, 0x000000b8, 0x000a0002, 0x00000001,
3938 0x000000c0, 0x000000d0, 0x000000e0, 0x00080002, 0x00000001, 0x000000e8, 0x000000f8, 0x00000108,
3939 0x00090002, 0x00000001, 0x00000110, 0x00000120, 0x65535f67, 0x7463656c, 0xab00726f, 0x00030001,
3940 0x00040001, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x41200000,
3941 0x41200000, 0x41200000, 0x41200000, 0x459c4800, 0x459c5000, 0x459c5800, 0x459c6000, 0x56695f67,
3942 0x00746365, 0x00020001, 0x00040001, 0x00000001, 0x00000000, 0x40800000, 0x40400000, 0x40000000,
3943 0x3f800000, 0x6576706f, 0x00317463, 0x00030001, 0x00040001, 0x00000001, 0x00000000, 0x00000000,
3944 0x80000000, 0xc00ccccd, 0x7f7fffff, 0x6576706f, 0x00327463, 0x00030001, 0x00040001, 0x00000001,
3945 0x00000000, 0x3f800000, 0x40000000, 0xc0400000, 0x40800000, 0x4d007874, 0x6f726369, 0x74666f73,
3946 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932,
3947 0x332e3235, 0x00313131, 0x007afffe, 0x54494c43, 0x0000003c, 0x00000000, 0x00000000, 0x00000000,
3948 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3949 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3950 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3951 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3952 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3953 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3954 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3955 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3956 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3957 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3958 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3ff00000, 0x00000000,
3959 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3960 0x3ff00000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3961 0x00000000, 0x00000000, 0x3ff00000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3962 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3ff00000, 0x0062fffe, 0x434c5846, 0x00000008,
3963 0x50000004, 0x00000002, 0x00000000, 0x00000002, 0x00000020, 0x00000001, 0x00000002, 0x0000002a,
3964 0x00000001, 0x0000002c, 0x00000000, 0x00000004, 0x00000000, 0x10400001, 0x00000001, 0x00000000,
3965 0x00000002, 0x00000025, 0x00000000, 0x00000007, 0x00000000, 0x10100001, 0x00000001, 0x00000000,
3966 0x00000007, 0x00000000, 0x00000000, 0x00000007, 0x00000004, 0xa0400001, 0x00000002, 0x00000000,
3967 0x00000002, 0x00000025, 0x00000000, 0x00000001, 0x0000002c, 0x00000000, 0x00000007, 0x00000000,
3968 0xa0400001, 0x00000002, 0x00000000, 0x00000007, 0x00000000, 0x00000000, 0x00000007, 0x00000004,
3969 0x00000000, 0x00000007, 0x00000008, 0x50000004, 0x00000002, 0x00000000, 0x00000002, 0x00000028,
3970 0x00000001, 0x00000007, 0x00000008, 0x00000001, 0x0000002c, 0x00000000, 0x00000004, 0x00000001,
3971 0xa0400001, 0x00000002, 0x00000001, 0x00000002, 0x0000002b, 0x00000002, 0x00000010, 0x00000001,
3972 0x00000002, 0x0000002b, 0x00000002, 0x0000001d, 0x00000000, 0x00000004, 0x00000002, 0xa0400001,
3973 0x00000002, 0x00000001, 0x00000002, 0x00000028, 0x00000002, 0x00000001, 0x00000001, 0x00000002,
3974 0x0000002b, 0x00000002, 0x00000000, 0x00000000, 0x00000004, 0x00000003, 0xf0f0f0f0, 0x0f0f0f0f,
3975 0x0000ffff, 0x00000000, 0x00000000, 0xffffffff, 0x00000022, 0x00000000, 0x000002cc, 0x46580200,
3976 0x0033fffe, 0x42415443, 0x0000001c, 0x00000097, 0x46580200, 0x00000002, 0x0000001c, 0x20000100,
3977 0x00000094, 0x00000044, 0x00000002, 0x00000001, 0x0000004c, 0x0000005c, 0x0000006c, 0x00010002,
3978 0x00000001, 0x00000074, 0x00000084, 0x6576706f, 0x00317463, 0x00030001, 0x00040001, 0x00000001,
3979 0x00000000, 0x00000000, 0x80000000, 0xc00ccccd, 0x7f7fffff, 0x6576706f, 0x00327463, 0x00030001,
3980 0x00040001, 0x00000001, 0x00000000, 0x3f800000, 0x40000000, 0xc0400000, 0x40800000, 0x4d007874,
3981 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970,
3982 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131, 0x001afffe, 0x54494c43, 0x0000000c, 0x00000000,
3983 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3984 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
3985 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0061fffe,
3986 0x434c5846, 0x00000006, 0xa0500001, 0x00000002, 0x00000000, 0x00000002, 0x00000002, 0x00000000,
3987 0x00000002, 0x00000004, 0x00000000, 0x00000007, 0x00000000, 0xa0500001, 0x00000002, 0x00000000,
3988 0x00000002, 0x00000000, 0x00000000, 0x00000002, 0x00000005, 0x00000000, 0x00000007, 0x00000001,
3989 0xa0400001, 0x00000002, 0x00000000, 0x00000007, 0x00000001, 0x00000000, 0x00000007, 0x00000000,
3990 0x00000000, 0x00000004, 0x00000000, 0x70e00001, 0x00000006, 0x00000000, 0x00000002, 0x00000002,
3991 0x00000000, 0x00000002, 0x00000002, 0x00000000, 0x00000002, 0x00000000, 0x00000000, 0x00000002,
3992 0x00000004, 0x00000000, 0x00000002, 0x00000005, 0x00000000, 0x00000002, 0x00000006, 0x00000000,
3993 0x00000004, 0x00000001, 0x70e00001, 0x00000008, 0x00000000, 0x00000002, 0x00000002, 0x00000000,
3994 0x00000002, 0x00000002, 0x00000000, 0x00000002, 0x00000002, 0x00000000, 0x00000002, 0x00000000,
3995 0x00000000, 0x00000002, 0x00000004, 0x00000000, 0x00000002, 0x00000004, 0x00000000, 0x00000002,
3996 0x00000005, 0x00000000, 0x00000002, 0x00000005, 0x00000000, 0x00000004, 0x00000002, 0x10000001,
3997 0x00000001, 0x00000000, 0x00000001, 0x00000008, 0x00000000, 0x00000004, 0x00000003, 0xf0f0f0f0,
3998 0x0f0f0f0f, 0x0000ffff, 0x00000000, 0x00000000, 0xffffffff, 0x00000021, 0x00000000, 0x00000248,
3999 0x46580200, 0x003efffe, 0x42415443, 0x0000001c, 0x000000c3, 0x46580200, 0x00000003, 0x0000001c,
4000 0x20000100, 0x000000c0, 0x00000058, 0x00000002, 0x00000001, 0x00000060, 0x00000070, 0x00000080,
4001 0x00010002, 0x00000001, 0x00000088, 0x00000098, 0x000000a8, 0x00020002, 0x00000001, 0x000000b0,
4002 0x00000070, 0x6576706f, 0x00317463, 0x00030001, 0x00040001, 0x00000001, 0x00000000, 0x00000000,
4003 0x80000000, 0xc00ccccd, 0x7f7fffff, 0x6576706f, 0x00327463, 0x00030001, 0x00040001, 0x00000001,
4004 0x00000000, 0x3f800000, 0x40000000, 0xc0400000, 0x40800000, 0x6576706f, 0x00337463, 0x00030001,
4005 0x00040001, 0x00000001, 0x00000000, 0x4d007874, 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820,
4006 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131,
4007 0x0022fffe, 0x54494c43, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
4008 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
4009 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
4010 0x00000000, 0x00000000, 0x00000000, 0x812dea11, 0x3d719799, 0x00000000, 0x00000000, 0x00000000,
4011 0x00000000, 0x00000000, 0x00000000, 0x002dfffe, 0x434c5846, 0x00000004, 0xa0500004, 0x00000002,
4012 0x00000000, 0x00000001, 0x0000000c, 0x00000000, 0x00000002, 0x00000004, 0x00000000, 0x00000007,
4013 0x00000000, 0x20400004, 0x00000002, 0x00000000, 0x00000007, 0x00000000, 0x00000000, 0x00000002,
4014 0x00000000, 0x00000000, 0x00000007, 0x00000004, 0x10100004, 0x00000001, 0x00000000, 0x00000002,
4015 0x00000008, 0x00000000, 0x00000007, 0x00000000, 0x20400004, 0x00000002, 0x00000000, 0x00000007,
4016 0x00000000, 0x00000000, 0x00000007, 0x00000004, 0x00000000, 0x00000004, 0x00000000, 0xf0f0f0f0,
4017 0x0f0f0f0f, 0x0000ffff, 0x00000000, 0x00000000, 0xffffffff, 0x00000020, 0x00000000, 0x000001f0,
4018 0x46580200, 0x0033fffe, 0x42415443, 0x0000001c, 0x00000097, 0x46580200, 0x00000002, 0x0000001c,
4019 0x20000100, 0x00000094, 0x00000044, 0x00000002, 0x00000001, 0x0000004c, 0x0000005c, 0x0000006c,
4020 0x00010002, 0x00000001, 0x00000074, 0x00000084, 0x6576706f, 0x00317463, 0x00030001, 0x00040001,
4021 0x00000001, 0x00000000, 0x00000000, 0x80000000, 0xc00ccccd, 0x7f7fffff, 0x6576706f, 0x00327463,
4022 0x00030001, 0x00040001, 0x00000001, 0x00000000, 0x3f800000, 0x40000000, 0xc0400000, 0x40800000,
4023 0x4d007874, 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320,
4024 0x656c6970, 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131, 0x001afffe, 0x54494c43, 0x0000000c,
4025 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
4026 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
4027 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
4028 0x002afffe, 0x434c5846, 0x00000004, 0x50000004, 0x00000002, 0x00000000, 0x00000002, 0x00000000,
4029 0x00000000, 0x00000002, 0x00000004, 0x00000000, 0x00000004, 0x00000001, 0x50000004, 0x00000002,
4030 0x00000000, 0x00000002, 0x00000004, 0x00000000, 0x00000002, 0x00000004, 0x00000000, 0x00000004,
4031 0x00000002, 0x10000001, 0x00000001, 0x00000000, 0x00000001, 0x00000008, 0x00000000, 0x00000004,
4032 0x00000000, 0x10000001, 0x00000001, 0x00000000, 0x00000001, 0x00000008, 0x00000000, 0x00000004,
4033 0x00000003, 0xf0f0f0f0, 0x0f0f0f0f, 0x0000ffff, 0x00000000, 0x00000000, 0xffffffff, 0x0000001f,
4034 0x00000000, 0x000001a8, 0x46580200, 0x0024fffe, 0x42415443, 0x0000001c, 0x0000005b, 0x46580200,
4035 0x00000001, 0x0000001c, 0x20000100, 0x00000058, 0x00000030, 0x00000002, 0x00000001, 0x00000038,
4036 0x00000048, 0x6576706f, 0x00317463, 0x00030001, 0x00040001, 0x00000001, 0x00000000, 0x00000000,
4037 0x80000000, 0xc00ccccd, 0x7f7fffff, 0x4d007874, 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820,
4038 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131,
4039 0x0012fffe, 0x54494c43, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
4040 0x00000000, 0x00000000, 0x00000000, 0x47ae147b, 0x3f847ae1, 0x00000000, 0x00000000, 0x00000000,
4041 0x00000000, 0x00000000, 0x00000000, 0x002ffffe, 0x434c5846, 0x00000005, 0x10300001, 0x00000001,
4042 0x00000000, 0x00000002, 0x00000000, 0x00000000, 0x00000007, 0x00000000, 0x10300001, 0x00000001,
4043 0x00000000, 0x00000002, 0x00000001, 0x00000000, 0x00000007, 0x00000001, 0x10300001, 0x00000001,
4044 0x00000000, 0x00000002, 0x00000002, 0x00000000, 0x00000007, 0x00000002, 0x10300001, 0x00000001,
4045 0x00000000, 0x00000002, 0x00000003, 0x00000000, 0x00000007, 0x00000003, 0xa0500004, 0x00000002,
4046 0x00000000, 0x00000001, 0x00000004, 0x00000000, 0x00000007, 0x00000000, 0x00000000, 0x00000004,
4047 0x00000000, 0xf0f0f0f0, 0x0f0f0f0f, 0x0000ffff, 0x00000000, 0x00000000, 0xffffffff, 0x0000001e,
4048 0x00000000, 0x000000dc, 0x46580200, 0x0024fffe, 0x42415443, 0x0000001c, 0x0000005b, 0x46580200,
4049 0x00000001, 0x0000001c, 0x20000100, 0x00000058, 0x00000030, 0x00000002, 0x00000001, 0x00000038,
4050 0x00000048, 0x6576706f, 0x00317463, 0x00030001, 0x00040001, 0x00000001, 0x00000000, 0x00000000,
4051 0x80000000, 0xc00ccccd, 0x7f7fffff, 0x4d007874, 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820,
4052 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131,
4053 0x0002fffe, 0x54494c43, 0x00000000, 0x000cfffe, 0x434c5846, 0x00000001, 0x10900004, 0x00000001,
4054 0x00000000, 0x00000002, 0x00000000, 0x00000000, 0x00000004, 0x00000000, 0xf0f0f0f0, 0x0f0f0f0f,
4055 0x0000ffff, 0x00000000, 0x00000000, 0xffffffff, 0x0000001d, 0x00000000, 0x000000dc, 0x46580200,
4056 0x0024fffe, 0x42415443, 0x0000001c, 0x0000005b, 0x46580200, 0x00000001, 0x0000001c, 0x20000100,
4057 0x00000058, 0x00000030, 0x00000002, 0x00000001, 0x00000038, 0x00000048, 0x6576706f, 0x00317463,
4058 0x00030001, 0x00040001, 0x00000001, 0x00000000, 0x00000000, 0x80000000, 0xc00ccccd, 0x7f7fffff,
4059 0x4d007874, 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320,
4060 0x656c6970, 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131, 0x0002fffe, 0x54494c43, 0x00000000,
4061 0x000cfffe, 0x434c5846, 0x00000001, 0x10800004, 0x00000001, 0x00000000, 0x00000002, 0x00000000,
4062 0x00000000, 0x00000004, 0x00000000, 0xf0f0f0f0, 0x0f0f0f0f, 0x0000ffff, 0x00000000, 0x00000000,
4063 0xffffffff, 0x0000001c, 0x00000000, 0x00000124, 0x46580200, 0x0033fffe, 0x42415443, 0x0000001c,
4064 0x00000097, 0x46580200, 0x00000002, 0x0000001c, 0x20000100, 0x00000094, 0x00000044, 0x00000002,
4065 0x00000001, 0x0000004c, 0x0000005c, 0x0000006c, 0x00010002, 0x00000001, 0x00000074, 0x00000084,
4066 0x6576706f, 0x00317463, 0x00030001, 0x00040001, 0x00000001, 0x00000000, 0x00000000, 0x80000000,
4067 0xc00ccccd, 0x7f7fffff, 0x6576706f, 0x00327463, 0x00030001, 0x00040001, 0x00000001, 0x00000000,
4068 0x3f800000, 0x40000000, 0xc0400000, 0x40800000, 0x4d007874, 0x6f726369, 0x74666f73, 0x29522820,
4069 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932, 0x332e3235,
4070 0x00313131, 0x0002fffe, 0x54494c43, 0x00000000, 0x000ffffe, 0x434c5846, 0x00000001, 0x20100004,
4071 0x00000002, 0x00000000, 0x00000002, 0x00000000, 0x00000000, 0x00000002, 0x00000004, 0x00000000,
4072 0x00000004, 0x00000000, 0xf0f0f0f0, 0x0f0f0f0f, 0x0000ffff, 0x00000000, 0x00000000, 0xffffffff,
4073 0x0000001b, 0x00000000, 0x00000124, 0x46580200, 0x0033fffe, 0x42415443, 0x0000001c, 0x00000097,
4074 0x46580200, 0x00000002, 0x0000001c, 0x20000100, 0x00000094, 0x00000044, 0x00000002, 0x00000001,
4075 0x0000004c, 0x0000005c, 0x0000006c, 0x00010002, 0x00000001, 0x00000074, 0x00000084, 0x6576706f,
4076 0x00317463, 0x00030001, 0x00040001, 0x00000001, 0x00000000, 0x00000000, 0x80000000, 0xc00ccccd,
4077 0x7f7fffff, 0x6576706f, 0x00327463, 0x00030001, 0x00040001, 0x00000001, 0x00000000, 0x3f800000,
4078 0x40000000, 0xc0400000, 0x40800000, 0x4d007874, 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820,
4079 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131,
4080 0x0002fffe, 0x54494c43, 0x00000000, 0x000ffffe, 0x434c5846, 0x00000001, 0x20000004, 0x00000002,
4081 0x00000000, 0x00000002, 0x00000000, 0x00000000, 0x00000002, 0x00000004, 0x00000000, 0x00000004,
4082 0x00000000, 0xf0f0f0f0, 0x0f0f0f0f, 0x0000ffff, 0x00000000, 0x00000000, 0xffffffff, 0x0000001a,
4083 0x00000000, 0x000000dc, 0x46580200, 0x0024fffe, 0x42415443, 0x0000001c, 0x0000005b, 0x46580200,
4084 0x00000001, 0x0000001c, 0x20000100, 0x00000058, 0x00000030, 0x00000002, 0x00000001, 0x00000038,
4085 0x00000048, 0x6576706f, 0x00317463, 0x00030001, 0x00040001, 0x00000001, 0x00000000, 0x00000000,
4086 0x80000000, 0xc00ccccd, 0x7f7fffff, 0x4d007874, 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820,
4087 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131,
4088 0x0002fffe, 0x54494c43, 0x00000000, 0x000cfffe, 0x434c5846, 0x00000001, 0x10400004, 0x00000001,
4089 0x00000000, 0x00000002, 0x00000000, 0x00000000, 0x00000004, 0x00000000, 0xf0f0f0f0, 0x0f0f0f0f,
4090 0x0000ffff, 0x00000000, 0x00000000, 0xffffffff, 0x00000019, 0x00000000, 0x0000013c, 0x46580200,
4091 0x0024fffe, 0x42415443, 0x0000001c, 0x0000005b, 0x46580200, 0x00000001, 0x0000001c, 0x20000100,
4092 0x00000058, 0x00000030, 0x00000002, 0x00000001, 0x00000038, 0x00000048, 0x6576706f, 0x00317463,
4093 0x00030001, 0x00040001, 0x00000001, 0x00000000, 0x00000000, 0x80000000, 0xc00ccccd, 0x7f7fffff,
4094 0x4d007874, 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320,
4095 0x656c6970, 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131, 0x0002fffe, 0x54494c43, 0x00000000,
4096 0x0024fffe, 0x434c5846, 0x00000004, 0x10300001, 0x00000001, 0x00000000, 0x00000002, 0x00000000,
4097 0x00000000, 0x00000004, 0x00000000, 0x10300001, 0x00000001, 0x00000000, 0x00000002, 0x00000001,
4098 0x00000000, 0x00000004, 0x00000001, 0x10300001, 0x00000001, 0x00000000, 0x00000002, 0x00000002,
4099 0x00000000, 0x00000004, 0x00000002, 0x10300001, 0x00000001, 0x00000000, 0x00000002, 0x00000003,
4100 0x00000000, 0x00000004, 0x00000003, 0xf0f0f0f0, 0x0f0f0f0f, 0x0000ffff, 0x00000000, 0x00000000,
4101 0xffffffff, 0x00000018, 0x00000000, 0x000000dc, 0x46580200, 0x0024fffe, 0x42415443, 0x0000001c,
4102 0x0000005b, 0x46580200, 0x00000001, 0x0000001c, 0x20000100, 0x00000058, 0x00000030, 0x00000002,
4103 0x00000001, 0x00000038, 0x00000048, 0x6576706f, 0x00317463, 0x00030001, 0x00040001, 0x00000001,
4104 0x00000000, 0x00000000, 0x80000000, 0xc00ccccd, 0x7f7fffff, 0x4d007874, 0x6f726369, 0x74666f73,
4105 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932,
4106 0x332e3235, 0x00313131, 0x0002fffe, 0x54494c43, 0x00000000, 0x000cfffe, 0x434c5846, 0x00000001,
4107 0x10100004, 0x00000001, 0x00000000, 0x00000002, 0x00000000, 0x00000000, 0x00000004, 0x00000000,
4108 0xf0f0f0f0, 0x0f0f0f0f, 0x0000ffff, 0x00000000, 0x00000000, 0xffffffff, 0x00000017, 0x00000000,
4109 0x00000124, 0x46580200, 0x0033fffe, 0x42415443, 0x0000001c, 0x00000097, 0x46580200, 0x00000002,
4110 0x0000001c, 0x20000100, 0x00000094, 0x00000044, 0x00000002, 0x00000001, 0x0000004c, 0x0000005c,
4111 0x0000006c, 0x00010002, 0x00000001, 0x00000074, 0x00000084, 0x6576706f, 0x00317463, 0x00030001,
4112 0x00040001, 0x00000001, 0x00000000, 0x00000000, 0x80000000, 0xc00ccccd, 0x7f7fffff, 0x6576706f,
4113 0x00327463, 0x00030001, 0x00040001, 0x00000001, 0x00000000, 0x3f800000, 0x40000000, 0xc0400000,
4114 0x40800000, 0x4d007874, 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c, 0x72656461,
4115 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131, 0x0002fffe, 0x54494c43,
4116 0x00000000, 0x000ffffe, 0x434c5846, 0x00000001, 0x20300004, 0x00000002, 0x00000000, 0x00000002,
4117 0x00000000, 0x00000000, 0x00000002, 0x00000004, 0x00000000, 0x00000004, 0x00000000, 0xf0f0f0f0,
4118 0x0f0f0f0f, 0x0000ffff, 0x00000000, 0x00000000, 0xffffffff, 0x00000016, 0x00000000, 0x00000124,
4119 0x46580200, 0x0033fffe, 0x42415443, 0x0000001c, 0x00000097, 0x46580200, 0x00000002, 0x0000001c,
4120 0x20000100, 0x00000094, 0x00000044, 0x00000002, 0x00000001, 0x0000004c, 0x0000005c, 0x0000006c,
4121 0x00010002, 0x00000001, 0x00000074, 0x00000084, 0x6576706f, 0x00317463, 0x00030001, 0x00040001,
4122 0x00000001, 0x00000000, 0x00000000, 0x80000000, 0xc00ccccd, 0x7f7fffff, 0x6576706f, 0x00327463,
4123 0x00030001, 0x00040001, 0x00000001, 0x00000000, 0x3f800000, 0x40000000, 0xc0400000, 0x40800000,
4124 0x4d007874, 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320,
4125 0x656c6970, 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131, 0x0002fffe, 0x54494c43, 0x00000000,
4126 0x000ffffe, 0x434c5846, 0x00000001, 0x20200004, 0x00000002, 0x00000000, 0x00000002, 0x00000000,
4127 0x00000000, 0x00000002, 0x00000004, 0x00000000, 0x00000004, 0x00000000, 0xf0f0f0f0, 0x0f0f0f0f,
4128 0x0000ffff, 0x00000000, 0x00000000, 0xffffffff, 0x00000015, 0x00000000, 0x00000124, 0x46580200,
4129 0x0033fffe, 0x42415443, 0x0000001c, 0x00000097, 0x46580200, 0x00000002, 0x0000001c, 0x20000100,
4130 0x00000094, 0x00000044, 0x00000002, 0x00000001, 0x0000004c, 0x0000005c, 0x0000006c, 0x00010002,
4131 0x00000001, 0x00000074, 0x00000084, 0x6576706f, 0x00317463, 0x00030001, 0x00040001, 0x00000001,
4132 0x00000000, 0x00000000, 0x80000000, 0xc00ccccd, 0x7f7fffff, 0x6576706f, 0x00327463, 0x00030001,
4133 0x00040001, 0x00000001, 0x00000000, 0x3f800000, 0x40000000, 0xc0400000, 0x40800000, 0x4d007874,
4134 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970,
4135 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131, 0x0002fffe, 0x54494c43, 0x00000000, 0x000ffffe,
4136 0x434c5846, 0x00000001, 0x20400004, 0x00000002, 0x00000000, 0x00000002, 0x00000000, 0x00000000,
4137 0x00000002, 0x00000004, 0x00000000, 0x00000004, 0x00000000, 0xf0f0f0f0, 0x0f0f0f0f, 0x0000ffff,
4138 0x00000000, 0x00000000, 0xffffffff, 0x00000014, 0x00000000, 0x00000124, 0x46580200, 0x0033fffe,
4139 0x42415443, 0x0000001c, 0x00000097, 0x46580200, 0x00000002, 0x0000001c, 0x20000100, 0x00000094,
4140 0x00000044, 0x00000002, 0x00000001, 0x0000004c, 0x0000005c, 0x0000006c, 0x00010002, 0x00000001,
4141 0x00000074, 0x00000084, 0x6576706f, 0x00317463, 0x00030001, 0x00040001, 0x00000001, 0x00000000,
4142 0x00000000, 0x80000000, 0xc00ccccd, 0x7f7fffff, 0x6576706f, 0x00327463, 0x00030001, 0x00040001,
4143 0x00000001, 0x00000000, 0x3f800000, 0x40000000, 0xc0400000, 0x40800000, 0x4d007874, 0x6f726369,
4144 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072,
4145 0x392e3932, 0x332e3235, 0x00313131, 0x0002fffe, 0x54494c43, 0x00000000, 0x000ffffe, 0x434c5846,
4146 0x00000001, 0x20500004, 0x00000002, 0x00000000, 0x00000002, 0x00000000, 0x00000000, 0x00000002,
4147 0x00000004, 0x00000000, 0x00000004, 0x00000000, 0xf0f0f0f0, 0x0f0f0f0f, 0x0000ffff, 0x00000000,
4148 0x00000000, 0xffffffff, 0x00000013, 0x00000000, 0x0000013c, 0x46580200, 0x0024fffe, 0x42415443,
4149 0x0000001c, 0x0000005b, 0x46580200, 0x00000001, 0x0000001c, 0x20000100, 0x00000058, 0x00000030,
4150 0x00000002, 0x00000001, 0x00000038, 0x00000048, 0x6576706f, 0x00317463, 0x00030001, 0x00040001,
4151 0x00000001, 0x00000000, 0x00000000, 0x80000000, 0xc00ccccd, 0x7f7fffff, 0x4d007874, 0x6f726369,
4152 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072,
4153 0x392e3932, 0x332e3235, 0x00313131, 0x0002fffe, 0x54494c43, 0x00000000, 0x0024fffe, 0x434c5846,
4154 0x00000004, 0x10700001, 0x00000001, 0x00000000, 0x00000002, 0x00000000, 0x00000000, 0x00000004,
4155 0x00000000, 0x10700001, 0x00000001, 0x00000000, 0x00000002, 0x00000001, 0x00000000, 0x00000004,
4156 0x00000001, 0x10700001, 0x00000001, 0x00000000, 0x00000002, 0x00000002, 0x00000000, 0x00000004,
4157 0x00000002, 0x10700001, 0x00000001, 0x00000000, 0x00000002, 0x00000003, 0x00000000, 0x00000004,
4158 0x00000003, 0xf0f0f0f0, 0x0f0f0f0f, 0x0000ffff, 0x00000000, 0x00000000, 0xffffffff, 0x00000012,
4159 0x00000000, 0x0000013c, 0x46580200, 0x0024fffe, 0x42415443, 0x0000001c, 0x0000005b, 0x46580200,
4160 0x00000001, 0x0000001c, 0x20000100, 0x00000058, 0x00000030, 0x00000002, 0x00000001, 0x00000038,
4161 0x00000048, 0x6576706f, 0x00317463, 0x00030001, 0x00040001, 0x00000001, 0x00000000, 0x00000000,
4162 0x80000000, 0xc00ccccd, 0x7f7fffff, 0x4d007874, 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820,
4163 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131,
4164 0x0002fffe, 0x54494c43, 0x00000000, 0x0024fffe, 0x434c5846, 0x00000004, 0x10300001, 0x00000001,
4165 0x00000000, 0x00000002, 0x00000000, 0x00000000, 0x00000004, 0x00000000, 0x10300001, 0x00000001,
4166 0x00000000, 0x00000002, 0x00000001, 0x00000000, 0x00000004, 0x00000001, 0x10300001, 0x00000001,
4167 0x00000000, 0x00000002, 0x00000002, 0x00000000, 0x00000004, 0x00000002, 0x10300001, 0x00000001,
4168 0x00000000, 0x00000002, 0x00000003, 0x00000000, 0x00000004, 0x00000003, 0xf0f0f0f0, 0x0f0f0f0f,
4169 0x0000ffff, 0x00000000, 0x00000000, 0xffffffff, 0x00000001, 0x00000002, 0x00000134, 0x00000008,
4170 0x615f7370, 0x00007272, 0x46580200, 0x0024fffe, 0x42415443, 0x0000001c, 0x0000005b, 0x46580200,
4171 0x00000001, 0x0000001c, 0x00000100, 0x00000058, 0x00000030, 0x00000002, 0x00000001, 0x00000038,
4172 0x00000048, 0x56695f67, 0x00746365, 0x00020001, 0x00040001, 0x00000001, 0x00000000, 0x40800000,
4173 0x40400000, 0x40000000, 0x3f800000, 0x4d007874, 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820,
4174 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131,
4175 0x0012fffe, 0x54494c43, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
4176 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xbff00000, 0x00000000, 0x00000000, 0x00000000,
4177 0x00000000, 0x00000000, 0x00000000, 0x000ffffe, 0x434c5846, 0x00000001, 0xa0400001, 0x00000002,
4178 0x00000000, 0x00000002, 0x00000003, 0x00000000, 0x00000001, 0x00000004, 0x00000000, 0x00000004,
4179 0x00000000, 0xf0f0f0f0, 0x0f0f0f0f, 0x0000ffff, 0x00000000, 0x00000000, 0xffffffff, 0x00000000,
4180 0x00000002, 0x00000134, 0x00000008, 0x615f7376, 0x00327272, 0x46580200, 0x0024fffe, 0x42415443,
4181 0x0000001c, 0x0000005b, 0x46580200, 0x00000001, 0x0000001c, 0x00000100, 0x00000058, 0x00000030,
4182 0x00000002, 0x00000001, 0x00000038, 0x00000048, 0x56695f67, 0x00746365, 0x00020001, 0x00040001,
4183 0x00000001, 0x00000000, 0x40800000, 0x40400000, 0x40000000, 0x3f800000, 0x4d007874, 0x6f726369,
4184 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072,
4185 0x392e3932, 0x332e3235, 0x00313131, 0x0012fffe, 0x54494c43, 0x00000008, 0x00000000, 0x00000000,
4186 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xbff00000,
4187 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000ffffe, 0x434c5846,
4188 0x00000001, 0xa0400001, 0x00000002, 0x00000000, 0x00000002, 0x00000003, 0x00000000, 0x00000001,
4189 0x00000004, 0x00000000, 0x00000004, 0x00000000, 0xf0f0f0f0, 0x0f0f0f0f, 0x0000ffff, 0xffffffff,
4190 0x0000001f, 0x00000001, 0x00000001, 0x00000000, 0x000000e4, 0x46580200, 0x0026fffe, 0x42415443,
4191 0x0000001c, 0x00000063, 0x46580200, 0x00000001, 0x0000001c, 0x20000100, 0x00000060, 0x00000030,
4192 0x00000002, 0x00000001, 0x00000040, 0x00000050, 0x74636576, 0x6d61735f, 0x72656c70, 0xababab00,
4193 0x00030001, 0x00040001, 0x00000001, 0x00000000, 0x3f800000, 0x40000000, 0x40400000, 0x40800000,
4194 0x4d007874, 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320,
4195 0x656c6970, 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131, 0x0002fffe, 0x54494c43, 0x00000000,
4196 0x000cfffe, 0x434c5846, 0x00000001, 0x10000001, 0x00000001, 0x00000000, 0x00000002, 0x00000001,
4197 0x00000000, 0x00000004, 0x00000000, 0xf0f0f0f0, 0x0f0f0f0f, 0x0000ffff, 0xffffffff, 0x0000001f,
4198 0x00000000, 0x00000001, 0x00000000, 0x000000e4, 0x46580200, 0x0026fffe, 0x42415443, 0x0000001c,
4199 0x00000063, 0x46580200, 0x00000001, 0x0000001c, 0x20000100, 0x00000060, 0x00000030, 0x00000002,
4200 0x00000001, 0x00000040, 0x00000050, 0x74636576, 0x6d61735f, 0x72656c70, 0xababab00, 0x00030001,
4201 0x00040001, 0x00000001, 0x00000000, 0x3f800000, 0x40000000, 0x40400000, 0x40800000, 0x4d007874,
4202 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970,
4203 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131, 0x0002fffe, 0x54494c43, 0x00000000, 0x000cfffe,
4204 0x434c5846, 0x00000001, 0x10000001, 0x00000001, 0x00000000, 0x00000002, 0x00000000, 0x00000000,
4205 0x00000004, 0x00000000, 0xf0f0f0f0, 0x0f0f0f0f, 0x0000ffff, 0xffffffff, 0x0000001e, 0x00000000,
4206 0x00000002, 0x00000000, 0x000000f0, 0x46580200, 0x0026fffe, 0x42415443, 0x0000001c, 0x00000063,
4207 0x46580200, 0x00000001, 0x0000001c, 0x20000100, 0x00000060, 0x00000030, 0x00000002, 0x00000001,
4208 0x00000040, 0x00000050, 0x74636576, 0x6d61735f, 0x72656c70, 0xababab00, 0x00030001, 0x00040001,
4209 0x00000001, 0x00000000, 0x3f800000, 0x40000000, 0x40400000, 0x40800000, 0x4d007874, 0x6f726369,
4210 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072,
4211 0x392e3932, 0x332e3235, 0x00313131, 0x0002fffe, 0x54494c43, 0x00000000, 0x000ffffe, 0x434c5846,
4212 0x00000001, 0xa0400001, 0x00000002, 0x00000000, 0x00000002, 0x00000001, 0x00000000, 0x00000002,
4213 0x00000000, 0x00000000, 0x00000004, 0x00000000, 0xf0f0f0f0, 0x0f0f0f0f, 0x0000ffff, 0xffffffff,
4214 0x0000001e, 0x00000000, 0x00000001, 0x00000000, 0x000000dc, 0x46580200, 0x0024fffe, 0x42415443,
4215 0x0000001c, 0x0000005b, 0x46580200, 0x00000001, 0x0000001c, 0x20000100, 0x00000058, 0x00000030,
4216 0x00000002, 0x00000001, 0x00000038, 0x00000048, 0x56695f67, 0x00746365, 0x00020001, 0x00040001,
4217 0x00000001, 0x00000000, 0x40800000, 0x40400000, 0x40000000, 0x3f800000, 0x4d007874, 0x6f726369,
4218 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072,
4219 0x392e3932, 0x332e3235, 0x00313131, 0x0002fffe, 0x54494c43, 0x00000000, 0x000cfffe, 0x434c5846,
4220 0x00000001, 0x10000001, 0x00000001, 0x00000000, 0x00000002, 0x00000001, 0x00000000, 0x00000004,
4221 0x00000000, 0xf0f0f0f0, 0x0f0f0f0f, 0x0000ffff, 0xffffffff, 0x0000001e, 0x00000000, 0x00000000,
4222 0x00000001, 0x00000005, 0x31786574, 0x00000000,
4224 #define TEST_EFFECT_PRESHADER_VSHADER_POS 2991
4225 #define TEST_EFFECT_PRESHADER_VSHADER_LEN 13
4227 #define test_effect_preshader_compare_shader_bytecode(a, b, c, d) \
4228 test_effect_preshader_compare_shader_bytecode_(__LINE__, a, b, c, d)
4229 static void test_effect_preshader_compare_shader_bytecode_(unsigned int line,
4230 const DWORD *bytecode, unsigned int bytecode_size, int expected_shader_index, BOOL todo)
4232 unsigned int i = 0;
4234 todo_wine_if(todo)
4235 ok_(__FILE__, line)(!!bytecode, "NULL shader bytecode.\n");
4237 if (!bytecode)
4238 return;
4240 while (bytecode[i++] != 0x0000ffff)
4243 if (!bytecode_size)
4244 bytecode_size = i * sizeof(*bytecode);
4245 else
4246 ok(i * sizeof(*bytecode) == bytecode_size, "Unexpected byte code size %u.\n", bytecode_size);
4248 todo_wine_if(todo)
4249 ok_(__FILE__, line)(!memcmp(bytecode, &test_effect_preshader_effect_blob[TEST_EFFECT_PRESHADER_VSHADER_POS
4250 + expected_shader_index * TEST_EFFECT_PRESHADER_VSHADER_LEN], bytecode_size),
4251 "Incorrect shader selected.\n");
4254 #define test_effect_preshader_compare_shader(a, b, c) \
4255 test_effect_preshader_compare_shader_(__LINE__, a, b, c)
4256 static void test_effect_preshader_compare_shader_(unsigned int line, IDirect3DDevice9 *device,
4257 int expected_shader_index, BOOL todo)
4259 IDirect3DVertexShader9 *vshader;
4260 void *byte_code;
4261 unsigned int byte_code_size;
4262 HRESULT hr;
4264 hr = IDirect3DDevice9_GetVertexShader(device, &vshader);
4265 ok_(__FILE__, line)(hr == D3D_OK, "IDirect3DDevice9_GetVertexShader result %#x.\n", hr);
4267 todo_wine_if(todo)
4268 ok_(__FILE__, line)(!!vshader, "Got NULL vshader.\n");
4269 if (!vshader)
4270 return;
4272 hr = IDirect3DVertexShader9_GetFunction(vshader, NULL, &byte_code_size);
4273 ok_(__FILE__, line)(hr == D3D_OK, "IDirect3DVertexShader9_GetFunction %#x.\n", hr);
4274 ok_(__FILE__, line)(byte_code_size > 1, "Got unexpected byte code size %u.\n", byte_code_size);
4276 byte_code = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, byte_code_size);
4277 hr = IDirect3DVertexShader9_GetFunction(vshader, byte_code, &byte_code_size);
4278 ok_(__FILE__, line)(hr == D3D_OK, "Got result %#x.\n", hr);
4280 test_effect_preshader_compare_shader_bytecode_(line, byte_code,
4281 byte_code_size, expected_shader_index, todo);
4283 HeapFree(GetProcessHeap(), 0, byte_code);
4284 IDirect3DVertexShader9_Release(vshader);
4287 static const struct
4289 const char *comment;
4290 BOOL todo[4];
4291 unsigned int result[4];
4292 unsigned int ulps;
4294 test_effect_preshader_op_expected[] =
4296 {"1 / op", {FALSE, FALSE, FALSE, FALSE}, {0x7f800000, 0xff800000, 0xbee8ba2e, 0x00200000}},
4297 {"rsq", {FALSE, FALSE, FALSE, FALSE}, {0x7f800000, 0x7f800000, 0x3f2c985c, 0x1f800001}, 1},
4298 {"mul", {FALSE, FALSE, FALSE, FALSE}, {0x00000000, 0x80000000, 0x40d33334, 0x7f800000}},
4299 {"add", {FALSE, FALSE, FALSE, FALSE}, {0x3f800000, 0x40000000, 0xc0a66666, 0x7f7fffff}},
4300 {"lt", {FALSE, FALSE, FALSE, FALSE}, {0x3f800000, 0x3f800000, 0x00000000, 0x00000000}},
4301 {"ge", {FALSE, FALSE, FALSE, FALSE}, {0x00000000, 0x00000000, 0x3f800000, 0x3f800000}},
4302 {"neg", {FALSE, FALSE, FALSE, FALSE}, {0x80000000, 0x00000000, 0x400ccccd, 0xff7fffff}},
4303 {"rcp", {FALSE, FALSE, FALSE, FALSE}, {0x7f800000, 0xff800000, 0xbee8ba2e, 0x00200000}},
4305 {"frac", {FALSE, FALSE, FALSE, FALSE}, {0x00000000, 0x00000000, 0x3f4ccccc, 0x00000000}},
4306 {"min", {FALSE, FALSE, FALSE, FALSE}, {0x00000000, 0x80000000, 0xc0400000, 0x40800000}},
4307 {"max", {FALSE, FALSE, FALSE, FALSE}, {0x3f800000, 0x40000000, 0xc00ccccd, 0x7f7fffff}},
4308 #if __x86_64__
4309 {"sin", {FALSE, FALSE, FALSE, FALSE}, {0x00000000, 0x80000000, 0xbf4ef99e, 0xbf0599b3}},
4310 {"cos", {FALSE, FALSE, FALSE, FALSE}, {0x3f800000, 0x3f800000, 0xbf16a803, 0x3f5a5f96}},
4311 #else
4312 {"sin", {FALSE, FALSE, FALSE, TRUE}, {0x00000000, 0x80000000, 0xbf4ef99e, 0x3f792dc4}},
4313 {"cos", {FALSE, FALSE, FALSE, TRUE}, {0x3f800000, 0x3f800000, 0xbf16a803, 0xbe6acefc}},
4314 #endif
4315 {"den mul",{FALSE, FALSE, FALSE, FALSE}, {0x7f800000, 0xff800000, 0xbb94f209, 0x000051ec}},
4316 {"dot", {FALSE, FALSE, FALSE, FALSE}, {0x00000000, 0x7f800000, 0x41f00000, 0x00000000}},
4317 {"prec", {FALSE, FALSE, TRUE, FALSE}, {0x2b8cbccc, 0x2c0cbccc, 0xac531800, 0x00000000}},
4319 {"dotswiz", {FALSE, FALSE, FALSE, FALSE}, {0xc00ccccd, 0xc0d33334, 0xc10ccccd, 0}},
4320 {"reladdr", {FALSE, FALSE, FALSE, FALSE}, {0xc00ccccd, 0x3f800000, 0, 0x41200000}},
4321 {"reladdr2", {FALSE, FALSE, FALSE, FALSE}, {0, 0, 0x447ac000, 0x40000000}},
4324 enum expected_state_update
4326 EXPECTED_STATE_ZERO,
4327 EXPECTED_STATE_UPDATED,
4328 EXPECTED_STATE_ANYTHING
4331 #define test_effect_preshader_op_results(a, b, c) test_effect_preshader_op_results_(__LINE__, a, b, c)
4332 static void test_effect_preshader_op_results_(unsigned int line, IDirect3DDevice9 *device,
4333 const enum expected_state_update *expected_state, const char *updated_param)
4335 static const D3DCOLORVALUE black = {0.0f};
4336 unsigned int i, j;
4337 D3DLIGHT9 light;
4338 const float *v;
4339 HRESULT hr;
4341 for (i = 0; i < ARRAY_SIZE(test_effect_preshader_op_expected); ++i)
4343 hr = IDirect3DDevice9_GetLight(device, i % 8, &light);
4344 ok_(__FILE__, line)(hr == D3D_OK, "Got result %#x.\n", hr);
4346 v = i < 8 ? &light.Diffuse.r : (i < 16 ? &light.Ambient.r : &light.Specular.r);
4347 if (!expected_state || expected_state[i] == EXPECTED_STATE_UPDATED)
4349 for (j = 0; j < 4; ++j)
4351 todo_wine_if(test_effect_preshader_op_expected[i].todo[j])
4352 ok_(__FILE__, line)(compare_float(v[j],
4353 ((const float *)test_effect_preshader_op_expected[i].result)[j],
4354 test_effect_preshader_op_expected[i].ulps),
4355 "Operation %s, component %u, expected %#x, got %#x (%g).\n",
4356 test_effect_preshader_op_expected[i].comment, j,
4357 test_effect_preshader_op_expected[i].result[j],
4358 ((const unsigned int *)v)[j], v[j]);
4361 else if (expected_state[i] == EXPECTED_STATE_ZERO)
4363 ok_(__FILE__, line)(!memcmp(v, &black, sizeof(black)),
4364 "Parameter %s, test %d, operation %s, state updated unexpectedly.\n",
4365 updated_param, i, test_effect_preshader_op_expected[i].comment);
4370 static const D3DXVECTOR4 fvect_filler = {-9999.0f, -9999.0f, -9999.0f, -9999.0f};
4372 static void test_effect_preshader_clear_vconsts(IDirect3DDevice9 *device)
4374 unsigned int i;
4375 HRESULT hr;
4377 for (i = 0; i < 256; ++i)
4379 hr = IDirect3DDevice9_SetVertexShaderConstantF(device, i, &fvect_filler.x, 1);
4380 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4384 static const D3DXVECTOR4 test_effect_preshader_fvect_v[] =
4386 {0.0f, 0.0f, 0.0f, 0.0f},
4387 {0.0f, 0.0f, 0.0f, 0.0f},
4388 {0.0f, 0.0f, 0.0f, 0.0f},
4389 {1.0f, 2.0f, 3.0f, 0.0f},
4390 {4.0f, 0.0f, 0.0f, 0.0f},
4391 {5.0f, 6.0f, 7.0f, 8.0f},
4392 {1.0f, 2.0f, 3.0f, 0.0f},
4393 {4.0f, 0.0f, 0.0f, 0.0f},
4394 {5.0f, 6.0f, 7.0f, 8.0f},
4395 {9.0f, 10.0f, 11.0f, 0.0f},
4396 {12.0f, 0.0f, 0.0f, 0.0f},
4397 {13.0f, 14.0f, 15.0f, 16.0f},
4398 {11.0f, 12.0f, 13.0f, 0.0f},
4399 {21.0f, 22.0f, 23.0f, 0.0f},
4400 {31.0f, 32.0f, 33.0f, 0.0f},
4401 {41.0f, 42.0f, 43.0f, 0.0f},
4402 {11.0f, 21.0f, 31.0f, 0.0f},
4403 {12.0f, 22.0f, 32.0f, 0.0f},
4404 {13.0f, 23.0f, 33.0f, 0.0f},
4405 {14.0f, 24.0f, 34.0f, 0.0f},
4406 {11.0f, 12.0f, 13.0f, 14.0f},
4407 {21.0f, 22.0f, 23.0f, 24.0f},
4408 {31.0f, 32.0f, 33.0f, 34.0f},
4409 {11.0f, 21.0f, 31.0f, 41.0f},
4410 {12.0f, 22.0f, 32.0f, 42.0f},
4411 {13.0f, 23.0f, 33.0f, 43.0f},
4412 {9.0f, 10.0f, 11.0f, 0.0f},
4413 {12.0f, 0.0f, 0.0f, 0.0f},
4414 {13.0f, 14.0f, 15.0f, 16.0f},
4415 {92.0f, 0.0f, 0.0f, 0.0f},
4416 {93.0f, 0.0f, 0.0f, 0.0f},
4417 {0.0f, 0.0f, 0.0f, 0.0f},
4418 {91.0f, 0.0f, 0.0f, 0.0f},
4419 {4.0f, 5.0f, 6.0f, 7.0f},
4421 #define TEST_EFFECT_BITMASK_BLOCK_SIZE (sizeof(unsigned int) * 8)
4423 #define test_effect_preshader_compare_vconsts(a, b, c) \
4424 test_effect_preshader_compare_vconsts_(__LINE__, a, b, c)
4425 static void test_effect_preshader_compare_vconsts_(unsigned int line, IDirect3DDevice9 *device,
4426 const unsigned int *const_updated_mask, const char *updated_param)
4428 HRESULT hr;
4429 unsigned int i;
4430 D3DXVECTOR4 fdata[ARRAY_SIZE(test_effect_preshader_fvect_v)];
4432 hr = IDirect3DDevice9_GetVertexShaderConstantF(device, 0, &fdata[0].x,
4433 ARRAY_SIZE(test_effect_preshader_fvect_v));
4434 ok_(__FILE__, line)(hr == D3D_OK, "Got result %#x.\n", hr);
4436 if (!const_updated_mask)
4438 ok_(__FILE__, line)(!memcmp(fdata, test_effect_preshader_fvect_v, sizeof(test_effect_preshader_fvect_v)),
4439 "Vertex shader float constants do not match.\n");
4441 else
4443 for (i = 0; i < ARRAY_SIZE(test_effect_preshader_fvect_v); ++i)
4445 if (const_updated_mask[i / TEST_EFFECT_BITMASK_BLOCK_SIZE]
4446 & (1u << (i % TEST_EFFECT_BITMASK_BLOCK_SIZE)))
4448 ok_(__FILE__, line)(!memcmp(&fdata[i], &test_effect_preshader_fvect_v[i], sizeof(fdata[i])),
4449 "Vertex shader float constants do not match, expected (%g, %g, %g, %g), "
4450 "got (%g, %g, %g, %g), parameter %s.\n",
4451 test_effect_preshader_fvect_v[i].x, test_effect_preshader_fvect_v[i].y,
4452 test_effect_preshader_fvect_v[i].z, test_effect_preshader_fvect_v[i].w,
4453 fdata[i].x, fdata[i].y, fdata[i].z, fdata[i].w, updated_param);
4455 else
4457 ok_(__FILE__, line)(!memcmp(&fdata[i], &fvect_filler, sizeof(fdata[i])),
4458 "Vertex shader float constants updated unexpectedly, parameter %s.\n", updated_param);
4463 for (i = ARRAY_SIZE(test_effect_preshader_fvect_v); i < 256; ++i)
4465 hr = IDirect3DDevice9_GetVertexShaderConstantF(device, i, &fdata[0].x, 1);
4466 ok_(__FILE__, line)(hr == D3D_OK, "Got result %#x.\n", hr);
4467 ok_(__FILE__, line)(!memcmp(fdata, &fvect_filler, sizeof(fvect_filler)),
4468 "Vertex shader float constants do not match.\n");
4472 static const BOOL test_effect_preshader_bconsts[] =
4474 TRUE, FALSE, TRUE, FALSE, TRUE, TRUE
4477 static void test_effect_preshader_clear_pbool_consts(IDirect3DDevice9 *device)
4479 BOOL bval;
4480 unsigned int i;
4481 HRESULT hr;
4483 for (i = 0; i < 16; ++i)
4485 bval = i < ARRAY_SIZE(test_effect_preshader_bconsts) ? !test_effect_preshader_bconsts[i] : FALSE;
4486 hr = IDirect3DDevice9_SetPixelShaderConstantB(device, i, &bval, 1);
4487 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4491 #define test_effect_preshader_compare_pbool_consts(a, b, c) \
4492 test_effect_preshader_compare_pbool_consts_(__LINE__, a, b, c)
4493 static void test_effect_preshader_compare_pbool_consts_(unsigned int line, IDirect3DDevice9 *device,
4494 const unsigned int *const_updated_mask, const char *updated_param)
4496 unsigned int i;
4497 BOOL bdata[16];
4498 HRESULT hr;
4500 hr = IDirect3DDevice9_GetPixelShaderConstantB(device, 0, bdata, ARRAY_SIZE(bdata));
4501 ok_(__FILE__, line)(hr == D3D_OK, "Got result %#x.\n", hr);
4503 if (!const_updated_mask)
4505 for (i = 0; i < ARRAY_SIZE(test_effect_preshader_bconsts); ++i)
4507 /* The negation on both sides is actually needed, sometimes you
4508 * get 0xffffffff instead of 1 on native. */
4509 ok_(__FILE__, line)(!bdata[i] == !test_effect_preshader_bconsts[i],
4510 "Pixel shader boolean constants do not match, expected %#x, got %#x, i %u.\n",
4511 test_effect_preshader_bconsts[i], bdata[i], i);
4514 else
4516 for (i = 0; i < ARRAY_SIZE(test_effect_preshader_bconsts); ++i)
4518 if (const_updated_mask[i / TEST_EFFECT_BITMASK_BLOCK_SIZE]
4519 & (1u << (i % TEST_EFFECT_BITMASK_BLOCK_SIZE)))
4521 /* The negation on both sides is actually needed, sometimes
4522 * you get 0xffffffff instead of 1 on native. */
4523 ok_(__FILE__, line)(!bdata[i] == !test_effect_preshader_bconsts[i],
4524 "Pixel shader boolean constants do not match, expected %#x, got %#x, i %u, parameter %s.\n",
4525 test_effect_preshader_bconsts[i], bdata[i], i, updated_param);
4527 else
4529 ok_(__FILE__, line)(bdata[i] == !test_effect_preshader_bconsts[i],
4530 "Pixel shader boolean constants updated unexpectedly, parameter %s.\n", updated_param);
4535 for (; i < 16; ++i)
4537 ok_(__FILE__, line)(!bdata[i], "Got result %#x, boolean register value %u.\n", hr, bdata[i]);
4541 static void test_effect_preshader(IDirect3DDevice9 *device)
4543 static const D3DXVECTOR4 test_effect_preshader_fvect_p[] =
4545 {11.0f, 21.0f, 0.0f, 0.0f},
4546 {12.0f, 22.0f, 0.0f, 0.0f},
4547 {13.0f, 23.0f, 0.0f, 0.0f},
4548 {11.0f, 12.0f, 0.0f, 0.0f},
4549 {21.0f, 22.0f, 0.0f, 0.0f},
4550 {31.0f, 32.0f, 0.0f, 0.0f},
4551 {11.0f, 12.0f, 0.0f, 0.0f},
4552 {21.0f, 22.0f, 0.0f, 0.0f},
4553 {11.0f, 21.0f, 0.0f, 0.0f},
4554 {12.0f, 22.0f, 0.0f, 0.0f},
4555 {11.0f, 12.0f, 13.0f, 0.0f},
4556 {21.0f, 22.0f, 23.0f, 0.0f},
4557 {11.0f, 21.0f, 31.0f, 0.0f},
4558 {12.0f, 22.0f, 32.0f, 0.0f}
4560 static const int test_effect_preshader_iconsts[][4] =
4562 {4, 3, 2, 1}
4564 static const D3DXVECTOR4 fvect1 = {28.0f, 29.0f, 30.0f, 31.0f};
4565 static const D3DXVECTOR4 fvect2 = {0.0f, 0.0f, 1.0f, 0.0f};
4566 static const int ivect_empty[4] = {-1, -1, -1, -1};
4567 HRESULT hr;
4568 ID3DXEffect *effect;
4569 D3DXHANDLE par;
4570 unsigned int npasses;
4571 DWORD value;
4572 D3DXVECTOR4 fdata[ARRAY_SIZE(test_effect_preshader_fvect_p)];
4573 int idata[ARRAY_SIZE(test_effect_preshader_iconsts)][4];
4574 IDirect3DVertexShader9 *vshader;
4575 unsigned int i;
4576 D3DCAPS9 caps;
4578 hr = IDirect3DDevice9_GetDeviceCaps(device, &caps);
4579 ok(SUCCEEDED(hr), "Failed to get device caps, hr %#x.\n", hr);
4580 if (caps.VertexShaderVersion < D3DVS_VERSION(3, 0)
4581 || caps.PixelShaderVersion < D3DPS_VERSION(3, 0))
4583 skip("Test requires VS >= 3 and PS >= 3, skipping.\n");
4584 return;
4587 hr = D3DXCreateEffect(device, test_effect_preshader_effect_blob, sizeof(test_effect_preshader_effect_blob),
4588 NULL, NULL, 0, NULL, &effect, NULL);
4589 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4591 test_effect_preshader_clear_vconsts(device);
4593 for (i = 0; i < 224; ++i)
4595 hr = IDirect3DDevice9_SetPixelShaderConstantF(device, i, &fvect_filler.x, 1);
4596 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4599 test_effect_preshader_clear_pbool_consts(device);
4601 for (i = 0; i < 16; ++i)
4603 hr = IDirect3DDevice9_SetPixelShaderConstantI(device, i, ivect_empty, 1);
4604 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4607 hr = effect->lpVtbl->Begin(effect, &npasses, 0);
4608 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4610 par = effect->lpVtbl->GetParameterByName(effect, NULL, "g_Pos2");
4611 ok(par != NULL, "GetParameterByName failed.\n");
4613 hr = effect->lpVtbl->SetVector(effect, par, &fvect1);
4614 ok(hr == D3D_OK, "SetVector failed, hr %#x.\n", hr);
4616 hr = effect->lpVtbl->BeginPass(effect, 0);
4617 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4619 hr = effect->lpVtbl->BeginPass(effect, 0);
4620 ok(hr == D3DERR_INVALIDCALL, "Got result %#x.\n", hr);
4622 hr = effect->lpVtbl->BeginPass(effect, 1);
4623 ok(hr == D3DERR_INVALIDCALL, "Got result %#x.\n", hr);
4625 test_effect_preshader_compare_vconsts(device, NULL, NULL);
4627 hr = IDirect3DDevice9_GetPixelShaderConstantF(device, 0, &fdata[0].x,
4628 ARRAY_SIZE(test_effect_preshader_fvect_p));
4629 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4630 ok(!memcmp(fdata, test_effect_preshader_fvect_p, sizeof(test_effect_preshader_fvect_p)),
4631 "Pixel shader float constants do not match.\n");
4632 for (i = ARRAY_SIZE(test_effect_preshader_fvect_p); i < 224; ++i)
4634 hr = IDirect3DDevice9_GetPixelShaderConstantF(device, i, &fdata[0].x, 1);
4635 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4636 ok(!memcmp(fdata, &fvect_filler, sizeof(fvect_filler)),
4637 "Pixel shader float constants do not match.\n");
4639 hr = IDirect3DDevice9_GetPixelShaderConstantI(device, 0, idata[0],
4640 ARRAY_SIZE(test_effect_preshader_iconsts));
4641 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4642 ok(!memcmp(idata, test_effect_preshader_iconsts, sizeof(test_effect_preshader_iconsts)),
4643 "Pixel shader integer constants do not match.\n");
4644 for (i = ARRAY_SIZE(test_effect_preshader_iconsts); i < 16; ++i)
4646 hr = IDirect3DDevice9_GetPixelShaderConstantI(device, i, idata[0], 1);
4647 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4648 ok(!memcmp(idata[0], ivect_empty, sizeof(ivect_empty)),
4649 "Pixel shader integer constants do not match.\n");
4652 test_effect_preshader_compare_pbool_consts(device, NULL, NULL);
4654 test_effect_preshader_op_results(device, NULL, NULL);
4656 hr = IDirect3DDevice9_GetSamplerState(device, 0, D3DSAMP_MINFILTER, &value);
4657 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4658 ok(value == 3, "Unexpected sampler 0 minfilter %u.\n", value);
4659 hr = IDirect3DDevice9_GetSamplerState(device, 0, D3DSAMP_MAGFILTER, &value);
4660 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4661 todo_wine ok(value == 3, "Unexpected sampler 0 magfilter %u.\n", value);
4663 hr = IDirect3DDevice9_GetSamplerState(device, 1, D3DSAMP_MINFILTER, &value);
4664 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4665 ok(value == 1, "Unexpected sampler 1 minfilter %u.\n", value);
4666 hr = IDirect3DDevice9_GetSamplerState(device, 1, D3DSAMP_MAGFILTER, &value);
4667 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4668 todo_wine
4669 ok(value == 1, "Unexpected sampler 1 magfilter %u.\n", value);
4671 hr = IDirect3DDevice9_GetSamplerState(device, D3DVERTEXTEXTURESAMPLER0, D3DSAMP_MINFILTER, &value);
4672 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4673 ok(value == 1, "Unexpected vertex sampler 0 minfilter %u.\n", value);
4674 hr = IDirect3DDevice9_GetSamplerState(device, D3DVERTEXTEXTURESAMPLER0, D3DSAMP_MAGFILTER, &value);
4675 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4676 todo_wine
4677 ok(value == 1, "Unexpected vertex sampler 0 magfilter %u.\n", value);
4679 hr = IDirect3DDevice9_GetSamplerState(device, D3DVERTEXTEXTURESAMPLER1, D3DSAMP_MINFILTER, &value);
4680 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4681 todo_wine
4682 ok(value == 0, "Unexpected vertex sampler 1 minfilter %u.\n", value);
4683 hr = IDirect3DDevice9_GetSamplerState(device, D3DVERTEXTEXTURESAMPLER1, D3DSAMP_MAGFILTER, &value);
4684 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4685 todo_wine
4686 ok(value == 0, "Unexpected vertex sampler 1 magfilter %u.\n", value);
4688 hr = IDirect3DDevice9_GetSamplerState(device, D3DVERTEXTEXTURESAMPLER2, D3DSAMP_MINFILTER, &value);
4689 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4690 ok(value == 3, "Unexpected vertex sampler 2 minfilter %u.\n", value);
4691 hr = IDirect3DDevice9_GetSamplerState(device, D3DVERTEXTEXTURESAMPLER2, D3DSAMP_MAGFILTER, &value);
4692 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4693 todo_wine ok(value == 3, "Unexpected vertex sampler 2 magfilter %u.\n", value);
4695 hr = IDirect3DDevice9_GetRenderState(device, D3DRS_FOGDENSITY, &value);
4696 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4697 ok(value == 0, "Unexpected fog density %g.\n", *(float *)&value);
4698 hr = IDirect3DDevice9_GetRenderState(device, D3DRS_FOGSTART, &value);
4699 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4700 ok(*(float *)&value == 4.0f, "Unexpected fog start %g.\n", *(float *)&value);
4701 hr = IDirect3DDevice9_GetRenderState(device, D3DRS_POINTSCALE_A, &value);
4702 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4703 ok(*(float *)&value == 4.0f, "Unexpected point scale A %g.\n", *(float *)&value);
4704 hr = IDirect3DDevice9_GetRenderState(device, D3DRS_POINTSCALE_B, &value);
4705 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4706 ok(*(float *)&value == 12.0f, "Unexpected point scale B %g.\n", *(float *)&value);
4708 hr = effect->lpVtbl->EndPass(effect);
4710 par = effect->lpVtbl->GetParameterByName(effect, NULL, "g_iVect");
4711 ok(par != NULL, "GetParameterByName failed.\n");
4712 hr = effect->lpVtbl->SetVector(effect, par, &fvect2);
4713 ok(hr == D3D_OK, "SetVector failed, hr %#x.\n", hr);
4714 hr = effect->lpVtbl->BeginPass(effect, 1);
4715 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4717 test_effect_preshader_compare_shader(device, 1, FALSE);
4719 hr = IDirect3DDevice9_SetVertexShader(device, NULL);
4720 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4722 hr = effect->lpVtbl->SetVector(effect, par, &fvect1);
4723 ok(hr == D3D_OK, "SetVector failed, hr %#x.\n", hr);
4724 hr = effect->lpVtbl->CommitChanges(effect);
4725 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4726 hr = IDirect3DDevice9_GetVertexShader(device, &vshader);
4727 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4728 ok(!vshader, "Incorrect shader selected.\n");
4730 hr = effect->lpVtbl->EndPass(effect);
4731 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4733 hr = effect->lpVtbl->End(effect);
4734 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4736 effect->lpVtbl->Release(effect);
4738 hr = D3DXCreateEffect(device, test_effect_preshader_effect_blob, sizeof(test_effect_preshader_effect_blob),
4739 NULL, NULL, 0, NULL, &effect, NULL);
4740 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4742 hr = effect->lpVtbl->Begin(effect, &npasses, D3DXFX_DONOTSAVESTATE);
4743 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4745 hr = effect->lpVtbl->BeginPass(effect, 0);
4746 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4748 hr = IDirect3DDevice9_GetSamplerState(device, 0, D3DSAMP_MINFILTER, &value);
4749 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4750 ok(value == 3, "Unexpected sampler 0 minfilter %u.\n", value);
4751 hr = IDirect3DDevice9_GetSamplerState(device, 0, D3DSAMP_MAGFILTER, &value);
4752 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4753 todo_wine ok(value == 3, "Unexpected sampler 0 magfilter %u.\n", value);
4755 hr = IDirect3DDevice9_GetSamplerState(device, 1, D3DSAMP_MINFILTER, &value);
4756 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4757 ok(value == 1, "Unexpected sampler 1 minfilter %u.\n", value);
4758 hr = IDirect3DDevice9_GetSamplerState(device, 1, D3DSAMP_MAGFILTER, &value);
4759 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4760 todo_wine
4761 ok(value == 1, "Unexpected sampler 1 magfilter %u.\n", value);
4763 hr = IDirect3DDevice9_GetSamplerState(device, D3DVERTEXTEXTURESAMPLER0, D3DSAMP_MINFILTER, &value);
4764 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4765 ok(value == 1, "Unexpected vertex sampler 0 minfilter %u.\n", value);
4766 hr = IDirect3DDevice9_GetSamplerState(device, D3DVERTEXTEXTURESAMPLER0, D3DSAMP_MAGFILTER, &value);
4767 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4768 todo_wine
4769 ok(value == 1, "Unexpected vertex sampler 0 magfilter %u.\n", value);
4771 hr = IDirect3DDevice9_GetSamplerState(device, D3DVERTEXTEXTURESAMPLER1, D3DSAMP_MINFILTER, &value);
4772 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4773 ok(value == 2, "Unexpected vertex sampler 1 minfilter %u.\n", value);
4774 hr = IDirect3DDevice9_GetSamplerState(device, D3DVERTEXTEXTURESAMPLER1, D3DSAMP_MAGFILTER, &value);
4775 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4776 todo_wine
4777 ok(value == 2, "Unexpected vertex sampler 1 magfilter %u.\n", value);
4779 hr = IDirect3DDevice9_GetSamplerState(device, D3DVERTEXTEXTURESAMPLER2, D3DSAMP_MINFILTER, &value);
4780 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4781 ok(value == 3, "Unexpected vertex sampler 2 minfilter %u.\n", value);
4782 hr = IDirect3DDevice9_GetSamplerState(device, D3DVERTEXTEXTURESAMPLER2, D3DSAMP_MAGFILTER, &value);
4783 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4784 todo_wine
4785 ok(value == 3, "Unexpected vertex sampler 2 magfilter %u.\n", value);
4787 hr = effect->lpVtbl->EndPass(effect);
4788 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4789 hr = effect->lpVtbl->End(effect);
4790 ok(hr == D3D_OK, "Got result %#x.\n", hr);
4791 effect->lpVtbl->Release(effect);
4795 * fxc.exe /Tfx_2_0
4797 #if 0
4798 float4 opvect1;
4799 float4 opvect2;
4800 float4 opvect3;
4802 technique tech0
4804 pass p0
4806 LightEnable[0] = TRUE;
4807 LightEnable[1] = TRUE;
4808 LightEnable[2] = TRUE;
4809 LightEnable[3] = TRUE;
4810 LightEnable[4] = TRUE;
4811 LightEnable[5] = TRUE;
4812 LightEnable[6] = TRUE;
4813 LightEnable[7] = TRUE;
4814 LightType[0] = POINT;
4815 LightType[1] = POINT;
4816 LightType[2] = POINT;
4817 LightType[3] = POINT;
4818 LightType[4] = POINT;
4819 LightType[5] = POINT;
4820 LightType[6] = POINT;
4821 LightType[7] = POINT;
4823 LightDiffuse[0] = exp(opvect1);
4824 LightDiffuse[1] = log(opvect1);
4825 LightDiffuse[2] = asin(opvect1);
4826 LightDiffuse[3] = acos(opvect1);
4827 LightDiffuse[4] = atan(opvect1);
4828 LightDiffuse[5] = atan2(opvect1, opvect2);
4829 LightDiffuse[6] = opvect1 * opvect2;
4831 /* Placeholder for 'div' instruction manually edited in binary blob. */
4832 LightDiffuse[7] = opvect1 * opvect2;
4834 /* Placeholder for 'cmp' instruction manually edited in binary blob. */
4835 LightAmbient[0] = opvect1 + opvect2 + opvect3;
4838 #endif
4839 static const DWORD test_effect_preshader_ops_blob[] =
4841 0xfeff0901, 0x0000044c, 0x00000000, 0x00000003, 0x00000001, 0x00000030, 0x00000000, 0x00000000,
4842 0x00000004, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008, 0x6576706f,
4843 0x00317463, 0x00000003, 0x00000001, 0x00000068, 0x00000000, 0x00000000, 0x00000004, 0x00000001,
4844 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008, 0x6576706f, 0x00327463, 0x00000003,
4845 0x00000001, 0x000000a0, 0x00000000, 0x00000000, 0x00000004, 0x00000001, 0x00000000, 0x00000000,
4846 0x00000000, 0x00000000, 0x00000008, 0x6576706f, 0x00337463, 0x00000001, 0x00000002, 0x00000002,
4847 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002,
4848 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002,
4849 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002,
4850 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002,
4851 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002,
4852 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002,
4853 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002,
4854 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002,
4855 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002,
4856 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002,
4857 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002,
4858 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002,
4859 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002,
4860 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002,
4861 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000002,
4862 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000,
4863 0x00000000, 0x00000003, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000004, 0x00000001,
4864 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000002, 0x00000000, 0x00000000,
4865 0x00000000, 0x00000004, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000003,
4866 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000004, 0x00000001, 0x00000000, 0x00000000,
4867 0x00000000, 0x00000000, 0x00000003, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000004,
4868 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000002, 0x00000000,
4869 0x00000000, 0x00000000, 0x00000004, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
4870 0x00000003, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000004, 0x00000001, 0x00000000,
4871 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000002, 0x00000000, 0x00000000, 0x00000000,
4872 0x00000004, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000002,
4873 0x00000000, 0x00000000, 0x00000000, 0x00000004, 0x00000001, 0x00000000, 0x00000000, 0x00000000,
4874 0x00000000, 0x00000003, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000004, 0x00000001,
4875 0x00000003, 0x00003070, 0x00000006, 0x68636574, 0x00000030, 0x00000003, 0x00000001, 0x00000001,
4876 0x00000001, 0x00000004, 0x00000020, 0x00000000, 0x00000000, 0x0000003c, 0x00000058, 0x00000000,
4877 0x00000000, 0x00000074, 0x00000090, 0x00000000, 0x00000000, 0x00000440, 0x00000000, 0x00000001,
4878 0x00000438, 0x00000000, 0x00000019, 0x00000091, 0x00000000, 0x000000b0, 0x000000ac, 0x00000091,
4879 0x00000001, 0x000000d0, 0x000000cc, 0x00000091, 0x00000002, 0x000000f0, 0x000000ec, 0x00000091,
4880 0x00000003, 0x00000110, 0x0000010c, 0x00000091, 0x00000004, 0x00000130, 0x0000012c, 0x00000091,
4881 0x00000005, 0x00000150, 0x0000014c, 0x00000091, 0x00000006, 0x00000170, 0x0000016c, 0x00000091,
4882 0x00000007, 0x00000190, 0x0000018c, 0x00000084, 0x00000000, 0x000001b0, 0x000001ac, 0x00000084,
4883 0x00000001, 0x000001d0, 0x000001cc, 0x00000084, 0x00000002, 0x000001f0, 0x000001ec, 0x00000084,
4884 0x00000003, 0x00000210, 0x0000020c, 0x00000084, 0x00000004, 0x00000230, 0x0000022c, 0x00000084,
4885 0x00000005, 0x00000250, 0x0000024c, 0x00000084, 0x00000006, 0x00000270, 0x0000026c, 0x00000084,
4886 0x00000007, 0x00000290, 0x0000028c, 0x00000085, 0x00000000, 0x000002bc, 0x000002ac, 0x00000085,
4887 0x00000001, 0x000002e8, 0x000002d8, 0x00000085, 0x00000002, 0x00000314, 0x00000304, 0x00000085,
4888 0x00000003, 0x00000340, 0x00000330, 0x00000085, 0x00000004, 0x0000036c, 0x0000035c, 0x00000085,
4889 0x00000005, 0x00000398, 0x00000388, 0x00000085, 0x00000006, 0x000003c4, 0x000003b4, 0x00000085,
4890 0x00000007, 0x000003f0, 0x000003e0, 0x00000087, 0x00000000, 0x0000041c, 0x0000040c, 0x00000000,
4891 0x00000009, 0x00000000, 0x00000000, 0xffffffff, 0x00000018, 0x00000000, 0x0000016c, 0x46580200,
4892 0x003afffe, 0x42415443, 0x0000001c, 0x000000b3, 0x46580200, 0x00000003, 0x0000001c, 0x20000100,
4893 0x000000b0, 0x00000058, 0x00000002, 0x00000001, 0x00000060, 0x00000070, 0x00000080, 0x00010002,
4894 0x00000001, 0x00000088, 0x00000070, 0x00000098, 0x00020002, 0x00000001, 0x000000a0, 0x00000070,
4895 0x6576706f, 0x00317463, 0x00030001, 0x00040001, 0x00000001, 0x00000000, 0x00000000, 0x00000000,
4896 0x00000000, 0x00000000, 0x6576706f, 0x00327463, 0x00030001, 0x00040001, 0x00000001, 0x00000000,
4897 0x6576706f, 0x00337463, 0x00030001, 0x00040001, 0x00000001, 0x00000000, 0x4d007874, 0x6f726369,
4898 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072,
4899 0x392e3932, 0x332e3235, 0x00313131, 0x0002fffe, 0x54494c43, 0x00000000,
4900 /* FXLC for LightAmbient[0] start. */
4901 0x001afffe, 0x434c5846,
4902 0x00000001, /* Instruction count, set to 1. */
4903 0x30000004, /* Operation code (bits 20-30) set to 'cmp' opcode 0x300. */
4904 0x00000003, /* Input arguments count set to 3. */
4905 /* Argument 1. */
4906 0x00000000, /* Relative addressing flag. */
4907 0x00000002, /* Register table ("c", float constants). */
4908 0x00000000, /* Register offset. */
4909 /* Argument 2. */
4910 0x00000000, 0x00000002, 0x00000004,
4911 /* Argument 3. */
4912 0x00000000, 0x00000002, 0x00000008,
4913 /* Output register. */
4914 0x00000000, 0x00000004, 0x00000000,
4915 /* End mark. */
4916 0xf0f0f0f0, 0x0f0f0f0f, 0x0000ffff,
4917 /* Padding to match placeholder length. */
4918 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
4919 /* FXLC for LightAmbient[0] end. */
4920 0x00000000, 0x00000000, 0xffffffff, 0x00000017, 0x00000000, 0x00000114,
4921 0x46580200, 0x002ffffe, 0x42415443, 0x0000001c, 0x00000087, 0x46580200, 0x00000002, 0x0000001c,
4922 0x20000100, 0x00000084, 0x00000044, 0x00000002, 0x00000001, 0x0000004c, 0x0000005c, 0x0000006c,
4923 0x00010002, 0x00000001, 0x00000074, 0x0000005c, 0x6576706f, 0x00317463, 0x00030001, 0x00040001,
4924 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x6576706f, 0x00327463,
4925 0x00030001, 0x00040001, 0x00000001, 0x00000000, 0x4d007874, 0x6f726369, 0x74666f73, 0x29522820,
4926 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932, 0x332e3235,
4927 0x00313131, 0x0002fffe, 0x54494c43, 0x00000000,
4928 /* FXLC for LightDiffuse[7] start. */
4929 0x000ffffe, 0x434c5846,
4930 0x00000001, /* Instruction count. */
4931 0x20800004, /* Operation code (bits 20-30) set to 'div' opcode 0x208. */
4932 0x00000002, 0x00000000, 0x00000002, 0x00000000, 0x00000000, 0x00000002, 0x00000004, 0x00000000,
4933 0x00000004, 0x00000000, 0xf0f0f0f0, 0x0f0f0f0f, 0x0000ffff,
4934 /* FXLC for LightDiffuse[7] end. */
4935 0x00000000, 0x00000000, 0xffffffff,
4936 0x00000016, 0x00000000, 0x00000114, 0x46580200, 0x002ffffe, 0x42415443, 0x0000001c, 0x00000087,
4937 0x46580200, 0x00000002, 0x0000001c, 0x20000100, 0x00000084, 0x00000044, 0x00000002, 0x00000001,
4938 0x0000004c, 0x0000005c, 0x0000006c, 0x00010002, 0x00000001, 0x00000074, 0x0000005c, 0x6576706f,
4939 0x00317463, 0x00030001, 0x00040001, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
4940 0x00000000, 0x6576706f, 0x00327463, 0x00030001, 0x00040001, 0x00000001, 0x00000000, 0x4d007874,
4941 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970,
4942 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131, 0x0002fffe, 0x54494c43, 0x00000000, 0x000ffffe,
4943 0x434c5846, 0x00000001, 0x20500004, 0x00000002, 0x00000000, 0x00000002, 0x00000000, 0x00000000,
4944 0x00000002, 0x00000004, 0x00000000, 0x00000004, 0x00000000, 0xf0f0f0f0, 0x0f0f0f0f, 0x0000ffff,
4945 0x00000000, 0x00000000, 0xffffffff, 0x00000015, 0x00000000, 0x00000114, 0x46580200, 0x002ffffe,
4946 0x42415443, 0x0000001c, 0x00000087, 0x46580200, 0x00000002, 0x0000001c, 0x20000100, 0x00000084,
4947 0x00000044, 0x00000002, 0x00000001, 0x0000004c, 0x0000005c, 0x0000006c, 0x00010002, 0x00000001,
4948 0x00000074, 0x0000005c, 0x6576706f, 0x00317463, 0x00030001, 0x00040001, 0x00000001, 0x00000000,
4949 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x6576706f, 0x00327463, 0x00030001, 0x00040001,
4950 0x00000001, 0x00000000, 0x4d007874, 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c,
4951 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131, 0x0002fffe,
4952 0x54494c43, 0x00000000, 0x000ffffe, 0x434c5846, 0x00000001, 0x20600004, 0x00000002, 0x00000000,
4953 0x00000002, 0x00000000, 0x00000000, 0x00000002, 0x00000004, 0x00000000, 0x00000004, 0x00000000,
4954 0xf0f0f0f0, 0x0f0f0f0f, 0x0000ffff, 0x00000000, 0x00000000, 0xffffffff, 0x00000014, 0x00000000,
4955 0x000000dc, 0x46580200, 0x0024fffe, 0x42415443, 0x0000001c, 0x0000005b, 0x46580200, 0x00000001,
4956 0x0000001c, 0x20000100, 0x00000058, 0x00000030, 0x00000002, 0x00000001, 0x00000038, 0x00000048,
4957 0x6576706f, 0x00317463, 0x00030001, 0x00040001, 0x00000001, 0x00000000, 0x00000000, 0x00000000,
4958 0x00000000, 0x00000000, 0x4d007874, 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c,
4959 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131, 0x0002fffe,
4960 0x54494c43, 0x00000000, 0x000cfffe, 0x434c5846, 0x00000001, 0x10c00004, 0x00000001, 0x00000000,
4961 0x00000002, 0x00000000, 0x00000000, 0x00000004, 0x00000000, 0xf0f0f0f0, 0x0f0f0f0f, 0x0000ffff,
4962 0x00000000, 0x00000000, 0xffffffff, 0x00000013, 0x00000000, 0x000000dc, 0x46580200, 0x0024fffe,
4963 0x42415443, 0x0000001c, 0x0000005b, 0x46580200, 0x00000001, 0x0000001c, 0x20000100, 0x00000058,
4964 0x00000030, 0x00000002, 0x00000001, 0x00000038, 0x00000048, 0x6576706f, 0x00317463, 0x00030001,
4965 0x00040001, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x4d007874,
4966 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970,
4967 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131, 0x0002fffe, 0x54494c43, 0x00000000, 0x000cfffe,
4968 0x434c5846, 0x00000001, 0x10b00004, 0x00000001, 0x00000000, 0x00000002, 0x00000000, 0x00000000,
4969 0x00000004, 0x00000000, 0xf0f0f0f0, 0x0f0f0f0f, 0x0000ffff, 0x00000000, 0x00000000, 0xffffffff,
4970 0x00000012, 0x00000000, 0x000000dc, 0x46580200, 0x0024fffe, 0x42415443, 0x0000001c, 0x0000005b,
4971 0x46580200, 0x00000001, 0x0000001c, 0x20000100, 0x00000058, 0x00000030, 0x00000002, 0x00000001,
4972 0x00000038, 0x00000048, 0x6576706f, 0x00317463, 0x00030001, 0x00040001, 0x00000001, 0x00000000,
4973 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x4d007874, 0x6f726369, 0x74666f73, 0x29522820,
4974 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932, 0x332e3235,
4975 0x00313131, 0x0002fffe, 0x54494c43, 0x00000000, 0x000cfffe, 0x434c5846, 0x00000001, 0x10a00004,
4976 0x00000001, 0x00000000, 0x00000002, 0x00000000, 0x00000000, 0x00000004, 0x00000000, 0xf0f0f0f0,
4977 0x0f0f0f0f, 0x0000ffff, 0x00000000, 0x00000000, 0xffffffff, 0x00000011, 0x00000000, 0x0000013c,
4978 0x46580200, 0x0024fffe, 0x42415443, 0x0000001c, 0x0000005b, 0x46580200, 0x00000001, 0x0000001c,
4979 0x20000100, 0x00000058, 0x00000030, 0x00000002, 0x00000001, 0x00000038, 0x00000048, 0x6576706f,
4980 0x00317463, 0x00030001, 0x00040001, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
4981 0x00000000, 0x4d007874, 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c, 0x72656461,
4982 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131, 0x0002fffe, 0x54494c43,
4983 0x00000000, 0x0024fffe, 0x434c5846, 0x00000004, 0x10600001, 0x00000001, 0x00000000, 0x00000002,
4984 0x00000000, 0x00000000, 0x00000004, 0x00000000, 0x10600001, 0x00000001, 0x00000000, 0x00000002,
4985 0x00000001, 0x00000000, 0x00000004, 0x00000001, 0x10600001, 0x00000001, 0x00000000, 0x00000002,
4986 0x00000002, 0x00000000, 0x00000004, 0x00000002, 0x10600001, 0x00000001, 0x00000000, 0x00000002,
4987 0x00000003, 0x00000000, 0x00000004, 0x00000003, 0xf0f0f0f0, 0x0f0f0f0f, 0x0000ffff, 0x00000000,
4988 0x00000000, 0xffffffff, 0x00000010, 0x00000000, 0x0000013c, 0x46580200, 0x0024fffe, 0x42415443,
4989 0x0000001c, 0x0000005b, 0x46580200, 0x00000001, 0x0000001c, 0x20000100, 0x00000058, 0x00000030,
4990 0x00000002, 0x00000001, 0x00000038, 0x00000048, 0x6576706f, 0x00317463, 0x00030001, 0x00040001,
4991 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x4d007874, 0x6f726369,
4992 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072,
4993 0x392e3932, 0x332e3235, 0x00313131, 0x0002fffe, 0x54494c43, 0x00000000, 0x0024fffe, 0x434c5846,
4994 0x00000004, 0x10500001, 0x00000001, 0x00000000, 0x00000002, 0x00000000, 0x00000000, 0x00000004,
4995 0x00000000, 0x10500001, 0x00000001, 0x00000000, 0x00000002, 0x00000001, 0x00000000, 0x00000004,
4996 0x00000001, 0x10500001, 0x00000001, 0x00000000, 0x00000002, 0x00000002, 0x00000000, 0x00000004,
4997 0x00000002, 0x10500001, 0x00000001, 0x00000000, 0x00000002, 0x00000003, 0x00000000, 0x00000004,
4998 0x00000003, 0xf0f0f0f0, 0x0f0f0f0f, 0x0000ffff,
5001 static void test_effect_preshader_ops(IDirect3DDevice9 *device)
5003 static D3DLIGHT9 light;
5004 const struct
5006 const char *mnem;
5007 unsigned int expected_result[4];
5008 unsigned int result_index;
5009 float *result;
5010 D3DXVECTOR4 opvect1, opvect2, opvect3;
5011 unsigned int ulps;
5012 BOOL todo[4];
5014 op_tests[] =
5016 {"exp", {0x3f800000, 0x3f800000, 0x3e5edc66, 0x7f800000}, 0, &light.Diffuse.r,
5017 {0.0f, -0.0f, -2.2f, 3.402823466e+38f}, {1.0f, 2.0f, -3.0f, 4.0f}},
5018 {"log", {0, 0x40000000, 0x3f9199b7, 0x43000000}, 1, &light.Diffuse.r,
5019 {0.0f, 4.0f, -2.2f, 3.402823466e+38f}, {1.0f, 2.0f, -3.0f, 4.0f}},
5020 {"asin", {0xbe9c00ad, 0xffc00000, 0xffc00000, 0xffc00000}, 2, &light.Diffuse.r,
5021 {-0.3f, 4.0f, -2.2f, 3.402823466e+38f}, {1.0f, 2.0f, -3.0f, 4.0f}},
5022 {"acos", {0x3ff01006, 0xffc00000, 0xffc00000, 0xffc00000}, 3, &light.Diffuse.r,
5023 {-0.3f, 4.0f, -2.2f, 3.402823466e+38f}, {1.0f, 2.0f, -3.0f, 4.0f}},
5024 {"atan", {0xbe9539d4, 0x3fa9b465, 0xbf927420, 0x3fc90fdb}, 4, &light.Diffuse.r,
5025 {-0.3f, 4.0f, -2.2f, 3.402823466e+38f}, {1.0f, 2.0f, -3.0f, 4.0f}},
5026 {"atan2 test #1", {0xbfc90fdb, 0x40490fdb, 0x80000000, 0x7fc00000}, 5, &light.Diffuse.r,
5027 {-0.3f, 0.0f, -0.0f, NAN}, {0.0f, -0.0f, 0.0f, 1.0f}},
5028 {"atan2 test #2", {0xbfc90fdb, 0, 0xc0490fdb, 0}, 5, &light.Diffuse.r,
5029 {-0.3f, 0.0f, -0.0f, -0.0f}, {-0.0f, 0.0f, -0.0f, 1.0f}},
5030 {"div", {0, 0, 0, 0}, 7, &light.Diffuse.r,
5031 {-0.3f, 0.0f, -2.2f, NAN}, {0.0f, -0.0f, -3.0f, 1.0f}},
5032 {"cmp", {0x40a00000, 0x40000000, 0x40400000, 0x41000000}, 0, &light.Ambient.r,
5033 {-0.3f, 0.0f, 2.2f, NAN}, {1.0f, 2.0f, 3.0f, 4.0f}, {5.0f, 6.0f, 7.0f, 8.0f}},
5034 {"0 * INF", {0xffc00000, 0xffc00000, 0xc0d33334, 0x7f800000}, 6, &light.Diffuse.r,
5035 {0.0f, -0.0f, -2.2f, 3.402823466e+38f}, {INFINITY, INFINITY, 3.0f, 4.0f}},
5037 unsigned int i, j, passes_count;
5038 ID3DXEffect *effect;
5039 HRESULT hr;
5041 hr = D3DXCreateEffect(device, test_effect_preshader_ops_blob, sizeof(test_effect_preshader_ops_blob),
5042 NULL, NULL, 0, NULL, &effect, NULL);
5043 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5044 hr = effect->lpVtbl->Begin(effect, &passes_count, 0);
5045 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5046 hr = effect->lpVtbl->BeginPass(effect, 0);
5047 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5049 for (i = 0; i < ARRAY_SIZE(op_tests); ++i)
5051 const float *result = op_tests[i].result;
5052 const float *expected_float = (float *)op_tests[i].expected_result;
5054 hr = effect->lpVtbl->SetVector(effect, "opvect1", &op_tests[i].opvect1);
5055 ok(hr == D3D_OK, "SetVector failed, hr %#x.\n", hr);
5056 hr = effect->lpVtbl->SetVector(effect, "opvect2", &op_tests[i].opvect2);
5057 ok(hr == D3D_OK, "SetVector failed, hr %#x.\n", hr);
5058 hr = effect->lpVtbl->SetVector(effect, "opvect3", &op_tests[i].opvect3);
5059 ok(hr == D3D_OK, "SetVector failed, hr %#x.\n", hr);
5060 hr = effect->lpVtbl->CommitChanges(effect);
5061 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5063 hr = IDirect3DDevice9_GetLight(device, op_tests[i].result_index, &light);
5064 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5065 for (j = 0; j < 4; ++j)
5067 todo_wine_if(op_tests[i].todo[j])
5068 ok(compare_float(result[j], expected_float[j], op_tests[i].ulps),
5069 "Operation %s, component %u, expected %#x (%.8e), got %#x (%.8e).\n", op_tests[i].mnem,
5070 j, op_tests[i].expected_result[j], expected_float[j],
5071 ((unsigned int *)result)[j], result[j]);
5075 hr = effect->lpVtbl->End(effect);
5076 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5077 effect->lpVtbl->Release(effect);
5080 static void test_isparameterused_children(unsigned int line, ID3DXEffect *effect,
5081 D3DXHANDLE tech, D3DXHANDLE param)
5083 D3DXPARAMETER_DESC desc;
5084 D3DXHANDLE param_child;
5085 unsigned int i, child_count;
5086 HRESULT hr;
5088 hr = effect->lpVtbl->GetParameterDesc(effect, param, &desc);
5089 ok_(__FILE__, line)(hr == D3D_OK, "GetParameterDesc failed, result %#x.\n", hr);
5090 child_count = desc.Elements ? desc.Elements : desc.StructMembers;
5091 for (i = 0; i < child_count; ++i)
5093 param_child = desc.Elements ? effect->lpVtbl->GetParameterElement(effect, param, i)
5094 : effect->lpVtbl->GetParameter(effect, param, i);
5095 ok_(__FILE__, line)(!!param_child, "Failed getting child parameter %s[%u].\n", desc.Name, i);
5096 ok_(__FILE__, line)(!effect->lpVtbl->IsParameterUsed(effect, param_child, tech),
5097 "Unexpected IsParameterUsed() result for %s[%u].\n", desc.Name, i);
5098 test_isparameterused_children(line, effect, tech, param_child);
5102 #define test_isparameterused_param_with_children(args...) \
5103 test_isparameterused_param_with_children_(__LINE__, args)
5104 static void test_isparameterused_param_with_children_(unsigned int line, ID3DXEffect *effect,
5105 ID3DXEffect *effect2, D3DXHANDLE tech, const char *name, BOOL expected_result)
5107 D3DXHANDLE param;
5109 ok_(__FILE__, line)(effect->lpVtbl->IsParameterUsed(effect, (D3DXHANDLE)name, tech)
5110 == expected_result, "Unexpected IsParameterUsed() result for %s (referenced by name).\n", name);
5112 if (effect2)
5113 param = effect2->lpVtbl->GetParameterByName(effect2, NULL, name);
5114 else
5115 param = effect->lpVtbl->GetParameterByName(effect, NULL, name);
5116 ok_(__FILE__, line)(!!param, "GetParameterByName failed for %s.\n", name);
5118 ok_(__FILE__, line)(effect->lpVtbl->IsParameterUsed(effect, param, tech) == expected_result,
5119 "Unexpected IsParameterUsed() result for %s (referenced by handle).\n", name);
5121 test_isparameterused_children(line, effect, tech, param);
5124 static void test_effect_isparameterused(IDirect3DDevice9 *device)
5126 static const struct
5128 const char *name;
5129 BOOL expected_result;
5131 check_parameters[] =
5133 {"g_Pos1", TRUE},
5134 {"g_Pos2", TRUE},
5135 {"g_Selector", TRUE},
5136 {"opvect1", TRUE},
5137 {"opvect2", TRUE},
5138 {"opvect3", TRUE},
5139 {"arr2", TRUE},
5140 {"vs_arr", TRUE},
5141 {"g_iVect", TRUE},
5142 {"vect_sampler", TRUE},
5143 {"tex1", TRUE},
5144 {"tex2", FALSE},
5145 {"sampler1", TRUE},
5146 {"ts1", TRUE},
5147 {"ts2", TRUE},
5148 {"ts3", TRUE},
5150 ID3DXEffect *effect, *effect2;
5151 HRESULT hr;
5152 D3DXHANDLE tech;
5153 unsigned int i;
5155 hr = D3DXCreateEffect(device, test_effect_preshader_effect_blob, sizeof(test_effect_preshader_effect_blob),
5156 NULL, NULL, 0, NULL, &effect, NULL);
5157 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5159 tech = effect->lpVtbl->GetTechniqueByName(effect, "tech0");
5160 ok(!!tech, "GetTechniqueByName failed.\n");
5162 for (i = 0; i < ARRAY_SIZE(check_parameters); ++i)
5163 test_isparameterused_param_with_children(effect, NULL, tech, check_parameters[i].name,
5164 check_parameters[i].expected_result);
5166 hr = D3DXCreateEffect(device, test_effect_preshader_effect_blob, sizeof(test_effect_preshader_effect_blob),
5167 NULL, NULL, 0, NULL, &effect2, NULL);
5168 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5170 for (i = 0; i < ARRAY_SIZE(check_parameters); ++i)
5171 test_isparameterused_param_with_children(effect, effect2, tech, check_parameters[i].name,
5172 check_parameters[i].expected_result);
5174 effect2->lpVtbl->Release(effect2);
5176 hr = D3DXCreateEffect(device, test_effect_states_effect_blob, sizeof(test_effect_states_effect_blob),
5177 NULL, NULL, 0, NULL, &effect2, NULL);
5178 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5180 test_isparameterused_param_with_children(effect, effect2, tech, "sampler1", TRUE);
5181 effect2->lpVtbl->Release(effect2);
5183 effect->lpVtbl->Release(effect);
5186 static void test_effect_out_of_bounds_selector(IDirect3DDevice9 *device)
5188 ID3DXEffect *effect;
5189 HRESULT hr;
5190 D3DXHANDLE param;
5191 int ivect[4];
5192 unsigned int passes_count;
5193 IDirect3DVertexShader9 *vshader;
5195 hr = D3DXCreateEffect(device, test_effect_preshader_effect_blob, sizeof(test_effect_preshader_effect_blob),
5196 NULL, NULL, 0, NULL, &effect, NULL);
5198 hr = effect->lpVtbl->Begin(effect, &passes_count, 0);
5199 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5201 ivect[0] = ivect[1] = ivect[3] = 1;
5203 param = effect->lpVtbl->GetParameterByName(effect, NULL, "g_iVect");
5204 ok(!!param, "GetParameterByName failed.\n");
5205 ivect[2] = 3;
5206 hr = effect->lpVtbl->SetValue(effect, param, ivect, sizeof(ivect));
5207 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5209 hr = effect->lpVtbl->BeginPass(effect, 0);
5210 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5211 hr = effect->lpVtbl->EndPass(effect);
5212 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5214 hr = IDirect3DDevice9_SetVertexShader(device, NULL);
5215 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5217 hr = effect->lpVtbl->BeginPass(effect, 1);
5218 ok(hr == E_FAIL, "Got result %#x.\n", hr);
5220 /* Second try reports success and selects array element used previously.
5221 * Probably array index is not recomputed and previous index value is used. */
5222 hr = effect->lpVtbl->BeginPass(effect, 1);
5223 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5224 test_effect_preshader_compare_shader(device, 2, FALSE);
5226 /* Confirm that array element selected is the previous good one and does not depend
5227 * on computed (out of bound) index value. */
5228 ivect[2] = 1;
5229 hr = effect->lpVtbl->SetValue(effect, param, ivect, sizeof(ivect));
5230 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5231 hr = IDirect3DDevice9_SetVertexShader(device, NULL);
5232 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5233 hr = effect->lpVtbl->CommitChanges(effect);
5234 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5235 test_effect_preshader_compare_shader(device, 1, FALSE);
5236 hr = effect->lpVtbl->EndPass(effect);
5237 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5238 ivect[2] = 3;
5239 hr = effect->lpVtbl->SetValue(effect, param, ivect, sizeof(ivect));
5240 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5241 hr = IDirect3DDevice9_SetVertexShader(device, NULL);
5242 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5243 hr = effect->lpVtbl->BeginPass(effect, 1);
5244 ok(hr == E_FAIL, "Got result %#x.\n", hr);
5245 hr = effect->lpVtbl->BeginPass(effect, 1);
5246 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5247 test_effect_preshader_compare_shader(device, 1, FALSE);
5249 /* End and begin effect again to ensure it will not trigger array
5250 * index recompute and error return from BeginPass. */
5251 hr = effect->lpVtbl->EndPass(effect);
5252 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5253 hr = effect->lpVtbl->End(effect);
5254 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5255 hr = effect->lpVtbl->Begin(effect, &passes_count, 0);
5256 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5257 hr = effect->lpVtbl->BeginPass(effect, 1);
5258 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5259 test_effect_preshader_compare_shader(device, 1, FALSE);
5260 hr = effect->lpVtbl->EndPass(effect);
5261 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5264 hr = IDirect3DDevice9_SetVertexShader(device, NULL);
5265 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5267 ivect[2] = -2;
5268 hr = effect->lpVtbl->SetValue(effect, param, ivect, sizeof(ivect));
5269 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5271 hr = effect->lpVtbl->BeginPass(effect, 1);
5272 ok(hr == E_FAIL, "Got result %#x.\n", hr);
5274 hr = IDirect3DDevice9_GetVertexShader(device, &vshader);
5275 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5276 ok(!vshader, "Got non NULL vshader.\n");
5278 hr = effect->lpVtbl->BeginPass(effect, 1);
5279 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5281 test_effect_preshader_compare_shader(device, 1, FALSE);
5283 hr = effect->lpVtbl->EndPass(effect);
5284 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5286 ivect[2] = -1;
5287 hr = effect->lpVtbl->SetValue(effect, param, ivect, sizeof(ivect));
5288 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5290 hr = effect->lpVtbl->BeginPass(effect, 1);
5291 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5293 test_effect_preshader_compare_shader(device, 0, FALSE);
5295 hr = IDirect3DDevice9_SetVertexShader(device, NULL);
5296 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5298 ivect[2] = 3;
5299 hr = effect->lpVtbl->SetValue(effect, param, ivect, sizeof(ivect));
5300 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5301 hr = effect->lpVtbl->CommitChanges(effect);
5302 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5304 hr = IDirect3DDevice9_GetVertexShader(device, &vshader);
5305 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5306 ok(!vshader, "Got non NULL vshader.\n");
5308 ivect[2] = -1;
5309 hr = effect->lpVtbl->SetValue(effect, param, ivect, sizeof(ivect));
5310 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5311 hr = effect->lpVtbl->CommitChanges(effect);
5312 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5314 hr = IDirect3DDevice9_GetVertexShader(device, &vshader);
5315 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5316 ok(!vshader, "Got non NULL vshader.\n");
5318 ivect[2] = 1;
5319 hr = effect->lpVtbl->SetValue(effect, param, ivect, sizeof(ivect));
5320 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5321 hr = effect->lpVtbl->CommitChanges(effect);
5322 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5324 test_effect_preshader_compare_shader(device, 1, FALSE);
5326 hr = effect->lpVtbl->EndPass(effect);
5327 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5329 hr = effect->lpVtbl->End(effect);
5330 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5332 effect->lpVtbl->Release(effect);
5335 static void test_effect_commitchanges(IDirect3DDevice9 *device)
5337 static const struct
5339 const char *param_name;
5340 enum expected_state_update state_updated[ARRAY_SIZE(test_effect_preshader_op_expected)];
5342 check_op_parameters[] =
5344 {"opvect1", {EXPECTED_STATE_UPDATED, EXPECTED_STATE_UPDATED, EXPECTED_STATE_UPDATED, EXPECTED_STATE_UPDATED,
5345 EXPECTED_STATE_UPDATED, EXPECTED_STATE_UPDATED, EXPECTED_STATE_UPDATED, EXPECTED_STATE_UPDATED,
5346 EXPECTED_STATE_UPDATED, EXPECTED_STATE_UPDATED, EXPECTED_STATE_UPDATED, EXPECTED_STATE_UPDATED,
5347 EXPECTED_STATE_UPDATED, EXPECTED_STATE_UPDATED, EXPECTED_STATE_UPDATED, EXPECTED_STATE_ANYTHING,
5348 EXPECTED_STATE_UPDATED, EXPECTED_STATE_UPDATED, EXPECTED_STATE_UPDATED}},
5349 {"opvect2", {EXPECTED_STATE_UPDATED, EXPECTED_STATE_UPDATED, EXPECTED_STATE_UPDATED, EXPECTED_STATE_UPDATED,
5350 EXPECTED_STATE_UPDATED, EXPECTED_STATE_UPDATED, EXPECTED_STATE_UPDATED, EXPECTED_STATE_UPDATED,
5351 EXPECTED_STATE_UPDATED, EXPECTED_STATE_UPDATED, EXPECTED_STATE_UPDATED, EXPECTED_STATE_UPDATED,
5352 EXPECTED_STATE_UPDATED, EXPECTED_STATE_UPDATED, EXPECTED_STATE_UPDATED, EXPECTED_STATE_ANYTHING,
5353 EXPECTED_STATE_UPDATED, EXPECTED_STATE_UPDATED, EXPECTED_STATE_UPDATED}},
5354 {"opvect3", {EXPECTED_STATE_ZERO, EXPECTED_STATE_ZERO, EXPECTED_STATE_ZERO, EXPECTED_STATE_ZERO,
5355 EXPECTED_STATE_ZERO, EXPECTED_STATE_ZERO, EXPECTED_STATE_ZERO, EXPECTED_STATE_UPDATED,
5356 EXPECTED_STATE_ZERO, EXPECTED_STATE_ZERO, EXPECTED_STATE_ZERO, EXPECTED_STATE_ZERO,
5357 EXPECTED_STATE_ZERO, EXPECTED_STATE_ZERO, EXPECTED_STATE_ZERO, EXPECTED_STATE_ANYTHING,
5358 EXPECTED_STATE_ZERO, EXPECTED_STATE_ZERO, EXPECTED_STATE_ZERO}},
5360 static const struct
5362 const char *param_name;
5363 const unsigned int const_updated_mask[(ARRAY_SIZE(test_effect_preshader_fvect_v)
5364 + TEST_EFFECT_BITMASK_BLOCK_SIZE - 1) / TEST_EFFECT_BITMASK_BLOCK_SIZE];
5366 check_vconsts_parameters[] =
5368 {"g_Selector", {0x00000000, 0x00000002}},
5369 {"g_Pos1", {0x80000000, 0x00000002}},
5370 {"g_Pos2", {0x00000000, 0x00000002}},
5371 {"m4x3column", {0x03800000, 0x00000000}},
5372 {"m3x4column", {0x000f0000, 0x00000000}},
5373 {"m4x3row", {0x0000f000, 0x00000000}},
5374 {"m3x4row", {0x00700000, 0x00000000}},
5375 {"ts1", {0x1c000000, 0x00000000}},
5376 {"ts2", {0x0000003f, 0x00000000}},
5377 {"arr1", {0x00000000, 0x00000001}},
5378 {"arr2", {0x60000000, 0x00000000}},
5379 {"ts3", {0x00000fc0, 0x00000000}},
5381 static const struct
5383 const char *param_name;
5384 const unsigned int const_updated_mask[(ARRAY_SIZE(test_effect_preshader_bconsts)
5385 + TEST_EFFECT_BITMASK_BLOCK_SIZE - 1) / TEST_EFFECT_BITMASK_BLOCK_SIZE];
5387 check_bconsts_parameters[] =
5389 {"mb2x3row", {0x0000001f}},
5390 {"mb2x3column", {0x00000060}},
5392 static const unsigned int const_no_update_mask[(ARRAY_SIZE(test_effect_preshader_fvect_v)
5393 + TEST_EFFECT_BITMASK_BLOCK_SIZE - 1) / TEST_EFFECT_BITMASK_BLOCK_SIZE];
5394 static const D3DLIGHT9 light_filler = {D3DLIGHT_POINT};
5396 ID3DXEffect *effect;
5397 HRESULT hr;
5398 D3DXHANDLE param;
5399 unsigned int i, passes_count, value;
5400 int ivect[4];
5401 D3DXVECTOR4 fvect;
5402 IDirect3DVertexShader9 *vshader;
5403 unsigned char buffer[256];
5406 hr = D3DXCreateEffect(device, test_effect_preshader_effect_blob, sizeof(test_effect_preshader_effect_blob),
5407 NULL, NULL, 0, NULL, &effect, NULL);
5408 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5410 param = effect->lpVtbl->GetParameterByName(effect, NULL, "g_iVect");
5411 ok(!!param, "GetParameterByName failed.\n");
5413 hr = effect->lpVtbl->Begin(effect, &passes_count, 0);
5414 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5416 hr = IDirect3DDevice9_SetVertexShader(device, NULL);
5417 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5419 hr = effect->lpVtbl->BeginPass(effect, 0);
5420 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5422 for (i = 0; i < ARRAY_SIZE(check_op_parameters); ++i)
5424 unsigned int j;
5426 for (j = 0; j < 8; ++j)
5428 hr = IDirect3DDevice9_SetLight(device, j, &light_filler);
5429 ok(hr == D3D_OK, "Got result %#x, i %u, j %u.\n", hr, i, j);
5431 param = effect->lpVtbl->GetParameterByName(effect, NULL, check_op_parameters[i].param_name);
5432 ok(!!param, "Failed to get parameter (test %u).\n", i);
5433 hr = effect->lpVtbl->GetValue(effect, param, &fvect, sizeof(fvect));
5434 ok(hr == D3D_OK, "Failed to get parameter value, hr %#x (test %u).\n", hr, i);
5435 hr = effect->lpVtbl->SetValue(effect, param, &fvect, sizeof(fvect));
5436 ok(hr == D3D_OK, "Failed to set parameter value, hr %#x (test %u).\n", hr, i);
5437 hr = effect->lpVtbl->CommitChanges(effect);
5438 ok(hr == D3D_OK, "Failed to commit changes, hr %#x (test %u).\n", hr, i);
5440 test_effect_preshader_op_results(device, check_op_parameters[i].state_updated,
5441 check_op_parameters[i].param_name);
5444 for (i = 0; i < ARRAY_SIZE(check_vconsts_parameters); ++i)
5446 test_effect_preshader_clear_vconsts(device);
5447 param = effect->lpVtbl->GetParameterByName(effect, NULL, check_vconsts_parameters[i].param_name);
5448 ok(!!param, "GetParameterByName failed.\n");
5449 hr = effect->lpVtbl->GetValue(effect, param, buffer, sizeof(buffer));
5450 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5451 hr = effect->lpVtbl->SetValue(effect, param, buffer, sizeof(buffer));
5452 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5453 hr = effect->lpVtbl->CommitChanges(effect);
5454 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5456 test_effect_preshader_compare_vconsts(device, check_vconsts_parameters[i].const_updated_mask,
5457 check_vconsts_parameters[i].param_name);
5460 for (i = 0; i < ARRAY_SIZE(check_bconsts_parameters); ++i)
5462 test_effect_preshader_clear_pbool_consts(device);
5463 param = effect->lpVtbl->GetParameterByName(effect, NULL, check_bconsts_parameters[i].param_name);
5464 ok(!!param, "GetParameterByName failed.\n");
5465 hr = effect->lpVtbl->GetValue(effect, param, buffer, sizeof(buffer));
5466 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5467 hr = effect->lpVtbl->SetValue(effect, param, buffer, sizeof(buffer));
5468 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5469 hr = effect->lpVtbl->CommitChanges(effect);
5470 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5472 test_effect_preshader_compare_pbool_consts(device, check_bconsts_parameters[i].const_updated_mask,
5473 check_bconsts_parameters[i].param_name);
5476 test_effect_preshader_clear_vconsts(device);
5477 param = effect->lpVtbl->GetParameterByName(effect, NULL, "g_Selector");
5478 ok(!!param, "GetParameterByName failed.\n");
5479 fvect.x = fvect.y = fvect.z = fvect.w = 0.0f;
5480 hr = effect->lpVtbl->SetVectorArray(effect, param, &fvect, 1);
5481 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5482 hr = effect->lpVtbl->CommitChanges(effect);
5483 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5484 test_effect_preshader_compare_vconsts(device, check_vconsts_parameters[0].const_updated_mask,
5485 check_vconsts_parameters[0].param_name);
5487 test_effect_preshader_clear_vconsts(device);
5488 param = effect->lpVtbl->GetParameterByName(effect, NULL, "arr2");
5489 ok(!!param, "GetParameterByName failed.\n");
5490 param = effect->lpVtbl->GetParameterElement(effect, param, 0);
5491 ok(!!param, "GetParameterElement failed.\n");
5492 hr = effect->lpVtbl->SetFloat(effect, param, 92.0f);
5493 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5494 hr = effect->lpVtbl->CommitChanges(effect);
5495 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5496 test_effect_preshader_compare_vconsts(device, const_no_update_mask,
5497 check_vconsts_parameters[10].param_name);
5499 test_effect_preshader_clear_vconsts(device);
5500 param = effect->lpVtbl->GetParameterByName(effect, NULL, "arr2");
5501 ok(!!param, "GetParameterByName failed.\n");
5502 param = effect->lpVtbl->GetParameterElement(effect, param, 1);
5503 ok(!!param, "GetParameterElement failed.\n");
5504 fvect.x = 93.0f;
5505 hr = effect->lpVtbl->SetValue(effect, param, &fvect.x, sizeof(fvect.x));
5506 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5507 hr = effect->lpVtbl->CommitChanges(effect);
5508 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5509 test_effect_preshader_compare_vconsts(device, check_vconsts_parameters[10].const_updated_mask,
5510 check_vconsts_parameters[10].param_name);
5512 test_effect_preshader_clear_vconsts(device);
5513 param = effect->lpVtbl->GetParameterByName(effect, NULL, "arr2");
5514 ok(!!param, "GetParameterByName failed.\n");
5515 fvect.x = 92.0f;
5516 hr = effect->lpVtbl->SetFloatArray(effect, param, &fvect.x, 1);
5517 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5518 hr = effect->lpVtbl->CommitChanges(effect);
5519 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5520 test_effect_preshader_compare_vconsts(device, check_vconsts_parameters[10].const_updated_mask,
5521 check_vconsts_parameters[10].param_name);
5523 test_effect_preshader_clear_vconsts(device);
5524 param = effect->lpVtbl->GetParameterByName(effect, NULL, "arr2");
5525 ok(!!param, "GetParameterByName failed.\n");
5526 param = effect->lpVtbl->GetParameterElement(effect, param, 1);
5527 ok(!!param, "GetParameterElement failed.\n");
5528 hr = effect->lpVtbl->SetInt(effect, param, 93);
5529 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5530 hr = effect->lpVtbl->CommitChanges(effect);
5531 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5532 test_effect_preshader_compare_vconsts(device, const_no_update_mask,
5533 check_vconsts_parameters[10].param_name);
5535 test_effect_preshader_clear_vconsts(device);
5536 param = effect->lpVtbl->GetParameterByName(effect, NULL, "g_Pos1");
5537 ok(!!param, "GetParameterByName failed.\n");
5538 fvect.x = fvect.y = fvect.z = fvect.w = 0.0f;
5539 hr = effect->lpVtbl->SetVector(effect, param, &fvect);
5540 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5541 hr = effect->lpVtbl->CommitChanges(effect);
5542 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5543 test_effect_preshader_compare_vconsts(device, check_vconsts_parameters[1].const_updated_mask,
5544 check_vconsts_parameters[1].param_name);
5546 test_effect_preshader_clear_vconsts(device);
5547 param = effect->lpVtbl->GetParameterByName(effect, NULL, "ts1");
5548 ok(!!param, "GetParameterByName failed.\n");
5549 param = effect->lpVtbl->GetParameterElement(effect, param, 0);
5550 ok(!!param, "GetParameterByName failed.\n");
5551 param = effect->lpVtbl->GetParameterByName(effect, param, "fv");
5552 ok(!!param, "GetParameterByName failed.\n");
5553 fvect.x = 12;
5554 hr = effect->lpVtbl->SetValue(effect, param, &fvect.x, sizeof(float));
5555 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5556 hr = effect->lpVtbl->CommitChanges(effect);
5557 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5558 test_effect_preshader_compare_vconsts(device, check_vconsts_parameters[7].const_updated_mask,
5559 check_vconsts_parameters[7].param_name);
5561 *(float *)&value = 9999.0f;
5562 hr = IDirect3DDevice9_SetRenderState(device, D3DRS_FOGDENSITY, value);
5563 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5564 hr = IDirect3DDevice9_SetRenderState(device, D3DRS_FOGSTART, value);
5565 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5566 hr = IDirect3DDevice9_SetRenderState(device, D3DRS_POINTSCALE_A, value);
5567 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5568 hr = IDirect3DDevice9_SetRenderState(device, D3DRS_POINTSCALE_B, value);
5569 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5570 test_effect_preshader_clear_vconsts(device);
5571 param = effect->lpVtbl->GetParameterByName(effect, NULL, "ts2");
5572 ok(!!param, "GetParameterByName failed.\n");
5573 param = effect->lpVtbl->GetParameterElement(effect, param, 0);
5574 ok(!!param, "GetParameterByName failed.\n");
5575 param = effect->lpVtbl->GetParameterByName(effect, param, "v1");
5576 ok(!!param, "GetParameterByName failed.\n");
5577 hr = effect->lpVtbl->GetValue(effect, param, &fvect, sizeof(float) * 3);
5578 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5579 hr = effect->lpVtbl->SetValue(effect, param, &fvect, sizeof(float) * 3);
5580 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5581 hr = effect->lpVtbl->CommitChanges(effect);
5582 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5583 hr = IDirect3DDevice9_GetRenderState(device, D3DRS_FOGDENSITY, &value);
5584 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5585 ok(value == 0, "Unexpected fog density %g.\n", *(float *)&value);
5586 hr = IDirect3DDevice9_GetRenderState(device, D3DRS_FOGSTART, &value);
5587 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5588 ok(*(float *)&value == 4.0f, "Unexpected fog start %g.\n", *(float *)&value);
5589 hr = IDirect3DDevice9_GetRenderState(device, D3DRS_POINTSCALE_A, &value);
5590 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5591 ok(*(float *)&value == 9999.0f, "Unexpected point scale A %g.\n", *(float *)&value);
5592 hr = IDirect3DDevice9_GetRenderState(device, D3DRS_POINTSCALE_B, &value);
5593 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5594 ok(*(float *)&value == 9999.0f, "Unexpected point scale B %g.\n", *(float *)&value);
5595 test_effect_preshader_compare_vconsts(device, check_vconsts_parameters[8].const_updated_mask,
5596 check_vconsts_parameters[8].param_name);
5598 *(float *)&value = 9999.0f;
5599 hr = IDirect3DDevice9_SetRenderState(device, D3DRS_FOGDENSITY, value);
5600 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5601 hr = IDirect3DDevice9_SetRenderState(device, D3DRS_FOGSTART, value);
5602 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5603 hr = IDirect3DDevice9_SetRenderState(device, D3DRS_POINTSCALE_A, value);
5604 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5605 hr = IDirect3DDevice9_SetRenderState(device, D3DRS_POINTSCALE_B, value);
5606 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5607 test_effect_preshader_clear_vconsts(device);
5608 param = effect->lpVtbl->GetParameterByName(effect, NULL, "ts3");
5609 ok(!!param, "GetParameterByName failed.\n");
5610 param = effect->lpVtbl->GetParameterByName(effect, param, "ts");
5611 ok(!!param, "GetParameterByName failed.\n");
5612 param = effect->lpVtbl->GetParameterElement(effect, param, 1);
5613 ok(!!param, "GetParameterByName failed.\n");
5614 param = effect->lpVtbl->GetParameterByName(effect, param, "fv");
5615 ok(!!param, "GetParameterByName failed.\n");
5616 hr = effect->lpVtbl->GetValue(effect, param, &fvect.x, sizeof(float));
5617 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5618 hr = effect->lpVtbl->SetValue(effect, param, &fvect.x, sizeof(float));
5619 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5620 hr = effect->lpVtbl->CommitChanges(effect);
5621 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5622 hr = IDirect3DDevice9_GetRenderState(device, D3DRS_FOGDENSITY, &value);
5623 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5624 ok(*(float *)&value == 9999.0f, "Unexpected fog density %g.\n", *(float *)&value);
5625 hr = IDirect3DDevice9_GetRenderState(device, D3DRS_FOGSTART, &value);
5626 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5627 ok(*(float *)&value == 9999.0f, "Unexpected fog start %g.\n", *(float *)&value);
5628 hr = IDirect3DDevice9_GetRenderState(device, D3DRS_POINTSCALE_A, &value);
5629 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5630 ok(*(float *)&value == 4.0f, "Unexpected point scale A %g.\n", *(float *)&value);
5631 hr = IDirect3DDevice9_GetRenderState(device, D3DRS_POINTSCALE_B, &value);
5632 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5633 ok(*(float *)&value == 12.0f, "Unexpected point scale B %g.\n", *(float *)&value);
5634 test_effect_preshader_compare_vconsts(device, check_vconsts_parameters[11].const_updated_mask,
5635 check_vconsts_parameters[11].param_name);
5637 hr = IDirect3DDevice9_GetSamplerState(device, D3DVERTEXTEXTURESAMPLER0, D3DSAMP_MINFILTER, &value);
5638 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5639 ok(value == 1, "Unexpected sampler 0 minfilter %u.\n", value);
5640 hr = IDirect3DDevice9_GetSamplerState(device, D3DVERTEXTEXTURESAMPLER1, D3DSAMP_MINFILTER, &value);
5641 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5642 todo_wine
5643 ok(value == 0, "Unexpected sampler 1 minfilter %u.\n", value);
5644 hr = IDirect3DDevice9_GetSamplerState(device, D3DVERTEXTEXTURESAMPLER2, D3DSAMP_MINFILTER, &value);
5645 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5646 ok(value == 3, "Unexpected sampler 2 minfilter %u.\n", value);
5648 param = effect->lpVtbl->GetParameterByName(effect, NULL, "g_iVect");
5649 ok(!!param, "GetParameterByName failed.\n");
5650 ivect[0] = ivect[1] = ivect[2] = ivect[3] = 1;
5651 hr = effect->lpVtbl->SetValue(effect, param, ivect, sizeof(ivect));
5652 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5654 for (i = 0; i < 3; ++i)
5656 hr = IDirect3DDevice9_SetSamplerState(device, D3DVERTEXTEXTURESAMPLER0 + i, D3DSAMP_MINFILTER, 0);
5657 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5658 hr = IDirect3DDevice9_SetSamplerState(device, D3DVERTEXTEXTURESAMPLER0 + i, D3DSAMP_MAGFILTER, 0);
5659 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5662 hr = IDirect3DDevice9_SetSamplerState(device, 0, D3DSAMP_MINFILTER, 0);
5663 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5664 hr = IDirect3DDevice9_SetSamplerState(device, 0, D3DSAMP_MAGFILTER, 0);
5665 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5667 hr = IDirect3DDevice9_SetVertexShader(device, NULL);
5668 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5669 test_effect_preshader_clear_vconsts(device);
5671 hr = effect->lpVtbl->CommitChanges(effect);
5672 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5674 hr = IDirect3DDevice9_GetVertexShader(device, &vshader);
5675 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5676 ok(!vshader, "Got non NULL vshader.\n");
5677 test_effect_preshader_compare_vconsts(device, const_no_update_mask,
5678 "selector g_iVect");
5680 hr = IDirect3DDevice9_GetSamplerState(device, D3DVERTEXTEXTURESAMPLER0, D3DSAMP_MINFILTER, &value);
5681 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5682 ok(value == 0, "Unexpected sampler 0 minfilter %u.\n", value);
5683 hr = IDirect3DDevice9_GetSamplerState(device, D3DVERTEXTEXTURESAMPLER1, D3DSAMP_MINFILTER, &value);
5684 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5685 ok(value == 0, "Unexpected sampler 1 minfilter %u.\n", value);
5687 hr = IDirect3DDevice9_GetSamplerState(device, D3DVERTEXTEXTURESAMPLER2, D3DSAMP_MINFILTER, &value);
5688 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5689 ok(value == 1, "Unexpected sampler 2 minfilter %u.\n", value);
5690 hr = IDirect3DDevice9_GetSamplerState(device, D3DVERTEXTEXTURESAMPLER2, D3DSAMP_MAGFILTER, &value);
5691 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5692 ok(value == 0, "Unexpected sampler 2 minfilter %u.\n", value);
5693 hr = IDirect3DDevice9_GetSamplerState(device, 0, D3DSAMP_MINFILTER, &value);
5694 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5695 ok(value == 1, "Unexpected sampler 0 minfilter %u.\n", value);
5696 hr = IDirect3DDevice9_GetSamplerState(device, 0, D3DSAMP_MAGFILTER, &value);
5697 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5698 ok(value == 0, "Unexpected sampler 0 minfilter %u.\n", value);
5700 ivect[3] = 2;
5701 hr = effect->lpVtbl->SetValue(effect, param, ivect, sizeof(ivect));
5702 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5703 ivect[3] = 1;
5704 hr = effect->lpVtbl->SetValue(effect, param, ivect, sizeof(ivect));
5705 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5706 hr = effect->lpVtbl->CommitChanges(effect);
5707 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5708 hr = IDirect3DDevice9_GetVertexShader(device, &vshader);
5709 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5710 ok(!vshader, "Got non NULL vshader.\n");
5711 test_effect_preshader_compare_vconsts(device, const_no_update_mask,
5712 "selector g_iVect");
5713 ivect[3] = 2;
5714 hr = effect->lpVtbl->SetValue(effect, param, ivect, sizeof(ivect));
5715 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5716 hr = effect->lpVtbl->CommitChanges(effect);
5717 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5718 hr = IDirect3DDevice9_GetVertexShader(device, &vshader);
5719 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5720 ok(!!vshader, "Got NULL vshader.\n");
5721 IDirect3DVertexShader9_Release(vshader);
5722 hr = IDirect3DDevice9_GetVertexShaderConstantF(device, 0, &fvect.x, 1);
5723 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5724 ok(fvect.x == 0.0f && fvect.y == 0.0f && fvect.z == 0.0f && fvect.w == 0.0f,
5725 "Vertex shader float constants do not match.\n");
5726 hr = IDirect3DDevice9_SetVertexShaderConstantF(device, 0, &fvect_filler.x, 1);
5727 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5728 test_effect_preshader_compare_vconsts(device, const_no_update_mask,
5729 "selector g_iVect");
5730 ivect[3] = 1;
5731 hr = effect->lpVtbl->SetValue(effect, param, ivect, sizeof(ivect));
5732 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5733 hr = effect->lpVtbl->CommitChanges(effect);
5734 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5735 test_effect_preshader_compare_vconsts(device, NULL, NULL);
5737 hr = effect->lpVtbl->EndPass(effect);
5738 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5740 hr = effect->lpVtbl->End(effect);
5741 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5743 effect->lpVtbl->Release(effect);
5746 static void test_effect_preshader_relative_addressing(IDirect3DDevice9 *device)
5748 static const struct
5750 D3DXVECTOR4 opvect2;
5751 D3DXVECTOR4 g_ivect;
5752 unsigned int expected[4];
5754 test_out_of_bounds_index[] =
5756 {{1.0f, 2.0f, 3.0f, 4.0f}, {101.0f, 101.0f, 101.0f, 101.0f}, {0, 0x42ca0000, 0x3f800000, 0}},
5757 {{1.0f, 2.0f, 3.0f, 4.0f}, {3333.0f, 1094.0f, 2222.0f, 3333.0f},
5758 {0x447ac000, 0x45505000, 0x3f800000, 0}},
5759 {{1.0f, 2.0f, 3.0f, 4.0f}, {3333.0f, 1094.0f, 2222.0f, 1.0f},
5760 {0x447ac000, 0x3f800000, 0x447a8000, 0x453b9000}},
5761 {{1.0f, 2.0f, 3.0f, 4.0f}, {1.0f, 1094.0f, 2222.0f, 3333.0f},
5762 {0x447ac000, 0x45505000, 0x3f800000, 0x453ba000}},
5763 {{1.0f, 2.0f, 3.0f, 4.0f}, {1111.0f, 1094.0f, 2222.0f, 1111.0f},
5764 {0x447ac000, 0x448ae000, 0, 0}},
5765 {{1.0f, 2.0f, 3.0f, 4.0f}, {1111.0f, 1094.0f, 2222.0f, 3333.0f},
5766 {0x447ac000, 0x45505000, 0x3f800000, 0}},
5767 {{-1111.0f, 1094.0f, -2222.0f, -3333.0f}, {4.0f, 3.0f, 2.0f, 1.0f},
5768 {0x447ac000, 0x40800000, 0x447a8000, 0x453b9000}},
5769 {{1.0f, 2.0f, 3.0f, 4.0f}, {-1.0f, -1.0f, -1.0f, -1.0f}, {0, 0xbf800000, 0, 0}},
5770 {{1.0f, 2.0f, 3.0f, 4.0f}, {-2.0f, -2.0f, -2.0f, -2.0f}, {0, 0xc0000000, 0x459c4800, 0}},
5771 {{1.0f, 2.0f, 3.0f, 4.0f}, {-3.0f, -3.0f, -3.0f, -3.0f}, {0, 0xc0400000, 0x453b9000, 0}},
5772 {{1.0f, 2.0f, 3.0f, 4.0f}, {-4.0f, -4.0f, -4.0f, -4.0f}, {0, 0xc0800000, 0x44fa2000, 0}},
5773 {{1.0f, 2.0f, 3.0f, 4.0f}, {-5.0f, -5.0f, -5.0f, -5.0f}, {0, 0xc0a00000, 0x459c5000, 0}},
5774 {{1.0f, 2.0f, 3.0f, 4.0f}, {-6.0f, -6.0f, -6.0f, -6.0f}, {0, 0xc0c00000, 0x453ba000, 0xc1400000}},
5775 {{1.0f, 2.0f, 3.0f, 4.0f}, {-7.0f, -7.0f, -7.0f, -7.0f}, {0, 0xc0e00000, 0x44fa4000, 0x40400000}},
5776 {{1.0f, 2.0f, 3.0f, 4.0f}, {-8.0f, -8.0f, -8.0f, -8.0f}, {0, 0xc1000000, 0, 0x44fa6000}},
5777 {{1.0f, 2.0f, 3.0f, 4.0f}, {-9.0f, -9.0f, -9.0f, -9.0f}, {0, 0xc1100000, 0, 0}},
5778 {{1.0f, 2.0f, 3.0f, 4.0f}, {-10.0f, -10.0f, -10.0f, -10.0f}, {0, 0xc1200000, 0xc1200000, 0}},
5779 {{1.0f, 2.0f, 3.0f, 4.0f}, {-11.0f, -11.0f, -11.0f, -11.0f}, {0, 0xc1300000, 0x3f800000, 0}},
5780 {{1.0f, 2.0f, 3.0f, 4.0f}, {-12.0f, -12.0f, -12.0f, -12.0f}, {0, 0xc1400000, 0x447a4000, 0}},
5781 {{1.0f, 2.0f, 3.0f, 4.0f}, {5.0f, 5.0f, 5.0f, 5.0f}, {0, 0x40a00000, 0x3f800000, 0}},
5782 {{1.0f, 2.0f, 3.0f, 4.0f}, {-1111.0f, 1094.0f, -2222.0f, -3333.0f},
5783 {0x447ac000, 0xc5505000, 0x459c5000, 0x40000000}},
5784 {{1.0f, 2.0f, 3.0f, 4.0f}, {-3333.0f, 1094.0f, -2222.0f, -1111.0f},
5785 {0x447ac000, 0xc48ae000, 0x44fa4000, 0x3f800000}},
5786 {{1.0f, 2.0f, 3.0f, 4.0f}, {-3333.0f, 1094.0f, -2222.0f, -3333.0f},
5787 {0x447ac000, 0xc5505000, 0x459c5000, 0}},
5788 {{1.0f, 2.0f, 3.0f, 4.0f}, {-1111.0f, 1094.0f, -2222.0f, -1111.0f},
5789 {0x447ac000, 0xc48ae000, 0x44fa4000, 0x40400000}},
5791 static const struct
5793 unsigned int zw[2];
5795 expected_light_specular[] =
5797 {{0, 0x44fa2000}},
5798 {{0x447a8000, 0x453b9000}},
5799 {{0x40000000, 0x459c4800}},
5800 {{0xbf800000, 0}},
5801 {{0x447a4000, 0}},
5802 {{0x3f800000, 0}},
5803 {{0xbf800000, 0}},
5804 {{0, 0}},
5805 {{0, 0x447a4000}},
5806 {{0x44fa4000, 0x3f800000}},
5807 {{0x453ba000, 0xbf800000}},
5808 {{0x459c5000, 0}},
5809 {{0x44fa2000, 0}},
5810 {{0x453b9000, 0}},
5811 {{0x459c4800, 0}},
5812 {{0, 0}},
5814 static const struct
5816 int index_value;
5817 unsigned int expected[4];
5819 test_index_to_immediate_table[] =
5821 {-1000000, {0, 0x40800000, 0x45bbd800, 0x41300000}},
5822 {-1001, {0x448d4000, 0x41300000, 0, 0}},
5823 {-32, {0x448d4000, 0x40800000, 0, 0}},
5824 {-31, {0x45843000, 0x41400000, 0, 0}},
5825 {-30, {0x46a64000, 0x41400000, 0x447a4000, 0x3f800000}},
5826 {-29, {0, 0x447a4000, 0x447a8000, 0x40000000}},
5827 {-28, {0, 0, 0x447ac000, 0x40400000}},
5828 {-27, {0, 0x3f800000, 0, 0}},
5829 {-26, {0, 0x41100000, 0x45bbd800, 0x41300000}},
5830 {-25, {0, 0x41300000, 0, 0}},
5831 {-24, {0, 0x41600000, 0, 0}},
5832 {-23, {0, 0, 0, 0}},
5833 {-22, {0, 0, 0, 0}},
5834 {-21, {0, 0x40a00000, 0, 0}},
5835 {-20, {0, 0x41500000, 0, 0}},
5836 {-19, {0, 0x41500000, 0, 0}},
5837 {-18, {0, 0xc1900000, 0, 0}},
5838 {-17, {0, 0, 0, 0}},
5839 {-16, {0, 0x40800000, 0, 0}},
5840 {-15, {0, 0x41400000, 0, 0}},
5841 {-14, {0, 0x41400000, 0, 0}},
5842 {-13, {0, 0x447a4000, 0x447a4000, 0x3f800000}},
5843 {-12, {0, 0, 0, 0}},
5844 {-11, {0, 0x3f800000, 0, 0}},
5845 {-10, {0, 0x41100000, 0, 0}},
5846 {-9, {0, 0x41300000, 0, 0}},
5847 {-8, {0, 0x41600000, 0, 0}},
5848 {-7, {0, 0, 0, 0}},
5849 {-6, {0, 0, 0, 0}},
5850 {-5, {0, 0x40a00000, 0, 0}},
5851 {-4, {0, 0x41500000, 0, 0}},
5852 {-3, {0, 0x41500000, 0, 0}},
5853 {-2, {0, 0xc0000000, 0, 0}},
5854 {-1, {0, 0, 0, 0}},
5855 {0, {0x45052000, 0x40800000, 0x447a4000, 0x3f800000}},
5856 {1, {0x467e6000, 0x41400000, 0x447a8000, 0x40000000}},
5857 {2, {0, 0x41400000, 0x447ac000, 0x40400000}},
5858 {3, {0, 0x447a4000, 0, 0}},
5859 {4, {0, 0, 0x45bbd800, 0x41300000}},
5860 {5, {0, 0x3f800000, 0, 0}},
5861 {6, {0, 0x41100000, 0, 0}},
5862 {7, {0, 0x41300000, 0, 0}},
5863 {8, {0, 0x41600000, 0, 0}},
5864 {9, {0, 0, 0, 0}},
5865 {10, {0, 0, 0, 0}},
5866 {11, {0, 0x40a00000, 0, 0}},
5867 {12, {0, 0x41500000, 0, 0}},
5868 {13, {0, 0x41500000, 0, 0}},
5869 {14, {0, 0x41600000, 0, 0}},
5870 {15, {0, 0, 0, 0}},
5871 {16, {0, 0x40800000, 0, 0}},
5872 {17, {0x45052000, 0x41400000, 0x447a4000, 0x3f800000}},
5873 {18, {0x467e6000, 0x41400000, 0x447a8000, 0x40000000}},
5874 {19, {0, 0x447a4000, 0x447ac000, 0x40400000}},
5875 {20, {0, 0, 0, 0}},
5876 {21, {0, 0x3f800000, 0x45bbd800, 0x41300000}},
5877 {22, {0, 0x41100000, 0, 0}},
5878 {23, {0, 0x41300000, 0, 0}},
5879 {24, {0, 0x41600000, 0, 0}},
5880 {25, {0, 0, 0, 0}},
5881 {26, {0, 0, 0, 0}},
5882 {27, {0, 0x40a00000, 0, 0}},
5883 {28, {0, 0x41500000, 0, 0}},
5884 {29, {0, 0x41500000, 0, 0}},
5885 {30, {0, 0x41f00000, 0, 0}},
5886 {31, {0, 0, 0, 0}},
5887 {1001, {0, 0, 0, 0}},
5888 {1000000, {0, 0x40800000, 0, 0}},
5890 static const D3DLIGHT9 light_filler = {D3DLIGHT_POINT, {1.0f, 1.0f, 1.0f, 1.0f}, {1.0f, 1.0f, 1.0f, 1.0f},
5891 {1.0f, 1.0f, 1.0f, 1.0f}};
5892 unsigned int j, passes_count;
5893 const unsigned int *expected;
5894 const float *expected_float;
5895 ID3DXEffect *effect;
5896 D3DXVECTOR4 fvect;
5897 D3DLIGHT9 light;
5898 const float *v;
5899 HRESULT hr;
5900 int i;
5902 hr = D3DXCreateEffect(device, test_effect_preshader_effect_blob, sizeof(test_effect_preshader_effect_blob),
5903 NULL, NULL, 0, NULL, &effect, NULL);
5904 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5906 hr = effect->lpVtbl->Begin(effect, &passes_count, 0);
5907 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5908 hr = effect->lpVtbl->BeginPass(effect, 0);
5909 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5911 fvect.x = 1001.0f; fvect.y = 1002.0f; fvect.z = 1003.0f; fvect.w = 1004.0f;
5912 hr = effect->lpVtbl->SetVector(effect, "opvect1", &fvect);
5913 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5915 fvect.x = 2001.0f; fvect.y = 2002.0f; fvect.z = 2003.0f; fvect.w = 2004.0f;
5916 hr = effect->lpVtbl->SetVector(effect, "g_Selector[0]", &fvect);
5917 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5919 fvect.x = 3001.0f; fvect.y = 3002.0f; fvect.z = 3003.0f; fvect.w = 3004.0f;
5920 hr = effect->lpVtbl->SetVector(effect, "g_Selector[1]", &fvect);
5921 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5923 v = &light.Specular.r;
5924 for (i = 0; i < ARRAY_SIZE(test_out_of_bounds_index); ++i)
5926 hr = effect->lpVtbl->SetVector(effect, "opvect2", &test_out_of_bounds_index[i].opvect2);
5927 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5928 hr = effect->lpVtbl->SetVector(effect, "g_iVect", &test_out_of_bounds_index[i].g_ivect);
5929 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5931 hr = IDirect3DDevice9_SetLight(device, 1, &light_filler);
5932 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5934 hr = effect->lpVtbl->CommitChanges(effect);
5935 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5937 hr = IDirect3DDevice9_GetLight(device, 1, &light);
5938 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5940 expected = test_out_of_bounds_index[i].expected;
5941 expected_float = (const float *)expected;
5943 for (j = 0; j < 4; ++j)
5945 ok(compare_float(v[j], expected_float[j], 0),
5946 "Test %d, component %u, expected %#x (%g), got %#x (%g).\n",
5947 i, j, expected[j], expected_float[j], ((const unsigned int *)v)[j], v[j]);
5951 hr = effect->lpVtbl->SetVector(effect, "opvect2", &test_out_of_bounds_index[7].opvect2);
5952 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5953 hr = effect->lpVtbl->SetVector(effect, "g_iVect", &test_out_of_bounds_index[7].g_ivect);
5954 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5956 hr = IDirect3DDevice9_SetLight(device, 1, &light_filler);
5957 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5959 fvect = test_out_of_bounds_index[7].g_ivect;
5960 v = &light.Specular.b;
5961 for (i = -100; i < 100; ++i)
5963 fvect.w = i;
5964 hr = effect->lpVtbl->SetVector(effect, "g_iVect", &fvect);
5965 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5966 hr = effect->lpVtbl->CommitChanges(effect);
5967 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5969 hr = IDirect3DDevice9_GetLight(device, 1, &light);
5970 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5972 expected = expected_light_specular[(unsigned int)i % ARRAY_SIZE(expected_light_specular)].zw;
5973 expected_float = (const float *)expected;
5975 for (j = 0; j < 2; ++j)
5977 ok(compare_float(v[j], expected_float[j], 0),
5978 "i %d, component %u, expected %#x (%g), got %#x (%g).\n",
5979 i, j + 2, expected[j], expected_float[j], ((const unsigned int *)v)[j], v[j]);
5983 v = &light.Specular.r;
5984 for (i = 0; i < ARRAY_SIZE(test_index_to_immediate_table); ++i)
5986 fvect.x = fvect.y = fvect.z = fvect.w = test_index_to_immediate_table[i].index_value;
5987 hr = effect->lpVtbl->SetVector(effect, "g_iVect", &fvect);
5988 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5989 hr = effect->lpVtbl->CommitChanges(effect);
5990 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5992 hr = IDirect3DDevice9_GetLight(device, 2, &light);
5993 ok(hr == D3D_OK, "Got result %#x.\n", hr);
5995 expected = test_index_to_immediate_table[i].expected;
5996 expected_float = (const float *)expected;
5998 for (j = 0; j < 4; ++j)
6000 ok(compare_float(v[j], expected_float[j], 0),
6001 "Test %d, component %u, expected %#x (%g), got %#x (%g).\n",
6002 i, j, expected[j], expected_float[j], ((const unsigned int *)v)[j], v[j]);
6006 hr = effect->lpVtbl->EndPass(effect);
6007 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6008 hr = effect->lpVtbl->End(effect);
6009 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6011 effect->lpVtbl->Release(effect);
6014 struct test_state_manager_update
6016 unsigned int state_op;
6017 DWORD param1;
6018 DWORD param2;
6021 struct test_manager
6023 ID3DXEffectStateManager ID3DXEffectStateManager_iface;
6024 LONG ref;
6026 IDirect3DDevice9 *device;
6027 struct test_state_manager_update *update_record;
6028 unsigned int update_record_count;
6029 unsigned int update_record_size;
6032 #define INITIAL_UPDATE_RECORD_SIZE 64
6034 static struct test_manager *impl_from_ID3DXEffectStateManager(ID3DXEffectStateManager *iface)
6036 return CONTAINING_RECORD(iface, struct test_manager, ID3DXEffectStateManager_iface);
6039 static void free_test_effect_state_manager(struct test_manager *state_manager)
6041 HeapFree(GetProcessHeap(), 0, state_manager->update_record);
6042 state_manager->update_record = NULL;
6044 IDirect3DDevice9_Release(state_manager->device);
6047 static ULONG WINAPI test_manager_AddRef(ID3DXEffectStateManager *iface)
6049 struct test_manager *state_manager = impl_from_ID3DXEffectStateManager(iface);
6051 return InterlockedIncrement(&state_manager->ref);
6054 static ULONG WINAPI test_manager_Release(ID3DXEffectStateManager *iface)
6056 struct test_manager *state_manager = impl_from_ID3DXEffectStateManager(iface);
6057 ULONG ref = InterlockedDecrement(&state_manager->ref);
6059 if (!ref)
6061 free_test_effect_state_manager(state_manager);
6062 HeapFree(GetProcessHeap(), 0, state_manager);
6064 return ref;
6067 static HRESULT test_process_set_state(ID3DXEffectStateManager *iface,
6068 unsigned int state_op, DWORD param1, DWORD param2)
6070 struct test_manager *state_manager = impl_from_ID3DXEffectStateManager(iface);
6072 if (state_manager->update_record_count == state_manager->update_record_size)
6074 if (!state_manager->update_record_size)
6076 state_manager->update_record_size = INITIAL_UPDATE_RECORD_SIZE;
6077 state_manager->update_record = HeapAlloc(GetProcessHeap(), 0,
6078 sizeof(*state_manager->update_record) * state_manager->update_record_size);
6080 else
6082 state_manager->update_record_size *= 2;
6083 state_manager->update_record = HeapReAlloc(GetProcessHeap(), 0, state_manager->update_record,
6084 sizeof(*state_manager->update_record) * state_manager->update_record_size);
6087 state_manager->update_record[state_manager->update_record_count].state_op = state_op;
6088 state_manager->update_record[state_manager->update_record_count].param1 = param1;
6089 state_manager->update_record[state_manager->update_record_count].param2 = param2;
6090 ++state_manager->update_record_count;
6091 return D3D_OK;
6094 static HRESULT WINAPI test_manager_SetTransform(ID3DXEffectStateManager *iface,
6095 D3DTRANSFORMSTATETYPE state, const D3DMATRIX *matrix)
6097 return test_process_set_state(iface, 0, state, 0);
6100 static HRESULT WINAPI test_manager_SetMaterial(ID3DXEffectStateManager *iface,
6101 const D3DMATERIAL9 *material)
6103 return test_process_set_state(iface, 1, 0, 0);
6106 static HRESULT WINAPI test_manager_SetLight(ID3DXEffectStateManager *iface,
6107 DWORD index, const D3DLIGHT9 *light)
6109 struct test_manager *state_manager = impl_from_ID3DXEffectStateManager(iface);
6111 IDirect3DDevice9_SetLight(state_manager->device, index, light);
6112 return test_process_set_state(iface, 2, index, 0);
6115 static HRESULT WINAPI test_manager_LightEnable(ID3DXEffectStateManager *iface,
6116 DWORD index, BOOL enable)
6118 struct test_manager *state_manager = impl_from_ID3DXEffectStateManager(iface);
6120 IDirect3DDevice9_LightEnable(state_manager->device, index, enable);
6121 return test_process_set_state(iface, 3, index, 0);
6124 static HRESULT WINAPI test_manager_SetRenderState(ID3DXEffectStateManager *iface,
6125 D3DRENDERSTATETYPE state, DWORD value)
6127 return test_process_set_state(iface, 4, state, 0);
6130 static HRESULT WINAPI test_manager_SetTexture(ID3DXEffectStateManager *iface,
6131 DWORD stage, struct IDirect3DBaseTexture9 *texture)
6133 return test_process_set_state(iface, 5, stage, 0);
6136 static HRESULT WINAPI test_manager_SetTextureStageState(ID3DXEffectStateManager *iface,
6137 DWORD stage, D3DTEXTURESTAGESTATETYPE type, DWORD value)
6139 return test_process_set_state(iface, 6, stage, type);
6142 static HRESULT WINAPI test_manager_SetSamplerState(ID3DXEffectStateManager *iface,
6143 DWORD sampler, D3DSAMPLERSTATETYPE type, DWORD value)
6145 return test_process_set_state(iface, 7, sampler, type);
6148 static HRESULT WINAPI test_manager_SetNPatchMode(ID3DXEffectStateManager *iface,
6149 FLOAT num_segments)
6151 return test_process_set_state(iface, 8, 0, 0);
6154 static HRESULT WINAPI test_manager_SetFVF(ID3DXEffectStateManager *iface,
6155 DWORD format)
6157 return test_process_set_state(iface, 9, 0, 0);
6160 static HRESULT WINAPI test_manager_SetVertexShader(ID3DXEffectStateManager *iface,
6161 struct IDirect3DVertexShader9 *shader)
6163 return test_process_set_state(iface, 10, 0, 0);
6166 static HRESULT WINAPI test_manager_SetVertexShaderConstantF(ID3DXEffectStateManager *iface,
6167 UINT register_index, const FLOAT *constant_data, UINT register_count)
6169 return test_process_set_state(iface, 11, register_index, register_count);
6172 static HRESULT WINAPI test_manager_SetVertexShaderConstantI(ID3DXEffectStateManager *iface,
6173 UINT register_index, const INT *constant_data, UINT register_count)
6175 return test_process_set_state(iface, 12, register_index, register_count);
6178 static HRESULT WINAPI test_manager_SetVertexShaderConstantB(ID3DXEffectStateManager *iface,
6179 UINT register_index, const BOOL *constant_data, UINT register_count)
6181 return test_process_set_state(iface, 13, register_index, register_count);
6184 static HRESULT WINAPI test_manager_SetPixelShader(ID3DXEffectStateManager *iface,
6185 struct IDirect3DPixelShader9 *shader)
6187 return test_process_set_state(iface, 14, 0, 0);
6190 static HRESULT WINAPI test_manager_SetPixelShaderConstantF(ID3DXEffectStateManager *iface,
6191 UINT register_index, const FLOAT *constant_data, UINT register_count)
6193 return test_process_set_state(iface, 15, register_index, register_count);
6196 static HRESULT WINAPI test_manager_SetPixelShaderConstantI(ID3DXEffectStateManager *iface,
6197 UINT register_index, const INT *constant_data, UINT register_count)
6199 return test_process_set_state(iface, 16, register_index, register_count);
6202 static HRESULT WINAPI test_manager_SetPixelShaderConstantB(ID3DXEffectStateManager *iface,
6203 UINT register_index, const BOOL *constant_data, UINT register_count)
6205 return test_process_set_state(iface, 17, register_index, register_count);
6208 static void test_effect_state_manager_init(struct test_manager *state_manager,
6209 IDirect3DDevice9 *device)
6211 static const struct ID3DXEffectStateManagerVtbl test_ID3DXEffectStateManager_Vtbl =
6213 /*** IUnknown methods ***/
6214 NULL,
6215 test_manager_AddRef,
6216 test_manager_Release,
6217 /*** ID3DXEffectStateManager methods ***/
6218 test_manager_SetTransform,
6219 test_manager_SetMaterial,
6220 test_manager_SetLight,
6221 test_manager_LightEnable,
6222 test_manager_SetRenderState,
6223 test_manager_SetTexture,
6224 test_manager_SetTextureStageState,
6225 test_manager_SetSamplerState,
6226 test_manager_SetNPatchMode,
6227 test_manager_SetFVF,
6228 test_manager_SetVertexShader,
6229 test_manager_SetVertexShaderConstantF,
6230 test_manager_SetVertexShaderConstantI,
6231 test_manager_SetVertexShaderConstantB,
6232 test_manager_SetPixelShader,
6233 test_manager_SetPixelShaderConstantF,
6234 test_manager_SetPixelShaderConstantI,
6235 test_manager_SetPixelShaderConstantB,
6238 state_manager->ID3DXEffectStateManager_iface.lpVtbl = &test_ID3DXEffectStateManager_Vtbl;
6239 state_manager->ref = 1;
6241 IDirect3DDevice9_AddRef(device);
6242 state_manager->device = device;
6245 static const char *test_effect_state_manager_state_names[] =
6247 "SetTransform",
6248 "SetMaterial",
6249 "SetLight",
6250 "LightEnable",
6251 "SetRenderState",
6252 "SetTexture",
6253 "SetTextureStageState",
6254 "SetSamplerState",
6255 "SetNPatchMode",
6256 "SetFVF",
6257 "SetVertexShader",
6258 "SetVertexShaderConstantF",
6259 "SetVertexShaderConstantI",
6260 "SetVertexShaderConstantB",
6261 "SetPixelShader",
6262 "SetPixelShaderConstantF",
6263 "SetPixelShaderConstantI",
6264 "SetPixelShaderConstantB",
6267 static int compare_update_record(const void *a, const void *b)
6269 const struct test_state_manager_update *r1 = (const struct test_state_manager_update *)a;
6270 const struct test_state_manager_update *r2 = (const struct test_state_manager_update *)b;
6272 if (r1->state_op != r2->state_op)
6273 return r1->state_op - r2->state_op;
6274 if (r1->param1 != r2->param1)
6275 return r1->param1 - r2->param1;
6276 return r1->param2 - r2->param2;
6279 static void test_effect_state_manager(IDirect3DDevice9 *device)
6281 static const struct test_state_manager_update expected_updates[] =
6283 {2, 0, 0},
6284 {2, 1, 0},
6285 {2, 2, 0},
6286 {2, 3, 0},
6287 {2, 4, 0},
6288 {2, 5, 0},
6289 {2, 6, 0},
6290 {2, 7, 0},
6291 {3, 0, 0},
6292 {3, 1, 0},
6293 {3, 2, 0},
6294 {3, 3, 0},
6295 {3, 4, 0},
6296 {3, 5, 0},
6297 {3, 6, 0},
6298 {3, 7, 0},
6299 {4, 28, 0},
6300 {4, 36, 0},
6301 {4, 38, 0},
6302 {4, 158, 0},
6303 {4, 159, 0},
6304 {5, 0, 0},
6305 {5, 259, 0},
6306 {7, 0, 5},
6307 {7, 0, 6},
6308 {7, 1, 5},
6309 {7, 1, 6},
6310 {7, 257, 5},
6311 {7, 257, 6},
6312 {7, 258, 5},
6313 {7, 258, 6},
6314 {7, 259, 5},
6315 {7, 259, 6},
6316 {10, 0, 0},
6317 {11, 0, 34},
6318 {14, 0, 0},
6319 {15, 0, 14},
6320 {16, 0, 1},
6321 {17, 0, 6},
6323 static D3DLIGHT9 light_filler =
6324 {D3DLIGHT_DIRECTIONAL, {0.5f, 0.5f, 0.5f, 0.5f}, {0.5f, 0.5f, 0.5f, 0.5f}, {0.5f, 0.5f, 0.5f, 0.5f}};
6325 struct test_manager *state_manager;
6326 unsigned int passes_count, i, n;
6327 ID3DXEffect *effect;
6328 ULONG refcount;
6329 HRESULT hr;
6331 state_manager = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*state_manager));
6332 test_effect_state_manager_init(state_manager, device);
6334 for (i = 0; i < 8; ++i)
6336 hr = IDirect3DDevice9_SetLight(device, i, &light_filler);
6337 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6340 hr = D3DXCreateEffect(device, test_effect_preshader_effect_blob, sizeof(test_effect_preshader_effect_blob),
6341 NULL, NULL, 0, NULL, &effect, NULL);
6342 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6344 hr = effect->lpVtbl->SetStateManager(effect, &state_manager->ID3DXEffectStateManager_iface);
6345 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6347 hr = effect->lpVtbl->Begin(effect, &passes_count, 0);
6348 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6350 hr = effect->lpVtbl->BeginPass(effect, 0);
6351 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6353 hr = effect->lpVtbl->EndPass(effect);
6354 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6356 hr = effect->lpVtbl->End(effect);
6357 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6359 effect->lpVtbl->Release(effect);
6361 qsort(state_manager->update_record, state_manager->update_record_count,
6362 sizeof(*state_manager->update_record), compare_update_record);
6364 ok(ARRAY_SIZE(expected_updates) == state_manager->update_record_count,
6365 "Got %u update records.\n", state_manager->update_record_count);
6366 n = min(ARRAY_SIZE(expected_updates), state_manager->update_record_count);
6367 for (i = 0; i < n; ++i)
6369 ok(!memcmp(&expected_updates[i], &state_manager->update_record[i],
6370 sizeof(expected_updates[i])),
6371 "Update record mismatch, expected %s, %u, %u, got %s, %u, %u.\n",
6372 test_effect_state_manager_state_names[expected_updates[i].state_op],
6373 expected_updates[i].param1, expected_updates[i].param2,
6374 test_effect_state_manager_state_names[state_manager->update_record[i].state_op],
6375 state_manager->update_record[i].param1, state_manager->update_record[i].param2);
6378 for (i = 0; i < 8; ++i)
6380 D3DLIGHT9 light;
6382 hr = IDirect3DDevice9_GetLight(device, i, &light);
6383 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6384 ok(!memcmp(&light, &light_filler, sizeof(light)), "Light %u mismatch.\n", i);
6387 refcount = state_manager->ID3DXEffectStateManager_iface.lpVtbl->Release(
6388 &state_manager->ID3DXEffectStateManager_iface);
6389 ok(!refcount, "State manager was not properly freed, refcount %u.\n", refcount);
6392 static void test_cross_effect_handle(IDirect3DDevice9 *device)
6394 ID3DXEffect *effect1, *effect2;
6395 D3DXHANDLE param1, param2;
6396 static int expected_ivect[4] = {28, 29, 30, 31};
6397 int ivect[4];
6398 HRESULT hr;
6400 hr = D3DXCreateEffect(device, test_effect_preshader_effect_blob, sizeof(test_effect_preshader_effect_blob),
6401 NULL, NULL, 0, NULL, &effect1, NULL);
6402 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6403 hr = D3DXCreateEffect(device, test_effect_preshader_effect_blob, sizeof(test_effect_preshader_effect_blob),
6404 NULL, NULL, 0, NULL, &effect2, NULL);
6405 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6407 ok(effect1 != effect2, "Got same effect unexpectedly.\n");
6409 param1 = effect1->lpVtbl->GetParameterByName(effect1, NULL, "g_iVect");
6410 ok(!!param1, "GetParameterByName failed.\n");
6412 param2 = effect2->lpVtbl->GetParameterByName(effect2, NULL, "g_iVect");
6413 ok(!!param2, "GetParameterByName failed.\n");
6415 ok(param1 != param2, "Got same parameter handle unexpectedly.\n");
6417 hr = effect2->lpVtbl->SetValue(effect2, param1, expected_ivect, sizeof(expected_ivect));
6418 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6420 hr = effect1->lpVtbl->GetValue(effect1, param1, ivect, sizeof(ivect));
6421 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6423 ok(!memcmp(ivect, expected_ivect, sizeof(expected_ivect)), "Vector value mismatch.\n");
6425 effect2->lpVtbl->Release(effect2);
6426 effect1->lpVtbl->Release(effect1);
6429 #if 0
6430 struct test_struct
6432 float3 v1_2;
6433 float fv_2;
6434 float4 v2_2;
6437 shared float arr2[1];
6438 shared test_struct ts2[2] = {{{0, 0, 0}, 0, {0, 0, 0, 0}}, {{1, 2, 3}, 4, {5, 6, 7, 8}}};
6440 struct VS_OUTPUT
6442 float4 Position : POSITION;
6445 VS_OUTPUT RenderSceneVS(float4 vPos : POSITION)
6447 VS_OUTPUT Output;
6449 Output.Position = arr2[0] * vPos;
6450 return Output;
6453 shared vertexshader vs_arr2[2] = {compile vs_3_0 RenderSceneVS(), NULL};
6455 technique tech0
6457 pass p0
6459 FogEnable = TRUE;
6460 FogDensity = arr2[0];
6461 PointScale_A = ts2[0].fv_2;
6462 VertexShader = vs_arr2[0];
6465 pass p1
6467 VertexShader = vs_arr2[1];
6470 #endif
6471 static const DWORD test_effect_shared_parameters_blob[] =
6473 0xfeff0901, 0x000001dc, 0x00000000, 0x00000003, 0x00000000, 0x00000024, 0x00000000, 0x00000001,
6474 0x00000001, 0x00000001, 0x00000000, 0x00000005, 0x32727261, 0x00000000, 0x00000000, 0x00000005,
6475 0x000000dc, 0x00000000, 0x00000002, 0x00000003, 0x00000003, 0x00000001, 0x000000e4, 0x00000000,
6476 0x00000000, 0x00000003, 0x00000001, 0x00000003, 0x00000000, 0x000000f0, 0x00000000, 0x00000000,
6477 0x00000001, 0x00000001, 0x00000003, 0x00000001, 0x000000fc, 0x00000000, 0x00000000, 0x00000004,
6478 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
6479 0x00000000, 0x3f800000, 0x40000000, 0x40400000, 0x40800000, 0x40a00000, 0x40c00000, 0x40e00000,
6480 0x41000000, 0x00000004, 0x00327374, 0x00000005, 0x325f3176, 0x00000000, 0x00000005, 0x325f7666,
6481 0x00000000, 0x00000005, 0x325f3276, 0x00000000, 0x00000010, 0x00000004, 0x00000124, 0x00000000,
6482 0x00000002, 0x00000001, 0x00000002, 0x00000008, 0x615f7376, 0x00327272, 0x00000001, 0x00000002,
6483 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000000, 0x00000003,
6484 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000000, 0x00000003,
6485 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000003, 0x00000010,
6486 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00003070, 0x00000004, 0x00000010,
6487 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00003170, 0x00000006, 0x68636574,
6488 0x00000030, 0x00000003, 0x00000001, 0x00000006, 0x00000005, 0x00000004, 0x00000020, 0x00000001,
6489 0x00000000, 0x00000030, 0x0000009c, 0x00000001, 0x00000000, 0x00000108, 0x0000011c, 0x00000001,
6490 0x00000000, 0x000001d0, 0x00000000, 0x00000002, 0x000001a8, 0x00000000, 0x00000004, 0x0000000e,
6491 0x00000000, 0x00000134, 0x00000130, 0x00000014, 0x00000000, 0x00000154, 0x00000150, 0x00000041,
6492 0x00000000, 0x00000174, 0x00000170, 0x00000092, 0x00000000, 0x00000194, 0x00000190, 0x000001c8,
6493 0x00000000, 0x00000001, 0x00000092, 0x00000000, 0x000001b4, 0x000001b0, 0x00000002, 0x00000004,
6494 0x00000001, 0x000000c8, 0xfffe0300, 0x0025fffe, 0x42415443, 0x0000001c, 0x0000005f, 0xfffe0300,
6495 0x00000001, 0x0000001c, 0x00000000, 0x00000058, 0x00000030, 0x00000002, 0x00000001, 0x00000038,
6496 0x00000048, 0x32727261, 0xababab00, 0x00030000, 0x00010001, 0x00000001, 0x00000000, 0x00000000,
6497 0x00000000, 0x00000000, 0x00000000, 0x335f7376, 0x4d00305f, 0x6f726369, 0x74666f73, 0x29522820,
6498 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932, 0x332e3235,
6499 0x00313131, 0x0200001f, 0x80000000, 0x900f0000, 0x0200001f, 0x80000000, 0xe00f0000, 0x03000005,
6500 0xe00f0000, 0xa0000000, 0x90e40000, 0x0000ffff, 0x00000002, 0x00000000, 0x00000000, 0x00000001,
6501 0xffffffff, 0x00000000, 0x00000001, 0x0000000b, 0x615f7376, 0x5b327272, 0x00005d31, 0x00000000,
6502 0x00000000, 0xffffffff, 0x00000003, 0x00000001, 0x0000000b, 0x615f7376, 0x5b327272, 0x00005d30,
6503 0x00000000, 0x00000000, 0xffffffff, 0x00000002, 0x00000000, 0x00000188, 0x46580200, 0x004ffffe,
6504 0x42415443, 0x0000001c, 0x00000107, 0x46580200, 0x00000001, 0x0000001c, 0x20000100, 0x00000104,
6505 0x00000030, 0x00000002, 0x00000002, 0x00000094, 0x000000a4, 0x00327374, 0x325f3176, 0xababab00,
6506 0x00030001, 0x00030001, 0x00000001, 0x00000000, 0x325f7666, 0xababab00, 0x00030000, 0x00010001,
6507 0x00000001, 0x00000000, 0x325f3276, 0xababab00, 0x00030001, 0x00040001, 0x00000001, 0x00000000,
6508 0x00000034, 0x0000003c, 0x0000004c, 0x00000054, 0x00000064, 0x0000006c, 0x00000005, 0x00080001,
6509 0x00030002, 0x0000007c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
6510 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x40000000,
6511 0x40400000, 0x00000000, 0x40800000, 0x00000000, 0x00000000, 0x00000000, 0x40a00000, 0x40c00000,
6512 0x40e00000, 0x41000000, 0x4d007874, 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c,
6513 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131, 0x0002fffe,
6514 0x54494c43, 0x00000000, 0x000cfffe, 0x434c5846, 0x00000001, 0x10000001, 0x00000001, 0x00000000,
6515 0x00000002, 0x00000004, 0x00000000, 0x00000004, 0x00000000, 0xf0f0f0f0, 0x0f0f0f0f, 0x0000ffff,
6516 0x00000000, 0x00000000, 0xffffffff, 0x00000001, 0x00000000, 0x000000dc, 0x46580200, 0x0024fffe,
6517 0x42415443, 0x0000001c, 0x0000005b, 0x46580200, 0x00000001, 0x0000001c, 0x20000100, 0x00000058,
6518 0x00000030, 0x00000002, 0x00000001, 0x00000038, 0x00000048, 0x32727261, 0xababab00, 0x00030000,
6519 0x00010001, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x4d007874,
6520 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970,
6521 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131, 0x0002fffe, 0x54494c43, 0x00000000, 0x000cfffe,
6522 0x434c5846, 0x00000001, 0x10000001, 0x00000001, 0x00000000, 0x00000002, 0x00000000, 0x00000000,
6523 0x00000004, 0x00000000, 0xf0f0f0f0, 0x0f0f0f0f, 0x0000ffff,
6526 #define test_effect_shared_vs_arr_compare_helper(args...) \
6527 test_effect_shared_vs_arr_compare_helper_(__LINE__, args)
6528 static void test_effect_shared_vs_arr_compare_helper_(unsigned int line, ID3DXEffect *effect,
6529 D3DXHANDLE param_child, struct IDirect3DVertexShader9 *vshader1, unsigned int element,
6530 BOOL todo)
6532 struct IDirect3DVertexShader9 *vshader2;
6533 D3DXHANDLE param_child2;
6534 HRESULT hr;
6536 param_child2 = effect->lpVtbl->GetParameterElement(effect, "vs_arr2", element);
6537 ok_(__FILE__, line)(!!param_child2, "GetParameterElement failed.\n");
6538 ok_(__FILE__, line)(param_child != param_child2, "Got same parameter handle unexpectedly.\n");
6539 hr = effect->lpVtbl->GetVertexShader(effect, param_child2, &vshader2);
6540 ok_(__FILE__, line)(hr == D3D_OK, "Got result %#x.\n", hr);
6541 todo_wine_if(todo)
6542 ok_(__FILE__, line)(vshader1 == vshader2, "Shared shader interface pointers differ.\n");
6543 if (vshader2)
6544 IDirect3DVertexShader9_Release(vshader2);
6547 #define test_effect_shared_parameters_compare_vconst(args...) \
6548 test_effect_shared_parameters_compare_vconst_(__LINE__, args)
6549 static void test_effect_shared_parameters_compare_vconst_(unsigned int line, IDirect3DDevice9 *device,
6550 unsigned int index, const D3DXVECTOR4 *expected_fvect, BOOL todo)
6552 D3DXVECTOR4 fvect;
6553 HRESULT hr;
6555 hr = IDirect3DDevice9_GetVertexShaderConstantF(device, index, &fvect.x, 1);
6556 ok_(__FILE__, line)(hr == D3D_OK, "Got result %#x.\n", hr);
6557 todo_wine_if(todo)
6558 ok_(__FILE__, line)(!memcmp(&fvect, expected_fvect, sizeof(fvect)),
6559 "Unexpected constant value %g, %g, %g, %g.\n", fvect.x, fvect.y, fvect.z, fvect.w);
6562 static void test_effect_shared_parameters(IDirect3DDevice9 *device)
6564 ID3DXEffect *effect1, *effect2, *effect3, *effect4;
6565 ID3DXEffectPool *pool;
6566 HRESULT hr;
6567 D3DXHANDLE param, param_child, param2, param_child2;
6568 unsigned int i, passes_count;
6569 ULONG refcount;
6570 D3DXVECTOR4 fvect;
6571 float fval[2];
6573 hr = D3DXCreateEffectPool(&pool);
6574 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6576 hr = D3DXCreateEffect(device, test_effect_preshader_effect_blob, sizeof(test_effect_preshader_effect_blob),
6577 NULL, NULL, 0, pool, &effect2, NULL);
6578 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6579 effect2->lpVtbl->SetFloat(effect2, "arr2[0]", 28.0f);
6580 effect2->lpVtbl->Release(effect2);
6582 hr = D3DXCreateEffect(device, test_effect_preshader_effect_blob, sizeof(test_effect_preshader_effect_blob),
6583 NULL, NULL, 0, pool, &effect2, NULL);
6584 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6585 effect2->lpVtbl->GetFloat(effect2, "arr2[0]", &fvect.x);
6586 ok(fvect.x == 92.0f, "Unexpected parameter value %g.\n", fvect.x);
6587 effect2->lpVtbl->SetFloat(effect2, "arr2[0]", 28.0f);
6589 hr = D3DXCreateEffect(device, test_effect_preshader_effect_blob, sizeof(test_effect_preshader_effect_blob),
6590 NULL, NULL, 0, pool, &effect1, NULL);
6591 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6593 effect1->lpVtbl->GetFloat(effect1, "arr2[0]", &fvect.x);
6594 ok(fvect.x == 28.0f, "Unexpected parameter value %g.\n", fvect.x);
6596 hr = D3DXCreateEffect(device, test_effect_shared_parameters_blob, sizeof(test_effect_shared_parameters_blob),
6597 NULL, NULL, 0, pool, &effect3, NULL);
6598 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6599 hr = D3DXCreateEffect(device, test_effect_shared_parameters_blob, sizeof(test_effect_shared_parameters_blob),
6600 NULL, NULL, 0, pool, &effect4, NULL);
6601 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6603 effect2->lpVtbl->SetFloat(effect2, "arr2[0]", 3.0f);
6604 effect2->lpVtbl->SetFloat(effect2, "ts2[0].fv", 3.0f);
6606 effect3->lpVtbl->GetFloat(effect3, "arr2[0]", &fvect.x);
6607 ok(fvect.x == 0.0f, "Unexpected parameter value %g.\n", fvect.x);
6608 effect4->lpVtbl->SetFloat(effect4, "arr2[0]", 28.0f);
6609 effect3->lpVtbl->GetFloat(effect3, "arr2[0]", &fvect.x);
6610 ok(fvect.x == 28.0f, "Unexpected parameter value %g.\n", fvect.x);
6611 effect1->lpVtbl->GetFloat(effect1, "arr2[0]", &fvect.x);
6612 ok(fvect.x == 3.0f, "Unexpected parameter value %g.\n", fvect.x);
6614 param = effect3->lpVtbl->GetParameterByName(effect3, NULL, "ts2[0].fv_2");
6615 ok(!!param, "GetParameterByName failed.\n");
6616 effect3->lpVtbl->GetFloat(effect3, param, &fvect.x);
6617 ok(fvect.x == 0.0f, "Unexpected parameter value %g.\n", fvect.x);
6619 param = effect1->lpVtbl->GetParameterByName(effect1, NULL, "arr2");
6620 ok(!!param, "GetParameterByName failed.\n");
6621 ok(!effect3->lpVtbl->IsParameterUsed(effect3, param, "tech0"),
6622 "Unexpected IsParameterUsed result.\n");
6624 param = effect3->lpVtbl->GetParameterByName(effect3, NULL, "arr2");
6625 ok(!!param, "GetParameterByName failed.\n");
6626 ok(effect3->lpVtbl->IsParameterUsed(effect3, param, "tech0"),
6627 "Unexpected IsParameterUsed result.\n");
6629 param = effect1->lpVtbl->GetParameterByName(effect1, NULL, "vs_arr2");
6630 ok(!!param, "GetParameterByName failed.\n");
6631 todo_wine
6632 ok(!effect3->lpVtbl->IsParameterUsed(effect3, param, "tech0"),
6633 "Unexpected IsParameterUsed result.\n");
6635 ok(effect3->lpVtbl->IsParameterUsed(effect3, "vs_arr2", "tech0"),
6636 "Unexpected IsParameterUsed result.\n");
6637 ok(!effect3->lpVtbl->IsParameterUsed(effect3, "vs_arr2[0]", "tech0"),
6638 "Unexpected IsParameterUsed result.\n");
6639 ok(!effect3->lpVtbl->IsParameterUsed(effect3, "vs_arr2[1]", "tech0"),
6640 "Unexpected IsParameterUsed result.\n");
6642 ok(effect1->lpVtbl->IsParameterUsed(effect1, param, "tech0"),
6643 "Unexpected IsParameterUsed result.\n");
6645 hr = effect3->lpVtbl->Begin(effect3, &passes_count, 0);
6646 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6648 if (0)
6650 /* Native d3dx crashes in BeginPass(). This is the case of shader array declared shared
6651 * but initialized with different shaders using different parameters. */
6652 hr = effect3->lpVtbl->BeginPass(effect3, 0);
6653 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6655 hr = effect3->lpVtbl->EndPass(effect3);
6656 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6659 test_effect_preshader_clear_vconsts(device);
6660 fvect.x = fvect.y = fvect.z = fvect.w = 28.0f;
6661 hr = effect2->lpVtbl->SetVector(effect2, "g_Pos1", &fvect);
6662 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6663 hr = effect1->lpVtbl->SetVector(effect1, "g_Pos1", &fvect);
6664 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6666 hr = effect3->lpVtbl->BeginPass(effect3, 1);
6667 todo_wine
6668 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6670 hr = IDirect3DDevice9_GetVertexShaderConstantF(device, 0, &fvect.x, 1);
6671 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6672 todo_wine
6673 ok(fvect.x == 0.0f && fvect.y == 0.0f && fvect.z == 0.0f && fvect.w == 0.0f,
6674 "Unexpected vector %g, %g, %g, %g.\n", fvect.x, fvect.y, fvect.z, fvect.w);
6676 hr = effect3->lpVtbl->EndPass(effect3);
6677 todo_wine
6678 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6680 hr = effect3->lpVtbl->End(effect3);
6681 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6683 for (i = 0; i < 2; ++i)
6685 struct IDirect3DVertexShader9 *vshader1;
6687 param_child = effect1->lpVtbl->GetParameterElement(effect1, "vs_arr2", i);
6688 ok(!!param_child, "GetParameterElement failed.\n");
6689 hr = effect1->lpVtbl->GetVertexShader(effect1, param_child, &vshader1);
6690 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6692 test_effect_shared_vs_arr_compare_helper(effect2, param_child, vshader1, i, FALSE);
6693 test_effect_shared_vs_arr_compare_helper(effect3, param_child, vshader1, i, FALSE);
6694 test_effect_shared_vs_arr_compare_helper(effect4, param_child, vshader1, i, FALSE);
6695 IDirect3DVertexShader9_Release(vshader1);
6698 effect3->lpVtbl->Release(effect3);
6699 effect4->lpVtbl->Release(effect4);
6701 fval[0] = 1.0f;
6702 hr = effect1->lpVtbl->SetFloatArray(effect1, "arr1", fval, 1);
6703 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6704 fval[0] = 0.0f;
6705 hr = effect2->lpVtbl->GetFloatArray(effect2, "arr1", fval, 1);
6706 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6707 ok(fval[0] == 91.0f, "Unexpected value %g.\n", fval[0]);
6709 param = effect1->lpVtbl->GetParameterByName(effect1, NULL, "arr2");
6710 ok(!!param, "GetParameterByName failed.\n");
6711 param2 = effect2->lpVtbl->GetParameterByName(effect2, NULL, "arr2");
6712 ok(!!param, "GetParameterByName failed.\n");
6713 ok(param != param2, "Got same parameter handle unexpectedly.\n");
6714 param_child = effect1->lpVtbl->GetParameterElement(effect1, param, 0);
6715 ok(!!param_child, "GetParameterElement failed.\n");
6716 param_child2 = effect1->lpVtbl->GetParameterElement(effect2, param2, 0);
6717 ok(!!param_child2, "GetParameterElement failed.\n");
6718 ok(param_child != param_child2, "Got same parameter handle unexpectedly.\n");
6720 fval[0] = 33.0f;
6721 hr = effect1->lpVtbl->SetFloatArray(effect1, "arr2", fval, 1);
6722 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6723 fval[0] = 0.0f;
6724 hr = effect1->lpVtbl->GetFloatArray(effect1, "arr2", fval, 2);
6725 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6726 ok(fval[0] == 33.0f && fval[1] == 93.0f, "Unexpected values %g, %g.\n", fval[0], fval[1]);
6727 fval[0] = 0.0f;
6728 hr = effect2->lpVtbl->GetFloatArray(effect2, "arr2", fval, 2);
6729 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6730 ok(fval[0] == 33.0f && fval[1] == 93.0f, "Unexpected values %g, %g.\n", fval[0], fval[1]);
6732 hr = effect1->lpVtbl->Begin(effect1, &passes_count, 0);
6733 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6735 hr = effect2->lpVtbl->Begin(effect2, &passes_count, 0);
6736 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6738 hr = effect1->lpVtbl->BeginPass(effect1, 0);
6739 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6741 fvect.x = 1.0f;
6742 fvect.y = fvect.z = fvect.w = 0.0f;
6743 test_effect_shared_parameters_compare_vconst(device, 32, &fvect, FALSE);
6745 hr = effect1->lpVtbl->BeginPass(effect2, 0);
6746 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6748 fvect.x = 91.0f;
6749 test_effect_shared_parameters_compare_vconst(device, 32, &fvect, FALSE);
6750 fvect.x = 33.0f;
6751 test_effect_shared_parameters_compare_vconst(device, 29, &fvect, FALSE);
6753 fval[0] = 28.0f;
6754 fval[1] = -1.0f;
6755 hr = effect1->lpVtbl->SetFloatArray(effect1, "arr2", fval, 2);
6756 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6758 test_effect_preshader_clear_vconsts(device);
6760 hr = effect1->lpVtbl->CommitChanges(effect1);
6761 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6763 fvect.x = 28.0f;
6764 test_effect_shared_parameters_compare_vconst(device, 29, &fvect, FALSE);
6765 fvect.x = -1.0f;
6766 test_effect_shared_parameters_compare_vconst(device, 30, &fvect, FALSE);
6768 test_effect_preshader_clear_vconsts(device);
6770 hr = effect1->lpVtbl->CommitChanges(effect1);
6771 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6773 test_effect_shared_parameters_compare_vconst(device, 29, &fvect_filler, FALSE);
6774 test_effect_shared_parameters_compare_vconst(device, 30, &fvect_filler, FALSE);
6776 hr = effect2->lpVtbl->CommitChanges(effect2);
6777 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6779 fvect.x = 28.0f;
6780 test_effect_shared_parameters_compare_vconst(device, 29, &fvect, FALSE);
6781 fvect.x = -1.0f;
6782 test_effect_shared_parameters_compare_vconst(device, 30, &fvect, FALSE);
6784 fval[0] = -2.0f;
6785 hr = effect2->lpVtbl->SetFloat(effect2, "arr2[0]", fval[0]);
6786 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6787 hr = effect1->lpVtbl->CommitChanges(effect1);
6788 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6790 fvect.x = -2.0f;
6791 test_effect_shared_parameters_compare_vconst(device, 29, &fvect, FALSE);
6792 fvect.x = -1.0f;
6793 test_effect_shared_parameters_compare_vconst(device, 30, &fvect, FALSE);
6795 fvect.x = fvect.y = fvect.z = fvect.w = 1111.0f;
6796 hr = effect2->lpVtbl->SetVector(effect2, "g_Pos1", &fvect);
6797 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6799 hr = effect1->lpVtbl->CommitChanges(effect1);
6800 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6801 test_effect_shared_parameters_compare_vconst(device, 31, &fvect_filler, FALSE);
6803 hr = effect1->lpVtbl->CommitChanges(effect2);
6804 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6805 test_effect_shared_parameters_compare_vconst(device, 31, &fvect, FALSE);
6807 hr = effect1->lpVtbl->End(effect1);
6808 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6810 hr = effect2->lpVtbl->End(effect2);
6811 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6813 if (0)
6815 refcount = pool->lpVtbl->Release(pool);
6816 ok(refcount == 2, "Unexpected refcount %u.\n", refcount);
6818 refcount = pool->lpVtbl->Release(pool);
6819 ok(refcount == 1, "Unexpected refcount %u.\n", refcount);
6821 refcount = pool->lpVtbl->Release(pool);
6822 ok(!refcount, "Unexpected refcount %u.\n", refcount);
6824 /* Native d3dx crashes in GetFloat(). */
6825 effect2->lpVtbl->GetFloat(effect2, "arr2[0]", &fvect.x);
6828 effect1->lpVtbl->Release(effect1);
6829 effect2->lpVtbl->Release(effect2);
6831 refcount = pool->lpVtbl->Release(pool);
6832 ok(!refcount, "Effect pool was not properly freed, refcount %u.\n", refcount);
6835 static void test_effect_large_address_aware_flag(IDirect3DDevice9 *device)
6837 ID3DXEffect *effect;
6838 D3DXHANDLE param;
6839 static int expected_ivect[4] = {28, 29, 30, 31};
6840 int ivect[4];
6841 HRESULT hr;
6843 hr = D3DXCreateEffect(device, test_effect_preshader_effect_blob, sizeof(test_effect_preshader_effect_blob),
6844 NULL, NULL, D3DXFX_LARGEADDRESSAWARE, NULL, &effect, NULL);
6845 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6847 param = effect->lpVtbl->GetParameterByName(effect, NULL, "g_iVect");
6848 ok(!!param, "GetParameterByName failed.\n");
6850 hr = effect->lpVtbl->SetValue(effect, param, expected_ivect, sizeof(expected_ivect));
6851 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6853 hr = effect->lpVtbl->GetValue(effect, param, ivect, sizeof(ivect));
6854 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6856 ok(!memcmp(ivect, expected_ivect, sizeof(expected_ivect)), "Vector value mismatch.\n");
6858 if (0)
6860 /* Native d3dx crashes in GetValue(). */
6861 hr = effect->lpVtbl->GetValue(effect, "g_iVect", ivect, sizeof(ivect));
6862 ok(hr == D3DERR_INVALIDCALL, "Got result %#x.\n", hr);
6865 effect->lpVtbl->Release(effect);
6868 static void test_effect_get_pass_desc(IDirect3DDevice9 *device)
6870 unsigned int passes_count;
6871 ID3DXEffect *effect;
6872 D3DXPASS_DESC desc;
6873 D3DXVECTOR4 fvect;
6874 D3DXHANDLE pass;
6875 HRESULT hr;
6877 hr = D3DXCreateEffect(device, test_effect_preshader_effect_blob, sizeof(test_effect_preshader_effect_blob),
6878 NULL, NULL, 0, NULL, &effect, NULL);
6879 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6881 pass = effect->lpVtbl->GetPass(effect, "tech0", 1);
6882 ok(!!pass, "GetPass() failed.\n");
6884 hr = effect->lpVtbl->GetPassDesc(effect, pass, &desc);
6885 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6886 test_effect_preshader_compare_shader_bytecode(desc.pVertexShaderFunction, 0, 2, FALSE);
6888 fvect.x = fvect.y = fvect.w = 0.0f;
6889 fvect.z = 0.0f;
6890 hr = effect->lpVtbl->SetVector(effect, "g_iVect", &fvect);
6891 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6893 hr = effect->lpVtbl->GetPassDesc(effect, pass, &desc);
6894 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6895 ok(!desc.pPixelShaderFunction, "Unexpected non null desc.pPixelShaderFunction.\n");
6897 test_effect_preshader_compare_shader_bytecode(desc.pVertexShaderFunction, 0, 0, FALSE);
6899 fvect.z = 3.0f;
6900 hr = effect->lpVtbl->SetVector(effect, "g_iVect", &fvect);
6901 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6903 hr = effect->lpVtbl->GetPassDesc(effect, pass, &desc);
6904 ok(hr == E_FAIL, "Got result %#x.\n", hr);
6905 ok(!desc.pVertexShaderFunction, "Unexpected non null desc.pVertexShaderFunction.\n");
6907 /* Repeating call to confirm GetPassDesc() returns same error on the second call,
6908 * as it is not the case sometimes for BeginPass() with out of bound access. */
6909 hr = effect->lpVtbl->GetPassDesc(effect, pass, &desc);
6910 ok(hr == E_FAIL, "Got result %#x.\n", hr);
6911 ok(!desc.pVertexShaderFunction, "Unexpected non null desc.pVertexShaderFunction.\n");
6913 hr = effect->lpVtbl->Begin(effect, &passes_count, 0);
6914 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6916 hr = effect->lpVtbl->BeginPass(effect, 1);
6917 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6919 hr = effect->lpVtbl->GetPassDesc(effect, pass, &desc);
6920 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6922 test_effect_preshader_compare_shader_bytecode(desc.pVertexShaderFunction, 0, 0, FALSE);
6924 fvect.z = 2.0f;
6925 hr = effect->lpVtbl->SetVector(effect, "g_iVect", &fvect);
6926 hr = effect->lpVtbl->GetPassDesc(effect, pass, &desc);
6927 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6928 test_effect_preshader_compare_shader_bytecode(desc.pVertexShaderFunction, 0, 2, FALSE);
6930 effect->lpVtbl->Release(effect);
6932 hr = D3DXCreateEffect(device, test_effect_preshader_effect_blob, sizeof(test_effect_preshader_effect_blob),
6933 NULL, NULL, D3DXFX_NOT_CLONEABLE, NULL, &effect, NULL);
6934 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6936 pass = effect->lpVtbl->GetPass(effect, "tech0", 1);
6937 ok(!!pass, "GetPass() failed.\n");
6939 hr = effect->lpVtbl->GetPassDesc(effect, pass, &desc);
6940 ok(hr == D3D_OK, "Got result %#x.\n", hr);
6942 ok(!desc.pVertexShaderFunction, "Unexpected non null desc.pVertexShaderFunction.\n");
6943 ok(!desc.pPixelShaderFunction, "Unexpected non null desc.pPixelShaderFunction.\n");
6945 effect->lpVtbl->Release(effect);
6948 #if 0
6949 float v1 : register(c2);
6950 float v2 : register(c3);
6951 float v3;
6952 float v4 : register(c4);
6953 float v5;
6954 float v6[2] : register(c5) = {11, 22};
6956 struct VS_OUTPUT
6958 float4 Position : POSITION;
6961 VS_OUTPUT RenderSceneVS(float4 vPos : POSITION)
6963 VS_OUTPUT Output;
6965 Output.Position = v1 * v2 * vPos + v2 + v3 + v4;
6966 Output.Position += v6[0] + v6[1];
6967 return Output;
6970 technique tech0
6972 pass p0
6974 PointScale_A = v4;
6975 VertexShader = compile vs_3_0 RenderSceneVS();
6978 #endif
6979 static const DWORD test_effect_skip_constants_blob[] =
6981 0xfeff0901, 0x00000144, 0x00000000, 0x00000003, 0x00000000, 0x00000024, 0x00000000, 0x00000000,
6982 0x00000001, 0x00000001, 0x00000000, 0x00000003, 0x00003176, 0x00000003, 0x00000000, 0x0000004c,
6983 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000000, 0x00000003, 0x00003276, 0x00000003,
6984 0x00000000, 0x00000074, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000000, 0x00000003,
6985 0x00003376, 0x00000003, 0x00000000, 0x0000009c, 0x00000000, 0x00000000, 0x00000001, 0x00000001,
6986 0x00000000, 0x00000003, 0x00003476, 0x00000003, 0x00000000, 0x000000c4, 0x00000000, 0x00000000,
6987 0x00000001, 0x00000001, 0x00000000, 0x00000003, 0x00003576, 0x00000003, 0x00000000, 0x000000f0,
6988 0x00000000, 0x00000002, 0x00000001, 0x00000001, 0x41300000, 0x41b00000, 0x00000003, 0x00003676,
6989 0x00000000, 0x00000003, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001,
6990 0x00000001, 0x00000010, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00003070,
6991 0x00000006, 0x68636574, 0x00000030, 0x00000006, 0x00000001, 0x00000002, 0x00000002, 0x00000004,
6992 0x00000020, 0x00000000, 0x00000000, 0x0000002c, 0x00000048, 0x00000000, 0x00000000, 0x00000054,
6993 0x00000070, 0x00000000, 0x00000000, 0x0000007c, 0x00000098, 0x00000000, 0x00000000, 0x000000a4,
6994 0x000000c0, 0x00000000, 0x00000000, 0x000000cc, 0x000000e8, 0x00000000, 0x00000000, 0x00000138,
6995 0x00000000, 0x00000001, 0x00000130, 0x00000000, 0x00000002, 0x00000041, 0x00000000, 0x000000fc,
6996 0x000000f8, 0x00000092, 0x00000000, 0x0000011c, 0x00000118, 0x00000000, 0x00000002, 0x00000000,
6997 0x00000000, 0xffffffff, 0x00000001, 0x00000000, 0x000001bc, 0xfffe0300, 0x0047fffe, 0x42415443,
6998 0x0000001c, 0x000000e7, 0xfffe0300, 0x00000005, 0x0000001c, 0x20000000, 0x000000e0, 0x00000080,
6999 0x00020002, 0x000a0001, 0x00000084, 0x00000094, 0x000000a4, 0x00030002, 0x000e0001, 0x00000084,
7000 0x00000094, 0x000000a7, 0x00000002, 0x00000001, 0x00000084, 0x00000094, 0x000000aa, 0x00040002,
7001 0x00120001, 0x00000084, 0x00000094, 0x000000ad, 0x00050002, 0x00160002, 0x000000b0, 0x000000c0,
7002 0xab003176, 0x00030000, 0x00010001, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
7003 0x00000000, 0x76003276, 0x34760033, 0x00367600, 0x00030000, 0x00010001, 0x00000002, 0x00000000,
7004 0x41300000, 0x00000000, 0x00000000, 0x00000000, 0x41b00000, 0x00000000, 0x00000000, 0x00000000,
7005 0x335f7376, 0x4d00305f, 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c, 0x72656461,
7006 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131, 0x0200001f, 0x80000000,
7007 0x900f0000, 0x0200001f, 0x80000000, 0xe00f0000, 0x02000001, 0x80010000, 0xa0000003, 0x03000005,
7008 0x80010000, 0x80000000, 0xa0000002, 0x04000004, 0x800f0000, 0x80000000, 0x90e40000, 0xa0000003,
7009 0x03000002, 0x800f0000, 0x80e40000, 0xa0000000, 0x03000002, 0x800f0000, 0x80e40000, 0xa0000004,
7010 0x02000001, 0x80010001, 0xa0000005, 0x03000002, 0x80010001, 0x80000001, 0xa0000006, 0x03000002,
7011 0xe00f0000, 0x80e40000, 0x80000001, 0x0000ffff, 0x00000000, 0x00000000, 0xffffffff, 0x00000000,
7012 0x00000000, 0x000000d8, 0x46580200, 0x0023fffe, 0x42415443, 0x0000001c, 0x00000057, 0x46580200,
7013 0x00000001, 0x0000001c, 0x20000100, 0x00000054, 0x00000030, 0x00040002, 0x00120001, 0x00000034,
7014 0x00000044, 0xab003476, 0x00030000, 0x00010001, 0x00000001, 0x00000000, 0x00000000, 0x00000000,
7015 0x00000000, 0x00000000, 0x4d007874, 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c,
7016 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131, 0x0002fffe,
7017 0x54494c43, 0x00000000, 0x000cfffe, 0x434c5846, 0x00000001, 0x10000001, 0x00000001, 0x00000000,
7018 0x00000002, 0x00000010, 0x00000000, 0x00000004, 0x00000000, 0xf0f0f0f0, 0x0f0f0f0f, 0x0000ffff,
7021 static void test_effect_skip_constants(IDirect3DDevice9 *device)
7023 HRESULT hr;
7024 ID3DXEffect *effect;
7025 unsigned int passes_count;
7026 D3DXVECTOR4 fvect;
7027 unsigned int i;
7029 hr = D3DXCreateEffectEx(device, test_effect_skip_constants_blob, sizeof(test_effect_skip_constants_blob),
7030 NULL, NULL, "v3", 0, NULL, &effect, NULL);
7031 ok(hr == D3DERR_INVALIDCALL, "Got result %#x.\n", hr);
7032 hr = D3DXCreateEffectEx(device, test_effect_skip_constants_blob, sizeof(test_effect_skip_constants_blob),
7033 NULL, NULL, "v4", 0, NULL, &effect, NULL);
7034 ok(hr == D3DERR_INVALIDCALL, "Got result %#x.\n", hr);
7035 hr = D3DXCreateEffectEx(device, test_effect_skip_constants_blob, sizeof(test_effect_skip_constants_blob),
7036 NULL, NULL, "v1;v5;v4", 0, NULL, &effect, NULL);
7037 ok(hr == D3DERR_INVALIDCALL, "Got result %#x.\n", hr);
7039 hr = D3DXCreateEffectEx(device, test_effect_skip_constants_blob, sizeof(test_effect_skip_constants_blob),
7040 NULL, NULL, " v1#,.+-= &\t\nv2*/!\"'v5 v6[1]", 0, NULL, &effect, NULL);
7041 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7043 ok(!effect->lpVtbl->IsParameterUsed(effect, "v1", "tech0"),
7044 "Unexpected IsParameterUsed result.\n");
7045 ok(!effect->lpVtbl->IsParameterUsed(effect, "v2", "tech0"),
7046 "Unexpected IsParameterUsed result.\n");
7047 ok(effect->lpVtbl->IsParameterUsed(effect, "v3", "tech0"),
7048 "Unexpected IsParameterUsed result.\n");
7049 ok(effect->lpVtbl->IsParameterUsed(effect, "v4", "tech0"),
7050 "Unexpected IsParameterUsed result.\n");
7051 ok(!effect->lpVtbl->IsParameterUsed(effect, "v5", "tech0"),
7052 "Unexpected IsParameterUsed result.\n");
7053 ok(!effect->lpVtbl->IsParameterUsed(effect, "v6", "tech0"),
7054 "Unexpected IsParameterUsed result.\n");
7056 hr = effect->lpVtbl->SetFloat(effect, "v1", 28.0f);
7057 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7058 hr = effect->lpVtbl->SetFloat(effect, "v2", 29.0f);
7059 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7060 hr = effect->lpVtbl->SetFloat(effect, "v3", 30.0f);
7061 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7062 hr = effect->lpVtbl->SetFloat(effect, "v4", 31.0f);
7063 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7064 hr = effect->lpVtbl->SetFloat(effect, "v5", 32.0f);
7065 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7067 test_effect_preshader_clear_vconsts(device);
7069 hr = effect->lpVtbl->Begin(effect, &passes_count, 0);
7070 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7071 hr = effect->lpVtbl->BeginPass(effect, 0);
7072 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7074 fvect.y = fvect.z = fvect.w = 0.0f;
7075 fvect.x = 30.0f;
7076 test_effect_shared_parameters_compare_vconst(device, 0, &fvect, FALSE);
7077 for (i = 1; i < 4; ++i)
7078 test_effect_shared_parameters_compare_vconst(device, i, &fvect_filler, FALSE);
7079 fvect.x = 31.0f;
7080 test_effect_shared_parameters_compare_vconst(device, 4, &fvect, FALSE);
7081 for (i = 5; i < 256; ++i)
7082 test_effect_shared_parameters_compare_vconst(device, i, &fvect_filler, FALSE);
7084 hr = effect->lpVtbl->EndPass(effect);
7085 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7086 hr = effect->lpVtbl->End(effect);
7087 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7089 effect->lpVtbl->Release(effect);
7092 #if 0
7093 vertexshader vs_arr[2] =
7097 vs_3_0
7098 def c0, 1, 1, 1, 1
7099 dcl_position o0
7100 mov o0, c0
7105 vs_3_sw
7106 def c256, 1, 1, 1, 1
7107 dcl_position o0
7108 mov o0, c256
7112 int i;
7114 technique tech0
7116 pass p0
7118 VertexShader = vs_arr[1];
7121 technique tech1
7123 pass p0
7125 VertexShader = vs_arr[i];
7128 #endif
7129 static const DWORD test_effect_unsupported_shader_blob[] =
7131 0xfeff0901, 0x000000ac, 0x00000000, 0x00000010, 0x00000004, 0x00000020, 0x00000000, 0x00000002,
7132 0x00000001, 0x00000002, 0x00000007, 0x615f7376, 0x00007272, 0x00000002, 0x00000000, 0x0000004c,
7133 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000000, 0x00000002, 0x00000069, 0x00000003,
7134 0x00000010, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00003070, 0x00000006,
7135 0x68636574, 0x00000030, 0x00000004, 0x00000010, 0x00000004, 0x00000000, 0x00000000, 0x00000000,
7136 0x00000003, 0x00003070, 0x00000006, 0x68636574, 0x00000031, 0x00000002, 0x00000002, 0x00000006,
7137 0x00000005, 0x00000004, 0x00000018, 0x00000000, 0x00000000, 0x0000002c, 0x00000048, 0x00000000,
7138 0x00000000, 0x00000074, 0x00000000, 0x00000001, 0x0000006c, 0x00000000, 0x00000001, 0x00000092,
7139 0x00000000, 0x00000058, 0x00000054, 0x000000a0, 0x00000000, 0x00000001, 0x00000098, 0x00000000,
7140 0x00000001, 0x00000092, 0x00000000, 0x00000084, 0x00000080, 0x00000002, 0x00000002, 0x00000001,
7141 0x00000038, 0xfffe0300, 0x05000051, 0xa00f0000, 0x3f800000, 0x3f800000, 0x3f800000, 0x3f800000,
7142 0x0200001f, 0x80000000, 0xe00f0000, 0x02000001, 0xe00f0000, 0xa0e40000, 0x0000ffff, 0x00000002,
7143 0x00000038, 0xfffe03ff, 0x05000051, 0xa00f0100, 0x3f800000, 0x3f800000, 0x3f800000, 0x3f800000,
7144 0x0200001f, 0x80000000, 0xe00f0000, 0x02000001, 0xe00f0000, 0xa0e40100, 0x0000ffff, 0x00000001,
7145 0x00000000, 0xffffffff, 0x00000000, 0x00000002, 0x000000e4, 0x00000008, 0x615f7376, 0x00007272,
7146 0x46580200, 0x0023fffe, 0x42415443, 0x0000001c, 0x00000057, 0x46580200, 0x00000001, 0x0000001c,
7147 0x00000100, 0x00000054, 0x00000030, 0x00000002, 0x00000001, 0x00000034, 0x00000044, 0xabab0069,
7148 0x00020000, 0x00010001, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
7149 0x4d007874, 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320,
7150 0x656c6970, 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131, 0x0002fffe, 0x54494c43, 0x00000000,
7151 0x000cfffe, 0x434c5846, 0x00000001, 0x10000001, 0x00000001, 0x00000000, 0x00000002, 0x00000000,
7152 0x00000000, 0x00000004, 0x00000000, 0xf0f0f0f0, 0x0f0f0f0f, 0x0000ffff, 0x00000000, 0x00000000,
7153 0xffffffff, 0x00000000, 0x00000001, 0x0000000a, 0x615f7376, 0x315b7272, 0x0000005d,
7156 #define TEST_EFFECT_UNSUPPORTED_SHADER_BYTECODE_VS_3_0_POS 81
7157 #define TEST_EFFECT_UNSUPPORTED_SHADER_BYTECODE_VS_3_0_LEN 14
7159 static void test_effect_unsupported_shader(void)
7161 IDirect3DVertexShader9 *vshader;
7162 unsigned int passes_count;
7163 IDirect3DDevice9 *device;
7164 UINT byte_code_size;
7165 ID3DXEffect *effect;
7166 void *byte_code;
7167 ULONG refcount;
7168 HWND window;
7169 HRESULT hr;
7171 if (!(device = create_device(&window)))
7172 return;
7174 hr = D3DXCreateEffectEx(device, test_effect_unsupported_shader_blob, sizeof(test_effect_unsupported_shader_blob),
7175 NULL, NULL, NULL, 0, NULL, &effect, NULL);
7176 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7178 hr = effect->lpVtbl->ValidateTechnique(effect, "missing_technique");
7179 ok(hr == D3DERR_INVALIDCALL, "Got result %#x.\n", hr);
7180 hr = effect->lpVtbl->ValidateTechnique(effect, "tech0");
7181 ok(hr == E_FAIL, "Got result %#x.\n", hr);
7183 hr = effect->lpVtbl->ValidateTechnique(effect, "tech1");
7184 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7185 effect->lpVtbl->SetInt(effect, "i", 1);
7186 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7187 hr = effect->lpVtbl->ValidateTechnique(effect, "tech1");
7188 ok(hr == E_FAIL, "Got result %#x.\n", hr);
7189 effect->lpVtbl->SetInt(effect, "i", 0);
7190 hr = effect->lpVtbl->ValidateTechnique(effect, "tech1");
7191 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7193 hr = effect->lpVtbl->SetTechnique(effect, "tech0");
7194 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7195 hr = effect->lpVtbl->Begin(effect, &passes_count, 0);
7196 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7197 hr = effect->lpVtbl->BeginPass(effect, 0);
7198 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7200 hr = IDirect3DDevice9_GetVertexShader(device, &vshader);
7201 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
7202 ok(!vshader, "Got non NULL vshader.\n");
7204 hr = effect->lpVtbl->EndPass(effect);
7205 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7206 hr = effect->lpVtbl->End(effect);
7207 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7209 hr = effect->lpVtbl->SetTechnique(effect, "tech1");
7210 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7211 hr = effect->lpVtbl->Begin(effect, &passes_count, 0);
7212 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7213 hr = effect->lpVtbl->BeginPass(effect, 0);
7214 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7216 hr = IDirect3DDevice9_GetVertexShader(device, &vshader);
7217 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
7218 ok(!!vshader, "Got NULL vshader.\n");
7219 hr = IDirect3DVertexShader9_GetFunction(vshader, NULL, &byte_code_size);
7220 ok(hr == D3D_OK, "Got result %x.\n", hr);
7221 byte_code = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, byte_code_size);
7222 hr = IDirect3DVertexShader9_GetFunction(vshader, byte_code, &byte_code_size);
7223 ok(hr == D3D_OK, "Got result %x.\n", hr);
7224 ok(byte_code_size == TEST_EFFECT_UNSUPPORTED_SHADER_BYTECODE_VS_3_0_LEN * sizeof(DWORD),
7225 "Got unexpected byte code size %u.\n", byte_code_size);
7226 ok(!memcmp(byte_code,
7227 &test_effect_unsupported_shader_blob[TEST_EFFECT_UNSUPPORTED_SHADER_BYTECODE_VS_3_0_POS],
7228 byte_code_size), "Incorrect shader selected.\n");
7229 HeapFree(GetProcessHeap(), 0, byte_code);
7230 IDirect3DVertexShader9_Release(vshader);
7232 effect->lpVtbl->SetInt(effect, "i", 1);
7233 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7234 hr = effect->lpVtbl->CommitChanges(effect);
7235 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7236 hr = IDirect3DDevice9_GetVertexShader(device, &vshader);
7237 ok(hr == D3D_OK, "Got result %x.\n", hr);
7238 ok(!vshader, "Got non NULL vshader.\n");
7240 effect->lpVtbl->Release(effect);
7242 refcount = IDirect3DDevice9_Release(device);
7243 ok(!refcount, "Device has %u references left.\n", refcount);
7244 DestroyWindow(window);
7247 #if 0
7248 vertexshader vs_arr[2];
7250 int i;
7252 technique tech0
7254 pass p0
7256 VertexShader = null;
7259 technique tech1
7261 pass p0
7263 VertexShader = vs_arr[i];
7266 #endif
7267 static const DWORD test_effect_null_shader_blob[] =
7269 0xfeff0901, 0x000000b4, 0x00000000, 0x00000010, 0x00000004, 0x00000020, 0x00000000, 0x00000002,
7270 0x00000001, 0x00000002, 0x00000007, 0x615f7376, 0x00007272, 0x00000002, 0x00000000, 0x0000004c,
7271 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000000, 0x00000002, 0x00000069, 0x00000000,
7272 0x00000002, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000003,
7273 0x00003070, 0x00000006, 0x68636574, 0x00000030, 0x00000003, 0x00000010, 0x00000004, 0x00000000,
7274 0x00000000, 0x00000000, 0x00000003, 0x00003070, 0x00000006, 0x68636574, 0x00000031, 0x00000002,
7275 0x00000002, 0x00000005, 0x00000004, 0x00000004, 0x00000018, 0x00000000, 0x00000000, 0x0000002c,
7276 0x00000048, 0x00000000, 0x00000000, 0x0000007c, 0x00000000, 0x00000001, 0x00000074, 0x00000000,
7277 0x00000001, 0x00000092, 0x00000000, 0x00000058, 0x00000054, 0x000000a8, 0x00000000, 0x00000001,
7278 0x000000a0, 0x00000000, 0x00000001, 0x00000092, 0x00000000, 0x0000008c, 0x00000088, 0x00000002,
7279 0x00000001, 0x00000001, 0x00000000, 0x00000002, 0x00000000, 0x00000001, 0x00000000, 0xffffffff,
7280 0x00000000, 0x00000002, 0x000000e4, 0x00000008, 0x615f7376, 0x00007272, 0x46580200, 0x0023fffe,
7281 0x42415443, 0x0000001c, 0x00000057, 0x46580200, 0x00000001, 0x0000001c, 0x00000100, 0x00000054,
7282 0x00000030, 0x00000002, 0x00000001, 0x00000034, 0x00000044, 0xabab0069, 0x00020000, 0x00010001,
7283 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x4d007874, 0x6f726369,
7284 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c, 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072,
7285 0x392e3932, 0x332e3235, 0x00313131, 0x0002fffe, 0x54494c43, 0x00000000, 0x000cfffe, 0x434c5846,
7286 0x00000001, 0x10000001, 0x00000001, 0x00000000, 0x00000002, 0x00000000, 0x00000000, 0x00000004,
7287 0x00000000, 0xf0f0f0f0, 0x0f0f0f0f, 0x0000ffff,
7290 static void test_effect_null_shader(void)
7292 IDirect3DDevice9 *device;
7293 ID3DXEffect *effect;
7294 D3DXPASS_DESC desc;
7295 D3DXHANDLE pass;
7296 ULONG refcount;
7297 HWND window;
7298 HRESULT hr;
7300 /* Creating a fresh device because the existing device can have invalid
7301 * render states from previous tests. If IDirect3DDevice9_ValidateDevice()
7302 * returns certain error codes, native ValidateTechnique() fails. */
7303 if (!(device = create_device(&window)))
7304 return;
7306 hr = D3DXCreateEffectEx(device, test_effect_null_shader_blob,
7307 sizeof(test_effect_null_shader_blob), NULL, NULL, NULL, 0, NULL, &effect, NULL);
7308 ok(hr == D3D_OK, "Failed to create effect, hr %#x.\n", hr);
7310 pass = effect->lpVtbl->GetPass(effect, "tech0", 0);
7311 ok(!!pass, "GetPass() failed.\n");
7312 hr = effect->lpVtbl->GetPassDesc(effect, pass, &desc);
7313 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7314 ok(!desc.pVertexShaderFunction, "Got non NULL vertex function.\n");
7316 pass = effect->lpVtbl->GetPass(effect, "tech1", 0);
7317 ok(!!pass, "GetPass() failed.\n");
7318 hr = effect->lpVtbl->GetPassDesc(effect, pass, &desc);
7319 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7320 ok(!desc.pVertexShaderFunction, "Got non NULL vertex function.\n");
7322 hr = effect->lpVtbl->ValidateTechnique(effect, "tech0");
7323 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7324 effect->lpVtbl->SetInt(effect, "i", 0);
7325 ok(hr == D3D_OK, "Failed to set parameter, hr %#x.\n", hr);
7326 hr = effect->lpVtbl->ValidateTechnique(effect, "tech1");
7327 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7328 effect->lpVtbl->SetInt(effect, "i", 1);
7329 ok(hr == D3D_OK, "Failed to set parameter, hr %#x.\n", hr);
7330 hr = effect->lpVtbl->ValidateTechnique(effect, "tech1");
7331 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7333 effect->lpVtbl->SetInt(effect, "i", 2);
7334 ok(hr == D3D_OK, "Failed to set parameter, hr %#x.\n", hr);
7335 hr = effect->lpVtbl->ValidateTechnique(effect, "tech1");
7336 ok(hr == E_FAIL, "Got result %#x.\n", hr);
7338 effect->lpVtbl->Release(effect);
7340 refcount = IDirect3DDevice9_Release(device);
7341 ok(!refcount, "Device has %u references left.\n", refcount);
7342 DestroyWindow(window);
7345 static void test_effect_clone(void)
7347 IDirect3DDevice9 *device, *device2, *device3;
7348 ID3DXEffect *effect, *cloned;
7349 HWND window, window2;
7350 ULONG refcount;
7351 HRESULT hr;
7353 if (!(device = create_device(&window)))
7354 return;
7356 /* D3DXFX_NOT_CLONEABLE */
7357 hr = D3DXCreateEffect(device, test_effect_preshader_effect_blob, sizeof(test_effect_preshader_effect_blob),
7358 NULL, NULL, D3DXFX_NOT_CLONEABLE, NULL, &effect, NULL);
7359 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7361 hr = effect->lpVtbl->CloneEffect(effect, NULL, NULL);
7362 ok(hr == D3DERR_INVALIDCALL, "Got result %#x.\n", hr);
7364 cloned = (void *)0xdeadbeef;
7365 hr = effect->lpVtbl->CloneEffect(effect, NULL, &cloned);
7366 ok(hr == E_FAIL, "Got result %#x.\n", hr);
7367 ok(cloned == (void *)0xdeadbeef, "Unexpected effect pointer.\n");
7369 hr = effect->lpVtbl->CloneEffect(effect, device, NULL);
7370 ok(hr == D3DERR_INVALIDCALL, "Got result %#x.\n", hr);
7372 cloned = (void *)0xdeadbeef;
7373 hr = effect->lpVtbl->CloneEffect(effect, device, &cloned);
7374 ok(hr == E_FAIL, "Got result %#x.\n", hr);
7375 ok(cloned == (void *)0xdeadbeef, "Unexpected effect pointer.\n");
7377 effect->lpVtbl->Release(effect);
7379 hr = D3DXCreateEffect(device, test_effect_preshader_effect_blob, sizeof(test_effect_preshader_effect_blob),
7380 NULL, NULL, 0, NULL, &effect, NULL);
7381 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7383 hr = effect->lpVtbl->CloneEffect(effect, NULL, NULL);
7384 ok(hr == D3DERR_INVALIDCALL, "Got result %#x.\n", hr);
7386 cloned = (void *)0xdeadbeef;
7387 hr = effect->lpVtbl->CloneEffect(effect, NULL, &cloned);
7388 ok(hr == D3DERR_INVALIDCALL, "Got result %#x.\n", hr);
7389 ok(cloned == (void *)0xdeadbeef, "Unexpected effect pointer.\n");
7391 hr = effect->lpVtbl->CloneEffect(effect, device, NULL);
7392 ok(hr == D3DERR_INVALIDCALL, "Got result %#x.\n", hr);
7394 hr = effect->lpVtbl->CloneEffect(effect, device, &cloned);
7395 todo_wine
7396 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7397 if (hr == D3D_OK)
7399 ok(cloned != effect, "Expected new effect instance.\n");
7400 cloned->lpVtbl->Release(cloned);
7402 /* Try with different device. */
7403 device2 = create_device(&window2);
7404 hr = effect->lpVtbl->CloneEffect(effect, device2, &cloned);
7405 todo_wine
7406 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7407 if (hr == D3D_OK)
7409 ok(cloned != effect, "Expected new effect instance.\n");
7411 hr = cloned->lpVtbl->GetDevice(cloned, &device3);
7412 ok(hr == S_OK, "Failed to get effect device.\n");
7413 ok(device3 == device2, "Unexpected device instance.\n");
7414 IDirect3DDevice9_Release(device3);
7416 cloned->lpVtbl->Release(cloned);
7418 IDirect3DDevice9_Release(device2);
7419 DestroyWindow(window2);
7420 effect->lpVtbl->Release(effect);
7421 refcount = IDirect3DDevice9_Release(device);
7422 ok(!refcount, "Device has %u references left.\n", refcount);
7423 DestroyWindow(window);
7426 static unsigned int get_texture_refcount(IDirect3DTexture9 *iface)
7428 IDirect3DTexture9_AddRef(iface);
7429 return IDirect3DTexture9_Release(iface);
7432 static void test_refcount(void)
7434 IDirect3DTexture9 *texture, *cur_texture, *managed_texture, *sysmem_texture;
7435 unsigned int passes_count;
7436 IDirect3DDevice9 *device;
7437 ID3DXEffect *effect;
7438 ULONG refcount;
7439 HWND window;
7440 HRESULT hr;
7442 if (!(device = create_device(&window)))
7443 return;
7445 hr = IDirect3DDevice9_CreateTexture(device, 16, 16, 1, 0, D3DFMT_X8R8G8B8, D3DPOOL_DEFAULT, &texture, NULL);
7446 ok(hr == D3D_OK, "Failed to create texture, hr %#x.\n", hr);
7448 hr = D3DXCreateEffect(device, test_effect_preshader_effect_blob,
7449 sizeof(test_effect_preshader_effect_blob), NULL, NULL,
7450 D3DXFX_DONOTSAVESTATE, NULL, &effect, NULL);
7451 ok(hr == D3D_OK, "Failed to create effect, hr %#x.\n", hr);
7453 hr = effect->lpVtbl->SetTexture(effect, "tex1", (IDirect3DBaseTexture9 *)texture);
7454 ok(hr == D3D_OK, "Failed to set texture parameter, hr %#x.\n", hr);
7456 hr = effect->lpVtbl->Begin(effect, &passes_count, D3DXFX_DONOTSAVESTATE);
7457 ok(hr == D3D_OK, "Begin() failed, hr %#x.\n", hr);
7459 hr = effect->lpVtbl->BeginPass(effect, 0);
7460 ok(hr == D3D_OK, "BeginPass() failed, hr %#x.\n", hr);
7462 IDirect3DDevice9_GetTexture(device, 0, (IDirect3DBaseTexture9 **)&cur_texture);
7463 ok(cur_texture == texture, "Unexpected current texture %p.\n", cur_texture);
7464 IDirect3DTexture9_Release(cur_texture);
7466 IDirect3DDevice9_SetTexture(device, 0, NULL);
7467 effect->lpVtbl->CommitChanges(effect);
7469 IDirect3DDevice9_GetTexture(device, 0, (IDirect3DBaseTexture9 **)&cur_texture);
7470 ok(cur_texture == NULL, "Unexpected current texture %p.\n", cur_texture);
7472 hr = effect->lpVtbl->EndPass(effect);
7473 ok(hr == D3D_OK, "EndPass() failed, hr %#x.\n", hr);
7475 hr = effect->lpVtbl->BeginPass(effect, 0);
7476 ok(hr == D3D_OK, "BeginPass() failed, hr %#x.\n", hr);
7478 IDirect3DDevice9_GetTexture(device, 0, (IDirect3DBaseTexture9 **)&cur_texture);
7479 ok(cur_texture == texture, "Unexpected current texture %p.\n", cur_texture);
7480 IDirect3DTexture9_Release(cur_texture);
7482 hr = effect->lpVtbl->EndPass(effect);
7483 ok(hr == D3D_OK, "EndPass() failed, hr %#x.\n", hr);
7484 hr = effect->lpVtbl->End(effect);
7485 ok(hr == D3D_OK, "End() failed, hr %#x.\n", hr);
7487 IDirect3DDevice9_GetTexture(device, 0, (IDirect3DBaseTexture9 **)&cur_texture);
7488 ok(cur_texture == texture, "Unexpected current texture %p.\n", cur_texture);
7489 IDirect3DTexture9_Release(cur_texture);
7490 refcount = get_texture_refcount(texture);
7491 ok(refcount == 2, "Unexpected texture refcount %u.\n", refcount);
7493 hr = effect->lpVtbl->OnLostDevice(effect);
7494 ok(hr == D3D_OK, "OnLostDevice() failed, hr %#x.\n", hr);
7495 refcount = get_texture_refcount(texture);
7496 ok(refcount == 1, "Unexpected texture refcount %u.\n", refcount);
7498 hr = IDirect3DDevice9_CreateTexture(device, 16, 16, 1, 0, D3DFMT_X8R8G8B8, D3DPOOL_MANAGED,
7499 &managed_texture, NULL);
7500 ok(hr == D3D_OK, "Failed to create texture, hr %#x.\n", hr);
7501 effect->lpVtbl->SetTexture(effect, "tex1", (IDirect3DBaseTexture9 *)managed_texture);
7503 refcount = get_texture_refcount(managed_texture);
7504 ok(refcount == 2, "Unexpected texture refcount %u.\n", refcount);
7505 hr = effect->lpVtbl->OnLostDevice(effect);
7506 ok(hr == D3D_OK, "OnLostDevice() failed, hr %#x.\n", hr);
7507 refcount = get_texture_refcount(managed_texture);
7508 ok(refcount == 2, "Unexpected texture refcount %u.\n", refcount);
7510 hr = IDirect3DDevice9_CreateTexture(device, 16, 16, 1, 0, D3DFMT_X8R8G8B8, D3DPOOL_SYSTEMMEM,
7511 &sysmem_texture, NULL);
7512 ok(hr == D3D_OK, "Failed to create texture, hr %#x.\n", hr);
7513 effect->lpVtbl->SetTexture(effect, "tex1", (IDirect3DBaseTexture9 *)sysmem_texture);
7515 refcount = get_texture_refcount(managed_texture);
7516 ok(refcount == 1, "Unexpected texture refcount %u.\n", refcount);
7517 IDirect3DTexture9_Release(managed_texture);
7518 refcount = get_texture_refcount(sysmem_texture);
7519 ok(refcount == 2, "Unexpected texture refcount %u.\n", refcount);
7520 hr = effect->lpVtbl->OnLostDevice(effect);
7521 ok(hr == D3D_OK, "OnLostDevice() failed, hr %#x.\n", hr);
7522 refcount = get_texture_refcount(sysmem_texture);
7523 ok(refcount == 2, "Unexpected texture refcount %u.\n", refcount);
7525 effect->lpVtbl->Release(effect);
7527 refcount = get_texture_refcount(sysmem_texture);
7528 ok(refcount == 1, "Unexpected texture refcount %u.\n", refcount);
7529 IDirect3DTexture9_Release(sysmem_texture);
7531 IDirect3DDevice9_GetTexture(device, 0, (IDirect3DBaseTexture9 **)&cur_texture);
7532 ok(cur_texture == texture, "Unexpected current texture %p.\n", cur_texture);
7533 IDirect3DTexture9_Release(cur_texture);
7534 refcount = get_texture_refcount(texture);
7535 ok(refcount == 1, "Unexpected texture refcount %u.\n", refcount);
7536 IDirect3DTexture9_Release(texture);
7538 refcount = IDirect3DDevice9_Release(device);
7539 ok(!refcount, "Device has %u references left.\n", refcount);
7540 DestroyWindow(window);
7543 static HRESULT WINAPI d3dxinclude_open(ID3DXInclude *iface, D3DXINCLUDE_TYPE include_type,
7544 const char *filename, const void *parent_data, const void **data, UINT *bytes)
7546 static const char include1[] =
7547 "float4 light;\n"
7548 "float4x4 mat;\n"
7549 "float4 color;\n"
7550 "\n"
7551 "struct vs_input\n"
7552 "{\n"
7553 " float4 position : POSITION;\n"
7554 " float3 normal : NORMAL;\n"
7555 "};\n"
7556 "\n"
7557 "struct vs_output\n"
7558 "{\n"
7559 " float4 position : POSITION;\n"
7560 " float4 diffuse : COLOR;\n"
7561 "};\n";
7562 static const char include2[] =
7563 "#include \"include1.h\"\n"
7564 "\n"
7565 "vs_output vs_main(const vs_input v)\n"
7566 "{\n"
7567 " vs_output o;\n"
7568 " const float4 scaled_color = 0.5 * color;\n"
7569 "\n"
7570 " o.position = mul(v.position, mat);\n"
7571 " o.diffuse = dot((float3)light, v.normal) * scaled_color;\n"
7572 "\n"
7573 " return o;\n"
7574 "}\n";
7575 static const char effect2[] =
7576 "#include \"include\\include2.h\"\n"
7577 "\n"
7578 "technique t\n"
7579 "{\n"
7580 " pass p\n"
7581 " {\n"
7582 " VertexShader = compile vs_2_0 vs_main();\n"
7583 " }\n"
7584 "}\n";
7585 char *buffer;
7587 trace("filename %s.\n", filename);
7588 trace("parent_data %p: %s.\n", parent_data, parent_data ? (char *)parent_data : "(null)");
7590 if (!strcmp(filename, "effect2.fx"))
7592 buffer = HeapAlloc(GetProcessHeap(), 0, sizeof(effect2));
7593 memcpy(buffer, effect2, sizeof(effect2));
7594 *bytes = sizeof(effect2);
7595 ok(!parent_data, "Unexpected parent_data value.\n");
7597 else if (!strcmp(filename, "include1.h"))
7599 buffer = HeapAlloc(GetProcessHeap(), 0, sizeof(include1));
7600 memcpy(buffer, include1, sizeof(include1));
7601 *bytes = sizeof(include1);
7602 ok(!strncmp(parent_data, include2, strlen(include2)), "Unexpected parent_data value.\n");
7604 else if (!strcmp(filename, "include\\include2.h"))
7606 buffer = HeapAlloc(GetProcessHeap(), 0, sizeof(include2));
7607 memcpy(buffer, include2, sizeof(include2));
7608 *bytes = sizeof(include2);
7609 todo_wine ok(parent_data && !strncmp(parent_data, effect2, strlen(effect2)),
7610 "unexpected parent_data value.\n");
7612 else
7614 ok(0, "Unexpected #include for file %s.\n", filename);
7615 return D3DERR_INVALIDCALL;
7617 *data = buffer;
7618 return S_OK;
7621 static HRESULT WINAPI d3dxinclude_close(ID3DXInclude *iface, const void *data)
7623 HeapFree(GetProcessHeap(), 0, (void *)data);
7624 return S_OK;
7627 static const struct ID3DXIncludeVtbl d3dxinclude_vtbl =
7629 d3dxinclude_open,
7630 d3dxinclude_close
7633 struct d3dxinclude
7635 ID3DXInclude ID3DXInclude_iface;
7638 static void test_create_effect_from_file(void)
7640 static const char effect1[] =
7641 "float4 light;\n"
7642 "float4x4 mat;\n"
7643 "float4 color;\n"
7644 "\n"
7645 "struct vs_input\n"
7646 "{\n"
7647 " float4 position : POSITION;\n"
7648 " float3 normal : NORMAL;\n"
7649 "};\n"
7650 "\n"
7651 "struct vs_output\n"
7652 "{\n"
7653 " float4 position : POSITION;\n"
7654 " float4 diffuse : COLOR;\n"
7655 "};\n"
7656 "\n"
7657 "vs_output vs_main(const vs_input v)\n"
7658 "{\n"
7659 " vs_output o;\n"
7660 " const float4 scaled_color = 0.5 * color;\n"
7661 "\n"
7662 " o.position = mul(v.position, mat);\n"
7663 " o.diffuse = dot((float3)light, v.normal) * scaled_color;\n"
7664 "\n"
7665 " return o;\n"
7666 "}\n"
7667 "\n"
7668 "technique t\n"
7669 "{\n"
7670 " pass p\n"
7671 " {\n"
7672 " VertexShader = compile vs_2_0 vs_main();\n"
7673 " }\n"
7674 "}\n";
7675 static const char include1[] =
7676 "float4 light;\n"
7677 "float4x4 mat;\n"
7678 "float4 color;\n"
7679 "\n"
7680 "struct vs_input\n"
7681 "{\n"
7682 " float4 position : POSITION;\n"
7683 " float3 normal : NORMAL;\n"
7684 "};\n"
7685 "\n"
7686 "struct vs_output\n"
7687 "{\n"
7688 " float4 position : POSITION;\n"
7689 " float4 diffuse : COLOR;\n"
7690 "};\n";
7691 static const char include1_wrong[] =
7692 "#error \"wrong include\"\n";
7693 static const char include2[] =
7694 "#include \"include1.h\"\n"
7695 "\n"
7696 "vs_output vs_main(const vs_input v)\n"
7697 "{\n"
7698 " vs_output o;\n"
7699 " const float4 scaled_color = 0.5 * color;\n"
7700 "\n"
7701 " o.position = mul(v.position, mat);\n"
7702 " o.diffuse = dot((float3)light, v.normal) * scaled_color;\n"
7703 "\n"
7704 " return o;\n"
7705 "}\n";
7706 static const char effect2[] =
7707 "#include \"include\\include2.h\"\n"
7708 "\n"
7709 "technique t\n"
7710 "{\n"
7711 " pass p\n"
7712 " {\n"
7713 " VertexShader = compile vs_2_0 vs_main();\n"
7714 " }\n"
7715 "}\n";
7716 static const WCHAR effect1_filename_w[] = {'e','f','f','e','c','t','1','.','f','x',0};
7717 static const WCHAR effect2_filename_w[] = {'e','f','f','e','c','t','2','.','f','x',0};
7718 WCHAR effect_path_w[MAX_PATH], filename_w[MAX_PATH];
7719 char effect_path[MAX_PATH], filename[MAX_PATH];
7720 D3DPRESENT_PARAMETERS present_parameters = {0};
7721 unsigned int filename_size;
7722 struct d3dxinclude include;
7723 IDirect3DDevice9 *device;
7724 ID3DXBuffer *messages;
7725 ID3DXEffect *effect;
7726 IDirect3D9 *d3d;
7727 ULONG refcount;
7728 HWND window;
7729 HRESULT hr;
7731 if (!(window = CreateWindowA("static", "d3dx9_test", WS_OVERLAPPEDWINDOW, 0, 0,
7732 640, 480, NULL, NULL, NULL, NULL)))
7734 skip("Failed to create window.\n");
7735 return;
7737 if (!(d3d = Direct3DCreate9(D3D_SDK_VERSION)))
7739 skip("Failed to create IDirect3D9 object.\n");
7740 DestroyWindow(window);
7741 return;
7743 present_parameters.Windowed = TRUE;
7744 present_parameters.SwapEffect = D3DSWAPEFFECT_DISCARD;
7745 hr = IDirect3D9_CreateDevice(d3d, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, window,
7746 D3DCREATE_HARDWARE_VERTEXPROCESSING, &present_parameters, &device);
7747 if (FAILED(hr))
7749 skip("Failed to create IDirect3DDevice9 object, hr %#x.\n", hr);
7750 IDirect3D9_Release(d3d);
7751 DestroyWindow(window);
7752 return;
7755 if (!create_file("effect1.fx", effect1, sizeof(effect1) - 1, filename))
7757 skip("Couldn't create temporary file, skipping test.\n");
7758 return;
7761 filename_size = strlen(filename);
7762 filename_size -= sizeof("effect1.fx") - 1;
7763 memcpy(effect_path, filename, filename_size);
7764 effect_path[filename_size] = 0;
7765 MultiByteToWideChar(CP_ACP, 0, effect_path, -1, effect_path_w, sizeof(effect_path_w));
7767 create_directory("include");
7768 create_file("effect2.fx", effect2, sizeof(effect2) - 1, NULL);
7769 create_file("include\\include1.h", include1, sizeof(include1) - 1, NULL);
7770 create_file("include\\include2.h", include2, sizeof(include2) - 1, NULL);
7771 create_file("include1.h", include1_wrong, sizeof(include1_wrong) - 1, NULL);
7773 lstrcpyW(filename_w, effect_path_w);
7774 lstrcatW(filename_w, effect1_filename_w);
7775 effect = NULL;
7776 messages = NULL;
7777 hr = D3DXCreateEffectFromFileExW(device, filename_w, NULL, NULL, NULL,
7778 0, NULL, &effect, &messages);
7779 todo_wine ok(hr == D3D_OK, "Unexpected hr %#x.\n", hr);
7780 if (messages)
7782 trace("D3DXCreateEffectFromFileExW messages:\n%s", (char *)ID3DXBuffer_GetBufferPointer(messages));
7783 ID3DXBuffer_Release(messages);
7785 if (effect)
7786 effect->lpVtbl->Release(effect);
7788 lstrcpyW(filename_w, effect_path_w);
7789 lstrcatW(filename_w, effect2_filename_w);
7790 effect = NULL;
7791 messages = NULL;
7792 /* This is apparently broken on native, it ends up using the wrong include. */
7793 hr = D3DXCreateEffectFromFileExW(device, filename_w, NULL, NULL, NULL,
7794 0, NULL, &effect, &messages);
7795 todo_wine ok(hr == E_FAIL, "Unexpected error, hr %#x.\n", hr);
7796 if (messages)
7798 trace("D3DXCreateEffectFromFileExW messages:\n%s", (char *)ID3DXBuffer_GetBufferPointer(messages));
7799 ID3DXBuffer_Release(messages);
7801 if (effect)
7802 effect->lpVtbl->Release(effect);
7804 delete_file("effect1.fx");
7805 delete_file("effect2.fx");
7806 delete_file("include\\include1.h");
7807 delete_file("include\\include2.h");
7808 delete_file("include2.h");
7809 delete_directory("include");
7811 lstrcpyW(filename_w, effect2_filename_w);
7812 effect = NULL;
7813 messages = NULL;
7814 include.ID3DXInclude_iface.lpVtbl = &d3dxinclude_vtbl;
7815 /* This is actually broken in native d3dx9 (manually tried multiple
7816 * versions, all are affected). For reference, the message printed below
7817 * is "ID3DXEffectCompiler: There were no techniques" */
7818 hr = D3DXCreateEffectFromFileExW(device, filename_w, NULL, &include.ID3DXInclude_iface, NULL,
7819 0, NULL, &effect, &messages);
7820 todo_wine ok(hr == E_FAIL, "D3DXInclude test failed with error %#x.\n", hr);
7821 if (messages)
7823 trace("D3DXCreateEffectFromFileExW messages:\n%s", (char *)ID3DXBuffer_GetBufferPointer(messages));
7824 ID3DXBuffer_Release(messages);
7827 refcount = IDirect3DDevice9_Release(device);
7828 ok(!refcount, "Device has %u references left.\n", refcount);
7829 IDirect3D9_Release(d3d);
7830 DestroyWindow(window);
7833 #if 0
7834 technique tech0
7836 pass p0
7838 LightEnable[0] = FALSE;
7839 FogEnable = FALSE;
7842 technique tech1
7844 pass p0
7846 LightEnable[0] = TRUE;
7847 FogEnable = TRUE;
7850 #endif
7851 static const DWORD test_two_techniques_blob[] =
7853 0xfeff0901, 0x000000ac, 0x00000000, 0x00000000, 0x00000002, 0x00000002, 0x00000000, 0x00000000,
7854 0x00000000, 0x00000001, 0x00000001, 0x00000000, 0x00000002, 0x00000002, 0x00000000, 0x00000000,
7855 0x00000000, 0x00000001, 0x00000001, 0x00000003, 0x00003070, 0x00000006, 0x68636574, 0x00000030,
7856 0x00000001, 0x00000002, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001,
7857 0x00000001, 0x00000002, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001,
7858 0x00000003, 0x00003070, 0x00000006, 0x68636574, 0x00000031, 0x00000000, 0x00000002, 0x00000002,
7859 0x00000001, 0x0000004c, 0x00000000, 0x00000001, 0x00000044, 0x00000000, 0x00000002, 0x00000091,
7860 0x00000000, 0x00000008, 0x00000004, 0x0000000e, 0x00000000, 0x00000028, 0x00000024, 0x000000a0,
7861 0x00000000, 0x00000001, 0x00000098, 0x00000000, 0x00000002, 0x00000091, 0x00000000, 0x0000005c,
7862 0x00000058, 0x0000000e, 0x00000000, 0x0000007c, 0x00000078, 0x00000000, 0x00000000,
7865 static void test_effect_find_next_valid_technique(void)
7867 D3DPRESENT_PARAMETERS present_parameters = {0};
7868 IDirect3DDevice9 *device;
7869 D3DXTECHNIQUE_DESC desc;
7870 ID3DXEffect *effect;
7871 IDirect3D9 *d3d;
7872 D3DXHANDLE tech;
7873 ULONG refcount;
7874 HWND window;
7875 HRESULT hr;
7877 if (!(window = CreateWindowA("static", "d3dx9_test", WS_OVERLAPPEDWINDOW, 0, 0,
7878 640, 480, NULL, NULL, NULL, NULL)))
7880 skip("Failed to create window.\n");
7881 return;
7883 if (!(d3d = Direct3DCreate9(D3D_SDK_VERSION)))
7885 skip("Failed to create IDirect3D9 object.\n");
7886 DestroyWindow(window);
7887 return;
7889 present_parameters.Windowed = TRUE;
7890 present_parameters.SwapEffect = D3DSWAPEFFECT_DISCARD;
7891 hr = IDirect3D9_CreateDevice(d3d, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, window,
7892 D3DCREATE_HARDWARE_VERTEXPROCESSING, &present_parameters, &device);
7893 if (FAILED(hr))
7895 skip("Failed to create IDirect3DDevice9 object, hr %#x.\n", hr);
7896 IDirect3D9_Release(d3d);
7897 DestroyWindow(window);
7898 return;
7901 hr = D3DXCreateEffectEx(device, test_two_techniques_blob, sizeof(test_two_techniques_blob),
7902 NULL, NULL, NULL, 0, NULL, &effect, NULL);
7903 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7905 hr = effect->lpVtbl->FindNextValidTechnique(effect, NULL, &tech);
7906 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7907 hr = effect->lpVtbl->GetTechniqueDesc(effect, tech, &desc);
7908 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7909 ok(!strcmp(desc.Name, "tech0"), "Got unexpected technique %s.\n", desc.Name);
7911 hr = effect->lpVtbl->FindNextValidTechnique(effect, tech, &tech);
7912 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7913 hr = effect->lpVtbl->GetTechniqueDesc(effect, tech, &desc);
7914 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7915 ok(!strcmp(desc.Name, "tech1"), "Got unexpected technique %s.\n", desc.Name);
7917 hr = effect->lpVtbl->FindNextValidTechnique(effect, tech, &tech);
7918 ok(hr == S_FALSE, "Got result %#x.\n", hr);
7919 hr = effect->lpVtbl->GetTechniqueDesc(effect, tech, &desc);
7920 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7921 ok(!strcmp(desc.Name, "tech0"), "Got unexpected technique %s.\n", desc.Name);
7923 effect->lpVtbl->Release(effect);
7925 hr = D3DXCreateEffectEx(device, test_effect_unsupported_shader_blob, sizeof(test_effect_unsupported_shader_blob),
7926 NULL, NULL, NULL, 0, NULL, &effect, NULL);
7927 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7929 hr = effect->lpVtbl->FindNextValidTechnique(effect, NULL, &tech);
7930 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7931 hr = effect->lpVtbl->GetTechniqueDesc(effect, tech, &desc);
7932 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7933 ok(!strcmp(desc.Name, "tech1"), "Got unexpected technique %s.\n", desc.Name);
7935 hr = effect->lpVtbl->FindNextValidTechnique(effect, tech, &tech);
7936 ok(hr == S_FALSE, "Got result %#x.\n", hr);
7937 hr = effect->lpVtbl->GetTechniqueDesc(effect, tech, &desc);
7938 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7939 ok(!strcmp(desc.Name, "tech0"), "Got unexpected technique %s.\n", desc.Name);
7941 effect->lpVtbl->SetInt(effect, "i", 1);
7942 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7944 tech = (D3DXHANDLE)0xdeadbeef;
7945 hr = effect->lpVtbl->FindNextValidTechnique(effect, NULL, &tech);
7946 ok(hr == S_FALSE, "Got result %#x.\n", hr);
7947 hr = effect->lpVtbl->GetTechniqueDesc(effect, tech, &desc);
7948 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7949 ok(!strcmp(desc.Name, "tech0"), "Got unexpected technique %s.\n", desc.Name);
7951 hr = effect->lpVtbl->FindNextValidTechnique(effect, tech, &tech);
7952 ok(hr == S_FALSE, "Got result %#x.\n", hr);
7954 effect->lpVtbl->SetInt(effect, "i", 0);
7956 hr = effect->lpVtbl->FindNextValidTechnique(effect, tech, &tech);
7957 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7958 hr = effect->lpVtbl->GetTechniqueDesc(effect, tech, &desc);
7959 ok(hr == D3D_OK, "Got result %#x.\n", hr);
7960 ok(!strcmp(desc.Name, "tech1"), "Got unexpected technique %s.\n", desc.Name);
7962 hr = effect->lpVtbl->FindNextValidTechnique(effect, tech, &tech);
7963 ok(hr == S_FALSE, "Got result %#x.\n", hr);
7965 hr = effect->lpVtbl->FindNextValidTechnique(effect, "nope", &tech);
7966 ok(hr == D3DERR_INVALIDCALL, "Got result %#x.\n", hr);
7968 effect->lpVtbl->Release(effect);
7970 refcount = IDirect3DDevice9_Release(device);
7971 ok(!refcount, "Device has %u references left.\n", refcount);
7972 IDirect3D9_Release(d3d);
7973 DestroyWindow(window);
7976 START_TEST(effect)
7978 IDirect3DDevice9 *device;
7979 ULONG refcount;
7980 HWND wnd;
7982 if (!(device = create_device(&wnd)))
7983 return;
7985 test_create_effect_and_pool(device);
7986 test_create_effect_compiler();
7987 test_effect_parameter_value(device);
7988 test_effect_setvalue_object(device);
7989 test_effect_variable_names(device);
7990 test_effect_compilation_errors(device);
7991 test_effect_states(device);
7992 test_effect_preshader(device);
7993 test_effect_preshader_ops(device);
7994 test_effect_isparameterused(device);
7995 test_effect_out_of_bounds_selector(device);
7996 test_effect_commitchanges(device);
7997 test_effect_preshader_relative_addressing(device);
7998 test_effect_state_manager(device);
7999 test_cross_effect_handle(device);
8000 test_effect_shared_parameters(device);
8001 test_effect_large_address_aware_flag(device);
8002 test_effect_get_pass_desc(device);
8003 test_effect_skip_constants(device);
8005 refcount = IDirect3DDevice9_Release(device);
8006 ok(!refcount, "Device has %u references left.\n", refcount);
8007 DestroyWindow(wnd);
8009 test_effect_unsupported_shader();
8010 test_effect_null_shader();
8011 test_effect_clone();
8012 test_refcount();
8013 test_create_effect_from_file();
8014 test_effect_find_next_valid_technique();