From 3479c6eee2988e90e81f46c1115f46d8e97dc4b2 Mon Sep 17 00:00:00 2001 From: rdb Date: Sun, 17 Jan 2021 12:12:18 +0100 Subject: [PATCH] tests: Add unit tests for GLSL usampler/isamspler/uimage/iimage --- tests/display/test_glsl_shader.py | 120 +++++++++++++++++++++++++++++- 1 file changed, 119 insertions(+), 1 deletion(-) diff --git a/tests/display/test_glsl_shader.py b/tests/display/test_glsl_shader.py index cb7ab165d4..97718ac4b7 100644 --- a/tests/display/test_glsl_shader.py +++ b/tests/display/test_glsl_shader.py @@ -141,15 +141,77 @@ def test_glsl_sampler(gsg): tex2.setup_2d_texture(1, 1, core.Texture.T_float, core.Texture.F_rgba32) tex2.set_clear_color((1.0, 2.0, -3.14, 0.0)) + tex3 = core.Texture("") + tex3.setup_3d_texture(1, 1, 1, core.Texture.T_float, core.Texture.F_r32) + tex3.set_clear_color((0.5, 0.0, 0.0, 1.0)) + preamble = """ uniform sampler1D tex1; uniform sampler2D tex2; + uniform sampler3D tex3; """ code = """ 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)); + assert(texelFetch(tex3, ivec3(0, 0, 0), 0) == vec4(0.5, 0.0, 0.0, 1.0)); """ - run_glsl_test(gsg, code, preamble, {'tex1': tex1, 'tex2': tex2}) + run_glsl_test(gsg, code, preamble, {'tex1': tex1, 'tex2': tex2, 'tex3': tex3}) + + +def test_glsl_isampler(gsg): + from struct import pack + + tex1 = core.Texture("") + tex1.setup_1d_texture(1, core.Texture.T_byte, core.Texture.F_rgba8i) + tex1.set_ram_image(pack('bbbb', 0, 1, 2, 3)) + + tex2 = core.Texture("") + tex2.setup_2d_texture(1, 1, core.Texture.T_short, core.Texture.F_r16i) + tex2.set_ram_image(pack('h', 4)) + + tex3 = core.Texture("") + tex3.setup_3d_texture(1, 1, 1, core.Texture.T_int, core.Texture.F_r32i) + tex3.set_ram_image(pack('i', 5)) + + preamble = """ + uniform isampler1D tex1; + uniform isampler2D tex2; + uniform isampler3D tex3; + """ + code = """ + assert(texelFetch(tex1, 0, 0) == ivec4(0, 1, 2, 3)); + assert(texelFetch(tex2, ivec2(0, 0), 0) == ivec4(4, 0, 0, 1)); + assert(texelFetch(tex3, ivec3(0, 0, 0), 0) == ivec4(5, 0, 0, 1)); + """ + run_glsl_test(gsg, code, preamble, {'tex1': tex1, 'tex2': tex2, 'tex3': tex3}) + + +def test_glsl_usampler(gsg): + from struct import pack + + tex1 = core.Texture("") + tex1.setup_1d_texture(1, core.Texture.T_unsigned_byte, core.Texture.F_rgba8i) + tex1.set_ram_image(pack('BBBB', 0, 1, 2, 3)) + + tex2 = core.Texture("") + tex2.setup_2d_texture(1, 1, core.Texture.T_unsigned_short, core.Texture.F_r16i) + tex2.set_ram_image(pack('H', 4)) + + tex3 = core.Texture("") + tex3.setup_3d_texture(1, 1, 1, core.Texture.T_unsigned_int, core.Texture.F_r32i) + tex3.set_ram_image(pack('I', 5)) + + preamble = """ + uniform usampler1D tex1; + uniform usampler2D tex2; + uniform usampler3D tex3; + """ + code = """ + assert(texelFetch(tex1, 0, 0) == uvec4(0, 1, 2, 3)); + assert(texelFetch(tex2, ivec2(0, 0), 0) == uvec4(4, 0, 0, 1)); + assert(texelFetch(tex3, ivec3(0, 0, 0), 0) == uvec4(5, 0, 0, 1)); + """ + run_glsl_test(gsg, code, preamble, {'tex1': tex1, 'tex2': tex2, 'tex3': tex3}) def test_glsl_image(gsg): @@ -172,6 +234,62 @@ def test_glsl_image(gsg): run_glsl_test(gsg, code, preamble, {'tex1': tex1, 'tex2': tex2}) +def test_glsl_iimage(gsg): + from struct import pack + + tex1 = core.Texture("") + tex1.setup_1d_texture(1, core.Texture.T_byte, core.Texture.F_rgba8i) + tex1.set_ram_image(pack('bbbb', 0, 1, 2, 3)) + + tex2 = core.Texture("") + tex2.setup_2d_texture(1, 1, core.Texture.T_short, core.Texture.F_r16i) + tex2.set_ram_image(pack('h', 4)) + + tex3 = core.Texture("") + tex3.setup_3d_texture(1, 1, 1, core.Texture.T_int, core.Texture.F_r32i) + tex3.set_ram_image(pack('i', 5)) + + preamble = """ + layout(rgba8i) uniform iimage1D tex1; + layout(r16i) uniform iimage2D tex2; + layout(r32i) uniform iimage3D tex3; + """ + code = """ + assert(imageLoad(tex1, 0) == ivec4(0, 1, 2, 3)); + assert(imageLoad(tex2, ivec2(0, 0)) == ivec4(4, 0, 0, 1)); + assert(imageLoad(tex3, ivec3(0, 0, 0)) == ivec4(5, 0, 0, 1)); + """ + run_glsl_test(gsg, code, preamble, {'tex1': tex1, 'tex2': tex2, 'tex3': tex3}) + + +def test_glsl_uimage(gsg): + from struct import pack + + tex1 = core.Texture("") + tex1.setup_1d_texture(1, core.Texture.T_unsigned_byte, core.Texture.F_rgba8i) + tex1.set_ram_image(pack('BBBB', 0, 1, 2, 3)) + + tex2 = core.Texture("") + tex2.setup_2d_texture(1, 1, core.Texture.T_unsigned_short, core.Texture.F_r16i) + tex2.set_ram_image(pack('H', 4)) + + tex3 = core.Texture("") + tex3.setup_3d_texture(1, 1, 1, core.Texture.T_unsigned_int, core.Texture.F_r32i) + tex3.set_ram_image(pack('I', 5)) + + preamble = """ + layout(rgba8ui) uniform uimage1D tex1; + layout(r16ui) uniform uimage2D tex2; + layout(r32ui) uniform uimage3D tex3; + """ + code = """ + assert(imageLoad(tex1, 0) == uvec4(0, 1, 2, 3)); + assert(imageLoad(tex2, ivec2(0, 0)) == uvec4(4, 0, 0, 1)); + assert(imageLoad(tex3, ivec3(0, 0, 0)) == uvec4(5, 0, 0, 1)); + """ + run_glsl_test(gsg, code, preamble, {'tex1': tex1, 'tex2': tex2, 'tex3': tex3}) + + def test_glsl_ssbo(gsg): from struct import pack num1 = pack('