5 using SiliconStudio.Paradox.Graphics;
7 namespace SiliconStudio.TextureConverter
24 int widthCount = width;
25 int heightCount = height;
27 int bpp = (int)GetBPP(fmt);
31 widthCount = Math.Max(1, (width + 3) / 4);
32 heightCount = Math.Max(1, (height + 3) / 4);
33 rowPitch = widthCount * bpp;
35 slicePitch = rowPitch * heightCount;
37 else if (fmt.IsPacked())
39 rowPitch = ((width + 1) >> 1) * 4;
41 slicePitch = rowPitch * height;
46 bpp = fmt.SizeInBits();
48 rowPitch = (width * bpp + 7) / 8;
49 slicePitch = rowPitch * height;
63 case PixelFormat.R32G32B32A32_Typeless:
64 case PixelFormat.R32G32B32A32_Float:
65 case PixelFormat.R32G32B32A32_UInt:
66 case PixelFormat.R32G32B32A32_SInt:
69 case PixelFormat.R32G32B32_Typeless:
70 case PixelFormat.R32G32B32_Float:
71 case PixelFormat.R32G32B32_UInt:
72 case PixelFormat.R32G32B32_SInt:
75 case PixelFormat.R16G16B16A16_Typeless:
76 case PixelFormat.R16G16B16A16_Float:
77 case PixelFormat.R16G16B16A16_UNorm:
78 case PixelFormat.R16G16B16A16_UInt:
79 case PixelFormat.R16G16B16A16_SNorm:
80 case PixelFormat.R16G16B16A16_SInt:
81 case PixelFormat.R32G32_Typeless:
82 case PixelFormat.R32G32_Float:
83 case PixelFormat.R32G32_UInt:
84 case PixelFormat.R32G32_SInt:
85 case PixelFormat.R32G8X24_Typeless:
86 case PixelFormat.D32_Float_S8X24_UInt:
87 case PixelFormat.R32_Float_X8X24_Typeless:
88 case PixelFormat.X32_Typeless_G8X24_UInt:
91 case PixelFormat.R10G10B10A2_Typeless:
92 case PixelFormat.R10G10B10A2_UNorm:
93 case PixelFormat.R10G10B10A2_UInt:
94 case PixelFormat.R11G11B10_Float:
95 case PixelFormat.R8G8B8A8_Typeless:
96 case PixelFormat.R8G8B8A8_UNorm:
97 case PixelFormat.R8G8B8A8_UNorm_SRgb:
98 case PixelFormat.R8G8B8A8_UInt:
99 case PixelFormat.R8G8B8A8_SNorm:
100 case PixelFormat.R8G8B8A8_SInt:
101 case PixelFormat.R16G16_Typeless:
102 case PixelFormat.R16G16_Float:
103 case PixelFormat.R16G16_UNorm:
104 case PixelFormat.R16G16_UInt:
105 case PixelFormat.R16G16_SNorm:
106 case PixelFormat.R16G16_SInt:
107 case PixelFormat.R32_Typeless:
108 case PixelFormat.D32_Float:
109 case PixelFormat.R32_Float:
110 case PixelFormat.R32_UInt:
111 case PixelFormat.R32_SInt:
112 case PixelFormat.R24G8_Typeless:
113 case PixelFormat.D24_UNorm_S8_UInt:
114 case PixelFormat.R24_UNorm_X8_Typeless:
115 case PixelFormat.X24_Typeless_G8_UInt:
116 case PixelFormat.R9G9B9E5_Sharedexp:
117 case PixelFormat.R8G8_B8G8_UNorm:
118 case PixelFormat.G8R8_G8B8_UNorm:
119 case PixelFormat.B8G8R8A8_UNorm:
120 case PixelFormat.B8G8R8X8_UNorm:
121 case PixelFormat.R10G10B10_Xr_Bias_A2_UNorm:
122 case PixelFormat.B8G8R8A8_Typeless:
123 case PixelFormat.B8G8R8A8_UNorm_SRgb:
124 case PixelFormat.B8G8R8X8_Typeless:
125 case PixelFormat.B8G8R8X8_UNorm_SRgb:
128 case PixelFormat.R8G8_Typeless:
129 case PixelFormat.R8G8_UNorm:
130 case PixelFormat.R8G8_UInt:
131 case PixelFormat.R8G8_SNorm:
132 case PixelFormat.R8G8_SInt:
133 case PixelFormat.R16_Typeless:
134 case PixelFormat.R16_Float:
135 case PixelFormat.D16_UNorm:
136 case PixelFormat.R16_UNorm:
137 case PixelFormat.R16_UInt:
138 case PixelFormat.R16_SNorm:
139 case PixelFormat.R16_SInt:
140 case PixelFormat.B5G6R5_UNorm:
141 case PixelFormat.B5G5R5A1_UNorm:
144 case PixelFormat.R8_Typeless:
145 case PixelFormat.R8_UNorm:
146 case PixelFormat.R8_UInt:
147 case PixelFormat.R8_SNorm:
148 case PixelFormat.R8_SInt:
149 case PixelFormat.A8_UNorm:
153 case PixelFormat.BC1_Typeless:
154 case PixelFormat.BC1_UNorm:
155 case PixelFormat.BC1_UNorm_SRgb:
156 case PixelFormat.BC4_Typeless:
157 case PixelFormat.BC4_UNorm:
158 case PixelFormat.BC4_SNorm:
162 case PixelFormat.BC2_Typeless:
163 case PixelFormat.BC2_UNorm:
164 case PixelFormat.BC2_UNorm_SRgb:
165 case PixelFormat.BC3_Typeless:
166 case PixelFormat.BC3_UNorm:
167 case PixelFormat.BC3_UNorm_SRgb:
168 case PixelFormat.BC5_Typeless:
169 case PixelFormat.BC5_UNorm:
170 case PixelFormat.BC5_SNorm:
171 case PixelFormat.BC6H_Typeless:
172 case PixelFormat.BC6H_Uf16:
173 case PixelFormat.BC6H_Sf16:
174 case PixelFormat.BC7_Typeless:
175 case PixelFormat.BC7_UNorm:
176 case PixelFormat.BC7_UNorm_SRgb:
180 case PixelFormat.PVRTC_2bpp_RGB:
182 case PixelFormat.PVRTC_2bpp_RGBA:
183 case PixelFormat.PVRTC_II_2bpp:
185 case PixelFormat.PVRTC_4bpp_RGB:
187 case PixelFormat.PVRTC_4bpp_RGBA:
188 case PixelFormat.PVRTC_II_4bpp:
192 case PixelFormat.ETC1:
193 case PixelFormat.ETC2_RGBA:
194 case PixelFormat.ETC2_RGB_A1:
195 case PixelFormat.EAC_R11_Unsigned:
196 case PixelFormat.EAC_R11_Signed:
197 case PixelFormat.EAC_RG11_Unsigned:
198 case PixelFormat.EAC_RG11_Signed:
200 case PixelFormat.ETC2_RGB:
204 case PixelFormat.ATC_RGB:
206 case PixelFormat.ATC_RGBA_Explicit:
207 case PixelFormat.ATC_RGBA_Interpolated:
210 case PixelFormat.R1_UNorm:
213 case PixelFormat.None:
229 return IsInBGRAOrder(format1) && IsInBGRAOrder(format2) || IsInRGBAOrder(format1) && IsInRGBAOrder(format2);
240 public static bool IsInRGBAOrder(
PixelFormat format)
244 case PixelFormat.R32G32B32A32_Typeless:
245 case PixelFormat.R32G32B32A32_Float:
246 case PixelFormat.R32G32B32A32_UInt:
247 case PixelFormat.R32G32B32A32_SInt:
248 case PixelFormat.R32G32B32_Typeless:
249 case PixelFormat.R32G32B32_Float:
250 case PixelFormat.R32G32B32_UInt:
251 case PixelFormat.R32G32B32_SInt:
252 case PixelFormat.R16G16B16A16_Typeless:
253 case PixelFormat.R16G16B16A16_Float:
254 case PixelFormat.R16G16B16A16_UNorm:
255 case PixelFormat.R16G16B16A16_UInt:
256 case PixelFormat.R16G16B16A16_SNorm:
257 case PixelFormat.R16G16B16A16_SInt:
258 case PixelFormat.R32G32_Typeless:
259 case PixelFormat.R32G32_Float:
260 case PixelFormat.R32G32_UInt:
261 case PixelFormat.R32G32_SInt:
262 case PixelFormat.R32G8X24_Typeless:
263 case PixelFormat.R10G10B10A2_Typeless:
264 case PixelFormat.R10G10B10A2_UNorm:
265 case PixelFormat.R10G10B10A2_UInt:
266 case PixelFormat.R11G11B10_Float:
267 case PixelFormat.R8G8B8A8_Typeless:
268 case PixelFormat.R8G8B8A8_UNorm:
269 case PixelFormat.R8G8B8A8_UNorm_SRgb:
270 case PixelFormat.R8G8B8A8_UInt:
271 case PixelFormat.R8G8B8A8_SNorm:
272 case PixelFormat.R8G8B8A8_SInt:
287 public static bool IsInBGRAOrder(
PixelFormat format)
291 case PixelFormat.B8G8R8A8_UNorm:
292 case PixelFormat.B8G8R8X8_UNorm:
293 case PixelFormat.B8G8R8A8_Typeless:
294 case PixelFormat.B8G8R8A8_UNorm_SRgb:
295 case PixelFormat.B8G8R8X8_Typeless:
296 case PixelFormat.B8G8R8X8_UNorm_SRgb:
314 case PixelFormat.BC1_Typeless:
315 case PixelFormat.BC1_UNorm:
316 case PixelFormat.BC1_UNorm_SRgb:
317 case PixelFormat.BC2_Typeless:
318 case PixelFormat.BC2_UNorm:
319 case PixelFormat.BC2_UNorm_SRgb:
320 case PixelFormat.BC3_Typeless:
321 case PixelFormat.BC3_UNorm:
322 case PixelFormat.BC3_UNorm_SRgb:
323 case PixelFormat.BC4_Typeless:
324 case PixelFormat.BC4_UNorm:
325 case PixelFormat.BC4_SNorm:
326 case PixelFormat.BC5_Typeless:
327 case PixelFormat.BC5_UNorm:
328 case PixelFormat.BC5_SNorm:
329 case PixelFormat.BC6H_Typeless:
330 case PixelFormat.BC6H_Uf16:
331 case PixelFormat.BC6H_Sf16:
332 case PixelFormat.BC7_Typeless:
333 case PixelFormat.BC7_UNorm:
334 case PixelFormat.BC7_UNorm_SRgb:
335 case PixelFormat.PVRTC_2bpp_RGB:
336 case PixelFormat.PVRTC_2bpp_RGBA:
337 case PixelFormat.PVRTC_4bpp_RGB:
338 case PixelFormat.PVRTC_4bpp_RGBA:
339 case PixelFormat.PVRTC_II_2bpp:
340 case PixelFormat.PVRTC_II_4bpp:
341 case PixelFormat.ETC1:
342 case PixelFormat.ETC2_RGB:
343 case PixelFormat.ETC2_RGBA:
344 case PixelFormat.ETC2_RGB_A1:
345 case PixelFormat.EAC_R11_Unsigned:
346 case PixelFormat.EAC_R11_Signed:
347 case PixelFormat.EAC_RG11_Unsigned:
348 case PixelFormat.EAC_RG11_Signed:
349 case PixelFormat.ATC_RGB:
350 case PixelFormat.ATC_RGBA_Explicit:
351 case PixelFormat.ATC_RGBA_Interpolated:
void ComputePitch(_In_ DXGI_FORMAT fmt, _In_ size_t width, _In_ size_t height, _Out_ size_t &rowPitch, _Out_ size_t &slicePitch, _In_ DWORD flags=CP_FLAGS_NONE)
_Use_decl_annotations_ bool IsCompressed(DXGI_FORMAT fmt)
_In_ size_t _In_ size_t _In_ DXGI_FORMAT format
PixelFormat
Defines various types of pixel formats.