d3d10core_private.h 9 KB
Newer Older
1
/*
2
 * Copyright 2008-2009 Henri Verbeet for CodeWeavers
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

#ifndef __WINE_D3D10CORE_PRIVATE_H
#define __WINE_D3D10CORE_PRIVATE_H

#include "wine/debug.h"

24
#define COBJMACROS
25
#include "winbase.h"
26
#include "wingdi.h"
27 28 29 30
#include "winuser.h"
#include "objbase.h"

#include "d3d10.h"
31 32 33 34
#ifdef D3D10CORE_INIT_GUID
#include "initguid.h"
#endif
#include "wine/wined3d.h"
35
#include "wine/winedxgi.h"
36

37 38 39 40
#define MAKE_TAG(ch0, ch1, ch2, ch3) \
    ((DWORD)(ch0) | ((DWORD)(ch1) << 8) | \
    ((DWORD)(ch2) << 16) | ((DWORD)(ch3) << 24 ))
#define TAG_DXBC MAKE_TAG('D', 'X', 'B', 'C')
41
#define TAG_ISGN MAKE_TAG('I', 'S', 'G', 'N')
42
#define TAG_OSGN MAKE_TAG('O', 'S', 'G', 'N')
43
#define TAG_SHDR MAKE_TAG('S', 'H', 'D', 'R')
44

45 46 47 48 49 50
struct d3d10_shader_info
{
    const DWORD *shader_code;
    struct wined3d_shader_signature *output_signature;
};

51
/* TRACE helper functions */
52 53
const char *debug_d3d10_primitive_topology(D3D10_PRIMITIVE_TOPOLOGY topology) DECLSPEC_HIDDEN;
const char *debug_dxgi_format(DXGI_FORMAT format) DECLSPEC_HIDDEN;
54

55 56
DXGI_FORMAT dxgi_format_from_wined3dformat(enum wined3d_format_id format) DECLSPEC_HIDDEN;
enum wined3d_format_id wined3dformat_from_dxgi_format(DXGI_FORMAT format) DECLSPEC_HIDDEN;
57

58 59 60 61 62 63
static inline void read_dword(const char **ptr, DWORD *d)
{
    memcpy(d, *ptr, sizeof(*d));
    *ptr += sizeof(*d);
}

64
void skip_dword_unknown(const char **ptr, unsigned int count) DECLSPEC_HIDDEN;
65 66

HRESULT parse_dxbc(const char *data, SIZE_T data_size,
67
        HRESULT (*chunk_handler)(const char *data, DWORD data_size, DWORD tag, void *ctx), void *ctx) DECLSPEC_HIDDEN;
68

69 70 71
/* IDirect3D10Device */
struct d3d10_device
{
72
    ID3D10Device ID3D10Device_iface;
73
    const struct IUnknownVtbl *inner_unknown_vtbl;
74
    IWineDXGIDeviceParent IWineDXGIDeviceParent_iface;
75
    IUnknown *outer_unknown;
76
    LONG refcount;
77

78
    struct wined3d_device_parent device_parent;
79
    struct wined3d_device *wined3d_device;
80
};
81

82 83
void d3d10_device_init(struct d3d10_device *device, void *outer_unknown) DECLSPEC_HIDDEN;

84 85 86
/* ID3D10Texture2D */
struct d3d10_texture2d
{
87
    ID3D10Texture2D ID3D10Texture2D_iface;
88
    LONG refcount;
89

90
    IUnknown *dxgi_surface;
91
    struct wined3d_surface *wined3d_surface;
92
    D3D10_TEXTURE2D_DESC desc;
93 94
};

95
HRESULT d3d10_texture2d_init(struct d3d10_texture2d *texture, struct d3d10_device *device,
96
        const D3D10_TEXTURE2D_DESC *desc) DECLSPEC_HIDDEN;
97

98 99 100
/* ID3D10Texture3D */
struct d3d10_texture3d
{
101
    ID3D10Texture3D ID3D10Texture3D_iface;
102 103
    LONG refcount;

104
    struct wined3d_texture *wined3d_texture;
105 106 107 108 109 110
    D3D10_TEXTURE3D_DESC desc;
};

HRESULT d3d10_texture3d_init(struct d3d10_texture3d *texture, struct d3d10_device *device,
        const D3D10_TEXTURE3D_DESC *desc) DECLSPEC_HIDDEN;

111 112 113 114 115
/* ID3D10Buffer */
struct d3d10_buffer
{
    const struct ID3D10BufferVtbl *vtbl;
    LONG refcount;
116

117
    struct wined3d_buffer *wined3d_buffer;
118 119
};

120
HRESULT d3d10_buffer_init(struct d3d10_buffer *buffer, struct d3d10_device *device,
121
        const D3D10_BUFFER_DESC *desc, const D3D10_SUBRESOURCE_DATA *data) DECLSPEC_HIDDEN;
122

123 124 125
/* ID3D10DepthStencilView */
struct d3d10_depthstencil_view
{
126
    ID3D10DepthStencilView ID3D10DepthStencilView_iface;
127 128 129 130 131
    LONG refcount;
};

HRESULT d3d10_depthstencil_view_init(struct d3d10_depthstencil_view *view) DECLSPEC_HIDDEN;

132 133 134
/* ID3D10RenderTargetView */
struct d3d10_rendertarget_view
{
135
    ID3D10RenderTargetView ID3D10RenderTargetView_iface;
136 137
    LONG refcount;

138
    struct wined3d_rendertarget_view *wined3d_view;
139
    D3D10_RENDER_TARGET_VIEW_DESC desc;
140 141
};

142
HRESULT d3d10_rendertarget_view_init(struct d3d10_rendertarget_view *view,
143
        ID3D10Resource *resource, const D3D10_RENDER_TARGET_VIEW_DESC *desc) DECLSPEC_HIDDEN;
144
struct d3d10_rendertarget_view *unsafe_impl_from_ID3D10RenderTargetView(ID3D10RenderTargetView *iface) DECLSPEC_HIDDEN;
145

146 147 148
/* ID3D10ShaderResourceView */
struct d3d10_shader_resource_view
{
149
    ID3D10ShaderResourceView ID3D10ShaderResourceView_iface;
150 151 152 153 154
    LONG refcount;
};

HRESULT d3d10_shader_resource_view_init(struct d3d10_shader_resource_view *view) DECLSPEC_HIDDEN;

155 156 157
/* ID3D10InputLayout */
struct d3d10_input_layout
{
158
    ID3D10InputLayout ID3D10InputLayout_iface;
159
    LONG refcount;
160

161
    struct wined3d_vertex_declaration *wined3d_decl;
162 163
};

164 165 166
HRESULT d3d10_input_layout_init(struct d3d10_input_layout *layout, struct d3d10_device *device,
        const D3D10_INPUT_ELEMENT_DESC *element_descs, UINT element_count,
        const void *shader_byte_code, SIZE_T shader_byte_code_length) DECLSPEC_HIDDEN;
167
struct d3d10_input_layout *unsafe_impl_from_ID3D10InputLayout(ID3D10InputLayout *iface) DECLSPEC_HIDDEN;
168

169 170 171
/* ID3D10VertexShader */
struct d3d10_vertex_shader
{
172
    ID3D10VertexShader ID3D10VertexShader_iface;
173
    LONG refcount;
174

175
    struct wined3d_shader *wined3d_shader;
176
    struct wined3d_shader_signature output_signature;
177 178
};

179 180
HRESULT d3d10_vertex_shader_init(struct d3d10_vertex_shader *shader, struct d3d10_device *device,
        const void *byte_code, SIZE_T byte_code_length) DECLSPEC_HIDDEN;
181
struct d3d10_vertex_shader *unsafe_impl_from_ID3D10VertexShader(ID3D10VertexShader *iface) DECLSPEC_HIDDEN;
182

183 184 185
/* ID3D10GeometryShader */
struct d3d10_geometry_shader
{
186
    ID3D10GeometryShader ID3D10GeometryShader_iface;
187
    LONG refcount;
188

189
    struct wined3d_shader *wined3d_shader;
190
    struct wined3d_shader_signature output_signature;
191 192
};

193 194
HRESULT d3d10_geometry_shader_init(struct d3d10_geometry_shader *shader, struct d3d10_device *device,
        const void *byte_code, SIZE_T byte_code_length) DECLSPEC_HIDDEN;
195

196 197 198
/* ID3D10PixelShader */
struct d3d10_pixel_shader
{
199
    ID3D10PixelShader ID3D10PixelShader_iface;
200
    LONG refcount;
201

202
    struct wined3d_shader *wined3d_shader;
203
    struct wined3d_shader_signature output_signature;
204 205
};

206 207
HRESULT d3d10_pixel_shader_init(struct d3d10_pixel_shader *shader, struct d3d10_device *device,
        const void *byte_code, SIZE_T byte_code_length) DECLSPEC_HIDDEN;
208
struct d3d10_pixel_shader *unsafe_impl_from_ID3D10PixelShader(ID3D10PixelShader *iface) DECLSPEC_HIDDEN;
209

210 211
HRESULT shader_parse_signature(const char *data, DWORD data_size, struct wined3d_shader_signature *s) DECLSPEC_HIDDEN;
void shader_free_signature(struct wined3d_shader_signature *s) DECLSPEC_HIDDEN;
212

213 214 215
/* ID3D10BlendState */
struct d3d10_blend_state
{
216
    ID3D10BlendState ID3D10BlendState_iface;
217 218 219 220 221
    LONG refcount;
};

HRESULT d3d10_blend_state_init(struct d3d10_blend_state *state) DECLSPEC_HIDDEN;

222 223 224
/* ID3D10DepthStencilState */
struct d3d10_depthstencil_state
{
225
    ID3D10DepthStencilState ID3D10DepthStencilState_iface;
226 227 228 229 230
    LONG refcount;
};

HRESULT d3d10_depthstencil_state_init(struct d3d10_depthstencil_state *state) DECLSPEC_HIDDEN;

231 232 233
/* ID3D10RasterizerState */
struct d3d10_rasterizer_state
{
234
    ID3D10RasterizerState ID3D10RasterizerState_iface;
235 236 237 238 239
    LONG refcount;
};

HRESULT d3d10_rasterizer_state_init(struct d3d10_rasterizer_state *state) DECLSPEC_HIDDEN;

240 241 242
/* ID3D10SamplerState */
struct d3d10_sampler_state
{
243
    ID3D10SamplerState ID3D10SamplerState_iface;
244 245 246 247 248
    LONG refcount;
};

HRESULT d3d10_sampler_state_init(struct d3d10_sampler_state *state) DECLSPEC_HIDDEN;

249 250 251
/* ID3D10Query */
struct d3d10_query
{
252
    ID3D10Query ID3D10Query_iface;
253 254 255 256 257
    LONG refcount;
};

HRESULT d3d10_query_init(struct d3d10_query *query) DECLSPEC_HIDDEN;

258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289
/* Layered device */
enum dxgi_device_layer_id
{
    DXGI_DEVICE_LAYER_DEBUG1        = 0x8,
    DXGI_DEVICE_LAYER_THREAD_SAFE   = 0x10,
    DXGI_DEVICE_LAYER_DEBUG2        = 0x20,
    DXGI_DEVICE_LAYER_SWITCH_TO_REF = 0x30,
    DXGI_DEVICE_LAYER_D3D10_DEVICE  = 0xffffffff,
};

struct layer_get_size_args
{
    DWORD unknown0;
    DWORD unknown1;
    DWORD *unknown2;
    DWORD *unknown3;
    IDXGIAdapter *adapter;
    WORD interface_major;
    WORD interface_minor;
    WORD version_build;
    WORD version_revision;
};

struct dxgi_device_layer
{
    enum dxgi_device_layer_id id;
    HRESULT (WINAPI *init)(enum dxgi_device_layer_id id, DWORD *count, DWORD *values);
    UINT (WINAPI *get_size)(enum dxgi_device_layer_id id, struct layer_get_size_args *args, DWORD unknown0);
    HRESULT (WINAPI *create)(enum dxgi_device_layer_id id, void **layer_base, DWORD unknown0,
            void *device_object, REFIID riid, void **device_layer);
};

290
HRESULT WINAPI DXGID3D10CreateDevice(HMODULE d3d10core, IDXGIFactory *factory, IDXGIAdapter *adapter,
291
        UINT flags, void *unknown0, void **device);
292 293
HRESULT WINAPI DXGID3D10RegisterLayers(const struct dxgi_device_layer *layers, UINT layer_count);

294
#endif /* __WINE_D3D10CORE_PRIVATE_H */