d3dx9: ID3DXConstantTable::SetMatrix should set scalar constants.

This commit is contained in:
Józef Kucia 2012-08-21 14:52:14 +02:00 committed by Alexandre Julliard
parent 77993a610e
commit 978971e1ac
2 changed files with 16 additions and 0 deletions

View File

@ -988,6 +988,12 @@ static HRESULT set_matrix_array(ID3DXConstantTable *iface, IDirect3DDevice9 *dev
row_offset = 4; row_offset = 4;
registers_per_matrix = desc.Rows; registers_per_matrix = desc.Rows;
} }
else if (desc.Class == D3DXPC_SCALAR)
{
column_offset = 1;
row_offset = 1;
registers_per_matrix = 1;
}
else else
{ {
FIXME("Unhandled variable class %#x\n", desc.Class); FIXME("Unhandled variable class %#x\n", desc.Class);

View File

@ -636,6 +636,16 @@ static void test_setting_basic_table(IDirect3DDevice9 *device)
"The variable f was not set correctly by ID3DXConstantTable_SetVector, got %f, should be %f\n", "The variable f was not set correctly by ID3DXConstantTable_SetVector, got %f, should be %f\n",
out[0], f4.x); out[0], f4.x);
memset(out, 0, sizeof(out));
IDirect3DDevice9_SetVertexShaderConstantF(device, 6, out, 1);
res = ID3DXConstantTable_SetMatrix(ctable, device, "f", &mvp);
ok(res == D3D_OK, "ID3DXConstantTable_SetMatrix failed on variable f: 0x%08x\n", res);
IDirect3DDevice9_GetVertexShaderConstantF(device, 6, out, 1);
ok(out[0] == U(S(mvp))._11 && out[1] == 0.0f && out[2] == 0.0f && out[3] == 0.0f,
"The variable f was not set correctly by ID3DXConstantTable_SetMatrix, got %f, should be %f\n",
out[0], U(S(mvp))._11);
refcnt = ID3DXConstantTable_Release(ctable); refcnt = ID3DXConstantTable_Release(ctable);
ok(refcnt == 0, "The constant table reference count was %u, should be 0\n", refcnt); ok(refcnt == 0, "The constant table reference count was %u, should be 0\n", refcnt);
} }