転置行列

DirectX9 VertexShader」では、シェーダにマトリックスを与える前に転置行列の計算をしていたのですが、シェーダ内部で計算するようにしてみました。
vsample01.vsh

//c0-c3      ビュー+透視変換マトリックス
//
//v0         頂点の座標値
//v1         色情報

vs.2.0

dcl_position v0
dcl_color v1
mov oD0,v1
mul   r0,  c0,  v0.x
mad   r0,  c1,  v0.y,  r0
mad   r0,  c2,  v0.z,  r0
mad   oPos,  c3,  v0.w,  r0

G9Lib

      :     
      :     
//------------------------------------------------------------------------------
//■テスト描画
//------------------------------------------------------------------------------
void	G9lib::TestDraw()
{
	D3DXMATRIX      matView;
	D3DXMATRIX      matProj;
	D3DXMATRIX      matWorld;

	pD3DDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0,0,0), 1.0, 0);

	pD3DDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_CCW );	//片面
	pD3DDevice->SetRenderState( D3DRS_LIGHTING,FALSE);		//光源無効

	pD3DDevice->BeginScene();
	//-----------------------------------------
	//ワールド座標の回転
	D3DXMatrixRotationY( &matWorld,timeGetTime()/5000.0f );
//	pD3DDevice->SetTransform( D3DTS_WORLD, &matWorld );

	//-----------------------------------------
	//View 座標の設定
	D3DXMatrixLookAtLH(&matView,&D3DXVECTOR3(0.0f, -5.0f, 30.0f),	//	カメラの位置を表す3次元ベクトル
                                &D3DXVECTOR3(0.0f, 0.0f, 0.0f),		//	カメラの注視点を表す3次元ベクトル
                                &D3DXVECTOR3(0.0f, 1.0f, 0.0f));	//	上方向を表す3次元ベクトル
//	pD3DDevice->SetTransform( D3DTS_VIEW, &matView );
	//-----------------------------------------
	//透視変換の設定
	D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.0f, 10.0f, 2000.0f );
//	pD3DDevice->SetTransform( D3DTS_PROJECTION, &matProj );

	//-----------------------------------------
	//	Z値に関して
	pD3DDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);
	pD3DDevice->SetRenderState(D3DRS_ZWRITEENABLE, TRUE);

	pD3DDevice->SetVertexShader(vShader);                  

	pD3DDevice->SetVertexShaderConstantF(0,(float*)&(matWorld * matView * matProj),4);   //視点・透視変換

	pD3DDevice->SetFVF(D3DVERTEXCOR::FVF);                      //頂点フォーマット設定
	pD3DDevice->SetStreamSource(0,gVBuffer,0,sizeof(D3DVERTEXCOR));
	pD3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP,0,4);
	//-----------------------------------------
	//	描画
	pD3DDevice->EndScene();
	pD3DDevice->Present(NULL, NULL, NULL, NULL);
}

これでシェーダー内部で計算するようになるので、うまく扱えば高速化できるのではないかな?