d3dx9: Implement GetMaxNum* functions.
[wine.git] / dlls / dxgi / utils.c
blob92a049f15c0fee32f84bb93594d95f1f7a1aa8d4
1 /*
2 * Copyright 2008 Henri Verbeet 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
20 #include "config.h"
21 #include "wine/port.h"
23 #include "dxgi_private.h"
25 WINE_DEFAULT_DEBUG_CHANNEL(dxgi);
26 WINE_DECLARE_DEBUG_CHANNEL(winediag);
28 #define WINE_DXGI_TO_STR(x) case x: return #x
30 const char *debug_dxgi_format(DXGI_FORMAT format)
32 switch(format)
34 WINE_DXGI_TO_STR(DXGI_FORMAT_UNKNOWN);
35 WINE_DXGI_TO_STR(DXGI_FORMAT_R32G32B32A32_TYPELESS);
36 WINE_DXGI_TO_STR(DXGI_FORMAT_R32G32B32A32_FLOAT);
37 WINE_DXGI_TO_STR(DXGI_FORMAT_R32G32B32A32_UINT);
38 WINE_DXGI_TO_STR(DXGI_FORMAT_R32G32B32A32_SINT);
39 WINE_DXGI_TO_STR(DXGI_FORMAT_R32G32B32_TYPELESS);
40 WINE_DXGI_TO_STR(DXGI_FORMAT_R32G32B32_FLOAT);
41 WINE_DXGI_TO_STR(DXGI_FORMAT_R32G32B32_UINT);
42 WINE_DXGI_TO_STR(DXGI_FORMAT_R32G32B32_SINT);
43 WINE_DXGI_TO_STR(DXGI_FORMAT_R16G16B16A16_TYPELESS);
44 WINE_DXGI_TO_STR(DXGI_FORMAT_R16G16B16A16_FLOAT);
45 WINE_DXGI_TO_STR(DXGI_FORMAT_R16G16B16A16_UNORM);
46 WINE_DXGI_TO_STR(DXGI_FORMAT_R16G16B16A16_UINT);
47 WINE_DXGI_TO_STR(DXGI_FORMAT_R16G16B16A16_SNORM);
48 WINE_DXGI_TO_STR(DXGI_FORMAT_R16G16B16A16_SINT);
49 WINE_DXGI_TO_STR(DXGI_FORMAT_R32G32_TYPELESS);
50 WINE_DXGI_TO_STR(DXGI_FORMAT_R32G32_FLOAT);
51 WINE_DXGI_TO_STR(DXGI_FORMAT_R32G32_UINT);
52 WINE_DXGI_TO_STR(DXGI_FORMAT_R32G32_SINT);
53 WINE_DXGI_TO_STR(DXGI_FORMAT_R32G8X24_TYPELESS);
54 WINE_DXGI_TO_STR(DXGI_FORMAT_D32_FLOAT_S8X24_UINT);
55 WINE_DXGI_TO_STR(DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS);
56 WINE_DXGI_TO_STR(DXGI_FORMAT_X32_TYPELESS_G8X24_UINT);
57 WINE_DXGI_TO_STR(DXGI_FORMAT_R10G10B10A2_TYPELESS);
58 WINE_DXGI_TO_STR(DXGI_FORMAT_R10G10B10A2_UNORM);
59 WINE_DXGI_TO_STR(DXGI_FORMAT_R10G10B10A2_UINT);
60 WINE_DXGI_TO_STR(DXGI_FORMAT_R11G11B10_FLOAT);
61 WINE_DXGI_TO_STR(DXGI_FORMAT_R8G8B8A8_TYPELESS);
62 WINE_DXGI_TO_STR(DXGI_FORMAT_R8G8B8A8_UNORM);
63 WINE_DXGI_TO_STR(DXGI_FORMAT_R8G8B8A8_UNORM_SRGB);
64 WINE_DXGI_TO_STR(DXGI_FORMAT_R8G8B8A8_UINT);
65 WINE_DXGI_TO_STR(DXGI_FORMAT_R8G8B8A8_SNORM);
66 WINE_DXGI_TO_STR(DXGI_FORMAT_R8G8B8A8_SINT);
67 WINE_DXGI_TO_STR(DXGI_FORMAT_R16G16_TYPELESS);
68 WINE_DXGI_TO_STR(DXGI_FORMAT_R16G16_FLOAT);
69 WINE_DXGI_TO_STR(DXGI_FORMAT_R16G16_UNORM);
70 WINE_DXGI_TO_STR(DXGI_FORMAT_R16G16_UINT);
71 WINE_DXGI_TO_STR(DXGI_FORMAT_R16G16_SNORM);
72 WINE_DXGI_TO_STR(DXGI_FORMAT_R16G16_SINT);
73 WINE_DXGI_TO_STR(DXGI_FORMAT_R32_TYPELESS);
74 WINE_DXGI_TO_STR(DXGI_FORMAT_D32_FLOAT);
75 WINE_DXGI_TO_STR(DXGI_FORMAT_R32_FLOAT);
76 WINE_DXGI_TO_STR(DXGI_FORMAT_R32_UINT);
77 WINE_DXGI_TO_STR(DXGI_FORMAT_R32_SINT);
78 WINE_DXGI_TO_STR(DXGI_FORMAT_R24G8_TYPELESS);
79 WINE_DXGI_TO_STR(DXGI_FORMAT_D24_UNORM_S8_UINT);
80 WINE_DXGI_TO_STR(DXGI_FORMAT_R24_UNORM_X8_TYPELESS);
81 WINE_DXGI_TO_STR(DXGI_FORMAT_X24_TYPELESS_G8_UINT);
82 WINE_DXGI_TO_STR(DXGI_FORMAT_R8G8_TYPELESS);
83 WINE_DXGI_TO_STR(DXGI_FORMAT_R8G8_UNORM);
84 WINE_DXGI_TO_STR(DXGI_FORMAT_R8G8_UINT);
85 WINE_DXGI_TO_STR(DXGI_FORMAT_R8G8_SNORM);
86 WINE_DXGI_TO_STR(DXGI_FORMAT_R8G8_SINT);
87 WINE_DXGI_TO_STR(DXGI_FORMAT_R16_TYPELESS);
88 WINE_DXGI_TO_STR(DXGI_FORMAT_R16_FLOAT);
89 WINE_DXGI_TO_STR(DXGI_FORMAT_D16_UNORM);
90 WINE_DXGI_TO_STR(DXGI_FORMAT_R16_UNORM);
91 WINE_DXGI_TO_STR(DXGI_FORMAT_R16_UINT);
92 WINE_DXGI_TO_STR(DXGI_FORMAT_R16_SNORM);
93 WINE_DXGI_TO_STR(DXGI_FORMAT_R16_SINT);
94 WINE_DXGI_TO_STR(DXGI_FORMAT_R8_TYPELESS);
95 WINE_DXGI_TO_STR(DXGI_FORMAT_R8_UNORM);
96 WINE_DXGI_TO_STR(DXGI_FORMAT_R8_UINT);
97 WINE_DXGI_TO_STR(DXGI_FORMAT_R8_SNORM);
98 WINE_DXGI_TO_STR(DXGI_FORMAT_R8_SINT);
99 WINE_DXGI_TO_STR(DXGI_FORMAT_A8_UNORM);
100 WINE_DXGI_TO_STR(DXGI_FORMAT_R1_UNORM);
101 WINE_DXGI_TO_STR(DXGI_FORMAT_R9G9B9E5_SHAREDEXP);
102 WINE_DXGI_TO_STR(DXGI_FORMAT_R8G8_B8G8_UNORM);
103 WINE_DXGI_TO_STR(DXGI_FORMAT_G8R8_G8B8_UNORM);
104 WINE_DXGI_TO_STR(DXGI_FORMAT_BC1_TYPELESS);
105 WINE_DXGI_TO_STR(DXGI_FORMAT_BC1_UNORM);
106 WINE_DXGI_TO_STR(DXGI_FORMAT_BC1_UNORM_SRGB);
107 WINE_DXGI_TO_STR(DXGI_FORMAT_BC2_TYPELESS);
108 WINE_DXGI_TO_STR(DXGI_FORMAT_BC2_UNORM);
109 WINE_DXGI_TO_STR(DXGI_FORMAT_BC2_UNORM_SRGB);
110 WINE_DXGI_TO_STR(DXGI_FORMAT_BC3_TYPELESS);
111 WINE_DXGI_TO_STR(DXGI_FORMAT_BC3_UNORM);
112 WINE_DXGI_TO_STR(DXGI_FORMAT_BC3_UNORM_SRGB);
113 WINE_DXGI_TO_STR(DXGI_FORMAT_BC4_TYPELESS);
114 WINE_DXGI_TO_STR(DXGI_FORMAT_BC4_UNORM);
115 WINE_DXGI_TO_STR(DXGI_FORMAT_BC4_SNORM);
116 WINE_DXGI_TO_STR(DXGI_FORMAT_BC5_TYPELESS);
117 WINE_DXGI_TO_STR(DXGI_FORMAT_BC5_UNORM);
118 WINE_DXGI_TO_STR(DXGI_FORMAT_BC5_SNORM);
119 WINE_DXGI_TO_STR(DXGI_FORMAT_B5G6R5_UNORM);
120 WINE_DXGI_TO_STR(DXGI_FORMAT_B5G5R5A1_UNORM);
121 WINE_DXGI_TO_STR(DXGI_FORMAT_B8G8R8A8_UNORM);
122 WINE_DXGI_TO_STR(DXGI_FORMAT_B8G8R8X8_UNORM);
123 default:
124 FIXME("Unrecognized DXGI_FORMAT %#x\n", format);
125 return "unrecognized";
129 #undef WINE_DXGI_TO_STR
131 DXGI_FORMAT dxgi_format_from_wined3dformat(enum wined3d_format_id format)
133 switch(format)
135 case WINED3DFMT_UNKNOWN: return DXGI_FORMAT_UNKNOWN;
136 case WINED3DFMT_R32G32B32A32_TYPELESS: return DXGI_FORMAT_R32G32B32A32_TYPELESS;
137 case WINED3DFMT_R32G32B32A32_FLOAT: return DXGI_FORMAT_R32G32B32A32_FLOAT;
138 case WINED3DFMT_R32G32B32A32_UINT: return DXGI_FORMAT_R32G32B32A32_UINT;
139 case WINED3DFMT_R32G32B32A32_SINT: return DXGI_FORMAT_R32G32B32A32_SINT;
140 case WINED3DFMT_R32G32B32_TYPELESS: return DXGI_FORMAT_R32G32B32_TYPELESS;
141 case WINED3DFMT_R32G32B32_FLOAT: return DXGI_FORMAT_R32G32B32_FLOAT;
142 case WINED3DFMT_R32G32B32_UINT: return DXGI_FORMAT_R32G32B32_UINT;
143 case WINED3DFMT_R32G32B32_SINT: return DXGI_FORMAT_R32G32B32_SINT;
144 case WINED3DFMT_R16G16B16A16_TYPELESS: return DXGI_FORMAT_R16G16B16A16_TYPELESS;
145 case WINED3DFMT_R16G16B16A16_FLOAT: return DXGI_FORMAT_R16G16B16A16_FLOAT;
146 case WINED3DFMT_R16G16B16A16_UNORM: return DXGI_FORMAT_R16G16B16A16_UNORM;
147 case WINED3DFMT_R16G16B16A16_UINT: return DXGI_FORMAT_R16G16B16A16_UINT;
148 case WINED3DFMT_R16G16B16A16_SNORM: return DXGI_FORMAT_R16G16B16A16_SNORM;
149 case WINED3DFMT_R16G16B16A16_SINT: return DXGI_FORMAT_R16G16B16A16_SINT;
150 case WINED3DFMT_R32G32_TYPELESS: return DXGI_FORMAT_R32G32_TYPELESS;
151 case WINED3DFMT_R32G32_FLOAT: return DXGI_FORMAT_R32G32_FLOAT;
152 case WINED3DFMT_R32G32_UINT: return DXGI_FORMAT_R32G32_UINT;
153 case WINED3DFMT_R32G32_SINT: return DXGI_FORMAT_R32G32_SINT;
154 case WINED3DFMT_R32G8X24_TYPELESS: return DXGI_FORMAT_R32G8X24_TYPELESS;
155 case WINED3DFMT_D32_FLOAT_S8X24_UINT: return DXGI_FORMAT_D32_FLOAT_S8X24_UINT;
156 case WINED3DFMT_R32_FLOAT_X8X24_TYPELESS: return DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS;
157 case WINED3DFMT_X32_TYPELESS_G8X24_UINT: return DXGI_FORMAT_X32_TYPELESS_G8X24_UINT;
158 case WINED3DFMT_R10G10B10A2_TYPELESS: return DXGI_FORMAT_R10G10B10A2_TYPELESS;
159 case WINED3DFMT_R10G10B10A2_UNORM: return DXGI_FORMAT_R10G10B10A2_UNORM;
160 case WINED3DFMT_R10G10B10A2_UINT: return DXGI_FORMAT_R10G10B10A2_UINT;
161 case WINED3DFMT_R11G11B10_FLOAT: return DXGI_FORMAT_R11G11B10_FLOAT;
162 case WINED3DFMT_R8G8B8A8_TYPELESS: return DXGI_FORMAT_R8G8B8A8_TYPELESS;
163 case WINED3DFMT_R8G8B8A8_UNORM: return DXGI_FORMAT_R8G8B8A8_UNORM;
164 case WINED3DFMT_R8G8B8A8_UNORM_SRGB: return DXGI_FORMAT_R8G8B8A8_UNORM_SRGB;
165 case WINED3DFMT_R8G8B8A8_UINT: return DXGI_FORMAT_R8G8B8A8_UINT;
166 case WINED3DFMT_R8G8B8A8_SNORM: return DXGI_FORMAT_R8G8B8A8_SNORM;
167 case WINED3DFMT_R8G8B8A8_SINT: return DXGI_FORMAT_R8G8B8A8_SINT;
168 case WINED3DFMT_R16G16_TYPELESS: return DXGI_FORMAT_R16G16_TYPELESS;
169 case WINED3DFMT_R16G16_FLOAT: return DXGI_FORMAT_R16G16_FLOAT;
170 case WINED3DFMT_R16G16_UNORM: return DXGI_FORMAT_R16G16_UNORM;
171 case WINED3DFMT_R16G16_UINT: return DXGI_FORMAT_R16G16_UINT;
172 case WINED3DFMT_R16G16_SNORM: return DXGI_FORMAT_R16G16_SNORM;
173 case WINED3DFMT_R16G16_SINT: return DXGI_FORMAT_R16G16_SINT;
174 case WINED3DFMT_R32_TYPELESS: return DXGI_FORMAT_R32_TYPELESS;
175 case WINED3DFMT_D32_FLOAT: return DXGI_FORMAT_D32_FLOAT;
176 case WINED3DFMT_R32_FLOAT: return DXGI_FORMAT_R32_FLOAT;
177 case WINED3DFMT_R32_UINT: return DXGI_FORMAT_R32_UINT;
178 case WINED3DFMT_R32_SINT: return DXGI_FORMAT_R32_SINT;
179 case WINED3DFMT_R24G8_TYPELESS: return DXGI_FORMAT_R24G8_TYPELESS;
180 case WINED3DFMT_D24_UNORM_S8_UINT: return DXGI_FORMAT_D24_UNORM_S8_UINT;
181 case WINED3DFMT_R24_UNORM_X8_TYPELESS: return DXGI_FORMAT_R24_UNORM_X8_TYPELESS;
182 case WINED3DFMT_X24_TYPELESS_G8_UINT: return DXGI_FORMAT_X24_TYPELESS_G8_UINT;
183 case WINED3DFMT_R8G8_TYPELESS: return DXGI_FORMAT_R8G8_TYPELESS;
184 case WINED3DFMT_R8G8_UNORM: return DXGI_FORMAT_R8G8_UNORM;
185 case WINED3DFMT_R8G8_UINT: return DXGI_FORMAT_R8G8_UINT;
186 case WINED3DFMT_R8G8_SNORM: return DXGI_FORMAT_R8G8_SNORM;
187 case WINED3DFMT_R8G8_SINT: return DXGI_FORMAT_R8G8_SINT;
188 case WINED3DFMT_R16_TYPELESS: return DXGI_FORMAT_R16_TYPELESS;
189 case WINED3DFMT_R16_FLOAT: return DXGI_FORMAT_R16_FLOAT;
190 case WINED3DFMT_D16_UNORM: return DXGI_FORMAT_D16_UNORM;
191 case WINED3DFMT_R16_UNORM: return DXGI_FORMAT_R16_UNORM;
192 case WINED3DFMT_R16_UINT: return DXGI_FORMAT_R16_UINT;
193 case WINED3DFMT_R16_SNORM: return DXGI_FORMAT_R16_SNORM;
194 case WINED3DFMT_R16_SINT: return DXGI_FORMAT_R16_SINT;
195 case WINED3DFMT_R8_TYPELESS: return DXGI_FORMAT_R8_TYPELESS;
196 case WINED3DFMT_R8_UNORM: return DXGI_FORMAT_R8_UNORM;
197 case WINED3DFMT_R8_UINT: return DXGI_FORMAT_R8_UINT;
198 case WINED3DFMT_R8_SNORM: return DXGI_FORMAT_R8_SNORM;
199 case WINED3DFMT_R8_SINT: return DXGI_FORMAT_R8_SINT;
200 case WINED3DFMT_A8_UNORM: return DXGI_FORMAT_A8_UNORM;
201 case WINED3DFMT_R1_UNORM: return DXGI_FORMAT_R1_UNORM;
202 case WINED3DFMT_R9G9B9E5_SHAREDEXP: return DXGI_FORMAT_R9G9B9E5_SHAREDEXP;
203 case WINED3DFMT_R8G8_B8G8_UNORM: return DXGI_FORMAT_R8G8_B8G8_UNORM;
204 case WINED3DFMT_G8R8_G8B8_UNORM: return DXGI_FORMAT_G8R8_G8B8_UNORM;
205 case WINED3DFMT_BC1_TYPELESS: return DXGI_FORMAT_BC1_TYPELESS;
206 case WINED3DFMT_BC1_UNORM: return DXGI_FORMAT_BC1_UNORM;
207 case WINED3DFMT_BC1_UNORM_SRGB: return DXGI_FORMAT_BC1_UNORM_SRGB;
208 case WINED3DFMT_BC2_TYPELESS: return DXGI_FORMAT_BC2_TYPELESS;
209 case WINED3DFMT_BC2_UNORM: return DXGI_FORMAT_BC2_UNORM;
210 case WINED3DFMT_BC2_UNORM_SRGB: return DXGI_FORMAT_BC2_UNORM_SRGB;
211 case WINED3DFMT_BC3_TYPELESS: return DXGI_FORMAT_BC3_TYPELESS;
212 case WINED3DFMT_BC3_UNORM: return DXGI_FORMAT_BC3_UNORM;
213 case WINED3DFMT_BC3_UNORM_SRGB: return DXGI_FORMAT_BC3_UNORM_SRGB;
214 case WINED3DFMT_BC4_TYPELESS: return DXGI_FORMAT_BC4_TYPELESS;
215 case WINED3DFMT_BC4_UNORM: return DXGI_FORMAT_BC4_UNORM;
216 case WINED3DFMT_BC4_SNORM: return DXGI_FORMAT_BC4_SNORM;
217 case WINED3DFMT_BC5_TYPELESS: return DXGI_FORMAT_BC5_TYPELESS;
218 case WINED3DFMT_BC5_UNORM: return DXGI_FORMAT_BC5_UNORM;
219 case WINED3DFMT_BC5_SNORM: return DXGI_FORMAT_BC5_SNORM;
220 case WINED3DFMT_B5G6R5_UNORM: return DXGI_FORMAT_B5G6R5_UNORM;
221 case WINED3DFMT_B5G5R5A1_UNORM: return DXGI_FORMAT_B5G5R5A1_UNORM;
222 case WINED3DFMT_B8G8R8A8_UNORM: return DXGI_FORMAT_B8G8R8A8_UNORM;
223 case WINED3DFMT_B8G8R8X8_UNORM: return DXGI_FORMAT_B8G8R8X8_UNORM;
224 default:
225 FIXME("Unhandled wined3d format %#x.\n", format);
226 return DXGI_FORMAT_UNKNOWN;
230 enum wined3d_format_id wined3dformat_from_dxgi_format(DXGI_FORMAT format)
232 switch(format)
234 case DXGI_FORMAT_UNKNOWN: return WINED3DFMT_UNKNOWN;
235 case DXGI_FORMAT_R32G32B32A32_TYPELESS: return WINED3DFMT_R32G32B32A32_TYPELESS;
236 case DXGI_FORMAT_R32G32B32A32_FLOAT: return WINED3DFMT_R32G32B32A32_FLOAT;
237 case DXGI_FORMAT_R32G32B32A32_UINT: return WINED3DFMT_R32G32B32A32_UINT;
238 case DXGI_FORMAT_R32G32B32A32_SINT: return WINED3DFMT_R32G32B32A32_SINT;
239 case DXGI_FORMAT_R32G32B32_TYPELESS: return WINED3DFMT_R32G32B32_TYPELESS;
240 case DXGI_FORMAT_R32G32B32_FLOAT: return WINED3DFMT_R32G32B32_FLOAT;
241 case DXGI_FORMAT_R32G32B32_UINT: return WINED3DFMT_R32G32B32_UINT;
242 case DXGI_FORMAT_R32G32B32_SINT: return WINED3DFMT_R32G32B32_SINT;
243 case DXGI_FORMAT_R16G16B16A16_TYPELESS: return WINED3DFMT_R16G16B16A16_TYPELESS;
244 case DXGI_FORMAT_R16G16B16A16_FLOAT: return WINED3DFMT_R16G16B16A16_FLOAT;
245 case DXGI_FORMAT_R16G16B16A16_UNORM: return WINED3DFMT_R16G16B16A16_UNORM;
246 case DXGI_FORMAT_R16G16B16A16_UINT: return WINED3DFMT_R16G16B16A16_UINT;
247 case DXGI_FORMAT_R16G16B16A16_SNORM: return WINED3DFMT_R16G16B16A16_SNORM;
248 case DXGI_FORMAT_R16G16B16A16_SINT: return WINED3DFMT_R16G16B16A16_SINT;
249 case DXGI_FORMAT_R32G32_TYPELESS: return WINED3DFMT_R32G32_TYPELESS;
250 case DXGI_FORMAT_R32G32_FLOAT: return WINED3DFMT_R32G32_FLOAT;
251 case DXGI_FORMAT_R32G32_UINT: return WINED3DFMT_R32G32_UINT;
252 case DXGI_FORMAT_R32G32_SINT: return WINED3DFMT_R32G32_SINT;
253 case DXGI_FORMAT_R32G8X24_TYPELESS: return WINED3DFMT_R32G8X24_TYPELESS;
254 case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: return WINED3DFMT_D32_FLOAT_S8X24_UINT;
255 case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: return WINED3DFMT_R32_FLOAT_X8X24_TYPELESS;
256 case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: return WINED3DFMT_X32_TYPELESS_G8X24_UINT;
257 case DXGI_FORMAT_R10G10B10A2_TYPELESS: return WINED3DFMT_R10G10B10A2_TYPELESS;
258 case DXGI_FORMAT_R10G10B10A2_UNORM: return WINED3DFMT_R10G10B10A2_UNORM;
259 case DXGI_FORMAT_R10G10B10A2_UINT: return WINED3DFMT_R10G10B10A2_UINT;
260 case DXGI_FORMAT_R11G11B10_FLOAT: return WINED3DFMT_R11G11B10_FLOAT;
261 case DXGI_FORMAT_R8G8B8A8_TYPELESS: return WINED3DFMT_R8G8B8A8_TYPELESS;
262 case DXGI_FORMAT_R8G8B8A8_UNORM: return WINED3DFMT_R8G8B8A8_UNORM;
263 case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: return WINED3DFMT_R8G8B8A8_UNORM_SRGB;
264 case DXGI_FORMAT_R8G8B8A8_UINT: return WINED3DFMT_R8G8B8A8_UINT;
265 case DXGI_FORMAT_R8G8B8A8_SNORM: return WINED3DFMT_R8G8B8A8_SNORM;
266 case DXGI_FORMAT_R8G8B8A8_SINT: return WINED3DFMT_R8G8B8A8_SINT;
267 case DXGI_FORMAT_R16G16_TYPELESS: return WINED3DFMT_R16G16_TYPELESS;
268 case DXGI_FORMAT_R16G16_FLOAT: return WINED3DFMT_R16G16_FLOAT;
269 case DXGI_FORMAT_R16G16_UNORM: return WINED3DFMT_R16G16_UNORM;
270 case DXGI_FORMAT_R16G16_UINT: return WINED3DFMT_R16G16_UINT;
271 case DXGI_FORMAT_R16G16_SNORM: return WINED3DFMT_R16G16_SNORM;
272 case DXGI_FORMAT_R16G16_SINT: return WINED3DFMT_R16G16_SINT;
273 case DXGI_FORMAT_R32_TYPELESS: return WINED3DFMT_R32_TYPELESS;
274 case DXGI_FORMAT_D32_FLOAT: return WINED3DFMT_D32_FLOAT;
275 case DXGI_FORMAT_R32_FLOAT: return WINED3DFMT_R32_FLOAT;
276 case DXGI_FORMAT_R32_UINT: return WINED3DFMT_R32_UINT;
277 case DXGI_FORMAT_R32_SINT: return WINED3DFMT_R32_SINT;
278 case DXGI_FORMAT_R24G8_TYPELESS: return WINED3DFMT_R24G8_TYPELESS;
279 case DXGI_FORMAT_D24_UNORM_S8_UINT: return WINED3DFMT_D24_UNORM_S8_UINT;
280 case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: return WINED3DFMT_R24_UNORM_X8_TYPELESS;
281 case DXGI_FORMAT_X24_TYPELESS_G8_UINT: return WINED3DFMT_X24_TYPELESS_G8_UINT;
282 case DXGI_FORMAT_R8G8_TYPELESS: return WINED3DFMT_R8G8_TYPELESS;
283 case DXGI_FORMAT_R8G8_UNORM: return WINED3DFMT_R8G8_UNORM;
284 case DXGI_FORMAT_R8G8_UINT: return WINED3DFMT_R8G8_UINT;
285 case DXGI_FORMAT_R8G8_SNORM: return WINED3DFMT_R8G8_SNORM;
286 case DXGI_FORMAT_R8G8_SINT: return WINED3DFMT_R8G8_SINT;
287 case DXGI_FORMAT_R16_TYPELESS: return WINED3DFMT_R16_TYPELESS;
288 case DXGI_FORMAT_R16_FLOAT: return WINED3DFMT_R16_FLOAT;
289 case DXGI_FORMAT_D16_UNORM: return WINED3DFMT_D16_UNORM;
290 case DXGI_FORMAT_R16_UNORM: return WINED3DFMT_R16_UNORM;
291 case DXGI_FORMAT_R16_UINT: return WINED3DFMT_R16_UINT;
292 case DXGI_FORMAT_R16_SNORM: return WINED3DFMT_R16_SNORM;
293 case DXGI_FORMAT_R16_SINT: return WINED3DFMT_R16_SINT;
294 case DXGI_FORMAT_R8_TYPELESS: return WINED3DFMT_R8_TYPELESS;
295 case DXGI_FORMAT_R8_UNORM: return WINED3DFMT_R8_UNORM;
296 case DXGI_FORMAT_R8_UINT: return WINED3DFMT_R8_UINT;
297 case DXGI_FORMAT_R8_SNORM: return WINED3DFMT_R8_SNORM;
298 case DXGI_FORMAT_R8_SINT: return WINED3DFMT_R8_SINT;
299 case DXGI_FORMAT_A8_UNORM: return WINED3DFMT_A8_UNORM;
300 case DXGI_FORMAT_R1_UNORM: return WINED3DFMT_R1_UNORM;
301 case DXGI_FORMAT_R9G9B9E5_SHAREDEXP: return WINED3DFMT_R9G9B9E5_SHAREDEXP;
302 case DXGI_FORMAT_R8G8_B8G8_UNORM: return WINED3DFMT_R8G8_B8G8_UNORM;
303 case DXGI_FORMAT_G8R8_G8B8_UNORM: return WINED3DFMT_G8R8_G8B8_UNORM;
304 case DXGI_FORMAT_BC1_TYPELESS: return WINED3DFMT_BC1_TYPELESS;
305 case DXGI_FORMAT_BC1_UNORM: return WINED3DFMT_BC1_UNORM;
306 case DXGI_FORMAT_BC1_UNORM_SRGB: return WINED3DFMT_BC1_UNORM_SRGB;
307 case DXGI_FORMAT_BC2_TYPELESS: return WINED3DFMT_BC2_TYPELESS;
308 case DXGI_FORMAT_BC2_UNORM: return WINED3DFMT_BC2_UNORM;
309 case DXGI_FORMAT_BC2_UNORM_SRGB: return WINED3DFMT_BC2_UNORM_SRGB;
310 case DXGI_FORMAT_BC3_TYPELESS: return WINED3DFMT_BC3_TYPELESS;
311 case DXGI_FORMAT_BC3_UNORM: return WINED3DFMT_BC3_UNORM;
312 case DXGI_FORMAT_BC3_UNORM_SRGB: return WINED3DFMT_BC3_UNORM_SRGB;
313 case DXGI_FORMAT_BC4_TYPELESS: return WINED3DFMT_BC4_TYPELESS;
314 case DXGI_FORMAT_BC4_UNORM: return WINED3DFMT_BC4_UNORM;
315 case DXGI_FORMAT_BC4_SNORM: return WINED3DFMT_BC4_SNORM;
316 case DXGI_FORMAT_BC5_TYPELESS: return WINED3DFMT_BC5_TYPELESS;
317 case DXGI_FORMAT_BC5_UNORM: return WINED3DFMT_BC5_UNORM;
318 case DXGI_FORMAT_BC5_SNORM: return WINED3DFMT_BC5_SNORM;
319 case DXGI_FORMAT_B5G6R5_UNORM: return WINED3DFMT_B5G6R5_UNORM;
320 case DXGI_FORMAT_B5G5R5A1_UNORM: return WINED3DFMT_B5G5R5A1_UNORM;
321 case DXGI_FORMAT_B8G8R8A8_UNORM: return WINED3DFMT_B8G8R8A8_UNORM;
322 case DXGI_FORMAT_B8G8R8X8_UNORM: return WINED3DFMT_B8G8R8X8_UNORM;
323 default:
324 FIXME("Unhandled DXGI_FORMAT %#x\n", format);
325 return WINED3DFMT_UNKNOWN;
329 void dxgi_sample_desc_from_wined3d(DXGI_SAMPLE_DESC *desc,
330 enum wined3d_multisample_type wined3d_type, unsigned int wined3d_quality)
332 desc->Count = wined3d_type == WINED3D_MULTISAMPLE_NONE ? 1 : wined3d_type;
333 desc->Quality = wined3d_quality;
336 void wined3d_sample_desc_from_dxgi(enum wined3d_multisample_type *wined3d_type,
337 unsigned int *wined3d_quality, const DXGI_SAMPLE_DESC *dxgi_desc)
339 if (dxgi_desc->Count > 1)
341 *wined3d_type = dxgi_desc->Count;
342 *wined3d_quality = dxgi_desc->Quality;
344 else
346 *wined3d_type = WINED3D_MULTISAMPLE_NONE;
347 *wined3d_quality = 0;
351 HRESULT dxgi_get_private_data(struct wined3d_private_store *store,
352 REFGUID guid, UINT *data_size, void *data)
354 const struct wined3d_private_data *stored_data;
355 DWORD size_in;
356 HRESULT hr;
358 if (!data_size)
359 return E_INVALIDARG;
361 wined3d_mutex_lock();
362 if (!(stored_data = wined3d_private_store_get_private_data(store, guid)))
364 hr = DXGI_ERROR_NOT_FOUND;
365 *data_size = 0;
366 goto done;
369 size_in = *data_size;
370 *data_size = stored_data->size;
371 if (!data)
373 hr = S_OK;
374 goto done;
376 if (size_in < stored_data->size)
378 hr = DXGI_ERROR_MORE_DATA;
379 goto done;
382 if (stored_data->flags & WINED3DSPD_IUNKNOWN)
383 IUnknown_AddRef(stored_data->content.object);
384 memcpy(data, stored_data->content.data, stored_data->size);
385 hr = S_OK;
387 done:
388 wined3d_mutex_unlock();
390 return hr;
393 HRESULT dxgi_set_private_data(struct wined3d_private_store *store,
394 REFGUID guid, UINT data_size, const void *data)
396 struct wined3d_private_data *entry;
397 HRESULT hr;
399 if (!data)
401 wined3d_mutex_lock();
402 if (!(entry = wined3d_private_store_get_private_data(store, guid)))
404 wined3d_mutex_unlock();
405 return S_FALSE;
408 wined3d_private_store_free_private_data(store, entry);
409 wined3d_mutex_unlock();
411 return S_OK;
414 wined3d_mutex_lock();
415 hr = wined3d_private_store_set_private_data(store, guid, data, data_size, 0);
416 wined3d_mutex_unlock();
418 return hr;
421 HRESULT dxgi_set_private_data_interface(struct wined3d_private_store *store,
422 REFGUID guid, const IUnknown *object)
424 HRESULT hr;
426 if (!object)
427 return dxgi_set_private_data(store, guid, sizeof(object), &object);
429 wined3d_mutex_lock();
430 hr = wined3d_private_store_set_private_data(store,
431 guid, object, sizeof(object), WINED3DSPD_IUNKNOWN);
432 wined3d_mutex_unlock();
434 return hr;
437 HRESULT dxgi_check_d3d10_support(struct dxgi_factory *factory, struct dxgi_adapter *adapter)
439 WINED3DCAPS caps;
440 HRESULT hr;
442 FIXME("Ignoring adapter type.\n");
444 wined3d_mutex_lock();
445 hr = wined3d_get_device_caps(factory->wined3d, adapter->ordinal, WINED3D_DEVICE_TYPE_HAL, &caps);
446 if (FAILED(hr) || caps.VertexShaderVersion < 4 || caps.PixelShaderVersion < 4)
448 FIXME_(winediag)("Direct3D 10 is not supported on this GPU with the current shader backend.\n");
449 if (SUCCEEDED(hr))
450 hr = E_FAIL;
451 wined3d_mutex_unlock();
452 return hr;
454 wined3d_mutex_unlock();
456 return S_OK;