2010/5/19 Stefan Dösinger <stefandoesin...@gmx.at>:
>
> Am 18.05.2010 um 14:55 schrieb Matteo Bruni:
>> +    if(!check_reg_type(src, vs_3_reg_allowed)) {
>> +        asmparser_message(This, "Line %u: Source register %s not supported 
>> in VS 3.0\n",
>> +                          This->line_no,
>> +                          debug_print_srcreg(src, ST_VERTEX));
>> +        set_parse_status(This, PARSE_ERR);
>> +    }
> I realize the patch has been committed already, but I'm wondering: Does the 
> native assembler check the register numbers too? Or just the types?
>
> You have to be careful with error checking in the assembler, because the 
> native assembler checks for very few error conditions. More complex checks 
> like uninitialized registers or unwritten output registers are checked by the 
> shader validator, an undocumented interface in d3d9.dll(which is called by 
> vsa.exe / psa.exe)
>
> If my memory is correct, all the other error conditions you check for are 
> checked by the native *assembler*, but I'm not sure about the register 
> numbers. I think more unit tests would be helpful.
>
>
>
>

Yes, the register numbers are checked too. There is currently a single
test about this ("shader 22" in failure_test()), it works correctly
with native. I'm invoking D3DXAssembleShader with
D3DXSHADER_SKIPVALIDATION to avoid the validator interference.
I can add more tests anyway, maybe one showing that the register
number is ignored when there is relative addressing involved.


Reply via email to