summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--src/osd/modules/render/d3d/d3d9intf.cpp580
-rw-r--r--src/osd/modules/render/d3d/d3dintf.h239
2 files changed, 0 insertions, 819 deletions
diff --git a/src/osd/modules/render/d3d/d3d9intf.cpp b/src/osd/modules/render/d3d/d3d9intf.cpp
deleted file mode 100644
index 08eaaff0c7b..00000000000
--- a/src/osd/modules/render/d3d/d3d9intf.cpp
+++ /dev/null
@@ -1,580 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Aaron Giles
-//============================================================
-//
-// d3d9intf.c - Direct3D 9 abstraction layer
-//
-//============================================================
-
-// standard windows headers
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#include <d3d9.h>
-#include <d3dx9.h>
-#undef interface
-
-// MAME headers
-#include "emu.h"
-
-// MAMEOS headers
-#include "d3dintf.h"
-
-
-
-//============================================================
-// TYPE DEFINITIONS
-//============================================================
-
-typedef IDirect3D9 *(WINAPI *direct3dcreate9_ptr)(UINT SDKVersion);
-
-//============================================================
-// PROTOTYPES
-//============================================================
-
-static void set_interfaces(d3d_base *d3dptr);
-
-//============================================================
-// INLINES
-//============================================================
-
-static inline void convert_present_params(const present_parameters *params, D3DPRESENT_PARAMETERS *d3d9params)
-{
- memset(d3d9params, 0, sizeof(*d3d9params));
- d3d9params->BackBufferWidth = params->BackBufferWidth;
- d3d9params->BackBufferHeight = params->BackBufferHeight;
- d3d9params->BackBufferFormat = params->BackBufferFormat;
- d3d9params->BackBufferCount = params->BackBufferCount;
- d3d9params->MultiSampleType = params->MultiSampleType;
- d3d9params->MultiSampleQuality = params->MultiSampleQuality;
- d3d9params->SwapEffect = params->SwapEffect;
- d3d9params->hDeviceWindow = params->hDeviceWindow;
- d3d9params->Windowed = params->Windowed;
- d3d9params->EnableAutoDepthStencil = params->EnableAutoDepthStencil;
- d3d9params->AutoDepthStencilFormat = params->AutoDepthStencilFormat;
- d3d9params->Flags = params->Flags;
- d3d9params->FullScreen_RefreshRateInHz = params->FullScreen_RefreshRateInHz;
- d3d9params->PresentationInterval = params->PresentationInterval;
-}
-
-
-
-//============================================================
-// drawd3d9_init
-//============================================================
-
-d3d_base *drawd3d9_init(void)
-{
- // allocate an object to hold our data
- d3d_base *d3dptr = global_alloc(d3d_base);
-
- d3dptr->d3d9_dll = osd::dynamic_module::open({ "d3d9.dll" });
-
- d3d9_create_fn d3d9_create_ptr = d3dptr->d3d9_dll->bind<d3d9_create_fn>("Direct3DCreate9");
- if (d3d9_create_ptr == nullptr)
- {
- osd_printf_verbose("Direct3D: Unable to find Direct3D 9 runtime library\n");
- return true;
- }
-
- d3dptr->d3dobj = (*d3d9_create_ptr)(D3D_SDK_VERSION);
- if (d3dptr->d3dobj == nullptr)
- {
- osd_printf_verbose("Direct3D: Unable to initialize Direct3D 9\n");
- return true;
- }
-
- d3dptr->version = 9;
- d3dptr->post_fx_available = true;
- set_interfaces(d3dptr);
-
- osd_printf_verbose("Direct3D: Using Direct3D 9\n");
- return d3dptr;
-}
-
-
-
-//============================================================
-// Direct3D interfaces
-//============================================================
-
-static HRESULT check_device_format(d3d_base *d3dptr, UINT adapter, D3DDEVTYPE devtype, D3DFORMAT adapterformat, DWORD usage, D3DRESOURCETYPE restype, D3DFORMAT format)
-{
- IDirect3D9 *d3d9 = (IDirect3D9 *)d3dptr->d3dobj;
- return IDirect3D9_CheckDeviceFormat(d3d9, adapter, devtype, adapterformat, usage, restype, format);
-}
-
-
-static HRESULT check_device_type(d3d_base *d3dptr, UINT adapter, D3DDEVTYPE devtype, D3DFORMAT format, D3DFORMAT backformat, BOOL windowed)
-{
- IDirect3D9 *d3d9 = (IDirect3D9 *)d3dptr->d3dobj;
- return IDirect3D9_CheckDeviceType(d3d9, adapter, devtype, format, backformat, windowed);
-}
-
-static HRESULT create_device(d3d_base *d3dptr, UINT adapter, D3DDEVTYPE devtype, HWND focus, DWORD behavior, present_parameters *params, device **dev)
-{
- IDirect3D9 *d3d9 = (IDirect3D9 *)d3dptr->d3dobj;
- D3DPRESENT_PARAMETERS d3d9params;
- convert_present_params(params, &d3d9params);
- return IDirect3D9_CreateDevice(d3d9, adapter, devtype, focus, behavior, &d3d9params, (IDirect3DDevice9 **)dev);
-}
-
-static HRESULT enum_adapter_modes(d3d_base *d3dptr, UINT adapter, D3DFORMAT format, UINT index, D3DDISPLAYMODE *mode)
-{
- IDirect3D9 *d3d9 = (IDirect3D9 *)d3dptr->d3dobj;
- return IDirect3D9_EnumAdapterModes(d3d9, adapter, format, index, mode);
-}
-
-
-static UINT get_adapter_count(d3d_base *d3dptr)
-{
- IDirect3D9 *d3d9 = (IDirect3D9 *)d3dptr->d3dobj;
- return IDirect3D9_GetAdapterCount(d3d9);
-}
-
-
-static HRESULT get_adapter_display_mode(d3d_base *d3dptr, UINT adapter, D3DDISPLAYMODE *mode)
-{
- IDirect3D9 *d3d9 = (IDirect3D9 *)d3dptr->d3dobj;
- return IDirect3D9_GetAdapterDisplayMode(d3d9, adapter, mode);
-}
-
-
-static HRESULT get_adapter_identifier(d3d_base *d3dptr, UINT adapter, DWORD flags, adapter_identifier *identifier)
-{
- IDirect3D9 *d3d9 = (IDirect3D9 *)d3dptr->d3dobj;
- D3DADAPTER_IDENTIFIER9 id;
- HRESULT result = IDirect3D9_GetAdapterIdentifier(d3d9, adapter, flags, &id);
- memcpy(identifier->Driver, id.Driver, sizeof(identifier->Driver));
- memcpy(identifier->Description, id.Description, sizeof(identifier->Description));
- identifier->DriverVersion = id.DriverVersion;
- identifier->VendorId = id.VendorId;
- identifier->DeviceId = id.DeviceId;
- identifier->SubSysId = id.SubSysId;
- identifier->Revision = id.Revision;
- identifier->DeviceIdentifier = id.DeviceIdentifier;
- identifier->WHQLLevel = id.WHQLLevel;
- return result;
-}
-
-
-static UINT get_adapter_mode_count(d3d_base *d3dptr, UINT adapter, D3DFORMAT format)
-{
- IDirect3D9 *d3d9 = (IDirect3D9 *)d3dptr->d3dobj;
- return IDirect3D9_GetAdapterModeCount(d3d9, adapter, format);
-}
-
-
-static HMONITOR get_adapter_monitor(d3d_base *d3dptr, UINT adapter)
-{
- IDirect3D9 *d3d9 = (IDirect3D9 *)d3dptr->d3dobj;
- return IDirect3D9_GetAdapterMonitor(d3d9, adapter);
-}
-
-
-static HRESULT get_caps_dword(d3d_base *d3dptr, UINT adapter, D3DDEVTYPE devtype, caps_index which, DWORD *value)
-{
- IDirect3D9 *d3d9 = (IDirect3D9 *)d3dptr->d3dobj;
- D3DCAPS9 caps;
- HRESULT result = IDirect3D9_GetDeviceCaps(d3d9, adapter, devtype, &caps);
- switch (which)
- {
- case CAPS_PRESENTATION_INTERVALS: *value = caps.PresentationIntervals; break;
- case CAPS_CAPS2: *value = caps.Caps2; break;
- case CAPS_DEV_CAPS: *value = caps.DevCaps; break;
- case CAPS_SRCBLEND_CAPS: *value = caps.SrcBlendCaps; break;
- case CAPS_DSTBLEND_CAPS: *value = caps.DestBlendCaps; break;
- case CAPS_TEXTURE_CAPS: *value = caps.TextureCaps; break;
- case CAPS_TEXTURE_FILTER_CAPS: *value = caps.TextureFilterCaps; break;
- case CAPS_TEXTURE_ADDRESS_CAPS: *value = caps.TextureAddressCaps; break;
- case CAPS_TEXTURE_OP_CAPS: *value = caps.TextureOpCaps; break;
- case CAPS_MAX_TEXTURE_ASPECT: *value = caps.MaxTextureAspectRatio; break;
- case CAPS_MAX_TEXTURE_WIDTH: *value = caps.MaxTextureWidth; break;
- case CAPS_MAX_TEXTURE_HEIGHT: *value = caps.MaxTextureHeight; break;
- case CAPS_STRETCH_RECT_FILTER: *value = caps.StretchRectFilterCaps; break;
- case CAPS_MAX_PS30_INSN_SLOTS: *value = caps.MaxPixelShader30InstructionSlots; break;
- }
- return result;
-}
-
-
-static ULONG release(d3d_base *d3dptr)
-{
- IDirect3D9 *d3d9 = (IDirect3D9 *)d3dptr->d3dobj;
- ULONG result = IDirect3D9_Release(d3d9);
- global_free(d3dptr);
- return result;
-}
-
-
-static const interface d3d9_interface =
-{
- check_device_format,
- check_device_type,
- create_device,
- enum_adapter_modes,
- get_adapter_count,
- get_adapter_display_mode,
- get_adapter_identifier,
- get_adapter_mode_count,
- get_adapter_monitor,
- get_caps_dword,
- release
-};
-
-
-
-//============================================================
-// Direct3DDevice interfaces
-//============================================================
-
-static HRESULT device_begin_scene(device *dev)
-{
- IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev;
- return IDirect3DDevice9_BeginScene(device);
-}
-
-static HRESULT device_clear(device *dev, DWORD count, const D3DRECT *rects, DWORD flags, D3DCOLOR color, float z, DWORD stencil)
-{
- IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev;
- return IDirect3DDevice9_Clear(device, count, rects, flags, color, z, stencil);
-}
-
-
-static HRESULT device_create_offscreen_plain_surface(device *dev, UINT width, UINT height, D3DFORMAT format, D3DPOOL pool, surface **surface)
-{
- IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev;
- return IDirect3DDevice9_CreateOffscreenPlainSurface(device, width, height, format, pool, (IDirect3DSurface9 **)surface, nullptr);
-}
-
-static HRESULT device_create_texture(device *dev, UINT width, UINT height, UINT levels, DWORD usage, D3DFORMAT format, D3DPOOL pool, texture **texture)
-{
- IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev;
- return IDirect3DDevice9_CreateTexture(device, width, height, levels, usage, format, pool, (IDirect3DTexture9 **)texture, nullptr);
-}
-
-
-static HRESULT device_create_vertex_buffer(device *dev, UINT length, DWORD usage, DWORD fvf, D3DPOOL pool, vertex_buffer **buf)
-{
- IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev;
- return IDirect3DDevice9_CreateVertexBuffer(device, length, usage, fvf, pool, (IDirect3DVertexBuffer9 **)buf, nullptr);
-}
-
-
-static HRESULT device_draw_primitive(device *dev, D3DPRIMITIVETYPE type, UINT start, UINT count)
-{
- IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev;
- return IDirect3DDevice9_DrawPrimitive(device, type, start, count);
-}
-
-
-static HRESULT device_end_scene(device *dev)
-{
- IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev;
- return IDirect3DDevice9_EndScene(device);
-}
-
-
-static HRESULT device_get_raster_status(device *dev, D3DRASTER_STATUS *status)
-{
- IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev;
- return IDirect3DDevice9_GetRasterStatus(device, 0, status);
-}
-
-
-static HRESULT device_get_render_target(device *dev, DWORD index, surface **surface)
-{
- IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev;
- return IDirect3DDevice9_GetRenderTarget(device, index, (IDirect3DSurface9 **)surface);
-}
-
-
-static HRESULT device_get_render_target_data(device *dev, surface *rendertarget, surface *destsurface)
-{
- IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev;
- return IDirect3DDevice9_GetRenderTargetData(device, (IDirect3DSurface9 *)rendertarget, (IDirect3DSurface9 *)destsurface);
-}
-
-
-static HRESULT device_present(device *dev, const RECT *source, const RECT *dest, HWND override, RGNDATA *dirty, DWORD flags)
-{
- IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev;
- if (flags != 0)
- {
- IDirect3DSwapChain9 *chain;
- HRESULT result = IDirect3DDevice9_GetSwapChain(device, 0, &chain);
- if (result == D3D_OK)
- {
- result = IDirect3DSwapChain9_Present(chain, source, dest, override, dirty, flags);
- IDirect3DSwapChain9_Release(chain);
- return result;
- }
- }
- return IDirect3DDevice9_Present(device, source, dest, override, dirty);
-}
-
-
-static ULONG device_release(device *dev)
-{
- IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev;
- return IDirect3DDevice9_Release(device);
-}
-
-
-static HRESULT device_reset(device *dev, present_parameters *params)
-{
- IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev;
- D3DPRESENT_PARAMETERS d3d9params;
- convert_present_params(params, &d3d9params);
- return IDirect3DDevice9_Reset(device, &d3d9params);
-}
-
-
-static void device_set_gamma_ramp(device *dev, DWORD flags, const D3DGAMMARAMP *ramp)
-{
- IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev;
- IDirect3DDevice9_SetGammaRamp(device, 0, flags, ramp);
-}
-
-
-static HRESULT device_set_render_state(device *dev, D3DRENDERSTATETYPE state, DWORD value)
-{
- IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev;
- return IDirect3DDevice9_SetRenderState(device, state, value);
-}
-
-
-static HRESULT device_set_render_target(device *dev, DWORD index, surface *surf)
-{
- IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev;
- IDirect3DSurface9 *surface = (IDirect3DSurface9 *)surf;
- return IDirect3DDevice9_SetRenderTarget(device, index, surface);
-}
-
-
-static HRESULT device_create_render_target(device *dev, UINT width, UINT height, D3DFORMAT format, surface **surface)
-{
- IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev;
- return IDirect3DDevice9_CreateRenderTarget(device, width, height, format, D3DMULTISAMPLE_NONE, 0, false, (IDirect3DSurface9 **)surface, nullptr);
-}
-
-
-static HRESULT device_set_stream_source(device *dev, UINT number, vertex_buffer *vbuf, UINT stride)
-{
- IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev;
- IDirect3DVertexBuffer9 *vertexbuf = (IDirect3DVertexBuffer9 *)vbuf;
- return IDirect3DDevice9_SetStreamSource(device, number, vertexbuf, 0, stride);
-}
-
-
-static HRESULT device_set_texture(device *dev, DWORD stage, texture *tex)
-{
- IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev;
- IDirect3DBaseTexture9 *texture = (IDirect3DBaseTexture9 *)tex;
- return IDirect3DDevice9_SetTexture(device, stage, texture);
-}
-
-
-static HRESULT device_set_texture_stage_state(device *dev, DWORD stage, D3DTEXTURESTAGESTATETYPE state, DWORD value)
-{
- IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev;
-
- // some state which was here got pushed into sampler state in D3D9
- switch ((DWORD)state)
- {
- case D3DTSS_ADDRESSU:
- return IDirect3DDevice9_SetSamplerState(device, stage, D3DSAMP_ADDRESSU, value);
- case D3DTSS_ADDRESSV:
- return IDirect3DDevice9_SetSamplerState(device, stage, D3DSAMP_ADDRESSV, value);
- case D3DTSS_BORDERCOLOR:
- return IDirect3DDevice9_SetSamplerState(device, stage, D3DSAMP_BORDERCOLOR, value);
- case D3DTSS_MAGFILTER:
- return IDirect3DDevice9_SetSamplerState(device, stage, D3DSAMP_MAGFILTER, value);
- case D3DTSS_MINFILTER:
- return IDirect3DDevice9_SetSamplerState(device, stage, D3DSAMP_MINFILTER, value);
- case D3DTSS_MIPFILTER:
- return IDirect3DDevice9_SetSamplerState(device, stage, D3DSAMP_MIPFILTER, value);
- case D3DTSS_MIPMAPLODBIAS:
- return IDirect3DDevice9_SetSamplerState(device, stage, D3DSAMP_MIPMAPLODBIAS, value);
- case D3DTSS_MAXMIPLEVEL:
- return IDirect3DDevice9_SetSamplerState(device, stage, D3DSAMP_MAXMIPLEVEL, value);
- case D3DTSS_MAXANISOTROPY:
- return IDirect3DDevice9_SetSamplerState(device, stage, D3DSAMP_MAXANISOTROPY, value);
- default:
- return IDirect3DDevice9_SetTextureStageState(device, stage, state, value);
- }
-}
-
-
-static HRESULT device_set_vertex_format(device *dev, D3DFORMAT format)
-{
- IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev;
- return IDirect3DDevice9_SetFVF(device, format);
-}
-
-
-static HRESULT device_stretch_rect(device *dev, surface *source, const RECT *srcrect, surface *dest, const RECT *dstrect, D3DTEXTUREFILTERTYPE filter)
-{
- IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev;
- IDirect3DSurface9 *ssurface = (IDirect3DSurface9 *)source;
- IDirect3DSurface9 *dsurface = (IDirect3DSurface9 *)dest;
- return IDirect3DDevice9_StretchRect(device, ssurface, srcrect, dsurface, dstrect, filter);
-}
-
-
-static HRESULT device_test_cooperative_level(device *dev)
-{
- IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev;
- return IDirect3DDevice9_TestCooperativeLevel(device);
-}
-
-
-static const d3d_device_interface d3d9_device_interface =
-{
- device_begin_scene,
- device_clear,
- device_create_offscreen_plain_surface,
- device_create_texture,
- device_create_vertex_buffer,
- device_create_render_target,
- device_draw_primitive,
- device_end_scene,
- device_get_raster_status,
- device_get_render_target,
- device_get_render_target_data,
- device_present,
- device_release,
- device_reset,
- device_set_gamma_ramp,
- device_set_render_state,
- device_set_render_target,
- device_set_stream_source,
- device_set_texture,
- device_set_texture_stage_state,
- device_set_vertex_format,
- device_stretch_rect,
- device_test_cooperative_level
-};
-
-
-
-//============================================================
-// Direct3DSurface interfaces
-//============================================================
-
-static HRESULT surface_lock_rect(surface *surf, D3DLOCKED_RECT *locked, const RECT *rect, DWORD flags)
-{
- IDirect3DSurface9 *surface = (IDirect3DSurface9 *)surf;
- return IDirect3DSurface9_LockRect(surface, locked, rect, flags);
-}
-
-
-static ULONG surface_release(surface *surf)
-{
- IDirect3DSurface9 *surface = (IDirect3DSurface9 *)surf;
- return IDirect3DSurface9_Release(surface);
-}
-
-
-static HRESULT surface_unlock_rect(surface *surf)
-{
- IDirect3DSurface9 *surface = (IDirect3DSurface9 *)surf;
- return IDirect3DSurface9_UnlockRect(surface);
-}
-
-
-static const surface_interface d3d9_surface_interface =
-{
- surface_lock_rect,
- surface_release,
- surface_unlock_rect
-};
-
-
-
-//============================================================
-// Direct3DTexture interfaces
-//============================================================
-
-static HRESULT texture_get_surface_level(texture *tex, UINT level, surface **surface)
-{
- IDirect3DTexture9 *texture = (IDirect3DTexture9 *)tex;
- return IDirect3DTexture9_GetSurfaceLevel(texture, level, (IDirect3DSurface9 **)surface);
-}
-
-
-static HRESULT texture_lock_rect(texture *tex, UINT level, D3DLOCKED_RECT *locked, const RECT *rect, DWORD flags)
-{
- IDirect3DTexture9 *texture = (IDirect3DTexture9 *)tex;
- return IDirect3DTexture9_LockRect(texture, level, locked, rect, flags);
-}
-
-
-static ULONG texture_release(texture *tex)
-{
- IDirect3DTexture9 *texture = (IDirect3DTexture9 *)tex;
- return IDirect3DTexture9_Release(texture);
-}
-
-
-static HRESULT texture_unlock_rect(texture *tex, UINT level)
-{
- IDirect3DTexture9 *texture = (IDirect3DTexture9 *)tex;
- return IDirect3DTexture9_UnlockRect(texture, level);
-}
-
-
-static const texture_interface d3d9_texture_interface =
-{
- texture_get_surface_level,
- texture_lock_rect,
- texture_release,
- texture_unlock_rect
-};
-
-
-
-//============================================================
-// Direct3DVertexBuffer interfaces
-//============================================================
-
-static HRESULT vertex_buffer_lock(vertex_buffer *vbuf, UINT offset, UINT size, VOID **data, DWORD flags)
-{
- IDirect3DVertexBuffer9 *vertexbuf = (IDirect3DVertexBuffer9 *)vbuf;
- return IDirect3DVertexBuffer9_Lock(vertexbuf, offset, size, data, flags);
-}
-
-
-static ULONG vertex_buffer_release(vertex_buffer *vbuf)
-{
- IDirect3DVertexBuffer9 *vertexbuf = (IDirect3DVertexBuffer9 *)vbuf;
- return IDirect3DVertexBuffer9_Release(vertexbuf);
-}
-
-
-static HRESULT vertex_buffer_unlock(vertex_buffer *vbuf)
-{
- IDirect3DVertexBuffer9 *vertexbuf = (IDirect3DVertexBuffer9 *)vbuf;
- return IDirect3DVertexBuffer9_Unlock(vertexbuf);
-}
-
-
-static const vertex_buffer_interface d3d9_vertex_buffer_interface =
-{
- vertex_buffer_lock,
- vertex_buffer_release,
- vertex_buffer_unlock
-};
-
-
-//============================================================
-// set_interfaces
-//============================================================
-
-static void set_interfaces(d3d_base *d3dptr)
-{
- d3dptr->d3d = d3d9_interface;
- d3dptr->device = d3d9_device_interface;
- d3dptr->surface = d3d9_surface_interface;
- d3dptr->texture = d3d9_texture_interface;
- d3dptr->vertexbuf = d3d9_vertex_buffer_interface;
-}
diff --git a/src/osd/modules/render/d3d/d3dintf.h b/src/osd/modules/render/d3d/d3dintf.h
deleted file mode 100644
index 3e0a90a46f5..00000000000
--- a/src/osd/modules/render/d3d/d3dintf.h
+++ /dev/null
@@ -1,239 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Aaron Giles
-//============================================================
-//
-// d3dintf.h - Direct3D 8/9 interface abstractions
-//
-//============================================================
-
-#ifndef __WIN_D3DINTF__
-#define __WIN_D3DINTF__
-
-// standard windows headers
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#include <tchar.h>
-#include <mmsystem.h>
-#include <d3d9.h>
-#include <d3dx9.h>
-#include <math.h>
-#undef interface
-
-//============================================================
-// CONSTANTS
-//============================================================
-
-#ifndef D3DCAPS2_DYNAMICTEXTURES
-#define D3DCAPS2_DYNAMICTEXTURES 0x20000000L
-#endif
-
-#ifndef D3DPRESENT_DONOTWAIT
-#define D3DPRESENT_DONOTWAIT 0x00000001L
-#endif
-
-
-#define D3DTSS_ADDRESSU 13
-#define D3DTSS_ADDRESSV 14
-#define D3DTSS_BORDERCOLOR 15
-#define D3DTSS_MAGFILTER 16
-#define D3DTSS_MINFILTER 17
-#define D3DTSS_MIPFILTER 18
-#define D3DTSS_MIPMAPLODBIAS 19
-#define D3DTSS_MAXMIPLEVEL 20
-#define D3DTSS_MAXANISOTROPY 21
-
-//============================================================
-// TYPE DEFINITIONS
-//============================================================
-
-struct d3d_base;
-struct device;
-struct surface;
-struct texture;
-struct vertex_buffer;
-class effect;
-typedef D3DXVECTOR4 vector;
-typedef D3DMATRIX matrix;
-
-//============================================================
-// Abstracted presentation parameters
-//============================================================
-
-struct present_parameters
-{
- UINT BackBufferWidth;
- UINT BackBufferHeight;
- D3DFORMAT BackBufferFormat;
- UINT BackBufferCount;
- D3DMULTISAMPLE_TYPE MultiSampleType;
- DWORD MultiSampleQuality;
- D3DSWAPEFFECT SwapEffect;
- HWND hDeviceWindow;
- BOOL Windowed;
- BOOL EnableAutoDepthStencil;
- D3DFORMAT AutoDepthStencilFormat;
- DWORD Flags;
- UINT FullScreen_RefreshRateInHz;
- UINT PresentationInterval;
-};
-
-
-//============================================================
-// Abstracted device identifier
-//============================================================
-
-struct adapter_identifier
-{
- char Driver[512];
- char Description[512];
- LARGE_INTEGER DriverVersion;
- DWORD VendorId;
- DWORD DeviceId;
- DWORD SubSysId;
- DWORD Revision;
- GUID DeviceIdentifier;
- DWORD WHQLLevel;
-};
-
-
-//============================================================
-// Caps enumeration
-//============================================================
-
-enum caps_index
-{
- CAPS_PRESENTATION_INTERVALS,
- CAPS_CAPS2,
- CAPS_DEV_CAPS,
- CAPS_SRCBLEND_CAPS,
- CAPS_DSTBLEND_CAPS,
- CAPS_TEXTURE_CAPS,
- CAPS_TEXTURE_FILTER_CAPS,
- CAPS_TEXTURE_ADDRESS_CAPS,
- CAPS_TEXTURE_OP_CAPS,
- CAPS_MAX_TEXTURE_ASPECT,
- CAPS_MAX_TEXTURE_WIDTH,
- CAPS_MAX_TEXTURE_HEIGHT,
- CAPS_STRETCH_RECT_FILTER,
- CAPS_MAX_PS30_INSN_SLOTS
-};
-
-
-//============================================================
-// Direct3D interfaces
-//============================================================
-
-struct interface
-{
- HRESULT (*check_device_format)(d3d_base *d3dptr, UINT adapter, D3DDEVTYPE devtype, D3DFORMAT adapterformat, DWORD usage, D3DRESOURCETYPE restype, D3DFORMAT format);
- HRESULT (*check_device_type)(d3d_base *d3dptr, UINT adapter, D3DDEVTYPE devtype, D3DFORMAT format, D3DFORMAT backformat, BOOL windowed);
- HRESULT (*create_device)(d3d_base *d3dptr, UINT adapter, D3DDEVTYPE devtype, HWND focus, DWORD behavior, present_parameters *params, device **dev);
- HRESULT (*enum_adapter_modes)(d3d_base *d3dptr, UINT adapter, D3DFORMAT format, UINT index, D3DDISPLAYMODE *mode);
- UINT (*get_adapter_count)(d3d_base *d3dptr);
- HRESULT (*get_adapter_display_mode)(d3d_base *d3dptr, UINT adapter, D3DDISPLAYMODE *mode);
- HRESULT (*get_adapter_identifier)(d3d_base *d3dptr, UINT adapter, DWORD flags, adapter_identifier *identifier);
- UINT (*get_adapter_mode_count)(d3d_base *d3dptr, UINT adapter, D3DFORMAT format);
- HMONITOR (*get_adapter_monitor)(d3d_base *d3dptr, UINT adapter);
- HRESULT (*get_caps_dword)(d3d_base *d3dptr, UINT adapter, D3DDEVTYPE devtype, caps_index which, DWORD *value);
- ULONG (*release)(d3d_base *d3dptr);
-};
-
-
-//============================================================
-// Direct3DDevice interfaces
-//============================================================
-
-struct d3d_device_interface
-{
- HRESULT (*begin_scene)(device *dev);
- HRESULT (*clear)(device *dev, DWORD count, const D3DRECT *rects, DWORD flags, D3DCOLOR color, float z, DWORD stencil);
- HRESULT (*create_offscreen_plain_surface)(device *dev, UINT width, UINT height, D3DFORMAT format, D3DPOOL pool, surface **surface);
- HRESULT (*create_texture)(device *dev, UINT width, UINT height, UINT levels, DWORD usage, D3DFORMAT format, D3DPOOL pool, texture **texture);
- HRESULT (*create_vertex_buffer)(device *dev, UINT length, DWORD usage, DWORD fvf, D3DPOOL pool, vertex_buffer **buf);
- HRESULT (*create_render_target)(device *dev, UINT width, UINT height, D3DFORMAT format, surface **surface);
- HRESULT (*draw_primitive)(device *dev, D3DPRIMITIVETYPE type, UINT start, UINT count);
- HRESULT (*end_scene)(device *dev);
- HRESULT (*get_raster_status)(device *dev, D3DRASTER_STATUS *status);
- HRESULT (*get_render_target)(device *dev, DWORD index, surface **surface);
- HRESULT (*get_render_target_data)(device *dev, surface *rendertarget, surface *destsurface);
- HRESULT (*present)(device *dev, const RECT *source, const RECT *dest, HWND override, RGNDATA *dirty, DWORD flags);
- ULONG (*release)(device *dev);
- HRESULT (*reset)(device *dev, present_parameters *params);
- void (*set_gamma_ramp)(device *dev, DWORD flags, const D3DGAMMARAMP *ramp);
- HRESULT (*set_render_state)(device *dev, D3DRENDERSTATETYPE state, DWORD value);
- HRESULT (*set_render_target)(device *dev, DWORD index, surface *surf);
- HRESULT (*set_stream_source)(device *dev, UINT number, vertex_buffer *vbuf, UINT stride);
- HRESULT (*set_texture)(device *dev, DWORD stage, texture *tex);
- HRESULT (*set_texture_stage_state)(device *dev, DWORD stage, D3DTEXTURESTAGESTATETYPE state, DWORD value);
- HRESULT (*set_vertex_format)(device *dev, D3DFORMAT format);
- HRESULT (*stretch_rect)(device *dev, surface *source, const RECT *srcrect, surface *dest, const RECT *dstrect, D3DTEXTUREFILTERTYPE filter);
- HRESULT (*test_cooperative_level)(device *dev);
-};
-
-
-//============================================================
-// Direct3DSurface interfaces
-//============================================================
-
-struct surface_interface
-{
- HRESULT (*lock_rect)(surface *surf, D3DLOCKED_RECT *locked, const RECT *rect, DWORD flags);
- ULONG (*release)(surface *tex);
- HRESULT (*unlock_rect)(surface *surf);
-};
-
-
-//============================================================
-// Direct3DTexture interfaces
-//============================================================
-
-struct texture_interface
-{
- HRESULT (*get_surface_level)(texture *tex, UINT level, surface **surface);
- HRESULT (*lock_rect)(texture *tex, UINT level, D3DLOCKED_RECT *locked, const RECT *rect, DWORD flags);
- ULONG (*release)(texture *tex);
- HRESULT (*unlock_rect)(texture *tex, UINT level);
-};
-
-
-//============================================================
-// Direct3DVertexBuffer interfaces
-//============================================================
-
-struct vertex_buffer_interface
-{
- HRESULT (*lock)(vertex_buffer *vbuf, UINT offset, UINT size, VOID **data, DWORD flags);
- ULONG (*release)(vertex_buffer *vbuf);
- HRESULT (*unlock)(vertex_buffer *vbuf);
-};
-
-
-//============================================================
-// Core D3D object
-//============================================================
-
-struct d3d_base
-{
- // internal objects
- int version;
- void * d3dobj;
- HINSTANCE dllhandle;
- bool post_fx_available;
- HINSTANCE libhandle;
-
- // interface pointers
- interface d3d;
- d3d_device_interface device;
- surface_interface surface;
- texture_interface texture;
- vertex_buffer_interface vertexbuf;
-};
-
-
-//============================================================
-// PROTOTYPES
-//============================================================
-
-d3d_base *drawd3d9_init(void);
-
-#endif