static HRESULT vboxWddmGetD3D9Caps(PVBOXWDDMDISP_D3D pD3D, D3DCAPS9 *pCaps) { HRESULT hr = pD3D->pD3D9If->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, pCaps); if (FAILED(hr)) { WARN(("GetDeviceCaps failed hr(0x%x)",hr)); return hr; } vboxDispDumpD3DCAPS9(pCaps); return S_OK; }
static HRESULT vboxWddmGetD3D9Caps(PVBOXWDDMDISP_D3D pD3D, D3DCAPS9 *pCaps) { HRESULT hr = pD3D->pD3D9If->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, pCaps); if (FAILED(hr)) { WARN(("GetDeviceCaps failed hr(0x%x)",hr)); return hr; } /* needed for Windows Media Player to work properly */ pCaps->Caps |= D3DCAPS_READ_SCANLINE; pCaps->Caps2 |= 0x00080000 /*D3DCAPS2_CANRENDERWINDOWED*/; pCaps->Caps2 |= D3DCAPS2_CANSHARERESOURCE; pCaps->DevCaps |= D3DDEVCAPS_FLOATTLVERTEX /* <- must be set according to the docs */ /*| D3DDEVCAPS_HWVERTEXBUFFER | D3DDEVCAPS_HWINDEXBUFFER | D3DDEVCAPS_SUBVOLUMELOCK */; pCaps->PrimitiveMiscCaps |= D3DPMISCCAPS_INDEPENDENTWRITEMASKS | D3DPMISCCAPS_FOGINFVF | D3DPMISCCAPS_SEPARATEALPHABLEND | D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS; pCaps->RasterCaps |= D3DPRASTERCAPS_SUBPIXEL | D3DPRASTERCAPS_STIPPLE | D3DPRASTERCAPS_ZBIAS | D3DPRASTERCAPS_COLORPERSPECTIVE /* keep */; pCaps->TextureCaps |= D3DPTEXTURECAPS_TRANSPARENCY | D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE; pCaps->TextureAddressCaps |= D3DPTADDRESSCAPS_MIRRORONCE; pCaps->VolumeTextureAddressCaps |= D3DPTADDRESSCAPS_MIRRORONCE; pCaps->StencilCaps |= D3DSTENCILCAPS_TWOSIDED; pCaps->DeclTypes |= D3DDTCAPS_FLOAT16_2 | D3DDTCAPS_FLOAT16_4; pCaps->VertexTextureFilterCaps |= D3DPTFILTERCAPS_MINFPOINT | D3DPTFILTERCAPS_MAGFPOINT; pCaps->GuardBandLeft = -8192.; pCaps->GuardBandTop = -8192.; pCaps->GuardBandRight = 8192.; pCaps->GuardBandBottom = 8192.; pCaps->VS20Caps.DynamicFlowControlDepth = 24; pCaps->VS20Caps.NumTemps = D3DVS20_MAX_NUMTEMPS; pCaps->PS20Caps.DynamicFlowControlDepth = 24; pCaps->PS20Caps.NumTemps = D3DVS20_MAX_NUMTEMPS; /* workaround for wine not returning InstructionSlots correctly for shaders v3.0 */ if ((pCaps->VertexShaderVersion & 0xff00) == 0x0300) { pCaps->MaxVertexShader30InstructionSlots = RT_MIN(32768, pCaps->MaxVertexShader30InstructionSlots); pCaps->MaxPixelShader30InstructionSlots = RT_MIN(32768, pCaps->MaxPixelShader30InstructionSlots); } #if defined(DEBUG) if ((pCaps->VertexShaderVersion & 0xff00) == 0x0300) { Assert(pCaps->MaxVertexShader30InstructionSlots >= 512); Assert(pCaps->MaxVertexShader30InstructionSlots <= 32768); Assert(pCaps->MaxPixelShader30InstructionSlots >= 512); Assert(pCaps->MaxPixelShader30InstructionSlots <= 32768); } else if ((pCaps->VertexShaderVersion & 0xff00) == 0x0200) { Assert(pCaps->MaxVertexShader30InstructionSlots == 0); Assert(pCaps->MaxPixelShader30InstructionSlots == 0); } else { WARN(("incorect shader caps!")); } #endif vboxDispDumpD3DCAPS9(pCaps); return S_OK; }