d3dx10/tests: Don't fail tests when WMP support is missing.
[wine.git] / dlls / d3dx10_43 / tests / d3dx10.c
blobf00c6fe04841a4a2574fdec4f9a7784153e118b6
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
34 static const BYTE test_bmp_1bpp_data[] =
36 0xf3, 0xf2, 0xf1, 0xff
39 /* 1x1 4bpp bmp image */
40 static const BYTE test_bmp_4bpp[] =
42 0x42, 0x4d, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x28, 0x00,
43 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00,
44 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x12, 0x0b, 0x00, 0x00, 0x12, 0x0b, 0x00, 0x00, 0x02, 0x00,
45 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xf1, 0xf2, 0xf3, 0x80, 0xf4, 0xf5, 0xf6, 0x81, 0x00, 0x00,
46 0x00, 0x00
48 static const BYTE test_bmp_4bpp_data[] =
50 0xf3, 0xf2, 0xf1, 0xff
53 /* 1x1 8bpp bmp image */
54 static const BYTE test_bmp_8bpp[] =
56 0x42, 0x4d, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x28, 0x00,
57 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00,
58 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x12, 0x0b, 0x00, 0x00, 0x12, 0x0b, 0x00, 0x00, 0x02, 0x00,
59 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xf1, 0xf2, 0xf3, 0x80, 0xf4, 0xf5, 0xf6, 0x81, 0x00, 0x00,
60 0x00, 0x00
62 static const BYTE test_bmp_8bpp_data[] =
64 0xf3, 0xf2, 0xf1, 0xff
67 /* 1x1 16bpp bmp image */
68 static const BYTE test_bmp_16bpp[] =
70 0x42, 0x4d, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00,
71 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x00, 0x00, 0x00,
72 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0x0b, 0x00, 0x00, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00,
73 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x42, 0x00, 0x00, 0x00, 0x00
75 static const BYTE test_bmp_16bpp_data[] =
77 0x84, 0x84, 0x73, 0xff
80 /* 1x1 24bpp bmp image */
81 static const BYTE test_bmp_24bpp[] =
83 0x42, 0x4d, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00,
84 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x18, 0x00, 0x00, 0x00,
85 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0x0b, 0x00, 0x00, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00,
86 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x84, 0x84, 0x00, 0x00, 0x00
88 static const BYTE test_bmp_24bpp_data[] =
90 0x84, 0x84, 0x73, 0xff
93 /* 2x2 32bpp XRGB bmp image */
94 static const BYTE test_bmp_32bpp_xrgb[] =
96 0x42, 0x4d, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00,
97 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00,
98 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x12, 0x0b, 0x00, 0x00, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00,
99 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0xb0, 0xc0, 0x00, 0xa1, 0xb1, 0xc1, 0x00, 0xa2, 0xb2,
100 0xc2, 0x00, 0xa3, 0xb3, 0xc3, 0x00
102 static const BYTE test_bmp_32bpp_xrgb_data[] =
104 0xc2, 0xb2, 0xa2, 0xff, 0xc3, 0xb3, 0xa3, 0xff, 0xc0, 0xb0, 0xa0, 0xff, 0xc1, 0xb1, 0xa1, 0xff
108 /* 2x2 32bpp ARGB bmp image */
109 static const BYTE test_bmp_32bpp_argb[] =
111 0x42, 0x4d, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00,
112 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00,
113 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x12, 0x0b, 0x00, 0x00, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00,
114 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0xb0, 0xc0, 0x00, 0xa1, 0xb1, 0xc1, 0x00, 0xa2, 0xb2,
115 0xc2, 0x00, 0xa3, 0xb3, 0xc3, 0x01
117 static const BYTE test_bmp_32bpp_argb_data[] =
119 0xc2, 0xb2, 0xa2, 0xff, 0xc3, 0xb3, 0xa3, 0xff, 0xc0, 0xb0, 0xa0, 0xff, 0xc1, 0xb1, 0xa1, 0xff
123 /* 1x1 8bpp gray png image */
124 static const BYTE test_png_8bpp_gray[] =
126 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
127 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x7e, 0x9b,
128 0x55, 0x00, 0x00, 0x00, 0x0a, 0x49, 0x44, 0x41, 0x54, 0x08, 0xd7, 0x63, 0xf8, 0x0f, 0x00, 0x01,
129 0x01, 0x01, 0x00, 0x1b, 0xb6, 0xee, 0x56, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae,
130 0x42, 0x60, 0x82
132 static const BYTE test_png_8bpp_gray_data[] =
134 0xff, 0xff, 0xff, 0xff
137 /* 1x1 jpg image */
138 static const BYTE test_jpg[] =
140 0xff, 0xd8, 0xff, 0xe0, 0x00, 0x10, 0x4a, 0x46, 0x49, 0x46, 0x00, 0x01, 0x01, 0x01, 0x01, 0x2c,
141 0x01, 0x2c, 0x00, 0x00, 0xff, 0xdb, 0x00, 0x43, 0x00, 0x05, 0x03, 0x04, 0x04, 0x04, 0x03, 0x05,
142 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x06, 0x07, 0x0c, 0x08, 0x07, 0x07, 0x07, 0x07, 0x0f, 0x0b,
143 0x0b, 0x09, 0x0c, 0x11, 0x0f, 0x12, 0x12, 0x11, 0x0f, 0x11, 0x11, 0x13, 0x16, 0x1c, 0x17, 0x13,
144 0x14, 0x1a, 0x15, 0x11, 0x11, 0x18, 0x21, 0x18, 0x1a, 0x1d, 0x1d, 0x1f, 0x1f, 0x1f, 0x13, 0x17,
145 0x22, 0x24, 0x22, 0x1e, 0x24, 0x1c, 0x1e, 0x1f, 0x1e, 0xff, 0xdb, 0x00, 0x43, 0x01, 0x05, 0x05,
146 0x05, 0x07, 0x06, 0x07, 0x0e, 0x08, 0x08, 0x0e, 0x1e, 0x14, 0x11, 0x14, 0x1e, 0x1e, 0x1e, 0x1e,
147 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
148 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
149 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0xff, 0xc0,
150 0x00, 0x11, 0x08, 0x00, 0x01, 0x00, 0x01, 0x03, 0x01, 0x22, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11,
151 0x01, 0xff, 0xc4, 0x00, 0x15, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
152 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xc4, 0x00, 0x14, 0x10, 0x01, 0x00, 0x00,
153 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xc4,
154 0x00, 0x14, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
155 0x00, 0x00, 0x00, 0x00, 0xff, 0xc4, 0x00, 0x14, 0x11, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
156 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xda, 0x00, 0x0c, 0x03, 0x01,
157 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0xb2, 0xc0, 0x07, 0xff, 0xd9
159 static const BYTE test_jpg_data[] =
161 0xff, 0xff, 0xff, 0xff
164 /* 1x1 gif image */
165 static const BYTE test_gif[] =
167 0x47, 0x49, 0x46, 0x38, 0x37, 0x61, 0x01, 0x00, 0x01, 0x00, 0x80, 0x00, 0x00, 0xff, 0xff, 0xff,
168 0xff, 0xff, 0xff, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x02, 0x02, 0x44,
169 0x01, 0x00, 0x3b
171 static const BYTE test_gif_data[] =
173 0xff, 0xff, 0xff, 0xff
176 /* 1x1 tiff image */
177 static const BYTE test_tiff[] =
179 0x49, 0x49, 0x2a, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0xfe, 0x00,
180 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x01, 0x00,
181 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00,
182 0x00, 0x00, 0x02, 0x01, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0xd2, 0x00, 0x00, 0x00, 0x03, 0x01,
183 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x01, 0x03, 0x00, 0x01, 0x00,
184 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0d, 0x01, 0x02, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd8, 0x00,
185 0x00, 0x00, 0x11, 0x01, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x12, 0x01,
186 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x15, 0x01, 0x03, 0x00, 0x01, 0x00,
187 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x16, 0x01, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00,
188 0x00, 0x00, 0x17, 0x01, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1a, 0x01,
189 0x05, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, 0x1b, 0x01, 0x05, 0x00, 0x01, 0x00,
190 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x1c, 0x01, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00,
191 0x00, 0x00, 0x28, 0x01, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
192 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x2f, 0x68, 0x6f, 0x6d, 0x65, 0x2f, 0x6d, 0x65,
193 0x68, 0x2f, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x74,
194 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x48,
195 0x00, 0x00, 0x00, 0x01
197 static const BYTE test_tiff_data[] =
199 0x00, 0x00, 0x00, 0xff
202 /* 1x1 alpha dds image */
203 static const BYTE test_dds_alpha[] =
205 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x07, 0x10, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00,
206 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
207 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
208 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
209 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
210 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
211 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
212 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
213 0xff
215 static const BYTE test_dds_alpha_data[] =
217 0xff
220 /* 1x1 luminance dds image */
221 static const BYTE test_dds_luminance[] =
223 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x07, 0x10, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00,
224 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
225 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
226 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
227 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
228 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
229 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
230 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
231 0x82
233 static const BYTE test_dds_luminance_data[] =
235 0x82, 0x82, 0x82, 0xff
238 /* 1x1 16bpp dds image */
239 static const BYTE test_dds_16bpp[] =
241 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x07, 0x10, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00,
242 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
243 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
244 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
245 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
246 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00,
247 0xe0, 0x03, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
248 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
249 0x0e, 0x42
251 static const BYTE test_dds_16bpp_data[] =
253 0x84, 0x84, 0x73, 0xff
256 /* 1x1 24bpp dds image */
257 static const BYTE test_dds_24bpp[] =
259 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x07, 0x10, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00,
260 0x01, 0x00, 0x00, 0x00, 0x03, 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, 0x00, 0x00, 0x00, 0x00,
263 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
264 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00,
265 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
266 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
267 0x70, 0x81, 0x83
269 static const BYTE test_dds_24bpp_data[] =
271 0x83, 0x81, 0x70, 0xff
274 /* 1x1 32bpp dds image */
275 static const BYTE test_dds_32bpp[] =
277 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x07, 0x10, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00,
278 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
279 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
280 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
281 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
282 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00,
283 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x10, 0x00, 0x00,
284 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
285 0x70, 0x81, 0x83, 0xff
287 static const BYTE test_dds_32bpp_data[] =
289 0x83, 0x81, 0x70, 0xff
292 /* 1x1 64bpp dds image */
293 static const BYTE test_dds_64bpp[] =
295 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x0f, 0x10, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00,
296 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
297 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
298 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
299 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
300 0x04, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
301 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
302 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
303 0x83, 0x83, 0x81, 0x81, 0x70, 0x70, 0xff, 0xff
305 static const BYTE test_dds_64bpp_data[] =
307 0x83, 0x83, 0x81, 0x81, 0x70, 0x70, 0xff, 0xff
310 /* 1x1 96bpp dds image */
311 static const BYTE test_dds_96bpp[] =
313 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x0f, 0x10, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00,
314 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
315 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
316 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
317 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
318 0x04, 0x00, 0x00, 0x00, 0x44, 0x58, 0x31, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
319 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
320 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
321 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
322 0x00, 0x00, 0x00, 0x00, 0x84, 0x83, 0x03, 0x3f, 0x82, 0x81, 0x01, 0x3f, 0xe2, 0xe0, 0xe0, 0x3e
324 static const BYTE test_dds_96bpp_data[] =
326 0x84, 0x83, 0x03, 0x3f, 0x82, 0x81, 0x01, 0x3f, 0xe2, 0xe0, 0xe0, 0x3e
329 /* 1x1 128bpp dds image */
330 static const BYTE test_dds_128bpp[] =
332 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x0f, 0x10, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00,
333 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
334 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x20, 0x00, 0x00, 0x00,
337 0x04, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
338 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
339 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
340 0x84, 0x83, 0x03, 0x3f, 0x82, 0x81, 0x01, 0x3f, 0xe2, 0xe0, 0xe0, 0x3e, 0x00, 0x00, 0x80, 0x3f
342 static const BYTE test_dds_128bpp_data[] =
344 0x84, 0x83, 0x03, 0x3f, 0x82, 0x81, 0x01, 0x3f, 0xe2, 0xe0, 0xe0, 0x3e, 0x00, 0x00, 0x80, 0x3f
348 /* 4x4 DXT1 dds image */
349 static const BYTE test_dds_dxt1[] =
351 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x07, 0x10, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00,
352 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
353 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
354 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
355 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
356 0x04, 0x00, 0x00, 0x00, 0x44, 0x58, 0x54, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
357 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
358 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
359 0x2a, 0x31, 0xf5, 0xbc, 0xe3, 0x6e, 0x2a, 0x3a
361 static const BYTE test_dds_dxt1_data[] =
363 0x2a, 0x31, 0xf5, 0xbc, 0xe3, 0x6e, 0x2a, 0x3a
366 /* 4x4 DXT2 dds image */
367 static const BYTE test_dds_dxt2[] =
369 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x07, 0x10, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00,
370 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
371 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
372 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
373 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
374 0x04, 0x00, 0x00, 0x00, 0x44, 0x58, 0x54, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
375 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x40, 0x00,
376 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
377 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xde, 0xc4, 0x10, 0x2f, 0xbf, 0xff, 0x7b,
378 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x53, 0x00, 0x00, 0x52, 0x52, 0x55, 0x55,
379 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xce, 0x59, 0x00, 0x00, 0x54, 0x55, 0x55, 0x55
381 static const BYTE test_dds_dxt2_data[] =
383 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xde, 0xc4, 0x10, 0x2f, 0xbf, 0xff, 0x7b
387 /* 1x3 DXT3 dds image */
388 static const BYTE test_dds_dxt3[] =
390 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x07, 0x10, 0x0a, 0x00, 0x03, 0x00, 0x00, 0x00,
391 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
392 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
393 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
394 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
395 0x04, 0x00, 0x00, 0x00, 0x44, 0x58, 0x54, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
396 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x40, 0x00,
397 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
398 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0c, 0x92, 0x38, 0x84, 0x00, 0xff, 0x55, 0xff,
399 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x53, 0x8b, 0x53, 0x8b, 0x00, 0x00, 0x00, 0x00
401 static const BYTE test_dds_dxt3_data[] =
403 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4e, 0x92, 0xd6, 0x83, 0x00, 0xaa, 0x55, 0x55
407 /* 4x4 DXT4 dds image */
408 static const BYTE test_dds_dxt4[] =
410 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x07, 0x10, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00,
411 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
412 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
413 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
414 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
415 0x04, 0x00, 0x00, 0x00, 0x44, 0x58, 0x54, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
416 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x40, 0x00,
417 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
418 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0xde, 0xc4, 0x10, 0x2f, 0xbf, 0xff, 0x7b,
419 0xff, 0x00, 0x40, 0x02, 0x24, 0x49, 0x92, 0x24, 0x57, 0x53, 0x00, 0x00, 0x52, 0x52, 0x55, 0x55,
420 0xff, 0x00, 0x48, 0x92, 0x24, 0x49, 0x92, 0x24, 0xce, 0x59, 0x00, 0x00, 0x54, 0x55, 0x55, 0x55
422 static const BYTE test_dds_dxt4_data[] =
424 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0xde, 0xc4, 0x10, 0x2f, 0xbf, 0xff, 0x7b
428 /* 4x2 DXT5 dds image */
429 static const BYTE test_dds_dxt5[] =
431 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x07, 0x10, 0x08, 0x00, 0x02, 0x00, 0x00, 0x00,
432 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
433 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
434 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
435 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
436 0x04, 0x00, 0x00, 0x00, 0x44, 0x58, 0x54, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
437 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00,
438 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
439 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x87, 0x0f, 0x78, 0x05, 0x05, 0x50, 0x50
441 static const BYTE test_dds_dxt5_data[] =
443 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x87, 0x0f, 0x78, 0x05, 0x05, 0x05, 0x05
447 /* 4x4 BC4 dds image */
448 static const BYTE test_dds_bc4[] =
450 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x07, 0x10, 0x0a, 0x00, 0x04, 0x00, 0x00, 0x00,
451 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
452 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
453 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
454 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
455 0x04, 0x00, 0x00, 0x00, 0x42, 0x43, 0x34, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
456 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x40, 0x00,
457 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
458 0xd9, 0x15, 0xbc, 0x41, 0x5b, 0xa3, 0x3d, 0x3a, 0x8f, 0x3d, 0x45, 0x81, 0x20, 0x45, 0x81, 0x20,
459 0x6f, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
461 static const BYTE test_dds_bc4_data[] =
463 0xd9, 0x15, 0xbc, 0x41, 0x5b, 0xa3, 0x3d, 0x3a
466 /* 6x3 BC5 dds image */
467 static const BYTE test_dds_bc5[] =
469 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x07, 0x10, 0x0a, 0x00, 0x03, 0x00, 0x00, 0x00,
470 0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
471 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
472 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
473 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
474 0x04, 0x00, 0x00, 0x00, 0x42, 0x43, 0x35, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
475 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x40, 0x00,
476 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
477 0x9f, 0x28, 0x73, 0xac, 0xd5, 0x80, 0xaa, 0xd5, 0x70, 0x2c, 0x4e, 0xd6, 0x76, 0x1d, 0xd6, 0x76,
478 0xd5, 0x0f, 0xc3, 0x50, 0x96, 0xcf, 0x53, 0x96, 0xdf, 0x16, 0xc3, 0x50, 0x96, 0xcf, 0x53, 0x96,
479 0x83, 0x55, 0x08, 0x83, 0x30, 0x08, 0x83, 0x30, 0x79, 0x46, 0x31, 0x1c, 0xc3, 0x31, 0x1c, 0xc3,
480 0x6d, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
482 static const BYTE test_dds_bc5_data[] =
484 0x95, 0x35, 0xe2, 0xa3, 0xf5, 0xd2, 0x28, 0x68, 0x65, 0x32, 0x7c, 0x4e, 0xdb, 0xe4, 0x56, 0x0a,
485 0xb9, 0x33, 0xaf, 0xf0, 0x52, 0xbe, 0xed, 0x27, 0xb4, 0x2e, 0xa6, 0x60, 0x4e, 0xb6, 0x5d, 0x3f
489 /* 4x4 DXT1 cube map */
490 static const BYTE test_dds_cube[] =
492 0x44, 0x44, 0x53, 0x20, 0x7c, 0x00, 0x00, 0x00, 0x07, 0x10, 0x0a, 0x00, 0x04, 0x00, 0x00, 0x00,
493 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
494 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
495 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
496 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
497 0x04, 0x00, 0x00, 0x00, 0x44, 0x58, 0x54, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
498 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x40, 0x00,
499 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
500 0xf5, 0xa7, 0x08, 0x69, 0x74, 0xc0, 0xbf, 0xd7, 0x32, 0x96, 0x0b, 0x7b, 0xcc, 0x55, 0xcc, 0x55,
501 0x0e, 0x84, 0x0e, 0x84, 0x00, 0x00, 0x00, 0x00, 0xf5, 0xa7, 0x08, 0x69, 0x74, 0xc0, 0xbf, 0xd7,
502 0x32, 0x96, 0x0b, 0x7b, 0xcc, 0x55, 0xcc, 0x55, 0x0e, 0x84, 0x0e, 0x84, 0x00, 0x00, 0x00, 0x00,
503 0xf5, 0xa7, 0x08, 0x69, 0x74, 0xc0, 0xbf, 0xd7, 0x32, 0x96, 0x0b, 0x7b, 0xcc, 0x55, 0xcc, 0x55,
504 0x0e, 0x84, 0x0e, 0x84, 0x00, 0x00, 0x00, 0x00, 0xf5, 0xa7, 0x08, 0x69, 0x74, 0xc0, 0xbf, 0xd7,
505 0x32, 0x96, 0x0b, 0x7b, 0xcc, 0x55, 0xcc, 0x55, 0x0e, 0x84, 0x0e, 0x84, 0x00, 0x00, 0x00, 0x00,
506 0xf5, 0xa7, 0x08, 0x69, 0x74, 0xc0, 0xbf, 0xd7, 0x32, 0x96, 0x0b, 0x7b, 0xcc, 0x55, 0xcc, 0x55,
507 0x0e, 0x84, 0x0e, 0x84, 0x00, 0x00, 0x00, 0x00, 0xf5, 0xa7, 0x08, 0x69, 0x74, 0xc0, 0xbf, 0xd7,
508 0x32, 0x96, 0x0b, 0x7b, 0xcc, 0x55, 0xcc, 0x55, 0x0e, 0x84, 0x0e, 0x84, 0x00, 0x00, 0x00, 0x00
510 static const BYTE test_dds_cube_data[] =
512 0xf5, 0xa7, 0x08, 0x69, 0x74, 0xc0, 0xbf, 0xd7
515 /* 1x1 wmp image */
516 static const BYTE test_wmp[] =
518 0x49, 0x49, 0xbc, 0x01, 0x20, 0x00, 0x00, 0x00, 0x24, 0xc3, 0xdd, 0x6f, 0x03, 0x4e, 0xfe, 0x4b,
519 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
520 0x08, 0x00, 0x01, 0xbc, 0x01, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0xbc,
521 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xbc, 0x04, 0x00, 0x01, 0x00,
522 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x81, 0xbc, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00,
523 0x00, 0x00, 0x82, 0xbc, 0x0b, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x06, 0xc0, 0x42, 0x83, 0xbc,
524 0x0b, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x06, 0xc0, 0x42, 0xc0, 0xbc, 0x04, 0x00, 0x01, 0x00,
525 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0xc1, 0xbc, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x92, 0x00,
526 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x4d, 0x50, 0x48, 0x4f, 0x54, 0x4f, 0x00, 0x11, 0x45,
527 0xc0, 0x71, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0xc0, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xc0,
528 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x25, 0xff, 0xff, 0x00, 0x00, 0x01,
529 0x01, 0xc8, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x10, 0x10, 0xa6, 0x18, 0x8c, 0x21,
530 0x00, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
531 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x4e, 0x0f, 0x3a, 0x4c, 0x94, 0x9d, 0xba, 0x79, 0xe7, 0x38,
532 0x4c, 0xcf, 0x14, 0xc3, 0x43, 0x91, 0x88, 0xfb, 0xdc, 0xe0, 0x7c, 0x34, 0x70, 0x9b, 0x28, 0xa9,
533 0x18, 0x74, 0x62, 0x87, 0x8e, 0xe4, 0x68, 0x5f, 0xb9, 0xcc, 0x0e, 0xe1, 0x8c, 0x76, 0x3a, 0x9b,
534 0x82, 0x76, 0x71, 0x13, 0xde, 0x50, 0xd4, 0x2d, 0xc2, 0xda, 0x1e, 0x3b, 0xa6, 0xa1, 0x62, 0x7b,
535 0xca, 0x1a, 0x85, 0x4b, 0x6e, 0x74, 0xec, 0x60
537 static const BYTE test_wmp_data[] =
539 0xff, 0xff, 0xff, 0xff
542 static const struct test_image
544 const BYTE *data;
545 unsigned int size;
546 const BYTE *expected_data;
547 D3DX10_IMAGE_INFO expected_info;
549 test_image[] =
552 test_bmp_1bpp, sizeof(test_bmp_1bpp), test_bmp_1bpp_data,
553 {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_BMP}
556 test_bmp_4bpp, sizeof(test_bmp_4bpp), test_bmp_4bpp_data,
557 {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_BMP}
560 test_bmp_8bpp, sizeof(test_bmp_8bpp), test_bmp_8bpp_data,
561 {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_BMP}
564 test_bmp_16bpp, sizeof(test_bmp_16bpp), test_bmp_16bpp_data,
565 {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_BMP}
568 test_bmp_24bpp, sizeof(test_bmp_24bpp), test_bmp_24bpp_data,
569 {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_BMP}
572 test_bmp_32bpp_xrgb, sizeof(test_bmp_32bpp_xrgb), test_bmp_32bpp_xrgb_data,
573 {2, 2, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_BMP}
576 test_bmp_32bpp_argb, sizeof(test_bmp_32bpp_argb), test_bmp_32bpp_argb_data,
577 {2, 2, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_BMP}
580 test_png_8bpp_gray, sizeof(test_png_8bpp_gray), test_png_8bpp_gray_data,
581 {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_PNG}
584 test_jpg, sizeof(test_jpg), test_jpg_data,
585 {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_JPG}
588 test_gif, sizeof(test_gif), test_gif_data,
589 {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_GIF}
592 test_tiff, sizeof(test_tiff), test_tiff_data,
593 {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_TIFF}
596 test_dds_alpha, sizeof(test_dds_alpha), test_dds_alpha_data,
597 {1, 1, 1, 1, 1, 0, DXGI_FORMAT_A8_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_DDS}
600 test_dds_luminance, sizeof(test_dds_luminance), test_dds_luminance_data,
601 {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_DDS}
604 test_dds_16bpp, sizeof(test_dds_16bpp), test_dds_16bpp_data,
605 {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_DDS}
608 test_dds_24bpp, sizeof(test_dds_24bpp), test_dds_24bpp_data,
609 {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_DDS}
612 test_dds_32bpp, sizeof(test_dds_32bpp), test_dds_32bpp_data,
613 {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_DDS}
616 test_dds_64bpp, sizeof(test_dds_64bpp), test_dds_64bpp_data,
617 {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R16G16B16A16_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_DDS}
620 test_dds_96bpp, sizeof(test_dds_96bpp), test_dds_96bpp_data,
621 {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R32G32B32_FLOAT, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_DDS}
624 test_dds_128bpp, sizeof(test_dds_128bpp), test_dds_128bpp_data,
625 {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R32G32B32A32_FLOAT, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_DDS}
628 test_dds_dxt1, sizeof(test_dds_dxt1), test_dds_dxt1_data,
629 {4, 4, 1, 1, 1, 0, DXGI_FORMAT_BC1_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_DDS}
632 test_dds_dxt2, sizeof(test_dds_dxt2), test_dds_dxt2_data,
633 {4, 4, 1, 1, 3, 0, DXGI_FORMAT_BC2_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_DDS}
636 test_dds_dxt3, sizeof(test_dds_dxt3), test_dds_dxt3_data,
637 {1, 3, 1, 1, 2, 0, DXGI_FORMAT_BC2_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_DDS}
640 test_dds_dxt4, sizeof(test_dds_dxt4), test_dds_dxt4_data,
641 {4, 4, 1, 1, 3, 0, DXGI_FORMAT_BC3_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_DDS}
644 test_dds_dxt5, sizeof(test_dds_dxt5), test_dds_dxt5_data,
645 {4, 2, 1, 1, 1, 0, DXGI_FORMAT_BC3_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_DDS}
648 test_dds_bc4, sizeof(test_dds_bc4), test_dds_bc4_data,
649 {4, 4, 1, 1, 3, 0, DXGI_FORMAT_BC4_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_DDS}
652 test_dds_bc5, sizeof(test_dds_bc5), test_dds_bc5_data,
653 {6, 3, 1, 1, 3, 0, DXGI_FORMAT_BC5_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_DDS}
656 test_dds_cube, sizeof(test_dds_cube), test_dds_cube_data,
657 {4, 4, 1, 6, 3, 0x4, DXGI_FORMAT_BC1_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_DDS}
660 test_wmp, sizeof(test_wmp), test_wmp_data,
661 {1, 1, 1, 1, 1, 0, DXGI_FORMAT_R8G8B8A8_UNORM, D3D10_RESOURCE_DIMENSION_TEXTURE2D, D3DX10_IFF_WMP}
665 static WCHAR temp_dir[MAX_PATH];
667 static DXGI_FORMAT block_compressed_formats[] =
669 DXGI_FORMAT_BC1_TYPELESS, DXGI_FORMAT_BC1_UNORM, DXGI_FORMAT_BC1_UNORM_SRGB,
670 DXGI_FORMAT_BC2_TYPELESS, DXGI_FORMAT_BC2_UNORM, DXGI_FORMAT_BC2_UNORM_SRGB,
671 DXGI_FORMAT_BC3_TYPELESS, DXGI_FORMAT_BC3_UNORM, DXGI_FORMAT_BC3_UNORM_SRGB,
672 DXGI_FORMAT_BC4_TYPELESS, DXGI_FORMAT_BC4_UNORM, DXGI_FORMAT_BC4_SNORM,
673 DXGI_FORMAT_BC5_TYPELESS, DXGI_FORMAT_BC5_UNORM, DXGI_FORMAT_BC5_SNORM,
674 DXGI_FORMAT_BC6H_TYPELESS, DXGI_FORMAT_BC6H_UF16, DXGI_FORMAT_BC6H_SF16,
675 DXGI_FORMAT_BC7_TYPELESS, DXGI_FORMAT_BC7_UNORM, DXGI_FORMAT_BC7_UNORM_SRGB
678 static BOOL is_block_compressed(DXGI_FORMAT format)
680 unsigned int i;
682 for (i = 0; i < ARRAY_SIZE(block_compressed_formats); ++i)
683 if (format == block_compressed_formats[i])
684 return TRUE;
686 return FALSE;
689 static unsigned int get_bpp_from_format(DXGI_FORMAT format)
691 switch (format)
693 case DXGI_FORMAT_R32G32B32A32_TYPELESS:
694 case DXGI_FORMAT_R32G32B32A32_FLOAT:
695 case DXGI_FORMAT_R32G32B32A32_UINT:
696 case DXGI_FORMAT_R32G32B32A32_SINT:
697 return 128;
698 case DXGI_FORMAT_R32G32B32_TYPELESS:
699 case DXGI_FORMAT_R32G32B32_FLOAT:
700 case DXGI_FORMAT_R32G32B32_UINT:
701 case DXGI_FORMAT_R32G32B32_SINT:
702 return 96;
703 case DXGI_FORMAT_R16G16B16A16_TYPELESS:
704 case DXGI_FORMAT_R16G16B16A16_FLOAT:
705 case DXGI_FORMAT_R16G16B16A16_UNORM:
706 case DXGI_FORMAT_R16G16B16A16_UINT:
707 case DXGI_FORMAT_R16G16B16A16_SNORM:
708 case DXGI_FORMAT_R16G16B16A16_SINT:
709 case DXGI_FORMAT_R32G32_TYPELESS:
710 case DXGI_FORMAT_R32G32_FLOAT:
711 case DXGI_FORMAT_R32G32_UINT:
712 case DXGI_FORMAT_R32G32_SINT:
713 case DXGI_FORMAT_R32G8X24_TYPELESS:
714 case DXGI_FORMAT_D32_FLOAT_S8X24_UINT:
715 case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS:
716 case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT:
717 case DXGI_FORMAT_Y416:
718 case DXGI_FORMAT_Y210:
719 case DXGI_FORMAT_Y216:
720 return 64;
721 case DXGI_FORMAT_R10G10B10A2_TYPELESS:
722 case DXGI_FORMAT_R10G10B10A2_UNORM:
723 case DXGI_FORMAT_R10G10B10A2_UINT:
724 case DXGI_FORMAT_R11G11B10_FLOAT:
725 case DXGI_FORMAT_R8G8B8A8_TYPELESS:
726 case DXGI_FORMAT_R8G8B8A8_UNORM:
727 case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
728 case DXGI_FORMAT_R8G8B8A8_UINT:
729 case DXGI_FORMAT_R8G8B8A8_SNORM:
730 case DXGI_FORMAT_R8G8B8A8_SINT:
731 case DXGI_FORMAT_R16G16_TYPELESS:
732 case DXGI_FORMAT_R16G16_FLOAT:
733 case DXGI_FORMAT_R16G16_UNORM:
734 case DXGI_FORMAT_R16G16_UINT:
735 case DXGI_FORMAT_R16G16_SNORM:
736 case DXGI_FORMAT_R16G16_SINT:
737 case DXGI_FORMAT_R32_TYPELESS:
738 case DXGI_FORMAT_D32_FLOAT:
739 case DXGI_FORMAT_R32_FLOAT:
740 case DXGI_FORMAT_R32_UINT:
741 case DXGI_FORMAT_R32_SINT:
742 case DXGI_FORMAT_R24G8_TYPELESS:
743 case DXGI_FORMAT_D24_UNORM_S8_UINT:
744 case DXGI_FORMAT_R24_UNORM_X8_TYPELESS:
745 case DXGI_FORMAT_X24_TYPELESS_G8_UINT:
746 case DXGI_FORMAT_R9G9B9E5_SHAREDEXP:
747 case DXGI_FORMAT_R8G8_B8G8_UNORM:
748 case DXGI_FORMAT_G8R8_G8B8_UNORM:
749 case DXGI_FORMAT_B8G8R8A8_UNORM:
750 case DXGI_FORMAT_B8G8R8X8_UNORM:
751 case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM:
752 case DXGI_FORMAT_B8G8R8A8_TYPELESS:
753 case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB:
754 case DXGI_FORMAT_B8G8R8X8_TYPELESS:
755 case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB:
756 case DXGI_FORMAT_AYUV:
757 case DXGI_FORMAT_Y410:
758 case DXGI_FORMAT_YUY2:
759 return 32;
760 case DXGI_FORMAT_P010:
761 case DXGI_FORMAT_P016:
762 return 24;
763 case DXGI_FORMAT_R8G8_TYPELESS:
764 case DXGI_FORMAT_R8G8_UNORM:
765 case DXGI_FORMAT_R8G8_UINT:
766 case DXGI_FORMAT_R8G8_SNORM:
767 case DXGI_FORMAT_R8G8_SINT:
768 case DXGI_FORMAT_R16_TYPELESS:
769 case DXGI_FORMAT_R16_FLOAT:
770 case DXGI_FORMAT_D16_UNORM:
771 case DXGI_FORMAT_R16_UNORM:
772 case DXGI_FORMAT_R16_UINT:
773 case DXGI_FORMAT_R16_SNORM:
774 case DXGI_FORMAT_R16_SINT:
775 case DXGI_FORMAT_B5G6R5_UNORM:
776 case DXGI_FORMAT_B5G5R5A1_UNORM:
777 case DXGI_FORMAT_A8P8:
778 case DXGI_FORMAT_B4G4R4A4_UNORM:
779 return 16;
780 case DXGI_FORMAT_NV12:
781 case DXGI_FORMAT_420_OPAQUE:
782 case DXGI_FORMAT_NV11:
783 return 12;
784 case DXGI_FORMAT_R8_TYPELESS:
785 case DXGI_FORMAT_R8_UNORM:
786 case DXGI_FORMAT_R8_UINT:
787 case DXGI_FORMAT_R8_SNORM:
788 case DXGI_FORMAT_R8_SINT:
789 case DXGI_FORMAT_A8_UNORM:
790 case DXGI_FORMAT_AI44:
791 case DXGI_FORMAT_IA44:
792 case DXGI_FORMAT_P8:
793 case DXGI_FORMAT_BC2_TYPELESS:
794 case DXGI_FORMAT_BC2_UNORM:
795 case DXGI_FORMAT_BC2_UNORM_SRGB:
796 case DXGI_FORMAT_BC3_TYPELESS:
797 case DXGI_FORMAT_BC3_UNORM:
798 case DXGI_FORMAT_BC3_UNORM_SRGB:
799 case DXGI_FORMAT_BC5_TYPELESS:
800 case DXGI_FORMAT_BC5_UNORM:
801 case DXGI_FORMAT_BC5_SNORM:
802 case DXGI_FORMAT_BC6H_TYPELESS:
803 case DXGI_FORMAT_BC6H_UF16:
804 case DXGI_FORMAT_BC6H_SF16:
805 case DXGI_FORMAT_BC7_TYPELESS:
806 case DXGI_FORMAT_BC7_UNORM:
807 case DXGI_FORMAT_BC7_UNORM_SRGB:
808 return 8;
809 case DXGI_FORMAT_BC1_TYPELESS:
810 case DXGI_FORMAT_BC1_UNORM:
811 case DXGI_FORMAT_BC1_UNORM_SRGB:
812 case DXGI_FORMAT_BC4_TYPELESS:
813 case DXGI_FORMAT_BC4_UNORM:
814 case DXGI_FORMAT_BC4_SNORM:
815 return 4;
816 case DXGI_FORMAT_R1_UNORM:
817 return 1;
818 default:
819 return 0;
823 static BOOL compare_float(float f, float g, unsigned int ulps)
825 int x = *(int *)&f;
826 int y = *(int *)&g;
828 if (x < 0)
829 x = INT_MIN - x;
830 if (y < 0)
831 y = INT_MIN - y;
833 if (abs(x - y) > ulps)
834 return FALSE;
836 return TRUE;
839 static char *get_str_a(const WCHAR *wstr)
841 static char buffer[MAX_PATH];
843 WideCharToMultiByte(CP_ACP, 0, wstr, -1, buffer, sizeof(buffer), NULL, NULL);
844 return buffer;
847 static BOOL create_file(const WCHAR *filename, const void *data, unsigned int size, WCHAR *out_path)
849 WCHAR path[MAX_PATH];
850 DWORD written;
851 HANDLE file;
853 if (!temp_dir[0])
854 GetTempPathW(ARRAY_SIZE(temp_dir), temp_dir);
855 lstrcpyW(path, temp_dir);
856 lstrcatW(path, filename);
858 file = CreateFileW(path, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
859 if (file == INVALID_HANDLE_VALUE)
860 return FALSE;
862 if (WriteFile(file, data, size, &written, NULL))
864 CloseHandle(file);
866 if (out_path)
867 lstrcpyW(out_path, path);
868 return TRUE;
871 CloseHandle(file);
872 return FALSE;
875 static BOOL delete_file(const WCHAR *filename)
877 WCHAR path[MAX_PATH];
879 lstrcpyW(path, temp_dir);
880 lstrcatW(path, filename);
881 return DeleteFileW(path);
884 static ID3D10Device *create_device(void)
886 ID3D10Device *device;
887 HMODULE d3d10_mod = LoadLibraryA("d3d10.dll");
888 HRESULT (WINAPI *pD3D10CreateDevice)(IDXGIAdapter *, D3D10_DRIVER_TYPE, HMODULE, UINT, UINT, ID3D10Device **);
890 if (!d3d10_mod)
892 win_skip("d3d10.dll not present\n");
893 return NULL;
896 pD3D10CreateDevice = (void *)GetProcAddress(d3d10_mod, "D3D10CreateDevice");
897 if (SUCCEEDED(pD3D10CreateDevice(NULL, D3D10_DRIVER_TYPE_HARDWARE, NULL, 0, D3D10_SDK_VERSION, &device)))
898 return device;
899 if (SUCCEEDED(pD3D10CreateDevice(NULL, D3D10_DRIVER_TYPE_WARP, NULL, 0, D3D10_SDK_VERSION, &device)))
900 return device;
901 if (SUCCEEDED(pD3D10CreateDevice(NULL, D3D10_DRIVER_TYPE_REFERENCE, NULL, 0, D3D10_SDK_VERSION, &device)))
902 return device;
904 return NULL;
907 static HMODULE create_resource_module(const WCHAR *filename, const void *data, unsigned int size)
909 WCHAR resource_module_path[MAX_PATH], current_module_path[MAX_PATH];
910 HANDLE resource;
911 HMODULE module;
912 BOOL ret;
914 if (!temp_dir[0])
915 GetTempPathW(ARRAY_SIZE(temp_dir), temp_dir);
916 lstrcpyW(resource_module_path, temp_dir);
917 lstrcatW(resource_module_path, filename);
919 GetModuleFileNameW(NULL, current_module_path, ARRAY_SIZE(current_module_path));
920 ret = CopyFileW(current_module_path, resource_module_path, FALSE);
921 ok(ret, "CopyFileW failed, error %u.\n", GetLastError());
922 SetFileAttributesW(resource_module_path, FILE_ATTRIBUTE_NORMAL);
924 resource = BeginUpdateResourceW(resource_module_path, TRUE);
925 UpdateResourceW(resource, (LPCWSTR)RT_RCDATA, filename, MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), (void *)data, size);
926 EndUpdateResourceW(resource, FALSE);
928 module = LoadLibraryExW(resource_module_path, NULL, LOAD_LIBRARY_AS_DATAFILE);
930 return module;
933 static void delete_resource_module(const WCHAR *filename, HMODULE module)
935 WCHAR path[MAX_PATH];
937 FreeLibrary(module);
939 lstrcpyW(path, temp_dir);
940 lstrcatW(path, filename);
941 DeleteFileW(path);
944 static void check_image_info(D3DX10_IMAGE_INFO *image_info, const struct test_image *image, unsigned int line)
946 ok_(__FILE__, line)(image_info->Width == image->expected_info.Width,
947 "Got unexpected Width %u, expected %u.\n",
948 image_info->Width, image->expected_info.Width);
949 ok_(__FILE__, line)(image_info->Height == image->expected_info.Height,
950 "Got unexpected Height %u, expected %u.\n",
951 image_info->Height, image->expected_info.Height);
952 ok_(__FILE__, line)(image_info->Depth == image->expected_info.Depth,
953 "Got unexpected Depth %u, expected %u.\n",
954 image_info->Depth, image->expected_info.Depth);
955 ok_(__FILE__, line)(image_info->ArraySize == image->expected_info.ArraySize,
956 "Got unexpected ArraySize %u, expected %u.\n",
957 image_info->ArraySize, image->expected_info.ArraySize);
958 ok_(__FILE__, line)(image_info->MipLevels == image->expected_info.MipLevels,
959 "Got unexpected MipLevels %u, expected %u.\n",
960 image_info->MipLevels, image->expected_info.MipLevels);
961 ok_(__FILE__, line)(image_info->MiscFlags == image->expected_info.MiscFlags,
962 "Got unexpected MiscFlags %#x, expected %#x.\n",
963 image_info->MiscFlags, image->expected_info.MiscFlags);
964 ok_(__FILE__, line)(image_info->Format == image->expected_info.Format,
965 "Got unexpected Format %#x, expected %#x.\n",
966 image_info->Format, image->expected_info.Format);
967 ok_(__FILE__, line)(image_info->ResourceDimension == image->expected_info.ResourceDimension,
968 "Got unexpected ResourceDimension %u, expected %u.\n",
969 image_info->ResourceDimension, image->expected_info.ResourceDimension);
970 ok_(__FILE__, line)(image_info->ImageFileFormat == image->expected_info.ImageFileFormat,
971 "Got unexpected ImageFileFormat %u, expected %u.\n",
972 image_info->ImageFileFormat, image->expected_info.ImageFileFormat);
975 static ID3D10Texture2D *get_texture_readback(ID3D10Texture2D *texture)
977 D3D10_TEXTURE2D_DESC desc;
978 ID3D10Texture2D *readback;
979 ID3D10Device *device;
980 HRESULT hr;
982 ID3D10Texture2D_GetDevice(texture, &device);
984 ID3D10Texture2D_GetDesc(texture, &desc);
985 desc.Usage = D3D10_USAGE_STAGING;
986 desc.BindFlags = 0;
987 desc.CPUAccessFlags = D3D10_CPU_ACCESS_READ;
989 hr = ID3D10Device_CreateTexture2D(device, &desc, NULL, &readback);
990 if (hr != S_OK)
992 ID3D10Device_Release(device);
993 return NULL;
995 ID3D10Device_CopyResource(device, (ID3D10Resource *)readback, (ID3D10Resource *)texture);
997 ID3D10Device_Release(device);
998 return readback;
1001 static void check_resource_info(ID3D10Resource *resource, const struct test_image *image, unsigned int line)
1003 unsigned int expected_mip_levels, expected_width, expected_height, max_dimension;
1004 D3D10_RESOURCE_DIMENSION resource_dimension;
1005 D3D10_TEXTURE2D_DESC desc_2d;
1006 D3D10_TEXTURE3D_DESC desc_3d;
1007 ID3D10Texture2D *texture_2d;
1008 ID3D10Texture3D *texture_3d;
1009 HRESULT hr;
1011 expected_width = image->expected_info.Width;
1012 expected_height = image->expected_info.Height;
1013 if (is_block_compressed(image->expected_info.Format))
1015 expected_width = (expected_width + 3) & ~3;
1016 expected_height = (expected_height + 3) & ~3;
1018 expected_mip_levels = 0;
1019 max_dimension = max(expected_width, expected_height);
1020 while (max_dimension)
1022 ++expected_mip_levels;
1023 max_dimension >>= 1;
1026 ID3D10Resource_GetType(resource, &resource_dimension);
1027 ok(resource_dimension == image->expected_info.ResourceDimension,
1028 "Got unexpected ResourceDimension %u, expected %u.\n",
1029 resource_dimension, image->expected_info.ResourceDimension);
1031 switch (resource_dimension)
1033 case D3D10_RESOURCE_DIMENSION_TEXTURE2D:
1034 hr = ID3D10Resource_QueryInterface(resource, &IID_ID3D10Texture2D, (void **)&texture_2d);
1035 ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
1036 ID3D10Texture2D_GetDesc(texture_2d, &desc_2d);
1037 ok_(__FILE__, line)(desc_2d.Width == expected_width,
1038 "Got unexpected Width %u, expected %u.\n",
1039 desc_2d.Width, expected_width);
1040 ok_(__FILE__, line)(desc_2d.Height == expected_height,
1041 "Got unexpected Height %u, expected %u.\n",
1042 desc_2d.Height, expected_height);
1043 todo_wine_if(expected_mip_levels != 1)
1044 ok_(__FILE__, line)(desc_2d.MipLevels == expected_mip_levels,
1045 "Got unexpected MipLevels %u, expected %u.\n",
1046 desc_2d.MipLevels, expected_mip_levels);
1047 ok_(__FILE__, line)(desc_2d.ArraySize == image->expected_info.ArraySize,
1048 "Got unexpected ArraySize %u, expected %u.\n",
1049 desc_2d.ArraySize, image->expected_info.ArraySize);
1050 ok_(__FILE__, line)(desc_2d.Format == image->expected_info.Format,
1051 "Got unexpected Format %u, expected %u.\n",
1052 desc_2d.Format, image->expected_info.Format);
1053 ok_(__FILE__, line)(desc_2d.SampleDesc.Count == 1,
1054 "Got unexpected SampleDesc.Count %u, expected %u\n",
1055 desc_2d.SampleDesc.Count, 1);
1056 ok_(__FILE__, line)(desc_2d.SampleDesc.Quality == 0,
1057 "Got unexpected SampleDesc.Quality %u, expected %u\n",
1058 desc_2d.SampleDesc.Quality, 0);
1059 ok_(__FILE__, line)(desc_2d.Usage == D3D10_USAGE_DEFAULT,
1060 "Got unexpected Usage %u, expected %u\n",
1061 desc_2d.Usage, D3D10_USAGE_DEFAULT);
1062 ok_(__FILE__, line)(desc_2d.BindFlags == D3D10_BIND_SHADER_RESOURCE,
1063 "Got unexpected BindFlags %#x, expected %#x\n",
1064 desc_2d.BindFlags, D3D10_BIND_SHADER_RESOURCE);
1065 ok_(__FILE__, line)(desc_2d.CPUAccessFlags == 0,
1066 "Got unexpected CPUAccessFlags %#x, expected %#x\n",
1067 desc_2d.CPUAccessFlags, 0);
1068 ok_(__FILE__, line)(desc_2d.MiscFlags == image->expected_info.MiscFlags,
1069 "Got unexpected MiscFlags %#x, expected %#x.\n",
1070 desc_2d.MiscFlags, image->expected_info.MiscFlags);
1072 ID3D10Texture2D_Release(texture_2d);
1073 break;
1075 case D3D10_RESOURCE_DIMENSION_TEXTURE3D:
1076 hr = ID3D10Resource_QueryInterface(resource, &IID_ID3D10Texture3D, (void **)&texture_3d);
1077 ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
1078 ID3D10Texture3D_GetDesc(texture_3d, &desc_3d);
1079 ok_(__FILE__, line)(desc_3d.Width == expected_width,
1080 "Got unexpected Width %u, expected %u.\n",
1081 desc_3d.Width, expected_width);
1082 ok_(__FILE__, line)(desc_3d.Height == expected_height,
1083 "Got unexpected Height %u, expected %u.\n",
1084 desc_3d.Height, expected_height);
1085 ok_(__FILE__, line)(desc_3d.Depth == image->expected_info.Depth,
1086 "Got unexpected Depth %u, expected %u.\n",
1087 desc_3d.Depth, image->expected_info.Depth);
1088 ok_(__FILE__, line)(desc_3d.MipLevels == expected_mip_levels,
1089 "Got unexpected MipLevels %u, expected %u.\n",
1090 desc_3d.MipLevels, expected_mip_levels);
1091 ok_(__FILE__, line)(desc_3d.Format == image->expected_info.Format,
1092 "Got unexpected Format %u, expected %u.\n",
1093 desc_3d.Format, image->expected_info.Format);
1094 ok_(__FILE__, line)(desc_3d.Usage == D3D10_USAGE_DEFAULT,
1095 "Got unexpected Usage %u, expected %u\n",
1096 desc_3d.Usage, D3D10_USAGE_DEFAULT);
1097 ok_(__FILE__, line)(desc_3d.BindFlags == D3D10_BIND_SHADER_RESOURCE,
1098 "Got unexpected BindFlags %#x, expected %#x\n",
1099 desc_3d.BindFlags, D3D10_BIND_SHADER_RESOURCE);
1100 ok_(__FILE__, line)(desc_3d.CPUAccessFlags == 0,
1101 "Got unexpected CPUAccessFlags %#x, expected %#x\n",
1102 desc_3d.CPUAccessFlags, 0);
1103 ok_(__FILE__, line)(desc_3d.MiscFlags == image->expected_info.MiscFlags,
1104 "Got unexpected MiscFlags %#x, expected %#x.\n",
1105 desc_3d.MiscFlags, image->expected_info.MiscFlags);
1106 ID3D10Texture3D_Release(texture_3d);
1107 break;
1109 default:
1110 break;
1114 static void check_resource_data(ID3D10Resource *resource, const struct test_image *image, unsigned int line)
1116 unsigned int width, height, stride, i;
1117 D3D10_MAPPED_TEXTURE2D map;
1118 D3D10_TEXTURE2D_DESC desc;
1119 ID3D10Texture2D *readback;
1120 BOOL line_match;
1121 HRESULT hr;
1123 readback = get_texture_readback((ID3D10Texture2D *)resource);
1124 ok_(__FILE__, line)(readback != NULL, "Failed to get texture readback.\n");
1125 if (!readback)
1126 return;
1128 ID3D10Texture2D_GetDesc(readback, &desc);
1129 width = desc.Width;
1130 height = desc.Height;
1131 stride = (width * get_bpp_from_format(desc.Format) + 7) / 8;
1132 if (is_block_compressed(desc.Format))
1134 stride *= 4;
1135 height = (height + 3) / 4;
1138 hr = ID3D10Texture2D_Map(readback, 0, D3D10_MAP_READ, 0, &map);
1139 ok_(__FILE__, line)(hr == S_OK, "Map failed, hr %#x.\n", hr);
1140 if (hr != S_OK)
1142 ID3D10Texture2D_Unmap(readback, 0);
1143 return;
1146 for (i = 0; i < height; ++i)
1148 line_match = !memcmp(image->expected_data + stride * i,
1149 (BYTE *)map.pData + map.RowPitch * i, stride);
1150 todo_wine_if(is_block_compressed(image->expected_info.Format)
1151 && (image->expected_info.Width % 4 != 0 || image->expected_info.Height % 4 != 0))
1152 ok_(__FILE__, line)(line_match, "Data mismatch for line %u.\n", i);
1153 if (!line_match)
1154 break;
1157 ID3D10Texture2D_Unmap(readback, 0);
1160 static void test_D3DX10UnsetAllDeviceObjects(void)
1162 static const D3D10_INPUT_ELEMENT_DESC layout_desc[] =
1164 {"POSITION", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 0, D3D10_INPUT_PER_VERTEX_DATA, 0},
1166 #if 0
1167 float4 main(float4 pos : POSITION) : POSITION
1169 return pos;
1171 #endif
1172 static const DWORD simple_vs[] =
1174 0x43425844, 0x66689e7c, 0x643f0971, 0xb7f67ff4, 0xabc48688, 0x00000001, 0x000000d4, 0x00000003,
1175 0x0000002c, 0x00000060, 0x00000094, 0x4e475349, 0x0000002c, 0x00000001, 0x00000008, 0x00000020,
1176 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000f0f, 0x49534f50, 0x4e4f4954, 0xababab00,
1177 0x4e47534f, 0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000000, 0x00000003,
1178 0x00000000, 0x0000000f, 0x49534f50, 0x4e4f4954, 0xababab00, 0x52444853, 0x00000038, 0x00010040,
1179 0x0000000e, 0x0300005f, 0x001010f2, 0x00000000, 0x03000065, 0x001020f2, 0x00000000, 0x05000036,
1180 0x001020f2, 0x00000000, 0x00101e46, 0x00000000, 0x0100003e,
1183 #if 0
1184 struct gs_out
1186 float4 pos : SV_POSITION;
1189 [maxvertexcount(4)]
1190 void main(point float4 vin[1] : POSITION, inout TriangleStream<gs_out> vout)
1192 float offset = 0.1 * vin[0].w;
1193 gs_out v;
1195 v.pos = float4(vin[0].x - offset, vin[0].y - offset, vin[0].z, vin[0].w);
1196 vout.Append(v);
1197 v.pos = float4(vin[0].x - offset, vin[0].y + offset, vin[0].z, vin[0].w);
1198 vout.Append(v);
1199 v.pos = float4(vin[0].x + offset, vin[0].y - offset, vin[0].z, vin[0].w);
1200 vout.Append(v);
1201 v.pos = float4(vin[0].x + offset, vin[0].y + offset, vin[0].z, vin[0].w);
1202 vout.Append(v);
1204 #endif
1205 static const DWORD simple_gs[] =
1207 0x43425844, 0x000ee786, 0xc624c269, 0x885a5cbe, 0x444b3b1f, 0x00000001, 0x0000023c, 0x00000003,
1208 0x0000002c, 0x00000060, 0x00000094, 0x4e475349, 0x0000002c, 0x00000001, 0x00000008, 0x00000020,
1209 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000f0f, 0x49534f50, 0x4e4f4954, 0xababab00,
1210 0x4e47534f, 0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000001, 0x00000003,
1211 0x00000000, 0x0000000f, 0x505f5653, 0x5449534f, 0x004e4f49, 0x52444853, 0x000001a0, 0x00020040,
1212 0x00000068, 0x0400005f, 0x002010f2, 0x00000001, 0x00000000, 0x02000068, 0x00000001, 0x0100085d,
1213 0x0100285c, 0x04000067, 0x001020f2, 0x00000000, 0x00000001, 0x0200005e, 0x00000004, 0x0f000032,
1214 0x00100032, 0x00000000, 0x80201ff6, 0x00000041, 0x00000000, 0x00000000, 0x00004002, 0x3dcccccd,
1215 0x3dcccccd, 0x00000000, 0x00000000, 0x00201046, 0x00000000, 0x00000000, 0x05000036, 0x00102032,
1216 0x00000000, 0x00100046, 0x00000000, 0x06000036, 0x001020c2, 0x00000000, 0x00201ea6, 0x00000000,
1217 0x00000000, 0x01000013, 0x05000036, 0x00102012, 0x00000000, 0x0010000a, 0x00000000, 0x0e000032,
1218 0x00100052, 0x00000000, 0x00201ff6, 0x00000000, 0x00000000, 0x00004002, 0x3dcccccd, 0x00000000,
1219 0x3dcccccd, 0x00000000, 0x00201106, 0x00000000, 0x00000000, 0x05000036, 0x00102022, 0x00000000,
1220 0x0010002a, 0x00000000, 0x06000036, 0x001020c2, 0x00000000, 0x00201ea6, 0x00000000, 0x00000000,
1221 0x01000013, 0x05000036, 0x00102012, 0x00000000, 0x0010000a, 0x00000000, 0x05000036, 0x00102022,
1222 0x00000000, 0x0010001a, 0x00000000, 0x06000036, 0x001020c2, 0x00000000, 0x00201ea6, 0x00000000,
1223 0x00000000, 0x01000013, 0x05000036, 0x00102032, 0x00000000, 0x00100086, 0x00000000, 0x06000036,
1224 0x001020c2, 0x00000000, 0x00201ea6, 0x00000000, 0x00000000, 0x01000013, 0x0100003e,
1227 #if 0
1228 float4 main(float4 color : COLOR) : SV_TARGET
1230 return color;
1232 #endif
1233 static const DWORD simple_ps[] =
1235 0x43425844, 0x08c2b568, 0x17d33120, 0xb7d82948, 0x13a570fb, 0x00000001, 0x000000d0, 0x00000003,
1236 0x0000002c, 0x0000005c, 0x00000090, 0x4e475349, 0x00000028, 0x00000001, 0x00000008, 0x00000020,
1237 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000f0f, 0x4f4c4f43, 0xabab0052, 0x4e47534f,
1238 0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000000, 0x00000003, 0x00000000,
1239 0x0000000f, 0x545f5653, 0x45475241, 0xabab0054, 0x52444853, 0x00000038, 0x00000040, 0x0000000e,
1240 0x03001062, 0x001010f2, 0x00000000, 0x03000065, 0x001020f2, 0x00000000, 0x05000036, 0x001020f2,
1241 0x00000000, 0x00101e46, 0x00000000, 0x0100003e,
1244 D3D10_VIEWPORT tmp_viewport[D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE];
1245 ID3D10ShaderResourceView *tmp_srv[D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT];
1246 ID3D10ShaderResourceView *srv[D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT];
1247 ID3D10RenderTargetView *tmp_rtv[D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT];
1248 RECT tmp_rect[D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE];
1249 ID3D10SamplerState *tmp_sampler[D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT];
1250 ID3D10RenderTargetView *rtv[D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT];
1251 ID3D10Texture2D *rt_texture[D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT];
1252 ID3D10Buffer *cb[D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT];
1253 ID3D10Buffer *tmp_buffer[D3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT];
1254 ID3D10SamplerState *sampler[D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT];
1255 ID3D10Buffer *buffer[D3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT];
1256 unsigned int offset[D3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT];
1257 unsigned int stride[D3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT];
1258 ID3D10Buffer *so_buffer[D3D10_SO_BUFFER_SLOT_COUNT];
1259 ID3D10InputLayout *tmp_input_layout, *input_layout;
1260 ID3D10DepthStencilState *tmp_ds_state, *ds_state;
1261 ID3D10BlendState *tmp_blend_state, *blend_state;
1262 ID3D10RasterizerState *tmp_rs_state, *rs_state;
1263 ID3D10Predicate *tmp_predicate, *predicate;
1264 D3D10_SHADER_RESOURCE_VIEW_DESC srv_desc;
1265 ID3D10DepthStencilView *tmp_dsv, *dsv;
1266 D3D10_PRIMITIVE_TOPOLOGY topology;
1267 D3D10_TEXTURE2D_DESC texture_desc;
1268 ID3D10GeometryShader *tmp_gs, *gs;
1269 D3D10_DEPTH_STENCIL_DESC ds_desc;
1270 ID3D10VertexShader *tmp_vs, *vs;
1271 D3D10_SAMPLER_DESC sampler_desc;
1272 D3D10_QUERY_DESC predicate_desc;
1273 ID3D10PixelShader *tmp_ps, *ps;
1274 D3D10_RASTERIZER_DESC rs_desc;
1275 D3D10_BUFFER_DESC buffer_desc;
1276 D3D10_BLEND_DESC blend_desc;
1277 ID3D10Texture2D *ds_texture;
1278 unsigned int sample_mask;
1279 unsigned int stencil_ref;
1280 unsigned int count, i;
1281 float blend_factor[4];
1282 ID3D10Device *device;
1283 BOOL predicate_value;
1284 DXGI_FORMAT format;
1285 ULONG refcount;
1286 HRESULT hr;
1288 if (!(device = create_device()))
1290 skip("Failed to create device, skipping tests.\n");
1291 return;
1294 buffer_desc.ByteWidth = 1024;
1295 buffer_desc.Usage = D3D10_USAGE_DEFAULT;
1296 buffer_desc.BindFlags = D3D10_BIND_CONSTANT_BUFFER;
1297 buffer_desc.CPUAccessFlags = 0;
1298 buffer_desc.MiscFlags = 0;
1300 for (i = 0; i < D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT; ++i)
1302 hr = ID3D10Device_CreateBuffer(device, &buffer_desc, NULL, &cb[i]);
1303 ok(SUCCEEDED(hr), "Failed to create buffer, hr %#x.\n", hr);
1306 buffer_desc.BindFlags = D3D10_BIND_VERTEX_BUFFER | D3D10_BIND_INDEX_BUFFER | D3D10_BIND_SHADER_RESOURCE;
1308 for (i = 0; i < D3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT; ++i)
1310 hr = ID3D10Device_CreateBuffer(device, &buffer_desc, NULL, &buffer[i]);
1311 ok(SUCCEEDED(hr), "Failed to create buffer, hr %#x.\n", hr);
1313 stride[i] = (i + 1) * 4;
1314 offset[i] = (i + 1) * 16;
1317 buffer_desc.BindFlags = D3D10_BIND_STREAM_OUTPUT;
1319 for (i = 0; i < D3D10_SO_BUFFER_SLOT_COUNT; ++i)
1321 hr = ID3D10Device_CreateBuffer(device, &buffer_desc, NULL, &so_buffer[i]);
1322 ok(SUCCEEDED(hr), "Failed to create buffer, hr %#x.\n", hr);
1325 srv_desc.Format = DXGI_FORMAT_R32G32B32A32_FLOAT;
1326 srv_desc.ViewDimension = D3D10_SRV_DIMENSION_BUFFER;
1327 U(srv_desc).Buffer.ElementOffset = 0;
1328 U(srv_desc).Buffer.ElementWidth = 64;
1330 for (i = 0; i < D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT; ++i)
1332 hr = ID3D10Device_CreateShaderResourceView(device,
1333 (ID3D10Resource *)buffer[i % D3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT], &srv_desc, &srv[i]);
1334 ok(SUCCEEDED(hr), "Failed to create shader resource view, hr %#x.\n", hr);
1337 sampler_desc.Filter = D3D10_FILTER_MIN_MAG_MIP_LINEAR;
1338 sampler_desc.AddressU = D3D10_TEXTURE_ADDRESS_CLAMP;
1339 sampler_desc.AddressV = D3D10_TEXTURE_ADDRESS_CLAMP;
1340 sampler_desc.AddressW = D3D10_TEXTURE_ADDRESS_CLAMP;
1341 sampler_desc.MipLODBias = 0.0f;
1342 sampler_desc.MaxAnisotropy = 16;
1343 sampler_desc.ComparisonFunc = D3D10_COMPARISON_NEVER;
1344 sampler_desc.BorderColor[0] = 0.0f;
1345 sampler_desc.BorderColor[1] = 0.0f;
1346 sampler_desc.BorderColor[2] = 0.0f;
1347 sampler_desc.BorderColor[3] = 0.0f;
1348 sampler_desc.MinLOD = 0.0f;
1349 sampler_desc.MaxLOD = 16.0f;
1351 for (i = 0; i < D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT; ++i)
1353 sampler_desc.MinLOD = (float)i;
1355 hr = ID3D10Device_CreateSamplerState(device, &sampler_desc, &sampler[i]);
1356 ok(SUCCEEDED(hr), "Failed to create sampler state, hr %#x.\n", hr);
1359 hr = ID3D10Device_CreateVertexShader(device, simple_vs, sizeof(simple_vs), &vs);
1360 ok(SUCCEEDED(hr), "Failed to create vertex shader, hr %#x.\n", hr);
1362 hr = ID3D10Device_CreateGeometryShader(device, simple_gs, sizeof(simple_gs), &gs);
1363 ok(SUCCEEDED(hr), "Failed to create geometry shader, hr %#x.\n", hr);
1365 hr = ID3D10Device_CreatePixelShader(device, simple_ps, sizeof(simple_ps), &ps);
1366 ok(SUCCEEDED(hr), "Failed to create pixel shader, hr %#x.\n", hr);
1368 hr = ID3D10Device_CreateInputLayout(device, layout_desc, ARRAY_SIZE(layout_desc), simple_vs,
1369 sizeof(simple_vs), &input_layout);
1370 ok(SUCCEEDED(hr), "Failed to create input layout, hr %#x.\n", hr);
1372 blend_desc.AlphaToCoverageEnable = FALSE;
1373 blend_desc.BlendEnable[0] = FALSE;
1374 blend_desc.BlendEnable[1] = FALSE;
1375 blend_desc.BlendEnable[2] = FALSE;
1376 blend_desc.BlendEnable[3] = FALSE;
1377 blend_desc.BlendEnable[4] = FALSE;
1378 blend_desc.BlendEnable[5] = FALSE;
1379 blend_desc.BlendEnable[6] = FALSE;
1380 blend_desc.BlendEnable[7] = FALSE;
1381 blend_desc.SrcBlend = D3D10_BLEND_ONE;
1382 blend_desc.DestBlend = D3D10_BLEND_ZERO;
1383 blend_desc.BlendOp = D3D10_BLEND_OP_ADD;
1384 blend_desc.SrcBlendAlpha = D3D10_BLEND_ONE;
1385 blend_desc.DestBlendAlpha = D3D10_BLEND_ZERO;
1386 blend_desc.BlendOpAlpha = D3D10_BLEND_OP_ADD;
1387 blend_desc.RenderTargetWriteMask[0] = D3D10_COLOR_WRITE_ENABLE_ALL;
1388 blend_desc.RenderTargetWriteMask[1] = D3D10_COLOR_WRITE_ENABLE_ALL;
1389 blend_desc.RenderTargetWriteMask[2] = D3D10_COLOR_WRITE_ENABLE_ALL;
1390 blend_desc.RenderTargetWriteMask[3] = D3D10_COLOR_WRITE_ENABLE_ALL;
1391 blend_desc.RenderTargetWriteMask[4] = D3D10_COLOR_WRITE_ENABLE_ALL;
1392 blend_desc.RenderTargetWriteMask[5] = D3D10_COLOR_WRITE_ENABLE_ALL;
1393 blend_desc.RenderTargetWriteMask[6] = D3D10_COLOR_WRITE_ENABLE_ALL;
1394 blend_desc.RenderTargetWriteMask[7] = D3D10_COLOR_WRITE_ENABLE_ALL;
1396 hr = ID3D10Device_CreateBlendState(device, &blend_desc, &blend_state);
1397 ok(SUCCEEDED(hr), "Failed to create blend state, hr %#x.\n", hr);
1399 ds_desc.DepthEnable = TRUE;
1400 ds_desc.DepthWriteMask = D3D10_DEPTH_WRITE_MASK_ALL;
1401 ds_desc.DepthFunc = D3D10_COMPARISON_LESS;
1402 ds_desc.StencilEnable = FALSE;
1403 ds_desc.StencilReadMask = D3D10_DEFAULT_STENCIL_READ_MASK;
1404 ds_desc.StencilWriteMask = D3D10_DEFAULT_STENCIL_WRITE_MASK;
1405 ds_desc.FrontFace.StencilFailOp = D3D10_STENCIL_OP_KEEP;
1406 ds_desc.FrontFace.StencilDepthFailOp = D3D10_STENCIL_OP_KEEP;
1407 ds_desc.FrontFace.StencilPassOp = D3D10_STENCIL_OP_KEEP;
1408 ds_desc.FrontFace.StencilFunc = D3D10_COMPARISON_ALWAYS;
1409 ds_desc.BackFace.StencilFailOp = D3D10_STENCIL_OP_KEEP;
1410 ds_desc.BackFace.StencilDepthFailOp = D3D10_STENCIL_OP_KEEP;
1411 ds_desc.BackFace.StencilPassOp = D3D10_STENCIL_OP_KEEP;
1412 ds_desc.BackFace.StencilFunc = D3D10_COMPARISON_ALWAYS;
1414 hr = ID3D10Device_CreateDepthStencilState(device, &ds_desc, &ds_state);
1415 ok(SUCCEEDED(hr), "Failed to create depthstencil state, hr %#x.\n", hr);
1417 texture_desc.Width = 512;
1418 texture_desc.Height = 512;
1419 texture_desc.MipLevels = 1;
1420 texture_desc.ArraySize = 1;
1421 texture_desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
1422 texture_desc.SampleDesc.Count = 1;
1423 texture_desc.SampleDesc.Quality = 0;
1424 texture_desc.Usage = D3D10_USAGE_DEFAULT;
1425 texture_desc.BindFlags = D3D10_BIND_RENDER_TARGET;
1426 texture_desc.CPUAccessFlags = 0;
1427 texture_desc.MiscFlags = 0;
1429 for (i = 0; i < D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT; ++i)
1431 hr = ID3D10Device_CreateTexture2D(device, &texture_desc, NULL, &rt_texture[i]);
1432 ok(SUCCEEDED(hr), "Failed to create texture, hr %#x.\n", hr);
1435 texture_desc.Format = DXGI_FORMAT_D24_UNORM_S8_UINT;
1436 texture_desc.BindFlags = D3D10_BIND_DEPTH_STENCIL;
1438 hr = ID3D10Device_CreateTexture2D(device, &texture_desc, NULL, &ds_texture);
1439 ok(SUCCEEDED(hr), "Failed to create texture, hr %#x.\n", hr);
1441 for (i = 0; i < D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT; ++i)
1443 hr = ID3D10Device_CreateRenderTargetView(device, (ID3D10Resource *)rt_texture[i], NULL, &rtv[i]);
1444 ok(SUCCEEDED(hr), "Failed to create rendertarget view, hr %#x.\n", hr);
1447 hr = ID3D10Device_CreateDepthStencilView(device, (ID3D10Resource *)ds_texture, NULL, &dsv);
1448 ok(SUCCEEDED(hr), "Failed to create depthstencil view, hr %#x.\n", hr);
1450 for (i = 0; i < D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE; ++i)
1452 SetRect(&tmp_rect[i], i, i * 2, i + 1, (i + 1) * 2);
1454 tmp_viewport[i].TopLeftX = i * 3;
1455 tmp_viewport[i].TopLeftY = i * 4;
1456 tmp_viewport[i].Width = 3;
1457 tmp_viewport[i].Height = 4;
1458 tmp_viewport[i].MinDepth = i * 0.01f;
1459 tmp_viewport[i].MaxDepth = (i + 1) * 0.01f;
1462 rs_desc.FillMode = D3D10_FILL_SOLID;
1463 rs_desc.CullMode = D3D10_CULL_BACK;
1464 rs_desc.FrontCounterClockwise = FALSE;
1465 rs_desc.DepthBias = 0;
1466 rs_desc.DepthBiasClamp = 0.0f;
1467 rs_desc.SlopeScaledDepthBias = 0.0f;
1468 rs_desc.DepthClipEnable = TRUE;
1469 rs_desc.ScissorEnable = FALSE;
1470 rs_desc.MultisampleEnable = FALSE;
1471 rs_desc.AntialiasedLineEnable = FALSE;
1473 hr = ID3D10Device_CreateRasterizerState(device, &rs_desc, &rs_state);
1474 ok(SUCCEEDED(hr), "Failed to create rasterizer state, hr %#x.\n", hr);
1476 predicate_desc.Query = D3D10_QUERY_OCCLUSION_PREDICATE;
1477 predicate_desc.MiscFlags = 0;
1479 hr = ID3D10Device_CreatePredicate(device, &predicate_desc, &predicate);
1480 ok(SUCCEEDED(hr), "Failed to create predicate, hr %#x.\n", hr);
1482 ID3D10Device_VSSetConstantBuffers(device, 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT, cb);
1483 ID3D10Device_VSSetShaderResources(device, 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT, srv);
1484 ID3D10Device_VSSetSamplers(device, 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT, sampler);
1485 ID3D10Device_VSSetShader(device, vs);
1487 ID3D10Device_GSSetConstantBuffers(device, 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT, cb);
1488 ID3D10Device_GSSetShaderResources(device, 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT, srv);
1489 ID3D10Device_GSSetSamplers(device, 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT, sampler);
1490 ID3D10Device_GSSetShader(device, gs);
1492 ID3D10Device_PSSetConstantBuffers(device, 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT, cb);
1493 ID3D10Device_PSSetShaderResources(device, 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT, srv);
1494 ID3D10Device_PSSetSamplers(device, 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT, sampler);
1495 ID3D10Device_PSSetShader(device, ps);
1497 ID3D10Device_IASetVertexBuffers(device, 0, D3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT, buffer, stride, offset);
1498 ID3D10Device_IASetIndexBuffer(device, buffer[0], DXGI_FORMAT_R32_UINT, offset[0]);
1499 ID3D10Device_IASetInputLayout(device, input_layout);
1500 ID3D10Device_IASetPrimitiveTopology(device, D3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
1502 blend_factor[0] = 0.1f;
1503 blend_factor[1] = 0.2f;
1504 blend_factor[2] = 0.3f;
1505 blend_factor[3] = 0.4f;
1506 ID3D10Device_OMSetBlendState(device, blend_state, blend_factor, 0xff00ff00);
1507 ID3D10Device_OMSetDepthStencilState(device, ds_state, 3);
1508 ID3D10Device_OMSetRenderTargets(device, D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT, rtv, dsv);
1510 ID3D10Device_RSSetScissorRects(device, D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE, tmp_rect);
1511 ID3D10Device_RSSetViewports(device, D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE, tmp_viewport);
1512 ID3D10Device_RSSetState(device, rs_state);
1514 ID3D10Device_SOSetTargets(device, D3D10_SO_BUFFER_SLOT_COUNT, so_buffer, offset);
1516 ID3D10Device_SetPredication(device, predicate, TRUE);
1518 hr = D3DX10UnsetAllDeviceObjects(device);
1519 ok(SUCCEEDED(hr), "D3DX10UnsetAllDeviceObjects() failed, %#x.\n", hr);
1521 ID3D10Device_VSGetConstantBuffers(device, 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT, tmp_buffer);
1522 for (i = 0; i < D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT; ++i)
1524 ok(!tmp_buffer[i], "Got unexpected constant buffer %p in slot %u.\n", tmp_buffer[i], i);
1526 ID3D10Device_VSGetShaderResources(device, 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT, tmp_srv);
1527 for (i = 0; i < D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT; ++i)
1529 ok(!tmp_srv[i], "Got unexpected shader resource view %p in slot %u.\n", tmp_srv[i], i);
1531 ID3D10Device_VSGetSamplers(device, 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT, tmp_sampler);
1532 for (i = 0; i < D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT; ++i)
1534 ok(!tmp_sampler[i], "Got unexpected sampler %p in slot %u.\n", tmp_sampler[i], i);
1536 ID3D10Device_VSGetShader(device, &tmp_vs);
1537 ok(!tmp_vs, "Got unexpected vertex shader %p.\n", tmp_vs);
1539 ID3D10Device_GSGetConstantBuffers(device, 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT, tmp_buffer);
1540 for (i = 0; i < D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT; ++i)
1542 ok(!tmp_buffer[i], "Got unexpected constant buffer %p in slot %u.\n", tmp_buffer[i], i);
1544 ID3D10Device_GSGetShaderResources(device, 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT, tmp_srv);
1545 for (i = 0; i < D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT; ++i)
1547 ok(!tmp_srv[i], "Got unexpected shader resource view %p in slot %u.\n", tmp_srv[i], i);
1549 ID3D10Device_GSGetSamplers(device, 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT, tmp_sampler);
1550 for (i = 0; i < D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT; ++i)
1552 ok(!tmp_sampler[i], "Got unexpected sampler %p in slot %u.\n", tmp_sampler[i], i);
1554 ID3D10Device_GSGetShader(device, &tmp_gs);
1555 ok(!tmp_gs, "Got unexpected geometry shader %p.\n", tmp_gs);
1557 ID3D10Device_PSGetConstantBuffers(device, 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT, tmp_buffer);
1558 for (i = 0; i < D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT; ++i)
1560 ok(!tmp_buffer[i], "Got unexpected constant buffer %p in slot %u.\n", tmp_buffer[i], i);
1562 ID3D10Device_PSGetShaderResources(device, 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT, tmp_srv);
1563 for (i = 0; i < D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT; ++i)
1565 ok(!tmp_srv[i], "Got unexpected shader resource view %p in slot %u.\n", tmp_srv[i], i);
1567 ID3D10Device_PSGetSamplers(device, 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT, tmp_sampler);
1568 for (i = 0; i < D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT; ++i)
1570 ok(!tmp_sampler[i], "Got unexpected sampler %p in slot %u.\n", tmp_sampler[i], i);
1572 ID3D10Device_PSGetShader(device, &tmp_ps);
1573 ok(!tmp_ps, "Got unexpected pixel shader %p.\n", tmp_ps);
1575 ID3D10Device_IAGetVertexBuffers(device, 0, D3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT, tmp_buffer, stride, offset);
1576 for (i = 0; i < D3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT; ++i)
1578 ok(!tmp_buffer[i], "Got unexpected vertex buffer %p in slot %u.\n", tmp_buffer[i], i);
1579 ok(!stride[i], "Got unexpected stride %u in slot %u.\n", stride[i], i);
1580 ok(!offset[i], "Got unexpected offset %u in slot %u.\n", offset[i], i);
1582 ID3D10Device_IAGetIndexBuffer(device, tmp_buffer, &format, offset);
1583 ok(!tmp_buffer[0], "Got unexpected index buffer %p.\n", tmp_buffer[0]);
1584 ok(format == DXGI_FORMAT_R32_UINT, "Got unexpected index buffer format %#x.\n", format);
1585 ok(!offset[0], "Got unexpected index buffer offset %u.\n", offset[0]);
1586 ID3D10Device_IAGetInputLayout(device, &tmp_input_layout);
1587 ok(!tmp_input_layout, "Got unexpected input layout %p.\n", tmp_input_layout);
1588 ID3D10Device_IAGetPrimitiveTopology(device, &topology);
1589 ok(topology == D3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP, "Got unexpected primitive topology %#x.\n", topology);
1591 ID3D10Device_OMGetBlendState(device, &tmp_blend_state, blend_factor, &sample_mask);
1592 ok(!tmp_blend_state, "Got unexpected blend state %p.\n", tmp_blend_state);
1593 ok(blend_factor[0] == 0.0f && blend_factor[1] == 0.0f
1594 && blend_factor[2] == 0.0f && blend_factor[3] == 0.0f,
1595 "Got unexpected blend factor {%.8e, %.8e, %.8e, %.8e}.\n",
1596 blend_factor[0], blend_factor[1], blend_factor[2], blend_factor[3]);
1597 ok(sample_mask == 0, "Got unexpected sample mask %#x.\n", sample_mask);
1598 ID3D10Device_OMGetDepthStencilState(device, &tmp_ds_state, &stencil_ref);
1599 ok(!tmp_ds_state, "Got unexpected depth stencil state %p.\n", tmp_ds_state);
1600 ok(!stencil_ref, "Got unexpected stencil ref %u.\n", stencil_ref);
1601 ID3D10Device_OMGetRenderTargets(device, D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT, tmp_rtv, &tmp_dsv);
1602 for (i = 0; i < D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT; ++i)
1604 ok(!tmp_rtv[i], "Got unexpected render target view %p in slot %u.\n", tmp_rtv[i], i);
1606 ok(!tmp_dsv, "Got unexpected depth stencil view %p.\n", tmp_dsv);
1608 ID3D10Device_RSGetScissorRects(device, &count, NULL);
1609 ok(count == D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE,
1610 "Got unexpected scissor rect count %u.\n", count);
1611 memset(tmp_rect, 0x55, sizeof(tmp_rect));
1612 count = D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE;
1613 ID3D10Device_RSGetScissorRects(device, &count, tmp_rect);
1614 for (i = 0; i < D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE; ++i)
1616 ok(tmp_rect[i].left == i
1617 && tmp_rect[i].top == i * 2
1618 && tmp_rect[i].right == i + 1
1619 && tmp_rect[i].bottom == (i + 1) * 2,
1620 "Got unexpected scissor rect %s in slot %u.\n",
1621 wine_dbgstr_rect(&tmp_rect[i]), i);
1623 ID3D10Device_RSGetViewports(device, &count, NULL);
1624 ok(count == D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE,
1625 "Got unexpected viewport count %u.\n", count);
1626 memset(tmp_viewport, 0x55, sizeof(tmp_viewport));
1627 count = D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE;
1628 ID3D10Device_RSGetViewports(device, &count, tmp_viewport);
1629 for (i = 0; i < D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE; ++i)
1631 ok(tmp_viewport[i].TopLeftX == i * 3
1632 && tmp_viewport[i].TopLeftY == i * 4
1633 && tmp_viewport[i].Width == 3
1634 && tmp_viewport[i].Height == 4
1635 && compare_float(tmp_viewport[i].MinDepth, i * 0.01f, 16)
1636 && compare_float(tmp_viewport[i].MaxDepth, (i + 1) * 0.01f, 16),
1637 "Got unexpected viewport {%d, %d, %u, %u, %.8e, %.8e} in slot %u.\n",
1638 tmp_viewport[i].TopLeftX, tmp_viewport[i].TopLeftY, tmp_viewport[i].Width,
1639 tmp_viewport[i].Height, tmp_viewport[i].MinDepth, tmp_viewport[i].MaxDepth, i);
1641 ID3D10Device_RSGetState(device, &tmp_rs_state);
1642 ok(!tmp_rs_state, "Got unexpected rasterizer state %p.\n", tmp_rs_state);
1644 ID3D10Device_SOGetTargets(device, D3D10_SO_BUFFER_SLOT_COUNT, tmp_buffer, offset);
1645 for (i = 0; i < D3D10_SO_BUFFER_SLOT_COUNT; ++i)
1647 ok(!tmp_buffer[i], "Got unexpected stream output %p in slot %u.\n", tmp_buffer[i], i);
1648 ok(offset[i] == ~0u, "Got unexpected stream output offset %u in slot %u.\n", offset[i], i);
1651 ID3D10Device_GetPredication(device, &tmp_predicate, &predicate_value);
1652 ok(!tmp_predicate, "Got unexpected predicate %p.\n", tmp_predicate);
1653 ok(!predicate_value, "Got unexpected predicate value %#x.\n", predicate_value);
1655 ID3D10Predicate_Release(predicate);
1656 ID3D10RasterizerState_Release(rs_state);
1657 ID3D10DepthStencilView_Release(dsv);
1658 ID3D10Texture2D_Release(ds_texture);
1660 for (i = 0; i < D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT; ++i)
1662 ID3D10RenderTargetView_Release(rtv[i]);
1663 ID3D10Texture2D_Release(rt_texture[i]);
1666 ID3D10DepthStencilState_Release(ds_state);
1667 ID3D10BlendState_Release(blend_state);
1668 ID3D10InputLayout_Release(input_layout);
1669 ID3D10VertexShader_Release(vs);
1670 ID3D10GeometryShader_Release(gs);
1671 ID3D10PixelShader_Release(ps);
1673 for (i = 0; i < D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT; ++i)
1675 ID3D10SamplerState_Release(sampler[i]);
1678 for (i = 0; i < D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT; ++i)
1680 ID3D10ShaderResourceView_Release(srv[i]);
1683 for (i = 0; i < D3D10_SO_BUFFER_SLOT_COUNT; ++i)
1685 ID3D10Buffer_Release(so_buffer[i]);
1688 for (i = 0; i < D3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT; ++i)
1690 ID3D10Buffer_Release(buffer[i]);
1693 for (i = 0; i < D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT; ++i)
1695 ID3D10Buffer_Release(cb[i]);
1698 refcount = ID3D10Device_Release(device);
1699 ok(!refcount, "Device has %u references left.\n", refcount);
1702 static void test_D3DX10CreateAsyncMemoryLoader(void)
1704 ID3DX10DataLoader *loader;
1705 SIZE_T size;
1706 DWORD data;
1707 HRESULT hr;
1708 void *ptr;
1710 hr = D3DX10CreateAsyncMemoryLoader(NULL, 0, NULL);
1711 ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
1713 hr = D3DX10CreateAsyncMemoryLoader(NULL, 0, &loader);
1714 ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
1716 hr = D3DX10CreateAsyncMemoryLoader(&data, 0, &loader);
1717 ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
1719 size = 100;
1720 hr = ID3DX10DataLoader_Decompress(loader, &ptr, &size);
1721 ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
1722 ok(ptr == &data, "Got data pointer %p, original %p.\n", ptr, &data);
1723 ok(!size, "Got unexpected data size.\n");
1725 /* Load() is no-op. */
1726 hr = ID3DX10DataLoader_Load(loader);
1727 ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
1729 hr = ID3DX10DataLoader_Destroy(loader);
1730 ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
1732 data = 0;
1733 hr = D3DX10CreateAsyncMemoryLoader(&data, sizeof(data), &loader);
1734 ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
1736 /* Load() is no-op. */
1737 hr = ID3DX10DataLoader_Load(loader);
1738 ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
1740 hr = ID3DX10DataLoader_Decompress(loader, &ptr, &size);
1741 ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
1742 ok(ptr == &data, "Got data pointer %p, original %p.\n", ptr, &data);
1743 ok(size == sizeof(data), "Got unexpected data size.\n");
1745 hr = ID3DX10DataLoader_Destroy(loader);
1746 ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
1749 static void test_D3DX10CreateAsyncFileLoader(void)
1751 static const WCHAR test_filename[] = L"asyncloader.data";
1752 static const char test_data1[] = "test data";
1753 static const char test_data2[] = "more test data";
1754 ID3DX10DataLoader *loader;
1755 WCHAR path[MAX_PATH];
1756 SIZE_T size;
1757 HRESULT hr;
1758 void *ptr;
1759 BOOL ret;
1761 hr = D3DX10CreateAsyncFileLoaderA(NULL, NULL);
1762 ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
1764 hr = D3DX10CreateAsyncFileLoaderA(NULL, &loader);
1765 ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
1767 hr = D3DX10CreateAsyncFileLoaderA("nonexistentfilename", &loader);
1768 ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
1770 hr = ID3DX10DataLoader_Decompress(loader, &ptr, &size);
1771 ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
1773 hr = ID3DX10DataLoader_Load(loader);
1774 ok(hr == D3D10_ERROR_FILE_NOT_FOUND, "Got unexpected hr %#x.\n", hr);
1776 hr = ID3DX10DataLoader_Decompress(loader, &ptr, &size);
1777 ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
1779 hr = ID3DX10DataLoader_Destroy(loader);
1780 ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
1782 /* Test file sharing using dummy empty file. */
1783 create_file(test_filename, test_data1, sizeof(test_data1), path);
1785 hr = D3DX10CreateAsyncFileLoaderW(path, &loader);
1786 ok(SUCCEEDED(hr), "Failed to create file loader, hr %#x.\n", hr);
1788 ret = delete_file(test_filename);
1789 ok(ret, "DeleteFile() failed, ret %d, error %d.\n", ret, GetLastError());
1791 /* File was removed before Load(). */
1792 hr = ID3DX10DataLoader_Load(loader);
1793 ok(hr == D3D10_ERROR_FILE_NOT_FOUND, "Load() returned unexpected result, hr %#x.\n", hr);
1795 /* Create it again. */
1796 create_file(test_filename, test_data1, sizeof(test_data1), NULL);
1797 hr = ID3DX10DataLoader_Load(loader);
1798 ok(SUCCEEDED(hr), "Load() failed, hr %#x.\n", hr);
1800 /* Already loaded. */
1801 hr = ID3DX10DataLoader_Load(loader);
1802 ok(SUCCEEDED(hr), "Load() failed, hr %#x.\n", hr);
1804 ret = delete_file(test_filename);
1805 ok(ret, "DeleteFile() failed, ret %d, error %d.\n", ret, GetLastError());
1807 /* Already loaded, file removed. */
1808 hr = ID3DX10DataLoader_Load(loader);
1809 ok(hr == D3D10_ERROR_FILE_NOT_FOUND, "Load() returned unexpected result, hr %#x.\n", hr);
1811 /* Decompress still works. */
1812 ptr = NULL;
1813 hr = ID3DX10DataLoader_Decompress(loader, &ptr, &size);
1814 ok(SUCCEEDED(hr), "Decompress() failed, hr %#x.\n", hr);
1815 ok(ptr != NULL, "Got unexpected ptr %p.\n", ptr);
1816 ok(size == sizeof(test_data1), "Got unexpected decompressed size.\n");
1817 if (size == sizeof(test_data1))
1818 ok(!memcmp(ptr, test_data1, size), "Got unexpected file data.\n");
1820 /* Create it again, with different data. */
1821 create_file(test_filename, test_data2, sizeof(test_data2), NULL);
1823 hr = ID3DX10DataLoader_Load(loader);
1824 ok(SUCCEEDED(hr), "Load() failed, hr %#x.\n", hr);
1826 ptr = NULL;
1827 hr = ID3DX10DataLoader_Decompress(loader, &ptr, &size);
1828 ok(SUCCEEDED(hr), "Decompress() failed, hr %#x.\n", hr);
1829 ok(ptr != NULL, "Got unexpected ptr %p.\n", ptr);
1830 ok(size == sizeof(test_data2), "Got unexpected decompressed size.\n");
1831 if (size == sizeof(test_data2))
1832 ok(!memcmp(ptr, test_data2, size), "Got unexpected file data.\n");
1834 hr = ID3DX10DataLoader_Destroy(loader);
1835 ok(SUCCEEDED(hr), "Destroy() failed, hr %#x.\n", hr);
1837 ret = delete_file(test_filename);
1838 ok(ret, "DeleteFile() failed, ret %d, error %d.\n", ret, GetLastError());
1841 static void test_D3DX10CreateAsyncResourceLoader(void)
1843 ID3DX10DataLoader *loader;
1844 HRESULT hr;
1846 hr = D3DX10CreateAsyncResourceLoaderA(NULL, NULL, NULL);
1847 ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
1849 hr = D3DX10CreateAsyncResourceLoaderA(NULL, NULL, &loader);
1850 ok(hr == D3DX10_ERR_INVALID_DATA, "Got unexpected hr %#x.\n", hr);
1852 hr = D3DX10CreateAsyncResourceLoaderA(NULL, "noname", &loader);
1853 ok(hr == D3DX10_ERR_INVALID_DATA, "Got unexpected hr %#x.\n", hr);
1855 hr = D3DX10CreateAsyncResourceLoaderW(NULL, NULL, NULL);
1856 ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
1858 hr = D3DX10CreateAsyncResourceLoaderW(NULL, NULL, &loader);
1859 ok(hr == D3DX10_ERR_INVALID_DATA, "Got unexpected hr %#x.\n", hr);
1861 hr = D3DX10CreateAsyncResourceLoaderW(NULL, L"noname", &loader);
1862 ok(hr == D3DX10_ERR_INVALID_DATA, "Got unexpected hr %#x.\n", hr);
1865 static void test_get_image_info(void)
1867 static const WCHAR test_resource_name[] = L"resource.data";
1868 static const WCHAR test_filename[] = L"image.data";
1869 D3DX10_IMAGE_INFO image_info;
1870 HMODULE resource_module;
1871 WCHAR path[MAX_PATH];
1872 unsigned int i;
1873 DWORD dword;
1874 HRESULT hr;
1876 CoInitialize(NULL);
1878 hr = D3DX10GetImageInfoFromMemory(test_image[0].data, 0, NULL, &image_info, NULL);
1879 ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
1880 hr = D3DX10GetImageInfoFromMemory(NULL, test_image[0].size, NULL, &image_info, NULL);
1881 ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
1882 hr = D3DX10GetImageInfoFromMemory(&dword, sizeof(dword), NULL, &image_info, NULL);
1883 ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
1885 for (i = 0; i < ARRAY_SIZE(test_image); ++i)
1887 winetest_push_context("Test %u", i);
1889 hr = D3DX10GetImageInfoFromMemory(test_image[i].data, test_image[i].size, NULL, &image_info, NULL);
1890 ok(hr == S_OK || (hr == E_FAIL && test_image[i].expected_info.ImageFileFormat == D3DX10_IFF_WMP),
1891 "Got unexpected hr %#x.\n", hr);
1892 if (hr == S_OK)
1893 check_image_info(&image_info, test_image + i, __LINE__);
1895 winetest_pop_context();
1898 hr = D3DX10GetImageInfoFromFileW(NULL, NULL, &image_info, NULL);
1899 ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
1900 hr = D3DX10GetImageInfoFromFileW(L"deadbeaf", NULL, &image_info, NULL);
1901 ok(hr == D3D10_ERROR_FILE_NOT_FOUND, "Got unexpected hr %#x.\n", hr);
1902 hr = D3DX10GetImageInfoFromFileA(NULL, NULL, &image_info, NULL);
1903 ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
1904 hr = D3DX10GetImageInfoFromFileA("deadbeaf", NULL, &image_info, NULL);
1905 ok(hr == D3D10_ERROR_FILE_NOT_FOUND, "Got unexpected hr %#x.\n", hr);
1907 for (i = 0; i < ARRAY_SIZE(test_image); ++i)
1909 winetest_push_context("Test %u", i);
1910 create_file(test_filename, test_image[i].data, test_image[i].size, path);
1912 hr = D3DX10GetImageInfoFromFileW(path, NULL, &image_info, NULL);
1913 ok(hr == S_OK || (hr == E_FAIL && test_image[i].expected_info.ImageFileFormat == D3DX10_IFF_WMP),
1914 "Got unexpected hr %#x.\n", hr);
1915 if (hr == S_OK)
1916 check_image_info(&image_info, test_image + i, __LINE__);
1918 hr = D3DX10GetImageInfoFromFileA(get_str_a(path), NULL, &image_info, NULL);
1919 ok(hr == S_OK || (hr == E_FAIL && test_image[i].expected_info.ImageFileFormat == D3DX10_IFF_WMP),
1920 "Got unexpected hr %#x.\n", hr);
1921 if (hr == S_OK)
1922 check_image_info(&image_info, test_image + i, __LINE__);
1924 delete_file(test_filename);
1925 winetest_pop_context();
1929 /* D3DX10GetImageInfoFromResource tests */
1931 hr = D3DX10GetImageInfoFromResourceW(NULL, NULL, NULL, &image_info, NULL);
1932 ok(hr == D3DX10_ERR_INVALID_DATA, "Got unexpected hr %#x.\n", hr);
1933 hr = D3DX10GetImageInfoFromResourceW(NULL, L"deadbeaf", NULL, &image_info, NULL);
1934 ok(hr == D3DX10_ERR_INVALID_DATA, "Got unexpected hr %#x.\n", hr);
1935 hr = D3DX10GetImageInfoFromResourceA(NULL, NULL, NULL, &image_info, NULL);
1936 ok(hr == D3DX10_ERR_INVALID_DATA, "Got unexpected hr %#x.\n", hr);
1937 hr = D3DX10GetImageInfoFromResourceA(NULL, "deadbeaf", NULL, &image_info, NULL);
1938 ok(hr == D3DX10_ERR_INVALID_DATA, "Got unexpected hr %#x.\n", hr);
1940 for (i = 0; i < ARRAY_SIZE(test_image); ++i)
1942 winetest_push_context("Test %u", i);
1943 resource_module = create_resource_module(test_resource_name, test_image[i].data, test_image[i].size);
1945 hr = D3DX10GetImageInfoFromResourceW(resource_module, test_resource_name, NULL, &image_info, NULL);
1946 ok(hr == S_OK || (hr == E_FAIL && test_image[i].expected_info.ImageFileFormat == D3DX10_IFF_WMP),
1947 "Got unexpected hr %#x.\n", hr);
1948 if (hr == S_OK)
1949 check_image_info(&image_info, test_image + i, __LINE__);
1951 hr = D3DX10GetImageInfoFromResourceA(resource_module, get_str_a(test_resource_name), NULL, &image_info, NULL);
1952 ok(hr == S_OK || (hr == E_FAIL && test_image[i].expected_info.ImageFileFormat == D3DX10_IFF_WMP),
1953 "Got unexpected hr %#x.\n", hr);
1954 if (hr == S_OK)
1955 check_image_info(&image_info, test_image + i, __LINE__);
1957 delete_resource_module(test_resource_name, resource_module);
1958 winetest_pop_context();
1961 CoUninitialize();
1964 static void test_create_texture(void)
1966 ID3D10Resource *resource;
1967 ID3D10Device *device;
1968 unsigned int i;
1969 HRESULT hr;
1971 device = create_device();
1972 if (!device)
1974 skip("Failed to create device, skipping tests.\n");
1975 return;
1978 CoInitialize(NULL);
1980 /* D3DX10CreateTextureFromMemory tests */
1982 resource = (ID3D10Resource *)0xdeadbeef;
1983 hr = D3DX10CreateTextureFromMemory(device, NULL, 0, NULL, NULL, &resource, NULL);
1984 ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
1985 ok(resource == (ID3D10Resource *)0xdeadbeef, "Got unexpected resource %p.\n", resource);
1987 resource = (ID3D10Resource *)0xdeadbeef;
1988 hr = D3DX10CreateTextureFromMemory(device, NULL, sizeof(test_bmp_1bpp), NULL, NULL, &resource, NULL);
1989 ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
1990 ok(resource == (ID3D10Resource *)0xdeadbeef, "Got unexpected resource %p.\n", resource);
1992 resource = (ID3D10Resource *)0xdeadbeef;
1993 hr = D3DX10CreateTextureFromMemory(device, test_bmp_1bpp, 0, NULL, NULL, &resource, NULL);
1994 ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
1995 ok(resource == (ID3D10Resource *)0xdeadbeef, "Got unexpected resource %p.\n", resource);
1997 resource = (ID3D10Resource *)0xdeadbeef;
1998 hr = D3DX10CreateTextureFromMemory(device, test_bmp_1bpp, sizeof(test_bmp_1bpp) - 1, NULL, NULL, &resource, NULL);
1999 ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
2000 ok(resource == (ID3D10Resource *)0xdeadbeef, "Got unexpected resource %p.\n", resource);
2002 for (i = 0; i < ARRAY_SIZE(test_image); ++i)
2004 winetest_push_context("Test %u", i);
2006 hr = D3DX10CreateTextureFromMemory(device, test_image[i].data, test_image[i].size, NULL, NULL, &resource, NULL);
2007 todo_wine_if(test_image[i].expected_info.MiscFlags & D3D10_RESOURCE_MISC_TEXTURECUBE)
2008 ok(hr == S_OK || (hr == E_FAIL && test_image[i].expected_info.ImageFileFormat == D3DX10_IFF_WMP),
2009 "Got unexpected hr %#x.\n", hr);
2010 if (hr == S_OK)
2012 check_resource_info(resource, test_image + i, __LINE__);
2013 check_resource_data(resource, test_image + i, __LINE__);
2014 ID3D10Resource_Release(resource);
2017 winetest_pop_context();
2020 CoUninitialize();
2022 ID3D10Device_Release(device);
2025 START_TEST(d3dx10)
2027 test_D3DX10UnsetAllDeviceObjects();
2028 test_D3DX10CreateAsyncMemoryLoader();
2029 test_D3DX10CreateAsyncFileLoader();
2030 test_D3DX10CreateAsyncResourceLoader();
2031 test_get_image_info();
2032 test_create_texture();