summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorMarek Olšák <marek.olsak@amd.com>2014-06-26 00:53:17 +0200
committerMarek Olšák <marek.olsak@amd.com>2014-07-14 15:16:36 +0200
commit1c254c1d76ad211ae6a486fd192e45dafb75f3d8 (patch)
tree78ff270c3d40b8849efe3aa91da84cae5f024ecd /tests
parent1cffa6955f9fee019ce946275981373fd6cd0493 (diff)
tex-miplevel-selection: test all variants of textureOffset with bias
+ some bug fixes
Diffstat (limited to 'tests')
-rw-r--r--tests/all.py9
-rw-r--r--tests/texturing/tex-miplevel-selection.c65
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