/*
 * Copyright (C) 2008 Tony Wasserka
 *
 * 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
 */

#include <d3dx9.h>

#ifndef __WINE_D3DX9TEX_H
#define __WINE_D3DX9TEX_H

/**********************************************
 ***************** Definitions ****************
 **********************************************/
#define D3DX_FILTER_NONE                 0x00000001
#define D3DX_FILTER_POINT                0x00000002
#define D3DX_FILTER_LINEAR               0x00000003
#define D3DX_FILTER_TRIANGLE             0x00000004
#define D3DX_FILTER_BOX                  0x00000005
#define D3DX_FILTER_MIRROR_U             0x00010000
#define D3DX_FILTER_MIRROR_V             0x00020000
#define D3DX_FILTER_MIRROR_W             0x00040000
#define D3DX_FILTER_MIRROR               0x00070000
#define D3DX_FILTER_DITHER               0x00080000
#define D3DX_FILTER_DITHER_DIFFUSION     0x00100000
#define D3DX_FILTER_SRGB_IN              0x00200000
#define D3DX_FILTER_SRGB_OUT             0x00400000
#define D3DX_FILTER_SRGB                 0x00600000

#define D3DX_NORMALMAP_MIRROR_U          0x00010000
#define D3DX_NORMALMAP_MIRROR_V          0x00020000
#define D3DX_NORMALMAP_MIRROR            0x00030000
#define D3DX_NORMALMAP_INVERTSIGN        0x00080000
#define D3DX_NORMALMAP_COMPUTE_OCCLUSION 0x00100000

#define D3DX_CHANNEL_RED                 0x00000001
#define D3DX_CHANNEL_BLUE                0x00000002
#define D3DX_CHANNEL_GREEN               0x00000004
#define D3DX_CHANNEL_ALPHA               0x00000008
#define D3DX_CHANNEL_LUMINANCE           0x00000010

/**********************************************
 ****************** Typedefs ******************
 **********************************************/
typedef enum _D3DXIMAGE_FILEFORMAT
{
    D3DXIFF_BMP,
    D3DXIFF_JPG,
    D3DXIFF_TGA,
    D3DXIFF_PNG,
    D3DXIFF_DDS,
    D3DXIFF_PPM,
    D3DXIFF_DIB,
    D3DXIFF_HDR,
    D3DXIFF_PFM,
    D3DXIFF_FORCE_DWORD = 0x7fffffff
} D3DXIMAGE_FILEFORMAT;

typedef struct _D3DXIMAGE_INFO
{
    UINT Width;
    UINT Height;
    UINT Depth;
    UINT MipLevels;
    D3DFORMAT Format;
    D3DRESOURCETYPE ResourceType;
    D3DXIMAGE_FILEFORMAT ImageFileFormat;
} D3DXIMAGE_INFO;

/**********************************************
 ****************** Functions *****************
 **********************************************/
/* Typedefs for callback functions */
typedef VOID (WINAPI *LPD3DXFILL2D)(D3DXVECTOR4 *out, CONST D3DXVECTOR2 *texcoord, CONST D3DXVECTOR2 *texelsize, LPVOID data);
typedef VOID (WINAPI *LPD3DXFILL3D)(D3DXVECTOR4 *out, CONST D3DXVECTOR3 *texcoord, CONST D3DXVECTOR3 *texelsize, LPVOID data);

#ifdef __cplusplus
extern "C" {
#endif


/* Image Information */
HRESULT WINAPI D3DXGetImageInfoFromFileA(LPCSTR file, D3DXIMAGE_INFO *info);
HRESULT WINAPI D3DXGetImageInfoFromFileW(LPCWSTR file, D3DXIMAGE_INFO *info);
#define        D3DXGetImageInfoFromFile WINELIB_NAME_AW(D3DXGetImageInfoFromFile)

HRESULT WINAPI D3DXGetImageInfoFromResourceA(HMODULE module, LPCSTR resource, D3DXIMAGE_INFO *info);
HRESULT WINAPI D3DXGetImageInfoFromResourceW(HMODULE module, LPCWSTR resource, D3DXIMAGE_INFO *info);
#define        D3DXGetImageInfoFromResource WINELIB_NAME_AW(D3DXGetImageInfoFromResource)

HRESULT WINAPI D3DXGetImageInfoFromFileInMemory(LPCVOID data, UINT datasize, D3DXIMAGE_INFO *info);


/* Surface Loading/Saving */
HRESULT WINAPI D3DXLoadSurfaceFromFileA(       LPDIRECT3DSURFACE9 destsurface,
                                               CONST PALETTEENTRY *destpalette,
                                               CONST RECT *destrect,
                                               LPCSTR srcfile,
                                               CONST RECT *srcrect,
                                               DWORD filter,
                                               D3DCOLOR colorkey,
                                               D3DXIMAGE_INFO *srcinfo);

HRESULT WINAPI D3DXLoadSurfaceFromFileW(       LPDIRECT3DSURFACE9 destsurface,
                                               CONST PALETTEENTRY *destpalette,
                                               CONST RECT *destrect,
                                               LPCWSTR srcfile,
                                               CONST RECT *srcrect,
                                               DWORD filter,
                                               D3DCOLOR colorkey,
                                               D3DXIMAGE_INFO *srcinfo);
#define        D3DXLoadSurfaceFromFile WINELIB_NAME_AW(D3DXLoadSurfaceFromFile)

HRESULT WINAPI D3DXLoadSurfaceFromResourceA(   LPDIRECT3DSURFACE9 destsurface,
                                               CONST PALETTEENTRY *destpalette,
                                               CONST RECT *destrect,
                                               HMODULE srcmodule,
                                               LPCSTR resource,
                                               CONST RECT *srcrect,
                                               DWORD filter,
                                               D3DCOLOR colorkey,
                                               D3DXIMAGE_INFO *srcinfo);

HRESULT WINAPI D3DXLoadSurfaceFromResourceW(   LPDIRECT3DSURFACE9 destsurface,
                                               CONST PALETTEENTRY *destpalette,
                                               CONST RECT *destrect,
                                               HMODULE srcmodule,
                                               LPCWSTR resource,
                                               CONST RECT *srcrect,
                                               DWORD filter,
                                               D3DCOLOR colorkey,
                                               D3DXIMAGE_INFO *srcinfo);
#define        D3DXLoadSurfaceFromResource WINELIB_NAME_AW(D3DXLoadSurfaceFromResource)

HRESULT WINAPI D3DXLoadSurfaceFromFileInMemory(LPDIRECT3DSURFACE9 destsurface,
                                               CONST PALETTEENTRY *destpalette,
                                               CONST RECT*destrect,
                                               LPCVOID srcdata,
                                               UINT srcdatasize,
                                               CONST RECT *srcrect,
                                               DWORD filter,
                                               D3DCOLOR colorkey,
                                               D3DXIMAGE_INFO *srcinfo);

HRESULT WINAPI D3DXLoadSurfaceFromSurface(     LPDIRECT3DSURFACE9 destsurface,
                                               CONST PALETTEENTRY *destpalette,
                                               CONST RECT *destrect,
                                               LPDIRECT3DSURFACE9 srcsurface,
                                               CONST PALETTEENTRY *srcpalette,
                                               CONST RECT *srcrect,
                                               DWORD filter,
                                               D3DCOLOR colorkey);

HRESULT WINAPI D3DXLoadSurfaceFromMemory(IDirect3DSurface9 *dst_surface,
        const PALETTEENTRY *dst_palette, const RECT *dst_rect, const void *src_memory,
        D3DFORMAT src_format, UINT src_pitch, const PALETTEENTRY *src_palette, const RECT *src_rect,
        DWORD filter, D3DCOLOR color_key);

HRESULT WINAPI D3DXSaveSurfaceToFileInMemory(  LPD3DXBUFFER *destbuffer,
                                               D3DXIMAGE_FILEFORMAT destformat,
                                               LPDIRECT3DSURFACE9 srcsurface,
                                               CONST PALETTEENTRY *srcpalette,
                                               CONST RECT *srcrect);

HRESULT WINAPI D3DXSaveSurfaceToFileA(         LPCSTR destfile,
                                               D3DXIMAGE_FILEFORMAT destformat,
                                               LPDIRECT3DSURFACE9 srcsurface,
                                               CONST PALETTEENTRY *srcpalette,
                                               CONST RECT *srcrect);

HRESULT WINAPI D3DXSaveSurfaceToFileW(         LPCWSTR destfile,
                                               D3DXIMAGE_FILEFORMAT destformat,
                                               LPDIRECT3DSURFACE9 srcsurface,
                                               CONST PALETTEENTRY *srcpalette,
                                               CONST RECT *srcrect);
#define        D3DXSaveSurfaceToFile WINELIB_NAME_AW(D3DXSaveSurfaceToFile)


/* Volume Loading/Saving */
HRESULT WINAPI D3DXLoadVolumeFromFileA(       LPDIRECT3DVOLUME9 destvolume,
                                              CONST PALETTEENTRY *destpalette,
                                              CONST D3DBOX *destbox,
                                              LPCSTR srcfile,
                                              CONST D3DBOX *srcbox,
                                              DWORD filter,
                                              D3DCOLOR colorkey,
                                              D3DXIMAGE_INFO *srcinfo);

HRESULT WINAPI D3DXLoadVolumeFromFileW(       LPDIRECT3DVOLUME9 destVolume,
                                              CONST PALETTEENTRY *destpalette,
                                              CONST D3DBOX *destbox,
                                              LPCWSTR srcfile,
                                              CONST D3DBOX *srcbox,
                                              DWORD filter,
                                              D3DCOLOR colorkey,
                                              D3DXIMAGE_INFO *srcinfo);
#define        D3DXLoadVolumeFromFile WINELIB_NAME_AW(D3DXLoadVolumeFromFile)

HRESULT WINAPI D3DXLoadVolumeFromResourceA(   LPDIRECT3DVOLUME9 destVolume,
                                              CONST PALETTEENTRY *destpalette,
                                              CONST D3DBOX *destbox,
                                              HMODULE srcmodule,
                                              LPCSTR resource,
                                              CONST D3DBOX *srcbox,
                                              DWORD filter,
                                              D3DCOLOR colorkey,
                                              D3DXIMAGE_INFO *srcinfo);

HRESULT WINAPI D3DXLoadVolumeFromResourceW(   LPDIRECT3DVOLUME9 destVolume,
                                              CONST PALETTEENTRY *destpalette,
                                              CONST D3DBOX *destbox,
                                              HMODULE srcmodule,
                                              LPCWSTR resource,
                                              CONST D3DBOX *srcbox,
                                              DWORD filter,
                                              D3DCOLOR colorkey,
                                              D3DXIMAGE_INFO *srcinfo);
#define        D3DXLoadVolumeFromResource WINELIB_NAME_AW(D3DXLoadVolumeFromResource)

HRESULT WINAPI D3DXLoadVolumeFromFileInMemory(LPDIRECT3DVOLUME9 destvolume,
                                              CONST PALETTEENTRY *destpalette,
                                              CONST D3DBOX *destbox,
                                              LPCVOID srcdata,
                                              UINT srcdatasize,
                                              CONST D3DBOX *srcbox,
                                              DWORD filter,
                                              D3DCOLOR colorkey,
                                              D3DXIMAGE_INFO *srcinfo);

HRESULT WINAPI D3DXLoadVolumeFromVolume(      LPDIRECT3DVOLUME9 destvolume,
                                              CONST PALETTEENTRY *destpalette,
                                              CONST D3DBOX *destbox,
                                              LPDIRECT3DVOLUME9 srcvolume,
                                              CONST PALETTEENTRY *srcpalette,
                                              CONST D3DBOX *srcbox,
                                              DWORD filter,
                                              D3DCOLOR colorkey);

HRESULT WINAPI D3DXLoadVolumeFromMemory(      LPDIRECT3DVOLUME9 destvolume,
                                              CONST PALETTEENTRY *destpalette,
                                              CONST D3DBOX *destbox,
                                              LPCVOID srcmemory,
                                              D3DFORMAT srcformat,
                                              UINT srcrowpitch,
                                              UINT srcslicepitch,
                                              CONST PALETTEENTRY *srcpalette,
                                              CONST D3DBOX *srcbox,
                                              DWORD filter,
                                              D3DCOLOR colorkey);

HRESULT WINAPI D3DXSaveVolumeToFileA(         LPCSTR destfile,
                                              D3DXIMAGE_FILEFORMAT destformat,
                                              LPDIRECT3DVOLUME9 srcvolume,
                                              CONST PALETTEENTRY *srcpalette,
                                              CONST D3DBOX *srcbox);

HRESULT WINAPI D3DXSaveVolumeToFileW(         LPCWSTR destfile,
                                              D3DXIMAGE_FILEFORMAT destformat,
                                              LPDIRECT3DVOLUME9 srcvolume,
                                              CONST PALETTEENTRY *srcpalette,
                                              CONST D3DBOX *srcbox);
#define        D3DXSaveVolumeToFile WINELIB_NAME_AW(D3DXSaveVolumeToFile)


/* Texture, cube texture and volume texture creation */
HRESULT WINAPI D3DXCheckTextureRequirements(      LPDIRECT3DDEVICE9 device,
                                                  UINT *width,
                                                  UINT *height,
                                                  UINT *miplevels,
                                                  DWORD usage,
                                                  D3DFORMAT *format,
                                                  D3DPOOL pool);
HRESULT WINAPI D3DXCheckCubeTextureRequirements(  LPDIRECT3DDEVICE9 device,
                                                  UINT *size,
                                                  UINT *miplevels,
                                                  DWORD usage,
                                                  D3DFORMAT *format,
                                                  D3DPOOL pool);

HRESULT WINAPI D3DXCheckVolumeTextureRequirements(LPDIRECT3DDEVICE9 device,
                                                  UINT *width,
                                                  UINT *height,
                                                  UINT *depth,
                                                  UINT *miplevels,
                                                  DWORD usage,
                                                  D3DFORMAT *format,
                                                  D3DPOOL pool);

HRESULT WINAPI D3DXCreateTexture(      LPDIRECT3DDEVICE9 device,
                                       UINT width,
                                       UINT height,
                                       UINT miplevels,
                                       DWORD usage,
                                       D3DFORMAT format,
                                       D3DPOOL pool,
                                       LPDIRECT3DTEXTURE9 *texture);

HRESULT WINAPI D3DXCreateCubeTexture(  LPDIRECT3DDEVICE9 device,
                                       UINT size,
                                       UINT miplevels,
                                       DWORD usage,
                                       D3DFORMAT format,
                                       D3DPOOL pool,
                                       LPDIRECT3DCUBETEXTURE9 *cube);

HRESULT WINAPI D3DXCreateVolumeTexture(LPDIRECT3DDEVICE9 device,
                                       UINT width,
                                       UINT height,
                                       UINT depth,
                                       UINT miplevels,
                                       DWORD usage,
                                       D3DFORMAT format,
                                       D3DPOOL pool,
                                       LPDIRECT3DVOLUMETEXTURE9 *volume);

HRESULT WINAPI D3DXCreateTextureFromFileA(      LPDIRECT3DDEVICE9 device,
                                                LPCSTR srcfile,
                                                LPDIRECT3DTEXTURE9 *texture);

HRESULT WINAPI D3DXCreateTextureFromFileW(      LPDIRECT3DDEVICE9 device,
                                                LPCWSTR srcfile,
                                                LPDIRECT3DTEXTURE9 *texture);
#define        D3DXCreateTextureFromFile WINELIB_NAME_AW(D3DXCreateTextureFromFile)

HRESULT WINAPI D3DXCreateCubeTextureFromFileA(  LPDIRECT3DDEVICE9 device,
                                                LPCSTR srcfile,
                                                LPDIRECT3DCUBETEXTURE9 *cube);

HRESULT WINAPI D3DXCreateCubeTextureFromFileW(  LPDIRECT3DDEVICE9 device,
                                                LPCWSTR srcfile,
                                                LPDIRECT3DCUBETEXTURE9 *cube);
#define        D3DXCreateCubeTextureFromFile WINELIB_NAME_AW(D3DXCreateCubeTextureFromFile)

HRESULT WINAPI D3DXCreateVolumeTextureFromFileA(LPDIRECT3DDEVICE9 device,
                                                LPCSTR srcfile,
                                                LPDIRECT3DVOLUMETEXTURE9 *volume);

HRESULT WINAPI D3DXCreateVolumeTextureFromFileW(LPDIRECT3DDEVICE9 device,
                                                LPCWSTR srcfile,
                                                LPDIRECT3DVOLUMETEXTURE9 *volume);
#define        D3DXCreateVolumeTextureFromFile WINELIB_NAME_AW(D3DXCreateVolumeTextureFromFile)

HRESULT WINAPI D3DXCreateTextureFromResourceA(      LPDIRECT3DDEVICE9 device,
                                                    HMODULE srcmodule,
                                                    LPCSTR resource,
                                                    LPDIRECT3DTEXTURE9 *texture);

HRESULT WINAPI D3DXCreateTextureFromResourceW(      LPDIRECT3DDEVICE9 device,
                                                    HMODULE srcmodule,
                                                    LPCWSTR resource,
                                                    LPDIRECT3DTEXTURE9 *texture);
#define        D3DXCreateTextureFromResource WINELIB_NAME_AW(D3DXCreateTextureFromResource)

HRESULT WINAPI D3DXCreateCubeTextureFromResourceA(  LPDIRECT3DDEVICE9 device,
                                                    HMODULE srcmodule,
                                                    LPCSTR resource,
                                                    LPDIRECT3DCUBETEXTURE9 *cube);
HRESULT WINAPI D3DXCreateCubeTextureFromResourceW(  LPDIRECT3DDEVICE9 device,
                                                    HMODULE srcmodule,
                                                    LPCWSTR resource,
                                                    LPDIRECT3DCUBETEXTURE9 *cube);
#define        D3DXCreateCubeTextureFromResource WINELIB_NAME_AW(D3DXCreateCubeTextureFromResource)

HRESULT WINAPI D3DXCreateVolumeTextureFromResourceA(LPDIRECT3DDEVICE9 device,
                                                    HMODULE srcmodule,
                                                    LPCSTR resource,
                                                    LPDIRECT3DVOLUMETEXTURE9 *volume);
HRESULT WINAPI D3DXCreateVolumeTextureFromResourceW(LPDIRECT3DDEVICE9 device,
                                                    HMODULE srcmodule,
                                                    LPCWSTR resource,
                                                    LPDIRECT3DVOLUMETEXTURE9 *volume);
#define        D3DXCreateVolumeTextureFromResource WINELIB_NAME_AW(D3DXCreateVolumeTextureFromResource)

HRESULT WINAPI D3DXCreateTextureFromFileExA(      LPDIRECT3DDEVICE9 device,
                                                  LPCSTR srcfile,
                                                  UINT width,
                                                  UINT height,
                                                  UINT miplevels,
                                                  DWORD usage,
                                                  D3DFORMAT format,
                                                  D3DPOOL pool,
                                                  DWORD filter,
                                                  DWORD mipfilter,
                                                  D3DCOLOR colorkey,
                                                  D3DXIMAGE_INFO *srcinfo,
                                                  PALETTEENTRY *palette,
                                                  LPDIRECT3DTEXTURE9 *texture);

HRESULT WINAPI D3DXCreateTextureFromFileExW(      LPDIRECT3DDEVICE9 device,
                                                  LPCWSTR srcfile,
                                                  UINT width,
                                                  UINT height,
                                                  UINT miplevels,
                                                  DWORD usage,
                                                  D3DFORMAT format,
                                                  D3DPOOL pool,
                                                  DWORD filter,
                                                  DWORD mipfilter,
                                                  D3DCOLOR colorkey,
                                                  D3DXIMAGE_INFO *srcinfo,
                                                  PALETTEENTRY *palette,
                                                  LPDIRECT3DTEXTURE9 *texture);
#define        D3DXCreateTextureFromFileEx WINELIB_NAME_AW(D3DXCreateTextureFromFileEx)

HRESULT WINAPI D3DXCreateCubeTextureFromFileExA(  LPDIRECT3DDEVICE9 device,
                                                  LPCSTR srcfile,
                                                  UINT size,
                                                  UINT miplevels,
                                                  DWORD usage,
                                                  D3DFORMAT format,
                                                  D3DPOOL pool,
                                                  DWORD filter,
                                                  DWORD mipfilter,
                                                  D3DCOLOR colorkey,
                                                  D3DXIMAGE_INFO *srcinfo,
                                                  PALETTEENTRY *palette,
                                                  LPDIRECT3DCUBETEXTURE9 *cube);

HRESULT WINAPI D3DXCreateCubeTextureFromFileExW(  LPDIRECT3DDEVICE9 device,
                                                  LPCWSTR srcfile,
                                                  UINT size,
                                                  UINT miplevels,
                                                  DWORD usage,
                                                  D3DFORMAT format,
                                                  D3DPOOL pool,
                                                  DWORD filter,
                                                  DWORD mipfilter,
                                                  D3DCOLOR colorkey,
                                                  D3DXIMAGE_INFO *srcinfo,
                                                  PALETTEENTRY *palette,
                                                  LPDIRECT3DCUBETEXTURE9 *cube);
#define        D3DXCreateCubeTextureFromFileEx WINELIB_NAME_AW(D3DXCreateCubeTextureFromFileEx)

HRESULT WINAPI D3DXCreateVolumeTextureFromFileExA(LPDIRECT3DDEVICE9 device,
                                                  LPCSTR srcfile,
                                                  UINT width,
                                                  UINT height,
                                                  UINT depth,
                                                  UINT miplevels,
                                                  DWORD usage,
                                                  D3DFORMAT format,
                                                  D3DPOOL pool,
                                                  DWORD filter,
                                                  DWORD mipfilter,
                                                  D3DCOLOR colorkey,
                                                  D3DXIMAGE_INFO *srcinfo,
                                                  PALETTEENTRY *palette,
                                                  LPDIRECT3DVOLUMETEXTURE9 *volume);

HRESULT WINAPI D3DXCreateVolumeTextureFromFileExW(LPDIRECT3DDEVICE9 device,
                                                  LPCWSTR srcfile,
                                                  UINT width,
                                                  UINT height,
                                                  UINT depth,
                                                  UINT miplevels,
                                                  DWORD usage,
                                                  D3DFORMAT format,
                                                  D3DPOOL pool,
                                                  DWORD filter,
                                                  DWORD mipfilter,
                                                  D3DCOLOR colorkey,
                                                  D3DXIMAGE_INFO *srcinfo,
                                                  PALETTEENTRY *palette,
                                                  LPDIRECT3DVOLUMETEXTURE9 *volume);
#define        D3DXCreateVolumeTextureFromFileEx WINELIB_NAME_AW(D3DXCreateVolumeTextureFromFileEx)

HRESULT WINAPI D3DXCreateTextureFromResourceExA(      LPDIRECT3DDEVICE9 device,
                                                      HMODULE srcmodule,
                                                      LPCSTR resource,
                                                      UINT width,
                                                      UINT height,
                                                      UINT miplevels,
                                                      DWORD usage,
                                                      D3DFORMAT format,
                                                      D3DPOOL pool,
                                                      DWORD filter,
                                                      DWORD mipfilter,
                                                      D3DCOLOR colorkey,
                                                      D3DXIMAGE_INFO *srcinfo,
                                                      PALETTEENTRY *palette,
                                                      LPDIRECT3DTEXTURE9 *texture);

HRESULT WINAPI D3DXCreateTextureFromResourceExW(      LPDIRECT3DDEVICE9 device,
                                                      HMODULE srcmodule,
                                                      LPCWSTR resource,
                                                      UINT width,
                                                      UINT height,
                                                      UINT miplevels,
                                                      DWORD usage,
                                                      D3DFORMAT format,
                                                      D3DPOOL pool,
                                                      DWORD filter,
                                                      DWORD mipfilter,
                                                      D3DCOLOR colorkey,
                                                      D3DXIMAGE_INFO *srcinfo,
                                                      PALETTEENTRY *palette,
                                                      LPDIRECT3DTEXTURE9 *texture);
#define        D3DXCreateTextureFromResourceEx WINELIB_NAME_AW(D3DXCreateTextureFromResourceEx)

HRESULT WINAPI D3DXCreateCubeTextureFromResourceExA(  LPDIRECT3DDEVICE9 device,
                                                      HMODULE srcmodule,
                                                      LPCSTR resource,
                                                      UINT size,
                                                      UINT miplevels,
                                                      DWORD usage,
                                                      D3DFORMAT format,
                                                      D3DPOOL pool,
                                                      DWORD filter,
                                                      DWORD mipfilter,
                                                      D3DCOLOR colorkey,
                                                      D3DXIMAGE_INFO *srcinfo,
                                                      PALETTEENTRY *palette,
                                                      LPDIRECT3DCUBETEXTURE9 *cube);

HRESULT WINAPI D3DXCreateCubeTextureFromResourceExW(  LPDIRECT3DDEVICE9 device,
                                                      HMODULE srcmodule,
                                                      LPCWSTR resource,
                                                      UINT size,
                                                      UINT miplevels,
                                                      DWORD usage,
                                                      D3DFORMAT format,
                                                      D3DPOOL pool,
                                                      DWORD filter,
                                                      DWORD mipfilter,
                                                      D3DCOLOR colorkey,
                                                      D3DXIMAGE_INFO *srcinfo,
                                                      PALETTEENTRY *palette,
                                                      LPDIRECT3DCUBETEXTURE9 *cube);
#define        D3DXCreateCubeTextureFromResourceEx WINELIB_NAME_AW(D3DXCreateCubeTextureFromResourceEx)

HRESULT WINAPI D3DXCreateVolumeTextureFromResourceExA(LPDIRECT3DDEVICE9 device,
                                                      HMODULE srcmodule,
                                                      LPCSTR resource,
                                                      UINT width,
                                                      UINT height,
                                                      UINT depth,
                                                      UINT miplevels,
                                                      DWORD usage,
                                                      D3DFORMAT format,
                                                      D3DPOOL pool,
                                                      DWORD filter,
                                                      DWORD mipfilter,
                                                      D3DCOLOR colorkey,
                                                      D3DXIMAGE_INFO *srcinfo,
                                                      PALETTEENTRY *palette,
                                                      LPDIRECT3DVOLUMETEXTURE9 *volume);

HRESULT WINAPI D3DXCreateVolumeTextureFromResourceExW(LPDIRECT3DDEVICE9 device,
                                                      HMODULE srcmodule,
                                                      LPCWSTR resource,
                                                      UINT width,
                                                      UINT height,
                                                      UINT depth,
                                                      UINT miplevels,
                                                      DWORD usage,
                                                      D3DFORMAT format,
                                                      D3DPOOL pool,
                                                      DWORD filter,
                                                      DWORD mipfilter,
                                                      D3DCOLOR colorkey,
                                                      D3DXIMAGE_INFO *srcinfo,
                                                      PALETTEENTRY *palette,
                                                      LPDIRECT3DVOLUMETEXTURE9 *volume);
#define        D3DXCreateVolumeTextureFromResourceEx WINELIB_NAME_AW(D3DXCreateVolumeTextureFromResourceEx)

HRESULT WINAPI D3DXCreateTextureFromFileInMemory(      LPDIRECT3DDEVICE9 device,
                                                       LPCVOID srcdata,
                                                       UINT srcdatasize,
                                                       LPDIRECT3DTEXTURE9* texture);

HRESULT WINAPI D3DXCreateCubeTextureFromFileInMemory(  LPDIRECT3DDEVICE9 device,
                                                       LPCVOID srcdata,
                                                       UINT srcdatasize,
                                                       LPDIRECT3DCUBETEXTURE9* cube);

HRESULT WINAPI D3DXCreateVolumeTextureFromFileInMemory(LPDIRECT3DDEVICE9 device,
                                                       LPCVOID srcdata,
                                                       UINT srcdatasize,
                                                       LPDIRECT3DVOLUMETEXTURE9 *volume);

HRESULT WINAPI D3DXCreateTextureFromFileInMemoryEx(      LPDIRECT3DDEVICE9 device,
                                                         LPCVOID srcdata,
                                                         UINT srcdatasize,
                                                         UINT width,
                                                         UINT height,
                                                         UINT miplevels,
                                                         DWORD usage,
                                                         D3DFORMAT format,
                                                         D3DPOOL pool,
                                                         DWORD filter,
                                                         DWORD mipfilter,
                                                         D3DCOLOR colorkey,
                                                         D3DXIMAGE_INFO *srcinfo,
                                                         PALETTEENTRY *palette,
                                                         LPDIRECT3DTEXTURE9 *texture);

HRESULT WINAPI D3DXCreateCubeTextureFromFileInMemoryEx(  LPDIRECT3DDEVICE9 device,
                                                         LPCVOID srcdata,
                                                         UINT srcdatasize,
                                                         UINT size,
                                                         UINT miplevels,
                                                         DWORD usage,
                                                         D3DFORMAT format,
                                                         D3DPOOL pool,
                                                         DWORD filter,
                                                         DWORD mipfilter,
                                                         D3DCOLOR colorkey,
                                                         D3DXIMAGE_INFO *srcinfo,
                                                         PALETTEENTRY *palette,
                                                         LPDIRECT3DCUBETEXTURE9 *cube);

HRESULT WINAPI D3DXCreateVolumeTextureFromFileInMemoryEx(LPDIRECT3DDEVICE9 device,
                                                         LPCVOID srcdata,
                                                         UINT srcdatasize,
                                                         UINT width,
                                                         UINT height,
                                                         UINT depth,
                                                         UINT miplevels,
                                                         DWORD usage,
                                                         D3DFORMAT format,
                                                         D3DPOOL pool,
                                                         DWORD filter,
                                                         DWORD mipfilter,
                                                         D3DCOLOR colorkey,
                                                         D3DXIMAGE_INFO *srcinfo,
                                                         PALETTEENTRY *palette,
                                                         LPDIRECT3DVOLUMETEXTURE9 *volume);

HRESULT WINAPI D3DXSaveTextureToFileInMemory(LPD3DXBUFFER *destbuffer,
                                             D3DXIMAGE_FILEFORMAT destformat,
                                             LPDIRECT3DBASETEXTURE9 srctexture,
                                             CONST PALETTEENTRY *srcpalette);

HRESULT WINAPI D3DXSaveTextureToFileA(LPCSTR destfile,
                                      D3DXIMAGE_FILEFORMAT destformat,
                                      LPDIRECT3DBASETEXTURE9 srctexture,
                                      CONST PALETTEENTRY *srcpalette);
HRESULT WINAPI D3DXSaveTextureToFileW(LPCWSTR destfile,
                                      D3DXIMAGE_FILEFORMAT destformat,
                                      LPDIRECT3DBASETEXTURE9 srctexture,
                                      CONST PALETTEENTRY *srcpalette);
#define        D3DXSaveTextureToFile WINELIB_NAME_AW(D3DXSaveTextureToFile)


/* Other functions */
HRESULT WINAPI D3DXFilterTexture(      LPDIRECT3DBASETEXTURE9 texture,
                                       CONST PALETTEENTRY *palette,
                                       UINT srclevel,
                                       DWORD filter);
#define D3DXFilterCubeTexture D3DXFilterTexture
#define D3DXFilterVolumeTexture D3DXFilterTexture

HRESULT WINAPI D3DXFillTexture(        LPDIRECT3DTEXTURE9 texture,
                                       LPD3DXFILL2D function,
                                       LPVOID data);

HRESULT WINAPI D3DXFillCubeTexture(    LPDIRECT3DCUBETEXTURE9 cube,
                                       LPD3DXFILL3D function,
                                       LPVOID data);

HRESULT WINAPI D3DXFillVolumeTexture(  LPDIRECT3DVOLUMETEXTURE9 volume,
                                       LPD3DXFILL3D function,
                                       LPVOID data);

HRESULT WINAPI D3DXFillTextureTX(      LPDIRECT3DTEXTURE9 texture,
                                       CONST DWORD *function,
                                       CONST D3DXVECTOR4 *constants,
                                       UINT numconstants);

HRESULT WINAPI D3DXFillCubeTextureTX(  LPDIRECT3DCUBETEXTURE9 cube,
                                       CONST DWORD *function,
                                       CONST D3DXVECTOR4 *constants,
                                       UINT numconstants);

HRESULT WINAPI D3DXFillVolumeTextureTX(LPDIRECT3DVOLUMETEXTURE9 volume,
                                       CONST DWORD *function,
                                       CONST D3DXVECTOR4 *constants,
                                       UINT numconstants);

HRESULT WINAPI D3DXComputeNormalMap(   LPDIRECT3DTEXTURE9 texture,
                                       LPDIRECT3DTEXTURE9 srctexture,
                                       CONST PALETTEENTRY *srcpalette,
                                       DWORD flags,
                                       DWORD channel,
                                       FLOAT amplitude);


#ifdef __cplusplus
}
#endif

#endif /* __WINE_D3DX9TEX_H */
