d3dcompiler/tests: Add D3DCOMPILER_STRIP_REFLECTION_DATA test.
[wine.git] / dlls / d3dcompiler_43 / tests / blob.c
blob6a4217e288d001ffed04d746e0f007bb5f945eb0
1 /*
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
25 #define COBJMACROS
26 #include "d3dcompiler.h"
27 #include "wine/test.h"
30 * This doesn't belong here, but for some functions it is possible to return that value,
31 * see http://msdn.microsoft.com/en-us/library/bb205278%28v=VS.85%29.aspx
32 * The original definition is in D3DX10core.h.
34 #define D3DERR_INVALIDCALL 0x8876086c
36 #define MAKE_TAG(ch0, ch1, ch2, ch3) \
37 ((DWORD)(ch0) | ((DWORD)(ch1) << 8) | \
38 ((DWORD)(ch2) << 16) | ((DWORD)(ch3) << 24 ))
39 #define TAG_Aon9 MAKE_TAG('A', 'o', 'n', '9')
40 #define TAG_DXBC MAKE_TAG('D', 'X', 'B', 'C')
41 #define TAG_ISGN MAKE_TAG('I', 'S', 'G', 'N')
42 #define TAG_OSGN MAKE_TAG('O', 'S', 'G', 'N')
43 #define TAG_PCSG MAKE_TAG('P', 'C', 'S', 'G')
44 #define TAG_RDEF MAKE_TAG('R', 'D', 'E', 'F')
45 #define TAG_SDBG MAKE_TAG('S', 'D', 'B', 'G')
46 #define TAG_SHDR MAKE_TAG('S', 'H', 'D', 'R')
47 #define TAG_SHEX MAKE_TAG('S', 'H', 'E', 'X')
48 #define TAG_STAT MAKE_TAG('S', 'T', 'A', 'T')
49 #define TAG_XNAP MAKE_TAG('X', 'N', 'A', 'P')
50 #define TAG_XNAS MAKE_TAG('X', 'N', 'A', 'S')
52 static void test_create_blob(void)
54 ID3D10Blob *blob;
55 HRESULT hr;
56 ULONG refcount;
58 hr = D3DCreateBlob(1, NULL);
59 ok(hr == D3DERR_INVALIDCALL, "D3DCreateBlob failed with %x\n", hr);
61 hr = D3DCreateBlob(0, NULL);
62 ok(hr == D3DERR_INVALIDCALL, "D3DCreateBlob failed with %x\n", hr);
64 hr = D3DCreateBlob(0, &blob);
65 ok(hr == S_OK, "D3DCreateBlob failed with %x\n", hr);
67 refcount = blob->lpVtbl->Release(blob);
68 ok(!refcount, "ID3DBlob has %u references left\n", refcount);
71 static const D3D_BLOB_PART parts[] =
73 D3D_BLOB_INPUT_SIGNATURE_BLOB, D3D_BLOB_OUTPUT_SIGNATURE_BLOB, D3D_BLOB_INPUT_AND_OUTPUT_SIGNATURE_BLOB,
74 D3D_BLOB_PATCH_CONSTANT_SIGNATURE_BLOB, D3D_BLOB_ALL_SIGNATURE_BLOB, D3D_BLOB_DEBUG_INFO,
75 D3D_BLOB_LEGACY_SHADER, D3D_BLOB_XNA_PREPASS_SHADER, D3D_BLOB_XNA_SHADER,
76 D3D_BLOB_TEST_ALTERNATE_SHADER, D3D_BLOB_TEST_COMPILE_DETAILS, D3D_BLOB_TEST_COMPILE_PERF
80 * test_blob_part - fxc.exe /E VS /Tvs_4_0_level_9_0 /Fx
82 #if 0
83 float4 VS(float4 position : POSITION, float4 pos : SV_POSITION) : SV_POSITION
85 return position;
87 #endif
88 static DWORD test_blob_part[] = {
89 0x43425844, 0x0ef2a70f, 0x6a548011, 0x91ff9409, 0x9973a43d, 0x00000001, 0x000002e0, 0x00000008,
90 0x00000040, 0x0000008c, 0x000000d8, 0x0000013c, 0x00000180, 0x000001fc, 0x00000254, 0x000002ac,
91 0x53414e58, 0x00000044, 0x00000044, 0xfffe0200, 0x00000020, 0x00000024, 0x00240000, 0x00240000,
92 0x00240000, 0x00240000, 0x00240000, 0xfffe0200, 0x0200001f, 0x80000005, 0x900f0000, 0x02000001,
93 0xc00f0000, 0x80e40000, 0x0000ffff, 0x50414e58, 0x00000044, 0x00000044, 0xfffe0200, 0x00000020,
94 0x00000024, 0x00240000, 0x00240000, 0x00240000, 0x00240000, 0x00240000, 0xfffe0200, 0x0200001f,
95 0x80000005, 0x900f0000, 0x02000001, 0xc00f0000, 0x80e40000, 0x0000ffff, 0x396e6f41, 0x0000005c,
96 0x0000005c, 0xfffe0200, 0x00000034, 0x00000028, 0x00240000, 0x00240000, 0x00240000, 0x00240000,
97 0x00240001, 0x00000000, 0xfffe0200, 0x0200001f, 0x80000005, 0x900f0000, 0x04000004, 0xc0030000,
98 0x90ff0000, 0xa0e40000, 0x90e40000, 0x02000001, 0xc00c0000, 0x90e40000, 0x0000ffff, 0x52444853,
99 0x0000003c, 0x00010040, 0x0000000f, 0x0300005f, 0x001010f2, 0x00000000, 0x04000067, 0x001020f2,
100 0x00000000, 0x00000001, 0x05000036, 0x001020f2, 0x00000000, 0x00101e46, 0x00000000, 0x0100003e,
101 0x54415453, 0x00000074, 0x00000002, 0x00000000, 0x00000000, 0x00000002, 0x00000000, 0x00000000,
102 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
103 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000,
104 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x46454452,
105 0x00000050, 0x00000000, 0x00000000, 0x00000000, 0x0000001c, 0xfffe0400, 0x00000100, 0x0000001c,
106 0x7263694d, 0x666f736f, 0x52282074, 0x4c482029, 0x53204c53, 0x65646168, 0x6f432072, 0x6c69706d,
107 0x39207265, 0x2e39322e, 0x2e323539, 0x31313133, 0xababab00, 0x4e475349, 0x00000050, 0x00000002,
108 0x00000008, 0x00000038, 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000f0f, 0x00000041,
109 0x00000000, 0x00000000, 0x00000003, 0x00000001, 0x0000000f, 0x49534f50, 0x4e4f4954, 0x5f565300,
110 0x49534f50, 0x4e4f4954, 0xababab00, 0x4e47534f, 0x0000002c, 0x00000001, 0x00000008, 0x00000020,
111 0x00000000, 0x00000001, 0x00000003, 0x00000000, 0x0000000f, 0x505f5653, 0x5449534f, 0x004e4f49,
114 static void test_get_blob_part(void)
116 ID3DBlob *blob, *blob2;
117 HRESULT hr;
118 ULONG refcount;
119 DWORD *dword;
120 SIZE_T size;
121 UINT i;
123 hr = D3DCreateBlob(1, &blob2);
124 ok(hr == S_OK, "D3DCreateBlob failed with %x\n", hr);
125 blob = blob2;
127 /* invalid cases */
128 hr = D3DGetBlobPart(NULL, test_blob_part[6], D3D_BLOB_INPUT_SIGNATURE_BLOB, 0, &blob);
129 ok(hr == D3DERR_INVALIDCALL, "D3DGetBlobPart failed with %x\n", hr);
130 ok(blob2 == blob, "D3DGetBlobPart failed got %p, expected %p\n", blob, blob2);
132 hr = D3DGetBlobPart(NULL, 0, D3D_BLOB_INPUT_SIGNATURE_BLOB, 0, &blob);
133 ok(hr == D3DERR_INVALIDCALL, "D3DGetBlobPart failed with %x\n", hr);
134 ok(blob2 == blob, "D3DGetBlobPart failed got %p, expected %p\n", blob, blob2);
136 hr = D3DGetBlobPart(NULL, test_blob_part[6], D3D_BLOB_INPUT_SIGNATURE_BLOB, 0, NULL);
137 ok(hr == D3DERR_INVALIDCALL, "D3DGetBlobPart failed with %x\n", hr);
139 hr = D3DGetBlobPart(NULL, 0, D3D_BLOB_INPUT_SIGNATURE_BLOB, 0, NULL);
140 ok(hr == D3DERR_INVALIDCALL, "D3DGetBlobPart failed with %x\n", hr);
142 hr = D3DGetBlobPart(test_blob_part, 0, D3D_BLOB_INPUT_SIGNATURE_BLOB, 0, &blob);
143 ok(hr == D3DERR_INVALIDCALL, "D3DGetBlobPart failed with %x\n", hr);
144 ok(blob2 == blob, "D3DGetBlobPart failed got %p, expected %p\n", blob, blob2);
146 hr = D3DGetBlobPart(test_blob_part, test_blob_part[6], D3D_BLOB_INPUT_SIGNATURE_BLOB, 0, NULL);
147 ok(hr == D3DERR_INVALIDCALL, "D3DGetBlobPart failed with %x\n", hr);
149 hr = D3DGetBlobPart(test_blob_part, 0, D3D_BLOB_INPUT_SIGNATURE_BLOB, 0, NULL);
150 ok(hr == D3DERR_INVALIDCALL, "D3DGetBlobPart failed with %x\n", hr);
152 hr = D3DGetBlobPart(test_blob_part, test_blob_part[6], D3D_BLOB_INPUT_SIGNATURE_BLOB, 1, &blob);
153 ok(hr == D3DERR_INVALIDCALL, "D3DGetBlobPart failed with %x\n", hr);
154 ok(blob2 == blob, "D3DGetBlobPart failed got %p, expected %p\n", blob, blob2);
156 hr = D3DGetBlobPart(test_blob_part, test_blob_part[6], 0xffffffff, 0, &blob);
157 ok(hr == D3DERR_INVALIDCALL, "D3DGetBlobPart failed with %x\n", hr);
158 ok(blob2 == blob, "D3DGetBlobPart failed got %p, expected %p\n", blob, blob2);
160 refcount = ID3D10Blob_Release(blob2);
161 ok(!refcount, "ID3DBlob has %u references left\n", refcount);
163 /* D3D_BLOB_INPUT_SIGNATURE_BLOB */
164 hr = D3DGetBlobPart(test_blob_part, test_blob_part[6], D3D_BLOB_INPUT_SIGNATURE_BLOB, 0, &blob);
165 ok(hr == S_OK, "D3DGetBlobPart failed, got %x, expected %x\n", hr, S_OK);
167 size = ID3D10Blob_GetBufferSize(blob);
168 ok(size == 124, "GetBufferSize failed, got %lu, expected %u\n", size, 124);
170 dword = ((DWORD*)ID3D10Blob_GetBufferPointer(blob));
171 ok(TAG_DXBC == *dword, "DXBC got %#x, expected %#x.\n", *dword, TAG_DXBC);
172 ok(TAG_ISGN == *(dword+9), "ISGN got %#x, expected %#x.\n", *(dword+9), TAG_ISGN);
174 for (i = 0; i < sizeof(parts) / sizeof(parts[0]); i++)
176 hr = D3DGetBlobPart(dword, size, parts[i], 0, &blob2);
178 if (parts[i] == D3D_BLOB_INPUT_SIGNATURE_BLOB)
180 ok(hr == S_OK, "D3DGetBlobPart failed, got %x, expected %x\n", hr, S_OK);
182 refcount = ID3D10Blob_Release(blob2);
183 ok(!refcount, "ID3DBlob has %u references left\n", refcount);
185 else
187 ok(hr == E_FAIL, "D3DGetBlobPart failed, got %x, expected %x\n", hr, E_FAIL);
191 refcount = ID3D10Blob_Release(blob);
192 ok(!refcount, "ID3DBlob has %u references left\n", refcount);
194 /* D3D_BLOB_OUTPUT_SIGNATURE_BLOB */
195 hr = D3DGetBlobPart(test_blob_part, test_blob_part[6], D3D_BLOB_OUTPUT_SIGNATURE_BLOB, 0, &blob);
196 ok(hr == S_OK, "D3DGetBlobPart failed, got %x, expected %x\n", hr, S_OK);
198 size = ID3D10Blob_GetBufferSize(blob);
199 ok(size == 88, "GetBufferSize failed, got %lu, expected %u\n", size, 88);
201 dword = ((DWORD*)ID3D10Blob_GetBufferPointer(blob));
202 ok(TAG_DXBC == *dword, "DXBC got %#x, expected %#x.\n", *dword, TAG_DXBC);
203 ok(TAG_OSGN == *(dword+9), "OSGN got %#x, expected %#x.\n", *(dword+9), TAG_OSGN);
205 for (i = 0; i < sizeof(parts) / sizeof(parts[0]); i++)
207 hr = D3DGetBlobPart(dword, size, parts[i], 0, &blob2);
209 if (parts[i] == D3D_BLOB_OUTPUT_SIGNATURE_BLOB)
211 ok(hr == S_OK, "D3DGetBlobPart failed, got %x, expected %x\n", hr, S_OK);
213 refcount = ID3D10Blob_Release(blob2);
214 ok(!refcount, "ID3DBlob has %u references left\n", refcount);
216 else
218 ok(hr == E_FAIL, "D3DGetBlobPart failed, got %x, expected %x\n", hr, E_FAIL);
222 refcount = ID3D10Blob_Release(blob);
223 ok(!refcount, "ID3DBlob has %u references left\n", refcount);
225 /* D3D_BLOB_INPUT_AND_OUTPUT_SIGNATURE_BLOB */
226 hr = D3DGetBlobPart(test_blob_part, test_blob_part[6], D3D_BLOB_INPUT_AND_OUTPUT_SIGNATURE_BLOB, 0, &blob);
227 ok(hr == S_OK, "D3DGetBlobPart failed, got %x, expected %x\n", hr, S_OK);
229 size = ID3D10Blob_GetBufferSize(blob);
230 ok(size == 180, "GetBufferSize failed, got %lu, expected %u\n", size, 180);
232 dword = ((DWORD*)ID3D10Blob_GetBufferPointer(blob));
233 ok(TAG_DXBC == *dword, "DXBC got %#x, expected %#x.\n", *dword, TAG_DXBC);
234 ok(TAG_ISGN == *(dword+10), "ISGN got %#x, expected %#x.\n", *(dword+10), TAG_ISGN);
235 ok(TAG_OSGN == *(dword+32), "OSGN got %#x, expected %#x.\n", *(dword+32), TAG_OSGN);
237 for (i = 0; i < sizeof(parts) / sizeof(parts[0]); i++)
239 hr = D3DGetBlobPart(dword, size, parts[i], 0, &blob2);
241 if (parts[i] == D3D_BLOB_INPUT_AND_OUTPUT_SIGNATURE_BLOB
242 || parts[i] == D3D_BLOB_INPUT_SIGNATURE_BLOB
243 || parts[i] == D3D_BLOB_OUTPUT_SIGNATURE_BLOB)
245 ok(hr == S_OK, "D3DGetBlobPart failed, got %x, expected %x\n", hr, S_OK);
247 refcount = ID3D10Blob_Release(blob2);
248 ok(!refcount, "ID3DBlob has %u references left\n", refcount);
250 else
252 ok(hr == E_FAIL, "D3DGetBlobPart failed, got %x, expected %x\n", hr, E_FAIL);
256 refcount = ID3D10Blob_Release(blob);
257 ok(!refcount, "ID3DBlob has %u references left\n", refcount);
259 /* D3D_BLOB_PATCH_CONSTANT_SIGNATURE_BLOB */
260 hr = D3DGetBlobPart(test_blob_part, test_blob_part[6], D3D_BLOB_PATCH_CONSTANT_SIGNATURE_BLOB, 0, &blob);
261 ok(hr == E_FAIL, "D3DGetBlobPart failed, got %x, expected %x\n", hr, E_FAIL);
263 /* D3D_BLOB_ALL_SIGNATURE_BLOB */
264 hr = D3DGetBlobPart(test_blob_part, test_blob_part[6], D3D_BLOB_ALL_SIGNATURE_BLOB, 0, &blob);
265 ok(hr == E_FAIL, "D3DGetBlobPart failed, got %x, expected %x\n", hr, E_FAIL);
267 /* D3D_BLOB_DEBUG_INFO */
268 hr = D3DGetBlobPart(test_blob_part, test_blob_part[6], D3D_BLOB_DEBUG_INFO, 0, &blob);
269 ok(hr == E_FAIL, "D3DGetBlobPart failed, got %x, expected %x\n", hr, E_FAIL);
271 /* D3D_BLOB_LEGACY_SHADER */
272 hr = D3DGetBlobPart(test_blob_part, test_blob_part[6], D3D_BLOB_LEGACY_SHADER, 0, &blob);
273 ok(hr == S_OK, "D3DGetBlobPart failed, got %x, expected %x\n", hr, S_OK);
275 size = ID3D10Blob_GetBufferSize(blob);
276 ok(size == 92, "GetBufferSize failed, got %lu, expected %u\n", size, 92);
278 dword = ((DWORD*)ID3D10Blob_GetBufferPointer(blob));
279 ok(test_blob_part[0] != *dword, "DXBC failed got %#x.\n", *dword);
281 for (i = 0; i < sizeof(parts) / sizeof(parts[0]); i++)
283 /* There isn't a full DXBC blob returned for D3D_BLOB_LEGACY_SHADER */
284 hr = D3DGetBlobPart(dword, size, parts[i], 0, &blob2);
285 ok(hr == E_FAIL, "D3DGetBlobPart failed, got %x, expected %x\n", hr, E_FAIL);
288 refcount = ID3D10Blob_Release(blob);
289 ok(!refcount, "ID3DBlob has %u references left\n", refcount);
291 /* D3D_BLOB_XNA_PREPASS_SHADER */
292 hr = D3DGetBlobPart(test_blob_part, test_blob_part[6], D3D_BLOB_XNA_PREPASS_SHADER, 0, &blob);
293 ok(hr == S_OK, "D3DGetBlobPart failed, got %x, expected %x\n", hr, S_OK);
295 size = ID3D10Blob_GetBufferSize(blob);
296 ok(size == 68, "GetBufferSize failed, got %lu, expected %u\n", size, 68);
298 dword = ((DWORD*)ID3D10Blob_GetBufferPointer(blob));
299 ok(test_blob_part[0] != *dword, "DXBC failed got %#x.\n", *dword);
301 for (i = 0; i < sizeof(parts) / sizeof(parts[0]); i++)
303 /* There isn't a full DXBC blob returned for D3D_BLOB_XNA_PREPASS_SHADER */
304 hr = D3DGetBlobPart(dword, size, parts[i], 0, &blob2);
305 ok(hr == E_FAIL, "D3DGetBlobPart failed, got %x, expected %x\n", hr, E_FAIL);
308 refcount = ID3D10Blob_Release(blob);
309 ok(!refcount, "ID3DBlob has %u references left\n", refcount);
311 /* D3D_BLOB_XNA_SHADER */
312 hr = D3DGetBlobPart(test_blob_part, test_blob_part[6], D3D_BLOB_XNA_SHADER, 0, &blob);
313 ok(hr == S_OK, "D3DGetBlobPart failed, got %x, expected %x\n", hr, S_OK);
315 size = ID3D10Blob_GetBufferSize(blob);
316 ok(size == 68, "GetBufferSize failed, got %lu, expected %u\n", size, 68);
318 dword = ((DWORD*)ID3D10Blob_GetBufferPointer(blob));
319 ok(test_blob_part[0] != *dword, "DXBC failed got %#x.\n", *dword);
321 for (i = 0; i < sizeof(parts) / sizeof(parts[0]); i++)
323 /* There isn't a full DXBC blob returned for D3D_BLOB_XNA_SHADER */
324 hr = D3DGetBlobPart(dword, size, parts[i], 0, &blob2);
325 ok(hr == E_FAIL, "D3DGetBlobPart failed, got %x, expected %x\n", hr, E_FAIL);
328 refcount = ID3D10Blob_Release(blob);
329 ok(!refcount, "ID3DBlob has %u references left\n", refcount);
331 /* check corner cases for D3DStripShader */
332 hr = D3DStripShader(test_blob_part, test_blob_part[6], 0xffffffff, &blob);
333 ok(hr == S_OK, "D3DStripShader failed, got %x, expected %x\n", hr, S_OK);
335 refcount = ID3D10Blob_Release(blob);
336 ok(!refcount, "ID3DBlob has %u references left\n", refcount);
338 hr = D3DStripShader(test_blob_part, test_blob_part[6], 0, &blob);
339 ok(hr == S_OK, "D3DStripShader failed, got %x, expected %x\n", hr, S_OK);
341 refcount = ID3D10Blob_Release(blob);
342 ok(!refcount, "ID3DBlob has %u references left\n", refcount);
344 hr = D3DStripShader(NULL, test_blob_part[6], 0, &blob);
345 ok(hr == D3DERR_INVALIDCALL, "D3DStripShader failed, got %x, expected %x\n", hr, D3DERR_INVALIDCALL);
347 hr = D3DStripShader(test_blob_part, 2, 0, &blob);
348 ok(hr == D3DERR_INVALIDCALL, "D3DStripShader failed, got %x, expected %x\n", hr, D3DERR_INVALIDCALL);
350 hr = D3DStripShader(test_blob_part, test_blob_part[6], 0, NULL);
351 ok(hr == E_FAIL, "D3DStripShader failed, got %x, expected %x\n", hr, E_FAIL);
353 hr = D3DStripShader(NULL, test_blob_part[6], 0, NULL);
354 ok(hr == E_FAIL, "D3DStripShader failed, got %x, expected %x\n", hr, E_FAIL);
356 hr = D3DStripShader(test_blob_part, 0, 0, NULL);
357 ok(hr == E_FAIL, "D3DStripShader failed, got %x, expected %x\n", hr, E_FAIL);
359 /* D3DCOMPILER_STRIP_DEBUG_INFO */
360 hr = D3DStripShader(test_blob_part, test_blob_part[6], D3DCOMPILER_STRIP_DEBUG_INFO, &blob);
361 ok(hr == S_OK, "D3DStripShader failed, got %x, expected %x\n", hr, S_OK);
363 size = ID3D10Blob_GetBufferSize(blob);
364 ok(size == 736, "GetBufferSize failed, got %lu, expected %u\n", size, 736);
366 dword = ((DWORD*)ID3D10Blob_GetBufferPointer(blob));
367 ok(TAG_DXBC == *dword, "DXBC got %#x, expected %#x.\n", *dword, TAG_DXBC);
368 ok(TAG_XNAS == *(dword+16), "XNAS got %#x, expected %#x.\n", *(dword+16), TAG_XNAS);
369 ok(TAG_XNAP == *(dword+35), "XNAP got %#x, expected %#x.\n", *(dword+35), TAG_XNAP);
370 ok(TAG_Aon9 == *(dword+54), "Aon9 got %#x, expected %#x.\n", *(dword+54), TAG_Aon9);
371 ok(TAG_SHDR == *(dword+79), "SHDR got %#x, expected %#x.\n", *(dword+79), TAG_SHDR);
372 ok(TAG_STAT == *(dword+96), "STAT got %#x, expected %#x.\n", *(dword+96), TAG_STAT);
373 ok(TAG_RDEF == *(dword+127), "RDEF got %#x, expected %#x.\n", *(dword+127), TAG_RDEF);
374 ok(TAG_ISGN == *(dword+149), "ISGN got %#x, expected %#x.\n", *(dword+149), TAG_ISGN);
375 ok(TAG_OSGN == *(dword+171), "OSGN got %#x, expected %#x.\n", *(dword+171), TAG_OSGN);
377 hr = D3DGetBlobPart(dword, size, D3D_BLOB_DEBUG_INFO, 0, &blob2);
378 ok(hr == E_FAIL, "D3DGetBlobPart failed, got %x, expected %x\n", hr, E_FAIL);
380 refcount = ID3D10Blob_Release(blob);
381 ok(!refcount, "ID3DBlob has %u references left\n", refcount);
383 /* D3DCOMPILER_STRIP_REFLECTION_DATA */
384 hr = D3DStripShader(test_blob_part, test_blob_part[6], D3DCOMPILER_STRIP_REFLECTION_DATA, &blob);
385 ok(hr == S_OK, "D3DStripShader failed, got %x, expected %x\n", hr, S_OK);
387 size = ID3D10Blob_GetBufferSize(blob);
388 ok(size == 516, "GetBufferSize failed, got %lu, expected %u\n", size, 516);
390 dword = ((DWORD*)ID3D10Blob_GetBufferPointer(blob));
391 ok(TAG_DXBC == *dword, "DXBC got %#x, expected %#x.\n", *dword, TAG_DXBC);
392 ok(TAG_XNAS == *(dword+14), "XNAS got %#x, expected %#x.\n", *(dword+14), TAG_XNAS);
393 ok(TAG_XNAP == *(dword+33), "XNAP got %#x, expected %#x.\n", *(dword+33), TAG_XNAP);
394 ok(TAG_Aon9 == *(dword+52), "Aon9 got %#x, expected %#x.\n", *(dword+52), TAG_Aon9);
395 ok(TAG_SHDR == *(dword+77), "SHDR got %#x, expected %#x.\n", *(dword+77), TAG_SHDR);
396 ok(TAG_ISGN == *(dword+94), "ISGN got %#x, expected %#x.\n", *(dword+94), TAG_ISGN);
397 ok(TAG_OSGN == *(dword+116), "OSGN got %#x, expected %#x.\n", *(dword+116), TAG_OSGN);
399 refcount = ID3D10Blob_Release(blob);
400 ok(!refcount, "ID3DBlob has %u references left\n", refcount);
404 * test_blob_part2 - fxc.exe /E BHS /Ths_5_0 /Zi
406 #if 0
407 struct VSO { float3 p : POSITION; };
408 struct HSDO { float e[4] : SV_TessFactor; float i[2] : SV_InsideTessFactor; };
409 struct HSO { float3 p : BEZIERPOS; };
410 HSDO BCHS( InputPatch<VSO, 8> ip, uint PatchID : SV_PrimitiveID )
412 HSDO res;
413 res.e[0] = res.e[1] = res.e[2] = res.e[3] = 1.0f;
414 res.i[0] = res.i[1] = 1.0f;
415 return res;
417 [domain("quad")]
418 [partitioning("integer")]
419 [outputtopology("triangle_cw")]
420 [outputcontrolpoints(8)]
421 [patchconstantfunc("BCHS")]
422 HSO BHS( InputPatch<VSO, 8> p, uint i : SV_OutputControlPointID, uint PatchID : SV_PrimitiveID )
424 HSO res;
425 res.p = p[i].p;
426 return res;
428 #endif
429 static DWORD test_blob_part2[] = {
430 0x43425844, 0xa9d455ae, 0x4cf9c0df, 0x4cf806dc, 0xc57a8c2c, 0x00000001, 0x0000139b, 0x00000007,
431 0x0000003c, 0x000000b4, 0x000000e8, 0x0000011c, 0x000001e0, 0x00000320, 0x000003bc, 0x46454452,
432 0x00000070, 0x00000000, 0x00000000, 0x00000000, 0x0000003c, 0x48530500, 0x00000101, 0x0000003c,
433 0x31314452, 0x0000003c, 0x00000018, 0x00000020, 0x00000028, 0x00000024, 0x0000000c, 0x00000000,
434 0x7263694d, 0x666f736f, 0x52282074, 0x4c482029, 0x53204c53, 0x65646168, 0x6f432072, 0x6c69706d,
435 0x39207265, 0x2e39322e, 0x2e323539, 0x31313133, 0xababab00, 0x4e475349, 0x0000002c, 0x00000001,
436 0x00000008, 0x00000020, 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000707, 0x49534f50,
437 0x4e4f4954, 0xababab00, 0x4e47534f, 0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000000,
438 0x00000000, 0x00000003, 0x00000000, 0x00000807, 0x495a4542, 0x4f505245, 0xabab0053, 0x47534350,
439 0x000000bc, 0x00000006, 0x00000008, 0x00000098, 0x00000000, 0x0000000b, 0x00000003, 0x00000000,
440 0x00000e01, 0x00000098, 0x00000001, 0x0000000b, 0x00000003, 0x00000001, 0x00000e01, 0x00000098,
441 0x00000002, 0x0000000b, 0x00000003, 0x00000002, 0x00000e01, 0x00000098, 0x00000003, 0x0000000b,
442 0x00000003, 0x00000003, 0x00000e01, 0x000000a6, 0x00000000, 0x0000000c, 0x00000003, 0x00000004,
443 0x00000e01, 0x000000a6, 0x00000001, 0x0000000c, 0x00000003, 0x00000005, 0x00000e01, 0x545f5653,
444 0x46737365, 0x6f746361, 0x56530072, 0x736e495f, 0x54656469, 0x46737365, 0x6f746361, 0xabab0072,
445 0x58454853, 0x00000138, 0x00030050, 0x0000004e, 0x01000071, 0x01004093, 0x01004094, 0x01001895,
446 0x01000896, 0x01001897, 0x0100086a, 0x01000073, 0x02000099, 0x00000004, 0x0200005f, 0x00017000,
447 0x04000067, 0x00102012, 0x00000000, 0x0000000b, 0x04000067, 0x00102012, 0x00000001, 0x0000000c,
448 0x04000067, 0x00102012, 0x00000002, 0x0000000d, 0x04000067, 0x00102012, 0x00000003, 0x0000000e,
449 0x02000068, 0x00000001, 0x0400005b, 0x00102012, 0x00000000, 0x00000004, 0x04000036, 0x00100012,
450 0x00000000, 0x0001700a, 0x06000036, 0x00902012, 0x0010000a, 0x00000000, 0x00004001, 0x3f800000,
451 0x0100003e, 0x01000073, 0x02000099, 0x00000002, 0x0200005f, 0x00017000, 0x04000067, 0x00102012,
452 0x00000004, 0x0000000f, 0x04000067, 0x00102012, 0x00000005, 0x00000010, 0x02000068, 0x00000001,
453 0x0400005b, 0x00102012, 0x00000004, 0x00000002, 0x04000036, 0x00100012, 0x00000000, 0x0001700a,
454 0x07000036, 0x00d02012, 0x00000004, 0x0010000a, 0x00000000, 0x00004001, 0x3f800000, 0x0100003e,
455 0x54415453, 0x00000094, 0x00000006, 0x00000001, 0x00000000, 0x00000005, 0x00000000, 0x00000000,
456 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
457 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
458 0x00000000, 0x0000000f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
459 0x00000008, 0x00000003, 0x00000001, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x47424453,
460 0x00000fd7, 0x00000054, 0x000002d5, 0x00000306, 0x0000030a, 0x00000101, 0x00000001, 0x00000000,
461 0x00000006, 0x00000010, 0x00000006, 0x00000958, 0x00000000, 0x000009e8, 0x00000008, 0x000009e8,
462 0x00000006, 0x00000a88, 0x00000007, 0x00000b00, 0x00000c34, 0x00000c64, 0x00000000, 0x0000004a,
463 0x0000004a, 0x0000026a, 0x00000000, 0x00000036, 0x00000001, 0x00000004, 0x00000000, 0xffffffff,
464 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, 0x00000003, 0x00000000,
465 0x00000003, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000,
466 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000,
467 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff,
468 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
469 0xffffffff, 0xffffffff, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
470 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
471 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
472 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
473 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000,
474 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000007,
475 0x00000000, 0x00000003, 0x00000024, 0x00000000, 0x00000000, 0x00000001, 0x00000036, 0x00000001,
476 0x00000001, 0x00000000, 0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000,
477 0x3f800000, 0x3f800000, 0x3f800000, 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000,
478 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
479 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
480 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
481 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000,
482 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000,
483 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000,
484 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000,
485 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff,
486 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
487 0x00000000, 0x00000000, 0x00000007, 0x00000000, 0x00000003, 0x00000024, 0x00000000, 0x00000000,
488 0x00000002, 0x0000003e, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000,
489 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
490 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
491 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000,
492 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000,
493 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
494 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff,
495 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
496 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
497 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
498 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
499 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000007, 0x00000000, 0x00000003,
500 0x00000024, 0x00000000, 0x00000000, 0x00000003, 0x00000036, 0x00000001, 0x00000004, 0x00000000,
501 0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, 0x00000001,
502 0x00000000, 0x00000001, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000,
503 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff,
504 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
505 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
506 0x00000000, 0xffffffff, 0xffffffff, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000,
507 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
508 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
509 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000,
510 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000,
511 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
512 0x00000007, 0x00000000, 0x00000003, 0x00000024, 0x00000000, 0x00000000, 0x00000004, 0x00000036,
513 0x00000001, 0x00000001, 0x00000004, 0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff,
514 0x00000004, 0x3f800000, 0x3f800000, 0x3f800000, 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000,
515 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
516 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
517 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
518 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff,
519 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000,
520 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000,
521 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff,
522 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
523 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
524 0x00000000, 0x00000000, 0x00000000, 0x00000007, 0x00000000, 0x00000003, 0x00000024, 0x00000000,
525 0x00000000, 0x00000005, 0x0000003e, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000,
526 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
527 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000,
528 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000,
529 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000,
530 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
531 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
532 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
533 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
534 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
535 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
536 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000007, 0x00000000,
537 0x00000003, 0x00000024, 0x00000000, 0x00000000, 0x00000006, 0x00000003, 0xffffffff, 0xffffffff,
538 0x00000003, 0x00000000, 0x00000006, 0x00000003, 0xffffffff, 0xffffffff, 0x00000003, 0x00000001,
539 0x00000006, 0x00000003, 0xffffffff, 0xffffffff, 0x00000003, 0x00000002, 0x00000006, 0x00000003,
540 0xffffffff, 0xffffffff, 0x00000003, 0x00000003, 0x00000006, 0x00000003, 0xffffffff, 0xffffffff,
541 0x00000003, 0x00000004, 0x00000006, 0x00000003, 0xffffffff, 0xffffffff, 0x00000003, 0x00000005,
542 0x00000000, 0x00000002, 0x00000014, 0x00000007, 0x000002c1, 0x00000000, 0x00000002, 0x00000030,
543 0x00000007, 0x000002c8, 0x00000000, 0x00000004, 0x0000001e, 0x00000002, 0x00000102, 0x00000000,
544 0x00000004, 0x00000027, 0x00000007, 0x0000010b, 0x00000000, 0x00000006, 0x00000009, 0x00000003,
545 0x00000131, 0x00000000, 0x00000001, 0x00000014, 0x00000006, 0x000002cf, 0x00000000, 0x00000004,
546 0x00000005, 0x00000004, 0x000000e9, 0x00000000, 0x00000009, 0x00000004, 0x00000000, 0x00000000,
547 0x00000003, 0x00000051, 0x00000003, 0x00000001, 0x00000000, 0x00000003, 0x00000076, 0x00000004,
548 0x00000002, 0x00000004, 0x00000000, 0x000002b4, 0x00000007, 0x00000001, 0x0000000c, 0x00000003,
549 0x00000076, 0x00000004, 0x00000002, 0x00000004, 0x00000001, 0x000002bb, 0x00000006, 0x00000001,
550 0x00000010, 0x00000004, 0x000000e9, 0x00000004, 0x00000003, 0x00000014, 0x00000005, 0x00000000,
551 0x00000001, 0x00000001, 0x00000003, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000003,
552 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000001, 0xffffffff, 0x00000001,
553 0x00000014, 0x00000004, 0x00000004, 0xffffffff, 0x00000001, 0x00000000, 0x00000000, 0x00000001,
554 0x00000001, 0xffffffff, 0x00000001, 0x00000008, 0x00000004, 0x00000002, 0xffffffff, 0x00000006,
555 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000,
556 0x00000006, 0x00000000, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
557 0x00000001, 0x00000020, 0x0000000c, 0x00000018, 0xffffffff, 0x00000003, 0x00000000, 0x00000000,
558 0x00000001, 0x00000001, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0xffffffff,
559 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000000,
560 0x00000000, 0x00000006, 0xffffffff, 0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000006,
561 0x00000004, 0x00000005, 0x00000006, 0x00000008, 0x00000004, 0x00000005, 0x00000002, 0x505c3a43,
562 0x72676f72, 0x656d6d61, 0x63694d5c, 0x6f736f72, 0x44207466, 0x63657269, 0x53205874, 0x28204b44,
563 0x656e754a, 0x31303220, 0x555c2930, 0x696c6974, 0x73656974, 0x6e69625c, 0x3638785c, 0x6165685c,
564 0x2e726564, 0x74737866, 0x74637572, 0x4f535620, 0x66207b20, 0x74616f6c, 0x20702033, 0x4f50203a,
565 0x49544953, 0x203b4e4f, 0x730a3b7d, 0x63757274, 0x53482074, 0x7b204f44, 0x6f6c6620, 0x65207461,
566 0x205d345b, 0x5653203a, 0x7365545f, 0x63614673, 0x3b726f74, 0x6f6c6620, 0x69207461, 0x205d325b,
567 0x5653203a, 0x736e495f, 0x54656469, 0x46737365, 0x6f746361, 0x7d203b72, 0x74730a3b, 0x74637572,
568 0x4f534820, 0x66207b20, 0x74616f6c, 0x20702033, 0x4542203a, 0x5245495a, 0x3b534f50, 0x0a3b7d20,
569 0x4f445348, 0x48434220, 0x49202853, 0x7475706e, 0x63746150, 0x53563c68, 0x38202c4f, 0x7069203e,
570 0x6975202c, 0x5020746e, 0x68637461, 0x3a204449, 0x5f565320, 0x6d697250, 0x76697469, 0x20444965,
571 0x0a7b0a29, 0x20202020, 0x4f445348, 0x73657220, 0x20200a3b, 0x65722020, 0x5b652e73, 0x3d205d30,
572 0x73657220, 0x315b652e, 0x203d205d, 0x2e736572, 0x5d325b65, 0x72203d20, 0x652e7365, 0x205d335b,
573 0x2e31203d, 0x0a3b6630, 0x20202020, 0x2e736572, 0x5d305b69, 0x72203d20, 0x692e7365, 0x205d315b,
574 0x2e31203d, 0x0a3b6630, 0x20202020, 0x75746572, 0x72206e72, 0x0a3b7365, 0x645b0a7d, 0x69616d6f,
575 0x7122286e, 0x22646175, 0x5b0a5d29, 0x74726170, 0x6f697469, 0x676e696e, 0x6e692228, 0x65676574,
576 0x5d292272, 0x756f5b0a, 0x74757074, 0x6f706f74, 0x79676f6c, 0x72742228, 0x676e6169, 0x635f656c,
577 0x5d292277, 0x756f5b0a, 0x74757074, 0x746e6f63, 0x706c6f72, 0x746e696f, 0x29382873, 0x705b0a5d,
578 0x68637461, 0x736e6f63, 0x746e6174, 0x636e7566, 0x43422228, 0x29225348, 0x53480a5d, 0x4842204f,
579 0x49202853, 0x7475706e, 0x63746150, 0x53563c68, 0x38202c4f, 0x2c70203e, 0x6e697520, 0x20692074,
580 0x5653203a, 0x74754f5f, 0x43747570, 0x72746e6f, 0x6f506c6f, 0x49746e69, 0x75202c44, 0x20746e69,
581 0x63746150, 0x20444968, 0x5653203a, 0x6972505f, 0x6974696d, 0x44496576, 0x7b0a2920, 0x2020200a,
582 0x4f534820, 0x73657220, 0x20200a3b, 0x65722020, 0x20702e73, 0x5b70203d, 0x702e5d69, 0x20200a3b,
583 0x65722020, 0x6e727574, 0x73657220, 0x0a7d0a3b, 0x626f6c47, 0x4c736c61, 0x6c61636f, 0x44534873,
584 0x653a3a4f, 0x4f445348, 0x56693a3a, 0x3a3a4f53, 0x63694d70, 0x6f736f72, 0x28207466, 0x48202952,
585 0x204c534c, 0x64616853, 0x43207265, 0x69706d6f, 0x2072656c, 0x39322e39, 0x3235392e, 0x3131332e,
586 0x48420031, 0x73680053, 0x305f355f, 0x6e6f6320, 0x6c6f7274, 0x696f7020, 0x0000746e,
589 static void test_get_blob_part2(void)
591 ID3DBlob *blob, *blob2;
592 HRESULT hr;
593 ULONG refcount;
594 DWORD *dword;
595 SIZE_T size;
596 UINT i;
598 /* D3D_BLOB_PATCH_CONSTANT_SIGNATURE_BLOB */
599 hr = D3DGetBlobPart(test_blob_part2, test_blob_part2[6], D3D_BLOB_PATCH_CONSTANT_SIGNATURE_BLOB, 0, &blob);
600 ok(hr == S_OK, "D3DGetBlobPart failed, got %x, expected %x\n", hr, S_OK);
602 size = ID3D10Blob_GetBufferSize(blob);
603 ok(size == 232, "GetBufferSize failed, got %lu, expected %u\n", size, 232);
605 dword = ((DWORD*)ID3D10Blob_GetBufferPointer(blob));
606 ok(TAG_DXBC == *dword, "DXBC got %#x, expected %#x.\n", *dword, TAG_DXBC);
607 ok(TAG_PCSG == *(dword+9), "PCSG got %#x, expected %#x.\n", *(dword+9), TAG_PCSG);
609 for (i = 0; i < sizeof(parts) / sizeof(parts[0]); i++)
611 hr = D3DGetBlobPart(dword, size, parts[i], 0, &blob2);
613 if (parts[i] == D3D_BLOB_PATCH_CONSTANT_SIGNATURE_BLOB)
615 ok(hr == S_OK, "D3DGetBlobPart failed, got %x, expected %x\n", hr, S_OK);
617 refcount = ID3D10Blob_Release(blob2);
618 ok(!refcount, "ID3DBlob has %u references left\n", refcount);
620 else
622 ok(hr == E_FAIL, "D3DGetBlobPart failed, got %x, expected %x\n", hr, E_FAIL);
626 refcount = ID3D10Blob_Release(blob);
627 ok(!refcount, "ID3DBlob has %u references left\n", refcount);
629 /* D3D_BLOB_ALL_SIGNATURE_BLOB */
630 hr = D3DGetBlobPart(test_blob_part2, test_blob_part2[6], D3D_BLOB_ALL_SIGNATURE_BLOB, 0, &blob);
631 ok(hr == S_OK, "D3DGetBlobPart failed, got %x, expected %x\n", hr, S_OK);
633 size = ID3D10Blob_GetBufferSize(blob);
634 ok(size == 344, "GetBufferSize failed, got %lu, expected %u\n", size, 344);
636 dword = ((DWORD*)ID3D10Blob_GetBufferPointer(blob));
637 ok(TAG_DXBC == *dword, "DXBC got %#x, expected %#x.\n", *dword, TAG_DXBC);
638 ok(TAG_ISGN == *(dword+11), "ISGN got %#x, expected %#x.\n", *(dword+11), TAG_ISGN);
639 ok(TAG_OSGN == *(dword+24), "OSGN got %#x, expected %#x.\n", *(dword+24), TAG_OSGN);
640 ok(TAG_PCSG == *(dword+37), "PCSG got %#x, expected %#x.\n", *(dword+37), TAG_PCSG);
642 for (i = 0; i < sizeof(parts) / sizeof(parts[0]); i++)
644 hr = D3DGetBlobPart(dword, size, parts[i], 0, &blob2);
646 if (parts[i] == D3D_BLOB_ALL_SIGNATURE_BLOB
647 || parts[i] == D3D_BLOB_PATCH_CONSTANT_SIGNATURE_BLOB
648 || parts[i] == D3D_BLOB_INPUT_AND_OUTPUT_SIGNATURE_BLOB
649 || parts[i] == D3D_BLOB_INPUT_SIGNATURE_BLOB
650 || parts[i] == D3D_BLOB_OUTPUT_SIGNATURE_BLOB)
652 ok(hr == S_OK, "D3DGetBlobPart failed, got %x, expected %x\n", hr, S_OK);
654 refcount = ID3D10Blob_Release(blob2);
655 ok(!refcount, "ID3DBlob has %u references left\n", refcount);
657 else
659 ok(hr == E_FAIL, "D3DGetBlobPart failed, got %x, expected %x\n", hr, E_FAIL);
663 refcount = ID3D10Blob_Release(blob);
664 ok(!refcount, "ID3DBlob has %u references left\n", refcount);
666 /* D3D_BLOB_DEBUG_INFO */
667 hr = D3DGetBlobPart(test_blob_part2, test_blob_part2[6], D3D_BLOB_DEBUG_INFO, 0, &blob);
668 ok(hr == S_OK, "D3DGetBlobPart failed, got %x, expected %x\n", hr, S_OK);
670 size = ID3D10Blob_GetBufferSize(blob);
671 ok(size == 4055, "GetBufferSize failed, got %lu, expected %u\n", size, 4055);
673 dword = ((DWORD*)ID3D10Blob_GetBufferPointer(blob));
674 ok(TAG_DXBC != *dword, "DXBC failed got %#x.\n", *dword);
676 for (i = 0; i < sizeof(parts) / sizeof(parts[0]); i++)
678 /* There isn't a full DXBC blob returned for D3D_BLOB_DEBUG_INFO */
679 hr = D3DGetBlobPart(dword, size, parts[i], 0, &blob2);
680 ok(hr == E_FAIL, "D3DGetBlobPart failed, got %x, expected %x\n", hr, E_FAIL);
683 refcount = ID3D10Blob_Release(blob);
684 ok(!refcount, "ID3DBlob has %u references left\n", refcount);
686 /* D3D_BLOB_LEGACY_SHADER */
687 hr = D3DGetBlobPart(test_blob_part2, test_blob_part2[6], D3D_BLOB_LEGACY_SHADER, 0, &blob);
688 ok(hr == E_FAIL, "D3DGetBlobPart failed, got %x, expected %x\n", hr, E_FAIL);
690 /* D3D_BLOB_XNA_PREPASS_SHADER */
691 hr = D3DGetBlobPart(test_blob_part2, test_blob_part2[6], D3D_BLOB_XNA_PREPASS_SHADER, 0, &blob);
692 ok(hr == E_FAIL, "D3DGetBlobPart failed, got %x, expected %x\n", hr, E_FAIL);
694 /* D3D_BLOB_XNA_SHADER */
695 hr = D3DGetBlobPart(test_blob_part2, test_blob_part2[6], D3D_BLOB_XNA_SHADER, 0, &blob);
696 ok(hr == E_FAIL, "D3DGetBlobPart failed, got %x, expected %x\n", hr, E_FAIL);
698 /* D3DCOMPILER_STRIP_DEBUG_INFO */
699 hr = D3DStripShader(test_blob_part2, test_blob_part2[6], D3DCOMPILER_STRIP_DEBUG_INFO, &blob);
700 ok(hr == S_OK, "D3DStripShader failed, got %x, expected %x\n", hr, S_OK);
702 size = ID3D10Blob_GetBufferSize(blob);
703 ok(size == 952, "GetBufferSize failed, got %lu, expected %u\n", size, 952);
705 dword = ((DWORD*)ID3D10Blob_GetBufferPointer(blob));
706 ok(TAG_DXBC == *dword, "DXBC got %#x, expected %#x.\n", *dword, TAG_DXBC);
707 ok(TAG_RDEF == *(dword+14), "RDEF got %#x, expected %#x.\n", *(dword+14), TAG_RDEF);
708 ok(TAG_ISGN == *(dword+44), "ISGN got %#x, expected %#x.\n", *(dword+44), TAG_ISGN);
709 ok(TAG_OSGN == *(dword+57), "OSGN got %#x, expected %#x.\n", *(dword+57), TAG_OSGN);
710 ok(TAG_PCSG == *(dword+70), "PCSG got %#x, expected %#x.\n", *(dword+70), TAG_PCSG);
711 ok(TAG_SHEX == *(dword+119), "SHEX got %#x, expected %#x.\n", *(dword+119), TAG_SHEX);
712 ok(TAG_STAT == *(dword+199), "STAT got %#x, expected %#x.\n", *(dword+199), TAG_STAT);
714 hr = D3DGetBlobPart(dword, size, D3D_BLOB_DEBUG_INFO, 0, &blob2);
715 ok(hr == E_FAIL, "D3DGetBlobPart failed, got %x, expected %x\n", hr, E_FAIL);
717 refcount = ID3D10Blob_Release(blob);
718 ok(!refcount, "ID3DBlob has %u references left\n", refcount);
720 /* D3DCOMPILER_STRIP_REFLECTION_DATA */
721 hr = D3DStripShader(test_blob_part2, test_blob_part2[6], D3DCOMPILER_STRIP_REFLECTION_DATA, &blob);
722 ok(hr == S_OK, "D3DStripShader failed, got %x, expected %x\n", hr, S_OK);
724 size = ID3D10Blob_GetBufferSize(blob);
725 ok(size == 4735, "GetBufferSize failed, got %lu, expected %u\n", size, 4735);
727 dword = ((DWORD*)ID3D10Blob_GetBufferPointer(blob));
728 ok(TAG_DXBC == *dword, "DXBC got %#x, expected %#x.\n", *dword, TAG_DXBC);
729 ok(TAG_ISGN == *(dword+13), "ISGN got %#x, expected %#x.\n", *(dword+13), TAG_ISGN);
730 ok(TAG_OSGN == *(dword+26), "OSGN got %#x, expected %#x.\n", *(dword+26), TAG_OSGN);
731 ok(TAG_PCSG == *(dword+39), "PCSG got %#x, expected %#x.\n", *(dword+39), TAG_PCSG);
732 ok(TAG_SHEX == *(dword+88), "SHEX got %#x, expected %#x.\n", *(dword+88), TAG_SHEX);
733 ok(TAG_SDBG == *(dword+168), "SDBG got %#x, expected %#x.\n", *(dword+168), TAG_SDBG);
735 refcount = ID3D10Blob_Release(blob);
736 ok(!refcount, "ID3DBlob has %u references left\n", refcount);
739 START_TEST(blob)
741 test_create_blob();
742 test_get_blob_part();
743 test_get_blob_part2();