summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd/windows/d3dintf.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/osd/windows/d3dintf.h')
-rw-r--r--src/osd/windows/d3dintf.h241
1 files changed, 241 insertions, 0 deletions
diff --git a/src/osd/windows/d3dintf.h b/src/osd/windows/d3dintf.h
new file mode 100644
index 00000000000..4c3fee4099f
--- /dev/null
+++ b/src/osd/windows/d3dintf.h
@@ -0,0 +1,241 @@
+//============================================================
+//
+// drawd3di.h - Direct3D 8/9 interface abstractions
+//
+// Copyright (c) 1996-2007, Nicola Salmoria and the MAME Team.
+// Visit http://mamedev.org for licensing and usage restrictions.
+//
+//============================================================
+
+#ifndef __WIN_DRAWD3DI__
+#define __WIN_DRAWD3DI__
+
+
+//============================================================
+// CONSTANTS
+//============================================================
+
+#ifndef D3DCAPS2_DYNAMICTEXTURES
+#define D3DCAPS2_DYNAMICTEXTURES 0x20000000L
+#endif
+
+#ifndef D3DPRESENT_DONOTWAIT
+#define D3DPRESENT_DONOTWAIT 0x00000001L
+#endif
+
+
+#if (DIRECT3D_VERSION >= 0x0900)
+// the following used to be TEXTURESTAGESTATES but are now SAMPLERSTATES
+enum
+{
+ D3DTSS_ADDRESSU = 13,
+ D3DTSS_ADDRESSV = 14,
+ D3DTSS_BORDERCOLOR = 15,
+ D3DTSS_MAGFILTER = 16,
+ D3DTSS_MINFILTER = 17,
+ D3DTSS_MIPFILTER = 18,
+ D3DTSS_MIPMAPLODBIAS = 19,
+ D3DTSS_MAXMIPLEVEL = 20,
+ D3DTSS_MAXANISOTROPY = 21
+};
+#endif
+
+
+//============================================================
+// TYPE DEFINITIONS
+//============================================================
+
+typedef struct _d3d d3d;
+typedef struct _d3d_device d3d_device;
+typedef struct _d3d_surface d3d_surface;
+typedef struct _d3d_texture d3d_texture;
+typedef struct _d3d_vertex_buffer d3d_vertex_buffer;
+
+
+//============================================================
+// Abstracted presentation parameters
+//============================================================
+
+typedef struct _d3d_present_parameters d3d_present_parameters;
+struct _d3d_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
+//============================================================
+
+typedef struct _d3d_adapter_identifier d3d_adapter_identifier;
+struct _d3d_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 _d3d_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
+};
+typedef enum _d3d_caps_index d3d_caps_index;
+
+
+//============================================================
+// Direct3D interfaces
+//============================================================
+
+typedef struct _d3d_interface d3d_interface;
+struct _d3d_interface
+{
+ HRESULT (*check_device_format)(d3d *d3dptr, UINT adapter, D3DDEVTYPE devtype, D3DFORMAT adapterformat, DWORD usage, D3DRESOURCETYPE restype, D3DFORMAT format);
+ HRESULT (*check_device_type)(d3d *d3dptr, UINT adapter, D3DDEVTYPE devtype, D3DFORMAT format, D3DFORMAT backformat, BOOL windowed);
+ HRESULT (*create_device)(d3d *d3dptr, UINT adapter, D3DDEVTYPE devtype, HWND focus, DWORD behavior, d3d_present_parameters *params, d3d_device **dev);
+ HRESULT (*enum_adapter_modes)(d3d *d3dptr, UINT adapter, D3DFORMAT format, UINT index, D3DDISPLAYMODE *mode);
+ UINT (*get_adapter_count)(d3d *d3dptr);
+ HRESULT (*get_adapter_display_mode)(d3d *d3dptr, UINT adapter, D3DDISPLAYMODE *mode);
+ HRESULT (*get_adapter_identifier)(d3d *d3dptr, UINT adapter, DWORD flags, d3d_adapter_identifier *identifier);
+ UINT (*get_adapter_mode_count)(d3d *d3dptr, UINT adapter, D3DFORMAT format);
+ HMONITOR (*get_adapter_monitor)(d3d *d3dptr, UINT adapter);
+ HRESULT (*get_caps_dword)(d3d *d3dptr, UINT adapter, D3DDEVTYPE devtype, d3d_caps_index which, DWORD *value);
+ ULONG (*release)(d3d *d3dptr);
+};
+
+
+//============================================================
+// Direct3DDevice interfaces
+//============================================================
+
+typedef struct _d3d_device_interface d3d_device_interface;
+struct _d3d_device_interface
+{
+ HRESULT (*begin_scene)(d3d_device *dev);
+ HRESULT (*clear)(d3d_device *dev, DWORD count, const D3DRECT *rects, DWORD flags, D3DCOLOR color, float z, DWORD stencil);
+ HRESULT (*create_offscreen_plain_surface)(d3d_device *dev, UINT width, UINT height, D3DFORMAT format, D3DPOOL pool, d3d_surface **surface);
+ HRESULT (*create_texture)(d3d_device *dev, UINT width, UINT height, UINT levels, DWORD usage, D3DFORMAT format, D3DPOOL pool, d3d_texture **texture);
+ HRESULT (*create_vertex_buffer)(d3d_device *dev, UINT length, DWORD usage, DWORD fvf, D3DPOOL pool, d3d_vertex_buffer **buf);
+ HRESULT (*draw_primitive)(d3d_device *dev, D3DPRIMITIVETYPE type, UINT start, UINT count);
+ HRESULT (*end_scene)(d3d_device *dev);
+ HRESULT (*get_raster_status)(d3d_device *dev, D3DRASTER_STATUS *status);
+ HRESULT (*get_render_target)(d3d_device *dev, DWORD index, d3d_surface **surface);
+ HRESULT (*present)(d3d_device *dev, const RECT *source, const RECT *dest, HWND override, RGNDATA *dirty, DWORD flags);
+ ULONG (*release)(d3d_device *dev);
+ HRESULT (*reset)(d3d_device *dev, d3d_present_parameters *params);
+ void (*set_gamma_ramp)(d3d_device *dev, DWORD flags, const D3DGAMMARAMP *ramp);
+ HRESULT (*set_render_state)(d3d_device *dev, D3DRENDERSTATETYPE state, DWORD value);
+ HRESULT (*set_render_target)(d3d_device *dev, DWORD index, d3d_surface *surf);
+ HRESULT (*set_stream_source)(d3d_device *dev, UINT number, d3d_vertex_buffer *vbuf, UINT stride);
+ HRESULT (*set_texture)(d3d_device *dev, DWORD stage, d3d_texture *tex);
+ HRESULT (*set_texture_stage_state)(d3d_device *dev, DWORD stage, D3DTEXTURESTAGESTATETYPE state, DWORD value);
+ HRESULT (*set_vertex_shader)(d3d_device *dev, D3DFORMAT format);
+ HRESULT (*stretch_rect)(d3d_device *dev, d3d_surface *source, const RECT *srcrect, d3d_surface *dest, const RECT *dstrect, D3DTEXTUREFILTERTYPE filter);
+ HRESULT (*test_cooperative_level)(d3d_device *dev);
+};
+
+
+//============================================================
+// Direct3DSurface interfaces
+//============================================================
+
+typedef struct _d3d_surface_interface d3d_surface_interface;
+struct _d3d_surface_interface
+{
+ HRESULT (*lock_rect)(d3d_surface *surf, D3DLOCKED_RECT *locked, const RECT *rect, DWORD flags);
+ ULONG (*release)(d3d_surface *tex);
+ HRESULT (*unlock_rect)(d3d_surface *surf);
+};
+
+
+//============================================================
+// Direct3DTexture interfaces
+//============================================================
+
+typedef struct _d3d_texture_interface d3d_texture_interface;
+struct _d3d_texture_interface
+{
+ HRESULT (*get_surface_level)(d3d_texture *tex, UINT level, d3d_surface **surface);
+ HRESULT (*lock_rect)(d3d_texture *tex, UINT level, D3DLOCKED_RECT *locked, const RECT *rect, DWORD flags);
+ ULONG (*release)(d3d_texture *tex);
+ HRESULT (*unlock_rect)(d3d_texture *tex, UINT level);
+};
+
+
+//============================================================
+// Direct3DVertexBuffer interfaces
+//============================================================
+
+typedef struct _d3d_vertex_buffer_interface d3d_vertex_buffer_interface;
+struct _d3d_vertex_buffer_interface
+{
+ HRESULT (*lock)(d3d_vertex_buffer *vbuf, UINT offset, UINT size, VOID **data, DWORD flags);
+ ULONG (*release)(d3d_vertex_buffer *vbuf);
+ HRESULT (*unlock)(d3d_vertex_buffer *vbuf);
+};
+
+
+//============================================================
+// Core D3D object
+//============================================================
+
+struct _d3d
+{
+ // internal objects
+ int version;
+ void * d3dobj;
+ HINSTANCE dllhandle;
+
+ // interface pointers
+ d3d_interface d3d;
+ d3d_device_interface device;
+ d3d_surface_interface surface;
+ d3d_texture_interface texture;
+ d3d_vertex_buffer_interface vertexbuf;
+};
+
+
+//============================================================
+// PROTOTYPES
+//============================================================
+
+d3d *drawd3d8_init(void);
+d3d *drawd3d9_init(void);
+
+
+#endif