ReactOS 0.4.17-dev-966-gf06eace
vertexdeclaration.c File Reference
#include "wined3d_private.h"
Include dependency graph for vertexdeclaration.c:

Go to the source code of this file.

Classes

struct  wined3d_fvf_convert_state
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (d3d_decl)
 
static void dump_wined3d_vertex_element (const struct wined3d_vertex_element *element)
 
ULONG CDECL wined3d_vertex_declaration_incref (struct wined3d_vertex_declaration *declaration)
 
static void wined3d_vertex_declaration_destroy_object (void *object)
 
ULONG CDECL wined3d_vertex_declaration_decref (struct wined3d_vertex_declaration *declaration)
 
void *CDECL wined3d_vertex_declaration_get_parent (const struct wined3d_vertex_declaration *declaration)
 
static BOOL declaration_element_valid_ffp (const struct wined3d_vertex_element *element)
 
static HRESULT vertexdeclaration_init (struct wined3d_vertex_declaration *declaration, struct wined3d_device *device, const struct wined3d_vertex_element *elements, UINT element_count, void *parent, const struct wined3d_parent_ops *parent_ops)
 
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)
 
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)
 
static unsigned int convert_fvf_to_declaration (const struct wined3d_adapter *adapter, uint32_t fvf, struct wined3d_vertex_element **elements)
 
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)
 

Function Documentation

◆ append_decl_element()

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 
)
static

Definition at line 311 of file vertexdeclaration.c.

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}
static int state
Definition: maze.c:121
BYTE usage_idx
unsigned int idx
Definition: utils.c:40
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
GLintptr offset
Definition: glext.h:5920
GLsizeiptr const GLvoid GLenum usage
Definition: glext.h:5919
unsigned int UINT
Definition: sysinfo.c:13
static UINT format_id
Definition: clipboard.c:1455
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
@ WINED3D_DECL_METHOD_DEFAULT
Definition: wined3d.h:796
#define WINED3D_OUTPUT_SLOT_SEMANTIC
Definition: wined3d.h:1573
@ WINED3D_INPUT_PER_VERTEX_DATA
Definition: wined3d.h:1826

Referenced by convert_fvf_to_declaration().

◆ convert_fvf_to_declaration()

static unsigned int convert_fvf_to_declaration ( const struct wined3d_adapter *  adapter,
uint32_t  fvf,
struct wined3d_vertex_element **  elements 
)
static

Definition at line 334 of file vertexdeclaration.c.

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}
#define ERR(fmt,...)
Definition: precomp.h:57
unsigned int BOOL
Definition: ntddk_ex.h:94
return adapter
GLsizeiptr size
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 * u
Definition: glfuncs.h:240
#define calloc
Definition: rosglue.h:14
struct wined3d_vertex_element * elements
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_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 WINED3DFVF_TEXCOUNT_SHIFT
Definition: wined3d.h:984
#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
@ WINED3DFMT_R32G32_FLOAT
Definition: wined3d.h:171
@ WINED3DFMT_B8G8R8A8_UNORM
Definition: wined3d.h:244
@ WINED3DFMT_R32G32B32_FLOAT
Definition: wined3d.h:161
@ WINED3DFMT_R32_FLOAT
Definition: wined3d.h:198
@ WINED3DFMT_R8G8B8A8_UINT
Definition: wined3d.h:187
@ WINED3DFMT_R32G32B32A32_FLOAT
Definition: wined3d.h:157
#define WINED3DFVF_XYZB2
Definition: wined3d.h:974
#define WINED3DFVF_LASTBETA_D3DCOLOR
Definition: wined3d.h:995
#define WINED3DFVF_TEXTUREFORMAT2
Definition: wined3d.h:999

Referenced by wined3d_vertex_declaration_create_from_fvf().

◆ declaration_element_valid_ffp()

static BOOL declaration_element_valid_ffp ( const struct wined3d_vertex_element *  element)
static

Definition at line 86 of file vertexdeclaration.c.

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}
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
@ WINED3DFMT_R16G16B16A16_SINT
Definition: wined3d.h:169
@ WINED3DFMT_R16G16B16A16_FLOAT
Definition: wined3d.h:165
@ WINED3DFMT_R8G8B8A8_UNORM
Definition: wined3d.h:185
@ WINED3DFMT_R16G16B16A16_UNORM
Definition: wined3d.h:166
@ WINED3DFMT_R16G16_FLOAT
Definition: wined3d.h:191
@ WINED3DFMT_R16G16B16A16_SNORM
Definition: wined3d.h:168
@ WINED3DFMT_R16G16_SINT
Definition: wined3d.h:195

Referenced by vertexdeclaration_init().

◆ dump_wined3d_vertex_element()

static void dump_wined3d_vertex_element ( const struct wined3d_vertex_element *  element)
static

Definition at line 29 of file vertexdeclaration.c.

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}
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
const char * debug_d3ddeclmethod(enum wined3d_decl_method method)
Definition: utils.c:4933
const char * debug_d3ddeclusage(enum wined3d_decl_usage usage)
Definition: utils.c:4952
#define TRACE(s)
Definition: solgame.cpp:4

Referenced by vertexdeclaration_init().

◆ vertexdeclaration_init()

static HRESULT vertexdeclaration_init ( struct wined3d_vertex_declaration *  declaration,
struct wined3d_device *  device,
const struct wined3d_vertex_element *  elements,
UINT  element_count,
void *  parent,
const struct wined3d_parent_ops *  parent_ops 
)
static

Definition at line 174 of file vertexdeclaration.c.

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}
_Check_return_ _Ret_maybenull_ _In_ size_t alignment
Definition: align.cpp:48
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define free
Definition: debug_ros.c:5
#define TRACE_ON(x)
Definition: compat.h:75
r parent
Definition: btrfs.c:3010
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 const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
#define e
Definition: ke_i.h:82
static ULONG ** element_count
Definition: exception.c:124
Definition: devices.h:37
const struct wined3d_format * format
static void dump_wined3d_vertex_element(const struct wined3d_vertex_element *element)
static BOOL declaration_element_valid_ffp(const struct wined3d_vertex_element *element)
#define WINED3D_OK
Definition: wined3d.h:33
#define WINED3D_MAX_STREAMS
Definition: wined3d.h:1596
#define WINED3D_APPEND_ALIGNED_ELEMENT
Definition: wined3d.h:1571
#define WINED3D_FORMAT_CAP_VERTEX_ATTRIBUTE
@ WINED3D_GL_RES_TYPE_BUFFER

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( d3d_decl  )

◆ wined3d_vertex_declaration_create()

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 
)

Definition at line 276 of file vertexdeclaration.c.

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}
static HRESULT vertexdeclaration_init(struct d3d9_vertex_declaration *declaration, struct d3d9_device *device, const D3DVERTEXELEMENT9 *elements)
HRESULT hr
Definition: delayimp.cpp:582
#define FAILED(hr)
Definition: intsafe.h:51
struct wined3d_vertex_declaration_element * elements
const struct wined3d_parent_ops * parent_ops

Referenced by d3d8_vertex_declaration_init(), d3d_input_layout_init(), vertexdeclaration_init(), and wined3d_vertex_declaration_create_from_fvf().

◆ wined3d_vertex_declaration_create_from_fvf()

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 
)

Definition at line 445 of file vertexdeclaration.c.

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}
unsigned long DWORD
Definition: ntddk_ex.h:95
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)
static unsigned int convert_fvf_to_declaration(const struct wined3d_adapter *adapter, uint32_t fvf, struct wined3d_vertex_element **elements)

Referenced by d3d8_vertex_declaration_init_fvf(), and ddraw_find_decl().

◆ wined3d_vertex_declaration_decref()

ULONG CDECL wined3d_vertex_declaration_decref ( struct wined3d_vertex_declaration *  declaration)

Definition at line 61 of file vertexdeclaration.c.

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}
#define InterlockedDecrement
Definition: armddk.h:52
void wined3d_cs_destroy_object(struct wined3d_cs *cs, void(*callback)(void *object), void *object)
Definition: cs.c:2299
static void wined3d_vertex_declaration_destroy_object(void *object)
void WINAPI wined3d_mutex_unlock(void)
Definition: wined3d_main.c:544
void WINAPI wined3d_mutex_lock(void)
Definition: wined3d_main.c:539

Referenced by d3d11_input_layout_Release(), d3d8_vertex_declaration_destroy(), d3d9_device_Release(), d3d9_vertex_declaration_Release(), d3d_vertex_buffer7_Release(), ddraw_destroy_swapchain(), ddraw_find_decl(), state_unbind_resources(), wined3d_device_context_set_vertex_declaration(), wined3d_stateblock_capture(), wined3d_stateblock_set_vertex_declaration(), and wined3d_stateblock_state_cleanup().

◆ wined3d_vertex_declaration_destroy_object()

static void wined3d_vertex_declaration_destroy_object ( void *  object)
static

Definition at line 51 of file vertexdeclaration.c.

52{
54
55 TRACE("declaration %p.\n", declaration);
56
57 free(declaration->elements);
59}

Referenced by wined3d_vertex_declaration_decref().

◆ wined3d_vertex_declaration_get_parent()

◆ wined3d_vertex_declaration_incref()

ULONG CDECL wined3d_vertex_declaration_incref ( struct wined3d_vertex_declaration *  declaration)

Definition at line 42 of file vertexdeclaration.c.

43{
44 unsigned int refcount = InterlockedIncrement(&declaration->ref);
45
46 TRACE("%p increasing refcount to %u.\n", declaration, refcount);
47
48 return refcount;
49}
#define InterlockedIncrement
Definition: armddk.h:53

Referenced by d3d11_input_layout_AddRef(), d3d9_vertex_declaration_AddRef(), d3d_vertex_buffer_create(), device_get_fvf_declaration(), wined3d_device_context_set_vertex_declaration(), wined3d_stateblock_capture(), and wined3d_stateblock_set_vertex_declaration().