tests: Add unit tests for GLSL usampler/isamspler/uimage/iimage

This commit is contained in:
rdb 2021-01-17 12:12:18 +01:00
parent 38d304f2fe
commit 3479c6eee2

View File

@ -141,15 +141,77 @@ def test_glsl_sampler(gsg):
tex2.setup_2d_texture(1, 1, core.Texture.T_float, core.Texture.F_rgba32) 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)) 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 = """ preamble = """
uniform sampler1D tex1; uniform sampler1D tex1;
uniform sampler2D tex2; uniform sampler2D tex2;
uniform sampler3D tex3;
""" """
code = """ code = """
assert(texelFetch(tex1, 0, 0) == vec4(0, 2 / 255.0, 1, 1)); 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(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): def test_glsl_image(gsg):
@ -172,6 +234,62 @@ def test_glsl_image(gsg):
run_glsl_test(gsg, code, preamble, {'tex1': tex1, 'tex2': tex2}) 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): def test_glsl_ssbo(gsg):
from struct import pack from struct import pack
num1 = pack('<i', 1234567) num1 = pack('<i', 1234567)