diff options
author | Marek Olšák <marek.olsak@amd.com> | 2014-06-26 00:53:17 +0200 |
---|---|---|
committer | Marek Olšák <marek.olsak@amd.com> | 2014-07-14 15:16:36 +0200 |
commit | 1c254c1d76ad211ae6a486fd192e45dafb75f3d8 (patch) | |
tree | 78ff270c3d40b8849efe3aa91da84cae5f024ecd /tests | |
parent | 1cffa6955f9fee019ce946275981373fd6cd0493 (diff) |
tex-miplevel-selection: test all variants of textureOffset with bias
+ some bug fixes
Diffstat (limited to 'tests')
-rw-r--r-- | tests/all.py | 9 | ||||
-rw-r--r-- | tests/texturing/tex-miplevel-selection.c | 65 |
2 files changed, 65 insertions, 9 deletions
diff --git a/tests/all.py b/tests/all.py index be3e97f18..cdb65e19a 100644 --- a/tests/all.py +++ b/tests/all.py @@ -1181,6 +1181,15 @@ add_concurrent_test(spec['glsl-1.30']['execution'], 'tex-miplevel-selection text add_concurrent_test(spec['glsl-1.30']['execution'], 'tex-miplevel-selection textureOffset 1DArrayShadow') add_concurrent_test(spec['glsl-1.30']['execution'], 'tex-miplevel-selection textureOffset 2DArrayShadow') +add_concurrent_test(spec['glsl-1.30']['execution'], 'tex-miplevel-selection textureOffset(bias) 1D') +add_concurrent_test(spec['glsl-1.30']['execution'], 'tex-miplevel-selection textureOffset(bias) 2D') +add_concurrent_test(spec['glsl-1.30']['execution'], 'tex-miplevel-selection textureOffset(bias) 3D') +add_concurrent_test(spec['glsl-1.30']['execution'], 'tex-miplevel-selection textureOffset(bias) 1DShadow') +add_concurrent_test(spec['glsl-1.30']['execution'], 'tex-miplevel-selection textureOffset(bias) 2DShadow') +add_concurrent_test(spec['glsl-1.30']['execution'], 'tex-miplevel-selection textureOffset(bias) 1DArray') +add_concurrent_test(spec['glsl-1.30']['execution'], 'tex-miplevel-selection textureOffset(bias) 2DArray') +add_concurrent_test(spec['glsl-1.30']['execution'], 'tex-miplevel-selection textureOffset(bias) 1DArrayShadow') + # Group spec/glsl-1.40 spec['glsl-1.40'] = {} import_glsl_parser_tests(spec['glsl-1.40'], diff --git a/tests/texturing/tex-miplevel-selection.c b/tests/texturing/tex-miplevel-selection.c index af2e60195..8bb6b07e7 100644 --- a/tests/texturing/tex-miplevel-selection.c +++ b/tests/texturing/tex-miplevel-selection.c @@ -115,6 +115,7 @@ enum shader_type { GL3_TEXTURE_BIAS, GL3_TEXTURE, GL3_TEXTURE_OFFSET, + GL3_TEXTURE_OFFSET_BIAS }; #define NEED_GL3(t) ((t) >= GL3_TEXTURE_LOD) @@ -219,6 +220,23 @@ static const char *fscode_gl3_offset_shadow = " OFFSET)); \n" "} \n"; +static const char *fscode_gl3_offset_bias = + GL3_FS_PREAMBLE + "uniform float bias; \n" + "void main() { \n" + " gl_FragColor = textureOffset(tex, TYPE(gl_TexCoord[0]), OFFSET, bias); \n" + "} \n"; + +static const char *fscode_gl3_offset_bias_shadow = + GL3_FS_SHADOW_PREAMBLE + "uniform float bias; \n" + "void main() { \n" + " gl_FragColor = vec4(textureOffset(tex, TYPE(gl_TexCoord[0]) - 0.05 * MASK, \n" + " OFFSET, bias) * \n" + " textureOffset(tex2, TYPE(gl_TexCoord[0]) + 0.05 * MASK, \n" + " OFFSET, bias)); \n" + "} \n"; + static void set_sampler_parameter(GLenum pname, GLint value) { glSamplerParameteri(samp[0], pname, value); @@ -231,7 +249,7 @@ piglit_init(int argc, char **argv) GLuint tex, fb, prog; GLenum status; int i, level, layer, dim, num_layers; - const char *target_str, *type_str, *compare_value_mask, *offset_type_str; + const char *target_str, *type_str, *compare_value_mask = "", *offset_type_str = ""; const char *version = "130"; GLenum format, attachment, clearbits; char fscode[2048]; @@ -253,6 +271,8 @@ piglit_init(int argc, char **argv) test = GL3_TEXTURE; else if (strcmp(argv[i], "textureOffset") == 0) test = GL3_TEXTURE_OFFSET; + else if (strcmp(argv[i], "textureOffset(bias)") == 0) + test = GL3_TEXTURE_OFFSET_BIAS; else if (strcmp(argv[i], "1D") == 0) target = TEX_1D; else if (strcmp(argv[i], "2D") == 0) @@ -400,9 +420,10 @@ piglit_init(int argc, char **argv) case GL3_TEXTURE_LOD: if (IS_SHADOW(target)) sprintf(fscode, fscode_gl3_lod_shadow, version, target_str, - type_str, compare_value_mask); + type_str, compare_value_mask, offset_type_str); else - sprintf(fscode, fscode_gl3_lod, version, target_str, type_str); + sprintf(fscode, fscode_gl3_lod, version, target_str, type_str, + offset_type_str); prog = piglit_build_simple_program(NULL, fscode); loc_lod = glGetUniformLocation(prog, "lod"); @@ -410,9 +431,10 @@ piglit_init(int argc, char **argv) case GL3_TEXTURE_BIAS: if (IS_SHADOW(target)) sprintf(fscode, fscode_gl3_bias_shadow, version, target_str, - type_str, compare_value_mask); + type_str, compare_value_mask, offset_type_str); else - sprintf(fscode, fscode_gl3_bias, version, target_str, type_str); + sprintf(fscode, fscode_gl3_bias, version, target_str, type_str, + offset_type_str); prog = piglit_build_simple_program(NULL, fscode); loc_bias = glGetUniformLocation(prog, "bias"); @@ -421,13 +443,15 @@ piglit_init(int argc, char **argv) if (target == TEX_CUBE_ARRAY_SHADOW) sprintf(fscode, fscode_gl3_simple_shadow_cubearray, - version, target_str, type_str); + version, target_str, type_str, compare_value_mask, + offset_type_str); else if (IS_SHADOW(target)) sprintf(fscode, fscode_gl3_simple_shadow, - version, target_str, type_str, compare_value_mask); + version, target_str, type_str, compare_value_mask, + offset_type_str); else sprintf(fscode, fscode_gl3_simple, version, target_str, - type_str); + type_str, offset_type_str); prog = piglit_build_simple_program(NULL, fscode); if (target == TEX_CUBE_ARRAY_SHADOW) @@ -447,6 +471,21 @@ piglit_init(int argc, char **argv) has_offset = GL_TRUE; no_lod_clamp = GL_TRUE; break; + case GL3_TEXTURE_OFFSET_BIAS: + if (IS_SHADOW(target)) + sprintf(fscode, fscode_gl3_offset_bias_shadow, + version, target_str, type_str, compare_value_mask, + offset_type_str); + else + sprintf(fscode, fscode_gl3_offset_bias, version, target_str, + type_str, offset_type_str); + + prog = piglit_build_simple_program(NULL, fscode); + loc_bias = glGetUniformLocation(prog, "bias"); + + has_offset = GL_TRUE; + no_lod_clamp = GL_TRUE; + break; default: assert(0); } @@ -651,6 +690,7 @@ draw_quad(int x, int y, int w, int h, int expected_level, int fetch_level, /* set an explicit LOD */ glUniform1f(loc_lod, fetch_level - baselevel); break; + case GL3_TEXTURE_BIAS: /* set a bias */ glUniform1f(loc_bias, bias); @@ -663,6 +703,11 @@ draw_quad(int x, int y, int w, int h, int expected_level, int fetch_level, s1 *= 1 << fetch_level; t1 *= 1 << fetch_level; break; + + case GL3_TEXTURE_OFFSET_BIAS: + /* set a bias */ + glUniform1f(loc_bias, bias); + /* fall through */ case GL3_TEXTURE_OFFSET: { /* Things get quite complicated with offsets. * @@ -916,7 +961,9 @@ piglit_display(void) set_sampler_parameter(GL_TEXTURE_MIN_LOD, minlod); set_sampler_parameter(GL_TEXTURE_MAX_LOD, maxlod); } - if (!no_bias && test != GL3_TEXTURE_BIAS) + if (!no_bias && + test != GL3_TEXTURE_BIAS && + test != GL3_TEXTURE_OFFSET_BIAS) set_sampler_parameter(GL_TEXTURE_LOD_BIAS, bias); set_sampler_parameter(GL_TEXTURE_MIN_FILTER, mipfilter ? GL_NEAREST_MIPMAP_NEAREST |