Я изучаю язык HLSL и у меня есть код на ассемблере, который я пытаюсь изменить:
mul r0.x, cb0[11].z, cb1[69].w
frc r0.x, r0.x
add r0.y, r0.x, l(0.500000)
frc r0.y, r0.y
add r0.z, r0.y, l(0.250000)
frc r0.z, r0.z
add r0.w, r0.z, l(0.500000)
frc r0.w, r0.w
mul r1.x, r0.w, l(6.283185)
sincos null, r1.x, r1.x
И вот что я написал, когда попытался стереть код на ассемблере:
float3 ps_main( const PixelInput pixel ) : SV_TARGET
{
float4 Scroll;
Scroll.x = frac(colorScroll.z * gameTime.w);
Scroll.y = frac( Scroll.x + 0.5f);
Scroll.z = frac( Scroll.y + 0.25f);
Scroll.w = frac( Scroll.z + 0.5f);
float3 ScollSpeed = Scroll.w * 6.283185f;
return ScollSpeed;
}
Но при компиляции генерируется следующий код сборки:
dcl_temps 1
mul r0.x, cb0[11].z, cb1[69].w
frc r0.x, r0.x
add r0.x, r0.x, l(0.500000)
frc r0.x, r0.x
add r0.x, r0.x, l(0.250000)
frc r0.x, r0.x
add r0.x, r0.x, l(0.500000)
frc r0.x, r0.x
mul o0.xyz, r0.xxxx, l(6.283185, 6.283185, 6.283185, 0.000000)
ret
Почему все мои переменные r0.x
? Я хочу, чтобы Scroll.y
был r0.y
, как в оригинальной сборке.