2017-03-09 23:15 GMT+01:00 Paul Gofman gofmanp@gmail.com:
@@ -2021,9 +2055,11 @@ static HRESULT d3dx9_base_effect_set_matrix_array(struct d3dx9_base_effect *base switch (param->class) { case D3DXPC_MATRIX_ROWS:
set_dirty(param); for (i = 0; i < count; ++i) { set_matrix(¶m->members[i], &matrix[i]);
set_dirty(¶m->members[i]); } return D3D_OK;
Here and below it should be possible to avoid marking dirty each array element individually. IIRC I had some test showing that arrays are always considered completely dirty or clean on native i.e. CommitChanges updates the whole array even if you only change a subset of the elements.
Yes, arrays and structs are always considered completely dirty, it is in my test (for both shader constants and states). Setting dirty each element here is actually a leftover from early implementation when I did not know that, I will fix it (just put it off the loop).
On 03/14/2017 12:42 AM, Matteo Bruni wrote:
2017-03-09 23:15 GMT+01:00 Paul Gofman gofmanp@gmail.com:
@@ -2021,9 +2055,11 @@ static HRESULT d3dx9_base_effect_set_matrix_array(struct d3dx9_base_effect *base switch (param->class) { case D3DXPC_MATRIX_ROWS:
set_dirty(param); for (i = 0; i < count; ++i) { set_matrix(¶m->members[i], &matrix[i]);
set_dirty(¶m->members[i]); } return D3D_OK;
Here and below it should be possible to avoid marking dirty each array element individually. IIRC I had some test showing that arrays are always considered completely dirty or clean on native i.e. CommitChanges updates the whole array even if you only change a subset of the elements.