0.8% less overhead.
Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Reviewed-by: Emma Anholt <emma@anholt.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11339>
GLenum16 CompareMode; /**< GL_ARB_shadow */
GLenum16 CompareFunc; /**< GL_ARB_shadow */
GLboolean CubeMapSeamless; /**< GL_AMD_seamless_cubemap_per_texture */
+ GLboolean IsBorderColorNonZero; /**< Does the border color have any effect? */
GLenum16 ReductionMode; /**< GL_EXT_texture_filter_minmax */
struct pipe_sampler_state state; /**< Gallium representation */
sampObj->Attrib.state.border_color.f[1] = 0;
sampObj->Attrib.state.border_color.f[2] = 0;
sampObj->Attrib.state.border_color.f[3] = 0;
+ _mesa_update_is_border_color_nonzero(sampObj);
sampObj->Attrib.MinLod = -1000.0F;
sampObj->Attrib.MaxLod = 1000.0F;
sampObj->Attrib.state.min_lod = 0; /* Gallium doesn't allow negative numbers */
{
flush(ctx);
memcpy(samp->Attrib.state.border_color.f, params, 4 * sizeof(float));
+ _mesa_update_is_border_color_nonzero(samp);
return GL_TRUE;
}
{
flush(ctx);
memcpy(samp->Attrib.state.border_color.i, params, 4 * sizeof(float));
+ _mesa_update_is_border_color_nonzero(samp);
return GL_TRUE;
}
{
flush(ctx);
memcpy(samp->Attrib.state.border_color.ui, params, 4 * sizeof(float));
+ _mesa_update_is_border_color_nonzero(samp);
return GL_TRUE;
}
return (enum pipe_compare_func)(func - GL_NEVER);
}
+static inline void
+_mesa_update_is_border_color_nonzero(struct gl_sampler_object *samp)
+{
+ samp->Attrib.IsBorderColorNonZero = samp->Attrib.state.border_color.ui[0] ||
+ samp->Attrib.state.border_color.ui[1] ||
+ samp->Attrib.state.border_color.ui[2] ||
+ samp->Attrib.state.border_color.ui[3];
+}
+
#ifdef __cplusplus
}
#endif
texObj->Sampler.Attrib.state.border_color.f[BCOMP] = CLAMP(params[2], 0.0F, 1.0F);
texObj->Sampler.Attrib.state.border_color.f[ACOMP] = CLAMP(params[3], 0.0F, 1.0F);
}
+ _mesa_update_is_border_color_nonzero(&texObj->Sampler);
return GL_TRUE;
case GL_TEXTURE_TILING_EXT:
FLUSH_VERTICES(ctx, _NEW_TEXTURE_OBJECT, GL_TEXTURE_BIT);
/* set the integer-valued border color */
COPY_4V(texObj->Sampler.Attrib.state.border_color.i, params);
+ _mesa_update_is_border_color_nonzero(&texObj->Sampler);
break;
default:
_mesa_texture_parameteriv(ctx, texObj, pname, params, dsa);
FLUSH_VERTICES(ctx, _NEW_TEXTURE_OBJECT, GL_TEXTURE_BIT);
/* set the unsigned integer-valued border color */
COPY_4V(texObj->Sampler.Attrib.state.border_color.ui, params);
+ _mesa_update_is_border_color_nonzero(&texObj->Sampler);
break;
default:
_mesa_texture_parameteriv(ctx, texObj, pname, (const GLint *) params,
PIPE_TEX_WRAP_MIRROR_CLAMP_TO_EDGE) & 0x1) == 0);
/* For non-black borders... */
- if (/* This is true if wrap modes are using the border color: */
- (sampler->wrap_s | sampler->wrap_t | sampler->wrap_r) & 0x1 &&
- (msamp->Attrib.state.border_color.ui[0] ||
- msamp->Attrib.state.border_color.ui[1] ||
- msamp->Attrib.state.border_color.ui[2] ||
- msamp->Attrib.state.border_color.ui[3])) {
+ if (msamp->Attrib.IsBorderColorNonZero &&
+ /* This is true if wrap modes are using the border color: */
+ (sampler->wrap_s | sampler->wrap_t | sampler->wrap_r) & 0x1) {
const GLboolean is_integer = texobj->_IsIntegerFormat;
GLenum texBaseFormat = _mesa_base_tex_image(texobj)->_BaseFormat;