- some D3D8 fixes

- beginning of shaders support (Vertex and Pixel Shaders 1.1 on
  DirectX8)
- beginning of D3DX8 support the D3D8 utility API (very basic, only
  the core header)
oldstable
Raphael Junqueira 2002-12-17 01:15:15 +00:00 committed by Alexandre Julliard
parent 0df7b24b32
commit e31ae92630
28 changed files with 1472 additions and 383 deletions

3
configure vendored

File diff suppressed because one or more lines are too long

View File

@ -1366,6 +1366,7 @@ dlls/commdlg/Makefile
dlls/crtdll/Makefile
dlls/crypt32/Makefile
dlls/d3d8/Makefile
dlls/d3dx8/Makefile
dlls/dciman32/Makefile
dlls/ddraw/Makefile
dlls/devenum/Makefile

View File

@ -8,7 +8,7 @@ VPATH = @srcdir@
# special configure-dependent targets
GLU32FILES = glu32
OPENGLFILES = d3d8 opengl32
OPENGLFILES = d3d8 d3dx8 opengl32
XFILES = ddraw x11drv
EXTRADIRS = @GLU32FILES@ @OPENGLFILES@ @XFILES@
@ -112,6 +112,7 @@ BASEDIRS = \
SUBDIRS = \
$(BASEDIRS) \
d3d8 \
d3dx8 \
ddraw \
glu32 \
opengl32 \
@ -301,6 +302,9 @@ crypt32.dll$(DLLEXT): crypt32/crypt32.dll$(DLLEXT)
d3d8.dll$(DLLEXT): d3d8/d3d8.dll$(DLLEXT)
$(RM) $@ && $(LN_S) d3d8/d3d8.dll$(DLLEXT) $@
d3dx8.dll$(DLLEXT): d3dx8/d3dx8.dll$(DLLEXT)
$(RM) $@ && $(LN_S) d3dx8/d3dx8.dll$(DLLEXT) $@
dciman32.dll$(DLLEXT): dciman32/dciman32.dll$(DLLEXT)
$(RM) $@ && $(LN_S) dciman32/dciman32.dll$(DLLEXT) $@
@ -585,6 +589,7 @@ IMPORT_LIBS = \
libcrtdll \
libcrypt32 \
libd3d8 \
libd3dx8 \
libdciman32 \
libddraw \
libdevenum \
@ -705,6 +710,11 @@ libd3d8.def: d3d8/d3d8.spec.def
libd3d8.a: d3d8/d3d8.spec.def
$(DLLTOOL) -k -l $@ -d d3d8/d3d8.spec.def
libd3dx8.def: d3dx8/d3dx8.spec.def
$(RM) $@ && $(LN_S) d3dx8/d3dx8.spec.def $@
libd3dx8.a: d3dx8/d3dx8.spec.def
$(DLLTOOL) -k -l $@ -d d3dx8/d3dx8.spec.def
libdciman32.def: dciman32/dciman32.spec.def
$(RM) $@ && $(LN_S) dciman32/dciman32.spec.def $@
libdciman32.a: dciman32/dciman32.spec.def
@ -1060,6 +1070,7 @@ commdlg/comdlg32.spec.def: $(WINEBUILD)
crtdll/crtdll.spec.def: $(WINEBUILD)
crypt32/crypt32.spec.def: $(WINEBUILD)
d3d8/d3d8.spec.def: $(WINEBUILD)
d3dx8/d3dx8.spec.def: $(WINEBUILD)
dciman32/dciman32.spec.def: $(WINEBUILD)
ddraw/ddraw.spec.def: $(WINEBUILD)
devenum/devenum.spec.def: $(WINEBUILD)
@ -1145,6 +1156,7 @@ commdlg/comdlg32.dll$(DLLEXT): commdlg
crtdll/crtdll.dll$(DLLEXT): crtdll
crypt32/crypt32.dll$(DLLEXT): crypt32
d3d8/d3d8.dll$(DLLEXT): d3d8
d3dx8/d3dx8.dll$(DLLEXT): d3dx8
dciman32/dciman32.dll$(DLLEXT): dciman32
ddraw/ddraw.dll$(DLLEXT): ddraw
devenum/devenum.dll$(DLLEXT): devenum
@ -1246,6 +1258,7 @@ commdlg/__install__: comdlg32.dll$(DLLEXT)
crtdll/__install__: crtdll.dll$(DLLEXT)
crypt32/__install__: crypt32.dll$(DLLEXT)
d3d8/__install__: d3d8.dll$(DLLEXT)
d3dx8/__install__: d3dx8.dll$(DLLEXT)
dciman32/__install__: dciman32.dll$(DLLEXT)
ddraw/__install__: ddraw.dll$(DLLEXT)
devenum/__install__: devenum.dll$(DLLEXT)

View File

@ -18,6 +18,7 @@ C_SRCS = \
directx.c \
indexbuffer.c \
resource.c \
shader.c \
surface.c \
swapchain.c \
texture.c \

View File

@ -28,13 +28,14 @@
WINE_DEFAULT_DEBUG_CHANNEL(d3d);
/* IDirect3DBaseTexture8 IUnknown parts follow: */
/* IDirect3DBaseTexture8 (Inherited from IUnknown) */
HRESULT WINAPI IDirect3DBaseTexture8Impl_QueryInterface(LPDIRECT3DBASETEXTURE8 iface,REFIID riid,LPVOID *ppobj)
{
ICOM_THIS(IDirect3DBaseTexture8Impl,iface);
TRACE("(%p) : QueryInterface\n", This);
if (IsEqualGUID(riid, &IID_IUnknown)
|| IsEqualGUID(riid, &IID_IClassFactory)) {
|| IsEqualGUID(riid, &IID_IDirect3DResource8)
|| IsEqualGUID(riid, &IID_IDirect3DBaseTexture8)) {
IDirect3DBaseTexture8Impl_AddRef(iface);
*ppobj = This;
return D3D_OK;
@ -59,7 +60,7 @@ ULONG WINAPI IDirect3DBaseTexture8Impl_Release(LPDIRECT3DBASETEXTURE8 iface) {
return ref;
}
/* IDirect3DBaseTexture8 IDirect3DResource8 Interface follow: */
/* IDirect3DBaseTexture8 (Inherited from IDirect3DResource8) */
HRESULT WINAPI IDirect3DBaseTexture8Impl_GetDevice(LPDIRECT3DBASETEXTURE8 iface, IDirect3DDevice8** ppDevice) {
ICOM_THIS(IDirect3DBaseTexture8Impl,iface);
TRACE("(%p) : returning %p\n", This, This->Device);

View File

@ -34,7 +34,9 @@ HRESULT WINAPI IDirect3DCubeTexture8Impl_QueryInterface(LPDIRECT3DCUBETEXTURE8 i
ICOM_THIS(IDirect3DCubeTexture8Impl,iface);
TRACE("(%p) : QueryInterface\n", This);
if (IsEqualGUID(riid, &IID_IUnknown)
|| IsEqualGUID(riid, &IID_IClassFactory)) {
|| IsEqualGUID(riid, &IID_IDirect3DResource8)
|| IsEqualGUID(riid, &IID_IDirect3DBaseTexture8)
|| IsEqualGUID(riid, &IID_IDirect3DCubeTexture8)) {
IDirect3DCubeTexture8Impl_AddRef(iface);
*ppobj = This;
return D3D_OK;
@ -68,7 +70,7 @@ ULONG WINAPI IDirect3DCubeTexture8Impl_Release(LPDIRECT3DCUBETEXTURE8 iface) {
return ref;
}
/* IDirect3DCubeTexture8 IDirect3DResource8 Interface follow: */
/* IDirect3DCubeTexture8 (Inherited from IDirect3DResource8) */
HRESULT WINAPI IDirect3DCubeTexture8Impl_GetDevice(LPDIRECT3DCUBETEXTURE8 iface, IDirect3DDevice8** ppDevice) {
ICOM_THIS(IDirect3DCubeTexture8Impl,iface);
TRACE("(%p) : returning %p\n", This, This->Device);
@ -109,11 +111,13 @@ D3DRESOURCETYPE WINAPI IDirect3DCubeTexture8Impl_GetType(LPDIRECT3DCUBETEXTURE8
/* IDirect3DCubeTexture8 (Inherited from IDirect3DBaseTexture8) */
DWORD WINAPI IDirect3DCubeTexture8Impl_SetLOD(LPDIRECT3DCUBETEXTURE8 iface, DWORD LODNew) {
ICOM_THIS(IDirect3DCubeTexture8Impl,iface);
FIXME("(%p) : stub\n", This); return D3D_OK;
FIXME("(%p) : stub\n", This);
return D3D_OK;
}
DWORD WINAPI IDirect3DCubeTexture8Impl_GetLOD(LPDIRECT3DCUBETEXTURE8 iface) {
ICOM_THIS(IDirect3DCubeTexture8Impl,iface);
FIXME("(%p) : stub\n", This); return D3D_OK;
FIXME("(%p) : stub\n", This);
return D3D_OK;
}
DWORD WINAPI IDirect3DCubeTexture8Impl_GetLevelCount(LPDIRECT3DCUBETEXTURE8 iface) {
@ -133,7 +137,6 @@ HRESULT WINAPI IDirect3DCubeTexture8Impl_GetLevelDesc(LPDIRECT3DCUBETEXT
}
return D3D_OK;
}
HRESULT WINAPI IDirect3DCubeTexture8Impl_GetCubeMapSurface(LPDIRECT3DCUBETEXTURE8 iface,D3DCUBEMAP_FACES FaceType,UINT Level,IDirect3DSurface8** ppCubeMapSurface) {
ICOM_THIS(IDirect3DCubeTexture8Impl,iface);
TRACE("(%p) : returning %p\n", This, This->surfaces[FaceType][Level]);

View File

@ -22,6 +22,7 @@
#include "winuser.h"
#include "wine/debug.h"
#include "d3d8.h"
#include "d3d8_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(d3d);
@ -29,18 +30,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(d3d);
void (*wine_tsx11_lock_ptr)(void) = NULL;
void (*wine_tsx11_unlock_ptr)(void) = NULL;
HRESULT WINAPI ValidatePixelShader(void)
{
FIXME("(void): stub\n");
return 0;
}
HRESULT WINAPI ValidateVertexShader(void)
{
FIXME("(void): stub\n");
return 0;
}
HRESULT WINAPI D3D8GetSWInfo(void)
{
FIXME("(void): stub\n");

View File

@ -152,6 +152,50 @@ typedef struct STATEBLOCK {
} STATEBLOCK;
typedef struct SHADER8Vector {
float x;
float y;
float z;
float w;
} SHADER8Vector;
typedef struct SHADER8Scalar {
float x;
} SHADER8Scalar;
#define SHADER_MAX_CONSTANTS 96
#define VSHADER_MAX_CONSTANTS 96
#define PSHADER_MAX_CONSTANTS 96
typedef SHADER8Vector SHADER8Constants[SHADER_MAX_CONSTANTS];
typedef struct SHADER8Data {
/** Run Time Shader Function Constants */
/*D3DXBUFFER* constants; */
SHADER8Constants constants;
/** Shader Code as char ... */
CONST DWORD* code;
UINT codeLength;
} SHADER8Data;
typedef struct VERTEXSHADER8 { /* TODO: Vertex Shader */
CONST DWORD* decl;
CONST DWORD* function;
DWORD usage; /* 0 || D3DUSAGE_SOFTWAREPROCESSING */
UINT declLength;
UINT functionLength;
/* run time datas */
SHADER8Data* data;
} VERTEXSHADER8;
typedef struct PIXELSHADER8 { /* TODO: Pixel Shader */
CONST DWORD* function;
UINT functionLength;
/* run time datas */
SHADER8Data* data;
} PIXELSHADER8;
/*
* External prototypes
*/
@ -198,11 +242,11 @@ struct IDirect3D8Impl
};
/* IUnknown: */
extern HRESULT WINAPI IDirect3D8Impl_QueryInterface(LPDIRECT3D8 iface,REFIID refiid,LPVOID *obj);
extern ULONG WINAPI IDirect3D8Impl_AddRef(LPDIRECT3D8 iface);
extern ULONG WINAPI IDirect3D8Impl_Release(LPDIRECT3D8 iface);
extern HRESULT WINAPI IDirect3D8Impl_QueryInterface(LPDIRECT3D8 iface,REFIID refiid,LPVOID *obj);
extern ULONG WINAPI IDirect3D8Impl_AddRef(LPDIRECT3D8 iface);
extern ULONG WINAPI IDirect3D8Impl_Release(LPDIRECT3D8 iface);
/* IDirect3d8:*/
/* IDirect3d8: */
extern HRESULT WINAPI IDirect3D8Impl_RegisterSoftwareDevice(LPDIRECT3D8 iface, void* pInitializeFunction);
extern UINT WINAPI IDirect3D8Impl_GetAdapterCount(LPDIRECT3D8 iface);
extern HRESULT WINAPI IDirect3D8Impl_GetAdapterIdentifier(LPDIRECT3D8 iface, UINT Adapter, DWORD Flags, D3DADAPTER_IDENTIFIER8* pIdentifier);
@ -220,50 +264,8 @@ extern HRESULT WINAPI IDirect3D8Impl_CheckDepthStencilMatch(LPDIRECT3D8 iface,
extern HRESULT WINAPI IDirect3D8Impl_GetDeviceCaps(LPDIRECT3D8 iface, UINT Adapter, D3DDEVTYPE DeviceType, D3DCAPS8* pCaps);
extern HMONITOR WINAPI IDirect3D8Impl_GetAdapterMonitor(LPDIRECT3D8 iface, UINT Adapter);
extern HRESULT WINAPI IDirect3D8Impl_CreateDevice(LPDIRECT3D8 iface, UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow,
DWORD BehaviorFlags, D3DPRESENT_PARAMETERS* pPresentationParameters,
IDirect3DDevice8** ppReturnedDeviceInterface);
/* --------------------- */
/* IDirect3DBaseTexture8 */
/* --------------------- */
/*****************************************************************************
* Predeclare the interface implementation structures
*/
extern ICOM_VTABLE(IDirect3DBaseTexture8) Direct3DBaseTexture8_Vtbl;
/*****************************************************************************
* IDirect3DBaseTexture8 implementation structure
*/
struct IDirect3DBaseTexture8Impl
{
/* IUnknown fields */
ICOM_VFIELD(IDirect3DBaseTexture8);
DWORD ref;
/* IDirect3DBaseTexture8 fields */
IDirect3DDevice8Impl *Device;
D3DRESOURCETYPE ResourceType;
};
/* IUnknown: */
extern HRESULT WINAPI IDirect3DBaseTexture8Impl_QueryInterface(LPDIRECT3DBASETEXTURE8 iface,REFIID refiid,LPVOID *obj);
extern ULONG WINAPI IDirect3DBaseTexture8Impl_AddRef(LPDIRECT3DBASETEXTURE8 iface);
extern ULONG WINAPI IDirect3DBaseTexture8Impl_Release(LPDIRECT3DBASETEXTURE8 iface);
/* IDirect3DBaseTexture8 (Inherited from IDirect3DResource8) */
extern HRESULT WINAPI IDirect3DBaseTexture8Impl_GetDevice(LPDIRECT3DBASETEXTURE8 iface, IDirect3DDevice8** ppDevice);
extern HRESULT WINAPI IDirect3DBaseTexture8Impl_SetPrivateData(LPDIRECT3DBASETEXTURE8 iface, REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags);
extern HRESULT WINAPI IDirect3DBaseTexture8Impl_GetPrivateData(LPDIRECT3DBASETEXTURE8 iface, REFGUID refguid, void* pData, DWORD* pSizeOfData);
extern HRESULT WINAPI IDirect3DBaseTexture8Impl_FreePrivateData(LPDIRECT3DBASETEXTURE8 iface, REFGUID refguid);
extern DWORD WINAPI IDirect3DBaseTexture8Impl_SetPriority(LPDIRECT3DBASETEXTURE8 iface, DWORD PriorityNew);
extern DWORD WINAPI IDirect3DBaseTexture8Impl_GetPriority(LPDIRECT3DBASETEXTURE8 iface);
extern void WINAPI IDirect3DBaseTexture8Impl_PreLoad(LPDIRECT3DBASETEXTURE8 iface);
extern D3DRESOURCETYPE WINAPI IDirect3DBaseTexture8Impl_GetType(LPDIRECT3DBASETEXTURE8 iface);
/* IDirect3DBaseTexture8 */
extern DWORD WINAPI IDirect3DBaseTexture8Impl_SetLOD(LPDIRECT3DBASETEXTURE8 iface, DWORD LODNew);
extern DWORD WINAPI IDirect3DBaseTexture8Impl_GetLOD(LPDIRECT3DBASETEXTURE8 iface);
extern DWORD WINAPI IDirect3DBaseTexture8Impl_GetLevelCount(LPDIRECT3DBASETEXTURE8 iface);
DWORD BehaviorFlags, D3DPRESENT_PARAMETERS* pPresentationParameters,
IDirect3DDevice8** ppReturnedDeviceInterface);
/* ---------------- */
/* IDirect3DDevice8 */
@ -274,7 +276,6 @@ extern DWORD WINAPI IDirect3DBaseTexture8Impl_GetLevelCount(LPDIRECT3D
*/
extern ICOM_VTABLE(IDirect3DDevice8) Direct3DDevice8_Vtbl;
/*****************************************************************************
* IDirect3DDevice8 implementation structure
*/
@ -282,45 +283,44 @@ struct IDirect3DDevice8Impl
{
/* IUnknown fields */
ICOM_VFIELD(IDirect3DDevice8);
DWORD ref;
DWORD ref;
/* IDirect3DDevice8 fields */
IDirect3D8Impl *direct3d8;
IDirect3DSurface8Impl *backBuffer;
IDirect3D8Impl *direct3d8;
IDirect3DSurface8Impl *backBuffer;
D3DPRESENT_PARAMETERS PresentParms;
D3DDEVICE_CREATION_PARAMETERS CreateParms;
UINT adapterNo;
D3DDEVTYPE devType;
UINT adapterNo;
D3DDEVTYPE devType;
UINT srcBlend;
UINT dstBlend;
UINT srcBlend;
UINT dstBlend;
/* State block related */
BOOL isRecordingState;
STATEBLOCK StateBlock;
STATEBLOCK *UpdateStateBlock;
BOOL isRecordingState;
STATEBLOCK StateBlock;
STATEBLOCK *UpdateStateBlock;
/* Other required values */
float lightPosn[MAX_ACTIVE_LIGHTS][4];
float lightDirn[MAX_ACTIVE_LIGHTS][4];
float lightPosn[MAX_ACTIVE_LIGHTS][4];
float lightDirn[MAX_ACTIVE_LIGHTS][4];
/* OpenGL related */
GLXContext glCtx;
XVisualInfo *visInfo;
Display *display;
Window win;
UINT dummyTextureName[8];
GLXContext glCtx;
XVisualInfo *visInfo;
Display *display;
Window win;
UINT dummyTextureName[8];
};
/* IUnknown: */
extern HRESULT WINAPI IDirect3DDevice8Impl_QueryInterface(LPDIRECT3DDEVICE8 iface,REFIID refiid,LPVOID *obj);
extern ULONG WINAPI IDirect3DDevice8Impl_AddRef(LPDIRECT3DDEVICE8 iface);
extern ULONG WINAPI IDirect3DDevice8Impl_Release(LPDIRECT3DDEVICE8 iface);
extern HRESULT WINAPI IDirect3DDevice8Impl_QueryInterface(LPDIRECT3DDEVICE8 iface,REFIID refiid,LPVOID *obj);
extern ULONG WINAPI IDirect3DDevice8Impl_AddRef(LPDIRECT3DDEVICE8 iface);
extern ULONG WINAPI IDirect3DDevice8Impl_Release(LPDIRECT3DDEVICE8 iface);
/* IDirect3DDevice8:*/
/* IDirect3DDevice8: */
extern HRESULT WINAPI IDirect3DDevice8Impl_TestCooperativeLevel(LPDIRECT3DDEVICE8 iface);
extern UINT WINAPI IDirect3DDevice8Impl_GetAvailableTextureMem(LPDIRECT3DDEVICE8 iface);
extern HRESULT WINAPI IDirect3DDevice8Impl_ResourceManagerDiscardBytes(LPDIRECT3DDEVICE8 iface, DWORD Bytes);
@ -416,91 +416,9 @@ extern HRESULT WINAPI IDirect3DDevice8Impl_DrawRectPatch(LPDIRECT3DDEVICE8 ifa
extern HRESULT WINAPI IDirect3DDevice8Impl_DrawTriPatch(LPDIRECT3DDEVICE8 iface, UINT Handle,CONST float* pNumSegs,CONST D3DTRIPATCH_INFO* pTriPatchInfo);
extern HRESULT WINAPI IDirect3DDevice8Impl_DeletePatch(LPDIRECT3DDEVICE8 iface, UINT Handle);
/* ------------------ */
/* IDirect3DResource8 */
/* ------------------ */
/*****************************************************************************
* Predeclare the interface implementation structures
*/
extern ICOM_VTABLE(IDirect3DResource8) Direct3DResource8_Vtbl;
/*****************************************************************************
* IDirect3DResource8 implementation structure
*/
struct IDirect3DResource8Impl
{
/* IUnknown fields */
ICOM_VFIELD(IDirect3DResource8);
DWORD ref;
/* IDirect3DResource8 fields */
IDirect3DDevice8Impl *Device;
D3DRESOURCETYPE ResourceType;
};
/* IUnknown: */
extern HRESULT WINAPI IDirect3DResource8Impl_QueryInterface(LPDIRECT3DRESOURCE8 iface,REFIID refiid,LPVOID *obj);
extern ULONG WINAPI IDirect3DResource8Impl_AddRef(LPDIRECT3DRESOURCE8 iface);
extern ULONG WINAPI IDirect3DResource8Impl_Release(LPDIRECT3DRESOURCE8 iface);
/* IDirect3DResource8 */
extern HRESULT WINAPI IDirect3DResource8Impl_GetDevice(LPDIRECT3DRESOURCE8 iface, IDirect3DDevice8** ppDevice);
extern HRESULT WINAPI IDirect3DResource8Impl_SetPrivateData(LPDIRECT3DRESOURCE8 iface, REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags);
extern HRESULT WINAPI IDirect3DResource8Impl_GetPrivateData(LPDIRECT3DRESOURCE8 iface, REFGUID refguid, void* pData, DWORD* pSizeOfData);
extern HRESULT WINAPI IDirect3DResource8Impl_FreePrivateData(LPDIRECT3DRESOURCE8 iface, REFGUID refguid);
extern DWORD WINAPI IDirect3DResource8Impl_SetPriority(LPDIRECT3DRESOURCE8 iface, DWORD PriorityNew);
extern DWORD WINAPI IDirect3DResource8Impl_GetPriority(LPDIRECT3DRESOURCE8 iface);
extern void WINAPI IDirect3DResource8Impl_PreLoad(LPDIRECT3DRESOURCE8 iface);
extern D3DRESOURCETYPE WINAPI IDirect3DResource8Impl_GetType(LPDIRECT3DRESOURCE8 iface);
/* ---------------------- */
/* IDirect3DVertexBuffer8 */
/* ---------------------- */
/*****************************************************************************
* Predeclare the interface implementation structures
*/
extern ICOM_VTABLE(IDirect3DVertexBuffer8) Direct3DVertexBuffer8_Vtbl;
/*****************************************************************************
* IDirect3DVertexBuffer8 implementation structure
*/
struct IDirect3DVertexBuffer8Impl
{
/* IUnknown fields */
ICOM_VFIELD(IDirect3DVertexBuffer8);
DWORD ref;
/* IDirect3DVertexBuffer8 fields */
IDirect3DDevice8Impl *Device;
D3DRESOURCETYPE ResourceType;
BYTE *allocatedMemory;
D3DVERTEXBUFFER_DESC currentDesc;
};
/* IUnknown: */
extern HRESULT WINAPI IDirect3DVertexBuffer8Impl_QueryInterface(LPDIRECT3DVERTEXBUFFER8 iface,REFIID refiid,LPVOID *obj);
extern ULONG WINAPI IDirect3DVertexBuffer8Impl_AddRef(LPDIRECT3DVERTEXBUFFER8 iface);
extern ULONG WINAPI IDirect3DVertexBuffer8Impl_Release(LPDIRECT3DVERTEXBUFFER8 iface);
/* IDirect3DVertexBuffer8 (Inherited from IDirect3DResource8) */
extern HRESULT WINAPI IDirect3DVertexBuffer8Impl_GetDevice(LPDIRECT3DVERTEXBUFFER8 iface, IDirect3DDevice8** ppDevice);
extern HRESULT WINAPI IDirect3DVertexBuffer8Impl_SetPrivateData(LPDIRECT3DVERTEXBUFFER8 iface, REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags);
extern HRESULT WINAPI IDirect3DVertexBuffer8Impl_GetPrivateData(LPDIRECT3DVERTEXBUFFER8 iface, REFGUID refguid, void* pData, DWORD* pSizeOfData);
extern HRESULT WINAPI IDirect3DVertexBuffer8Impl_FreePrivateData(LPDIRECT3DVERTEXBUFFER8 iface, REFGUID refguid);
extern DWORD WINAPI IDirect3DVertexBuffer8Impl_SetPriority(LPDIRECT3DVERTEXBUFFER8 iface, DWORD PriorityNew);
extern DWORD WINAPI IDirect3DVertexBuffer8Impl_GetPriority(LPDIRECT3DVERTEXBUFFER8 iface);
extern void WINAPI IDirect3DVertexBuffer8Impl_PreLoad(LPDIRECT3DVERTEXBUFFER8 iface);
extern D3DRESOURCETYPE WINAPI IDirect3DVertexBuffer8Impl_GetType(LPDIRECT3DVERTEXBUFFER8 iface);
/* IDirect3DVertexBuffer8 */
extern HRESULT WINAPI IDirect3DVertexBuffer8Impl_Lock(LPDIRECT3DVERTEXBUFFER8 iface, UINT OffsetToLock, UINT SizeToLock, BYTE** ppbData, DWORD Flags);
extern HRESULT WINAPI IDirect3DVertexBuffer8Impl_Unlock(LPDIRECT3DVERTEXBUFFER8 iface);
extern HRESULT WINAPI IDirect3DVertexBuffer8Impl_GetDesc(LPDIRECT3DVERTEXBUFFER8 iface, D3DVERTEXBUFFER_DESC *pDesc);
/* IDirect3DVolume8 private include file
*/
/* ---------------- */
/* IDirect3DVolume8 */
/* ---------------- */
/*****************************************************************************
* Predeclare the interface implementation structures
@ -525,15 +443,14 @@ struct IDirect3DVolume8Impl
BYTE *allocatedMemory;
UINT textureName;
UINT bytesPerPixel;
};
/* IUnknown: */
extern HRESULT WINAPI IDirect3DVolume8Impl_QueryInterface(LPDIRECT3DVOLUME8 iface,REFIID refiid,LPVOID *obj);
extern ULONG WINAPI IDirect3DVolume8Impl_AddRef(LPDIRECT3DVOLUME8 iface);
extern ULONG WINAPI IDirect3DVolume8Impl_Release(LPDIRECT3DVOLUME8 iface);
extern ULONG WINAPI IDirect3DVolume8Impl_AddRef(LPDIRECT3DVOLUME8 iface);
extern ULONG WINAPI IDirect3DVolume8Impl_Release(LPDIRECT3DVOLUME8 iface);
/* IDirect3DVolume8 */
/* IDirect3DVolume8: */
extern HRESULT WINAPI IDirect3DVolume8Impl_GetDevice(LPDIRECT3DVOLUME8 iface, IDirect3DDevice8** ppDevice);
extern HRESULT WINAPI IDirect3DVolume8Impl_SetPrivateData(LPDIRECT3DVOLUME8 iface, REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags);
extern HRESULT WINAPI IDirect3DVolume8Impl_GetPrivateData(LPDIRECT3DVOLUME8 iface, REFGUID refguid, void* pData, DWORD* pSizeOfData);
@ -566,10 +483,10 @@ struct IDirect3DSwapChain8Impl
/* IUnknown: */
extern HRESULT WINAPI IDirect3DSwapChain8Impl_QueryInterface(LPDIRECT3DSWAPCHAIN8 iface,REFIID refiid,LPVOID *obj);
extern ULONG WINAPI IDirect3DSwapChain8Impl_AddRef(LPDIRECT3DSWAPCHAIN8 iface);
extern ULONG WINAPI IDirect3DSwapChain8Impl_Release(LPDIRECT3DSWAPCHAIN8 iface);
extern ULONG WINAPI IDirect3DSwapChain8Impl_AddRef(LPDIRECT3DSWAPCHAIN8 iface);
extern ULONG WINAPI IDirect3DSwapChain8Impl_Release(LPDIRECT3DSWAPCHAIN8 iface);
/* IDirect3DSwapChain8 */
/* IDirect3DSwapChain8: */
extern HRESULT WINAPI IDirect3DSwapChain8Impl_Present(LPDIRECT3DSWAPCHAIN8 iface, CONST RECT* pSourceRect, CONST RECT* pDestRect, HWND hDestWindowOverride,CONST RGNDATA* pDirtyRegion);
extern HRESULT WINAPI IDirect3DSwapChain8Impl_GetBackBuffer(LPDIRECT3DSWAPCHAIN8 iface, UINT BackBuffer, D3DBACKBUFFER_TYPE Type,IDirect3DSurface8** ppBackBuffer);
@ -605,10 +522,10 @@ struct IDirect3DSurface8Impl
/* IUnknown: */
extern HRESULT WINAPI IDirect3DSurface8Impl_QueryInterface(LPDIRECT3DSURFACE8 iface,REFIID refiid,LPVOID *obj);
extern ULONG WINAPI IDirect3DSurface8Impl_AddRef(LPDIRECT3DSURFACE8 iface);
extern ULONG WINAPI IDirect3DSurface8Impl_Release(LPDIRECT3DSURFACE8 iface);
extern ULONG WINAPI IDirect3DSurface8Impl_AddRef(LPDIRECT3DSURFACE8 iface);
extern ULONG WINAPI IDirect3DSurface8Impl_Release(LPDIRECT3DSURFACE8 iface);
/* IDirect3DSurface8 */
/* IDirect3DSurface8: */
extern HRESULT WINAPI IDirect3DSurface8Impl_GetDevice(LPDIRECT3DSURFACE8 iface, IDirect3DDevice8** ppDevice);
extern HRESULT WINAPI IDirect3DSurface8Impl_SetPrivateData(LPDIRECT3DSURFACE8 iface, REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags);
extern HRESULT WINAPI IDirect3DSurface8Impl_GetPrivateData(LPDIRECT3DSURFACE8 iface, REFGUID refguid,void* pData,DWORD* pSizeOfData);
@ -618,6 +535,91 @@ extern HRESULT WINAPI IDirect3DSurface8Impl_GetDesc(LPDIRECT3DSURFACE8 iface, D3
extern HRESULT WINAPI IDirect3DSurface8Impl_LockRect(LPDIRECT3DSURFACE8 iface, D3DLOCKED_RECT* pLockedRect, CONST RECT* pRect,DWORD Flags);
extern HRESULT WINAPI IDirect3DSurface8Impl_UnlockRect(LPDIRECT3DSURFACE8 iface);
/* ------------------ */
/* IDirect3DResource8 */
/* ------------------ */
/*****************************************************************************
* Predeclare the interface implementation structures
*/
extern ICOM_VTABLE(IDirect3DResource8) Direct3DResource8_Vtbl;
/*****************************************************************************
* IDirect3DResource8 implementation structure
*/
struct IDirect3DResource8Impl
{
/* IUnknown fields */
ICOM_VFIELD(IDirect3DResource8);
DWORD ref;
/* IDirect3DResource8 fields */
IDirect3DDevice8Impl *Device;
D3DRESOURCETYPE ResourceType;
};
/* IUnknown: */
extern HRESULT WINAPI IDirect3DResource8Impl_QueryInterface(LPDIRECT3DRESOURCE8 iface,REFIID refiid,LPVOID *obj);
extern ULONG WINAPI IDirect3DResource8Impl_AddRef(LPDIRECT3DRESOURCE8 iface);
extern ULONG WINAPI IDirect3DResource8Impl_Release(LPDIRECT3DRESOURCE8 iface);
/* IDirect3DResource8: */
extern HRESULT WINAPI IDirect3DResource8Impl_GetDevice(LPDIRECT3DRESOURCE8 iface, IDirect3DDevice8** ppDevice);
extern HRESULT WINAPI IDirect3DResource8Impl_SetPrivateData(LPDIRECT3DRESOURCE8 iface, REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags);
extern HRESULT WINAPI IDirect3DResource8Impl_GetPrivateData(LPDIRECT3DRESOURCE8 iface, REFGUID refguid, void* pData, DWORD* pSizeOfData);
extern HRESULT WINAPI IDirect3DResource8Impl_FreePrivateData(LPDIRECT3DRESOURCE8 iface, REFGUID refguid);
extern DWORD WINAPI IDirect3DResource8Impl_SetPriority(LPDIRECT3DRESOURCE8 iface, DWORD PriorityNew);
extern DWORD WINAPI IDirect3DResource8Impl_GetPriority(LPDIRECT3DRESOURCE8 iface);
extern void WINAPI IDirect3DResource8Impl_PreLoad(LPDIRECT3DRESOURCE8 iface);
extern D3DRESOURCETYPE WINAPI IDirect3DResource8Impl_GetType(LPDIRECT3DRESOURCE8 iface);
/* ---------------------- */
/* IDirect3DVertexBuffer8 */
/* ---------------------- */
/*****************************************************************************
* Predeclare the interface implementation structures
*/
extern ICOM_VTABLE(IDirect3DVertexBuffer8) Direct3DVertexBuffer8_Vtbl;
/*****************************************************************************
* IDirect3DVertexBuffer8 implementation structure
*/
struct IDirect3DVertexBuffer8Impl
{
/* IUnknown fields */
ICOM_VFIELD(IDirect3DVertexBuffer8);
DWORD ref;
/* IDirect3DResource8 fields */
IDirect3DDevice8Impl *Device;
D3DRESOURCETYPE ResourceType;
/* IDirect3DVertexBuffer8 fields */
BYTE *allocatedMemory;
D3DVERTEXBUFFER_DESC currentDesc;
};
/* IUnknown: */
extern HRESULT WINAPI IDirect3DVertexBuffer8Impl_QueryInterface(LPDIRECT3DVERTEXBUFFER8 iface,REFIID refiid,LPVOID *obj);
extern ULONG WINAPI IDirect3DVertexBuffer8Impl_AddRef(LPDIRECT3DVERTEXBUFFER8 iface);
extern ULONG WINAPI IDirect3DVertexBuffer8Impl_Release(LPDIRECT3DVERTEXBUFFER8 iface);
/* IDirect3DVertexBuffer8: (Inherited from IDirect3DResource8) */
extern HRESULT WINAPI IDirect3DVertexBuffer8Impl_GetDevice(LPDIRECT3DVERTEXBUFFER8 iface, IDirect3DDevice8** ppDevice);
extern HRESULT WINAPI IDirect3DVertexBuffer8Impl_SetPrivateData(LPDIRECT3DVERTEXBUFFER8 iface, REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags);
extern HRESULT WINAPI IDirect3DVertexBuffer8Impl_GetPrivateData(LPDIRECT3DVERTEXBUFFER8 iface, REFGUID refguid, void* pData, DWORD* pSizeOfData);
extern HRESULT WINAPI IDirect3DVertexBuffer8Impl_FreePrivateData(LPDIRECT3DVERTEXBUFFER8 iface, REFGUID refguid);
extern DWORD WINAPI IDirect3DVertexBuffer8Impl_SetPriority(LPDIRECT3DVERTEXBUFFER8 iface, DWORD PriorityNew);
extern DWORD WINAPI IDirect3DVertexBuffer8Impl_GetPriority(LPDIRECT3DVERTEXBUFFER8 iface);
extern void WINAPI IDirect3DVertexBuffer8Impl_PreLoad(LPDIRECT3DVERTEXBUFFER8 iface);
extern D3DRESOURCETYPE WINAPI IDirect3DVertexBuffer8Impl_GetType(LPDIRECT3DVERTEXBUFFER8 iface);
/* IDirect3DVertexBuffer8: */
extern HRESULT WINAPI IDirect3DVertexBuffer8Impl_Lock(LPDIRECT3DVERTEXBUFFER8 iface, UINT OffsetToLock, UINT SizeToLock, BYTE** ppbData, DWORD Flags);
extern HRESULT WINAPI IDirect3DVertexBuffer8Impl_Unlock(LPDIRECT3DVERTEXBUFFER8 iface);
extern HRESULT WINAPI IDirect3DVertexBuffer8Impl_GetDesc(LPDIRECT3DVERTEXBUFFER8 iface, D3DVERTEXBUFFER_DESC *pDesc);
/* --------------------- */
/* IDirect3DIndexBuffer8 */
/* --------------------- */
@ -636,20 +638,21 @@ struct IDirect3DIndexBuffer8Impl
ICOM_VFIELD(IDirect3DIndexBuffer8);
DWORD ref;
/* IDirect3DIndexBuffer8 fields */
/* IDirect3DResource8 fields */
IDirect3DDevice8Impl *Device;
D3DRESOURCETYPE ResourceType;
D3DINDEXBUFFER_DESC currentDesc;
/* IDirect3DIndexBuffer8 fields */
void *allocatedMemory;
D3DINDEXBUFFER_DESC currentDesc;
};
/* IUnknown: */
extern HRESULT WINAPI IDirect3DIndexBuffer8Impl_QueryInterface(LPDIRECT3DINDEXBUFFER8 iface,REFIID refiid,LPVOID *obj);
extern ULONG WINAPI IDirect3DIndexBuffer8Impl_AddRef(LPDIRECT3DINDEXBUFFER8 iface);
extern ULONG WINAPI IDirect3DIndexBuffer8Impl_Release(LPDIRECT3DINDEXBUFFER8 iface);
extern HRESULT WINAPI IDirect3DIndexBuffer8Impl_QueryInterface(LPDIRECT3DINDEXBUFFER8 iface,REFIID refiid,LPVOID *obj);
extern ULONG WINAPI IDirect3DIndexBuffer8Impl_AddRef(LPDIRECT3DINDEXBUFFER8 iface);
extern ULONG WINAPI IDirect3DIndexBuffer8Impl_Release(LPDIRECT3DINDEXBUFFER8 iface);
/* IDirect3DIndexBuffer8 (Inherited from IDirect3DResource8) */
/* IDirect3DIndexBuffer8: (Inherited from IDirect3DResource8) */
extern HRESULT WINAPI IDirect3DIndexBuffer8Impl_GetDevice(LPDIRECT3DINDEXBUFFER8 iface, IDirect3DDevice8** ppDevice);
extern HRESULT WINAPI IDirect3DIndexBuffer8Impl_SetPrivateData(LPDIRECT3DINDEXBUFFER8 iface, REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags);
extern HRESULT WINAPI IDirect3DIndexBuffer8Impl_GetPrivateData(LPDIRECT3DINDEXBUFFER8 iface, REFGUID refguid, void* pData, DWORD* pSizeOfData);
@ -659,11 +662,60 @@ extern DWORD WINAPI IDirect3DIndexBuffer8Impl_GetPriority(LPDIRECT3DIN
extern void WINAPI IDirect3DIndexBuffer8Impl_PreLoad(LPDIRECT3DINDEXBUFFER8 iface);
extern D3DRESOURCETYPE WINAPI IDirect3DIndexBuffer8Impl_GetType(LPDIRECT3DINDEXBUFFER8 iface);
/* IDirect3DIndexBuffer8 */
/* IDirect3DIndexBuffer8: */
extern HRESULT WINAPI IDirect3DIndexBuffer8Impl_Lock(LPDIRECT3DINDEXBUFFER8 iface, UINT OffsetToLock, UINT SizeToLock, BYTE** ppbData, DWORD Flags);
extern HRESULT WINAPI IDirect3DIndexBuffer8Impl_Unlock(LPDIRECT3DINDEXBUFFER8 iface);
extern HRESULT WINAPI IDirect3DIndexBuffer8Impl_GetDesc(LPDIRECT3DINDEXBUFFER8 iface, D3DINDEXBUFFER_DESC *pDesc);
/* --------------------- */
/* IDirect3DBaseTexture8 */
/* --------------------- */
/*****************************************************************************
* Predeclare the interface implementation structures
*/
extern ICOM_VTABLE(IDirect3DBaseTexture8) Direct3DBaseTexture8_Vtbl;
/*****************************************************************************
* IDirect3DBaseTexture8 implementation structure
*/
struct IDirect3DBaseTexture8Impl
{
/* IUnknown fields */
ICOM_VFIELD(IDirect3DBaseTexture8);
DWORD ref;
/* IDirect3DResource8 fields */
IDirect3DDevice8Impl *Device;
D3DRESOURCETYPE ResourceType;
/* IDirect3DBaseTexture8 fields */
/*
*BOOL isManaged;
*DWORD lod;
*/
};
/* IUnknown: */
extern HRESULT WINAPI IDirect3DBaseTexture8Impl_QueryInterface(LPDIRECT3DBASETEXTURE8 iface,REFIID refiid,LPVOID *obj);
extern ULONG WINAPI IDirect3DBaseTexture8Impl_AddRef(LPDIRECT3DBASETEXTURE8 iface);
extern ULONG WINAPI IDirect3DBaseTexture8Impl_Release(LPDIRECT3DBASETEXTURE8 iface);
/* IDirect3DBaseTexture8: (Inherited from IDirect3DResource8) */
extern HRESULT WINAPI IDirect3DBaseTexture8Impl_GetDevice(LPDIRECT3DBASETEXTURE8 iface, IDirect3DDevice8** ppDevice);
extern HRESULT WINAPI IDirect3DBaseTexture8Impl_SetPrivateData(LPDIRECT3DBASETEXTURE8 iface, REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags);
extern HRESULT WINAPI IDirect3DBaseTexture8Impl_GetPrivateData(LPDIRECT3DBASETEXTURE8 iface, REFGUID refguid, void* pData, DWORD* pSizeOfData);
extern HRESULT WINAPI IDirect3DBaseTexture8Impl_FreePrivateData(LPDIRECT3DBASETEXTURE8 iface, REFGUID refguid);
extern DWORD WINAPI IDirect3DBaseTexture8Impl_SetPriority(LPDIRECT3DBASETEXTURE8 iface, DWORD PriorityNew);
extern DWORD WINAPI IDirect3DBaseTexture8Impl_GetPriority(LPDIRECT3DBASETEXTURE8 iface);
extern void WINAPI IDirect3DBaseTexture8Impl_PreLoad(LPDIRECT3DBASETEXTURE8 iface);
extern D3DRESOURCETYPE WINAPI IDirect3DBaseTexture8Impl_GetType(LPDIRECT3DBASETEXTURE8 iface);
/* IDirect3DBaseTexture8: */
extern DWORD WINAPI IDirect3DBaseTexture8Impl_SetLOD(LPDIRECT3DBASETEXTURE8 iface, DWORD LODNew);
extern DWORD WINAPI IDirect3DBaseTexture8Impl_GetLOD(LPDIRECT3DBASETEXTURE8 iface);
extern DWORD WINAPI IDirect3DBaseTexture8Impl_GetLevelCount(LPDIRECT3DBASETEXTURE8 iface);
/* --------------------- */
/* IDirect3DCubeTexture8 */
/* --------------------- */
@ -682,26 +734,29 @@ struct IDirect3DCubeTexture8Impl
ICOM_VFIELD(IDirect3DCubeTexture8);
DWORD ref;
/* IDirect3DCubeTexture8 fields */
/* IDirect3DResource8 fields */
IDirect3DDevice8Impl *Device;
D3DRESOURCETYPE ResourceType;
UINT edgeLength;
DWORD usage;
UINT levels;
D3DFORMAT format;
/* IDirect3DBaseTexture8 fields */
IDirect3DDevice8Impl *device;
IDirect3DSurface8Impl *surfaces[6][MAX_LEVELS];
BOOL Dirty;
/* IDirect3DCubeTexture8 fields */
UINT edgeLength;
DWORD usage;
UINT levels;
D3DFORMAT format;
IDirect3DDevice8Impl *device;
IDirect3DSurface8Impl *surfaces[6][MAX_LEVELS];
BOOL Dirty;
};
/* IUnknown: */
extern HRESULT WINAPI IDirect3DCubeTexture8Impl_QueryInterface(LPDIRECT3DCUBETEXTURE8 iface,REFIID refiid,LPVOID *obj);
extern ULONG WINAPI IDirect3DCubeTexture8Impl_AddRef(LPDIRECT3DCUBETEXTURE8 iface);
extern ULONG WINAPI IDirect3DCubeTexture8Impl_Release(LPDIRECT3DCUBETEXTURE8 iface);
extern HRESULT WINAPI IDirect3DCubeTexture8Impl_QueryInterface(LPDIRECT3DCUBETEXTURE8 iface,REFIID refiid,LPVOID *obj);
extern ULONG WINAPI IDirect3DCubeTexture8Impl_AddRef(LPDIRECT3DCUBETEXTURE8 iface);
extern ULONG WINAPI IDirect3DCubeTexture8Impl_Release(LPDIRECT3DCUBETEXTURE8 iface);
/* IDirect3DCubeTexture8 (Inherited from IDirect3DResource8) */
/* IDirect3DCubeTexture8: (Inherited from IDirect3DResource8) */
extern HRESULT WINAPI IDirect3DCubeTexture8Impl_GetDevice(LPDIRECT3DCUBETEXTURE8 iface, IDirect3DDevice8** ppDevice);
extern HRESULT WINAPI IDirect3DCubeTexture8Impl_SetPrivateData(LPDIRECT3DCUBETEXTURE8 iface, REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags);
extern HRESULT WINAPI IDirect3DCubeTexture8Impl_GetPrivateData(LPDIRECT3DCUBETEXTURE8 iface, REFGUID refguid, void* pData, DWORD* pSizeOfData);
@ -711,7 +766,7 @@ extern DWORD WINAPI IDirect3DCubeTexture8Impl_GetPriority(LPDIRECT3DCU
extern void WINAPI IDirect3DCubeTexture8Impl_PreLoad(LPDIRECT3DCUBETEXTURE8 iface);
extern D3DRESOURCETYPE WINAPI IDirect3DCubeTexture8Impl_GetType(LPDIRECT3DCUBETEXTURE8 iface);
/* IDirect3DCubeTexture8 (Inherited from IDirect3DBaseTexture8) */
/* IDirect3DCubeTexture8: (Inherited from IDirect3DBaseTexture8) */
extern DWORD WINAPI IDirect3DCubeTexture8Impl_SetLOD(LPDIRECT3DCUBETEXTURE8 iface, DWORD LODNew);
extern DWORD WINAPI IDirect3DCubeTexture8Impl_GetLOD(LPDIRECT3DCUBETEXTURE8 iface);
extern DWORD WINAPI IDirect3DCubeTexture8Impl_GetLevelCount(LPDIRECT3DCUBETEXTURE8 iface);
@ -741,27 +796,30 @@ struct IDirect3DTexture8Impl
ICOM_VFIELD(IDirect3DTexture8);
DWORD ref;
/* IDirect3DTexture8 fields */
/* IDirect3DResourc8 fields */
IDirect3DDevice8Impl *Device;
D3DRESOURCETYPE ResourceType;
UINT width;
UINT height;
UINT levels;
DWORD usage;
D3DFORMAT format;
IDirect3DDevice8Impl *device;
IDirect3DSurface8Impl *surfaces[MAX_LEVELS];
BOOL Dirty;
/* IDirect3DBaseTexture8 fields */
/* IDirect3DTexture8 fields */
UINT width;
UINT height;
UINT levels;
DWORD usage;
D3DFORMAT format;
IDirect3DDevice8Impl *device;
IDirect3DSurface8Impl *surfaces[MAX_LEVELS];
BOOL Dirty;
};
/* IUnknown: */
extern HRESULT WINAPI IDirect3DTexture8Impl_QueryInterface(LPDIRECT3DTEXTURE8 iface,REFIID refiid,LPVOID *obj);
extern ULONG WINAPI IDirect3DTexture8Impl_AddRef(LPDIRECT3DTEXTURE8 iface);
extern ULONG WINAPI IDirect3DTexture8Impl_Release(LPDIRECT3DTEXTURE8 iface);
extern HRESULT WINAPI IDirect3DTexture8Impl_QueryInterface(LPDIRECT3DTEXTURE8 iface,REFIID refiid,LPVOID *obj);
extern ULONG WINAPI IDirect3DTexture8Impl_AddRef(LPDIRECT3DTEXTURE8 iface);
extern ULONG WINAPI IDirect3DTexture8Impl_Release(LPDIRECT3DTEXTURE8 iface);
/* IDirect3DTexture8 (Inherited from IDirect3DResource8) */
/* IDirect3DTexture8: (Inherited from IDirect3DResource8) */
extern HRESULT WINAPI IDirect3DTexture8Impl_GetDevice(LPDIRECT3DTEXTURE8 iface, IDirect3DDevice8** ppDevice);
extern HRESULT WINAPI IDirect3DTexture8Impl_SetPrivateData(LPDIRECT3DTEXTURE8 iface, REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags);
extern HRESULT WINAPI IDirect3DTexture8Impl_GetPrivateData(LPDIRECT3DTEXTURE8 iface, REFGUID refguid, void* pData, DWORD* pSizeOfData);
@ -771,12 +829,12 @@ extern DWORD WINAPI IDirect3DTexture8Impl_GetPriority(LPDIRECT3DTEXTUR
extern void WINAPI IDirect3DTexture8Impl_PreLoad(LPDIRECT3DTEXTURE8 iface);
extern D3DRESOURCETYPE WINAPI IDirect3DTexture8Impl_GetType(LPDIRECT3DTEXTURE8 iface);
/* IDirect3DTexture8 (Inherited from IDirect3DBaseTexture8) */
/* IDirect3DTexture8: (Inherited from IDirect3DBaseTexture8) */
extern DWORD WINAPI IDirect3DTexture8Impl_SetLOD(LPDIRECT3DTEXTURE8 iface, DWORD LODNew);
extern DWORD WINAPI IDirect3DTexture8Impl_GetLOD(LPDIRECT3DTEXTURE8 iface);
extern DWORD WINAPI IDirect3DTexture8Impl_GetLevelCount(LPDIRECT3DTEXTURE8 iface);
/* IDirect3DTexture8 */
/* IDirect3DTexture8: */
extern HRESULT WINAPI IDirect3DTexture8Impl_GetLevelDesc(LPDIRECT3DTEXTURE8 iface, UINT Level,D3DSURFACE_DESC* pDesc);
extern HRESULT WINAPI IDirect3DTexture8Impl_GetSurfaceLevel(LPDIRECT3DTEXTURE8 iface, UINT Level,IDirect3DSurface8** ppSurfaceLevel);
extern HRESULT WINAPI IDirect3DTexture8Impl_LockRect(LPDIRECT3DTEXTURE8 iface, UINT Level,D3DLOCKED_RECT* pLockedRect,CONST RECT* pRect,DWORD Flags);
@ -801,9 +859,13 @@ struct IDirect3DVolumeTexture8Impl
ICOM_VFIELD(IDirect3DVolumeTexture8);
DWORD ref;
/* IDirect3DVolumeTexture8 fields */
/* IDirect3DResource8 fields */
IDirect3DDevice8Impl *Device;
D3DRESOURCETYPE ResourceType;
/* IDirect3DBaseTexture8 fields */
/* IDirect3DVolumeTexture8 fields */
UINT width;
UINT height;
UINT depth;
@ -811,18 +873,17 @@ struct IDirect3DVolumeTexture8Impl
DWORD usage;
D3DFORMAT format;
IDirect3DDevice8Impl *device;
IDirect3DVolume8Impl *volumes[MAX_LEVELS];
BOOL Dirty;
IDirect3DDevice8Impl *device;
IDirect3DVolume8Impl *volumes[MAX_LEVELS];
BOOL Dirty;
};
/* IUnknown: */
extern HRESULT WINAPI IDirect3DVolumeTexture8Impl_QueryInterface(LPDIRECT3DVOLUMETEXTURE8 iface,REFIID refiid,LPVOID *obj);
extern ULONG WINAPI IDirect3DVolumeTexture8Impl_AddRef(LPDIRECT3DVOLUMETEXTURE8 iface);
extern ULONG WINAPI IDirect3DVolumeTexture8Impl_Release(LPDIRECT3DVOLUMETEXTURE8 iface);
extern HRESULT WINAPI IDirect3DVolumeTexture8Impl_QueryInterface(LPDIRECT3DVOLUMETEXTURE8 iface,REFIID refiid,LPVOID *obj);
extern ULONG WINAPI IDirect3DVolumeTexture8Impl_AddRef(LPDIRECT3DVOLUMETEXTURE8 iface);
extern ULONG WINAPI IDirect3DVolumeTexture8Impl_Release(LPDIRECT3DVOLUMETEXTURE8 iface);
/* IDirect3DVolumeTexture8 (Inherited from IDirect3DResource8) */
/* IDirect3DVolumeTexture8: (Inherited from IDirect3DResource8) */
extern HRESULT WINAPI IDirect3DVolumeTexture8Impl_GetDevice(LPDIRECT3DVOLUMETEXTURE8 iface, IDirect3DDevice8** ppDevice);
extern HRESULT WINAPI IDirect3DVolumeTexture8Impl_SetPrivateData(LPDIRECT3DVOLUMETEXTURE8 iface, REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags);
extern HRESULT WINAPI IDirect3DVolumeTexture8Impl_GetPrivateData(LPDIRECT3DVOLUMETEXTURE8 iface, REFGUID refguid, void* pData, DWORD* pSizeOfData);
@ -832,12 +893,12 @@ extern DWORD WINAPI IDirect3DVolumeTexture8Impl_GetPriority(LPDIRECT3D
extern void WINAPI IDirect3DVolumeTexture8Impl_PreLoad(LPDIRECT3DVOLUMETEXTURE8 iface);
extern D3DRESOURCETYPE WINAPI IDirect3DVolumeTexture8Impl_GetType(LPDIRECT3DVOLUMETEXTURE8 iface);
/* IDirect3DVolumeTexture8 (Inherited from IDirect3DBaseTexture8) */
/* IDirect3DVolumeTexture8: (Inherited from IDirect3DBaseTexture8) */
extern DWORD WINAPI IDirect3DVolumeTexture8Impl_SetLOD(LPDIRECT3DVOLUMETEXTURE8 iface, DWORD LODNew);
extern DWORD WINAPI IDirect3DVolumeTexture8Impl_GetLOD(LPDIRECT3DVOLUMETEXTURE8 iface);
extern DWORD WINAPI IDirect3DVolumeTexture8Impl_GetLevelCount(LPDIRECT3DVOLUMETEXTURE8 iface);
/* IDirect3DVolumeTexture8 */
/* IDirect3DVolumeTexture8: */
extern HRESULT WINAPI IDirect3DVolumeTexture8Impl_GetLevelDesc(LPDIRECT3DVOLUMETEXTURE8 iface, UINT Level,D3DVOLUME_DESC *pDesc);
extern HRESULT WINAPI IDirect3DVolumeTexture8Impl_GetVolumeLevel(LPDIRECT3DVOLUMETEXTURE8 iface, UINT Level,IDirect3DVolume8** ppVolumeLevel);
extern HRESULT WINAPI IDirect3DVolumeTexture8Impl_LockBox(LPDIRECT3DVOLUMETEXTURE8 iface, UINT Level,D3DLOCKED_BOX* pLockedVolume,CONST D3DBOX* pBox,DWORD Flags);

View File

@ -29,6 +29,9 @@
WINE_DEFAULT_DEBUG_CHANNEL(d3d);
static VERTEXSHADER8* VertexShaders[64];
static PIXELSHADER8* PixelShaders[64];
/* CreateVertexShader can return > 0xFFFF */
#define VS_HIGHESTFIXEDFXF 0xF0000000
@ -90,7 +93,7 @@ void DrawPrimitiveI(LPDIRECT3DDEVICE8 iface,
ICOM_THIS(IDirect3DDevice8Impl,iface);
/* Dont understand how to handle multiple streams, but if a fixed
FVF is passed in rather than a handle, it must use stream 0 */
FVF is passed in rather than a handle, it must use stream 0 */
if (This->StateBlock.VertexShader > VS_HIGHESTFIXEDFXF) {
FIXME("Cant handle created shaders yet\n");
@ -558,7 +561,7 @@ HRESULT WINAPI IDirect3DDevice8Impl_QueryInterface(LPDIRECT3DDEVICE8 iface,REFII
ICOM_THIS(IDirect3DDevice8Impl,iface);
if (IsEqualGUID(riid, &IID_IUnknown)
|| IsEqualGUID(riid, &IID_IClassFactory)) {
|| IsEqualGUID(riid, &IID_IDirect3DDevice8)) {
IDirect3DDevice8Impl_AddRef(iface);
*ppobj = This;
return D3D_OK;
@ -898,8 +901,8 @@ HRESULT WINAPI IDirect3DDevice8Impl_CreateCubeTexture(LPDIRECT3DDEVICE8 iface,
*ppCubeTexture = (LPDIRECT3DCUBETEXTURE8)object;
return D3D_OK;
}
HRESULT WINAPI IDirect3DDevice8Impl_CreateVertexBuffer(LPDIRECT3DDEVICE8 iface, UINT Size,DWORD Usage,
DWORD FVF,D3DPOOL Pool,IDirect3DVertexBuffer8** ppVertexBuffer) {
HRESULT WINAPI IDirect3DDevice8Impl_CreateVertexBuffer(LPDIRECT3DDEVICE8 iface, UINT Size, DWORD Usage,
DWORD FVF,D3DPOOL Pool, IDirect3DVertexBuffer8** ppVertexBuffer) {
IDirect3DVertexBuffer8Impl *object;
ICOM_THIS(IDirect3DDevice8Impl,iface);
@ -2185,7 +2188,7 @@ HRESULT WINAPI IDirect3DDevice8Impl_ApplyStateBlock(LPDIRECT3DDEVICE8 iface, D
if (pSB->blockType == D3DSBT_RECORDED || pSB->blockType == D3DSBT_ALL || pSB->blockType == D3DSBT_PIXELSTATE) {
if (pSB->Set.pixelShader && pSB->Changed.pixelShader)
IDirect3DDevice8Impl_SetVertexShader(iface, pSB->PixelShader);
IDirect3DDevice8Impl_SetPixelShader(iface, pSB->PixelShader);
/* TODO: Pixel Shader Constants */
}
@ -2336,28 +2339,28 @@ HRESULT WINAPI IDirect3DDevice8Impl_CaptureStateBlock(LPDIRECT3DDEVICE8 iface,
if (updateBlock->Set.pixelShader && updateBlock->PixelShader != This->StateBlock.PixelShader) {
TRACE("Updating pixel shader to %ld\n", This->StateBlock.PixelShader);
updateBlock->lights[i] = This->StateBlock.lights[i];
IDirect3DDevice8Impl_SetVertexShader(iface, updateBlock->PixelShader);
IDirect3DDevice8Impl_SetVertexShader(iface, updateBlock->PixelShader);
}
/* TODO: Pixel Shader Constants */
/* Others + Render & Texture */
for (i=0; i<HIGHEST_TRANSFORMSTATE; i++) {
if (updateBlock->Set.transform[i] && memcmp(&This->StateBlock.transforms[i],
&updateBlock->transforms[i],
sizeof(D3DMATRIX)) != 0) {
TRACE("Updating transform %d\n", i);
memcpy(&updateBlock->transforms[i], &This->StateBlock.transforms[i], sizeof(D3DMATRIX));
}
}
for (i=0; i<HIGHEST_TRANSFORMSTATE; i++) {
if (updateBlock->Set.transform[i] && memcmp(&This->StateBlock.transforms[i],
&updateBlock->transforms[i],
sizeof(D3DMATRIX)) != 0) {
TRACE("Updating transform %d\n", i);
memcpy(&updateBlock->transforms[i], &This->StateBlock.transforms[i], sizeof(D3DMATRIX));
}
}
if (updateBlock->Set.Indices && ((updateBlock->pIndexData != This->StateBlock.pIndexData)
|| (updateBlock->baseVertexIndex != This->StateBlock.baseVertexIndex))) {
TRACE("Updating pindexData to %p, baseVertexIndex to %d\n",
This->StateBlock.pIndexData, This->StateBlock.baseVertexIndex);
updateBlock->pIndexData = This->StateBlock.pIndexData;
updateBlock->baseVertexIndex = This->StateBlock.baseVertexIndex;
}
if (updateBlock->Set.Indices && ((updateBlock->pIndexData != This->StateBlock.pIndexData)
|| (updateBlock->baseVertexIndex != This->StateBlock.baseVertexIndex))) {
TRACE("Updating pindexData to %p, baseVertexIndex to %d\n",
This->StateBlock.pIndexData, This->StateBlock.baseVertexIndex);
updateBlock->pIndexData = This->StateBlock.pIndexData;
updateBlock->baseVertexIndex = This->StateBlock.baseVertexIndex;
}
if (updateBlock->Set.material && memcmp(&This->StateBlock.material,
&updateBlock->material,
@ -2431,12 +2434,12 @@ HRESULT WINAPI IDirect3DDevice8Impl_CaptureStateBlock(LPDIRECT3DDEVICE8 iface,
}
HRESULT WINAPI IDirect3DDevice8Impl_DeleteStateBlock(LPDIRECT3DDEVICE8 iface, DWORD Token) {
ICOM_THIS(IDirect3DDevice8Impl,iface);
TRACE("(%p) : freeing token %lx\n", This, Token);
TRACE("(%p) : freeing StateBlock %lx\n", This, Token);
HeapFree(GetProcessHeap(), 0, (void *)Token);
return D3D_OK;
}
HRESULT WINAPI IDirect3DDevice8Impl_CreateStateBlock(LPDIRECT3DDEVICE8 iface, D3DSTATEBLOCKTYPE Type,DWORD* pToken) {
HRESULT WINAPI IDirect3DDevice8Impl_CreateStateBlock(LPDIRECT3DDEVICE8 iface, D3DSTATEBLOCKTYPE Type, DWORD* pToken) {
void *memory;
STATEBLOCK *s;
int i,j;
@ -2446,7 +2449,12 @@ HRESULT WINAPI IDirect3DDevice8Impl_CreateStateBlock(LPDIRECT3DDEVICE8 iface,
/* Allocate Storage */
memory = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(STATEBLOCK));
if (memory) memcpy(memory, &This->StateBlock, sizeof(STATEBLOCK));
if (memory) {
memcpy(memory, &This->StateBlock, sizeof(STATEBLOCK));
} else {
*pToken = 0xFFFFFFFF;
return E_OUTOFMEMORY;
}
*pToken = (DWORD) memory;
s = memory;
s->blockType = Type;
@ -3069,9 +3077,42 @@ HRESULT WINAPI IDirect3DDevice8Impl_ProcessVertices(LPDIRECT3DDEVICE8 iface, U
ICOM_THIS(IDirect3DDevice8Impl,iface);
FIXME("(%p) : stub\n", This); return D3D_OK;
}
HRESULT WINAPI IDirect3DDevice8Impl_CreateVertexShader(LPDIRECT3DDEVICE8 iface, CONST DWORD* pDeclaration,CONST DWORD* pFunction,DWORD* pHandle,DWORD Usage) {
HRESULT WINAPI IDirect3DDevice8Impl_CreateVertexShader(LPDIRECT3DDEVICE8 iface, CONST DWORD* pDeclaration, CONST DWORD* pFunction, DWORD* pHandle, DWORD Usage) {
ICOM_THIS(IDirect3DDevice8Impl,iface);
FIXME("(%p) : stub\n", This); return D3D_OK;
VERTEXSHADER8* object;
UINT i;
FIXME("(%p) : VertexShader not fully supported yet\n", This);
if (NULL == pDeclaration || NULL == pHandle) { /* pFunction can be NULL see MSDN */
return D3DERR_INVALIDCALL;
}
for (i = 1; NULL != VertexShaders[i] && i < sizeof(VertexShaders) / sizeof(VERTEXSHADER8*); ++i) ;
if (i >= sizeof(VertexShaders) / sizeof(VERTEXSHADER8*)) {
return D3DERR_OUTOFVIDEOMEMORY;
}
object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(VERTEXSHADER8));
if (NULL == object) {
return D3DERR_OUTOFVIDEOMEMORY;
}
object->usage = Usage;
object->data = NULL; /* TODO */
VertexShaders[i] = object;
*pHandle = VS_HIGHESTFIXEDFXF + i;
object->decl = pDeclaration;
for (i = 0; 0xFFFFFFFF != pDeclaration[i]; ++i) ;
object->declLength = i + 1;
object->function = pFunction;
if (NULL != pFunction) {
for (i = 0; 0xFFFFFFFF != pFunction[i]; ++i) ;
object->functionLength = i + 1;
} else {
object->functionLength = 1; /* no Function defined use fixed function vertex processing */
}
return D3D_OK;
}
HRESULT WINAPI IDirect3DDevice8Impl_SetVertexShader(LPDIRECT3DDEVICE8 iface, DWORD Handle) {
ICOM_THIS(IDirect3DDevice8Impl,iface);
@ -3096,30 +3137,108 @@ HRESULT WINAPI IDirect3DDevice8Impl_SetVertexShader(LPDIRECT3DDEVICE8 iface, D
}
HRESULT WINAPI IDirect3DDevice8Impl_GetVertexShader(LPDIRECT3DDEVICE8 iface, DWORD* pHandle) {
ICOM_THIS(IDirect3DDevice8Impl,iface);
TRACE("(%p) = %ld\n", This, This->StateBlock.VertexShader);
TRACE("(%p) : GetVertexShader returning %ld\n", This, This->StateBlock.VertexShader);
*pHandle = This->StateBlock.VertexShader;
return D3D_OK;
}
HRESULT WINAPI IDirect3DDevice8Impl_DeleteVertexShader(LPDIRECT3DDEVICE8 iface, DWORD Handle) {
ICOM_THIS(IDirect3DDevice8Impl,iface);
FIXME("(%p) : stub\n", This); return D3D_OK;
VERTEXSHADER8* object;
if (Handle <= VS_HIGHESTFIXEDFXF) { /* only delete user defined shaders */
return D3DERR_INVALIDCALL;
}
object = VertexShaders[Handle - VS_HIGHESTFIXEDFXF];
TRACE("(%p) : freing VertexShader %p\n", This, object);
/* TODO: check validity of object */
HeapFree(GetProcessHeap(), 0, (void *)object);
VertexShaders[Handle - VS_HIGHESTFIXEDFXF] = 0;
return D3D_OK;
}
HRESULT WINAPI IDirect3DDevice8Impl_SetVertexShaderConstant(LPDIRECT3DDEVICE8 iface, DWORD Register,CONST void* pConstantData,DWORD ConstantCount) {
ICOM_THIS(IDirect3DDevice8Impl,iface);
FIXME("(%p) : stub\n", This); return D3D_OK;
#define VERTEX_SHADER(Handle) ((Handle <= VS_HIGHESTFIXEDFXF) ? ((Handle >= sizeof(VertexShaders) / sizeof(VERTEXSHADER8*)) ? NULL : VertexShaders[Handle]) : VertexShaders[Handle - VS_HIGHESTFIXEDFXF])
HRESULT WINAPI IDirect3DDevice8Impl_SetVertexShaderConstant(LPDIRECT3DDEVICE8 iface, DWORD Register, CONST void* pConstantData, DWORD ConstantCount) {
ICOM_THIS(IDirect3DDevice8Impl,iface);
VERTEXSHADER8* object;
DWORD Handle = This->UpdateStateBlock->VertexShader;
FIXME("(%p) : VertexShader_SetConstant not fully supported yet\n", This);
if (Register + ConstantCount > VSHADER_MAX_CONSTANTS) {
return D3DERR_INVALIDCALL;
}
object = VERTEX_SHADER(Handle);
if (NULL == object || NULL == pConstantData) {
return D3DERR_INVALIDCALL;
}
memcpy(object->data->constants + Register, pConstantData, ConstantCount * sizeof(SHADER8Vector));
return D3D_OK;
}
HRESULT WINAPI IDirect3DDevice8Impl_GetVertexShaderConstant(LPDIRECT3DDEVICE8 iface, DWORD Register,void* pConstantData,DWORD ConstantCount) {
ICOM_THIS(IDirect3DDevice8Impl,iface);
FIXME("(%p) : stub\n", This); return D3D_OK;
HRESULT WINAPI IDirect3DDevice8Impl_GetVertexShaderConstant(LPDIRECT3DDEVICE8 iface, DWORD Register, void* pConstantData, DWORD ConstantCount) {
ICOM_THIS(IDirect3DDevice8Impl,iface);
VERTEXSHADER8* object;
DWORD Handle = This->UpdateStateBlock->VertexShader;
FIXME("(%p) : VertexShader_GetConstant not fully supported yet\n", This);
if (Register + ConstantCount > VSHADER_MAX_CONSTANTS) {
return D3DERR_INVALIDCALL;
}
object = VERTEX_SHADER(Handle);
if (NULL == object || NULL == pConstantData) {
return D3DERR_INVALIDCALL;
}
memcpy(pConstantData, object->data->constants + Register, ConstantCount * sizeof(SHADER8Vector));
return D3D_OK;
}
HRESULT WINAPI IDirect3DDevice8Impl_GetVertexShaderDeclaration(LPDIRECT3DDEVICE8 iface, DWORD Handle,void* pData,DWORD* pSizeOfData) {
HRESULT WINAPI IDirect3DDevice8Impl_GetVertexShaderDeclaration(LPDIRECT3DDEVICE8 iface, DWORD Handle, void* pData, DWORD* pSizeOfData) {
ICOM_THIS(IDirect3DDevice8Impl,iface);
FIXME("(%p) : stub\n", This); return D3D_OK;
VERTEXSHADER8* object;
object = VERTEX_SHADER(Handle);
if (NULL == object) {
return D3DERR_INVALIDCALL;
}
if (NULL == pData) {
*pSizeOfData = object->declLength;
return D3D_OK;
}
if (*pSizeOfData < object->declLength) {
*pSizeOfData = object->declLength;
return D3DERR_MOREDATA;
}
TRACE("(%p) : GetVertexShaderDeclaration copying to %p\n", This, pData);
memcpy(pData, object->decl, object->declLength);
return D3D_OK;
}
HRESULT WINAPI IDirect3DDevice8Impl_GetVertexShaderFunction(LPDIRECT3DDEVICE8 iface, DWORD Handle,void* pData,DWORD* pSizeOfData) {
HRESULT WINAPI IDirect3DDevice8Impl_GetVertexShaderFunction(LPDIRECT3DDEVICE8 iface, DWORD Handle, void* pData, DWORD* pSizeOfData) {
ICOM_THIS(IDirect3DDevice8Impl,iface);
FIXME("(%p) : stub\n", This); return D3D_OK;
VERTEXSHADER8* object;
object = VERTEX_SHADER(Handle);
if (NULL == object) {
return D3DERR_INVALIDCALL;
}
if (NULL == pData) {
*pSizeOfData = object->functionLength;
return D3D_OK;
}
if (*pSizeOfData < object->functionLength) {
*pSizeOfData = object->functionLength;
return D3DERR_MOREDATA;
}
if (NULL == object->function) { /* no function defined */
TRACE("(%p) : GetVertexShaderFunction no User Function defined using NULL to %p\n", This, pData);
((DWORD *) pData) = NULL;
} else {
TRACE("(%p) : GetVertexShaderFunction copying to %p\n", This, pData);
memcpy(pData, object->function, object->functionLength);
}
return D3D_OK;
}
HRESULT WINAPI IDirect3DDevice8Impl_SetIndices(LPDIRECT3DDEVICE8 iface, IDirect3DIndexBuffer8* pIndexData,UINT BaseVertexIndex) {
@ -3156,9 +3275,34 @@ HRESULT WINAPI IDirect3DDevice8Impl_GetIndices(LPDIRECT3DDEVICE8 iface, IDirec
return D3D_OK;
}
HRESULT WINAPI IDirect3DDevice8Impl_CreatePixelShader(LPDIRECT3DDEVICE8 iface, CONST DWORD* pFunction,DWORD* pHandle) {
HRESULT WINAPI IDirect3DDevice8Impl_CreatePixelShader(LPDIRECT3DDEVICE8 iface, CONST DWORD* pFunction, DWORD* pHandle) {
ICOM_THIS(IDirect3DDevice8Impl,iface);
FIXME("(%p) : stub\n", This); return D3D_OK;
PIXELSHADER8* object;
UINT i;
FIXME("(%p) : PixelShader not fully supported yet\n", This);
if (NULL == pFunction || NULL == pHandle) {
return D3DERR_INVALIDCALL;
}
for (i = 1; NULL != PixelShaders[i] && i < sizeof(PixelShaders) / sizeof(PIXELSHADER8*); ++i) ;
if (i >= sizeof(PixelShaders) / sizeof(PIXELSHADER8*)) {
return D3DERR_OUTOFVIDEOMEMORY;
}
object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(PIXELSHADER8));
if (NULL == object) {
return D3DERR_OUTOFVIDEOMEMORY;
}
object->data = NULL; /* TODO */
PixelShaders[i] = object;
*pHandle = VS_HIGHESTFIXEDFXF + i;
object->function = pFunction;
for (i = 0; 0xFFFFFFFF != pFunction[i]; ++i) ;
object->functionLength = i + 1;
return D3D_OK;
}
HRESULT WINAPI IDirect3DDevice8Impl_SetPixelShader(LPDIRECT3DDEVICE8 iface, DWORD Handle) {
ICOM_THIS(IDirect3DDevice8Impl,iface);
@ -3175,35 +3319,65 @@ HRESULT WINAPI IDirect3DDevice8Impl_SetPixelShader(LPDIRECT3DDEVICE8 iface, DW
/* FIXME: Quieten when not being used */
if (Handle != 0) {
FIXME("(%p) : stub %ld\n", This, Handle);
FIXME("(%p) : stub %ld\n", This, Handle);
} else {
TRACE("(%p) : stub %ld\n", This, Handle);
TRACE("(%p) : stub %ld\n", This, Handle);
}
return D3D_OK;
}
HRESULT WINAPI IDirect3DDevice8Impl_GetPixelShader(LPDIRECT3DDEVICE8 iface, DWORD* pHandle) {
ICOM_THIS(IDirect3DDevice8Impl,iface);
TRACE("(%p) : returning %ld\n", This, This->StateBlock.PixelShader);
TRACE("(%p) : GetPixelShader returning %ld\n", This, This->StateBlock.PixelShader);
*pHandle = This->StateBlock.PixelShader;
return D3D_OK;
}
HRESULT WINAPI IDirect3DDevice8Impl_DeletePixelShader(LPDIRECT3DDEVICE8 iface, DWORD Handle) {
ICOM_THIS(IDirect3DDevice8Impl,iface);
FIXME("(%p) : stub\n", This); return D3D_OK;
PIXELSHADER8* object;
if (Handle <= VS_HIGHESTFIXEDFXF) { /* only delete user defined shaders */
return D3DERR_INVALIDCALL;
}
object = PixelShaders[Handle - VS_HIGHESTFIXEDFXF];
TRACE("(%p) : freeing PixelShader %p\n", This, object);
/* TODO: check validity of object before free */
HeapFree(GetProcessHeap(), 0, (void *)object);
PixelShaders[Handle - VS_HIGHESTFIXEDFXF] = 0;
return D3D_OK;
}
HRESULT WINAPI IDirect3DDevice8Impl_SetPixelShaderConstant(LPDIRECT3DDEVICE8 iface, DWORD Register,CONST void* pConstantData,DWORD ConstantCount) {
#define PIXEL_SHADER(Handle) ((Handle <= VS_HIGHESTFIXEDFXF) ? ((Handle >= sizeof(PixelShaders) / sizeof(PIXELSHADER8*)) ? NULL : PixelShaders[Handle]) : PixelShaders[Handle - VS_HIGHESTFIXEDFXF])
HRESULT WINAPI IDirect3DDevice8Impl_SetPixelShaderConstant(LPDIRECT3DDEVICE8 iface, DWORD Register,CONST void* pConstantData, DWORD ConstantCount) {
ICOM_THIS(IDirect3DDevice8Impl,iface);
FIXME("(%p) : stub\n", This); return D3D_OK;
FIXME("(%p) : stub\n", This);
return D3D_OK;
}
HRESULT WINAPI IDirect3DDevice8Impl_GetPixelShaderConstant(LPDIRECT3DDEVICE8 iface, DWORD Register,void* pConstantData,DWORD ConstantCount) {
HRESULT WINAPI IDirect3DDevice8Impl_GetPixelShaderConstant(LPDIRECT3DDEVICE8 iface, DWORD Register,void* pConstantData, DWORD ConstantCount) {
ICOM_THIS(IDirect3DDevice8Impl,iface);
FIXME("(%p) : stub\n", This); return D3D_OK;
FIXME("(%p) : stub\n", This);
return D3D_OK;
}
HRESULT WINAPI IDirect3DDevice8Impl_GetPixelShaderFunction(LPDIRECT3DDEVICE8 iface, DWORD Handle,void* pData,DWORD* pSizeOfData) {
HRESULT WINAPI IDirect3DDevice8Impl_GetPixelShaderFunction(LPDIRECT3DDEVICE8 iface, DWORD Handle, void* pData, DWORD* pSizeOfData) {
ICOM_THIS(IDirect3DDevice8Impl,iface);
FIXME("(%p) : stub\n", This); return D3D_OK;
PIXELSHADER8* object;
object = PIXEL_SHADER(Handle);
if (NULL == object) {
return D3DERR_INVALIDCALL;
}
if (NULL == pData) {
*pSizeOfData = object->functionLength;
return D3D_OK;
}
if (*pSizeOfData < object->functionLength) {
*pSizeOfData = object->functionLength;
return D3DERR_MOREDATA;
}
TRACE("(%p) : GetPixelShaderFunction copying to %p\n", This, pData);
memcpy(pData, object->function, object->functionLength);
return D3D_OK;
}
HRESULT WINAPI IDirect3DDevice8Impl_DrawRectPatch(LPDIRECT3DDEVICE8 iface, UINT Handle,CONST float* pNumSegs,CONST D3DRECTPATCH_INFO* pRectPatchInfo) {
ICOM_THIS(IDirect3DDevice8Impl,iface);

View File

@ -63,7 +63,7 @@ HRESULT WINAPI IDirect3D8Impl_QueryInterface(LPDIRECT3D8 iface,REFIID riid,LPVOI
ICOM_THIS(IDirect3D8Impl,iface);
if (IsEqualGUID(riid, &IID_IUnknown)
|| IsEqualGUID(riid, &IID_IClassFactory)) {
|| IsEqualGUID(riid, &IID_IDirect3D8)) {
IDirect3D8Impl_AddRef(iface);
*ppobj = This;
return D3D_OK;

View File

@ -34,7 +34,8 @@ HRESULT WINAPI IDirect3DIndexBuffer8Impl_QueryInterface(LPDIRECT3DINDEXBUFFER8 i
ICOM_THIS(IDirect3DIndexBuffer8Impl,iface);
if (IsEqualGUID(riid, &IID_IUnknown)
|| IsEqualGUID(riid, &IID_IClassFactory)) {
|| IsEqualGUID(riid, &IID_IDirect3DResource8)
|| IsEqualGUID(riid, &IID_IDirect3DIndexBuffer8)) {
IDirect3DIndexBuffer8Impl_AddRef(iface);
*ppobj = This;
return D3D_OK;
@ -55,8 +56,8 @@ ULONG WINAPI IDirect3DIndexBuffer8Impl_Release(LPDIRECT3DINDEXBUFFER8 iface) {
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
if (ref == 0) {
HeapFree(GetProcessHeap(), 0, This);
HeapFree(GetProcessHeap(), 0, This->allocatedMemory);
HeapFree(GetProcessHeap(), 0, This);
}
return ref;
}
@ -106,7 +107,7 @@ HRESULT WINAPI IDirect3DIndexBuffer8Impl_Lock(LPDIRECT3DINDEXBUFFER8 ifa
} else {
FIXME("(%p) : stub, offset %d, size %d, Flags=%lx\n", This, OffsetToLock, SizeToLock, Flags);
}
*ppbData = This->allocatedMemory;
*ppbData = This->allocatedMemory + OffsetToLock;
return D3D_OK;
}

337
dlls/d3d8/shader.c 100644
View File

@ -0,0 +1,337 @@
/*
* shaders implementation
*
* Copyright 2002 Raphael Junqueira
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "windef.h"
#include "winbase.h"
#include "winuser.h"
#include "wingdi.h"
#include "wine/debug.h"
#include <math.h>
#include "d3d8_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(d3d);
typedef void (*shader_fct0_t)(void);
typedef void (*shader_fct1_t)(SHADER8Vector*);
typedef void (*shader_fct2_t)(SHADER8Vector*,SHADER8Vector*);
typedef void (*shader_fct3_t)(SHADER8Vector*,SHADER8Vector*,SHADER8Vector*);
typedef void (*shader_fct4_t)(SHADER8Vector*,SHADER8Vector*,SHADER8Vector*,SHADER8Vector*);
/*
typedef union shader_fct {
shader_fct0_t fct0;
shader_fct1_t fct1;
shader_fct2_t fct2;
shader_fct3_t fct3;
shader_fct4_t fct4;
} shader_fct;
*/
typedef void (*shader_fct)();
typedef struct shader_opcode {
CONST BYTE opcode;
const char* name;
CONST UINT num_params;
shader_fct soft_fct;
/*
union {
shader_fct0_t fct0;
shader_fct1_t fct1;
shader_fct2_t fct2;
shader_fct3_t fct3;
shader_fct4_t fct4;
} shader_fct;
*/
} shader_opcode;
typedef struct vshader_input_data {
/*SHADER8Vector V[16];//0-15 */
SHADER8Vector V0;
SHADER8Vector V1;
SHADER8Vector V2;
SHADER8Vector V3;
SHADER8Vector V4;
SHADER8Vector V5;
SHADER8Vector V6;
SHADER8Vector V7;
SHADER8Vector V8;
SHADER8Vector V9;
SHADER8Vector V10;
SHADER8Vector V11;
SHADER8Vector V12;
SHADER8Vector V13;
SHADER8Vector V14;
SHADER8Vector V15;
} vshader_input_data;
typedef struct vshader_output_data {
SHADER8Vector oPos;
/*SHADER8Vector oD[2];//0-1 */
SHADER8Vector oD0;
SHADER8Vector oD1;
/*SHADER8Vector oT[4];//0-3 */
SHADER8Vector oT0;
SHADER8Vector oT1;
SHADER8Vector oT2;
SHADER8Vector oT3;
SHADER8Scalar oFog;
SHADER8Scalar oPts;
} vshader_output_data;
/*********************
* vshader software VM
*/
void vshader_add(SHADER8Vector* d, SHADER8Vector* s0, SHADER8Vector* s1) {
d->x = s0->x + s1->x;
d->y = s0->y + s1->y;
d->z = s0->z + s1->z;
d->w = s0->w + s1->w;
}
void vshader_dp3(SHADER8Vector* d, SHADER8Vector* s0, SHADER8Vector* s1) {
d->x = d->y = d->z = d->w = s0->x * s1->x + s0->y * s1->y + s0->z * s1->z;
}
void vshader_dp4(SHADER8Vector* d, SHADER8Vector* s0, SHADER8Vector* s1) {
d->x = d->y = d->z = d->w = s0->x * s1->x + s0->y * s1->y + s0->z * s1->z + s0->w * s1->w;
}
void vshader_dst(SHADER8Vector* d, SHADER8Vector* s0, SHADER8Vector* s1) {
d->x = 1;
d->y = s0->y * s1->y;
d->z = s0->z;
d->w = s1->w;
}
void vshader_expp(SHADER8Vector* d, SHADER8Vector* s0) {
float tmp_f = floorf(s0->w);
d->x = pow(2, tmp_f);
d->y = s0->w - tmp_f;
d->z = pow(2, s0->w);
d->w = 1;
}
void vshader_lit(SHADER8Vector* d, SHADER8Vector* s0) {
d->x = 1;
d->y = (0 < s0->x) ? s0->x : 0;
d->z = (0 < s0->x && 0 < s0->y) ? pow(s0->y, s0->w) : 0;
d->w = 1;
}
void vshader_logp(SHADER8Vector* d, SHADER8Vector* s0) {
d->x = d->y = d->z = d->w = (0 != s0->w) ? log(fabsf(s0->w))/log(2) : HUGE;
}
void vshader_mad(SHADER8Vector* d, SHADER8Vector* s0, SHADER8Vector* s1, SHADER8Vector* s2) {
d->x = s0->x * s1->x + s2->x;
d->y = s0->y * s1->y + s2->y;
d->z = s0->z * s1->z + s2->z;
d->w = s0->w * s1->w + s2->w;
}
void vshader_max(SHADER8Vector* d, SHADER8Vector* s0, SHADER8Vector* s1) {
d->x = (s0->x >= s1->x) ? s0->x : s1->x;
d->y = (s0->y >= s1->y) ? s0->y : s1->y;
d->z = (s0->z >= s1->z) ? s0->z : s1->z;
d->w = (s0->w >= s1->w) ? s0->w : s1->w;
}
void vshader_min(SHADER8Vector* d, SHADER8Vector* s0, SHADER8Vector* s1) {
d->x = (s0->x < s1->x) ? s0->x : s1->x;
d->y = (s0->y < s1->y) ? s0->y : s1->y;
d->z = (s0->z < s1->z) ? s0->z : s1->z;
d->w = (s0->w < s1->w) ? s0->w : s1->w;
}
void vshader_mov(SHADER8Vector* d, SHADER8Vector* s0) {
d->x = s0->x;
d->y = s0->y;
d->z = s0->z;
d->w = s0->w;
}
void vshader_mul(SHADER8Vector* d, SHADER8Vector* s0, SHADER8Vector* s1) {
d->x = s0->x * s1->x;
d->y = s0->y * s1->y;
d->z = s0->z * s1->z;
d->w = s0->w * s1->w;
}
void vshader_nop(void) {
/* NOPPPP ahhh too easy ;) */
}
void vshader_rcp(SHADER8Vector* d, SHADER8Vector* s0) {
d->x = d->y = d->z = d->w = (0 == s0->w) ? HUGE : 1 / s0->w;
}
void vshader_rsq(SHADER8Vector* d, SHADER8Vector* s0) {
d->x = d->y = d->z = d->w = (0 == s0->w) ? HUGE : 1 / sqrt(fabsf(s0->w));
}
void vshader_sge(SHADER8Vector* d, SHADER8Vector* s0, SHADER8Vector* s1) {
d->x = (s0->x >= s1->x) ? 1 : 0;
d->y = (s0->y >= s1->y) ? 1 : 0;
d->z = (s0->z >= s1->z) ? 1 : 0;
d->w = (s0->w >= s1->w) ? 1 : 0;
}
void vshader_slt(SHADER8Vector* d, SHADER8Vector* s0, SHADER8Vector* s1) {
d->x = (s0->x < s1->x) ? 1 : 0;
d->y = (s0->y < s1->y) ? 1 : 0;
d->z = (s0->z < s1->z) ? 1 : 0;
d->w = (s0->w < s1->w) ? 1 : 0;
}
void vshader_sub(SHADER8Vector* d, SHADER8Vector* s0, SHADER8Vector* s1) {
d->x = s0->x - s1->x;
d->y = s0->y - s1->y;
d->z = s0->z - s1->z;
d->w = s0->w - s1->w;
}
/**
* log, exp, frc, m*x* seems to be macros ins ... to see
*
* @TODO: find this fucking really opcodes values
*/
static CONST shader_opcode vshader_ins [] =
{
{0, "mov", 2, vshader_mov},
{0, "max", 3, vshader_max},
{0, "min", 3, vshader_min},
{0, "sge", 3, vshader_sge},
{0, "slt", 3, vshader_slt},
{0, "add", 3, vshader_add},
{0, "sub", 3, vshader_sub},
{0, "mul", 3, vshader_mul},
{0, "rcp", 2, vshader_rcp},
{0, "mad", 4, vshader_mad},
{0, "dp3", 3, vshader_dp3},
{0, "dp4", 3, vshader_dp4},
{0, "rsq", 2, vshader_rsq},
{0, "dst", 3, vshader_dst},
{0, "lit", 2, vshader_lit},
{0, "expp", 2, vshader_expp},
{0, "logp", 2, vshader_logp},
{0, "nop", 0, vshader_nop},
{0, NULL, 0, NULL}
};
shader_opcode* vshader_get_opcode(const DWORD code) {
return NULL;
}
/**
* Function parser ...
*/
BOOL vshader_parse_function(const DWORD* function) {
return TRUE;
}
BOOL vshader_hardware_execute_function(VERTEXSHADER8* vshader,
const vshader_input_data* input,
vshader_output_data* output) {
/**
* TODO: use the GL_NV_vertex_program
* and specifics vendors variants for it
*/
return TRUE;
}
BOOL vshader_software_execute_function(VERTEXSHADER8* vshader,
const vshader_input_data* input,
vshader_output_data* output) {
/** Vertex Shader Temporary Registers */
/*SHADER8Vector R[12];*/
/*SHADER8Scalar A0;*/
/** temporary Vector for modifier management */
/*SHADER8Vector d;*/
/** parser datas */
const DWORD* pToken = vshader->function;
shader_opcode* curOpcode = NULL;
/* the first dword is the version tag */
/* TODO: parse it */
++pToken;
while (0xFFFFFFFF != *pToken) {
curOpcode = vshader_get_opcode(*pToken);
++pToken;
if (NULL == curOpcode) {
/* unkown current opcode ... */
return FALSE;
}
if (curOpcode->num_params > 0) {
/* TODO */
}
}
return TRUE;
}
/**
* Declaration Parser First draft ...
*/
#if 0
static CONST char* vshader_decl [] =
{
"D3DVSDT_D3DCOLOR",
"D3DVSDT_FLOAT1",
"D3DVSDT_FLOAT2",
"D3DVSDT_FLOAT3",
"D3DVSDT_FLOAT4",
"D3DVSDT_UBYTE4",
NULL
};
#endif
/** Vertex Shader Declaration parser tokens */
enum D3DVSD_TOKENS {
D3DVSD_STREAM,
D3DVSD_END
};
BOOL vshader_parse_declaration(VERTEXSHADER8* vshader) {
/** parser data */
const DWORD* pToken = vshader->decl;
++pToken;
while (0xFFFFFFFF != *pToken) {
/** TODO */
++pToken;
}
return TRUE;
}
HRESULT WINAPI ValidatePixelShader(void) {
FIXME("(void): stub\n");
return 0;
}
HRESULT WINAPI ValidateVertexShader(void) {
FIXME("(void): stub\n");
return 0;
}

View File

@ -34,7 +34,7 @@ HRESULT WINAPI IDirect3DSurface8Impl_QueryInterface(LPDIRECT3DSURFACE8 iface,REF
ICOM_THIS(IDirect3DSurface8Impl,iface);
if (IsEqualGUID(riid, &IID_IUnknown)
|| IsEqualGUID(riid, &IID_IClassFactory)) {
|| IsEqualGUID(riid, &IID_IDirect3DSurface8)) {
IDirect3DSurface8Impl_AddRef(iface);
*ppobj = This;
return D3D_OK;

View File

@ -34,7 +34,7 @@ HRESULT WINAPI IDirect3DSwapChain8Impl_QueryInterface(LPDIRECT3DSWAPCHAIN8 iface
ICOM_THIS(IDirect3DSwapChain8Impl,iface);
if (IsEqualGUID(riid, &IID_IUnknown)
|| IsEqualGUID(riid, &IID_IClassFactory)) {
|| IsEqualGUID(riid, &IID_IDirect3DSwapChain8)) {
IDirect3DSwapChain8Impl_AddRef(iface);
*ppobj = This;
return D3D_OK;

View File

@ -34,7 +34,9 @@ HRESULT WINAPI IDirect3DTexture8Impl_QueryInterface(LPDIRECT3DTEXTURE8 iface,REF
ICOM_THIS(IDirect3DTexture8Impl,iface);
TRACE("(%p) : QueryInterface\n", This);
if (IsEqualGUID(riid, &IID_IUnknown)
|| IsEqualGUID(riid, &IID_IClassFactory)) {
|| IsEqualGUID(riid, &IID_IDirect3DResource8)
|| IsEqualGUID(riid, &IID_IDirect3DBaseTexture8)
|| IsEqualGUID(riid, &IID_IDirect3DTexture8)) {
IDirect3DTexture8Impl_AddRef(iface);
*ppobj = This;
return D3D_OK;

View File

@ -29,12 +29,13 @@
WINE_DEFAULT_DEBUG_CHANNEL(d3d);
/* IDirect3DResource IUnknown parts follow: */
HRESULT WINAPI IDirect3DVertexBuffer8Impl_QueryInterface(LPDIRECT3DVERTEXBUFFER8 iface,REFIID riid,LPVOID *ppobj)
HRESULT WINAPI IDirect3DVertexBuffer8Impl_QueryInterface(LPDIRECT3DVERTEXBUFFER8 iface, REFIID riid, LPVOID *ppobj)
{
ICOM_THIS(IDirect3DVertexBuffer8Impl,iface);
if (IsEqualGUID(riid, &IID_IUnknown)
|| IsEqualGUID(riid, &IID_IClassFactory)) {
|| IsEqualGUID(riid, &IID_IDirect3DResource8)
|| IsEqualGUID(riid, &IID_IDirect3DVertexBuffer8)) {
IDirect3DVertexBuffer8Impl_AddRef(iface);
*ppobj = This;
return D3D_OK;
@ -55,7 +56,7 @@ ULONG WINAPI IDirect3DVertexBuffer8Impl_Release(LPDIRECT3DVERTEXBUFFER8 iface) {
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
if (ref == 0) {
HeapFree(GetProcessHeap(), 0, This->allocatedMemory);
if (NULL != This->allocatedMemory) HeapFree(GetProcessHeap(), 0, This->allocatedMemory);
HeapFree(GetProcessHeap(), 0, This);
}
return ref;
@ -101,9 +102,9 @@ D3DRESOURCETYPE WINAPI IDirect3DVertexBuffer8Impl_GetType(LPDIRECT3DVERTEXBUFFER
/* IDirect3DVertexBuffer8 */
HRESULT WINAPI IDirect3DVertexBuffer8Impl_Lock(LPDIRECT3DVERTEXBUFFER8 iface, UINT OffsetToLock, UINT SizeToLock, BYTE** ppbData, DWORD Flags) {
ICOM_THIS(IDirect3DVertexBuffer8Impl,iface);
if (OffsetToLock) FIXME("(%p) : with non-zero offset!!\n", This);
TRACE("(%p) : returning memory of %p\n", This, This->allocatedMemory);
*ppbData = This->allocatedMemory;
TRACE("(%p) : returning memory of %p (base:%p,offset:%u)\n", This, This->allocatedMemory + OffsetToLock, This->allocatedMemory, OffsetToLock);
/* TODO: check Flags compatibility with This->currentDesc.Usage (see MSDN) */
*ppbData = This->allocatedMemory + OffsetToLock;
return D3D_OK;
}
HRESULT WINAPI IDirect3DVertexBuffer8Impl_Unlock(LPDIRECT3DVERTEXBUFFER8 iface) {

View File

@ -34,7 +34,7 @@ HRESULT WINAPI IDirect3DVolume8Impl_QueryInterface(LPDIRECT3DVOLUME8 iface,REFII
ICOM_THIS(IDirect3DVolume8Impl,iface);
if (IsEqualGUID(riid, &IID_IUnknown)
|| IsEqualGUID(riid, &IID_IClassFactory)) {
|| IsEqualGUID(riid, &IID_IDirect3DVolume8)) {
IDirect3DVolume8Impl_AddRef(iface);
*ppobj = This;
return D3D_OK;

View File

@ -0,0 +1,4 @@
Makefile
d3dx8.dll.dbg.c
d3dx8.spec.c
d3dx8.spec.def

View File

@ -0,0 +1,19 @@
TOPSRCDIR = @top_srcdir@
TOPOBJDIR = ../..
SRCDIR = @srcdir@
VPATH = @srcdir@
MODULE = d3dx8.dll
IMPORTS = d3d8 user32 gdi32 kernel32
EXTRAINCL = @X_CFLAGS@
EXTRALIBS = $(LIBUUID) @X_LIBS@ @X_PRE_LIBS@ @XLIB@ @X_EXTRA_LIBS@ @OPENGL_LIBS@
LDDLLFLAGS = @LDDLLFLAGS@
SYMBOLFILE = $(MODULE).tmp.o
C_SRCS = \
d3dx8_main.c \
d3dxbuffer.c
@MAKE_DLL_RULES@
### Dependencies:

View File

@ -0,0 +1,6 @@
@ stdcall D3DXCreateBuffer(long ptr) D3DXCreateBuffer
@ stdcall D3DXCreateFont(ptr ptr ptr) D3DXCreateFont
@ stdcall D3DXGetFVFVertexSize(long) D3DXGetFVFVertexSize
@ stdcall D3DXAssembleShader(ptr long long ptr ptr ptr) D3DXAssembleShader
@ stdcall D3DXAssembleShaderFromFileA(ptr long ptr ptr ptr) D3DXAssembleShaderFromFileA
@ stdcall D3DXAssembleShaderFromFileW(ptr long ptr ptr ptr) D3DXAssembleShaderFromFileW

View File

@ -0,0 +1,90 @@
/*
* Direct3D X 8 main file
*
* Copyright (C) 2002 Raphael Junqueira
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#include "config.h"
#include "wine/port.h"
#include "windef.h"
#include "winbase.h"
#include "wingdi.h"
#include "winuser.h"
#include "wine/debug.h"
#include "d3dx8core.h"
#include "d3dx8core_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(d3d);
HRESULT D3DXCreateBuffer(DWORD NumBytes, LPD3DXBUFFER* ppBuffer) {
ID3DXBufferImpl *object;
object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(ID3DXBufferImpl));
if (NULL == object) {
*ppBuffer = (LPD3DXBUFFER)NULL;
return E_OUTOFMEMORY;
}
object->lpVtbl = &D3DXBuffer_Vtbl;
object->ref = 1;
object->bufferSize = NumBytes;
object->buffer = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, NumBytes);
if (NULL == object->buffer) {
HeapFree(GetProcessHeap(), 0, object);
*ppBuffer = (LPD3DXBUFFER)NULL;
return E_OUTOFMEMORY;
}
*ppBuffer = (LPD3DXBUFFER)object;
return D3D_OK;
}
HRESULT D3DXCreateFont(LPDIRECT3DDEVICE8 pDevice, HFONT hFont, LPD3DXFONT* ppFont) {
FIXME("(void): stub\n");
return D3D_OK;
}
UINT D3DXGetFVFVertexSize(DWORD FVF) {
FIXME("(void): stub\n");
return 0;
}
HRESULT D3DXAssembleShader(LPCVOID pSrcData, UINT SrcDataLen, DWORD Flags,
LPD3DXBUFFER* ppConstants,
LPD3DXBUFFER* ppCompiledShader,
LPD3DXBUFFER* ppCompilationErrors) {
FIXME("(void): stub\n");
return D3D_OK;
}
HRESULT D3DXAssembleShaderFromFileA(LPSTR pSrcFile, DWORD Flags,
LPD3DXBUFFER* ppConstants,
LPD3DXBUFFER* ppCompiledShader,
LPD3DXBUFFER* ppCompilationErrors) {
FIXME("(void): stub\n");
return D3D_OK;
}
HRESULT D3DXAssembleShaderFromFileW(LPSTR pSrcFile, DWORD Flags,
LPD3DXBUFFER* ppConstants,
LPD3DXBUFFER* ppCompiledShader,
LPD3DXBUFFER* ppCompilationErrors) {
FIXME("(void): stub\n");
return D3D_OK;
}

View File

@ -0,0 +1,91 @@
/*
* Direct3D X 8 private include file
*
* Copyright 2002 Raphael Junqueira
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef __WINE_D3DX8CORE_PRIVATE_H
#define __WINE_D3DX8CORE_PRIVATE_H
#include "d3dx8core.h"
/* Interfaces */
typedef struct ID3DXBufferImpl ID3DXBufferImpl;
typedef struct ID3DXFontImpl ID3DXFontImpl;
/* ----------- */
/* ID3DXBuffer */
/* ----------- */
/*****************************************************************************
* Predeclare the interface implementation structures
*/
extern ICOM_VTABLE(ID3DXBuffer) D3DXBuffer_Vtbl;
/*****************************************************************************
* ID3DXBufferImpl implementation structure
*/
struct ID3DXBufferImpl
{
/* IUnknown fields */
ICOM_VFIELD(ID3DXBuffer);
DWORD ref;
/* ID3DXBuffer fields */
DWORD *buffer;
DWORD bufferSize;
};
/* IUnknown: */
extern HRESULT WINAPI ID3DXBufferImpl_QueryInterface(LPD3DXBUFFER iface, REFIID refiid, LPVOID *obj);
extern ULONG WINAPI ID3DXBufferImpl_AddRef(LPD3DXBUFFER iface);
extern ULONG WINAPI ID3DXBufferImpl_Release(LPD3DXBUFFER iface);
/* ID3DXBuffer: */
extern LPVOID WINAPI ID3DXBufferImpl_GetBufferPointer(LPD3DXBUFFER iface);
extern DWORD WINAPI ID3DXBufferImpl_GetBufferSize(LPD3DXBUFFER iface);
/* --------- */
/* ID3DXFont */
/* --------- */
/*****************************************************************************
* Predeclare the interface implementation structures
*/
extern ICOM_VTABLE(ID3DXFont) D3DXFont_Vtbl;
/*****************************************************************************
* ID3DXFontImpl implementation structure
*/
struct ID3DXFontImpl
{
/* IUnknown fields */
ICOM_VFIELD(ID3DXFont);
DWORD ref;
/* ID3DXFont fields */
};
/* IUnknown: */
extern HRESULT WINAPI ID3DXFontImpl_QueryInterface(LPD3DXFONT iface, REFIID refiid, LPVOID *obj);
extern ULONG WINAPI ID3DXFontImpl_AddRef(LPD3DXFONT iface);
extern ULONG WINAPI ID3DXFontImpl_Release(LPD3DXFONT iface);
/* ID3DXFont: */
extern INT WINAPI ID3DXFontImpl_DrawTextA(LPCSTR pString, INT Count, LPRECT pRect, DWORD Format, D3DCOLOR Color);
#endif /*__WINE_D3DX8CORE_PRIVATE_H */

View File

@ -0,0 +1,86 @@
/*
* ID3DXBuffer implementation
*
* Copyright 2002 Raphael Junqueira
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "config.h"
#include "wine/port.h"
#include "windef.h"
#include "winbase.h"
#include "winuser.h"
#include "wingdi.h"
#include "wine/debug.h"
#include "d3d8.h"
#include "d3dx8core_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(d3d);
/* ID3DXBuffer IUnknown parts follow: */
HRESULT WINAPI ID3DXBufferImpl_QueryInterface(LPD3DXBUFFER iface, REFIID riid, LPVOID* ppobj) {
ICOM_THIS(ID3DXBufferImpl,iface);
if (IsEqualGUID(riid, &IID_IUnknown)
|| IsEqualGUID(riid, &IID_ID3DXBuffer)) {
ID3DXBufferImpl_AddRef(iface);
*ppobj = This;
return D3D_OK;
}
WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
ULONG WINAPI ID3DXBufferImpl_AddRef(LPD3DXBUFFER iface) {
ICOM_THIS(ID3DXBufferImpl,iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
ULONG WINAPI ID3DXBufferImpl_Release(LPD3DXBUFFER iface) {
ICOM_THIS(ID3DXBufferImpl,iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
if (ref == 0) {
if (NULL != This->buffer) HeapFree(GetProcessHeap(), 0, This->buffer);
HeapFree(GetProcessHeap(), 0, This);
}
return ref;
}
/* ID3DXBuffer Interface follow: */
LPVOID WINAPI ID3DXBufferImpl_GetBufferPointer(LPD3DXBUFFER iface) {
ICOM_THIS(ID3DXBufferImpl,iface);
return This->buffer;
}
DWORD WINAPI ID3DXBufferImpl_GetBufferSize(LPD3DXBUFFER iface) {
ICOM_THIS(ID3DXBufferImpl,iface);
return This->bufferSize;
}
ICOM_VTABLE(ID3DXBuffer) D3DXBuffer_Vtbl =
{
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
ID3DXBufferImpl_QueryInterface,
ID3DXBufferImpl_AddRef,
ID3DXBufferImpl_Release,
ID3DXBufferImpl_GetBufferPointer,
ID3DXBufferImpl_GetBufferSize
};

View File

@ -36,6 +36,7 @@ my %special_dlls =
"glu32" => "GLU32FILES",
"opengl32" => "OPENGLFILES",
"d3d8" => "OPENGLFILES",
"d3dx8" => "OPENGLFILES",
"x11drv" => "XFILES"
);

View File

@ -27,6 +27,7 @@ WINDOWS_INCLUDES = \
d3dhal.h \
d3dtypes.h \
d3dvec.inl \
d3dx8core.h \
dde.h \
ddeml.h \
ddraw.h \

View File

@ -78,25 +78,25 @@ typedef struct IDirect3DVertexBuffer8 IDirect3DVertexBuffer8, *LPDIRECT3DVERTEX
DEFINE_GUID(IID_IDirect3DVolume8, 0XBD7349F5,0X14F1,0X42E4,0X9C,0X79,0X97,0X23,0X80,0XDB,0X40,0XC0);
typedef struct IDirect3DVolume8 IDirect3DVolume8, *LPDIRECT3DVOLUME8, *PDIRECT3DVOLUME8;
DEFINE_GUID(IID_IDIRECT3DSWAPCHAIN8, 0X928C088B,0X76B9,0X4C6B,0XA5,0X36,0XA5,0X90,0X85,0X38,0X76,0XCD);
DEFINE_GUID(IID_IDirect3DSwapChain8, 0X928C088B,0X76B9,0X4C6B,0XA5,0X36,0XA5,0X90,0X85,0X38,0X76,0XCD);
typedef struct IDirect3DSwapChain8 IDirect3DSwapChain8, *LPDIRECT3DSWAPCHAIN8, *PDIRECT3DSWAPCHAIN8;
DEFINE_GUID(IID_IDirect3DSurface8, 0XB96EEBCA,0XB326,0X4EA5,0X88,0X2F,0X2F,0XF5,0XBA,0XE0,0X21,0XDD);
typedef struct IDirect3DSurface8 IDirect3DSurface8, *LPDIRECT3DSURFACE8, *PDIRECT3DSURFACE8;
DEFINE_GUID(IID_IDIRECT3DINDEXBUFFER8, 0X0E689C9A,0X053D,0X44A0,0X9D,0X92,0XDB,0X0E,0X3D,0X75,0X0F,0X86);
DEFINE_GUID(IID_IDirect3DIndexBuffer8, 0X0E689C9A,0X053D,0X44A0,0X9D,0X92,0XDB,0X0E,0X3D,0X75,0X0F,0X86);
typedef struct IDirect3DIndexBuffer8 IDirect3DIndexBuffer8, *LPDIRECT3DINDEXBUFFER8, *PDIRECT3DINDEXBUFFER8;
DEFINE_GUID(IID_IDIRECT3DBASETEXTURE8, 0XB4211CFA,0X51B9,0X4A9F,0XAB,0X78,0XDB,0X99,0XB2,0XBB,0X67,0X8E);
DEFINE_GUID(IID_IDirect3DBaseTexture8, 0XB4211CFA,0X51B9,0X4A9F,0XAB,0X78,0XDB,0X99,0XB2,0XBB,0X67,0X8E);
typedef struct IDirect3DBaseTexture8 IDirect3DBaseTexture8, *LPDIRECT3DBASETEXTURE8, *PDIRECT3DBASETEXTURE8;
DEFINE_GUID(IID_IDIRECT3DTEXTURE8, 0XE4CDD575,0X2866,0X4F01,0XB1,0X2E,0X7E,0XEC,0XE1,0XEC,0X93,0X58);
DEFINE_GUID(IID_IDirect3DTexture8, 0XE4CDD575,0X2866,0X4F01,0XB1,0X2E,0X7E,0XEC,0XE1,0XEC,0X93,0X58);
typedef struct IDirect3DTexture8 IDirect3DTexture8, *LPDIRECT3DTEXTURE8, *PDIRECT3DTEXTURE8;
DEFINE_GUID(IID_IDIRECT3DCUBETEXTURE8, 0X3EE5B968,0X2ACA,0X4C34,0X8B,0XB5,0X7E,0X0C,0X3D,0X19,0XB7,0X50);
DEFINE_GUID(IID_IDirect3DCubeTexture8, 0X3EE5B968,0X2ACA,0X4C34,0X8B,0XB5,0X7E,0X0C,0X3D,0X19,0XB7,0X50);
typedef struct IDirect3DCubeTexture8 IDirect3DCubeTexture8, *LPDIRECT3DCUBETEXTURE8, *PDIRECT3DCUBETEXTURE8;
DEFINE_GUID(IID_IDIRECT3DVOLUMETEXTURE8,0X4B8AAAFA,0X140F,0X42BA,0X91,0X31,0X59,0X7E,0XAF,0XAA,0X2E,0XAD);
DEFINE_GUID(IID_IDirect3DVolumeTexture8,0X4B8AAAFA,0X140F,0X42BA,0X91,0X31,0X59,0X7E,0XAF,0XAA,0X2E,0XAD);
typedef struct IDirect3DVolumeTexture8 IDirect3DVolumeTexture8, *LPDIRECT3DVOLUMETEXTURE8, *PDIRECT3DVOLUMETEXTURE8;
/*****************************************************************************
@ -353,77 +353,6 @@ ICOM_DEFINE(IDirect3DDevice8,IUnknown)
#define IDirect3DDevice8_DrawTriPatch(p,a,b,c) ICOM_CALL3(DrawTriPatch,p,a,b,c)
#define IDirect3DDevice8_DeletePatch(p,a) ICOM_CALL1(DeletePatch,p,a)
/*****************************************************************************
* IDirect3DResource8 interface
*/
#define ICOM_INTERFACE IDirect3DResource8
#define IDirect3DResource8_METHODS \
/*** IDirect3DResource8 methods ***/ \
ICOM_METHOD1(HRESULT, GetDevice, IDirect3DDevice8**, ppDevice) \
ICOM_METHOD4(HRESULT, SetPrivateData, REFGUID, refguid, CONST void*, pData, DWORD, SizeOfData, DWORD, Flags) \
ICOM_METHOD3(HRESULT, GetPrivateData, REFGUID, refguid, void*, pData, DWORD*, pSizeOfData) \
ICOM_METHOD1(HRESULT, FreePrivateData, REFGUID, refguid) \
ICOM_METHOD1(DWORD, SetPriority, DWORD, PriorityNew) \
ICOM_METHOD (DWORD, GetPriority) \
ICOM_METHOD (void, PreLoad) \
ICOM_METHOD (D3DRESOURCETYPE, GetType)
/*** IDirect3DResource8 methods ***/
#define IDirect3DResource8_IMETHODS \
IUnknown_IMETHODS \
IDirect3DResource8_METHODS
ICOM_DEFINE(IDirect3DResource8,IUnknown)
#undef ICOM_INTERFACE
/*** IUnknown methods ***/
#define IDirect3DResource8_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
#define IDirect3DResource8_AddRef(p) ICOM_CALL (AddRef,p)
#define IDirect3DResource8_Release(p) ICOM_CALL (Release,p)
/*** IDirect3DResource8 methods ***/
#define IDirect3DResource8_GetDevice(p,a) ICOM_CALL1(GetDevice,p,a)
#define IDirect3DResource8_SetPrivateData(p,a,b,c,d) ICOM_CALL4(SetPrivateData,p,a,b,c,d)
#define IDirect3DResource8_GetPrivateData(p,a,b,c) ICOM_CALL3(GetPrivateData,p,a,b,c)
#define IDirect3DResource8_FreePrivateData(p,a) ICOM_CALL1(FreePrivateData,p,a)
#define IDirect3DResource8_SetPriority(p,a) ICOM_CALL1(SetPriority,p,a)
#define IDirect3DResource8_GetPriority(p) ICOM_CALL (GetPriority,p)
#define IDirect3DResource8_PreLoad(p) ICOM_CALL (PreLoad,p)
#define IDirect3DResource8_GetType(p) ICOM_CALL (GetType,p)
/*****************************************************************************
* IDirect3DVertexBuffer8 interface
*/
#define ICOM_INTERFACE IDirect3DVertexBuffer8
#define IDirect3DVertexBuffer8_METHODS \
/*** IDirect3DVertexBuffer8 methods ***/ \
ICOM_METHOD4(HRESULT,Lock, UINT, OffsetToLock, UINT, SizeToLock, BYTE**, ppbData, DWORD, Flags) \
ICOM_METHOD (HRESULT,Unlock) \
ICOM_METHOD1(HRESULT,GetDesc, D3DVERTEXBUFFER_DESC *, pDesc)
/*** IDirect3DVertexBuffer8 methods ***/
#define IDirect3DVertexBuffer8_IMETHODS \
IUnknown_IMETHODS \
IDirect3DResource8_METHODS \
IDirect3DVertexBuffer8_METHODS
ICOM_DEFINE(IDirect3DVertexBuffer8,IDirect3DResource8)
#undef ICOM_INTERFACE
/*** IUnknown methods ***/
#define IDirect3DVertexBuffer8_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
#define IDirect3DVertexBuffer8_AddRef(p) ICOM_CALL (AddRef,p)
#define IDirect3DVertexBuffer8_Release(p) ICOM_CALL (Release,p)
/*** IDirect3DVertexBuffer8 methods ***/
#define IDirect3DVertexBuffer8_GetDevice(p,a) ICOM_CALL1(GetDevice,p,a)
#define IDirect3DVertexBuffer8_SetPrivateData(p,a,b,c,d) ICOM_CALL4(SetPrivateData,p,a,b,c,d)
#define IDirect3DVertexBuffer8_GetPrivateData(p,a,b,c) ICOM_CALL3(GetPrivateData,p,a,b,c)
#define IDirect3DVertexBuffer8_FreePrivateData(p,a) ICOM_CALL1(FreePrivateData,p,a)
#define IDirect3DVertexBuffer8_SetPriority(p,a) ICOM_CALL1(SetPriority,p,a)
#define IDirect3DVertexBuffer8_GetPriority(p) ICOM_CALL (GetPriority,p)
#define IDirect3DVertexBuffer8_PreLoad(p) ICOM_CALL (PreLoad,p)
#define IDirect3DVertexBuffer8_GetType(p) ICOM_CALL (GetType,p)
#define IDirect3DVertexBuffer8_Lock(p,a,b,c,d) ICOM_CALL4(Lock,p,a,b,c,d)
#define IDirect3DVertexBuffer8_Unlock(p) ICOM_CALL (Unlock,p)
#define IDirect3DVertexBuffer8_GetDesc(p,a) ICOM_CALL1(GetDesc,p,a)
/*****************************************************************************
* IDirect3DVolume8 interface
*/
@ -520,6 +449,78 @@ ICOM_DEFINE(IDirect3DSurface8,IUnknown)
#define IDirect3DSurface8_LockRect(p,a,b,c) ICOM_CALL3(LockRect,p,a,b,c)
#define IDirect3DSurface8_UnlockRect(p) ICOM_CALL (UnlockRect,p)
/*****************************************************************************
* IDirect3DResource8 interface
*/
#define ICOM_INTERFACE IDirect3DResource8
#define IDirect3DResource8_METHODS \
/*** IDirect3DResource8 methods ***/ \
ICOM_METHOD1(HRESULT, GetDevice, IDirect3DDevice8**, ppDevice) \
ICOM_METHOD4(HRESULT, SetPrivateData, REFGUID, refguid, CONST void*, pData, DWORD, SizeOfData, DWORD, Flags) \
ICOM_METHOD3(HRESULT, GetPrivateData, REFGUID, refguid, void*, pData, DWORD*, pSizeOfData) \
ICOM_METHOD1(HRESULT, FreePrivateData, REFGUID, refguid) \
ICOM_METHOD1(DWORD, SetPriority, DWORD, PriorityNew) \
ICOM_METHOD (DWORD, GetPriority) \
ICOM_METHOD (void, PreLoad) \
ICOM_METHOD (D3DRESOURCETYPE, GetType)
/*** IDirect3DResource8 methods ***/
#define IDirect3DResource8_IMETHODS \
IUnknown_IMETHODS \
IDirect3DResource8_METHODS
ICOM_DEFINE(IDirect3DResource8,IUnknown)
#undef ICOM_INTERFACE
/*** IUnknown methods ***/
#define IDirect3DResource8_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
#define IDirect3DResource8_AddRef(p) ICOM_CALL (AddRef,p)
#define IDirect3DResource8_Release(p) ICOM_CALL (Release,p)
/*** IDirect3DResource8 methods ***/
#define IDirect3DResource8_GetDevice(p,a) ICOM_CALL1(GetDevice,p,a)
#define IDirect3DResource8_SetPrivateData(p,a,b,c,d) ICOM_CALL4(SetPrivateData,p,a,b,c,d)
#define IDirect3DResource8_GetPrivateData(p,a,b,c) ICOM_CALL3(GetPrivateData,p,a,b,c)
#define IDirect3DResource8_FreePrivateData(p,a) ICOM_CALL1(FreePrivateData,p,a)
#define IDirect3DResource8_SetPriority(p,a) ICOM_CALL1(SetPriority,p,a)
#define IDirect3DResource8_GetPriority(p) ICOM_CALL (GetPriority,p)
#define IDirect3DResource8_PreLoad(p) ICOM_CALL (PreLoad,p)
#define IDirect3DResource8_GetType(p) ICOM_CALL (GetType,p)
/*****************************************************************************
* IDirect3DVertexBuffer8 interface
*/
#define ICOM_INTERFACE IDirect3DVertexBuffer8
#define IDirect3DVertexBuffer8_METHODS \
/*** IDirect3DVertexBuffer8 methods ***/ \
ICOM_METHOD4(HRESULT,Lock, UINT, OffsetToLock, UINT, SizeToLock, BYTE**, ppbData, DWORD, Flags) \
ICOM_METHOD (HRESULT,Unlock) \
ICOM_METHOD1(HRESULT,GetDesc, D3DVERTEXBUFFER_DESC *, pDesc)
/*** IDirect3DVertexBuffer8 methods ***/
#define IDirect3DVertexBuffer8_IMETHODS \
IUnknown_IMETHODS \
IDirect3DResource8_METHODS \
IDirect3DVertexBuffer8_METHODS
ICOM_DEFINE(IDirect3DVertexBuffer8,IDirect3DResource8)
#undef ICOM_INTERFACE
/*** IUnknown methods ***/
#define IDirect3DVertexBuffer8_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
#define IDirect3DVertexBuffer8_AddRef(p) ICOM_CALL (AddRef,p)
#define IDirect3DVertexBuffer8_Release(p) ICOM_CALL (Release,p)
/*** IDirect3DVertexBuffer8 methods: IDirect3DResource8 ***/
#define IDirect3DVertexBuffer8_GetDevice(p,a) ICOM_CALL1(GetDevice,p,a)
#define IDirect3DVertexBuffer8_SetPrivateData(p,a,b,c,d) ICOM_CALL4(SetPrivateData,p,a,b,c,d)
#define IDirect3DVertexBuffer8_GetPrivateData(p,a,b,c) ICOM_CALL3(GetPrivateData,p,a,b,c)
#define IDirect3DVertexBuffer8_FreePrivateData(p,a) ICOM_CALL1(FreePrivateData,p,a)
#define IDirect3DVertexBuffer8_SetPriority(p,a) ICOM_CALL1(SetPriority,p,a)
#define IDirect3DVertexBuffer8_GetPriority(p) ICOM_CALL (GetPriority,p)
#define IDirect3DVertexBuffer8_PreLoad(p) ICOM_CALL (PreLoad,p)
#define IDirect3DVertexBuffer8_GetType(p) ICOM_CALL (GetType,p)
/*** IDirect3DVertexBuffer8 methods ***/
#define IDirect3DVertexBuffer8_Lock(p,a,b,c,d) ICOM_CALL4(Lock,p,a,b,c,d)
#define IDirect3DVertexBuffer8_Unlock(p) ICOM_CALL (Unlock,p)
#define IDirect3DVertexBuffer8_GetDesc(p,a) ICOM_CALL1(GetDesc,p,a)
/*****************************************************************************
* IDirect3DIndexBuffer8 interface
*/
@ -542,7 +543,7 @@ ICOM_DEFINE(IDirect3DIndexBuffer8,IDirect3DResource8)
#define IDirect3DIndexBuffer8_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
#define IDirect3DIndexBuffer8_AddRef(p) ICOM_CALL (AddRef,p)
#define IDirect3DIndexBuffer8_Release(p) ICOM_CALL (Release,p)
/*** IDirect3DIndexBuffer8 methods ***/
/*** IDirect3DIndexBuffer8 methods: IDirect3DResource8 ***/
#define IDirect3DIndexBuffer8_GetDevice(p,a) ICOM_CALL1(GetDevice,p,a)
#define IDirect3DIndexBuffer8_SetPrivateData(p,a,b,c,d) ICOM_CALL4(SetPrivateData,p,a,b,c,d)
#define IDirect3DIndexBuffer8_GetPrivateData(p,a,b,c) ICOM_CALL3(GetPrivateData,p,a,b,c)
@ -551,6 +552,7 @@ ICOM_DEFINE(IDirect3DIndexBuffer8,IDirect3DResource8)
#define IDirect3DIndexBuffer8_GetPriority(p) ICOM_CALL (GetPriority,p)
#define IDirect3DIndexBuffer8_PreLoad(p) ICOM_CALL (PreLoad,p)
#define IDirect3DIndexBuffer8_GetType(p) ICOM_CALL (GetType,p)
/*** IDirect3DIndexBuffer8 methods ***/
#define IDirect3DIndexBuffer8_Lock(p,a,b,c,d) ICOM_CALL4(Lock,p,a,b,c,d)
#define IDirect3DIndexBuffer8_Unlock(p) ICOM_CALL (Unlock,p)
#define IDirect3DIndexBuffer8_GetDesc(p,a) ICOM_CALL1(GetDesc,p,a)
@ -577,7 +579,7 @@ ICOM_DEFINE(IDirect3DBaseTexture8,IDirect3DResource8)
#define IDirect3DBaseTexture8_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
#define IDirect3DBaseTexture8_AddRef(p) ICOM_CALL (AddRef,p)
#define IDirect3DBaseTexture8_Release(p) ICOM_CALL (Release,p)
/*** IDirect3DBaseTexture8 methods ***/
/*** IDirect3DBaseTexture8 methods: IDirect3DResource8 ***/
#define IDirect3DBaseTexture8_GetDevice(p,a) ICOM_CALL1(GetDevice,p,a)
#define IDirect3DBaseTexture8_SetPrivateData(p,a,b,c,d) ICOM_CALL4(SetPrivateData,p,a,b,c,d)
#define IDirect3DBaseTexture8_GetPrivateData(p,a,b,c) ICOM_CALL3(GetPrivateData,p,a,b,c)
@ -586,6 +588,7 @@ ICOM_DEFINE(IDirect3DBaseTexture8,IDirect3DResource8)
#define IDirect3DBaseTexture8_GetPriority(p) ICOM_CALL (GetPriority,p)
#define IDirect3DBaseTexture8_PreLoad(p) ICOM_CALL (PreLoad,p)
#define IDirect3DBaseTexture8_GetType(p) ICOM_CALL (GetType,p)
/*** IDirect3DBaseTexture8 methods ***/
#define IDirect3DBaseTexture8_SetLOD(p,a) ICOM_CALL1(SetLOD,p,a)
#define IDirect3DBaseTexture8_GetLOD(p) ICOM_CALL (GetLOD,p)
#define IDirect3DBaseTexture8_GetLevelCount(p) ICOM_CALL (GetLevelCount,p)
@ -615,7 +618,7 @@ ICOM_DEFINE(IDirect3DCubeTexture8,IDirect3DBaseTexture8)
#define IDirect3DCubeTexture8_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
#define IDirect3DCubeTexture8_AddRef(p) ICOM_CALL (AddRef,p)
#define IDirect3DCubeTexture8_Release(p) ICOM_CALL (Release,p)
/*** IDirect3DCubeTexture8 methods: Resource8 ***/
/*** IDirect3DCubeTexture8 methods: IDirect3DResource8 ***/
#define IDirect3DCubeTexture8_GetDevice(p,a) ICOM_CALL1(GetDevice,p,a)
#define IDirect3DCubeTexture8_SetPrivateData(p,a,b,c,d) ICOM_CALL4(SetPrivateData,p,a,b,c,d)
#define IDirect3DCubeTexture8_GetPrivateData(p,a,b,c) ICOM_CALL3(GetPrivateData,p,a,b,c)
@ -624,7 +627,7 @@ ICOM_DEFINE(IDirect3DCubeTexture8,IDirect3DBaseTexture8)
#define IDirect3DCubeTexture8_GetPriority(p) ICOM_CALL (GetPriority,p)
#define IDirect3DCubeTexture8_PreLoad(p) ICOM_CALL (PreLoad,p)
#define IDirect3DCubeTexture8_GetType(p) ICOM_CALL (GetType,p)
/*** IDirect3DCubeTexture8 methods: BaseTexture8 ***/
/*** IDirect3DCubeTexture8 methods: IDirect3DBaseTexture8 ***/
#define IDirect3DCubeTexture8_SetLOD(p,a) ICOM_CALL1(SetLOD,p,a)
#define IDirect3DCubeTexture8_GetLOD(p) ICOM_CALL (GetLOD,p)
#define IDirect3DCubeTexture8_GetLevelCount(p) ICOM_CALL (GetLevelCount,p)
@ -660,7 +663,7 @@ ICOM_DEFINE(IDirect3DTexture8,IDirect3DBaseTexture8)
#define IDirect3DTexture8_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
#define IDirect3DTexture8_AddRef(p) ICOM_CALL (AddRef,p)
#define IDirect3DTexture8_Release(p) ICOM_CALL (Release,p)
/*** IDirect3DTexture8 methods: Resource8 ***/
/*** IDirect3DTexture8 methods: IDirect3DResource8 ***/
#define IDirect3DTexture8_GetDevice(p,a) ICOM_CALL1(GetDevice,p,a)
#define IDirect3DTexture8_SetPrivateData(p,a,b,c,d) ICOM_CALL4(SetPrivateData,p,a,b,c,d)
#define IDirect3DTexture8_GetPrivateData(p,a,b,c) ICOM_CALL3(GetPrivateData,p,a,b,c)
@ -669,7 +672,7 @@ ICOM_DEFINE(IDirect3DTexture8,IDirect3DBaseTexture8)
#define IDirect3DTexture8_GetPriority(p) ICOM_CALL (GetPriority,p)
#define IDirect3DTexture8_PreLoad(p) ICOM_CALL (PreLoad,p)
#define IDirect3DTexture8_GetType(p) ICOM_CALL (GetType,p)
/*** IDirect3DTexture8 methods: BaseTexture8 ***/
/*** IDirect3DTexture8 methods: IDirect3DBaseTexture8 ***/
#define IDirect3DTexture8_SetLOD(p,a) ICOM_CALL1(SetLOD,p,a)
#define IDirect3DTexture8_GetLOD(p) ICOM_CALL (GetLOD,p)
#define IDirect3DTexture8_GetLevelCount(p) ICOM_CALL (GetLevelCount,p)
@ -705,7 +708,7 @@ ICOM_DEFINE(IDirect3DVolumeTexture8,IDirect3DBaseTexture8)
#define IDirect3DVolumeTexture8_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
#define IDirect3DVolumeTexture8_AddRef(p) ICOM_CALL (AddRef,p)
#define IDirect3DVolumeTexture8_Release(p) ICOM_CALL (Release,p)
/*** IDirect3DVolumeTexture8 methods: Resource8 ***/
/*** IDirect3DVolumeTexture8 methods: IDirect3DResource8 ***/
#define IDirect3DVolumeTexture8_GetDevice(p,a) ICOM_CALL1(GetDevice,p,a)
#define IDirect3DVolumeTexture8_SetPrivateData(p,a,b,c,d) ICOM_CALL4(SetPrivateData,p,a,b,c,d)
#define IDirect3DVolumeTexture8_GetPrivateData(p,a,b,c) ICOM_CALL3(GetPrivateData,p,a,b,c)
@ -714,7 +717,7 @@ ICOM_DEFINE(IDirect3DVolumeTexture8,IDirect3DBaseTexture8)
#define IDirect3DVolumeTexture8_GetPriority(p) ICOM_CALL (GetPriority,p)
#define IDirect3DVolumeTexture8_PreLoad(p) ICOM_CALL (PreLoad,p)
#define IDirect3DVolumeTexture8_GetType(p) ICOM_CALL (GetType,p)
/*** IDirect3DVolumeTexture8 methods: BaseTexture8 ***/
/*** IDirect3DVolumeTexture8 methods: IDirect3DBaseTexture8 ***/
#define IDirect3DVolumeTexture8_SetLOD(p,a) ICOM_CALL1(SetLOD,p,a)
#define IDirect3DVolumeTexture8_GetLOD(p) ICOM_CALL (GetLOD,p)
#define IDirect3DVolumeTexture8_GetLevelCount(p) ICOM_CALL (GetLevelCount,p)

View File

@ -151,6 +151,83 @@
((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \
((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))
/** VertexShader Declaration */
typedef enum _D3DVSD_TOKENTYPE {
D3DVSD_TOKEN_NOP,
D3DVSD_TOKEN_STREAM,
D3DVSD_TOKEN_STREAMDATA,
D3DVSD_TOKEN_TESSELLATOR,
D3DVSD_TOKEN_CONSTMEM,
D3DVSD_TOKEN_EXT,
D3DVSD_TOKEN_END,
D3DVSD_FORCE_DWORD = 0x7FFFFFFF
} D3DVSD_TOKENTYPE;
/* Address of the vertex register. 0 - 16 */
typedef enum _D3DVSDE_REGISTER {
D3DVSDE_POSITION = 0,
D3DVSDE_BLENDWEIGHT = 1,
D3DVSDE_BLENDINDICES = 2,
D3DVSDE_NORMAL = 3,
D3DVSDE_PSIZE = 4,
D3DVSDE_DIFFUSE = 5,
D3DVSDE_SPECULAR = 6,
D3DVSDE_TEXCOORD0 = 7,
D3DVSDE_TEXCOORD1 = 8,
D3DVSDE_TEXCOORD2 = 9,
D3DVSDE_TEXCOORD3 = 10,
D3DVSDE_TEXCOORD4 = 11,
D3DVSDE_TEXCOORD5 = 12,
D3DVSDE_TEXCOORD6 = 13,
D3DVSDE_TEXCOORD7 = 14,
D3DVSDE_POSITION2 = 15,
D3DVSDE_NORMAL2 = 16
} D3DVSDE_REGISTER;
typedef enum _D3DVSDT_TYPE {
D3DVSDT_FLOAT1 = 0x00,
D3DVSDT_FLOAT2 = 0x01,
D3DVSDT_FLOAT3 = 0x02,
D3DVSDT_FLOAT4 = 0x03,
D3DVSDT_D3DCOLOR = 0x04,
D3DVSDT_UBYTE4 = 0x05,
D3DVSDT_SHORT2 = 0x06,
D3DVSDT_SHORT4 = 0x07
} D3DVSDT_TYPE;
#define D3DVSD_DATATYPESHIFT 16
#define D3DVSD_CONSTCOUNTSHIFT 25
#define D3DVSD_TOKENTYPESHIFT 26
#define D3DVSD_MAKETOKENTYPE(TokenType) \
((TokenType << D3DVSD_TOKENTYPESHIFT) & D3DVSD_TOKENTYPEMASK)
#define D3DVSD_CONST(ConstantAddress, Count) \
(D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_CONSTMEM) | ((Count) << D3DVSD_CONSTCOUNTSHIFT) | (ConstantAddress))
#define D3DVSD_END() 0xFFFFFFFF
#define D3DVSD_NOP() 0x00000000
#define D3DVSD_REG(VertexRegister, Type) \
(D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAMDATA) | ((Type) << D3DVSD_DATATYPESHIFT) | (VertexRegister))
#define D3DVSD_SKIP(Count) \
(D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAMDATA) | 0x10000000 | ((Count) << D3DVSD_SKIPCOUNTSHIFT))
#define D3DVSD_STREAM(StreamNumber) \
(D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAM) | (StreamNumber))
#define D3DVSD_STREAM_TESS() \
(D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAM) | (D3DVSD_STREAMTESSMASK))
#define D3DVSD_TESSNORMAL(VertexRegisterIn, VertexRegisterOut) \
(D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_TESSELLATOR) | ((VertexRegisterIn) << D3DVSD_VERTEXREGINSHIFT) | ((0x02) << D3DVSD_DATATYPESHIFT) | (VertexRegisterOut))
#define D3DVSD_TESSUV(VertexRegister) \
(D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_TESSELLATOR) | 0x10000000 | ((0x01) << D3DVSD_DATATYPESHIFT) | (_VertexRegister))
/*****************************************************************************
* Direct 3D v8 enumerated types
*/

126
include/d3dx8core.h 100644
View File

@ -0,0 +1,126 @@
/*
* Copyright (C) 2002 Raphael Junqueira
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef __WINE_D3DX8CORE_H
#define __WINE_D3DX8CORE_H
#include "objbase.h"
#include "d3d8.h"
#include "d3d8types.h"
#include "d3d8caps.h"
/*****************************************************************************
* #defines and error codes
*/
#define D3DXASM_DEBUG 1
#define D3DXASM_SKIPVALIDATION 2
#define _FACD3D 0x876
#define MAKE_D3DXHRESULT( code ) MAKE_HRESULT( 1, _FACD3D, code )
/*
* Direct3D Errors
*/
#define D3DXERR_CANNOTATTRSORT MAKE_D3DXHRESULT(2158)
#define D3DXERR_CANNOTMODIFYINDEXBUFFER MAKE_D3DXHRESULT(2159)
#define D3DXERR_INVALIDMESH MAKE_D3DXHRESULT(2160)
#define D3DXERR_SKINNINGNOTSUPPORTED MAKE_D3DXHRESULT(2161)
#define D3DXERR_TOOMANYINFLUENCES MAKE_D3DXHRESULT(2162)
#define D3DXERR_INVALIDDATA MAKE_D3DXHRESULT(2163)
/*****************************************************************************
* Predeclare the interfaces
*/
DEFINE_GUID(IID_ID3DXBuffer, 0x1,0x1,0x4,0xB0,0xCF,0x98,0xFE,0xFD,0xFF,0x95,0x12);/* FIXME */
typedef struct ID3DXBuffer ID3DXBuffer, *LPD3DXBUFFER;
DEFINE_GUID(IID_ID3DXFont, 0x1,0x1,0x4,0xB0,0xCF,0x98,0xFE,0xFD,0xFF,0x95,0x13);/* FIXME */
typedef struct ID3DXFont ID3DXFont, *LPD3DXFONT;
/*****************************************************************************
* ID3DXBuffer interface
*/
#undef ICOM_INTERFACE
#define ICOM_INTERFACE ID3DXBuffer
#define ID3DXBuffer_METHODS \
/*** ID3DXBuffer methods ***/ \
ICOM_METHOD (LPVOID, GetBufferPointer) \
ICOM_METHOD (DWORD, GetBufferSize)
/*** ID3DXBuffer methods ***/
#define ID3DXBuffer_IMETHODS \
IUnknown_IMETHODS \
ID3DXBuffer_METHODS
ICOM_DEFINE(ID3DXBuffer,IUnknown)
#undef ICOM_INTERFACE
/*** IUnknown methods ***/
#define ID3DXBuffer_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
#define ID3DXBuffer_AddRef(p) ICOM_CALL (AddRef,p)
#define ID3DXBuffer_Release(p) ICOM_CALL (Release,p)
/*** ID3DXBuffer methods ***/
#define ID3DXBuffer_GetBufferPointer(p) ICOM_CALL (GetBufferPointer,p)
#define ID3DXBuffer_GetBufferSize(p) ICOM_CALL (GetBufferSize,p)
/*****************************************************************************
* ID3DXFont interface
*/
#undef ICOM_INTERFACE
#define ICOM_INTERFACE ID3DXFont
#define ID3DXFont_METHODS \
/*** ID3DXFont methods ***/ \
ICOM_METHOD (HRESULT, Begin) \
ICOM_METHOD (HRESULT, DrawTextA) \
ICOM_METHOD (HRESULT, End)
/*** ID3DXFont methods ***/
#define ID3DXFont_IMETHODS \
IUnknown_IMETHODS \
ID3DXFont_METHODS
ICOM_DEFINE(ID3DXFont,IUnknown)
#undef ICOM_INTERFACE
/*** IUnknown methods ***/
#define ID3DXFont_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
#define ID3DXFont_AddRef(p) ICOM_CALL (AddRef,p)
#define ID3DXFont_Release(p) ICOM_CALL (Release,p)
/*** ID3DXFont methods ***/
#define ID3DXFont_Begin(p) ICOM_CALL (Begin,p)
#define ID3DXFont_DrawTextA(p,a,b,c,d,e)ICOM_CALL5(DrawText,p,a,b,c,d,e)
#define ID3DXFont_End(p) ICOM_CALL (End,p)
/*************************************************************************************
* Define entrypoints
*/
HRESULT D3DXCreateBuffer(DWORD NumBytes, LPD3DXBUFFER* ppBuffer);
HRESULT D3DXCreateFont(LPDIRECT3DDEVICE8 pDevice, HFONT hFont, LPD3DXFONT* ppFont);
UINT D3DXGetFVFVertexSize(DWORD FVF);
HRESULT D3DXAssembleShader(LPCVOID pSrcData, UINT SrcDataLen, DWORD Flags,
LPD3DXBUFFER* ppConstants,
LPD3DXBUFFER* ppCompiledShader,
LPD3DXBUFFER* ppCompilationErrors);
HRESULT D3DXAssembleShaderFromFileA(LPSTR pSrcFile, DWORD Flags,
LPD3DXBUFFER* ppConstants,
LPD3DXBUFFER* ppCompiledShader,
LPD3DXBUFFER* ppCompilationErrors);
HRESULT D3DXAssembleShaderFromFileW(LPSTR pSrcFile, DWORD Flags,
LPD3DXBUFFER* ppConstants,
LPD3DXBUFFER* ppCompiledShader,
LPD3DXBUFFER* ppCompilationErrors);
#endif /* __WINE_D3DX8CORE_H */