mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-23 21:20:21 +01:00
i965: Support GL_CLAMP natively on Broadwell.
The new hardware actually supports this OpenGL 1.x feature natively, so we can finally drop our shader workarounds. Not many applications use GL_CLAMP, and most use it unintentionally, but it's trivial to do right, so we should. Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Matt Turner <mattst88@gmail.com> Cc: "10.2" <mesa-stable@lists.freedesktop.org>
This commit is contained in:
parent
7f3d64a77b
commit
221169693b
3 changed files with 13 additions and 4 deletions
|
|
@ -606,6 +606,7 @@
|
|||
#define BRW_TEXCOORDMODE_CUBE 3
|
||||
#define BRW_TEXCOORDMODE_CLAMP_BORDER 4
|
||||
#define BRW_TEXCOORDMODE_MIRROR_ONCE 5
|
||||
#define GEN8_TEXCOORDMODE_HALF_BORDER 6
|
||||
|
||||
#define BRW_THREAD_PRIORITY_NORMAL 0
|
||||
#define BRW_THREAD_PRIORITY_HIGH 1
|
||||
|
|
|
|||
|
|
@ -347,7 +347,8 @@ brw_populate_sampler_prog_key_data(struct gl_context *ctx,
|
|||
if (alpha_depth || (brw->gen < 8 && !brw->is_haswell))
|
||||
key->swizzles[s] = brw_get_texture_swizzle(ctx, t);
|
||||
|
||||
if (sampler->MinFilter != GL_NEAREST &&
|
||||
if (brw->gen < 8 &&
|
||||
sampler->MinFilter != GL_NEAREST &&
|
||||
sampler->MagFilter != GL_NEAREST) {
|
||||
if (sampler->WrapS == GL_CLAMP)
|
||||
key->gl_clamp_mask[0] |= 1 << s;
|
||||
|
|
|
|||
|
|
@ -55,9 +55,16 @@ translate_wrap_mode(struct brw_context *brw, GLenum wrap, bool using_nearest)
|
|||
/* GL_CLAMP is the weird mode where coordinates are clamped to
|
||||
* [0.0, 1.0], so linear filtering of coordinates outside of
|
||||
* [0.0, 1.0] give you half edge texel value and half border
|
||||
* color. The fragment shader will clamp the coordinates, and
|
||||
* we set clamp_border here, which gets the result desired. We
|
||||
* just use clamp(_to_edge) for nearest, because for nearest
|
||||
* color.
|
||||
*
|
||||
* Gen8+ supports this natively.
|
||||
*/
|
||||
if (brw->gen >= 8)
|
||||
return GEN8_TEXCOORDMODE_HALF_BORDER;
|
||||
|
||||
/* On Gen4-7.5, we clamp the coordinates in the fragment shader
|
||||
* and set clamp_border here, which gets the result desired.
|
||||
* We just use clamp(_to_edge) for nearest, because for nearest
|
||||
* clamping to 1.0 gives border color instead of the desired
|
||||
* edge texels.
|
||||
*/
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue