ReactOS 0.4.17-dev-970-gcf0f1a6
vertexdeclaration.c
Go to the documentation of this file.
1/*
2 * vertex declaration implementation
3 *
4 * Copyright 2002-2005 Raphael Junqueira
5 * Copyright 2004 Jason Edmeades
6 * Copyright 2004 Christian Costa
7 * Copyright 2005 Oliver Stieber
8 * Copyright 2009 Henri Verbeet for CodeWeavers
9 *
10 * This library is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU Lesser General Public
12 * License as published by the Free Software Foundation; either
13 * version 2.1 of the License, or (at your option) any later version.
14 *
15 * This library is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 * Lesser General Public License for more details.
19 *
20 * You should have received a copy of the GNU Lesser General Public
21 * License along with this library; if not, write to the Free Software
22 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
23 */
24
25#include "wined3d_private.h"
26
28
30{
31 TRACE(" format: %s (%#x)\n", debug_d3dformat(element->format), element->format);
32 TRACE(" input_slot: %u\n", element->input_slot);
33 TRACE(" offset: %u\n", element->offset);
34 TRACE(" output_slot: %u\n", element->output_slot);
35 TRACE(" input slot class: %s\n", debug_d3dinput_classification(element->input_slot_class));
36 TRACE("instance data step rate: %u\n", element->instance_data_step_rate);
37 TRACE(" method: %s (%#x)\n", debug_d3ddeclmethod(element->method), element->method);
38 TRACE(" usage: %s (%#x)\n", debug_d3ddeclusage(element->usage), element->usage);
39 TRACE(" usage_idx: %u\n", element->usage_idx);
40}
41
43{
44 unsigned int refcount = InterlockedIncrement(&declaration->ref);
45
46 TRACE("%p increasing refcount to %u.\n", declaration, refcount);
47
48 return refcount;
49}
50
52{
54
55 TRACE("declaration %p.\n", declaration);
56
57 free(declaration->elements);
59}
60
62{
63 unsigned int refcount = InterlockedDecrement(&declaration->ref);
64
65 TRACE("%p decreasing refcount to %u.\n", declaration, refcount);
66
67 if (!refcount)
68 {
70 declaration->parent_ops->wined3d_object_destroyed(declaration->parent);
74 }
75
76 return refcount;
77}
78
80{
81 TRACE("declaration %p.\n", declaration);
82
83 return declaration->parent;
84}
85
87{
88 switch(element->usage)
89 {
92 switch(element->format)
93 {
101 return TRUE;
102 default:
103 return FALSE;
104 }
105
107 switch(element->format)
108 {
119 return TRUE;
120 default:
121 return FALSE;
122 }
123
125 switch(element->format)
126 {
131 return TRUE;
132 default:
133 return FALSE;
134 }
135
137 switch(element->format)
138 {
147 return TRUE;
148 default:
149 return FALSE;
150 }
151
153 switch(element->format)
154 {
164 return TRUE;
165 default:
166 return FALSE;
167 }
168
169 default:
170 return FALSE;
171 }
172}
173
176 void *parent, const struct wined3d_parent_ops *parent_ops)
177{
178 const struct wined3d_adapter *adapter = device->adapter;
179 unsigned int i;
180
181 if (TRACE_ON(d3d_decl))
182 {
183 for (i = 0; i < element_count; ++i)
184 {
185 dump_wined3d_vertex_element(elements + i);
186 }
187 }
188
189 declaration->ref = 1;
190 declaration->parent = parent;
191 declaration->parent_ops = parent_ops;
192 declaration->device = device;
193 if (!(declaration->elements = calloc(element_count, sizeof(*declaration->elements))))
194 {
195 ERR("Failed to allocate elements memory.\n");
196 return E_OUTOFMEMORY;
197 }
198 declaration->element_count = element_count;
199
200 /* Do some static analysis on the elements to make reading the
201 * declaration more comfortable for the drawing code. */
202 for (i = 0; i < element_count; ++i)
203 {
205 unsigned int alignment;
206
207 e->format = wined3d_get_format(adapter, elements[i].format, 0);
208 e->ffp_valid = declaration_element_valid_ffp(&elements[i]);
209 e->input_slot = elements[i].input_slot;
210 e->offset = elements[i].offset;
211 e->output_slot = elements[i].output_slot;
212 e->input_slot_class = elements[i].input_slot_class;
213 e->instance_data_step_rate = elements[i].instance_data_step_rate;
214 e->method = elements[i].method;
215 e->usage = elements[i].usage;
216 e->usage_idx = elements[i].usage_idx;
217
218 if ((alignment = e->format->byte_count) > 4)
219 alignment = 4;
220
221 if (e->usage == WINED3D_DECL_USAGE_POSITIONT)
222 declaration->position_transformed = true;
223 else if (e->usage == WINED3D_DECL_USAGE_PSIZE)
224 declaration->point_size = true;
225 else if (e->usage == WINED3D_DECL_USAGE_COLOR && !e->usage_idx)
226 declaration->diffuse = true;
227 else if (e->usage == WINED3D_DECL_USAGE_COLOR && e->usage_idx == 1)
228 declaration->specular = true;
229 else if (e->usage == WINED3D_DECL_USAGE_NORMAL)
230 declaration->normal = true;
231 else if (e->usage == WINED3D_DECL_USAGE_TEXCOORD)
232 declaration->texcoords |= (1u << e->usage_idx);
233
234 /* Find the streams used in the declaration. The vertex buffers have
235 * to be loaded when drawing, but filter tessellation pseudo streams. */
236 if (e->input_slot >= WINED3D_MAX_STREAMS)
237 continue;
238
240 {
241 FIXME("The application tries to use an unsupported format (%s).\n",
242 debug_d3dformat(elements[i].format));
243 free(declaration->elements);
244 return E_INVALIDARG;
245 }
246
247 if (e->offset == WINED3D_APPEND_ALIGNED_ELEMENT)
248 {
249 const struct wined3d_vertex_declaration_element *prev;
250 unsigned int j;
251
252 e->offset = 0;
253 for (j = 1; j <= i; ++j)
254 {
255 prev = &declaration->elements[i - j];
256 if (prev->input_slot == e->input_slot)
257 {
258 e->offset = (prev->offset + prev->format->byte_count + alignment - 1) & ~(alignment - 1);
259 break;
260 }
261 }
262 }
263
264 if (e->offset & (alignment - 1))
265 {
266 WARN("Declaration element %u with format %s and offset %u is not %u byte aligned.\n",
267 i, debug_d3dformat(elements[i].format), e->offset, alignment);
268 free(declaration->elements);
269 return E_INVALIDARG;
270 }
271 }
272
273 return WINED3D_OK;
274}
275
277 const struct wined3d_vertex_element *elements, UINT element_count, void *parent,
278 const struct wined3d_parent_ops *parent_ops, struct wined3d_vertex_declaration **declaration)
279{
281 HRESULT hr;
282
283 TRACE("device %p, elements %p, element_count %u, parent %p, parent_ops %p, declaration %p.\n",
285
286 if (!(object = calloc(1, sizeof(*object))))
287 return E_OUTOFMEMORY;
288
290 if (FAILED(hr))
291 {
292 WARN("Failed to initialize vertex declaration, hr %#lx.\n", hr);
293 free(object);
294 return hr;
295 }
296
297 TRACE("Created vertex declaration %p.\n", object);
299
300 return WINED3D_OK;
301}
302
304{
307 unsigned int offset;
308 unsigned int idx;
309};
310
313{
314 struct wined3d_vertex_element *elements = state->elements;
315 const struct wined3d_format *format;
316 UINT offset = state->offset;
317 UINT idx = state->idx;
318
319 elements[idx].format = format_id;
320 elements[idx].input_slot = 0;
321 elements[idx].offset = offset;
324 elements[idx].instance_data_step_rate = 0;
326 elements[idx].usage = usage;
327 elements[idx].usage_idx = usage_idx;
328
330 state->offset += format->byte_count;
331 ++state->idx;
332}
333
334static unsigned int convert_fvf_to_declaration(const struct wined3d_adapter *adapter,
335 uint32_t fvf, struct wined3d_vertex_element **elements)
336{
337 BOOL has_pos = !!(fvf & WINED3DFVF_POSITION_MASK);
338 BOOL has_blend = (fvf & WINED3DFVF_XYZB5) > WINED3DFVF_XYZRHW;
339 BOOL has_blend_idx = has_blend &&
340 (((fvf & WINED3DFVF_XYZB5) == WINED3DFVF_XYZB5) ||
343 BOOL has_normal = !!(fvf & WINED3DFVF_NORMAL);
344 BOOL has_psize = !!(fvf & WINED3DFVF_PSIZE);
345 BOOL has_diffuse = !!(fvf & WINED3DFVF_DIFFUSE);
346 BOOL has_specular = !!(fvf & WINED3DFVF_SPECULAR);
347
348 unsigned int num_textures = (fvf & WINED3DFVF_TEXCOUNT_MASK) >> WINED3DFVF_TEXCOUNT_SHIFT;
349 unsigned int texcoords = (fvf & 0xffff0000) >> 16;
351 unsigned int size;
352 unsigned int idx;
353 unsigned int num_blends = 1 + (((fvf & WINED3DFVF_XYZB5) - WINED3DFVF_XYZB1) >> 1);
354 if (has_blend_idx) num_blends--;
355
356 /* Compute declaration size */
357 size = has_pos + (has_blend && num_blends > 0) + has_blend_idx + has_normal +
358 has_psize + has_diffuse + has_specular + num_textures;
359
360 state.adapter = adapter;
361 if (!(state.elements = calloc(size, sizeof(*state.elements))))
362 return ~0u;
363 state.offset = 0;
364 state.idx = 0;
365
366 if (has_pos)
367 {
368 if (!has_blend && (fvf & WINED3DFVF_XYZRHW))
370 else if ((fvf & WINED3DFVF_XYZW) == WINED3DFVF_XYZW)
372 else
374 }
375
376 if (has_blend && (num_blends > 0))
377 {
380 else
381 {
382 switch (num_blends)
383 {
384 case 1:
386 break;
387 case 2:
389 break;
390 case 3:
392 break;
393 case 4:
395 break;
396 default:
397 ERR("Unexpected amount of blend values: %u\n", num_blends);
398 }
399 }
400 }
401
402 if (has_blend_idx)
403 {
407 else if (fvf & WINED3DFVF_LASTBETA_D3DCOLOR)
409 else
411 }
412
413 if (has_normal)
415 if (has_psize)
417 if (has_diffuse)
419 if (has_specular)
421
422 for (idx = 0; idx < num_textures; ++idx)
423 {
424 switch ((texcoords >> (idx * 2)) & 0x03)
425 {
428 break;
431 break;
434 break;
437 break;
438 }
439 }
440
441 *elements = state.elements;
442 return size;
443}
444
446 uint32_t fvf, void *parent, const struct wined3d_parent_ops *parent_ops,
448{
449 struct wined3d_vertex_element *elements;
450 unsigned int size;
451 DWORD hr;
452
453 TRACE("device %p, fvf %#x, parent %p, parent_ops %p, declaration %p.\n",
454 device, fvf, parent, parent_ops, declaration);
455
456 size = convert_fvf_to_declaration(device->adapter, fvf, &elements);
457 if (size == ~0u)
458 return E_OUTOFMEMORY;
459
461 free(elements);
462 return hr;
463}
_Check_return_ _Ret_maybenull_ _In_ size_t alignment
Definition: align.cpp:48
static int state
Definition: maze.c:121
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
#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
void wined3d_cs_destroy_object(struct wined3d_cs *cs, void(*callback)(void *object), void *object)
Definition: cs.c:2299
BYTE usage_idx
BYTE usage
enum wined3d_format_id format
static HRESULT vertexdeclaration_init(struct d3d9_vertex_declaration *declaration, struct d3d9_device *device, const D3DVERTEXELEMENT9 *elements)
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define free
Definition: debug_ros.c:5
HRESULT hr
Definition: delayimp.cpp:582
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
UINT32 uint32_t
Definition: types.h:75
const char * debug_d3dformat(enum wined3d_format_id format_id)
Definition: utils.c:4605
const char * debug_d3dinput_classification(enum wined3d_input_classification classification)
Definition: utils.c:4978
unsigned int idx
Definition: utils.c:40
const char * debug_d3ddeclmethod(enum wined3d_decl_method method)
Definition: utils.c:4933
const struct wined3d_format * wined3d_get_format(const struct wined3d_adapter *adapter, enum wined3d_format_id format_id, unsigned int bind_flags)
Definition: utils.c:4428
const char * debug_d3ddeclusage(enum wined3d_decl_usage usage)
Definition: utils.c:4952
#define CDECL
Definition: compat.h:29
#define TRACE_ON(x)
Definition: compat.h:75
r parent
Definition: btrfs.c:3010
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
return adapter
GLsizeiptr size
Definition: glext.h:5919
GLintptr offset
Definition: glext.h:5920
GLsizeiptr const GLvoid GLenum usage
Definition: glext.h:5919
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 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 * u
Definition: glfuncs.h:240
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 GLint GLint j
Definition: glfuncs.h:250
unsigned int UINT
Definition: sysinfo.c:13
#define FAILED(hr)
Definition: intsafe.h:51
#define e
Definition: ke_i.h:82
static ULONG ** element_count
Definition: exception.c:124
static UINT format_id
Definition: clipboard.c:1455
#define calloc
Definition: rosglue.h:14
#define TRACE(s)
Definition: solgame.cpp:4
Definition: devices.h:37
struct wined3d_vertex_element * elements
const struct wined3d_adapter * adapter
const struct wined3d_format * format
struct wined3d_vertex_declaration_element * elements
const struct wined3d_parent_ops * parent_ops
unsigned int output_slot
Definition: wined3d.h:1835
enum wined3d_format_id format
Definition: wined3d.h:1832
unsigned int input_slot
Definition: wined3d.h:1833
enum wined3d_input_classification input_slot_class
Definition: wined3d.h:1836
unsigned int instance_data_step_rate
Definition: wined3d.h:1837
unsigned int offset
Definition: wined3d.h:1834
uint32_t ULONG
Definition: typedefs.h:59
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_incref(struct wined3d_vertex_declaration *declaration)
void *CDECL wined3d_vertex_declaration_get_parent(const struct wined3d_vertex_declaration *declaration)
static unsigned int convert_fvf_to_declaration(const struct wined3d_adapter *adapter, uint32_t fvf, struct wined3d_vertex_element **elements)
static void wined3d_vertex_declaration_destroy_object(void *object)
static void dump_wined3d_vertex_element(const struct wined3d_vertex_element *element)
ULONG CDECL wined3d_vertex_declaration_decref(struct wined3d_vertex_declaration *declaration)
static BOOL declaration_element_valid_ffp(const struct wined3d_vertex_element *element)
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)
static void append_decl_element(struct wined3d_fvf_convert_state *state, enum wined3d_format_id format_id, enum wined3d_decl_usage usage, UINT usage_idx)
#define WINED3DFVF_PSIZE
Definition: wined3d.h:980
#define WINED3DFVF_TEXTUREFORMAT4
Definition: wined3d.h:1001
#define WINED3DFVF_TEXTUREFORMAT3
Definition: wined3d.h:1000
#define WINED3DFVF_XYZB5
Definition: wined3d.h:977
wined3d_decl_usage
Definition: wined3d.h:806
@ 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_POSITIONT
Definition: wined3d.h:816
@ WINED3D_DECL_USAGE_TEXCOORD
Definition: wined3d.h:812
#define WINED3DFVF_SPECULAR
Definition: wined3d.h:982
#define WINED3D_OK
Definition: wined3d.h:33
#define WINED3DFVF_TEXCOUNT_SHIFT
Definition: wined3d.h:984
@ WINED3D_DECL_METHOD_DEFAULT
Definition: wined3d.h:796
#define WINED3DFVF_DIFFUSE
Definition: wined3d.h:981
#define WINED3DFVF_XYZW
Definition: wined3d.h:978
#define WINED3DFVF_POSITION_MASK
Definition: wined3d.h:970
#define WINED3DFVF_TEXTUREFORMAT1
Definition: wined3d.h:998
#define WINED3DFVF_LASTBETA_UBYTE4
Definition: wined3d.h:994
#define WINED3DFVF_XYZB1
Definition: wined3d.h:973
#define WINED3DFVF_TEXCOUNT_MASK
Definition: wined3d.h:983
#define WINED3DFVF_XYZRHW
Definition: wined3d.h:972
#define WINED3DFVF_NORMAL
Definition: wined3d.h:979
wined3d_format_id
Definition: wined3d.h:126
@ WINED3DFMT_R32G32_FLOAT
Definition: wined3d.h:171
@ 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_R32G32B32A32_FLOAT
Definition: wined3d.h:157
@ WINED3DFMT_R16G16B16A16_SNORM
Definition: wined3d.h:168
@ WINED3DFMT_R16G16_SINT
Definition: wined3d.h:195
#define WINED3D_MAX_STREAMS
Definition: wined3d.h:1596
#define WINED3D_APPEND_ALIGNED_ELEMENT
Definition: wined3d.h:1571
#define WINED3D_OUTPUT_SLOT_SEMANTIC
Definition: wined3d.h:1573
#define WINED3DFVF_XYZB2
Definition: wined3d.h:974
#define WINED3DFVF_LASTBETA_D3DCOLOR
Definition: wined3d.h:995
#define WINED3DFVF_TEXTUREFORMAT2
Definition: wined3d.h:999
@ 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
#define WINED3D_FORMAT_CAP_VERTEX_ATTRIBUTE
@ WINED3D_GL_RES_TYPE_BUFFER