diff --git a/tests/display/test_glsl_shader.py b/tests/display/test_glsl_shader.py index 91816353f6..0a0a5f5737 100644 --- a/tests/display/test_glsl_shader.py +++ b/tests/display/test_glsl_shader.py @@ -10,6 +10,7 @@ from _pytest.outcomes import Failed # The reset() function serves to prevent the _triggered variable from being # optimized out in the case that the assertions are being optimized out. GLSL_COMPUTE_TEMPLATE = """#version {version} +{extensions} layout(local_size_x = 1, local_size_y = 1) in; @@ -37,7 +38,7 @@ void main() {{ """ -def run_glsl_test(gsg, body, preamble="", inputs={}, version=430): +def run_glsl_test(gsg, body, preamble="", inputs={}, version=130, exts=set()): """ Runs a GLSL test on the given GSG. The given body is executed in the main function and should call assert(). The preamble should contain all of the shader inputs. """ @@ -48,11 +49,20 @@ def run_glsl_test(gsg, body, preamble="", inputs={}, version=430): if not gsg.supports_buffer_texture: pytest.skip("buffer textures not supported") + exts = exts | {'GL_ARB_compute_shader', 'GL_ARB_shader_image_load_store'} + missing_exts = sorted(ext for ext in exts if not gsg.has_extension(ext)) + if missing_exts: + pytest.skip("missing extensions: " + ' '.join(missing_exts)) + + extensions = '' + for ext in exts: + extensions += '#extension {ext} : require\n'.format(ext=ext) + __tracebackhide__ = True preamble = preamble.strip() body = body.rstrip().lstrip('\n') - code = GLSL_COMPUTE_TEMPLATE.format(version=version, preamble=preamble, body=body) + code = GLSL_COMPUTE_TEMPLATE.format(version=version, extensions=extensions, preamble=preamble, body=body) line_offset = code[:code.find(body)].count('\n') + 1 shader = core.Shader.make_compute(core.Shader.SL_GLSL, code) assert shader, code @@ -122,7 +132,7 @@ def test_glsl_sampler(gsg): assert(texelFetch(tex1, 0, 0) == vec4(0, 2 / 255.0, 1, 1)); assert(texelFetch(tex2, ivec2(0, 0), 0) == vec4(1.0, 2.0, -3.14, 0.0)); """ - run_glsl_test(gsg, code, preamble, {'tex1': tex1, 'tex2': tex2}), code + run_glsl_test(gsg, code, preamble, {'tex1': tex1, 'tex2': tex2}) def test_glsl_image(gsg): @@ -142,7 +152,7 @@ def test_glsl_image(gsg): assert(imageLoad(tex1, 0) == vec4(0, 2 / 255.0, 1, 1)); assert(imageLoad(tex2, ivec2(0, 0)) == vec4(1.0, 2.0, -3.14, 0.0)); """ - run_glsl_test(gsg, code, preamble, {'tex1': tex1, 'tex2': tex2}), code + run_glsl_test(gsg, code, preamble, {'tex1': tex1, 'tex2': tex2}) def test_glsl_ssbo(gsg): @@ -164,7 +174,10 @@ def test_glsl_ssbo(gsg): assert(value1 == 1234567); assert(value2 == -1234567); """ - run_glsl_test(gsg, code, preamble, {'buffer1': buffer1, 'buffer2': buffer2}), code + run_glsl_test(gsg, code, preamble, {'buffer1': buffer1, 'buffer2': buffer2}, + exts={'GL_ARB_shader_storage_buffer_object', + 'GL_ARB_uniform_buffer_object', + 'GL_ARB_shading_language_420pack'}) def test_glsl_int(gsg): @@ -197,8 +210,8 @@ def test_glsl_uint(gsg): uniform uint intmax; """ code = """ - assert(zero == 0); - assert(intmax == 0x7fffffff); + assert(zero == 0u); + assert(intmax == 0x7fffffffu); """ run_glsl_test(gsg, code, preamble, inputs) @@ -243,7 +256,7 @@ def test_glsl_pta_int(gsg): assert(pta[2] == 2); assert(pta[3] == 3); """ - run_glsl_test(gsg, code, preamble, {'pta': pta}), code + run_glsl_test(gsg, code, preamble, {'pta': pta}) def test_glsl_pta_ivec4(gsg): @@ -256,7 +269,7 @@ def test_glsl_pta_ivec4(gsg): assert(pta[0] == ivec4(0, 1, 2, 3)); assert(pta[1] == ivec4(4, 5, 6, 7)); """ - run_glsl_test(gsg, code, preamble, {'pta': pta}), code + run_glsl_test(gsg, code, preamble, {'pta': pta}) def test_glsl_pta_mat4(gsg): @@ -278,7 +291,7 @@ def test_glsl_pta_mat4(gsg): assert(pta[1][2] == vec4(24, 25, 26, 27)); assert(pta[1][3] == vec4(28, 29, 30, 31)); """ - run_glsl_test(gsg, code, preamble, {'pta': pta}), code + run_glsl_test(gsg, code, preamble, {'pta': pta}) def test_glsl_write_extract_image_buffer(gsg): @@ -299,12 +312,12 @@ def test_glsl_write_extract_image_buffer(gsg): layout(r32i) uniform iimageBuffer tex2; """ code = """ - assert(imageLoad(tex1, 0).r == 0); + assert(imageLoad(tex1, 0).r == 0u); assert(imageLoad(tex2, 0).r == 0); imageStore(tex1, 0, uvec4(123)); imageStore(tex2, 0, ivec4(-456)); memoryBarrier(); - assert(imageLoad(tex1, 0).r == 123); + assert(imageLoad(tex1, 0).r == 123u); assert(imageLoad(tex2, 0).r == -456); """