HLSL: allow self-type cast (as no-op passthrough)

Previously, casting an object of a struct type to an identical type
would produce an error.  This PR allows this case.

As a side-effect of the change, several self-type casts in existing
tests go away.  For example:

    0:10          Construct float ( temp float)
    0:10            'f' ( in float)

becomes this (without the unneeded constructor op):

    0:10          'f' ( in float)

For vector or array types this can result in somewhat less overall code.

Fixes: #1218
This commit is contained in:
LoopDawg 2018-05-17 13:03:12 -06:00
parent ebec909487
commit c59916710e
6 changed files with 205 additions and 48 deletions

25
Test/hlsl.self_cast.frag Normal file
View file

@ -0,0 +1,25 @@
struct Test0 {};
struct Test1 { float f; };
void main()
{
{
Test0 a;
Test0 b = (Test0)a;
}
{
Test1 a;
Test1 b = (Test1)a;
}
{
Test0 a[2];
Test0 b[2] = (Test0[2])a;
}
{
Test1 a[2];
Test1 b[2] = (Test1[2])a;
}
}