Counter Strike : Global Offensive Source Code
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1915 lines
72 KiB

  1. #ifndef INCLUDED_DXABSTRACT_DEF_H
  2. #define INCLUDED_DXABSTRACT_DEF_H
  3. //================ Copyright (c) Valve Corporation. All Rights Reserved. ===========================
  4. //
  5. // Definitions to support dxsbtract
  6. //
  7. //==================================================================================================
  8. #include "ps3/ps3_platform.h"
  9. #include "bitmap/imageformat_declarations.h"
  10. #include "cell/gcm/gcm_enum.h"
  11. #include "gcmconfig.h"
  12. //--------------------------------------------------------------------------------------------------
  13. // Defines
  14. //--------------------------------------------------------------------------------------------------
  15. typedef void* VD3DHWND;
  16. typedef void* VD3DHANDLE;
  17. #define D3D_MAX_TEXTURES 16
  18. #define D3D_MAX_SAMPLERS 16
  19. #ifdef _PS3
  20. #define D3D_MAX_STREAMS 16
  21. #else
  22. #define D3D_MAX_STREAMS 4
  23. #endif
  24. #define D3DRS_VALUE_LIMIT 210
  25. //--------------------------------------------------------------------------------------------------
  26. // Stuff that would be in windows.h
  27. //--------------------------------------------------------------------------------------------------
  28. #ifdef _WINNT_
  29. #error "No interoperability with windows.h!"
  30. #else
  31. #ifndef _PS3
  32. typedef unsigned int DWORD;
  33. typedef unsigned int HRESULT;
  34. typedef unsigned long ULONG_PTR;
  35. typedef ULONG_PTR SIZE_T;
  36. #endif // !_PS3
  37. typedef int INT;
  38. typedef unsigned long ULONG;
  39. typedef long LONG;
  40. typedef float FLOAT;
  41. typedef unsigned short WORD;
  42. typedef long long LONGLONG;
  43. typedef unsigned int UINT;
  44. //typedef unsigned char BYTE;
  45. #define CONST const
  46. typedef const char* LPCSTR;
  47. typedef char* LPSTR;
  48. typedef DWORD* LPDWORD;
  49. #define ZeroMemory RtlZeroMemory
  50. #define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))
  51. typedef union _LARGE_INTEGER {
  52. struct {
  53. DWORD LowPart;
  54. LONG HighPart;
  55. };
  56. struct {
  57. DWORD LowPart;
  58. LONG HighPart;
  59. } u;
  60. LONGLONG QuadPart;
  61. } LARGE_INTEGER;
  62. #ifdef _PS3
  63. bool operator==( const struct _GUID &lhs, const struct _GUID &rhs );
  64. #else // _PS3
  65. typedef struct _GUID {
  66. bool operator==( const struct _GUID &other ) const;
  67. unsigned long Data1;
  68. unsigned short Data2;
  69. unsigned short Data3;
  70. unsigned char Data4[ 8 ];
  71. } GUID;
  72. typedef struct _RECT {
  73. int left;
  74. int top;
  75. int right;
  76. int bottom;
  77. } RECT;
  78. #endif // !_PS3
  79. struct IUnknown
  80. {
  81. public:
  82. int m_refcount;
  83. IUnknown()
  84. {
  85. m_refcount = 1;
  86. //printf("\n>>IUnknown@ %08x: refcount now %d ",this,m_refcount);
  87. };
  88. virtual ~IUnknown() {};
  89. void AddRef()
  90. {
  91. m_refcount++;
  92. //printf("\n++AddRef @ %08x: refcount now %d ",this,m_refcount);
  93. };
  94. ULONG Release()
  95. {
  96. m_refcount--;
  97. //printf("\n--Release @ %08x: refcount now %d ",this,m_refcount);
  98. if (!m_refcount)
  99. {
  100. //printf(" ---> DELETING %08x",this);
  101. //Debugger();
  102. delete this;
  103. return 0;
  104. }
  105. else
  106. {
  107. return m_refcount;
  108. }
  109. };
  110. };
  111. #ifndef _PS3
  112. typedef struct tagPOINT
  113. {
  114. LONG x;
  115. LONG y;
  116. } POINT, *PPOINT, *LPPOINT;
  117. typedef DWORD COLORREF;
  118. #endif // !_PS3
  119. typedef struct _MEMORYSTATUS {
  120. DWORD dwLength;
  121. SIZE_T dwTotalPhys;
  122. } MEMORYSTATUS, *LPMEMORYSTATUS;
  123. #define RGB(r,g,b) ((COLORREF)(((BYTE)(r)|((WORD)((BYTE)(g))<<8))|(((DWORD)(BYTE)(b))<<16)))
  124. #define MAKE_HRESULT(sev,fac,code) \
  125. ((HRESULT) (((unsigned long)(sev)<<31) | ((unsigned long)(fac)<<16) | ((unsigned long)(code))) )
  126. #define S_FALSE ((HRESULT)0x00000001L)
  127. #define E_OUTOFMEMORY ((HRESULT)(0x8007000EL))
  128. #ifndef _PS3
  129. #define S_OK 0
  130. #define FAILED(hr) ((HRESULT)(hr) < 0)
  131. #define SUCCEEDED(hr) ((HRESULT)(hr) >= 0)
  132. #endif // !_PS3
  133. #define MAKEFOURCC(ch0, ch1, ch2, ch3) \
  134. ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \
  135. ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))
  136. struct RGNDATA
  137. {
  138. public:
  139. };
  140. void Sleep( unsigned int ms );
  141. bool IsIconic( VD3DHWND hWnd );
  142. void GetClientRect( VD3DHWND hWnd, RECT *destRect );
  143. BOOL ClientToScreen( VD3DHWND hWnd, LPPOINT pPoint );
  144. typedef const void* LPCVOID;
  145. void* GetCurrentThread();
  146. void SetThreadAffinityMask( void *hThread, int nMask );
  147. void GlobalMemoryStatus( MEMORYSTATUS *pOut );
  148. #endif
  149. #define D3DSI_OPCODE_MASK 0x0000FFFF
  150. #define D3DSP_TEXTURETYPE_MASK 0x78000000
  151. #define D3DUSAGE_AUTOGENMIPMAP (0x00000400L)
  152. #define D3DSP_DCL_USAGE_MASK 0x0000000f
  153. #define D3DSP_OPCODESPECIFICCONTROL_MASK 0x00ff0000
  154. #define D3DSP_OPCODESPECIFICCONTROL_SHIFT 16
  155. /* Flags to construct D3DRS_COLORWRITEENABLE */
  156. #define D3DCOLORWRITEENABLE_RED (1L<<0)
  157. #define D3DCOLORWRITEENABLE_GREEN (1L<<1)
  158. #define D3DCOLORWRITEENABLE_BLUE (1L<<2)
  159. #define D3DCOLORWRITEENABLE_ALPHA (1L<<3)
  160. #define D3DSGR_NO_CALIBRATION 0x00000000L
  161. #define D3DXINLINE inline
  162. #define D3D_SDK_VERSION 32
  163. #define _FACD3D 0x876
  164. #define MAKE_D3DHRESULT( code ) MAKE_HRESULT( 1, _FACD3D, code )
  165. #define D3DERR_DEVICELOST MAKE_D3DHRESULT(2152)
  166. #define D3DERR_NOTAVAILABLE MAKE_D3DHRESULT(2154)
  167. #define D3DERR_DEVICENOTRESET MAKE_D3DHRESULT(2153)
  168. #define D3DERR_INVALIDCALL MAKE_D3DHRESULT(2156)
  169. #define D3DERR_DRIVERINTERNALERROR MAKE_D3DHRESULT(2087)
  170. #define D3DERR_OUTOFVIDEOMEMORY MAKE_D3DHRESULT(380)
  171. #define D3D_OK S_OK
  172. #define D3DPRESENT_RATE_DEFAULT 0x00000000
  173. //
  174. // DevCaps
  175. //
  176. // we need to see who in Source land is interested in these values, as dxabstract is currently reporting zero for the whole Caps word
  177. #define D3DDEVCAPS_EXECUTESYSTEMMEMORY 0x00000010L /* Device can use execute buffers from system memory */
  178. #define D3DDEVCAPS_TLVERTEXSYSTEMMEMORY 0x00000040L /* Device can use TL buffers from system memory */
  179. #define D3DDEVCAPS_TLVERTEXVIDEOMEMORY 0x00000080L /* Device can use TL buffers from video memory */
  180. #define D3DDEVCAPS_TEXTURESYSTEMMEMORY 0x00000100L /* Device can texture from system memory */
  181. #define D3DDEVCAPS_TEXTUREVIDEOMEMORY 0x00000200L /* Device can texture from device memory */
  182. #define D3DDEVCAPS_DRAWPRIMTLVERTEX 0x00000400L /* Device can draw TLVERTEX primitives */
  183. #define D3DDEVCAPS_CANRENDERAFTERFLIP 0x00000800L /* Device can render without waiting for flip to complete */
  184. #define D3DDEVCAPS_TEXTURENONLOCALVIDMEM 0x00001000L /* Device can texture from nonlocal video memory */
  185. #define D3DDEVCAPS_SEPARATETEXTUREMEMORIES 0x00004000L /* Device is texturing from separate memory pools */
  186. #define D3DDEVCAPS_HWTRANSFORMANDLIGHT 0x00010000L /* Device can support transformation and lighting in hardware and DRAWPRIMITIVES2EX must be also */
  187. #define D3DDEVCAPS_CANBLTSYSTONONLOCAL 0x00020000L /* Device supports a Tex Blt from system memory to non-local vidmem */
  188. #define D3DDEVCAPS_HWRASTERIZATION 0x00080000L /* Device has HW acceleration for rasterization */
  189. #define D3DDEVCAPS_PUREDEVICE 0x00100000L /* Device supports D3DCREATE_PUREDEVICE */
  190. #define D3DDEVCAPS_QUINTICRTPATCHES 0x00200000L /* Device supports quintic Beziers and BSplines */
  191. #define D3DDEVCAPS_RTPATCHHANDLEZERO 0x00800000L /* Indicates that RT Patches may be drawn efficiently using handle 0 */
  192. #define D3DDEVCAPS_NPATCHES 0x01000000L /* Device supports N-Patches */
  193. //
  194. // PrimitiveMiscCaps
  195. //
  196. #define D3DPMISCCAPS_MASKZ 0x00000002L
  197. #define D3DPMISCCAPS_CULLNONE 0x00000010L
  198. #define D3DPMISCCAPS_CULLCW 0x00000020L
  199. #define D3DPMISCCAPS_CULLCCW 0x00000040L
  200. #define D3DPMISCCAPS_COLORWRITEENABLE 0x00000080L
  201. #define D3DPMISCCAPS_CLIPPLANESCALEDPOINTS 0x00000100L /* Device correctly clips scaled points to clip planes */
  202. #define D3DPMISCCAPS_CLIPTLVERTS 0x00000200L /* device will clip post-transformed vertex primitives */
  203. #define D3DPMISCCAPS_TSSARGTEMP 0x00000400L /* device supports D3DTA_TEMP for temporary register */
  204. #define D3DPMISCCAPS_BLENDOP 0x00000800L /* device supports D3DRS_BLENDOP */
  205. #define D3DPMISCCAPS_NULLREFERENCE 0x00001000L /* Reference Device that doesnt render */
  206. #define D3DPMISCCAPS_PERSTAGECONSTANT 0x00008000L /* Device supports per-stage constants */
  207. #define D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS 0x00040000L /* Device supports different bit depths for MRT */
  208. #define D3DPMISCCAPS_FOGVERTEXCLAMPED 0x00100000L /* Device clamps fog blend factor per vertex */
  209. // Flags field for Issue
  210. #define D3DISSUE_END (1 << 0) // Tells the runtime to issue the end of a query, changing it's state to "non-signaled".
  211. #define D3DISSUE_BEGIN (1 << 1) // Tells the runtime to issue the beginng of a query.
  212. #define D3DPRESENT_INTERVAL_ONE 0x00000001L
  213. #define D3DPRESENT_INTERVAL_IMMEDIATE 0x80000000L
  214. /*
  215. * Options for clearing
  216. */
  217. #define D3DCLEAR_TARGET 0x00000001l /* Clear target surface */
  218. #define D3DCLEAR_ZBUFFER 0x00000002l /* Clear target z buffer */
  219. #define D3DCLEAR_STENCIL 0x00000004l /* Clear stencil planes */
  220. #define D3DCLEAR_TARGET0 D3DCLEAR_TARGET /* Clear target surface */
  221. #define D3DENUM_WHQL_LEVEL 0x00000002L
  222. #define D3DPTEXTURECAPS_NOPROJECTEDBUMPENV 0x00200000L /* Device does not support projected bump env lookup operation
  223. in programmable and fixed function pixel shaders */
  224. #define D3DDEVCAPS2_STREAMOFFSET 0x00000001L /* Device supports offsets in streams. Must be set by DX9 drivers */
  225. #define D3DDEVCAPS_PUREDEVICE 0x00100000L /* Device supports D3DCREATE_PUREDEVICE */
  226. #define D3DCREATE_PUREDEVICE 0x00000010L
  227. #define D3DCREATE_SOFTWARE_VERTEXPROCESSING 0x00000020L
  228. #define D3DCREATE_HARDWARE_VERTEXPROCESSING 0x00000040L
  229. #define D3DCREATE_FPU_PRESERVE 0x00000002L
  230. #define D3DPRASTERCAPS_FOGRANGE 0x00010000L
  231. #define D3DPRASTERCAPS_FOGTABLE 0x00000100L
  232. #define D3DPRASTERCAPS_FOGVERTEX 0x00000080L
  233. #define D3DPRASTERCAPS_WFOG 0x00100000L
  234. #define D3DPRASTERCAPS_ZFOG 0x00200000L
  235. #define D3DPRASTERCAPS_MIPMAPLODBIAS 0x00002000L
  236. #define D3DPRASTERCAPS_WBUFFER 0x00040000L
  237. #define D3DPRASTERCAPS_ZTEST 0x00000010L
  238. //
  239. // Caps2
  240. //
  241. #define D3DCAPS2_CANCALIBRATEGAMMA 0x00100000L
  242. #define D3DPRASTERCAPS_SCISSORTEST 0x01000000L
  243. #define D3DPTEXTURECAPS_MIPCUBEMAP 0x00010000L /* Device can do mipmapped cube maps */
  244. #define D3DPTEXTURECAPS_ALPHA 0x00000004L /* Alpha in texture pixels is supported */
  245. #define D3DPTEXTURECAPS_SQUAREONLY 0x00000020L /* Only square textures are supported */
  246. #define D3DCREATE_MULTITHREADED 0x00000004L
  247. #define D3DDEVCAPS_HWTRANSFORMANDLIGHT 0x00010000L /* Device can support transformation and lighting in hardware and DRAWPRIMITIVES2EX must be also */
  248. #define D3DPTFILTERCAPS_MINFANISOTROPIC 0x00000400L
  249. #define D3DPTFILTERCAPS_MAGFANISOTROPIC 0x04000000L
  250. #define D3DPTEXTURECAPS_CUBEMAP 0x00000800L /* Device can do cubemap textures */
  251. #define D3DPTEXTURECAPS_POW2 0x00000002L /* Power-of-2 texture dimensions are required - applies to non-Cube/Volume textures only. */
  252. #define D3DPTEXTURECAPS_NONPOW2CONDITIONAL 0x00000100L
  253. #define D3DPTEXTURECAPS_PROJECTED 0x00000400L /* Device can do D3DTTFF_PROJECTED */
  254. #define D3DTEXOPCAPS_ADD 0x00000040L
  255. #define D3DTEXOPCAPS_MODULATE2X 0x00000010L
  256. #define D3DPRASTERCAPS_DEPTHBIAS 0x04000000L
  257. #define D3DPRASTERCAPS_SLOPESCALEDEPTHBIAS 0x02000000L
  258. #define D3DVTXPCAPS_TEXGEN_SPHEREMAP 0x00000100L /* device supports D3DTSS_TCI_SPHEREMAP */
  259. #define D3DCAPS2_DYNAMICTEXTURES 0x20000000L
  260. // The following usages are valid only for querying CheckDeviceFormat
  261. #define D3DUSAGE_QUERY_SRGBREAD (0x00010000L)
  262. #define D3DUSAGE_QUERY_FILTER (0x00020000L)
  263. #define D3DUSAGE_QUERY_SRGBWRITE (0x00040000L)
  264. #define D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING (0x00080000L)
  265. #define D3DUSAGE_QUERY_VERTEXTEXTURE (0x00100000L)
  266. /* Usages for Vertex/Index buffers */
  267. #define D3DUSAGE_WRITEONLY (0x00000008L)
  268. #define D3DUSAGE_SOFTWAREPROCESSING (0x00000010L)
  269. #define D3DUSAGE_DONOTCLIP (0x00000020L)
  270. #define D3DUSAGE_POINTS (0x00000040L)
  271. #define D3DUSAGE_RTPATCHES (0x00000080L)
  272. #define D3DUSAGE_NPATCHES (0x00000100L)
  273. // Flags field for GetData
  274. #define D3DGETDATA_FLUSH (1 << 0) // Tells the runtime to flush if the query is outstanding.
  275. #define D3DFVF_XYZ 0x002
  276. #define D3DTA_SELECTMASK 0x0000000f // mask for arg selector
  277. #define D3DTA_DIFFUSE 0x00000000 // select diffuse color (read only)
  278. #define D3DTA_CURRENT 0x00000001 // select stage destination register (read/write)
  279. #define D3DTA_TEXTURE 0x00000002 // select texture color (read only)
  280. #define D3DTA_TFACTOR 0x00000003 // select D3DRS_TEXTUREFACTOR (read only)
  281. #define D3DTA_SPECULAR 0x00000004 // select specular color (read only)
  282. #define D3DTA_TEMP 0x00000005 // select temporary register color (read/write)
  283. #define D3DTA_CONSTANT 0x00000006 // select texture stage constant
  284. #define D3DTA_COMPLEMENT 0x00000010 // take 1.0 - x (read modifier)
  285. #define D3DTA_ALPHAREPLICATE 0x00000020 // replicate alpha to color components (read modifier)
  286. #define D3DUSAGE_RENDERTARGET (0x00000001L)
  287. #define D3DUSAGE_QUERY_VERTEXTEXTURE (0x00100000L)
  288. #define D3DUSAGE_QUERY_FILTER (0x00020000L)
  289. #define D3DUSAGE_DEPTHSTENCIL (0x00000002L)
  290. #define D3DUSAGE_WRITEONLY (0x00000008L)
  291. #define D3DUSAGE_SOFTWAREPROCESSING (0x00000010L)
  292. #define D3DUSAGE_DYNAMIC (0x00000200L)
  293. #define D3DUSAGE_EDGE_DMA_INPUT (0x80000000L)
  294. #define D3DSI_INSTLENGTH_MASK 0x0F000000
  295. #define D3DSI_INSTLENGTH_SHIFT 24
  296. #define D3DSP_TEXTURETYPE_SHIFT 27
  297. #define D3DSP_REGTYPE_SHIFT 28
  298. #define D3DSP_REGTYPE_SHIFT2 8
  299. #define D3DSP_REGTYPE_MASK 0x70000000
  300. #define D3DSP_REGTYPE_MASK2 0x00001800
  301. #define D3DSP_REGNUM_MASK 0x000007FF
  302. #define D3DSP_DSTMOD_SHIFT 20
  303. #define D3DSP_DSTMOD_MASK 0x00F00000
  304. #define D3DSPDM_MSAMPCENTROID (4<<D3DSP_DSTMOD_SHIFT) // Relevant to multisampling only:
  305. // When the pixel center is not covered, sample
  306. // attribute or compute gradients/LOD
  307. // using multisample "centroid" location.
  308. // "Centroid" is some location within the covered
  309. // region of the pixel.
  310. #define D3DXSHADER_DEBUG (1 << 0)
  311. #define D3DXSHADER_AVOID_FLOW_CONTROL (1 << 9)
  312. #define D3DLOCK_READONLY 0x00000010L
  313. #define D3DLOCK_DISCARD 0x00002000L
  314. #define D3DLOCK_NOOVERWRITE 0x00001000L
  315. #define D3DLOCK_NOSYSLOCK 0x00000800L
  316. #define D3DLOCK_NO_DIRTY_UPDATE 0x00008000L
  317. #define D3DDMAPSAMPLER 256
  318. #define D3DVERTEXTEXTURESAMPLER0 (D3DDMAPSAMPLER+1)
  319. #define D3DSP_SRCMOD_SHIFT 24
  320. #define D3DCOLOR_ARGB(a,r,g,b) \
  321. ((D3DCOLOR)((((a)&0xff)<<24)|(((r)&0xff)<<16)|(((g)&0xff)<<8)|((b)&0xff)))
  322. #define D3DCOLOR_RGBA(r,g,b,a) D3DCOLOR_ARGB(a,r,g,b)
  323. #define D3DCOLOR_XRGB(r,g,b) D3DCOLOR_ARGB(0xff,r,g,b)
  324. // maps floating point channels (0.f to 1.f range) to D3DCOLOR
  325. #define D3DCOLOR_COLORVALUE(r,g,b,a) \
  326. D3DCOLOR_RGBA((DWORD)((r)*255.f),(DWORD)((g)*255.f),(DWORD)((b)*255.f),(DWORD)((a)*255.f))
  327. #define D3DDECL_END() {0xFF,0,D3DDECLTYPE_UNUSED,0,0,0}
  328. #define D3DSP_DCL_USAGEINDEX_SHIFT 16
  329. #define D3DSP_DCL_USAGEINDEX_MASK 0x000f0000
  330. // Bit masks for destination parameter modifiers
  331. #define D3DSPDM_NONE (0<<D3DSP_DSTMOD_SHIFT) // nop
  332. #define D3DSPDM_SATURATE (1<<D3DSP_DSTMOD_SHIFT) // clamp to 0. to 1. range
  333. #define D3DSPDM_PARTIALPRECISION (2<<D3DSP_DSTMOD_SHIFT) // Partial precision hint
  334. #define D3DSPDM_MSAMPCENTROID (4<<D3DSP_DSTMOD_SHIFT) // Relevant to multisampling only:
  335. // When the pixel center is not covered, sample
  336. // attribute or compute gradients/LOD
  337. // using multisample "centroid" location.
  338. // "Centroid" is some location within the covered
  339. // region of the pixel.
  340. // Value when there is no swizzle (X is taken from X, Y is taken from Y,
  341. // Z is taken from Z, W is taken from W
  342. //
  343. #define D3DVS_NOSWIZZLE (D3DVS_X_X | D3DVS_Y_Y | D3DVS_Z_Z | D3DVS_W_W)
  344. // extract major/minor from version cap
  345. #define D3DSHADER_VERSION_MAJOR(_Version) (((_Version)>>8)&0xFF)
  346. #define D3DSHADER_VERSION_MINOR(_Version) (((_Version)>>0)&0xFF)
  347. #define D3DSHADER_ADDRESSMODE_SHIFT 13
  348. #define D3DSHADER_ADDRESSMODE_MASK (1 << D3DSHADER_ADDRESSMODE_SHIFT)
  349. #define D3DPS_END() 0x0000FFFF
  350. // ps_2_0 texld controls
  351. #define D3DSI_TEXLD_PROJECT (0x01 << D3DSP_OPCODESPECIFICCONTROL_SHIFT)
  352. #define D3DSI_TEXLD_BIAS (0x02 << D3DSP_OPCODESPECIFICCONTROL_SHIFT)
  353. // destination parameter write mask
  354. #define D3DSP_WRITEMASK_0 0x00010000 // Component 0 (X;Red)
  355. #define D3DSP_WRITEMASK_1 0x00020000 // Component 1 (Y;Green)
  356. #define D3DSP_WRITEMASK_2 0x00040000 // Component 2 (Z;Blue)
  357. #define D3DSP_WRITEMASK_3 0x00080000 // Component 3 (W;Alpha)
  358. #define D3DSP_WRITEMASK_ALL 0x000F0000 // All Components
  359. #define D3DVS_SWIZZLE_SHIFT 16
  360. #define D3DVS_SWIZZLE_MASK 0x00FF0000
  361. // The following bits define where to take component X from:
  362. #define D3DVS_X_X (0 << D3DVS_SWIZZLE_SHIFT)
  363. #define D3DVS_X_Y (1 << D3DVS_SWIZZLE_SHIFT)
  364. #define D3DVS_X_Z (2 << D3DVS_SWIZZLE_SHIFT)
  365. #define D3DVS_X_W (3 << D3DVS_SWIZZLE_SHIFT)
  366. // The following bits define where to take component Y from:
  367. #define D3DVS_Y_X (0 << (D3DVS_SWIZZLE_SHIFT + 2))
  368. #define D3DVS_Y_Y (1 << (D3DVS_SWIZZLE_SHIFT + 2))
  369. #define D3DVS_Y_Z (2 << (D3DVS_SWIZZLE_SHIFT + 2))
  370. #define D3DVS_Y_W (3 << (D3DVS_SWIZZLE_SHIFT + 2))
  371. // The following bits define where to take component Z from:
  372. #define D3DVS_Z_X (0 << (D3DVS_SWIZZLE_SHIFT + 4))
  373. #define D3DVS_Z_Y (1 << (D3DVS_SWIZZLE_SHIFT + 4))
  374. #define D3DVS_Z_Z (2 << (D3DVS_SWIZZLE_SHIFT + 4))
  375. #define D3DVS_Z_W (3 << (D3DVS_SWIZZLE_SHIFT + 4))
  376. // The following bits define where to take component W from:
  377. #define D3DVS_W_X (0 << (D3DVS_SWIZZLE_SHIFT + 6))
  378. #define D3DVS_W_Y (1 << (D3DVS_SWIZZLE_SHIFT + 6))
  379. #define D3DVS_W_Z (2 << (D3DVS_SWIZZLE_SHIFT + 6))
  380. #define D3DVS_W_W (3 << (D3DVS_SWIZZLE_SHIFT + 6))
  381. // source parameter modifiers
  382. #define D3DSP_SRCMOD_SHIFT 24
  383. #define D3DSP_SRCMOD_MASK 0x0F000000
  384. // Forward declarations
  385. struct IDirect3DSurface9;
  386. struct IDirect3DDevice9;
  387. struct IDirect3DCubeTexture9;
  388. struct IDirect3DVertexDeclaration9;
  389. struct IDirect3DQuery9;
  390. struct IDirect3DVertexBuffer9;
  391. //--------------------------------------------------------------------------------------------------
  392. // ENUMS
  393. //--------------------------------------------------------------------------------------------------
  394. typedef enum _D3DSHADER_PARAM_SRCMOD_TYPE
  395. {
  396. D3DSPSM_NONE = 0<<D3DSP_SRCMOD_SHIFT, // nop
  397. D3DSPSM_NEG = 1<<D3DSP_SRCMOD_SHIFT, // negate
  398. D3DSPSM_BIAS = 2<<D3DSP_SRCMOD_SHIFT, // bias
  399. D3DSPSM_BIASNEG = 3<<D3DSP_SRCMOD_SHIFT, // bias and negate
  400. D3DSPSM_SIGN = 4<<D3DSP_SRCMOD_SHIFT, // sign
  401. D3DSPSM_SIGNNEG = 5<<D3DSP_SRCMOD_SHIFT, // sign and negate
  402. D3DSPSM_COMP = 6<<D3DSP_SRCMOD_SHIFT, // complement
  403. D3DSPSM_X2 = 7<<D3DSP_SRCMOD_SHIFT, // *2
  404. D3DSPSM_X2NEG = 8<<D3DSP_SRCMOD_SHIFT, // *2 and negate
  405. D3DSPSM_DZ = 9<<D3DSP_SRCMOD_SHIFT, // divide through by z component
  406. D3DSPSM_DW = 10<<D3DSP_SRCMOD_SHIFT, // divide through by w component
  407. D3DSPSM_ABS = 11<<D3DSP_SRCMOD_SHIFT, // abs()
  408. D3DSPSM_ABSNEG = 12<<D3DSP_SRCMOD_SHIFT, // -abs()
  409. D3DSPSM_NOT = 13<<D3DSP_SRCMOD_SHIFT, // for predicate register: "!p0"
  410. D3DSPSM_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum
  411. } D3DSHADER_PARAM_SRCMOD_TYPE;
  412. typedef enum _D3DSAMPLER_TEXTURE_TYPE
  413. {
  414. D3DSTT_UNKNOWN = 0<<D3DSP_TEXTURETYPE_SHIFT, // uninitialized value
  415. D3DSTT_2D = 2<<D3DSP_TEXTURETYPE_SHIFT, // dcl_2d s# (for declaring a 2-D texture)
  416. D3DSTT_CUBE = 3<<D3DSP_TEXTURETYPE_SHIFT, // dcl_cube s# (for declaring a cube texture)
  417. D3DSTT_VOLUME = 4<<D3DSP_TEXTURETYPE_SHIFT, // dcl_volume s# (for declaring a volume texture)
  418. D3DSTT_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum
  419. } D3DSAMPLER_TEXTURE_TYPE;
  420. typedef enum _D3DSHADER_INSTRUCTION_OPCODE_TYPE
  421. {
  422. D3DSIO_NOP = 0,
  423. D3DSIO_MOV ,
  424. D3DSIO_ADD ,
  425. D3DSIO_SUB ,
  426. D3DSIO_MAD ,
  427. D3DSIO_MUL ,
  428. D3DSIO_RCP ,
  429. D3DSIO_RSQ ,
  430. D3DSIO_DP3 ,
  431. D3DSIO_DP4 ,
  432. D3DSIO_MIN ,
  433. D3DSIO_MAX ,
  434. D3DSIO_SLT ,
  435. D3DSIO_SGE ,
  436. D3DSIO_EXP ,
  437. D3DSIO_LOG ,
  438. D3DSIO_LIT ,
  439. D3DSIO_DST ,
  440. D3DSIO_LRP ,
  441. D3DSIO_FRC ,
  442. D3DSIO_M4x4 ,
  443. D3DSIO_M4x3 ,
  444. D3DSIO_M3x4 ,
  445. D3DSIO_M3x3 ,
  446. D3DSIO_M3x2 ,
  447. D3DSIO_CALL ,
  448. D3DSIO_CALLNZ ,
  449. D3DSIO_LOOP ,
  450. D3DSIO_RET ,
  451. D3DSIO_ENDLOOP ,
  452. D3DSIO_LABEL ,
  453. D3DSIO_DCL ,
  454. D3DSIO_POW ,
  455. D3DSIO_CRS ,
  456. D3DSIO_SGN ,
  457. D3DSIO_ABS ,
  458. D3DSIO_NRM ,
  459. D3DSIO_SINCOS ,
  460. D3DSIO_REP ,
  461. D3DSIO_ENDREP ,
  462. D3DSIO_IF ,
  463. D3DSIO_IFC ,
  464. D3DSIO_ELSE ,
  465. D3DSIO_ENDIF ,
  466. D3DSIO_BREAK ,
  467. D3DSIO_BREAKC ,
  468. D3DSIO_MOVA ,
  469. D3DSIO_DEFB ,
  470. D3DSIO_DEFI ,
  471. D3DSIO_TEXCOORD = 64,
  472. D3DSIO_TEXKILL ,
  473. D3DSIO_TEX ,
  474. D3DSIO_TEXBEM ,
  475. D3DSIO_TEXBEML ,
  476. D3DSIO_TEXREG2AR ,
  477. D3DSIO_TEXREG2GB ,
  478. D3DSIO_TEXM3x2PAD ,
  479. D3DSIO_TEXM3x2TEX ,
  480. D3DSIO_TEXM3x3PAD ,
  481. D3DSIO_TEXM3x3TEX ,
  482. D3DSIO_RESERVED0 ,
  483. D3DSIO_TEXM3x3SPEC ,
  484. D3DSIO_TEXM3x3VSPEC ,
  485. D3DSIO_EXPP ,
  486. D3DSIO_LOGP ,
  487. D3DSIO_CND ,
  488. D3DSIO_DEF ,
  489. D3DSIO_TEXREG2RGB ,
  490. D3DSIO_TEXDP3TEX ,
  491. D3DSIO_TEXM3x2DEPTH ,
  492. D3DSIO_TEXDP3 ,
  493. D3DSIO_TEXM3x3 ,
  494. D3DSIO_TEXDEPTH ,
  495. D3DSIO_CMP ,
  496. D3DSIO_BEM ,
  497. D3DSIO_DP2ADD ,
  498. D3DSIO_DSX ,
  499. D3DSIO_DSY ,
  500. D3DSIO_TEXLDD ,
  501. D3DSIO_SETP ,
  502. D3DSIO_TEXLDL ,
  503. D3DSIO_BREAKP ,
  504. D3DSIO_PHASE = 0xFFFD,
  505. D3DSIO_COMMENT = 0xFFFE,
  506. D3DSIO_END = 0xFFFF,
  507. D3DSIO_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum
  508. } D3DSHADER_INSTRUCTION_OPCODE_TYPE;
  509. typedef enum _D3DVS_RASTOUT_OFFSETS
  510. {
  511. D3DSRO_POSITION = 0,
  512. D3DSRO_FOG,
  513. D3DSRO_POINT_SIZE,
  514. D3DSRO_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum
  515. } D3DVS_RASTOUT_OFFSETS;
  516. /* SwapEffects */
  517. typedef enum _D3DSWAPEFFECT
  518. {
  519. D3DSWAPEFFECT_DISCARD = 1,
  520. D3DSWAPEFFECT_COPY = 3,
  521. D3DSWAPEFFECT_FORCE_DWORD = 0x7fffffff
  522. } D3DSWAPEFFECT;
  523. typedef enum _D3DRESOURCETYPE {
  524. D3DRTYPE_SURFACE = 1,
  525. D3DRTYPE_TEXTURE = 3,
  526. D3DRTYPE_VOLUMETEXTURE = 4,
  527. D3DRTYPE_CUBETEXTURE = 5,
  528. D3DRTYPE_VERTEXBUFFER = 6,
  529. D3DRTYPE_INDEXBUFFER = 7,
  530. D3DRTYPE_FORCE_DWORD = 0x7fffffff
  531. } D3DRESOURCETYPE;
  532. typedef enum _D3DDEVTYPE
  533. {
  534. D3DDEVTYPE_HAL = 1,
  535. D3DDEVTYPE_REF = 2,
  536. D3DDEVTYPE_FORCE_DWORD = 0x7fffffff
  537. } D3DDEVTYPE;
  538. typedef enum _D3DSTENCILOP {
  539. D3DSTENCILOP_KEEP = 1,
  540. D3DSTENCILOP_ZERO = 2,
  541. D3DSTENCILOP_REPLACE = 3,
  542. D3DSTENCILOP_INCRSAT = 4,
  543. D3DSTENCILOP_DECRSAT = 5,
  544. D3DSTENCILOP_INVERT = 6,
  545. D3DSTENCILOP_INCR = 7,
  546. D3DSTENCILOP_DECR = 8,
  547. D3DSTENCILOP_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
  548. } D3DSTENCILOP;
  549. typedef enum _D3DPATCHEDGESTYLE
  550. {
  551. D3DPATCHEDGE_DISCRETE = 0,
  552. D3DPATCHEDGE_CONTINUOUS = 1,
  553. D3DPATCHEDGE_FORCE_DWORD = 0x7fffffff,
  554. } D3DPATCHEDGESTYLE;
  555. /* Debug monitor tokens (DEBUG only)
  556. Note that if D3DRS_DEBUGMONITORTOKEN is set, the call is treated as
  557. passing a token to the debug monitor. For example, if, after passing
  558. D3DDMT_ENABLE/DISABLE to D3DRS_DEBUGMONITORTOKEN other token values
  559. are passed in, the enabled/disabled state of the debug
  560. monitor will still persist.
  561. The debug monitor defaults to enabled.
  562. Calling GetRenderState on D3DRS_DEBUGMONITORTOKEN is not of any use.
  563. */
  564. typedef enum _D3DDEBUGMONITORTOKENS {
  565. D3DDMT_ENABLE = 0, // enable debug monitor
  566. } D3DDEBUGMONITORTOKENS;
  567. typedef enum _D3DDEGREETYPE
  568. {
  569. D3DDEGREE_LINEAR = 1,
  570. D3DDEGREE_QUADRATIC = 2,
  571. D3DDEGREE_CUBIC = 3,
  572. D3DDEGREE_FORCE_DWORD = 0x7fffffff,
  573. } D3DDEGREETYPE;
  574. typedef enum _D3DBLENDOP {
  575. D3DBLENDOP_ADD = 1,
  576. D3DBLENDOP_SUBTRACT = 2,
  577. D3DBLENDOP_REVSUBTRACT = 3,
  578. D3DBLENDOP_MIN = 4,
  579. D3DBLENDOP_MAX = 5,
  580. D3DBLENDOP_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
  581. } D3DBLENDOP;
  582. typedef enum _D3DMULTISAMPLE_TYPE
  583. {
  584. D3DMULTISAMPLE_NONE = 0,
  585. D3DMULTISAMPLE_NONMASKABLE = 1,
  586. D3DMULTISAMPLE_2_SAMPLES = 2,
  587. D3DMULTISAMPLE_3_SAMPLES = 3,
  588. D3DMULTISAMPLE_4_SAMPLES = 4,
  589. D3DMULTISAMPLE_5_SAMPLES = 5,
  590. D3DMULTISAMPLE_6_SAMPLES = 6,
  591. D3DMULTISAMPLE_7_SAMPLES = 7,
  592. D3DMULTISAMPLE_8_SAMPLES = 8,
  593. D3DMULTISAMPLE_9_SAMPLES = 9,
  594. D3DMULTISAMPLE_10_SAMPLES = 10,
  595. D3DMULTISAMPLE_11_SAMPLES = 11,
  596. D3DMULTISAMPLE_12_SAMPLES = 12,
  597. D3DMULTISAMPLE_13_SAMPLES = 13,
  598. D3DMULTISAMPLE_14_SAMPLES = 14,
  599. D3DMULTISAMPLE_15_SAMPLES = 15,
  600. D3DMULTISAMPLE_16_SAMPLES = 16,
  601. D3DMULTISAMPLE_FORCE_DWORD = 0x7fffffff
  602. } D3DMULTISAMPLE_TYPE;
  603. /* Pool types */
  604. typedef enum _D3DPOOL {
  605. D3DPOOL_DEFAULT = 0,
  606. D3DPOOL_MANAGED = 1,
  607. D3DPOOL_SYSTEMMEM = 2,
  608. D3DPOOL_SCRATCH = 3,
  609. D3DPOOL_FORCE_DWORD = 0x7fffffff
  610. } D3DPOOL;
  611. typedef enum _D3DQUERYTYPE {
  612. D3DQUERYTYPE_RESOURCEMANAGER = 5, /* D3DISSUE_END */
  613. D3DQUERYTYPE_EVENT = 8, /* D3DISSUE_END */
  614. D3DQUERYTYPE_OCCLUSION = 9, /* D3DISSUE_BEGIN, D3DISSUE_END */
  615. D3DQUERYTYPE_TIMESTAMP = 10, /* D3DISSUE_END */
  616. D3DQUERYTYPE_TIMESTAMPFREQ = 12, /* D3DISSUE_END */
  617. D3DQUERYTYPE_INTERFACETIMINGS = 14, /* D3DISSUE_BEGIN, D3DISSUE_END */
  618. D3DQUERYTYPE_PIXELTIMINGS = 16, /* D3DISSUE_BEGIN, D3DISSUE_END */
  619. D3DQUERYTYPE_CACHEUTILIZATION = 18, /* D3DISSUE_BEGIN, D3DISSUE_END */
  620. } D3DQUERYTYPE;
  621. typedef enum _D3DRENDERSTATETYPE {
  622. D3DRS_NULL = 0, /* fix compiler warning; 0 may be used as terminator */
  623. D3DRS_ZENABLE = 7, /* D3DZBUFFERTYPE (or TRUE/FALSE for legacy) */
  624. D3DRS_FILLMODE = 8, /* D3DFILLMODE */
  625. D3DRS_SHADEMODE = 9, /* D3DSHADEMODE */
  626. D3DRS_ZWRITEENABLE = 14, /* TRUE to enable z writes */
  627. D3DRS_ALPHATESTENABLE = 15, /* TRUE to enable alpha tests */
  628. D3DRS_LASTPIXEL = 16, /* TRUE for last-pixel on lines */
  629. D3DRS_SRCBLEND = 19, /* D3DBLEND */
  630. D3DRS_DESTBLEND = 20, /* D3DBLEND */
  631. D3DRS_CULLMODE = 22, /* D3DCULL */
  632. D3DRS_ZFUNC = 23, /* D3DCMPFUNC */
  633. D3DRS_ALPHAREF = 24, /* D3DFIXED */
  634. D3DRS_ALPHAFUNC = 25, /* D3DCMPFUNC */
  635. D3DRS_DITHERENABLE = 26, /* TRUE to enable dithering */
  636. D3DRS_ALPHABLENDENABLE = 27, /* TRUE to enable alpha blending */
  637. D3DRS_FOGENABLE = 28, /* TRUE to enable fog blending */
  638. D3DRS_SPECULARENABLE = 29, /* TRUE to enable specular */
  639. D3DRS_FOGCOLOR = 34, /* D3DCOLOR */
  640. D3DRS_FOGTABLEMODE = 35, /* D3DFOGMODE */
  641. D3DRS_FOGSTART = 36, /* Fog start (for both vertex and pixel fog) */
  642. D3DRS_FOGEND = 37, /* Fog end */
  643. D3DRS_FOGDENSITY = 38, /* Fog density */
  644. D3DRS_RANGEFOGENABLE = 48, /* Enables range-based fog */
  645. D3DRS_STENCILENABLE = 52, /* BOOL enable/disable stenciling */
  646. D3DRS_STENCILFAIL = 53, /* D3DSTENCILOP to do if stencil test fails */
  647. D3DRS_STENCILZFAIL = 54, /* D3DSTENCILOP to do if stencil test passes and Z test fails */
  648. D3DRS_STENCILPASS = 55, /* D3DSTENCILOP to do if both stencil and Z tests pass */
  649. D3DRS_STENCILFUNC = 56, /* D3DCMPFUNC fn. Stencil Test passes if ((ref & mask) stencilfn (stencil & mask)) is true */
  650. D3DRS_STENCILREF = 57, /* Reference value used in stencil test */
  651. D3DRS_STENCILMASK = 58, /* Mask value used in stencil test */
  652. D3DRS_STENCILWRITEMASK = 59, /* Write mask applied to values written to stencil buffer */
  653. D3DRS_TEXTUREFACTOR = 60, /* D3DCOLOR used for multi-texture blend */
  654. D3DRS_WRAP0 = 128, /* wrap for 1st texture coord. set */
  655. D3DRS_WRAP1 = 129, /* wrap for 2nd texture coord. set */
  656. D3DRS_WRAP2 = 130, /* wrap for 3rd texture coord. set */
  657. D3DRS_WRAP3 = 131, /* wrap for 4th texture coord. set */
  658. D3DRS_WRAP4 = 132, /* wrap for 5th texture coord. set */
  659. D3DRS_WRAP5 = 133, /* wrap for 6th texture coord. set */
  660. D3DRS_WRAP6 = 134, /* wrap for 7th texture coord. set */
  661. D3DRS_WRAP7 = 135, /* wrap for 8th texture coord. set */
  662. D3DRS_CLIPPING = 136,
  663. D3DRS_LIGHTING = 137,
  664. D3DRS_AMBIENT = 139,
  665. D3DRS_FOGVERTEXMODE = 140,
  666. D3DRS_COLORVERTEX = 141,
  667. D3DRS_LOCALVIEWER = 142,
  668. D3DRS_NORMALIZENORMALS = 143,
  669. D3DRS_DIFFUSEMATERIALSOURCE = 145,
  670. D3DRS_SPECULARMATERIALSOURCE = 146,
  671. D3DRS_AMBIENTMATERIALSOURCE = 147,
  672. D3DRS_EMISSIVEMATERIALSOURCE = 148,
  673. D3DRS_VERTEXBLEND = 151,
  674. D3DRS_CLIPPLANEENABLE = 152,
  675. D3DRS_POINTSIZE = 154, /* float point size */
  676. D3DRS_POINTSIZE_MIN = 155, /* float point size min threshold */
  677. D3DRS_POINTSPRITEENABLE = 156, /* BOOL point texture coord control */
  678. D3DRS_POINTSCALEENABLE = 157, /* BOOL point size scale enable */
  679. D3DRS_POINTSCALE_A = 158, /* float point attenuation A value */
  680. D3DRS_POINTSCALE_B = 159, /* float point attenuation B value */
  681. D3DRS_POINTSCALE_C = 160, /* float point attenuation C value */
  682. D3DRS_MULTISAMPLEANTIALIAS = 161, // BOOL - set to do FSAA with multisample buffer
  683. D3DRS_MULTISAMPLEMASK = 162, // DWORD - per-sample enable/disable
  684. D3DRS_PATCHEDGESTYLE = 163, // Sets whether patch edges will use float style tessellation
  685. D3DRS_DEBUGMONITORTOKEN = 165, // DEBUG ONLY - token to debug monitor
  686. D3DRS_POINTSIZE_MAX = 166, /* float point size max threshold */
  687. D3DRS_INDEXEDVERTEXBLENDENABLE = 167,
  688. D3DRS_COLORWRITEENABLE = 168, // per-channel write enable
  689. D3DRS_TWEENFACTOR = 170, // float tween factor
  690. D3DRS_BLENDOP = 171, // D3DBLENDOP setting
  691. D3DRS_POSITIONDEGREE = 172, // NPatch position interpolation degree. D3DDEGREE_LINEAR or D3DDEGREE_CUBIC (default)
  692. D3DRS_NORMALDEGREE = 173, // NPatch normal interpolation degree. D3DDEGREE_LINEAR (default) or D3DDEGREE_QUADRATIC
  693. D3DRS_SCISSORTESTENABLE = 174,
  694. D3DRS_SLOPESCALEDEPTHBIAS = 175,
  695. D3DRS_ANTIALIASEDLINEENABLE = 176,
  696. D3DRS_MINTESSELLATIONLEVEL = 178,
  697. D3DRS_MAXTESSELLATIONLEVEL = 179,
  698. D3DRS_ADAPTIVETESS_X = 180,
  699. D3DRS_ADAPTIVETESS_Y = 181,
  700. D3DRS_ADAPTIVETESS_Z = 182,
  701. D3DRS_ADAPTIVETESS_W = 183,
  702. D3DRS_ENABLEADAPTIVETESSELLATION = 184,
  703. D3DRS_TWOSIDEDSTENCILMODE = 185, /* BOOL enable/disable 2 sided stenciling */
  704. D3DRS_CCW_STENCILFAIL = 186, /* D3DSTENCILOP to do if ccw stencil test fails */
  705. D3DRS_CCW_STENCILZFAIL = 187, /* D3DSTENCILOP to do if ccw stencil test passes and Z test fails */
  706. D3DRS_CCW_STENCILPASS = 188, /* D3DSTENCILOP to do if both ccw stencil and Z tests pass */
  707. D3DRS_CCW_STENCILFUNC = 189, /* D3DCMPFUNC fn. ccw Stencil Test passes if ((ref & mask) stencilfn (stencil & mask)) is true */
  708. D3DRS_COLORWRITEENABLE1 = 190, /* Additional ColorWriteEnables for the devices that support D3DPMISCCAPS_INDEPENDENTWRITEMASKS */
  709. D3DRS_COLORWRITEENABLE2 = 191, /* Additional ColorWriteEnables for the devices that support D3DPMISCCAPS_INDEPENDENTWRITEMASKS */
  710. D3DRS_COLORWRITEENABLE3 = 192, /* Additional ColorWriteEnables for the devices that support D3DPMISCCAPS_INDEPENDENTWRITEMASKS */
  711. D3DRS_BLENDFACTOR = 193, /* D3DCOLOR used for a constant blend factor during alpha blending for devices that support D3DPBLENDCAPS_BLENDFACTOR */
  712. D3DRS_SRGBWRITEENABLE = 194, /* Enable rendertarget writes to be DE-linearized to SRGB (for formats that expose D3DUSAGE_QUERY_SRGBWRITE) */
  713. D3DRS_DEPTHBIAS = 195,
  714. D3DRS_WRAP8 = 198, /* Additional wrap states for vs_3_0+ attributes with D3DDECLUSAGE_TEXCOORD */
  715. D3DRS_WRAP9 = 199,
  716. D3DRS_WRAP10 = 200,
  717. D3DRS_WRAP11 = 201,
  718. D3DRS_WRAP12 = 202,
  719. D3DRS_WRAP13 = 203,
  720. D3DRS_WRAP14 = 204,
  721. D3DRS_WRAP15 = 205,
  722. D3DRS_SEPARATEALPHABLENDENABLE = 206, /* TRUE to enable a separate blending function for the alpha channel */
  723. D3DRS_SRCBLENDALPHA = 207, /* SRC blend factor for the alpha channel when D3DRS_SEPARATEDESTALPHAENABLE is TRUE */
  724. D3DRS_DESTBLENDALPHA = 208, /* DST blend factor for the alpha channel when D3DRS_SEPARATEDESTALPHAENABLE is TRUE */
  725. D3DRS_BLENDOPALPHA = 209, /* Blending operation for the alpha channel when D3DRS_SEPARATEDESTALPHAENABLE is TRUE */
  726. D3DRS_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
  727. } D3DRENDERSTATETYPE;
  728. typedef enum _D3DCULL {
  729. D3DCULL_NONE = 1,
  730. D3DCULL_CW = 2,
  731. D3DCULL_CCW = 3,
  732. D3DCULL_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
  733. } D3DCULL;
  734. typedef enum _D3DTEXTUREFILTERTYPE
  735. {
  736. D3DTEXF_NONE = 0, // filtering disabled (valid for mip filter only)
  737. D3DTEXF_POINT = 1, // nearest
  738. D3DTEXF_LINEAR = 2, // linear interpolation
  739. D3DTEXF_ANISOTROPIC = 3, // anisotropic
  740. D3DTEXF_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum
  741. } D3DTEXTUREFILTERTYPE;
  742. typedef enum _D3DBACKBUFFER_TYPE
  743. {
  744. D3DBACKBUFFER_TYPE_MONO = 0,
  745. D3DBACKBUFFER_TYPE_FORCE_DWORD = 0x7fffffff
  746. } D3DBACKBUFFER_TYPE;
  747. #define D3DTS_WORLDMATRIX(index) (D3DTRANSFORMSTATETYPE)(index + 256)
  748. #define D3DTS_WORLD D3DTS_WORLDMATRIX(0)
  749. #define D3DTS_WORLD1 D3DTS_WORLDMATRIX(1)
  750. #define D3DTS_WORLD2 D3DTS_WORLDMATRIX(2)
  751. #define D3DTS_WORLD3 D3DTS_WORLDMATRIX(3)
  752. typedef enum _D3DCMPFUNC {
  753. D3DCMP_NEVER = 1,
  754. D3DCMP_LESS = 2,
  755. D3DCMP_EQUAL = 3,
  756. D3DCMP_LESSEQUAL = 4,
  757. D3DCMP_GREATER = 5,
  758. D3DCMP_NOTEQUAL = 6,
  759. D3DCMP_GREATEREQUAL = 7,
  760. D3DCMP_ALWAYS = 8,
  761. D3DCMP_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
  762. } D3DCMPFUNC;
  763. typedef enum _D3DZBUFFERTYPE {
  764. D3DZB_FALSE = 0,
  765. D3DZB_TRUE = 1, // Z buffering
  766. D3DZB_USEW = 2, // W buffering
  767. D3DZB_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
  768. } D3DZBUFFERTYPE;
  769. typedef enum _D3DFILLMODE {
  770. D3DFILL_POINT = 1,
  771. D3DFILL_WIREFRAME = 2,
  772. D3DFILL_SOLID = 3,
  773. D3DFILL_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
  774. } D3DFILLMODE;
  775. typedef enum _D3DBLEND {
  776. D3DBLEND_ZERO = 1,
  777. D3DBLEND_ONE = 2,
  778. D3DBLEND_SRCCOLOR = 3,
  779. D3DBLEND_INVSRCCOLOR = 4,
  780. D3DBLEND_SRCALPHA = 5,
  781. D3DBLEND_INVSRCALPHA = 6,
  782. D3DBLEND_DESTALPHA = 7,
  783. D3DBLEND_INVDESTALPHA = 8,
  784. D3DBLEND_DESTCOLOR = 9,
  785. D3DBLEND_INVDESTCOLOR = 10,
  786. D3DBLEND_SRCALPHASAT = 11,
  787. D3DBLEND_BOTHSRCALPHA = 12,
  788. D3DBLEND_BOTHINVSRCALPHA = 13,
  789. D3DBLEND_BLENDFACTOR = 14, /* Only supported if D3DPBLENDCAPS_BLENDFACTOR is on */
  790. D3DBLEND_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
  791. } D3DBLEND;
  792. // Values for material source
  793. typedef enum _D3DMATERIALCOLORSOURCE
  794. {
  795. D3DMCS_MATERIAL = 0, // Color from material is used
  796. D3DMCS_COLOR1 = 1, // Diffuse vertex color is used
  797. D3DMCS_COLOR2 = 2, // Specular vertex color is used
  798. D3DMCS_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum
  799. } D3DMATERIALCOLORSOURCE;
  800. typedef enum _D3DCUBEMAP_FACES
  801. {
  802. D3DCUBEMAP_FACE_POSITIVE_Z = 4,
  803. D3DCUBEMAP_FACE_FORCE_DWORD = 0x7fffffff
  804. } D3DCUBEMAP_FACES;
  805. typedef enum _D3DTEXTURETRANSFORMFLAGS {
  806. D3DTTFF_DISABLE = 0, // texture coordinates are passed directly
  807. D3DTTFF_COUNT3 = 3, // rasterizer should expect 3-D texture coords
  808. D3DTTFF_PROJECTED = 256, // texcoords to be divided by COUNTth element
  809. D3DTTFF_FORCE_DWORD = 0x7fffffff,
  810. } D3DTEXTURETRANSFORMFLAGS;
  811. typedef enum _D3DTEXTUREADDRESS {
  812. D3DTADDRESS_WRAP = 1,
  813. D3DTADDRESS_CLAMP = 3,
  814. D3DTADDRESS_BORDER = 4,
  815. D3DTADDRESS_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
  816. } D3DTEXTUREADDRESS;
  817. typedef enum _D3DSHADEMODE {
  818. D3DSHADE_FLAT = 1,
  819. D3DSHADE_GOURAUD = 2,
  820. D3DSHADE_PHONG = 3,
  821. D3DSHADE_NONE = -1,
  822. D3DSHADE_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
  823. } D3DSHADEMODE;
  824. typedef enum _D3DFOGMODE {
  825. D3DFOG_NONE = 0,
  826. D3DFOG_LINEAR = 3,
  827. D3DFOG_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
  828. } D3DFOGMODE;
  829. typedef struct _D3DRECT {
  830. LONG x1;
  831. LONG y1;
  832. LONG x2;
  833. LONG y2;
  834. } D3DRECT;
  835. typedef enum _D3DSHADER_PARAM_REGISTER_TYPE
  836. {
  837. D3DSPR_TEMP = 0, // Temporary Register File
  838. D3DSPR_INPUT = 1, // Input Register File
  839. D3DSPR_CONST = 2, // Constant Register File
  840. D3DSPR_ADDR = 3, // Address Register (VS)
  841. D3DSPR_TEXTURE = 3, // Texture Register File (PS)
  842. D3DSPR_RASTOUT = 4, // Rasterizer Register File
  843. D3DSPR_ATTROUT = 5, // Attribute Output Register File
  844. D3DSPR_TEXCRDOUT = 6, // Texture Coordinate Output Register File
  845. D3DSPR_OUTPUT = 6, // Output register file for VS3.0+
  846. D3DSPR_CONSTINT = 7, // Constant Integer Vector Register File
  847. D3DSPR_COLOROUT = 8, // Color Output Register File
  848. D3DSPR_DEPTHOUT = 9, // Depth Output Register File
  849. D3DSPR_SAMPLER = 10, // Sampler State Register File
  850. D3DSPR_CONST2 = 11, // Constant Register File 2048 - 4095
  851. D3DSPR_CONST3 = 12, // Constant Register File 4096 - 6143
  852. D3DSPR_CONST4 = 13, // Constant Register File 6144 - 8191
  853. D3DSPR_CONSTBOOL = 14, // Constant Boolean register file
  854. D3DSPR_LOOP = 15, // Loop counter register file
  855. D3DSPR_TEMPFLOAT16 = 16, // 16-bit float temp register file
  856. D3DSPR_MISCTYPE = 17, // Miscellaneous (single) registers.
  857. D3DSPR_LABEL = 18, // Label
  858. D3DSPR_PREDICATE = 19, // Predicate register
  859. D3DSPR_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum
  860. } D3DSHADER_PARAM_REGISTER_TYPE;
  861. typedef struct _D3DMATRIX {
  862. union {
  863. struct {
  864. float _11, _12, _13, _14;
  865. float _21, _22, _23, _24;
  866. float _31, _32, _33, _34;
  867. float _41, _42, _43, _44;
  868. };
  869. float m[4][4];
  870. };
  871. } D3DMATRIX;
  872. typedef struct _D3DVERTEXBUFFER_DESC
  873. {
  874. D3DFORMAT Format;
  875. D3DRESOURCETYPE Type;
  876. DWORD Usage;
  877. D3DPOOL Pool;
  878. UINT Size;
  879. DWORD FVF;
  880. } D3DVERTEXBUFFER_DESC;
  881. class D3DXMATRIX : public D3DMATRIX
  882. {
  883. public:
  884. D3DXMATRIX operator*( const D3DXMATRIX &o ) const;
  885. operator FLOAT* ();
  886. float& operator()( int row, int column );
  887. const float& operator()( int row, int column ) const;
  888. };
  889. typedef DWORD D3DCOLOR;
  890. typedef enum _D3DSAMPLERSTATETYPE
  891. {
  892. D3DSAMP_ADDRESSU = 1, /* D3DTEXTUREADDRESS for U coordinate */
  893. D3DSAMP_ADDRESSV = 2, /* D3DTEXTUREADDRESS for V coordinate */
  894. D3DSAMP_ADDRESSW = 3, /* D3DTEXTUREADDRESS for W coordinate */
  895. D3DSAMP_BORDERCOLOR = 4, /* D3DCOLOR */
  896. D3DSAMP_MAGFILTER = 5, /* D3DTEXTUREFILTER filter to use for magnification */
  897. D3DSAMP_MINFILTER = 6, /* D3DTEXTUREFILTER filter to use for minification */
  898. D3DSAMP_MIPFILTER = 7, /* D3DTEXTUREFILTER filter to use between mipmaps during minification */
  899. D3DSAMP_MIPMAPLODBIAS = 8, /* float Mipmap LOD bias */
  900. D3DSAMP_MAXMIPLEVEL = 9, /* DWORD 0..(n-1) LOD index of largest map to use (0 == largest) */
  901. D3DSAMP_MAXANISOTROPY = 10, /* DWORD maximum anisotropy */
  902. D3DSAMP_SRGBTEXTURE = 11, /* Default = 0 (which means Gamma 1.0,
  903. no correction required.) else correct for
  904. Gamma = 2.2 */
  905. D3DSAMP_SHADOWFILTER = 12, /* Tells the sampler that it should be doing shadow compares */
  906. D3DSAMP_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
  907. } D3DSAMPLERSTATETYPE;
  908. typedef enum _D3DDECLTYPE
  909. {
  910. D3DDECLTYPE_FLOAT1 = 0, // 1D float expanded to (value, 0., 0., 1.)
  911. D3DDECLTYPE_FLOAT2 = 1, // 2D float expanded to (value, value, 0., 1.)
  912. D3DDECLTYPE_FLOAT3 = 2, // 3D float expanded to (value, value, value, 1.)
  913. D3DDECLTYPE_FLOAT4 = 3, // 4D float
  914. D3DDECLTYPE_D3DCOLOR = 4, // 4D packed unsigned bytes mapped to 0. to 1. range
  915. // Input is in D3DCOLOR format (ARGB) expanded to (R, G, B, A)
  916. D3DDECLTYPE_UBYTE4 = 5, // 4D unsigned byte
  917. D3DDECLTYPE_SHORT2 = 6, // 2D signed short expanded to (value, value, 0., 1.)
  918. D3DDECLTYPE_SHORT4 = 7, // 4D signed short
  919. // The following types are valid only with vertex shaders >= 2.0
  920. D3DDECLTYPE_UBYTE4N = 8, // Each of 4 bytes is normalized by dividing to 255.0
  921. D3DDECLTYPE_SHORT2N = 9, // 2D signed short normalized (v[0]/32767.0,v[1]/32767.0,0,1)
  922. D3DDECLTYPE_SHORT4N = 10, // 4D signed short normalized (v[0]/32767.0,v[1]/32767.0,v[2]/32767.0,v[3]/32767.0)
  923. D3DDECLTYPE_USHORT2N = 11, // 2D unsigned short normalized (v[0]/65535.0,v[1]/65535.0,0,1)
  924. D3DDECLTYPE_USHORT4N = 12, // 4D unsigned short normalized (v[0]/65535.0,v[1]/65535.0,v[2]/65535.0,v[3]/65535.0)
  925. D3DDECLTYPE_UDEC3 = 13, // 3D unsigned 10 10 10 format expanded to (value, value, value, 1)
  926. D3DDECLTYPE_DEC3N = 14, // 3D signed 10 10 10 format normalized and expanded to (v[0]/511.0, v[1]/511.0, v[2]/511.0, 1)
  927. D3DDECLTYPE_FLOAT16_2 = 15, // Two 16-bit floating point values, expanded to (value, value, 0, 1)
  928. D3DDECLTYPE_FLOAT16_4 = 16, // Four 16-bit floating point values
  929. D3DDECLTYPE_UNUSED = 17, // When the type field in a decl is unused.
  930. } D3DDECLTYPE;
  931. typedef enum _D3DDECLMETHOD
  932. {
  933. D3DDECLMETHOD_DEFAULT = 0,
  934. D3DDECLMETHOD_PARTIALU,
  935. D3DDECLMETHOD_PARTIALV,
  936. D3DDECLMETHOD_CROSSUV, // Normal
  937. D3DDECLMETHOD_UV,
  938. D3DDECLMETHOD_LOOKUP, // Lookup a displacement map
  939. D3DDECLMETHOD_LOOKUPPRESAMPLED, // Lookup a pre-sampled displacement map
  940. } D3DDECLMETHOD;
  941. typedef enum _D3DDECLUSAGE
  942. {
  943. D3DDECLUSAGE_POSITION = 0,
  944. D3DDECLUSAGE_BLENDWEIGHT = 1,
  945. D3DDECLUSAGE_BLENDINDICES = 2,
  946. D3DDECLUSAGE_NORMAL = 3,
  947. D3DDECLUSAGE_PSIZE = 4,
  948. D3DDECLUSAGE_TEXCOORD = 5,
  949. D3DDECLUSAGE_TANGENT = 6,
  950. D3DDECLUSAGE_BINORMAL = 7,
  951. D3DDECLUSAGE_TESSFACTOR = 8,
  952. D3DDECLUSAGE_PLUGH = 9, // mystery value
  953. D3DDECLUSAGE_COLOR = 10,
  954. D3DDECLUSAGE_FOG = 11,
  955. D3DDECLUSAGE_DEPTH = 12,
  956. D3DDECLUSAGE_SAMPLE = 13,
  957. } D3DDECLUSAGE;
  958. //--------------------------------------------------------------------------------------------------
  959. // Structures
  960. //--------------------------------------------------------------------------------------------------
  961. typedef struct D3DXPLANE
  962. {
  963. float& operator[]( int i );
  964. bool operator==( const D3DXPLANE &o );
  965. bool operator!=( const D3DXPLANE &o );
  966. operator float*();
  967. operator const float*() const;
  968. float a, b, c, d;
  969. } D3DXPLANE;
  970. typedef enum _D3DVERTEXBLENDFLAGS
  971. {
  972. D3DVBF_DISABLE = 0, // Disable vertex blending
  973. D3DVBF_1WEIGHTS = 1, // 2 matrix blending
  974. D3DVBF_2WEIGHTS = 2, // 3 matrix blending
  975. D3DVBF_3WEIGHTS = 3, // 4 matrix blending
  976. D3DVBF_TWEENING = 255, // blending using D3DRS_TWEENFACTOR
  977. D3DVBF_0WEIGHTS = 256, // one matrix is used with weight 1.0
  978. D3DVBF_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum
  979. } D3DVERTEXBLENDFLAGS;
  980. typedef struct _D3DINDEXBUFFER_DESC
  981. {
  982. D3DFORMAT Format;
  983. D3DRESOURCETYPE Type;
  984. DWORD Usage;
  985. D3DPOOL Pool;
  986. UINT Size;
  987. } D3DINDEXBUFFER_DESC;
  988. typedef struct _D3DVERTEXELEMENT9
  989. {
  990. WORD Stream; // Stream index
  991. WORD Offset; // Offset in the stream in bytes
  992. BYTE Type; // Data type
  993. BYTE Method; // Processing method
  994. BYTE Usage; // Semantics
  995. BYTE UsageIndex; // Semantic index
  996. } D3DVERTEXELEMENT9, *LPD3DVERTEXELEMENT9;
  997. // typedef enum D3DDECLUSAGE
  998. // {
  999. // D3DDECLUSAGE_POSITION = 0,
  1000. // D3DDECLUSAGE_BLENDWEIGHT = 1,
  1001. // D3DDECLUSAGE_BLENDINDICES = 2,
  1002. // D3DDECLUSAGE_NORMAL = 3,
  1003. // D3DDECLUSAGE_PSIZE = 4,
  1004. // D3DDECLUSAGE_TEXCOORD = 5,
  1005. // D3DDECLUSAGE_TANGENT = 6,
  1006. // D3DDECLUSAGE_BINORMAL = 7,
  1007. // D3DDECLUSAGE_TESSFACTOR = 8,
  1008. // D3DDECLUSAGE_POSITIONT = 9,
  1009. // D3DDECLUSAGE_COLOR = 10,
  1010. // D3DDECLUSAGE_FOG = 11,
  1011. // D3DDECLUSAGE_DEPTH = 12,
  1012. // D3DDECLUSAGE_SAMPLE = 13,
  1013. // } D3DDECLUSAGE, *LPD3DDECLUSAGE;
  1014. // Constants
  1015. //
  1016. // D3DDECLUSAGE_POSITION
  1017. // Position data ranging from (-1,-1) to (1,1). Use D3DDECLUSAGE_POSITION with
  1018. // a usage index of 0 to specify untransformed position for fixed function
  1019. // vertex processing and the n-patch tessellator. Use D3DDECLUSAGE_POSITION
  1020. // with a usage index of 1 to specify untransformed position in the fixed
  1021. // function vertex shader for vertex tweening.
  1022. //
  1023. // D3DDECLUSAGE_BLENDWEIGHT
  1024. // Blending weight data. Use D3DDECLUSAGE_BLENDWEIGHT with a usage index of 0
  1025. // to specify the blend weights used in indexed and nonindexed vertex
  1026. // blending.
  1027. //
  1028. // D3DDECLUSAGE_BLENDINDICES
  1029. // Blending indices data. Use D3DDECLUSAGE_BLENDINDICES with a usage index of
  1030. // 0 to specify matrix indices for indexed paletted skinning.
  1031. //
  1032. // D3DDECLUSAGE_NORMAL
  1033. // Vertex normal data. Use D3DDECLUSAGE_NORMAL with a usage index of 0 to
  1034. // specify vertex normals for fixed function vertex processing and the n-patch
  1035. // tessellator. Use D3DDECLUSAGE_NORMAL with a usage index of 1 to specify
  1036. // vertex normals for fixed function vertex processing for vertex tweening.
  1037. //
  1038. // D3DDECLUSAGE_PSIZE
  1039. // Point size data. Use D3DDECLUSAGE_PSIZE with a usage index of 0 to specify
  1040. // the point-size attribute used by the setup engine of the rasterizer to
  1041. // expand a point into a quad for the point-sprite functionality.
  1042. //
  1043. // D3DDECLUSAGE_TEXCOORD
  1044. // Texture coordinate data. Use D3DDECLUSAGE_TEXCOORD, n to specify texture
  1045. // coordinates in fixed function vertex processing and in pixel shaders prior
  1046. // to ps_3_0. These can be used to pass user defined data.
  1047. //
  1048. // D3DDECLUSAGE_TANGENT
  1049. // Vertex tangent data.
  1050. //
  1051. // D3DDECLUSAGE_BINORMAL
  1052. // Vertex binormal data.
  1053. //
  1054. // D3DDECLUSAGE_TESSFACTOR
  1055. // Single positive floating point value. Use D3DDECLUSAGE_TESSFACTOR with a
  1056. // usage index of 0 to specify a tessellation factor used in the tessellation
  1057. // unit to control the rate of tessellation. For more information about the
  1058. // data type, see D3DDECLTYPE_FLOAT1.
  1059. //
  1060. // D3DDECLUSAGE_POSITIONT
  1061. // Vertex data contains transformed position data ranging from (0,0) to
  1062. // (viewport width, viewport height). Use D3DDECLUSAGE_POSITIONT with a usage
  1063. // index of 0 to specify transformed position. When a declaration containing
  1064. // this is set, the pipeline does not perform vertex processing.
  1065. //
  1066. // D3DDECLUSAGE_COLOR
  1067. // Vertex data contains diffuse or specular color. Use D3DDECLUSAGE_COLOR with
  1068. // a usage index of 0 to specify the diffuse color in the fixed function
  1069. // vertex shader and pixel shaders prior to ps_3_0. Use D3DDECLUSAGE_COLOR
  1070. // with a usage index of 1 to specify the specular color in the fixed function
  1071. // vertex shader and pixel shaders prior to ps_3_0.
  1072. //
  1073. // D3DDECLUSAGE_FOG
  1074. // Vertex data contains fog data. Use D3DDECLUSAGE_FOG with a usage index of 0
  1075. // to specify a fog blend value used after pixel shading finishes. This
  1076. // applies to pixel shaders prior to version ps_3_0.
  1077. //
  1078. // D3DDECLUSAGE_DEPTH
  1079. // Vertex data contains depth data.
  1080. //
  1081. // D3DDECLUSAGE_SAMPLE
  1082. // Vertex data contains sampler data. Use D3DDECLUSAGE_SAMPLE with a usage
  1083. // index of 0 to specify the displacement value to look up. It can be used
  1084. // only with D3DDECLUSAGE_LOOKUPPRESAMPLED or D3DDECLUSAGE_LOOKUP.
  1085. //note the form of the list terminator..
  1086. // #define D3DDECL_END() {0xFF,0,D3DDECLTYPE_UNUSED,0,0,0}
  1087. // typedef struct _D3DVERTEXELEMENT9
  1088. // {
  1089. // WORD Stream; // Stream index
  1090. // WORD Offset; // Offset in the stream in bytes
  1091. // BYTE Type; // Data type
  1092. // BYTE Method; // Processing method
  1093. // BYTE Usage; // Semantics
  1094. // BYTE UsageIndex; // Semantic index
  1095. // } D3DVERTEXELEMENT9, *LPD3DVERTEXELEMENT9;
  1096. #define MAX_D3DVERTEXELEMENTS 16
  1097. struct D3DVERTEXELEMENT9_GCM
  1098. {
  1099. // fields right out of the original decl element (copied)
  1100. D3DVERTEXELEMENT9 m_dxdecl; // d3d info
  1101. // WORD Stream; // Stream index
  1102. // WORD Offset; // Offset in the stream in bytes
  1103. // BYTE Type; // Data type
  1104. // BYTE Method; // Processing method
  1105. // BYTE Usage; // Semantics
  1106. // BYTE UsageIndex; // Semantic index
  1107. struct GcmDecl_t
  1108. {
  1109. uint32 m_offset; // net offset to attribute 'zero' within the buffer.
  1110. uint8 m_datasize; // comp count of the attribute (1-4)
  1111. uint8 m_datatype; // data type of the attribute (CELL_GCM_VERTEX_F, etc)
  1112. }
  1113. m_gcmdecl;
  1114. };
  1115. #define MAX_DEVICE_IDENTIFIER_STRING 512
  1116. typedef struct _D3DADAPTER_IDENTIFIER9
  1117. {
  1118. char Driver[MAX_DEVICE_IDENTIFIER_STRING];
  1119. char Description[MAX_DEVICE_IDENTIFIER_STRING];
  1120. char DeviceName[32]; /* Device name for GDI (ex. \\.\DISPLAY1) */
  1121. LARGE_INTEGER DriverVersion; /* Defined for 32 bit components */
  1122. DWORD VendorId;
  1123. DWORD DeviceId;
  1124. DWORD SubSysId;
  1125. DWORD Revision;
  1126. } D3DADAPTER_IDENTIFIER9;
  1127. typedef struct _D3DCOLORVALUE {
  1128. float r;
  1129. float g;
  1130. float b;
  1131. float a;
  1132. } D3DCOLORVALUE;
  1133. typedef struct _D3DMATERIAL9 {
  1134. D3DCOLORVALUE Diffuse; /* Diffuse color RGBA */
  1135. D3DCOLORVALUE Ambient; /* Ambient color RGB */
  1136. D3DCOLORVALUE Specular; /* Specular 'shininess' */
  1137. D3DCOLORVALUE Emissive; /* Emissive color RGB */
  1138. float Power; /* Sharpness if specular highlight */
  1139. } D3DMATERIAL9;
  1140. typedef struct _D3DVOLUME_DESC
  1141. {
  1142. D3DFORMAT Format;
  1143. D3DRESOURCETYPE Type;
  1144. DWORD Usage;
  1145. D3DPOOL Pool;
  1146. UINT Width;
  1147. UINT Height;
  1148. UINT Depth;
  1149. } D3DVOLUME_DESC;
  1150. typedef struct _D3DVIEWPORT9 {
  1151. DWORD X;
  1152. DWORD Y; /* Viewport Top left */
  1153. DWORD Width;
  1154. DWORD Height; /* Viewport Dimensions */
  1155. float MinZ; /* Min/max of clip Volume */
  1156. float MaxZ;
  1157. } D3DVIEWPORT9;
  1158. typedef struct _D3DPSHADERCAPS2_0
  1159. {
  1160. DWORD Caps;
  1161. INT DynamicFlowControlDepth;
  1162. INT NumTemps;
  1163. INT StaticFlowControlDepth;
  1164. INT NumInstructionSlots;
  1165. } D3DPSHADERCAPS2_0;
  1166. typedef struct _D3DCAPS9
  1167. {
  1168. /* Device Info */
  1169. D3DDEVTYPE DeviceType;
  1170. /* Caps from DX7 Draw */
  1171. DWORD Caps;
  1172. DWORD Caps2;
  1173. /* Cursor Caps */
  1174. DWORD CursorCaps;
  1175. /* 3D Device Caps */
  1176. DWORD DevCaps;
  1177. DWORD PrimitiveMiscCaps;
  1178. DWORD RasterCaps;
  1179. DWORD TextureCaps;
  1180. DWORD TextureFilterCaps; // D3DPTFILTERCAPS for IDirect3DTexture9's
  1181. DWORD MaxTextureWidth, MaxTextureHeight;
  1182. DWORD MaxVolumeExtent;
  1183. DWORD MaxTextureAspectRatio;
  1184. DWORD MaxAnisotropy;
  1185. DWORD TextureOpCaps;
  1186. DWORD MaxTextureBlendStages;
  1187. DWORD MaxSimultaneousTextures;
  1188. DWORD VertexProcessingCaps;
  1189. DWORD MaxActiveLights;
  1190. DWORD MaxUserClipPlanes;
  1191. DWORD MaxVertexBlendMatrices;
  1192. DWORD MaxVertexBlendMatrixIndex;
  1193. DWORD MaxPrimitiveCount; // max number of primitives per DrawPrimitive call
  1194. DWORD MaxStreams;
  1195. DWORD VertexShaderVersion;
  1196. DWORD MaxVertexShaderConst; // number of vertex shader constant registers
  1197. DWORD PixelShaderVersion;
  1198. // Here are the DX9 specific ones
  1199. DWORD DevCaps2;
  1200. D3DPSHADERCAPS2_0 PS20Caps;
  1201. DWORD NumSimultaneousRTs; // Will be at least 1
  1202. DWORD MaxVertexShader30InstructionSlots;
  1203. DWORD MaxPixelShader30InstructionSlots;
  1204. } D3DCAPS9;
  1205. typedef struct _D3DDISPLAYMODE
  1206. {
  1207. UINT Width;
  1208. UINT Height;
  1209. UINT RefreshRate;
  1210. D3DFORMAT Format;
  1211. } D3DDISPLAYMODE;
  1212. typedef struct _D3DGAMMARAMP
  1213. {
  1214. WORD red [256];
  1215. WORD green[256];
  1216. WORD blue [256];
  1217. } D3DGAMMARAMP;
  1218. // this part of the structure is shared between SPU and PPU
  1219. struct D3DPRESENT_PARAMETERS_SHARED
  1220. {
  1221. UINT BackBufferWidth;
  1222. UINT BackBufferHeight;
  1223. };
  1224. /* Resize Optional Parameters */
  1225. struct D3DPRESENT_PARAMETERS: public D3DPRESENT_PARAMETERS_SHARED
  1226. {
  1227. D3DFORMAT BackBufferFormat;
  1228. UINT BackBufferCount;
  1229. D3DMULTISAMPLE_TYPE MultiSampleType;
  1230. DWORD MultiSampleQuality;
  1231. D3DSWAPEFFECT SwapEffect;
  1232. VD3DHWND hDeviceWindow;
  1233. BOOL Windowed;
  1234. BOOL EnableAutoDepthStencil;
  1235. D3DFORMAT AutoDepthStencilFormat;
  1236. DWORD Flags;
  1237. /* FullScreen_RefreshRateInHz must be zero for Windowed mode */
  1238. UINT FullScreen_RefreshRateInHz;
  1239. UINT PresentationInterval;
  1240. };
  1241. typedef struct _D3DDEVICE_CREATION_PARAMETERS
  1242. {
  1243. UINT AdapterOrdinal;
  1244. D3DDEVTYPE DeviceType;
  1245. VD3DHWND hFocusWindow;
  1246. DWORD BehaviorFlags;
  1247. } D3DDEVICE_CREATION_PARAMETERS;
  1248. /* Structures for LockBox */
  1249. typedef struct _D3DBOX
  1250. {
  1251. UINT Left;
  1252. UINT Top;
  1253. UINT Right;
  1254. UINT Bottom;
  1255. UINT Front;
  1256. UINT Back;
  1257. } D3DBOX;
  1258. typedef struct _D3DLOCKED_BOX
  1259. {
  1260. INT RowPitch;
  1261. INT SlicePitch;
  1262. void* pBits;
  1263. } D3DLOCKED_BOX;
  1264. typedef struct _D3DSURFACE_DESC
  1265. {
  1266. D3DFORMAT Format;
  1267. D3DRESOURCETYPE Type;
  1268. DWORD Usage;
  1269. D3DPOOL Pool;
  1270. D3DMULTISAMPLE_TYPE MultiSampleType;
  1271. DWORD MultiSampleQuality;
  1272. UINT Width;
  1273. UINT Height;
  1274. } D3DSURFACE_DESC;
  1275. typedef struct _D3DLOCKED_RECT
  1276. {
  1277. INT Pitch;
  1278. void* pBits;
  1279. } D3DLOCKED_RECT;
  1280. typedef struct _D3DRASTER_STATUS
  1281. {
  1282. BOOL InVBlank;
  1283. UINT ScanLine;
  1284. } D3DRASTER_STATUS;
  1285. typedef enum _D3DLIGHTTYPE {
  1286. D3DLIGHT_POINT = 1,
  1287. D3DLIGHT_SPOT = 2,
  1288. D3DLIGHT_DIRECTIONAL = 3,
  1289. D3DLIGHT_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
  1290. } D3DLIGHTTYPE;
  1291. typedef struct _D3DVECTOR {
  1292. float x;
  1293. float y;
  1294. float z;
  1295. } D3DVECTOR;
  1296. class D3DXVECTOR2
  1297. {
  1298. public:
  1299. operator FLOAT* ();
  1300. operator CONST FLOAT* () const;
  1301. float x,y;
  1302. };
  1303. class D3DXVECTOR3 : public D3DVECTOR
  1304. {
  1305. public:
  1306. D3DXVECTOR3() {}
  1307. D3DXVECTOR3( float a, float b, float c );
  1308. operator FLOAT* ();
  1309. operator CONST FLOAT* () const;
  1310. };
  1311. typedef enum _D3DXINCLUDE_TYPE
  1312. {
  1313. D3DXINC_LOCAL,
  1314. // force 32-bit size enum
  1315. D3DXINC_FORCE_DWORD = 0x7fffffff
  1316. } D3DXINCLUDE_TYPE;
  1317. typedef struct _D3DLIGHT9 {
  1318. D3DLIGHTTYPE Type; /* Type of light source */
  1319. D3DCOLORVALUE Diffuse; /* Diffuse color of light */
  1320. D3DCOLORVALUE Specular; /* Specular color of light */
  1321. D3DCOLORVALUE Ambient; /* Ambient color of light */
  1322. D3DVECTOR Position; /* Position in world space */
  1323. D3DVECTOR Direction; /* Direction in world space */
  1324. float Range; /* Cutoff range */
  1325. float Falloff; /* Falloff */
  1326. float Attenuation0; /* Constant attenuation */
  1327. float Attenuation1; /* Linear attenuation */
  1328. float Attenuation2; /* Quadratic attenuation */
  1329. float Theta; /* Inner angle of spotlight cone */
  1330. float Phi; /* Outer angle of spotlight cone */
  1331. } D3DLIGHT9;
  1332. class D3DXVECTOR4
  1333. {
  1334. public:
  1335. D3DXVECTOR4() {}
  1336. D3DXVECTOR4( float a, float b, float c, float d );
  1337. float x,y,z,w;
  1338. };
  1339. //----------------------------------------------------------------------------
  1340. // D3DXMACRO:
  1341. // ----------
  1342. // Preprocessor macro definition. The application pass in a NULL-terminated
  1343. // array of this structure to various D3DX APIs. This enables the application
  1344. // to #define tokens at runtime, before the file is parsed.
  1345. //----------------------------------------------------------------------------
  1346. typedef struct _D3DXMACRO
  1347. {
  1348. LPCSTR Name;
  1349. LPCSTR Definition;
  1350. } D3DXMACRO, *LPD3DXMACRO;
  1351. // ------------------------------------------------------------------------------------------------------------------------------ //
  1352. // ------------------------------------------------------------------------------------------------------------------------------ //
  1353. // **** FIXED FUNCTION STUFF - None of this stuff needs support in GL.
  1354. //
  1355. // Also look for any functions marked with "**** FIXED FUNCTION STUFF"
  1356. //
  1357. // It's only laying around here so we don't have to chop up the shader system a lot to strip out the fixed function code paths.
  1358. // ------------------------------------------------------------------------------------------------------------------------------ //
  1359. // ------------------------------------------------------------------------------------------------------------------------------ //
  1360. // **** FIXED FUNCTION STUFF - None of this stuff needs support in GL.
  1361. typedef enum _D3DTRANSFORMSTATETYPE {
  1362. D3DTS_VIEW = 2,
  1363. D3DTS_PROJECTION = 3,
  1364. D3DTS_TEXTURE0 = 16,
  1365. D3DTS_UNDEFINED = -1, /* to avoid a compiler warning */
  1366. D3DTS_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
  1367. } D3DTRANSFORMSTATETYPE;
  1368. // **** FIXED FUNCTION STUFF - None of this stuff needs support in GL.
  1369. typedef enum _D3DTEXTUREOP
  1370. {
  1371. // Control
  1372. D3DTOP_DISABLE = 1, // disables stage
  1373. D3DTOP_SELECTARG1 = 2, // the default
  1374. D3DTOP_SELECTARG2 = 3,
  1375. // Modulate
  1376. D3DTOP_MODULATE = 4, // multiply args together
  1377. D3DTOP_MODULATE2X = 5, // multiply and 1 bit
  1378. D3DTOP_MODULATE4X = 6, // multiply and 2 bits
  1379. // Add
  1380. D3DTOP_ADD = 7, // add arguments together
  1381. D3DTOP_ADDSIGNED = 8, // add with -0.5 bias
  1382. D3DTOP_ADDSIGNED2X = 9, // as above but left 1 bit
  1383. D3DTOP_SUBTRACT = 10, // Arg1 - Arg2, with no saturation
  1384. D3DTOP_ADDSMOOTH = 11, // add 2 args, subtract product
  1385. // Arg1 + Arg2 - Arg1*Arg2
  1386. // = Arg1 + (1-Arg1)*Arg2
  1387. // Linear alpha blend: Arg1*(Alpha) + Arg2*(1-Alpha)
  1388. D3DTOP_BLENDDIFFUSEALPHA = 12, // iterated alpha
  1389. D3DTOP_BLENDTEXTUREALPHA = 13, // texture alpha
  1390. D3DTOP_BLENDFACTORALPHA = 14, // alpha from D3DRS_TEXTUREFACTOR
  1391. // Linear alpha blend with pre-multiplied arg1 input: Arg1 + Arg2*(1-Alpha)
  1392. D3DTOP_BLENDTEXTUREALPHAPM = 15, // texture alpha
  1393. D3DTOP_BLENDCURRENTALPHA = 16, // by alpha of current color
  1394. // Specular mapping
  1395. D3DTOP_PREMODULATE = 17, // modulate with next texture before use
  1396. D3DTOP_MODULATEALPHA_ADDCOLOR = 18, // Arg1.RGB + Arg1.A*Arg2.RGB
  1397. // COLOROP only
  1398. D3DTOP_MODULATECOLOR_ADDALPHA = 19, // Arg1.RGB*Arg2.RGB + Arg1.A
  1399. // COLOROP only
  1400. D3DTOP_MODULATEINVALPHA_ADDCOLOR = 20, // (1-Arg1.A)*Arg2.RGB + Arg1.RGB
  1401. // COLOROP only
  1402. D3DTOP_MODULATEINVCOLOR_ADDALPHA = 21, // (1-Arg1.RGB)*Arg2.RGB + Arg1.A
  1403. // COLOROP only
  1404. // Bump mapping
  1405. D3DTOP_BUMPENVMAP = 22, // per pixel env map perturbation
  1406. D3DTOP_BUMPENVMAPLUMINANCE = 23, // with luminance channel
  1407. // This can do either diffuse or specular bump mapping with correct input.
  1408. // Performs the function (Arg1.R*Arg2.R + Arg1.G*Arg2.G + Arg1.B*Arg2.B)
  1409. // where each component has been scaled and offset to make it signed.
  1410. // The result is replicated into all four (including alpha) channels.
  1411. // This is a valid COLOROP only.
  1412. D3DTOP_DOTPRODUCT3 = 24,
  1413. // Triadic ops
  1414. D3DTOP_MULTIPLYADD = 25, // Arg0 + Arg1*Arg2
  1415. D3DTOP_LERP = 26, // (Arg0)*Arg1 + (1-Arg0)*Arg2
  1416. D3DTOP_FORCE_DWORD = 0x7fffffff,
  1417. } D3DTEXTUREOP;
  1418. // **** FIXED FUNCTION STUFF - None of this stuff needs support in GL.
  1419. typedef enum _D3DTEXTURESTAGESTATETYPE
  1420. {
  1421. D3DTSS_COLOROP = 1, /* D3DTEXTUREOP - per-stage blending controls for color channels */
  1422. D3DTSS_COLORARG1 = 2, /* D3DTA_* (texture arg) */
  1423. D3DTSS_COLORARG2 = 3, /* D3DTA_* (texture arg) */
  1424. D3DTSS_ALPHAOP = 4, /* D3DTEXTUREOP - per-stage blending controls for alpha channel */
  1425. D3DTSS_ALPHAARG1 = 5, /* D3DTA_* (texture arg) */
  1426. D3DTSS_ALPHAARG2 = 6, /* D3DTA_* (texture arg) */
  1427. D3DTSS_BUMPENVMAT00 = 7, /* float (bump mapping matrix) */
  1428. D3DTSS_BUMPENVMAT01 = 8, /* float (bump mapping matrix) */
  1429. D3DTSS_BUMPENVMAT10 = 9, /* float (bump mapping matrix) */
  1430. D3DTSS_BUMPENVMAT11 = 10, /* float (bump mapping matrix) */
  1431. D3DTSS_TEXCOORDINDEX = 11, /* identifies which set of texture coordinates index this texture */
  1432. D3DTSS_BUMPENVLOFFSET = 23, /* float offset for bump map luminance */
  1433. D3DTSS_TEXTURETRANSFORMFLAGS = 24, /* D3DTEXTURETRANSFORMFLAGS controls texture transform */
  1434. D3DTSS_COLORARG0 = 26, /* D3DTA_* third arg for triadic ops */
  1435. D3DTSS_RESULTARG = 28, /* D3DTA_* arg for result (CURRENT or TEMP) */
  1436. D3DTSS_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
  1437. } D3DTEXTURESTAGESTATETYPE;
  1438. typedef enum _D3DPRIMITIVETYPE {
  1439. D3DPT_POINTLIST = 1,
  1440. D3DPT_LINELIST = 2,
  1441. D3DPT_LINESTRIP = 3,
  1442. D3DPT_TRIANGLELIST = 4,
  1443. D3DPT_TRIANGLESTRIP = 5,
  1444. D3DPT_QUADLIST = 13,
  1445. D3DPT_UNDEFINED = -1, /* avoid warning */
  1446. D3DPT_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */
  1447. } D3DPRIMITIVETYPE;
  1448. inline uint GetGcmCount( D3DPRIMITIVETYPE nD3DType, uint nPrimCount )
  1449. {
  1450. switch( nD3DType )
  1451. {
  1452. case D3DPT_POINTLIST:
  1453. return nPrimCount;
  1454. case D3DPT_TRIANGLELIST:
  1455. return 3 * nPrimCount;
  1456. case D3DPT_LINELIST:
  1457. return 2 * nPrimCount;
  1458. case D3DPT_LINESTRIP:
  1459. return 1 + nPrimCount;
  1460. case D3DPT_TRIANGLESTRIP:
  1461. return 2 + nPrimCount;
  1462. case D3DPT_QUADLIST:
  1463. return 4 * nPrimCount;
  1464. default:
  1465. return 0;
  1466. }
  1467. }
  1468. inline uint GetGcmMode( D3DPRIMITIVETYPE nD3DType )
  1469. {
  1470. switch ( nD3DType )
  1471. {
  1472. case D3DPT_TRIANGLESTRIP:
  1473. return CELL_GCM_PRIMITIVE_TRIANGLE_STRIP;
  1474. case D3DPT_QUADLIST:
  1475. return CELL_GCM_PRIMITIVE_QUADS;
  1476. case D3DPT_TRIANGLELIST:
  1477. return CELL_GCM_PRIMITIVE_TRIANGLES;
  1478. case D3DPT_LINELIST:
  1479. return CELL_GCM_PRIMITIVE_LINES;
  1480. case D3DPT_LINESTRIP:
  1481. return CELL_GCM_PRIMITIVE_LINE_STRIP;
  1482. case D3DPT_POINTLIST:
  1483. return CELL_GCM_PRIMITIVE_POINTS;
  1484. default:
  1485. return 0;
  1486. }
  1487. }
  1488. #define D3DPRED_ALL_Z 0x15555555
  1489. #define D3DPRED_ALL_RENDER 0x2AAAAAAA
  1490. // mimic the PPU class on SPU
  1491. struct ALIGN16 IDirect3DVertexDeclaration9:
  1492. #ifdef SPU
  1493. private IUnknown
  1494. #else
  1495. public CAlignedNewDelete< 16, IUnknown >
  1496. #endif
  1497. {
  1498. uint m_elemCount;
  1499. // PS3 has fixed semantics for 16 slots, store element indices
  1500. // here for each of the slots.
  1501. // 0 means missing element
  1502. // otherwise N-1 is the index into m_elements array
  1503. unsigned char m_cgAttrSlots[16];
  1504. D3DVERTEXELEMENT9_GCM m_elements[ MAX_D3DVERTEXELEMENTS ];
  1505. }
  1506. ALIGN16_POST;
  1507. struct D3DStreamDesc
  1508. {
  1509. IDirect3DVertexBuffer9 *m_vtxBuffer;
  1510. uint m_offset;
  1511. uint m_stride;
  1512. uint m_nLocalBufferOffset;
  1513. };
  1514. // we latch sampler values until draw time and then convert them all to GL form
  1515. // note these are similar in name to the fields of a GLMTexSamplingParams but contents are not
  1516. // particularly in the texture filtering area
  1517. struct D3DSamplerDesc
  1518. {
  1519. float m_mipmapBias; // float: mipmap bias
  1520. uint32 m_addressModeU : 3;
  1521. uint32 m_addressModeV : 3;
  1522. uint32 m_addressModeW : 3;
  1523. uint32 m_magFilter : 2; // mag filter
  1524. uint32 m_minFilter : 2; // min filter
  1525. uint32 m_mipFilter : 2; // mip filter
  1526. uint32 m_maxMipLevel : 4; // DWORD 0..(n-1) LOD index of largest map to use (0 == largest)
  1527. uint32 m_maxAniso : 5; // D3DSAMP_MAXANISOTROPY max aniso
  1528. uint32 m_srgb : 1; // D3DSAMP_SRGBTEXTURE 0 = no SRGB sampling
  1529. uint32 m_shadowFilter : 1; // D3DSAMP_SHADOWFILTER
  1530. // DWORD m_borderColor; // Border color only ever set to 0
  1531. };
  1532. struct FpHeader_t;
  1533. struct ALIGN16 PixelShader9Data_t
  1534. {
  1535. uint32 m_attributeInputMask;
  1536. uint32 m_samplerInputMask;
  1537. uint32 m_nTotalSize;
  1538. FpHeader_t *m_eaFp;
  1539. }
  1540. ALIGN16_POST;
  1541. struct ALIGN16 VertexShader9Data_t
  1542. {
  1543. uint32 m_attributeInputMask;
  1544. uint32 m_attributeOutputMask;
  1545. uint32 m_nVertexShaderCmdBufferWords; // 16-byte aligned size of cmd buffer containing vertex shader load code
  1546. uint32 * m_pVertexShaderCmdBuffer; // 16-byte aligned cmd buffer that loads the vertex shader
  1547. }
  1548. ALIGN16_POST;
  1549. // convenience functions
  1550. inline uint32 D3DCompareFuncToGL( DWORD function )
  1551. {
  1552. #if 1
  1553. // Use the easy mapping between D3D and GL #define values:
  1554. return CELL_GCM_NEVER + ( function - D3DCMP_NEVER );
  1555. #else
  1556. switch ( function )
  1557. {
  1558. case D3DCMP_NEVER : return CELL_GCM_NEVER; // Always fail the test.
  1559. case D3DCMP_LESS : return CELL_GCM_LESS; // Accept the new pixel if its value is less than the value of the current pixel.
  1560. case D3DCMP_EQUAL : return CELL_GCM_EQUAL; // Accept the new pixel if its value equals the value of the current pixel.
  1561. case D3DCMP_LESSEQUAL : return CELL_GCM_LEQUAL; // Accept the new pixel if its value is less than or equal to the value of the current pixel. **
  1562. case D3DCMP_GREATER : return CELL_GCM_GREATER; // Accept the new pixel if its value is greater than the value of the current pixel.
  1563. case D3DCMP_NOTEQUAL : return CELL_GCM_NOTEQUAL; // Accept the new pixel if its value does not equal the value of the current pixel.
  1564. case D3DCMP_GREATEREQUAL: return CELL_GCM_GEQUAL; // Accept the new pixel if its value is greater than or equal to the value of the current pixel.
  1565. case D3DCMP_ALWAYS : return CELL_GCM_ALWAYS; // Always pass the test.
  1566. default : Debugger(); return 0xFFFFFFFF;
  1567. }
  1568. #endif
  1569. }
  1570. inline uint16 D3DBlendFactorToGL( DWORD equation )
  1571. {
  1572. #if 1
  1573. // Use the easy mapping between D3D and GCM #define values:
  1574. if ( equation <= D3DBLEND_ONE )
  1575. return !!( equation == D3DBLEND_ONE );
  1576. else
  1577. return CELL_GCM_SRC_COLOR + ( equation - D3DBLEND_SRCCOLOR );
  1578. #else
  1579. switch (equation)
  1580. {
  1581. case D3DBLEND_ZERO : return CELL_GCM_ZERO; // Blend factor is (0, 0, 0, 0).
  1582. case D3DBLEND_ONE : return CELL_GCM_ONE; // Blend factor is (1, 1, 1, 1).
  1583. case D3DBLEND_SRCCOLOR : return CELL_GCM_SRC_COLOR; // Blend factor is (Rs, Gs, Bs, As).
  1584. case D3DBLEND_INVSRCCOLOR : return CELL_GCM_ONE_MINUS_SRC_COLOR; // Blend factor is (1 - Rs, 1 - Gs, 1 - Bs, 1 - As).
  1585. case D3DBLEND_SRCALPHA : return CELL_GCM_SRC_ALPHA; // Blend factor is (As, As, As, As).
  1586. case D3DBLEND_INVSRCALPHA : return CELL_GCM_ONE_MINUS_SRC_ALPHA; // Blend factor is ( 1 - As, 1 - As, 1 - As, 1 - As).
  1587. case D3DBLEND_DESTALPHA : return CELL_GCM_DST_ALPHA; // Blend factor is (Ad Ad Ad Ad).
  1588. case D3DBLEND_INVDESTALPHA : return CELL_GCM_ONE_MINUS_DST_ALPHA; // Blend factor is (1 - Ad 1 - Ad 1 - Ad 1 - Ad).
  1589. case D3DBLEND_DESTCOLOR : return CELL_GCM_DST_COLOR; // Blend factor is (Rd, Gd, Bd, Ad).
  1590. case D3DBLEND_INVDESTCOLOR : return CELL_GCM_ONE_MINUS_DST_COLOR; // Blend factor is (1 - Rd, 1 - Gd, 1 - Bd, 1 - Ad).
  1591. case D3DBLEND_SRCALPHASAT : return CELL_GCM_SRC_ALPHA_SATURATE; // Blend factor is (f, f, f, 1); where f = min(As, 1 - Ad).
  1592. /*
  1593. // these are weird.... break if we hit them
  1594. case D3DBLEND_BOTHSRCALPHA : Assert(0); return GL_ZERO; // Obsolete. Starting with DirectX 6, you can achieve the same effect by setting the source and destination blend factors to D3DBLEND_SRCALPHA and D3DBLEND_INVSRCALPHA in separate calls.
  1595. case D3DBLEND_BOTHINVSRCALPHA: Assert(0); return GL_ZERO; // Source blend factor is (1 - As, 1 - As, 1 - As, 1 - As), and destination blend factor is (As, As, As, As); the destination blend selection is overridden. This blend mode is supported only for the D3DRS_SRCBLEND render state.
  1596. case D3DBLEND_BLENDFACTOR : Assert(0); return GL_ZERO; // Constant color blending factor used by the frame-buffer blender. This blend mode is supported only if D3DPBLENDCAPS_BLENDFACTOR is set in the SrcBlendCaps or DestBlendCaps members of D3DCAPS9.
  1597. dxabstract.h has not heard of these, so let them hit the debugger if they come through
  1598. case D3DBLEND_INVBLENDFACTOR: //Inverted constant color-blending factor used by the frame-buffer blender. This blend mode is supported only if the D3DPBLENDCAPS_BLENDFACTOR bit is set in the SrcBlendCaps or DestBlendCaps members of D3DCAPS9.
  1599. case D3DBLEND_SRCCOLOR2: // Blend factor is (PSOutColor[1]r, PSOutColor[1]g, PSOutColor[1]b, not used). This flag is available in Direct3D 9Ex only.
  1600. case D3DBLEND_INVSRCCOLOR2: // Blend factor is (1 - PSOutColor[1]r, 1 - PSOutColor[1]g, 1 - PSOutColor[1]b, not used)). This flag is available in Direct3D 9Ex only.
  1601. */
  1602. default:
  1603. Debugger();
  1604. return 0xFFFF;
  1605. break;
  1606. }
  1607. #endif
  1608. }
  1609. #endif // INCLUDED_DXABSTRACT_DEF_H