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.