po: Updated Polish translation.
[wine.git] / dlls / d3dx9_36 / d3dx9_private.h
blobabb3114e8995662d0ba4389506a3e2533e5a6344
1 /*
2 * Copyright (C) 2002 Raphael Junqueira
3 * Copyright (C) 2008 David Adam
4 * Copyright (C) 2008 Tony Wasserka
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
22 #ifndef __WINE_D3DX9_PRIVATE_H
23 #define __WINE_D3DX9_PRIVATE_H
25 #define NONAMELESSUNION
26 #include "wine/debug.h"
28 #define COBJMACROS
29 #include "d3dx9.h"
31 #define ARRAY_SIZE(array) (sizeof(array)/sizeof(*array))
33 struct vec4
35 float x, y, z, w;
38 struct volume
40 UINT width;
41 UINT height;
42 UINT depth;
45 /* for internal use */
46 enum format_type {
47 FORMAT_ARGB, /* unsigned */
48 FORMAT_ARGBF16,/* float 16 */
49 FORMAT_ARGBF, /* float */
50 FORMAT_DXT,
51 FORMAT_INDEX,
52 FORMAT_UNKNOWN
55 struct pixel_format_desc {
56 D3DFORMAT format;
57 BYTE bits[4];
58 BYTE shift[4];
59 UINT bytes_per_pixel;
60 UINT block_width;
61 UINT block_height;
62 UINT block_byte_count;
63 enum format_type type;
64 void (*from_rgba)(const struct vec4 *src, struct vec4 *dst);
65 void (*to_rgba)(const struct vec4 *src, struct vec4 *dst, const PALETTEENTRY *palette);
68 static inline BOOL is_conversion_from_supported(const struct pixel_format_desc *format)
70 if (format->type == FORMAT_ARGB || format->type == FORMAT_ARGBF16
71 || format->type == FORMAT_ARGBF)
72 return TRUE;
73 return !!format->to_rgba;
76 static inline BOOL is_conversion_to_supported(const struct pixel_format_desc *format)
78 if (format->type == FORMAT_ARGB || format->type == FORMAT_ARGBF16
79 || format->type == FORMAT_ARGBF)
80 return TRUE;
81 return !!format->from_rgba;
84 HRESULT map_view_of_file(const WCHAR *filename, void **buffer, DWORD *length) DECLSPEC_HIDDEN;
85 HRESULT load_resource_into_memory(HMODULE module, HRSRC resinfo, void **buffer, DWORD *length) DECLSPEC_HIDDEN;
87 HRESULT write_buffer_to_file(const WCHAR *filename, ID3DXBuffer *buffer) DECLSPEC_HIDDEN;
89 const struct pixel_format_desc *get_format_info(D3DFORMAT format) DECLSPEC_HIDDEN;
90 const struct pixel_format_desc *get_format_info_idx(int idx) DECLSPEC_HIDDEN;
92 void copy_pixels(const BYTE *src, UINT src_row_pitch, UINT src_slice_pitch,
93 BYTE *dst, UINT dst_row_pitch, UINT dst_slice_pitch, const struct volume *size,
94 const struct pixel_format_desc *format) DECLSPEC_HIDDEN;
95 void convert_argb_pixels(const BYTE *src, UINT src_row_pitch, UINT src_slice_pitch,
96 const struct volume *src_size, const struct pixel_format_desc *src_format,
97 BYTE *dst, UINT dst_row_pitch, UINT dst_slice_pitch, const struct volume *dst_size,
98 const struct pixel_format_desc *dst_format, D3DCOLOR color_key, const PALETTEENTRY *palette) DECLSPEC_HIDDEN;
99 void point_filter_argb_pixels(const BYTE *src, UINT src_row_pitch, UINT src_slice_pitch,
100 const struct volume *src_size, const struct pixel_format_desc *src_format,
101 BYTE *dst, UINT dst_row_pitch, UINT dst_slice_pitch, const struct volume *dst_size,
102 const struct pixel_format_desc *dst_format, D3DCOLOR color_key, const PALETTEENTRY *palette) DECLSPEC_HIDDEN;
104 HRESULT load_texture_from_dds(IDirect3DTexture9 *texture, const void *src_data, const PALETTEENTRY *palette,
105 DWORD filter, D3DCOLOR color_key, const D3DXIMAGE_INFO *src_info, unsigned int skip_levels,
106 unsigned int *loaded_miplevels) DECLSPEC_HIDDEN;
107 HRESULT load_cube_texture_from_dds(IDirect3DCubeTexture9 *cube_texture, const void *src_data,
108 const PALETTEENTRY *palette, DWORD filter, D3DCOLOR color_key, const D3DXIMAGE_INFO *src_info) DECLSPEC_HIDDEN;
109 HRESULT load_volume_from_dds(IDirect3DVolume9 *dst_volume, const PALETTEENTRY *dst_palette,
110 const D3DBOX *dst_box, const void *src_data, const D3DBOX *src_box, DWORD filter, D3DCOLOR color_key,
111 const D3DXIMAGE_INFO *src_info) DECLSPEC_HIDDEN;
112 HRESULT load_volume_texture_from_dds(IDirect3DVolumeTexture9 *volume_texture, const void *src_data,
113 const PALETTEENTRY *palette, DWORD filter, DWORD color_key, const D3DXIMAGE_INFO *src_info) DECLSPEC_HIDDEN;
115 unsigned short float_32_to_16(const float in) DECLSPEC_HIDDEN;
116 float float_16_to_32(const unsigned short in) DECLSPEC_HIDDEN;
118 /* debug helpers */
119 const char *debug_d3dxparameter_class(D3DXPARAMETER_CLASS c) DECLSPEC_HIDDEN;
120 const char *debug_d3dxparameter_type(D3DXPARAMETER_TYPE t) DECLSPEC_HIDDEN;
121 const char *debug_d3dxparameter_registerset(D3DXREGISTER_SET r) DECLSPEC_HIDDEN;
123 /* parameter type conversion helpers */
124 void set_number(void *outdata, D3DXPARAMETER_TYPE outtype,
125 const void *indata, D3DXPARAMETER_TYPE intype) DECLSPEC_HIDDEN;
127 static inline BOOL is_param_type_sampler(D3DXPARAMETER_TYPE type)
129 return type == D3DXPT_SAMPLER
130 || type == D3DXPT_SAMPLER1D || type == D3DXPT_SAMPLER2D
131 || type == D3DXPT_SAMPLER3D || type == D3DXPT_SAMPLERCUBE;
134 struct d3dx_parameter;
136 enum pres_reg_tables
138 PRES_REGTAB_IMMED,
139 PRES_REGTAB_CONST,
140 PRES_REGTAB_OCONST,
141 PRES_REGTAB_OBCONST,
142 PRES_REGTAB_OICONST,
143 PRES_REGTAB_TEMP,
144 PRES_REGTAB_COUNT,
145 PRES_REGTAB_FIRST_SHADER = PRES_REGTAB_CONST,
148 struct d3dx_const_param_eval_output
150 struct d3dx_parameter *param;
151 unsigned int table;
152 enum D3DXPARAMETER_CLASS constant_class;
153 unsigned int register_index;
154 unsigned int register_count;
157 struct d3dx_const_tab
159 unsigned int input_count;
160 D3DXCONSTANT_DESC *inputs;
161 struct d3dx_parameter **inputs_param;
162 unsigned int const_set_count;
163 unsigned int const_set_size;
164 struct d3dx_const_param_eval_output *const_set;
165 const enum pres_reg_tables *regset2table;
168 struct d3dx_regstore
170 void *tables[PRES_REGTAB_COUNT];
171 unsigned int table_sizes[PRES_REGTAB_COUNT]; /* registers count */
172 unsigned int *table_value_set[PRES_REGTAB_COUNT];
175 struct d3dx_pres_ins;
177 struct d3dx_preshader
179 struct d3dx_regstore regs;
181 unsigned int ins_count;
182 struct d3dx_pres_ins *ins;
184 struct d3dx_const_tab inputs;
187 struct d3dx_param_eval
189 D3DXPARAMETER_TYPE param_type;
191 struct d3dx_preshader pres;
192 struct d3dx_const_tab shader_inputs;
195 #define PARAMETER_FLAG_DIRTY 0x1u
197 struct d3dx_parameter
199 char *name;
200 char *semantic;
201 void *data;
202 D3DXPARAMETER_CLASS class;
203 D3DXPARAMETER_TYPE type;
204 UINT rows;
205 UINT columns;
206 UINT element_count;
207 UINT annotation_count;
208 UINT member_count;
209 DWORD flags;
210 UINT bytes;
211 DWORD runtime_flags;
212 DWORD object_id;
214 D3DXHANDLE handle;
216 struct d3dx_parameter *annotations;
217 struct d3dx_parameter *members;
219 struct d3dx_parameter *referenced_param;
220 struct d3dx_param_eval *param_eval;
222 DWORD *dirty_flag_ptr;
225 static inline BOOL is_param_dirty(struct d3dx_parameter *param)
227 return *param->dirty_flag_ptr & PARAMETER_FLAG_DIRTY;
230 struct d3dx9_base_effect;
232 struct d3dx_parameter *get_parameter_by_name(struct d3dx9_base_effect *base,
233 struct d3dx_parameter *parameter, const char *name) DECLSPEC_HIDDEN;
235 void d3dx_create_param_eval(struct d3dx9_base_effect *base_effect, void *byte_code,
236 unsigned int byte_code_size, D3DXPARAMETER_TYPE type, struct d3dx_param_eval **peval) DECLSPEC_HIDDEN;
237 void d3dx_free_param_eval(struct d3dx_param_eval *peval) DECLSPEC_HIDDEN;
238 HRESULT d3dx_evaluate_parameter(struct d3dx_param_eval *peval,
239 const struct d3dx_parameter *param, void *param_value, BOOL update_all) DECLSPEC_HIDDEN;
240 HRESULT d3dx_param_eval_set_shader_constants(struct IDirect3DDevice9 *device,
241 struct d3dx_param_eval *peval, BOOL update_all) DECLSPEC_HIDDEN;
242 BOOL is_param_eval_input_dirty(struct d3dx_param_eval *peval) DECLSPEC_HIDDEN;
244 #endif /* __WINE_D3DX9_PRIVATE_H */