From: Marek Olšák <[email protected]>

llvmpipe passes, which is probably the only driver which implements it
correctly.
---
 tests/all.py                             |  8 ++++----
 tests/texturing/tex-miplevel-selection.c | 20 +++++++++++++++++++-
 2 files changed, 23 insertions(+), 5 deletions(-)

diff --git a/tests/all.py b/tests/all.py
index 0f69a66..10e24d9 100644
--- a/tests/all.py
+++ b/tests/all.py
@@ -1294,17 +1294,17 @@ add_concurrent_test(spec['glsl-1.30']['execution'], 
'tex-miplevel-selection text
 add_concurrent_test(spec['glsl-1.30']['execution'], 'tex-miplevel-selection 
textureGrad 1D')
 add_concurrent_test(spec['glsl-1.30']['execution'], 'tex-miplevel-selection 
textureGrad 2D')
 add_concurrent_test(spec['glsl-1.30']['execution'], 'tex-miplevel-selection 
textureGrad 3D')
-#add_concurrent_test(spec['glsl-1.30']['execution'], 'tex-miplevel-selection 
textureGrad Cube')
+add_concurrent_test(spec['glsl-1.30']['execution'], 'tex-miplevel-selection 
textureGrad Cube')
 add_concurrent_test(spec['glsl-1.30']['execution'], 'tex-miplevel-selection 
textureGrad 2DRect')
 add_concurrent_test(spec['glsl-1.30']['execution'], 'tex-miplevel-selection 
textureGrad 2DRectShadow')
 add_concurrent_test(spec['glsl-1.30']['execution'], 'tex-miplevel-selection 
textureGrad 1DShadow')
 add_concurrent_test(spec['glsl-1.30']['execution'], 'tex-miplevel-selection 
textureGrad 2DShadow')
-#add_concurrent_test(spec['glsl-1.30']['execution'], 'tex-miplevel-selection 
textureGrad CubeShadow')
+add_concurrent_test(spec['glsl-1.30']['execution'], 'tex-miplevel-selection 
textureGrad CubeShadow')
 add_concurrent_test(spec['glsl-1.30']['execution'], 'tex-miplevel-selection 
textureGrad 1DArray')
 add_concurrent_test(spec['glsl-1.30']['execution'], 'tex-miplevel-selection 
textureGrad 2DArray')
 add_concurrent_test(spec['glsl-1.30']['execution'], 'tex-miplevel-selection 
textureGrad 1DArrayShadow')
 add_concurrent_test(spec['glsl-1.30']['execution'], 'tex-miplevel-selection 
textureGrad 2DArrayShadow')
-#add_concurrent_test(spec['glsl-1.30']['execution'], 'tex-miplevel-selection 
textureGrad CubeArray')
+add_concurrent_test(spec['glsl-1.30']['execution'], 'tex-miplevel-selection 
textureGrad CubeArray')
 
 add_concurrent_test(spec['glsl-1.30']['execution'], 'tex-miplevel-selection 
textureGradOffset 1D')
 add_concurrent_test(spec['glsl-1.30']['execution'], 'tex-miplevel-selection 
textureGradOffset 2D')
@@ -2056,7 +2056,7 @@ add_concurrent_test(arb_shader_texture_lod['execution'], 
'tex-miplevel-selection
 add_concurrent_test(arb_shader_texture_lod['execution'], 
'tex-miplevel-selection *GradARB 1D')
 add_concurrent_test(arb_shader_texture_lod['execution'], 
'tex-miplevel-selection *GradARB 2D')
 add_concurrent_test(arb_shader_texture_lod['execution'], 
'tex-miplevel-selection *GradARB 3D')
-#add_concurrent_test(arb_shader_texture_lod['execution'], 
'tex-miplevel-selection *GradARB Cube')
+add_concurrent_test(arb_shader_texture_lod['execution'], 
'tex-miplevel-selection *GradARB Cube')
 add_concurrent_test(arb_shader_texture_lod['execution'], 
'tex-miplevel-selection *GradARB 1DShadow')
 add_concurrent_test(arb_shader_texture_lod['execution'], 
'tex-miplevel-selection *GradARB 2DShadow')
 add_concurrent_test(arb_shader_texture_lod['execution'], 
'tex-miplevel-selection *GradARB 2DRect')
diff --git a/tests/texturing/tex-miplevel-selection.c 
b/tests/texturing/tex-miplevel-selection.c
index ef9a066..761f9ae 100644
--- a/tests/texturing/tex-miplevel-selection.c
+++ b/tests/texturing/tex-miplevel-selection.c
@@ -1043,6 +1043,19 @@ draw_quad(int x, int y, int w, int h, int 
expected_level, int fetch_level,
        /* explicit derivative */
        float deriv = 1.0 / (TEX_SIZE >> fetch_level);
 
+       /* Explicit derivatives for cubemaps.
+        *
+        * Each of these vectors should be a difference between (x,y,z)
+        * coordinates from one pixel and its neighbor. The Y coordinate is
+        * always -1 (negative Y face).
+        *
+        * The range for X and Z is [-1,1] for cubemaps as opposed
+        * to [0,1] for 2D textures, therefore multiply the 2D derivative
+        * by 2. The result is 2 vectors on the -Y surface of the cube.
+        */
+       float cube_deriv_x[3] = {deriv*2, 0,       0};
+       float cube_deriv_y[3] = {      0, 0, deriv*2};
+
        switch (test) {
        case ARB_TEXTURE_LOD:
        case ARB_TEXTURE_PROJ_LOD:
@@ -1079,7 +1092,12 @@ draw_quad(int x, int y, int w, int h, int 
expected_level, int fetch_level,
        case ARB_TEXTURE_PROJ_GRAD:
        case GL3_TEXTURE_GRAD:
        case GL3_TEXTURE_PROJ_GRAD:
-               if (gltarget == GL_TEXTURE_3D) {
+               if (gltarget == GL_TEXTURE_CUBE_MAP ||
+                   gltarget == GL_TEXTURE_CUBE_MAP_ARRAY) {
+                       glUniform3fv(loc_dx, 1, cube_deriv_x);
+                       glUniform3fv(loc_dy, 1, cube_deriv_y);
+               }
+               else if (gltarget == GL_TEXTURE_3D) {
                        glUniform3f(loc_dx, 0, 0, deriv);
                        glUniform3f(loc_dy, 0, 0, deriv);
                }
-- 
1.9.1

_______________________________________________
Piglit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to