1 /*==========================================================================; 2 * 3 * Copyright (C) 1995-1996 Microsoft Corporation. All Rights Reserved. 4 * 5 * File: d3dcaps.h 6 * Content: Direct3D capabilities include file 7 * 8 ***************************************************************************/ 9 10 #ifndef _D3DCAPS_H 11 #define _D3DCAPS_H 12 13 /* 14 * Pull in DirectDraw include file automatically: 15 */ 16 #include <ddraw.h> 17 18 #pragma pack(4) 19 20 /* Description of capabilities of transform */ 21 22 typedef struct _D3DTRANSFORMCAPS { 23 DWORD dwSize; 24 DWORD dwCaps; 25 } D3DTRANSFORMCAPS, *LPD3DTRANSFORMCAPS; 26 27 #define D3DTRANSFORMCAPS_CLIP 0x00000001L /* Will clip whilst transforming */ 28 29 /* Description of capabilities of lighting */ 30 31 typedef struct _D3DLIGHTINGCAPS { 32 DWORD dwSize; 33 DWORD dwCaps; /* Lighting caps */ 34 DWORD dwLightingModel; /* Lighting model - RGB or mono */ 35 DWORD dwNumLights; /* Number of lights that can be handled */ 36 } D3DLIGHTINGCAPS, *LPD3DLIGHTINGCAPS; 37 38 #define D3DLIGHTINGMODEL_RGB 0x00000001L 39 #define D3DLIGHTINGMODEL_MONO 0x00000002L 40 41 #define D3DLIGHTCAPS_POINT 0x00000001L /* Point lights supported */ 42 #define D3DLIGHTCAPS_SPOT 0x00000002L /* Spot lights supported */ 43 #define D3DLIGHTCAPS_DIRECTIONAL 0x00000004L /* Directional lights supported */ 44 #define D3DLIGHTCAPS_PARALLELPOINT 0x00000008L /* Parallel point lights supported */ 45 #define D3DLIGHTCAPS_GLSPOT 0x00000010L /* GL syle spot lights supported */ 46 47 /* Description of capabilities for each primitive type */ 48 49 typedef struct _D3DPrimCaps { 50 DWORD dwSize; 51 DWORD dwMiscCaps; /* Capability flags */ 52 DWORD dwRasterCaps; 53 DWORD dwZCmpCaps; 54 DWORD dwSrcBlendCaps; 55 DWORD dwDestBlendCaps; 56 DWORD dwAlphaCmpCaps; 57 DWORD dwShadeCaps; 58 DWORD dwTextureCaps; 59 DWORD dwTextureFilterCaps; 60 DWORD dwTextureBlendCaps; 61 DWORD dwTextureAddressCaps; 62 DWORD dwStippleWidth; /* maximum width and height of */ 63 DWORD dwStippleHeight; /* of supported stipple (up to 32x32) */ 64 } D3DPRIMCAPS, *LPD3DPRIMCAPS; 65 66 /* D3DPRIMCAPS dwMiscCaps */ 67 68 #define D3DPMISCCAPS_MASKPLANES 0x00000001L 69 #define D3DPMISCCAPS_MASKZ 0x00000002L 70 #define D3DPMISCCAPS_LINEPATTERNREP 0x00000004L 71 #define D3DPMISCCAPS_CONFORMANT 0x00000008L 72 #define D3DPMISCCAPS_CULLNONE 0x00000010L 73 #define D3DPMISCCAPS_CULLCW 0x00000020L 74 #define D3DPMISCCAPS_CULLCCW 0x00000040L 75 76 /* D3DPRIMCAPS dwRasterCaps */ 77 78 #define D3DPRASTERCAPS_DITHER 0x00000001L 79 #define D3DPRASTERCAPS_ROP2 0x00000002L 80 #define D3DPRASTERCAPS_XOR 0x00000004L 81 #define D3DPRASTERCAPS_PAT 0x00000008L 82 #define D3DPRASTERCAPS_ZTEST 0x00000010L 83 #define D3DPRASTERCAPS_SUBPIXEL 0x00000020L 84 #define D3DPRASTERCAPS_SUBPIXELX 0x00000040L 85 #define D3DPRASTERCAPS_FOGVERTEX 0x00000080L 86 #define D3DPRASTERCAPS_FOGTABLE 0x00000100L 87 #define D3DPRASTERCAPS_STIPPLE 0x00000200L 88 89 /* D3DPRIMCAPS dwZCmpCaps, dwAlphaCmpCaps */ 90 91 #define D3DPCMPCAPS_NEVER 0x00000001L 92 #define D3DPCMPCAPS_LESS 0x00000002L 93 #define D3DPCMPCAPS_EQUAL 0x00000004L 94 #define D3DPCMPCAPS_LESSEQUAL 0x00000008L 95 #define D3DPCMPCAPS_GREATER 0x00000010L 96 #define D3DPCMPCAPS_NOTEQUAL 0x00000020L 97 #define D3DPCMPCAPS_GREATEREQUAL 0x00000040L 98 #define D3DPCMPCAPS_ALWAYS 0x00000080L 99 100 /* D3DPRIMCAPS dwSourceBlendCaps, dwDestBlendCaps */ 101 102 #define D3DPBLENDCAPS_ZERO 0x00000001L 103 #define D3DPBLENDCAPS_ONE 0x00000002L 104 #define D3DPBLENDCAPS_SRCCOLOR 0x00000004L 105 #define D3DPBLENDCAPS_INVSRCCOLOR 0x00000008L 106 #define D3DPBLENDCAPS_SRCALPHA 0x00000010L 107 #define D3DPBLENDCAPS_INVSRCALPHA 0x00000020L 108 #define D3DPBLENDCAPS_DESTALPHA 0x00000040L 109 #define D3DPBLENDCAPS_INVDESTALPHA 0x00000080L 110 #define D3DPBLENDCAPS_DESTCOLOR 0x00000100L 111 #define D3DPBLENDCAPS_INVDESTCOLOR 0x00000200L 112 #define D3DPBLENDCAPS_SRCALPHASAT 0x00000400L 113 #define D3DPBLENDCAPS_BOTHSRCALPHA 0x00000800L 114 #define D3DPBLENDCAPS_BOTHINVSRCALPHA 0x00001000L 115 116 /* D3DPRIMCAPS dwShadeCaps */ 117 118 #define D3DPSHADECAPS_COLORFLATMONO 0x00000001L 119 #define D3DPSHADECAPS_COLORFLATRGB 0x00000002L 120 #define D3DPSHADECAPS_COLORGOURAUDMONO 0x00000004L 121 #define D3DPSHADECAPS_COLORGOURAUDRGB 0x00000008L 122 #define D3DPSHADECAPS_COLORPHONGMONO 0x00000010L 123 #define D3DPSHADECAPS_COLORPHONGRGB 0x00000020L 124 125 #define D3DPSHADECAPS_SPECULARFLATMONO 0x00000040L 126 #define D3DPSHADECAPS_SPECULARFLATRGB 0x00000080L 127 #define D3DPSHADECAPS_SPECULARGOURAUDMONO 0x00000100L 128 #define D3DPSHADECAPS_SPECULARGOURAUDRGB 0x00000200L 129 #define D3DPSHADECAPS_SPECULARPHONGMONO 0x00000400L 130 #define D3DPSHADECAPS_SPECULARPHONGRGB 0x00000800L 131 132 #define D3DPSHADECAPS_ALPHAFLATBLEND 0x00001000L 133 #define D3DPSHADECAPS_ALPHAFLATSTIPPLED 0x00002000L 134 #define D3DPSHADECAPS_ALPHAGOURAUDBLEND 0x00004000L 135 #define D3DPSHADECAPS_ALPHAGOURAUDSTIPPLED 0x00008000L 136 #define D3DPSHADECAPS_ALPHAPHONGBLEND 0x00010000L 137 #define D3DPSHADECAPS_ALPHAPHONGSTIPPLED 0x00020000L 138 139 #define D3DPSHADECAPS_FOGFLAT 0x00040000L 140 #define D3DPSHADECAPS_FOGGOURAUD 0x00080000L 141 #define D3DPSHADECAPS_FOGPHONG 0x00100000L 142 143 /* D3DPRIMCAPS dwTextureCaps */ 144 145 #define D3DPTEXTURECAPS_PERSPECTIVE 0x00000001L 146 #define D3DPTEXTURECAPS_POW2 0x00000002L 147 #define D3DPTEXTURECAPS_ALPHA 0x00000004L 148 #define D3DPTEXTURECAPS_TRANSPARENCY 0x00000008L 149 #define D3DPTEXTURECAPS_BORDER 0x00000010L 150 #define D3DPTEXTURECAPS_SQUAREONLY 0x00000020L 151 152 /* D3DPRIMCAPS dwTextureFilterCaps */ 153 154 #define D3DPTFILTERCAPS_NEAREST 0x00000001L 155 #define D3DPTFILTERCAPS_LINEAR 0x00000002L 156 #define D3DPTFILTERCAPS_MIPNEAREST 0x00000004L 157 #define D3DPTFILTERCAPS_MIPLINEAR 0x00000008L 158 #define D3DPTFILTERCAPS_LINEARMIPNEAREST 0x00000010L 159 #define D3DPTFILTERCAPS_LINEARMIPLINEAR 0x00000020L 160 161 /* D3DPRIMCAPS dwTextureBlendCaps */ 162 163 #define D3DPTBLENDCAPS_DECAL 0x00000001L 164 #define D3DPTBLENDCAPS_MODULATE 0x00000002L 165 #define D3DPTBLENDCAPS_DECALALPHA 0x00000004L 166 #define D3DPTBLENDCAPS_MODULATEALPHA 0x00000008L 167 #define D3DPTBLENDCAPS_DECALMASK 0x00000010L 168 #define D3DPTBLENDCAPS_MODULATEMASK 0x00000020L 169 #define D3DPTBLENDCAPS_COPY 0x00000040L 170 171 /* D3DPRIMCAPS dwTextureAddressCaps */ 172 #define D3DPTADDRESSCAPS_WRAP 0x00000001L 173 #define D3DPTADDRESSCAPS_MIRROR 0x00000002L 174 #define D3DPTADDRESSCAPS_CLAMP 0x00000004L 175 176 /* 177 * Description for a device. 178 * This is used to describe a device that is to be created or to query 179 * the current device. 180 */ 181 typedef struct _D3DDeviceDesc { 182 DWORD dwSize; /* Size of D3DDEVICEDESC structure */ 183 DWORD dwFlags; /* Indicates which fields have valid data */ 184 D3DCOLORMODEL dcmColorModel; /* Color model of device */ 185 DWORD dwDevCaps; /* Capabilities of device */ 186 D3DTRANSFORMCAPS dtcTransformCaps; /* Capabilities of transform */ 187 BOOL bClipping; /* Device can do 3D clipping */ 188 D3DLIGHTINGCAPS dlcLightingCaps; /* Capabilities of lighting */ 189 D3DPRIMCAPS dpcLineCaps; 190 D3DPRIMCAPS dpcTriCaps; 191 DWORD dwDeviceRenderBitDepth; /* One of DDBB_8, 16, etc.. */ 192 DWORD dwDeviceZBufferBitDepth;/* One of DDBD_16, 32, etc.. */ 193 DWORD dwMaxBufferSize; /* Maximum execute buffer size */ 194 DWORD dwMaxVertexCount; /* Maximum vertex count */ 195 } D3DDEVICEDESC, *LPD3DDEVICEDESC; 196 197 typedef HRESULT (FAR PASCAL * LPD3DENUMDEVICESCALLBACK)(LPGUID lpGuid, LPSTR lpDeviceDescription, LPSTR lpDeviceName, LPD3DDEVICEDESC, LPD3DDEVICEDESC, LPVOID); 198 199 /* D3DDEVICEDESC dwFlags indicating valid fields */ 200 201 #define D3DDD_COLORMODEL 0x00000001L /* dcmColorModel is valid */ 202 #define D3DDD_DEVCAPS 0x00000002L /* dwDevCaps is valid */ 203 #define D3DDD_TRANSFORMCAPS 0x00000004L /* dtcTransformCaps is valid */ 204 #define D3DDD_LIGHTINGCAPS 0x00000008L /* dlcLightingCaps is valid */ 205 #define D3DDD_BCLIPPING 0x00000010L /* bClipping is valid */ 206 #define D3DDD_LINECAPS 0x00000020L /* dpcLineCaps is valid */ 207 #define D3DDD_TRICAPS 0x00000040L /* dpcTriCaps is valid */ 208 #define D3DDD_DEVICERENDERBITDEPTH 0x00000080L /* dwDeviceRenderBitDepth is valid */ 209 #define D3DDD_DEVICEZBUFFERBITDEPTH 0x00000100L /* dwDeviceZBufferBitDepth is valid */ 210 #define D3DDD_MAXBUFFERSIZE 0x00000200L /* dwMaxBufferSize is valid */ 211 #define D3DDD_MAXVERTEXCOUNT 0x00000400L /* dwMaxVertexCount is valid */ 212 213 /* D3DDEVICEDESC dwDevCaps flags */ 214 215 #define D3DDEVCAPS_FLOATTLVERTEX 0x00000001L /* Device accepts floating point */ 216 /* for post-transform vertex data */ 217 #define D3DDEVCAPS_SORTINCREASINGZ 0x00000002L /* Device needs data sorted for increasing Z*/ 218 #define D3DDEVCAPS_SORTDECREASINGZ 0X00000004L /* Device needs data sorted for decreasing Z*/ 219 #define D3DDEVCAPS_SORTEXACT 0x00000008L /* Device needs data sorted exactly */ 220 221 #define D3DDEVCAPS_EXECUTESYSTEMMEMORY 0x00000010L /* Device can use execute buffers from system memory */ 222 #define D3DDEVCAPS_EXECUTEVIDEOMEMORY 0x00000020L /* Device can use execute buffers from video memory */ 223 #define D3DDEVCAPS_TLVERTEXSYSTEMMEMORY 0x00000040L /* Device can use TL buffers from system memory */ 224 #define D3DDEVCAPS_TLVERTEXVIDEOMEMORY 0x00000080L /* Device can use TL buffers from video memory */ 225 #define D3DDEVCAPS_TEXTURESYSTEMMEMORY 0x00000100L /* Device can texture from system memory */ 226 #define D3DDEVCAPS_TEXTUREVIDEOMEMORY 0x00000200L /* Device can texture from device memory */ 227 228 #define D3DFDS_COLORMODEL 0x00000001L /* Match color model */ 229 #define D3DFDS_GUID 0x00000002L /* Match guid */ 230 #define D3DFDS_HARDWARE 0x00000004L /* Match hardware/software */ 231 #define D3DFDS_TRIANGLES 0x00000008L /* Match in triCaps */ 232 #define D3DFDS_LINES 0x00000010L /* Match in lineCaps */ 233 #define D3DFDS_MISCCAPS 0x00000020L /* Match primCaps.dwMiscCaps */ 234 #define D3DFDS_RASTERCAPS 0x00000040L /* Match primCaps.dwRasterCaps */ 235 #define D3DFDS_ZCMPCAPS 0x00000080L /* Match primCaps.dwZCmpCaps */ 236 #define D3DFDS_ALPHACMPCAPS 0x00000100L /* Match primCaps.dwAlphaCmpCaps */ 237 #define D3DFDS_SRCBLENDCAPS 0x00000200L /* Match primCaps.dwSourceBlendCaps */ 238 #define D3DFDS_DSTBLENDCAPS 0x00000400L /* Match primCaps.dwDestBlendCaps */ 239 #define D3DFDS_SHADECAPS 0x00000800L /* Match primCaps.dwShadeCaps */ 240 #define D3DFDS_TEXTURECAPS 0x00001000L /* Match primCaps.dwTextureCaps */ 241 #define D3DFDS_TEXTUREFILTERCAPS 0x00002000L /* Match primCaps.dwTextureFilterCaps */ 242 #define D3DFDS_TEXTUREBLENDCAPS 0x00004000L /* Match primCaps.dwTextureBlendCaps */ 243 #define D3DFDS_TEXTUREADDRESSCAPS 0x00008000L /* Match primCaps.dwTextureBlendCaps */ 244 245 /* 246 * FindDevice arguments 247 */ 248 typedef struct _D3DFINDDEVICESEARCH { 249 DWORD dwSize; 250 DWORD dwFlags; 251 BOOL bHardware; 252 D3DCOLORMODEL dcmColorModel; 253 GUID guid; 254 DWORD dwCaps; 255 D3DPRIMCAPS dpcPrimCaps; 256 } D3DFINDDEVICESEARCH, *LPD3DFINDDEVICESEARCH; 257 258 typedef struct _D3DFINDDEVICERESULT { 259 DWORD dwSize; 260 GUID guid; /* guid which matched */ 261 D3DDEVICEDESC ddHwDesc; /* hardware D3DDEVICEDESC */ 262 D3DDEVICEDESC ddSwDesc; /* software D3DDEVICEDESC */ 263 } D3DFINDDEVICERESULT, *LPD3DFINDDEVICERESULT; 264 265 /* 266 * Description of execute buffer. 267 */ 268 typedef struct _D3DExecuteBufferDesc { 269 DWORD dwSize; /* size of this structure */ 270 DWORD dwFlags; /* flags indicating which fields are valid */ 271 DWORD dwCaps; /* capabilities of execute buffer */ 272 DWORD dwBufferSize; /* size of execute buffer data */ 273 LPVOID lpData; /* pointer to actual data */ 274 } D3DEXECUTEBUFFERDESC, *LPD3DEXECUTEBUFFERDESC; 275 276 /* D3DEXECUTEBUFFER dwFlags indicating valid fields */ 277 278 #define D3DDEB_BUFSIZE 0x00000001l /* buffer size valid */ 279 #define D3DDEB_CAPS 0x00000002l /* caps valid */ 280 #define D3DDEB_LPDATA 0x00000004l /* lpData valid */ 281 282 /* D3DEXECUTEBUFFER dwCaps */ 283 284 #define D3DDEBCAPS_SYSTEMMEMORY 0x00000001l /* buffer in system memory */ 285 #define D3DDEBCAPS_VIDEOMEMORY 0x00000002l /* buffer in device memory */ 286 #define D3DDEBCAPS_MEM (D3DDEBCAPS_SYSTEMMEMORY|D3DDEBCAPS_VIDEOMEMORY) 287 288 #pragma pack() 289 290 #endif /* _D3DCAPS_H_ */ 291