1721 строка
89 KiB
C++
1721 строка
89 KiB
C++
//-----------------------------------------------------------------------------
|
|
// Name: dxg.cpp
|
|
//
|
|
// Desc: DirectX Capabilities Viewer for Direct3D
|
|
//
|
|
// Copyright(c) Microsoft Corporation.
|
|
// Licensed under the MIT License.
|
|
//
|
|
// https://go.microsoft.com/fwlink/?linkid=2136896
|
|
//-----------------------------------------------------------------------------
|
|
#include "dxview.h"
|
|
#include <d3d9.h>
|
|
|
|
// Some useful 9EX defines so we don't have to include the 9ex header
|
|
#define D3DFMT_D32_LOCKABLE 84
|
|
#define D3DFMT_S8_LOCKABLE 85
|
|
#define D3DFMT_A1 118
|
|
|
|
#define D3DCAPS2_CANSHARERESOURCE 0x80000000L
|
|
|
|
#define D3DPMISCCAPS_POSTBLENDSRGBCONVERT 0x00200000L /* Indicates device can perform conversion to sRGB after blending. */
|
|
|
|
#define D3DPBLENDCAPS_SRCCOLOR2 0x00004000L
|
|
#define D3DPBLENDCAPS_INVSRCCOLOR2 0x00008000L
|
|
|
|
#define D3DPTFILTERCAPS_CONVOLUTIONMONO 0x00040000L /* Min and Mag for the convolution mono filter */
|
|
|
|
namespace
|
|
{
|
|
using LPDIRECT3D9CREATE9 = IDirect3D9 * (WINAPI*)(UINT SDKVersion);
|
|
using LPDIRECT3D9CREATE9EX = HRESULT(WINAPI*)(UINT SDKVersion, IDirect3D9**);
|
|
|
|
LPDIRECT3D9 g_pD3D = nullptr;
|
|
LPDIRECT3D9CREATE9 g_direct3DCreate9 = nullptr;
|
|
LPDIRECT3D9CREATE9EX g_direct3DCreate9Ex = nullptr;
|
|
HMODULE g_hInstD3D = nullptr;
|
|
|
|
BOOL g_is9Ex = FALSE;
|
|
|
|
BOOL IsAdapterFmtAvailable(UINT iAdapter, D3DDEVTYPE devType, D3DFORMAT fmtAdapter, BOOL bWindowed);
|
|
HRESULT DXGDisplayCaps(LPARAM lParam1, LPARAM lParam2, _In_opt_ PRINTCBINFO* pInfo);
|
|
|
|
#define CAPSVALDEFex(name,val) {name, FIELD_OFFSET(D3DCAPS9,val), 0, DXV_9EXCAP}
|
|
#define CAPSVALDEF(name,val) {name, FIELD_OFFSET(D3DCAPS9,val), 0}
|
|
#define CAPSFLAGDEFex(name,val,flag) {name, FIELD_OFFSET(D3DCAPS9,val), flag, DXV_9EXCAP}
|
|
#define CAPSFLAGDEF(name,val,flag) {name, FIELD_OFFSET(D3DCAPS9,val), flag}
|
|
#define CAPSMASK16DEF(name,val) {name, FIELD_OFFSET(D3DCAPS9,val), 0x0FFFFFFF}
|
|
#define CAPSFLOATDEF(name,val) {name, FIELD_OFFSET(D3DCAPS9,val), 0xBFFFFFFF}
|
|
#define CAPSSHADERDEF(name,val) {name, FIELD_OFFSET(D3DCAPS9,val), 0xEFFFFFFF}
|
|
|
|
#define PRIMCAPSVALDEF(name,val) {name, FIELD_OFFSET(D3DPRIMCAPS9,val), 0}
|
|
#define PRIMCAPSFLAGDEF(name,val,flag) {name, FIELD_OFFSET(D3DPRIMCAPS9,val), flag}
|
|
|
|
// NOTE: Remember to update FormatName() when you update this list!!
|
|
D3DFORMAT AllFormatArray[] =
|
|
{
|
|
D3DFMT_R8G8B8,
|
|
D3DFMT_A8R8G8B8,
|
|
D3DFMT_X8R8G8B8,
|
|
D3DFMT_R5G6B5,
|
|
D3DFMT_X1R5G5B5,
|
|
D3DFMT_A1R5G5B5,
|
|
D3DFMT_A4R4G4B4,
|
|
D3DFMT_R3G3B2,
|
|
D3DFMT_A8,
|
|
D3DFMT_A8R3G3B2,
|
|
D3DFMT_X4R4G4B4,
|
|
D3DFMT_A2B10G10R10,
|
|
D3DFMT_A8B8G8R8,
|
|
D3DFMT_X8B8G8R8,
|
|
D3DFMT_G16R16,
|
|
D3DFMT_A2R10G10B10,
|
|
D3DFMT_A16B16G16R16,
|
|
|
|
D3DFMT_A8P8,
|
|
D3DFMT_P8,
|
|
|
|
D3DFMT_L8,
|
|
D3DFMT_A8L8,
|
|
D3DFMT_A4L4,
|
|
|
|
D3DFMT_V8U8,
|
|
D3DFMT_L6V5U5,
|
|
D3DFMT_X8L8V8U8,
|
|
D3DFMT_Q8W8V8U8,
|
|
D3DFMT_V16U16,
|
|
D3DFMT_A2W10V10U10,
|
|
|
|
D3DFMT_UYVY,
|
|
D3DFMT_R8G8_B8G8,
|
|
D3DFMT_YUY2,
|
|
D3DFMT_G8R8_G8B8,
|
|
D3DFMT_DXT1,
|
|
D3DFMT_DXT2,
|
|
D3DFMT_DXT3,
|
|
D3DFMT_DXT4,
|
|
D3DFMT_DXT5,
|
|
|
|
D3DFMT_D16_LOCKABLE,
|
|
D3DFMT_D32,
|
|
D3DFMT_D15S1,
|
|
D3DFMT_D24S8,
|
|
D3DFMT_D24X8,
|
|
D3DFMT_D24X4S4,
|
|
D3DFMT_D16,
|
|
|
|
D3DFMT_D32F_LOCKABLE,
|
|
D3DFMT_D24FS8,
|
|
|
|
D3DFMT_L16,
|
|
|
|
D3DFMT_VERTEXDATA,
|
|
D3DFMT_INDEX16,
|
|
D3DFMT_INDEX32,
|
|
|
|
D3DFMT_Q16W16V16U16,
|
|
|
|
D3DFMT_MULTI2_ARGB8,
|
|
|
|
D3DFMT_R16F,
|
|
D3DFMT_G16R16F,
|
|
D3DFMT_A16B16G16R16F,
|
|
|
|
D3DFMT_R32F,
|
|
D3DFMT_G32R32F,
|
|
D3DFMT_A32B32G32R32F,
|
|
|
|
D3DFMT_CxV8U8,
|
|
|
|
(D3DFORMAT)D3DFMT_D32_LOCKABLE,
|
|
(D3DFORMAT)D3DFMT_S8_LOCKABLE,
|
|
(D3DFORMAT)D3DFMT_A1,
|
|
};
|
|
const int NumFormats = sizeof(AllFormatArray) / sizeof(AllFormatArray[0]);
|
|
|
|
// A subset of AllFormatArray...it's those D3DFMTs that could possibly be
|
|
// adapter (display) formats.
|
|
D3DFORMAT AdapterFormatArray[] =
|
|
{
|
|
D3DFMT_A2R10G10B10,
|
|
D3DFMT_X8R8G8B8,
|
|
D3DFMT_R8G8B8,
|
|
D3DFMT_X1R5G5B5,
|
|
D3DFMT_R5G6B5,
|
|
};
|
|
const int NumAdapterFormats = sizeof(AdapterFormatArray) / sizeof(AdapterFormatArray[0]);
|
|
|
|
// A subset of AllFormatArray...it's those D3DFMTs that could possibly be
|
|
// back buffer formats.
|
|
D3DFORMAT BBFormatArray[] =
|
|
{
|
|
D3DFMT_A2R10G10B10,
|
|
D3DFMT_A8R8G8B8,
|
|
D3DFMT_X8R8G8B8,
|
|
D3DFMT_A1R5G5B5,
|
|
D3DFMT_X1R5G5B5,
|
|
D3DFMT_R5G6B5,
|
|
};
|
|
const int NumBBFormats = sizeof(BBFormatArray) / sizeof(BBFormatArray[0]);
|
|
|
|
// A subset of AllFormatArray...it's those D3DFMTs that could possibly be
|
|
// depth/stencil formats.
|
|
D3DFORMAT DSFormatArray[] =
|
|
{
|
|
D3DFMT_D16_LOCKABLE,
|
|
D3DFMT_D32,
|
|
D3DFMT_D15S1,
|
|
D3DFMT_D24S8,
|
|
D3DFMT_D24X8,
|
|
D3DFMT_D24X4S4,
|
|
D3DFMT_D16,
|
|
D3DFMT_D32F_LOCKABLE,
|
|
D3DFMT_D24FS8,
|
|
};
|
|
const int NumDSFormats = sizeof(DSFormatArray) / sizeof(DSFormatArray[0]);
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
CAPDEF DXGGenCaps[] =
|
|
{
|
|
CAPSVALDEF("DeviceType", DeviceType),
|
|
CAPSVALDEF("AdapterOrdinal", AdapterOrdinal),
|
|
|
|
CAPSVALDEF("MaxTextureWidth", MaxTextureWidth),
|
|
CAPSVALDEF("MaxTextureHeight", MaxTextureHeight),
|
|
CAPSVALDEF("MaxVolumeExtent", MaxVolumeExtent),
|
|
|
|
CAPSVALDEF("MaxTextureRepeat", MaxTextureRepeat),
|
|
CAPSVALDEF("MaxTextureAspectRatio", MaxTextureAspectRatio),
|
|
CAPSVALDEF("MaxAnisotropy", MaxAnisotropy),
|
|
CAPSFLOATDEF("MaxVertexW", MaxVertexW),
|
|
|
|
CAPSFLOATDEF("GuardBandLeft", GuardBandLeft),
|
|
CAPSFLOATDEF("GuardBandTop", GuardBandTop),
|
|
CAPSFLOATDEF("GuardBandRight", GuardBandRight),
|
|
CAPSFLOATDEF("GuardBandBottom", GuardBandBottom),
|
|
|
|
CAPSFLOATDEF("ExtentsAdjust", ExtentsAdjust),
|
|
|
|
CAPSVALDEF("MaxTextureBlendStages", MaxTextureBlendStages),
|
|
CAPSVALDEF("MaxSimultaneousTextures", MaxSimultaneousTextures),
|
|
|
|
CAPSVALDEF("MaxActiveLights", MaxActiveLights),
|
|
CAPSVALDEF("MaxUserClipPlanes", MaxUserClipPlanes),
|
|
CAPSVALDEF("MaxVertexBlendMatrices", MaxVertexBlendMatrices),
|
|
CAPSVALDEF("MaxVertexBlendMatrixIndex", MaxVertexBlendMatrixIndex),
|
|
|
|
CAPSFLOATDEF("MaxPointSize", MaxPointSize),
|
|
|
|
CAPSVALDEF("MaxPrimitiveCount", MaxPrimitiveCount),
|
|
CAPSVALDEF("MaxVertexIndex", MaxVertexIndex),
|
|
CAPSVALDEF("MaxStreams", MaxStreams),
|
|
CAPSVALDEF("MaxStreamStride", MaxStreamStride),
|
|
|
|
CAPSSHADERDEF("VertexShaderVersion", VertexShaderVersion),
|
|
CAPSVALDEF("MaxVertexShaderConst", MaxVertexShaderConst),
|
|
|
|
CAPSSHADERDEF("PixelShaderVersion", PixelShaderVersion),
|
|
CAPSFLOATDEF("PixelShader1xMaxValue", PixelShader1xMaxValue),
|
|
|
|
CAPSFLOATDEF("MaxNpatchTessellationLevel", MaxNpatchTessellationLevel),
|
|
|
|
CAPSVALDEF("MasterAdapterOrdinal", MasterAdapterOrdinal),
|
|
CAPSVALDEF("AdapterOrdinalInGroup", AdapterOrdinalInGroup),
|
|
CAPSVALDEF("NumberOfAdaptersInGroup", NumberOfAdaptersInGroup),
|
|
CAPSVALDEF("NumSimultaneousRTs", NumSimultaneousRTs),
|
|
CAPSVALDEF("MaxVShaderInstructionsExecuted", MaxVShaderInstructionsExecuted),
|
|
CAPSVALDEF("MaxPShaderInstructionsExecuted", MaxPShaderInstructionsExecuted),
|
|
CAPSVALDEF("MaxVertexShader30InstructionSlots", MaxVertexShader30InstructionSlots),
|
|
CAPSVALDEF("MaxPixelShader30InstructionSlots", MaxPixelShader30InstructionSlots),
|
|
|
|
{ nullptr, 0, 0 }
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
CAPDEF CapsCaps[] =
|
|
{
|
|
CAPSFLAGDEF("D3DCAPS_READ_SCANLINE", Caps, D3DCAPS_READ_SCANLINE),
|
|
CAPSFLAGDEFex("D3DCAPS_OVERLAY", Caps, D3DCAPS_OVERLAY),
|
|
{"",0,0}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
CAPDEF CapsCaps2[] =
|
|
{
|
|
CAPSFLAGDEF("D3DCAPS2_CANCALIBRATEGAMMA", Caps2, D3DCAPS2_CANCALIBRATEGAMMA),
|
|
CAPSFLAGDEF("D3DCAPS2_FULLSCREENGAMMA", Caps2, D3DCAPS2_FULLSCREENGAMMA),
|
|
CAPSFLAGDEF("D3DCAPS2_CANMANAGERESOURCE", Caps2, D3DCAPS2_CANMANAGERESOURCE),
|
|
CAPSFLAGDEF("D3DCAPS2_DYNAMICTEXTURES", Caps2, D3DCAPS2_DYNAMICTEXTURES),
|
|
CAPSFLAGDEF("D3DCAPS2_CANAUTOGENMIPMAP", Caps2, D3DCAPS2_CANAUTOGENMIPMAP),
|
|
CAPSFLAGDEFex("D3DCAPS2_CANSHARERESOURCE", Caps2, D3DCAPS2_CANSHARERESOURCE),
|
|
{"",0,0}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
CAPDEF CapsCaps3[] =
|
|
{
|
|
CAPSFLAGDEF("D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD", Caps3, D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD),
|
|
CAPSFLAGDEF("D3DCAPS3_LINEAR_TO_SRGB_PRESENTATION", Caps3, D3DCAPS3_LINEAR_TO_SRGB_PRESENTATION),
|
|
CAPSFLAGDEF("D3DCAPS3_COPY_TO_VIDMEM", Caps3, D3DCAPS3_COPY_TO_VIDMEM),
|
|
CAPSFLAGDEF("D3DCAPS3_COPY_TO_SYSTEMMEM", Caps3, D3DCAPS3_COPY_TO_SYSTEMMEM),
|
|
CAPSFLAGDEFex("D3DCAPS3_DXVAHD", Caps3, D3DCAPS3_DXVAHD),
|
|
{"",0,0}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
CAPDEF CapsPresentationIntervals[] =
|
|
{
|
|
CAPSFLAGDEF("D3DPRESENT_INTERVAL_ONE", PresentationIntervals, D3DPRESENT_INTERVAL_ONE),
|
|
CAPSFLAGDEF("D3DPRESENT_INTERVAL_TWO", PresentationIntervals, D3DPRESENT_INTERVAL_TWO),
|
|
CAPSFLAGDEF("D3DPRESENT_INTERVAL_THREE", PresentationIntervals, D3DPRESENT_INTERVAL_THREE),
|
|
CAPSFLAGDEF("D3DPRESENT_INTERVAL_FOUR", PresentationIntervals, D3DPRESENT_INTERVAL_FOUR),
|
|
CAPSFLAGDEF("D3DPRESENT_INTERVAL_IMMEDIATE", PresentationIntervals, D3DPRESENT_INTERVAL_IMMEDIATE),
|
|
{"",0,0}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
CAPDEF CapsCursorCaps[] =
|
|
{
|
|
CAPSFLAGDEF("D3DCURSORCAPS_COLOR", CursorCaps, D3DCURSORCAPS_COLOR),
|
|
CAPSFLAGDEF("D3DCURSORCAPS_LOWRES", CursorCaps, D3DCURSORCAPS_LOWRES),
|
|
{"",0,0}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
CAPDEF CapsDevCaps[] =
|
|
{
|
|
CAPSFLAGDEF("D3DDEVCAPS_EXECUTESYSTEMMEMORY", DevCaps, D3DDEVCAPS_EXECUTESYSTEMMEMORY),
|
|
CAPSFLAGDEF("D3DDEVCAPS_EXECUTEVIDEOMEMORY", DevCaps, D3DDEVCAPS_EXECUTEVIDEOMEMORY),
|
|
CAPSFLAGDEF("D3DDEVCAPS_TLVERTEXSYSTEMMEMORY", DevCaps, D3DDEVCAPS_TLVERTEXSYSTEMMEMORY),
|
|
CAPSFLAGDEF("D3DDEVCAPS_TLVERTEXVIDEOMEMORY", DevCaps, D3DDEVCAPS_TLVERTEXVIDEOMEMORY),
|
|
CAPSFLAGDEF("D3DDEVCAPS_TEXTURESYSTEMMEMORY", DevCaps, D3DDEVCAPS_TEXTURESYSTEMMEMORY),
|
|
CAPSFLAGDEF("D3DDEVCAPS_TEXTUREVIDEOMEMORY", DevCaps, D3DDEVCAPS_TEXTUREVIDEOMEMORY),
|
|
CAPSFLAGDEF("D3DDEVCAPS_DRAWPRIMTLVERTEX", DevCaps, D3DDEVCAPS_DRAWPRIMTLVERTEX),
|
|
CAPSFLAGDEF("D3DDEVCAPS_CANRENDERAFTERFLIP", DevCaps, D3DDEVCAPS_CANRENDERAFTERFLIP),
|
|
CAPSFLAGDEF("D3DDEVCAPS_TEXTURENONLOCALVIDMEM", DevCaps, D3DDEVCAPS_TEXTURENONLOCALVIDMEM),
|
|
CAPSFLAGDEF("D3DDEVCAPS_DRAWPRIMITIVES2", DevCaps, D3DDEVCAPS_DRAWPRIMITIVES2),
|
|
CAPSFLAGDEF("D3DDEVCAPS_SEPARATETEXTUREMEMORIES", DevCaps, D3DDEVCAPS_SEPARATETEXTUREMEMORIES),
|
|
CAPSFLAGDEF("D3DDEVCAPS_DRAWPRIMITIVES2EX", DevCaps, D3DDEVCAPS_DRAWPRIMITIVES2EX),
|
|
CAPSFLAGDEF("D3DDEVCAPS_HWTRANSFORMANDLIGHT", DevCaps, D3DDEVCAPS_HWTRANSFORMANDLIGHT),
|
|
CAPSFLAGDEF("D3DDEVCAPS_CANBLTSYSTONONLOCAL", DevCaps, D3DDEVCAPS_CANBLTSYSTONONLOCAL),
|
|
CAPSFLAGDEF("D3DDEVCAPS_HWRASTERIZATION", DevCaps, D3DDEVCAPS_HWRASTERIZATION),
|
|
CAPSFLAGDEF("D3DDEVCAPS_PUREDEVICE", DevCaps, D3DDEVCAPS_PUREDEVICE),
|
|
CAPSFLAGDEF("D3DDEVCAPS_QUINTICRTPATCHES", DevCaps, D3DDEVCAPS_QUINTICRTPATCHES),
|
|
CAPSFLAGDEF("D3DDEVCAPS_RTPATCHES", DevCaps, D3DDEVCAPS_RTPATCHES),
|
|
CAPSFLAGDEF("D3DDEVCAPS_RTPATCHHANDLEZERO", DevCaps, D3DDEVCAPS_RTPATCHHANDLEZERO),
|
|
CAPSFLAGDEF("D3DDEVCAPS_NPATCHES", DevCaps, D3DDEVCAPS_NPATCHES),
|
|
{"",0,0}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
CAPDEF CapsLineCaps[] =
|
|
{
|
|
CAPSFLAGDEF("D3DLINECAPS_TEXTURE", LineCaps, D3DLINECAPS_TEXTURE),
|
|
CAPSFLAGDEF("D3DLINECAPS_ZTEST", LineCaps, D3DLINECAPS_ZTEST),
|
|
CAPSFLAGDEF("D3DLINECAPS_BLEND", LineCaps, D3DLINECAPS_BLEND),
|
|
CAPSFLAGDEF("D3DLINECAPS_ALPHACMP", LineCaps, D3DLINECAPS_ALPHACMP),
|
|
CAPSFLAGDEF("D3DLINECAPS_FOG", LineCaps, D3DLINECAPS_FOG),
|
|
CAPSFLAGDEF("D3DLINECAPS_ANTIALIAS", LineCaps, D3DLINECAPS_ANTIALIAS),
|
|
{"",0,0}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
CAPDEF CapsStencilCaps[] =
|
|
{
|
|
CAPSFLAGDEF("D3DSTENCILCAPS_KEEP", StencilCaps, D3DSTENCILCAPS_KEEP),
|
|
CAPSFLAGDEF("D3DSTENCILCAPS_ZERO", StencilCaps, D3DSTENCILCAPS_ZERO),
|
|
CAPSFLAGDEF("D3DSTENCILCAPS_REPLACE", StencilCaps, D3DSTENCILCAPS_REPLACE),
|
|
CAPSFLAGDEF("D3DSTENCILCAPS_INCRSAT", StencilCaps, D3DSTENCILCAPS_INCRSAT),
|
|
CAPSFLAGDEF("D3DSTENCILCAPS_DECRSAT", StencilCaps, D3DSTENCILCAPS_DECRSAT),
|
|
CAPSFLAGDEF("D3DSTENCILCAPS_INVERT", StencilCaps, D3DSTENCILCAPS_INVERT),
|
|
CAPSFLAGDEF("D3DSTENCILCAPS_INCR", StencilCaps, D3DSTENCILCAPS_INCR),
|
|
CAPSFLAGDEF("D3DSTENCILCAPS_DECR", StencilCaps, D3DSTENCILCAPS_DECR),
|
|
CAPSFLAGDEF("D3DSTENCILCAPS_TWOSIDED", StencilCaps, D3DSTENCILCAPS_TWOSIDED),
|
|
{"",0,0}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
CAPDEF CapsFVFCaps[] =
|
|
{
|
|
CAPSFLAGDEF("D3DFVFCAPS_DONOTSTRIPELEMENTS", FVFCaps, D3DFVFCAPS_DONOTSTRIPELEMENTS),
|
|
CAPSMASK16DEF("D3DFVFCAPS_TEXCOORDCOUNTMASK", FVFCaps),
|
|
CAPSFLAGDEF("D3DFVFCAPS_PSIZE", FVFCaps, D3DFVFCAPS_PSIZE),
|
|
{"",0,0}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
CAPDEF CapsTextureOpCaps[] =
|
|
{
|
|
CAPSFLAGDEF("D3DTEXOPCAPS_DISABLE", TextureOpCaps, D3DTEXOPCAPS_DISABLE),
|
|
CAPSFLAGDEF("D3DTEXOPCAPS_SELECTARG1", TextureOpCaps, D3DTEXOPCAPS_SELECTARG1),
|
|
CAPSFLAGDEF("D3DTEXOPCAPS_SELECTARG2", TextureOpCaps, D3DTEXOPCAPS_SELECTARG2),
|
|
CAPSFLAGDEF("D3DTEXOPCAPS_MODULATE", TextureOpCaps, D3DTEXOPCAPS_MODULATE),
|
|
CAPSFLAGDEF("D3DTEXOPCAPS_MODULATE2X", TextureOpCaps, D3DTEXOPCAPS_MODULATE2X),
|
|
CAPSFLAGDEF("D3DTEXOPCAPS_MODULATE4X", TextureOpCaps, D3DTEXOPCAPS_MODULATE4X),
|
|
CAPSFLAGDEF("D3DTEXOPCAPS_ADD", TextureOpCaps, D3DTEXOPCAPS_ADD),
|
|
CAPSFLAGDEF("D3DTEXOPCAPS_ADDSIGNED", TextureOpCaps, D3DTEXOPCAPS_ADDSIGNED),
|
|
CAPSFLAGDEF("D3DTEXOPCAPS_ADDSIGNED2X", TextureOpCaps, D3DTEXOPCAPS_ADDSIGNED2X),
|
|
CAPSFLAGDEF("D3DTEXOPCAPS_SUBTRACT", TextureOpCaps, D3DTEXOPCAPS_SUBTRACT),
|
|
CAPSFLAGDEF("D3DTEXOPCAPS_ADDSMOOTH", TextureOpCaps, D3DTEXOPCAPS_ADDSMOOTH),
|
|
CAPSFLAGDEF("D3DTEXOPCAPS_BLENDDIFFUSEALPHA", TextureOpCaps, D3DTEXOPCAPS_BLENDDIFFUSEALPHA),
|
|
CAPSFLAGDEF("D3DTEXOPCAPS_BLENDTEXTUREALPHA", TextureOpCaps, D3DTEXOPCAPS_BLENDTEXTUREALPHA),
|
|
CAPSFLAGDEF("D3DTEXOPCAPS_BLENDFACTORALPHA", TextureOpCaps, D3DTEXOPCAPS_BLENDFACTORALPHA),
|
|
CAPSFLAGDEF("D3DTEXOPCAPS_BLENDTEXTUREALPHAPM", TextureOpCaps, D3DTEXOPCAPS_BLENDTEXTUREALPHAPM),
|
|
CAPSFLAGDEF("D3DTEXOPCAPS_BLENDCURRENTALPHA", TextureOpCaps, D3DTEXOPCAPS_BLENDCURRENTALPHA),
|
|
CAPSFLAGDEF("D3DTEXOPCAPS_PREMODULATE", TextureOpCaps, D3DTEXOPCAPS_PREMODULATE),
|
|
CAPSFLAGDEF("D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR", TextureOpCaps, D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR),
|
|
CAPSFLAGDEF("D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA", TextureOpCaps, D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA),
|
|
CAPSFLAGDEF("D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR", TextureOpCaps, D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR),
|
|
CAPSFLAGDEF("D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA", TextureOpCaps, D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA),
|
|
CAPSFLAGDEF("D3DTEXOPCAPS_BUMPENVMAP", TextureOpCaps, D3DTEXOPCAPS_BUMPENVMAP),
|
|
CAPSFLAGDEF("D3DTEXOPCAPS_BUMPENVMAPLUMINANCE", TextureOpCaps, D3DTEXOPCAPS_BUMPENVMAPLUMINANCE),
|
|
CAPSFLAGDEF("D3DTEXOPCAPS_DOTPRODUCT3", TextureOpCaps, D3DTEXOPCAPS_DOTPRODUCT3),
|
|
CAPSFLAGDEF("D3DTEXOPCAPS_MULTIPLYADD", TextureOpCaps, D3DTEXOPCAPS_MULTIPLYADD),
|
|
CAPSFLAGDEF("D3DTEXOPCAPS_LERP", TextureOpCaps, D3DTEXOPCAPS_LERP),
|
|
{"",0,0}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
CAPDEF CapsVertexProcessingCaps[] =
|
|
{
|
|
CAPSFLAGDEF("D3DVTXPCAPS_DIRECTIONALLIGHTS", VertexProcessingCaps, D3DVTXPCAPS_DIRECTIONALLIGHTS),
|
|
CAPSFLAGDEF("D3DVTXPCAPS_LOCALVIEWER", VertexProcessingCaps, D3DVTXPCAPS_LOCALVIEWER),
|
|
CAPSFLAGDEF("D3DVTXPCAPS_MATERIALSOURCE7", VertexProcessingCaps, D3DVTXPCAPS_MATERIALSOURCE7),
|
|
CAPSFLAGDEF("D3DVTXPCAPS_POSITIONALLIGHTS", VertexProcessingCaps, D3DVTXPCAPS_POSITIONALLIGHTS),
|
|
CAPSFLAGDEF("D3DVTXPCAPS_TEXGEN", VertexProcessingCaps, D3DVTXPCAPS_TEXGEN),
|
|
CAPSFLAGDEF("D3DVTXPCAPS_TWEENING", VertexProcessingCaps, D3DVTXPCAPS_TWEENING),
|
|
CAPSFLAGDEF("D3DVTXPCAPS_TEXGEN_SPHEREMAP", VertexProcessingCaps, D3DVTXPCAPS_TEXGEN_SPHEREMAP),
|
|
CAPSFLAGDEF("D3DVTXPCAPS_NO_TEXGEN_NONLOCALVIEWER", VertexProcessingCaps, D3DVTXPCAPS_NO_TEXGEN_NONLOCALVIEWER),
|
|
{"",0,0}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
CAPDEF CapsPrimMiscCaps[] =
|
|
{
|
|
CAPSFLAGDEF("D3DPMISCCAPS_MASKZ", PrimitiveMiscCaps, D3DPMISCCAPS_MASKZ),
|
|
CAPSFLAGDEF("D3DPMISCCAPS_CULLNONE", PrimitiveMiscCaps, D3DPMISCCAPS_CULLNONE),
|
|
CAPSFLAGDEF("D3DPMISCCAPS_CULLCW", PrimitiveMiscCaps, D3DPMISCCAPS_CULLCW),
|
|
CAPSFLAGDEF("D3DPMISCCAPS_CULLCCW", PrimitiveMiscCaps, D3DPMISCCAPS_CULLCCW),
|
|
CAPSFLAGDEF("D3DPMISCCAPS_COLORWRITEENABLE", PrimitiveMiscCaps, D3DPMISCCAPS_COLORWRITEENABLE),
|
|
CAPSFLAGDEF("D3DPMISCCAPS_CLIPPLANESCALEDPOINTS", PrimitiveMiscCaps, D3DPMISCCAPS_CLIPPLANESCALEDPOINTS),
|
|
CAPSFLAGDEF("D3DPMISCCAPS_CLIPTLVERTS", PrimitiveMiscCaps, D3DPMISCCAPS_CLIPTLVERTS),
|
|
CAPSFLAGDEF("D3DPMISCCAPS_TSSARGTEMP", PrimitiveMiscCaps, D3DPMISCCAPS_TSSARGTEMP),
|
|
CAPSFLAGDEF("D3DPMISCCAPS_BLENDOP", PrimitiveMiscCaps, D3DPMISCCAPS_BLENDOP),
|
|
CAPSFLAGDEF("D3DPMISCCAPS_NULLREFERENCE", PrimitiveMiscCaps, D3DPMISCCAPS_NULLREFERENCE),
|
|
CAPSFLAGDEF("D3DPMISCCAPS_INDEPENDENTWRITEMASKS", PrimitiveMiscCaps, D3DPMISCCAPS_INDEPENDENTWRITEMASKS),
|
|
CAPSFLAGDEF("D3DPMISCCAPS_PERSTAGECONSTANT", PrimitiveMiscCaps, D3DPMISCCAPS_PERSTAGECONSTANT),
|
|
CAPSFLAGDEF("D3DPMISCCAPS_FOGANDSPECULARALPHA", PrimitiveMiscCaps, D3DPMISCCAPS_FOGANDSPECULARALPHA),
|
|
CAPSFLAGDEF("D3DPMISCCAPS_SEPARATEALPHABLEND", PrimitiveMiscCaps, D3DPMISCCAPS_SEPARATEALPHABLEND),
|
|
CAPSFLAGDEF("D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS", PrimitiveMiscCaps, D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS),
|
|
CAPSFLAGDEF("D3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING", PrimitiveMiscCaps, D3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING),
|
|
CAPSFLAGDEF("D3DPMISCCAPS_FOGVERTEXCLAMPED", PrimitiveMiscCaps, D3DPMISCCAPS_FOGVERTEXCLAMPED),
|
|
CAPSFLAGDEFex("D3DPMISCCAPS_POSTBLENDSRGBCONVERT", PrimitiveMiscCaps, D3DPMISCCAPS_POSTBLENDSRGBCONVERT),
|
|
{"",0,0}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
CAPDEF CapsRasterCaps[] =
|
|
{
|
|
CAPSFLAGDEF("D3DPRASTERCAPS_DITHER", RasterCaps, D3DPRASTERCAPS_DITHER),
|
|
CAPSFLAGDEF("D3DPRASTERCAPS_ZTEST", RasterCaps, D3DPRASTERCAPS_ZTEST),
|
|
CAPSFLAGDEF("D3DPRASTERCAPS_FOGVERTEX", RasterCaps, D3DPRASTERCAPS_FOGVERTEX),
|
|
CAPSFLAGDEF("D3DPRASTERCAPS_FOGTABLE", RasterCaps, D3DPRASTERCAPS_FOGTABLE),
|
|
// CAPSFLAGDEF("D3DPRASTERCAPS_ANTIALIASEDGES", RasterCaps, D3DPRASTERCAPS_ANTIALIASEDGES),
|
|
CAPSFLAGDEF("D3DPRASTERCAPS_MIPMAPLODBIAS", RasterCaps, D3DPRASTERCAPS_MIPMAPLODBIAS),
|
|
// CAPSFLAGDEF("D3DPRASTERCAPS_ZBIAS", RasterCaps, D3DPRASTERCAPS_ZBIAS),
|
|
CAPSFLAGDEF("D3DPRASTERCAPS_ZBUFFERLESSHSR", RasterCaps, D3DPRASTERCAPS_ZBUFFERLESSHSR),
|
|
CAPSFLAGDEF("D3DPRASTERCAPS_FOGRANGE", RasterCaps, D3DPRASTERCAPS_FOGRANGE),
|
|
CAPSFLAGDEF("D3DPRASTERCAPS_ANISOTROPY", RasterCaps, D3DPRASTERCAPS_ANISOTROPY),
|
|
CAPSFLAGDEF("D3DPRASTERCAPS_WBUFFER", RasterCaps, D3DPRASTERCAPS_WBUFFER),
|
|
CAPSFLAGDEF("D3DPRASTERCAPS_WFOG", RasterCaps, D3DPRASTERCAPS_WFOG),
|
|
CAPSFLAGDEF("D3DPRASTERCAPS_ZFOG", RasterCaps, D3DPRASTERCAPS_ZFOG),
|
|
CAPSFLAGDEF("D3DPRASTERCAPS_COLORPERSPECTIVE", RasterCaps, D3DPRASTERCAPS_COLORPERSPECTIVE),
|
|
// CAPSFLAGDEF("D3DPRASTERCAPS_STRETCHBLTMULTISAMPLE", RasterCaps, D3DPRASTERCAPS_STRETCHBLTMULTISAMPLE),
|
|
CAPSFLAGDEF("D3DPRASTERCAPS_SCISSORTEST", RasterCaps, D3DPRASTERCAPS_SCISSORTEST),
|
|
CAPSFLAGDEF("D3DPRASTERCAPS_SLOPESCALEDEPTHBIAS", RasterCaps, D3DPRASTERCAPS_SLOPESCALEDEPTHBIAS),
|
|
CAPSFLAGDEF("D3DPRASTERCAPS_DEPTHBIAS", RasterCaps, D3DPRASTERCAPS_DEPTHBIAS),
|
|
CAPSFLAGDEF("D3DPRASTERCAPS_MULTISAMPLE_TOGGLE",RasterCaps, D3DPRASTERCAPS_MULTISAMPLE_TOGGLE),
|
|
{"",0,0}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
CAPDEF CapsZCmpCaps[] =
|
|
{
|
|
CAPSFLAGDEF("D3DPCMPCAPS_NEVER", ZCmpCaps, D3DPCMPCAPS_NEVER),
|
|
CAPSFLAGDEF("D3DPCMPCAPS_LESS", ZCmpCaps, D3DPCMPCAPS_LESS),
|
|
CAPSFLAGDEF("D3DPCMPCAPS_EQUAL", ZCmpCaps, D3DPCMPCAPS_EQUAL),
|
|
CAPSFLAGDEF("D3DPCMPCAPS_LESSEQUAL", ZCmpCaps, D3DPCMPCAPS_LESSEQUAL),
|
|
CAPSFLAGDEF("D3DPCMPCAPS_GREATER", ZCmpCaps, D3DPCMPCAPS_GREATER),
|
|
CAPSFLAGDEF("D3DPCMPCAPS_NOTEQUAL", ZCmpCaps, D3DPCMPCAPS_NOTEQUAL),
|
|
CAPSFLAGDEF("D3DPCMPCAPS_GREATEREQUAL", ZCmpCaps, D3DPCMPCAPS_GREATEREQUAL),
|
|
CAPSFLAGDEF("D3DPCMPCAPS_ALWAYS", ZCmpCaps, D3DPCMPCAPS_ALWAYS),
|
|
{"",0,0}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
CAPDEF CapsSrcBlendCaps[] =
|
|
{
|
|
CAPSFLAGDEF("D3DPBLENDCAPS_ZERO", SrcBlendCaps, D3DPBLENDCAPS_ZERO),
|
|
CAPSFLAGDEF("D3DPBLENDCAPS_ONE", SrcBlendCaps, D3DPBLENDCAPS_ONE),
|
|
CAPSFLAGDEF("D3DPBLENDCAPS_SRCCOLOR", SrcBlendCaps, D3DPBLENDCAPS_SRCCOLOR),
|
|
CAPSFLAGDEF("D3DPBLENDCAPS_INVSRCCOLOR", SrcBlendCaps, D3DPBLENDCAPS_INVSRCCOLOR),
|
|
CAPSFLAGDEF("D3DPBLENDCAPS_SRCALPHA", SrcBlendCaps, D3DPBLENDCAPS_SRCALPHA),
|
|
CAPSFLAGDEF("D3DPBLENDCAPS_INVSRCALPHA", SrcBlendCaps, D3DPBLENDCAPS_INVSRCALPHA),
|
|
CAPSFLAGDEF("D3DPBLENDCAPS_DESTALPHA", SrcBlendCaps, D3DPBLENDCAPS_DESTALPHA),
|
|
CAPSFLAGDEF("D3DPBLENDCAPS_INVDESTALPHA", SrcBlendCaps, D3DPBLENDCAPS_INVDESTALPHA),
|
|
CAPSFLAGDEF("D3DPBLENDCAPS_DESTCOLOR", SrcBlendCaps, D3DPBLENDCAPS_DESTCOLOR),
|
|
CAPSFLAGDEF("D3DPBLENDCAPS_INVDESTCOLOR", SrcBlendCaps, D3DPBLENDCAPS_INVDESTCOLOR),
|
|
CAPSFLAGDEF("D3DPBLENDCAPS_SRCALPHASAT", SrcBlendCaps, D3DPBLENDCAPS_SRCALPHASAT),
|
|
CAPSFLAGDEF("D3DPBLENDCAPS_BOTHSRCALPHA", SrcBlendCaps, D3DPBLENDCAPS_BOTHSRCALPHA),
|
|
CAPSFLAGDEF("D3DPBLENDCAPS_BOTHINVSRCALPHA", SrcBlendCaps, D3DPBLENDCAPS_BOTHINVSRCALPHA),
|
|
CAPSFLAGDEF("D3DPBLENDCAPS_BLENDFACTOR", SrcBlendCaps, D3DPBLENDCAPS_BLENDFACTOR),
|
|
CAPSFLAGDEFex("D3DPBLENDCAPS_SRCCOLOR2", SrcBlendCaps, D3DPBLENDCAPS_SRCCOLOR2),
|
|
CAPSFLAGDEFex("D3DPBLENDCAPS_INVSRCCOLOR2", SrcBlendCaps, D3DPBLENDCAPS_INVSRCCOLOR2),
|
|
{"",0,0}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
CAPDEF CapsDestBlendCaps[] =
|
|
{
|
|
CAPSFLAGDEF("D3DPBLENDCAPS_ZERO", DestBlendCaps, D3DPBLENDCAPS_ZERO),
|
|
CAPSFLAGDEF("D3DPBLENDCAPS_ONE", DestBlendCaps, D3DPBLENDCAPS_ONE),
|
|
CAPSFLAGDEF("D3DPBLENDCAPS_SRCCOLOR", DestBlendCaps, D3DPBLENDCAPS_SRCCOLOR),
|
|
CAPSFLAGDEF("D3DPBLENDCAPS_INVSRCCOLOR", DestBlendCaps, D3DPBLENDCAPS_INVSRCCOLOR),
|
|
CAPSFLAGDEF("D3DPBLENDCAPS_SRCALPHA", DestBlendCaps, D3DPBLENDCAPS_SRCALPHA),
|
|
CAPSFLAGDEF("D3DPBLENDCAPS_INVSRCALPHA", DestBlendCaps, D3DPBLENDCAPS_INVSRCALPHA),
|
|
CAPSFLAGDEF("D3DPBLENDCAPS_DESTALPHA", DestBlendCaps, D3DPBLENDCAPS_DESTALPHA),
|
|
CAPSFLAGDEF("D3DPBLENDCAPS_INVDESTALPHA", DestBlendCaps, D3DPBLENDCAPS_INVDESTALPHA),
|
|
CAPSFLAGDEF("D3DPBLENDCAPS_DESTCOLOR", DestBlendCaps, D3DPBLENDCAPS_DESTCOLOR),
|
|
CAPSFLAGDEF("D3DPBLENDCAPS_INVDESTCOLOR", DestBlendCaps, D3DPBLENDCAPS_INVDESTCOLOR),
|
|
CAPSFLAGDEF("D3DPBLENDCAPS_SRCALPHASAT", DestBlendCaps, D3DPBLENDCAPS_SRCALPHASAT),
|
|
CAPSFLAGDEF("D3DPBLENDCAPS_BOTHSRCALPHA", DestBlendCaps, D3DPBLENDCAPS_BOTHSRCALPHA),
|
|
CAPSFLAGDEF("D3DPBLENDCAPS_BOTHINVSRCALPHA", DestBlendCaps, D3DPBLENDCAPS_BOTHINVSRCALPHA),
|
|
CAPSFLAGDEF("D3DPBLENDCAPS_BLENDFACTOR", DestBlendCaps, D3DPBLENDCAPS_BLENDFACTOR),
|
|
CAPSFLAGDEFex("D3DPBLENDCAPS_SRCCOLOR2", DestBlendCaps, D3DPBLENDCAPS_SRCCOLOR2),
|
|
CAPSFLAGDEFex("D3DPBLENDCAPS_INVSRCCOLOR2", DestBlendCaps, D3DPBLENDCAPS_INVSRCCOLOR2),
|
|
{"",0,0}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
CAPDEF CapsAlphaCmpCaps[] =
|
|
{
|
|
CAPSFLAGDEF("D3DPCMPCAPS_NEVER", AlphaCmpCaps, D3DPCMPCAPS_NEVER),
|
|
CAPSFLAGDEF("D3DPCMPCAPS_LESS", AlphaCmpCaps, D3DPCMPCAPS_LESS),
|
|
CAPSFLAGDEF("D3DPCMPCAPS_EQUAL", AlphaCmpCaps, D3DPCMPCAPS_EQUAL),
|
|
CAPSFLAGDEF("D3DPCMPCAPS_LESSEQUAL", AlphaCmpCaps, D3DPCMPCAPS_LESSEQUAL),
|
|
CAPSFLAGDEF("D3DPCMPCAPS_GREATER", AlphaCmpCaps, D3DPCMPCAPS_GREATER),
|
|
CAPSFLAGDEF("D3DPCMPCAPS_NOTEQUAL", AlphaCmpCaps, D3DPCMPCAPS_NOTEQUAL),
|
|
CAPSFLAGDEF("D3DPCMPCAPS_GREATEREQUAL", AlphaCmpCaps, D3DPCMPCAPS_GREATEREQUAL),
|
|
CAPSFLAGDEF("D3DPCMPCAPS_ALWAYS", AlphaCmpCaps, D3DPCMPCAPS_ALWAYS),
|
|
{"",0,0}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
CAPDEF CapsShadeCaps[] =
|
|
{
|
|
CAPSFLAGDEF("D3DPSHADECAPS_COLORGOURAUDRGB", ShadeCaps, D3DPSHADECAPS_COLORGOURAUDRGB),
|
|
CAPSFLAGDEF("D3DPSHADECAPS_SPECULARGOURAUDRGB", ShadeCaps, D3DPSHADECAPS_SPECULARGOURAUDRGB),
|
|
CAPSFLAGDEF("D3DPSHADECAPS_ALPHAGOURAUDBLEND", ShadeCaps, D3DPSHADECAPS_ALPHAGOURAUDBLEND),
|
|
CAPSFLAGDEF("D3DPSHADECAPS_FOGGOURAUD", ShadeCaps, D3DPSHADECAPS_FOGGOURAUD),
|
|
{"",0,0}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
CAPDEF CapsTextureCaps[] =
|
|
{
|
|
CAPSFLAGDEF("D3DPTEXTURECAPS_PERSPECTIVE", TextureCaps, D3DPTEXTURECAPS_PERSPECTIVE),
|
|
CAPSFLAGDEF("D3DPTEXTURECAPS_POW2", TextureCaps, D3DPTEXTURECAPS_POW2),
|
|
CAPSFLAGDEF("D3DPTEXTURECAPS_ALPHA", TextureCaps, D3DPTEXTURECAPS_ALPHA),
|
|
CAPSFLAGDEF("D3DPTEXTURECAPS_SQUAREONLY", TextureCaps, D3DPTEXTURECAPS_SQUAREONLY),
|
|
CAPSFLAGDEF("D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE", TextureCaps, D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE),
|
|
CAPSFLAGDEF("D3DPTEXTURECAPS_ALPHAPALETTE", TextureCaps, D3DPTEXTURECAPS_ALPHAPALETTE),
|
|
CAPSFLAGDEF("D3DPTEXTURECAPS_NONPOW2CONDITIONAL", TextureCaps, D3DPTEXTURECAPS_NONPOW2CONDITIONAL),
|
|
CAPSFLAGDEF("D3DPTEXTURECAPS_PROJECTED", TextureCaps, D3DPTEXTURECAPS_PROJECTED),
|
|
CAPSFLAGDEF("D3DPTEXTURECAPS_CUBEMAP", TextureCaps, D3DPTEXTURECAPS_CUBEMAP),
|
|
CAPSFLAGDEF("D3DPTEXTURECAPS_VOLUMEMAP", TextureCaps, D3DPTEXTURECAPS_VOLUMEMAP),
|
|
CAPSFLAGDEF("D3DPTEXTURECAPS_MIPMAP", TextureCaps, D3DPTEXTURECAPS_MIPMAP),
|
|
CAPSFLAGDEF("D3DPTEXTURECAPS_MIPVOLUMEMAP", TextureCaps, D3DPTEXTURECAPS_MIPVOLUMEMAP),
|
|
CAPSFLAGDEF("D3DPTEXTURECAPS_MIPCUBEMAP", TextureCaps, D3DPTEXTURECAPS_MIPCUBEMAP),
|
|
CAPSFLAGDEF("D3DPTEXTURECAPS_CUBEMAP_POW2", TextureCaps, D3DPTEXTURECAPS_CUBEMAP_POW2),
|
|
CAPSFLAGDEF("D3DPTEXTURECAPS_VOLUMEMAP_POW2", TextureCaps, D3DPTEXTURECAPS_VOLUMEMAP_POW2),
|
|
CAPSFLAGDEF("D3DPTEXTURECAPS_NOPROJECTEDBUMPENV", TextureCaps, D3DPTEXTURECAPS_NOPROJECTEDBUMPENV),
|
|
{"",0,0}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
CAPDEF CapsTextureFilterCaps[] =
|
|
{
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MINFPOINT", TextureFilterCaps, D3DPTFILTERCAPS_MINFPOINT),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MINFLINEAR", TextureFilterCaps, D3DPTFILTERCAPS_MINFLINEAR),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MINFANISOTROPIC", TextureFilterCaps, D3DPTFILTERCAPS_MINFANISOTROPIC),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MINFPYRAMIDALQUAD", TextureFilterCaps, D3DPTFILTERCAPS_MINFPYRAMIDALQUAD),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MINFGAUSSIANQUAD", TextureFilterCaps, D3DPTFILTERCAPS_MINFGAUSSIANQUAD),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MIPFPOINT", TextureFilterCaps, D3DPTFILTERCAPS_MIPFPOINT),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MIPFLINEAR", TextureFilterCaps, D3DPTFILTERCAPS_MIPFLINEAR),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MAGFPOINT", TextureFilterCaps, D3DPTFILTERCAPS_MAGFPOINT),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MAGFLINEAR", TextureFilterCaps, D3DPTFILTERCAPS_MAGFLINEAR),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MAGFANISOTROPIC", TextureFilterCaps, D3DPTFILTERCAPS_MAGFANISOTROPIC),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD", TextureFilterCaps, D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MAGFGAUSSIANQUAD", TextureFilterCaps, D3DPTFILTERCAPS_MAGFGAUSSIANQUAD),
|
|
CAPSFLAGDEFex("D3DPTFILTERCAPS_CONVOLUTIONMONO", TextureFilterCaps, D3DPTFILTERCAPS_CONVOLUTIONMONO),
|
|
{"",0,0}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
CAPDEF CapsCubeTextureFilterCaps[] =
|
|
{
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MINFPOINT", CubeTextureFilterCaps, D3DPTFILTERCAPS_MINFPOINT),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MINFLINEAR", CubeTextureFilterCaps, D3DPTFILTERCAPS_MINFLINEAR),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MINFANISOTROPIC", CubeTextureFilterCaps, D3DPTFILTERCAPS_MINFANISOTROPIC),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MINFPYRAMIDALQUAD", CubeTextureFilterCaps, D3DPTFILTERCAPS_MINFPYRAMIDALQUAD),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MINFGAUSSIANQUAD", CubeTextureFilterCaps, D3DPTFILTERCAPS_MINFGAUSSIANQUAD),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MIPFPOINT", CubeTextureFilterCaps, D3DPTFILTERCAPS_MIPFPOINT),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MIPFLINEAR", CubeTextureFilterCaps, D3DPTFILTERCAPS_MIPFLINEAR),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MAGFPOINT", CubeTextureFilterCaps, D3DPTFILTERCAPS_MAGFPOINT),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MAGFLINEAR", CubeTextureFilterCaps, D3DPTFILTERCAPS_MAGFLINEAR),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MAGFANISOTROPIC", CubeTextureFilterCaps, D3DPTFILTERCAPS_MAGFANISOTROPIC),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD", CubeTextureFilterCaps, D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MAGFGAUSSIANQUAD", CubeTextureFilterCaps, D3DPTFILTERCAPS_MAGFGAUSSIANQUAD),
|
|
{"",0,0}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
CAPDEF CapsVolumeTextureFilterCaps[] =
|
|
{
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MINFPOINT", VolumeTextureFilterCaps, D3DPTFILTERCAPS_MINFPOINT),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MINFLINEAR", VolumeTextureFilterCaps, D3DPTFILTERCAPS_MINFLINEAR),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MINFANISOTROPIC", VolumeTextureFilterCaps, D3DPTFILTERCAPS_MINFANISOTROPIC),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MINFPYRAMIDALQUAD", VolumeTextureFilterCaps, D3DPTFILTERCAPS_MINFPYRAMIDALQUAD),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MINFGAUSSIANQUAD", VolumeTextureFilterCaps, D3DPTFILTERCAPS_MINFGAUSSIANQUAD),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MIPFPOINT", VolumeTextureFilterCaps, D3DPTFILTERCAPS_MIPFPOINT),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MIPFLINEAR", VolumeTextureFilterCaps, D3DPTFILTERCAPS_MIPFLINEAR),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MAGFPOINT", VolumeTextureFilterCaps, D3DPTFILTERCAPS_MAGFPOINT),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MAGFLINEAR", VolumeTextureFilterCaps, D3DPTFILTERCAPS_MAGFLINEAR),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MAGFANISOTROPIC", VolumeTextureFilterCaps, D3DPTFILTERCAPS_MAGFANISOTROPIC),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD", VolumeTextureFilterCaps, D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MAGFGAUSSIANQUAD", VolumeTextureFilterCaps, D3DPTFILTERCAPS_MAGFGAUSSIANQUAD),
|
|
{"",0,0}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
CAPDEF CapsStretchRectFilterCaps[] =
|
|
{
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MINFPOINT", StretchRectFilterCaps, D3DPTFILTERCAPS_MINFPOINT),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MINFLINEAR", StretchRectFilterCaps, D3DPTFILTERCAPS_MINFLINEAR),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MINFANISOTROPIC", StretchRectFilterCaps, D3DPTFILTERCAPS_MINFANISOTROPIC),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MINFPYRAMIDALQUAD", StretchRectFilterCaps, D3DPTFILTERCAPS_MINFPYRAMIDALQUAD),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MINFGAUSSIANQUAD", StretchRectFilterCaps, D3DPTFILTERCAPS_MINFGAUSSIANQUAD),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MIPFPOINT", StretchRectFilterCaps, D3DPTFILTERCAPS_MIPFPOINT),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MIPFLINEAR", StretchRectFilterCaps, D3DPTFILTERCAPS_MIPFLINEAR),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MAGFPOINT", StretchRectFilterCaps, D3DPTFILTERCAPS_MAGFPOINT),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MAGFLINEAR", StretchRectFilterCaps, D3DPTFILTERCAPS_MAGFLINEAR),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MAGFANISOTROPIC", StretchRectFilterCaps, D3DPTFILTERCAPS_MAGFANISOTROPIC),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD", StretchRectFilterCaps, D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MAGFGAUSSIANQUAD", StretchRectFilterCaps, D3DPTFILTERCAPS_MAGFGAUSSIANQUAD),
|
|
{"",0,0}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
CAPDEF CapsTextureAddressCaps[] =
|
|
{
|
|
CAPSFLAGDEF("D3DPTADDRESSCAPS_WRAP", TextureAddressCaps, D3DPTADDRESSCAPS_WRAP),
|
|
CAPSFLAGDEF("D3DPTADDRESSCAPS_MIRROR", TextureAddressCaps, D3DPTADDRESSCAPS_MIRROR),
|
|
CAPSFLAGDEF("D3DPTADDRESSCAPS_CLAMP", TextureAddressCaps, D3DPTADDRESSCAPS_CLAMP),
|
|
CAPSFLAGDEF("D3DPTADDRESSCAPS_BORDER", TextureAddressCaps, D3DPTADDRESSCAPS_BORDER),
|
|
CAPSFLAGDEF("D3DPTADDRESSCAPS_INDEPENDENTUV", TextureAddressCaps, D3DPTADDRESSCAPS_INDEPENDENTUV),
|
|
CAPSFLAGDEF("D3DPTADDRESSCAPS_MIRRORONCE", TextureAddressCaps, D3DPTADDRESSCAPS_MIRRORONCE),
|
|
{"",0,0}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
CAPDEF CapsVolumeTextureAddressCaps[] =
|
|
{
|
|
CAPSFLAGDEF("D3DPTADDRESSCAPS_WRAP", VolumeTextureAddressCaps, D3DPTADDRESSCAPS_WRAP),
|
|
CAPSFLAGDEF("D3DPTADDRESSCAPS_MIRROR", VolumeTextureAddressCaps, D3DPTADDRESSCAPS_MIRROR),
|
|
CAPSFLAGDEF("D3DPTADDRESSCAPS_CLAMP", VolumeTextureAddressCaps, D3DPTADDRESSCAPS_CLAMP),
|
|
CAPSFLAGDEF("D3DPTADDRESSCAPS_BORDER", VolumeTextureAddressCaps, D3DPTADDRESSCAPS_BORDER),
|
|
CAPSFLAGDEF("D3DPTADDRESSCAPS_INDEPENDENTUV", VolumeTextureAddressCaps, D3DPTADDRESSCAPS_INDEPENDENTUV),
|
|
CAPSFLAGDEF("D3DPTADDRESSCAPS_MIRRORONCE", VolumeTextureAddressCaps, D3DPTADDRESSCAPS_MIRRORONCE),
|
|
{"",0,0}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
CAPDEF CapsDevCaps2[] =
|
|
{
|
|
CAPSFLAGDEF("D3DDEVCAPS2_STREAMOFFSET", DevCaps2, D3DDEVCAPS2_STREAMOFFSET),
|
|
CAPSFLAGDEF("D3DDEVCAPS2_DMAPNPATCH", DevCaps2, D3DDEVCAPS2_DMAPNPATCH),
|
|
CAPSFLAGDEF("D3DDEVCAPS2_ADAPTIVETESSRTPATCH", DevCaps2, D3DDEVCAPS2_ADAPTIVETESSRTPATCH),
|
|
CAPSFLAGDEF("D3DDEVCAPS2_ADAPTIVETESSNPATCH", DevCaps2, D3DDEVCAPS2_ADAPTIVETESSNPATCH),
|
|
CAPSFLAGDEF("D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES", DevCaps2, D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES),
|
|
CAPSFLAGDEF("D3DDEVCAPS2_PRESAMPLEDDMAPNPATCH", DevCaps2, D3DDEVCAPS2_PRESAMPLEDDMAPNPATCH),
|
|
CAPSFLAGDEF("D3DDEVCAPS2_VERTEXELEMENTSCANSHARESTREAMOFFSET", DevCaps2, D3DDEVCAPS2_VERTEXELEMENTSCANSHARESTREAMOFFSET),
|
|
{"",0,0}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
CAPDEF CapsDeclTypes[] =
|
|
{
|
|
CAPSFLAGDEF("D3DDTCAPS_UBYTE4", DeclTypes, D3DDTCAPS_UBYTE4),
|
|
CAPSFLAGDEF("D3DDTCAPS_UBYTE4N", DeclTypes, D3DDTCAPS_UBYTE4N),
|
|
CAPSFLAGDEF("D3DDTCAPS_SHORT2N", DeclTypes, D3DDTCAPS_SHORT2N),
|
|
CAPSFLAGDEF("D3DDTCAPS_SHORT4N", DeclTypes, D3DDTCAPS_SHORT4N),
|
|
CAPSFLAGDEF("D3DDTCAPS_USHORT2N", DeclTypes, D3DDTCAPS_USHORT2N),
|
|
CAPSFLAGDEF("D3DDTCAPS_USHORT4N", DeclTypes, D3DDTCAPS_USHORT4N),
|
|
CAPSFLAGDEF("D3DDTCAPS_UDEC3", DeclTypes, D3DDTCAPS_UDEC3),
|
|
CAPSFLAGDEF("D3DDTCAPS_DEC3N", DeclTypes, D3DDTCAPS_DEC3N),
|
|
CAPSFLAGDEF("D3DDTCAPS_FLOAT16_2", DeclTypes, D3DDTCAPS_FLOAT16_2),
|
|
CAPSFLAGDEF("D3DDTCAPS_FLOAT16_4", DeclTypes, D3DDTCAPS_FLOAT16_4),
|
|
{"",0,0}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
CAPDEF CapsVS20Caps[] =
|
|
{
|
|
CAPSFLAGDEF("D3DVS20CAPS_PREDICATION", VS20Caps.Caps, D3DVS20CAPS_PREDICATION),
|
|
CAPSVALDEF("DynamicFlowControlDepth", VS20Caps.DynamicFlowControlDepth),
|
|
CAPSVALDEF("NumTemps", VS20Caps.NumTemps),
|
|
CAPSVALDEF("StaticFlowControlDepth", VS20Caps.StaticFlowControlDepth),
|
|
{"",0,0}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
CAPDEF CapsPS20Caps[] =
|
|
{
|
|
CAPSFLAGDEF("D3DPS20CAPS_ARBITRARYSWIZZLE", PS20Caps.Caps, D3DPS20CAPS_ARBITRARYSWIZZLE),
|
|
CAPSFLAGDEF("D3DPS20CAPS_GRADIENTINSTRUCTIONS", PS20Caps.Caps, D3DPS20CAPS_GRADIENTINSTRUCTIONS),
|
|
CAPSFLAGDEF("D3DPS20CAPS_PREDICATION", PS20Caps.Caps, D3DPS20CAPS_PREDICATION),
|
|
CAPSFLAGDEF("D3DPS20CAPS_NODEPENDENTREADLIMIT", PS20Caps.Caps, D3DPS20CAPS_NODEPENDENTREADLIMIT),
|
|
CAPSFLAGDEF("D3DPS20CAPS_NOTEXINSTRUCTIONLIMIT", PS20Caps.Caps, D3DPS20CAPS_NOTEXINSTRUCTIONLIMIT),
|
|
CAPSVALDEF("DynamicFlowControlDepth", PS20Caps.DynamicFlowControlDepth),
|
|
CAPSVALDEF("NumTemps", PS20Caps.NumTemps),
|
|
CAPSVALDEF("StaticFlowControlDepth", PS20Caps.StaticFlowControlDepth),
|
|
CAPSVALDEF("NumInstructionSlots", PS20Caps.NumInstructionSlots),
|
|
{"",0,0}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
CAPDEF CapsVertexTextureFilterCaps[] =
|
|
{
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MINFPOINT", VertexTextureFilterCaps, D3DPTFILTERCAPS_MINFPOINT),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MINFLINEAR", VertexTextureFilterCaps, D3DPTFILTERCAPS_MINFLINEAR),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MINFANISOTROPIC", VertexTextureFilterCaps, D3DPTFILTERCAPS_MINFANISOTROPIC),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MINFPYRAMIDALQUAD", VertexTextureFilterCaps, D3DPTFILTERCAPS_MINFPYRAMIDALQUAD),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MINFGAUSSIANQUAD", VertexTextureFilterCaps, D3DPTFILTERCAPS_MINFGAUSSIANQUAD),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MIPFPOINT", VertexTextureFilterCaps, D3DPTFILTERCAPS_MIPFPOINT),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MIPFLINEAR", VertexTextureFilterCaps, D3DPTFILTERCAPS_MIPFLINEAR),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MAGFPOINT", VertexTextureFilterCaps, D3DPTFILTERCAPS_MAGFPOINT),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MAGFLINEAR", VertexTextureFilterCaps, D3DPTFILTERCAPS_MAGFLINEAR),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MAGFANISOTROPIC", VertexTextureFilterCaps, D3DPTFILTERCAPS_MAGFANISOTROPIC),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD", VertexTextureFilterCaps, D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD),
|
|
CAPSFLAGDEF("D3DPTFILTERCAPS_MAGFGAUSSIANQUAD", VertexTextureFilterCaps, D3DPTFILTERCAPS_MAGFGAUSSIANQUAD),
|
|
{"",0,0}
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
CAPDEFS DXGCapDefs[] =
|
|
{
|
|
{"", nullptr, (LPARAM)0, },
|
|
{"+Caps", DXGDisplayCaps, (LPARAM)DXGGenCaps, },
|
|
{"Caps", DXGDisplayCaps, (LPARAM)CapsCaps, },
|
|
{"Caps2", DXGDisplayCaps, (LPARAM)CapsCaps2, },
|
|
{"Caps3", DXGDisplayCaps, (LPARAM)CapsCaps3, },
|
|
{"PresentationIntervals", DXGDisplayCaps, (LPARAM)CapsPresentationIntervals, },
|
|
{"CursorCaps", DXGDisplayCaps, (LPARAM)CapsCursorCaps, },
|
|
{"DevCaps", DXGDisplayCaps, (LPARAM)CapsDevCaps, },
|
|
{"PrimitiveMiscCaps", DXGDisplayCaps, (LPARAM)CapsPrimMiscCaps },
|
|
{"RasterCaps", DXGDisplayCaps, (LPARAM)CapsRasterCaps },
|
|
{"ZCmpCaps", DXGDisplayCaps, (LPARAM)CapsZCmpCaps },
|
|
{"SrcBlendCaps", DXGDisplayCaps, (LPARAM)CapsSrcBlendCaps },
|
|
{"DestBlendCaps", DXGDisplayCaps, (LPARAM)CapsDestBlendCaps },
|
|
{"AlphaCmpCaps", DXGDisplayCaps, (LPARAM)CapsAlphaCmpCaps },
|
|
{"ShadeCaps", DXGDisplayCaps, (LPARAM)CapsShadeCaps },
|
|
{"TextureCaps", DXGDisplayCaps, (LPARAM)CapsTextureCaps },
|
|
|
|
{"TextureFilterCaps", DXGDisplayCaps, (LPARAM)CapsTextureFilterCaps },
|
|
{"CubeTextureFilterCaps", DXGDisplayCaps, (LPARAM)CapsCubeTextureFilterCaps },
|
|
{"VolumeTextureFilterCaps", DXGDisplayCaps, (LPARAM)CapsVolumeTextureFilterCaps },
|
|
{"TextureAddressCaps", DXGDisplayCaps, (LPARAM)CapsTextureAddressCaps },
|
|
{"VolumeTextureAddressCaps", DXGDisplayCaps, (LPARAM)CapsVolumeTextureAddressCaps },
|
|
|
|
{"LineCaps", DXGDisplayCaps, (LPARAM)CapsLineCaps },
|
|
{"StencilCaps", DXGDisplayCaps, (LPARAM)CapsStencilCaps, },
|
|
{"FVFCaps", DXGDisplayCaps, (LPARAM)CapsFVFCaps, },
|
|
{"TextureOpCaps", DXGDisplayCaps, (LPARAM)CapsTextureOpCaps, },
|
|
{"VertexProcessingCaps", DXGDisplayCaps, (LPARAM)CapsVertexProcessingCaps, },
|
|
{"DevCaps2", DXGDisplayCaps, (LPARAM)CapsDevCaps2, },
|
|
{"DeclTypes", DXGDisplayCaps, (LPARAM)CapsDeclTypes, },
|
|
{"StretchRectFilterCaps", DXGDisplayCaps, (LPARAM)CapsStretchRectFilterCaps, },
|
|
{"VS20Caps", DXGDisplayCaps, (LPARAM)CapsVS20Caps, },
|
|
{"PS20Caps", DXGDisplayCaps, (LPARAM)CapsPS20Caps, },
|
|
{"VertexTextureFilterCaps",DXGDisplayCaps, (LPARAM)CapsVertexTextureFilterCaps, },
|
|
|
|
{"-", nullptr, (LPARAM)0, },
|
|
{ nullptr, 0, 0 }
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
const TCHAR* FormatName(D3DFORMAT format)
|
|
{
|
|
switch (format)
|
|
{
|
|
case D3DFMT_UNKNOWN: return TEXT("D3DFMT_UNKNOWN");
|
|
case D3DFMT_R8G8B8: return TEXT("D3DFMT_R8G8B8");
|
|
case D3DFMT_A8R8G8B8: return TEXT("D3DFMT_A8R8G8B8");
|
|
case D3DFMT_X8R8G8B8: return TEXT("D3DFMT_X8R8G8B8");
|
|
case D3DFMT_R5G6B5: return TEXT("D3DFMT_R5G6B5");
|
|
case D3DFMT_X1R5G5B5: return TEXT("D3DFMT_X1R5G5B5");
|
|
case D3DFMT_A1R5G5B5: return TEXT("D3DFMT_A1R5G5B5");
|
|
case D3DFMT_A4R4G4B4: return TEXT("D3DFMT_A4R4G4B4");
|
|
case D3DFMT_R3G3B2: return TEXT("D3DFMT_R3G3B2");
|
|
case D3DFMT_A8: return TEXT("D3DFMT_A8");
|
|
case D3DFMT_A8R3G3B2: return TEXT("D3DFMT_A8R3G3B2");
|
|
case D3DFMT_X4R4G4B4: return TEXT("D3DFMT_X4R4G4B4");
|
|
case D3DFMT_A2B10G10R10: return TEXT("D3DFMT_A2B10G10R10");
|
|
case D3DFMT_A8B8G8R8: return TEXT("D3DFMT_A8B8G8R8");
|
|
case D3DFMT_X8B8G8R8: return TEXT("D3DFMT_X8B8G8R8");
|
|
case D3DFMT_G16R16: return TEXT("D3DFMT_G16R16");
|
|
case D3DFMT_A2R10G10B10: return TEXT("D3DFMT_A2R10G10B10");
|
|
case D3DFMT_A16B16G16R16: return TEXT("D3DFMT_A16B16G16R16");
|
|
|
|
case D3DFMT_A8P8: return TEXT("D3DFMT_A8P8");
|
|
case D3DFMT_P8: return TEXT("D3DFMT_P8");
|
|
|
|
case D3DFMT_L8: return TEXT("D3DFMT_L8");
|
|
case D3DFMT_A8L8: return TEXT("D3DFMT_A8L8");
|
|
case D3DFMT_A4L4: return TEXT("D3DFMT_A4L4");
|
|
|
|
case D3DFMT_V8U8: return TEXT("D3DFMT_V8U8");
|
|
case D3DFMT_L6V5U5: return TEXT("D3DFMT_L6V5U5");
|
|
case D3DFMT_X8L8V8U8: return TEXT("D3DFMT_X8L8V8U8");
|
|
case D3DFMT_Q8W8V8U8: return TEXT("D3DFMT_Q8W8V8U8");
|
|
case D3DFMT_V16U16: return TEXT("D3DFMT_V16U16");
|
|
case D3DFMT_A2W10V10U10: return TEXT("D3DFMT_A2W10V10U10");
|
|
|
|
case D3DFMT_UYVY: return TEXT("D3DFMT_UYVY");
|
|
case D3DFMT_R8G8_B8G8: return TEXT("D3DFMT_R8G8_B8G8");
|
|
case D3DFMT_YUY2: return TEXT("D3DFMT_YUY2");
|
|
case D3DFMT_G8R8_G8B8: return TEXT("D3DFMT_G8R8_G8B8");
|
|
case D3DFMT_DXT1: return TEXT("D3DFMT_DXT1");
|
|
case D3DFMT_DXT2: return TEXT("D3DFMT_DXT2");
|
|
case D3DFMT_DXT3: return TEXT("D3DFMT_DXT3");
|
|
case D3DFMT_DXT4: return TEXT("D3DFMT_DXT4");
|
|
case D3DFMT_DXT5: return TEXT("D3DFMT_DXT5");
|
|
|
|
case D3DFMT_D16_LOCKABLE: return TEXT("D3DFMT_D16_LOCKABLE");
|
|
case D3DFMT_D32: return TEXT("D3DFMT_D32");
|
|
case D3DFMT_D15S1: return TEXT("D3DFMT_D15S1");
|
|
case D3DFMT_D24S8: return TEXT("D3DFMT_D24S8");
|
|
case D3DFMT_D24X8: return TEXT("D3DFMT_D24X8");
|
|
case D3DFMT_D24X4S4: return TEXT("D3DFMT_D24X4S4");
|
|
case D3DFMT_D16: return TEXT("D3DFMT_D16");
|
|
case D3DFMT_D32F_LOCKABLE: return TEXT("D3DFMT_D32F_LOCKABLE");
|
|
case D3DFMT_D24FS8: return TEXT("D3DFMT_D24FS8");
|
|
|
|
case D3DFMT_L16: return TEXT("D3DFMT_L16");
|
|
|
|
case D3DFMT_VERTEXDATA: return TEXT("D3DFMT_VERTEXDATA");
|
|
case D3DFMT_INDEX16: return TEXT("D3DFMT_INDEX16");
|
|
case D3DFMT_INDEX32: return TEXT("D3DFMT_INDEX32");
|
|
|
|
case D3DFMT_Q16W16V16U16: return TEXT("D3DFMT_Q16W16V16U16");
|
|
|
|
case D3DFMT_MULTI2_ARGB8: return TEXT("D3DFMT_MULTI2_ARGB8");
|
|
|
|
case D3DFMT_R16F: return TEXT("D3DFMT_R16F");
|
|
case D3DFMT_G16R16F: return TEXT("D3DFMT_G16R16F");
|
|
case D3DFMT_A16B16G16R16F: return TEXT("D3DFMT_A16B16G16R16F");
|
|
|
|
case D3DFMT_R32F: return TEXT("D3DFMT_R32F");
|
|
case D3DFMT_G32R32F: return TEXT("D3DFMT_G32R32F");
|
|
case D3DFMT_A32B32G32R32F: return TEXT("D3DFMT_A32B32G32R32F");
|
|
|
|
case D3DFMT_CxV8U8: return TEXT("D3DFMT_CxV8U8");
|
|
|
|
case D3DFMT_D32_LOCKABLE: return TEXT("D3DFMT_D32_LOCKABLE");
|
|
case D3DFMT_S8_LOCKABLE: return TEXT("D3DFMT_S8_LOCKABLE");
|
|
case D3DFMT_A1: return TEXT("D3DFMT_A1");
|
|
|
|
default: return TEXT("Unknown format");
|
|
}
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
const TCHAR* MultiSampleTypeName(D3DMULTISAMPLE_TYPE msType)
|
|
{
|
|
switch (msType)
|
|
{
|
|
case D3DMULTISAMPLE_NONE: return TEXT("D3DMULTISAMPLE_NONE");
|
|
case D3DMULTISAMPLE_NONMASKABLE: return TEXT("D3DMULTISAMPLE_NONMASKABLE");
|
|
case D3DMULTISAMPLE_2_SAMPLES: return TEXT("D3DMULTISAMPLE_2_SAMPLES");
|
|
case D3DMULTISAMPLE_3_SAMPLES: return TEXT("D3DMULTISAMPLE_3_SAMPLES");
|
|
case D3DMULTISAMPLE_4_SAMPLES: return TEXT("D3DMULTISAMPLE_4_SAMPLES");
|
|
case D3DMULTISAMPLE_5_SAMPLES: return TEXT("D3DMULTISAMPLE_5_SAMPLES");
|
|
case D3DMULTISAMPLE_6_SAMPLES: return TEXT("D3DMULTISAMPLE_6_SAMPLES");
|
|
case D3DMULTISAMPLE_7_SAMPLES: return TEXT("D3DMULTISAMPLE_7_SAMPLES");
|
|
case D3DMULTISAMPLE_8_SAMPLES: return TEXT("D3DMULTISAMPLE_8_SAMPLES");
|
|
case D3DMULTISAMPLE_9_SAMPLES: return TEXT("D3DMULTISAMPLE_9_SAMPLES");
|
|
case D3DMULTISAMPLE_10_SAMPLES: return TEXT("D3DMULTISAMPLE_10_SAMPLES");
|
|
case D3DMULTISAMPLE_11_SAMPLES: return TEXT("D3DMULTISAMPLE_11_SAMPLES");
|
|
case D3DMULTISAMPLE_12_SAMPLES: return TEXT("D3DMULTISAMPLE_12_SAMPLES");
|
|
case D3DMULTISAMPLE_13_SAMPLES: return TEXT("D3DMULTISAMPLE_13_SAMPLES");
|
|
case D3DMULTISAMPLE_14_SAMPLES: return TEXT("D3DMULTISAMPLE_14_SAMPLES");
|
|
case D3DMULTISAMPLE_15_SAMPLES: return TEXT("D3DMULTISAMPLE_15_SAMPLES");
|
|
case D3DMULTISAMPLE_16_SAMPLES: return TEXT("D3DMULTISAMPLE_16_SAMPLES");
|
|
default: return TEXT("Unknown type");
|
|
}
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// lParam1 is the adapter index
|
|
//-----------------------------------------------------------------------------
|
|
HRESULT DXGDisplayAdapterInfo(LPARAM lParam1, LPARAM /*lParam2*/,
|
|
_In_opt_ PRINTCBINFO* pPrintInfo)
|
|
{
|
|
auto iAdapter = static_cast<UINT>(lParam1);
|
|
|
|
if (!g_pD3D)
|
|
return S_OK;
|
|
|
|
if (!pPrintInfo)
|
|
{
|
|
LVAddColumn(g_hwndLV, 0, "Name", 15);
|
|
LVAddColumn(g_hwndLV, 1, "Value", 40);
|
|
}
|
|
|
|
D3DADAPTER_IDENTIFIER9 identifier;
|
|
HRESULT hr = g_pD3D->GetAdapterIdentifier(iAdapter, D3DENUM_WHQL_LEVEL, &identifier);
|
|
if (FAILED(hr))
|
|
return hr;
|
|
|
|
GUID guid = identifier.DeviceIdentifier;
|
|
TCHAR szGuid[50];
|
|
sprintf_s(szGuid, sizeof(szGuid), TEXT("{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}"),
|
|
guid.Data1, guid.Data2, guid.Data3, guid.Data4[0], guid.Data4[1], guid.Data4[2],
|
|
guid.Data4[3], guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]);
|
|
|
|
TCHAR szVersion[50];
|
|
sprintf_s(szVersion, sizeof(szVersion), TEXT("0x%08X-%08X"), identifier.DriverVersion.HighPart,
|
|
identifier.DriverVersion.LowPart);
|
|
|
|
if (!pPrintInfo)
|
|
{
|
|
LVAddText(g_hwndLV, 0, "Driver");
|
|
LVAddText(g_hwndLV, 1, "%s", identifier.Driver);
|
|
|
|
LVAddText(g_hwndLV, 0, "Description");
|
|
LVAddText(g_hwndLV, 1, "%s", identifier.Description);
|
|
|
|
LVAddText(g_hwndLV, 0, "DeviceName");
|
|
LVAddText(g_hwndLV, 1, "%s", identifier.DeviceName);
|
|
|
|
LVAddText(g_hwndLV, 0, "DriverVersion");
|
|
LVAddText(g_hwndLV, 1, "%s", szVersion);
|
|
|
|
LVAddText(g_hwndLV, 0, "VendorId");
|
|
LVAddText(g_hwndLV, 1, "0x%08x", identifier.VendorId);
|
|
|
|
LVAddText(g_hwndLV, 0, "DeviceId");
|
|
LVAddText(g_hwndLV, 1, "0x%08x", identifier.DeviceId);
|
|
|
|
LVAddText(g_hwndLV, 0, "SubSysId");
|
|
LVAddText(g_hwndLV, 1, "0x%08x", identifier.SubSysId);
|
|
|
|
LVAddText(g_hwndLV, 0, "Revision");
|
|
LVAddText(g_hwndLV, 1, "%d", identifier.Revision);
|
|
|
|
LVAddText(g_hwndLV, 0, "DeviceIdentifier");
|
|
LVAddText(g_hwndLV, 1, szGuid);
|
|
|
|
LVAddText(g_hwndLV, 0, "WHQLLevel");
|
|
LVAddText(g_hwndLV, 1, "%d", identifier.WHQLLevel);
|
|
}
|
|
else
|
|
{
|
|
PrintStringValueLine("Driver", identifier.Driver, pPrintInfo);
|
|
PrintStringValueLine("Description", identifier.Description, pPrintInfo);
|
|
PrintStringValueLine("DriverVersion", szVersion, pPrintInfo);
|
|
PrintHexValueLine("VendorId", identifier.VendorId, pPrintInfo);
|
|
PrintHexValueLine("DeviceId", identifier.DeviceId, pPrintInfo);
|
|
PrintHexValueLine("SubSysId", identifier.SubSysId, pPrintInfo);
|
|
PrintValueLine("Revision", identifier.Revision, pPrintInfo);
|
|
PrintStringValueLine("DeviceIdentifier", szGuid, pPrintInfo);
|
|
PrintValueLine("WHQLLevel", identifier.WHQLLevel, pPrintInfo);
|
|
}
|
|
return S_OK;
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// lParam1 is the adapter index
|
|
//-----------------------------------------------------------------------------
|
|
HRESULT DXGDisplayModes(LPARAM lParam1, LPARAM /*lParam2*/, _In_opt_ PRINTCBINFO* pPrintInfo)
|
|
{
|
|
auto iAdapter = static_cast<UINT>(lParam1);
|
|
|
|
if (!pPrintInfo)
|
|
{
|
|
LVAddColumn(g_hwndLV, 0, "Resolution", 10);
|
|
LVAddColumn(g_hwndLV, 1, "Pixel Format", 15);
|
|
LVAddColumn(g_hwndLV, 2, "Refresh Rate", 10);
|
|
}
|
|
|
|
for (INT iFormat = 0; iFormat < NumAdapterFormats; iFormat++)
|
|
{
|
|
D3DFORMAT fmt = AdapterFormatArray[iFormat];
|
|
UINT numModes = g_pD3D->GetAdapterModeCount(iAdapter, fmt);
|
|
for (UINT iMode = 0; iMode < numModes; iMode++)
|
|
{
|
|
D3DDISPLAYMODE mode;
|
|
g_pD3D->EnumAdapterModes(iAdapter, fmt, iMode, &mode);
|
|
if (!pPrintInfo)
|
|
{
|
|
LVAddText(g_hwndLV, 0, "%d x %d", mode.Width, mode.Height);
|
|
LVAddText(g_hwndLV, 1, FormatName(mode.Format));
|
|
LVAddText(g_hwndLV, 2, "%d", mode.RefreshRate);
|
|
}
|
|
else
|
|
{
|
|
char szBuff[80];
|
|
DWORD cchLen;
|
|
int x1, x2, x3, yLine;
|
|
|
|
// Calculate Name and Value column x offsets
|
|
x1 = (pPrintInfo->dwCurrIndent * DEF_TAB_SIZE * pPrintInfo->dwCharWidth);
|
|
x2 = x1 + (20 * pPrintInfo->dwCharWidth);
|
|
x3 = x2 + (20 * pPrintInfo->dwCharWidth);
|
|
yLine = (pPrintInfo->dwCurrLine * pPrintInfo->dwLineHeight);
|
|
|
|
sprintf_s(szBuff, sizeof(szBuff), "%u x %u", mode.Width, mode.Height);
|
|
cchLen = static_cast<DWORD>(_tcslen(szBuff));
|
|
if (FAILED(PrintLine(x1, yLine, szBuff, cchLen, pPrintInfo)))
|
|
return E_FAIL;
|
|
|
|
strcpy_s(szBuff, sizeof(szBuff), FormatName(mode.Format));
|
|
cchLen = static_cast<DWORD>(_tcslen(szBuff));
|
|
if (FAILED(PrintLine(x2, yLine, szBuff, cchLen, pPrintInfo)))
|
|
return E_FAIL;
|
|
|
|
sprintf_s(szBuff, sizeof(szBuff), "%u", mode.RefreshRate);
|
|
cchLen = static_cast<DWORD>(_tcslen(szBuff));
|
|
if (FAILED(PrintLine(x3, yLine, szBuff, cchLen, pPrintInfo)))
|
|
return E_FAIL;
|
|
|
|
// Advance to next line on page
|
|
if (FAILED(PrintNextLine(pPrintInfo)))
|
|
return E_FAIL;
|
|
}
|
|
}
|
|
}
|
|
return S_OK;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// lParam1 is the caps pointer
|
|
// lParam2 is the CAPDEF table we should use
|
|
//-----------------------------------------------------------------------------
|
|
HRESULT DXGDisplayCaps(LPARAM lParam1, LPARAM lParam2, _In_opt_ PRINTCBINFO* pPrintInfo)
|
|
{
|
|
auto pCaps = reinterpret_cast<D3DCAPS9*>(lParam1);
|
|
auto pCapDef = reinterpret_cast<CAPDEF*>(lParam2);
|
|
|
|
if (pPrintInfo)
|
|
return PrintCapsToDC(pCapDef, (VOID*)pCaps, pPrintInfo);
|
|
else
|
|
AddCapsToLV(pCapDef, (LPVOID)pCaps);
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// lParam1 is the iAdapter and device type
|
|
// lParam2 is bWindowed and the msType
|
|
// lParam3 is the render format
|
|
//-----------------------------------------------------------------------------
|
|
HRESULT DXGDisplayMultiSample(LPARAM lParam1, LPARAM lParam2, LPARAM lParam3, _In_opt_ PRINTCBINFO* pPrintInfo)
|
|
{
|
|
UINT iAdapter = LOWORD(lParam1);
|
|
auto devType = static_cast<D3DDEVTYPE>(HIWORD(lParam1));
|
|
BOOL bWindowed = (BOOL)LOWORD(lParam2);
|
|
auto msType = static_cast<D3DMULTISAMPLE_TYPE>(HIWORD(lParam2));
|
|
auto fmt = static_cast<D3DFORMAT>(lParam3);
|
|
|
|
if (!pPrintInfo)
|
|
{
|
|
LVAddColumn(g_hwndLV, 0, "Quality Levels", 30);
|
|
}
|
|
|
|
DWORD dwNumQualityLevels;
|
|
if (SUCCEEDED(g_pD3D->CheckDeviceMultiSampleType(iAdapter, devType, fmt, bWindowed, msType, &dwNumQualityLevels)))
|
|
{
|
|
TCHAR str[100];
|
|
if (dwNumQualityLevels == 1)
|
|
sprintf_s(str, sizeof(str), "%u quality level", dwNumQualityLevels);
|
|
else
|
|
sprintf_s(str, sizeof(str), "%u quality levels", dwNumQualityLevels);
|
|
if (!pPrintInfo)
|
|
{
|
|
LVAddText(g_hwndLV, 0, str);
|
|
}
|
|
else
|
|
{
|
|
PrintStringLine(str, pPrintInfo);
|
|
}
|
|
}
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// lParam1 is the iAdapter and device type
|
|
// lParam2 is the adapter fmt
|
|
// lParam3 is bWindowed
|
|
//-----------------------------------------------------------------------------
|
|
HRESULT DXGDisplayBackBuffer(LPARAM lParam1, LPARAM lParam2, LPARAM lParam3, _In_opt_ PRINTCBINFO* pPrintInfo)
|
|
{
|
|
UINT iAdapter = LOWORD(lParam1);
|
|
auto devType = static_cast<D3DDEVTYPE>(HIWORD(lParam1));
|
|
auto fmtAdapter = static_cast<D3DFORMAT>(lParam2);
|
|
auto bWindowed = static_cast<BOOL>(lParam3);
|
|
|
|
if (!pPrintInfo)
|
|
{
|
|
LVAddColumn(g_hwndLV, 0, "Back Buffer Formats", 20);
|
|
}
|
|
|
|
for (int iFmt = 0; iFmt < NumBBFormats; iFmt++)
|
|
{
|
|
D3DFORMAT fmt = BBFormatArray[iFmt];
|
|
if (SUCCEEDED(g_pD3D->CheckDeviceType(iAdapter, devType, fmtAdapter, fmt, bWindowed)))
|
|
{
|
|
if (!pPrintInfo)
|
|
{
|
|
LVAddText(g_hwndLV, 0, "%s", FormatName(fmt));
|
|
}
|
|
else
|
|
{
|
|
PrintStringLine(FormatName(fmt), pPrintInfo);
|
|
}
|
|
}
|
|
}
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// lParam1 is the iAdapter and device type
|
|
// lParam2 is the adapter fmt
|
|
// lParam3 is unused
|
|
//-----------------------------------------------------------------------------
|
|
HRESULT DXGDisplayRenderTarget(LPARAM lParam1, LPARAM lParam2, LPARAM /*lParam3*/, _In_opt_ PRINTCBINFO* pPrintInfo)
|
|
{
|
|
UINT iAdapter = LOWORD(lParam1);
|
|
auto devType = static_cast<D3DDEVTYPE>(HIWORD(lParam1));
|
|
auto fmtAdapter = static_cast<D3DFORMAT>(lParam2);
|
|
|
|
if (!pPrintInfo)
|
|
{
|
|
LVAddColumn(g_hwndLV, 0, "Render Target Formats", 20);
|
|
}
|
|
|
|
for (int iFmt = 0; iFmt < NumFormats; iFmt++)
|
|
{
|
|
D3DFORMAT fmt = AllFormatArray[iFmt];
|
|
if (SUCCEEDED(g_pD3D->CheckDeviceFormat(iAdapter, devType, fmtAdapter, D3DUSAGE_RENDERTARGET,
|
|
D3DRTYPE_SURFACE, fmt)))
|
|
{
|
|
if (!pPrintInfo)
|
|
{
|
|
LVAddText(g_hwndLV, 0, "%s", FormatName(fmt));
|
|
}
|
|
else
|
|
{
|
|
PrintStringLine(FormatName(fmt), pPrintInfo);
|
|
}
|
|
}
|
|
}
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// lParam1 is the iAdapter and device type
|
|
// lParam2 is the adapter fmt
|
|
// lParam3 is unused
|
|
//-----------------------------------------------------------------------------
|
|
HRESULT DXGDisplayDepthStencil(LPARAM lParam1, LPARAM lParam2, LPARAM /*lParam3*/, _In_opt_ PRINTCBINFO* pPrintInfo)
|
|
{
|
|
UINT iAdapter = LOWORD(lParam1);
|
|
auto devType = static_cast<D3DDEVTYPE>(HIWORD(lParam1));
|
|
auto fmtAdapter = static_cast<D3DFORMAT>(lParam2);
|
|
|
|
if (!pPrintInfo)
|
|
{
|
|
LVAddColumn(g_hwndLV, 0, "Depth/Stencil Formats", 20);
|
|
}
|
|
|
|
for (int iFmt = 0; iFmt < NumDSFormats; iFmt++)
|
|
{
|
|
D3DFORMAT fmt = DSFormatArray[iFmt];
|
|
|
|
if (!g_is9Ex && ((fmt == D3DFMT_D32_LOCKABLE) || (fmt == D3DFMT_S8_LOCKABLE)))
|
|
continue;
|
|
|
|
if (SUCCEEDED(g_pD3D->CheckDeviceFormat(iAdapter, devType, fmtAdapter, D3DUSAGE_DEPTHSTENCIL,
|
|
D3DRTYPE_SURFACE, fmt)))
|
|
{
|
|
if (!pPrintInfo)
|
|
{
|
|
LVAddText(g_hwndLV, 0, "%s", FormatName(fmt));
|
|
}
|
|
else
|
|
{
|
|
PrintStringLine(FormatName(fmt), pPrintInfo);
|
|
}
|
|
}
|
|
}
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// lParam1 is the iAdapter and device type
|
|
// lParam2 is the depth/stencil fmt
|
|
// lParam3 is the msType
|
|
//-----------------------------------------------------------------------------
|
|
HRESULT DXGCheckDSQualityLevels(LPARAM lParam1, LPARAM lParam2, LPARAM lParam3, _In_opt_ PRINTCBINFO* pPrintInfo)
|
|
{
|
|
UINT iAdapter = LOWORD(lParam1);
|
|
auto devType = static_cast<D3DDEVTYPE>(HIWORD(lParam1));
|
|
auto fmtDS = static_cast<D3DFORMAT>(lParam2);
|
|
auto msType = static_cast<D3DMULTISAMPLE_TYPE>(lParam3);
|
|
|
|
if (!pPrintInfo)
|
|
{
|
|
LVAddColumn(g_hwndLV, 0, "Quality Levels", 20);
|
|
}
|
|
|
|
DWORD dwNumQualityLevels;
|
|
if (SUCCEEDED(g_pD3D->CheckDeviceMultiSampleType(iAdapter, devType, fmtDS, FALSE, msType, &dwNumQualityLevels)))
|
|
{
|
|
TCHAR str[100];
|
|
if (dwNumQualityLevels == 1)
|
|
sprintf_s(str, sizeof(str), "%u quality level", dwNumQualityLevels);
|
|
else
|
|
sprintf_s(str, sizeof(str), "%u quality levels", dwNumQualityLevels);
|
|
if (!pPrintInfo)
|
|
{
|
|
LVAddText(g_hwndLV, 0, str);
|
|
}
|
|
else
|
|
{
|
|
PrintStringLine(str, pPrintInfo);
|
|
}
|
|
}
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// lParam1 is the iAdapter and device type
|
|
// lParam2 is the adapter fmt
|
|
// lParam3 is unused
|
|
//-----------------------------------------------------------------------------
|
|
HRESULT DXGDisplayPlainSurface(LPARAM lParam1, LPARAM lParam2, LPARAM /*lParam3*/, _In_opt_ PRINTCBINFO* pPrintInfo)
|
|
{
|
|
UINT iAdapter = LOWORD(lParam1);
|
|
auto devType = static_cast<D3DDEVTYPE>(HIWORD(lParam1));
|
|
D3DFORMAT fmtAdapter = static_cast<D3DFORMAT>(lParam2);
|
|
|
|
if (!pPrintInfo)
|
|
{
|
|
LVAddColumn(g_hwndLV, 0, "Plain Surface Formats", 20);
|
|
}
|
|
|
|
for (int iFmt = 0; iFmt < NumFormats; iFmt++)
|
|
{
|
|
D3DFORMAT fmt = AllFormatArray[iFmt];
|
|
|
|
if (!g_is9Ex && ((fmt == D3DFMT_A1) || (fmt == D3DFMT_D32_LOCKABLE) || (fmt == D3DFMT_S8_LOCKABLE)))
|
|
continue;
|
|
|
|
if (SUCCEEDED(g_pD3D->CheckDeviceFormat(iAdapter, devType, fmtAdapter, 0,
|
|
D3DRTYPE_SURFACE, fmt)))
|
|
{
|
|
if (!pPrintInfo)
|
|
{
|
|
LVAddText(g_hwndLV, 0, "%s", FormatName(fmt));
|
|
}
|
|
else
|
|
{
|
|
PrintStringLine(FormatName(fmt), pPrintInfo);
|
|
}
|
|
}
|
|
}
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// lParam1 is the iAdapter and device type
|
|
// lParam2 is the fmt of the swap chain
|
|
// lParam3 is the D3DRESOURCETYPE
|
|
//-----------------------------------------------------------------------------
|
|
HRESULT DXGDisplayResource(LPARAM lParam1, LPARAM lParam2, LPARAM lParam3, _In_opt_ PRINTCBINFO* pPrintInfo)
|
|
{
|
|
UINT iAdapter = LOWORD(lParam1);
|
|
auto devType = static_cast<D3DDEVTYPE>(HIWORD(lParam1));
|
|
auto fmtAdapter = static_cast<D3DFORMAT>(lParam2);
|
|
auto RType = static_cast<D3DRESOURCETYPE>(lParam3);
|
|
const TCHAR* pstr;
|
|
HRESULT hr;
|
|
UINT col = 0;
|
|
|
|
D3DCAPS9 Caps;
|
|
g_pD3D->GetDeviceCaps(iAdapter, devType, &Caps);
|
|
|
|
if (!pPrintInfo)
|
|
{
|
|
switch (RType)
|
|
{
|
|
case D3DRTYPE_SURFACE:
|
|
LVAddColumn(g_hwndLV, col++, "Surface Formats", 20);
|
|
break;
|
|
case D3DRTYPE_VOLUME:
|
|
LVAddColumn(g_hwndLV, col++, "Volume Formats", 20);
|
|
break;
|
|
case D3DRTYPE_TEXTURE:
|
|
LVAddColumn(g_hwndLV, col++, "Texture Formats", 20);
|
|
break;
|
|
case D3DRTYPE_VOLUMETEXTURE:
|
|
LVAddColumn(g_hwndLV, col++, "Volume Texture Formats", 20);
|
|
break;
|
|
case D3DRTYPE_CUBETEXTURE:
|
|
LVAddColumn(g_hwndLV, col++, "Cube Texture Formats", 20);
|
|
break;
|
|
default:
|
|
return E_FAIL;
|
|
}
|
|
LVAddColumn(g_hwndLV, col++, "0 (Plain)", 22);
|
|
if (RType != D3DRTYPE_VOLUMETEXTURE)
|
|
LVAddColumn(g_hwndLV, col++, "D3DUSAGE_RENDERTARGET", 22);
|
|
// LVAddColumn(g_hwndLV, col++, "D3DUSAGE_DEPTHSTENCIL", 22);
|
|
if (RType != D3DRTYPE_SURFACE)
|
|
{
|
|
if (RType != D3DRTYPE_VOLUMETEXTURE)
|
|
{
|
|
LVAddColumn(g_hwndLV, col++, "D3DUSAGE_AUTOGENMIPMAP", 22);
|
|
if (RType != D3DRTYPE_CUBETEXTURE)
|
|
{
|
|
LVAddColumn(g_hwndLV, col++, "D3DUSAGE_DMAP", 22);
|
|
}
|
|
}
|
|
LVAddColumn(g_hwndLV, col++, "D3DUSAGE_QUERY_LEGACYBUMPMAP", 22);
|
|
LVAddColumn(g_hwndLV, col++, "D3DUSAGE_QUERY_SRGBREAD", 18);
|
|
LVAddColumn(g_hwndLV, col++, "D3DUSAGE_QUERY_FILTER", 15);
|
|
LVAddColumn(g_hwndLV, col++, "D3DUSAGE_QUERY_SRGBWRITE", 18);
|
|
LVAddColumn(g_hwndLV, col++, "D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING", 18);
|
|
LVAddColumn(g_hwndLV, col++, "D3DUSAGE_QUERY_VERTEXTEXTURE", 18);
|
|
LVAddColumn(g_hwndLV, col++, "D3DUSAGE_QUERY_WRAPANDMIP", 18);
|
|
}
|
|
}
|
|
const DWORD usageArray[] =
|
|
{
|
|
0,
|
|
D3DUSAGE_RENDERTARGET,
|
|
// D3DUSAGE_DEPTHSTENCIL,
|
|
D3DUSAGE_AUTOGENMIPMAP,
|
|
D3DUSAGE_DMAP,
|
|
D3DUSAGE_QUERY_LEGACYBUMPMAP,
|
|
D3DUSAGE_QUERY_SRGBREAD,
|
|
D3DUSAGE_QUERY_FILTER,
|
|
D3DUSAGE_QUERY_SRGBWRITE,
|
|
D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING,
|
|
D3DUSAGE_QUERY_VERTEXTEXTURE,
|
|
D3DUSAGE_QUERY_WRAPANDMIP,
|
|
};
|
|
const DWORD numUsages = sizeof(usageArray) / sizeof(usageArray[0]);
|
|
BOOL bFoundSuccess;
|
|
for (int iFmt = 0; iFmt < NumFormats; iFmt++)
|
|
{
|
|
D3DFORMAT fmt = AllFormatArray[iFmt];
|
|
|
|
if (!g_is9Ex && ((fmt == D3DFMT_A1) || (fmt == D3DFMT_D32_LOCKABLE) || (fmt == D3DFMT_S8_LOCKABLE)))
|
|
continue;
|
|
|
|
// First pass: see if CDF succeeds for any usage
|
|
bFoundSuccess = FALSE;
|
|
for (UINT iUsage = 0; iUsage < numUsages; iUsage++)
|
|
{
|
|
if (RType == D3DRTYPE_SURFACE)
|
|
{
|
|
if (usageArray[iUsage] != 0 &&
|
|
usageArray[iUsage] != D3DUSAGE_DEPTHSTENCIL &&
|
|
usageArray[iUsage] != D3DUSAGE_RENDERTARGET)
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
if (RType == D3DRTYPE_VOLUMETEXTURE)
|
|
{
|
|
if (usageArray[iUsage] == D3DUSAGE_DEPTHSTENCIL ||
|
|
usageArray[iUsage] == D3DUSAGE_RENDERTARGET ||
|
|
usageArray[iUsage] == D3DUSAGE_AUTOGENMIPMAP ||
|
|
usageArray[iUsage] == D3DUSAGE_DMAP)
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
if (RType == D3DRTYPE_CUBETEXTURE)
|
|
{
|
|
if (usageArray[iUsage] == D3DUSAGE_DMAP)
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
if (usageArray[iUsage] == D3DUSAGE_DMAP)
|
|
{
|
|
if ((Caps.DevCaps2 & D3DDEVCAPS2_DMAPNPATCH) == 0 &&
|
|
(Caps.DevCaps2 & D3DDEVCAPS2_PRESAMPLEDDMAPNPATCH) == 0)
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
if (fmt == D3DFMT_MULTI2_ARGB8 && usageArray[iUsage] == D3DUSAGE_AUTOGENMIPMAP)
|
|
{
|
|
continue;
|
|
}
|
|
if (SUCCEEDED(g_pD3D->CheckDeviceFormat(iAdapter, devType, fmtAdapter,
|
|
usageArray[iUsage], RType, fmt)))
|
|
{
|
|
bFoundSuccess = TRUE;
|
|
break;
|
|
}
|
|
}
|
|
if (bFoundSuccess)
|
|
{
|
|
col = 0;
|
|
// Add list item for this format
|
|
if (!pPrintInfo)
|
|
LVAddText(g_hwndLV, col++, "%s", FormatName(fmt));
|
|
else
|
|
PrintStringLine(FormatName(fmt), pPrintInfo);
|
|
|
|
// Show which usages it is compatible with
|
|
for (UINT iUsage = 0; iUsage < numUsages; iUsage++)
|
|
{
|
|
if (RType == D3DRTYPE_SURFACE)
|
|
{
|
|
if (usageArray[iUsage] != 0 &&
|
|
usageArray[iUsage] != D3DUSAGE_DEPTHSTENCIL &&
|
|
usageArray[iUsage] != D3DUSAGE_RENDERTARGET)
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
if (RType == D3DRTYPE_VOLUMETEXTURE)
|
|
{
|
|
if (usageArray[iUsage] == D3DUSAGE_DEPTHSTENCIL ||
|
|
usageArray[iUsage] == D3DUSAGE_RENDERTARGET ||
|
|
usageArray[iUsage] == D3DUSAGE_AUTOGENMIPMAP ||
|
|
usageArray[iUsage] == D3DUSAGE_DMAP)
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
if (RType == D3DRTYPE_CUBETEXTURE)
|
|
{
|
|
if (usageArray[iUsage] == D3DUSAGE_DMAP)
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
hr = S_OK;
|
|
if (usageArray[iUsage] == D3DUSAGE_DMAP)
|
|
{
|
|
if ((Caps.DevCaps2 & D3DDEVCAPS2_DMAPNPATCH) == 0 &&
|
|
(Caps.DevCaps2 & D3DDEVCAPS2_PRESAMPLEDDMAPNPATCH) == 0)
|
|
{
|
|
hr = E_FAIL;
|
|
}
|
|
}
|
|
if (fmt == D3DFMT_MULTI2_ARGB8 && usageArray[iUsage] == D3DUSAGE_AUTOGENMIPMAP)
|
|
{
|
|
hr = E_FAIL;
|
|
}
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
hr = g_pD3D->CheckDeviceFormat(iAdapter, devType, fmtAdapter,
|
|
usageArray[iUsage], RType, fmt);
|
|
}
|
|
if (hr == D3DOK_NOAUTOGEN)
|
|
pstr = TEXT("No");
|
|
else if (SUCCEEDED(hr))
|
|
pstr = TEXT("Yes");
|
|
else
|
|
pstr = TEXT("No");
|
|
if (!pPrintInfo)
|
|
LVAddText(g_hwndLV, col++, pstr);
|
|
else
|
|
PrintStringLine(pstr, pPrintInfo);
|
|
}
|
|
}
|
|
}
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
BOOL IsBBFmt(D3DFORMAT fmt)
|
|
{
|
|
for (int iFmtBackBuffer = 0; iFmtBackBuffer < NumBBFormats; iFmtBackBuffer++)
|
|
{
|
|
D3DFORMAT fmtBackBuffer = BBFormatArray[iFmtBackBuffer];
|
|
if (fmt == fmtBackBuffer)
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
BOOL IsDeviceTypeAvailable(UINT iAdapter, D3DDEVTYPE devType)
|
|
{
|
|
for (int iFmtAdapter = 0; iFmtAdapter < NumAdapterFormats; iFmtAdapter++)
|
|
{
|
|
D3DFORMAT fmtAdapter = AdapterFormatArray[iFmtAdapter];
|
|
if (IsAdapterFmtAvailable(iAdapter, devType, fmtAdapter, TRUE) ||
|
|
IsAdapterFmtAvailable(iAdapter, devType, fmtAdapter, FALSE))
|
|
{
|
|
return TRUE;
|
|
}
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
BOOL IsAdapterFmtAvailable(UINT iAdapter, D3DDEVTYPE devType, D3DFORMAT fmtAdapter, BOOL bWindowed)
|
|
{
|
|
if (fmtAdapter == D3DFMT_A2R10G10B10 && bWindowed)
|
|
return FALSE; // D3D extended primary formats are only avaiable for fullscreen mode
|
|
|
|
for (int iFmtBackBuffer = 0; iFmtBackBuffer < NumBBFormats; iFmtBackBuffer++)
|
|
{
|
|
D3DFORMAT fmtBackBuffer = BBFormatArray[iFmtBackBuffer];
|
|
if (SUCCEEDED(g_pD3D->CheckDeviceType(iAdapter, devType, fmtAdapter, fmtBackBuffer, bWindowed)))
|
|
{
|
|
return TRUE;
|
|
}
|
|
}
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Name: DXG_Init()
|
|
//-----------------------------------------------------------------------------
|
|
VOID DXG_Init()
|
|
{
|
|
g_is9Ex = FALSE;
|
|
|
|
g_hInstD3D = LoadLibraryEx("d3d9.dll", nullptr, LOAD_LIBRARY_SEARCH_SYSTEM32);
|
|
if (g_hInstD3D)
|
|
{
|
|
g_direct3DCreate9 = reinterpret_cast<LPDIRECT3D9CREATE9>(GetProcAddress(g_hInstD3D, "Direct3DCreate9"));
|
|
g_direct3DCreate9Ex = reinterpret_cast<LPDIRECT3D9CREATE9EX>(GetProcAddress(g_hInstD3D, "Direct3DCreate9Ex"));
|
|
|
|
if (g_direct3DCreate9Ex)
|
|
{
|
|
g_is9Ex = SUCCEEDED(g_direct3DCreate9Ex(D3D_SDK_VERSION, &g_pD3D));
|
|
}
|
|
|
|
if (!g_is9Ex && g_direct3DCreate9)
|
|
g_pD3D = g_direct3DCreate9(D3D_SDK_VERSION);
|
|
}
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Name: DXG_FillTree()
|
|
//-----------------------------------------------------------------------------
|
|
VOID DXG_FillTree(HWND hwndTV)
|
|
{
|
|
HRESULT hr;
|
|
D3DDEVTYPE deviceTypeArray[] = { D3DDEVTYPE_HAL, D3DDEVTYPE_SW, D3DDEVTYPE_REF };
|
|
D3DDEVTYPE devType;
|
|
UINT iDevice;
|
|
D3DCAPS9 caps;
|
|
D3DCAPS9* pCapsCopy;
|
|
|
|
static const TCHAR* deviceNameArray[] = { "HAL", "Software", "Reference" };
|
|
static const UINT numDeviceTypes = sizeof(deviceTypeArray) / sizeof(deviceTypeArray[0]);
|
|
|
|
if (!g_pD3D)
|
|
return;
|
|
|
|
HTREEITEM hTree = TVAddNode(TVI_ROOT, "Direct3D9 Devices", TRUE, IDI_DIRECTX,
|
|
nullptr, 0, 0);
|
|
|
|
UINT numAdapters = g_pD3D->GetAdapterCount();
|
|
for (UINT iAdapter = 0; iAdapter < numAdapters; iAdapter++)
|
|
{
|
|
D3DADAPTER_IDENTIFIER9 identifier;
|
|
if (SUCCEEDED(g_pD3D->GetAdapterIdentifier(iAdapter, 0, &identifier)))
|
|
{
|
|
HTREEITEM hTree2 = TVAddNode(hTree, identifier.Description, TRUE, IDI_CAPS,
|
|
DXGDisplayAdapterInfo, iAdapter, 0);
|
|
(void)TVAddNode(hTree2, "Display Modes", FALSE, IDI_CAPS,
|
|
DXGDisplayModes, iAdapter, 0);
|
|
HTREEITEM hTree3 = TVAddNode(hTree2, "D3D Device Types", TRUE, IDI_CAPS,
|
|
nullptr, 0, 0);
|
|
|
|
for (iDevice = 0; iDevice < numDeviceTypes; iDevice++)
|
|
{
|
|
devType = deviceTypeArray[iDevice];
|
|
|
|
if (devType == D3DDEVTYPE_SW)
|
|
continue; // we don't register a SW device, so just skip it
|
|
|
|
if (!IsDeviceTypeAvailable(iAdapter, devType))
|
|
continue;
|
|
|
|
// Add caps for each device
|
|
hr = g_pD3D->GetDeviceCaps(iAdapter, devType, &caps);
|
|
if (FAILED(hr))
|
|
memset(&caps, 0, sizeof(caps));
|
|
pCapsCopy = new (std::nothrow) D3DCAPS9;
|
|
if (!pCapsCopy)
|
|
continue;
|
|
*pCapsCopy = caps;
|
|
HTREEITEM hTree4 = TVAddNode(hTree3, deviceNameArray[iDevice], TRUE, IDI_CAPS, nullptr, 0, 0);
|
|
AddCapsToTV(hTree4, DXGCapDefs, (LPARAM)pCapsCopy);
|
|
|
|
// List adapter formats for each device
|
|
HTREEITEM hTree5 = TVAddNode(hTree4, "Adapter Formats", TRUE, IDI_CAPS, nullptr, 0, 0);
|
|
D3DFORMAT fmtAdapter;
|
|
for (int iFmtAdapter = 0; iFmtAdapter < NumAdapterFormats; iFmtAdapter++)
|
|
{
|
|
fmtAdapter = AdapterFormatArray[iFmtAdapter];
|
|
for (BOOL bWindowed = FALSE; bWindowed < 2; bWindowed++)
|
|
{
|
|
if (!IsAdapterFmtAvailable(iAdapter, devType, fmtAdapter, bWindowed))
|
|
continue;
|
|
|
|
TCHAR sz[100];
|
|
sprintf_s(sz, sizeof(sz), "%s %s", FormatName(fmtAdapter), bWindowed ? "(Windowed)" : "(Fullscreen)");
|
|
HTREEITEM hTree6 = TVAddNode(hTree5, sz, TRUE, IDI_CAPS, nullptr, 0, 0);
|
|
TVAddNodeEx(hTree6, "Back Buffer Formats", FALSE, IDI_CAPS, DXGDisplayBackBuffer, MAKELPARAM(iAdapter, (UINT)devType), (LPARAM)fmtAdapter, (LPARAM)bWindowed);
|
|
TVAddNodeEx(hTree6, "Render Target Formats", FALSE, IDI_CAPS, DXGDisplayRenderTarget, MAKELPARAM(iAdapter, (UINT)devType), (LPARAM)fmtAdapter, (LPARAM)0);
|
|
TVAddNodeEx(hTree6, "Depth/Stencil Formats", FALSE, IDI_CAPS, DXGDisplayDepthStencil, MAKELPARAM(iAdapter, (UINT)devType), (LPARAM)fmtAdapter, (LPARAM)0);
|
|
TVAddNodeEx(hTree6, "Plain Surface Formats", FALSE, IDI_CAPS, DXGDisplayPlainSurface, MAKELPARAM(iAdapter, (UINT)devType), (LPARAM)fmtAdapter, (LPARAM)0);
|
|
TVAddNodeEx(hTree6, "Texture Formats", FALSE, IDI_CAPS, DXGDisplayResource, MAKELPARAM(iAdapter, (UINT)devType), (LPARAM)fmtAdapter, (LPARAM)D3DRTYPE_TEXTURE);
|
|
TVAddNodeEx(hTree6, "Cube Texture Formats", FALSE, IDI_CAPS, DXGDisplayResource, MAKELPARAM(iAdapter, (UINT)devType), (LPARAM)fmtAdapter, (LPARAM)D3DRTYPE_CUBETEXTURE);
|
|
TVAddNodeEx(hTree6, "Volume Texture Formats", FALSE, IDI_CAPS, DXGDisplayResource, MAKELPARAM(iAdapter, (UINT)devType), (LPARAM)fmtAdapter, (LPARAM)D3DRTYPE_VOLUMETEXTURE);
|
|
HTREEITEM hTree7 = TVAddNode(hTree6, "Render Format Compatibility", TRUE, IDI_CAPS, nullptr, 0, 0);
|
|
D3DFORMAT fmtRender;
|
|
for (int iFmtRender = 0; iFmtRender < NumFormats; iFmtRender++)
|
|
{
|
|
fmtRender = AllFormatArray[iFmtRender];
|
|
if (SUCCEEDED(g_pD3D->CheckDeviceFormat(iAdapter, devType, fmtAdapter, D3DUSAGE_RENDERTARGET, D3DRTYPE_SURFACE, fmtRender))
|
|
|| (IsBBFmt(fmtRender) && SUCCEEDED(g_pD3D->CheckDeviceType(iAdapter, devType, fmtAdapter, fmtRender, bWindowed))))
|
|
{
|
|
HTREEITEM hTree8 = TVAddNode(hTree7, FormatName(fmtRender), TRUE, IDI_CAPS, nullptr, 0, 0);
|
|
for (D3DMULTISAMPLE_TYPE msType = D3DMULTISAMPLE_NONE; msType <= D3DMULTISAMPLE_16_SAMPLES; msType = (D3DMULTISAMPLE_TYPE)((UINT)msType + 1))
|
|
{
|
|
if (SUCCEEDED(g_pD3D->CheckDeviceMultiSampleType(iAdapter, devType, fmtRender, bWindowed, msType, nullptr)))
|
|
{
|
|
HTREEITEM hTree9 = TVAddNodeEx(hTree8, MultiSampleTypeName(msType), TRUE, IDI_CAPS, DXGDisplayMultiSample, MAKELPARAM(iAdapter, (UINT)devType), MAKELPARAM(bWindowed, (UINT)msType), (LPARAM)fmtRender);
|
|
HTREEITEM hTree10 = TVAddNode(hTree9, "Compatible Depth/Stencil Formats", TRUE, IDI_CAPS, nullptr, 0, 0);
|
|
D3DFORMAT DSFmt;
|
|
for (int iFmt = 0; iFmt < NumDSFormats; iFmt++)
|
|
{
|
|
DSFmt = DSFormatArray[iFmt];
|
|
if (SUCCEEDED(g_pD3D->CheckDeviceFormat(iAdapter, devType, fmtAdapter, D3DUSAGE_DEPTHSTENCIL,
|
|
D3DRTYPE_SURFACE, DSFmt)))
|
|
{
|
|
if (SUCCEEDED(g_pD3D->CheckDepthStencilMatch(iAdapter, devType, fmtAdapter, fmtRender, DSFmt)))
|
|
{
|
|
if (SUCCEEDED(g_pD3D->CheckDeviceMultiSampleType(iAdapter, devType, DSFmt, bWindowed, msType, nullptr)))
|
|
{
|
|
(void)TVAddNodeEx(hTree10, FormatName(DSFmt), FALSE, IDI_CAPS, DXGCheckDSQualityLevels, MAKELPARAM(iAdapter, (UINT)devType), (LPARAM)DSFmt, (LPARAM)msType);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
TreeView_Expand(hwndTV, hTree, TVE_EXPAND);
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Name: DXG_CleanUp()
|
|
// Desc:
|
|
//-----------------------------------------------------------------------------
|
|
VOID DXG_CleanUp()
|
|
{
|
|
SAFE_RELEASE(g_pD3D);
|
|
|
|
if (g_hInstD3D)
|
|
{
|
|
g_direct3DCreate9 = nullptr;
|
|
g_direct3DCreate9Ex = nullptr;
|
|
|
|
FreeLibrary(g_hInstD3D);
|
|
g_hInstD3D = nullptr;
|
|
}
|
|
}
|
|
|
|
|
|
BOOL DXG_Is9Ex()
|
|
{
|
|
return g_is9Ex;
|
|
}
|