scalarOnVecIntrisic.hlsl 873 B

1234567891011121314151617181920212223242526272829303132
  1. // RUN: %dxc -E main -T ps_6_0 | FileCheck %s
  2. // CHECK: Sqrt
  3. // CHECK: float 4.000000e+00
  4. // CHECK: fadd
  5. // CHECK: 2.000000e+00
  6. // CHECK: fmul
  7. // CHECK: 2.000000e+00
  8. // CHECK: fsub
  9. // CHECK: -1.000000e+00
  10. float4 main(float4 a : A) : SV_TARGET {
  11. // refract(i, n, eta):
  12. // d = dot(i,n);
  13. // t = 1 - eta * eta * ( 1 - d*d);
  14. // cond = t >= 1;
  15. // r = eta * i - (eta * d + sqrt(t)) * n;
  16. // return cond ? r : 0;
  17. // -> d = dot(1, 2) = 2
  18. // t = 1 - ( 1 - 4) = 4
  19. // cond = 4 >= 1 is true
  20. // r = 1 - ( 2 + sqrt(4)) * 2 = 1 - (2 + sqrt(4)) * 2
  21. // return r;
  22. // reflect(i, n): = i - 2 * n * dot(i, n) -> 1- 4*2 = -7
  23. // dot(2,3) -> 6
  24. // faceforward(n,i,ng): -nx sign(dot(i, ng)) -> -1
  25. // 1 - (2 + sqrt(4)) * 2 + -7 + 6 + -1 = -1 (2 + sqrt(4)) * 2
  26. // = -1 - (2 + sqrt(4)) * 2
  27. return refract(1,2,1) + reflect(1,2) + dot(2,3) + faceforward(1,1,1);
  28. }