[v2 2/6] d3dx9: Apply changed states only in CommitChanges.
Paul Gofman
gofmanp at gmail.com
Thu Mar 16 14:22:58 CDT 2017
On 03/16/2017 10:12 PM, Matteo Bruni wrote:
> 2017-03-16 17:15 GMT+01:00 Paul Gofman <gofmanp at gmail.com>:
>>
>> 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.
> I guess you can argue that, sure. It's mostly that
> set_shader_constants_device() calls regstore_reset_table() and, for
> symmetry if not in practice, it seems better to clear here too.
> Not a big deal either way you choose.
>
>> 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?
> Right, that's a good idea I think. If that breaks the tests it means
> there is some bug somewhere in the update logic.
> Do you need to remove regstore_reset_table() though?
>
No, it does not break the tests I have now. It may become more tricky in
shared parameters update logic, but I don't have enough tests for that
part yet so probably some possible problems there should be addressed
later. But removing regstore_reset_table() is necessary in this case,
because otherwise if some preshader uses both updated and non-updated
parameter, the input for non-updated parameter will be zeroed after
previous (full) update and not initialized by update logic (in the
current version of the patch all preshaders input are initialized due to
'TRUE' ultimately passed as update_all to constant set function, so it
can bear table reset).
More information about the wine-devel
mailing list