test_shadercompiler.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. from panda3d import core
  2. def test_shadercompiler_glsl_empty(compiler_glsl):
  3. assert not compiler_glsl.compile_now(
  4. core.ShaderModule.Stage.vertex,
  5. core.StringStream(b''),
  6. )
  7. def test_shadercompiler_glsl_simple(compiler_glsl):
  8. code = """
  9. #version 330
  10. void main() {
  11. }
  12. """
  13. module = compiler_glsl.compile_now(
  14. core.ShaderModule.Stage.vertex,
  15. core.StringStream(code.encode('ascii')),
  16. )
  17. assert module
  18. assert module.stage == core.ShaderModule.Stage.vertex
  19. def test_shadercompiler_glsl_invalid_version(compiler_glsl):
  20. code = """
  21. #version 123
  22. void main() {
  23. }
  24. """
  25. assert not compiler_glsl.compile_now(
  26. core.ShaderModule.Stage.vertex,
  27. core.StringStream(code.encode('ascii')),
  28. )
  29. def test_shadercompiler_glsl150_bitcast(compiler_glsl):
  30. code = """
  31. #version 150
  32. in int a;
  33. out float b;
  34. void main() {
  35. b = floatBitsToInt(a);
  36. }
  37. """
  38. assert not compiler_glsl.compile_now(
  39. core.ShaderModule.Stage.vertex,
  40. core.StringStream(code.encode('ascii')),
  41. )
  42. def test_shadercompiler_glsl150_bitcast_extension1(compiler_glsl):
  43. code = """
  44. #version 150
  45. #extension GL_ARB_shader_bit_encoding : enable
  46. in int a;
  47. out float b;
  48. void main() {
  49. b = floatBitsToInt(a);
  50. }
  51. """
  52. assert compiler_glsl.compile_now(
  53. core.ShaderModule.Stage.vertex,
  54. core.StringStream(code.encode('ascii')),
  55. )
  56. def test_shadercompiler_glsl150_bitcast_extension2(compiler_glsl):
  57. code = """
  58. #version 150
  59. #extension GL_ARB_gpu_shader5 : enable
  60. in int a;
  61. out float b;
  62. void main() {
  63. b = floatBitsToInt(a);
  64. }
  65. """
  66. assert compiler_glsl.compile_now(
  67. core.ShaderModule.Stage.vertex,
  68. core.StringStream(code.encode('ascii')),
  69. )
  70. def test_shadercompiler_glsl330_bitcast(compiler_glsl):
  71. code = """
  72. #version 330
  73. in int a;
  74. out float b;
  75. void main() {
  76. b = floatBitsToInt(a);
  77. }
  78. """
  79. assert compiler_glsl.compile_now(
  80. core.ShaderModule.Stage.vertex,
  81. core.StringStream(code.encode('ascii')),
  82. )
  83. def test_shadercompiler_glsl150_explicit_attrib_location(compiler_glsl):
  84. code = """
  85. #version 150
  86. layout(location=2) in vec4 a;
  87. void main() {
  88. gl_Position = a;
  89. }
  90. """
  91. assert not compiler_glsl.compile_now(
  92. core.ShaderModule.Stage.vertex,
  93. core.StringStream(code.encode('ascii')),
  94. )
  95. def test_shadercompiler_glsl150_explicit_attrib_location_extension(compiler_glsl):
  96. code = """
  97. #version 150
  98. #extension GL_ARB_explicit_attrib_location : enable
  99. layout(location=2) in vec4 a;
  100. void main() {
  101. gl_Position = a;
  102. }
  103. """
  104. module = compiler_glsl.compile_now(
  105. core.ShaderModule.Stage.vertex,
  106. core.StringStream(code.encode('ascii')),
  107. )
  108. assert module
  109. assert len(module.inputs) == 1
  110. assert module.inputs[0].name.get_name() == "a"
  111. assert module.inputs[0].location == 2
  112. def test_shadercompiler_glsl330_explicit_attrib_location(compiler_glsl):
  113. code = """
  114. #version 330
  115. layout(location=2) in vec4 a;
  116. void main() {
  117. gl_Position = a;
  118. }
  119. """
  120. module = compiler_glsl.compile_now(
  121. core.ShaderModule.Stage.vertex,
  122. core.StringStream(code.encode('ascii')),
  123. )
  124. assert module
  125. assert len(module.inputs) == 1
  126. assert module.inputs[0].name.get_name() == "a"
  127. assert module.inputs[0].location == 2