[v2 1/2] d3dx9: Support relative addressing in preshader.

Paul Gofman gofmanp at gmail.com
Wed Mar 29 13:42:42 CDT 2017


Sorry, regarding my 1st question, I realized that of course first write 
make sense, as the size will be updated through output register. But 
still I would suggest to keep the currently implemented scheme to better 
much native approach (which is tolerant to missing constants definition).

On 03/29/2017 09:23 PM, Paul Gofman wrote:
> 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