I am trying to create an adaptor device (I think). I am using the debug libraries, which spit this at me:
Code:
Direct3D9: (ERROR) :Device cannot perform hardware processing. ValidateCreateDevice failed.
D3D9 Helper: IDirect3D9::CreateDevice failed: D3DERR_INVALIDCALL
Test 2
Direct3D9: (ERROR) : [0] : Address 00D0D4CB
Direct3D9: (ERROR) : [1] : Address 00D0D59B
Direct3D9: (ERROR) : [2] : Address 00D0D440
Direct3D9: (ERROR) : [3] : Address 00D01D44
Direct3D9: (ERROR) : [4] : Address 00401605
Direct3D9: (ERROR) : [5] : Address 004022EE
Direct3D9: (ERROR) : [6] : Address 7C816FD7
Direct3D9: (ERROR) : [7] : Address 00000000
Direct3D9: (ERROR) : [8] : Address 00000000
Direct3D9: (ERROR) : [9] : Address 00000000
Direct3D9: (ERROR) : [10] : Address 00000000
Direct3D9: (ERROR) : [11] : Address 00000000
Direct3D9: (ERROR) : [12] : Address 00000000
Direct3D9: (ERROR) : [13] : Address 00000000
Direct3D9: (ERROR) : [14] : Address 00000000
Direct3D9: (ERROR) : [15] : Address 00000000
Direct3D9: (ERROR) : [0] : Address 00D04064
Direct3D9: (ERROR) : [1] : Address 00D04E4F
Direct3D9: (ERROR) : [2] : Address 00D05588
Direct3D9: (ERROR) : [3] : Address 00D01D65
Direct3D9: (ERROR) : [4] : Address 00401605
Direct3D9: (ERROR) : [5] : Address 004022EE
Direct3D9: (ERROR) : [6] : Address 7C816FD7
Direct3D9: (ERROR) : [7] : Address 00000000
Direct3D9: (ERROR) : [8] : Address 00000000
Direct3D9: (ERROR) : [9] : Address 00000000
Direct3D9: (ERROR) : [10] : Address 00000000
Direct3D9: (ERROR) : [11] : Address 00000000
Direct3D9: (ERROR) : [12] : Address 00000000
Direct3D9: (ERROR) : [13] : Address 00000000
Direct3D9: (ERROR) : [14] : Address 00000000
Direct3D9: (ERROR) : [15] : Address 00000000
Direct3D9: (ERROR) : [0] : Address 00D0572F
Direct3D9: (ERROR) : [1] : Address 00D01D65
Direct3D9: (ERROR) : [2] : Address 00401605
Direct3D9: (ERROR) : [3] : Address 004022EE
Direct3D9: (ERROR) : [4] : Address 7C816FD7
Direct3D9: (ERROR) : [5] : Address 00000000
Direct3D9: (ERROR) : [6] : Address 00000000
Direct3D9: (ERROR) : [7] : Address 00000000
Direct3D9: (ERROR) : [8] : Address 00000000
Direct3D9: (ERROR) : [9] : Address 00000000
Direct3D9: (ERROR) : [10] : Address 00000000
Direct3D9: (ERROR) : [11] : Address 00000000
Direct3D9: (ERROR) : [12] : Address 00000000
Direct3D9: (ERROR) : [13] : Address 00000000
Direct3D9: (ERROR) : [14] : Address 00000000
Direct3D9: (ERROR) : [15] : Address 00000000
Direct3D9: (ERROR) : [0] : Address 00D0D4CB
Direct3D9: (ERROR) : [1] : Address 00D0D59B
Direct3D9: (ERROR) : [2] : Address 00D0D440
Direct3D9: (ERROR) : [3] : Address 00D7C2D5
Direct3D9: (ERROR) : [4] : Address 00D7A696
Direct3D9: (ERROR) : [5] : Address 00D01DBE
Direct3D9: (ERROR) : [6] : Address 00401605
Direct3D9: (ERROR) : [7] : Address 004022EE
Direct3D9: (ERROR) : [8] : Address 7C816FD7
Direct3D9: (ERROR) : [9] : Address 00000000
Direct3D9: (ERROR) : [10] : Address 00000000
Direct3D9: (ERROR) : [11] : Address 00000000
Direct3D9: (ERROR) : [12] : Address 00000000
Direct3D9: (ERROR) : [13] : Address 00000000
Direct3D9: (ERROR) : [14] : Address 00000000
Direct3D9: (ERROR) : [15] : Address 00000000
I try to find a valid device using this code.
Code:
D3DDISPLAYMODE d3ddm = { 0 };
bool bDesired = false;
int nModes = mpd3dInterface->GetAdapterModeCount( D3DADAPTER_DEFAULT,
D3DFMT_X8R8G8B8 );
for( int i = 0; i < nModes; ++i )
{
if( FAILED( mpd3dInterface->EnumAdapterModes
( D3DADAPTER_DEFAULT, D3DFMT_X8R8G8B8, i, &d3ddm ) ) )
{
return 0;
}
if( d3ddm.Width != mnWidth || d3ddm.Height != mnHeight ) continue;
if( d3ddm.Format != D3DFMT_X8R8G8B8 ) continue;
if( d3ddm.RefreshRate != 75 ) continue;
bDesired = true;
break;
}
if( !bDesired )
{
return 0;
}
if( FAILED( mpd3dInterface->CheckDeviceType
( D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
D3DFMT_X8R8G8B8,
D3DFMT_X8R8G8B8,
FALSE ) ) )
{
return 0;
}
if( FAILED( mpd3dInterface->CheckDeviceFormat
( D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
D3DFMT_X8R8G8B8,
D3DUSAGE_DEPTHSTENCIL,
D3DRTYPE_SURFACE,
D3DFMT_D16 ) ) )
{
return 0;
}
D3DCAPS9 d3dcaps;
ZeroMemory(&d3dcaps, sizeof d3dcaps);
if( FAILED( mpd3dInterface->GetDeviceCaps
( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,
&d3dcaps ) ) )
{
return 0;
}
DWORD dwBehaviorFlags = 0;
if( d3dcaps.VertexProcessingCaps != 0 )
dwBehaviorFlags |= D3DCREATE_HARDWARE_VERTEXPROCESSING;
else
dwBehaviorFlags |= D3DCREATE_SOFTWARE_VERTEXPROCESSING;
md3dpp.Windowed = FALSE;
md3dpp.EnableAutoDepthStencil = TRUE;
md3dpp.AutoDepthStencilFormat = D3DFMT_D16;
md3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
md3dpp.BackBufferWidth = mnWidth;
md3dpp.BackBufferHeight = mnHeight;
md3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;
if( FAILED( mpd3dInterface->CreateDevice
( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,
mhWnd, dwBehaviorFlags, &md3dpp,
&mpd3dDevice ) ) )
{
return 0;
}
I don't know much about hardware compatibility, but it just seems to not be working getting a 640x480 'device' wven though the enumeration found it.