gallivm: adjust wrap mode to CLAMP_TO_EDGE always for cube maps.
authorRoland Scheidegger <sroland@vmware.com>
Thu, 19 Sep 2013 15:13:18 +0000 (17:13 +0200)
committerRoland Scheidegger <sroland@vmware.com>
Thu, 19 Sep 2013 15:14:36 +0000 (17:14 +0200)
Technically without seamless filtering enabled GL allows any wrap mode, which
made sense when supporting true borders (can get seamless effect with border
and CLAMP_TO_BORDER), but gallium doesn't support borders and d3d9 requires
wrap modes to be ignored and it's a pain to fix up the sampler state (as it
makes it texture dependent). It is difficult to imagine a situation where an
app really wants another behavior so just cheat here. (It looks like some
graphics hw (intel) actually requires this too hence it should be safe.)

Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c

index 355e97d76a68f48e7f9b7a9bec00acf520cb5504..33378bcdcd0428d31608ceffef52221cdab1fb5d 100644 (file)
@@ -2123,14 +2123,18 @@ lp_build_sample_soa(struct gallivm_state *gallivm,
       debug_printf("  .min_mip_filter = %u\n", derived_sampler_state.min_mip_filter);
    }
 
-   if ((static_texture_state->target == PIPE_TEXTURE_CUBE ||
-        static_texture_state->target == PIPE_TEXTURE_CUBE_ARRAY) &&
-       static_sampler_state->seamless_cube_map)
+   if (static_texture_state->target == PIPE_TEXTURE_CUBE ||
+       static_texture_state->target == PIPE_TEXTURE_CUBE_ARRAY)
    {
       /*
        * Seamless filtering ignores wrap modes.
        * Setting to CLAMP_TO_EDGE is correct for nearest filtering, for
        * bilinear it's not correct but way better than using for instance repeat.
+       * Note we even set this for non-seamless. Technically GL allows any wrap
+       * mode, which made sense when supporting true borders (can get seamless
+       * effect with border and CLAMP_TO_BORDER), but gallium doesn't support
+       * borders and d3d9 requires wrap modes to be ignored and it's a pain to fix
+       * up the sampler state (as it makes it texture dependent).
        */
       derived_sampler_state.wrap_s = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
       derived_sampler_state.wrap_t = PIPE_TEX_WRAP_CLAMP_TO_EDGE;