wined3d: Move device context array functions to device.c.
[wine] / dlls / d3d10 / d3d10_private.h
1 /*
2  * Copyright 2008-2009 Henri Verbeet for CodeWeavers
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 #ifndef __WINE_D3D10_PRIVATE_H
20 #define __WINE_D3D10_PRIVATE_H
21
22 #include "wine/debug.h"
23 #include "wine/rbtree.h"
24
25 #define COBJMACROS
26 #include "winbase.h"
27 #include "winuser.h"
28 #include "objbase.h"
29
30 #include "d3d10.h"
31
32 /* TRACE helper functions */
33 const char *debug_d3d10_driver_type(D3D10_DRIVER_TYPE driver_type) DECLSPEC_HIDDEN;
34 const char *debug_d3d10_shader_variable_class(D3D10_SHADER_VARIABLE_CLASS c) DECLSPEC_HIDDEN;
35 const char *debug_d3d10_shader_variable_type(D3D10_SHADER_VARIABLE_TYPE t) DECLSPEC_HIDDEN;
36
37 void *d3d10_rb_alloc(size_t size) DECLSPEC_HIDDEN;
38 void *d3d10_rb_realloc(void *ptr, size_t size) DECLSPEC_HIDDEN;
39 void d3d10_rb_free(void *ptr) DECLSPEC_HIDDEN;
40
41 enum d3d10_effect_object_type
42 {
43     D3D10_EOT_VERTEXSHADER = 6,
44     D3D10_EOT_PIXELSHADER = 7,
45     D3D10_EOT_GEOMETRYSHADER = 8,
46 };
47
48 enum d3d10_effect_object_operation
49 {
50     D3D10_EOO_VALUE = 1,
51     D3D10_EOO_PARSED_OBJECT = 2,
52     D3D10_EOO_PARSED_OBJECT_INDEX = 3,
53     D3D10_EOO_ANONYMOUS_SHADER = 7,
54 };
55
56 struct d3d10_effect_object
57 {
58     struct d3d10_effect_pass *pass;
59     enum d3d10_effect_object_type type;
60     DWORD idx_offset;
61     DWORD index;
62     void *data;
63 };
64
65 struct d3d10_effect_shader_variable
66 {
67     char *input_signature;
68     UINT input_signature_size;
69     union
70     {
71         ID3D10VertexShader *vs;
72         ID3D10PixelShader *ps;
73         ID3D10GeometryShader *gs;
74     } shader;
75 };
76
77 /* ID3D10EffectType */
78 struct d3d10_effect_type
79 {
80     const struct ID3D10EffectTypeVtbl *vtbl;
81
82     char *name;
83     D3D10_SHADER_VARIABLE_TYPE basetype;
84     D3D10_SHADER_VARIABLE_CLASS type_class;
85
86     DWORD id;
87     struct wine_rb_entry entry;
88     struct d3d10_effect *effect;
89
90     DWORD element_count;
91     DWORD size_unpacked;
92     DWORD stride;
93     DWORD size_packed;
94     DWORD member_count;
95     DWORD column_count;
96     DWORD row_count;
97     struct d3d10_effect_type *elementtype;
98     struct d3d10_effect_type_member *members;
99 };
100
101 struct d3d10_effect_type_member
102 {
103     char *name;
104     char *semantic;
105     DWORD buffer_offset;
106     struct d3d10_effect_type *type;
107 };
108
109 /* ID3D10EffectVariable */
110 struct d3d10_effect_variable
111 {
112     const struct ID3D10EffectVariableVtbl *vtbl;
113
114     struct d3d10_effect_variable *buffer;
115     struct d3d10_effect_type *type;
116
117     void *data;
118     char *name;
119     char *semantic;
120     DWORD buffer_offset;
121     DWORD annotation_count;
122     DWORD flag;
123     DWORD data_size;
124     struct d3d10_effect *effect;
125     struct d3d10_effect_variable *elements;
126     struct d3d10_effect_variable *members;
127     struct d3d10_effect_variable *annotations;
128 };
129
130 /* ID3D10EffectPass */
131 struct d3d10_effect_pass
132 {
133     const struct ID3D10EffectPassVtbl *vtbl;
134
135     struct d3d10_effect_technique *technique;
136     char *name;
137     DWORD start;
138     DWORD object_count;
139     DWORD annotation_count;
140     struct d3d10_effect_object *objects;
141     struct d3d10_effect_variable *annotations;
142 };
143
144 /* ID3D10EffectTechnique */
145 struct d3d10_effect_technique
146 {
147     const struct ID3D10EffectTechniqueVtbl *vtbl;
148
149     struct d3d10_effect *effect;
150     char *name;
151     DWORD pass_count;
152     DWORD annotation_count;
153     struct d3d10_effect_pass *passes;
154     struct d3d10_effect_variable *annotations;
155 };
156
157 struct d3d10_effect_anonymous_shader
158 {
159     struct d3d10_effect_variable shader;
160     struct d3d10_effect_type type;
161 };
162
163 /* ID3D10Effect */
164 extern const struct ID3D10EffectVtbl d3d10_effect_vtbl DECLSPEC_HIDDEN;
165 struct d3d10_effect
166 {
167     const struct ID3D10EffectVtbl *vtbl;
168     LONG refcount;
169
170     ID3D10Device *device;
171     DWORD version;
172     DWORD local_buffer_count;
173     DWORD variable_count;
174     DWORD local_variable_count;
175     DWORD sharedbuffers_count;
176     DWORD sharedobjects_count;
177     DWORD technique_count;
178     DWORD index_offset;
179     DWORD texture_count;
180     DWORD dephstencilstate_count;
181     DWORD blendstate_count;
182     DWORD rasterizerstate_count;
183     DWORD samplerstate_count;
184     DWORD rendertargetview_count;
185     DWORD depthstencilview_count;
186     DWORD shader_call_count;
187     DWORD anonymous_shader_count;
188
189     DWORD anonymous_shader_current;
190
191     struct wine_rb_tree types;
192     struct d3d10_effect_variable *local_buffers;
193     struct d3d10_effect_variable *local_variables;
194     struct d3d10_effect_anonymous_shader *anonymous_shaders;
195     struct d3d10_effect_technique *techniques;
196 };
197
198 HRESULT d3d10_effect_parse(struct d3d10_effect *This, const void *data, SIZE_T data_size) DECLSPEC_HIDDEN;
199
200 /* D3D10Core */
201 HRESULT WINAPI D3D10CoreCreateDevice(IDXGIFactory *factory, IDXGIAdapter *adapter,
202         UINT flags, void *unknown0, ID3D10Device **device);
203
204 #endif /* __WINE_D3D10_PRIVATE_H */