st/mesa: disable per-context seamless cubemap when using texture handles
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Fri, 19 May 2017 10:47:16 +0000 (12:47 +0200)
committerSamuel Pitoiset <samuel.pitoiset@gmail.com>
Wed, 14 Jun 2017 08:04:36 +0000 (10:04 +0200)
The ARB_bindless_texture spec say:

   "If ARB_seamless_cubemap (or OpenGL 4.0, which includes it) is
    supported, the per-context seamless cubemap enable is ignored
    and treated as disabled when using texture handles."

   "If AMD_seamless_cubemap_per_texture is supported, the seamless
    cube map texture parameter of the underlying texture does apply
    when texture handles are used."

The per-context seamless cubemap flag should only be enabled for
bound textures/samplers.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
src/mesa/state_tracker/st_atom_sampler.c

index c6d992f..8c121d5 100644 (file)
@@ -135,7 +135,6 @@ st_convert_sampler(const struct st_context *st,
                    const struct gl_sampler_object *msamp,
                    struct pipe_sampler_state *sampler)
 {
-   struct gl_context *ctx = st->ctx;
    GLenum texBaseFormat;
 
    texBaseFormat = _mesa_texture_base_format(texobj);
@@ -226,8 +225,11 @@ st_convert_sampler(const struct st_context *st,
       sampler->compare_func = st_compare_func_to_pipe(msamp->CompareFunc);
    }
 
-   sampler->seamless_cube_map =
-      ctx->Texture.CubeMapSeamless || msamp->CubeMapSeamless;
+   /* Only set the seamless cube map texture parameter because the per-context
+    * enable should be ignored and treated as disabled when using texture
+    * handles, as specified by ARB_bindless_texture.
+    */
+   sampler->seamless_cube_map = msamp->CubeMapSeamless;
 }
 
 /**
@@ -250,6 +252,7 @@ st_convert_sampler_from_unit(const struct st_context *st,
    st_convert_sampler(st, texobj, msamp, sampler);
 
    sampler->lod_bias += ctx->Texture.Unit[texUnit].LodBias;
+   sampler->seamless_cube_map |= ctx->Texture.CubeMapSeamless;
 }