this search was done just before. it's just a random search of me
because I'm still curious about how the i9xx T&L works

searched in Google with keyword "software t&l value 2" (without
quotes)
found a link
http://software.intel.com/en-us/articles/intel-gma-3000-and-x3000-developers-guide/

inside, there's a code

DWORD SetVertexProcessingMode( LPDIRECT3D9 pD3D )

{

DWORD vertexprocessingmode;       // vertex processing mode

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(R) Graphics...



// Gather the primary adapter's information...

if( g_pD3D->GetAdapterIdentifier(0,0,&adapterID ) != D3D_OK )

{

return E_FAIL;

}



if ( ( adapterID.VendorId == 0x8086 ) &&  // Intel Architecture

( adapterID.DeviceId == 0x2A02 ) ||  // GM965 Device 0

( adapterID.DeviceId == 0x2A03 ) ||  // GM965 Device 1

( adapterID.DeviceId == 0x29A2 ) ||  // G965 Device 0

( adapterID.DeviceId == 0x29A3 ) ||  // G965 Device 1

( adapterID.DeviceId == 0x27A2 ) ||  // 945GM Device 0

( adapterID.DeviceId == 0x27A6 ) ||  // 945GM Device 1

( adapterID.DeviceId == 0x2772 ) ||  // 945G Device 0

( adapterID.DeviceId == 0x2776 ) ||  // 945G Device 1

( adapterID.DeviceId == 0x2592 ) ||  // 915GM Device 0

( adapterID.DeviceId == 0x2792 ) ||  // 915GM Device 1

( adapterID.DeviceId == 0x2582 ) ||  // 915G Device 0

( adapterID.DeviceId == 0x2782 ) ||  // 915G Device 1

{

vertexprocessingmode = D3DCREATE_SOFTWARE_VERTEXPROCESSING;

}

else

{

// Chipset does not meet minimum requirements...

return E_MINSPEC;

}

}



return vertexprocessingmode;

}

==============================================================================================

split it into smaller parts, here's part 1:

// 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;

}

my question on this part is:
if (value NOT EQUAL 0),
then {do T&L}?

==============================================================================================

the second part:

// Gather the primary adapter's information...

if( g_pD3D->GetAdapterIdentifier(0,0,&adapterID ) != D3D_OK )

{

return E_FAIL;

}

if ( ( adapterID.VendorId == 0x8086 ) &&  // Intel Architecture

( adapterID.DeviceId == 0x2A02 ) ||  // GM965 Device 0

( adapterID.DeviceId == 0x2A03 ) ||  // GM965 Device 1

( adapterID.DeviceId == 0x29A2 ) ||  // G965 Device 0

( adapterID.DeviceId == 0x29A3 ) ||  // G965 Device 1

( adapterID.DeviceId == 0x27A2 ) ||  // 945GM Device 0

( adapterID.DeviceId == 0x27A6 ) ||  // 945GM Device 1

( adapterID.DeviceId == 0x2772 ) ||  // 945G Device 0

( adapterID.DeviceId == 0x2776 ) ||  // 945G Device 1

( adapterID.DeviceId == 0x2592 ) ||  // 915GM Device 0

( adapterID.DeviceId == 0x2792 ) ||  // 915GM Device 1

( adapterID.DeviceId == 0x2582 ) ||  // 915G Device 0

( adapterID.DeviceId == 0x2782 ) ||  // 915G Device 1

{

vertexprocessingmode = D3DCREATE_SOFTWARE_VERTEXPROCESSING;

}

my next question: combine part 1 and 2
if (value NOT EQUAL 0)
AND (deviceid EQUAL "any deviceid that listed above"),
then {do Software T&L}?

==============================================================================================

I'm not a computer guy, it's just happen I have a little knack of
understanding some logical thinking.
but because of it also, I still have to confirm whether my
interpretation is correct or wrong to all of you who do live and work
in computer field.
so let me know if I have some mistakes here.

==============================================================================================

my main point is:

if, up until now, the code is written this way by Intel, then is it
useless to have value other than "ZERO" and "NOT ZERO"? recently we
have a new value, that is "2", so the "NOT ZERO" is divided again into
"1" and "2", so I'm questioning the existence of value "2" besides
"NOT ZERO"

if there's such values, am I wrong if I expect there will be some
slight modification of the code, at least like this (sorry if I made
mistakes here):
if (value = 0), then {do "a"}
if (value = 1), then {do "b"}
if (value = 2), then {do "c"}
else {do nothing}

or maybe
if (value = 0), then {do "a"}
else if (value != 0)
{
  if (value = 1), then {do "b"}
  if (value = 2), then {do "c"}
}
else {do nothing}

assumption: I assume the documentation is up-to-date. but if it's not,
then it'll be another story and my thought above might be all wrong
from the very beginning.

oh, and btw, I found another code in this pdf
http://software.intel.com/file/21805
it's similar at a glance... I haven't check it again because I caught
a cold... ~_~

-- 
9xx SOLDIERS SANS FRONTIERS

Reply via email to