[v2 1/2] d3dx9: Support relative addressing in preshader.
Paul Gofman
gofmanp at gmail.com
Wed Mar 29 13:23:51 CDT 2017
On 03/29/2017 09:17 PM, Matteo Bruni wrote:
> I haven't looked at the v3 patches yet, but in the meantime:
>
> 2017-03-29 2:09 GMT+02:00 Paul Gofman <gofmanp at gmail.com>:
>
>> Oh, its a bug actually now, we should not mind absolute offset here if
>> relative addressing is on, we know if it is out of bound or not when we add
>> index register value only, which can be negative. Yes, it looks the only
>> tables where we need to do this update table size are temporary register
>> table (for which we don't have any size known in advance) and output tables.
>> I would check that and if I am not missing something now would leave just
>> update table size where required.
> Yeah and temporaries are supposed to be written before being read so
> in theory you can entirely skip the update_table_size() calls for
> source arguments.
But update_table_sizes is required to calculate memory allocation
size for table, what is the difference if temporary registers are
written first in this regard? In v3 I u sed correct offset for updating
table sizes when relative addressing is used in operand. I didn't change
table size update though to update temporary register table size only,
as doing so currently breaks one test. It is test_effect_preshader_op(),
which writes instructions to the effect blob and unintentionally
corrupts the data past end of the preshader code being updated. This
effectively results in destroying 'CTAB' for the next preshader in blob,
so that preshader is parsed ok but it does not have input constant
definition anymore, thus no table sizes set from input registers
definition. Still such an effect and preshader is created ok by native
implementation, and also by our current implementation. So So I thought
it is better to keep the current logic of table size updates based on
actual register access in preshader for all tables, as according to the
test native implementation does not fail preshader creation if it access
the constants outside defined input range.
More information about the wine-devel
mailing list