diff options
author | Matt Turner <mattst88@gmail.com> | 2013-03-18 11:44:47 -0700 |
---|---|---|
committer | Matt Turner <mattst88@gmail.com> | 2013-03-29 10:14:03 -0700 |
commit | 4b0e1a0226a07b259973ea25f8d4220f9a2508ad (patch) | |
tree | 649d1b55d91ff6e20cc30460044729ebf7a14447 | |
parent | f184de94ddaf514ce6fa0ca2a94913f98d78d2de (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_test | 182 |
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 |