spv.specConstantOperations.vert 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. #version 450
  2. layout(constant_id = 200) const float sp_float = 3.1415926;
  3. layout(constant_id = 201) const int sp_int = 10;
  4. layout(constant_id = 202) const uint sp_uint = 100;
  5. layout(constant_id = 203) const int sp_sint = -10;
  6. layout(constant_id = 204) const double sp_double = 2.718281828459;
  7. //
  8. // Scalars
  9. //
  10. // float <-> double conversion
  11. const float float_from_double = float(sp_double);
  12. const double double_from_float = double(sp_float);
  13. // uint/int <-> bool conversion
  14. const bool bool_from_int = bool(sp_int);
  15. const bool bool_from_uint = bool(sp_uint);
  16. const int int_from_bool = int(bool_from_int);
  17. const uint uint_from_bool = uint(bool_from_int);
  18. // uint <-> int
  19. const uint sp_uint_from_sint = uint(sp_sint);
  20. const int sp_sint_from_uint = int(sp_uint);
  21. // Negate and Not
  22. const int negate_int = -sp_int;
  23. const int not_int = ~sp_int;
  24. // Add and Subtract
  25. const int sp_int_add_two = sp_int + 2;
  26. const int sp_int_add_two_sub_three = sp_int + 2 - 3;
  27. const int sp_int_add_two_sub_four = sp_int_add_two - 4;
  28. // Mul, Div and Rem
  29. const int sp_sint_mul_two = sp_sint * 2;
  30. const uint sp_uint_mul_two = sp_uint * 2;
  31. const int sp_sint_mul_two_div_five = sp_sint_mul_two / 5;
  32. const uint sp_uint_mul_two_div_five = sp_uint_mul_two / 5;
  33. const int sp_sint_rem_four = sp_sint % 4;
  34. const uint sp_uint_rem_four = sp_uint % 4;
  35. const int sp_sint_mul_three_div_five = sp_sint * 3 / 5;
  36. // Shift
  37. const int sp_sint_shift_right_arithmetic = sp_sint >> 10;
  38. const uint sp_uint_shift_right_arithmetic = sp_uint >> 20;
  39. const int sp_sint_shift_left = sp_sint << 1;
  40. const uint sp_uint_shift_left = sp_uint << 2;
  41. // Bitwise And, Or, Xor
  42. const int sp_sint_or_256 = sp_sint | 0x100;
  43. const uint sp_uint_xor_512 = sp_uint ^ 0x200;
  44. /* // Scalar comparison */
  45. const bool sp_int_lt_sp_sint = sp_int < sp_sint;
  46. const bool sp_uint_equal_sp_uint = sp_uint == sp_uint;
  47. const bool sp_int_gt_sp_sint = sp_int > sp_sint;
  48. //
  49. // Vectors
  50. //
  51. const ivec4 iv = ivec4(20, 30, sp_int, sp_int);
  52. const uvec4 uv = uvec4(sp_uint, sp_uint, -1, -2);
  53. //const vec4 fv = vec4(sp_float, 1.25, sp_float, 1.25);
  54. // uint/int <-> bool conversion
  55. const bvec4 bv_from_iv = bvec4(iv);
  56. const bvec4 bv_from_uv = bvec4(uv);
  57. const ivec4 iv_from_bv = ivec4(bv_from_iv);
  58. const uvec4 uv_from_bv = uvec4(bv_from_iv);
  59. // uint <-> int
  60. const uvec4 uv_from_iv = uvec4(iv);
  61. const ivec4 iv_from_uv = ivec4(uv);
  62. // Negate and Not
  63. const ivec4 not_iv = ~iv;
  64. const ivec4 negate_iv = -iv;
  65. // Add and Subtract
  66. const ivec4 iv_add_two = iv + 2;
  67. const ivec4 iv_add_two_sub_three = iv + 2 - 3;
  68. const ivec4 iv_add_two_sub_four = iv_add_two_sub_three - 4;
  69. // Mul, Div and Rem
  70. const ivec4 iv_mul_two = iv * 2;
  71. const ivec4 iv_mul_two_div_five = iv_mul_two / 5;
  72. const ivec4 iv_rem_four = iv % 4;
  73. // Shift
  74. const ivec4 iv_shift_right_arithmetic = iv >> 10;
  75. const ivec4 iv_shift_left = iv << 2;
  76. // Bitwise And, Or, Xor
  77. const ivec4 iv_or_1024 = iv | 0x400;
  78. const uvec4 uv_xor_2048 = uv ^ 0x800;
  79. // Swizzles
  80. const int iv_x = iv.x;
  81. const ivec2 iv_yx = iv.yx;
  82. const ivec3 iv_zyx = iv.zyx;
  83. const ivec4 iv_yzxw = iv.yzxw;
  84. int non_const_array_size_from_spec_const() {
  85. int array[sp_int + 2];
  86. for (int i = 0; i < sp_int + 2; i++) {
  87. array[i] = 1023;
  88. }
  89. return array[sp_int + 1];
  90. }
  91. // ternary
  92. layout(constant_id = 210) const int a = 4;
  93. layout(constant_id = 211) const int b = 6;
  94. layout(constant_id = 212) const bool c = true;
  95. int ternayArray1[a > b ? a : b];
  96. const int t1 = c ? 13 : 17;
  97. const int t2 = c ? a : 17;
  98. const int t3 = true ? a : 17;
  99. const int t4 = a > b ? 13 + a : 17 * b;
  100. const vec2 v2 = !c ? vec2(1.0) : vec2(2.0);
  101. void main() {}