d3dx9/tests: Add effect parameter value SetMatrixTranspose() test.
[wine/multimedia.git] / dlls / d3dx9_36 / tests / effect.c
blob5ff41a2f20e2c977ac4f573aa79a74efffcae2e6
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 /* helper functions */
26 static BOOL compare_float(FLOAT f, FLOAT g, UINT ulps)
28 INT x = *(INT *)&f;
29 INT y = *(INT *)&g;
31 if (x < 0)
32 x = INT_MIN - x;
33 if (y < 0)
34 y = INT_MIN - y;
36 if (abs(x - y) > ulps)
37 return FALSE;
39 return TRUE;
42 static inline INT get_int(D3DXPARAMETER_TYPE type, LPCVOID data)
44 INT i;
46 switch (type)
48 case D3DXPT_FLOAT:
49 i = *(FLOAT *)data;
50 break;
52 case D3DXPT_INT:
53 i = *(INT *)data;
54 break;
56 case D3DXPT_BOOL:
57 i = *(BOOL *)data;
58 break;
60 default:
61 i = 0;
62 ok(0, "Unhandled type %x.\n", type);
63 break;
66 return i;
69 static inline FLOAT get_float(D3DXPARAMETER_TYPE type, LPCVOID data)
71 FLOAT f;
73 switch (type)
75 case D3DXPT_FLOAT:
76 f = *(FLOAT *)data;
77 break;
79 case D3DXPT_INT:
80 f = *(INT *)data;
81 break;
83 case D3DXPT_BOOL:
84 f = *(BOOL *)data;
85 break;
87 default:
88 f = 0.0f;
89 ok(0, "Unhandled type %x.\n", type);
90 break;
93 return f;
96 static inline BOOL get_bool(LPCVOID data)
98 return (*(BOOL *)data) ? TRUE : FALSE;
101 static void set_number(LPVOID outdata, D3DXPARAMETER_TYPE outtype, LPCVOID indata, D3DXPARAMETER_TYPE intype)
103 switch (outtype)
105 case D3DXPT_FLOAT:
106 *(FLOAT *)outdata = get_float(intype, indata);
107 break;
109 case D3DXPT_BOOL:
110 *(BOOL *)outdata = get_bool(indata);
111 break;
113 case D3DXPT_INT:
114 *(INT *)outdata = get_int(intype, indata);
115 break;
117 case D3DXPT_PIXELSHADER:
118 case D3DXPT_VERTEXSHADER:
119 case D3DXPT_TEXTURE2D:
120 case D3DXPT_STRING:
121 *(INT *)outdata = 0x12345678;
122 break;
124 default:
125 ok(0, "Unhandled type %x.\n", outtype);
126 *(INT *)outdata = 0;
127 break;
131 static const char effect_desc[] =
132 "Technique\n"
133 "{\n"
134 "}\n";
136 static void test_create_effect_and_pool(IDirect3DDevice9 *device)
138 HRESULT hr;
139 ID3DXEffect *effect;
140 ID3DXBaseEffect *base;
141 ULONG count;
142 IDirect3DDevice9 *device2;
143 LPD3DXEFFECTSTATEMANAGER manager = (LPD3DXEFFECTSTATEMANAGER)0xdeadbeef;
144 ID3DXEffectPool *pool = (ID3DXEffectPool *)0xdeadbeef, *pool2;
146 hr = D3DXCreateEffect(NULL, effect_desc, sizeof(effect_desc), NULL, NULL, 0, NULL, NULL, NULL);
147 ok(hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3D_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL);
149 hr = D3DXCreateEffect(device, NULL, 0, NULL, NULL, 0, NULL, NULL, NULL);
150 ok(hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3DERR_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL);
152 hr = D3DXCreateEffect(device, effect_desc, 0, NULL, NULL, 0, NULL, NULL, NULL);
153 ok(hr == E_FAIL, "Got result %x, expected %x (D3DXERR_INVALIDDATA)\n", hr, E_FAIL);
155 hr = D3DXCreateEffect(device, effect_desc, sizeof(effect_desc), NULL, NULL, 0, NULL, NULL, NULL);
156 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr);
158 hr = D3DXCreateEffect(device, effect_desc, sizeof(effect_desc), NULL, NULL, 0, NULL, &effect, NULL);
159 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr);
161 hr = effect->lpVtbl->QueryInterface(effect, &IID_ID3DXBaseEffect, (void **)&base);
162 ok(hr == E_NOINTERFACE, "QueryInterface failed, got %x, expected %x (E_NOINTERFACE)\n", hr, E_NOINTERFACE);
164 hr = effect->lpVtbl->GetStateManager(effect, NULL);
165 ok(hr == D3DERR_INVALIDCALL, "GetStateManager failed, got %x, expected %x (D3DERR_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL);
167 hr = effect->lpVtbl->GetStateManager(effect, &manager);
168 ok(hr == D3D_OK, "GetStateManager failed, got %x, expected 0 (D3D_OK)\n", hr);
169 ok(!manager, "GetStateManager failed, got %p\n", manager);
171 /* this works, but it is not recommended! */
172 hr = effect->lpVtbl->SetStateManager(effect, (LPD3DXEFFECTSTATEMANAGER) device);
173 ok(hr == D3D_OK, "SetStateManager failed, got %x, expected 0 (D3D_OK)\n", hr);
175 hr = effect->lpVtbl->GetStateManager(effect, &manager);
176 ok(hr == D3D_OK, "GetStateManager failed, got %x, expected 0 (D3D_OK)\n", hr);
177 ok(manager != NULL, "GetStateManager failed\n");
179 IDirect3DDevice9_AddRef(device);
180 count = IDirect3DDevice9_Release(device);
181 ok(count == 4, "Release failed, got %u, expected 4\n", count);
183 count = IUnknown_Release(manager);
184 ok(count == 3, "Release failed, got %u, expected 3\n", count);
186 hr = effect->lpVtbl->SetStateManager(effect, NULL);
187 ok(hr == D3D_OK, "SetStateManager failed, got %x, expected 0 (D3D_OK)\n", hr);
189 hr = effect->lpVtbl->GetPool(effect, &pool);
190 ok(hr == D3D_OK, "GetPool failed, got %x, expected 0 (D3D_OK)\n", hr);
191 ok(!pool, "GetPool failed, got %p\n", pool);
193 hr = effect->lpVtbl->GetPool(effect, NULL);
194 ok(hr == D3DERR_INVALIDCALL, "GetPool failed, got %x, expected %x (D3DERR_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL);
196 hr = effect->lpVtbl->GetDevice(effect, &device2);
197 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr);
199 hr = effect->lpVtbl->GetDevice(effect, NULL);
200 ok(hr == D3DERR_INVALIDCALL, "GetDevice failed, got %x, expected %x (D3DERR_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL);
202 count = IDirect3DDevice9_Release(device2);
203 ok(count == 2, "Release failed, got %u, expected 2\n", count);
205 count = effect->lpVtbl->Release(effect);
206 ok(count == 0, "Release failed %u\n", count);
208 hr = D3DXCreateEffectPool(NULL);
209 ok(hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3D_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL);
211 hr = D3DXCreateEffectPool(&pool);
212 ok(hr == S_OK, "Got result %x, expected 0 (S_OK)\n", hr);
214 count = pool->lpVtbl->Release(pool);
215 ok(count == 0, "Release failed %u\n", count);
217 hr = D3DXCreateEffectPool(&pool);
218 ok(hr == S_OK, "Got result %x, expected 0 (S_OK)\n", hr);
220 hr = D3DXCreateEffect(device, effect_desc, sizeof(effect_desc), NULL, NULL, 0, pool, NULL, NULL);
221 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr);
223 hr = pool->lpVtbl->QueryInterface(pool, &IID_ID3DXEffectPool, (void **)&pool2);
224 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr);
225 ok(pool == pool2, "Release failed, got %p, expected %p\n", pool2, pool);
227 count = pool2->lpVtbl->Release(pool2);
228 ok(count == 1, "Release failed, got %u, expected 1\n", count);
230 hr = IDirect3DDevice9_QueryInterface(device, &IID_IDirect3DDevice9, (void **)&device2);
231 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr);
233 count = IDirect3DDevice9_Release(device2);
234 ok(count == 1, "Release failed, got %u, expected 1\n", count);
236 hr = D3DXCreateEffect(device, effect_desc, sizeof(effect_desc), NULL, NULL, 0, pool, &effect, NULL);
237 ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK)\n", hr);
239 hr = effect->lpVtbl->GetPool(effect, &pool);
240 ok(hr == D3D_OK, "GetPool failed, got %x, expected 0 (D3D_OK)\n", hr);
241 ok(pool == pool2, "GetPool failed, got %p, expected %p\n", pool2, pool);
243 count = pool2->lpVtbl->Release(pool2);
244 ok(count == 2, "Release failed, got %u, expected 2\n", count);
246 count = effect->lpVtbl->Release(effect);
247 ok(count == 0, "Release failed %u\n", count);
249 count = pool->lpVtbl->Release(pool);
250 ok(count == 0, "Release failed %u\n", count);
253 static void test_create_effect_compiler(void)
255 HRESULT hr;
256 ID3DXEffectCompiler *compiler, *compiler2;
257 ID3DXBaseEffect *base;
258 IUnknown *unknown;
259 ULONG count;
261 hr = D3DXCreateEffectCompiler(NULL, 0, NULL, NULL, 0, &compiler, NULL);
262 ok(hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3D_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL);
264 hr = D3DXCreateEffectCompiler(NULL, 0, NULL, NULL, 0, NULL, NULL);
265 ok(hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3D_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL);
267 hr = D3DXCreateEffectCompiler(effect_desc, 0, NULL, NULL, 0, &compiler, NULL);
268 ok(hr == D3D_OK, "Got result %x, expected %x (D3D_OK)\n", hr, D3D_OK);
270 count = compiler->lpVtbl->Release(compiler);
271 ok(count == 0, "Release failed %u\n", count);
273 hr = D3DXCreateEffectCompiler(effect_desc, 0, NULL, NULL, 0, NULL, NULL);
274 ok(hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3D_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL);
276 hr = D3DXCreateEffectCompiler(NULL, sizeof(effect_desc), NULL, NULL, 0, &compiler, NULL);
277 ok(hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3D_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL);
279 hr = D3DXCreateEffectCompiler(NULL, sizeof(effect_desc), NULL, NULL, 0, NULL, NULL);
280 ok(hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3D_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL);
282 hr = D3DXCreateEffectCompiler(effect_desc, sizeof(effect_desc), NULL, NULL, 0, NULL, NULL);
283 ok(hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3DERR_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL);
285 hr = D3DXCreateEffectCompiler(effect_desc, sizeof(effect_desc), NULL, NULL, 0, &compiler, NULL);
286 ok(hr == D3D_OK, "Got result %x, expected %x (D3D_OK)\n", hr, D3D_OK);
288 hr = compiler->lpVtbl->QueryInterface(compiler, &IID_ID3DXBaseEffect, (void **)&base);
289 ok(hr == E_NOINTERFACE, "QueryInterface failed, got %x, expected %x (E_NOINTERFACE)\n", hr, E_NOINTERFACE);
291 hr = compiler->lpVtbl->QueryInterface(compiler, &IID_ID3DXEffectCompiler, (void **)&compiler2);
292 ok(hr == D3D_OK, "QueryInterface failed, got %x, expected %x (D3D_OK)\n", hr, D3D_OK);
294 hr = compiler->lpVtbl->QueryInterface(compiler, &IID_IUnknown, (void **)&unknown);
295 ok(hr == D3D_OK, "QueryInterface failed, got %x, expected %x (D3D_OK)\n", hr, D3D_OK);
297 count = unknown->lpVtbl->Release(unknown);
298 ok(count == 2, "Release failed, got %u, expected %u\n", count, 2);
300 count = compiler2->lpVtbl->Release(compiler2);
301 ok(count == 1, "Release failed, got %u, expected %u\n", count, 1);
303 count = compiler->lpVtbl->Release(compiler);
304 ok(count == 0, "Release failed %u\n", count);
308 * Parameter value test
310 struct test_effect_parameter_value_result
312 LPCSTR full_name;
313 D3DXPARAMETER_DESC desc;
314 UINT value_offset; /* start position for the value in the blob */
318 * fxc.exe /Tfx_2_0
320 #if 0
321 float f = 0.1;
322 float1 f1 = {1.1};
323 float2 f2 = {2.1, 2.2};
324 float3 f3 = {3.1, 3.2, 3.3};
325 float4 f4 = {4.1, 4.2, 4.3, 4.4};
326 float1x1 f11 = {11.1};
327 float1x2 f12 = {12.1, 12.2};
328 float1x3 f13 = {13.1, 13.2, 13.3};
329 float1x4 f14 = {14.1, 14.2, 14.3, 14.4};
330 float2x1 f21 = {{21.11, 21.21}};
331 float2x2 f22 = {{22.11, 22.21}, {22.12, 22.22}};
332 float2x3 f23 = {{23.11, 23.21}, {23.12, 23.22}, {23.13, 23.23}};
333 float2x4 f24 = {{24.11, 24.21}, {24.12, 24.22}, {24.13, 24.23}, {24.14, 24.24}};
334 float3x1 f31 = {{31.11, 31.21, 31.31}};
335 float3x2 f32 = {{32.11, 32.21, 32.31}, {32.12, 32.22, 32.32}};
336 float3x3 f33 = {{33.11, 33.21, 33.31}, {33.12, 33.22, 33.32},
337 {33.13, 33.23, 33.33}};
338 float3x4 f34 = {{34.11, 34.21, 34.31}, {34.12, 34.22, 34.32},
339 {34.13, 34.23, 34.33}, {34.14, 34.24, 34.34}};
340 float4x1 f41 = {{41.11, 41.21, 41.31, 41.41}};
341 float4x2 f42 = {{42.11, 42.21, 42.31, 42.41}, {42.12, 42.22, 42.32, 42.42}};
342 float4x3 f43 = {{43.11, 43.21, 43.31, 43.41}, {43.12, 43.22, 43.32, 43.42},
343 {43.13, 43.23, 43.33, 43.43}};
344 float4x4 f44 = {{44.11, 44.21, 44.31, 44.41}, {44.12, 44.22, 44.32, 44.42},
345 {44.13, 44.23, 44.33, 44.43}, {44.14, 44.24, 44.34, 44.44}};
346 float f_2[2] = {0.101, 0.102};
347 float1 f1_2[2] = {{1.101}, {1.102}};
348 float2 f2_2[2] = {{2.101, 2.201}, {2.102, 2.202}};
349 float3 f3_2[2] = {{3.101, 3.201, 3.301}, {3.102, 3.202, 3.302}};
350 float4 f4_2[2] = {{4.101, 4.201, 4.301, 4.401}, {4.102, 4.202, 4.302, 4.402}};
351 float1x1 f11_2[2] = {{11.101}, {11.102}};
352 float1x2 f12_2[2] = {{12.101, 12.201}, {12.102, 12.202}};
353 float1x3 f13_2[2] = {{13.101, 13.201, 13.301}, {13.102, 13.202, 13.302}};
354 float1x4 f14_2[2] = {{14.101, 14.201, 14.301, 14.401}, {14.102, 14.202, 14.302, 14.402}};
355 float2x1 f21_2[2] = {{{21.1101, 21.2101}}, {{21.1102, 21.2102}}};
356 float2x2 f22_2[2] = {{{22.1101, 22.2101}, {22.1201, 22.2201}}, {{22.1102, 22.2102}, {22.1202, 22.2202}}};
357 float2x3 f23_2[2] = {{{23.1101, 23.2101}, {23.1201, 23.2201}, {23.1301, 23.2301}}, {{23.1102, 23.2102},
358 {23.1202, 23.2202}, {23.1302, 23.2302}}};
359 float2x4 f24_2[2] = {{{24.1101, 24.2101}, {24.1201, 24.2201}, {24.1301, 24.2301}, {24.1401, 24.2401}},
360 {{24.1102, 24.2102}, {24.1202, 24.2202}, {24.1302, 24.2302}, {24.1402, 24.2402}}};
361 float3x1 f31_2[2] = {{{31.1101, 31.2101, 31.3101}}, {{31.1102, 31.2102, 31.3102}}};
362 float3x2 f32_2[2] = {{{32.1101, 32.2101, 32.3101}, {32.1201, 32.2201, 32.3201}},
363 {{32.1102, 32.2102, 32.3102}, {32.1202, 32.2202, 32.3202}}};
364 float3x3 f33_2[2] = {{{33.1101, 33.2101, 33.3101}, {33.1201, 33.2201, 33.3201},
365 {33.1301, 33.2301, 33.3301}}, {{33.1102, 33.2102, 33.3102}, {33.1202, 33.2202, 33.3202},
366 {33.1302, 33.2302, 33.3302}}};
367 float3x4 f34_2[2] = {{{34.1101, 34.2101, 34.3101}, {34.1201, 34.2201, 34.3201},
368 {34.1301, 34.2301, 34.3301}, {34.1401, 34.2401, 34.3401}}, {{34.1102, 34.2102, 34.3102},
369 {34.1202, 34.2202, 34.3202}, {34.1302, 34.2302, 34.3302}, {34.1402, 34.2402, 34.3402}}};
370 float4x1 f41_2[2] = {{{41.1101, 41.2101, 41.3101, 41.4101}}, {{41.1102, 41.2102, 41.3102, 41.4102}}};
371 float4x2 f42_2[2] = {{{42.1101, 42.2101, 42.3101, 42.4101}, {42.1201, 42.2201, 42.3201, 42.4201}},
372 {{42.1102, 42.2102, 42.3102, 42.4102}, {42.1202, 42.2202, 42.3202, 42.4202}}};
373 float4x3 f43_2[2] = {{{43.1101, 43.2101, 43.3101, 43.4101}, {43.1201, 43.2201, 43.3201, 43.4201},
374 {43.1301, 43.2301, 43.3301, 43.4301}}, {{43.1102, 43.2102, 43.3102, 43.4102},
375 {43.1202, 43.2202, 43.3202, 43.4202}, {43.1302, 43.2302, 43.3302, 43.4302}}};
376 float4x4 f44_2[2] = {{{44.1101, 44.2101, 44.3101, 44.4101}, {44.1201, 44.2201, 44.3201, 44.4201},
377 {44.1301, 44.2301, 44.3301, 44.4301}, {44.1401, 44.2401, 44.3401, 44.4401}},
378 {{44.1102, 44.2102, 44.3102, 44.4102}, {44.1202, 44.2202, 44.3202, 44.4202},
379 {44.1302, 44.2302, 44.3302, 44.4302}, {44.1402, 44.2402, 44.3402, 44.4402}}};
380 technique t { pass p { } }
381 #endif
382 static const DWORD test_effect_parameter_value_blob_float[] =
384 0xfeff0901, 0x00000b80, 0x00000000, 0x00000003, 0x00000000, 0x00000024, 0x00000000, 0x00000000,
385 0x00000001, 0x00000001, 0x3dcccccd, 0x00000002, 0x00000066, 0x00000003, 0x00000001, 0x0000004c,
386 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x3f8ccccd, 0x00000003, 0x00003166, 0x00000003,
387 0x00000001, 0x00000078, 0x00000000, 0x00000000, 0x00000002, 0x00000001, 0x40066666, 0x400ccccd,
388 0x00000003, 0x00003266, 0x00000003, 0x00000001, 0x000000a8, 0x00000000, 0x00000000, 0x00000003,
389 0x00000001, 0x40466666, 0x404ccccd, 0x40533333, 0x00000003, 0x00003366, 0x00000003, 0x00000001,
390 0x000000dc, 0x00000000, 0x00000000, 0x00000004, 0x00000001, 0x40833333, 0x40866666, 0x4089999a,
391 0x408ccccd, 0x00000003, 0x00003466, 0x00000003, 0x00000002, 0x00000104, 0x00000000, 0x00000000,
392 0x00000001, 0x00000001, 0x4131999a, 0x00000004, 0x00313166, 0x00000003, 0x00000002, 0x00000130,
393 0x00000000, 0x00000000, 0x00000001, 0x00000002, 0x4141999a, 0x41433333, 0x00000004, 0x00323166,
394 0x00000003, 0x00000002, 0x00000160, 0x00000000, 0x00000000, 0x00000001, 0x00000003, 0x4151999a,
395 0x41533333, 0x4154cccd, 0x00000004, 0x00333166, 0x00000003, 0x00000002, 0x00000194, 0x00000000,
396 0x00000000, 0x00000001, 0x00000004, 0x4161999a, 0x41633333, 0x4164cccd, 0x41666666, 0x00000004,
397 0x00343166, 0x00000003, 0x00000002, 0x000001c0, 0x00000000, 0x00000000, 0x00000002, 0x00000001,
398 0x41a8e148, 0x41a9ae14, 0x00000004, 0x00313266, 0x00000003, 0x00000002, 0x000001f4, 0x00000000,
399 0x00000000, 0x00000002, 0x00000002, 0x41b0e148, 0x41b1ae14, 0x41b0f5c3, 0x41b1c28f, 0x00000004,
400 0x00323266, 0x00000003, 0x00000002, 0x00000230, 0x00000000, 0x00000000, 0x00000002, 0x00000003,
401 0x41b8e148, 0x41b9ae14, 0x41b8f5c3, 0x41b9c28f, 0x41b90a3d, 0x41b9d70a, 0x00000004, 0x00333266,
402 0x00000003, 0x00000002, 0x00000274, 0x00000000, 0x00000000, 0x00000002, 0x00000004, 0x41c0e148,
403 0x41c1ae14, 0x41c0f5c3, 0x41c1c28f, 0x41c10a3d, 0x41c1d70a, 0x41c11eb8, 0x41c1eb85, 0x00000004,
404 0x00343266, 0x00000003, 0x00000002, 0x000002a4, 0x00000000, 0x00000000, 0x00000003, 0x00000001,
405 0x41f8e148, 0x41f9ae14, 0x41fa7ae1, 0x00000004, 0x00313366, 0x00000003, 0x00000002, 0x000002e0,
406 0x00000000, 0x00000000, 0x00000003, 0x00000002, 0x420070a4, 0x4200d70a, 0x42013d71, 0x42007ae1,
407 0x4200e148, 0x420147ae, 0x00000004, 0x00323366, 0x00000003, 0x00000002, 0x00000328, 0x00000000,
408 0x00000000, 0x00000003, 0x00000003, 0x420470a4, 0x4204d70a, 0x42053d71, 0x42047ae1, 0x4204e148,
409 0x420547ae, 0x4204851f, 0x4204eb85, 0x420551ec, 0x00000004, 0x00333366, 0x00000003, 0x00000002,
410 0x0000037c, 0x00000000, 0x00000000, 0x00000003, 0x00000004, 0x420870a4, 0x4208d70a, 0x42093d71,
411 0x42087ae1, 0x4208e148, 0x420947ae, 0x4208851f, 0x4208eb85, 0x420951ec, 0x42088f5c, 0x4208f5c3,
412 0x42095c29, 0x00000004, 0x00343366, 0x00000003, 0x00000002, 0x000003b0, 0x00000000, 0x00000000,
413 0x00000004, 0x00000001, 0x422470a4, 0x4224d70a, 0x42253d71, 0x4225a3d7, 0x00000004, 0x00313466,
414 0x00000003, 0x00000002, 0x000003f4, 0x00000000, 0x00000000, 0x00000004, 0x00000002, 0x422870a4,
415 0x4228d70a, 0x42293d71, 0x4229a3d7, 0x42287ae1, 0x4228e148, 0x422947ae, 0x4229ae14, 0x00000004,
416 0x00323466, 0x00000003, 0x00000002, 0x00000448, 0x00000000, 0x00000000, 0x00000004, 0x00000003,
417 0x422c70a4, 0x422cd70a, 0x422d3d71, 0x422da3d7, 0x422c7ae1, 0x422ce148, 0x422d47ae, 0x422dae14,
418 0x422c851f, 0x422ceb85, 0x422d51ec, 0x422db852, 0x00000004, 0x00333466, 0x00000003, 0x00000002,
419 0x000004ac, 0x00000000, 0x00000000, 0x00000004, 0x00000004, 0x423070a4, 0x4230d70a, 0x42313d71,
420 0x4231a3d7, 0x42307ae1, 0x4230e148, 0x423147ae, 0x4231ae14, 0x4230851f, 0x4230eb85, 0x423151ec,
421 0x4231b852, 0x42308f5c, 0x4230f5c3, 0x42315c29, 0x4231c28f, 0x00000004, 0x00343466, 0x00000003,
422 0x00000000, 0x000004d8, 0x00000000, 0x00000002, 0x00000001, 0x00000001, 0x3dced917, 0x3dd0e560,
423 0x00000004, 0x00325f66, 0x00000003, 0x00000001, 0x00000504, 0x00000000, 0x00000002, 0x00000001,
424 0x00000001, 0x3f8ced91, 0x3f8d0e56, 0x00000005, 0x325f3166, 0x00000000, 0x00000003, 0x00000001,
425 0x0000053c, 0x00000000, 0x00000002, 0x00000002, 0x00000001, 0x400676c9, 0x400cdd2f, 0x4006872b,
426 0x400ced91, 0x00000005, 0x325f3266, 0x00000000, 0x00000003, 0x00000001, 0x0000057c, 0x00000000,
427 0x00000002, 0x00000003, 0x00000001, 0x404676c9, 0x404cdd2f, 0x40534396, 0x4046872b, 0x404ced91,
428 0x405353f8, 0x00000005, 0x325f3366, 0x00000000, 0x00000003, 0x00000001, 0x000005c4, 0x00000000,
429 0x00000002, 0x00000004, 0x00000001, 0x40833b64, 0x40866e98, 0x4089a1cb, 0x408cd4fe, 0x40834396,
430 0x408676c9, 0x4089a9fc, 0x408cdd2f, 0x00000005, 0x325f3466, 0x00000000, 0x00000003, 0x00000002,
431 0x000005f4, 0x00000000, 0x00000002, 0x00000001, 0x00000001, 0x41319db2, 0x4131a1cb, 0x00000006,
432 0x5f313166, 0x00000032, 0x00000003, 0x00000002, 0x0000062c, 0x00000000, 0x00000002, 0x00000001,
433 0x00000002, 0x41419db2, 0x4143374c, 0x4141a1cb, 0x41433b64, 0x00000006, 0x5f323166, 0x00000032,
434 0x00000003, 0x00000002, 0x0000066c, 0x00000000, 0x00000002, 0x00000001, 0x00000003, 0x41519db2,
435 0x4153374c, 0x4154d0e5, 0x4151a1cb, 0x41533b64, 0x4154d4fe, 0x00000006, 0x5f333166, 0x00000032,
436 0x00000003, 0x00000002, 0x000006b4, 0x00000000, 0x00000002, 0x00000001, 0x00000004, 0x41619db2,
437 0x4163374c, 0x4164d0e5, 0x41666a7f, 0x4161a1cb, 0x41633b64, 0x4164d4fe, 0x41666e98, 0x00000006,
438 0x5f343166, 0x00000032, 0x00000003, 0x00000002, 0x000006ec, 0x00000000, 0x00000002, 0x00000002,
439 0x00000001, 0x41a8e17c, 0x41a9ae49, 0x41a8e1b1, 0x41a9ae7d, 0x00000006, 0x5f313266, 0x00000032,
440 0x00000003, 0x00000002, 0x00000734, 0x00000000, 0x00000002, 0x00000002, 0x00000002, 0x41b0e17c,
441 0x41b1ae49, 0x41b0f5f7, 0x41b1c2c4, 0x41b0e1b1, 0x41b1ae7d, 0x41b0f62b, 0x41b1c2f8, 0x00000006,
442 0x5f323266, 0x00000032, 0x00000003, 0x00000002, 0x0000078c, 0x00000000, 0x00000002, 0x00000002,
443 0x00000003, 0x41b8e17c, 0x41b9ae49, 0x41b8f5f7, 0x41b9c2c4, 0x41b90a72, 0x41b9d73f, 0x41b8e1b1,
444 0x41b9ae7d, 0x41b8f62b, 0x41b9c2f8, 0x41b90aa6, 0x41b9d773, 0x00000006, 0x5f333266, 0x00000032,
445 0x00000003, 0x00000002, 0x000007f4, 0x00000000, 0x00000002, 0x00000002, 0x00000004, 0x41c0e17c,
446 0x41c1ae49, 0x41c0f5f7, 0x41c1c2c4, 0x41c10a72, 0x41c1d73f, 0x41c11eed, 0x41c1ebba, 0x41c0e1b1,
447 0x41c1ae7d, 0x41c0f62b, 0x41c1c2f8, 0x41c10aa6, 0x41c1d773, 0x41c11f21, 0x41c1ebee, 0x00000006,
448 0x5f343266, 0x00000032, 0x00000003, 0x00000002, 0x00000834, 0x00000000, 0x00000002, 0x00000003,
449 0x00000001, 0x41f8e17c, 0x41f9ae49, 0x41fa7b16, 0x41f8e1b1, 0x41f9ae7d, 0x41fa7b4a, 0x00000006,
450 0x5f313366, 0x00000032, 0x00000003, 0x00000002, 0x0000088c, 0x00000000, 0x00000002, 0x00000003,
451 0x00000002, 0x420070be, 0x4200d724, 0x42013d8b, 0x42007afb, 0x4200e162, 0x420147c8, 0x420070d8,
452 0x4200d73f, 0x42013da5, 0x42007b16, 0x4200e17c, 0x420147e3, 0x00000006, 0x5f323366, 0x00000032,
453 0x00000003, 0x00000002, 0x000008fc, 0x00000000, 0x00000002, 0x00000003, 0x00000003, 0x420470be,
454 0x4204d724, 0x42053d8b, 0x42047afb, 0x4204e162, 0x420547c8, 0x42048539, 0x4204eb9f, 0x42055206,
455 0x420470d8, 0x4204d73f, 0x42053da5, 0x42047b16, 0x4204e17c, 0x420547e3, 0x42048553, 0x4204ebba,
456 0x42055220, 0x00000006, 0x5f333366, 0x00000032, 0x00000003, 0x00000002, 0x00000984, 0x00000000,
457 0x00000002, 0x00000003, 0x00000004, 0x420870be, 0x4208d724, 0x42093d8b, 0x42087afb, 0x4208e162,
458 0x420947c8, 0x42088539, 0x4208eb9f, 0x42095206, 0x42088f76, 0x4208f5dd, 0x42095c43, 0x420870d8,
459 0x4208d73f, 0x42093da5, 0x42087b16, 0x4208e17c, 0x420947e3, 0x42088553, 0x4208ebba, 0x42095220,
460 0x42088f91, 0x4208f5f7, 0x42095c5d, 0x00000006, 0x5f343366, 0x00000032, 0x00000003, 0x00000002,
461 0x000009cc, 0x00000000, 0x00000002, 0x00000004, 0x00000001, 0x422470be, 0x4224d724, 0x42253d8b,
462 0x4225a3f1, 0x422470d8, 0x4224d73f, 0x42253da5, 0x4225a40b, 0x00000006, 0x5f313466, 0x00000032,
463 0x00000003, 0x00000002, 0x00000a34, 0x00000000, 0x00000002, 0x00000004, 0x00000002, 0x422870be,
464 0x4228d724, 0x42293d8b, 0x4229a3f1, 0x42287afb, 0x4228e162, 0x422947c8, 0x4229ae2f, 0x422870d8,
465 0x4228d73f, 0x42293da5, 0x4229a40b, 0x42287b16, 0x4228e17c, 0x422947e3, 0x4229ae49, 0x00000006,
466 0x5f323466, 0x00000032, 0x00000003, 0x00000002, 0x00000abc, 0x00000000, 0x00000002, 0x00000004,
467 0x00000003, 0x422c70be, 0x422cd724, 0x422d3d8b, 0x422da3f1, 0x422c7afb, 0x422ce162, 0x422d47c8,
468 0x422dae2f, 0x422c8539, 0x422ceb9f, 0x422d5206, 0x422db86c, 0x422c70d8, 0x422cd73f, 0x422d3da5,
469 0x422da40b, 0x422c7b16, 0x422ce17c, 0x422d47e3, 0x422dae49, 0x422c8553, 0x422cebba, 0x422d5220,
470 0x422db886, 0x00000006, 0x5f333466, 0x00000032, 0x00000003, 0x00000002, 0x00000b64, 0x00000000,
471 0x00000002, 0x00000004, 0x00000004, 0x423070be, 0x4230d724, 0x42313d8b, 0x4231a3f1, 0x42307afb,
472 0x4230e162, 0x423147c8, 0x4231ae2f, 0x42308539, 0x4230eb9f, 0x42315206, 0x4231b86c, 0x42308f76,
473 0x4230f5dd, 0x42315c43, 0x4231c2aa, 0x423070d8, 0x4230d73f, 0x42313da5, 0x4231a40b, 0x42307b16,
474 0x4230e17c, 0x423147e3, 0x4231ae49, 0x42308553, 0x4230ebba, 0x42315220, 0x4231b886, 0x42308f91,
475 0x4230f5f7, 0x42315c5d, 0x4231c2c4, 0x00000006, 0x5f343466, 0x00000032, 0x00000002, 0x00000070,
476 0x00000002, 0x00000074, 0x0000002a, 0x00000001, 0x00000001, 0x00000001, 0x00000004, 0x00000020,
477 0x00000000, 0x00000000, 0x0000002c, 0x00000048, 0x00000000, 0x00000000, 0x00000054, 0x00000070,
478 0x00000000, 0x00000000, 0x00000080, 0x0000009c, 0x00000000, 0x00000000, 0x000000b0, 0x000000cc,
479 0x00000000, 0x00000000, 0x000000e4, 0x00000100, 0x00000000, 0x00000000, 0x0000010c, 0x00000128,
480 0x00000000, 0x00000000, 0x00000138, 0x00000154, 0x00000000, 0x00000000, 0x00000168, 0x00000184,
481 0x00000000, 0x00000000, 0x0000019c, 0x000001b8, 0x00000000, 0x00000000, 0x000001c8, 0x000001e4,
482 0x00000000, 0x00000000, 0x000001fc, 0x00000218, 0x00000000, 0x00000000, 0x00000238, 0x00000254,
483 0x00000000, 0x00000000, 0x0000027c, 0x00000298, 0x00000000, 0x00000000, 0x000002ac, 0x000002c8,
484 0x00000000, 0x00000000, 0x000002e8, 0x00000304, 0x00000000, 0x00000000, 0x00000330, 0x0000034c,
485 0x00000000, 0x00000000, 0x00000384, 0x000003a0, 0x00000000, 0x00000000, 0x000003b8, 0x000003d4,
486 0x00000000, 0x00000000, 0x000003fc, 0x00000418, 0x00000000, 0x00000000, 0x00000450, 0x0000046c,
487 0x00000000, 0x00000000, 0x000004b4, 0x000004d0, 0x00000000, 0x00000000, 0x000004e0, 0x000004fc,
488 0x00000000, 0x00000000, 0x00000510, 0x0000052c, 0x00000000, 0x00000000, 0x00000548, 0x00000564,
489 0x00000000, 0x00000000, 0x00000588, 0x000005a4, 0x00000000, 0x00000000, 0x000005d0, 0x000005ec,
490 0x00000000, 0x00000000, 0x00000600, 0x0000061c, 0x00000000, 0x00000000, 0x00000638, 0x00000654,
491 0x00000000, 0x00000000, 0x00000678, 0x00000694, 0x00000000, 0x00000000, 0x000006c0, 0x000006dc,
492 0x00000000, 0x00000000, 0x000006f8, 0x00000714, 0x00000000, 0x00000000, 0x00000740, 0x0000075c,
493 0x00000000, 0x00000000, 0x00000798, 0x000007b4, 0x00000000, 0x00000000, 0x00000800, 0x0000081c,
494 0x00000000, 0x00000000, 0x00000840, 0x0000085c, 0x00000000, 0x00000000, 0x00000898, 0x000008b4,
495 0x00000000, 0x00000000, 0x00000908, 0x00000924, 0x00000000, 0x00000000, 0x00000990, 0x000009ac,
496 0x00000000, 0x00000000, 0x000009d8, 0x000009f4, 0x00000000, 0x00000000, 0x00000a40, 0x00000a5c,
497 0x00000000, 0x00000000, 0x00000ac8, 0x00000ae4, 0x00000000, 0x00000000, 0x00000b78, 0x00000000,
498 0x00000001, 0x00000b70, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
501 struct test_effect_parameter_value_result test_effect_parameter_value_result_float[] =
503 {"f", {"f", NULL, D3DXPC_SCALAR, D3DXPT_FLOAT, 1, 1, 0, 0, 0, 0, 4}, 10},
504 {"f1", {"f1", NULL, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 1, 0, 0, 0, 0, 4}, 20},
505 {"f2", {"f2", NULL, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 2, 0, 0, 0, 0, 8}, 30},
506 {"f3", {"f3", NULL, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 3, 0, 0, 0, 0, 12}, 41},
507 {"f4", {"f4", NULL, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 4, 0, 0, 0, 0, 16}, 53},
508 {"f11", {"f11", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 1, 1, 0, 0, 0, 0, 4}, 66},
509 {"f12", {"f12", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 1, 2, 0, 0, 0, 0, 8}, 76},
510 {"f13", {"f13", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 1, 3, 0, 0, 0, 0, 12}, 87},
511 {"f14", {"f14", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 1, 4, 0, 0, 0, 0, 16}, 99},
512 {"f21", {"f21", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 2, 1, 0, 0, 0, 0, 8}, 112},
513 {"f22", {"f22", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 2, 2, 0, 0, 0, 0, 16}, 123},
514 {"f23", {"f23", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 2, 3, 0, 0, 0, 0, 24}, 136},
515 {"f24", {"f24", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 2, 4, 0, 0, 0, 0, 32}, 151},
516 {"f31", {"f31", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 3, 1, 0, 0, 0, 0, 12}, 168},
517 {"f32", {"f32", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 3, 2, 0, 0, 0, 0, 24}, 180},
518 {"f33", {"f33", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 3, 3, 0, 0, 0, 0, 36}, 195},
519 {"f34", {"f34", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 3, 4, 0, 0, 0, 0, 48}, 213},
520 {"f41", {"f41", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 4, 1, 0, 0, 0, 0, 16}, 234},
521 {"f42", {"f42", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 4, 2, 0, 0, 0, 0, 32}, 247},
522 {"f43", {"f43", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 4, 3, 0, 0, 0, 0, 48}, 264},
523 {"f44", {"f44", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 4, 4, 0, 0, 0, 0, 64}, 285},
524 {"f_2", {"f_2", NULL, D3DXPC_SCALAR, D3DXPT_FLOAT, 1, 1, 2, 0, 0, 0, 8}, 310},
525 {"f1_2", {"f1_2", NULL, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 1, 2, 0, 0, 0, 8}, 321},
526 {"f2_2", {"f2_2", NULL, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 2, 2, 0, 0, 0, 16}, 333},
527 {"f3_2", {"f3_2", NULL, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 3, 2, 0, 0, 0, 24}, 347},
528 {"f4_2", {"f4_2", NULL, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 4, 2, 0, 0, 0, 32}, 363},
529 {"f11_2", {"f11_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 1, 1, 2, 0, 0, 0, 8}, 381},
530 {"f12_2", {"f12_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 1, 2, 2, 0, 0, 0, 16}, 393},
531 {"f13_2", {"f13_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 1, 3, 2, 0, 0, 0, 24}, 407},
532 {"f14_2", {"f14_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 1, 4, 2, 0, 0, 0, 32}, 423},
533 {"f21_2", {"f21_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 2, 1, 2, 0, 0, 0, 16}, 441},
534 {"f22_2", {"f22_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 2, 2, 2, 0, 0, 0, 32}, 455},
535 {"f23_2", {"f23_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 2, 3, 2, 0, 0, 0, 48}, 473},
536 {"f24_2", {"f24_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 2, 4, 2, 0, 0, 0, 64}, 495},
537 {"f31_2", {"f31_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 3, 1, 2, 0, 0, 0, 24}, 521},
538 {"f32_2", {"f32_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 3, 2, 2, 0, 0, 0, 48}, 537},
539 {"f33_2", {"f33_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 3, 3, 2, 0, 0, 0, 72}, 559},
540 {"f34_2", {"f34_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 3, 4, 2, 0, 0, 0, 96}, 587},
541 {"f41_2", {"f41_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 4, 1, 2, 0, 0, 0, 32}, 621},
542 {"f42_2", {"f42_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 4, 2, 2, 0, 0, 0, 64}, 639},
543 {"f43_2", {"f43_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 4, 3, 2, 0, 0, 0, 96}, 665},
544 {"f44_2", {"f44_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_FLOAT, 4, 4, 2, 0, 0, 0, 128}, 699},
548 * fxc.exe /Tfx_2_0
550 #if 0
551 int i = 1;
552 int1 i1 = {11};
553 int2 i2 = {21, 22};
554 int3 i3 = {31, 32, 33};
555 int4 i4 = {41, 42, 43, 44};
556 int1x1 i11 = {111};
557 int1x2 i12 = {121, 122};
558 int1x3 i13 = {131, 132, 133};
559 int1x4 i14 = {141, 142, 143, 144};
560 int2x1 i21 = {{2111, 2121}};
561 int2x2 i22 = {{2211, 2221}, {2212, 2222}};
562 int2x3 i23 = {{2311, 2321}, {2312, 2322}, {2313, 2323}};
563 int2x4 i24 = {{2411, 2421}, {2412, 2422}, {2413, 2423}, {2414, 2424}};
564 int3x1 i31 = {{3111, 3121, 3131}};
565 int3x2 i32 = {{3211, 3221, 3231}, {3212, 3222, 3232}};
566 int3x3 i33 = {{3311, 3321, 3331}, {3312, 3322, 3332},
567 {3313, 3323, 3333}};
568 int3x4 i34 = {{3411, 3421, 3431}, {3412, 3422, 3432},
569 {3413, 3423, 3433}, {3414, 3424, 3434}};
570 int4x1 i41 = {{4111, 4121, 4131, 4141}};
571 int4x2 i42 = {{4211, 4221, 4231, 4241}, {4212, 4222, 4232, 4242}};
572 int4x3 i43 = {{4311, 4321, 4331, 4341}, {4312, 4322, 4332, 4342},
573 {4313, 4323, 4333, 4343}};
574 int4x4 i44 = {{4411, 4421, 4431, 4441}, {4412, 4422, 4432, 4442},
575 {4413, 4423, 4433, 4443}, {4414, 4424, 4434, 4444}};
576 int i_2[2] = {0101, 0102};
577 int1 i1_2[2] = {{1101}, {1102}};
578 int2 i2_2[2] = {{2101, 2201}, {2102, 2202}};
579 int3 i3_2[2] = {{3101, 3201, 3301}, {3102, 3202, 3302}};
580 int4 i4_2[2] = {{4101, 4201, 4301, 4401}, {4102, 4202, 4302, 4402}};
581 int1x1 i11_2[2] = {{11101}, {11102}};
582 int1x2 i12_2[2] = {{12101, 12201}, {12102, 12202}};
583 int1x3 i13_2[2] = {{13101, 13201, 13301}, {13102, 13202, 13302}};
584 int1x4 i14_2[2] = {{14101, 14201, 14301, 14401}, {14102, 14202, 14302, 14402}};
585 int2x1 i21_2[2] = {{{211101, 212101}}, {{211102, 212102}}};
586 int2x2 i22_2[2] = {{{221101, 222101}, {221201, 222201}}, {{221102, 222102}, {221202, 222202}}};
587 int2x3 i23_2[2] = {{{231101, 232101}, {231201, 232201}, {231301, 232301}}, {{231102, 232102},
588 {231202, 232202}, {231302, 232302}}};
589 int2x4 i24_2[2] = {{{241101, 242101}, {241201, 242201}, {241301, 242301}, {241401, 242401}},
590 {{241102, 242102}, {241202, 242202}, {241302, 242302}, {241402, 242402}}};
591 int3x1 i31_2[2] = {{{311101, 312101, 313101}}, {{311102, 312102, 313102}}};
592 int3x2 i32_2[2] = {{{321101, 322101, 323101}, {321201, 322201, 323201}},
593 {{321102, 322102, 323102}, {321202, 322202, 323202}}};
594 int3x3 i33_2[2] = {{{331101, 332101, 333101}, {331201, 332201, 333201},
595 {331301, 332301, 333301}}, {{331102, 332102, 333102}, {331202, 332202, 333202},
596 {331302, 332302, 333302}}};
597 int3x4 i34_2[2] = {{{341101, 342101, 343101}, {341201, 342201, 343201},
598 {341301, 342301, 343301}, {341401, 342401, 343401}}, {{341102, 342102, 343102},
599 {341202, 342202, 343202}, {341302, 342302, 343302}, {341402, 342402, 343402}}};
600 int4x1 i41_2[2] = {{{411101, 412101, 413101, 414101}}, {{411102, 412102, 413102, 414102}}};
601 int4x2 i42_2[2] = {{{421101, 422101, 423101, 424101}, {421201, 422201, 423201, 424201}},
602 {{421102, 422102, 423102, 424102}, {421202, 422202, 423202, 424202}}};
603 int4x3 i43_2[2] = {{{431101, 432101, 433101, 434101}, {431201, 432201, 433201, 434201},
604 {431301, 432301, 433301, 434301}}, {{431102, 432102, 433102, 434102},
605 {431202, 432202, 433202, 434202}, {431302, 432302, 433302, 434302}}};
606 int4x4 i44_2[2] = {{{441101, 442101, 443101, 444101}, {441201, 442201, 443201, 444201},
607 {441301, 442301, 443301, 444301}, {441401, 442401, 443401, 444401}},
608 {{441102, 442102, 443102, 444102}, {441202, 442202, 443202, 444202},
609 {441302, 442302, 443302, 444302}, {441402, 442402, 443402, 444402}}};
610 technique t { pass p { } }
611 #endif
612 static const DWORD test_effect_parameter_value_blob_int[] =
614 0xfeff0901, 0x00000b80, 0x00000000, 0x00000002, 0x00000000, 0x00000024, 0x00000000, 0x00000000,
615 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000069, 0x00000002, 0x00000001, 0x0000004c,
616 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x0000000b, 0x00000003, 0x00003169, 0x00000002,
617 0x00000001, 0x00000078, 0x00000000, 0x00000000, 0x00000002, 0x00000001, 0x00000015, 0x00000016,
618 0x00000003, 0x00003269, 0x00000002, 0x00000001, 0x000000a8, 0x00000000, 0x00000000, 0x00000003,
619 0x00000001, 0x0000001f, 0x00000020, 0x00000021, 0x00000003, 0x00003369, 0x00000002, 0x00000001,
620 0x000000dc, 0x00000000, 0x00000000, 0x00000004, 0x00000001, 0x00000029, 0x0000002a, 0x0000002b,
621 0x0000002c, 0x00000003, 0x00003469, 0x00000002, 0x00000002, 0x00000104, 0x00000000, 0x00000000,
622 0x00000001, 0x00000001, 0x0000006f, 0x00000004, 0x00313169, 0x00000002, 0x00000002, 0x00000130,
623 0x00000000, 0x00000000, 0x00000001, 0x00000002, 0x00000079, 0x0000007a, 0x00000004, 0x00323169,
624 0x00000002, 0x00000002, 0x00000160, 0x00000000, 0x00000000, 0x00000001, 0x00000003, 0x00000083,
625 0x00000084, 0x00000085, 0x00000004, 0x00333169, 0x00000002, 0x00000002, 0x00000194, 0x00000000,
626 0x00000000, 0x00000001, 0x00000004, 0x0000008d, 0x0000008e, 0x0000008f, 0x00000090, 0x00000004,
627 0x00343169, 0x00000002, 0x00000002, 0x000001c0, 0x00000000, 0x00000000, 0x00000002, 0x00000001,
628 0x0000083f, 0x00000849, 0x00000004, 0x00313269, 0x00000002, 0x00000002, 0x000001f4, 0x00000000,
629 0x00000000, 0x00000002, 0x00000002, 0x000008a3, 0x000008ad, 0x000008a4, 0x000008ae, 0x00000004,
630 0x00323269, 0x00000002, 0x00000002, 0x00000230, 0x00000000, 0x00000000, 0x00000002, 0x00000003,
631 0x00000907, 0x00000911, 0x00000908, 0x00000912, 0x00000909, 0x00000913, 0x00000004, 0x00333269,
632 0x00000002, 0x00000002, 0x00000274, 0x00000000, 0x00000000, 0x00000002, 0x00000004, 0x0000096b,
633 0x00000975, 0x0000096c, 0x00000976, 0x0000096d, 0x00000977, 0x0000096e, 0x00000978, 0x00000004,
634 0x00343269, 0x00000002, 0x00000002, 0x000002a4, 0x00000000, 0x00000000, 0x00000003, 0x00000001,
635 0x00000c27, 0x00000c31, 0x00000c3b, 0x00000004, 0x00313369, 0x00000002, 0x00000002, 0x000002e0,
636 0x00000000, 0x00000000, 0x00000003, 0x00000002, 0x00000c8b, 0x00000c95, 0x00000c9f, 0x00000c8c,
637 0x00000c96, 0x00000ca0, 0x00000004, 0x00323369, 0x00000002, 0x00000002, 0x00000328, 0x00000000,
638 0x00000000, 0x00000003, 0x00000003, 0x00000cef, 0x00000cf9, 0x00000d03, 0x00000cf0, 0x00000cfa,
639 0x00000d04, 0x00000cf1, 0x00000cfb, 0x00000d05, 0x00000004, 0x00333369, 0x00000002, 0x00000002,
640 0x0000037c, 0x00000000, 0x00000000, 0x00000003, 0x00000004, 0x00000d53, 0x00000d5d, 0x00000d67,
641 0x00000d54, 0x00000d5e, 0x00000d68, 0x00000d55, 0x00000d5f, 0x00000d69, 0x00000d56, 0x00000d60,
642 0x00000d6a, 0x00000004, 0x00343369, 0x00000002, 0x00000002, 0x000003b0, 0x00000000, 0x00000000,
643 0x00000004, 0x00000001, 0x0000100f, 0x00001019, 0x00001023, 0x0000102d, 0x00000004, 0x00313469,
644 0x00000002, 0x00000002, 0x000003f4, 0x00000000, 0x00000000, 0x00000004, 0x00000002, 0x00001073,
645 0x0000107d, 0x00001087, 0x00001091, 0x00001074, 0x0000107e, 0x00001088, 0x00001092, 0x00000004,
646 0x00323469, 0x00000002, 0x00000002, 0x00000448, 0x00000000, 0x00000000, 0x00000004, 0x00000003,
647 0x000010d7, 0x000010e1, 0x000010eb, 0x000010f5, 0x000010d8, 0x000010e2, 0x000010ec, 0x000010f6,
648 0x000010d9, 0x000010e3, 0x000010ed, 0x000010f7, 0x00000004, 0x00333469, 0x00000002, 0x00000002,
649 0x000004ac, 0x00000000, 0x00000000, 0x00000004, 0x00000004, 0x0000113b, 0x00001145, 0x0000114f,
650 0x00001159, 0x0000113c, 0x00001146, 0x00001150, 0x0000115a, 0x0000113d, 0x00001147, 0x00001151,
651 0x0000115b, 0x0000113e, 0x00001148, 0x00001152, 0x0000115c, 0x00000004, 0x00343469, 0x00000002,
652 0x00000000, 0x000004d8, 0x00000000, 0x00000002, 0x00000001, 0x00000001, 0x00000041, 0x00000042,
653 0x00000004, 0x00325f69, 0x00000002, 0x00000001, 0x00000504, 0x00000000, 0x00000002, 0x00000001,
654 0x00000001, 0x0000044d, 0x0000044e, 0x00000005, 0x325f3169, 0x00000000, 0x00000002, 0x00000001,
655 0x0000053c, 0x00000000, 0x00000002, 0x00000002, 0x00000001, 0x00000835, 0x00000899, 0x00000836,
656 0x0000089a, 0x00000005, 0x325f3269, 0x00000000, 0x00000002, 0x00000001, 0x0000057c, 0x00000000,
657 0x00000002, 0x00000003, 0x00000001, 0x00000c1d, 0x00000c81, 0x00000ce5, 0x00000c1e, 0x00000c82,
658 0x00000ce6, 0x00000005, 0x325f3369, 0x00000000, 0x00000002, 0x00000001, 0x000005c4, 0x00000000,
659 0x00000002, 0x00000004, 0x00000001, 0x00001005, 0x00001069, 0x000010cd, 0x00001131, 0x00001006,
660 0x0000106a, 0x000010ce, 0x00001132, 0x00000005, 0x325f3469, 0x00000000, 0x00000002, 0x00000002,
661 0x000005f4, 0x00000000, 0x00000002, 0x00000001, 0x00000001, 0x00002b5d, 0x00002b5e, 0x00000006,
662 0x5f313169, 0x00000032, 0x00000002, 0x00000002, 0x0000062c, 0x00000000, 0x00000002, 0x00000001,
663 0x00000002, 0x00002f45, 0x00002fa9, 0x00002f46, 0x00002faa, 0x00000006, 0x5f323169, 0x00000032,
664 0x00000002, 0x00000002, 0x0000066c, 0x00000000, 0x00000002, 0x00000001, 0x00000003, 0x0000332d,
665 0x00003391, 0x000033f5, 0x0000332e, 0x00003392, 0x000033f6, 0x00000006, 0x5f333169, 0x00000032,
666 0x00000002, 0x00000002, 0x000006b4, 0x00000000, 0x00000002, 0x00000001, 0x00000004, 0x00003715,
667 0x00003779, 0x000037dd, 0x00003841, 0x00003716, 0x0000377a, 0x000037de, 0x00003842, 0x00000006,
668 0x5f343169, 0x00000032, 0x00000002, 0x00000002, 0x000006ec, 0x00000000, 0x00000002, 0x00000002,
669 0x00000001, 0x0003389d, 0x00033c85, 0x0003389e, 0x00033c86, 0x00000006, 0x5f313269, 0x00000032,
670 0x00000002, 0x00000002, 0x00000734, 0x00000000, 0x00000002, 0x00000002, 0x00000002, 0x00035fad,
671 0x00036395, 0x00036011, 0x000363f9, 0x00035fae, 0x00036396, 0x00036012, 0x000363fa, 0x00000006,
672 0x5f323269, 0x00000032, 0x00000002, 0x00000002, 0x0000078c, 0x00000000, 0x00000002, 0x00000002,
673 0x00000003, 0x000386bd, 0x00038aa5, 0x00038721, 0x00038b09, 0x00038785, 0x00038b6d, 0x000386be,
674 0x00038aa6, 0x00038722, 0x00038b0a, 0x00038786, 0x00038b6e, 0x00000006, 0x5f333269, 0x00000032,
675 0x00000002, 0x00000002, 0x000007f4, 0x00000000, 0x00000002, 0x00000002, 0x00000004, 0x0003adcd,
676 0x0003b1b5, 0x0003ae31, 0x0003b219, 0x0003ae95, 0x0003b27d, 0x0003aef9, 0x0003b2e1, 0x0003adce,
677 0x0003b1b6, 0x0003ae32, 0x0003b21a, 0x0003ae96, 0x0003b27e, 0x0003aefa, 0x0003b2e2, 0x00000006,
678 0x5f343269, 0x00000032, 0x00000002, 0x00000002, 0x00000834, 0x00000000, 0x00000002, 0x00000003,
679 0x00000001, 0x0004bf3d, 0x0004c325, 0x0004c70d, 0x0004bf3e, 0x0004c326, 0x0004c70e, 0x00000006,
680 0x5f313369, 0x00000032, 0x00000002, 0x00000002, 0x0000088c, 0x00000000, 0x00000002, 0x00000003,
681 0x00000002, 0x0004e64d, 0x0004ea35, 0x0004ee1d, 0x0004e6b1, 0x0004ea99, 0x0004ee81, 0x0004e64e,
682 0x0004ea36, 0x0004ee1e, 0x0004e6b2, 0x0004ea9a, 0x0004ee82, 0x00000006, 0x5f323369, 0x00000032,
683 0x00000002, 0x00000002, 0x000008fc, 0x00000000, 0x00000002, 0x00000003, 0x00000003, 0x00050d5d,
684 0x00051145, 0x0005152d, 0x00050dc1, 0x000511a9, 0x00051591, 0x00050e25, 0x0005120d, 0x000515f5,
685 0x00050d5e, 0x00051146, 0x0005152e, 0x00050dc2, 0x000511aa, 0x00051592, 0x00050e26, 0x0005120e,
686 0x000515f6, 0x00000006, 0x5f333369, 0x00000032, 0x00000002, 0x00000002, 0x00000984, 0x00000000,
687 0x00000002, 0x00000003, 0x00000004, 0x0005346d, 0x00053855, 0x00053c3d, 0x000534d1, 0x000538b9,
688 0x00053ca1, 0x00053535, 0x0005391d, 0x00053d05, 0x00053599, 0x00053981, 0x00053d69, 0x0005346e,
689 0x00053856, 0x00053c3e, 0x000534d2, 0x000538ba, 0x00053ca2, 0x00053536, 0x0005391e, 0x00053d06,
690 0x0005359a, 0x00053982, 0x00053d6a, 0x00000006, 0x5f343369, 0x00000032, 0x00000002, 0x00000002,
691 0x000009cc, 0x00000000, 0x00000002, 0x00000004, 0x00000001, 0x000645dd, 0x000649c5, 0x00064dad,
692 0x00065195, 0x000645de, 0x000649c6, 0x00064dae, 0x00065196, 0x00000006, 0x5f313469, 0x00000032,
693 0x00000002, 0x00000002, 0x00000a34, 0x00000000, 0x00000002, 0x00000004, 0x00000002, 0x00066ced,
694 0x000670d5, 0x000674bd, 0x000678a5, 0x00066d51, 0x00067139, 0x00067521, 0x00067909, 0x00066cee,
695 0x000670d6, 0x000674be, 0x000678a6, 0x00066d52, 0x0006713a, 0x00067522, 0x0006790a, 0x00000006,
696 0x5f323469, 0x00000032, 0x00000002, 0x00000002, 0x00000abc, 0x00000000, 0x00000002, 0x00000004,
697 0x00000003, 0x000693fd, 0x000697e5, 0x00069bcd, 0x00069fb5, 0x00069461, 0x00069849, 0x00069c31,
698 0x0006a019, 0x000694c5, 0x000698ad, 0x00069c95, 0x0006a07d, 0x000693fe, 0x000697e6, 0x00069bce,
699 0x00069fb6, 0x00069462, 0x0006984a, 0x00069c32, 0x0006a01a, 0x000694c6, 0x000698ae, 0x00069c96,
700 0x0006a07e, 0x00000006, 0x5f333469, 0x00000032, 0x00000002, 0x00000002, 0x00000b64, 0x00000000,
701 0x00000002, 0x00000004, 0x00000004, 0x0006bb0d, 0x0006bef5, 0x0006c2dd, 0x0006c6c5, 0x0006bb71,
702 0x0006bf59, 0x0006c341, 0x0006c729, 0x0006bbd5, 0x0006bfbd, 0x0006c3a5, 0x0006c78d, 0x0006bc39,
703 0x0006c021, 0x0006c409, 0x0006c7f1, 0x0006bb0e, 0x0006bef6, 0x0006c2de, 0x0006c6c6, 0x0006bb72,
704 0x0006bf5a, 0x0006c342, 0x0006c72a, 0x0006bbd6, 0x0006bfbe, 0x0006c3a6, 0x0006c78e, 0x0006bc3a,
705 0x0006c022, 0x0006c40a, 0x0006c7f2, 0x00000006, 0x5f343469, 0x00000032, 0x00000002, 0x00000070,
706 0x00000002, 0x00000074, 0x0000002a, 0x00000001, 0x00000001, 0x00000001, 0x00000004, 0x00000020,
707 0x00000000, 0x00000000, 0x0000002c, 0x00000048, 0x00000000, 0x00000000, 0x00000054, 0x00000070,
708 0x00000000, 0x00000000, 0x00000080, 0x0000009c, 0x00000000, 0x00000000, 0x000000b0, 0x000000cc,
709 0x00000000, 0x00000000, 0x000000e4, 0x00000100, 0x00000000, 0x00000000, 0x0000010c, 0x00000128,
710 0x00000000, 0x00000000, 0x00000138, 0x00000154, 0x00000000, 0x00000000, 0x00000168, 0x00000184,
711 0x00000000, 0x00000000, 0x0000019c, 0x000001b8, 0x00000000, 0x00000000, 0x000001c8, 0x000001e4,
712 0x00000000, 0x00000000, 0x000001fc, 0x00000218, 0x00000000, 0x00000000, 0x00000238, 0x00000254,
713 0x00000000, 0x00000000, 0x0000027c, 0x00000298, 0x00000000, 0x00000000, 0x000002ac, 0x000002c8,
714 0x00000000, 0x00000000, 0x000002e8, 0x00000304, 0x00000000, 0x00000000, 0x00000330, 0x0000034c,
715 0x00000000, 0x00000000, 0x00000384, 0x000003a0, 0x00000000, 0x00000000, 0x000003b8, 0x000003d4,
716 0x00000000, 0x00000000, 0x000003fc, 0x00000418, 0x00000000, 0x00000000, 0x00000450, 0x0000046c,
717 0x00000000, 0x00000000, 0x000004b4, 0x000004d0, 0x00000000, 0x00000000, 0x000004e0, 0x000004fc,
718 0x00000000, 0x00000000, 0x00000510, 0x0000052c, 0x00000000, 0x00000000, 0x00000548, 0x00000564,
719 0x00000000, 0x00000000, 0x00000588, 0x000005a4, 0x00000000, 0x00000000, 0x000005d0, 0x000005ec,
720 0x00000000, 0x00000000, 0x00000600, 0x0000061c, 0x00000000, 0x00000000, 0x00000638, 0x00000654,
721 0x00000000, 0x00000000, 0x00000678, 0x00000694, 0x00000000, 0x00000000, 0x000006c0, 0x000006dc,
722 0x00000000, 0x00000000, 0x000006f8, 0x00000714, 0x00000000, 0x00000000, 0x00000740, 0x0000075c,
723 0x00000000, 0x00000000, 0x00000798, 0x000007b4, 0x00000000, 0x00000000, 0x00000800, 0x0000081c,
724 0x00000000, 0x00000000, 0x00000840, 0x0000085c, 0x00000000, 0x00000000, 0x00000898, 0x000008b4,
725 0x00000000, 0x00000000, 0x00000908, 0x00000924, 0x00000000, 0x00000000, 0x00000990, 0x000009ac,
726 0x00000000, 0x00000000, 0x000009d8, 0x000009f4, 0x00000000, 0x00000000, 0x00000a40, 0x00000a5c,
727 0x00000000, 0x00000000, 0x00000ac8, 0x00000ae4, 0x00000000, 0x00000000, 0x00000b78, 0x00000000,
728 0x00000001, 0x00000b70, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
731 struct test_effect_parameter_value_result test_effect_parameter_value_result_int[] =
733 {"i", {"i", NULL, D3DXPC_SCALAR, D3DXPT_INT, 1, 1, 0, 0, 0, 0, 4}, 10},
734 {"i1", {"i1", NULL, D3DXPC_VECTOR, D3DXPT_INT, 1, 1, 0, 0, 0, 0, 4}, 20},
735 {"i2", {"i2", NULL, D3DXPC_VECTOR, D3DXPT_INT, 1, 2, 0, 0, 0, 0, 8}, 30},
736 {"i3", {"i3", NULL, D3DXPC_VECTOR, D3DXPT_INT, 1, 3, 0, 0, 0, 0, 12}, 41},
737 {"i4", {"i4", NULL, D3DXPC_VECTOR, D3DXPT_INT, 1, 4, 0, 0, 0, 0, 16}, 53},
738 {"i11", {"i11", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 1, 1, 0, 0, 0, 0, 4}, 66},
739 {"i12", {"i12", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 1, 2, 0, 0, 0, 0, 8}, 76},
740 {"i13", {"i13", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 1, 3, 0, 0, 0, 0, 12}, 87},
741 {"i14", {"i14", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 1, 4, 0, 0, 0, 0, 16}, 99},
742 {"i21", {"i21", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 2, 1, 0, 0, 0, 0, 8}, 112},
743 {"i22", {"i22", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 2, 2, 0, 0, 0, 0, 16}, 123},
744 {"i23", {"i23", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 2, 3, 0, 0, 0, 0, 24}, 136},
745 {"i24", {"i24", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 2, 4, 0, 0, 0, 0, 32}, 151},
746 {"i31", {"i31", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 3, 1, 0, 0, 0, 0, 12}, 168},
747 {"i32", {"i32", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 3, 2, 0, 0, 0, 0, 24}, 180},
748 {"i33", {"i33", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 3, 3, 0, 0, 0, 0, 36}, 195},
749 {"i34", {"i34", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 3, 4, 0, 0, 0, 0, 48}, 213},
750 {"i41", {"i41", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 4, 1, 0, 0, 0, 0, 16}, 234},
751 {"i42", {"i42", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 4, 2, 0, 0, 0, 0, 32}, 247},
752 {"i43", {"i43", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 4, 3, 0, 0, 0, 0, 48}, 264},
753 {"i44", {"i44", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 4, 4, 0, 0, 0, 0, 64}, 285},
754 {"i_2", {"i_2", NULL, D3DXPC_SCALAR, D3DXPT_INT, 1, 1, 2, 0, 0, 0, 8}, 310},
755 {"i1_2", {"i1_2", NULL, D3DXPC_VECTOR, D3DXPT_INT, 1, 1, 2, 0, 0, 0, 8}, 321},
756 {"i2_2", {"i2_2", NULL, D3DXPC_VECTOR, D3DXPT_INT, 1, 2, 2, 0, 0, 0, 16}, 333},
757 {"i3_2", {"i3_2", NULL, D3DXPC_VECTOR, D3DXPT_INT, 1, 3, 2, 0, 0, 0, 24}, 347},
758 {"i4_2", {"i4_2", NULL, D3DXPC_VECTOR, D3DXPT_INT, 1, 4, 2, 0, 0, 0, 32}, 363},
759 {"i11_2", {"i11_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 1, 1, 2, 0, 0, 0, 8}, 381},
760 {"i12_2", {"i12_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 1, 2, 2, 0, 0, 0, 16}, 393},
761 {"i13_2", {"i13_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 1, 3, 2, 0, 0, 0, 24}, 407},
762 {"i14_2", {"i14_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 1, 4, 2, 0, 0, 0, 32}, 423},
763 {"i21_2", {"i21_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 2, 1, 2, 0, 0, 0, 16}, 441},
764 {"i22_2", {"i22_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 2, 2, 2, 0, 0, 0, 32}, 455},
765 {"i23_2", {"i23_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 2, 3, 2, 0, 0, 0, 48}, 473},
766 {"i24_2", {"i24_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 2, 4, 2, 0, 0, 0, 64}, 495},
767 {"i31_2", {"i31_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 3, 1, 2, 0, 0, 0, 24}, 521},
768 {"i32_2", {"i32_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 3, 2, 2, 0, 0, 0, 48}, 537},
769 {"i33_2", {"i33_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 3, 3, 2, 0, 0, 0, 72}, 559},
770 {"i34_2", {"i34_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 3, 4, 2, 0, 0, 0, 96}, 587},
771 {"i41_2", {"i41_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 4, 1, 2, 0, 0, 0, 32}, 621},
772 {"i42_2", {"i42_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 4, 2, 2, 0, 0, 0, 64}, 639},
773 {"i43_2", {"i43_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 4, 3, 2, 0, 0, 0, 96}, 665},
774 {"i44_2", {"i44_2", NULL, D3DXPC_MATRIX_ROWS, D3DXPT_INT, 4, 4, 2, 0, 0, 0, 128}, 699},
778 * fxc.exe /Tfx_2_0
780 #if 0
781 string s = "test";
782 string s_2[2] = {"test1", "test2"};
783 texture2D tex;
784 Vertexshader v;
785 Vertexshader v_2[2];
786 Pixelshader p;
787 Pixelshader p_2[2];
788 technique t { pass p { } }
789 #endif
790 static const DWORD test_effect_parameter_value_blob_object[] =
792 0xfeff0901, 0x00000100, 0x00000000, 0x00000004, 0x00000004, 0x0000001c, 0x00000000, 0x00000000,
793 0x00000001, 0x00000002, 0x00000073, 0x00000004, 0x00000004, 0x00000040, 0x00000000, 0x00000002,
794 0x00000002, 0x00000003, 0x00000004, 0x00325f73, 0x00000007, 0x00000004, 0x00000060, 0x00000000,
795 0x00000000, 0x00000004, 0x00000004, 0x00786574, 0x00000010, 0x00000004, 0x00000080, 0x00000000,
796 0x00000000, 0x00000005, 0x00000002, 0x00000076, 0x00000010, 0x00000004, 0x000000a4, 0x00000000,
797 0x00000002, 0x00000006, 0x00000007, 0x00000004, 0x00325f76, 0x0000000f, 0x00000004, 0x000000c4,
798 0x00000000, 0x00000000, 0x00000008, 0x00000002, 0x00000070, 0x0000000f, 0x00000004, 0x000000e8,
799 0x00000000, 0x00000002, 0x00000009, 0x0000000a, 0x00000004, 0x00325f70, 0x00000002, 0x00000070,
800 0x00000002, 0x00000074, 0x00000007, 0x00000001, 0x00000007, 0x0000000b, 0x00000004, 0x00000018,
801 0x00000000, 0x00000000, 0x00000024, 0x00000038, 0x00000000, 0x00000000, 0x00000048, 0x0000005c,
802 0x00000000, 0x00000000, 0x00000068, 0x0000007c, 0x00000000, 0x00000000, 0x00000088, 0x0000009c,
803 0x00000000, 0x00000000, 0x000000ac, 0x000000c0, 0x00000000, 0x00000000, 0x000000cc, 0x000000e0,
804 0x00000000, 0x00000000, 0x000000f8, 0x00000000, 0x00000001, 0x000000f0, 0x00000000, 0x00000000,
805 0x0000000a, 0x00000000, 0x00000009, 0x00000000, 0x0000000a, 0x00000000, 0x00000008, 0x00000000,
806 0x00000006, 0x00000000, 0x00000007, 0x00000000, 0x00000005, 0x00000000, 0x00000004, 0x00000000,
807 0x00000002, 0x00000006, 0x74736574, 0x00000031, 0x00000003, 0x00000006, 0x74736574, 0x00000032,
808 0x00000001, 0x00000005, 0x74736574, 0x00000000,
811 struct test_effect_parameter_value_result test_effect_parameter_value_result_object[] =
813 {"s", {"s", NULL, D3DXPC_OBJECT, D3DXPT_STRING, 0, 0, 0, 0, 0, 0, sizeof(LPCSTR)}, 0},
814 {"s_2", {"s_2", NULL, D3DXPC_OBJECT, D3DXPT_STRING, 0, 0, 2, 0, 0, 0, 2 * sizeof(LPCSTR)}, 0},
815 {"tex", {"tex", NULL, D3DXPC_OBJECT, D3DXPT_TEXTURE2D, 0, 0, 0, 0, 0, 0, sizeof(LPDIRECT3DBASETEXTURE9)}, 0},
816 {"v", {"v", NULL, D3DXPC_OBJECT, D3DXPT_VERTEXSHADER, 0, 0, 0, 0, 0, 0, sizeof(LPDIRECT3DVERTEXSHADER9)}, 0},
817 {"v_2", {"v_2", NULL, D3DXPC_OBJECT, D3DXPT_VERTEXSHADER, 0, 0, 2, 0, 0, 0, 2 * sizeof(LPDIRECT3DVERTEXSHADER9)}, 0},
818 {"p", {"p", NULL, D3DXPC_OBJECT, D3DXPT_PIXELSHADER, 0, 0, 0, 0, 0, 0, sizeof(LPDIRECT3DPIXELSHADER9)}, 0},
819 {"p_2", {"p_2", NULL, D3DXPC_OBJECT, D3DXPT_PIXELSHADER, 0, 0, 2, 0, 0, 0, 2 * sizeof(LPDIRECT3DPIXELSHADER9)}, 0},
823 * fxc.exe /Tfx_2_0
825 #if 0
826 float3 f3 = {-3.1, 153.2, 283.3};
827 float3 f3min = {-31.1, -31.2, -31.3};
828 float3 f3max = {320.1, 320.2, 320.3};
829 float4 f4 = {-4.1, 154.2, 284.3, 34.4};
830 float4 f4min = {-41.1, -41.2, -41.3, -41.4};
831 float4 f4max = {420.1, 42.20, 420.3, 420.4};
832 technique t { pass p { } }
833 #endif
834 static const DWORD test_effect_parameter_value_blob_special[] =
836 0xfeff0901, 0x00000150, 0x00000000, 0x00000003, 0x00000001, 0x0000002c, 0x00000000, 0x00000000,
837 0x00000003, 0x00000001, 0xc0466666, 0x43193333, 0x438da666, 0x00000003, 0x00003366, 0x00000003,
838 0x00000001, 0x0000005c, 0x00000000, 0x00000000, 0x00000003, 0x00000001, 0xc1f8cccd, 0xc1f9999a,
839 0xc1fa6666, 0x00000006, 0x696d3366, 0x0000006e, 0x00000003, 0x00000001, 0x00000090, 0x00000000,
840 0x00000000, 0x00000003, 0x00000001, 0x43a00ccd, 0x43a0199a, 0x43a02666, 0x00000006, 0x616d3366,
841 0x00000078, 0x00000003, 0x00000001, 0x000000c8, 0x00000000, 0x00000000, 0x00000004, 0x00000001,
842 0xc0833333, 0x431a3333, 0x438e2666, 0x4209999a, 0x00000003, 0x00003466, 0x00000003, 0x00000001,
843 0x000000fc, 0x00000000, 0x00000000, 0x00000004, 0x00000001, 0xc2246666, 0xc224cccd, 0xc2253333,
844 0xc225999a, 0x00000006, 0x696d3466, 0x0000006e, 0x00000003, 0x00000001, 0x00000134, 0x00000000,
845 0x00000000, 0x00000004, 0x00000001, 0x43d20ccd, 0x4228cccd, 0x43d22666, 0x43d23333, 0x00000006,
846 0x616d3466, 0x00000078, 0x00000002, 0x00000070, 0x00000002, 0x00000074, 0x00000006, 0x00000001,
847 0x00000001, 0x00000001, 0x00000004, 0x00000020, 0x00000000, 0x00000000, 0x00000034, 0x00000050,
848 0x00000000, 0x00000000, 0x00000068, 0x00000084, 0x00000000, 0x00000000, 0x0000009c, 0x000000b8,
849 0x00000000, 0x00000000, 0x000000d0, 0x000000ec, 0x00000000, 0x00000000, 0x00000108, 0x00000124,
850 0x00000000, 0x00000000, 0x00000148, 0x00000000, 0x00000001, 0x00000140, 0x00000000, 0x00000000,
851 0x00000000, 0x00000000,
854 struct test_effect_parameter_value_result test_effect_parameter_value_result_special[] =
856 {"f3", {"f3", NULL, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 3, 0, 0, 0, 0, 12}, 10},
857 {"f3min", {"f3min", NULL, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 3, 0, 0, 0, 0, 12}, 22},
858 {"f3max", {"f3max", NULL, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 3, 0, 0, 0, 0, 12}, 35},
859 {"f4", {"f4", NULL, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 4, 0, 0, 0, 0, 16}, 48},
860 {"f4min", {"f4min", NULL, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 4, 0, 0, 0, 0, 16}, 61},
861 {"f4max", {"f4max", NULL, D3DXPC_VECTOR, D3DXPT_FLOAT, 1, 4, 0, 0, 0, 0, 16}, 75},
864 #define ADD_PARAMETER_VALUE(x) {\
865 test_effect_parameter_value_blob_ ## x,\
866 sizeof(test_effect_parameter_value_blob_ ## x),\
867 test_effect_parameter_value_result_ ## x,\
868 sizeof(test_effect_parameter_value_result_ ## x)/sizeof(*test_effect_parameter_value_result_ ## x),\
871 static const struct
873 const DWORD *blob;
874 UINT blob_size;
875 const struct test_effect_parameter_value_result *res;
876 UINT res_count;
878 test_effect_parameter_value_data[] =
880 ADD_PARAMETER_VALUE(float),
881 ADD_PARAMETER_VALUE(int),
882 ADD_PARAMETER_VALUE(object),
883 ADD_PARAMETER_VALUE(special),
886 #undef ADD_PARAMETER_VALUE
888 #define EFFECT_PARAMETER_VALUE_ARRAY_SIZE 48
889 /* Constants for special INT/FLOAT conversation */
890 #define INT_FLOAT_MULTI 255.0f
891 #define INT_FLOAT_MULTI_INVERSE (1/INT_FLOAT_MULTI)
893 static void test_effect_parameter_value_GetValue(const struct test_effect_parameter_value_result *res,
894 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
896 const D3DXPARAMETER_DESC *res_desc = &res->desc;
897 LPCSTR res_full_name = res->full_name;
898 DWORD value[EFFECT_PARAMETER_VALUE_ARRAY_SIZE];
899 HRESULT hr;
900 UINT l;
902 memset(value, 0xab, sizeof(value));
903 hr = effect->lpVtbl->GetValue(effect, parameter, value, res_desc->Bytes);
904 if (res_desc->Class == D3DXPC_SCALAR
905 || res_desc->Class == D3DXPC_VECTOR
906 || res_desc->Class == D3DXPC_MATRIX_ROWS)
908 ok(hr == D3D_OK, "%u - %s: GetValue failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
910 for (l = 0; l < res_desc->Bytes / sizeof(*value); ++l)
912 ok(value[l] == res_value[l], "%u - %s: GetValue value[%u] failed, got %#x, expected %#x\n",
913 i, res_full_name, l, value[l], res_value[l]);
916 for (l = res_desc->Bytes / sizeof(*value); l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l)
918 ok(value[l] == 0xabababab, "%u - %s: GetValue value[%u] failed, got %#x, expected %#x\n",
919 i, res_full_name, l, value[l], 0xabababab);
922 else if (res_desc->Class == D3DXPC_OBJECT)
924 switch (res_desc->Type)
926 case D3DXPT_PIXELSHADER:
927 case D3DXPT_VERTEXSHADER:
928 case D3DXPT_TEXTURE2D:
929 ok(hr == D3D_OK, "%u - %s: GetValue failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
931 for (l = 0; l < (res_desc->Elements ? res_desc->Elements : 1); ++l)
933 IUnknown *unk = *((IUnknown **)value + l);
934 if (unk) IUnknown_Release(unk);
936 break;
938 case D3DXPT_STRING:
939 ok(hr == D3D_OK, "%u - %s: GetValue failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
940 break;
942 default:
943 ok(0, "Type is %u, this should not happen!\n", res_desc->Type);
944 break;
947 else
949 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetValue failed, got %#x, expected %#x\n",
950 i, res_full_name, hr, D3DERR_INVALIDCALL);
952 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l)
954 ok(value[l] == 0xabababab, "%u - %s: GetValue value[%u] failed, got %#x, expected %#x\n",
955 i, res_full_name, l, value[l], 0xabababab);
960 static void test_effect_parameter_value_GetBool(const struct test_effect_parameter_value_result *res,
961 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
963 const D3DXPARAMETER_DESC *res_desc = &res->desc;
964 LPCSTR res_full_name = res->full_name;
965 BOOL bvalue = 0xabababab;
966 HRESULT hr;
968 hr = effect->lpVtbl->GetBool(effect, parameter, &bvalue);
969 if (!res_desc->Elements && res_desc->Rows == 1 && res_desc->Columns == 1)
971 ok(hr == D3D_OK, "%u - %s: GetBool failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
972 ok(bvalue == get_bool(res_value), "%u - %s: GetBool bvalue failed, got %#x, expected %#x\n",
973 i, res_full_name, bvalue, get_bool(res_value));
975 else
977 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetBool failed, got %#x, expected %#x\n",
978 i, res_full_name, hr, D3DERR_INVALIDCALL);
979 ok(bvalue == 0xabababab, "%u - %s: GetBool bvalue failed, got %#x, expected %#x\n",
980 i, res_full_name, bvalue, 0xabababab);
984 static void test_effect_parameter_value_GetBoolArray(const struct test_effect_parameter_value_result *res,
985 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
987 const D3DXPARAMETER_DESC *res_desc = &res->desc;
988 LPCSTR res_full_name = res->full_name;
989 BOOL bavalue[EFFECT_PARAMETER_VALUE_ARRAY_SIZE];
990 HRESULT hr;
991 UINT l;
993 memset(bavalue, 0xab, sizeof(bavalue));
994 hr = effect->lpVtbl->GetBoolArray(effect, parameter, bavalue, res_desc->Bytes / sizeof(*bavalue));
995 if (res_desc->Class == D3DXPC_SCALAR
996 || res_desc->Class == D3DXPC_VECTOR
997 || res_desc->Class == D3DXPC_MATRIX_ROWS)
999 ok(hr == D3D_OK, "%u - %s: GetBoolArray failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1001 for (l = 0; l < res_desc->Bytes / sizeof(*bavalue); ++l)
1003 ok(bavalue[l] == get_bool(&res_value[l]), "%u - %s: GetBoolArray bavalue[%u] failed, got %#x, expected %#x\n",
1004 i, res_full_name, l, bavalue[l], get_bool(&res_value[l]));
1007 for (l = res_desc->Bytes / sizeof(*bavalue); l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l)
1009 ok(bavalue[l] == 0xabababab, "%u - %s: GetBoolArray bavalue[%u] failed, got %#x, expected %#x\n",
1010 i, res_full_name, l, bavalue[l], 0xabababab);
1013 else
1015 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetBoolArray failed, got %#x, expected %#x\n",
1016 i, res_full_name, hr, D3DERR_INVALIDCALL);
1018 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l)
1020 ok(bavalue[l] == 0xabababab, "%u - %s: GetBoolArray bavalue[%u] failed, got %#x, expected %#x\n",
1021 i, res_full_name, l, bavalue[l], 0xabababab);
1026 static void test_effect_parameter_value_GetInt(const struct test_effect_parameter_value_result *res,
1027 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1029 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1030 LPCSTR res_full_name = res->full_name;
1031 INT ivalue = 0xabababab;
1032 HRESULT hr;
1034 hr = effect->lpVtbl->GetInt(effect, parameter, &ivalue);
1035 if (!res_desc->Elements && res_desc->Columns == 1 && res_desc->Rows == 1)
1037 ok(hr == D3D_OK, "%u - %s: GetInt failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1038 ok(ivalue == get_int(res_desc->Type, res_value), "%u - %s: GetInt ivalue failed, got %i, expected %i\n",
1039 i, res_full_name, ivalue, get_int(res_desc->Type, res_value));
1041 else if(!res_desc->Elements && res_desc->Type == D3DXPT_FLOAT &&
1042 ((res_desc->Class == D3DXPC_VECTOR && res_desc->Columns != 2) ||
1043 (res_desc->Class == D3DXPC_MATRIX_ROWS && res_desc->Rows != 2 && res_desc->Columns == 1)))
1045 INT tmp;
1047 ok(hr == D3D_OK, "%u - %s: GetInt failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1049 tmp = (INT)(min(max(0.0f, *((FLOAT *)res_value + 2)), 1.0f) * INT_FLOAT_MULTI);
1050 tmp += ((INT)(min(max(0.0f, *((FLOAT *)res_value + 1)), 1.0f) * INT_FLOAT_MULTI)) << 8;
1051 tmp += ((INT)(min(max(0.0f, *((FLOAT *)res_value + 0)), 1.0f) * INT_FLOAT_MULTI)) << 16;
1052 if (res_desc->Columns * res_desc->Rows > 3)
1054 tmp += ((INT)(min(max(0.0f, *((FLOAT *)res_value + 3)), 1.0f) * INT_FLOAT_MULTI)) << 24;
1057 ok(ivalue == tmp, "%u - %s: GetInt ivalue failed, got %x, expected %x\n",
1058 i, res_full_name, ivalue, tmp);
1060 else
1062 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetInt failed, got %#x, expected %#x\n",
1063 i, res_full_name, hr, D3DERR_INVALIDCALL);
1064 ok(ivalue == 0xabababab, "%u - %s: GetInt ivalue failed, got %i, expected %i\n",
1065 i, res_full_name, ivalue, 0xabababab);
1069 static void test_effect_parameter_value_GetIntArray(const struct test_effect_parameter_value_result *res,
1070 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1072 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1073 LPCSTR res_full_name = res->full_name;
1074 INT iavalue[EFFECT_PARAMETER_VALUE_ARRAY_SIZE];
1075 HRESULT hr;
1076 UINT l;
1078 memset(iavalue, 0xab, sizeof(iavalue));
1079 hr = effect->lpVtbl->GetIntArray(effect, parameter, iavalue, res_desc->Bytes / sizeof(*iavalue));
1080 if (res_desc->Class == D3DXPC_SCALAR
1081 || res_desc->Class == D3DXPC_VECTOR
1082 || res_desc->Class == D3DXPC_MATRIX_ROWS)
1084 ok(hr == D3D_OK, "%u - %s: GetIntArray failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1086 for (l = 0; l < res_desc->Bytes / sizeof(*iavalue); ++l)
1088 ok(iavalue[l] == get_int(res_desc->Type, &res_value[l]), "%u - %s: GetIntArray iavalue[%u] failed, got %i, expected %i\n",
1089 i, res_full_name, l, iavalue[l], get_int(res_desc->Type, &res_value[l]));
1092 for (l = res_desc->Bytes / sizeof(*iavalue); l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l)
1094 ok(iavalue[l] == 0xabababab, "%u - %s: GetIntArray iavalue[%u] failed, got %i, expected %i\n",
1095 i, res_full_name, l, iavalue[l], 0xabababab);
1098 else
1100 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetIntArray failed, got %#x, expected %#x\n",
1101 i, res_full_name, hr, D3DERR_INVALIDCALL);
1103 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l)
1105 ok(iavalue[l] == 0xabababab, "%u - %s: GetIntArray iavalue[%u] failed, got %i, expected %i\n",
1106 i, res_full_name, l, iavalue[l], 0xabababab);
1111 static void test_effect_parameter_value_GetFloat(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 LPCSTR res_full_name = res->full_name;
1116 HRESULT hr;
1117 DWORD cmp = 0xabababab;
1118 FLOAT fvalue = *(FLOAT *)&cmp;
1120 hr = effect->lpVtbl->GetFloat(effect, parameter, &fvalue);
1121 if (!res_desc->Elements && res_desc->Columns == 1 && res_desc->Rows == 1)
1123 ok(hr == D3D_OK, "%u - %s: GetFloat failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1124 ok(compare_float(fvalue, get_float(res_desc->Type, res_value), 512), "%u - %s: GetFloat fvalue failed, got %f, expected %f\n",
1125 i, res_full_name, fvalue, get_float(res_desc->Type, res_value));
1127 else
1129 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetFloat failed, got %#x, expected %#x\n",
1130 i, res_full_name, hr, D3DERR_INVALIDCALL);
1131 ok(fvalue == *(FLOAT *)&cmp, "%u - %s: GetFloat fvalue failed, got %f, expected %f\n",
1132 i, res_full_name, fvalue, *(FLOAT *)&cmp);
1136 static void test_effect_parameter_value_GetFloatArray(const struct test_effect_parameter_value_result *res,
1137 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1139 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1140 LPCSTR res_full_name = res->full_name;
1141 FLOAT favalue[EFFECT_PARAMETER_VALUE_ARRAY_SIZE];
1142 HRESULT hr;
1143 UINT l;
1144 DWORD cmp = 0xabababab;
1146 memset(favalue, 0xab, sizeof(favalue));
1147 hr = effect->lpVtbl->GetFloatArray(effect, parameter, favalue, res_desc->Bytes / sizeof(*favalue));
1148 if (res_desc->Class == D3DXPC_SCALAR
1149 || res_desc->Class == D3DXPC_VECTOR
1150 || res_desc->Class == D3DXPC_MATRIX_ROWS)
1152 ok(hr == D3D_OK, "%u - %s: GetFloatArray failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1154 for (l = 0; l < res_desc->Bytes / sizeof(*favalue); ++l)
1156 ok(compare_float(favalue[l], get_float(res_desc->Type, &res_value[l]), 512),
1157 "%u - %s: GetFloatArray favalue[%u] failed, got %f, expected %f\n",
1158 i, res_full_name, l, favalue[l], get_float(res_desc->Type, &res_value[l]));
1161 for (l = res_desc->Bytes / sizeof(*favalue); l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l)
1163 ok(favalue[l] == *(FLOAT *)&cmp, "%u - %s: GetFloatArray favalue[%u] failed, got %f, expected %f\n",
1164 i, res_full_name, l, favalue[l], *(FLOAT *)&cmp);
1167 else
1169 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetFloatArray failed, got %#x, expected %#x\n",
1170 i, res_full_name, hr, D3DERR_INVALIDCALL);
1172 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l)
1174 ok(favalue[l] == *(FLOAT *)&cmp, "%u - %s: GetFloatArray favalue[%u] failed, got %f, expected %f\n",
1175 i, res_full_name, l, favalue[l], *(FLOAT *)&cmp);
1180 static void test_effect_parameter_value_GetVector(const struct test_effect_parameter_value_result *res,
1181 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1183 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1184 LPCSTR res_full_name = res->full_name;
1185 HRESULT hr;
1186 DWORD cmp = 0xabababab;
1187 FLOAT fvalue[4];
1188 UINT l;
1190 memset(fvalue, 0xab, sizeof(fvalue));
1191 hr = effect->lpVtbl->GetVector(effect, parameter, (D3DXVECTOR4 *)&fvalue);
1192 if (!res_desc->Elements &&
1193 (res_desc->Class == D3DXPC_SCALAR || res_desc->Class == D3DXPC_VECTOR) &&
1194 res_desc->Type == D3DXPT_INT && res_desc->Bytes == 4)
1196 DWORD tmp;
1198 ok(hr == D3D_OK, "%u - %s: GetVector failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1200 tmp = (DWORD)(*(fvalue + 2) * INT_FLOAT_MULTI);
1201 tmp += ((DWORD)(*(fvalue + 1) * INT_FLOAT_MULTI)) << 8;
1202 tmp += ((DWORD)(*fvalue * INT_FLOAT_MULTI)) << 16;
1203 tmp += ((DWORD)(*(fvalue + 3) * INT_FLOAT_MULTI)) << 24;
1205 ok(*res_value == tmp, "%u - %s: GetVector ivalue failed, got %i, expected %i\n",
1206 i, res_full_name, tmp, *res_value);
1208 else if (!res_desc->Elements && (res_desc->Class == D3DXPC_SCALAR || res_desc->Class == D3DXPC_VECTOR))
1210 ok(hr == D3D_OK, "%u - %s: GetVector failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1212 for (l = 0; l < res_desc->Columns; ++l)
1214 ok(compare_float(fvalue[l], get_float(res_desc->Type, &res_value[l]), 512),
1215 "%u - %s: GetVector fvalue[%u] failed, got %f, expected %f\n",
1216 i, res_full_name, l, fvalue[l], get_float(res_desc->Type, &res_value[l]));
1219 for (l = res_desc->Columns; l < 4; ++l)
1221 ok(fvalue[l] == 0.0f, "%u - %s: GetVector fvalue[%u] failed, got %f, expected %f\n",
1222 i, res_full_name, l, fvalue[l], 0.0f);
1225 else
1227 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetVector failed, got %#x, expected %#x\n",
1228 i, res_full_name, hr, D3DERR_INVALIDCALL);
1230 for (l = 0; l < 4; ++l)
1232 ok(fvalue[l] == *(FLOAT *)&cmp, "%u - %s: GetVector fvalue[%u] failed, got %f, expected %f\n",
1233 i, res_full_name, l, fvalue[l], *(FLOAT *)&cmp);
1238 static void test_effect_parameter_value_GetVectorArray(const struct test_effect_parameter_value_result *res,
1239 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1241 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1242 LPCSTR res_full_name = res->full_name;
1243 HRESULT hr;
1244 DWORD cmp = 0xabababab;
1245 FLOAT fvalue[EFFECT_PARAMETER_VALUE_ARRAY_SIZE];
1246 UINT l, k;
1248 memset(fvalue, 0xab, sizeof(fvalue));
1249 hr = effect->lpVtbl->GetVectorArray(effect, parameter, (D3DXVECTOR4 *)&fvalue, res_desc->Elements);
1250 if (!res_desc->Elements)
1252 ok(hr == D3D_OK, "%u - %s: GetVectorArray failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1254 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l)
1256 ok(fvalue[l] == *(FLOAT *)&cmp, "%u - %s: GetVectorArray fvalue[%u] failed, got %f, expected %f\n",
1257 i, res_full_name, l, fvalue[l], *(FLOAT *)&cmp);
1260 else if (res_desc->Elements && res_desc->Class == D3DXPC_VECTOR)
1262 ok(hr == D3D_OK, "%u - %s: GetVectorArray failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1264 for (k = 0; k < res_desc->Elements; ++k)
1266 for (l = 0; l < res_desc->Columns; ++l)
1268 ok(compare_float(fvalue[l + k * 4], get_float(res_desc->Type, &res_value[ l + k * res_desc->Columns]), 512),
1269 "%u - %s: GetVectorArray fvalue[%u] failed, got %f, expected %f\n",
1270 i, res_full_name, l + k * 4, fvalue[ l + k * 4], get_float(res_desc->Type, &res_value[ l + k * res_desc->Columns]));
1273 for (l = res_desc->Columns; l < 4; ++l)
1275 ok(fvalue[ l + k * 4] == 0.0f, "%u - %s: GetVectorArray fvalue[%u] failed, got %f, expected %f\n",
1276 i, res_full_name, l + k * 4, fvalue[ l + k * 4], 0.0f);
1280 for (l = res_desc->Elements * 4; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l)
1282 ok(fvalue[l] == *(FLOAT *)&cmp, "%u - %s: GetVectorArray fvalue[%u] failed, got %f, expected %f\n",
1283 i, res_full_name, l, fvalue[l], *(FLOAT *)&cmp);
1286 else
1288 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetVectorArray failed, got %#x, expected %#x\n",
1289 i, res_full_name, hr, D3DERR_INVALIDCALL);
1291 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l)
1293 ok(fvalue[l] == *(FLOAT *)&cmp, "%u - %s: GetVectorArray fvalue[%u] failed, got %f, expected %f\n",
1294 i, res_full_name, l, fvalue[l], *(FLOAT *)&cmp);
1299 static void test_effect_parameter_value_GetMatrix(const struct test_effect_parameter_value_result *res,
1300 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1302 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1303 LPCSTR res_full_name = res->full_name;
1304 HRESULT hr;
1305 DWORD cmp = 0xabababab;
1306 FLOAT fvalue[16];
1307 UINT l, k;
1309 memset(fvalue, 0xab, sizeof(fvalue));
1310 hr = effect->lpVtbl->GetMatrix(effect, parameter, (D3DXMATRIX *)&fvalue);
1311 if (!res_desc->Elements && res_desc->Class == D3DXPC_MATRIX_ROWS)
1313 ok(hr == D3D_OK, "%u - %s: GetMatrix failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1315 for (k = 0; k < 4; ++k)
1317 for (l = 0; l < 4; ++l)
1319 if (k < res_desc->Columns && l < res_desc->Rows)
1321 ok(compare_float(fvalue[l * 4 + k], get_float(res_desc->Type, &res_value[l * res_desc->Columns + k]), 512),
1322 "%u - %s: GetMatrix fvalue[%u] failed, got %f, expected %f\n",
1323 i, res_full_name, l * 4 + k, fvalue[l * 4 + k],
1324 get_float(res_desc->Type, &res_value[l * res_desc->Columns + k]));
1326 else
1328 ok(fvalue[l * 4 + k] == 0.0f, "%u - %s: GetMatrix fvalue[%u] failed, got %f, expected %f\n",
1329 i, res_full_name, l * 4 + k, fvalue[l * 4 + k], 0.0f);
1334 else
1336 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrix failed, got %#x, expected %#x\n",
1337 i, res_full_name, hr, D3DERR_INVALIDCALL);
1339 for (l = 0; l < sizeof(fvalue) / sizeof(*fvalue); ++l)
1341 ok(fvalue[l] == *(FLOAT *)&cmp, "%u - %s: GetMatrix fvalue[%u] failed, got %f, expected %f\n",
1342 i, res_full_name, l, fvalue[l], *(FLOAT *)&cmp);
1347 static void test_effect_parameter_value_GetMatrixArray(const struct test_effect_parameter_value_result *res,
1348 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1350 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1351 LPCSTR res_full_name = res->full_name;
1352 HRESULT hr;
1353 DWORD cmp = 0xabababab;
1354 FLOAT fvalue[EFFECT_PARAMETER_VALUE_ARRAY_SIZE];
1355 UINT l, k, m;
1357 memset(fvalue, 0xab, sizeof(fvalue));
1358 hr = effect->lpVtbl->GetMatrixArray(effect, parameter, (D3DXMATRIX *)&fvalue, res_desc->Elements);
1359 if (!res_desc->Elements)
1361 ok(hr == D3D_OK, "%u - %s: GetMatrixArray failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1363 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l)
1365 ok(fvalue[l] == *(FLOAT *)&cmp, "%u - %s: GetMatrixArray fvalue[%u] failed, got %f, expected %f\n",
1366 i, res_full_name, l, fvalue[l], *(FLOAT *)&cmp);
1369 else if (res_desc->Elements && res_desc->Class == D3DXPC_MATRIX_ROWS)
1371 ok(hr == D3D_OK, "%u - %s: GetMatrixArray failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1373 for (m = 0; m < res_desc->Elements; ++m)
1375 for (k = 0; k < 4; ++k)
1377 for (l = 0; l < 4; ++l)
1379 if (k < res_desc->Columns && l < res_desc->Rows)
1381 ok(compare_float(fvalue[m * 16 + l * 4 + k], get_float(res_desc->Type,
1382 &res_value[m * res_desc->Columns * res_desc->Rows + l * res_desc->Columns + k]), 512),
1383 "%u - %s: GetMatrixArray fvalue[%u] failed, got %f, expected %f\n",
1384 i, res_full_name, m * 16 + l * 4 + k, fvalue[m * 16 + l * 4 + k],
1385 get_float(res_desc->Type, &res_value[m * res_desc->Columns * res_desc->Rows
1386 + l * res_desc->Columns + k]));
1388 else
1390 ok(fvalue[m * 16 + l * 4 + k] == 0.0f, "%u - %s: GetMatrixArray fvalue[%u] failed, got %f, expected %f\n",
1391 i, res_full_name, m * 16 + l * 4 + k, fvalue[m * 16 + l * 4 + k], 0.0f);
1397 for (l = res_desc->Elements * 16; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l)
1399 ok(fvalue[l] == *(FLOAT *)&cmp, "%u - %s: GetMatrixArray fvalue[%u] failed, got %f, expected %f\n",
1400 i, res_full_name, l, fvalue[l], *(FLOAT *)&cmp);
1403 else
1405 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrixArray failed, got %#x, expected %#x\n",
1406 i, res_full_name, hr, D3DERR_INVALIDCALL);
1408 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l)
1410 ok(fvalue[l] == *(FLOAT *)&cmp, "%u - %s: GetMatrixArray fvalue[%u] failed, got %f, expected %f\n",
1411 i, res_full_name, l, fvalue[l], *(FLOAT *)&cmp);
1416 static void test_effect_parameter_value_GetMatrixTranspose(const struct test_effect_parameter_value_result *res,
1417 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1419 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1420 LPCSTR res_full_name = res->full_name;
1421 HRESULT hr;
1422 DWORD cmp = 0xabababab;
1423 FLOAT fvalue[16];
1424 UINT l, k;
1426 memset(fvalue, 0xab, sizeof(fvalue));
1427 hr = effect->lpVtbl->GetMatrixTranspose(effect, parameter, (D3DXMATRIX *)&fvalue);
1428 if (!res_desc->Elements && res_desc->Class == D3DXPC_MATRIX_ROWS)
1430 ok(hr == D3D_OK, "%u - %s: GetMatrixTranspose failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1432 for (k = 0; k < 4; ++k)
1434 for (l = 0; l < 4; ++l)
1436 if (k < res_desc->Columns && l < res_desc->Rows)
1438 ok(compare_float(fvalue[l + k * 4], get_float(res_desc->Type, &res_value[l * res_desc->Columns + k]), 512),
1439 "%u - %s: GetMatrixTranspose fvalue[%u] failed, got %f, expected %f\n",
1440 i, res_full_name, l + k * 4, fvalue[l + k * 4],
1441 get_float(res_desc->Type, &res_value[l * res_desc->Columns + k]));
1443 else
1445 ok(fvalue[l + k * 4] == 0.0f, "%u - %s: GetMatrixTranspose fvalue[%u] failed, got %f, expected %f\n",
1446 i, res_full_name, l + k * 4, fvalue[l + k * 4], 0.0f);
1451 else if (!res_desc->Elements && (res_desc->Class == D3DXPC_VECTOR || res_desc->Class == D3DXPC_SCALAR))
1453 ok(hr == D3D_OK, "%u - %s: GetMatrixTranspose failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1455 for (k = 0; k < 4; ++k)
1457 for (l = 0; l < 4; ++l)
1459 if (k < res_desc->Columns && l < res_desc->Rows)
1461 FLOAT res = get_float(res_desc->Type, &res_value[l * res_desc->Columns + k]);
1463 ok(fvalue[l * 4 + k] == res, "%u - %s: GetMatrixTranspose fvalue[%u] failed, got %f, expected %f\n",
1464 i, res_full_name, l * 4 + k, fvalue[l * 4 + k], res);
1466 else
1468 ok(fvalue[l * 4 + k] == 0.0f, "%u - %s: GetMatrixTranspose fvalue[%u] failed, got %f, expected %f\n",
1469 i, res_full_name, l * 4 + k, fvalue[l * 4 + k], 0.0f);
1474 else
1476 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrixTranspose failed, got %#x, expected %#x\n",
1477 i, res_full_name, hr, D3DERR_INVALIDCALL);
1479 for (l = 0; l < sizeof(fvalue) / sizeof(*fvalue); ++l)
1481 ok(fvalue[l] == *(FLOAT *)&cmp, "%u - %s: GetMatrixTranspose fvalue[%u] failed, got %f, expected %f\n",
1482 i, res_full_name, l, fvalue[l], *(FLOAT *)&cmp);
1487 static void test_effect_parameter_value_GetMatrixTransposeArray(const struct test_effect_parameter_value_result *res,
1488 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1490 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1491 LPCSTR res_full_name = res->full_name;
1492 HRESULT hr;
1493 DWORD cmp = 0xabababab;
1494 FLOAT fvalue[EFFECT_PARAMETER_VALUE_ARRAY_SIZE];
1495 UINT l, k, m;
1497 memset(fvalue, 0xab, sizeof(fvalue));
1498 hr = effect->lpVtbl->GetMatrixTransposeArray(effect, parameter, (D3DXMATRIX *)&fvalue, res_desc->Elements);
1499 if (!res_desc->Elements)
1501 ok(hr == D3D_OK, "%u - %s: GetMatrixTransposeArray failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1503 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l)
1505 ok(fvalue[l] == *(FLOAT *)&cmp, "%u - %s: GetMatrixTransposeArray fvalue[%u] failed, got %f, expected %f\n",
1506 i, res_full_name, l, fvalue[l], *(FLOAT *)&cmp);
1509 else if (res_desc->Elements && res_desc->Class == D3DXPC_MATRIX_ROWS)
1511 ok(hr == D3D_OK, "%u - %s: GetMatrixTransposeArray failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1513 for (m = 0; m < res_desc->Elements; ++m)
1515 for (k = 0; k < 4; ++k)
1517 for (l = 0; l < 4; ++l)
1519 if (k < res_desc->Columns && l < res_desc->Rows)
1521 ok(compare_float(fvalue[m * 16 + l + k * 4], get_float(res_desc->Type,
1522 &res_value[m * res_desc->Columns * res_desc->Rows + l * res_desc->Columns + k]), 512),
1523 "%u - %s: GetMatrixTransposeArray fvalue[%u] failed, got %f, expected %f\n",
1524 i, res_full_name, m * 16 + l + k * 4, fvalue[m * 16 + l + k * 4],
1525 get_float(res_desc->Type, &res_value[m * res_desc->Columns * res_desc->Rows
1526 + l * res_desc->Columns + k]));
1528 else
1530 ok(fvalue[m * 16 + l + k * 4] == 0.0f, "%u - %s: GetMatrixTransposeArray fvalue[%u] failed, got %f, expected %f\n",
1531 i, res_full_name, m * 16 + l + k * 4, fvalue[m * 16 + l + k * 4], 0.0f);
1537 for (l = res_desc->Elements * 16; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l)
1539 ok(fvalue[l] == *(FLOAT *)&cmp, "%u - %s: GetMatrixTransposeArray fvalue[%u] failed, got %f, expected %f\n",
1540 i, res_full_name, l, fvalue[l], *(FLOAT *)&cmp);
1543 else
1545 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrixTransposeArray failed, got %#x, expected %#x\n",
1546 i, res_full_name, hr, D3DERR_INVALIDCALL);
1548 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l)
1550 ok(fvalue[l] == *(FLOAT *)&cmp, "%u - %s: GetMatrixTransposeArray fvalue[%u] failed, got %f, expected %f\n",
1551 i, res_full_name, l, fvalue[l], *(FLOAT *)&cmp);
1556 static void test_effect_parameter_value_GetTestGroup(const struct test_effect_parameter_value_result *res,
1557 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1559 test_effect_parameter_value_GetValue(res, effect, res_value, parameter, i);
1560 test_effect_parameter_value_GetBool(res, effect, res_value, parameter, i);
1561 test_effect_parameter_value_GetBoolArray(res, effect, res_value, parameter, i);
1562 test_effect_parameter_value_GetInt(res, effect, res_value, parameter, i);
1563 test_effect_parameter_value_GetIntArray(res, effect, res_value, parameter, i);
1564 test_effect_parameter_value_GetFloat(res, effect, res_value, parameter, i);
1565 test_effect_parameter_value_GetFloatArray(res, effect, res_value, parameter, i);
1566 test_effect_parameter_value_GetVector(res, effect, res_value, parameter, i);
1567 test_effect_parameter_value_GetVectorArray(res, effect, res_value, parameter, i);
1568 test_effect_parameter_value_GetMatrix(res, effect, res_value, parameter, i);
1569 test_effect_parameter_value_GetMatrixArray(res, effect, res_value, parameter, i);
1570 test_effect_parameter_value_GetMatrixTranspose(res, effect, res_value, parameter, i);
1571 test_effect_parameter_value_GetMatrixTransposeArray(res, effect, res_value, parameter, i);
1574 static void test_effect_parameter_value_ResetValue(const struct test_effect_parameter_value_result *res,
1575 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1577 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1578 LPCSTR res_full_name = res->full_name;
1579 HRESULT hr;
1581 if (res_desc->Class == D3DXPC_SCALAR
1582 || res_desc->Class == D3DXPC_VECTOR
1583 || res_desc->Class == D3DXPC_MATRIX_ROWS)
1585 hr = effect->lpVtbl->SetValue(effect, parameter, res_value, res_desc->Bytes);
1586 ok(hr == D3D_OK, "%u - %s: SetValue failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1588 else
1590 /* nothing to do */
1591 switch (res_desc->Type)
1593 case D3DXPT_PIXELSHADER:
1594 case D3DXPT_VERTEXSHADER:
1595 case D3DXPT_TEXTURE2D:
1596 case D3DXPT_STRING:
1597 break;
1599 default:
1600 ok(0, "Type is %u, this should not happen!\n", res_desc->Type);
1601 break;
1606 static void test_effect_parameter_value(IDirect3DDevice9 *device)
1608 UINT i;
1609 UINT effect_count = sizeof(test_effect_parameter_value_data) / sizeof(*test_effect_parameter_value_data);
1611 for (i = 0; i < effect_count; ++i)
1613 const struct test_effect_parameter_value_result *res = test_effect_parameter_value_data[i].res;
1614 UINT res_count = test_effect_parameter_value_data[i].res_count;
1615 const DWORD *blob = test_effect_parameter_value_data[i].blob;
1616 UINT blob_size = test_effect_parameter_value_data[i].blob_size;
1617 HRESULT hr;
1618 ID3DXEffect *effect;
1619 D3DXEFFECT_DESC edesc;
1620 ULONG count;
1621 UINT k;
1623 hr = D3DXCreateEffect(device, blob, blob_size, NULL, NULL, 0, NULL, &effect, NULL);
1624 ok(hr == D3D_OK, "%u: D3DXCreateEffect failed, got %#x, expected %#x\n", i, hr, D3D_OK);
1626 hr = effect->lpVtbl->GetDesc(effect, &edesc);
1627 ok(hr == D3D_OK, "%u: GetDesc failed, got %#x, expected %#x\n", i, hr, D3D_OK);
1628 ok(edesc.Parameters == res_count, "%u: Parameters failed, got %u, expected %u\n",
1629 i, edesc.Parameters, res_count);
1631 for (k = 0; k < res_count; ++k)
1633 const D3DXPARAMETER_DESC *res_desc = &res[k].desc;
1634 LPCSTR res_full_name = res[k].full_name;
1635 UINT res_value_offset = res[k].value_offset;
1636 D3DXHANDLE parameter;
1637 D3DXPARAMETER_DESC pdesc;
1638 BOOL bvalue;
1639 INT ivalue;
1640 FLOAT fvalue;
1641 DWORD input_value[EFFECT_PARAMETER_VALUE_ARRAY_SIZE];
1642 DWORD expected_value[EFFECT_PARAMETER_VALUE_ARRAY_SIZE];
1643 UINT l, element;
1645 parameter = effect->lpVtbl->GetParameterByName(effect, NULL, res_full_name);
1646 ok(parameter != NULL, "%u - %s: GetParameterByName failed\n", i, res_full_name);
1648 hr = effect->lpVtbl->GetParameterDesc(effect, parameter, &pdesc);
1649 ok(hr == D3D_OK, "%u - %s: GetParameterDesc failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1651 ok(res_desc->Name ? !strcmp(pdesc.Name, res_desc->Name) : !pdesc.Name,
1652 "%u - %s: GetParameterDesc Name failed, got \"%s\", expected \"%s\"\n",
1653 i, res_full_name, pdesc.Name, res_desc->Name);
1654 ok(res_desc->Semantic ? !strcmp(pdesc.Semantic, res_desc->Semantic) : !pdesc.Semantic,
1655 "%u - %s: GetParameterDesc Semantic failed, got \"%s\", expected \"%s\"\n",
1656 i, res_full_name, pdesc.Semantic, res_desc->Semantic);
1657 ok(res_desc->Class == pdesc.Class, "%u - %s: GetParameterDesc Class failed, got %#x, expected %#x\n",
1658 i, res_full_name, pdesc.Class, res_desc->Class);
1659 ok(res_desc->Type == pdesc.Type, "%u - %s: GetParameterDesc Type failed, got %#x, expected %#x\n",
1660 i, res_full_name, pdesc.Type, res_desc->Type);
1661 ok(res_desc->Rows == pdesc.Rows, "%u - %s: GetParameterDesc Rows failed, got %u, expected %u\n",
1662 i, res_full_name, pdesc.Rows, res_desc->Rows);
1663 ok(res_desc->Columns == pdesc.Columns, "%u - %s: GetParameterDesc Columns failed, got %u, expected %u\n",
1664 i, res_full_name, pdesc.Columns, res_desc->Columns);
1665 ok(res_desc->Elements == pdesc.Elements, "%u - %s: GetParameterDesc Elements failed, got %u, expected %u\n",
1666 i, res_full_name, pdesc.Elements, res_desc->Elements);
1667 ok(res_desc->Annotations == pdesc.Annotations, "%u - %s: GetParameterDesc Annotations failed, got %u, expected %u\n",
1668 i, res_full_name, pdesc.Annotations, res_desc->Annotations);
1669 ok(res_desc->StructMembers == pdesc.StructMembers, "%u - %s: GetParameterDesc StructMembers failed, got %u, expected %u\n",
1670 i, res_full_name, pdesc.StructMembers, res_desc->StructMembers);
1671 ok(res_desc->Flags == pdesc.Flags, "%u - %s: GetParameterDesc Flags failed, got %u, expected %u\n",
1672 i, res_full_name, pdesc.Flags, res_desc->Flags);
1673 ok(res_desc->Bytes == pdesc.Bytes, "%u - %s: GetParameterDesc Bytes, got %u, expected %u\n",
1674 i, res_full_name, pdesc.Bytes, res_desc->Bytes);
1676 /* check size */
1677 ok(EFFECT_PARAMETER_VALUE_ARRAY_SIZE >= res_desc->Bytes / 4 +
1678 (res_desc->Elements ? res_desc->Bytes / 4 / res_desc->Elements : 0),
1679 "%u - %s: Warning: Array size to small\n", i, res_full_name);
1681 test_effect_parameter_value_GetTestGroup(&res[k], effect, &blob[res_value_offset], parameter, i);
1682 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
1683 test_effect_parameter_value_GetTestGroup(&res[k], effect, &blob[res_value_offset], parameter, i);
1685 /* SetBool */
1686 bvalue = 1;
1687 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
1688 hr = effect->lpVtbl->SetBool(effect, parameter, bvalue);
1689 if (!res_desc->Elements && res_desc->Rows == 1 && res_desc->Columns == 1)
1691 set_number(expected_value, res_desc->Type, &bvalue, D3DXPT_BOOL);
1692 ok(hr == D3D_OK, "%u - %s: SetBool failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1694 else
1696 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetBool failed, got %#x, expected %#x\n",
1697 i, res_full_name, hr, D3DERR_INVALIDCALL);
1699 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
1700 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
1702 /* SetBoolArray */
1703 *input_value = 1;
1704 for (l = 1; l < res_desc->Bytes / sizeof(*input_value); ++l)
1706 *(input_value + l) = *(input_value + l - 1) + 1;
1708 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
1709 hr = effect->lpVtbl->SetBoolArray(effect, parameter, (BOOL *)input_value, res_desc->Bytes / sizeof(*input_value));
1710 if (res_desc->Class == D3DXPC_SCALAR
1711 || res_desc->Class == D3DXPC_VECTOR
1712 || res_desc->Class == D3DXPC_MATRIX_ROWS)
1714 for (l = 0; l < res_desc->Bytes / sizeof(*input_value); ++l)
1716 set_number(expected_value + l, res_desc->Type, input_value + l, D3DXPT_BOOL);
1718 ok(hr == D3D_OK, "%u - %s: SetBoolArray failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1720 else
1722 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetBoolArray failed, got %#x, expected %#x\n",
1723 i, res_full_name, hr, D3DERR_INVALIDCALL);
1725 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
1726 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
1728 /* SetInt */
1729 ivalue = 0x1fbf02ff;
1730 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
1731 hr = effect->lpVtbl->SetInt(effect, parameter, ivalue);
1732 if (!res_desc->Elements && res_desc->Rows == 1 && res_desc->Columns == 1)
1734 set_number(expected_value, res_desc->Type, &ivalue, D3DXPT_INT);
1735 ok(hr == D3D_OK, "%u - %s: SetInt failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1737 else if(!res_desc->Elements && res_desc->Type == D3DXPT_FLOAT &&
1738 ((res_desc->Class == D3DXPC_VECTOR && res_desc->Columns != 2) ||
1739 (res_desc->Class == D3DXPC_MATRIX_ROWS && res_desc->Rows != 2 && res_desc->Columns == 1)))
1741 FLOAT tmp = ((ivalue & 0xff0000) >> 16) * INT_FLOAT_MULTI_INVERSE;
1742 set_number(expected_value, res_desc->Type, &tmp, D3DXPT_FLOAT);
1743 tmp = ((ivalue & 0xff00) >> 8) * INT_FLOAT_MULTI_INVERSE;
1744 set_number(expected_value + 1, res_desc->Type, &tmp, D3DXPT_FLOAT);
1745 tmp = (ivalue & 0xff) * INT_FLOAT_MULTI_INVERSE;
1746 set_number(expected_value + 2, res_desc->Type, &tmp, D3DXPT_FLOAT);
1747 tmp = ((ivalue & 0xff000000) >> 24) * INT_FLOAT_MULTI_INVERSE;
1748 set_number(expected_value + 3, res_desc->Type, &tmp, D3DXPT_FLOAT);
1750 ok(hr == D3D_OK, "%u - %s: SetInt failed, got %#x, expected %#x\n",
1751 i, res_full_name, hr, D3D_OK);
1753 else
1755 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetInt failed, got %#x, expected %#x\n",
1756 i, res_full_name, hr, D3DERR_INVALIDCALL);
1758 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
1759 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
1761 /* SetIntArray */
1762 *input_value = 123456;
1763 for (l = 0; l < res_desc->Bytes / sizeof(*input_value); ++l)
1765 *(input_value + l) = *(input_value + l - 1) + 23;
1767 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
1768 hr = effect->lpVtbl->SetIntArray(effect, parameter, (INT *)input_value, res_desc->Bytes / sizeof(*input_value));
1769 if (res_desc->Class == D3DXPC_SCALAR
1770 || res_desc->Class == D3DXPC_VECTOR
1771 || res_desc->Class == D3DXPC_MATRIX_ROWS)
1773 for (l = 0; l < res_desc->Bytes / sizeof(*input_value); ++l)
1775 set_number(expected_value + l, res_desc->Type, input_value + l, D3DXPT_INT);
1777 ok(hr == D3D_OK, "%u - %s: SetIntArray failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1779 else
1781 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetIntArray failed, got %#x, expected %#x\n",
1782 i, res_full_name, hr, D3DERR_INVALIDCALL);
1784 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
1785 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
1787 /* SetFloat */
1788 fvalue = 1.33;
1789 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
1790 hr = effect->lpVtbl->SetFloat(effect, parameter, fvalue);
1791 if (!res_desc->Elements && res_desc->Rows == 1 && res_desc->Columns == 1)
1793 set_number(expected_value, res_desc->Type, &fvalue, D3DXPT_FLOAT);
1794 ok(hr == D3D_OK, "%u - %s: SetFloat failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1796 else
1798 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetFloat failed, got %#x, expected %#x\n",
1799 i, res_full_name, hr, D3DERR_INVALIDCALL);
1801 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
1802 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
1804 /* SetFloatArray */
1805 fvalue = 1.33;
1806 for (l = 0; l < res_desc->Bytes / sizeof(fvalue); ++l)
1808 *(input_value + l) = *(DWORD *)&fvalue;
1809 fvalue += 1.12;
1811 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
1812 hr = effect->lpVtbl->SetFloatArray(effect, parameter, (FLOAT *)input_value, res_desc->Bytes / sizeof(*input_value));
1813 if (res_desc->Class == D3DXPC_SCALAR
1814 || res_desc->Class == D3DXPC_VECTOR
1815 || res_desc->Class == D3DXPC_MATRIX_ROWS)
1817 for (l = 0; l < res_desc->Bytes / sizeof(*input_value); ++l)
1819 set_number(expected_value + l, res_desc->Type, input_value + l, D3DXPT_FLOAT);
1821 ok(hr == D3D_OK, "%u - %s: SetFloatArray failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1823 else
1825 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetFloatArray failed, got %#x, expected %#x\n",
1826 i, res_full_name, hr, D3DERR_INVALIDCALL);
1828 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
1829 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
1831 /* SetVector */
1832 fvalue = -1.33;
1833 for (l = 0; l < 4; ++l)
1835 *(input_value + l) = *(DWORD *)&fvalue;
1836 fvalue += 1.12;
1838 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
1839 hr = effect->lpVtbl->SetVector(effect, parameter, (D3DXVECTOR4 *)input_value);
1840 if (!res_desc->Elements &&
1841 (res_desc->Class == D3DXPC_SCALAR
1842 || res_desc->Class == D3DXPC_VECTOR))
1844 /* only values between 0 and INT_FLOAT_MULTI are valid */
1845 if (res_desc->Type == D3DXPT_INT && res_desc->Bytes == 4)
1847 *expected_value = (DWORD)(max(min(*(FLOAT *)(input_value + 2), 1.0f), 0.0f) * INT_FLOAT_MULTI);
1848 *expected_value += ((DWORD)(max(min(*(FLOAT *)(input_value + 1), 1.0f), 0.0f) * INT_FLOAT_MULTI)) << 8;
1849 *expected_value += ((DWORD)(max(min(*(FLOAT *)input_value, 1.0f), 0.0f) * INT_FLOAT_MULTI)) << 16;
1850 *expected_value += ((DWORD)(max(min(*(FLOAT *)(input_value + 3), 1.0f), 0.0f) * INT_FLOAT_MULTI)) << 24;
1852 else
1854 for (l = 0; l < 4; ++l)
1856 set_number(expected_value + l, res_desc->Type, input_value + l, D3DXPT_FLOAT);
1859 ok(hr == D3D_OK, "%u - %s: SetVector failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1861 else
1863 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetVector failed, got %#x, expected %#x\n",
1864 i, res_full_name, hr, D3DERR_INVALIDCALL);
1866 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
1867 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
1869 /* SetVectorArray */
1870 for (element = 0; element < res_desc->Elements + 1; ++element)
1872 fvalue = 1.33;
1873 for (l = 0; l < element * 4; ++l)
1875 *(input_value + l) = *(DWORD *)&fvalue;
1876 fvalue += 1.12;
1878 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
1879 hr = effect->lpVtbl->SetVectorArray(effect, parameter, (D3DXVECTOR4 *)input_value, element);
1880 if (res_desc->Elements && res_desc->Class == D3DXPC_VECTOR && element <= res_desc->Elements)
1882 UINT m;
1884 for (m = 0; m < element; ++m)
1886 for (l = 0; l < res_desc->Columns; ++l)
1888 set_number(expected_value + m * res_desc->Columns + l, res_desc->Type, input_value + m * 4 + l, D3DXPT_FLOAT);
1891 ok(hr == D3D_OK, "%u - %s: SetVectorArray failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1893 else
1895 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetVectorArray failed, got %#x, expected %#x\n",
1896 i, res_full_name, hr, D3DERR_INVALIDCALL);
1898 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
1899 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
1902 /* SetMatrix */
1903 fvalue = 1.33;
1904 for (l = 0; l < 16; ++l)
1906 *(input_value + l) = *(DWORD *)&fvalue;
1907 fvalue += 1.12;
1909 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
1910 hr = effect->lpVtbl->SetMatrix(effect, parameter, (D3DXMATRIX *)input_value);
1911 if (!res_desc->Elements && res_desc->Class == D3DXPC_MATRIX_ROWS)
1913 for (l = 0; l < 4; ++l)
1915 UINT m;
1917 for (m = 0; m < 4; ++m)
1919 if (m < res_desc->Rows && l < res_desc->Columns)
1920 set_number(expected_value + l + m * res_desc->Columns, res_desc->Type,
1921 input_value + l + m * 4, D3DXPT_FLOAT);
1925 ok(hr == D3D_OK, "%u - %s: SetMatrix failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1927 else
1929 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrix failed, got %#x, expected %#x\n",
1930 i, res_full_name, hr, D3DERR_INVALIDCALL);
1932 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
1933 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
1935 /* SetMatrixArray */
1936 for (element = 0; element < res_desc->Elements + 1; ++element)
1938 fvalue = 1.33;
1939 for (l = 0; l < element * 16; ++l)
1941 *(input_value + l) = *(DWORD *)&fvalue;
1942 fvalue += 1.12;
1944 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
1945 hr = effect->lpVtbl->SetMatrixArray(effect, parameter, (D3DXMATRIX *)input_value, element);
1946 if (res_desc->Class == D3DXPC_MATRIX_ROWS && element <= res_desc->Elements)
1948 UINT n;
1950 for (n = 0; n < element; ++n)
1952 for (l = 0; l < 4; ++l)
1954 UINT m;
1956 for (m = 0; m < 4; ++m)
1958 if (m < res_desc->Rows && l < res_desc->Columns)
1959 set_number(expected_value + l + m * res_desc->Columns + n * res_desc->Columns * res_desc->Rows,
1960 res_desc->Type, input_value + l + m * 4 + n * 16, D3DXPT_FLOAT);
1965 ok(hr == D3D_OK, "%u - %s: SetMatrixArray failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1967 else
1969 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrixArray failed, got %#x, expected %#x\n",
1970 i, res_full_name, hr, D3DERR_INVALIDCALL);
1972 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
1973 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
1976 /* SetMatrixTranspose */
1977 fvalue = 1.33;
1978 for (l = 0; l < 16; ++l)
1980 *(input_value + l) = *(DWORD *)&fvalue;
1981 fvalue += 1.12;
1983 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
1984 hr = effect->lpVtbl->SetMatrixTranspose(effect, parameter, (D3DXMATRIX *)input_value);
1985 if (!res_desc->Elements && res_desc->Class == D3DXPC_MATRIX_ROWS)
1987 for (l = 0; l < 4; ++l)
1989 UINT m;
1991 for (m = 0; m < 4; ++m)
1993 if (m < res_desc->Rows && l < res_desc->Columns)
1994 set_number(expected_value + l + m * res_desc->Columns, res_desc->Type,
1995 input_value + l * 4 + m, D3DXPT_FLOAT);
1999 ok(hr == D3D_OK, "%u - %s: SetMatrixTranspose failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
2001 else
2003 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrixTranspose failed, got %#x, expected %#x\n",
2004 i, res_full_name, hr, D3DERR_INVALIDCALL);
2006 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
2007 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
2010 count = effect->lpVtbl->Release(effect);
2011 ok(!count, "Release failed %u\n", count);
2015 START_TEST(effect)
2017 HWND wnd;
2018 IDirect3D9 *d3d;
2019 IDirect3DDevice9 *device;
2020 D3DPRESENT_PARAMETERS d3dpp;
2021 HRESULT hr;
2022 ULONG count;
2024 wnd = CreateWindow("static", "d3dx9_test", 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL);
2025 d3d = Direct3DCreate9(D3D_SDK_VERSION);
2026 if (!wnd) {
2027 skip("Couldn't create application window\n");
2028 return;
2030 if (!d3d) {
2031 skip("Couldn't create IDirect3D9 object\n");
2032 DestroyWindow(wnd);
2033 return;
2036 ZeroMemory(&d3dpp, sizeof(d3dpp));
2037 d3dpp.Windowed = TRUE;
2038 d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
2039 hr = IDirect3D9_CreateDevice(d3d, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, wnd, D3DCREATE_MIXED_VERTEXPROCESSING, &d3dpp, &device);
2040 if (FAILED(hr)) {
2041 skip("Failed to create IDirect3DDevice9 object %#x\n", hr);
2042 IDirect3D9_Release(d3d);
2043 DestroyWindow(wnd);
2044 return;
2047 test_create_effect_and_pool(device);
2048 test_create_effect_compiler();
2049 test_effect_parameter_value(device);
2051 count = IDirect3DDevice9_Release(device);
2052 ok(count == 0, "The device was not properly freed: refcount %u\n", count);
2054 count = IDirect3D9_Release(d3d);
2055 ok(count == 0, "Release failed %u\n", count);
2057 DestroyWindow(wnd);