ReactOS  0.4.14-dev-384-g5b37caa
d3d8_private.h
Go to the documentation of this file.
1 /*
2  * Direct3D 8 private include file
3  *
4  * Copyright 2002-2004 Jason Edmeades
5  * Copyright 2003-2004 Raphael Junqueira
6  * Copyright 2004 Christian Costa
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_D3D8_PRIVATE_H
24 #define __WINE_D3D8_PRIVATE_H
25 
26 #include <assert.h>
27 #include <stdarg.h>
28 
29 #define NONAMELESSUNION
30 #define NONAMELESSSTRUCT
31 #define COBJMACROS
32 #include "windef.h"
33 #include "winbase.h"
34 #include "wingdi.h"
35 #include "wine/debug.h"
36 #include "wine/heap.h"
37 #include "d3d8.h"
38 #include "wine/wined3d.h"
39 
40 #define D3DPRESENTFLAGS_MASK 0x00000fffu
41 
42 /* CreateVertexShader can return > 0xFFFF */
43 #define VS_HIGHESTFIXEDFXF 0xF0000000
44 
45 void d3dcaps_from_wined3dcaps(D3DCAPS8 *caps, const WINED3DCAPS *wined3d_caps) DECLSPEC_HIDDEN;
46 
47 struct d3d8
48 {
49  IDirect3D8 IDirect3D8_iface;
51  struct wined3d *wined3d;
52 };
53 
55 
56 /*****************************************************************************
57  * IDirect3DDevice8 implementation structure
58  */
59 
60 #define D3D8_INITIAL_HANDLE_TABLE_SIZE 64
61 #define D3D8_INVALID_HANDLE ~0U
62 
64 {
69 };
70 
72 {
73  void *object;
75 };
76 
78 {
83 };
84 
85 struct FvfToDecl
86 {
89 };
90 
92 {
96 };
97 
99 {
100  /* IUnknown fields */
101  IDirect3DDevice8 IDirect3DDevice8_iface;
105  IDirect3D8 *d3d_parent;
107 
108  /* FVF management */
109  struct FvfToDecl *decls;
111 
112  /* User data draws */
119 
121  /* Avoids recursion with nested ReleaseRef to 0 */
123 
124  /* The d3d8 API supports only one implicit swapchain (no D3DCREATE_ADAPTERGROUP_DEVICE,
125  * no GetSwapchain, GetBackBuffer doesn't accept a swapchain number). */
127 };
128 
129 HRESULT device_init(struct d3d8_device *device, struct d3d8 *parent, struct wined3d *wined3d, UINT adapter,
131 
132 static inline struct d3d8_device *impl_from_IDirect3DDevice8(IDirect3DDevice8 *iface)
133 {
135 }
136 
138 {
141 };
142 
146  void *data, DWORD *data_size) DECLSPEC_HIDDEN;
149  const void *data, DWORD data_size, DWORD flags) DECLSPEC_HIDDEN;
150 
152 {
153  IDirect3DVolume8 IDirect3DVolume8_iface;
156  unsigned int sub_resource_idx;
158 };
159 
161  unsigned int sub_resource_idx, const struct wined3d_parent_ops **parent_ops) DECLSPEC_HIDDEN;
162 
164 {
165  IDirect3DSwapChain8 IDirect3DSwapChain8_iface;
168  IDirect3DDevice8 *parent_device;
169 };
170 
172  struct d3d8_swapchain **swapchain) DECLSPEC_HIDDEN;
173 
175 {
176  IDirect3DSurface8 IDirect3DSurface8_iface;
179  unsigned int sub_resource_idx;
180  struct list rtv_entry;
182  IDirect3DDevice8 *parent_device;
185 };
186 
188 struct d3d8_device *d3d8_surface_get_device(const struct d3d8_surface *surface) DECLSPEC_HIDDEN;
191 void surface_init(struct d3d8_surface *surface, struct wined3d_texture *wined3d_texture, unsigned int sub_resource_idx,
192  const struct wined3d_parent_ops **parent_ops) DECLSPEC_HIDDEN;
193 struct d3d8_surface *unsafe_impl_from_IDirect3DSurface8(IDirect3DSurface8 *iface) DECLSPEC_HIDDEN;
194 
196 {
197  IDirect3DVertexBuffer8 IDirect3DVertexBuffer8_iface;
200  IDirect3DDevice8 *parent_device;
202 };
203 
206 struct d3d8_vertexbuffer *unsafe_impl_from_IDirect3DVertexBuffer8(IDirect3DVertexBuffer8 *iface) DECLSPEC_HIDDEN;
207 
209 {
210  IDirect3DIndexBuffer8 IDirect3DIndexBuffer8_iface;
213  IDirect3DDevice8 *parent_device;
215 };
216 
219 struct d3d8_indexbuffer *unsafe_impl_from_IDirect3DIndexBuffer8(IDirect3DIndexBuffer8 *iface) DECLSPEC_HIDDEN;
220 
222 {
223  IDirect3DBaseTexture8 IDirect3DBaseTexture8_iface;
226  IDirect3DDevice8 *parent_device;
227  struct list rtv_list;
228 };
229 
236 struct d3d8_texture *unsafe_impl_from_IDirect3DBaseTexture8(IDirect3DBaseTexture8 *iface) DECLSPEC_HIDDEN;
237 
239 {
241  DWORD elements_size; /* Size of elements, in bytes */
244 };
245 
248  struct d3d8_device *device, const DWORD *elements, DWORD shader_handle) DECLSPEC_HIDDEN;
250  struct d3d8_device *device, DWORD fvf) DECLSPEC_HIDDEN;
251 
253 {
256 };
257 
260  const DWORD *declaration, const DWORD *byte_code, DWORD shader_handle, DWORD usage) DECLSPEC_HIDDEN;
261 
262 #define D3D8_MAX_VERTEX_SHADER_CONSTANTF 256
263 
265 {
268 };
269 
272  const DWORD *byte_code, DWORD shader_handle) DECLSPEC_HIDDEN;
273 
276 unsigned int wined3dmapflags_from_d3dmapflags(unsigned int flags) DECLSPEC_HIDDEN;
278 size_t parse_token(const DWORD *pToken) DECLSPEC_HIDDEN;
279 
280 static inline DWORD d3dusage_from_wined3dusage(unsigned int usage)
281 {
282  return usage & WINED3DUSAGE_MASK;
283 }
284 
285 static inline D3DPOOL d3dpool_from_wined3daccess(unsigned int access, unsigned int usage)
286 {
288  {
289  default:
291  return D3DPOOL_DEFAULT;
294  return D3DPOOL_SCRATCH;
295  return D3DPOOL_SYSTEMMEM;
297  return D3DPOOL_MANAGED;
298  }
299 }
300 
301 static inline unsigned int wined3daccess_from_d3dpool(D3DPOOL pool, unsigned int usage)
302 {
303  switch (pool)
304  {
305  case D3DPOOL_DEFAULT:
306  if (usage & D3DUSAGE_DYNAMIC)
309  case D3DPOOL_MANAGED:
312  case D3DPOOL_SYSTEMMEM:
313  case D3DPOOL_SCRATCH:
315  default:
316  return 0;
317  }
318 }
319 
320 #endif /* __WINE_D3DX8_PRIVATE_H */
#define D3DUSAGE_DYNAMIC
Definition: d3d8types.h:99
BOOL inDestruction
Definition: d3d8_private.h:122
struct wined3d_buffer * index_buffer
Definition: d3d8_private.h:116
HRESULT texture_init(struct d3d8_texture *texture, struct d3d8_device *device, UINT width, UINT height, UINT levels, DWORD usage, D3DFORMAT format, D3DPOOL pool) DECLSPEC_HIDDEN
Definition: texture.c:1094
struct wined3d_buffer * wined3d_buffer
Definition: d3d8_private.h:199
GLint GLint GLsizei width
Definition: gl.h:1546
struct d3d8_handle_entry * entries
Definition: d3d8_private.h:79
d3d8_handle_type
Definition: d3d8_private.h:63
UINT index_buffer_size
Definition: d3d8_private.h:117
IDirect3DVolume8 IDirect3DVolume8_iface
Definition: d3d8_private.h:153
struct wined3d_device_parent device_parent
Definition: d3d8_private.h:102
IDirect3DDevice8 * parent_device
Definition: d3d8_private.h:182
enum wined3d_format_id wined3dformat_from_d3dformat(D3DFORMAT format) DECLSPEC_HIDDEN
Definition: device.c:94
GLsizei levels
Definition: glext.h:7884
IDirect3DVertexBuffer8 IDirect3DVertexBuffer8_iface
Definition: d3d8_private.h:197
struct FvfToDecl * decls
Definition: d3d8_private.h:109
device_type
static D3DPOOL d3dpool_from_wined3daccess(unsigned int access, unsigned int usage)
Definition: d3d8_private.h:285
LONG refcount
Definition: d3d8_private.h:50
enum _D3DPOOL D3DPOOL
HRESULT d3d8_vertex_declaration_init_fvf(struct d3d8_vertex_declaration *declaration, struct d3d8_device *device, DWORD fvf) DECLSPEC_HIDDEN
IDirect3DSwapChain8 IDirect3DSwapChain8_iface
Definition: d3d8_private.h:165
HRESULT d3d8_resource_get_private_data(struct d3d8_resource *resource, const GUID *guid, void *data, DWORD *data_size) DECLSPEC_HIDDEN
Definition: d3d8_main.c:153
void d3d8_vertex_declaration_destroy(struct d3d8_vertex_declaration *declaration) DECLSPEC_HIDDEN
GLuint buffer
Definition: glext.h:5915
void * object
Definition: d3d8_private.h:73
#define WINED3D_RESOURCE_ACCESS_MAP_W
Definition: wined3d.h:58
IDirect3DDevice8 * parent_device
Definition: d3d8_private.h:213
HRESULT volumetexture_init(struct d3d8_texture *texture, struct d3d8_device *device, UINT width, UINT height, UINT depth, UINT levels, DWORD usage, D3DFORMAT format, D3DPOOL pool) DECLSPEC_HIDDEN
Definition: texture.c:1190
unsigned int sub_resource_idx
Definition: d3d8_private.h:156
void volume_init(struct d3d8_volume *volume, struct wined3d_texture *wined3d_texture, unsigned int sub_resource_idx, const struct wined3d_parent_ops **parent_ops) DECLSPEC_HIDDEN
Definition: volume.c:209
HRESULT d3d8_resource_free_private_data(struct d3d8_resource *resource, const GUID *guid) DECLSPEC_HIDDEN
Definition: d3d8_main.c:135
HRESULT device_init(struct d3d8_device *device, struct d3d8 *parent, struct wined3d *wined3d, UINT adapter, D3DDEVTYPE device_type, HWND focus_window, DWORD flags, D3DPRESENT_PARAMETERS *parameters) DECLSPEC_HIDDEN
Definition: device.c:3279
IDirect3DDevice8 * parent_device
Definition: d3d8_private.h:226
IDirect3DBaseTexture8 IDirect3DBaseTexture8_iface
Definition: d3d8_private.h:223
#define WINED3DUSAGE_MASK
Definition: wined3d.h:913
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
enum d3d8_handle_type type
Definition: d3d8_private.h:74
struct wined3d * wined3d
Definition: d3d8_private.h:51
IDirect3DIndexBuffer8 IDirect3DIndexBuffer8_iface
Definition: d3d8_private.h:210
HRESULT cubetexture_init(struct d3d8_texture *texture, struct d3d8_device *device, UINT edge_length, UINT levels, DWORD usage, D3DFORMAT format, D3DPOOL pool) DECLSPEC_HIDDEN
Definition: texture.c:1142
#define WINED3D_RESOURCE_ACCESS_CPU
Definition: wined3d.h:56
struct d3d8_texture * texture
Definition: d3d8_private.h:157
const GUID * guid
IDirect3DSurface8 IDirect3DSurface8_iface
Definition: d3d8_private.h:176
void d3d8_vertex_shader_destroy(struct d3d8_vertex_shader *shader) DECLSPEC_HIDDEN
Definition: shader.c:32
LONG device_state
Definition: d3d8_private.h:120
d3d8_device_state
Definition: d3d8_private.h:91
unsigned int BOOL
Definition: ntddk_ex.h:94
long LONG
Definition: pedump.c:60
Definition: devices.h:37
static const WCHAR desc[]
Definition: protectdata.c:36
UINT vertex_buffer_pos
Definition: d3d8_private.h:115
HRESULT vertexbuffer_init(struct d3d8_vertexbuffer *buffer, struct d3d8_device *device, UINT size, DWORD usage, DWORD fvf, D3DPOOL pool) DECLSPEC_HIDDEN
Definition: buffer.c:273
struct wined3d_rendertarget_view * d3d8_surface_acquire_rendertarget_view(struct d3d8_surface *surface) DECLSPEC_HIDDEN
Definition: surface.c:369
HRESULT d3d8_swapchain_create(struct d3d8_device *device, struct wined3d_swapchain_desc *desc, struct d3d8_swapchain **swapchain) DECLSPEC_HIDDEN
Definition: swapchain.c:194
unsigned int sub_resource_idx
Definition: d3d8_private.h:179
struct wined3d_texture * wined3d_texture
Definition: d3d8_private.h:225
void d3d8_pixel_shader_destroy(struct d3d8_pixel_shader *shader) DECLSPEC_HIDDEN
Definition: shader.c:148
IDirect3DDevice8 * parent_device
Definition: d3d8_private.h:168
struct wined3d_swapchain * wined3d_swapchain
Definition: d3d8_private.h:167
enum _D3DFORMAT D3DFORMAT
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560
struct d3d8_texture * unsafe_impl_from_IDirect3DBaseTexture8(IDirect3DBaseTexture8 *iface) DECLSPEC_HIDDEN
Definition: texture.c:1061
UINT numConvertedDecls
Definition: d3d8_private.h:110
GLuint shader
Definition: glext.h:6030
GLsizeiptr size
Definition: glext.h:5919
void d3d8_resource_init(struct d3d8_resource *resource) DECLSPEC_HIDDEN
Definition: d3d8_main.c:191
r parent
Definition: btrfs.c:2869
void d3d8_surface_release_rendertarget_view(struct d3d8_surface *surface, struct wined3d_rendertarget_view *rtv) DECLSPEC_HIDDEN
Definition: surface.c:395
struct wined3d_texture * wined3d_texture
Definition: d3d8_private.h:155
GLenum GLuint texture
Definition: glext.h:6295
LONG HRESULT
Definition: typedefs.h:77
struct wined3d_device * wined3d_device
Definition: d3d8_private.h:104
void d3dcaps_from_wined3dcaps(D3DCAPS8 *caps, const WINED3DCAPS *wined3d_caps) DECLSPEC_HIDDEN
Definition: device.c:290
#define WINED3D_RESOURCE_ACCESS_MAP_R
Definition: wined3d.h:57
IDirect3DDevice8 * parent_device
Definition: d3d8_private.h:200
struct wined3d_vertex_declaration * wined3d_vertex_declaration
Definition: d3d8_private.h:242
enum _D3DDEVTYPE D3DDEVTYPE
enum wined3d_format_id format
Definition: d3d8_private.h:214
void d3d8_resource_cleanup(struct d3d8_resource *resource) DECLSPEC_HIDDEN
Definition: d3d8_main.c:130
IDirect3D8 IDirect3D8_iface
Definition: d3d8_private.h:49
unsigned long DWORD
Definition: ntddk_ex.h:95
struct wined3d_shader * wined3d_shader
Definition: d3d8_private.h:255
IUnknown * container
Definition: d3d8_private.h:183
struct wined3d_buffer * wined3d_buffer
Definition: d3d8_private.h:212
struct d3d8_texture * texture
Definition: d3d8_private.h:184
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
HRESULT d3d8_vertex_shader_init(struct d3d8_vertex_shader *shader, struct d3d8_device *device, const DWORD *declaration, const DWORD *byte_code, DWORD shader_handle, DWORD usage) DECLSPEC_HIDDEN
Definition: shader.c:79
GLbitfield flags
Definition: glext.h:7161
GLint GLint GLsizei GLsizei GLsizei depth
Definition: gl.h:1546
void surface_init(struct d3d8_surface *surface, struct wined3d_texture *wined3d_texture, unsigned int sub_resource_idx, const struct wined3d_parent_ops **parent_ops) DECLSPEC_HIDDEN
Definition: surface.c:317
Definition: d3d8_private.h:71
GLsizeiptr const GLvoid GLenum usage
Definition: glext.h:5919
struct wined3d_shader * wined3d_shader
Definition: d3d8_private.h:267
Definition: _list.h:228
size_t parse_token(const DWORD *pToken) DECLSPEC_HIDDEN
struct list rtv_list
Definition: d3d8_private.h:227
#define WINED3D_RESOURCE_ACCESS_GPU
Definition: wined3d.h:55
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
struct wined3d_texture * wined3d_texture
Definition: d3d8_private.h:178
wined3d_format_id
Definition: wined3d.h:105
static struct d3d8_device * impl_from_IDirect3DDevice8(IDirect3DDevice8 *iface)
Definition: d3d8_private.h:132
struct list rtv_entry
Definition: d3d8_private.h:180
UINT index_buffer_pos
Definition: d3d8_private.h:118
struct wined3d_rendertarget_view * wined3d_rtv
Definition: d3d8_private.h:181
#define DECLSPEC_HIDDEN
Definition: precomp.h:8
static DWORD d3dusage_from_wined3dusage(unsigned int usage)
Definition: d3d8_private.h:280
GLuint GLint GLboolean GLint GLenum access
Definition: glext.h:7866
struct wined3d_private_store private_store
Definition: d3d8_private.h:140
HRESULT d3d8_vertex_declaration_init(struct d3d8_vertex_declaration *declaration, struct d3d8_device *device, const DWORD *elements, DWORD shader_handle) DECLSPEC_HIDDEN
UINT vertex_buffer_size
Definition: d3d8_private.h:114
HRESULT indexbuffer_init(struct d3d8_indexbuffer *buffer, struct d3d8_device *device, UINT size, DWORD usage, D3DFORMAT format, D3DPOOL pool) DECLSPEC_HIDDEN
Definition: buffer.c:570
D3DFORMAT d3dformat_from_wined3dformat(enum wined3d_format_id format) DECLSPEC_HIDDEN
Definition: device.c:44
struct d3d8_surface * unsafe_impl_from_IDirect3DSurface8(IDirect3DSurface8 *iface) DECLSPEC_HIDDEN
Definition: surface.c:402
unsigned int wined3dmapflags_from_d3dmapflags(unsigned int flags) DECLSPEC_HIDDEN
Definition: device.c:144
UINT declArraySize
Definition: d3d8_private.h:110
unsigned int UINT
Definition: ndis.h:50
struct d3d8_device * d3d8_surface_get_device(const struct d3d8_surface *surface) DECLSPEC_HIDDEN
Definition: surface.c:362
void load_local_constants(const DWORD *d3d8_elements, struct wined3d_shader *wined3d_vertex_shader) DECLSPEC_HIDDEN
#define WINED3DUSAGE_SCRATCH
Definition: wined3d.h:915
struct d3d8_swapchain * implicit_swapchain
Definition: d3d8_private.h:126
IDirect3D8 * d3d_parent
Definition: d3d8_private.h:105
struct d3d8_vertex_declaration * declaration
Definition: d3d8_private.h:88
struct d3d8_vertex_declaration * vertex_declaration
Definition: d3d8_private.h:254
HRESULT d3d8_pixel_shader_init(struct d3d8_pixel_shader *shader, struct d3d8_device *device, const DWORD *byte_code, DWORD shader_handle) DECLSPEC_HIDDEN
Definition: shader.c:162
struct wined3d_vertex_declaration_element * elements
IDirect3DDevice8 IDirect3DDevice8_iface
Definition: d3d8_private.h:101
struct wined3d_buffer * vertex_buffer
Definition: d3d8_private.h:113
HRESULT d3d8_resource_set_private_data(struct d3d8_resource *resource, const GUID *guid, const void *data, DWORD data_size, DWORD flags) DECLSPEC_HIDDEN
Definition: d3d8_main.c:197
BOOL d3d8_init(struct d3d8 *d3d8) DECLSPEC_HIDDEN
Definition: directx.c:415
struct d3d8_handle_entry * free_entries
Definition: d3d8_private.h:80
struct d3d8_vertexbuffer * unsafe_impl_from_IDirect3DVertexBuffer8(IDirect3DVertexBuffer8 *iface) DECLSPEC_HIDDEN
Definition: buffer.c:313
struct d3d8_indexbuffer * unsafe_impl_from_IDirect3DIndexBuffer8(IDirect3DIndexBuffer8 *iface) DECLSPEC_HIDDEN
Definition: buffer.c:606
DWORD fvf
Definition: d3d8_private.h:87
static unsigned int wined3daccess_from_d3dpool(D3DPOOL pool, unsigned int usage)
Definition: d3d8_private.h:301