Fwd: [PATCH 2/5] d3dx9_36: Implemented ID3DXConstantTable_SetIntArray and ID3DXConstantTable_SetInt (Try 5)
Travis Athougies
iammisc at gmail.com
Wed Mar 30 01:43:03 CDT 2011
>> Ints and floats are represented differently and so, if we want to put
>> an integer array into floating point registers, we need to have casts.
>> If you were to simply call SetFloatArray, you would get nonsense
>> values in the floating point registers.
>
> Even using casts will fall foul of the C aliasing rules - which
> mean that the compiler can assume that a read of type will not be
> modified by a write to a different type so can be reorderd (unless
> one of the types is 'char').
>
Exactly. Which is why I am not ever casting int pointers to float
pointers as Rico suggested. Instead I'm looping through the array and
casting each int to a float, which should invoke the machinery
necessary to convert from the bit representation of an int to that of
a float.
> Not only that, but there are systems that will fault is an invalid
> FP bit pattern is loaded into an FP register.
>
If I'm casting ints to floats (and not int pointers to float pointers)
I don't see how this could be an issue.
Travis
--
Travis Athougies
More information about the wine-devel
mailing list