From 979f194f499e76a12ba137c52b3b33f51d7d8e6c Mon Sep 17 00:00:00 2001 From: rdb Date: Sat, 29 Oct 2022 18:34:38 +0200 Subject: [PATCH] tests: Load either 120 or 150 GLSL shaders depending on capabilities Addresses part of #804 --- tests/display/glsl_bad.vert | 2 +- tests/display/glsl_bad_legacy.vert | 12 ++++++++++ tests/display/glsl_include.vert | 7 ++++-- ...e_inputs.vert => glsl_include_inputs.glsl} | 3 --- tests/display/glsl_include_legacy.vert | 10 ++++++++ tests/display/glsl_simple.frag | 6 +++-- tests/display/glsl_simple.vert | 2 +- tests/display/glsl_simple_legacy.frag | 5 ++++ tests/display/glsl_simple_legacy.vert | 11 +++++++++ tests/display/test_glsl_shader.py | 24 ++++++++++++++----- 10 files changed, 67 insertions(+), 15 deletions(-) create mode 100644 tests/display/glsl_bad_legacy.vert rename tests/display/{glsl_include_inputs.vert => glsl_include_inputs.glsl} (62%) create mode 100644 tests/display/glsl_include_legacy.vert create mode 100644 tests/display/glsl_simple_legacy.frag create mode 100644 tests/display/glsl_simple_legacy.vert diff --git a/tests/display/glsl_bad.vert b/tests/display/glsl_bad.vert index 8a324916ec..e06e2948d1 100644 --- a/tests/display/glsl_bad.vert +++ b/tests/display/glsl_bad.vert @@ -1,4 +1,4 @@ -#version 130 +#version 150 // Uniform inputs uniform mat4 p3d_ModelViewProjectionMatrix; diff --git a/tests/display/glsl_bad_legacy.vert b/tests/display/glsl_bad_legacy.vert new file mode 100644 index 0000000000..e96ecdc39e --- /dev/null +++ b/tests/display/glsl_bad_legacy.vert @@ -0,0 +1,12 @@ +#version 120 + +// Uniform inputs +uniform mat4 p3d_ModelViewProjectionMatrix; + +// Vertex inputs +attribute vec4 p3d_Vertex; + +void main() { + gl_Position = p3d_ModelViewProjectionMatrix * p3d_Vertex; + does_not_exist = p3d_Vertex; +} diff --git a/tests/display/glsl_include.vert b/tests/display/glsl_include.vert index 1826fdf677..21ba97b8ca 100644 --- a/tests/display/glsl_include.vert +++ b/tests/display/glsl_include.vert @@ -1,6 +1,9 @@ -#version 130 +#version 150 -#pragma include "glsl_include_inputs.vert" +#pragma include "glsl_include_inputs.glsl" + +// Vertex inputs +in vec4 p3d_Vertex; void main() { gl_Position = p3d_ModelViewProjectionMatrix * p3d_Vertex; diff --git a/tests/display/glsl_include_inputs.vert b/tests/display/glsl_include_inputs.glsl similarity index 62% rename from tests/display/glsl_include_inputs.vert rename to tests/display/glsl_include_inputs.glsl index 125078ce16..58eb09c181 100644 --- a/tests/display/glsl_include_inputs.vert +++ b/tests/display/glsl_include_inputs.glsl @@ -1,5 +1,2 @@ // Uniform inputs uniform mat4 p3d_ModelViewProjectionMatrix; - -// Vertex inputs -in vec4 p3d_Vertex; diff --git a/tests/display/glsl_include_legacy.vert b/tests/display/glsl_include_legacy.vert new file mode 100644 index 0000000000..0111515310 --- /dev/null +++ b/tests/display/glsl_include_legacy.vert @@ -0,0 +1,10 @@ +#version 120 + +#pragma include "glsl_include_inputs.glsl" + +// Vertex inputs +attribute vec4 p3d_Vertex; + +void main() { + gl_Position = p3d_ModelViewProjectionMatrix * p3d_Vertex; +} diff --git a/tests/display/glsl_simple.frag b/tests/display/glsl_simple.frag index 5f190e015c..66a6143f50 100644 --- a/tests/display/glsl_simple.frag +++ b/tests/display/glsl_simple.frag @@ -1,5 +1,7 @@ -#version 130 +#version 150 + +out vec4 p3d_FragColor; void main() { - gl_FragColor = vec4(0, 0, 0, 1); + p3d_FragColor = vec4(0, 0, 0, 1); } diff --git a/tests/display/glsl_simple.vert b/tests/display/glsl_simple.vert index ea3afd7498..2e3f7db8f8 100644 --- a/tests/display/glsl_simple.vert +++ b/tests/display/glsl_simple.vert @@ -1,4 +1,4 @@ -#version 130 +#version 150 // Uniform inputs uniform mat4 p3d_ModelViewProjectionMatrix; diff --git a/tests/display/glsl_simple_legacy.frag b/tests/display/glsl_simple_legacy.frag new file mode 100644 index 0000000000..c7f34a5da9 --- /dev/null +++ b/tests/display/glsl_simple_legacy.frag @@ -0,0 +1,5 @@ +#version 120 + +void main() { + gl_FragColor = vec4(0, 0, 0, 1); +} diff --git a/tests/display/glsl_simple_legacy.vert b/tests/display/glsl_simple_legacy.vert new file mode 100644 index 0000000000..523362f606 --- /dev/null +++ b/tests/display/glsl_simple_legacy.vert @@ -0,0 +1,11 @@ +#version 120 + +// Uniform inputs +uniform mat4 p3d_ModelViewProjectionMatrix; + +// Vertex inputs +attribute vec4 p3d_Vertex; + +void main() { + gl_Position = p3d_ModelViewProjectionMatrix * p3d_Vertex; +} diff --git a/tests/display/test_glsl_shader.py b/tests/display/test_glsl_shader.py index 97718ac4b7..4a4314ba9d 100644 --- a/tests/display/test_glsl_shader.py +++ b/tests/display/test_glsl_shader.py @@ -111,6 +111,9 @@ def run_glsl_compile_check(gsg, vert_path, frag_path, expect_fail=False): shader = core.Shader.load(core.Shader.SL_GLSL, vert_path, frag_path) assert shader is not None + if not gsg.supports_glsl: + expect_fail = True + shader.prepare_now(gsg.prepared_objects, gsg) assert shader.is_prepared(gsg.prepared_objects) if expect_fail: @@ -468,20 +471,29 @@ def test_glsl_write_extract_image_buffer(gsg): def test_glsl_compile_error(gsg): """Test getting compile errors from bad shaders""" - vert_path = core.Filename(SHADERS_DIR, 'glsl_bad.vert') - frag_path = core.Filename(SHADERS_DIR, 'glsl_simple.frag') + suffix = '' + if (gsg.driver_shader_version_major, gsg.driver_shader_version_minor) < (1, 50): + suffix = '_legacy' + vert_path = core.Filename(SHADERS_DIR, 'glsl_bad' + suffix + '.vert') + frag_path = core.Filename(SHADERS_DIR, 'glsl_simple' + suffix + '.frag') run_glsl_compile_check(gsg, vert_path, frag_path, expect_fail=True) def test_glsl_from_file(gsg): """Test compiling GLSL shaders from files""" - vert_path = core.Filename(SHADERS_DIR, 'glsl_simple.vert') - frag_path = core.Filename(SHADERS_DIR, 'glsl_simple.frag') + suffix = '' + if (gsg.driver_shader_version_major, gsg.driver_shader_version_minor) < (1, 50): + suffix = '_legacy' + vert_path = core.Filename(SHADERS_DIR, 'glsl_simple' + suffix + '.vert') + frag_path = core.Filename(SHADERS_DIR, 'glsl_simple' + suffix + '.frag') run_glsl_compile_check(gsg, vert_path, frag_path) def test_glsl_includes(gsg): """Test preprocessing includes in GLSL shaders""" - vert_path = core.Filename(SHADERS_DIR, 'glsl_include.vert') - frag_path = core.Filename(SHADERS_DIR, 'glsl_simple.frag') + suffix = '' + if (gsg.driver_shader_version_major, gsg.driver_shader_version_minor) < (1, 50): + suffix = '_legacy' + vert_path = core.Filename(SHADERS_DIR, 'glsl_include' + suffix + '.vert') + frag_path = core.Filename(SHADERS_DIR, 'glsl_simple' + suffix + '.frag') run_glsl_compile_check(gsg, vert_path, frag_path)