d3dx9: Avoid LPCVOID.
[wine/multimedia.git] / dlls / d3dx9_36 / tests / effect.c
blobfb3647ab4052926b9ebd2c4feb34effcb7a86887
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, const void *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, const void *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(const void *data)
98 return !!*(BOOL *)data;
101 static void set_number(void *outdata, D3DXPARAMETER_TYPE outtype, const void *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 ID3DXEffectStateManager *manager = (ID3DXEffectStateManager *)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, (ID3DXEffectStateManager *)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 const char *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(void *)}, 0},
814 {"s_2", {"s_2", NULL, D3DXPC_OBJECT, D3DXPT_STRING, 0, 0, 2, 0, 0, 0, 2 * sizeof(void *)}, 0},
815 {"tex", {"tex", NULL, D3DXPC_OBJECT, D3DXPT_TEXTURE2D, 0, 0, 0, 0, 0, 0, sizeof(void *)}, 0},
816 {"v", {"v", NULL, D3DXPC_OBJECT, D3DXPT_VERTEXSHADER, 0, 0, 0, 0, 0, 0, sizeof(void *)}, 0},
817 {"v_2", {"v_2", NULL, D3DXPC_OBJECT, D3DXPT_VERTEXSHADER, 0, 0, 2, 0, 0, 0, 2 * sizeof(void *)}, 0},
818 {"p", {"p", NULL, D3DXPC_OBJECT, D3DXPT_PIXELSHADER, 0, 0, 0, 0, 0, 0, sizeof(void *)}, 0},
819 {"p_2", {"p_2", NULL, D3DXPC_OBJECT, D3DXPT_PIXELSHADER, 0, 0, 2, 0, 0, 0, 2 * sizeof(void *)}, 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 /* Multiple of 16 to cover complete matrices */
889 #define EFFECT_PARAMETER_VALUE_ARRAY_SIZE 48
890 /* Constants for special INT/FLOAT conversation */
891 #define INT_FLOAT_MULTI 255.0f
892 #define INT_FLOAT_MULTI_INVERSE (1/INT_FLOAT_MULTI)
894 static void test_effect_parameter_value_GetValue(const struct test_effect_parameter_value_result *res,
895 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
897 const D3DXPARAMETER_DESC *res_desc = &res->desc;
898 const char *res_full_name = res->full_name;
899 DWORD value[EFFECT_PARAMETER_VALUE_ARRAY_SIZE];
900 HRESULT hr;
901 UINT l;
903 memset(value, 0xab, sizeof(value));
904 hr = effect->lpVtbl->GetValue(effect, parameter, value, res_desc->Bytes);
905 if (res_desc->Class == D3DXPC_SCALAR
906 || res_desc->Class == D3DXPC_VECTOR
907 || res_desc->Class == D3DXPC_MATRIX_ROWS)
909 ok(hr == D3D_OK, "%u - %s: GetValue failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
911 for (l = 0; l < res_desc->Bytes / sizeof(*value); ++l)
913 ok(value[l] == res_value[l], "%u - %s: GetValue value[%u] failed, got %#x, expected %#x\n",
914 i, res_full_name, l, value[l], res_value[l]);
917 for (l = res_desc->Bytes / sizeof(*value); l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l)
919 ok(value[l] == 0xabababab, "%u - %s: GetValue value[%u] failed, got %#x, expected %#x\n",
920 i, res_full_name, l, value[l], 0xabababab);
923 else if (res_desc->Class == D3DXPC_OBJECT)
925 switch (res_desc->Type)
927 case D3DXPT_PIXELSHADER:
928 case D3DXPT_VERTEXSHADER:
929 case D3DXPT_TEXTURE2D:
930 ok(hr == D3D_OK, "%u - %s: GetValue failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
932 for (l = 0; l < (res_desc->Elements ? res_desc->Elements : 1); ++l)
934 IUnknown *unk = *((IUnknown **)value + l);
935 if (unk) IUnknown_Release(unk);
937 break;
939 case D3DXPT_STRING:
940 ok(hr == D3D_OK, "%u - %s: GetValue failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
941 break;
943 default:
944 ok(0, "Type is %u, this should not happen!\n", res_desc->Type);
945 break;
948 else
950 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetValue failed, got %#x, expected %#x\n",
951 i, res_full_name, hr, D3DERR_INVALIDCALL);
953 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l)
955 ok(value[l] == 0xabababab, "%u - %s: GetValue value[%u] failed, got %#x, expected %#x\n",
956 i, res_full_name, l, value[l], 0xabababab);
961 static void test_effect_parameter_value_GetBool(const struct test_effect_parameter_value_result *res,
962 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
964 const D3DXPARAMETER_DESC *res_desc = &res->desc;
965 const char *res_full_name = res->full_name;
966 BOOL bvalue = 0xabababab;
967 HRESULT hr;
969 hr = effect->lpVtbl->GetBool(effect, parameter, &bvalue);
970 if (!res_desc->Elements && res_desc->Rows == 1 && res_desc->Columns == 1)
972 ok(hr == D3D_OK, "%u - %s: GetBool failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
973 ok(bvalue == get_bool(res_value), "%u - %s: GetBool bvalue failed, got %#x, expected %#x\n",
974 i, res_full_name, bvalue, get_bool(res_value));
976 else
978 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetBool failed, got %#x, expected %#x\n",
979 i, res_full_name, hr, D3DERR_INVALIDCALL);
980 ok(bvalue == 0xabababab, "%u - %s: GetBool bvalue failed, got %#x, expected %#x\n",
981 i, res_full_name, bvalue, 0xabababab);
985 static void test_effect_parameter_value_GetBoolArray(const struct test_effect_parameter_value_result *res,
986 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
988 const D3DXPARAMETER_DESC *res_desc = &res->desc;
989 const char *res_full_name = res->full_name;
990 BOOL bavalue[EFFECT_PARAMETER_VALUE_ARRAY_SIZE];
991 HRESULT hr;
992 UINT l, err = 0;
994 memset(bavalue, 0xab, sizeof(bavalue));
995 hr = effect->lpVtbl->GetBoolArray(effect, parameter, bavalue, res_desc->Bytes / sizeof(*bavalue));
996 if (res_desc->Class == D3DXPC_SCALAR
997 || res_desc->Class == D3DXPC_VECTOR
998 || res_desc->Class == D3DXPC_MATRIX_ROWS)
1000 ok(hr == D3D_OK, "%u - %s: GetBoolArray failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1002 for (l = 0; l < res_desc->Bytes / sizeof(*bavalue); ++l)
1004 if (bavalue[l] != get_bool(&res_value[l])) ++err;
1007 for (l = res_desc->Bytes / sizeof(*bavalue); l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l)
1009 if (bavalue[l] != 0xabababab) ++err;
1012 else
1014 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetBoolArray failed, got %#x, expected %#x\n",
1015 i, res_full_name, hr, D3DERR_INVALIDCALL);
1017 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (bavalue[l] != 0xabababab) ++err;
1019 ok(!err, "%u - %s: GetBoolArray failed with %u errors\n", i, res_full_name, err);
1022 static void test_effect_parameter_value_GetInt(const struct test_effect_parameter_value_result *res,
1023 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1025 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1026 const char *res_full_name = res->full_name;
1027 INT ivalue = 0xabababab;
1028 HRESULT hr;
1030 hr = effect->lpVtbl->GetInt(effect, parameter, &ivalue);
1031 if (!res_desc->Elements && res_desc->Columns == 1 && res_desc->Rows == 1)
1033 ok(hr == D3D_OK, "%u - %s: GetInt failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1034 ok(ivalue == get_int(res_desc->Type, res_value), "%u - %s: GetInt ivalue failed, got %i, expected %i\n",
1035 i, res_full_name, ivalue, get_int(res_desc->Type, res_value));
1037 else if(!res_desc->Elements && res_desc->Type == D3DXPT_FLOAT &&
1038 ((res_desc->Class == D3DXPC_VECTOR && res_desc->Columns != 2) ||
1039 (res_desc->Class == D3DXPC_MATRIX_ROWS && res_desc->Rows != 2 && res_desc->Columns == 1)))
1041 INT tmp;
1043 ok(hr == D3D_OK, "%u - %s: GetInt failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1045 tmp = (INT)(min(max(0.0f, *((FLOAT *)res_value + 2)), 1.0f) * INT_FLOAT_MULTI);
1046 tmp += ((INT)(min(max(0.0f, *((FLOAT *)res_value + 1)), 1.0f) * INT_FLOAT_MULTI)) << 8;
1047 tmp += ((INT)(min(max(0.0f, *((FLOAT *)res_value + 0)), 1.0f) * INT_FLOAT_MULTI)) << 16;
1048 if (res_desc->Columns * res_desc->Rows > 3)
1050 tmp += ((INT)(min(max(0.0f, *((FLOAT *)res_value + 3)), 1.0f) * INT_FLOAT_MULTI)) << 24;
1053 ok(ivalue == tmp, "%u - %s: GetInt ivalue failed, got %x, expected %x\n",
1054 i, res_full_name, ivalue, tmp);
1056 else
1058 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetInt failed, got %#x, expected %#x\n",
1059 i, res_full_name, hr, D3DERR_INVALIDCALL);
1060 ok(ivalue == 0xabababab, "%u - %s: GetInt ivalue failed, got %i, expected %i\n",
1061 i, res_full_name, ivalue, 0xabababab);
1065 static void test_effect_parameter_value_GetIntArray(const struct test_effect_parameter_value_result *res,
1066 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1068 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1069 const char *res_full_name = res->full_name;
1070 INT iavalue[EFFECT_PARAMETER_VALUE_ARRAY_SIZE];
1071 HRESULT hr;
1072 UINT l, err = 0;
1074 memset(iavalue, 0xab, sizeof(iavalue));
1075 hr = effect->lpVtbl->GetIntArray(effect, parameter, iavalue, res_desc->Bytes / sizeof(*iavalue));
1076 if (res_desc->Class == D3DXPC_SCALAR
1077 || res_desc->Class == D3DXPC_VECTOR
1078 || res_desc->Class == D3DXPC_MATRIX_ROWS)
1080 ok(hr == D3D_OK, "%u - %s: GetIntArray failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1082 for (l = 0; l < res_desc->Bytes / sizeof(*iavalue); ++l)
1084 if (iavalue[l] != get_int(res_desc->Type, &res_value[l])) ++err;
1087 for (l = res_desc->Bytes / sizeof(*iavalue); l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l)
1089 if (iavalue[l] != 0xabababab) ++err;
1092 else
1094 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetIntArray failed, got %#x, expected %#x\n",
1095 i, res_full_name, hr, D3DERR_INVALIDCALL);
1097 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (iavalue[l] != 0xabababab) ++err;
1099 ok(!err, "%u - %s: GetIntArray failed with %u errors\n", i, res_full_name, err);
1102 static void test_effect_parameter_value_GetFloat(const struct test_effect_parameter_value_result *res,
1103 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1105 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1106 const char *res_full_name = res->full_name;
1107 HRESULT hr;
1108 DWORD cmp = 0xabababab;
1109 FLOAT fvalue = *(FLOAT *)&cmp;
1111 hr = effect->lpVtbl->GetFloat(effect, parameter, &fvalue);
1112 if (!res_desc->Elements && res_desc->Columns == 1 && res_desc->Rows == 1)
1114 ok(hr == D3D_OK, "%u - %s: GetFloat failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1115 ok(compare_float(fvalue, get_float(res_desc->Type, res_value), 512), "%u - %s: GetFloat fvalue failed, got %f, expected %f\n",
1116 i, res_full_name, fvalue, get_float(res_desc->Type, res_value));
1118 else
1120 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetFloat failed, got %#x, expected %#x\n",
1121 i, res_full_name, hr, D3DERR_INVALIDCALL);
1122 ok(fvalue == *(FLOAT *)&cmp, "%u - %s: GetFloat fvalue failed, got %f, expected %f\n",
1123 i, res_full_name, fvalue, *(FLOAT *)&cmp);
1127 static void test_effect_parameter_value_GetFloatArray(const struct test_effect_parameter_value_result *res,
1128 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1130 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1131 const char *res_full_name = res->full_name;
1132 FLOAT favalue[EFFECT_PARAMETER_VALUE_ARRAY_SIZE];
1133 HRESULT hr;
1134 UINT l, err = 0;
1135 DWORD cmp = 0xabababab;
1137 memset(favalue, 0xab, sizeof(favalue));
1138 hr = effect->lpVtbl->GetFloatArray(effect, parameter, favalue, res_desc->Bytes / sizeof(*favalue));
1139 if (res_desc->Class == D3DXPC_SCALAR
1140 || res_desc->Class == D3DXPC_VECTOR
1141 || res_desc->Class == D3DXPC_MATRIX_ROWS)
1143 ok(hr == D3D_OK, "%u - %s: GetFloatArray failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1145 for (l = 0; l < res_desc->Bytes / sizeof(*favalue); ++l)
1147 if (!compare_float(favalue[l], get_float(res_desc->Type, &res_value[l]), 512)) ++err;
1150 for (l = res_desc->Bytes / sizeof(*favalue); l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l)
1152 if (favalue[l] != *(FLOAT *)&cmp) ++err;
1155 else
1157 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetFloatArray failed, got %#x, expected %#x\n",
1158 i, res_full_name, hr, D3DERR_INVALIDCALL);
1160 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (favalue[l] != *(FLOAT *)&cmp) ++err;
1162 ok(!err, "%u - %s: GetFloatArray failed with %u errors\n", i, res_full_name, err);
1165 static void test_effect_parameter_value_GetVector(const struct test_effect_parameter_value_result *res,
1166 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1168 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1169 const char *res_full_name = res->full_name;
1170 HRESULT hr;
1171 DWORD cmp = 0xabababab;
1172 FLOAT fvalue[4];
1173 UINT l, err = 0;
1175 memset(fvalue, 0xab, sizeof(fvalue));
1176 hr = effect->lpVtbl->GetVector(effect, parameter, (D3DXVECTOR4 *)&fvalue);
1177 if (!res_desc->Elements &&
1178 (res_desc->Class == D3DXPC_SCALAR || res_desc->Class == D3DXPC_VECTOR) &&
1179 res_desc->Type == D3DXPT_INT && res_desc->Bytes == 4)
1181 DWORD tmp;
1183 ok(hr == D3D_OK, "%u - %s: GetVector failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1185 tmp = (DWORD)(*(fvalue + 2) * INT_FLOAT_MULTI);
1186 tmp += ((DWORD)(*(fvalue + 1) * INT_FLOAT_MULTI)) << 8;
1187 tmp += ((DWORD)(*fvalue * INT_FLOAT_MULTI)) << 16;
1188 tmp += ((DWORD)(*(fvalue + 3) * INT_FLOAT_MULTI)) << 24;
1190 if (*res_value != tmp) ++err;
1192 else if (!res_desc->Elements && (res_desc->Class == D3DXPC_SCALAR || res_desc->Class == D3DXPC_VECTOR))
1194 ok(hr == D3D_OK, "%u - %s: GetVector failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1196 for (l = 0; l < res_desc->Columns; ++l)
1198 if (!compare_float(fvalue[l], get_float(res_desc->Type, &res_value[l]), 512)) ++err;
1201 for (l = res_desc->Columns; l < 4; ++l) if (fvalue[l] != 0.0f) ++err;
1203 else
1205 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetVector failed, got %#x, expected %#x\n",
1206 i, res_full_name, hr, D3DERR_INVALIDCALL);
1208 for (l = 0; l < 4; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1210 ok(!err, "%u - %s: GetVector failed with %u errors\n", i, res_full_name, err);
1213 static void test_effect_parameter_value_GetVectorArray(const struct test_effect_parameter_value_result *res,
1214 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1216 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1217 const char *res_full_name = res->full_name;
1218 HRESULT hr;
1219 DWORD cmp = 0xabababab;
1220 FLOAT fvalue[EFFECT_PARAMETER_VALUE_ARRAY_SIZE];
1221 UINT l, k, element, err = 0;
1223 for (element = 0; element <= res_desc->Elements + 1; ++element)
1225 memset(fvalue, 0xab, sizeof(fvalue));
1226 hr = effect->lpVtbl->GetVectorArray(effect, parameter, (D3DXVECTOR4 *)&fvalue, element);
1227 if (!element)
1229 ok(hr == D3D_OK, "%u - %s[%u]: GetVectorArray failed, got %#x, expected %#x\n", i, res_full_name, element, hr, D3D_OK);
1231 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1233 else if (element <= res_desc->Elements && res_desc->Class == D3DXPC_VECTOR)
1235 ok(hr == D3D_OK, "%u - %s[%u]: GetVectorArray failed, got %#x, expected %#x\n", i, res_full_name, element, hr, D3D_OK);
1237 for (k = 0; k < element; ++k)
1239 for (l = 0; l < res_desc->Columns; ++l)
1241 if (!compare_float(fvalue[l + k * 4], get_float(res_desc->Type,
1242 &res_value[l + k * res_desc->Columns]), 512))
1243 ++err;
1246 for (l = res_desc->Columns; l < 4; ++l) if (fvalue[l + k * 4] != 0.0f) ++err;
1249 for (l = element * 4; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1251 else
1253 ok(hr == D3DERR_INVALIDCALL, "%u - %s[%u]: GetVectorArray failed, got %#x, expected %#x\n",
1254 i, res_full_name, element, hr, D3DERR_INVALIDCALL);
1256 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1258 ok(!err, "%u - %s[%u]: GetVectorArray failed with %u errors\n", i, res_full_name, element, err);
1262 static void test_effect_parameter_value_GetMatrix(const struct test_effect_parameter_value_result *res,
1263 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1265 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1266 const char *res_full_name = res->full_name;
1267 HRESULT hr;
1268 DWORD cmp = 0xabababab;
1269 FLOAT fvalue[16];
1270 UINT l, k, err = 0;
1272 memset(fvalue, 0xab, sizeof(fvalue));
1273 hr = effect->lpVtbl->GetMatrix(effect, parameter, (D3DXMATRIX *)&fvalue);
1274 if (!res_desc->Elements && res_desc->Class == D3DXPC_MATRIX_ROWS)
1276 ok(hr == D3D_OK, "%u - %s: GetMatrix failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1278 for (k = 0; k < 4; ++k)
1280 for (l = 0; l < 4; ++l)
1282 if (k < res_desc->Columns && l < res_desc->Rows)
1284 if (!compare_float(fvalue[l * 4 + k], get_float(res_desc->Type,
1285 &res_value[l * res_desc->Columns + k]), 512))
1286 ++err;
1288 else if (fvalue[l * 4 + k] != 0.0f) ++err;
1292 else
1294 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrix failed, got %#x, expected %#x\n",
1295 i, res_full_name, hr, D3DERR_INVALIDCALL);
1297 for (l = 0; l < sizeof(fvalue) / sizeof(*fvalue); ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1299 ok(!err, "%u - %s: GetMatrix failed with %u errors\n", i, res_full_name, err);
1302 static void test_effect_parameter_value_GetMatrixArray(const struct test_effect_parameter_value_result *res,
1303 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1305 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1306 const char *res_full_name = res->full_name;
1307 HRESULT hr;
1308 DWORD cmp = 0xabababab;
1309 FLOAT fvalue[EFFECT_PARAMETER_VALUE_ARRAY_SIZE];
1310 UINT l, k, m, element, err = 0;
1312 for (element = 0; element <= res_desc->Elements + 1; ++element)
1314 memset(fvalue, 0xab, sizeof(fvalue));
1315 hr = effect->lpVtbl->GetMatrixArray(effect, parameter, (D3DXMATRIX *)&fvalue, element);
1316 if (!element)
1318 ok(hr == D3D_OK, "%u - %s[%u]: GetMatrixArray failed, got %#x, expected %#x\n", i, res_full_name, element, hr, D3D_OK);
1320 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1322 else if (element <= res_desc->Elements && res_desc->Class == D3DXPC_MATRIX_ROWS)
1324 ok(hr == D3D_OK, "%u - %s[%u]: GetMatrixArray failed, got %#x, expected %#x\n", i, res_full_name, element, hr, D3D_OK);
1326 for (m = 0; m < element; ++m)
1328 for (k = 0; k < 4; ++k)
1330 for (l = 0; l < 4; ++l)
1332 if (k < res_desc->Columns && l < res_desc->Rows)
1334 if (!compare_float(fvalue[m * 16 + l * 4 + k], get_float(res_desc->Type,
1335 &res_value[m * res_desc->Columns * res_desc->Rows + l * res_desc->Columns + k]), 512))
1336 ++err;
1338 else if (fvalue[m * 16 + l * 4 + k] != 0.0f) ++err;
1343 for (l = element * 16; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1345 else
1347 ok(hr == D3DERR_INVALIDCALL, "%u - %s[%u]: GetMatrixArray failed, got %#x, expected %#x\n",
1348 i, res_full_name, element, hr, D3DERR_INVALIDCALL);
1350 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1352 ok(!err, "%u - %s[%u]: GetMatrixArray failed with %u errors\n", i, res_full_name, element, err);
1356 static void test_effect_parameter_value_GetMatrixPointerArray(const struct test_effect_parameter_value_result *res,
1357 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1359 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1360 const char *res_full_name = res->full_name;
1361 HRESULT hr;
1362 DWORD cmp = 0xabababab;
1363 FLOAT fvalue[EFFECT_PARAMETER_VALUE_ARRAY_SIZE];
1364 D3DXMATRIX *matrix_pointer_array[sizeof(fvalue)/sizeof(D3DXMATRIX)];
1365 UINT l, k, m, element, err = 0;
1367 for (element = 0; element <= res_desc->Elements + 1; ++element)
1369 memset(fvalue, 0xab, sizeof(fvalue));
1370 for (l = 0; l < element; ++l)
1372 matrix_pointer_array[l] = (D3DXMATRIX *)&fvalue[l * sizeof(**matrix_pointer_array) / sizeof(FLOAT)];
1374 hr = effect->lpVtbl->GetMatrixPointerArray(effect, parameter, matrix_pointer_array, element);
1375 if (!element)
1377 ok(hr == D3D_OK, "%u - %s[%u]: GetMatrixPointerArray failed, got %#x, expected %#x\n",
1378 i, res_full_name, element, hr, D3D_OK);
1380 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1382 else if (element <= res_desc->Elements && res_desc->Class == D3DXPC_MATRIX_ROWS)
1384 ok(hr == D3D_OK, "%u - %s[%u]: GetMatrixPointerArray failed, got %#x, expected %#x\n",
1385 i, res_full_name, element, hr, D3D_OK);
1387 for (m = 0; m < element; ++m)
1389 for (k = 0; k < 4; ++k)
1391 for (l = 0; l < 4; ++l)
1393 if (k < res_desc->Columns && l < res_desc->Rows)
1395 if (!compare_float(fvalue[m * 16 + l * 4 + k], get_float(res_desc->Type,
1396 &res_value[m * res_desc->Columns * res_desc->Rows + l * res_desc->Columns + k]), 512))
1397 ++err;
1399 else if (fvalue[m * 16 + l * 4 + k] != 0.0f) ++err;
1404 for (l = element * 16; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1406 else
1408 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1410 ok(hr == D3DERR_INVALIDCALL, "%u - %s[%u]: GetMatrixPointerArray failed, got %#x, expected %#x\n",
1411 i, res_full_name, element, hr, D3DERR_INVALIDCALL);
1413 ok(!err, "%u - %s[%u]: GetMatrixPointerArray failed with %u errors\n", i, res_full_name, element, err);
1417 static void test_effect_parameter_value_GetMatrixTranspose(const struct test_effect_parameter_value_result *res,
1418 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1420 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1421 const char *res_full_name = res->full_name;
1422 HRESULT hr;
1423 DWORD cmp = 0xabababab;
1424 FLOAT fvalue[16];
1425 UINT l, k, err = 0;
1427 memset(fvalue, 0xab, sizeof(fvalue));
1428 hr = effect->lpVtbl->GetMatrixTranspose(effect, parameter, (D3DXMATRIX *)&fvalue);
1429 if (!res_desc->Elements && res_desc->Class == D3DXPC_MATRIX_ROWS)
1431 ok(hr == D3D_OK, "%u - %s: GetMatrixTranspose failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1433 for (k = 0; k < 4; ++k)
1435 for (l = 0; l < 4; ++l)
1437 if (k < res_desc->Columns && l < res_desc->Rows)
1439 if (!compare_float(fvalue[l + k * 4], get_float(res_desc->Type,
1440 &res_value[l * res_desc->Columns + k]), 512))
1441 ++err;
1443 else if (fvalue[l + k * 4] != 0.0f) ++err;
1447 else if (!res_desc->Elements && (res_desc->Class == D3DXPC_VECTOR || res_desc->Class == D3DXPC_SCALAR))
1449 ok(hr == D3D_OK, "%u - %s: GetMatrixTranspose failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1451 for (k = 0; k < 4; ++k)
1453 for (l = 0; l < 4; ++l)
1455 if (k < res_desc->Columns && l < res_desc->Rows)
1457 if (!compare_float(fvalue[l * 4 + k], get_float(res_desc->Type,
1458 &res_value[l * res_desc->Columns + k]), 512))
1459 ++err;
1461 else if (fvalue[l * 4 + k] != 0.0f) ++err;
1465 else
1467 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrixTranspose failed, got %#x, expected %#x\n",
1468 i, res_full_name, hr, D3DERR_INVALIDCALL);
1470 for (l = 0; l < sizeof(fvalue) / sizeof(*fvalue); ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1472 ok(!err, "%u - %s: GetMatrixTranspose failed with %u errors\n", i, res_full_name, err);
1475 static void test_effect_parameter_value_GetMatrixTransposeArray(const struct test_effect_parameter_value_result *res,
1476 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1478 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1479 const char *res_full_name = res->full_name;
1480 HRESULT hr;
1481 DWORD cmp = 0xabababab;
1482 FLOAT fvalue[EFFECT_PARAMETER_VALUE_ARRAY_SIZE];
1483 UINT l, k, m, element, err = 0;
1485 for (element = 0; element <= res_desc->Elements + 1; ++element)
1487 memset(fvalue, 0xab, sizeof(fvalue));
1488 hr = effect->lpVtbl->GetMatrixTransposeArray(effect, parameter, (D3DXMATRIX *)&fvalue, element);
1489 if (!element)
1491 ok(hr == D3D_OK, "%u - %s[%u]: GetMatrixTransposeArray failed, got %#x, expected %#x\n",
1492 i, res_full_name, element, hr, D3D_OK);
1494 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1496 else if (element <= res_desc->Elements && res_desc->Class == D3DXPC_MATRIX_ROWS)
1498 ok(hr == D3D_OK, "%u - %s[%u]: GetMatrixTransposeArray failed, got %#x, expected %#x\n",
1499 i, res_full_name, element, hr, D3D_OK);
1501 for (m = 0; m < element; ++m)
1503 for (k = 0; k < 4; ++k)
1505 for (l = 0; l < 4; ++l)
1507 if (k < res_desc->Columns && l < res_desc->Rows)
1509 if (!compare_float(fvalue[m * 16 + l + k * 4], get_float(res_desc->Type,
1510 &res_value[m * res_desc->Columns * res_desc->Rows + l * res_desc->Columns + k]), 512))
1511 ++err;
1513 else if (fvalue[m * 16 + l + k * 4] != 0.0f) ++err;
1518 for (l = element * 16; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1520 else
1522 ok(hr == D3DERR_INVALIDCALL, "%u - %s[%u]: GetMatrixTransposeArray failed, got %#x, expected %#x\n",
1523 i, res_full_name, element, hr, D3DERR_INVALIDCALL);
1525 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1527 ok(!err, "%u - %s[%u]: GetMatrixTransposeArray failed with %u errors\n", i, res_full_name, element, err);
1531 static void test_effect_parameter_value_GetMatrixTransposePointerArray(const struct test_effect_parameter_value_result *res,
1532 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1534 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1535 const char *res_full_name = res->full_name;
1536 HRESULT hr;
1537 DWORD cmp = 0xabababab;
1538 FLOAT fvalue[EFFECT_PARAMETER_VALUE_ARRAY_SIZE];
1539 D3DXMATRIX *matrix_pointer_array[sizeof(fvalue)/sizeof(D3DXMATRIX)];
1540 UINT l, k, m, element, err = 0;
1542 for (element = 0; element <= res_desc->Elements + 1; ++element)
1544 memset(fvalue, 0xab, sizeof(fvalue));
1545 for (l = 0; l < element; ++l)
1547 matrix_pointer_array[l] = (D3DXMATRIX *)&fvalue[l * sizeof(**matrix_pointer_array) / sizeof(FLOAT)];
1549 hr = effect->lpVtbl->GetMatrixTransposePointerArray(effect, parameter, matrix_pointer_array, element);
1550 if (!element)
1552 ok(hr == D3D_OK, "%u - %s[%u]: GetMatrixTransposePointerArray failed, got %#x, expected %#x\n",
1553 i, res_full_name, element, hr, D3D_OK);
1555 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1557 else if (element <= res_desc->Elements && res_desc->Class == D3DXPC_MATRIX_ROWS)
1559 ok(hr == D3D_OK, "%u - %s[%u]: GetMatrixTransposePointerArray failed, got %#x, expected %#x\n",
1560 i, res_full_name, element, hr, D3D_OK);
1562 for (m = 0; m < element; ++m)
1564 for (k = 0; k < 4; ++k)
1566 for (l = 0; l < 4; ++l)
1568 if (k < res_desc->Columns && l < res_desc->Rows)
1570 if (!compare_float(fvalue[m * 16 + l + k * 4], get_float(res_desc->Type,
1571 &res_value[m * res_desc->Columns * res_desc->Rows + l * res_desc->Columns + k]), 512))
1572 ++err;
1574 else if (fvalue[m * 16 + l + k * 4] != 0.0f) ++err;
1579 for (l = element * 16; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1581 else
1583 ok(hr == D3DERR_INVALIDCALL, "%u - %s[%u]: GetMatrixTransposePointerArray failed, got %#x, expected %#x\n",
1584 i, res_full_name, element, hr, D3DERR_INVALIDCALL);
1586 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l) if (fvalue[l] != *(FLOAT *)&cmp) ++err;
1588 ok(!err, "%u - %s[%u]: GetMatrixTransposePointerArray failed with %u errors\n", i, res_full_name, element, err);
1592 static void test_effect_parameter_value_GetTestGroup(const struct test_effect_parameter_value_result *res,
1593 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1595 test_effect_parameter_value_GetValue(res, effect, res_value, parameter, i);
1596 test_effect_parameter_value_GetBool(res, effect, res_value, parameter, i);
1597 test_effect_parameter_value_GetBoolArray(res, effect, res_value, parameter, i);
1598 test_effect_parameter_value_GetInt(res, effect, res_value, parameter, i);
1599 test_effect_parameter_value_GetIntArray(res, effect, res_value, parameter, i);
1600 test_effect_parameter_value_GetFloat(res, effect, res_value, parameter, i);
1601 test_effect_parameter_value_GetFloatArray(res, effect, res_value, parameter, i);
1602 test_effect_parameter_value_GetVector(res, effect, res_value, parameter, i);
1603 test_effect_parameter_value_GetVectorArray(res, effect, res_value, parameter, i);
1604 test_effect_parameter_value_GetMatrix(res, effect, res_value, parameter, i);
1605 test_effect_parameter_value_GetMatrixArray(res, effect, res_value, parameter, i);
1606 test_effect_parameter_value_GetMatrixPointerArray(res, effect, res_value, parameter, i);
1607 test_effect_parameter_value_GetMatrixTranspose(res, effect, res_value, parameter, i);
1608 test_effect_parameter_value_GetMatrixTransposeArray(res, effect, res_value, parameter, i);
1609 test_effect_parameter_value_GetMatrixTransposePointerArray(res, effect, res_value, parameter, i);
1612 static void test_effect_parameter_value_ResetValue(const struct test_effect_parameter_value_result *res,
1613 ID3DXEffect *effect, const DWORD *res_value, D3DXHANDLE parameter, UINT i)
1615 const D3DXPARAMETER_DESC *res_desc = &res->desc;
1616 const char *res_full_name = res->full_name;
1617 HRESULT hr;
1619 if (res_desc->Class == D3DXPC_SCALAR
1620 || res_desc->Class == D3DXPC_VECTOR
1621 || res_desc->Class == D3DXPC_MATRIX_ROWS)
1623 hr = effect->lpVtbl->SetValue(effect, parameter, res_value, res_desc->Bytes);
1624 ok(hr == D3D_OK, "%u - %s: SetValue failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1626 else
1628 /* nothing to do */
1629 switch (res_desc->Type)
1631 case D3DXPT_PIXELSHADER:
1632 case D3DXPT_VERTEXSHADER:
1633 case D3DXPT_TEXTURE2D:
1634 case D3DXPT_STRING:
1635 break;
1637 default:
1638 ok(0, "Type is %u, this should not happen!\n", res_desc->Type);
1639 break;
1644 static void test_effect_parameter_value(IDirect3DDevice9 *device)
1646 UINT i;
1647 UINT effect_count = sizeof(test_effect_parameter_value_data) / sizeof(*test_effect_parameter_value_data);
1649 for (i = 0; i < effect_count; ++i)
1651 const struct test_effect_parameter_value_result *res = test_effect_parameter_value_data[i].res;
1652 UINT res_count = test_effect_parameter_value_data[i].res_count;
1653 const DWORD *blob = test_effect_parameter_value_data[i].blob;
1654 UINT blob_size = test_effect_parameter_value_data[i].blob_size;
1655 HRESULT hr;
1656 ID3DXEffect *effect;
1657 D3DXEFFECT_DESC edesc;
1658 ULONG count;
1659 UINT k;
1661 hr = D3DXCreateEffect(device, blob, blob_size, NULL, NULL, 0, NULL, &effect, NULL);
1662 ok(hr == D3D_OK, "%u: D3DXCreateEffect failed, got %#x, expected %#x\n", i, hr, D3D_OK);
1664 hr = effect->lpVtbl->GetDesc(effect, &edesc);
1665 ok(hr == D3D_OK, "%u: GetDesc failed, got %#x, expected %#x\n", i, hr, D3D_OK);
1666 ok(edesc.Parameters == res_count, "%u: Parameters failed, got %u, expected %u\n",
1667 i, edesc.Parameters, res_count);
1669 for (k = 0; k < res_count; ++k)
1671 const D3DXPARAMETER_DESC *res_desc = &res[k].desc;
1672 const char *res_full_name = res[k].full_name;
1673 UINT res_value_offset = res[k].value_offset;
1674 D3DXHANDLE parameter;
1675 D3DXPARAMETER_DESC pdesc;
1676 BOOL bvalue;
1677 INT ivalue;
1678 FLOAT fvalue;
1679 DWORD input_value[EFFECT_PARAMETER_VALUE_ARRAY_SIZE];
1680 DWORD expected_value[EFFECT_PARAMETER_VALUE_ARRAY_SIZE];
1681 UINT l, n, m, element;
1682 const D3DXMATRIX *matrix_pointer_array[sizeof(input_value)/sizeof(D3DXMATRIX)];
1684 parameter = effect->lpVtbl->GetParameterByName(effect, NULL, res_full_name);
1685 ok(parameter != NULL, "%u - %s: GetParameterByName failed\n", i, res_full_name);
1687 hr = effect->lpVtbl->GetParameterDesc(effect, parameter, &pdesc);
1688 ok(hr == D3D_OK, "%u - %s: GetParameterDesc failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1690 ok(res_desc->Name ? !strcmp(pdesc.Name, res_desc->Name) : !pdesc.Name,
1691 "%u - %s: GetParameterDesc Name failed, got \"%s\", expected \"%s\"\n",
1692 i, res_full_name, pdesc.Name, res_desc->Name);
1693 ok(res_desc->Semantic ? !strcmp(pdesc.Semantic, res_desc->Semantic) : !pdesc.Semantic,
1694 "%u - %s: GetParameterDesc Semantic failed, got \"%s\", expected \"%s\"\n",
1695 i, res_full_name, pdesc.Semantic, res_desc->Semantic);
1696 ok(res_desc->Class == pdesc.Class, "%u - %s: GetParameterDesc Class failed, got %#x, expected %#x\n",
1697 i, res_full_name, pdesc.Class, res_desc->Class);
1698 ok(res_desc->Type == pdesc.Type, "%u - %s: GetParameterDesc Type failed, got %#x, expected %#x\n",
1699 i, res_full_name, pdesc.Type, res_desc->Type);
1700 ok(res_desc->Rows == pdesc.Rows, "%u - %s: GetParameterDesc Rows failed, got %u, expected %u\n",
1701 i, res_full_name, pdesc.Rows, res_desc->Rows);
1702 ok(res_desc->Columns == pdesc.Columns, "%u - %s: GetParameterDesc Columns failed, got %u, expected %u\n",
1703 i, res_full_name, pdesc.Columns, res_desc->Columns);
1704 ok(res_desc->Elements == pdesc.Elements, "%u - %s: GetParameterDesc Elements failed, got %u, expected %u\n",
1705 i, res_full_name, pdesc.Elements, res_desc->Elements);
1706 ok(res_desc->Annotations == pdesc.Annotations, "%u - %s: GetParameterDesc Annotations failed, got %u, expected %u\n",
1707 i, res_full_name, pdesc.Annotations, res_desc->Annotations);
1708 ok(res_desc->StructMembers == pdesc.StructMembers, "%u - %s: GetParameterDesc StructMembers failed, got %u, expected %u\n",
1709 i, res_full_name, pdesc.StructMembers, res_desc->StructMembers);
1710 ok(res_desc->Flags == pdesc.Flags, "%u - %s: GetParameterDesc Flags failed, got %u, expected %u\n",
1711 i, res_full_name, pdesc.Flags, res_desc->Flags);
1712 ok(res_desc->Bytes == pdesc.Bytes, "%u - %s: GetParameterDesc Bytes, got %u, expected %u\n",
1713 i, res_full_name, pdesc.Bytes, res_desc->Bytes);
1715 /* check size */
1716 ok(EFFECT_PARAMETER_VALUE_ARRAY_SIZE >= res_desc->Bytes / 4 +
1717 (res_desc->Elements ? res_desc->Bytes / 4 / res_desc->Elements : 0),
1718 "%u - %s: Warning: Array size to small\n", i, res_full_name);
1720 test_effect_parameter_value_GetTestGroup(&res[k], effect, &blob[res_value_offset], parameter, i);
1721 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
1722 test_effect_parameter_value_GetTestGroup(&res[k], effect, &blob[res_value_offset], parameter, i);
1725 * check invalid calls
1726 * These will crash:
1727 * effect->lpVtbl->SetBoolArray(effect, parameter, NULL, res_desc->Bytes / sizeof(BOOL));
1728 * effect->lpVtbl->SetIntArray(effect, parameter, NULL, res_desc->Bytes / sizeof(INT));
1729 * effect->lpVtbl->SetFloatArray(effect, parameter, NULL, res_desc->Bytes / sizeof(FLOAT));
1730 * effect->lpVtbl->SetVector(effect, parameter, NULL);
1731 * effect->lpVtbl->SetVectorArray(effect, parameter, NULL, res_desc->Elements ? res_desc->Elements : 1);
1732 * effect->lpVtbl->SetMatrix(effect, parameter, NULL);
1733 * effect->lpVtbl->GetMatrix(effect, parameter, NULL);
1734 * effect->lpVtbl->SetMatrixArray(effect, parameter, NULL, res_desc->Elements ? res_desc->Elements : 1);
1735 * effect->lpVtbl->SetMatrixPointerArray(effect, parameter, NULL, res_desc->Elements ? res_desc->Elements : 1);
1736 * effect->lpVtbl->SetMatrixTranspose(effect, parameter, NULL);
1737 * effect->lpVtbl->SetMatrixTransposeArray(effect, parameter, NULL, res_desc->Elements ? res_desc->Elements : 1);
1738 * effect->lpVtbl->SetMatrixTransposePointerArray(effect, parameter, NULL, res_desc->Elements ? res_desc->Elements : 1);
1739 * effect->lpVtbl->GetValue(effect, parameter, NULL, res_desc->Bytes);
1740 * effect->lpVtbl->SetValue(effect, parameter, NULL, res_desc->Bytes);
1742 hr = effect->lpVtbl->SetBool(effect, NULL, bvalue);
1743 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetBool failed, got %#x, expected %#x\n",
1744 i, res_full_name, hr, D3DERR_INVALIDCALL);
1746 hr = effect->lpVtbl->GetBool(effect, NULL, &bvalue);
1747 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetBool failed, got %#x, expected %#x\n",
1748 i, res_full_name, hr, D3DERR_INVALIDCALL);
1750 hr = effect->lpVtbl->GetBool(effect, parameter, NULL);
1751 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetBool failed, got %#x, expected %#x\n",
1752 i, res_full_name, hr, D3DERR_INVALIDCALL);
1754 hr = effect->lpVtbl->SetBoolArray(effect, NULL, (BOOL *)input_value, res_desc->Bytes / sizeof(BOOL));
1755 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetBoolArray failed, got %#x, expected %#x\n",
1756 i, res_full_name, hr, D3DERR_INVALIDCALL);
1758 hr = effect->lpVtbl->GetBoolArray(effect, NULL, (BOOL *)input_value, res_desc->Bytes / sizeof(BOOL));
1759 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetBoolArray failed, got %#x, expected %#x\n",
1760 i, res_full_name, hr, D3DERR_INVALIDCALL);
1762 hr = effect->lpVtbl->GetBoolArray(effect, parameter, NULL, res_desc->Bytes / sizeof(BOOL));
1763 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetBoolArray failed, got %#x, expected %#x\n",
1764 i, res_full_name, hr, D3DERR_INVALIDCALL);
1766 hr = effect->lpVtbl->SetInt(effect, NULL, ivalue);
1767 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetInt failed, got %#x, expected %#x\n",
1768 i, res_full_name, hr, D3DERR_INVALIDCALL);
1770 hr = effect->lpVtbl->GetInt(effect, NULL, &ivalue);
1771 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetInt failed, got %#x, expected %#x\n",
1772 i, res_full_name, hr, D3DERR_INVALIDCALL);
1774 hr = effect->lpVtbl->GetInt(effect, parameter, NULL);
1775 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetInt failed, got %#x, expected %#x\n",
1776 i, res_full_name, hr, D3DERR_INVALIDCALL);
1778 hr = effect->lpVtbl->SetIntArray(effect, NULL, (INT *)input_value, res_desc->Bytes / sizeof(INT));
1779 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetIntArray failed, got %#x, expected %#x\n",
1780 i, res_full_name, hr, D3DERR_INVALIDCALL);
1782 hr = effect->lpVtbl->GetIntArray(effect, NULL, (INT *)input_value, res_desc->Bytes / sizeof(INT));
1783 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetIntArray failed, got %#x, expected %#x\n",
1784 i, res_full_name, hr, D3DERR_INVALIDCALL);
1786 hr = effect->lpVtbl->GetIntArray(effect, parameter, NULL, res_desc->Bytes / sizeof(INT));
1787 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetIntArray failed, got %#x, expected %#x\n",
1788 i, res_full_name, hr, D3DERR_INVALIDCALL);
1790 hr = effect->lpVtbl->SetFloat(effect, NULL, fvalue);
1791 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetFloat failed, got %#x, expected %#x\n",
1792 i, res_full_name, hr, D3DERR_INVALIDCALL);
1794 hr = effect->lpVtbl->GetFloat(effect, NULL, &fvalue);
1795 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetFloat failed, got %#x, expected %#x\n",
1796 i, res_full_name, hr, D3DERR_INVALIDCALL);
1798 hr = effect->lpVtbl->GetFloat(effect, parameter, NULL);
1799 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetFloat failed, got %#x, expected %#x\n",
1800 i, res_full_name, hr, D3DERR_INVALIDCALL);
1802 hr = effect->lpVtbl->SetFloatArray(effect, NULL, (FLOAT *)input_value, res_desc->Bytes / sizeof(FLOAT));
1803 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetFloatArray failed, got %#x, expected %#x\n",
1804 i, res_full_name, hr, D3DERR_INVALIDCALL);
1806 hr = effect->lpVtbl->GetFloatArray(effect, NULL, (FLOAT *)input_value, res_desc->Bytes / sizeof(FLOAT));
1807 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetFloatArray failed, got %#x, expected %#x\n",
1808 i, res_full_name, hr, D3DERR_INVALIDCALL);
1810 hr = effect->lpVtbl->GetFloatArray(effect, parameter, NULL, res_desc->Bytes / sizeof(FLOAT));
1811 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetFloatArray failed, got %#x, expected %#x\n",
1812 i, res_full_name, hr, D3DERR_INVALIDCALL);
1814 hr = effect->lpVtbl->SetVector(effect, NULL, (D3DXVECTOR4 *)input_value);
1815 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetVector failed, got %#x, expected %#x\n",
1816 i, res_full_name, hr, D3DERR_INVALIDCALL);
1818 hr = effect->lpVtbl->GetVector(effect, NULL, (D3DXVECTOR4 *)input_value);
1819 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetVector failed, got %#x, expected %#x\n",
1820 i, res_full_name, hr, D3DERR_INVALIDCALL);
1822 hr = effect->lpVtbl->GetVector(effect, parameter, NULL);
1823 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetVector failed, got %#x, expected %#x\n",
1824 i, res_full_name, hr, D3DERR_INVALIDCALL);
1826 hr = effect->lpVtbl->SetVectorArray(effect, NULL, (D3DXVECTOR4 *)input_value, res_desc->Elements ? res_desc->Elements : 1);
1827 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetVectorArray failed, got %#x, expected %#x\n",
1828 i, res_full_name, hr, D3DERR_INVALIDCALL);
1830 hr = effect->lpVtbl->GetVectorArray(effect, NULL, (D3DXVECTOR4 *)input_value, res_desc->Elements ? res_desc->Elements : 1);
1831 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetVectorArray failed, got %#x, expected %#x\n",
1832 i, res_full_name, hr, D3DERR_INVALIDCALL);
1834 hr = effect->lpVtbl->GetVectorArray(effect, parameter, NULL, res_desc->Elements ? res_desc->Elements : 1);
1835 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetVectorArray failed, got %#x, expected %#x\n",
1836 i, res_full_name, hr, D3DERR_INVALIDCALL);
1838 hr = effect->lpVtbl->SetMatrix(effect, NULL, (D3DXMATRIX *)input_value);
1839 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrix failed, got %#x, expected %#x\n",
1840 i, res_full_name, hr, D3DERR_INVALIDCALL);
1842 hr = effect->lpVtbl->GetMatrix(effect, NULL, (D3DXMATRIX *)input_value);
1843 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrix failed, got %#x, expected %#x\n",
1844 i, res_full_name, hr, D3DERR_INVALIDCALL);
1846 hr = effect->lpVtbl->SetMatrixArray(effect, NULL, (D3DXMATRIX *)input_value, res_desc->Elements ? res_desc->Elements : 1);
1847 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrixArray failed, got %#x, expected %#x\n",
1848 i, res_full_name, hr, D3DERR_INVALIDCALL);
1850 hr = effect->lpVtbl->GetMatrixArray(effect, NULL, (D3DXMATRIX *)input_value, res_desc->Elements ? res_desc->Elements : 1);
1851 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrixArray failed, got %#x, expected %#x\n",
1852 i, res_full_name, hr, D3DERR_INVALIDCALL);
1854 hr = effect->lpVtbl->GetMatrixArray(effect, parameter, NULL, res_desc->Elements ? res_desc->Elements : 1);
1855 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrixArray failed, got %#x, expected %#x\n",
1856 i, res_full_name, hr, D3DERR_INVALIDCALL);
1858 hr = effect->lpVtbl->SetMatrixPointerArray(effect, NULL, matrix_pointer_array, res_desc->Elements ? res_desc->Elements : 1);
1859 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrixPointerArray failed, got %#x, expected %#x\n",
1860 i, res_full_name, hr, D3DERR_INVALIDCALL);
1862 hr = effect->lpVtbl->SetMatrixPointerArray(effect, NULL, matrix_pointer_array, 0);
1863 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrixPointerArray failed, got %#x, expected %#x\n",
1864 i, res_full_name, hr, D3DERR_INVALIDCALL);
1866 hr = effect->lpVtbl->GetMatrixPointerArray(effect, NULL, NULL, 0);
1867 ok(hr == D3D_OK, "%u - %s: GetMatrixPointerArray failed, got %#x, expected %#x\n",
1868 i, res_full_name, hr, D3D_OK);
1870 hr = effect->lpVtbl->GetMatrixPointerArray(effect, NULL, NULL, res_desc->Elements ? res_desc->Elements : 1);
1871 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrixPointerArray failed, got %#x, expected %#x\n",
1872 i, res_full_name, hr, D3DERR_INVALIDCALL);
1874 hr = effect->lpVtbl->GetMatrixPointerArray(effect, parameter, NULL, res_desc->Elements ? res_desc->Elements : 1);
1875 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrixPointerArray failed, got %#x, expected %#x\n",
1876 i, res_full_name, hr, D3DERR_INVALIDCALL);
1878 hr = effect->lpVtbl->SetMatrixTranspose(effect, NULL, (D3DXMATRIX *)input_value);
1879 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrixTranspose failed, got %#x, expected %#x\n",
1880 i, res_full_name, hr, D3DERR_INVALIDCALL);
1882 hr = effect->lpVtbl->GetMatrixTranspose(effect, NULL, (D3DXMATRIX *)input_value);
1883 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrixTranspose failed, got %#x, expected %#x\n",
1884 i, res_full_name, hr, D3DERR_INVALIDCALL);
1886 hr = effect->lpVtbl->GetMatrixTranspose(effect, parameter, NULL);
1887 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrixTranspose failed, got %#x, expected %#x\n",
1888 i, res_full_name, hr, D3DERR_INVALIDCALL);
1890 hr = effect->lpVtbl->SetMatrixTransposeArray(effect, NULL, (D3DXMATRIX *)input_value, res_desc->Elements ? res_desc->Elements : 1);
1891 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrixTransposeArray failed, got %#x, expected %#x\n",
1892 i, res_full_name, hr, D3DERR_INVALIDCALL);
1894 hr = effect->lpVtbl->GetMatrixTransposeArray(effect, NULL, (D3DXMATRIX *)input_value, res_desc->Elements ? res_desc->Elements : 1);
1895 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrixTransposeArray failed, got %#x, expected %#x\n",
1896 i, res_full_name, hr, D3DERR_INVALIDCALL);
1898 hr = effect->lpVtbl->GetMatrixTransposeArray(effect, parameter, NULL, res_desc->Elements ? res_desc->Elements : 1);
1899 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrixTransposeArray failed, got %#x, expected %#x\n",
1900 i, res_full_name, hr, D3DERR_INVALIDCALL);
1902 hr = effect->lpVtbl->SetMatrixTransposePointerArray(effect, NULL, matrix_pointer_array, res_desc->Elements ? res_desc->Elements : 1);
1903 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrixTransposePointerArray failed, got %#x, expected %#x\n",
1904 i, res_full_name, hr, D3DERR_INVALIDCALL);
1906 hr = effect->lpVtbl->SetMatrixTransposePointerArray(effect, NULL, matrix_pointer_array, 0);
1907 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrixTransposePointerArray failed, got %#x, expected %#x\n",
1908 i, res_full_name, hr, D3DERR_INVALIDCALL);
1910 hr = effect->lpVtbl->GetMatrixTransposePointerArray(effect, NULL, NULL, 0);
1911 ok(hr == D3D_OK, "%u - %s: GetMatrixTransposePointerArray failed, got %#x, expected %#x\n",
1912 i, res_full_name, hr, D3D_OK);
1914 hr = effect->lpVtbl->GetMatrixTransposePointerArray(effect, NULL, NULL, res_desc->Elements ? res_desc->Elements : 1);
1915 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrixTransposePointerArray failed, got %#x, expected %#x\n",
1916 i, res_full_name, hr, D3DERR_INVALIDCALL);
1918 hr = effect->lpVtbl->GetMatrixTransposePointerArray(effect, parameter, NULL, res_desc->Elements ? res_desc->Elements : 1);
1919 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetMatrixTransposePointerArray failed, got %#x, expected %#x\n",
1920 i, res_full_name, hr, D3DERR_INVALIDCALL);
1922 hr = effect->lpVtbl->SetValue(effect, NULL, input_value, res_desc->Bytes);
1923 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetValue failed, got %#x, expected %#x\n",
1924 i, res_full_name, hr, D3DERR_INVALIDCALL);
1926 hr = effect->lpVtbl->SetValue(effect, parameter, input_value, res_desc->Bytes - 1);
1927 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetValue failed, got %#x, expected %#x\n",
1928 i, res_full_name, hr, D3DERR_INVALIDCALL);
1930 hr = effect->lpVtbl->GetValue(effect, NULL, input_value, res_desc->Bytes);
1931 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetValue failed, got %#x, expected %#x\n",
1932 i, res_full_name, hr, D3DERR_INVALIDCALL);
1934 hr = effect->lpVtbl->GetValue(effect, parameter, input_value, res_desc->Bytes - 1);
1935 ok(hr == D3DERR_INVALIDCALL, "%u - %s: GetValue failed, got %#x, expected %#x\n",
1936 i, res_full_name, hr, D3DERR_INVALIDCALL);
1938 test_effect_parameter_value_GetTestGroup(&res[k], effect, &blob[res_value_offset], parameter, i);
1940 /* SetBool */
1941 bvalue = 5;
1942 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
1943 hr = effect->lpVtbl->SetBool(effect, parameter, bvalue);
1944 if (!res_desc->Elements && res_desc->Rows == 1 && res_desc->Columns == 1)
1946 bvalue = bvalue ? TRUE : FALSE;
1947 set_number(expected_value, res_desc->Type, &bvalue, D3DXPT_BOOL);
1948 ok(hr == D3D_OK, "%u - %s: SetBool failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1950 else
1952 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetBool failed, got %#x, expected %#x\n",
1953 i, res_full_name, hr, D3DERR_INVALIDCALL);
1955 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
1956 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
1958 /* SetBoolArray */
1959 *input_value = 1;
1960 for (l = 1; l < res_desc->Bytes / sizeof(*input_value); ++l)
1962 *(input_value + l) = *(input_value + l - 1) + 1;
1964 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
1965 hr = effect->lpVtbl->SetBoolArray(effect, parameter, (BOOL *)input_value, res_desc->Bytes / sizeof(*input_value));
1966 if (res_desc->Class == D3DXPC_SCALAR
1967 || res_desc->Class == D3DXPC_VECTOR
1968 || res_desc->Class == D3DXPC_MATRIX_ROWS)
1970 for (l = 0; l < res_desc->Bytes / sizeof(*input_value); ++l)
1972 set_number(expected_value + l, res_desc->Type, input_value + l, D3DXPT_BOOL);
1974 ok(hr == D3D_OK, "%u - %s: SetBoolArray failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1976 else
1978 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetBoolArray failed, got %#x, expected %#x\n",
1979 i, res_full_name, hr, D3DERR_INVALIDCALL);
1981 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
1982 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
1984 /* SetInt */
1985 ivalue = 0x1fbf02ff;
1986 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
1987 hr = effect->lpVtbl->SetInt(effect, parameter, ivalue);
1988 if (!res_desc->Elements && res_desc->Rows == 1 && res_desc->Columns == 1)
1990 set_number(expected_value, res_desc->Type, &ivalue, D3DXPT_INT);
1991 ok(hr == D3D_OK, "%u - %s: SetInt failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
1993 else if(!res_desc->Elements && res_desc->Type == D3DXPT_FLOAT &&
1994 ((res_desc->Class == D3DXPC_VECTOR && res_desc->Columns != 2) ||
1995 (res_desc->Class == D3DXPC_MATRIX_ROWS && res_desc->Rows != 2 && res_desc->Columns == 1)))
1997 FLOAT tmp = ((ivalue & 0xff0000) >> 16) * INT_FLOAT_MULTI_INVERSE;
1998 set_number(expected_value, res_desc->Type, &tmp, D3DXPT_FLOAT);
1999 tmp = ((ivalue & 0xff00) >> 8) * INT_FLOAT_MULTI_INVERSE;
2000 set_number(expected_value + 1, res_desc->Type, &tmp, D3DXPT_FLOAT);
2001 tmp = (ivalue & 0xff) * INT_FLOAT_MULTI_INVERSE;
2002 set_number(expected_value + 2, res_desc->Type, &tmp, D3DXPT_FLOAT);
2003 tmp = ((ivalue & 0xff000000) >> 24) * INT_FLOAT_MULTI_INVERSE;
2004 set_number(expected_value + 3, res_desc->Type, &tmp, D3DXPT_FLOAT);
2006 ok(hr == D3D_OK, "%u - %s: SetInt failed, got %#x, expected %#x\n",
2007 i, res_full_name, hr, D3D_OK);
2009 else
2011 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetInt failed, got %#x, expected %#x\n",
2012 i, res_full_name, hr, D3DERR_INVALIDCALL);
2014 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
2015 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
2017 /* SetIntArray */
2018 *input_value = 123456;
2019 for (l = 0; l < res_desc->Bytes / sizeof(*input_value); ++l)
2021 *(input_value + l) = *(input_value + l - 1) + 23;
2023 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
2024 hr = effect->lpVtbl->SetIntArray(effect, parameter, (INT *)input_value, res_desc->Bytes / sizeof(*input_value));
2025 if (res_desc->Class == D3DXPC_SCALAR
2026 || res_desc->Class == D3DXPC_VECTOR
2027 || res_desc->Class == D3DXPC_MATRIX_ROWS)
2029 for (l = 0; l < res_desc->Bytes / sizeof(*input_value); ++l)
2031 set_number(expected_value + l, res_desc->Type, input_value + l, D3DXPT_INT);
2033 ok(hr == D3D_OK, "%u - %s: SetIntArray failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
2035 else
2037 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetIntArray failed, got %#x, expected %#x\n",
2038 i, res_full_name, hr, D3DERR_INVALIDCALL);
2040 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
2041 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
2043 /* SetFloat */
2044 fvalue = 1.33;
2045 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
2046 hr = effect->lpVtbl->SetFloat(effect, parameter, fvalue);
2047 if (!res_desc->Elements && res_desc->Rows == 1 && res_desc->Columns == 1)
2049 set_number(expected_value, res_desc->Type, &fvalue, D3DXPT_FLOAT);
2050 ok(hr == D3D_OK, "%u - %s: SetFloat failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
2052 else
2054 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetFloat failed, got %#x, expected %#x\n",
2055 i, res_full_name, hr, D3DERR_INVALIDCALL);
2057 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
2058 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
2060 /* SetFloatArray */
2061 fvalue = 1.33;
2062 for (l = 0; l < res_desc->Bytes / sizeof(fvalue); ++l)
2064 *(input_value + l) = *(DWORD *)&fvalue;
2065 fvalue += 1.12;
2067 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
2068 hr = effect->lpVtbl->SetFloatArray(effect, parameter, (FLOAT *)input_value, res_desc->Bytes / sizeof(*input_value));
2069 if (res_desc->Class == D3DXPC_SCALAR
2070 || res_desc->Class == D3DXPC_VECTOR
2071 || res_desc->Class == D3DXPC_MATRIX_ROWS)
2073 for (l = 0; l < res_desc->Bytes / sizeof(*input_value); ++l)
2075 set_number(expected_value + l, res_desc->Type, input_value + l, D3DXPT_FLOAT);
2077 ok(hr == D3D_OK, "%u - %s: SetFloatArray failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
2079 else
2081 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetFloatArray failed, got %#x, expected %#x\n",
2082 i, res_full_name, hr, D3DERR_INVALIDCALL);
2084 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
2085 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
2087 /* SetVector */
2088 fvalue = -1.33;
2089 for (l = 0; l < 4; ++l)
2091 *(input_value + l) = *(DWORD *)&fvalue;
2092 fvalue += 1.12;
2094 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
2095 hr = effect->lpVtbl->SetVector(effect, parameter, (D3DXVECTOR4 *)input_value);
2096 if (!res_desc->Elements &&
2097 (res_desc->Class == D3DXPC_SCALAR
2098 || res_desc->Class == D3DXPC_VECTOR))
2100 /* only values between 0 and INT_FLOAT_MULTI are valid */
2101 if (res_desc->Type == D3DXPT_INT && res_desc->Bytes == 4)
2103 *expected_value = (DWORD)(max(min(*(FLOAT *)(input_value + 2), 1.0f), 0.0f) * INT_FLOAT_MULTI);
2104 *expected_value += ((DWORD)(max(min(*(FLOAT *)(input_value + 1), 1.0f), 0.0f) * INT_FLOAT_MULTI)) << 8;
2105 *expected_value += ((DWORD)(max(min(*(FLOAT *)input_value, 1.0f), 0.0f) * INT_FLOAT_MULTI)) << 16;
2106 *expected_value += ((DWORD)(max(min(*(FLOAT *)(input_value + 3), 1.0f), 0.0f) * INT_FLOAT_MULTI)) << 24;
2108 else
2110 for (l = 0; l < 4; ++l)
2112 set_number(expected_value + l, res_desc->Type, input_value + l, D3DXPT_FLOAT);
2115 ok(hr == D3D_OK, "%u - %s: SetVector failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
2117 else
2119 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetVector failed, got %#x, expected %#x\n",
2120 i, res_full_name, hr, D3DERR_INVALIDCALL);
2122 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
2123 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
2125 /* SetVectorArray */
2126 for (element = 0; element < res_desc->Elements + 1; ++element)
2128 fvalue = 1.33;
2129 for (l = 0; l < element * 4; ++l)
2131 *(input_value + l) = *(DWORD *)&fvalue;
2132 fvalue += 1.12;
2134 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
2135 hr = effect->lpVtbl->SetVectorArray(effect, parameter, (D3DXVECTOR4 *)input_value, element);
2136 if (res_desc->Elements && res_desc->Class == D3DXPC_VECTOR && element <= res_desc->Elements)
2138 for (m = 0; m < element; ++m)
2140 for (l = 0; l < res_desc->Columns; ++l)
2142 set_number(expected_value + m * res_desc->Columns + l, res_desc->Type, input_value + m * 4 + l, D3DXPT_FLOAT);
2145 ok(hr == D3D_OK, "%u - %s: SetVectorArray failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
2147 else
2149 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetVectorArray failed, got %#x, expected %#x\n",
2150 i, res_full_name, hr, D3DERR_INVALIDCALL);
2152 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
2153 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
2156 /* SetMatrix */
2157 fvalue = 1.33;
2158 for (l = 0; l < 16; ++l)
2160 *(input_value + l) = *(DWORD *)&fvalue;
2161 fvalue += 1.12;
2163 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
2164 hr = effect->lpVtbl->SetMatrix(effect, parameter, (D3DXMATRIX *)input_value);
2165 if (!res_desc->Elements && res_desc->Class == D3DXPC_MATRIX_ROWS)
2167 for (l = 0; l < 4; ++l)
2169 for (m = 0; m < 4; ++m)
2171 if (m < res_desc->Rows && l < res_desc->Columns)
2172 set_number(expected_value + l + m * res_desc->Columns, res_desc->Type,
2173 input_value + l + m * 4, D3DXPT_FLOAT);
2177 ok(hr == D3D_OK, "%u - %s: SetMatrix failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
2179 else
2181 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrix failed, got %#x, expected %#x\n",
2182 i, res_full_name, hr, D3DERR_INVALIDCALL);
2184 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
2185 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
2187 /* SetMatrixArray */
2188 for (element = 0; element < res_desc->Elements + 1; ++element)
2190 fvalue = 1.33;
2191 for (l = 0; l < element * 16; ++l)
2193 *(input_value + l) = *(DWORD *)&fvalue;
2194 fvalue += 1.12;
2196 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
2197 hr = effect->lpVtbl->SetMatrixArray(effect, parameter, (D3DXMATRIX *)input_value, element);
2198 if (res_desc->Class == D3DXPC_MATRIX_ROWS && element <= res_desc->Elements)
2200 for (n = 0; n < element; ++n)
2202 for (l = 0; l < 4; ++l)
2204 for (m = 0; m < 4; ++m)
2206 if (m < res_desc->Rows && l < res_desc->Columns)
2207 set_number(expected_value + l + m * res_desc->Columns + n * res_desc->Columns * res_desc->Rows,
2208 res_desc->Type, input_value + l + m * 4 + n * 16, D3DXPT_FLOAT);
2213 ok(hr == D3D_OK, "%u - %s: SetMatrixArray failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
2215 else
2217 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrixArray failed, got %#x, expected %#x\n",
2218 i, res_full_name, hr, D3DERR_INVALIDCALL);
2220 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
2221 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
2224 /* SetMatrixPointerArray */
2225 for (element = 0; element < res_desc->Elements + 1; ++element)
2227 fvalue = 1.33;
2228 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l)
2230 *(input_value + l) = *(DWORD *)&fvalue;
2231 fvalue += 1.12;
2233 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
2234 for (l = 0; l < element; ++l)
2236 matrix_pointer_array[l] = (D3DXMATRIX *)&input_value[l * sizeof(**matrix_pointer_array) / sizeof(FLOAT)];
2238 hr = effect->lpVtbl->SetMatrixPointerArray(effect, parameter, matrix_pointer_array, element);
2239 if (res_desc->Class == D3DXPC_MATRIX_ROWS && res_desc->Elements >= element)
2241 for (n = 0; n < element; ++n)
2243 for (l = 0; l < 4; ++l)
2245 for (m = 0; m < 4; ++m)
2247 if (m < res_desc->Rows && l < res_desc->Columns)
2248 set_number(expected_value + l + m * res_desc->Columns + n * res_desc->Columns * res_desc->Rows,
2249 res_desc->Type, input_value + l + m * 4 + n * 16, D3DXPT_FLOAT);
2254 ok(hr == D3D_OK, "%u - %s: SetMatrixPointerArray failed, got %#x, expected %#x\n",
2255 i, res_full_name, hr, D3D_OK);
2257 else
2259 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrixPointerArray failed, got %#x, expected %#x\n",
2260 i, res_full_name, hr, D3DERR_INVALIDCALL);
2262 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
2263 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
2266 /* SetMatrixTranspose */
2267 fvalue = 1.33;
2268 for (l = 0; l < 16; ++l)
2270 *(input_value + l) = *(DWORD *)&fvalue;
2271 fvalue += 1.12;
2273 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
2274 hr = effect->lpVtbl->SetMatrixTranspose(effect, parameter, (D3DXMATRIX *)input_value);
2275 if (!res_desc->Elements && res_desc->Class == D3DXPC_MATRIX_ROWS)
2277 for (l = 0; l < 4; ++l)
2279 for (m = 0; m < 4; ++m)
2281 if (m < res_desc->Rows && l < res_desc->Columns)
2282 set_number(expected_value + l + m * res_desc->Columns, res_desc->Type,
2283 input_value + l * 4 + m, D3DXPT_FLOAT);
2287 ok(hr == D3D_OK, "%u - %s: SetMatrixTranspose failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
2289 else
2291 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrixTranspose failed, got %#x, expected %#x\n",
2292 i, res_full_name, hr, D3DERR_INVALIDCALL);
2294 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
2295 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
2297 /* SetMatrixTransposeArray */
2298 for (element = 0; element < res_desc->Elements + 1; ++element)
2300 fvalue = 1.33;
2301 for (l = 0; l < element * 16; ++l)
2303 *(input_value + l) = *(DWORD *)&fvalue;
2304 fvalue += 1.12;
2306 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
2307 hr = effect->lpVtbl->SetMatrixTransposeArray(effect, parameter, (D3DXMATRIX *)input_value, element);
2308 if (res_desc->Class == D3DXPC_MATRIX_ROWS && element <= res_desc->Elements)
2310 for (n = 0; n < element; ++n)
2312 for (l = 0; l < 4; ++l)
2314 for (m = 0; m < 4; ++m)
2316 if (m < res_desc->Rows && l < res_desc->Columns)
2317 set_number(expected_value + l + m * res_desc->Columns + n * res_desc->Columns * res_desc->Rows,
2318 res_desc->Type, input_value + l * 4 + m + n * 16, D3DXPT_FLOAT);
2323 ok(hr == D3D_OK, "%u - %s: SetMatrixTransposeArray failed, got %#x, expected %#x\n", i, res_full_name, hr, D3D_OK);
2325 else
2327 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrixTransposeArray failed, got %#x, expected %#x\n",
2328 i, res_full_name, hr, D3DERR_INVALIDCALL);
2330 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
2331 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
2334 /* SetMatrixTransposePointerArray */
2335 for (element = 0; element < res_desc->Elements + 1; ++element)
2337 fvalue = 1.33;
2338 for (l = 0; l < EFFECT_PARAMETER_VALUE_ARRAY_SIZE; ++l)
2340 *(input_value + l) = *(DWORD *)&fvalue;
2341 fvalue += 1.12;
2343 memcpy(expected_value, &blob[res_value_offset], res_desc->Bytes);
2344 for (l = 0; l < element; ++l)
2346 matrix_pointer_array[l] = (D3DXMATRIX *)&input_value[l * sizeof(**matrix_pointer_array) / sizeof(FLOAT)];
2348 hr = effect->lpVtbl->SetMatrixTransposePointerArray(effect, parameter, matrix_pointer_array, element);
2349 if (res_desc->Class == D3DXPC_MATRIX_ROWS && res_desc->Elements >= element)
2351 for (n = 0; n < element; ++n)
2353 for (l = 0; l < 4; ++l)
2355 for (m = 0; m < 4; ++m)
2357 if (m < res_desc->Rows && l < res_desc->Columns)
2358 set_number(expected_value + l + m * res_desc->Columns + n * res_desc->Columns * res_desc->Rows,
2359 res_desc->Type, input_value + l * 4 + m + n * 16, D3DXPT_FLOAT);
2364 ok(hr == D3D_OK, "%u - %s: SetMatrixTransposePointerArray failed, got %#x, expected %#x\n",
2365 i, res_full_name, hr, D3D_OK);
2367 else
2369 ok(hr == D3DERR_INVALIDCALL, "%u - %s: SetMatrixTransposePointerArray failed, got %#x, expected %#x\n",
2370 i, res_full_name, hr, D3DERR_INVALIDCALL);
2372 test_effect_parameter_value_GetTestGroup(&res[k], effect, expected_value, parameter, i);
2373 test_effect_parameter_value_ResetValue(&res[k], effect, &blob[res_value_offset], parameter, i);
2377 count = effect->lpVtbl->Release(effect);
2378 ok(!count, "Release failed %u\n", count);
2383 * fxc.exe /Tfx_2_0
2385 #if 0
2386 float a = 2.1;
2387 float b[1];
2388 float c <float d = 3;>;
2389 struct {float e;} f;
2390 float g <float h[1] = {3};>;
2391 struct s {float j;};
2392 float i <s k[1] = {4};>;
2393 technique t <s l[1] = {5};> { pass p <s m[1] = {6};> { } }
2394 #endif
2395 static const DWORD test_effect_variable_names_blob[] =
2397 0xfeff0901, 0x0000024c, 0x00000000, 0x00000003, 0x00000000, 0x00000024, 0x00000000, 0x00000000,
2398 0x00000001, 0x00000001, 0x40066666, 0x00000002, 0x00000061, 0x00000003, 0x00000000, 0x0000004c,
2399 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000002, 0x00000062, 0x00000003,
2400 0x00000000, 0x0000009c, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000000, 0x40400000,
2401 0x00000003, 0x00000000, 0x00000094, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000002,
2402 0x00000064, 0x00000002, 0x00000063, 0x00000000, 0x00000005, 0x000000dc, 0x00000000, 0x00000000,
2403 0x00000001, 0x00000003, 0x00000000, 0x000000e4, 0x00000000, 0x00000000, 0x00000001, 0x00000001,
2404 0x00000000, 0x00000002, 0x00000066, 0x00000002, 0x00000065, 0x00000003, 0x00000000, 0x00000134,
2405 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000000, 0x40400000, 0x00000003, 0x00000000,
2406 0x0000012c, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000002, 0x00000068, 0x00000002,
2407 0x00000067, 0x00000003, 0x00000000, 0x000001a4, 0x00000000, 0x00000000, 0x00000001, 0x00000001,
2408 0x00000000, 0x40800000, 0x00000000, 0x00000005, 0x00000194, 0x00000000, 0x00000001, 0x00000001,
2409 0x00000003, 0x00000000, 0x0000019c, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000002,
2410 0x0000006b, 0x00000002, 0x0000006a, 0x00000002, 0x00000069, 0x40a00000, 0x00000000, 0x00000005,
2411 0x000001e4, 0x00000000, 0x00000001, 0x00000001, 0x00000003, 0x00000000, 0x000001ec, 0x00000000,
2412 0x00000000, 0x00000001, 0x00000001, 0x00000002, 0x0000006c, 0x00000002, 0x0000006a, 0x40c00000,
2413 0x00000000, 0x00000005, 0x0000022c, 0x00000000, 0x00000001, 0x00000001, 0x00000003, 0x00000000,
2414 0x00000234, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000002, 0x0000006d, 0x00000002,
2415 0x0000006a, 0x00000002, 0x00000070, 0x00000002, 0x00000074, 0x00000006, 0x00000001, 0x00000001,
2416 0x00000001, 0x00000004, 0x00000020, 0x00000000, 0x00000000, 0x0000002c, 0x00000048, 0x00000000,
2417 0x00000000, 0x00000054, 0x00000070, 0x00000000, 0x00000001, 0x00000078, 0x00000074, 0x000000a4,
2418 0x000000d8, 0x00000000, 0x00000000, 0x000000ec, 0x00000108, 0x00000000, 0x00000001, 0x00000110,
2419 0x0000010c, 0x0000013c, 0x00000158, 0x00000000, 0x00000001, 0x00000160, 0x0000015c, 0x00000244,
2420 0x00000001, 0x00000001, 0x000001b0, 0x000001ac, 0x0000023c, 0x00000001, 0x00000000, 0x000001f8,
2421 0x000001f4, 0x00000000, 0x00000000,
2424 static void test_effect_variable_names(IDirect3DDevice9 *device)
2426 ID3DXEffect *effect;
2427 ULONG count;
2428 HRESULT hr;
2429 D3DXHANDLE parameter, p;
2431 hr = D3DXCreateEffect(device, test_effect_variable_names_blob,
2432 sizeof(test_effect_variable_names_blob), NULL, NULL, 0, NULL, &effect, NULL);
2433 ok(hr == D3D_OK, "D3DXCreateEffect failed, got %#x, expected %#x\n", hr, D3D_OK);
2436 * check invalid calls
2437 * This will crash:
2438 * effect->lpVtbl->GetAnnotationByName(effect, "invalid1", "invalid2");
2440 p = effect->lpVtbl->GetParameterByName(effect, NULL, NULL);
2441 ok(p == NULL, "GetParameterByName failed, got %p, expected %p\n", p, NULL);
2443 p = effect->lpVtbl->GetParameterByName(effect, NULL, "invalid1");
2444 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2446 p = effect->lpVtbl->GetParameterByName(effect, "invalid1", NULL);
2447 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2449 p = effect->lpVtbl->GetParameterByName(effect, "invalid1", "invalid2");
2450 ok(p == NULL, "GetParameterByName failed, got %p, expected %p\n", p, NULL);
2452 /* float a; */
2453 parameter = effect->lpVtbl->GetParameterByName(effect, NULL, "a");
2454 ok(parameter != NULL, "GetParameterByName failed, got %p\n", parameter);
2456 p = effect->lpVtbl->GetParameterByName(effect, "a", NULL);
2457 ok(parameter == p, "GetParameterByName failed, got %p, expected %p\n", p, parameter);
2459 /* members */
2460 p = effect->lpVtbl->GetParameterByName(effect, NULL, "a.");
2461 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2463 p = effect->lpVtbl->GetParameterByName(effect, "a.", NULL);
2464 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2466 p = effect->lpVtbl->GetParameterByName(effect, "a", ".");
2467 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2469 p = effect->lpVtbl->GetParameterByName(effect, NULL, "a.invalid");
2470 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2472 p = effect->lpVtbl->GetParameterByName(effect, "a.invalid", NULL);
2473 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2475 p = effect->lpVtbl->GetParameterByName(effect, "a", ".invalid");
2476 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2478 p = effect->lpVtbl->GetParameterByName(effect, "a.", "invalid");
2479 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2481 p = effect->lpVtbl->GetParameterByName(effect, "a", "invalid");
2482 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2484 /* elements */
2485 p = effect->lpVtbl->GetParameterByName(effect, NULL, "a[]");
2486 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2488 p = effect->lpVtbl->GetParameterByName(effect, "a[]", NULL);
2489 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2491 p = effect->lpVtbl->GetParameterByName(effect, NULL, "a[0]");
2492 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2494 p = effect->lpVtbl->GetParameterByName(effect, "a[0]", NULL);
2495 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2497 p = effect->lpVtbl->GetParameterByName(effect, "a", "[0]");
2498 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2500 p = effect->lpVtbl->GetParameterElement(effect, "a", 0);
2501 ok(p == NULL, "GetParameterElement failed, got %p\n", p);
2503 /* annotations */
2504 p = effect->lpVtbl->GetParameterByName(effect, NULL, "a@");
2505 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2507 p = effect->lpVtbl->GetParameterByName(effect, "a@", NULL);
2508 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2510 p = effect->lpVtbl->GetParameterByName(effect, "a", "@invalid");
2511 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2513 p = effect->lpVtbl->GetParameterByName(effect, "a@", "invalid");
2514 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2516 p = effect->lpVtbl->GetParameterByName(effect, NULL, "a@invalid");
2517 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2519 p = effect->lpVtbl->GetParameterByName(effect, "a@invalid", NULL);
2520 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2522 p = effect->lpVtbl->GetAnnotationByName(effect, "a", NULL);
2523 ok(p == NULL, "GetAnnotationByName failed, got %p\n", p);
2525 p = effect->lpVtbl->GetAnnotationByName(effect, "a", "invalid");
2526 ok(p == NULL, "GetAnnotationByName failed, got %p\n", p);
2528 p = effect->lpVtbl->GetAnnotation(effect, "a", 0);
2529 ok(p == NULL, "GetAnnotation failed, got %p\n", p);
2531 /* float b[1]; */
2532 parameter = effect->lpVtbl->GetParameterByName(effect, NULL, "b");
2533 ok(parameter != NULL, "GetParameterByName failed, got %p\n", parameter);
2535 p = effect->lpVtbl->GetParameterByName(effect, "b", NULL);
2536 ok(parameter == p, "GetParameterByName failed, got %p, expected %p\n", p, parameter);
2538 /* elements */
2539 p = effect->lpVtbl->GetParameterByName(effect, NULL, "b[]");
2540 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2542 parameter = effect->lpVtbl->GetParameterByName(effect, NULL, "b[0]");
2543 ok(parameter != NULL, "GetParameterByName failed, got %p\n", parameter);
2545 p = effect->lpVtbl->GetParameterByName(effect, "b[0]", NULL);
2546 ok(parameter == p, "GetParameterByName failed, got %p, expected %p\n", p, parameter);
2548 p = effect->lpVtbl->GetParameterElement(effect, "b", 0);
2549 ok(parameter == p, "GetParameterElement failed, got %p, expected %p\n", p, parameter);
2551 p = effect->lpVtbl->GetParameterByName(effect, "b", "[0]");
2552 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2554 p = effect->lpVtbl->GetParameterByName(effect, NULL, "b[1]");
2555 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2557 p = effect->lpVtbl->GetParameterElement(effect, "b", 1);
2558 ok(p == NULL, "GetParameterElement failed, got %p\n", p);
2560 /* float c <float d = 3;>; */
2561 parameter = effect->lpVtbl->GetParameterByName(effect, NULL, "c");
2562 ok(parameter != NULL, "GetParameterByName failed, got %p\n", parameter);
2564 p = effect->lpVtbl->GetParameterByName(effect, "c", NULL);
2565 ok(parameter == p, "GetParameterByName failed, got %p, expected %p\n", p, parameter);
2567 /* annotations */
2568 p = effect->lpVtbl->GetParameterByName(effect, "c", "@d");
2569 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2571 p = effect->lpVtbl->GetParameterByName(effect, "c@", "d");
2572 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2574 p = effect->lpVtbl->GetParameterByName(effect, NULL, "c@invalid");
2575 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2577 p = effect->lpVtbl->GetParameterByName(effect, "c@invalid", NULL);
2578 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2580 p = effect->lpVtbl->GetAnnotationByName(effect, "c", NULL);
2581 ok(p == NULL, "GetAnnotationByName failed, got %p\n", p);
2583 p = effect->lpVtbl->GetAnnotationByName(effect, "c", "invalid");
2584 ok(p == NULL, "GetAnnotationByName failed, got %p\n", p);
2586 parameter = effect->lpVtbl->GetParameterByName(effect, NULL, "c@d");
2587 ok(parameter != NULL, "GetParameterByName failed, got %p\n", parameter);
2589 p = effect->lpVtbl->GetParameterByName(effect, "c@d", NULL);
2590 ok(parameter == p, "GetParameterByName failed, got %p, expected %p\n", p, parameter);
2592 p = effect->lpVtbl->GetAnnotationByName(effect, "c", "d");
2593 ok(parameter == p, "GetAnnotationByName failed, got %p, expected %p\n", p, parameter);
2595 p = effect->lpVtbl->GetAnnotation(effect, "c", 0);
2596 ok(parameter == p, "GetAnnotation failed, got %p, expected %p\n", p, parameter);
2598 p = effect->lpVtbl->GetAnnotation(effect, "c", 1);
2599 ok(p == NULL, "GetAnnotation failed, got %p\n", p);
2601 /* struct {float e;} f; */
2602 parameter = effect->lpVtbl->GetParameterByName(effect, NULL, "f");
2603 ok(parameter != NULL, "GetParameterByName failed, got %p\n", parameter);
2605 p = effect->lpVtbl->GetParameterByName(effect, "f", NULL);
2606 ok(parameter == p, "GetParameterByName failed, got %p, expected %p\n", p, parameter);
2608 /* members */
2609 parameter = effect->lpVtbl->GetParameterByName(effect, NULL, "f.e");
2610 ok(parameter != NULL, "GetParameterByName failed, got %p\n", parameter);
2612 p = effect->lpVtbl->GetParameterByName(effect, "f.e", NULL);
2613 ok(parameter == p, "GetParameterByName failed, got %p, expected %p\n", p, parameter);
2615 p = effect->lpVtbl->GetParameterByName(effect, "f", "e");
2616 ok(parameter == p, "GetParameterByName failed, got %p, expected %p\n", p, parameter);
2618 p = effect->lpVtbl->GetParameterByName(effect, "f", ".e");
2619 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2621 p = effect->lpVtbl->GetParameterByName(effect, "f.", "e");
2622 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2624 p = effect->lpVtbl->GetParameterByName(effect, "f.invalid", NULL);
2625 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2627 p = effect->lpVtbl->GetParameterByName(effect, NULL, "f.invalid");
2628 ok(p == NULL, "GetParameterByName failed, got %p\n", p);
2630 /* float g <float h[1] = {3};>; */
2631 parameter = effect->lpVtbl->GetParameterByName(effect, NULL, "g@h[0]");
2632 ok(parameter != NULL, "GetParameterByName failed, got %p\n", parameter);
2634 p = effect->lpVtbl->GetAnnotationByName(effect, "g", "h[0]");
2635 ok(parameter == p, "GetAnnotationByName failed, got %p, expected %p\n", p, parameter);
2637 p = effect->lpVtbl->GetParameterElement(effect, "g@h", 0);
2638 ok(parameter == p, "GetParameterElement failed, got %p, expected %p\n", p, parameter);
2640 p = effect->lpVtbl->GetParameterElement(effect, effect->lpVtbl->GetAnnotation(effect, "g", 0), 0);
2641 ok(parameter == p, "GetParameterElement failed, got %p, expected %p\n", p, parameter);
2643 /* struct s {float j;}; float i <s k[1] = {4};>; */
2644 parameter = effect->lpVtbl->GetParameterByName(effect, NULL, "i@k[0].j");
2645 ok(parameter != NULL, "GetParameterByName failed, got %p\n", parameter);
2647 p = effect->lpVtbl->GetAnnotationByName(effect, "i", "k[0].j");
2648 ok(parameter == p, "GetAnnotationByName failed, got %p, expected %p\n", p, parameter);
2650 p = effect->lpVtbl->GetParameterByName(effect, effect->lpVtbl->GetParameterElement(effect, "i@k", 0), "j");
2651 ok(parameter == p, "GetParameterElement failed, got %p, expected %p\n", p, parameter);
2653 /* technique t <s l[1] = {5};> */
2654 parameter = effect->lpVtbl->GetAnnotationByName(effect, "t", "l[0].j");
2655 ok(parameter != NULL, "GetParameterByName failed, got %p\n", parameter);
2657 /* pass p <s m[1] = {6};> */
2658 parameter = effect->lpVtbl->GetAnnotationByName(effect, effect->lpVtbl->GetPassByName(effect, "t", "p"), "m[0].j");
2659 ok(parameter != NULL, "GetParameterByName failed, got %p\n", parameter);
2661 count = effect->lpVtbl->Release(effect);
2662 ok(!count, "Release failed %u\n", count);
2665 static void test_effect_compilation_errors(IDirect3DDevice9 *device)
2667 ID3DXEffect *effect;
2668 ID3DXBuffer *compilation_errors;
2669 HRESULT hr;
2671 /* Test binary effect */
2672 compilation_errors = (ID3DXBuffer*)0xdeadbeef;
2673 hr = D3DXCreateEffect(NULL, NULL, 0, NULL, NULL, 0, NULL, NULL, &compilation_errors);
2674 ok(hr == D3DERR_INVALIDCALL, "D3DXCreateEffect failed, got %#x, expected %#x\n", hr, D3DERR_INVALIDCALL);
2675 ok(!compilation_errors, "Returned %p\n", compilation_errors);
2677 compilation_errors = (ID3DXBuffer*)0xdeadbeef;
2678 hr = D3DXCreateEffect(device, test_effect_variable_names_blob,
2679 sizeof(test_effect_variable_names_blob), NULL, NULL, 0, NULL, &effect, &compilation_errors);
2680 ok(hr == D3D_OK, "D3DXCreateEffect failed, got %#x, expected %#x\n", hr, D3D_OK);
2681 ok(!compilation_errors, "Returned %p\n", compilation_errors);
2682 effect->lpVtbl->Release(effect);
2685 START_TEST(effect)
2687 HWND wnd;
2688 IDirect3D9 *d3d;
2689 IDirect3DDevice9 *device;
2690 D3DPRESENT_PARAMETERS d3dpp;
2691 HRESULT hr;
2692 ULONG count;
2694 wnd = CreateWindow("static", "d3dx9_test", 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL);
2695 d3d = Direct3DCreate9(D3D_SDK_VERSION);
2696 if (!wnd) {
2697 skip("Couldn't create application window\n");
2698 return;
2700 if (!d3d) {
2701 skip("Couldn't create IDirect3D9 object\n");
2702 DestroyWindow(wnd);
2703 return;
2706 ZeroMemory(&d3dpp, sizeof(d3dpp));
2707 d3dpp.Windowed = TRUE;
2708 d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
2709 hr = IDirect3D9_CreateDevice(d3d, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, wnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &device);
2710 if (FAILED(hr)) {
2711 skip("Failed to create IDirect3DDevice9 object %#x\n", hr);
2712 IDirect3D9_Release(d3d);
2713 DestroyWindow(wnd);
2714 return;
2717 test_create_effect_and_pool(device);
2718 test_create_effect_compiler();
2719 test_effect_parameter_value(device);
2720 test_effect_variable_names(device);
2721 test_effect_compilation_errors(device);
2723 count = IDirect3DDevice9_Release(device);
2724 ok(count == 0, "The device was not properly freed: refcount %u\n", count);
2726 count = IDirect3D9_Release(d3d);
2727 ok(count == 0, "Release failed %u\n", count);
2729 DestroyWindow(wnd);