Developing Games on Intel Graphics
If you are gaming on graphics integrated in your Intel Processor, this is the place for you! Find answers to your questions or post your issues with PC games
508 Discussions

Developer : Vertex processing & D3DCREATE_FPU_PRESERVE

alessandroborges1
1,534 Views

Hi Im a developer and Id like to ask some things about Vertex processing and D3DCREATE_FPU_PRESERVE.

1) Vertex processing

As the X3000 is HW-TnL capable, and all older intel cards are not, couldn't the code shown at
http://software.intel.com/en-us/articles/intel-gma-3000-and-x3000-developers-guide
Intel GMA 3000 and X3000 Developer's Guide
looks like below ?

DWORD SetVertexProcessingMode( LPDIRECT3D9 pD3D )
{
// vertex processing mode - default is mixed for generic card
DWORD vertexprocessingmode = D3DCREATE_MIXED_VERTEXPROCESSING;

D3DCAPS9 caps; // Device CAPs structure
D3DADAPTER_IDENTIFIER9 adapterID; // Used to store device info
 // Retrieve device capabilities
if( g_pD3D->GetDeviceCaps( 0, D3DDEVTYPE_HAL, &caps ) != D3D_OK ){
return E_FAIL; // exit if reading caps fails...
}
 // Check if hardware T&L is supported...
// - The D3DDEVCAPS_HWTRANSFORMANDLIGHT capability should
// be enabled for GMA X3000
if ( ( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT ) != 0 ){
vertexprocessingmode = D3DCREATE_HARDWARE_VERTEXPROCESSING;
}
else{
// Check vendor and device ID and enable software vertex
// processing for Intel Graphics...
// Gather the primary adapter's information...
 if( g_pD3D->GetAdapterIdentifier(0,0,&adapterID ) != D3D_OK ){
return E_FAIL;
}
// this is an Intel non HW-TnL vcard
if ( (adapterID.VendorId == 0x8086 )) // Intel Architecture
{
vertexprocessingmode = D3DCREATE_SOFTWARE_VERTEXPROCESSING;
}
else
{
// Chipset does not meet minimum requirements...
return E_MINSPEC;
}
 }
// return default mode - mixed
return vertexprocessingmode;
}

2) D3DCREATE_FPU_PRESERVE

Our application does intensive FPU operations, so our engine should use D3DCREATE_FPU_PRESERVE,
to avoid Direct D3D reduce fpu precision to single, when we need double precision.
Does it has bad i mpact on 9x5 vcards ? what about X3000 ?

0 Kudos
1 Reply
wedamon
Novice
1,534 Views
RE: 1
I think it would be safer to use the recommended approach described by the article. You don't gain anything by leaving out the checks against the device IDs, really...

RE: 2
You could use the D3DCREATE_FPU_PRESERVE flag, certainly; but just be aware that it is a minor performance penalty (on any graphics solution). The runtime is what sets/clears the FPU flags. I haven't measured the hit, but if you're considering using the flag (as opposed to setting the FPU mode yourself when you know you need it in a certain state) you should set it and see if there is any measurable performance impact to your app.

just my 2c anyway
0 Kudos
Reply