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"
31 #define ARRAY_SIZE(array) (sizeof(array)/sizeof(*array))
45 /* for internal use */
47 FORMAT_ARGB
, /* unsigned */
48 FORMAT_ARGBF16
,/* float 16 */
49 FORMAT_ARGBF
, /* float */
55 struct pixel_format_desc
{
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
)
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
)
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
;
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
;
145 PRES_REGTAB_FIRST_SHADER
= PRES_REGTAB_CONST
,
148 struct d3dx_const_param_eval_output
150 struct d3dx_parameter
*param
;
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
;
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
202 D3DXPARAMETER_CLASS
class;
203 D3DXPARAMETER_TYPE type
;
207 UINT annotation_count
;
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 */