kodi
DirectXGraphics.h
1 /*
2  * Copyright (C) 2005-2018 Team Kodi
3  * This file is part of Kodi - https://kodi.tv
4  *
5  * SPDX-License-Identifier: GPL-2.0-or-later
6  * See LICENSES/README.md for more information.
7  */
8 
9 #pragma once
10 
11 class CTexture;
12 
13 #include "gui3d.h"
14 
15 #include <memory>
16 
17 LPVOID XPhysicalAlloc(SIZE_T s, DWORD ulPhysicalAddress, DWORD ulAlignment, DWORD flProtect);
18 void XPhysicalFree(LPVOID lpAddress);
19 
20 // XPR header
21 struct XPR_HEADER
22 {
23  DWORD dwMagic;
24  DWORD dwTotalSize;
25  DWORD dwHeaderSize;
26 };
27 #define XPR_MAGIC_VALUE (('0' << 24) | ('R' << 16) | ('P' << 8) | 'X')
28 
29 typedef enum _XB_D3DFORMAT
30 {
31  XB_D3DFMT_UNKNOWN = 0xFFFFFFFF,
32 
33  /* Swizzled formats */
34 
35  XB_D3DFMT_A8R8G8B8 = 0x00000006,
36  XB_D3DFMT_X8R8G8B8 = 0x00000007,
37  XB_D3DFMT_R5G6B5 = 0x00000005,
38  XB_D3DFMT_R6G5B5 = 0x00000027,
39  XB_D3DFMT_X1R5G5B5 = 0x00000003,
40  XB_D3DFMT_A1R5G5B5 = 0x00000002,
41  XB_D3DFMT_A4R4G4B4 = 0x00000004,
42  XB_D3DFMT_A8 = 0x00000019,
43  XB_D3DFMT_A8B8G8R8 = 0x0000003A,
44  XB_D3DFMT_B8G8R8A8 = 0x0000003B,
45  XB_D3DFMT_R4G4B4A4 = 0x00000039,
46  XB_D3DFMT_R5G5B5A1 = 0x00000038,
47  XB_D3DFMT_R8G8B8A8 = 0x0000003C,
48  XB_D3DFMT_R8B8 = 0x00000029,
49  XB_D3DFMT_G8B8 = 0x00000028,
50 
51  XB_D3DFMT_P8 = 0x0000000B,
52 
53  XB_D3DFMT_L8 = 0x00000000,
54  XB_D3DFMT_A8L8 = 0x0000001A,
55  XB_D3DFMT_AL8 = 0x00000001,
56  XB_D3DFMT_L16 = 0x00000032,
57 
58  XB_D3DFMT_V8U8 = 0x00000028,
59  XB_D3DFMT_L6V5U5 = 0x00000027,
60  XB_D3DFMT_X8L8V8U8 = 0x00000007,
61  XB_D3DFMT_Q8W8V8U8 = 0x0000003A,
62  XB_D3DFMT_V16U16 = 0x00000033,
63 
64  XB_D3DFMT_D16_LOCKABLE = 0x0000002C,
65  XB_D3DFMT_D16 = 0x0000002C,
66  XB_D3DFMT_D24S8 = 0x0000002A,
67  XB_D3DFMT_F16 = 0x0000002D,
68  XB_D3DFMT_F24S8 = 0x0000002B,
69 
70  /* YUV formats */
71 
72  XB_D3DFMT_YUY2 = 0x00000024,
73  XB_D3DFMT_UYVY = 0x00000025,
74 
75  /* Compressed formats */
76 
77  XB_D3DFMT_DXT1 = 0x0000000C,
78  XB_D3DFMT_DXT2 = 0x0000000E,
79  XB_D3DFMT_DXT3 = 0x0000000E,
80  XB_D3DFMT_DXT4 = 0x0000000F,
81  XB_D3DFMT_DXT5 = 0x0000000F,
82 
83  /* Linear formats */
84 
85  XB_D3DFMT_LIN_A1R5G5B5 = 0x00000010,
86  XB_D3DFMT_LIN_A4R4G4B4 = 0x0000001D,
87  XB_D3DFMT_LIN_A8 = 0x0000001F,
88  XB_D3DFMT_LIN_A8B8G8R8 = 0x0000003F,
89  XB_D3DFMT_LIN_A8R8G8B8 = 0x00000012,
90  XB_D3DFMT_LIN_B8G8R8A8 = 0x00000040,
91  XB_D3DFMT_LIN_G8B8 = 0x00000017,
92  XB_D3DFMT_LIN_R4G4B4A4 = 0x0000003E,
93  XB_D3DFMT_LIN_R5G5B5A1 = 0x0000003D,
94  XB_D3DFMT_LIN_R5G6B5 = 0x00000011,
95  XB_D3DFMT_LIN_R6G5B5 = 0x00000037,
96  XB_D3DFMT_LIN_R8B8 = 0x00000016,
97  XB_D3DFMT_LIN_R8G8B8A8 = 0x00000041,
98  XB_D3DFMT_LIN_X1R5G5B5 = 0x0000001C,
99  XB_D3DFMT_LIN_X8R8G8B8 = 0x0000001E,
100 
101  XB_D3DFMT_LIN_A8L8 = 0x00000020,
102  XB_D3DFMT_LIN_AL8 = 0x0000001B,
103  XB_D3DFMT_LIN_L16 = 0x00000035,
104  XB_D3DFMT_LIN_L8 = 0x00000013,
105 
106  XB_D3DFMT_LIN_V16U16 = 0x00000036,
107  XB_D3DFMT_LIN_V8U8 = 0x00000017,
108  XB_D3DFMT_LIN_L6V5U5 = 0x00000037,
109  XB_D3DFMT_LIN_X8L8V8U8 = 0x0000001E,
110  XB_D3DFMT_LIN_Q8W8V8U8 = 0x00000012,
111 
112  XB_D3DFMT_LIN_D24S8 = 0x0000002E,
113  XB_D3DFMT_LIN_F24S8 = 0x0000002F,
114  XB_D3DFMT_LIN_D16 = 0x00000030,
115  XB_D3DFMT_LIN_F16 = 0x00000031,
116 
117  XB_D3DFMT_VERTEXDATA = 100,
118  XB_D3DFMT_INDEX16 = 101,
119 
120  XB_D3DFMT_FORCE_DWORD =0x7fffffff
121 } XB_D3DFORMAT;
122 
123 DWORD GetD3DFormat(XB_D3DFORMAT format);
124 DWORD BytesPerPixelFromFormat(XB_D3DFORMAT format);
125 bool IsPalettedFormat(XB_D3DFORMAT format);
126 void ParseTextureHeader(D3DTexture *tex, XB_D3DFORMAT &fmt, DWORD &width, DWORD &height, DWORD &pitch, DWORD &offset);
127 bool IsSwizzledFormat(XB_D3DFORMAT format);
128 
129 #ifndef TARGET_POSIX
130 typedef unsigned __int8 uint8_t;
131 typedef __int16 int16_t;
132 #endif
133 
134 #pragma pack(push, 2)
135 typedef struct {
136  uint8_t id[2]; // offset
137  uint32_t filesize; // 2
138  uint32_t reserved; // 6
139  uint32_t headersize; // 10
140  uint32_t infoSize; // 14
141  uint32_t width; // 18
142  uint32_t height; // 22
143  uint16_t biPlanes; // 26
144  uint16_t bits; // 28
145  uint32_t biCompression; // 30
146  uint32_t biSizeImage; // 34
147  uint32_t biXPelsPerMeter; // 38
148  uint32_t biYPelsPerMeter; // 42
149  uint32_t biClrUsed; // 46
150  uint32_t biClrImportant; // 50
151 } BMPHEAD;
152 #pragma pack(pop)
153 
154 void Unswizzle(const void *src, unsigned int depth, unsigned int width, unsigned int height, void *dest);
155 void DXT1toARGB(const void *src, void *dest, unsigned int destWidth);
156 void DXT4toARGB(const void *src, void *dest, unsigned int destWidth);
157 void ConvertDXT1(const void *src, unsigned int width, unsigned int height, void *dest);
158 void ConvertDXT4(const void *src, unsigned int width, unsigned int height, void *dest);
159 void GetTextureFromData(D3DTexture* pTex, void* texData, std::unique_ptr<CTexture>* ppTexture);
Definition: DirectXGraphics.h:135
Definition: DirectXGraphics.h:21
Base texture class, subclasses of which depend on the render spec (DX, GL etc.)
Definition: Texture.h:34
Definition: gui3d.h:23