ReactOS 0.4.17-dev-966-gf06eace
vertexdeclaration.c
Go to the documentation of this file.
1/*
2 * Copyright 2007 Henri Verbeet
3 *
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.
8 *
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.
13 *
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
17 */
18
19#include "d3d8_private.h"
20
22
23static const char *debug_d3dvsdt_type(D3DVSDT_TYPE d3dvsdt_type)
24{
25 switch (d3dvsdt_type)
26 {
27#define D3DVSDT_TYPE_TO_STR(u) case u: return #u
36#undef D3DVSDT_TYPE_TO_STR
37 default:
38 FIXME("Unrecognized D3DVSDT_TYPE %#x\n", d3dvsdt_type);
39 return "unrecognized";
40 }
41}
42
43static const char *debug_d3dvsde_register(D3DVSDE_REGISTER d3dvsde_register)
44{
45 switch (d3dvsde_register)
46 {
47#define D3DVSDE_REGISTER_TO_STR(u) case u: return #u
65#undef D3DVSDE_REGISTER_TO_STR
66 default:
67 FIXME("Unrecognized D3DVSDE_REGISTER %#x\n", d3dvsde_register);
68 return "unrecognized";
69 }
70}
71
72size_t parse_token(const DWORD* pToken)
73{
74 const DWORD token = *pToken;
75 size_t tokenlen = 1;
76
77 switch ((token & D3DVSD_TOKENTYPEMASK) >> D3DVSD_TOKENTYPESHIFT) { /* maybe a macro to inverse ... */
79 TRACE(" 0x%08lx NOP()\n", token);
80 break;
81
84 {
85 TRACE(" 0x%08lx STREAM_TESS()\n", token);
86 } else {
87 TRACE(" 0x%08lx STREAM(%lu)\n", token, ((token & D3DVSD_STREAMNUMBERMASK) >> D3DVSD_STREAMNUMBERSHIFT));
88 }
89 break;
90
92 if (token & 0x10000000)
93 {
94 TRACE(" 0x%08lx SKIP(%lu)\n", token, ((token & D3DVSD_SKIPCOUNTMASK) >> D3DVSD_SKIPCOUNTSHIFT));
95 } else {
98 TRACE(" 0x%08lx REG(%s, %s)\n", token, debug_d3dvsde_register(reg), debug_d3dvsdt_type(type));
99 }
100 break;
101
103 if (token & 0x10000000)
104 {
107 TRACE(" 0x%08lx TESSUV(%s) as %s\n", token, debug_d3dvsde_register(reg), debug_d3dvsdt_type(type));
108 } else {
112 TRACE(" 0x%08lx TESSNORMAL(%s, %s) as %s\n", token, debug_d3dvsde_register(regin),
114 }
115 break;
116
118 {
120 tokenlen = (4 * count) + 1;
121 }
122 break;
123
124 case D3DVSD_TOKEN_EXT:
125 {
128 TRACE(" 0x%08lx EXT(%lu, %lu)\n", token, count, extinfo);
129 /* todo ... print extension */
130 tokenlen = count + 1;
131 }
132 break;
133
134 case D3DVSD_TOKEN_END:
135 TRACE(" 0x%08lx END()\n", token);
136 break;
137
138 default:
139 TRACE(" 0x%08lx UNKNOWN\n", token);
140 /* arg error */
141 }
142
143 return tokenlen;
144}
145
147{
148 const DWORD *token = d3d8_elements;
149
150 while (*token != D3DVSD_END())
151 {
153 {
156 HRESULT hr;
157
158 if (TRACE_ON(d3d8))
159 {
160 DWORD i;
161 for (i = 0; i < count; ++i)
162 {
163 TRACE("c[%lu] = (%8f, %8f, %8f, %8f)\n",
164 constant_idx,
165 *(const float *)(token + i * 4 + 1),
166 *(const float *)(token + i * 4 + 2),
167 *(const float *)(token + i * 4 + 3),
168 *(const float *)(token + i * 4 + 4));
169 }
170 }
172 constant_idx, (const float *)token + 1, count);
173 if (FAILED(hr)) ERR("Failed setting shader constants\n");
174 }
175
177 }
178}
179
180/* NOTE: Make sure these are in the correct numerical order. (see /include/wined3d_types.h) */
181static const size_t wined3d_type_sizes[] =
182{
183 /*WINED3DDECLTYPE_FLOAT1*/ 1 * sizeof(float),
184 /*WINED3DDECLTYPE_FLOAT2*/ 2 * sizeof(float),
185 /*WINED3DDECLTYPE_FLOAT3*/ 3 * sizeof(float),
186 /*WINED3DDECLTYPE_FLOAT4*/ 4 * sizeof(float),
187 /*WINED3DDECLTYPE_D3DCOLOR*/ 4 * sizeof(BYTE),
188 /*WINED3DDECLTYPE_UBYTE4*/ 4 * sizeof(BYTE),
189 /*WINED3DDECLTYPE_SHORT2*/ 2 * sizeof(short int),
190 /*WINED3DDECLTYPE_SHORT4*/ 4 * sizeof(short int),
191 /*WINED3DDECLTYPE_UBYTE4N*/ 4 * sizeof(BYTE),
192 /*WINED3DDECLTYPE_SHORT2N*/ 2 * sizeof(short int),
193 /*WINED3DDECLTYPE_SHORT4N*/ 4 * sizeof(short int),
194 /*WINED3DDECLTYPE_USHORT2N*/ 2 * sizeof(short int),
195 /*WINED3DDECLTYPE_USHORT4N*/ 4 * sizeof(short int),
196 /*WINED3DDECLTYPE_UDEC3*/ 3 * sizeof(short int),
197 /*WINED3DDECLTYPE_DEC3N*/ 3 * sizeof(short int),
198 /*WINED3DDECLTYPE_FLOAT16_2*/ 2 * sizeof(short int),
199 /*WINED3DDECLTYPE_FLOAT16_4*/ 4 * sizeof(short int)
200};
201
203{
204 /*WINED3DDECLTYPE_FLOAT1*/ WINED3DFMT_R32_FLOAT,
205 /*WINED3DDECLTYPE_FLOAT2*/ WINED3DFMT_R32G32_FLOAT,
206 /*WINED3DDECLTYPE_FLOAT3*/ WINED3DFMT_R32G32B32_FLOAT,
207 /*WINED3DDECLTYPE_FLOAT4*/ WINED3DFMT_R32G32B32A32_FLOAT,
208 /*WINED3DDECLTYPE_D3DCOLOR*/ WINED3DFMT_B8G8R8A8_UNORM,
209 /*WINED3DDECLTYPE_UBYTE4*/ WINED3DFMT_R8G8B8A8_UINT,
210 /*WINED3DDECLTYPE_SHORT2*/ WINED3DFMT_R16G16_SINT,
211 /*WINED3DDECLTYPE_SHORT4*/ WINED3DFMT_R16G16B16A16_SINT,
212 /*WINED3DDECLTYPE_UBYTE4N*/ WINED3DFMT_R8G8B8A8_UNORM,
213 /*WINED3DDECLTYPE_SHORT2N*/ WINED3DFMT_R16G16_SNORM,
214 /*WINED3DDECLTYPE_SHORT4N*/ WINED3DFMT_R16G16B16A16_SNORM,
215 /*WINED3DDECLTYPE_USHORT2N*/ WINED3DFMT_R16G16_UNORM,
216 /*WINED3DDECLTYPE_USHORT4N*/ WINED3DFMT_R16G16B16A16_UNORM,
217 /*WINED3DDECLTYPE_UDEC3*/ WINED3DFMT_R10G10B10X2_UINT,
218 /*WINED3DDECLTYPE_DEC3N*/ WINED3DFMT_R10G10B10X2_SNORM,
219 /*WINED3DDECLTYPE_FLOAT16_2*/ WINED3DFMT_R16G16_FLOAT,
220 /*WINED3DDECLTYPE_FLOAT16_4*/ WINED3DFMT_R16G16B16A16_FLOAT,
221};
222
223static const struct
224{
227}
229{
230 /* D3DVSDE_POSITION */ {WINED3D_DECL_USAGE_POSITION, 0},
231 /* D3DVSDE_BLENDWEIGHT */ {WINED3D_DECL_USAGE_BLEND_WEIGHT, 0},
232 /* D3DVSDE_BLENDINDICES */ {WINED3D_DECL_USAGE_BLEND_INDICES, 0},
233 /* D3DVSDE_NORMAL */ {WINED3D_DECL_USAGE_NORMAL, 0},
234 /* D3DVSDE_PSIZE */ {WINED3D_DECL_USAGE_PSIZE, 0},
235 /* D3DVSDE_DIFFUSE */ {WINED3D_DECL_USAGE_COLOR, 0},
236 /* D3DVSDE_SPECULAR */ {WINED3D_DECL_USAGE_COLOR, 1},
237 /* D3DVSDE_TEXCOORD0 */ {WINED3D_DECL_USAGE_TEXCOORD, 0},
238 /* D3DVSDE_TEXCOORD1 */ {WINED3D_DECL_USAGE_TEXCOORD, 1},
239 /* D3DVSDE_TEXCOORD2 */ {WINED3D_DECL_USAGE_TEXCOORD, 2},
240 /* D3DVSDE_TEXCOORD3 */ {WINED3D_DECL_USAGE_TEXCOORD, 3},
241 /* D3DVSDE_TEXCOORD4 */ {WINED3D_DECL_USAGE_TEXCOORD, 4},
242 /* D3DVSDE_TEXCOORD5 */ {WINED3D_DECL_USAGE_TEXCOORD, 5},
243 /* D3DVSDE_TEXCOORD6 */ {WINED3D_DECL_USAGE_TEXCOORD, 6},
244 /* D3DVSDE_TEXCOORD7 */ {WINED3D_DECL_USAGE_TEXCOORD, 7},
245 /* D3DVSDE_POSITION2 */ {WINED3D_DECL_USAGE_POSITION, 1},
246 /* D3DVSDE_NORMAL2 */ {WINED3D_DECL_USAGE_NORMAL, 1},
248
249/* TODO: find out where rhw (or positionT) is for declaration8 */
250static UINT convert_to_wined3d_declaration(const DWORD *d3d8_elements, DWORD *d3d8_elements_size,
251 struct wined3d_vertex_element **wined3d_elements, DWORD *stream_map)
252{
254 const DWORD *token = d3d8_elements;
255 D3DVSD_TOKENTYPE token_type;
256 unsigned int element_count = 0;
257 WORD stream = 0;
258 int offset = 0;
259
260 TRACE("d3d8_elements %p, d3d8_elements_size %p, wined3d_elements %p\n", d3d8_elements, d3d8_elements_size, wined3d_elements);
261
262 *stream_map = 0;
263 /* 128 should be enough for anyone... */
264 *wined3d_elements = calloc(128, sizeof(**wined3d_elements));
265 while (D3DVSD_END() != *token)
266 {
267 token_type = ((*token & D3DVSD_TOKENTYPEMASK) >> D3DVSD_TOKENTYPESHIFT);
268
269 if (token_type == D3DVSD_TOKEN_STREAM && !(*token & D3DVSD_STREAMTESSMASK))
270 {
272 offset = 0;
273 } else if (token_type == D3DVSD_TOKEN_STREAMDATA && !(*token & D3DVSD_DATALOADTYPEMASK)) {
276
277 TRACE("Adding element %d:\n", element_count);
278
279 element = *wined3d_elements + element_count++;
281 element->input_slot = stream;
282 element->offset = offset;
283 element->output_slot = reg;
284 element->input_slot_class = WINED3D_INPUT_PER_VERTEX_DATA;
285 element->instance_data_step_rate = 0;
287 element->usage = wined3d_usage_lookup[reg].usage;
288 element->usage_idx = wined3d_usage_lookup[reg].usage_idx;
289
290 *stream_map |= 1u << stream;
291
293 } else if (token_type == D3DVSD_TOKEN_STREAMDATA && (*token & D3DVSD_DATALOADTYPEMASK)) {
294 TRACE(" 0x%08lx SKIP(%lu)\n", *token, (*token & D3DVSD_SKIPCOUNTMASK) >> D3DVSD_SKIPCOUNTSHIFT);
296 }
297
298 if (element_count >= 127) {
299 ERR("More than 127 elements?\n");
300 break;
301 }
302
304 }
305
306 *d3d8_elements_size = (++token - d3d8_elements) * sizeof(DWORD);
307
308 return element_count;
309}
310
312{
314 free(declaration->elements);
316}
317
319{
320 TRACE("declaration %p.\n", declaration);
321
322 wined3d_vertex_declaration_decref(declaration->wined3d_vertex_declaration);
323}
324
326{
328};
329
331 struct d3d8_device *device, const DWORD *elements, DWORD shader_handle)
332{
333 struct wined3d_vertex_element *wined3d_elements;
334 UINT wined3d_element_count;
335 HRESULT hr;
336
337 declaration->shader_handle = shader_handle;
338
339 wined3d_element_count = convert_to_wined3d_declaration(elements, &declaration->elements_size,
340 &wined3d_elements, &declaration->stream_map);
341 if (!(declaration->elements = malloc(declaration->elements_size)))
342 {
343 ERR("Failed to allocate vertex declaration elements memory.\n");
344 free(wined3d_elements);
345 return E_OUTOFMEMORY;
346 }
347
348 memcpy(declaration->elements, elements, declaration->elements_size);
349
351 hr = wined3d_vertex_declaration_create(device->wined3d_device, wined3d_elements, wined3d_element_count,
354 free(wined3d_elements);
355 if (FAILED(hr))
356 {
357 WARN("Failed to create wined3d vertex declaration, hr %#lx.\n", hr);
358 free(declaration->elements);
359 if (hr == E_INVALIDARG)
360 hr = E_FAIL;
361 return hr;
362 }
363
364 return D3D_OK;
365}
366
368 struct d3d8_device *device, DWORD fvf)
369{
370 HRESULT hr;
371
372 declaration->elements = NULL;
373 declaration->elements_size = 0;
374 declaration->stream_map = 1;
375 declaration->shader_handle = fvf;
376
378 &d3d8_vertexdeclaration_wined3d_parent_ops, &declaration->wined3d_vertex_declaration);
379 if (FAILED(hr))
380 {
381 WARN("Failed to create wined3d vertex declaration, hr %#lx.\n", hr);
382 if (hr == E_INVALIDARG)
383 hr = E_FAIL;
384 return hr;
385 }
386
387 return D3D_OK;
388}
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
#define ERR(fmt,...)
Definition: precomp.h:57
#define STDMETHODCALLTYPE
Definition: bdasup.h:9
static const char * debug_d3dvsde_register(D3DVSDE_REGISTER d3dvsde_register)
void d3d8_vertex_declaration_destroy(struct d3d8_vertex_declaration *declaration)
void load_local_constants(const DWORD *d3d8_elements, struct wined3d_shader *wined3d_vertex_shader)
size_t parse_token(const DWORD *pToken)
static const struct @267 wined3d_usage_lookup[]
HRESULT d3d8_vertex_declaration_init_fvf(struct d3d8_vertex_declaration *declaration, struct d3d8_device *device, DWORD fvf)
#define D3DVSDE_REGISTER_TO_STR(u)
static const char * debug_d3dvsdt_type(D3DVSDT_TYPE d3dvsdt_type)
static const struct wined3d_parent_ops d3d8_vertexdeclaration_wined3d_parent_ops
static void STDMETHODCALLTYPE d3d8_vertexdeclaration_wined3d_object_destroyed(void *parent)
BYTE usage_idx
static const size_t wined3d_type_sizes[]
#define D3DVSDT_TYPE_TO_STR(u)
HRESULT d3d8_vertex_declaration_init(struct d3d8_vertex_declaration *declaration, struct d3d8_device *device, const DWORD *elements, DWORD shader_handle)
BYTE usage
static UINT convert_to_wined3d_declaration(const DWORD *d3d8_elements, DWORD *d3d8_elements_size, struct wined3d_vertex_element **wined3d_elements, DWORD *stream_map)
static enum wined3d_format_id wined3d_format_lookup[]
#define D3DVSD_VERTEXREGMASK
Definition: d3d8types.h:257
#define D3DVSD_END()
Definition: d3d8types.h:275
#define D3DVSD_CONSTADDRESSSHIFT
Definition: d3d8types.h:240
#define D3DVSD_DATALOADTYPEMASK
Definition: d3d8types.h:264
enum _D3DVSDT_TYPE D3DVSDT_TYPE
#define D3DVSD_EXTINFOSHIFT
Definition: d3d8types.h:241
enum _D3DVSDE_REGISTER D3DVSDE_REGISTER
#define D3DVSD_SKIPCOUNTSHIFT
Definition: d3d8types.h:246
#define D3DVSD_DATATYPEMASK
Definition: d3d8types.h:259
#define D3DVSD_EXTINFOMASK
Definition: d3d8types.h:255
#define D3DVSD_VERTEXREGINSHIFT
Definition: d3d8types.h:247
@ D3DVSDE_TEXCOORD0
Definition: d3d8types.h:205
@ D3DVSDE_PSIZE
Definition: d3d8types.h:202
@ D3DVSDE_TEXCOORD2
Definition: d3d8types.h:207
@ D3DVSDE_TEXCOORD1
Definition: d3d8types.h:206
@ D3DVSDE_TEXCOORD7
Definition: d3d8types.h:212
@ D3DVSDE_POSITION
Definition: d3d8types.h:198
@ D3DVSDE_TEXCOORD4
Definition: d3d8types.h:209
@ D3DVSDE_DIFFUSE
Definition: d3d8types.h:203
@ D3DVSDE_NORMAL2
Definition: d3d8types.h:214
@ D3DVSDE_TEXCOORD5
Definition: d3d8types.h:210
@ D3DVSDE_POSITION2
Definition: d3d8types.h:213
@ D3DVSDE_BLENDWEIGHT
Definition: d3d8types.h:199
@ D3DVSDE_TEXCOORD3
Definition: d3d8types.h:208
@ D3DVSDE_BLENDINDICES
Definition: d3d8types.h:200
@ D3DVSDE_SPECULAR
Definition: d3d8types.h:204
@ D3DVSDE_TEXCOORD6
Definition: d3d8types.h:211
@ D3DVSDE_NORMAL
Definition: d3d8types.h:201
#define D3DVSD_CONSTCOUNTSHIFT
Definition: d3d8types.h:249
#define D3DVSD_VERTEXREGSHIFT
Definition: d3d8types.h:243
#define D3DVSD_SKIPCOUNTMASK
Definition: d3d8types.h:260
#define D3DVSD_CONSTCOUNTMASK
Definition: d3d8types.h:263
#define D3DVSD_VERTEXREGINMASK
Definition: d3d8types.h:262
#define D3DVSD_STREAMNUMBERMASK
Definition: d3d8types.h:256
#define D3DVSD_STREAMTESSMASK
Definition: d3d8types.h:265
#define D3DVSD_TOKENTYPEMASK
Definition: d3d8types.h:266
#define D3DVSD_CONSTADDRESSMASK
Definition: d3d8types.h:254
#define D3DVSD_DATATYPESHIFT
Definition: d3d8types.h:245
#define D3DVSD_TOKENTYPESHIFT
Definition: d3d8types.h:252
@ D3DVSD_TOKEN_STREAM
Definition: d3d8types.h:166
@ D3DVSD_TOKEN_TESSELLATOR
Definition: d3d8types.h:168
@ D3DVSD_TOKEN_EXT
Definition: d3d8types.h:170
@ D3DVSD_TOKEN_END
Definition: d3d8types.h:172
@ D3DVSD_TOKEN_STREAMDATA
Definition: d3d8types.h:167
@ D3DVSD_TOKEN_NOP
Definition: d3d8types.h:165
@ D3DVSD_TOKEN_CONSTMEM
Definition: d3d8types.h:169
enum _D3DVSD_TOKENTYPE D3DVSD_TOKENTYPE
@ D3DVSDT_FLOAT4
Definition: d3d8types.h:232
@ D3DVSDT_D3DCOLOR
Definition: d3d8types.h:233
@ D3DVSDT_FLOAT3
Definition: d3d8types.h:231
@ D3DVSDT_SHORT2
Definition: d3d8types.h:235
@ D3DVSDT_FLOAT1
Definition: d3d8types.h:229
@ D3DVSDT_UBYTE4
Definition: d3d8types.h:234
@ D3DVSDT_SHORT4
Definition: d3d8types.h:236
@ D3DVSDT_FLOAT2
Definition: d3d8types.h:230
#define D3DVSD_STREAMNUMBERSHIFT
Definition: d3d8types.h:242
#define D3D_OK
Definition: d3d.h:106
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_FAIL
Definition: ddrawi.h:102
#define free
Definition: debug_ros.c:5
#define malloc
Definition: debug_ros.c:4
HRESULT hr
Definition: delayimp.cpp:582
#define NULL
Definition: types.h:112
HRESULT CDECL wined3d_shader_set_local_constants_float(struct wined3d_shader *shader, UINT start_idx, const float *src_data, UINT count)
Definition: shader.c:2637
#define TRACE_ON(x)
Definition: compat.h:75
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
r parent
Definition: btrfs.c:3010
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLintptr offset
Definition: glext.h:5920
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat token
Definition: glfuncs.h:210
unsigned int UINT
Definition: sysinfo.c:13
static int reg
Definition: i386-dis.c:1290
#define FAILED(hr)
Definition: intsafe.h:51
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
static ULONG ** element_count
Definition: exception.c:124
static float(__cdecl *square_half_float)(float x
#define DWORD
Definition: nt_native.h:44
#define calloc
Definition: rosglue.h:14
#define TRACE(s)
Definition: solgame.cpp:4
Definition: devices.h:37
Definition: parse.h:23
HRESULT CDECL wined3d_vertex_declaration_create(struct wined3d_device *device, const struct wined3d_vertex_element *elements, UINT element_count, void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_vertex_declaration **declaration)
ULONG CDECL wined3d_vertex_declaration_decref(struct wined3d_vertex_declaration *declaration)
HRESULT CDECL wined3d_vertex_declaration_create_from_fvf(struct wined3d_device *device, uint32_t fvf, void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_vertex_declaration **declaration)
@ WINED3D_DECL_USAGE_BLEND_INDICES
Definition: wined3d.h:809
@ WINED3D_DECL_USAGE_NORMAL
Definition: wined3d.h:810
@ WINED3D_DECL_USAGE_PSIZE
Definition: wined3d.h:811
@ WINED3D_DECL_USAGE_BLEND_WEIGHT
Definition: wined3d.h:808
@ WINED3D_DECL_USAGE_POSITION
Definition: wined3d.h:807
@ WINED3D_DECL_USAGE_COLOR
Definition: wined3d.h:817
@ WINED3D_DECL_USAGE_TEXCOORD
Definition: wined3d.h:812
@ WINED3D_DECL_METHOD_DEFAULT
Definition: wined3d.h:796
wined3d_format_id
Definition: wined3d.h:126
@ WINED3DFMT_R16G16_UNORM
Definition: wined3d.h:192
@ WINED3DFMT_R10G10B10X2_UINT
Definition: wined3d.h:145
@ WINED3DFMT_R32G32_FLOAT
Definition: wined3d.h:171
@ WINED3DFMT_R16G16_SNORM
Definition: wined3d.h:194
@ WINED3DFMT_B8G8R8A8_UNORM
Definition: wined3d.h:244
@ WINED3DFMT_R16G16B16A16_SINT
Definition: wined3d.h:169
@ WINED3DFMT_R32G32B32_FLOAT
Definition: wined3d.h:161
@ WINED3DFMT_R16G16B16A16_FLOAT
Definition: wined3d.h:165
@ WINED3DFMT_R8G8B8A8_UNORM
Definition: wined3d.h:185
@ WINED3DFMT_R16G16B16A16_UNORM
Definition: wined3d.h:166
@ WINED3DFMT_R32_FLOAT
Definition: wined3d.h:198
@ WINED3DFMT_R16G16_FLOAT
Definition: wined3d.h:191
@ WINED3DFMT_R8G8B8A8_UINT
Definition: wined3d.h:187
@ WINED3DFMT_R10G10B10X2_SNORM
Definition: wined3d.h:146
@ WINED3DFMT_R32G32B32A32_FLOAT
Definition: wined3d.h:157
@ WINED3DFMT_R16G16B16A16_SNORM
Definition: wined3d.h:168
@ WINED3DFMT_R16G16_SINT
Definition: wined3d.h:195
@ WINED3D_INPUT_PER_VERTEX_DATA
Definition: wined3d.h:1826
void WINAPI wined3d_mutex_unlock(void)
Definition: wined3d_main.c:544
void WINAPI wined3d_mutex_lock(void)
Definition: wined3d_main.c:539
unsigned char BYTE
Definition: xxhash.c:193