Browse Source

tests: fix and flesh out shaderpipeline tests

rdb 5 years ago
parent
commit
38265c6a53

+ 6 - 0
tests/shaderpipeline/conftest.py

@@ -1,7 +1,13 @@
 import pytest
 
+
 @pytest.fixture
 def registry():
     from panda3d.core import ShaderCompilerRegistry
     return ShaderCompilerRegistry.get_global_ptr()
 
+
[email protected]
+def compiler_glsl(registry):
+    from panda3d.core import Shader
+    return registry.get_compiler_from_language(Shader.SL_GLSL)

+ 168 - 5
tests/shaderpipeline/test_shadercompiler.py

@@ -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

+ 3 - 3
tests/shaderpipeline/test_shadercompilerregistry.py

@@ -9,9 +9,9 @@ def test_shadercompilerregistry_exists(registry):
 #    assert core.ShaderCompilerGlslPreProc in [type(i) for i in registry.compilers]
 #    assert registry.get_compiler_from_language(core.Shader.SL_GLSL) is not None
 
-def test_shadercompilerregistry_cg_loaded(registry):
-    assert core.ShaderCompilerCg in [type(i) for i in registry.compilers]
-    assert registry.get_compiler_from_language(core.Shader.SL_Cg) is not None
+#def test_shadercompilerregistry_cg_loaded(registry):
+#    assert core.ShaderCompilerCg in [type(i) for i in registry.compilers]
+#    assert registry.get_compiler_from_language(core.Shader.SL_Cg) is not None
 
 #def test_shadercompilerregistry_missing_lang(registry):
 #    assert core.ShaderCompilerGlslPreProc in [type(i) for i in registry.compilers]