[v2 2/6] d3dx9: Apply changed states only in CommitChanges.
Paul Gofman
gofmanp at gmail.com
Thu Mar 16 11:15:00 CDT 2017
>>>> - set_constants(rs, &pres->inputs);
>>>> - if (FAILED(hr = execute_preshader(pres)))
>>>> - return hr;
>>>> + if (update_all || is_const_tab_input_dirty(&pres->inputs))
>>>> + {
>>>> + set_constants(rs, &pres->inputs, TRUE);
>>>> + if (FAILED(hr = execute_preshader(pres)))
>>>> + return hr;
>>>> + regstore_reset_table(rs, PRES_REGTAB_CONST);
>>>> + }
>>> This is technically a separate bugfix which would be better as a
>>> separate patch, before this one.
>>>
>> This chunk actually avoids redundant preshader recompute. I don't quite
>> understand how can I do it as a separate previous patch, as this patch
>> introduce "update_all" parameter, is_const_tab_input_dirty() function and
>> all the other logic around it. Or can it be that you were thinking of
>> changes on light and material state update, and copy pasted different chunk?
> I just meant the regstore_reset_table() part.
>
I am sorry, I still don't understand how it is a separate bugfix. I
don't see the absence of it as a bug in previous code, reset of
constants is not required as they are updated anyway. Actually
regstore_reset_table() call along with ultimate TRUE for update_all
parameter in set_constants() call here is redundant. I added it just to
make things a bit more robuts and more robust checking of unitialized
input in preshader in case of some bugs in their update logic, which got
more complicated with selective constants update. It should actually
work (without updating constants from unchanged parameters) if change
set_constants(rs, &pres->inputs, TRUE); to set_constants(rs,
&pres->inputs, update_all); and remove regstore_reset_table(). Maybe I
should do it like this?
More information about the wine-devel
mailing list