|
|
@@ -1,9 +1,172 @@
|
|
|
from panda3d import core
|
|
|
|
|
|
-GLSL_VERT_SHADER = "\n"
|
|
|
|
|
|
-def test_shadercompiler_glsl(registry):
|
|
|
- compiler = registry.get_compiler_from_language(core.Shader.SL_GLSL)
|
|
|
- module = compiler.compile_now(core.ShaderModule.Stage.vertex, core.StringStream(GLSL_VERT_SHADER.encode('utf-8')))
|
|
|
+def test_shadercompiler_glsl_empty(compiler_glsl):
|
|
|
+ assert not compiler_glsl.compile_now(
|
|
|
+ core.ShaderModule.Stage.vertex,
|
|
|
+ core.StringStream(b''),
|
|
|
+ )
|
|
|
+
|
|
|
+
|
|
|
+def test_shadercompiler_glsl_simple(compiler_glsl):
|
|
|
+ code = """
|
|
|
+ #version 330
|
|
|
+
|
|
|
+ void main() {
|
|
|
+ }
|
|
|
+ """
|
|
|
+
|
|
|
+ module = compiler_glsl.compile_now(
|
|
|
+ core.ShaderModule.Stage.vertex,
|
|
|
+ core.StringStream(code.encode('ascii')),
|
|
|
+ )
|
|
|
+ assert module
|
|
|
assert module.stage == core.ShaderModule.Stage.vertex
|
|
|
- assert module.get_ir() == GLSL_VERT_SHADER
|
|
|
+
|
|
|
+
|
|
|
+def test_shadercompiler_glsl_invalid_version(compiler_glsl):
|
|
|
+ code = """
|
|
|
+ #version 123
|
|
|
+
|
|
|
+ void main() {
|
|
|
+ }
|
|
|
+ """
|
|
|
+
|
|
|
+ assert not compiler_glsl.compile_now(
|
|
|
+ core.ShaderModule.Stage.vertex,
|
|
|
+ core.StringStream(code.encode('ascii')),
|
|
|
+ )
|
|
|
+
|
|
|
+
|
|
|
+def test_shadercompiler_glsl150_bitcast(compiler_glsl):
|
|
|
+ code = """
|
|
|
+ #version 150
|
|
|
+
|
|
|
+ in int a;
|
|
|
+ out float b;
|
|
|
+
|
|
|
+ void main() {
|
|
|
+ b = floatBitsToInt(a);
|
|
|
+ }
|
|
|
+ """
|
|
|
+
|
|
|
+ assert not compiler_glsl.compile_now(
|
|
|
+ core.ShaderModule.Stage.vertex,
|
|
|
+ core.StringStream(code.encode('ascii')),
|
|
|
+ )
|
|
|
+
|
|
|
+
|
|
|
+def test_shadercompiler_glsl150_bitcast_extension1(compiler_glsl):
|
|
|
+ code = """
|
|
|
+ #version 150
|
|
|
+ #extension GL_ARB_shader_bit_encoding : enable
|
|
|
+
|
|
|
+ in int a;
|
|
|
+ out float b;
|
|
|
+
|
|
|
+ void main() {
|
|
|
+ b = floatBitsToInt(a);
|
|
|
+ }
|
|
|
+ """
|
|
|
+
|
|
|
+ assert compiler_glsl.compile_now(
|
|
|
+ core.ShaderModule.Stage.vertex,
|
|
|
+ core.StringStream(code.encode('ascii')),
|
|
|
+ )
|
|
|
+
|
|
|
+
|
|
|
+def test_shadercompiler_glsl150_bitcast_extension2(compiler_glsl):
|
|
|
+ code = """
|
|
|
+ #version 150
|
|
|
+ #extension GL_ARB_gpu_shader5 : enable
|
|
|
+
|
|
|
+ in int a;
|
|
|
+ out float b;
|
|
|
+
|
|
|
+ void main() {
|
|
|
+ b = floatBitsToInt(a);
|
|
|
+ }
|
|
|
+ """
|
|
|
+
|
|
|
+ assert compiler_glsl.compile_now(
|
|
|
+ core.ShaderModule.Stage.vertex,
|
|
|
+ core.StringStream(code.encode('ascii')),
|
|
|
+ )
|
|
|
+
|
|
|
+
|
|
|
+def test_shadercompiler_glsl330_bitcast(compiler_glsl):
|
|
|
+ code = """
|
|
|
+ #version 330
|
|
|
+
|
|
|
+ in int a;
|
|
|
+ out float b;
|
|
|
+
|
|
|
+ void main() {
|
|
|
+ b = floatBitsToInt(a);
|
|
|
+ }
|
|
|
+ """
|
|
|
+
|
|
|
+ assert compiler_glsl.compile_now(
|
|
|
+ core.ShaderModule.Stage.vertex,
|
|
|
+ core.StringStream(code.encode('ascii')),
|
|
|
+ )
|
|
|
+
|
|
|
+
|
|
|
+def test_shadercompiler_glsl150_explicit_attrib_location(compiler_glsl):
|
|
|
+ code = """
|
|
|
+ #version 150
|
|
|
+
|
|
|
+ layout(location=2) in vec4 a;
|
|
|
+
|
|
|
+ void main() {
|
|
|
+ gl_Position = a;
|
|
|
+ }
|
|
|
+ """
|
|
|
+
|
|
|
+ assert not compiler_glsl.compile_now(
|
|
|
+ core.ShaderModule.Stage.vertex,
|
|
|
+ core.StringStream(code.encode('ascii')),
|
|
|
+ )
|
|
|
+
|
|
|
+
|
|
|
+def test_shadercompiler_glsl150_explicit_attrib_location_extension(compiler_glsl):
|
|
|
+ code = """
|
|
|
+ #version 150
|
|
|
+ #extension GL_ARB_explicit_attrib_location : enable
|
|
|
+
|
|
|
+ layout(location=2) in vec4 a;
|
|
|
+
|
|
|
+ void main() {
|
|
|
+ gl_Position = a;
|
|
|
+ }
|
|
|
+ """
|
|
|
+
|
|
|
+ module = compiler_glsl.compile_now(
|
|
|
+ core.ShaderModule.Stage.vertex,
|
|
|
+ core.StringStream(code.encode('ascii')),
|
|
|
+ )
|
|
|
+ assert module
|
|
|
+ assert len(module.inputs) == 1
|
|
|
+ assert module.inputs[0].name.get_name() == "a"
|
|
|
+ assert module.inputs[0].location == 2
|
|
|
+
|
|
|
+
|
|
|
+def test_shadercompiler_glsl330_explicit_attrib_location(compiler_glsl):
|
|
|
+ code = """
|
|
|
+ #version 330
|
|
|
+
|
|
|
+ layout(location=2) in vec4 a;
|
|
|
+
|
|
|
+ void main() {
|
|
|
+ gl_Position = a;
|
|
|
+ }
|
|
|
+ """
|
|
|
+
|
|
|
+ module = compiler_glsl.compile_now(
|
|
|
+ core.ShaderModule.Stage.vertex,
|
|
|
+ core.StringStream(code.encode('ascii')),
|
|
|
+ )
|
|
|
+ assert module
|
|
|
+ assert len(module.inputs) == 1
|
|
|
+ assert module.inputs[0].name.get_name() == "a"
|
|
|
+ assert module.inputs[0].location == 2
|