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
