d3dx10: Implement D3DX10GetImageInfoFromResource{A, W}().
[wine.git] / dlls / d3dx10_43 / tests / d3dx10.c
blob5d7ffcfde3f3ad2d0a56b5c1ad59002d7522a170
1 /*
2 * Copyright 2016 Nikolay Sivov for CodeWeavers
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 #define COBJMACROS
20 #include "initguid.h"
21 #include "d3d10_1.h"
22 #include "d3dx10.h"
23 #include "wine/test.h"
25 /* 1x1 1bpp bmp image */
26 static const BYTE test_bmp_1bpp[] =
28 0x42, 0x4d, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x28, 0x00,
29 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00,
30 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x12, 0x0b, 0x00, 0x00, 0x12, 0x0b, 0x00, 0x00, 0x02, 0x00,
31 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xf1, 0xf2, 0xf3, 0x80, 0xf4, 0xf5, 0xf6, 0x81, 0x00, 0x00,
32 0x00, 0x00
35 /* 1x1 4bpp bmp image */
36 static const BYTE test_bmp_4bpp[] =
38 0x42, 0x4d, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x28, 0x00,
39 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00,
40 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x12, 0x0b, 0x00, 0x00, 0x12, 0x0b, 0x00, 0x00, 0x02, 0x00,
41 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xf1, 0xf2, 0xf3, 0x80, 0xf4, 0xf5, 0xf6, 0x81, 0x00, 0x00,
42 0x00, 0x00
45 /* 1x1 8bpp bmp image */
46 static const BYTE test_bmp_8bpp[] =
48 0x42, 0x4d, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x28, 0x00,
49 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00,
50 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x12, 0x0b, 0x00, 0x00, 0x12, 0x0b, 0x00, 0x00, 0x02, 0x00,
51 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xf1, 0xf2, 0xf3, 0x80, 0xf4, 0xf5, 0xf6, 0x81, 0x00, 0x00,
52 0x00, 0x00
55 /* 1x1 16bpp bmp image */
56 static const BYTE test_bmp_16bpp[] =
58 0x42, 0x4d, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00,
59 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x00, 0x00, 0x00,
60 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0x0b, 0x00, 0x00, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00,
61 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x42, 0x00, 0x00, 0x00, 0x00
64 /* 1x1 24bpp bmp image */
65 static const BYTE test_bmp_24bpp[] =
67 0x42, 0x4d, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00,
68 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x18, 0x00, 0x00, 0x00,
69 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0x0b, 0x00, 0x00, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00,
70 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x84, 0x84, 0x00, 0x00, 0x00
73 /* 2x2 32bpp XRGB bmp image */
74 static const BYTE test_bmp_32bpp_xrgb[] =
76 0x42, 0x4d, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00,
77 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00,
78 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x12, 0x0b, 0x00, 0x00, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00,
79 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0xb0, 0xc0, 0x00, 0xa1, 0xb1, 0xc1, 0x00, 0xa2, 0xb2,
80 0xc2, 0x00, 0xa3, 0xb3, 0xc3, 0x00
83 /* 2x2 32bpp ARGB bmp image */
84 static const BYTE test_bmp_32bpp_argb[] =
86 0x42, 0x4d, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00,
87 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00,
88 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x12, 0x0b, 0x00, 0x00, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00,
89 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0xb0, 0xc0, 0x00, 0xa1, 0xb1, 0xc1, 0x00, 0xa2, 0xb2,
90 0xc2, 0x00, 0xa3, 0xb3, 0xc3, 0x01
93 /* 1x1 8bpp gray png image */
94 static const BYTE test_png_8bpp_gray[] =
96 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
97 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x7e, 0x9b,
98 0x55, 0x00, 0x00, 0x00, 0x0a, 0x49, 0x44, 0x41, 0x54, 0x08, 0xd7, 0x63, 0xf8, 0x0f, 0x00, 0x01,
99 0x01, 0x01, 0x00, 0x1b, 0xb6, 0xee, 0x56, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae,
100 0x42, 0x60, 0x82
103 /* 1x1 jpg image */
104 static const BYTE test_jpg[] =
106 0xff, 0xd8, 0xff, 0xe0, 0x00, 0x10, 0x4a, 0x46, 0x49, 0x46, 0x00, 0x01, 0x01, 0x01, 0x01, 0x2c,
107 0x01, 0x2c, 0x00, 0x00, 0xff, 0xdb, 0x00, 0x43, 0x00, 0x05, 0x03, 0x04, 0x04, 0x04, 0x03, 0x05,
108 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x06, 0x07, 0x0c, 0x08, 0x07, 0x07, 0x07, 0x07, 0x0f, 0x0b,
109 0x0b, 0x09, 0x0c, 0x11, 0x0f, 0x12, 0x12, 0x11, 0x0f, 0x11, 0x11, 0x13, 0x16, 0x1c, 0x17, 0x13,
110 0x14, 0x1a, 0x15, 0x11, 0x11, 0x18, 0x21, 0x18, 0x1a, 0x1d, 0x1d, 0x1f, 0x1f, 0x1f, 0x13, 0x17,
111 0x22, 0x24, 0x22, 0x1e, 0x24, 0x1c, 0x1e, 0x1f, 0x1e, 0xff, 0xdb, 0x00, 0x43, 0x01, 0x05, 0x05,
112 0x05, 0x07, 0x06, 0x07, 0x0e, 0x08, 0x08, 0x0e, 0x1e, 0x14, 0x11, 0x14, 0x1e, 0x1e, 0x1e, 0x1e,
113 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
114 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
115 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0xff, 0xc0,
116 0x00, 0x11, 0x08, 0x00, 0x01, 0x00, 0x01, 0x03, 0x01, 0x22, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11,
117 0x01, 0xff, 0xc4, 0x00, 0x15, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
118 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xc4, 0x00, 0x14, 0x10, 0x01, 0x00, 0x00,
119 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xc4,
120 0x00, 0x14, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
121 0x00, 0x00, 0x00, 0x00, 0xff, 0xc4, 0x00, 0x14, 0x11, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
122 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xda, 0x00, 0x0c, 0x03, 0x01,
123 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0xb2, 0xc0, 0x07, 0xff, 0xd9
126 /* 1x1 gif image */
127 static const BYTE test_gif[] =
129 0x47, 0x49, 0x46, 0x38, 0x37, 0x61, 0x01, 0x00, 0x01, 0x00, 0x80, 0x00, 0x00, 0xff, 0xff, 0xff,
130 0xff, 0xff, 0xff, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x02, 0x02, 0x44,
131 0x01, 0x00, 0x3b
134 /* 1x1 tiff image */
135 static const BYTE test_tiff[] =
137 0x49, 0x49, 0x2a, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0xfe, 0x00,
138 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x01, 0x00,
139 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00,
140 0x00, 0x00, 0x02, 0x01, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0xd2, 0x00, 0x00, 0x00, 0x03, 0x01,
141 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x01, 0x03, 0x00, 0x01, 0x00,
142 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0d, 0x01, 0x02, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd8, 0x00,
143 0x00, 0x00, 0x11, 0x01, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x12, 0x01,
144 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x15, 0x01, 0x03, 0x00, 0x01, 0x00,
145 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x16, 0x01, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00,
146 0x00, 0x00, 0x17, 0x01, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1a, 0x01,
147 0x05, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, 0x1b, 0x01, 0x05, 0x00, 0x01, 0x00,
148 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x1c, 0x01, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00,
149 0x00, 0x00, 0x28, 0x01, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
150 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x2f, 0x68, 0x6f, 0x6d, 0x65, 0x2f, 0x6d, 0x65,
151 0x68, 0x2f, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x74,
152 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x48,
153 0x00, 0x00, 0x00, 0x01
156 /* 1x1 alpha dds image */
157 static const BYTE test_dds_alpha[] =
159 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x07, 0x10, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00,
160 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
161 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
162 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
163 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
164 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
165 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
166 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
167 0xff
170 /* 1x1 luminance dds image */
171 static const BYTE test_dds_luminance[] =
173 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x07, 0x10, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00,
174 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
175 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
176 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
177 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
178 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
179 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
180 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
181 0x82
184 /* 1x1 16bpp dds image */
185 static const BYTE test_dds_16bpp[] =
187 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x07, 0x10, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00,
188 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
189 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
190 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
191 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
192 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00,
193 0xe0, 0x03, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
194 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
195 0x0e, 0x42
198 /* 1x1 24bpp dds image */
199 static const BYTE test_dds_24bpp[] =
201 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x07, 0x10, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00,
202 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
203 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
204 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
205 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
206 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00,
207 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
208 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
209 0x70, 0x81, 0x83
212 /* 1x1 32bpp dds image */
213 static const BYTE test_dds_32bpp[] =
215 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x07, 0x10, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00,
216 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
217 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
218 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
219 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
220 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00,
221 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x10, 0x00, 0x00,
222 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
223 0x70, 0x81, 0x83, 0xff
226 /* 1x1 64bpp dds image */
227 static const BYTE test_dds_64bpp[] =
229 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x0f, 0x10, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00,
230 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
231 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
232 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
233 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
234 0x04, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
235 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
236 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
237 0x83, 0x83, 0x81, 0x81, 0x70, 0x70, 0xff, 0xff
240 /* 1x1 96bpp dds image */
241 static const BYTE test_dds_96bpp[] =
243 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x0f, 0x10, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00,
244 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
245 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
246 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
247 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
248 0x04, 0x00, 0x00, 0x00, 0x44, 0x58, 0x31, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
249 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
250 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
251 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
252 0x00, 0x00, 0x00, 0x00, 0x84, 0x83, 0x03, 0x3f, 0x82, 0x81, 0x01, 0x3f, 0xe2, 0xe0, 0xe0, 0x3e
255 /* 1x1 128bpp dds image */
256 static const BYTE test_dds_128bpp[] =
258 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x0f, 0x10, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00,
259 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
260 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
261 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
262 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
263 0x04, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
264 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
265 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
266 0x84, 0x83, 0x03, 0x3f, 0x82, 0x81, 0x01, 0x3f, 0xe2, 0xe0, 0xe0, 0x3e, 0x00, 0x00, 0x80, 0x3f
269 /* 4x4 DXT1 dds image */
270 static const BYTE test_dds_dxt1[] =
272 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x07, 0x10, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00,
273 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
274 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
275 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
276 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
277 0x04, 0x00, 0x00, 0x00, 0x44, 0x58, 0x54, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
278 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
279 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
280 0x2a, 0x31, 0xf5, 0xbc, 0xe3, 0x6e, 0x2a, 0x3a
283 /* 4x4 DXT2 dds image */
284 static const BYTE test_dds_dxt2[] =
286 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x07, 0x10, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00,
287 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
288 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
289 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
290 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
291 0x04, 0x00, 0x00, 0x00, 0x44, 0x58, 0x54, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
292 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x40, 0x00,
293 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
294 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xde, 0xc4, 0x10, 0x2f, 0xbf, 0xff, 0x7b,
295 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x53, 0x00, 0x00, 0x52, 0x52, 0x55, 0x55,
296 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xce, 0x59, 0x00, 0x00, 0x54, 0x55, 0x55, 0x55
299 /* 1x3 DXT3 dds image */
300 static const BYTE test_dds_dxt3[] =
302 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x07, 0x10, 0x0a, 0x00, 0x03, 0x00, 0x00, 0x00,
303 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
304 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
305 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
306 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
307 0x04, 0x00, 0x00, 0x00, 0x44, 0x58, 0x54, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
308 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x40, 0x00,
309 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
310 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0c, 0x92, 0x38, 0x84, 0x00, 0xff, 0x55, 0xff,
311 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x53, 0x8b, 0x53, 0x8b, 0x00, 0x00, 0x00, 0x00
314 /* 4x4 DXT4 dds image */
315 static const BYTE test_dds_dxt4[] =
317 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x07, 0x10, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00,
318 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
319 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
320 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
321 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
322 0x04, 0x00, 0x00, 0x00, 0x44, 0x58, 0x54, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
323 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x40, 0x00,
324 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
325 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0xde, 0xc4, 0x10, 0x2f, 0xbf, 0xff, 0x7b,
326 0xff, 0x00, 0x40, 0x02, 0x24, 0x49, 0x92, 0x24, 0x57, 0x53, 0x00, 0x00, 0x52, 0x52, 0x55, 0x55,
327 0xff, 0x00, 0x48, 0x92, 0x24, 0x49, 0x92, 0x24, 0xce, 0x59, 0x00, 0x00, 0x54, 0x55, 0x55, 0x55
330 /* 4x2 DXT5 dds image */
331 static const BYTE test_dds_dxt5[] =
333 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x07, 0x10, 0x08, 0x00, 0x02, 0x00, 0x00, 0x00,
334 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
335 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
336 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
337 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
338 0x04, 0x00, 0x00, 0x00, 0x44, 0x58, 0x54, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
339 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00,
340 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
341 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x87, 0x0f, 0x78, 0x05, 0x05, 0x50, 0x50
344 /* 4x4 BC4 dds image */
345 static const BYTE test_dds_bc4[] =
347 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x07, 0x10, 0x0a, 0x00, 0x04, 0x00, 0x00, 0x00,
348 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
349 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
350 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
351 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
352 0x04, 0x00, 0x00, 0x00, 0x42, 0x43, 0x34, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
353 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x40, 0x00,
354 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
355 0xd9, 0x15, 0xbc, 0x41, 0x5b, 0xa3, 0x3d, 0x3a, 0x8f, 0x3d, 0x45, 0x81, 0x20, 0x45, 0x81, 0x20,
356 0x6f, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
359 /* 6x3 BC5 dds image */
360 static const BYTE test_dds_bc5[] =
362 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x07, 0x10, 0x0a, 0x00, 0x03, 0x00, 0x00, 0x00,
363 0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
364 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
365 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
366 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
367 0x04, 0x00, 0x00, 0x00, 0x42, 0x43, 0x35, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
368 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x40, 0x00,
369 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
370 0x9f, 0x28, 0x73, 0xac, 0xd5, 0x80, 0xaa, 0xd5, 0x70, 0x2c, 0x4e, 0xd6, 0x76, 0x1d, 0xd6, 0x76,
371 0xd5, 0x0f, 0xc3, 0x50, 0x96, 0xcf, 0x53, 0x96, 0xdf, 0x16, 0xc3, 0x50, 0x96, 0xcf, 0x53, 0x96,
372 0x83, 0x55, 0x08, 0x83, 0x30, 0x08, 0x83, 0x30, 0x79, 0x46, 0x31, 0x1c, 0xc3, 0x31, 0x1c, 0xc3,
373 0x6d, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
376 /* 4x4 DXT1 cube map */
377 static const BYTE test_dds_cube[] =
379 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x07, 0x10, 0x0a, 0x00, 0x04, 0x00, 0x00, 0x00,
380 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
381 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
382 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
383 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
384 0x04, 0x00, 0x00, 0x00, 0x44, 0x58, 0x54, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
385 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x40, 0x00,
386 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
387 0xf5, 0xa7, 0x08, 0x69, 0x74, 0xc0, 0xbf, 0xd7, 0x32, 0x96, 0x0b, 0x7b, 0xcc, 0x55, 0xcc, 0x55,
388 0x0e, 0x84, 0x0e, 0x84, 0x00, 0x00, 0x00, 0x00, 0xf5, 0xa7, 0x08, 0x69, 0x74, 0xc0, 0xbf, 0xd7,
389 0x32, 0x96, 0x0b, 0x7b, 0xcc, 0x55, 0xcc, 0x55, 0x0e, 0x84, 0x0e, 0x84, 0x00, 0x00, 0x00, 0x00,
390 0xf5, 0xa7, 0x08, 0x69, 0x74, 0xc0, 0xbf, 0xd7, 0x32, 0x96, 0x0b, 0x7b, 0xcc, 0x55, 0xcc, 0x55,
391 0x0e, 0x84, 0x0e, 0x84, 0x00, 0x00, 0x00, 0x00, 0xf5, 0xa7, 0x08, 0x69, 0x74, 0xc0, 0xbf, 0xd7,
392 0x32, 0x96, 0x0b, 0x7b, 0xcc, 0x55, 0xcc, 0x55, 0x0e, 0x84, 0x0e, 0x84, 0x00, 0x00, 0x00, 0x00,
393 0xf5, 0xa7, 0x08, 0x69, 0x74, 0xc0, 0xbf, 0xd7, 0x32, 0x96, 0x0b, 0x7b, 0xcc, 0x55, 0xcc, 0x55,
394 0x0e, 0x84, 0x0e, 0x84, 0x00, 0x00, 0x00, 0x00, 0xf5, 0xa7, 0x08, 0x69, 0x74, 0xc0, 0xbf, 0xd7,
395 0x32, 0x96, 0x0b, 0x7b, 0xcc, 0x55, 0xcc, 0x55, 0x0e, 0x84, 0x0e, 0x84, 0x00, 0x00, 0x00, 0x00
398 /* 1x1 wmp image */
399 static const BYTE test_wmp[] =
401 0x49, 0x49, 0xbc, 0x01, 0x20, 0x00, 0x00, 0x00, 0x24, 0xc3, 0xdd, 0x6f, 0x03, 0x4e, 0xfe, 0x4b,
402 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
403 0x08, 0x00, 0x01, 0xbc, 0x01, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0xbc,
404 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xbc, 0x04, 0x00, 0x01, 0x00,
405 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x81, 0xbc, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00,
406 0x00, 0x00, 0x82, 0xbc, 0x0b, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x06, 0xc0, 0x42, 0x83, 0xbc,
407 0x0b, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x06, 0xc0, 0x42, 0xc0, 0xbc, 0x04, 0x00, 0x01, 0x00,
408 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0xc1, 0xbc, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x92, 0x00,
409 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x4d, 0x50, 0x48, 0x4f, 0x54, 0x4f, 0x00, 0x11, 0x45,
410 0xc0, 0x71, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0xc0, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xc0,
411 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x25, 0xff, 0xff, 0x00, 0x00, 0x01,
412 0x01, 0xc8, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x10, 0x10, 0xa6, 0x18, 0x8c, 0x21,
413 0x00, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
414 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x4e, 0x0f, 0x3a, 0x4c, 0x94, 0x9d, 0xba, 0x79, 0xe7, 0x38,
415 0x4c, 0xcf, 0x14, 0xc3, 0x43, 0x91, 0x88, 0xfb, 0xdc, 0xe0, 0x7c, 0x34, 0x70, 0x9b, 0x28, 0xa9,
416 0x18, 0x74, 0x62, 0x87, 0x8e, 0xe4, 0x68, 0x5f, 0xb9, 0xcc, 0x0e, 0xe1, 0x8c, 0x76, 0x3a, 0x9b,
417 0x82, 0x76, 0x71, 0x13, 0xde, 0x50, 0xd4, 0x2d, 0xc2, 0xda, 0x1e, 0x3b, 0xa6, 0xa1, 0x62, 0x7b,
418 0xca, 0x1a, 0x85, 0x4b, 0x6e, 0x74, 0xec, 0x60
421 static const struct test_image
423 const BYTE *data;
424 unsigned int size;
425 D3DX10_IMAGE_INFO expected;
427 test_image[] =
430 test_bmp_1bpp, sizeof(test_bmp_1bpp),
431 {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_BMP}
434 test_bmp_4bpp, sizeof(test_bmp_4bpp),
435 {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_BMP}
438 test_bmp_8bpp, sizeof(test_bmp_8bpp),
439 {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_BMP}
442 test_bmp_16bpp, sizeof(test_bmp_16bpp),
443 {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_BMP}
446 test_bmp_24bpp, sizeof(test_bmp_24bpp),
447 {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_BMP}
450 test_bmp_32bpp_xrgb, sizeof(test_bmp_32bpp_xrgb),
451 {2, 2, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_BMP}
454 test_bmp_32bpp_argb, sizeof(test_bmp_32bpp_argb),
455 {2, 2, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_BMP}
458 test_png_8bpp_gray, sizeof(test_png_8bpp_gray),
459 {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_PNG}
462 test_jpg, sizeof(test_jpg),
463 {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_JPG}
466 test_gif, sizeof(test_gif),
467 {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_GIF}
470 test_tiff, sizeof(test_tiff),
471 {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_TIFF}
474 test_dds_alpha, sizeof(test_dds_alpha),
475 {1, 1, 1, 1, 1, 0, DXGI_FORMAT_A8_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_DDS}
478 test_dds_luminance, sizeof(test_dds_luminance),
479 {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_DDS}
482 test_dds_16bpp, sizeof(test_dds_16bpp),
483 {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_DDS}
486 test_dds_24bpp, sizeof(test_dds_24bpp),
487 {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_DDS}
490 test_dds_32bpp, sizeof(test_dds_32bpp),
491 {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_DDS}
494 test_dds_64bpp, sizeof(test_dds_64bpp),
495 {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R16G16B16A16_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_DDS}
498 test_dds_96bpp, sizeof(test_dds_96bpp),
499 {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R32G32B32_FLOAT, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_DDS}
502 test_dds_128bpp, sizeof(test_dds_128bpp),
503 {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R32G32B32A32_FLOAT, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_DDS}
506 test_dds_dxt1, sizeof(test_dds_dxt1),
507 {4, 4, 1, 1, 1, 0, DXGI_FORMAT_BC1_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_DDS}
510 test_dds_dxt2, sizeof(test_dds_dxt2),
511 {4, 4, 1, 1, 3, 0, DXGI_FORMAT_BC2_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_DDS}
514 test_dds_dxt3, sizeof(test_dds_dxt3),
515 {1, 3, 1, 1, 2, 0, DXGI_FORMAT_BC2_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_DDS}
518 test_dds_dxt4, sizeof(test_dds_dxt4),
519 {4, 4, 1, 1, 3, 0, DXGI_FORMAT_BC3_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_DDS}
522 test_dds_dxt5, sizeof(test_dds_dxt5),
523 {4, 2, 1, 1, 1, 0, DXGI_FORMAT_BC3_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_DDS}
526 test_dds_bc4, sizeof(test_dds_bc4),
527 {4, 4, 1, 1, 3, 0, DXGI_FORMAT_BC4_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_DDS}
530 test_dds_bc5, sizeof(test_dds_bc5),
531 {6, 3, 1, 1, 3, 0, DXGI_FORMAT_BC5_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_DDS}
534 test_dds_cube, sizeof(test_dds_cube),
535 {4, 4, 1, 6, 3, 0x4, DXGI_FORMAT_BC1_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_DDS}
538 test_wmp, sizeof(test_wmp),
539 {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_WMP}
543 static WCHAR temp_dir[MAX_PATH];
545 static BOOL compare_float(float f, float g, unsigned int ulps)
547 int x = *(int *)&f;
548 int y = *(int *)&g;
550 if (x < 0)
551 x = INT_MIN - x;
552 if (y < 0)
553 y = INT_MIN - y;
555 if (abs(x - y) > ulps)
556 return FALSE;
558 return TRUE;
561 static char *get_str_a(const WCHAR *wstr)
563 static char buffer[MAX_PATH];
565 WideCharToMultiByte(CP_ACP, 0, wstr, -1, buffer, sizeof(buffer), NULL, NULL);
566 return buffer;
569 static BOOL create_file(const WCHAR *filename, const void *data, unsigned int size, WCHAR *out_path)
571 WCHAR path[MAX_PATH];
572 DWORD written;
573 HANDLE file;
575 if (!temp_dir[0])
576 GetTempPathW(ARRAY_SIZE(temp_dir), temp_dir);
577 lstrcpyW(path, temp_dir);
578 lstrcatW(path, filename);
580 file = CreateFileW(path, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
581 if (file == INVALID_HANDLE_VALUE)
582 return FALSE;
584 if (WriteFile(file, data, size, &written, NULL))
586 CloseHandle(file);
588 if (out_path)
589 lstrcpyW(out_path, path);
590 return TRUE;
593 CloseHandle(file);
594 return FALSE;
597 static BOOL delete_file(const WCHAR *filename)
599 WCHAR path[MAX_PATH];
601 lstrcpyW(path, temp_dir);
602 lstrcatW(path, filename);
603 return DeleteFileW(path);
606 static ID3D10Device *create_device(void)
608 ID3D10Device *device;
609 HMODULE d3d10_mod = LoadLibraryA("d3d10.dll");
610 HRESULT (WINAPI *pD3D10CreateDevice)(IDXGIAdapter *, D3D10_DRIVER_TYPE, HMODULE, UINT, UINT, ID3D10Device **);
612 if (!d3d10_mod)
614 win_skip("d3d10.dll not present\n");
615 return NULL;
618 pD3D10CreateDevice = (void *)GetProcAddress(d3d10_mod, "D3D10CreateDevice");
619 if (SUCCEEDED(pD3D10CreateDevice(NULL, D3D10_DRIVER_TYPE_HARDWARE, NULL, 0, D3D10_SDK_VERSION, &device)))
620 return device;
621 if (SUCCEEDED(pD3D10CreateDevice(NULL, D3D10_DRIVER_TYPE_WARP, NULL, 0, D3D10_SDK_VERSION, &device)))
622 return device;
623 if (SUCCEEDED(pD3D10CreateDevice(NULL, D3D10_DRIVER_TYPE_REFERENCE, NULL, 0, D3D10_SDK_VERSION, &device)))
624 return device;
626 return NULL;
629 static HMODULE create_resource_module(const WCHAR *filename, const void *data, unsigned int size)
631 WCHAR resource_module_path[MAX_PATH], current_module_path[MAX_PATH];
632 HANDLE resource;
633 HMODULE module;
634 BOOL ret;
636 if (!temp_dir[0])
637 GetTempPathW(ARRAY_SIZE(temp_dir), temp_dir);
638 lstrcpyW(resource_module_path, temp_dir);
639 lstrcatW(resource_module_path, filename);
641 GetModuleFileNameW(NULL, current_module_path, ARRAY_SIZE(current_module_path));
642 ret = CopyFileW(current_module_path, resource_module_path, FALSE);
643 ok(ret, "CopyFileW failed, error %u.\n", GetLastError());
644 SetFileAttributesW(resource_module_path, FILE_ATTRIBUTE_NORMAL);
646 resource = BeginUpdateResourceW(resource_module_path, TRUE);
647 UpdateResourceW(resource, (LPCWSTR)RT_RCDATA, filename, MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), (void *)data, size);
648 EndUpdateResourceW(resource, FALSE);
650 module = LoadLibraryExW(resource_module_path, NULL, LOAD_LIBRARY_AS_DATAFILE);
652 return module;
655 static void delete_resource_module(const WCHAR *filename, HMODULE module)
657 WCHAR path[MAX_PATH];
659 FreeLibrary(module);
661 lstrcpyW(path, temp_dir);
662 lstrcatW(path, filename);
663 DeleteFileW(path);
666 static void check_image_info(D3DX10_IMAGE_INFO *image_info, unsigned int i, unsigned int line)
668 ok_(__FILE__, line)(image_info->Width == test_image[i].expected.Width,
669 "Test %u: Got unexpected Width %u, expected %u.\n",
670 i, image_info->Width, test_image[i].expected.Width);
671 ok_(__FILE__, line)(image_info->Height == test_image[i].expected.Height,
672 "Test %u: Got unexpected Height %u, expected %u.\n",
673 i, image_info->Height, test_image[i].expected.Height);
674 ok_(__FILE__, line)(image_info->Depth == test_image[i].expected.Depth,
675 "Test %u: Got unexpected Depth %u, expected %u.\n",
676 i, image_info->Depth, test_image[i].expected.Depth);
677 ok_(__FILE__, line)(image_info->ArraySize == test_image[i].expected.ArraySize,
678 "Test %u: Got unexpected ArraySize %u, expected %u.\n",
679 i, image_info->ArraySize, test_image[i].expected.ArraySize);
680 ok_(__FILE__, line)(image_info->MipLevels == test_image[i].expected.MipLevels,
681 "Test %u: Got unexpected MipLevels %u, expected %u.\n",
682 i, image_info->MipLevels, test_image[i].expected.MipLevels);
683 ok_(__FILE__, line)(image_info->MiscFlags == test_image[i].expected.MiscFlags,
684 "Test %u: Got unexpected MiscFlags %#x, expected %#x.\n",
685 i, image_info->MiscFlags, test_image[i].expected.MiscFlags);
686 ok_(__FILE__, line)(image_info->Format == test_image[i].expected.Format,
687 "Test %u: Got unexpected Format %#x, expected %#x.\n",
688 i, image_info->Format, test_image[i].expected.Format);
689 ok_(__FILE__, line)(image_info->ResourceDimension == test_image[i].expected.ResourceDimension,
690 "Test %u: Got unexpected ResourceDimension %u, expected %u.\n",
691 i, image_info->ResourceDimension, test_image[i].expected.ResourceDimension);
692 ok_(__FILE__, line)(image_info->ImageFileFormat == test_image[i].expected.ImageFileFormat,
693 "Test %u: Got unexpected ImageFileFormat %u, expected %u.\n",
694 i, image_info->ImageFileFormat, test_image[i].expected.ImageFileFormat);
697 static void test_D3DX10UnsetAllDeviceObjects(void)
699 static const D3D10_INPUT_ELEMENT_DESC layout_desc[] =
701 {"POSITION", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 0, D3D10_INPUT_PER_VERTEX_DATA, 0},
703 #if 0
704 float4 main(float4 pos : POSITION) : POSITION
706 return pos;
708 #endif
709 static const DWORD simple_vs[] =
711 0x43425844, 0x66689e7c, 0x643f0971, 0xb7f67ff4, 0xabc48688, 0x00000001, 0x000000d4, 0x00000003,
712 0x0000002c, 0x00000060, 0x00000094, 0x4e475349, 0x0000002c, 0x00000001, 0x00000008, 0x00000020,
713 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000f0f, 0x49534f50, 0x4e4f4954, 0xababab00,
714 0x4e47534f, 0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000000, 0x00000003,
715 0x00000000, 0x0000000f, 0x49534f50, 0x4e4f4954, 0xababab00, 0x52444853, 0x00000038, 0x00010040,
716 0x0000000e, 0x0300005f, 0x001010f2, 0x00000000, 0x03000065, 0x001020f2, 0x00000000, 0x05000036,
717 0x001020f2, 0x00000000, 0x00101e46, 0x00000000, 0x0100003e,
720 #if 0
721 struct gs_out
723 float4 pos : SV_POSITION;
726 [maxvertexcount(4)]
727 void main(point float4 vin[1] : POSITION, inout TriangleStream<gs_out> vout)
729 float offset = 0.1 * vin[0].w;
730 gs_out v;
732 v.pos = float4(vin[0].x - offset, vin[0].y - offset, vin[0].z, vin[0].w);
733 vout.Append(v);
734 v.pos = float4(vin[0].x - offset, vin[0].y + offset, vin[0].z, vin[0].w);
735 vout.Append(v);
736 v.pos = float4(vin[0].x + offset, vin[0].y - offset, vin[0].z, vin[0].w);
737 vout.Append(v);
738 v.pos = float4(vin[0].x + offset, vin[0].y + offset, vin[0].z, vin[0].w);
739 vout.Append(v);
741 #endif
742 static const DWORD simple_gs[] =
744 0x43425844, 0x000ee786, 0xc624c269, 0x885a5cbe, 0x444b3b1f, 0x00000001, 0x0000023c, 0x00000003,
745 0x0000002c, 0x00000060, 0x00000094, 0x4e475349, 0x0000002c, 0x00000001, 0x00000008, 0x00000020,
746 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000f0f, 0x49534f50, 0x4e4f4954, 0xababab00,
747 0x4e47534f, 0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000001, 0x00000003,
748 0x00000000, 0x0000000f, 0x505f5653, 0x5449534f, 0x004e4f49, 0x52444853, 0x000001a0, 0x00020040,
749 0x00000068, 0x0400005f, 0x002010f2, 0x00000001, 0x00000000, 0x02000068, 0x00000001, 0x0100085d,
750 0x0100285c, 0x04000067, 0x001020f2, 0x00000000, 0x00000001, 0x0200005e, 0x00000004, 0x0f000032,
751 0x00100032, 0x00000000, 0x80201ff6, 0x00000041, 0x00000000, 0x00000000, 0x00004002, 0x3dcccccd,
752 0x3dcccccd, 0x00000000, 0x00000000, 0x00201046, 0x00000000, 0x00000000, 0x05000036, 0x00102032,
753 0x00000000, 0x00100046, 0x00000000, 0x06000036, 0x001020c2, 0x00000000, 0x00201ea6, 0x00000000,
754 0x00000000, 0x01000013, 0x05000036, 0x00102012, 0x00000000, 0x0010000a, 0x00000000, 0x0e000032,
755 0x00100052, 0x00000000, 0x00201ff6, 0x00000000, 0x00000000, 0x00004002, 0x3dcccccd, 0x00000000,
756 0x3dcccccd, 0x00000000, 0x00201106, 0x00000000, 0x00000000, 0x05000036, 0x00102022, 0x00000000,
757 0x0010002a, 0x00000000, 0x06000036, 0x001020c2, 0x00000000, 0x00201ea6, 0x00000000, 0x00000000,
758 0x01000013, 0x05000036, 0x00102012, 0x00000000, 0x0010000a, 0x00000000, 0x05000036, 0x00102022,
759 0x00000000, 0x0010001a, 0x00000000, 0x06000036, 0x001020c2, 0x00000000, 0x00201ea6, 0x00000000,
760 0x00000000, 0x01000013, 0x05000036, 0x00102032, 0x00000000, 0x00100086, 0x00000000, 0x06000036,
761 0x001020c2, 0x00000000, 0x00201ea6, 0x00000000, 0x00000000, 0x01000013, 0x0100003e,
764 #if 0
765 float4 main(float4 color : COLOR) : SV_TARGET
767 return color;
769 #endif
770 static const DWORD simple_ps[] =
772 0x43425844, 0x08c2b568, 0x17d33120, 0xb7d82948, 0x13a570fb, 0x00000001, 0x000000d0, 0x00000003,
773 0x0000002c, 0x0000005c, 0x00000090, 0x4e475349, 0x00000028, 0x00000001, 0x00000008, 0x00000020,
774 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000f0f, 0x4f4c4f43, 0xabab0052, 0x4e47534f,
775 0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000000, 0x00000003, 0x00000000,
776 0x0000000f, 0x545f5653, 0x45475241, 0xabab0054, 0x52444853, 0x00000038, 0x00000040, 0x0000000e,
777 0x03001062, 0x001010f2, 0x00000000, 0x03000065, 0x001020f2, 0x00000000, 0x05000036, 0x001020f2,
778 0x00000000, 0x00101e46, 0x00000000, 0x0100003e,
781 D3D10_VIEWPORT tmp_viewport[D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE];
782 ID3D10ShaderResourceView *tmp_srv[D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT];
783 ID3D10ShaderResourceView *srv[D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT];
784 ID3D10RenderTargetView *tmp_rtv[D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT];
785 RECT tmp_rect[D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE];
786 ID3D10SamplerState *tmp_sampler[D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT];
787 ID3D10RenderTargetView *rtv[D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT];
788 ID3D10Texture2D *rt_texture[D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT];
789 ID3D10Buffer *cb[D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT];
790 ID3D10Buffer *tmp_buffer[D3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT];
791 ID3D10SamplerState *sampler[D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT];
792 ID3D10Buffer *buffer[D3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT];
793 unsigned int offset[D3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT];
794 unsigned int stride[D3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT];
795 ID3D10Buffer *so_buffer[D3D10_SO_BUFFER_SLOT_COUNT];
796 ID3D10InputLayout *tmp_input_layout, *input_layout;
797 ID3D10DepthStencilState *tmp_ds_state, *ds_state;
798 ID3D10BlendState *tmp_blend_state, *blend_state;
799 ID3D10RasterizerState *tmp_rs_state, *rs_state;
800 ID3D10Predicate *tmp_predicate, *predicate;
801 D3D10_SHADER_RESOURCE_VIEW_DESC srv_desc;
802 ID3D10DepthStencilView *tmp_dsv, *dsv;
803 D3D10_PRIMITIVE_TOPOLOGY topology;
804 D3D10_TEXTURE2D_DESC texture_desc;
805 ID3D10GeometryShader *tmp_gs, *gs;
806 D3D10_DEPTH_STENCIL_DESC ds_desc;
807 ID3D10VertexShader *tmp_vs, *vs;
808 D3D10_SAMPLER_DESC sampler_desc;
809 D3D10_QUERY_DESC predicate_desc;
810 ID3D10PixelShader *tmp_ps, *ps;
811 D3D10_RASTERIZER_DESC rs_desc;
812 D3D10_BUFFER_DESC buffer_desc;
813 D3D10_BLEND_DESC blend_desc;
814 ID3D10Texture2D *ds_texture;
815 unsigned int sample_mask;
816 unsigned int stencil_ref;
817 unsigned int count, i;
818 float blend_factor[4];
819 ID3D10Device *device;
820 BOOL predicate_value;
821 DXGI_FORMAT format;
822 ULONG refcount;
823 HRESULT hr;
825 if (!(device = create_device()))
827 skip("Failed to create device, skipping tests.\n");
828 return;
831 buffer_desc.ByteWidth = 1024;
832 buffer_desc.Usage = D3D10_USAGE_DEFAULT;
833 buffer_desc.BindFlags = D3D10_BIND_CONSTANT_BUFFER;
834 buffer_desc.CPUAccessFlags = 0;
835 buffer_desc.MiscFlags = 0;
837 for (i = 0; i < D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT; ++i)
839 hr = ID3D10Device_CreateBuffer(device, &buffer_desc, NULL, &cb[i]);
840 ok(SUCCEEDED(hr), "Failed to create buffer, hr %#x.\n", hr);
843 buffer_desc.BindFlags = D3D10_BIND_VERTEX_BUFFER | D3D10_BIND_INDEX_BUFFER | D3D10_BIND_SHADER_RESOURCE;
845 for (i = 0; i < D3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT; ++i)
847 hr = ID3D10Device_CreateBuffer(device, &buffer_desc, NULL, &buffer[i]);
848 ok(SUCCEEDED(hr), "Failed to create buffer, hr %#x.\n", hr);
850 stride[i] = (i + 1) * 4;
851 offset[i] = (i + 1) * 16;
854 buffer_desc.BindFlags = D3D10_BIND_STREAM_OUTPUT;
856 for (i = 0; i < D3D10_SO_BUFFER_SLOT_COUNT; ++i)
858 hr = ID3D10Device_CreateBuffer(device, &buffer_desc, NULL, &so_buffer[i]);
859 ok(SUCCEEDED(hr), "Failed to create buffer, hr %#x.\n", hr);
862 srv_desc.Format = DXGI_FORMAT_R32G32B32A32_FLOAT;
863 srv_desc.ViewDimension = D3D10_SRV_DIMENSION_BUFFER;
864 U(srv_desc).Buffer.ElementOffset = 0;
865 U(srv_desc).Buffer.ElementWidth = 64;
867 for (i = 0; i < D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT; ++i)
869 hr = ID3D10Device_CreateShaderResourceView(device,
870 (ID3D10Resource *)buffer[i % D3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT], &srv_desc, &srv[i]);
871 ok(SUCCEEDED(hr), "Failed to create shader resource view, hr %#x.\n", hr);
874 sampler_desc.Filter = D3D10_FILTER_MIN_MAG_MIP_LINEAR;
875 sampler_desc.AddressU = D3D10_TEXTURE_ADDRESS_CLAMP;
876 sampler_desc.AddressV = D3D10_TEXTURE_ADDRESS_CLAMP;
877 sampler_desc.AddressW = D3D10_TEXTURE_ADDRESS_CLAMP;
878 sampler_desc.MipLODBias = 0.0f;
879 sampler_desc.MaxAnisotropy = 16;
880 sampler_desc.ComparisonFunc = D3D10_COMPARISON_NEVER;
881 sampler_desc.BorderColor[0] = 0.0f;
882 sampler_desc.BorderColor[1] = 0.0f;
883 sampler_desc.BorderColor[2] = 0.0f;
884 sampler_desc.BorderColor[3] = 0.0f;
885 sampler_desc.MinLOD = 0.0f;
886 sampler_desc.MaxLOD = 16.0f;
888 for (i = 0; i < D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT; ++i)
890 sampler_desc.MinLOD = (float)i;
892 hr = ID3D10Device_CreateSamplerState(device, &sampler_desc, &sampler[i]);
893 ok(SUCCEEDED(hr), "Failed to create sampler state, hr %#x.\n", hr);
896 hr = ID3D10Device_CreateVertexShader(device, simple_vs, sizeof(simple_vs), &vs);
897 ok(SUCCEEDED(hr), "Failed to create vertex shader, hr %#x.\n", hr);
899 hr = ID3D10Device_CreateGeometryShader(device, simple_gs, sizeof(simple_gs), &gs);
900 ok(SUCCEEDED(hr), "Failed to create geometry shader, hr %#x.\n", hr);
902 hr = ID3D10Device_CreatePixelShader(device, simple_ps, sizeof(simple_ps), &ps);
903 ok(SUCCEEDED(hr), "Failed to create pixel shader, hr %#x.\n", hr);
905 hr = ID3D10Device_CreateInputLayout(device, layout_desc, ARRAY_SIZE(layout_desc), simple_vs,
906 sizeof(simple_vs), &input_layout);
907 ok(SUCCEEDED(hr), "Failed to create input layout, hr %#x.\n", hr);
909 blend_desc.AlphaToCoverageEnable = FALSE;
910 blend_desc.BlendEnable[0] = FALSE;
911 blend_desc.BlendEnable[1] = FALSE;
912 blend_desc.BlendEnable[2] = FALSE;
913 blend_desc.BlendEnable[3] = FALSE;
914 blend_desc.BlendEnable[4] = FALSE;
915 blend_desc.BlendEnable[5] = FALSE;
916 blend_desc.BlendEnable[6] = FALSE;
917 blend_desc.BlendEnable[7] = FALSE;
918 blend_desc.SrcBlend = D3D10_BLEND_ONE;
919 blend_desc.DestBlend = D3D10_BLEND_ZERO;
920 blend_desc.BlendOp = D3D10_BLEND_OP_ADD;
921 blend_desc.SrcBlendAlpha = D3D10_BLEND_ONE;
922 blend_desc.DestBlendAlpha = D3D10_BLEND_ZERO;
923 blend_desc.BlendOpAlpha = D3D10_BLEND_OP_ADD;
924 blend_desc.RenderTargetWriteMask[0] = D3D10_COLOR_WRITE_ENABLE_ALL;
925 blend_desc.RenderTargetWriteMask[1] = D3D10_COLOR_WRITE_ENABLE_ALL;
926 blend_desc.RenderTargetWriteMask[2] = D3D10_COLOR_WRITE_ENABLE_ALL;
927 blend_desc.RenderTargetWriteMask[3] = D3D10_COLOR_WRITE_ENABLE_ALL;
928 blend_desc.RenderTargetWriteMask[4] = D3D10_COLOR_WRITE_ENABLE_ALL;
929 blend_desc.RenderTargetWriteMask[5] = D3D10_COLOR_WRITE_ENABLE_ALL;
930 blend_desc.RenderTargetWriteMask[6] = D3D10_COLOR_WRITE_ENABLE_ALL;
931 blend_desc.RenderTargetWriteMask[7] = D3D10_COLOR_WRITE_ENABLE_ALL;
933 hr = ID3D10Device_CreateBlendState(device, &blend_desc, &blend_state);
934 ok(SUCCEEDED(hr), "Failed to create blend state, hr %#x.\n", hr);
936 ds_desc.DepthEnable = TRUE;
937 ds_desc.DepthWriteMask = D3D10_DEPTH_WRITE_MASK_ALL;
938 ds_desc.DepthFunc = D3D10_COMPARISON_LESS;
939 ds_desc.StencilEnable = FALSE;
940 ds_desc.StencilReadMask = D3D10_DEFAULT_STENCIL_READ_MASK;
941 ds_desc.StencilWriteMask = D3D10_DEFAULT_STENCIL_WRITE_MASK;
942 ds_desc.FrontFace.StencilFailOp = D3D10_STENCIL_OP_KEEP;
943 ds_desc.FrontFace.StencilDepthFailOp = D3D10_STENCIL_OP_KEEP;
944 ds_desc.FrontFace.StencilPassOp = D3D10_STENCIL_OP_KEEP;
945 ds_desc.FrontFace.StencilFunc = D3D10_COMPARISON_ALWAYS;
946 ds_desc.BackFace.StencilFailOp = D3D10_STENCIL_OP_KEEP;
947 ds_desc.BackFace.StencilDepthFailOp = D3D10_STENCIL_OP_KEEP;
948 ds_desc.BackFace.StencilPassOp = D3D10_STENCIL_OP_KEEP;
949 ds_desc.BackFace.StencilFunc = D3D10_COMPARISON_ALWAYS;
951 hr = ID3D10Device_CreateDepthStencilState(device, &ds_desc, &ds_state);
952 ok(SUCCEEDED(hr), "Failed to create depthstencil state, hr %#x.\n", hr);
954 texture_desc.Width = 512;
955 texture_desc.Height = 512;
956 texture_desc.MipLevels = 1;
957 texture_desc.ArraySize = 1;
958 texture_desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
959 texture_desc.SampleDesc.Count = 1;
960 texture_desc.SampleDesc.Quality = 0;
961 texture_desc.Usage = D3D10_USAGE_DEFAULT;
962 texture_desc.BindFlags = D3D10_BIND_RENDER_TARGET;
963 texture_desc.CPUAccessFlags = 0;
964 texture_desc.MiscFlags = 0;
966 for (i = 0; i < D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT; ++i)
968 hr = ID3D10Device_CreateTexture2D(device, &texture_desc, NULL, &rt_texture[i]);
969 ok(SUCCEEDED(hr), "Failed to create texture, hr %#x.\n", hr);
972 texture_desc.Format = DXGI_FORMAT_D24_UNORM_S8_UINT;
973 texture_desc.BindFlags = D3D10_BIND_DEPTH_STENCIL;
975 hr = ID3D10Device_CreateTexture2D(device, &texture_desc, NULL, &ds_texture);
976 ok(SUCCEEDED(hr), "Failed to create texture, hr %#x.\n", hr);
978 for (i = 0; i < D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT; ++i)
980 hr = ID3D10Device_CreateRenderTargetView(device, (ID3D10Resource *)rt_texture[i], NULL, &rtv[i]);
981 ok(SUCCEEDED(hr), "Failed to create rendertarget view, hr %#x.\n", hr);
984 hr = ID3D10Device_CreateDepthStencilView(device, (ID3D10Resource *)ds_texture, NULL, &dsv);
985 ok(SUCCEEDED(hr), "Failed to create depthstencil view, hr %#x.\n", hr);
987 for (i = 0; i < D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE; ++i)
989 SetRect(&tmp_rect[i], i, i * 2, i + 1, (i + 1) * 2);
991 tmp_viewport[i].TopLeftX = i * 3;
992 tmp_viewport[i].TopLeftY = i * 4;
993 tmp_viewport[i].Width = 3;
994 tmp_viewport[i].Height = 4;
995 tmp_viewport[i].MinDepth = i * 0.01f;
996 tmp_viewport[i].MaxDepth = (i + 1) * 0.01f;
999 rs_desc.FillMode = D3D10_FILL_SOLID;
1000 rs_desc.CullMode = D3D10_CULL_BACK;
1001 rs_desc.FrontCounterClockwise = FALSE;
1002 rs_desc.DepthBias = 0;
1003 rs_desc.DepthBiasClamp = 0.0f;
1004 rs_desc.SlopeScaledDepthBias = 0.0f;
1005 rs_desc.DepthClipEnable = TRUE;
1006 rs_desc.ScissorEnable = FALSE;
1007 rs_desc.MultisampleEnable = FALSE;
1008 rs_desc.AntialiasedLineEnable = FALSE;
1010 hr = ID3D10Device_CreateRasterizerState(device, &rs_desc, &rs_state);
1011 ok(SUCCEEDED(hr), "Failed to create rasterizer state, hr %#x.\n", hr);
1013 predicate_desc.Query = D3D10_QUERY_OCCLUSION_PREDICATE;
1014 predicate_desc.MiscFlags = 0;
1016 hr = ID3D10Device_CreatePredicate(device, &predicate_desc, &predicate);
1017 ok(SUCCEEDED(hr), "Failed to create predicate, hr %#x.\n", hr);
1019 ID3D10Device_VSSetConstantBuffers(device, 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT, cb);
1020 ID3D10Device_VSSetShaderResources(device, 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT, srv);
1021 ID3D10Device_VSSetSamplers(device, 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT, sampler);
1022 ID3D10Device_VSSetShader(device, vs);
1024 ID3D10Device_GSSetConstantBuffers(device, 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT, cb);
1025 ID3D10Device_GSSetShaderResources(device, 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT, srv);
1026 ID3D10Device_GSSetSamplers(device, 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT, sampler);
1027 ID3D10Device_GSSetShader(device, gs);
1029 ID3D10Device_PSSetConstantBuffers(device, 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT, cb);
1030 ID3D10Device_PSSetShaderResources(device, 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT, srv);
1031 ID3D10Device_PSSetSamplers(device, 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT, sampler);
1032 ID3D10Device_PSSetShader(device, ps);
1034 ID3D10Device_IASetVertexBuffers(device, 0, D3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT, buffer, stride, offset);
1035 ID3D10Device_IASetIndexBuffer(device, buffer[0], DXGI_FORMAT_R32_UINT, offset[0]);
1036 ID3D10Device_IASetInputLayout(device, input_layout);
1037 ID3D10Device_IASetPrimitiveTopology(device, D3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
1039 blend_factor[0] = 0.1f;
1040 blend_factor[1] = 0.2f;
1041 blend_factor[2] = 0.3f;
1042 blend_factor[3] = 0.4f;
1043 ID3D10Device_OMSetBlendState(device, blend_state, blend_factor, 0xff00ff00);
1044 ID3D10Device_OMSetDepthStencilState(device, ds_state, 3);
1045 ID3D10Device_OMSetRenderTargets(device, D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT, rtv, dsv);
1047 ID3D10Device_RSSetScissorRects(device, D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE, tmp_rect);
1048 ID3D10Device_RSSetViewports(device, D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE, tmp_viewport);
1049 ID3D10Device_RSSetState(device, rs_state);
1051 ID3D10Device_SOSetTargets(device, D3D10_SO_BUFFER_SLOT_COUNT, so_buffer, offset);
1053 ID3D10Device_SetPredication(device, predicate, TRUE);
1055 hr = D3DX10UnsetAllDeviceObjects(device);
1056 ok(SUCCEEDED(hr), "D3DX10UnsetAllDeviceObjects() failed, %#x.\n", hr);
1058 ID3D10Device_VSGetConstantBuffers(device, 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT, tmp_buffer);
1059 for (i = 0; i < D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT; ++i)
1061 ok(!tmp_buffer[i], "Got unexpected constant buffer %p in slot %u.\n", tmp_buffer[i], i);
1063 ID3D10Device_VSGetShaderResources(device, 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT, tmp_srv);
1064 for (i = 0; i < D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT; ++i)
1066 ok(!tmp_srv[i], "Got unexpected shader resource view %p in slot %u.\n", tmp_srv[i], i);
1068 ID3D10Device_VSGetSamplers(device, 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT, tmp_sampler);
1069 for (i = 0; i < D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT; ++i)
1071 ok(!tmp_sampler[i], "Got unexpected sampler %p in slot %u.\n", tmp_sampler[i], i);
1073 ID3D10Device_VSGetShader(device, &tmp_vs);
1074 ok(!tmp_vs, "Got unexpected vertex shader %p.\n", tmp_vs);
1076 ID3D10Device_GSGetConstantBuffers(device, 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT, tmp_buffer);
1077 for (i = 0; i < D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT; ++i)
1079 ok(!tmp_buffer[i], "Got unexpected constant buffer %p in slot %u.\n", tmp_buffer[i], i);
1081 ID3D10Device_GSGetShaderResources(device, 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT, tmp_srv);
1082 for (i = 0; i < D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT; ++i)
1084 ok(!tmp_srv[i], "Got unexpected shader resource view %p in slot %u.\n", tmp_srv[i], i);
1086 ID3D10Device_GSGetSamplers(device, 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT, tmp_sampler);
1087 for (i = 0; i < D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT; ++i)
1089 ok(!tmp_sampler[i], "Got unexpected sampler %p in slot %u.\n", tmp_sampler[i], i);
1091 ID3D10Device_GSGetShader(device, &tmp_gs);
1092 ok(!tmp_gs, "Got unexpected geometry shader %p.\n", tmp_gs);
1094 ID3D10Device_PSGetConstantBuffers(device, 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT, tmp_buffer);
1095 for (i = 0; i < D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT; ++i)
1097 ok(!tmp_buffer[i], "Got unexpected constant buffer %p in slot %u.\n", tmp_buffer[i], i);
1099 ID3D10Device_PSGetShaderResources(device, 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT, tmp_srv);
1100 for (i = 0; i < D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT; ++i)
1102 ok(!tmp_srv[i], "Got unexpected shader resource view %p in slot %u.\n", tmp_srv[i], i);
1104 ID3D10Device_PSGetSamplers(device, 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT, tmp_sampler);
1105 for (i = 0; i < D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT; ++i)
1107 ok(!tmp_sampler[i], "Got unexpected sampler %p in slot %u.\n", tmp_sampler[i], i);
1109 ID3D10Device_PSGetShader(device, &tmp_ps);
1110 ok(!tmp_ps, "Got unexpected pixel shader %p.\n", tmp_ps);
1112 ID3D10Device_IAGetVertexBuffers(device, 0, D3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT, tmp_buffer, stride, offset);
1113 for (i = 0; i < D3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT; ++i)
1115 ok(!tmp_buffer[i], "Got unexpected vertex buffer %p in slot %u.\n", tmp_buffer[i], i);
1116 ok(!stride[i], "Got unexpected stride %u in slot %u.\n", stride[i], i);
1117 ok(!offset[i], "Got unexpected offset %u in slot %u.\n", offset[i], i);
1119 ID3D10Device_IAGetIndexBuffer(device, tmp_buffer, &format, offset);
1120 ok(!tmp_buffer[0], "Got unexpected index buffer %p.\n", tmp_buffer[0]);
1121 ok(format == DXGI_FORMAT_R32_UINT, "Got unexpected index buffer format %#x.\n", format);
1122 ok(!offset[0], "Got unexpected index buffer offset %u.\n", offset[0]);
1123 ID3D10Device_IAGetInputLayout(device, &tmp_input_layout);
1124 ok(!tmp_input_layout, "Got unexpected input layout %p.\n", tmp_input_layout);
1125 ID3D10Device_IAGetPrimitiveTopology(device, &topology);
1126 ok(topology == D3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP, "Got unexpected primitive topology %#x.\n", topology);
1128 ID3D10Device_OMGetBlendState(device, &tmp_blend_state, blend_factor, &sample_mask);
1129 ok(!tmp_blend_state, "Got unexpected blend state %p.\n", tmp_blend_state);
1130 ok(blend_factor[0] == 0.0f && blend_factor[1] == 0.0f
1131 && blend_factor[2] == 0.0f && blend_factor[3] == 0.0f,
1132 "Got unexpected blend factor {%.8e, %.8e, %.8e, %.8e}.\n",
1133 blend_factor[0], blend_factor[1], blend_factor[2], blend_factor[3]);
1134 ok(sample_mask == 0, "Got unexpected sample mask %#x.\n", sample_mask);
1135 ID3D10Device_OMGetDepthStencilState(device, &tmp_ds_state, &stencil_ref);
1136 ok(!tmp_ds_state, "Got unexpected depth stencil state %p.\n", tmp_ds_state);
1137 ok(!stencil_ref, "Got unexpected stencil ref %u.\n", stencil_ref);
1138 ID3D10Device_OMGetRenderTargets(device, D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT, tmp_rtv, &tmp_dsv);
1139 for (i = 0; i < D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT; ++i)
1141 ok(!tmp_rtv[i], "Got unexpected render target view %p in slot %u.\n", tmp_rtv[i], i);
1143 ok(!tmp_dsv, "Got unexpected depth stencil view %p.\n", tmp_dsv);
1145 ID3D10Device_RSGetScissorRects(device, &count, NULL);
1146 ok(count == D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE,
1147 "Got unexpected scissor rect count %u.\n", count);
1148 memset(tmp_rect, 0x55, sizeof(tmp_rect));
1149 count = D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE;
1150 ID3D10Device_RSGetScissorRects(device, &count, tmp_rect);
1151 for (i = 0; i < D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE; ++i)
1153 ok(tmp_rect[i].left == i
1154 && tmp_rect[i].top == i * 2
1155 && tmp_rect[i].right == i + 1
1156 && tmp_rect[i].bottom == (i + 1) * 2,
1157 "Got unexpected scissor rect %s in slot %u.\n",
1158 wine_dbgstr_rect(&tmp_rect[i]), i);
1160 ID3D10Device_RSGetViewports(device, &count, NULL);
1161 ok(count == D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE,
1162 "Got unexpected viewport count %u.\n", count);
1163 memset(tmp_viewport, 0x55, sizeof(tmp_viewport));
1164 count = D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE;
1165 ID3D10Device_RSGetViewports(device, &count, tmp_viewport);
1166 for (i = 0; i < D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE; ++i)
1168 ok(tmp_viewport[i].TopLeftX == i * 3
1169 && tmp_viewport[i].TopLeftY == i * 4
1170 && tmp_viewport[i].Width == 3
1171 && tmp_viewport[i].Height == 4
1172 && compare_float(tmp_viewport[i].MinDepth, i * 0.01f, 16)
1173 && compare_float(tmp_viewport[i].MaxDepth, (i + 1) * 0.01f, 16),
1174 "Got unexpected viewport {%d, %d, %u, %u, %.8e, %.8e} in slot %u.\n",
1175 tmp_viewport[i].TopLeftX, tmp_viewport[i].TopLeftY, tmp_viewport[i].Width,
1176 tmp_viewport[i].Height, tmp_viewport[i].MinDepth, tmp_viewport[i].MaxDepth, i);
1178 ID3D10Device_RSGetState(device, &tmp_rs_state);
1179 ok(!tmp_rs_state, "Got unexpected rasterizer state %p.\n", tmp_rs_state);
1181 ID3D10Device_SOGetTargets(device, D3D10_SO_BUFFER_SLOT_COUNT, tmp_buffer, offset);
1182 for (i = 0; i < D3D10_SO_BUFFER_SLOT_COUNT; ++i)
1184 ok(!tmp_buffer[i], "Got unexpected stream output %p in slot %u.\n", tmp_buffer[i], i);
1185 ok(offset[i] == ~0u, "Got unexpected stream output offset %u in slot %u.\n", offset[i], i);
1188 ID3D10Device_GetPredication(device, &tmp_predicate, &predicate_value);
1189 ok(!tmp_predicate, "Got unexpected predicate %p.\n", tmp_predicate);
1190 ok(!predicate_value, "Got unexpected predicate value %#x.\n", predicate_value);
1192 ID3D10Predicate_Release(predicate);
1193 ID3D10RasterizerState_Release(rs_state);
1194 ID3D10DepthStencilView_Release(dsv);
1195 ID3D10Texture2D_Release(ds_texture);
1197 for (i = 0; i < D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT; ++i)
1199 ID3D10RenderTargetView_Release(rtv[i]);
1200 ID3D10Texture2D_Release(rt_texture[i]);
1203 ID3D10DepthStencilState_Release(ds_state);
1204 ID3D10BlendState_Release(blend_state);
1205 ID3D10InputLayout_Release(input_layout);
1206 ID3D10VertexShader_Release(vs);
1207 ID3D10GeometryShader_Release(gs);
1208 ID3D10PixelShader_Release(ps);
1210 for (i = 0; i < D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT; ++i)
1212 ID3D10SamplerState_Release(sampler[i]);
1215 for (i = 0; i < D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT; ++i)
1217 ID3D10ShaderResourceView_Release(srv[i]);
1220 for (i = 0; i < D3D10_SO_BUFFER_SLOT_COUNT; ++i)
1222 ID3D10Buffer_Release(so_buffer[i]);
1225 for (i = 0; i < D3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT; ++i)
1227 ID3D10Buffer_Release(buffer[i]);
1230 for (i = 0; i < D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT; ++i)
1232 ID3D10Buffer_Release(cb[i]);
1235 refcount = ID3D10Device_Release(device);
1236 ok(!refcount, "Device has %u references left.\n", refcount);
1239 static void test_D3DX10CreateAsyncMemoryLoader(void)
1241 ID3DX10DataLoader *loader;
1242 SIZE_T size;
1243 DWORD data;
1244 HRESULT hr;
1245 void *ptr;
1247 hr = D3DX10CreateAsyncMemoryLoader(NULL, 0, NULL);
1248 ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
1250 hr = D3DX10CreateAsyncMemoryLoader(NULL, 0, &loader);
1251 ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
1253 hr = D3DX10CreateAsyncMemoryLoader(&data, 0, &loader);
1254 ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
1256 size = 100;
1257 hr = ID3DX10DataLoader_Decompress(loader, &ptr, &size);
1258 ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
1259 ok(ptr == &data, "Got data pointer %p, original %p.\n", ptr, &data);
1260 ok(!size, "Got unexpected data size.\n");
1262 /* Load() is no-op. */
1263 hr = ID3DX10DataLoader_Load(loader);
1264 ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
1266 hr = ID3DX10DataLoader_Destroy(loader);
1267 ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
1269 data = 0;
1270 hr = D3DX10CreateAsyncMemoryLoader(&data, sizeof(data), &loader);
1271 ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
1273 /* Load() is no-op. */
1274 hr = ID3DX10DataLoader_Load(loader);
1275 ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
1277 hr = ID3DX10DataLoader_Decompress(loader, &ptr, &size);
1278 ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
1279 ok(ptr == &data, "Got data pointer %p, original %p.\n", ptr, &data);
1280 ok(size == sizeof(data), "Got unexpected data size.\n");
1282 hr = ID3DX10DataLoader_Destroy(loader);
1283 ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
1286 static void test_D3DX10CreateAsyncFileLoader(void)
1288 static const WCHAR test_filename[] = L"asyncloader.data";
1289 static const char test_data1[] = "test data";
1290 static const char test_data2[] = "more test data";
1291 ID3DX10DataLoader *loader;
1292 WCHAR path[MAX_PATH];
1293 SIZE_T size;
1294 HRESULT hr;
1295 void *ptr;
1296 BOOL ret;
1298 hr = D3DX10CreateAsyncFileLoaderA(NULL, NULL);
1299 ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
1301 hr = D3DX10CreateAsyncFileLoaderA(NULL, &loader);
1302 ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
1304 hr = D3DX10CreateAsyncFileLoaderA("nonexistentfilename", &loader);
1305 ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
1307 hr = ID3DX10DataLoader_Decompress(loader, &ptr, &size);
1308 ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
1310 hr = ID3DX10DataLoader_Load(loader);
1311 ok(hr == D3D10_ERROR_FILE_NOT_FOUND, "Got unexpected hr %#x.\n", hr);
1313 hr = ID3DX10DataLoader_Decompress(loader, &ptr, &size);
1314 ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
1316 hr = ID3DX10DataLoader_Destroy(loader);
1317 ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
1319 /* Test file sharing using dummy empty file. */
1320 create_file(test_filename, test_data1, sizeof(test_data1), path);
1322 hr = D3DX10CreateAsyncFileLoaderW(path, &loader);
1323 ok(SUCCEEDED(hr), "Failed to create file loader, hr %#x.\n", hr);
1325 ret = delete_file(test_filename);
1326 ok(ret, "DeleteFile() failed, ret %d, error %d.\n", ret, GetLastError());
1328 /* File was removed before Load(). */
1329 hr = ID3DX10DataLoader_Load(loader);
1330 ok(hr == D3D10_ERROR_FILE_NOT_FOUND, "Load() returned unexpected result, hr %#x.\n", hr);
1332 /* Create it again. */
1333 create_file(test_filename, test_data1, sizeof(test_data1), NULL);
1334 hr = ID3DX10DataLoader_Load(loader);
1335 ok(SUCCEEDED(hr), "Load() failed, hr %#x.\n", hr);
1337 /* Already loaded. */
1338 hr = ID3DX10DataLoader_Load(loader);
1339 ok(SUCCEEDED(hr), "Load() failed, hr %#x.\n", hr);
1341 ret = delete_file(test_filename);
1342 ok(ret, "DeleteFile() failed, ret %d, error %d.\n", ret, GetLastError());
1344 /* Already loaded, file removed. */
1345 hr = ID3DX10DataLoader_Load(loader);
1346 ok(hr == D3D10_ERROR_FILE_NOT_FOUND, "Load() returned unexpected result, hr %#x.\n", hr);
1348 /* Decompress still works. */
1349 ptr = NULL;
1350 hr = ID3DX10DataLoader_Decompress(loader, &ptr, &size);
1351 ok(SUCCEEDED(hr), "Decompress() failed, hr %#x.\n", hr);
1352 ok(ptr != NULL, "Got unexpected ptr %p.\n", ptr);
1353 ok(size == sizeof(test_data1), "Got unexpected decompressed size.\n");
1354 if (size == sizeof(test_data1))
1355 ok(!memcmp(ptr, test_data1, size), "Got unexpected file data.\n");
1357 /* Create it again, with different data. */
1358 create_file(test_filename, test_data2, sizeof(test_data2), NULL);
1360 hr = ID3DX10DataLoader_Load(loader);
1361 ok(SUCCEEDED(hr), "Load() failed, hr %#x.\n", hr);
1363 ptr = NULL;
1364 hr = ID3DX10DataLoader_Decompress(loader, &ptr, &size);
1365 ok(SUCCEEDED(hr), "Decompress() failed, hr %#x.\n", hr);
1366 ok(ptr != NULL, "Got unexpected ptr %p.\n", ptr);
1367 ok(size == sizeof(test_data2), "Got unexpected decompressed size.\n");
1368 if (size == sizeof(test_data2))
1369 ok(!memcmp(ptr, test_data2, size), "Got unexpected file data.\n");
1371 hr = ID3DX10DataLoader_Destroy(loader);
1372 ok(SUCCEEDED(hr), "Destroy() failed, hr %#x.\n", hr);
1374 ret = delete_file(test_filename);
1375 ok(ret, "DeleteFile() failed, ret %d, error %d.\n", ret, GetLastError());
1378 static void test_D3DX10CreateAsyncResourceLoader(void)
1380 ID3DX10DataLoader *loader;
1381 HRESULT hr;
1383 hr = D3DX10CreateAsyncResourceLoaderA(NULL, NULL, NULL);
1384 ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
1386 hr = D3DX10CreateAsyncResourceLoaderA(NULL, NULL, &loader);
1387 ok(hr == D3DX10_ERR_INVALID_DATA, "Got unexpected hr %#x.\n", hr);
1389 hr = D3DX10CreateAsyncResourceLoaderA(NULL, "noname", &loader);
1390 ok(hr == D3DX10_ERR_INVALID_DATA, "Got unexpected hr %#x.\n", hr);
1392 hr = D3DX10CreateAsyncResourceLoaderW(NULL, NULL, NULL);
1393 ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
1395 hr = D3DX10CreateAsyncResourceLoaderW(NULL, NULL, &loader);
1396 ok(hr == D3DX10_ERR_INVALID_DATA, "Got unexpected hr %#x.\n", hr);
1398 hr = D3DX10CreateAsyncResourceLoaderW(NULL, L"noname", &loader);
1399 ok(hr == D3DX10_ERR_INVALID_DATA, "Got unexpected hr %#x.\n", hr);
1402 static void test_get_image_info(void)
1404 static const WCHAR test_resource_name[] = L"resource.data";
1405 static const WCHAR test_filename[] = L"image.data";
1406 D3DX10_IMAGE_INFO image_info;
1407 HMODULE resource_module;
1408 WCHAR path[MAX_PATH];
1409 unsigned int i;
1410 DWORD dword;
1411 HRESULT hr;
1413 CoInitialize(NULL);
1415 hr = D3DX10GetImageInfoFromMemory(test_image[0].data, 0, NULL, &image_info, NULL);
1416 ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
1417 hr = D3DX10GetImageInfoFromMemory(NULL, test_image[0].size, NULL, &image_info, NULL);
1418 ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
1419 hr = D3DX10GetImageInfoFromMemory(&dword, sizeof(dword), NULL, &image_info, NULL);
1420 ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
1422 for (i = 0; i < ARRAY_SIZE(test_image); ++i)
1424 hr = D3DX10GetImageInfoFromMemory(test_image[i].data, test_image[i].size, NULL, &image_info, NULL);
1425 todo_wine_if(test_image[i].expected.ImageFileFormat == D3DX10_IFF_WMP)
1426 ok(hr == S_OK, "Test %u: Got unexpected hr %#x.\n", i, hr);
1427 if (hr != S_OK)
1428 continue;
1429 check_image_info(&image_info, i, __LINE__);
1432 hr = D3DX10GetImageInfoFromFileW(NULL, NULL, &image_info, NULL);
1433 ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
1434 hr = D3DX10GetImageInfoFromFileW(L"deadbeaf", NULL, &image_info, NULL);
1435 ok(hr == D3D10_ERROR_FILE_NOT_FOUND, "Got unexpected hr %#x.\n", hr);
1436 hr = D3DX10GetImageInfoFromFileA(NULL, NULL, &image_info, NULL);
1437 ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
1438 hr = D3DX10GetImageInfoFromFileA("deadbeaf", NULL, &image_info, NULL);
1439 ok(hr == D3D10_ERROR_FILE_NOT_FOUND, "Got unexpected hr %#x.\n", hr);
1441 for (i = 0; i < ARRAY_SIZE(test_image); ++i)
1443 create_file(test_filename, test_image[i].data, test_image[i].size, path);
1445 hr = D3DX10GetImageInfoFromFileW(path, NULL, &image_info, NULL);
1446 todo_wine_if(test_image[i].expected.ImageFileFormat == D3DX10_IFF_WMP)
1447 ok(hr == S_OK, "Test %u: Got unexpected hr %#x.\n", i, hr);
1448 if (hr == S_OK)
1449 check_image_info(&image_info, i, __LINE__);
1451 hr = D3DX10GetImageInfoFromFileA(get_str_a(path), NULL, &image_info, NULL);
1452 todo_wine_if(test_image[i].expected.ImageFileFormat == D3DX10_IFF_WMP)
1453 ok(hr == S_OK, "Test %u: Got unexpected hr %#x.\n", i, hr);
1454 if (hr == S_OK)
1455 check_image_info(&image_info, i, __LINE__);
1457 delete_file(test_filename);
1461 /* D3DX10GetImageInfoFromResource tests */
1463 hr = D3DX10GetImageInfoFromResourceW(NULL, NULL, NULL, &image_info, NULL);
1464 ok(hr == D3DX10_ERR_INVALID_DATA, "Got unexpected hr %#x.\n", hr);
1465 hr = D3DX10GetImageInfoFromResourceW(NULL, L"deadbeaf", NULL, &image_info, NULL);
1466 ok(hr == D3DX10_ERR_INVALID_DATA, "Got unexpected hr %#x.\n", hr);
1467 hr = D3DX10GetImageInfoFromResourceA(NULL, NULL, NULL, &image_info, NULL);
1468 ok(hr == D3DX10_ERR_INVALID_DATA, "Got unexpected hr %#x.\n", hr);
1469 hr = D3DX10GetImageInfoFromResourceA(NULL, "deadbeaf", NULL, &image_info, NULL);
1470 ok(hr == D3DX10_ERR_INVALID_DATA, "Got unexpected hr %#x.\n", hr);
1472 for (i = 0; i < ARRAY_SIZE(test_image); ++i)
1474 resource_module = create_resource_module(test_resource_name, test_image[i].data, test_image[i].size);
1476 hr = D3DX10GetImageInfoFromResourceW(resource_module, test_resource_name, NULL, &image_info, NULL);
1477 todo_wine_if(test_image[i].expected.ImageFileFormat == D3DX10_IFF_WMP)
1478 ok(hr == S_OK, "Test %u: Got unexpected hr %#x.\n", i, hr);
1479 if (hr == S_OK)
1480 check_image_info(&image_info, i, __LINE__);
1482 hr = D3DX10GetImageInfoFromResourceA(resource_module, get_str_a(test_resource_name), NULL, &image_info, NULL);
1483 todo_wine_if(test_image[i].expected.ImageFileFormat == D3DX10_IFF_WMP)
1484 ok(hr == S_OK, "Test %u: Got unexpected hr %#x.\n", i, hr);
1485 if (hr == S_OK)
1486 check_image_info(&image_info, i, __LINE__);
1488 delete_resource_module(test_resource_name, resource_module);
1491 CoUninitialize();
1494 START_TEST(d3dx10)
1496 test_D3DX10UnsetAllDeviceObjects();
1497 test_D3DX10CreateAsyncMemoryLoader();
1498 test_D3DX10CreateAsyncFileLoader();
1499 test_D3DX10CreateAsyncResourceLoader();
1500 test_get_image_info();