2 * Copyright 2010 Rico Schüller
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
20 * Nearly all compiler functions need the shader blob and the size. The size
21 * is always located at DWORD #6 in the shader blob (blob[6]).
22 * The functions are e.g.: D3DGet*SignatureBlob, D3DReflect
27 #include "d3dcompiler.h"
28 #include "wine/test.h"
30 /* includes for older reflection interfaces */
33 #include "d3d10_1shader.h"
37 * This doesn't belong here, but for some functions it is possible to return that value,
38 * see http://msdn.microsoft.com/en-us/library/bb205278%28v=VS.85%29.aspx
39 * The original definition is in D3DX10core.h.
41 #define D3DERR_INVALIDCALL 0x8876086c
43 static HRESULT (WINAPI
*pD3DReflect
)(const void *, SIZE_T
, REFIID
, void **);
45 /* Creator string for comparison - Version 9.29.952.3111 (43) */
46 static DWORD shader_creator
[] = {
47 0x7263694d, 0x666f736f, 0x52282074, 0x4c482029, 0x53204c53, 0x65646168, 0x6f432072, 0x6c69706d,
48 0x39207265, 0x2e39322e, 0x2e323539, 0x31313133, 0xababab00,
52 * fxc.exe /E VS /Tvs_4_0 /Fx
55 float4
VS(float4 position
: POSITION
, float4 pos
: SV_POSITION
) : SV_POSITION
63 static DWORD test_reflection_blob
[] = {
64 0x43425844, 0x77c6324f, 0xfd27948a, 0xe6958d31, 0x53361cba, 0x00000001, 0x000001d8, 0x00000005,
65 0x00000034, 0x0000008c, 0x000000e4, 0x00000118, 0x0000015c, 0x46454452, 0x00000050, 0x00000000,
66 0x00000000, 0x00000000, 0x0000001c, 0xfffe0400, 0x00000100, 0x0000001c, 0x7263694d, 0x666f736f,
67 0x52282074, 0x4c482029, 0x53204c53, 0x65646168, 0x6f432072, 0x6c69706d, 0x39207265, 0x2e39322e,
68 0x2e323539, 0x31313133, 0xababab00, 0x4e475349, 0x00000050, 0x00000002, 0x00000008, 0x00000038,
69 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000f0f, 0x00000041, 0x00000000, 0x00000000,
70 0x00000003, 0x00000001, 0x0000000f, 0x49534f50, 0x4e4f4954, 0x5f565300, 0x49534f50, 0x4e4f4954,
71 0xababab00, 0x4e47534f, 0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000001,
72 0x00000003, 0x00000000, 0x0000000f, 0x505f5653, 0x5449534f, 0x004e4f49, 0x52444853, 0x0000003c,
73 0x00010040, 0x0000000f, 0x0300005f, 0x001010f2, 0x00000000, 0x04000067, 0x001020f2, 0x00000000,
74 0x00000001, 0x05000036, 0x001020f2, 0x00000000, 0x00101e46, 0x00000000, 0x0100003e, 0x54415453,
75 0x00000074, 0x00000002, 0x00000000, 0x00000000, 0x00000002, 0x00000000, 0x00000000, 0x00000000,
76 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
77 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000,
78 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
81 static void test_reflection_references(void)
85 ID3D11ShaderReflection
*ref11
, *ref11_test
;
86 ID3D10ShaderReflection
*ref10
;
87 ID3D10ShaderReflection1
*ref10_1
;
89 hr
= pD3DReflect(test_reflection_blob
, test_reflection_blob
[6], &IID_ID3D11ShaderReflection
, (void **)&ref11
);
90 ok(hr
== S_OK
, "D3DReflect failed, got %x, expected %x\n", hr
, S_OK
);
92 hr
= ref11
->lpVtbl
->QueryInterface(ref11
, &IID_ID3D11ShaderReflection
, (void **)&ref11_test
);
93 ok(hr
== S_OK
, "QueryInterface failed, got %x, expected %x\n", hr
, S_OK
);
95 count
= ref11_test
->lpVtbl
->Release(ref11_test
);
96 ok(count
== 1, "Release failed %u\n", count
);
98 hr
= ref11
->lpVtbl
->QueryInterface(ref11
, &IID_ID3D10ShaderReflection
, (void **)&ref10
);
99 ok(hr
== E_NOINTERFACE
, "QueryInterface failed, got %x, expected %x\n", hr
, E_NOINTERFACE
);
101 hr
= ref11
->lpVtbl
->QueryInterface(ref11
, &IID_ID3D10ShaderReflection1
, (void **)&ref10_1
);
102 ok(hr
== E_NOINTERFACE
, "QueryInterface failed, got %x, expected %x\n", hr
, E_NOINTERFACE
);
104 count
= ref11
->lpVtbl
->Release(ref11
);
105 ok(count
== 0, "Release failed %u\n", count
);
107 /* check invalid cases */
108 hr
= pD3DReflect(test_reflection_blob
, test_reflection_blob
[6], &IID_ID3D10ShaderReflection
, (void **)&ref10
);
109 ok(hr
== E_NOINTERFACE
, "D3DReflect failed, got %x, expected %x\n", hr
, E_NOINTERFACE
);
111 hr
= pD3DReflect(test_reflection_blob
, test_reflection_blob
[6], &IID_ID3D10ShaderReflection1
, (void **)&ref10_1
);
112 ok(hr
== E_NOINTERFACE
, "D3DReflect failed, got %x, expected %x\n", hr
, E_NOINTERFACE
);
114 hr
= pD3DReflect(NULL
, test_reflection_blob
[6], &IID_ID3D10ShaderReflection1
, (void **)&ref10_1
);
115 ok(hr
== D3DERR_INVALIDCALL
, "D3DReflect failed, got %x, expected %x\n", hr
, D3DERR_INVALIDCALL
);
117 hr
= pD3DReflect(NULL
, test_reflection_blob
[6], &IID_ID3D11ShaderReflection
, (void **)&ref11
);
118 ok(hr
== D3DERR_INVALIDCALL
, "D3DReflect failed, got %x, expected %x\n", hr
, D3DERR_INVALIDCALL
);
120 /* returns different errors with different sizes */
121 hr
= pD3DReflect(test_reflection_blob
, 31, &IID_ID3D10ShaderReflection1
, (void **)&ref10_1
);
122 ok(hr
== D3DERR_INVALIDCALL
, "D3DReflect failed, got %x, expected %x\n", hr
, D3DERR_INVALIDCALL
);
124 hr
= pD3DReflect(test_reflection_blob
, 32, &IID_ID3D10ShaderReflection1
, (void **)&ref10_1
);
125 ok(hr
== E_FAIL
, "D3DReflect failed, got %x, expected %x\n", hr
, E_FAIL
);
127 hr
= pD3DReflect(test_reflection_blob
, test_reflection_blob
[6]-1, &IID_ID3D10ShaderReflection1
, (void **)&ref10_1
);
128 ok(hr
== E_FAIL
, "D3DReflect failed, got %x, expected %x\n", hr
, E_FAIL
);
130 hr
= pD3DReflect(test_reflection_blob
, 31, &IID_ID3D11ShaderReflection
, (void **)&ref11
);
131 ok(hr
== D3DERR_INVALIDCALL
, "D3DReflect failed, got %x, expected %x\n", hr
, D3DERR_INVALIDCALL
);
133 hr
= pD3DReflect(test_reflection_blob
, 32, &IID_ID3D11ShaderReflection
, (void **)&ref11
);
134 ok(hr
== E_FAIL
, "D3DReflect failed, got %x, expected %x\n", hr
, E_FAIL
);
136 hr
= pD3DReflect(test_reflection_blob
, test_reflection_blob
[6]-1, &IID_ID3D11ShaderReflection
, (void **)&ref11
);
137 ok(hr
== E_FAIL
, "D3DReflect failed, got %x, expected %x\n", hr
, E_FAIL
);
140 #endif /* !__REACTOS__ */
143 * fxc.exe /E VS /Tvs_4_1 /Fx
148 float4 x
: SV_position
;
150 uint b
: BLENDINDICES
;
151 float c
: BLENDWEIGHT
;
156 float4 g
: POSITIONT
;
160 uint k
: SV_VertexID
;
161 uint l
: SV_InstanceID
;
166 float4 x
: SV_position
;
169 float4 c
: POSITION0
;
171 float e
: TESSFACTOR0
;
172 float4 f
: TEXCOORD0
;
173 float g
: SV_ClipDistance0
;
174 float h
: SV_CullDistance0
;
175 uint i
: SV_InstanceID
;
181 s
.x
= float4(1.6f
, 0.3f
, 0.1f
, 0.0f
);
183 int p
[5] = {1, 2, 3, 5, 4};
184 y
= y
<< (int) x
.x
.x
& 0xf;
199 static DWORD test_reflection_desc_vs_blob
[] = {
200 0x43425844, 0xb65955ac, 0xcea1cb75, 0x06c5a1ad, 0x8a555fa1, 0x00000001, 0x0000076c, 0x00000005,
201 0x00000034, 0x0000008c, 0x0000028c, 0x00000414, 0x000006f0, 0x46454452, 0x00000050, 0x00000000,
202 0x00000000, 0x00000000, 0x0000001c, 0xfffe0401, 0x00000100, 0x0000001c, 0x7263694d, 0x666f736f,
203 0x52282074, 0x4c482029, 0x53204c53, 0x65646168, 0x6f432072, 0x6c69706d, 0x39207265, 0x2e39322e,
204 0x2e323539, 0x31313133, 0xababab00, 0x4e475349, 0x000001f8, 0x0000000f, 0x00000008, 0x00000170,
205 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x0000010f, 0x0000017c, 0x00000000, 0x00000000,
206 0x00000003, 0x00000001, 0x0000000f, 0x00000185, 0x00000000, 0x00000000, 0x00000001, 0x00000002,
207 0x00000001, 0x00000192, 0x00000000, 0x00000000, 0x00000003, 0x00000003, 0x00000101, 0x0000019e,
208 0x00000000, 0x00000000, 0x00000003, 0x00000004, 0x00000f0f, 0x0000019e, 0x00000001, 0x00000000,
209 0x00000003, 0x00000005, 0x0000000f, 0x000001a4, 0x00000000, 0x00000000, 0x00000003, 0x00000006,
210 0x0000000f, 0x000001ab, 0x00000000, 0x00000000, 0x00000003, 0x00000007, 0x00000f0f, 0x000001b4,
211 0x00000000, 0x00000000, 0x00000003, 0x00000008, 0x0000000f, 0x000001be, 0x00000000, 0x00000000,
212 0x00000003, 0x00000009, 0x00000101, 0x000001c4, 0x00000000, 0x00000000, 0x00000003, 0x0000000a,
213 0x0000000f, 0x000001cc, 0x00000000, 0x00000000, 0x00000003, 0x0000000b, 0x00000f0f, 0x000001d5,
214 0x00000000, 0x00000006, 0x00000001, 0x0000000c, 0x00000001, 0x000001e1, 0x00000000, 0x00000008,
215 0x00000001, 0x0000000d, 0x00000001, 0x000001ef, 0x00000000, 0x00000000, 0x00000003, 0x0000000e,
216 0x00000101, 0x705f5653, 0x7469736f, 0x006e6f69, 0x4f4e4942, 0x4c414d52, 0x454c4200, 0x4e49444e,
217 0x45434944, 0x4c420053, 0x57444e45, 0x48474945, 0x4f430054, 0x00524f4c, 0x4d524f4e, 0x50004c41,
218 0x5449534f, 0x004e4f49, 0x49534f50, 0x4e4f4954, 0x53500054, 0x00455a49, 0x474e4154, 0x00544e45,
219 0x43584554, 0x44524f4f, 0x5f565300, 0x74726556, 0x44497865, 0x5f565300, 0x74736e49, 0x65636e61,
220 0x74004449, 0x69747365, 0xabab006e, 0x4e47534f, 0x00000180, 0x0000000b, 0x00000008, 0x00000110,
221 0x00000000, 0x00000001, 0x00000003, 0x00000000, 0x0000000f, 0x0000011c, 0x00000000, 0x00000000,
222 0x00000003, 0x00000001, 0x0000000f, 0x00000122, 0x00000000, 0x00000000, 0x00000003, 0x00000002,
223 0x00000e01, 0x00000126, 0x00000000, 0x00000000, 0x00000003, 0x00000002, 0x00000d02, 0x0000012c,
224 0x00000000, 0x00000000, 0x00000003, 0x00000002, 0x00000b04, 0x00000137, 0x00000000, 0x00000000,
225 0x00000003, 0x00000002, 0x00000708, 0x0000013f, 0x00000000, 0x00000000, 0x00000003, 0x00000003,
226 0x0000000f, 0x00000148, 0x00000000, 0x00000000, 0x00000003, 0x00000004, 0x0000000f, 0x00000151,
227 0x00000000, 0x00000002, 0x00000003, 0x00000005, 0x00000e01, 0x00000161, 0x00000000, 0x00000003,
228 0x00000003, 0x00000005, 0x00000d02, 0x00000171, 0x00000000, 0x00000000, 0x00000001, 0x00000006,
229 0x00000e01, 0x705f5653, 0x7469736f, 0x006e6f69, 0x4f4c4f43, 0x4f460052, 0x53500047, 0x00455a49,
230 0x53534554, 0x54434146, 0x7400524f, 0x6f747365, 0x50007475, 0x5449534f, 0x004e4f49, 0x43584554,
231 0x44524f4f, 0x5f565300, 0x70696c43, 0x74736944, 0x65636e61, 0x5f565300, 0x6c6c7543, 0x74736944,
232 0x65636e61, 0x5f565300, 0x74736e49, 0x65636e61, 0xab004449, 0x52444853, 0x000002d4, 0x00010041,
233 0x000000b5, 0x0100086a, 0x0300005f, 0x00101012, 0x00000000, 0x0300005f, 0x00101012, 0x00000003,
234 0x0300005f, 0x001010f2, 0x00000004, 0x0300005f, 0x001010f2, 0x00000007, 0x0300005f, 0x00101012,
235 0x00000009, 0x0300005f, 0x001010f2, 0x0000000b, 0x0300005f, 0x00101012, 0x0000000e, 0x04000067,
236 0x001020f2, 0x00000000, 0x00000001, 0x03000065, 0x001020f2, 0x00000001, 0x03000065, 0x00102012,
237 0x00000002, 0x03000065, 0x00102022, 0x00000002, 0x03000065, 0x00102042, 0x00000002, 0x03000065,
238 0x00102082, 0x00000002, 0x03000065, 0x001020f2, 0x00000003, 0x03000065, 0x001020f2, 0x00000004,
239 0x04000067, 0x00102012, 0x00000005, 0x00000002, 0x04000067, 0x00102022, 0x00000005, 0x00000003,
240 0x03000065, 0x00102012, 0x00000006, 0x02000068, 0x00000001, 0x04000069, 0x00000000, 0x00000005,
241 0x00000004, 0x06000036, 0x00203012, 0x00000000, 0x00000000, 0x00004001, 0x00000001, 0x06000036,
242 0x00203012, 0x00000000, 0x00000001, 0x00004001, 0x00000002, 0x06000036, 0x00203012, 0x00000000,
243 0x00000002, 0x00004001, 0x00000003, 0x06000036, 0x00203012, 0x00000000, 0x00000003, 0x00004001,
244 0x00000005, 0x06000036, 0x00203012, 0x00000000, 0x00000004, 0x00004001, 0x00000004, 0x0500001b,
245 0x00100012, 0x00000000, 0x0010100a, 0x00000000, 0x07000029, 0x00100012, 0x00000000, 0x00004001,
246 0x00000001, 0x0010000a, 0x00000000, 0x07000001, 0x00100012, 0x00000000, 0x0010000a, 0x00000000,
247 0x00004001, 0x0000000f, 0x07000036, 0x00100012, 0x00000000, 0x0420300a, 0x00000000, 0x0010000a,
248 0x00000000, 0x0500002b, 0x00102012, 0x00000000, 0x0010000a, 0x00000000, 0x08000036, 0x001020e2,
249 0x00000000, 0x00004002, 0x00000000, 0x3e99999a, 0x3dcccccd, 0x00000000, 0x05000036, 0x001020f2,
250 0x00000001, 0x00101e46, 0x00000004, 0x05000036, 0x00102012, 0x00000002, 0x0010100a, 0x00000003,
251 0x05000036, 0x00102062, 0x00000002, 0x00101006, 0x00000009, 0x05000036, 0x00102082, 0x00000002,
252 0x0010100a, 0x0000000e, 0x05000036, 0x001020f2, 0x00000003, 0x00101e46, 0x00000007, 0x05000036,
253 0x001020f2, 0x00000004, 0x00101e46, 0x0000000b, 0x05000036, 0x00102012, 0x00000005, 0x00004001,
254 0x3f800000, 0x05000036, 0x00102022, 0x00000005, 0x00004001, 0x3f800000, 0x05000036, 0x00102012,
255 0x00000006, 0x00004001, 0x00000002, 0x0100003e, 0x54415453, 0x00000074, 0x00000015, 0x00000001,
256 0x00000000, 0x00000012, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000000,
257 0x00000005, 0x00000006, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
258 0x00000000, 0x0000000a, 0x00000000, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
259 0x00000000, 0x00000000, 0x00000000,
262 static const D3D11_SIGNATURE_PARAMETER_DESC test_reflection_desc_vs_resultin
[] =
264 {"SV_position", 0, 0, D3D_NAME_UNDEFINED
, D3D_REGISTER_COMPONENT_FLOAT32
, 0xf, 0x1, 0},
265 {"BINORMAL", 0, 1, D3D_NAME_UNDEFINED
, D3D_REGISTER_COMPONENT_FLOAT32
, 0xf, 0x0, 0},
266 {"BLENDINDICES", 0, 2, D3D_NAME_UNDEFINED
, D3D_REGISTER_COMPONENT_UINT32
, 0x1, 0x0, 0},
267 {"BLENDWEIGHT", 0, 3, D3D_NAME_UNDEFINED
, D3D_REGISTER_COMPONENT_FLOAT32
, 0x1, 0x1, 0},
268 {"COLOR", 0, 4, D3D_NAME_UNDEFINED
, D3D_REGISTER_COMPONENT_FLOAT32
, 0xf, 0xf, 0},
269 {"COLOR", 1, 5, D3D_NAME_UNDEFINED
, D3D_REGISTER_COMPONENT_FLOAT32
, 0xf, 0x0, 0},
270 {"NORMAL", 0, 6, D3D_NAME_UNDEFINED
, D3D_REGISTER_COMPONENT_FLOAT32
, 0xf, 0x0, 0},
271 {"POSITION", 0, 7, D3D_NAME_UNDEFINED
, D3D_REGISTER_COMPONENT_FLOAT32
, 0xf, 0xf, 0},
272 {"POSITIONT", 0, 8, D3D_NAME_UNDEFINED
, D3D_REGISTER_COMPONENT_FLOAT32
, 0xf, 0x0, 0},
273 {"PSIZE", 0, 9, D3D_NAME_UNDEFINED
, D3D_REGISTER_COMPONENT_FLOAT32
, 0x1, 0x1, 0},
274 {"TANGENT", 0, 10, D3D_NAME_UNDEFINED
, D3D_REGISTER_COMPONENT_FLOAT32
, 0xf, 0x0, 0},
275 {"TEXCOORD", 0, 11, D3D_NAME_UNDEFINED
, D3D_REGISTER_COMPONENT_FLOAT32
, 0xf, 0xf, 0},
276 {"SV_VertexID", 0, 12, D3D_NAME_VERTEX_ID
, D3D_REGISTER_COMPONENT_UINT32
, 0x1, 0x0, 0},
277 {"SV_InstanceID", 0, 13, D3D_NAME_INSTANCE_ID
, D3D_REGISTER_COMPONENT_UINT32
, 0x1, 0x0, 0},
278 {"testin", 0, 14, D3D_NAME_UNDEFINED
, D3D_REGISTER_COMPONENT_FLOAT32
, 0x1, 0x1, 0},
281 static const D3D11_SIGNATURE_PARAMETER_DESC test_reflection_desc_vs_resultout
[] =
283 {"SV_position", 0, 0, D3D_NAME_POSITION
, D3D_REGISTER_COMPONENT_FLOAT32
, 0xf, 0x0, 0},
284 {"COLOR", 0, 1, D3D_NAME_UNDEFINED
, D3D_REGISTER_COMPONENT_FLOAT32
, 0xf, 0x0, 0},
285 {"FOG", 0, 2, D3D_NAME_UNDEFINED
, D3D_REGISTER_COMPONENT_FLOAT32
, 0x1, 0xe, 0},
286 {"PSIZE", 0, 2, D3D_NAME_UNDEFINED
, D3D_REGISTER_COMPONENT_FLOAT32
, 0x2, 0xd, 0},
287 {"TESSFACTOR", 0, 2, D3D_NAME_UNDEFINED
, D3D_REGISTER_COMPONENT_FLOAT32
, 0x4, 0xb, 0},
288 {"testout", 0, 2, D3D_NAME_UNDEFINED
, D3D_REGISTER_COMPONENT_FLOAT32
, 0x8, 0x7, 0},
289 {"POSITION", 0, 3, D3D_NAME_UNDEFINED
, D3D_REGISTER_COMPONENT_FLOAT32
, 0xf, 0x0, 0},
290 {"TEXCOORD", 0, 4, D3D_NAME_UNDEFINED
, D3D_REGISTER_COMPONENT_FLOAT32
, 0xf, 0x0, 0},
291 {"SV_ClipDistance", 0, 5, D3D_NAME_CLIP_DISTANCE
, D3D_REGISTER_COMPONENT_FLOAT32
, 0x1, 0xe, 0},
292 {"SV_CullDistance", 0, 5, D3D_NAME_CULL_DISTANCE
, D3D_REGISTER_COMPONENT_FLOAT32
, 0x2, 0xd, 0},
293 {"SV_InstanceID", 0, 6, D3D_NAME_UNDEFINED
, D3D_REGISTER_COMPONENT_UINT32
, 0x1, 0xe, 0},
296 static void test_reflection_desc_vs(void)
300 ID3D11ShaderReflection
*ref11
;
301 D3D11_SHADER_DESC sdesc11
= {0};
302 D3D11_SIGNATURE_PARAMETER_DESC desc
= {0};
303 const D3D11_SIGNATURE_PARAMETER_DESC
*pdesc
;
307 hr
= pD3DReflect(test_reflection_desc_vs_blob
, test_reflection_desc_vs_blob
[6], &IID_ID3D11ShaderReflection
, (void **)&ref11
);
308 ok(hr
== S_OK
, "D3DReflect failed %x\n", hr
);
310 hr
= ref11
->lpVtbl
->GetDesc(ref11
, NULL
);
311 ok(hr
== E_FAIL
, "GetDesc failed %x\n", hr
);
313 hr
= ref11
->lpVtbl
->GetDesc(ref11
, &sdesc11
);
314 ok(hr
== S_OK
, "GetDesc failed %x\n", hr
);
316 ok(sdesc11
.Version
== 65601, "GetDesc failed, got %u, expected %u\n", sdesc11
.Version
, 65601);
317 ok(strcmp(sdesc11
.Creator
, (char*) shader_creator
) == 0, "GetDesc failed, got \"%s\", expected \"%s\"\n", sdesc11
.Creator
, (char*)shader_creator
);
318 ok(sdesc11
.Flags
== 256, "GetDesc failed, got %u, expected %u\n", sdesc11
.Flags
, 256);
319 ok(sdesc11
.ConstantBuffers
== 0, "GetDesc failed, got %u, expected %u\n", sdesc11
.ConstantBuffers
, 0);
320 ok(sdesc11
.BoundResources
== 0, "GetDesc failed, got %u, expected %u\n", sdesc11
.BoundResources
, 0);
321 ok(sdesc11
.InputParameters
== 15, "GetDesc failed, got %u, expected %u\n", sdesc11
.InputParameters
, 15);
322 ok(sdesc11
.OutputParameters
== 11, "GetDesc failed, got %u, expected %u\n", sdesc11
.OutputParameters
, 11);
323 ok(sdesc11
.InstructionCount
== 21, "GetDesc failed, got %u, expected %u\n", sdesc11
.InstructionCount
, 21);
324 ok(sdesc11
.TempRegisterCount
== 1, "GetDesc failed, got %u, expected %u\n", sdesc11
.TempRegisterCount
, 1);
325 ok(sdesc11
.TempArrayCount
== 5, "GetDesc failed, got %u, expected %u\n", sdesc11
.TempArrayCount
, 5);
326 ok(sdesc11
.DefCount
== 0, "GetDesc failed, got %u, expected %u\n", sdesc11
.DefCount
, 0);
327 ok(sdesc11
.DclCount
== 18, "GetDesc failed, got %u, expected %u\n", sdesc11
.DclCount
, 18);
328 ok(sdesc11
.TextureNormalInstructions
== 0, "GetDesc failed, got %u, expected %u\n", sdesc11
.TextureNormalInstructions
, 0);
329 ok(sdesc11
.TextureLoadInstructions
== 0, "GetDesc failed, got %u, expected %u\n", sdesc11
.TextureLoadInstructions
, 0);
330 ok(sdesc11
.TextureCompInstructions
== 0, "GetDesc failed, got %u, expected %u\n", sdesc11
.TextureCompInstructions
, 0);
331 ok(sdesc11
.TextureBiasInstructions
== 0, "GetDesc failed, got %u, expected %u\n", sdesc11
.TextureBiasInstructions
, 0);
332 ok(sdesc11
.TextureGradientInstructions
== 0, "GetDesc failed, got %u, expected %u\n", sdesc11
.TextureGradientInstructions
, 0);
333 ok(sdesc11
.FloatInstructionCount
== 0, "GetDesc failed, got %u, expected %u\n", sdesc11
.FloatInstructionCount
, 0);
334 ok(sdesc11
.IntInstructionCount
== 1, "GetDesc failed, got %u, expected %u\n", sdesc11
.IntInstructionCount
, 1);
335 ok(sdesc11
.UintInstructionCount
== 1, "GetDesc failed, got %u, expected %u\n", sdesc11
.UintInstructionCount
, 1);
336 ok(sdesc11
.StaticFlowControlCount
== 1, "GetDesc failed, got %u, expected %u\n", sdesc11
.StaticFlowControlCount
, 1);
337 ok(sdesc11
.DynamicFlowControlCount
== 0, "GetDesc failed, got %u, expected %u\n", sdesc11
.DynamicFlowControlCount
, 0);
338 ok(sdesc11
.MacroInstructionCount
== 0, "GetDesc failed, got %u, expected %u\n", sdesc11
.MacroInstructionCount
, 0);
339 ok(sdesc11
.ArrayInstructionCount
== 6, "GetDesc failed, got %u, expected %u\n", sdesc11
.ArrayInstructionCount
, 6);
340 ok(sdesc11
.CutInstructionCount
== 0, "GetDesc failed, got %u, expected %u\n", sdesc11
.CutInstructionCount
, 0);
341 ok(sdesc11
.EmitInstructionCount
== 0, "GetDesc failed, got %u, expected %u\n", sdesc11
.EmitInstructionCount
, 0);
342 ok(sdesc11
.GSOutputTopology
== 0, "GetDesc failed, got %x, expected %x\n", sdesc11
.GSOutputTopology
, 0);
343 ok(sdesc11
.GSMaxOutputVertexCount
== 0, "GetDesc failed, got %u, expected %u\n", sdesc11
.GSMaxOutputVertexCount
, 0);
344 ok(sdesc11
.InputPrimitive
== 0, "GetDesc failed, got %x, expected %x\n", sdesc11
.InputPrimitive
, 0);
345 ok(sdesc11
.PatchConstantParameters
== 0, "GetDesc failed, got %u, expected %u\n", sdesc11
.PatchConstantParameters
, 0);
346 ok(sdesc11
.cGSInstanceCount
== 0, "GetDesc failed, got %u, expected %u\n", sdesc11
.cGSInstanceCount
, 0);
347 ok(sdesc11
.cControlPoints
== 0, "GetDesc failed, got %u, expected %u\n", sdesc11
.cControlPoints
, 0);
348 ok(sdesc11
.HSOutputPrimitive
== 0, "GetDesc failed, got %x, expected %x\n", sdesc11
.HSOutputPrimitive
, 0);
349 ok(sdesc11
.HSPartitioning
== 0, "GetDesc failed, got %x, expected %x\n", sdesc11
.HSPartitioning
, 0);
350 ok(sdesc11
.TessellatorDomain
== 0, "GetDesc failed, got %x, expected %x\n", sdesc11
.TessellatorDomain
, 0);
351 ok(sdesc11
.cBarrierInstructions
== 0, "GetDesc failed, got %u, expected %u\n", sdesc11
.cBarrierInstructions
, 0);
352 ok(sdesc11
.cInterlockedInstructions
== 0, "GetDesc failed, got %u, expected %u\n", sdesc11
.cInterlockedInstructions
, 0);
353 ok(sdesc11
.cTextureStoreInstructions
== 0, "GetDesc failed, got %u, expected %u\n", sdesc11
.cTextureStoreInstructions
, 0);
355 ret
= ref11
->lpVtbl
->GetBitwiseInstructionCount(ref11
);
356 ok(ret
== 0, "GetBitwiseInstructionCount failed, got %u, expected %u\n", ret
, 0);
358 ret
= ref11
->lpVtbl
->GetConversionInstructionCount(ref11
);
359 ok(ret
== 2, "GetConversionInstructionCount failed, got %u, expected %u\n", ret
, 2);
361 ret
= ref11
->lpVtbl
->GetMovInstructionCount(ref11
);
362 ok(ret
== 10, "GetMovInstructionCount failed, got %u, expected %u\n", ret
, 10);
364 ret
= ref11
->lpVtbl
->GetMovcInstructionCount(ref11
);
365 ok(ret
== 0, "GetMovcInstructionCount failed, got %u, expected %u\n", ret
, 0);
367 /* GetIn/OutputParameterDesc */
368 for (i
= 0; i
< ARRAY_SIZE(test_reflection_desc_vs_resultin
); ++i
)
370 pdesc
= &test_reflection_desc_vs_resultin
[i
];
372 hr
= ref11
->lpVtbl
->GetInputParameterDesc(ref11
, i
, &desc
);
373 ok(hr
== S_OK
, "GetInputParameterDesc(%u) failed, got %x, expected %x\n", i
, hr
, S_OK
);
375 ok(!strcmp(desc
.SemanticName
, pdesc
->SemanticName
), "GetInputParameterDesc(%u) SemanticName failed, got \"%s\", expected \"%s\"\n",
376 i
, desc
.SemanticName
, pdesc
->SemanticName
);
377 ok(desc
.SemanticIndex
== pdesc
->SemanticIndex
, "GetInputParameterDesc(%u) SemanticIndex failed, got %u, expected %u\n",
378 i
, desc
.SemanticIndex
, pdesc
->SemanticIndex
);
379 ok(desc
.Register
== pdesc
->Register
, "GetInputParameterDesc(%u) Register failed, got %u, expected %u\n",
380 i
, desc
.Register
, pdesc
->Register
);
381 ok(desc
.SystemValueType
== pdesc
->SystemValueType
, "GetInputParameterDesc(%u) SystemValueType failed, got %x, expected %x\n",
382 i
, desc
.SystemValueType
, pdesc
->SystemValueType
);
383 ok(desc
.ComponentType
== pdesc
->ComponentType
, "GetInputParameterDesc(%u) ComponentType failed, got %x, expected %x\n",
384 i
, desc
.ComponentType
, pdesc
->ComponentType
);
385 ok(desc
.Mask
== pdesc
->Mask
, "GetInputParameterDesc(%u) Mask failed, got %x, expected %x\n",
386 i
, desc
.Mask
, pdesc
->Mask
);
387 ok(desc
.ReadWriteMask
== pdesc
->ReadWriteMask
, "GetInputParameterDesc(%u) ReadWriteMask failed, got %x, expected %x\n",
388 i
, desc
.ReadWriteMask
, pdesc
->ReadWriteMask
);
389 ok(desc
.Stream
== pdesc
->Stream
, "GetInputParameterDesc(%u) Stream failed, got %u, expected %u\n",
390 i
, desc
.Stream
, pdesc
->ReadWriteMask
);
393 for (i
= 0; i
< ARRAY_SIZE(test_reflection_desc_vs_resultout
); ++i
)
395 pdesc
= &test_reflection_desc_vs_resultout
[i
];
397 hr
= ref11
->lpVtbl
->GetOutputParameterDesc(ref11
, i
, &desc
);
398 ok(hr
== S_OK
, "GetOutputParameterDesc(%u) failed, got %x, expected %x\n", i
, hr
, S_OK
);
400 ok(!strcmp(desc
.SemanticName
, pdesc
->SemanticName
), "GetOutputParameterDesc(%u) SemanticName failed, got \"%s\", expected \"%s\"\n",
401 i
, desc
.SemanticName
, pdesc
->SemanticName
);
402 ok(desc
.SemanticIndex
== pdesc
->SemanticIndex
, "GetOutputParameterDesc(%u) SemanticIndex failed, got %u, expected %u\n",
403 i
, desc
.SemanticIndex
, pdesc
->SemanticIndex
);
404 ok(desc
.Register
== pdesc
->Register
, "GetOutputParameterDesc(%u) Register failed, got %u, expected %u\n",
405 i
, desc
.Register
, pdesc
->Register
);
406 ok(desc
.SystemValueType
== pdesc
->SystemValueType
, "GetOutputParameterDesc(%u) SystemValueType failed, got %x, expected %x\n",
407 i
, desc
.SystemValueType
, pdesc
->SystemValueType
);
408 ok(desc
.ComponentType
== pdesc
->ComponentType
, "GetOutputParameterDesc(%u) ComponentType failed, got %x, expected %x\n",
409 i
, desc
.ComponentType
, pdesc
->ComponentType
);
410 ok(desc
.Mask
== pdesc
->Mask
, "GetOutputParameterDesc(%u) Mask failed, got %x, expected %x\n",
411 i
, desc
.Mask
, pdesc
->Mask
);
412 ok(desc
.ReadWriteMask
== pdesc
->ReadWriteMask
, "GetOutputParameterDesc(%u) ReadWriteMask failed, got %x, expected %x\n",
413 i
, desc
.ReadWriteMask
, pdesc
->ReadWriteMask
);
414 ok(desc
.Stream
== pdesc
->Stream
, "GetOutputParameterDesc(%u) Stream failed, got %u, expected %u\n",
415 i
, desc
.Stream
, pdesc
->ReadWriteMask
);
418 count
= ref11
->lpVtbl
->Release(ref11
);
419 ok(count
== 0, "Release failed %u\n", count
);
423 * fxc.exe /E PS /Tps_4_1 /Fx
430 Filter
= MIN_MAG_MIP_LINEAR
;
434 SamplerComparisonState samc
436 Filter
= MIN_MAG_MIP_LINEAR
;
439 ComparisonFunc
= LESS
;
443 uint f
: SV_RenderTargetArrayIndex
;
444 uint g
: SV_InstanceID
;
445 uint h
: SV_PrimitiveID
;
446 float2 uv
: TEXCOORD
;
449 float4 c
: SV_position
;
450 bool d
: SV_Coverage
;
451 bool e
: SV_IsFrontFace
;
455 float a
: SV_Target1
;
458 bool c
: SV_Coverage
;
463 float4 x
= tex1
.Sample(sam
, p
.uv
);
464 x
+= tex1
.SampleCmp(samc
, p
.uv
, 0.3f
);
466 x
+= tex2
.SampleCmp(samc
, p
.uv
, 0.4f
);
468 x
+= tex2
.SampleCmp(samc
, p
.uv
, 0.1f
);
470 x
+= tex2
.SampleBias(sam
, p
.uv
, 0.1f
);
472 x
+= tex2
.SampleBias(sam
, p
.uv
, 0.2f
);
474 x
+= tex2
.SampleBias(sam
, p
.uv
, 0.3f
);
476 x
+= tex2
.SampleBias(sam
, p
.uv
, 0.4f
);
477 x
+= tex2
.SampleGrad(sam
, p
.uv
, x
.xy
, x
.xy
);
478 x
+= tex2
.SampleGrad(sam
, p
.uv
, x
.xz
, x
.xz
);
479 x
+= tex2
.SampleGrad(sam
, p
.uv
, x
.xz
, x
.zy
);
480 x
+= tex2
.SampleGrad(sam
, p
.uv
, x
.xz
, x
.zw
);
481 x
+= tex2
.SampleGrad(sam
, p
.uv
, x
.xz
, x
.wz
);
489 static DWORD test_reflection_desc_ps_blob
[] = {
490 0x43425844, 0x19e2f325, 0xf1ec39a3, 0x3c5a8b53, 0x5bd5fb65, 0x00000001, 0x000008d0, 0x00000005,
491 0x00000034, 0x0000011c, 0x00000254, 0x000002e4, 0x00000854, 0x46454452, 0x000000e0, 0x00000000,
492 0x00000000, 0x00000004, 0x0000001c, 0xffff0401, 0x00000100, 0x000000af, 0x0000009c, 0x00000003,
493 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x000000a0, 0x00000003,
494 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000002, 0x000000a5, 0x00000002,
495 0x00000005, 0x00000004, 0xffffffff, 0x00000000, 0x00000001, 0x0000000c, 0x000000aa, 0x00000002,
496 0x00000005, 0x00000004, 0xffffffff, 0x00000001, 0x00000001, 0x0000000c, 0x006d6173, 0x636d6173,
497 0x78657400, 0x65740031, 0x4d003278, 0x6f726369, 0x74666f73, 0x29522820, 0x534c4820, 0x6853204c,
498 0x72656461, 0x6d6f4320, 0x656c6970, 0x2e392072, 0x392e3932, 0x332e3235, 0x00313131, 0x4e475349,
499 0x00000130, 0x00000008, 0x00000008, 0x000000c8, 0x00000000, 0x00000004, 0x00000001, 0x00000000,
500 0x00000001, 0x000000e2, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000002, 0x000000f0,
501 0x00000000, 0x00000007, 0x00000001, 0x00000000, 0x00000004, 0x000000ff, 0x00000000, 0x00000009,
502 0x00000001, 0x00000000, 0x00000008, 0x0000010e, 0x00000000, 0x00000000, 0x00000003, 0x00000001,
503 0x00000303, 0x00000117, 0x00000000, 0x00000000, 0x00000003, 0x00000001, 0x00000004, 0x0000011d,
504 0x00000003, 0x00000000, 0x00000003, 0x00000002, 0x0000000f, 0x00000123, 0x00000000, 0x00000001,
505 0x00000003, 0x00000003, 0x0000000f, 0x525f5653, 0x65646e65, 0x72615472, 0x41746567, 0x79617272,
506 0x65646e49, 0x56530078, 0x736e495f, 0x636e6174, 0x00444965, 0x505f5653, 0x696d6972, 0x65766974,
507 0x53004449, 0x73495f56, 0x6e6f7246, 0x63614674, 0x45540065, 0x4f4f4358, 0x56004452, 0x45434146,
508 0x4c4f4300, 0x5300524f, 0x6f705f56, 0x69746973, 0xab006e6f, 0x4e47534f, 0x00000088, 0x00000004,
509 0x00000008, 0x00000068, 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000e01, 0x00000068,
510 0x00000001, 0x00000000, 0x00000003, 0x00000001, 0x00000e01, 0x00000072, 0x00000000, 0x00000000,
511 0x00000001, 0xffffffff, 0x00000e01, 0x0000007e, 0x00000000, 0x00000000, 0x00000003, 0xffffffff,
512 0x00000e01, 0x545f5653, 0x65677261, 0x56530074, 0x766f435f, 0x67617265, 0x56530065, 0x7065445f,
513 0xab006874, 0x52444853, 0x00000568, 0x00000041, 0x0000015a, 0x0100086a, 0x0300005a, 0x00106000,
514 0x00000000, 0x0300085a, 0x00106000, 0x00000001, 0x04001858, 0x00107000, 0x00000000, 0x00005555,
515 0x04001858, 0x00107000, 0x00000001, 0x00005555, 0x03001062, 0x00101032, 0x00000001, 0x03000065,
516 0x00102012, 0x00000000, 0x03000065, 0x00102012, 0x00000001, 0x02000065, 0x0000f000, 0x02000065,
517 0x0000c001, 0x02000068, 0x00000003, 0x09000045, 0x001000f2, 0x00000000, 0x00101046, 0x00000001,
518 0x00107e46, 0x00000000, 0x00106000, 0x00000000, 0x0b000046, 0x00100012, 0x00000001, 0x00101046,
519 0x00000001, 0x00107006, 0x00000000, 0x00106000, 0x00000001, 0x00004001, 0x3e99999a, 0x07000000,
520 0x001000f2, 0x00000000, 0x00100e46, 0x00000000, 0x00100006, 0x00000001, 0x07000031, 0x00100012,
521 0x00000001, 0x0010001a, 0x00000000, 0x00004001, 0x3dcccccd, 0x0304001f, 0x0010000a, 0x00000001,
522 0x0b000046, 0x00100012, 0x00000001, 0x00101046, 0x00000001, 0x00107006, 0x00000001, 0x00106000,
523 0x00000001, 0x00004001, 0x3ecccccd, 0x07000000, 0x001000f2, 0x00000001, 0x00100e46, 0x00000000,
524 0x00100006, 0x00000001, 0x01000012, 0x07000031, 0x00100012, 0x00000002, 0x0010001a, 0x00000000,
525 0x00004001, 0x3e4ccccd, 0x0304001f, 0x0010000a, 0x00000002, 0x0b000046, 0x00100012, 0x00000002,
526 0x00101046, 0x00000001, 0x00107006, 0x00000001, 0x00106000, 0x00000001, 0x00004001, 0x3dcccccd,
527 0x07000000, 0x001000f2, 0x00000001, 0x00100e46, 0x00000000, 0x00100006, 0x00000002, 0x01000012,
528 0x07000031, 0x00100012, 0x00000002, 0x0010001a, 0x00000000, 0x00004001, 0x3e99999a, 0x0304001f,
529 0x0010000a, 0x00000002, 0x0b00004a, 0x001000f2, 0x00000002, 0x00101046, 0x00000001, 0x00107e46,
530 0x00000001, 0x00106000, 0x00000000, 0x00004001, 0x3dcccccd, 0x07000000, 0x001000f2, 0x00000001,
531 0x00100e46, 0x00000000, 0x00100e46, 0x00000002, 0x01000012, 0x07000031, 0x00100012, 0x00000002,
532 0x0010001a, 0x00000000, 0x00004001, 0x3ecccccd, 0x0304001f, 0x0010000a, 0x00000002, 0x0b00004a,
533 0x001000f2, 0x00000002, 0x00101046, 0x00000001, 0x00107e46, 0x00000001, 0x00106000, 0x00000000,
534 0x00004001, 0x3e4ccccd, 0x07000000, 0x001000f2, 0x00000001, 0x00100e46, 0x00000000, 0x00100e46,
535 0x00000002, 0x01000012, 0x07000031, 0x00100012, 0x00000002, 0x0010001a, 0x00000000, 0x00004001,
536 0x3f000000, 0x0304001f, 0x0010000a, 0x00000002, 0x0b00004a, 0x001000f2, 0x00000002, 0x00101046,
537 0x00000001, 0x00107e46, 0x00000001, 0x00106000, 0x00000000, 0x00004001, 0x3e99999a, 0x07000000,
538 0x001000f2, 0x00000001, 0x00100e46, 0x00000000, 0x00100e46, 0x00000002, 0x01000012, 0x0b00004a,
539 0x001000f2, 0x00000002, 0x00101046, 0x00000001, 0x00107e46, 0x00000001, 0x00106000, 0x00000000,
540 0x00004001, 0x3ecccccd, 0x07000000, 0x001000f2, 0x00000001, 0x00100e46, 0x00000000, 0x00100e46,
541 0x00000002, 0x01000015, 0x01000015, 0x01000015, 0x01000015, 0x01000015, 0x0d000049, 0x001000f2,
542 0x00000000, 0x00101046, 0x00000001, 0x00107e46, 0x00000001, 0x00106000, 0x00000000, 0x00100046,
543 0x00000001, 0x00100046, 0x00000001, 0x07000000, 0x001000f2, 0x00000000, 0x00100e46, 0x00000000,
544 0x00100e46, 0x00000001, 0x0d000049, 0x001000f2, 0x00000001, 0x00101046, 0x00000001, 0x00107e46,
545 0x00000001, 0x00106000, 0x00000000, 0x00100086, 0x00000000, 0x00100086, 0x00000000, 0x07000000,
546 0x001000f2, 0x00000000, 0x00100e46, 0x00000000, 0x00100e46, 0x00000001, 0x0d000049, 0x001000f2,
547 0x00000001, 0x00101046, 0x00000001, 0x00107e46, 0x00000001, 0x00106000, 0x00000000, 0x00100086,
548 0x00000000, 0x00100a66, 0x00000000, 0x07000000, 0x001000f2, 0x00000000, 0x00100e46, 0x00000000,
549 0x00100e46, 0x00000001, 0x0d000049, 0x001000f2, 0x00000001, 0x00101046, 0x00000001, 0x00107e46,
550 0x00000001, 0x00106000, 0x00000000, 0x00100086, 0x00000000, 0x00100ae6, 0x00000000, 0x07000000,
551 0x001000f2, 0x00000000, 0x00100e46, 0x00000000, 0x00100e46, 0x00000001, 0x0d000049, 0x001000c2,
552 0x00000000, 0x00101046, 0x00000001, 0x001074e6, 0x00000001, 0x00106000, 0x00000000, 0x00100086,
553 0x00000000, 0x00100fb6, 0x00000000, 0x07000000, 0x00100032, 0x00000000, 0x00100ae6, 0x00000000,
554 0x00100046, 0x00000000, 0x05000036, 0x00102012, 0x00000001, 0x0010001a, 0x00000000, 0x04000036,
555 0x0000c001, 0x0010000a, 0x00000000, 0x05000036, 0x00102012, 0x00000000, 0x0010000a, 0x00000000,
556 0x04000036, 0x0000f001, 0x00004001, 0xffffffff, 0x0100003e, 0x54415453, 0x00000074, 0x00000032,
557 0x00000003, 0x00000000, 0x00000005, 0x00000011, 0x00000000, 0x00000000, 0x00000006, 0x00000005,
558 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000003,
559 0x00000004, 0x00000005, 0x00000018, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
560 0x00000000, 0x00000000, 0x00000000, 0x00000000,
563 static const D3D11_SIGNATURE_PARAMETER_DESC test_reflection_desc_ps_resultin
[] =
565 {"SV_RenderTargetArrayIndex", 0, 0, D3D_NAME_RENDER_TARGET_ARRAY_INDEX
, D3D_REGISTER_COMPONENT_UINT32
, 0x1, 0x0, 0},
566 {"SV_InstanceID", 0, 0, D3D_NAME_UNDEFINED
, D3D_REGISTER_COMPONENT_UINT32
, 0x2, 0x0, 0},
567 {"SV_PrimitiveID", 0, 0, D3D_NAME_PRIMITIVE_ID
, D3D_REGISTER_COMPONENT_UINT32
, 0x4, 0x0, 0},
568 {"SV_IsFrontFace", 0, 0, D3D_NAME_IS_FRONT_FACE
, D3D_REGISTER_COMPONENT_UINT32
, 0x8, 0x0, 0},
569 {"TEXCOORD", 0, 1, D3D_NAME_UNDEFINED
, D3D_REGISTER_COMPONENT_FLOAT32
, 0x3, 0x3, 0},
570 {"VFACE", 0, 1, D3D_NAME_UNDEFINED
, D3D_REGISTER_COMPONENT_FLOAT32
, 0x4, 0x0, 0},
571 {"COLOR", 3, 2, D3D_NAME_UNDEFINED
, D3D_REGISTER_COMPONENT_FLOAT32
, 0xf, 0x0, 0},
572 {"SV_position", 0, 3, D3D_NAME_POSITION
, D3D_REGISTER_COMPONENT_FLOAT32
, 0xf, 0x0, 0},
575 static const D3D11_SIGNATURE_PARAMETER_DESC test_reflection_desc_ps_resultout
[] =
577 {"SV_Target", 0, 0, D3D_NAME_TARGET
, D3D_REGISTER_COMPONENT_FLOAT32
, 0x1, 0xe, 0},
578 {"SV_Target", 1, 1, D3D_NAME_TARGET
, D3D_REGISTER_COMPONENT_FLOAT32
, 0x1, 0xe, 0},
579 {"SV_Coverage", 0, 0xffffffff, D3D_NAME_COVERAGE
, D3D_REGISTER_COMPONENT_UINT32
, 0x1, 0xe, 0},
580 {"SV_Depth", 0, 0xffffffff, D3D_NAME_DEPTH
, D3D_REGISTER_COMPONENT_FLOAT32
, 0x1, 0xe, 0},
583 static void test_reflection_desc_ps(void)
587 ID3D11ShaderReflection
*ref11
;
588 D3D11_SHADER_DESC sdesc11
= {0};
589 D3D11_SIGNATURE_PARAMETER_DESC desc
= {0};
590 const D3D11_SIGNATURE_PARAMETER_DESC
*pdesc
;
594 hr
= pD3DReflect(test_reflection_desc_ps_blob
, test_reflection_desc_ps_blob
[6], &IID_ID3D11ShaderReflection
, (void **)&ref11
);
595 ok(hr
== S_OK
, "D3DReflect failed %x\n", hr
);
597 hr
= ref11
->lpVtbl
->GetDesc(ref11
, &sdesc11
);
598 ok(hr
== S_OK
, "GetDesc failed %x\n", hr
);
600 ok(sdesc11
.Version
== 65, "GetDesc failed, got %u, expected %u\n", sdesc11
.Version
, 65);
601 ok(strcmp(sdesc11
.Creator
, (char*) shader_creator
) == 0, "GetDesc failed, got \"%s\", expected \"%s\"\n", sdesc11
.Creator
, (char*)shader_creator
);
602 ok(sdesc11
.Flags
== 256, "GetDesc failed, got %u, expected %u\n", sdesc11
.Flags
, 256);
603 ok(sdesc11
.ConstantBuffers
== 0, "GetDesc failed, got %u, expected %u\n", sdesc11
.ConstantBuffers
, 0);
604 ok(sdesc11
.BoundResources
== 4, "GetDesc failed, got %u, expected %u\n", sdesc11
.BoundResources
, 4);
605 ok(sdesc11
.InputParameters
== 8, "GetDesc failed, got %u, expected %u\n", sdesc11
.InputParameters
, 8);
606 ok(sdesc11
.OutputParameters
== 4, "GetDesc failed, got %u, expected %u\n", sdesc11
.OutputParameters
, 4);
607 ok(sdesc11
.InstructionCount
== 50, "GetDesc failed, got %u, expected %u\n", sdesc11
.InstructionCount
, 50);
608 ok(sdesc11
.TempRegisterCount
== 3, "GetDesc failed, got %u, expected %u\n", sdesc11
.TempRegisterCount
, 3);
609 ok(sdesc11
.TempArrayCount
== 0, "GetDesc failed, got %u, expected %u\n", sdesc11
.TempArrayCount
, 0);
610 ok(sdesc11
.DefCount
== 0, "GetDesc failed, got %u, expected %u\n", sdesc11
.DefCount
, 0);
611 ok(sdesc11
.DclCount
== 5, "GetDesc failed, got %u, expected %u\n", sdesc11
.DclCount
, 5);
612 ok(sdesc11
.TextureNormalInstructions
== 1, "GetDesc failed, got %u, expected %u\n", sdesc11
.TextureNormalInstructions
, 1);
613 ok(sdesc11
.TextureLoadInstructions
== 0, "GetDesc failed, got %u, expected %u\n", sdesc11
.TextureLoadInstructions
, 0);
614 ok(sdesc11
.TextureCompInstructions
== 3, "GetDesc failed, got %u, expected %u\n", sdesc11
.TextureCompInstructions
, 3);
615 ok(sdesc11
.TextureBiasInstructions
== 4, "GetDesc failed, got %u, expected %u\n", sdesc11
.TextureBiasInstructions
, 4);
616 ok(sdesc11
.TextureGradientInstructions
== 5, "GetDesc failed, got %u, expected %u\n", sdesc11
.TextureGradientInstructions
, 5);
617 ok(sdesc11
.FloatInstructionCount
== 17, "GetDesc failed, got %u, expected %u\n", sdesc11
.FloatInstructionCount
, 17);
618 ok(sdesc11
.IntInstructionCount
== 0, "GetDesc failed, got %u, expected %u\n", sdesc11
.IntInstructionCount
, 0);
619 ok(sdesc11
.UintInstructionCount
== 0, "GetDesc failed, got %u, expected %u\n", sdesc11
.UintInstructionCount
, 0);
620 ok(sdesc11
.StaticFlowControlCount
== 6, "GetDesc failed, got %u, expected %u\n", sdesc11
.StaticFlowControlCount
, 6);
621 ok(sdesc11
.DynamicFlowControlCount
== 5, "GetDesc failed, got %u, expected %u\n", sdesc11
.DynamicFlowControlCount
, 5);
622 ok(sdesc11
.MacroInstructionCount
== 0, "GetDesc failed, got %u, expected %u\n", sdesc11
.MacroInstructionCount
, 0);
623 ok(sdesc11
.ArrayInstructionCount
== 0, "GetDesc failed, got %u, expected %u\n", sdesc11
.ArrayInstructionCount
, 0);
624 ok(sdesc11
.CutInstructionCount
== 0, "GetDesc failed, got %u, expected %u\n", sdesc11
.CutInstructionCount
, 0);
625 ok(sdesc11
.EmitInstructionCount
== 0, "GetDesc failed, got %u, expected %u\n", sdesc11
.EmitInstructionCount
, 0);
626 ok(sdesc11
.GSOutputTopology
== 0, "GetDesc failed, got %x, expected %x\n", sdesc11
.GSOutputTopology
, 0);
627 ok(sdesc11
.GSMaxOutputVertexCount
== 0, "GetDesc failed, got %u, expected %u\n", sdesc11
.GSMaxOutputVertexCount
, 0);
628 ok(sdesc11
.InputPrimitive
== 0, "GetDesc failed, got %x, expected %x\n", sdesc11
.InputPrimitive
, 0);
629 ok(sdesc11
.PatchConstantParameters
== 0, "GetDesc failed, got %u, expected %u\n", sdesc11
.PatchConstantParameters
, 0);
630 ok(sdesc11
.cGSInstanceCount
== 0, "GetDesc failed, got %u, expected %u\n", sdesc11
.cGSInstanceCount
, 0);
631 ok(sdesc11
.cControlPoints
== 0, "GetDesc failed, got %u, expected %u\n", sdesc11
.cControlPoints
, 0);
632 ok(sdesc11
.HSOutputPrimitive
== 0, "GetDesc failed, got %x, expected %x\n", sdesc11
.HSOutputPrimitive
, 0);
633 ok(sdesc11
.HSPartitioning
== 0, "GetDesc failed, got %x, expected %x\n", sdesc11
.HSPartitioning
, 0);
634 ok(sdesc11
.TessellatorDomain
== 0, "GetDesc failed, got %x, expected %x\n", sdesc11
.TessellatorDomain
, 0);
635 ok(sdesc11
.cBarrierInstructions
== 0, "GetDesc failed, got %u, expected %u\n", sdesc11
.cBarrierInstructions
, 0);
636 ok(sdesc11
.cInterlockedInstructions
== 0, "GetDesc failed, got %u, expected %u\n", sdesc11
.cInterlockedInstructions
, 0);
637 ok(sdesc11
.cTextureStoreInstructions
== 0, "GetDesc failed, got %u, expected %u\n", sdesc11
.cTextureStoreInstructions
, 0);
639 ret
= ref11
->lpVtbl
->GetBitwiseInstructionCount(ref11
);
640 ok(ret
== 0, "GetBitwiseInstructionCount failed, got %u, expected %u\n", ret
, 0);
642 ret
= ref11
->lpVtbl
->GetConversionInstructionCount(ref11
);
643 ok(ret
== 0, "GetConversionInstructionCount failed, got %u, expected %u\n", ret
, 0);
645 ret
= ref11
->lpVtbl
->GetMovInstructionCount(ref11
);
646 ok(ret
== 24, "GetMovInstructionCount failed, got %u, expected %u\n", ret
, 24);
648 ret
= ref11
->lpVtbl
->GetMovcInstructionCount(ref11
);
649 ok(ret
== 0, "GetMovcInstructionCount failed, got %u, expected %u\n", ret
, 0);
651 /* check invalid Get*ParameterDesc cases*/
652 hr
= ref11
->lpVtbl
->GetInputParameterDesc(ref11
, 0, NULL
);
653 ok(hr
== E_INVALIDARG
, "GetInputParameterDesc failed, got %x, expected %x\n", hr
, E_INVALIDARG
);
655 hr
= ref11
->lpVtbl
->GetInputParameterDesc(ref11
, 0xffffffff, &desc
);
656 ok(hr
== E_INVALIDARG
, "GetInputParameterDesc failed, got %x, expected %x\n", hr
, E_INVALIDARG
);
658 hr
= ref11
->lpVtbl
->GetOutputParameterDesc(ref11
, 0, NULL
);
659 ok(hr
== E_INVALIDARG
, "GetOutputParameterDesc failed, got %x, expected %x\n", hr
, E_INVALIDARG
);
661 hr
= ref11
->lpVtbl
->GetOutputParameterDesc(ref11
, 0xffffffff, &desc
);
662 ok(hr
== E_INVALIDARG
, "GetOutputParameterDesc failed, got %x, expected %x\n", hr
, E_INVALIDARG
);
664 hr
= ref11
->lpVtbl
->GetPatchConstantParameterDesc(ref11
, 0, &desc
);
665 ok(hr
== E_INVALIDARG
, "GetPatchConstantParameterDesc failed, got %x, expected %x\n", hr
, E_INVALIDARG
);
667 /* GetIn/OutputParameterDesc */
668 for (i
= 0; i
< ARRAY_SIZE(test_reflection_desc_ps_resultin
); ++i
)
670 pdesc
= &test_reflection_desc_ps_resultin
[i
];
672 hr
= ref11
->lpVtbl
->GetInputParameterDesc(ref11
, i
, &desc
);
673 ok(hr
== S_OK
, "GetInputParameterDesc(%u) failed, got %x, expected %x\n", i
, hr
, S_OK
);
675 ok(!strcmp(desc
.SemanticName
, pdesc
->SemanticName
), "GetInputParameterDesc(%u) SemanticName failed, got \"%s\", expected \"%s\"\n",
676 i
, desc
.SemanticName
, pdesc
->SemanticName
);
677 ok(desc
.SemanticIndex
== pdesc
->SemanticIndex
, "GetInputParameterDesc(%u) SemanticIndex failed, got %u, expected %u\n",
678 i
, desc
.SemanticIndex
, pdesc
->SemanticIndex
);
679 ok(desc
.Register
== pdesc
->Register
, "GetInputParameterDesc(%u) Register failed, got %u, expected %u\n",
680 i
, desc
.Register
, pdesc
->Register
);
681 ok(desc
.SystemValueType
== pdesc
->SystemValueType
, "GetInputParameterDesc(%u) SystemValueType failed, got %x, expected %x\n",
682 i
, desc
.SystemValueType
, pdesc
->SystemValueType
);
683 ok(desc
.ComponentType
== pdesc
->ComponentType
, "GetInputParameterDesc(%u) ComponentType failed, got %x, expected %x\n",
684 i
, desc
.ComponentType
, pdesc
->ComponentType
);
685 ok(desc
.Mask
== pdesc
->Mask
, "GetInputParameterDesc(%u) Mask failed, got %x, expected %x\n",
686 i
, desc
.Mask
, pdesc
->Mask
);
687 ok(desc
.ReadWriteMask
== pdesc
->ReadWriteMask
, "GetInputParameterDesc(%u) ReadWriteMask failed, got %x, expected %x\n",
688 i
, desc
.ReadWriteMask
, pdesc
->ReadWriteMask
);
689 ok(desc
.Stream
== pdesc
->Stream
, "GetInputParameterDesc(%u) Stream failed, got %u, expected %u\n",
690 i
, desc
.Stream
, pdesc
->ReadWriteMask
);
693 for (i
= 0; i
< ARRAY_SIZE(test_reflection_desc_ps_resultout
); ++i
)
695 pdesc
= &test_reflection_desc_ps_resultout
[i
];
697 hr
= ref11
->lpVtbl
->GetOutputParameterDesc(ref11
, i
, &desc
);
698 ok(hr
== S_OK
, "GetOutputParameterDesc(%u) failed, got %x, expected %x\n", i
, hr
, S_OK
);
700 ok(!strcmp(desc
.SemanticName
, pdesc
->SemanticName
), "GetOutputParameterDesc(%u) SemanticName failed, got \"%s\", expected \"%s\"\n",
701 i
, desc
.SemanticName
, pdesc
->SemanticName
);
702 ok(desc
.SemanticIndex
== pdesc
->SemanticIndex
, "GetOutputParameterDesc(%u) SemanticIndex failed, got %u, expected %u\n",
703 i
, desc
.SemanticIndex
, pdesc
->SemanticIndex
);
704 ok(desc
.Register
== pdesc
->Register
, "GetOutputParameterDesc(%u) Register failed, got %u, expected %u\n",
705 i
, desc
.Register
, pdesc
->Register
);
706 ok(desc
.SystemValueType
== pdesc
->SystemValueType
, "GetOutputParameterDesc(%u) SystemValueType failed, got %x, expected %x\n",
707 i
, desc
.SystemValueType
, pdesc
->SystemValueType
);
708 ok(desc
.ComponentType
== pdesc
->ComponentType
, "GetOutputParameterDesc(%u) ComponentType failed, got %x, expected %x\n",
709 i
, desc
.ComponentType
, pdesc
->ComponentType
);
710 ok(desc
.Mask
== pdesc
->Mask
, "GetOutputParameterDesc(%u) Mask failed, got %x, expected %x\n",
711 i
, desc
.Mask
, pdesc
->Mask
);
712 ok(desc
.ReadWriteMask
== pdesc
->ReadWriteMask
, "GetOutputParameterDesc(%u) ReadWriteMask failed, got %x, expected %x\n",
713 i
, desc
.ReadWriteMask
, pdesc
->ReadWriteMask
);
714 ok(desc
.Stream
== pdesc
->Stream
, "GetOutputParameterDesc(%u) Stream failed, got %u, expected %u\n",
715 i
, desc
.Stream
, pdesc
->ReadWriteMask
);
718 count
= ref11
->lpVtbl
->Release(ref11
);
719 ok(count
== 0, "Release failed %u\n", count
);
723 * fxc.exe /E PS /Tps_5_0 /Fx
726 float4
PS() : SV_Target3
728 float4 a
= float4(1.2f
, 1.0f
, 0.2f
, 0.0f
);
732 static const DWORD test_reflection_desc_ps_output_blob_0
[] = {
733 0x43425844, 0x3e7b77e6, 0xe4e920b7, 0x9cad0533, 0x240117cc, 0x00000001, 0x0000018c, 0x00000005,
734 0x00000034, 0x0000008c, 0x0000009c, 0x000000d0, 0x00000110, 0x46454452, 0x00000050, 0x00000000,
735 0x00000000, 0x00000000, 0x0000001c, 0xffff0400, 0x00000100, 0x0000001c, 0x7263694d, 0x666f736f,
736 0x52282074, 0x4c482029, 0x53204c53, 0x65646168, 0x6f432072, 0x6c69706d, 0x39207265, 0x2e39322e,
737 0x2e323539, 0x31313133, 0xababab00, 0x4e475349, 0x00000008, 0x00000000, 0x00000008, 0x4e47534f,
738 0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000003, 0x00000000, 0x00000003, 0x00000003,
739 0x0000000f, 0x545f5653, 0x65677261, 0xabab0074, 0x52444853, 0x00000038, 0x00000040, 0x0000000e,
740 0x03000065, 0x001020f2, 0x00000003, 0x08000036, 0x001020f2, 0x00000003, 0x00004002, 0x3f99999a,
741 0x3f800000, 0x3e4ccccd, 0x00000000, 0x0100003e, 0x54415453, 0x00000074, 0x00000002, 0x00000000,
742 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000,
743 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
744 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
745 0x00000000, 0x00000000, 0x00000000
749 * fxc.exe /E PS /Tps_5_0 /Fx
752 float PS() : SV_DepthLessEqual
758 static const DWORD test_reflection_desc_ps_output_blob_1
[] = {
759 0x43425844, 0xd8ead3ec, 0x61276ada, 0x70cdaa9e, 0x2cfd7f4c, 0x00000001, 0x000001c4, 0x00000005,
760 0x00000034, 0x000000ac, 0x000000bc, 0x000000f8, 0x00000128, 0x46454452, 0x00000070, 0x00000000,
761 0x00000000, 0x00000000, 0x0000003c, 0xffff0500, 0x00000100, 0x0000003c, 0x31314452, 0x0000003c,
762 0x00000018, 0x00000020, 0x00000028, 0x00000024, 0x0000000c, 0x00000000, 0x7263694d, 0x666f736f,
763 0x52282074, 0x4c482029, 0x53204c53, 0x65646168, 0x6f432072, 0x6c69706d, 0x39207265, 0x2e39322e,
764 0x2e323539, 0x31313133, 0xababab00, 0x4e475349, 0x00000008, 0x00000000, 0x00000008, 0x4e47534f,
765 0x00000034, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000000, 0x00000003, 0xffffffff,
766 0x00000e01, 0x445f5653, 0x68747065, 0x7373654c, 0x61757145, 0xabab006c, 0x58454853, 0x00000028,
767 0x00000050, 0x0000000a, 0x0100086a, 0x02000065, 0x00027001, 0x04000036, 0x00027001, 0x00004001,
768 0x3f99999a, 0x0100003e, 0x54415453, 0x00000094, 0x00000002, 0x00000000, 0x00000000, 0x00000001,
769 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
770 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001,
771 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
772 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
777 * fxc.exe /E PS /Tps_5_0 /Fx
780 float PS() : SV_DepthGreaterEqual
786 static const DWORD test_reflection_desc_ps_output_blob_2
[] = {
787 0x43425844, 0x9f61c8df, 0x612cbb1f, 0x9e1d039e, 0xf925a074, 0x00000001, 0x000001c8, 0x00000005,
788 0x00000034, 0x000000ac, 0x000000bc, 0x000000fc, 0x0000012c, 0x46454452, 0x00000070, 0x00000000,
789 0x00000000, 0x00000000, 0x0000003c, 0xffff0500, 0x00000100, 0x0000003c, 0x31314452, 0x0000003c,
790 0x00000018, 0x00000020, 0x00000028, 0x00000024, 0x0000000c, 0x00000000, 0x7263694d, 0x666f736f,
791 0x52282074, 0x4c482029, 0x53204c53, 0x65646168, 0x6f432072, 0x6c69706d, 0x39207265, 0x2e39322e,
792 0x2e323539, 0x31313133, 0xababab00, 0x4e475349, 0x00000008, 0x00000000, 0x00000008, 0x4e47534f,
793 0x00000038, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000000, 0x00000003, 0xffffffff,
794 0x00000e01, 0x445f5653, 0x68747065, 0x61657247, 0x45726574, 0x6c617571, 0xababab00, 0x58454853,
795 0x00000028, 0x00000050, 0x0000000a, 0x0100086a, 0x02000065, 0x00026001, 0x04000036, 0x00026001,
796 0x00004001, 0x3f99999a, 0x0100003e, 0x54415453, 0x00000094, 0x00000002, 0x00000000, 0x00000000,
797 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000,
798 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
799 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
800 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
801 0x00000000, 0x00000000,
805 * fxc.exe /E PS /Tps_5_0 /Fx
808 float PS() : sV_DePtH
814 static const DWORD test_reflection_desc_ps_output_blob_3
[] = {
815 0x43425844, 0x32cec0e6, 0x3873ed32, 0x2e86ffd0, 0x21bb00e8, 0x00000001, 0x000001bc, 0x00000005,
816 0x00000034, 0x000000ac, 0x000000bc, 0x000000f0, 0x00000120, 0x46454452, 0x00000070, 0x00000000,
817 0x00000000, 0x00000000, 0x0000003c, 0xffff0500, 0x00000100, 0x0000003c, 0x31314452, 0x0000003c,
818 0x00000018, 0x00000020, 0x00000028, 0x00000024, 0x0000000c, 0x00000000, 0x7263694d, 0x666f736f,
819 0x52282074, 0x4c482029, 0x53204c53, 0x65646168, 0x6f432072, 0x6c69706d, 0x39207265, 0x2e39322e,
820 0x2e323539, 0x31313133, 0xababab00, 0x4e475349, 0x00000008, 0x00000000, 0x00000008, 0x4e47534f,
821 0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000000, 0x00000003, 0xffffffff,
822 0x00000e01, 0x445f5673, 0x48745065, 0xababab00, 0x58454853, 0x00000028, 0x00000050, 0x0000000a,
823 0x0100086a, 0x02000065, 0x0000c001, 0x04000036, 0x0000c001, 0x00004001, 0x3f99999a, 0x0100003e,
824 0x54415453, 0x00000094, 0x00000002, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000,
825 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
826 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000,
827 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
828 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
832 * fxc.exe /E PS /Tps_4_0 /Fx
835 float PS() : SV_Depth
841 static const DWORD test_reflection_desc_ps_output_blob_4
[] = {
842 0x43425844, 0x7af34874, 0x975f09ad, 0xf6e50764, 0xdfb1255f, 0x00000001, 0x00000178, 0x00000005,
843 0x00000034, 0x0000008c, 0x0000009c, 0x000000d0, 0x000000fc, 0x46454452, 0x00000050, 0x00000000,
844 0x00000000, 0x00000000, 0x0000001c, 0xffff0400, 0x00000100, 0x0000001c, 0x7263694d, 0x666f736f,
845 0x52282074, 0x4c482029, 0x53204c53, 0x65646168, 0x6f432072, 0x6c69706d, 0x39207265, 0x2e39322e,
846 0x2e323539, 0x31313133, 0xababab00, 0x4e475349, 0x00000008, 0x00000000, 0x00000008, 0x4e47534f,
847 0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000000, 0x00000003, 0xffffffff,
848 0x00000e01, 0x445f5653, 0x68747065, 0xababab00, 0x52444853, 0x00000024, 0x00000040, 0x00000009,
849 0x02000065, 0x0000c001, 0x04000036, 0x0000c001, 0x00004001, 0x3f99999a, 0x0100003e, 0x54415453,
850 0x00000074, 0x00000002, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000,
851 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
852 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000,
853 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
857 * fxc.exe /E PS /Tps_4_0 /Fx
860 bool PS() : SV_COVERAGE
866 static const DWORD test_reflection_desc_ps_output_blob_5
[] = {
867 0x43425844, 0x40ae32a7, 0xe944bb1c, 0x1a2b1923, 0xea25962d, 0x00000001, 0x000001bc, 0x00000005,
868 0x00000034, 0x000000ac, 0x000000bc, 0x000000f0, 0x00000120, 0x46454452, 0x00000070, 0x00000000,
869 0x00000000, 0x00000000, 0x0000003c, 0xffff0500, 0x00000100, 0x0000003c, 0x31314452, 0x0000003c,
870 0x00000018, 0x00000020, 0x00000028, 0x00000024, 0x0000000c, 0x00000000, 0x7263694d, 0x666f736f,
871 0x52282074, 0x4c482029, 0x53204c53, 0x65646168, 0x6f432072, 0x6c69706d, 0x39207265, 0x2e39322e,
872 0x2e323539, 0x31313133, 0xababab00, 0x4e475349, 0x00000008, 0x00000000, 0x00000008, 0x4e47534f,
873 0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000000, 0x00000001, 0xffffffff,
874 0x00000e01, 0x435f5653, 0x5245564f, 0x00454741, 0x58454853, 0x00000028, 0x00000050, 0x0000000a,
875 0x0100086a, 0x02000065, 0x0000f000, 0x04000036, 0x0000f001, 0x00004001, 0xffffffff, 0x0100003e,
876 0x54415453, 0x00000094, 0x00000002, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000,
877 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
878 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000,
879 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
880 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
883 static const DWORD
*test_reflection_desc_ps_output_blob
[] = {
884 test_reflection_desc_ps_output_blob_0
,
885 test_reflection_desc_ps_output_blob_1
,
886 test_reflection_desc_ps_output_blob_2
,
887 test_reflection_desc_ps_output_blob_3
,
888 test_reflection_desc_ps_output_blob_4
,
889 test_reflection_desc_ps_output_blob_5
,
892 static const D3D11_SIGNATURE_PARAMETER_DESC test_reflection_desc_ps_output_result
[] =
894 {"SV_Target", 3, 3, D3D_NAME_TARGET
, D3D_REGISTER_COMPONENT_FLOAT32
, 0xf, 0, 0},
895 {"SV_DepthLessEqual", 0, 0xffffffff, D3D_NAME_DEPTH_LESS_EQUAL
, D3D_REGISTER_COMPONENT_FLOAT32
, 0x1, 0xe, 0},
896 {"SV_DepthGreaterEqual", 0, 0xffffffff, D3D11_NAME_DEPTH_GREATER_EQUAL
, D3D_REGISTER_COMPONENT_FLOAT32
, 0x1, 0xe, 0},
897 {"sV_DePtH", 0, 0xffffffff, D3D_NAME_DEPTH
, D3D_REGISTER_COMPONENT_FLOAT32
, 0x1, 0xe, 0},
898 {"SV_Depth", 0, 0xffffffff, D3D_NAME_DEPTH
, D3D_REGISTER_COMPONENT_FLOAT32
, 0x1, 0xe, 0},
899 {"SV_COVERAGE", 0, 0xffffffff, D3D_NAME_COVERAGE
, D3D_REGISTER_COMPONENT_UINT32
, 0x1, 0xe, 0},
902 static void test_reflection_desc_ps_output(void)
906 ID3D11ShaderReflection
*ref11
;
907 D3D11_SIGNATURE_PARAMETER_DESC desc
= {0};
908 const D3D11_SIGNATURE_PARAMETER_DESC
*pdesc
;
911 for (i
= 0; i
< ARRAY_SIZE(test_reflection_desc_ps_output_result
); ++i
)
913 hr
= pD3DReflect(test_reflection_desc_ps_output_blob
[i
], test_reflection_desc_ps_output_blob
[i
][6], &IID_ID3D11ShaderReflection
, (void **)&ref11
);
914 ok(hr
== S_OK
, "(%u): D3DReflect failed %x\n", i
, hr
);
916 pdesc
= &test_reflection_desc_ps_output_result
[i
];
918 hr
= ref11
->lpVtbl
->GetOutputParameterDesc(ref11
, 0, &desc
);
919 ok(hr
== S_OK
, "(%u): GetOutputParameterDesc failed, got %x, expected %x\n", i
, hr
, S_OK
);
921 ok(!strcmp(desc
.SemanticName
, pdesc
->SemanticName
), "(%u): GetOutputParameterDesc SemanticName failed, got \"%s\", expected \"%s\"\n",
922 i
, desc
.SemanticName
, pdesc
->SemanticName
);
923 ok(desc
.SemanticIndex
== pdesc
->SemanticIndex
, "(%u): GetOutputParameterDesc SemanticIndex failed, got %u, expected %u\n",
924 i
, desc
.SemanticIndex
, pdesc
->SemanticIndex
);
925 ok(desc
.Register
== pdesc
->Register
, "(%u): GetOutputParameterDesc Register failed, got %u, expected %u\n",
926 i
, desc
.Register
, pdesc
->Register
);
927 ok(desc
.SystemValueType
== pdesc
->SystemValueType
, "(%u): GetOutputParameterDesc SystemValueType failed, got %x, expected %x\n",
928 i
, desc
.SystemValueType
, pdesc
->SystemValueType
);
929 ok(desc
.ComponentType
== pdesc
->ComponentType
, "(%u): GetOutputParameterDesc ComponentType failed, got %x, expected %x\n",
930 i
, desc
.ComponentType
, pdesc
->ComponentType
);
931 ok(desc
.Mask
== pdesc
->Mask
, "(%u): GetOutputParameterDesc Mask failed, got %x, expected %x\n",
932 i
, desc
.Mask
, pdesc
->Mask
);
933 ok(desc
.ReadWriteMask
== pdesc
->ReadWriteMask
, "(%u): GetOutputParameterDesc ReadWriteMask failed, got %x, expected %x\n",
934 i
, desc
.ReadWriteMask
, pdesc
->ReadWriteMask
);
935 ok(desc
.Stream
== pdesc
->Stream
, "(%u): GetOutputParameterDesc Stream failed, got %u, expected %u\n",
936 i
, desc
.Stream
, pdesc
->ReadWriteMask
);
938 count
= ref11
->lpVtbl
->Release(ref11
);
939 ok(count
== 0, "(%u): Release failed %u\n", i
, count
);
944 * fxc.exe /E PS /Tps_4_0 /Fx
950 Filter
= MIN_MAG_MIP_LINEAR
;
965 float4
PS(float2 uv
: TEXCOORD0
) : sv_target
967 float4 q
= tex1
.Sample(sam
, uv
);
969 q
.w
= q
.w
+ y
[0] + y
[1] + t
;
973 static DWORD test_reflection_bound_resources_blob
[] = {
974 0x43425844, 0xe4af0279, 0x690268fc, 0x76bf6a72, 0xe5aff43b, 0x00000001, 0x000003f4, 0x00000005,
975 0x00000034, 0x000001e8, 0x0000021c, 0x00000250, 0x00000378, 0x46454452, 0x000001ac, 0x00000002,
976 0x000000ac, 0x00000004, 0x0000001c, 0xffff0400, 0x00000100, 0x0000017a, 0x0000009c, 0x00000003,
977 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x000000a0, 0x00000002,
978 0x00000005, 0x00000004, 0xffffffff, 0x00000000, 0x00000001, 0x0000000c, 0x000000a5, 0x00000000,
979 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x000000a8, 0x00000000,
980 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0x00000000, 0x006d6173, 0x31786574,
981 0x00316300, 0xab003263, 0x000000a5, 0x00000003, 0x000000dc, 0x00000030, 0x00000000, 0x00000000,
982 0x000000a8, 0x00000001, 0x00000160, 0x00000010, 0x00000000, 0x00000000, 0x00000124, 0x00000000,
983 0x00000004, 0x00000002, 0x00000128, 0x00000000, 0x00000138, 0x00000010, 0x00000014, 0x00000002,
984 0x0000013c, 0x00000000, 0x0000014c, 0x00000024, 0x00000004, 0x00000000, 0x00000150, 0x00000000,
985 0xabab0078, 0x00030000, 0x00010001, 0x00000000, 0x00000000, 0xabab0079, 0x00030000, 0x00010001,
986 0x00000002, 0x00000000, 0xabab007a, 0x00020000, 0x00010001, 0x00000000, 0x00000000, 0x00000178,
987 0x00000000, 0x00000004, 0x00000002, 0x00000128, 0x00000000, 0x694d0074, 0x736f7263, 0x2074666f,
988 0x20295228, 0x4c534c48, 0x61685320, 0x20726564, 0x706d6f43, 0x72656c69, 0x322e3920, 0x35392e39,
989 0x31332e32, 0xab003131, 0x4e475349, 0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000000,
990 0x00000000, 0x00000003, 0x00000000, 0x00000303, 0x43584554, 0x44524f4f, 0xababab00, 0x4e47534f,
991 0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000000, 0x00000003, 0x00000000,
992 0x0000000f, 0x745f7673, 0x65677261, 0xabab0074, 0x52444853, 0x00000120, 0x00000040, 0x00000048,
993 0x04000059, 0x00208e46, 0x00000000, 0x00000003, 0x04000059, 0x00208e46, 0x00000001, 0x00000001,
994 0x0300005a, 0x00106000, 0x00000000, 0x04001858, 0x00107000, 0x00000000, 0x00005555, 0x03001062,
995 0x00101032, 0x00000000, 0x03000065, 0x001020f2, 0x00000000, 0x02000068, 0x00000001, 0x09000045,
996 0x001000f2, 0x00000000, 0x00101046, 0x00000000, 0x00107e46, 0x00000000, 0x00106000, 0x00000000,
997 0x08000000, 0x00100082, 0x00000000, 0x0010003a, 0x00000000, 0x0020800a, 0x00000000, 0x00000001,
998 0x08000000, 0x00100082, 0x00000000, 0x0010003a, 0x00000000, 0x0020800a, 0x00000000, 0x00000002,
999 0x08000000, 0x00102082, 0x00000000, 0x0010003a, 0x00000000, 0x0020800a, 0x00000001, 0x00000000,
1000 0x08000000, 0x00102012, 0x00000000, 0x0010000a, 0x00000000, 0x0020800a, 0x00000000, 0x00000000,
1001 0x05000036, 0x00102062, 0x00000000, 0x00100656, 0x00000000, 0x0100003e, 0x54415453, 0x00000074,
1002 0x00000007, 0x00000001, 0x00000000, 0x00000002, 0x00000004, 0x00000000, 0x00000000, 0x00000001,
1003 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000,
1004 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1005 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1008 static const D3D11_SHADER_INPUT_BIND_DESC test_reflection_bound_resources_result
[] =
1010 {"sam", D3D_SIT_SAMPLER
, 0, 1, 0, 0, D3D_SRV_DIMENSION_UNKNOWN
, 0},
1011 {"tex1", D3D_SIT_TEXTURE
, 0, 1, 12, D3D_RETURN_TYPE_FLOAT
, D3D_SRV_DIMENSION_TEXTURE2D
, 0xffffffff},
1012 {"c1", D3D_SIT_CBUFFER
, 0, 1, 0, 0, D3D_SRV_DIMENSION_UNKNOWN
, 0},
1013 {"c2", D3D_SIT_CBUFFER
, 1, 1, 0, 0, D3D_SRV_DIMENSION_UNKNOWN
, 0},
1016 static void test_reflection_bound_resources(void)
1020 ID3D11ShaderReflection
*ref11
;
1021 D3D11_SHADER_INPUT_BIND_DESC desc
;
1022 const D3D11_SHADER_INPUT_BIND_DESC
*pdesc
;
1025 hr
= pD3DReflect(test_reflection_bound_resources_blob
, test_reflection_bound_resources_blob
[6], &IID_ID3D11ShaderReflection
, (void **)&ref11
);
1026 ok(hr
== S_OK
, "D3DReflect failed %x\n", hr
);
1028 /* check invalid cases */
1029 hr
= ref11
->lpVtbl
->GetResourceBindingDesc(ref11
, 0, NULL
);
1030 ok(hr
== E_INVALIDARG
, "GetResourceBindingDesc failed, got %x, expected %x\n", hr
, E_INVALIDARG
);
1032 hr
= ref11
->lpVtbl
->GetResourceBindingDesc(ref11
, 0xffffffff, &desc
);
1033 ok(hr
== E_INVALIDARG
, "GetResourceBindingDesc failed, got %x, expected %x\n", hr
, E_INVALIDARG
);
1035 hr
= ref11
->lpVtbl
->GetResourceBindingDescByName(ref11
, NULL
, &desc
);
1036 ok(hr
== E_INVALIDARG
, "GetResourceBindingDescByName failed, got %x, expected %x\n", hr
, E_INVALIDARG
);
1038 hr
= ref11
->lpVtbl
->GetResourceBindingDescByName(ref11
, "sam", NULL
);
1039 ok(hr
== E_INVALIDARG
, "GetResourceBindingDescByName failed, got %x, expected %x\n", hr
, E_INVALIDARG
);
1041 hr
= ref11
->lpVtbl
->GetResourceBindingDescByName(ref11
, "invalid", NULL
);
1042 ok(hr
== E_INVALIDARG
, "GetResourceBindingDescByName failed, got %x, expected %x\n", hr
, E_INVALIDARG
);
1044 hr
= ref11
->lpVtbl
->GetResourceBindingDescByName(ref11
, "invalid", &desc
);
1045 ok(hr
== E_INVALIDARG
, "GetResourceBindingDescByName failed, got %x, expected %x\n", hr
, E_INVALIDARG
);
1047 /* GetResourceBindingDesc */
1048 for (i
= 0; i
< ARRAY_SIZE(test_reflection_bound_resources_result
); ++i
)
1050 pdesc
= &test_reflection_bound_resources_result
[i
];
1052 hr
= ref11
->lpVtbl
->GetResourceBindingDesc(ref11
, i
, &desc
);
1053 ok(hr
== S_OK
, "GetResourceBindingDesc(%u) failed, got %x, expected %x\n", i
, hr
, S_OK
);
1055 ok(!strcmp(desc
.Name
, pdesc
->Name
), "GetResourceBindingDesc(%u) Name failed, got \"%s\", expected \"%s\"\n",
1056 i
, desc
.Name
, pdesc
->Name
);
1057 ok(desc
.Type
== pdesc
->Type
, "GetResourceBindingDesc(%u) Type failed, got %x, expected %x\n",
1058 i
, desc
.Type
, pdesc
->Type
);
1059 ok(desc
.BindPoint
== pdesc
->BindPoint
, "GetResourceBindingDesc(%u) BindPoint failed, got %u, expected %u\n",
1060 i
, desc
.BindPoint
, pdesc
->BindPoint
);
1061 ok(desc
.BindCount
== pdesc
->BindCount
, "GetResourceBindingDesc(%u) BindCount failed, got %u, expected %u\n",
1062 i
, desc
.BindCount
, pdesc
->BindCount
);
1063 ok(desc
.uFlags
== pdesc
->uFlags
, "GetResourceBindingDesc(%u) uFlags failed, got %u, expected %u\n",
1064 i
, desc
.uFlags
, pdesc
->uFlags
);
1065 ok(desc
.ReturnType
== pdesc
->ReturnType
, "GetResourceBindingDesc(%u) ReturnType failed, got %x, expected %x\n",
1066 i
, desc
.ReturnType
, pdesc
->ReturnType
);
1067 ok(desc
.Dimension
== pdesc
->Dimension
, "GetResourceBindingDesc(%u) Dimension failed, got %x, expected %x\n",
1068 i
, desc
.Dimension
, pdesc
->Dimension
);
1069 ok(desc
.NumSamples
== pdesc
->NumSamples
, "GetResourceBindingDesc(%u) NumSamples failed, got %u, expected %u\n",
1070 i
, desc
.NumSamples
, pdesc
->NumSamples
);
1073 /* GetResourceBindingDescByName */
1074 for (i
= 0; i
< ARRAY_SIZE(test_reflection_bound_resources_result
); ++i
)
1076 pdesc
= &test_reflection_bound_resources_result
[i
];
1078 hr
= ref11
->lpVtbl
->GetResourceBindingDescByName(ref11
, pdesc
->Name
, &desc
);
1079 ok(hr
== S_OK
, "GetResourceBindingDescByName(%u) failed, got %x, expected %x\n", i
, hr
, S_OK
);
1081 ok(!strcmp(desc
.Name
, pdesc
->Name
), "GetResourceBindingDescByName(%u) Name failed, got \"%s\", expected \"%s\"\n",
1082 i
, desc
.Name
, pdesc
->Name
);
1083 ok(desc
.Type
== pdesc
->Type
, "GetResourceBindingDescByName(%u) Type failed, got %x, expected %x\n",
1084 i
, desc
.Type
, pdesc
->Type
);
1085 ok(desc
.BindPoint
== pdesc
->BindPoint
, "GetResourceBindingDescByName(%u) BindPoint failed, got %u, expected %u\n",
1086 i
, desc
.BindPoint
, pdesc
->BindPoint
);
1087 ok(desc
.BindCount
== pdesc
->BindCount
, "GetResourceBindingDescByName(%u) BindCount failed, got %u, expected %u\n",
1088 i
, desc
.BindCount
, pdesc
->BindCount
);
1089 ok(desc
.uFlags
== pdesc
->uFlags
, "GetResourceBindingDescByName(%u) uFlags failed, got %u, expected %u\n",
1090 i
, desc
.uFlags
, pdesc
->uFlags
);
1091 ok(desc
.ReturnType
== pdesc
->ReturnType
, "GetResourceBindingDescByName(%u) ReturnType failed, got %x, expected %x\n",
1092 i
, desc
.ReturnType
, pdesc
->ReturnType
);
1093 ok(desc
.Dimension
== pdesc
->Dimension
, "GetResourceBindingDescByName(%u) Dimension failed, got %x, expected %x\n",
1094 i
, desc
.Dimension
, pdesc
->Dimension
);
1095 ok(desc
.NumSamples
== pdesc
->NumSamples
, "GetResourceBindingDescByName(%u) NumSamples failed, got %u, expected %u\n",
1096 i
, desc
.NumSamples
, pdesc
->NumSamples
);
1099 count
= ref11
->lpVtbl
->Release(ref11
);
1100 ok(count
== 0, "Release failed %u\n", count
);
1104 * fxc.exe /E PS /Tps_5_0 /Fx
1120 float4
test(float2 vec
);
1126 float4
test(float2 vec
);
1129 float4
cTest::test(float2 vec
)
1133 res
= float4(vec
.x
, vec
.y
, vec
.x
+vec
.y
, 0);
1142 float4
PS(float2 uv
: TEXCOORD0
) : sv_target
1144 float4 q
= g_Test
.test(uv
);
1149 static DWORD test_reflection_constant_buffer_blob
[] = {
1150 0x43425844, 0xe6470e0d, 0x0d5698bb, 0x29373c30, 0x64a5d268, 0x00000001, 0x00000590, 0x00000006,
1151 0x00000038, 0x00000318, 0x0000034c, 0x00000380, 0x000003d8, 0x000004f4, 0x46454452, 0x000002d8,
1152 0x00000002, 0x00000060, 0x00000001, 0x0000003c, 0xffff0500, 0x00000100, 0x000002a4, 0x31314452,
1153 0x0000003c, 0x00000018, 0x00000020, 0x00000028, 0x00000024, 0x0000000c, 0x00000001, 0x0000005c,
1154 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0xab003163,
1155 0x00000090, 0x00000001, 0x000000a0, 0x00000010, 0x00000000, 0x00000002, 0x0000005c, 0x00000004,
1156 0x00000120, 0x00000040, 0x00000000, 0x00000000, 0x69685424, 0x696f5073, 0x7265746e, 0xababab00,
1157 0x000000c8, 0x00000000, 0x00000001, 0x00000006, 0x000000fc, 0x00000000, 0xffffffff, 0x00000000,
1158 0xffffffff, 0x00000000, 0x65545f67, 0x69007473, 0x74736554, 0xababab00, 0x00000006, 0x00000001,
1159 0x00000000, 0x000000d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000cf, 0x00250007,
1160 0x00040001, 0x00000000, 0x00000000, 0x000000d8, 0x00000000, 0x00000000, 0x00000000, 0x000000cf,
1161 0x000001c0, 0x00000000, 0x00000004, 0x00000000, 0x000001c8, 0x00000000, 0xffffffff, 0x00000000,
1162 0xffffffff, 0x00000000, 0x000001ec, 0x00000010, 0x00000014, 0x00000000, 0x000001f0, 0x00000000,
1163 0xffffffff, 0x00000000, 0xffffffff, 0x00000000, 0x00000214, 0x00000024, 0x00000004, 0x00000000,
1164 0x0000021c, 0x00000000, 0xffffffff, 0x00000000, 0xffffffff, 0x00000000, 0x00000240, 0x00000030,
1165 0x00000008, 0x00000002, 0x00000280, 0x00000000, 0xffffffff, 0x00000000, 0xffffffff, 0x00000000,
1166 0x6c660061, 0x0074616f, 0x00030000, 0x00010001, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1167 0x00000000, 0x00000000, 0x000001c2, 0xabab0062, 0x00030000, 0x00010001, 0x00000002, 0x00000000,
1168 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000001c2, 0x6e690069, 0xabab0074, 0x00020000,
1169 0x00010001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000216,
1170 0x00730074, 0x00030000, 0x00010001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1171 0x00000000, 0x000001c2, 0x000001c0, 0x00000244, 0x00000000, 0x000001ec, 0x00000244, 0x00000004,
1172 0x00000005, 0x00020001, 0x00020000, 0x00000268, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1173 0x00000242, 0x7263694d, 0x666f736f, 0x52282074, 0x4c482029, 0x53204c53, 0x65646168, 0x6f432072,
1174 0x6c69706d, 0x39207265, 0x2e39322e, 0x2e323539, 0x31313133, 0xababab00, 0x4e475349, 0x0000002c,
1175 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000303,
1176 0x43584554, 0x44524f4f, 0xababab00, 0x4e47534f, 0x0000002c, 0x00000001, 0x00000008, 0x00000020,
1177 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x0000000f, 0x745f7673, 0x65677261, 0xabab0074,
1178 0x45434649, 0x00000050, 0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x00000040, 0x00000034,
1179 0x00000024, 0x00000000, 0x4e47534f, 0x00000001, 0x00000001, 0x00000040, 0x00000044, 0x00000048,
1180 0x00010000, 0x00000000, 0xabab0000, 0x00000000, 0x73655463, 0xabab0074, 0x58454853, 0x00000114,
1181 0x00000050, 0x00000045, 0x0100086a, 0x04000059, 0x00208e46, 0x00000000, 0x00000004, 0x03000091,
1182 0x00000000, 0x00000000, 0x05000092, 0x00000000, 0x00000000, 0x00010001, 0x00000000, 0x03001062,
1183 0x00101032, 0x00000000, 0x03000065, 0x001020f2, 0x00000000, 0x02000068, 0x00000002, 0x07000000,
1184 0x00100042, 0x00000000, 0x0010101a, 0x00000000, 0x0010100a, 0x00000000, 0x05000036, 0x00100032,
1185 0x00000000, 0x00101046, 0x00000000, 0x05000036, 0x00100082, 0x00000000, 0x00004001, 0x00000000,
1186 0x05000036, 0x00100032, 0x00000001, 0x0011d516, 0x00000000, 0x0a000001, 0x001000f2, 0x00000000,
1187 0x00100e46, 0x00000000, 0x04a08006, 0x0010001a, 0x00000001, 0x0010000a, 0x00000001, 0x08000000,
1188 0x00102012, 0x00000000, 0x0010000a, 0x00000000, 0x0020800a, 0x00000000, 0x00000003, 0x05000036,
1189 0x001020e2, 0x00000000, 0x00100e56, 0x00000000, 0x0100003e, 0x54415453, 0x00000094, 0x00000008,
1190 0x00000002, 0x00000000, 0x00000002, 0x00000002, 0x00000000, 0x00000001, 0x00000001, 0x00000000,
1191 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1192 0x00000000, 0x00000000, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1193 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1194 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1197 static const D3D11_SHADER_BUFFER_DESC test_reflection_constant_buffer_cb_result
[] =
1199 {"$ThisPointer", D3D_CT_INTERFACE_POINTERS
, 1, 16, 0},
1200 {"c1", D3D_CT_CBUFFER
, 4, 64, 0},
1203 static const struct {
1204 D3D11_SHADER_VARIABLE_DESC desc
;
1206 } test_reflection_constant_buffer_variable_result
[] =
1208 {{"g_Test", 0, 1, 6, 0}, 0},
1209 {{"a", 0, 4, 0, 0}, 1},
1210 {{"b", 16, 20, 0, 0}, 2},
1211 {{"i", 36, 4, 0, 0}, 3},
1212 {{"t", 48, 8, 2, 0}, 4},
1215 static const D3D11_SHADER_TYPE_DESC test_reflection_constant_buffer_type_result
[] =
1217 {D3D11_SVC_INTERFACE_POINTER
, D3D11_SVT_INTERFACE_POINTER
, 1, 4, 0, 1, 0, "iTest"},
1218 {D3D_SVC_SCALAR
, D3D_SVT_FLOAT
, 1, 1, 0, 1, 0, "float"},
1219 {D3D_SVC_SCALAR
, D3D_SVT_FLOAT
, 1, 1, 2, 1, 0, "float"},
1220 {D3D_SVC_SCALAR
, D3D_SVT_INT
, 1, 1, 0, 1, 0, "int"},
1221 {D3D_SVC_STRUCT
, D3D_SVT_VOID
, 1, 2, 0, 1, 0, "s"},
1224 static void test_reflection_constant_buffer(void)
1228 ID3D11ShaderReflection
*ref11
;
1229 ID3D11ShaderReflectionConstantBuffer
*cb11
, *cb11_dummy
= NULL
, *cb11_valid
= NULL
;
1230 ID3D11ShaderReflectionVariable
*v11
, *v11_dummy
= NULL
, *v11_valid
= NULL
;
1231 ID3D11ShaderReflectionType
*t11
, *t
, *t2
, *t11_dummy
= NULL
, *t11_valid
= NULL
;
1232 D3D11_SHADER_BUFFER_DESC cbdesc
= {0};
1233 D3D11_SHADER_VARIABLE_DESC vdesc
= {0};
1234 D3D11_SHADER_TYPE_DESC tdesc
= {0};
1235 D3D11_SHADER_DESC sdesc
= {0};
1236 const D3D11_SHADER_BUFFER_DESC
*pcbdesc
;
1237 const D3D11_SHADER_VARIABLE_DESC
*pvdesc
;
1238 const D3D11_SHADER_TYPE_DESC
*ptdesc
;
1242 hr
= pD3DReflect(test_reflection_constant_buffer_blob
, test_reflection_constant_buffer_blob
[6], &IID_ID3D11ShaderReflection
, (void **)&ref11
);
1243 ok(hr
== S_OK
, "D3DReflect failed %x\n", hr
);
1245 hr
= ref11
->lpVtbl
->GetDesc(ref11
, &sdesc
);
1246 ok(hr
== S_OK
, "GetDesc failed %x\n", hr
);
1248 ok(sdesc
.Version
== 80, "GetDesc failed, got %u, expected %u\n", sdesc
.Version
, 80);
1249 ok(strcmp(sdesc
.Creator
, (char*) shader_creator
) == 0, "GetDesc failed, got \"%s\", expected \"%s\"\n", sdesc
.Creator
, (char*)shader_creator
);
1250 ok(sdesc
.Flags
== 256, "GetDesc failed, got %u, expected %u\n", sdesc
.Flags
, 256);
1251 ok(sdesc
.ConstantBuffers
== 2, "GetDesc failed, got %u, expected %u\n", sdesc
.ConstantBuffers
, 2);
1252 ok(sdesc
.BoundResources
== 1, "GetDesc failed, got %u, expected %u\n", sdesc
.BoundResources
, 1);
1253 ok(sdesc
.InputParameters
== 1, "GetDesc failed, got %u, expected %u\n", sdesc
.InputParameters
, 1);
1254 ok(sdesc
.OutputParameters
== 1, "GetDesc failed, got %u, expected %u\n", sdesc
.OutputParameters
, 1);
1255 ok(sdesc
.InstructionCount
== 8, "GetDesc failed, got %u, expected %u\n", sdesc
.InstructionCount
, 8);
1256 ok(sdesc
.TempRegisterCount
== 2, "GetDesc failed, got %u, expected %u\n", sdesc
.TempRegisterCount
, 2);
1257 ok(sdesc
.TempArrayCount
== 0, "GetDesc failed, got %u, expected %u\n", sdesc
.TempArrayCount
, 0);
1258 ok(sdesc
.DefCount
== 0, "GetDesc failed, got %u, expected %u\n", sdesc
.DefCount
, 0);
1259 ok(sdesc
.DclCount
== 2, "GetDesc failed, got %u, expected %u\n", sdesc
.DclCount
, 2);
1260 ok(sdesc
.TextureNormalInstructions
== 0, "GetDesc failed, got %u, expected %u\n", sdesc
.TextureNormalInstructions
, 0);
1261 ok(sdesc
.TextureLoadInstructions
== 0, "GetDesc failed, got %u, expected %u\n", sdesc
.TextureLoadInstructions
, 0);
1262 ok(sdesc
.TextureCompInstructions
== 0, "GetDesc failed, got %u, expected %u\n", sdesc
.TextureCompInstructions
, 0);
1263 ok(sdesc
.TextureBiasInstructions
== 0, "GetDesc failed, got %u, expected %u\n", sdesc
.TextureBiasInstructions
, 0);
1264 ok(sdesc
.TextureGradientInstructions
== 0, "GetDesc failed, got %u, expected %u\n", sdesc
.TextureGradientInstructions
, 0);
1265 ok(sdesc
.FloatInstructionCount
== 2, "GetDesc failed, got %u, expected %u\n", sdesc
.FloatInstructionCount
, 2);
1266 ok(sdesc
.IntInstructionCount
== 0, "GetDesc failed, got %u, expected %u\n", sdesc
.IntInstructionCount
, 0);
1267 ok(sdesc
.UintInstructionCount
== 1, "GetDesc failed, got %u, expected %u\n", sdesc
.UintInstructionCount
, 1);
1268 ok(sdesc
.StaticFlowControlCount
== 1, "GetDesc failed, got %u, expected %u\n", sdesc
.StaticFlowControlCount
, 1);
1269 ok(sdesc
.DynamicFlowControlCount
== 0, "GetDesc failed, got %u, expected %u\n", sdesc
.DynamicFlowControlCount
, 0);
1270 ok(sdesc
.MacroInstructionCount
== 0, "GetDesc failed, got %u, expected %u\n", sdesc
.MacroInstructionCount
, 0);
1271 ok(sdesc
.ArrayInstructionCount
== 0, "GetDesc failed, got %u, expected %u\n", sdesc
.ArrayInstructionCount
, 0);
1272 ok(sdesc
.CutInstructionCount
== 0, "GetDesc failed, got %u, expected %u\n", sdesc
.CutInstructionCount
, 0);
1273 ok(sdesc
.EmitInstructionCount
== 0, "GetDesc failed, got %u, expected %u\n", sdesc
.EmitInstructionCount
, 0);
1274 ok(sdesc
.GSOutputTopology
== 0, "GetDesc failed, got %x, expected %x\n", sdesc
.GSOutputTopology
, 0);
1275 ok(sdesc
.GSMaxOutputVertexCount
== 0, "GetDesc failed, got %u, expected %u\n", sdesc
.GSMaxOutputVertexCount
, 0);
1276 ok(sdesc
.InputPrimitive
== 0, "GetDesc failed, got %x, expected %x\n", sdesc
.InputPrimitive
, 0);
1277 ok(sdesc
.PatchConstantParameters
== 0, "GetDesc failed, got %u, expected %u\n", sdesc
.PatchConstantParameters
, 0);
1278 ok(sdesc
.cGSInstanceCount
== 0, "GetDesc failed, got %u, expected %u\n", sdesc
.cGSInstanceCount
, 0);
1279 ok(sdesc
.cControlPoints
== 0, "GetDesc failed, got %u, expected %u\n", sdesc
.cControlPoints
, 0);
1280 ok(sdesc
.HSOutputPrimitive
== 0, "GetDesc failed, got %x, expected %x\n", sdesc
.HSOutputPrimitive
, 0);
1281 ok(sdesc
.HSPartitioning
== 0, "GetDesc failed, got %x, expected %x\n", sdesc
.HSPartitioning
, 0);
1282 ok(sdesc
.TessellatorDomain
== 0, "GetDesc failed, got %x, expected %x\n", sdesc
.TessellatorDomain
, 0);
1283 ok(sdesc
.cBarrierInstructions
== 0, "GetDesc failed, got %u, expected %u\n", sdesc
.cBarrierInstructions
, 0);
1284 ok(sdesc
.cInterlockedInstructions
== 0, "GetDesc failed, got %u, expected %u\n", sdesc
.cInterlockedInstructions
, 0);
1285 ok(sdesc
.cTextureStoreInstructions
== 0, "GetDesc failed, got %u, expected %u\n", sdesc
.cTextureStoreInstructions
, 0);
1287 /* get the dummys for comparison */
1288 cb11_dummy
= ref11
->lpVtbl
->GetConstantBufferByIndex(ref11
, 0xffffffff);
1289 ok(cb11_dummy
!= NULL
, "GetConstantBufferByIndex failed\n");
1291 v11_dummy
= cb11_dummy
->lpVtbl
->GetVariableByIndex(cb11_dummy
, 0xffffffff);
1292 ok(v11_dummy
!= NULL
, "GetVariableByIndex failed\n");
1294 t11_dummy
= v11_dummy
->lpVtbl
->GetType(v11_dummy
);
1295 ok(t11_dummy
!= NULL
, "GetType failed\n");
1297 /* get the valid variables */
1298 cb11_valid
= ref11
->lpVtbl
->GetConstantBufferByIndex(ref11
, 1);
1299 ok(cb11_valid
!= cb11_dummy
&& cb11_valid
, "GetConstantBufferByIndex failed\n");
1301 v11_valid
= cb11_valid
->lpVtbl
->GetVariableByIndex(cb11_valid
, 0);
1302 ok(v11_valid
!= v11_dummy
&& v11_valid
, "GetVariableByIndex failed\n");
1304 t11_valid
= v11_valid
->lpVtbl
->GetType(v11_valid
);
1305 ok(t11_valid
!= t11_dummy
&& t11_valid
, "GetType failed\n");
1307 /* reflection calls */
1308 cb11
= ref11
->lpVtbl
->GetConstantBufferByName(ref11
, "invalid");
1309 ok(cb11_dummy
== cb11
, "GetConstantBufferByName failed, got %p, expected %p\n", cb11
, cb11_dummy
);
1311 cb11
= ref11
->lpVtbl
->GetConstantBufferByName(ref11
, NULL
);
1312 ok(cb11_dummy
== cb11
, "GetConstantBufferByName failed, got %p, expected %p\n", cb11
, cb11_dummy
);
1314 v11
= ref11
->lpVtbl
->GetVariableByName(ref11
, NULL
);
1315 ok(v11_dummy
== v11
, "GetVariableByIndex failed, got %p, expected %p\n", v11
, v11_dummy
);
1317 v11
= ref11
->lpVtbl
->GetVariableByName(ref11
, "invalid");
1318 ok(v11_dummy
== v11
, "GetVariableByName failed, got %p, expected %p\n", v11
, v11_dummy
);
1320 v11
= ref11
->lpVtbl
->GetVariableByName(ref11
, "a");
1321 ok(v11_valid
== v11
, "GetVariableByName failed, got %p, expected %p\n", v11
, v11_valid
);
1323 /* constant buffer calls */
1324 v11
= cb11_dummy
->lpVtbl
->GetVariableByName(cb11_dummy
, NULL
);
1325 ok(v11_dummy
== v11
, "GetVariableByName failed, got %p, expected %p\n", v11
, v11_dummy
);
1327 v11
= cb11_dummy
->lpVtbl
->GetVariableByName(cb11_dummy
, "invalid");
1328 ok(v11_dummy
== v11
, "GetVariableByName failed, got %p, expected %p\n", v11
, v11_dummy
);
1330 v11
= cb11_valid
->lpVtbl
->GetVariableByName(cb11_valid
, NULL
);
1331 ok(v11_dummy
== v11
, "GetVariableByName failed, got %p, expected %p\n", v11
, v11_dummy
);
1333 v11
= cb11_valid
->lpVtbl
->GetVariableByName(cb11_valid
, "invalid");
1334 ok(v11_dummy
== v11
, "GetVariableByName failed, got %p, expected %p\n", v11
, v11_dummy
);
1336 v11
= cb11_valid
->lpVtbl
->GetVariableByName(cb11_valid
, "a");
1337 ok(v11_valid
== v11
, "GetVariableByName failed, got %p, expected %p\n", v11
, v11_valid
);
1339 hr
= cb11_dummy
->lpVtbl
->GetDesc(cb11_dummy
, NULL
);
1340 ok(hr
== E_FAIL
, "GetDesc failed, got %x, expected %x\n", hr
, E_FAIL
);
1342 hr
= cb11_dummy
->lpVtbl
->GetDesc(cb11_dummy
, &cbdesc
);
1343 ok(hr
== E_FAIL
, "GetDesc failed, got %x, expected %x\n", hr
, E_FAIL
);
1345 hr
= cb11_valid
->lpVtbl
->GetDesc(cb11_valid
, NULL
);
1346 ok(hr
== E_FAIL
, "GetDesc failed, got %x, expected %x\n", hr
, E_FAIL
);
1348 /* variable calls */
1349 hr
= v11_dummy
->lpVtbl
->GetDesc(v11_dummy
, NULL
);
1350 ok(hr
== E_FAIL
, "GetDesc failed, got %x, expected %x\n", hr
, E_FAIL
);
1352 hr
= v11_dummy
->lpVtbl
->GetDesc(v11_dummy
, &vdesc
);
1353 ok(hr
== E_FAIL
, "GetDesc failed, got %x, expected %x\n", hr
, E_FAIL
);
1355 hr
= v11_valid
->lpVtbl
->GetDesc(v11_valid
, NULL
);
1356 ok(hr
== E_FAIL
, "GetDesc failed, got %x, expected %x\n", hr
, E_FAIL
);
1359 hr
= t11_dummy
->lpVtbl
->GetDesc(t11_dummy
, NULL
);
1360 ok(hr
== E_FAIL
, "GetDesc failed, got %x, expected %x\n", hr
, E_FAIL
);
1362 hr
= t11_dummy
->lpVtbl
->GetDesc(t11_dummy
, &tdesc
);
1363 ok(hr
== E_FAIL
, "GetDesc failed, got %x, expected %x\n", hr
, E_FAIL
);
1365 hr
= t11_valid
->lpVtbl
->GetDesc(t11_valid
, NULL
);
1366 ok(hr
== E_FAIL
, "GetDesc failed, got %x, expected %x\n", hr
, E_FAIL
);
1368 string
= t11_dummy
->lpVtbl
->GetMemberTypeName(t11_dummy
, 0xffffffff);
1369 ok(!strcmp(string
, "$Invalid"), "GetMemberTypeName failed, got \"%s\", expected \"%s\"\n", string
, "$Invalid");
1371 string
= t11_valid
->lpVtbl
->GetMemberTypeName(t11_valid
, 0xffffffff);
1372 ok(!string
, "GetMemberTypeName failed, got \"%s\", expected NULL\n", string
);
1374 t11
= t11_dummy
->lpVtbl
->GetMemberTypeByIndex(t11_dummy
, 0xffffffff);
1375 ok(t11_dummy
== t11
, "GetMemberTypeByIndex failed, got %p, expected %p\n", t11
, t11_dummy
);
1377 t11
= t11_valid
->lpVtbl
->GetMemberTypeByIndex(t11_valid
, 0xffffffff);
1378 ok(t11_dummy
== t11
, "GetMemberTypeByIndex failed, got %p, expected %p\n", t11
, t11_dummy
);
1380 t11
= t11_dummy
->lpVtbl
->GetMemberTypeByName(t11_dummy
, NULL
);
1381 ok(t11_dummy
== t11
, "GetMemberTypeByName failed, got %p, expected %p\n", t11
, t11_dummy
);
1383 t11
= t11_dummy
->lpVtbl
->GetMemberTypeByName(t11_dummy
, "invalid");
1384 ok(t11_dummy
== t11
, "GetMemberTypeByName failed, got %p, expected %p\n", t11
, t11_dummy
);
1386 t11
= t11_valid
->lpVtbl
->GetMemberTypeByName(t11_valid
, NULL
);
1387 ok(t11_dummy
== t11
, "GetMemberTypeByName failed, got %p, expected %p\n", t11
, t11_dummy
);
1389 t11
= t11_valid
->lpVtbl
->GetMemberTypeByName(t11_valid
, "invalid");
1390 ok(t11_dummy
== t11
, "GetMemberTypeByName failed, got %p, expected %p\n", t11
, t11_dummy
);
1392 hr
= t11_dummy
->lpVtbl
->IsEqual(t11_dummy
, t11_dummy
);
1393 ok(hr
== E_FAIL
, "IsEqual failed, got %x, expected %x\n", hr
, E_FAIL
);
1395 hr
= t11_valid
->lpVtbl
->IsEqual(t11_valid
, t11_dummy
);
1396 ok(hr
== S_FALSE
, "IsEqual failed, got %x, expected %x\n", hr
, S_FALSE
);
1398 hr
= t11_dummy
->lpVtbl
->IsEqual(t11_dummy
, t11_valid
);
1399 ok(hr
== E_FAIL
, "IsEqual failed, got %x, expected %x\n", hr
, E_FAIL
);
1401 hr
= t11_valid
->lpVtbl
->IsEqual(t11_valid
, t11_valid
);
1402 ok(hr
== S_OK
, "IsEqual failed, got %x, expected %x\n", hr
, S_OK
);
1404 /* constant buffers */
1405 for (i
= 0; i
< ARRAY_SIZE(test_reflection_constant_buffer_cb_result
); ++i
)
1407 pcbdesc
= &test_reflection_constant_buffer_cb_result
[i
];
1409 cb11
= ref11
->lpVtbl
->GetConstantBufferByIndex(ref11
, i
);
1410 ok(cb11_dummy
!= cb11
, "GetConstantBufferByIndex(%u) failed\n", i
);
1412 hr
= cb11
->lpVtbl
->GetDesc(cb11
, &cbdesc
);
1413 ok(hr
== S_OK
, "GetDesc(%u) failed, got %x, expected %x\n", i
, hr
, S_OK
);
1415 ok(!strcmp(cbdesc
.Name
, pcbdesc
->Name
), "GetDesc(%u) Name failed, got \"%s\", expected \"%s\"\n",
1416 i
, cbdesc
.Name
, pcbdesc
->Name
);
1417 ok(cbdesc
.Type
== pcbdesc
->Type
, "GetDesc(%u) Type failed, got %x, expected %x\n",
1418 i
, cbdesc
.Type
, pcbdesc
->Type
);
1419 ok(cbdesc
.Variables
== pcbdesc
->Variables
, "GetDesc(%u) Variables failed, got %u, expected %u\n",
1420 i
, cbdesc
.Variables
, pcbdesc
->Variables
);
1421 ok(cbdesc
.Size
== pcbdesc
->Size
, "GetDesc(%u) Size failed, got %u, expected %u\n",
1422 i
, cbdesc
.Size
, pcbdesc
->Size
);
1423 ok(cbdesc
.uFlags
== pcbdesc
->uFlags
, "GetDesc(%u) uFlags failed, got %u, expected %u\n",
1424 i
, cbdesc
.uFlags
, pcbdesc
->uFlags
);
1428 for (i
= 0; i
< ARRAY_SIZE(test_reflection_constant_buffer_variable_result
); ++i
)
1430 pvdesc
= &test_reflection_constant_buffer_variable_result
[i
].desc
;
1432 v11
= ref11
->lpVtbl
->GetVariableByName(ref11
, pvdesc
->Name
);
1433 ok(v11_dummy
!= v11
, "GetVariableByName(%u) failed\n", i
);
1435 hr
= v11
->lpVtbl
->GetDesc(v11
, &vdesc
);
1436 ok(hr
== S_OK
, "GetDesc(%u) failed, got %x, expected %x\n", i
, hr
, S_OK
);
1438 ok(!strcmp(vdesc
.Name
, pvdesc
->Name
), "GetDesc(%u) Name failed, got \"%s\", expected \"%s\"\n",
1439 i
, vdesc
.Name
, pvdesc
->Name
);
1440 ok(vdesc
.StartOffset
== pvdesc
->StartOffset
, "GetDesc(%u) StartOffset failed, got %u, expected %u\n",
1441 i
, vdesc
.StartOffset
, pvdesc
->StartOffset
);
1442 ok(vdesc
.Size
== pvdesc
->Size
, "GetDesc(%u) Size failed, got %u, expected %u\n",
1443 i
, vdesc
.Size
, pvdesc
->Size
);
1444 ok(vdesc
.uFlags
== pvdesc
->uFlags
, "GetDesc(%u) uFlags failed, got %u, expected %u\n",
1445 i
, vdesc
.uFlags
, pvdesc
->uFlags
);
1446 ok(vdesc
.DefaultValue
== pvdesc
->DefaultValue
, "GetDesc(%u) DefaultValue failed\n", i
);
1449 ptdesc
= &test_reflection_constant_buffer_type_result
[test_reflection_constant_buffer_variable_result
[i
].type
];
1451 t11
= v11
->lpVtbl
->GetType(v11
);
1452 ok(t11_dummy
!= t11
, "GetType(%u) failed\n", i
);
1454 hr
= t11
->lpVtbl
->GetDesc(t11
, &tdesc
);
1455 ok(hr
== S_OK
, "GetDesc(%u) failed, got %x, expected %x\n", i
, hr
, S_OK
);
1457 ok(tdesc
.Class
== ptdesc
->Class
, "GetDesc(%u) Class failed, got %x, expected %x\n",
1458 i
, tdesc
.Class
, ptdesc
->Class
);
1459 ok(tdesc
.Type
== ptdesc
->Type
, "GetDesc(%u) Type failed, got %x, expected %x\n",
1460 i
, tdesc
.Type
, ptdesc
->Type
);
1461 ok(tdesc
.Rows
== ptdesc
->Rows
, "GetDesc(%u) Rows failed, got %x, expected %x\n",
1462 i
, tdesc
.Rows
, ptdesc
->Rows
);
1463 ok(tdesc
.Columns
== ptdesc
->Columns
, "GetDesc(%u) Columns failed, got %u, expected %u\n",
1464 i
, tdesc
.Columns
, ptdesc
->Columns
);
1465 ok(tdesc
.Elements
== ptdesc
->Elements
, "GetDesc(%u) Elements failed, got %u, expected %u\n",
1466 i
, tdesc
.Elements
, ptdesc
->Elements
);
1467 ok(tdesc
.Offset
== ptdesc
->Offset
, "GetDesc(%u) Offset failed, got %u, expected %u\n",
1468 i
, tdesc
.Offset
, ptdesc
->Offset
);
1469 ok(!strcmp(tdesc
.Name
, ptdesc
->Name
), "GetDesc(%u) Name failed, got %s, expected %s\n",
1470 i
, tdesc
.Name
, ptdesc
->Name
);
1474 v11
= ref11
->lpVtbl
->GetVariableByName(ref11
, "t");
1475 ok(v11_dummy
!= v11
, "GetVariableByName failed\n");
1477 t11
= v11
->lpVtbl
->GetType(v11
);
1478 ok(t11
!= t11_dummy
, "GetType failed\n");
1480 t
= t11
->lpVtbl
->GetMemberTypeByIndex(t11
, 0);
1481 ok(t
!= t11_dummy
, "GetMemberTypeByIndex failed\n");
1483 t2
= t11
->lpVtbl
->GetMemberTypeByName(t11
, "a");
1484 ok(t
== t2
, "GetMemberTypeByName failed, got %p, expected %p\n", t2
, t
);
1486 string
= t11
->lpVtbl
->GetMemberTypeName(t11
, 0);
1487 ok(!strcmp(string
, "a"), "GetMemberTypeName failed, got \"%s\", expected \"%s\"\n", string
, "a");
1489 t
= t11
->lpVtbl
->GetMemberTypeByIndex(t11
, 1);
1490 ok(t
!= t11_dummy
, "GetMemberTypeByIndex failed\n");
1492 t2
= t11
->lpVtbl
->GetMemberTypeByName(t11
, "b");
1493 ok(t
== t2
, "GetMemberTypeByName failed, got %p, expected %p\n", t2
, t
);
1495 string
= t11
->lpVtbl
->GetMemberTypeName(t11
, 1);
1496 ok(!strcmp(string
, "b"), "GetMemberTypeName failed, got \"%s\", expected \"%s\"\n", string
, "b");
1498 /* float vs float (in struct) */
1499 hr
= t11
->lpVtbl
->IsEqual(t11
, t11_valid
);
1500 ok(hr
== S_FALSE
, "IsEqual failed, got %x, expected %x\n", hr
, S_FALSE
);
1502 hr
= t11_valid
->lpVtbl
->IsEqual(t11_valid
, t11
);
1503 ok(hr
== S_FALSE
, "IsEqual failed, got %x, expected %x\n", hr
, S_FALSE
);
1505 /* float vs float */
1506 t
= t11
->lpVtbl
->GetMemberTypeByIndex(t11
, 0);
1507 ok(t
!= t11_dummy
, "GetMemberTypeByIndex failed\n");
1509 t2
= t11
->lpVtbl
->GetMemberTypeByIndex(t11
, 1);
1510 ok(t2
!= t11_dummy
, "GetMemberTypeByIndex failed\n");
1512 hr
= t
->lpVtbl
->IsEqual(t
, t2
);
1513 ok(hr
== S_OK
, "IsEqual failed, got %x, expected %x\n", hr
, S_OK
);
1515 count
= ref11
->lpVtbl
->Release(ref11
);
1516 ok(count
== 0, "Release failed %u\n", count
);
1519 static BOOL
load_d3dcompiler(void)
1523 if (!(module
= LoadLibraryA("d3dcompiler_43.dll"))) return FALSE
;
1525 pD3DReflect
= (void*)GetProcAddress(module
, "D3DReflect");
1529 START_TEST(reflection
)
1531 if (!load_d3dcompiler())
1533 win_skip("Could not load d3dcompiler_43.dll\n");
1538 test_reflection_references();
1540 test_reflection_desc_vs();
1541 test_reflection_desc_ps();
1542 test_reflection_desc_ps_output();
1543 test_reflection_bound_resources();
1544 test_reflection_constant_buffer();