Jump to content
  • Advertisement
Sign in to follow this  
tracegame

PS_2_0 Asm Shader sincos question

Recommended Posts

Posted (edited)

I am trying to transfer a XNA PS shader to HLSL.And maybe try to transfer to GLSL.

New to ASM Shader and got this sincos function,no idea what does it mean.

sincos r1.y, r0.x, c9, c10

according to MS doc

https://docs.microsoft.com/en-us/windows/desktop/direct3dhlsl/sincos---ps

c9,c10 are const which define like this

	#define D3DSINCOSCONST1  -1.5500992e-006f, -2.1701389e-005f,  0.0026041667f, 0.00026041668f
	c9 = D3DSINCOSCONST1
	
	#define D3DSINCOSCONST2 -0.020833334f, -0.12500000f, 1.0f, 0.50000000f
	c10 = D3DSINCOSCONST2

r1.y is dest

r0.x is source

So,what does this line mean?How do I know it is sin function or cos function for HLSL?

And here is the full PS ASM code from Intel GPA.

//
// Generated by Microsoft (R) HLSL Shader Compiler 9.26.952.2844
//
// Parameters:
//
//   float fTimer;
//   float stop;
//
//
// Registers:
//
//   Name         Reg   Size
//   ------------ ----- ----
//   fTimer       c0       1
//   stop         c1       1
//

//    preshader
//    mul c0.x, c0.x, (0.15)
//    add r0.x, c1.x, (-1)
//    mul c1.x, r0.x, r0.x
//    neg r0.x, c1.x
//    add c2.x, r0.x, (1)
//
// approximately 5 instructions used
//
// Generated by Microsoft (R) HLSL Shader Compiler 9.26.952.2844
//
// Parameters:
//
//   sampler2D ColorMapSampler;
//   float x;
//   float y;
//
//
// Registers:
//
//   Name            Reg   Size
//   --------------- ----- ----
//   x               c3       1
//   y               c4       1
//   ColorMapSampler s0       1
//

    ps_2_0
    def c5, 0.600000024, -0.0529000014, 22, 0.319999993
    def c6, 0.159154937, 0.5, 6.28318548, -3.14159274
    def c7, 0.416666657, 0.0240000002, 0, 0
    def c8, -3, 6, 6, 0
    def c9, -1.55009923e-006, -2.17013894e-005, 0.00260416674, 0.00026041668
    def c10, -0.020833334, -0.125, 1, 0.5
    dcl t0.xy
    dcl_2d s0
    mov r0.w, c5.z
    mad r0.x, t0.x, r0.w, c0.x
    mad r0.x, r0.x, c6.x, c6.y
    frc r0.x, r0.x
    mad r0.x, r0.x, c6.z, c6.w
    sincos r1.y, r0.x, c9, c10
    mul r0.x, r1.y, c5.w
    add r0.y, t0.y, -c4.x
    mul r0.y, r0.y, r0.y
    mul r0.y, r0.y, c5.x
    add r0.z, t0.x, -c3.x
    mad r0.y, r0.z, r0.z, r0.y
    mad r0.z, r0.y, -c7.x, c7.y
    mad r1.x, r0.x, r0.z, t0.x
    mad r0.x, t0.y, r0.w, c0.x
    mad r0.x, r0.x, c6.x, c6.y
    frc r0.x, r0.x
    mad r0.x, r0.x, c6.z, c6.w
    sincos r2.y, r0.x, c9, c10
    mul r0.x, r0.z, r2.y
    mad r1.y, r0.x, c5.w, t0.y
    add r0.x, r0.y, c5.y
    add r0.y, -r0.y, -c5.y
    mul r2.xyz, r0.y, c8
    cmp r1.xy, r0.x, t0, r1
    texld r1, r1, s0
    mov r2.w, c7.z
    add r2, -r2, r1
    cmp r0, r0.x, r1, r2
    add r1.xyz, -r0, c2.x
    abs r1.xyz, r1
    cmp r0.xyz, -c1.x, r0, r1
    mov oC0, r0

// approximately 47 instruction slots used (1 texture, 46 arithmetic)

 

Edited by tracegame

Share this post


Link to post
Share on other sites
Advertisement

For ps_2_0 and ps_2_x, the instruction operates as follows (V = the scalar value from src0 with a replicate swizzle):

If the write mask is .y:

dest.x is undefined when the instruction completes
dest.y = sin(V)
dest.z is undefined when the instruction completes
dest.w is not touched by the instruction

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!