aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Turner <mattst88@gmail.com>2013-03-18 11:44:47 -0700
committerMatt Turner <mattst88@gmail.com>2013-03-29 10:14:03 -0700
commit4b0e1a0226a07b259973ea25f8d4220f9a2508ad (patch)
tree649d1b55d91ff6e20cc30460044729ebf7a14447
parentf184de94ddaf514ce6fa0ca2a94913f98d78d2de (diff)
arb_texture_query_lod: Test textureQueryLOD with lod-biasing.
v2: Use textureQueryLOD instead of textureQueryLOD.
-rw-r--r--tests/spec/arb_texture_query_lod/execution/fs-textureQueryLOD-nearest-biased.shader_test182
1 files changed, 182 insertions, 0 deletions
diff --git a/tests/spec/arb_texture_query_lod/execution/fs-textureQueryLOD-nearest-biased.shader_test b/tests/spec/arb_texture_query_lod/execution/fs-textureQueryLOD-nearest-biased.shader_test
new file mode 100644
index 00000000..1e0c5575
--- /dev/null
+++ b/tests/spec/arb_texture_query_lod/execution/fs-textureQueryLOD-nearest-biased.shader_test
@@ -0,0 +1,182 @@
+# Create an 8x8 texture with four miplevels, colored red, green, blue, and
+# white, respectively. Set the Lod-bias to 1. Draw the following:
+#
+# .0 .2 .4 .6 .8
+#
+# miplevel 3 + + +
+#
+# miplevel 3 +-+ +-+ +-+
+# +-+ +-+ +-+ + +
+#
+# miplevel 2 +---+ +---+ +---+
+# |2.0| |2.2| |2.4| +-+ +-+
+# +---+ +---+ +---+ +-+ +-+
+#
+# +------+ +------+ +------+
+# miplevel 1 | 1.0 | | 1.2 | | 1.4 | +---+ +---+
+# | | | | | | |1.6| |1.8|
+# +------+ +------+ +------+ +---+ +---+
+#
+# Instead of seeing red, green, blue, and white squares, we should see only
+# green, blue, white, and again white squares.
+#
+# The ARB_texture_query_lod spec says:
+#
+# "The x component of the result vector contains information on the mipmap
+# array(s) that would be accessed by a normal texture lookup using the
+# same coordinates. If a single level of detail would be accessed, the
+# level-of-detail number relative to the base level is returned."
+#
+# So check that the x component is equal to the calculated LOD + the bias
+# clamped to the maximum mipmap level.
+#
+# The ARB_texture_query_lod spec says:
+#
+# "The computed level of detail lambda_prime (equation 3.19), relative to
+# the base level, is returned in the y component of the result vector.
+#
+# The level of detail is obtained after any LOD bias, but prior to
+# clamping to [TEXTURE_MIN_LOD, TEXTURE_MAX_LOD]."
+#
+# Thus the y component ranges from 1 to 4 (since it is obtained after LOD bias
+# but before clamping) while the x component ranges from 1 to 3. So check that
+# the x component is equal to the clamped y component.
+
+[require]
+GLSL >= 1.30
+GL_ARB_texture_query_lod
+
+[fragment shader]
+#extension GL_ARB_texture_query_lod : enable
+#define MAX_MIPMAP_LEVEL 3
+uniform sampler2D tex;
+uniform float lod;
+void main()
+{
+ /* The ARB_texture_query_lod spec says that if TEXTURE_MIN_FILTER is set
+ * to *_MIPMAP_NEAREST that the computed LOD is
+ *
+ * ceil(computedLod + 0.5) - 1.0
+ *
+ * which is "round to nearest integer, and round down for 0.5."
+ */
+ float nearest_lod = ceil(lod + 0.5f) - 1.0f;
+
+ vec4 frag1 = texture(tex, gl_TexCoord[0].st);
+ vec4 frag2 = textureLod(tex, gl_TexCoord[0].st, nearest_lod);
+ if (frag1 != frag2) {
+ discard;
+ }
+
+ vec2 queried_lod = textureQueryLOD(tex, gl_TexCoord[0].st);
+ if (queried_lod.x != min(queried_lod.y, MAX_MIPMAP_LEVEL)) {
+ discard;
+ }
+ if (queried_lod.x != min(nearest_lod + 1, MAX_MIPMAP_LEVEL)) {
+ discard;
+ }
+
+ gl_FragColor = frag1;
+}
+
+[vertex shader]
+void main()
+{
+ gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
+ gl_TexCoord[0] = gl_MultiTexCoord0;
+}
+
+[test]
+ortho
+clear color 0 0 0 0
+clear
+
+uniform int tex 0
+texture miptree 0
+
+# Draw the miptree: basic integer LODs.
+
+texparameter 2D min nearest_mipmap_nearest
+texparameter 2D mag nearest
+texparameter 2D lod_bias 1.0
+
+uniform float lod 0
+draw rect tex 10 10 8 8 0 0 1 1
+
+uniform float lod 1
+draw rect tex 10 28 4 4 0 0 1 1
+
+uniform float lod 2
+draw rect tex 10 42 2 2 0 0 1 1
+
+uniform float lod 3
+draw rect tex 10 54 1 1 0 0 1 1
+
+# Fractional LODs: nearest filtering between miplevels
+
+uniform float lod 0.2
+draw rect tex 28 10 8 8 0 0 1 1
+
+uniform float lod 0.4
+draw rect tex 46 10 8 8 0 0 1 1
+
+uniform float lod 0.6
+draw rect tex 64 10 4 4 0 0 1 1
+
+uniform float lod 0.8
+draw rect tex 82 10 4 4 0 0 1 1
+
+uniform float lod 1.2
+draw rect tex 28 28 4 4 0 0 1 1
+
+uniform float lod 1.4
+draw rect tex 46 28 4 4 0 0 1 1
+
+uniform float lod 1.6
+draw rect tex 64 28 2 2 0 0 1 1
+
+uniform float lod 1.8
+draw rect tex 82 28 2 2 0 0 1 1
+
+uniform float lod 2.2
+draw rect tex 28 42 2 2 0 0 1 1
+
+uniform float lod 2.4
+draw rect tex 46 42 2 2 0 0 1 1
+
+uniform float lod 2.6
+draw rect tex 64 42 1 1 0 0 1 1
+
+uniform float lod 2.8
+draw rect tex 82 42 1 1 0 0 1 1
+
+uniform float lod 3.2
+draw rect tex 28 54 1 1 0 0 1 1
+
+uniform float lod 3.4
+draw rect tex 46 54 1 1 0 0 1 1
+
+# Probes: integer LODs
+probe rgb 10 10 0.0 1.0 0.0
+probe rgb 10 28 0.0 0.0 1.0
+probe rgb 10 42 1.0 1.0 1.0
+probe rgb 10 54 1.0 1.0 1.0
+
+# Probes: nearest filtering
+probe rgb 28 10 0.0 1.0 0.0
+probe rgb 46 10 0.0 1.0 0.0
+
+probe rgb 64 10 0.0 0.0 1.0
+probe rgb 82 10 0.0 0.0 1.0
+probe rgb 28 28 0.0 0.0 1.0
+probe rgb 46 28 0.0 0.0 1.0
+
+probe rgb 64 28 1.0 1.0 1.0
+probe rgb 82 28 1.0 1.0 1.0
+probe rgb 28 42 1.0 1.0 1.0
+probe rgb 46 42 1.0 1.0 1.0
+
+probe rgb 64 42 1.0 1.0 1.0
+probe rgb 82 42 1.0 1.0 1.0
+probe rgb 28 54 1.0 1.0 1.0
+probe rgb 46 54 1.0 1.0 1.0