- Add shortcut for Paint
[reactos.git] / reactos / dll / directx / wine / wined3d / wined3d_private_types.h
1 /*
2 * Direct3D wine internal header: D3D equivalent types
3 *
4 * Copyright 2002-2003 Jason Edmeades
5 * Copyright 2002-2003 Raphael Junqueira
6 * Copyright 2005 Oliver Stieber
7 *
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
12 *
13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with this library; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 */
22
23 #ifndef __WINE_WINED3D_TYPES_INTERNAL_H
24 #define __WINE_WINED3D_TYPES_INTERNAL_H
25
26 /* WineD3D pixel format flags */
27 #define WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING 0x1
28 #define WINED3DFMT_FLAG_FILTERING 0x2
29 #define WINED3DFMT_FLAG_DEPTH 0x4
30 #define WINED3DFMT_FLAG_STENCIL 0x8
31 #define WINED3DFMT_FLAG_RENDERTARGET 0x10
32 #define WINED3DFMT_FLAG_FOURCC 0x20
33
34 /** DCL usage masks **/
35 #define WINED3DSP_DCL_USAGE_SHIFT 0
36 #define WINED3DSP_DCL_USAGE_MASK 0x0000000f
37 #define WINED3DSP_DCL_USAGEINDEX_SHIFT 16
38 #define WINED3DSP_DCL_USAGEINDEX_MASK 0x000f0000
39
40 /** DCL sampler texture type **/
41 #define WINED3DSP_TEXTURETYPE_SHIFT 27
42 #define WINED3DSP_TEXTURETYPE_MASK 0x78000000
43
44 typedef enum _WINED3DSAMPLER_TEXTURE_TYPE {
45 WINED3DSTT_UNKNOWN = 0 << WINED3DSP_TEXTURETYPE_SHIFT,
46 WINED3DSTT_1D = 1 << WINED3DSP_TEXTURETYPE_SHIFT,
47 WINED3DSTT_2D = 2 << WINED3DSP_TEXTURETYPE_SHIFT,
48 WINED3DSTT_CUBE = 3 << WINED3DSP_TEXTURETYPE_SHIFT,
49 WINED3DSTT_VOLUME = 4 << WINED3DSP_TEXTURETYPE_SHIFT,
50
51 WINED3DSTT_FORCE_DWORD = 0x7FFFFFFF
52 } WINED3DSAMPLER_TEXTURE_TYPE;
53
54 /** Register number mask **/
55 #define WINED3DSP_REGNUM_MASK 0x000007FF
56
57 /** Register type masks **/
58 #define WINED3DSP_REGTYPE_SHIFT 28
59 #define WINED3DSP_REGTYPE_SHIFT2 8
60 #define WINED3DSP_REGTYPE_MASK (0x7 << WINED3DSP_REGTYPE_SHIFT)
61 #define WINED3DSP_REGTYPE_MASK2 0x00001800
62
63 /** Register types **/
64 typedef enum _WINED3DSHADER_PARAM_REGISTER_TYPE {
65 WINED3DSPR_TEMP = 0,
66 WINED3DSPR_INPUT = 1,
67 WINED3DSPR_CONST = 2,
68 WINED3DSPR_ADDR = 3,
69 WINED3DSPR_TEXTURE = 3,
70 WINED3DSPR_RASTOUT = 4,
71 WINED3DSPR_ATTROUT = 5,
72 WINED3DSPR_TEXCRDOUT = 6,
73 WINED3DSPR_OUTPUT = 6,
74 WINED3DSPR_CONSTINT = 7,
75 WINED3DSPR_COLOROUT = 8,
76 WINED3DSPR_DEPTHOUT = 9,
77 WINED3DSPR_SAMPLER = 10,
78 WINED3DSPR_CONST2 = 11,
79 WINED3DSPR_CONST3 = 12,
80 WINED3DSPR_CONST4 = 13,
81 WINED3DSPR_CONSTBOOL = 14,
82 WINED3DSPR_LOOP = 15,
83 WINED3DSPR_TEMPFLOAT16 = 16,
84 WINED3DSPR_MISCTYPE = 17,
85 WINED3DSPR_LABEL = 18,
86 WINED3DSPR_PREDICATE = 19,
87
88 WINED3DSPR_FORCE_DWORD = 0x7FFFFFFF
89 } WINED3DSHADER_PARAM_REGISTER_TYPE;
90
91 /* RASTOUT register offsets */
92 typedef enum _WINED3DVS_RASTOUT_OFFSETS {
93 WINED3DSRO_POSITION = 0,
94 WINED3DSRO_FOG = 1,
95 WINED3DSRO_POINT_SIZE = 2,
96
97 WINED3DSRO_FORCE_DWORD = 0x7FFFFFFF
98 } WINED3DVS_RASTOUT_OFFSETS;
99
100 /** Source register modifiers **/
101 #define WINED3DVS_SWIZZLE_SHIFT 16
102 #define WINED3DVS_SWIZZLE_MASK (0xFF << WINED3DVS_SWIZZLE_SHIFT)
103 #define WINED3DSP_SWIZZLE_SHIFT 16
104 #define WINED3DSP_SWIZZLE_MASK (0xFF << WINED3DSP_SWIZZLE_SHIFT)
105
106 #define WINED3DVS_X_X (0 << WINED3DVS_SWIZZLE_SHIFT)
107 #define WINED3DVS_X_Y (1 << WINED3DVS_SWIZZLE_SHIFT)
108 #define WINED3DVS_X_Z (2 << WINED3DVS_SWIZZLE_SHIFT)
109 #define WINED3DVS_X_W (3 << WINED3DVS_SWIZZLE_SHIFT)
110
111 #define WINED3DVS_Y_X (0 << (WINED3DVS_SWIZZLE_SHIFT + 2))
112 #define WINED3DVS_Y_Y (1 << (WINED3DVS_SWIZZLE_SHIFT + 2))
113 #define WINED3DVS_Y_Z (2 << (WINED3DVS_SWIZZLE_SHIFT + 2))
114 #define WINED3DVS_Y_W (3 << (WINED3DVS_SWIZZLE_SHIFT + 2))
115
116 #define WINED3DVS_Z_X (0 << (WINED3DVS_SWIZZLE_SHIFT + 4))
117 #define WINED3DVS_Z_Y (1 << (WINED3DVS_SWIZZLE_SHIFT + 4))
118 #define WINED3DVS_Z_Z (2 << (WINED3DVS_SWIZZLE_SHIFT + 4))
119 #define WINED3DVS_Z_W (3 << (WINED3DVS_SWIZZLE_SHIFT + 4))
120
121 #define WINED3DVS_W_X (0 << (WINED3DVS_SWIZZLE_SHIFT + 6))
122 #define WINED3DVS_W_Y (1 << (WINED3DVS_SWIZZLE_SHIFT + 6))
123 #define WINED3DVS_W_Z (2 << (WINED3DVS_SWIZZLE_SHIFT + 6))
124 #define WINED3DVS_W_W (3 << (WINED3DVS_SWIZZLE_SHIFT + 6))
125
126 #define WINED3DVS_NOSWIZZLE (WINED3DVS_X_X | WINED3DVS_Y_Y | WINED3DVS_Z_Z | WINED3DVS_W_W)
127
128 #define WINED3DSP_NOSWIZZLE \
129 ((0 << (WINED3DSP_SWIZZLE_SHIFT + 0)) | (1 << (WINED3DSP_SWIZZLE_SHIFT + 2)) | \
130 (2 << (WINED3DSP_SWIZZLE_SHIFT + 4)) | (3 << (WINED3DSP_SWIZZLE_SHIFT + 6)))
131
132 #define WINED3DSP_SRCMOD_SHIFT 24
133 #define WINED3DSP_SRCMOD_MASK (0xF << WINED3DSP_SRCMOD_SHIFT)
134
135 typedef enum _WINED3DSHADER_PARAM_SRCMOD_TYPE {
136 WINED3DSPSM_NONE = 0 << WINED3DSP_SRCMOD_SHIFT,
137 WINED3DSPSM_NEG = 1 << WINED3DSP_SRCMOD_SHIFT,
138 WINED3DSPSM_BIAS = 2 << WINED3DSP_SRCMOD_SHIFT,
139 WINED3DSPSM_BIASNEG = 3 << WINED3DSP_SRCMOD_SHIFT,
140 WINED3DSPSM_SIGN = 4 << WINED3DSP_SRCMOD_SHIFT,
141 WINED3DSPSM_SIGNNEG = 5 << WINED3DSP_SRCMOD_SHIFT,
142 WINED3DSPSM_COMP = 6 << WINED3DSP_SRCMOD_SHIFT,
143 WINED3DSPSM_X2 = 7 << WINED3DSP_SRCMOD_SHIFT,
144 WINED3DSPSM_X2NEG = 8 << WINED3DSP_SRCMOD_SHIFT,
145 WINED3DSPSM_DZ = 9 << WINED3DSP_SRCMOD_SHIFT,
146 WINED3DSPSM_DW = 10 << WINED3DSP_SRCMOD_SHIFT,
147 WINED3DSPSM_ABS = 11 << WINED3DSP_SRCMOD_SHIFT,
148 WINED3DSPSM_ABSNEG = 12 << WINED3DSP_SRCMOD_SHIFT,
149 WINED3DSPSM_NOT = 13 << WINED3DSP_SRCMOD_SHIFT,
150
151 WINED3DSPSM_FORCE_DWORD = 0x7FFFFFFF
152 } WINED3DSHADER_PARAM_SRCMOD_TYPE;
153
154 /** Destination register modifiers **/
155 #define WINED3DSP_WRITEMASK_0 0x00010000 /* .x r */
156 #define WINED3DSP_WRITEMASK_1 0x00020000 /* .y g */
157 #define WINED3DSP_WRITEMASK_2 0x00040000 /* .z b */
158 #define WINED3DSP_WRITEMASK_3 0x00080000 /* .w a */
159 #define WINED3DSP_WRITEMASK_ALL 0x000F0000 /* all */
160
161 #define WINED3DSP_DSTMOD_SHIFT 20
162 #define WINED3DSP_DSTMOD_MASK (0xF << WINED3DSP_DSTMOD_SHIFT)
163
164 typedef enum _WINED3DSHADER_PARAM_DSTMOD_TYPE {
165 WINED3DSPDM_NONE = 0 << WINED3DSP_DSTMOD_SHIFT,
166 WINED3DSPDM_SATURATE = 1 << WINED3DSP_DSTMOD_SHIFT,
167 WINED3DSPDM_PARTIALPRECISION = 2 << WINED3DSP_DSTMOD_SHIFT,
168 WINED3DSPDM_MSAMPCENTROID = 4 << WINED3DSP_DSTMOD_SHIFT,
169
170 WINED3DSPDM_FORCE_DWORD = 0x7FFFFFFF
171 } WINED3DSHADER_PARAM_DSTMOD_TYPE;
172
173 #define WINED3DSP_DSTSHIFT_SHIFT 24
174 #define WINED3DSP_DSTSHIFT_MASK (0xF << WINED3DSP_DSTSHIFT_SHIFT)
175
176 /** Register addressing modes **/
177 #define WINED3DSHADER_ADDRESSMODE_SHIFT 13
178 #define WINED3DSHADER_ADDRESSMODE_MASK (1 << WINED3DSHADER_ADDRESSMODE_SHIFT)
179
180 typedef enum _WINED3DSHADER_ADDRESSMODE_TYPE {
181 WINED3DSHADER_ADDRMODE_ABSOLUTE = 0 << WINED3DSHADER_ADDRESSMODE_SHIFT,
182 WINED3DSHADER_ADDRMODE_RELATIVE = 1 << WINED3DSHADER_ADDRESSMODE_SHIFT,
183
184 WINED3DSHADER_ADDRMODE_FORCE_DWORD = 0x7FFFFFFF
185 } WINED3DSHADER_ADDRESSMODE_TYPE;
186
187 /** Opcode types */
188 typedef enum _WINED3DSHADER_INSTRUCTION_OPCODE_TYPE {
189 WINED3DSIO_NOP = 0,
190 WINED3DSIO_MOV = 1,
191 WINED3DSIO_ADD = 2,
192 WINED3DSIO_SUB = 3,
193 WINED3DSIO_MAD = 4,
194 WINED3DSIO_MUL = 5,
195 WINED3DSIO_RCP = 6,
196 WINED3DSIO_RSQ = 7,
197 WINED3DSIO_DP3 = 8,
198 WINED3DSIO_DP4 = 9,
199 WINED3DSIO_MIN = 10,
200 WINED3DSIO_MAX = 11,
201 WINED3DSIO_SLT = 12,
202 WINED3DSIO_SGE = 13,
203 WINED3DSIO_EXP = 14,
204 WINED3DSIO_LOG = 15,
205 WINED3DSIO_LIT = 16,
206 WINED3DSIO_DST = 17,
207 WINED3DSIO_LRP = 18,
208 WINED3DSIO_FRC = 19,
209 WINED3DSIO_M4x4 = 20,
210 WINED3DSIO_M4x3 = 21,
211 WINED3DSIO_M3x4 = 22,
212 WINED3DSIO_M3x3 = 23,
213 WINED3DSIO_M3x2 = 24,
214 WINED3DSIO_CALL = 25,
215 WINED3DSIO_CALLNZ = 26,
216 WINED3DSIO_LOOP = 27,
217 WINED3DSIO_RET = 28,
218 WINED3DSIO_ENDLOOP = 29,
219 WINED3DSIO_LABEL = 30,
220 WINED3DSIO_DCL = 31,
221 WINED3DSIO_POW = 32,
222 WINED3DSIO_CRS = 33,
223 WINED3DSIO_SGN = 34,
224 WINED3DSIO_ABS = 35,
225 WINED3DSIO_NRM = 36,
226 WINED3DSIO_SINCOS = 37,
227 WINED3DSIO_REP = 38,
228 WINED3DSIO_ENDREP = 39,
229 WINED3DSIO_IF = 40,
230 WINED3DSIO_IFC = 41,
231 WINED3DSIO_ELSE = 42,
232 WINED3DSIO_ENDIF = 43,
233 WINED3DSIO_BREAK = 44,
234 WINED3DSIO_BREAKC = 45,
235 WINED3DSIO_MOVA = 46,
236 WINED3DSIO_DEFB = 47,
237 WINED3DSIO_DEFI = 48,
238
239 WINED3DSIO_TEXCOORD = 64,
240 WINED3DSIO_TEXKILL = 65,
241 WINED3DSIO_TEX = 66,
242 WINED3DSIO_TEXBEM = 67,
243 WINED3DSIO_TEXBEML = 68,
244 WINED3DSIO_TEXREG2AR = 69,
245 WINED3DSIO_TEXREG2GB = 70,
246 WINED3DSIO_TEXM3x2PAD = 71,
247 WINED3DSIO_TEXM3x2TEX = 72,
248 WINED3DSIO_TEXM3x3PAD = 73,
249 WINED3DSIO_TEXM3x3TEX = 74,
250 WINED3DSIO_TEXM3x3DIFF = 75,
251 WINED3DSIO_TEXM3x3SPEC = 76,
252 WINED3DSIO_TEXM3x3VSPEC = 77,
253 WINED3DSIO_EXPP = 78,
254 WINED3DSIO_LOGP = 79,
255 WINED3DSIO_CND = 80,
256 WINED3DSIO_DEF = 81,
257 WINED3DSIO_TEXREG2RGB = 82,
258 WINED3DSIO_TEXDP3TEX = 83,
259 WINED3DSIO_TEXM3x2DEPTH = 84,
260 WINED3DSIO_TEXDP3 = 85,
261 WINED3DSIO_TEXM3x3 = 86,
262 WINED3DSIO_TEXDEPTH = 87,
263 WINED3DSIO_CMP = 88,
264 WINED3DSIO_BEM = 89,
265 WINED3DSIO_DP2ADD = 90,
266 WINED3DSIO_DSX = 91,
267 WINED3DSIO_DSY = 92,
268 WINED3DSIO_TEXLDD = 93,
269 WINED3DSIO_SETP = 94,
270 WINED3DSIO_TEXLDL = 95,
271 WINED3DSIO_BREAKP = 96,
272
273 WINED3DSIO_PHASE = 0xFFFD,
274 WINED3DSIO_COMMENT = 0xFFFE,
275 WINED3DSIO_END = 0XFFFF,
276
277 WINED3DSIO_FORCE_DWORD = 0X7FFFFFFF /** for 32-bit alignment */
278 } WINED3DSHADER_INSTRUCTION_OPCODE_TYPE;
279
280 /** opcode-related masks **/
281
282 #define WINED3D_OPCODESPECIFICCONTROL_MASK 0x00ff0000
283 #define WINED3D_OPCODESPECIFICCONTROL_SHIFT 16
284
285 #define WINED3DSI_OPCODE_MASK 0x0000FFFF
286 #define WINED3DSI_INSTLENGTH_MASK 0x0F000000
287 #define WINED3DSI_INSTLENGTH_SHIFT 24
288
289 #define WINED3DSI_COISSUE 0x40000000
290
291 #define WINED3DSI_COMMENTSIZE_SHIFT 16
292 #define WINED3DSI_COMMENTSIZE_MASK (0x7FFF << WINED3DSI_COMMENTSIZE_SHIFT)
293 #define WINED3DSHADER_COMMENT(commentSize) \
294 ((((commentSize) << WINED3DSI_COMMENTSIZE_SHIFT) & WINED3DSI_COMMENTSIZE_MASK) | WINED3DSIO_COMMENT)
295
296 #define WINED3DSHADER_INSTRUCTION_PREDICATED (1 << 28)
297
298 /* Undocumented opcode control to identify projective texture lookups in ps 2.0 and later */
299 #define WINED3DSI_TEXLD_PROJECT 0x00010000
300 #define WINED3DSI_TEXLD_BIAS 0x00020000
301
302 /** Shader version tokens, and shader end tokens **/
303
304 #define WINED3DPS_VERSION(major, minor) (0xFFFF0000 | ((major) << 8) | (minor))
305 #define WINED3DVS_VERSION(major, minor) (0xFFFE0000 | ((major) << 8) | (minor))
306 #define WINED3DSHADER_VERSION_MAJOR(version) (((version) >> 8) & 0xFF)
307 #define WINED3DSHADER_VERSION_MINOR(version) (((version) >> 0) & 0xFF)
308 #define WINED3DPS_END() 0x0000FFFF
309 #define WINED3DVS_END() 0x0000FFFF
310
311 /* Multithreaded flag. Removed from the public header to signal that IWineD3D::CreateDevice ignores it */
312 #define WINED3DCREATE_MULTITHREADED 0x00000004
313
314 #endif