[Piglit] [PATCH] tex-miplevel-selection: test textureGrad with cubemaps

Ilia Mirkin imirkin at alum.mit.edu
Thu Aug 14 16:36:45 PDT 2014


On Thu, Aug 14, 2014 at 7:24 PM, Marek Olšák <maraeo at gmail.com> wrote:
> From: Marek Olšák <marek.olsak at amd.com>
>
> llvmpipe passes, which is probably the only driver which implements it
> correctly.

FTR, also passes on my NVC1 with nouveau. I suspect nv50 should be
fine too. (Unfortunately I don't understand enough about how this is
supposed to work to review your change.)

> ---
>  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
> Piglit at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/piglit


More information about the Piglit mailing list