mesa: reorganize gl_texture and sampler structures for glPush/PopAttrib

Put the fields saved by glPush/PopAttrib into the sub-structure declared
as Attrib. This will make glPush/PopAttrib much faster because it will
only save and restore that structure.

Acked-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6946>
This commit is contained in:
Marek Olšák 2020-10-05 02:45:03 -04:00 committed by Marge Bot
parent 7fa9d9d06c
commit 9a8b54285d
57 changed files with 875 additions and 853 deletions

View File

@ -1902,7 +1902,7 @@ dri2_interop_export_object(__DRIcontext *_ctx,
* section 3.8.10 (Texture Completeness) of the OpenGL 2.1 * section 3.8.10 (Texture Completeness) of the OpenGL 2.1
* specification and section 3.7.10 of the OpenGL ES 2.0." * specification and section 3.7.10 of the OpenGL ES 2.0."
*/ */
if (in->miplevel < obj->BaseLevel || in->miplevel > obj->_MaxLevel) { if (in->miplevel < obj->Attrib.BaseLevel || in->miplevel > obj->_MaxLevel) {
simple_mtx_unlock(&ctx->Shared->Mutex); simple_mtx_unlock(&ctx->Shared->Mutex);
return MESA_GLINTEROP_INVALID_MIP_LEVEL; return MESA_GLINTEROP_INVALID_MIP_LEVEL;
} }

View File

@ -352,7 +352,7 @@ dri2_create_from_texture(__DRIcontext *context, int target, unsigned texture,
return NULL; return NULL;
} }
if (level < obj->BaseLevel || level > obj->_MaxLevel) { if (level < obj->Attrib.BaseLevel || level > obj->_MaxLevel) {
*error = __DRI_IMAGE_ERROR_BAD_MATCH; *error = __DRI_IMAGE_ERROR_BAD_MATCH;
return NULL; return NULL;
} }

View File

@ -3153,8 +3153,8 @@ decompress_texture_image(struct gl_context *ctx,
{ {
/* save texture object state */ /* save texture object state */
const GLint baseLevelSave = texObj->BaseLevel; const GLint baseLevelSave = texObj->Attrib.BaseLevel;
const GLint maxLevelSave = texObj->MaxLevel; const GLint maxLevelSave = texObj->Attrib.MaxLevel;
/* restrict sampling to the texture level of interest */ /* restrict sampling to the texture level of interest */
if (target != GL_TEXTURE_RECTANGLE_ARB) { if (target != GL_TEXTURE_RECTANGLE_ARB) {
@ -3391,7 +3391,7 @@ _mesa_meta_DrawTex(struct gl_context *ctx, GLfloat x, GLfloat y, GLfloat z,
} }
texObj = ctx->Texture.Unit[i]._Current; texObj = ctx->Texture.Unit[i]._Current;
texImage = texObj->Image[0][texObj->BaseLevel]; texImage = texObj->Image[0][texObj->Attrib.BaseLevel];
tw = texImage->Width2; tw = texImage->Width2;
th = texImage->Height2; th = texImage->Height2;

View File

@ -176,9 +176,9 @@ blitframebuffer_texture(struct gl_context *ctx,
target = texObj->Target; target = texObj->Target;
fb_tex_blit.tex_obj = texObj; fb_tex_blit.tex_obj = texObj;
fb_tex_blit.baseLevelSave = texObj->BaseLevel; fb_tex_blit.baseLevelSave = texObj->Attrib.BaseLevel;
fb_tex_blit.maxLevelSave = texObj->MaxLevel; fb_tex_blit.maxLevelSave = texObj->Attrib.MaxLevel;
fb_tex_blit.stencilSamplingSave = texObj->StencilSampling; fb_tex_blit.stencilSamplingSave = texObj->Attrib.StencilSampling;
if (glsl_version) { if (glsl_version) {
setup_glsl_blit_framebuffer(ctx, blit, drawFb, rb, target, do_depth); setup_glsl_blit_framebuffer(ctx, blit, drawFb, rb, target, do_depth);
@ -329,16 +329,16 @@ _mesa_meta_fb_tex_blit_end(struct gl_context *ctx, GLenum target,
/* If the target restricts values for base level or max level, we assume /* If the target restricts values for base level or max level, we assume
* that the original values were valid. * that the original values were valid.
*/ */
if (blit->baseLevelSave != texObj->BaseLevel) if (blit->baseLevelSave != texObj->Attrib.BaseLevel)
_mesa_texture_parameteriv(ctx, texObj, GL_TEXTURE_BASE_LEVEL, _mesa_texture_parameteriv(ctx, texObj, GL_TEXTURE_BASE_LEVEL,
&blit->baseLevelSave, false); &blit->baseLevelSave, false);
if (blit->maxLevelSave != texObj->MaxLevel) if (blit->maxLevelSave != texObj->Attrib.MaxLevel)
_mesa_texture_parameteriv(ctx, texObj, GL_TEXTURE_MAX_LEVEL, _mesa_texture_parameteriv(ctx, texObj, GL_TEXTURE_MAX_LEVEL,
&blit->maxLevelSave, false); &blit->maxLevelSave, false);
/* If ARB_stencil_texturing is not supported, the mode won't have changed. */ /* If ARB_stencil_texturing is not supported, the mode won't have changed. */
if (texObj->StencilSampling != blit->stencilSamplingSave) { if (texObj->Attrib.StencilSampling != blit->stencilSamplingSave) {
/* GLint so the compiler won't complain about type signedness mismatch /* GLint so the compiler won't complain about type signedness mismatch
* in the call to _mesa_texture_parameteriv below. * in the call to _mesa_texture_parameteriv below.
*/ */
@ -393,7 +393,7 @@ setup_sampler(struct gl_context *ctx, struct gl_texture_object *texObj,
_mesa_bind_sampler(ctx, ctx->Texture.CurrentUnit, samp_obj); _mesa_bind_sampler(ctx, ctx->Texture.CurrentUnit, samp_obj);
_mesa_set_sampler_filters(ctx, samp_obj, filter, filter); _mesa_set_sampler_filters(ctx, samp_obj, filter, filter);
_mesa_set_sampler_wrap(ctx, samp_obj, GL_CLAMP_TO_EDGE, GL_CLAMP_TO_EDGE, _mesa_set_sampler_wrap(ctx, samp_obj, GL_CLAMP_TO_EDGE, GL_CLAMP_TO_EDGE,
samp_obj->WrapR); samp_obj->Attrib.WrapR);
/* Prepare src texture state */ /* Prepare src texture state */
_mesa_bind_texture(ctx, target, texObj); _mesa_bind_texture(ctx, target, texObj);

View File

@ -71,7 +71,7 @@ fallback_required(struct gl_context *ctx, GLenum target,
return true; return true;
} }
srcLevel = texObj->BaseLevel; srcLevel = texObj->Attrib.BaseLevel;
baseImage = _mesa_select_tex_image(texObj, target, srcLevel); baseImage = _mesa_select_tex_image(texObj, target, srcLevel);
if (!baseImage) { if (!baseImage) {
_mesa_perf_debug(ctx, MESA_DEBUG_SEVERITY_HIGH, _mesa_perf_debug(ctx, MESA_DEBUG_SEVERITY_HIGH,
@ -149,10 +149,10 @@ _mesa_meta_GenerateMipmap(struct gl_context *ctx, GLenum target,
{ {
struct gen_mipmap_state *mipmap = &ctx->Meta->Mipmap; struct gen_mipmap_state *mipmap = &ctx->Meta->Mipmap;
struct vertex verts[4]; struct vertex verts[4];
const GLuint baseLevel = texObj->BaseLevel; const GLuint baseLevel = texObj->Attrib.BaseLevel;
const GLuint maxLevel = texObj->MaxLevel; const GLuint maxLevel = texObj->Attrib.MaxLevel;
const GLint maxLevelSave = texObj->MaxLevel; const GLint maxLevelSave = texObj->Attrib.MaxLevel;
const GLboolean genMipmapSave = texObj->GenerateMipmap; const GLboolean genMipmapSave = texObj->Attrib.GenerateMipmap;
const GLboolean use_glsl_version = ctx->Extensions.ARB_vertex_shader && const GLboolean use_glsl_version = ctx->Extensions.ARB_vertex_shader &&
ctx->Extensions.ARB_fragment_shader; ctx->Extensions.ARB_fragment_shader;
GLenum faceTarget; GLenum faceTarget;
@ -226,7 +226,7 @@ _mesa_meta_GenerateMipmap(struct gl_context *ctx, GLenum target,
if (ctx->Extensions.EXT_texture_sRGB_decode) { if (ctx->Extensions.EXT_texture_sRGB_decode) {
const struct gl_texture_image *baseImage = const struct gl_texture_image *baseImage =
_mesa_select_tex_image(texObj, target, texObj->BaseLevel); _mesa_select_tex_image(texObj, target, texObj->Attrib.BaseLevel);
const bool srgb = _mesa_is_format_srgb(baseImage->TexFormat); const bool srgb = _mesa_is_format_srgb(baseImage->TexFormat);
_mesa_set_sampler_srgb_decode(ctx, mipmap->samp_obj, _mesa_set_sampler_srgb_decode(ctx, mipmap->samp_obj,
@ -241,9 +241,9 @@ _mesa_meta_GenerateMipmap(struct gl_context *ctx, GLenum target,
_mesa_texture_parameteriv(ctx, texObj, GL_GENERATE_MIPMAP, &always_false, false); _mesa_texture_parameteriv(ctx, texObj, GL_GENERATE_MIPMAP, &always_false, false);
if (texObj->_Swizzle != SWIZZLE_NOOP) { if (texObj->Attrib._Swizzle != SWIZZLE_NOOP) {
static const GLint swizzleNoop[4] = { GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA }; static const GLint swizzleNoop[4] = { GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA };
memcpy(swizzle, texObj->Swizzle, sizeof(swizzle)); memcpy(swizzle, texObj->Attrib.Swizzle, sizeof(swizzle));
swizzleSaved = GL_TRUE; swizzleSaved = GL_TRUE;
_mesa_texture_parameteriv(ctx, texObj, GL_TEXTURE_SWIZZLE_RGBA, _mesa_texture_parameteriv(ctx, texObj, GL_TEXTURE_SWIZZLE_RGBA,
swizzleNoop, false); swizzleNoop, false);

View File

@ -141,9 +141,9 @@ i830_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
/* Get first image here, since intelObj->firstLevel will get set in /* Get first image here, since intelObj->firstLevel will get set in
* the intel_finalize_mipmap_tree() call above. * the intel_finalize_mipmap_tree() call above.
*/ */
firstImage = tObj->Image[0][tObj->BaseLevel]; firstImage = tObj->Image[0][tObj->Attrib.BaseLevel];
intel_miptree_get_image_offset(intelObj->mt, tObj->BaseLevel, 0, intel_miptree_get_image_offset(intelObj->mt, tObj->Attrib.BaseLevel, 0,
&dst_x, &dst_y); &dst_x, &dst_y);
drm_intel_bo_reference(intelObj->mt->region->bo); drm_intel_bo_reference(intelObj->mt->region->bo);
@ -193,7 +193,7 @@ i830_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
float maxlod; float maxlod;
uint32_t minlod_fixed, maxlod_fixed; uint32_t minlod_fixed, maxlod_fixed;
switch (sampler->MinFilter) { switch (sampler->Attrib.MinFilter) {
case GL_NEAREST: case GL_NEAREST:
minFilt = FILTER_NEAREST; minFilt = FILTER_NEAREST;
mipFilt = MIPFILTER_NONE; mipFilt = MIPFILTER_NONE;
@ -222,14 +222,14 @@ i830_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
return false; return false;
} }
if (sampler->MaxAnisotropy > 1.0) { if (sampler->Attrib.MaxAnisotropy > 1.0) {
minFilt = FILTER_ANISOTROPIC; minFilt = FILTER_ANISOTROPIC;
magFilt = FILTER_ANISOTROPIC; magFilt = FILTER_ANISOTROPIC;
/* no trilinear + anisotropic */ /* no trilinear + anisotropic */
mipFilt = MIPFILTER_NEAREST; mipFilt = MIPFILTER_NEAREST;
} }
else { else {
switch (sampler->MagFilter) { switch (sampler->Attrib.MagFilter) {
case GL_NEAREST: case GL_NEAREST:
magFilt = FILTER_NEAREST; magFilt = FILTER_NEAREST;
break; break;
@ -241,7 +241,7 @@ i830_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
} }
} }
lodbias = (int) ((tUnit->LodBias + sampler->LodBias) * 16.0); lodbias = (int) ((tUnit->LodBias + sampler->Attrib.LodBias) * 16.0);
if (lodbias < -64) if (lodbias < -64)
lodbias = -64; lodbias = -64;
if (lodbias > 63) if (lodbias > 63)
@ -261,8 +261,8 @@ i830_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
* addressable (smallest resolution) LOD. Use it to cover both * addressable (smallest resolution) LOD. Use it to cover both
* MAX_LEVEL and MAX_LOD. * MAX_LEVEL and MAX_LOD.
*/ */
minlod_fixed = U_FIXED(CLAMP(sampler->MinLod, 0.0, 11), 4); minlod_fixed = U_FIXED(CLAMP(sampler->Attrib.MinLod, 0.0, 11), 4);
maxlod = MIN2(sampler->MaxLod, tObj->_MaxLevel - tObj->BaseLevel); maxlod = MIN2(sampler->Attrib.MaxLod, tObj->_MaxLevel - tObj->Attrib.BaseLevel);
if (intel->intelScreen->deviceID == PCI_CHIP_I855_GM || if (intel->intelScreen->deviceID == PCI_CHIP_I855_GM ||
intel->intelScreen->deviceID == PCI_CHIP_I865_G) { intel->intelScreen->deviceID == PCI_CHIP_I865_G) {
maxlod_fixed = U_FIXED(CLAMP(maxlod, 0.0, 11.75), 2); maxlod_fixed = U_FIXED(CLAMP(maxlod, 0.0, 11.75), 2);
@ -281,8 +281,8 @@ i830_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
} }
{ {
GLenum ws = sampler->WrapS; GLenum ws = sampler->Attrib.WrapS;
GLenum wt = sampler->WrapT; GLenum wt = sampler->Attrib.WrapT;
/* 3D textures not available on i830 /* 3D textures not available on i830
@ -302,10 +302,10 @@ i830_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
} }
/* convert border color from float to ubyte */ /* convert border color from float to ubyte */
CLAMPED_FLOAT_TO_UBYTE(border[0], sampler->BorderColor.f[0]); CLAMPED_FLOAT_TO_UBYTE(border[0], sampler->Attrib.BorderColor.f[0]);
CLAMPED_FLOAT_TO_UBYTE(border[1], sampler->BorderColor.f[1]); CLAMPED_FLOAT_TO_UBYTE(border[1], sampler->Attrib.BorderColor.f[1]);
CLAMPED_FLOAT_TO_UBYTE(border[2], sampler->BorderColor.f[2]); CLAMPED_FLOAT_TO_UBYTE(border[2], sampler->Attrib.BorderColor.f[2]);
CLAMPED_FLOAT_TO_UBYTE(border[3], sampler->BorderColor.f[3]); CLAMPED_FLOAT_TO_UBYTE(border[3], sampler->Attrib.BorderColor.f[3]);
state[I830_TEXREG_TM0S4] = PACK_COLOR_8888(border[3], state[I830_TEXREG_TM0S4] = PACK_COLOR_8888(border[3],
border[0], border[0],

View File

@ -166,14 +166,14 @@ i915_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
/* Get first image here, since intelObj->firstLevel will get set in /* Get first image here, since intelObj->firstLevel will get set in
* the intel_finalize_mipmap_tree() call above. * the intel_finalize_mipmap_tree() call above.
*/ */
firstImage = tObj->Image[0][tObj->BaseLevel]; firstImage = tObj->Image[0][tObj->Attrib.BaseLevel];
drm_intel_bo_reference(intelObj->mt->region->bo); drm_intel_bo_reference(intelObj->mt->region->bo);
i915->state.tex_buffer[unit] = intelObj->mt->region->bo; i915->state.tex_buffer[unit] = intelObj->mt->region->bo;
i915->state.tex_offset[unit] = intelObj->mt->offset; i915->state.tex_offset[unit] = intelObj->mt->offset;
format = translate_texture_format(firstImage->TexFormat, format = translate_texture_format(firstImage->TexFormat,
tObj->DepthMode); tObj->Attrib.DepthMode);
state[I915_TEXREG_MS3] = state[I915_TEXREG_MS3] =
(((firstImage->Height - 1) << MS3_HEIGHT_SHIFT) | (((firstImage->Height - 1) << MS3_HEIGHT_SHIFT) |
@ -189,7 +189,7 @@ i915_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
* (lowest resolution) LOD. Use it to cover both MAX_LEVEL and * (lowest resolution) LOD. Use it to cover both MAX_LEVEL and
* MAX_LOD. * MAX_LOD.
*/ */
maxlod = MIN2(sampler->MaxLod, tObj->_MaxLevel - tObj->BaseLevel); maxlod = MIN2(sampler->Attrib.MaxLod, tObj->_MaxLevel - tObj->Attrib.BaseLevel);
state[I915_TEXREG_MS4] = state[I915_TEXREG_MS4] =
((((intelObj->mt->region->pitch / 4) - 1) << MS4_PITCH_SHIFT) | ((((intelObj->mt->region->pitch / 4) - 1) << MS4_PITCH_SHIFT) |
MS4_CUBE_FACE_ENA_MASK | MS4_CUBE_FACE_ENA_MASK |
@ -200,7 +200,7 @@ i915_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
{ {
GLuint minFilt, mipFilt, magFilt; GLuint minFilt, mipFilt, magFilt;
switch (sampler->MinFilter) { switch (sampler->Attrib.MinFilter) {
case GL_NEAREST: case GL_NEAREST:
minFilt = FILTER_NEAREST; minFilt = FILTER_NEAREST;
mipFilt = MIPFILTER_NONE; mipFilt = MIPFILTER_NONE;
@ -229,16 +229,16 @@ i915_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
return false; return false;
} }
if (sampler->MaxAnisotropy > 1.0) { if (sampler->Attrib.MaxAnisotropy > 1.0) {
minFilt = FILTER_ANISOTROPIC; minFilt = FILTER_ANISOTROPIC;
magFilt = FILTER_ANISOTROPIC; magFilt = FILTER_ANISOTROPIC;
if (sampler->MaxAnisotropy > 2.0) if (sampler->Attrib.MaxAnisotropy > 2.0)
aniso = SS2_MAX_ANISO_4; aniso = SS2_MAX_ANISO_4;
else else
aniso = SS2_MAX_ANISO_2; aniso = SS2_MAX_ANISO_2;
} }
else { else {
switch (sampler->MagFilter) { switch (sampler->Attrib.MagFilter) {
case GL_NEAREST: case GL_NEAREST:
magFilt = FILTER_NEAREST; magFilt = FILTER_NEAREST;
break; break;
@ -250,7 +250,7 @@ i915_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
} }
} }
lodbias = (int) ((tUnit->LodBias + sampler->LodBias) * 16.0); lodbias = (int) ((tUnit->LodBias + sampler->Attrib.LodBias) * 16.0);
if (lodbias < -256) if (lodbias < -256)
lodbias = -256; lodbias = -256;
if (lodbias > 255) if (lodbias > 255)
@ -266,14 +266,14 @@ i915_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
/* Shadow: /* Shadow:
*/ */
if (sampler->CompareMode == GL_COMPARE_R_TO_TEXTURE_ARB && if (sampler->Attrib.CompareMode == GL_COMPARE_R_TO_TEXTURE_ARB &&
tObj->Target != GL_TEXTURE_3D) { tObj->Target != GL_TEXTURE_3D) {
if (tObj->Target == GL_TEXTURE_1D) if (tObj->Target == GL_TEXTURE_1D)
return false; return false;
state[I915_TEXREG_SS2] |= state[I915_TEXREG_SS2] |=
(SS2_SHADOW_ENABLE | (SS2_SHADOW_ENABLE |
intel_translate_shadow_compare_func(sampler->CompareFunc)); intel_translate_shadow_compare_func(sampler->Attrib.CompareFunc));
minFilt = FILTER_4X4_FLAT; minFilt = FILTER_4X4_FLAT;
magFilt = FILTER_4X4_FLAT; magFilt = FILTER_4X4_FLAT;
@ -286,9 +286,9 @@ i915_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
} }
{ {
GLenum ws = sampler->WrapS; GLenum ws = sampler->Attrib.WrapS;
GLenum wt = sampler->WrapT; GLenum wt = sampler->Attrib.WrapT;
GLenum wr = sampler->WrapR; GLenum wr = sampler->Attrib.WrapR;
float minlod; float minlod;
/* We program 1D textures as 2D textures, so the 2D texcoord could /* We program 1D textures as 2D textures, so the 2D texcoord could
@ -306,8 +306,8 @@ i915_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
* clamp_to_border. * clamp_to_border.
*/ */
if (tObj->Target == GL_TEXTURE_3D && if (tObj->Target == GL_TEXTURE_3D &&
(sampler->MinFilter != GL_NEAREST || (sampler->Attrib.MinFilter != GL_NEAREST ||
sampler->MagFilter != GL_NEAREST) && sampler->Attrib.MagFilter != GL_NEAREST) &&
(ws == GL_CLAMP || (ws == GL_CLAMP ||
wt == GL_CLAMP || wt == GL_CLAMP ||
wr == GL_CLAMP || wr == GL_CLAMP ||
@ -352,24 +352,24 @@ i915_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
(translate_wrap_mode(wt) << SS3_TCY_ADDR_MODE_SHIFT) | (translate_wrap_mode(wt) << SS3_TCY_ADDR_MODE_SHIFT) |
(translate_wrap_mode(wr) << SS3_TCZ_ADDR_MODE_SHIFT)); (translate_wrap_mode(wr) << SS3_TCZ_ADDR_MODE_SHIFT));
minlod = MIN2(sampler->MinLod, tObj->_MaxLevel - tObj->BaseLevel); minlod = MIN2(sampler->Attrib.MinLod, tObj->_MaxLevel - tObj->Attrib.BaseLevel);
state[I915_TEXREG_SS3] |= (unit << SS3_TEXTUREMAP_INDEX_SHIFT); state[I915_TEXREG_SS3] |= (unit << SS3_TEXTUREMAP_INDEX_SHIFT);
state[I915_TEXREG_SS3] |= (U_FIXED(CLAMP(minlod, 0.0, 11.0), 4) << state[I915_TEXREG_SS3] |= (U_FIXED(CLAMP(minlod, 0.0, 11.0), 4) <<
SS3_MIN_LOD_SHIFT); SS3_MIN_LOD_SHIFT);
} }
if (sampler->sRGBDecode == GL_DECODE_EXT && if (sampler->Attrib.sRGBDecode == GL_DECODE_EXT &&
(_mesa_get_srgb_format_linear(firstImage->TexFormat) != (_mesa_get_srgb_format_linear(firstImage->TexFormat) !=
firstImage->TexFormat)) { firstImage->TexFormat)) {
state[I915_TEXREG_SS2] |= SS2_REVERSE_GAMMA_ENABLE; state[I915_TEXREG_SS2] |= SS2_REVERSE_GAMMA_ENABLE;
} }
/* convert border color from float to ubyte */ /* convert border color from float to ubyte */
CLAMPED_FLOAT_TO_UBYTE(border[0], sampler->BorderColor.f[0]); CLAMPED_FLOAT_TO_UBYTE(border[0], sampler->Attrib.BorderColor.f[0]);
CLAMPED_FLOAT_TO_UBYTE(border[1], sampler->BorderColor.f[1]); CLAMPED_FLOAT_TO_UBYTE(border[1], sampler->Attrib.BorderColor.f[1]);
CLAMPED_FLOAT_TO_UBYTE(border[2], sampler->BorderColor.f[2]); CLAMPED_FLOAT_TO_UBYTE(border[2], sampler->Attrib.BorderColor.f[2]);
CLAMPED_FLOAT_TO_UBYTE(border[3], sampler->BorderColor.f[3]); CLAMPED_FLOAT_TO_UBYTE(border[3], sampler->Attrib.BorderColor.f[3]);
if (firstImage->_BaseFormat == GL_DEPTH_COMPONENT) { if (firstImage->_BaseFormat == GL_DEPTH_COMPONENT) {
/* GL specs that border color for depth textures is taken from the /* GL specs that border color for depth textures is taken from the

View File

@ -392,7 +392,7 @@ intel_create_image_from_texture(__DRIcontext *context, int target,
return NULL; return NULL;
} }
if (level < obj->BaseLevel || level > obj->_MaxLevel) { if (level < obj->Attrib.BaseLevel || level > obj->_MaxLevel) {
*error = __DRI_IMAGE_ERROR_BAD_MATCH; *error = __DRI_IMAGE_ERROR_BAD_MATCH;
return NULL; return NULL;
} }

View File

@ -44,7 +44,7 @@ intel_miptree_create_for_teximage(struct intel_context *intel,
DBG("%s\n", __func__); DBG("%s\n", __func__);
if (intelImage->base.Base.Level > intelObj->base.BaseLevel && if (intelImage->base.Base.Level > intelObj->base.Attrib.BaseLevel &&
(width == 1 || (width == 1 ||
(intelObj->base.Target != GL_TEXTURE_1D && height == 1) || (intelObj->base.Target != GL_TEXTURE_1D && height == 1) ||
(intelObj->base.Target == GL_TEXTURE_3D && depth == 1))) { (intelObj->base.Target == GL_TEXTURE_3D && depth == 1))) {
@ -59,10 +59,10 @@ intel_miptree_create_for_teximage(struct intel_context *intel,
/* If this image disrespects BaseLevel, allocate from level zero. /* If this image disrespects BaseLevel, allocate from level zero.
* Usually BaseLevel == 0, so it's unlikely to happen. * Usually BaseLevel == 0, so it's unlikely to happen.
*/ */
if (intelImage->base.Base.Level < intelObj->base.BaseLevel) if (intelImage->base.Base.Level < intelObj->base.Attrib.BaseLevel)
firstLevel = 0; firstLevel = 0;
else else
firstLevel = intelObj->base.BaseLevel; firstLevel = intelObj->base.Attrib.BaseLevel;
/* Figure out image dimensions at start level. */ /* Figure out image dimensions at start level. */
for (i = intelImage->base.Base.Level; i > firstLevel; i--) { for (i = intelImage->base.Base.Level; i > firstLevel; i--) {
@ -78,8 +78,8 @@ intel_miptree_create_for_teximage(struct intel_context *intel,
* resizable buffers, or require that buffers implement lazy * resizable buffers, or require that buffers implement lazy
* pagetable arrangements. * pagetable arrangements.
*/ */
if ((intelObj->base.Sampler.MinFilter == GL_NEAREST || if ((intelObj->base.Sampler.Attrib.MinFilter == GL_NEAREST ||
intelObj->base.Sampler.MinFilter == GL_LINEAR) && intelObj->base.Sampler.Attrib.MinFilter == GL_LINEAR) &&
intelImage->base.Base.Level == firstLevel) { intelImage->base.Base.Level == firstLevel) {
lastLevel = firstLevel; lastLevel = firstLevel;
} else { } else {

View File

@ -24,9 +24,9 @@ intel_update_max_level(struct intel_texture_object *intelObj,
struct gl_texture_object *tObj = &intelObj->base; struct gl_texture_object *tObj = &intelObj->base;
int maxlevel; int maxlevel;
if (sampler->MinFilter == GL_NEAREST || if (sampler->Attrib.MinFilter == GL_NEAREST ||
sampler->MinFilter == GL_LINEAR) { sampler->Attrib.MinFilter == GL_LINEAR) {
maxlevel = tObj->BaseLevel; maxlevel = tObj->Attrib.BaseLevel;
} else { } else {
maxlevel = tObj->_MaxLevel; maxlevel = tObj->_MaxLevel;
} }
@ -62,13 +62,13 @@ intel_finalize_mipmap_tree(struct intel_context *intel, GLuint unit)
/* What levels must the tree include at a minimum? /* What levels must the tree include at a minimum?
*/ */
intel_update_max_level(intelObj, sampler); intel_update_max_level(intelObj, sampler);
if (intelObj->mt && intelObj->mt->first_level != tObj->BaseLevel) if (intelObj->mt && intelObj->mt->first_level != tObj->Attrib.BaseLevel)
intelObj->needs_validate = true; intelObj->needs_validate = true;
if (!intelObj->needs_validate) if (!intelObj->needs_validate)
return true; return true;
firstImage = intel_texture_image(tObj->Image[0][tObj->BaseLevel]); firstImage = intel_texture_image(tObj->Image[0][tObj->Attrib.BaseLevel]);
/* Check tree can hold all active levels. Check tree matches /* Check tree can hold all active levels. Check tree matches
* target, imageFormat, etc. * target, imageFormat, etc.
@ -80,7 +80,7 @@ intel_finalize_mipmap_tree(struct intel_context *intel, GLuint unit)
*/ */
if (intelObj->mt && if (intelObj->mt &&
(!intel_miptree_match_image(intelObj->mt, &firstImage->base.Base) || (!intel_miptree_match_image(intelObj->mt, &firstImage->base.Base) ||
intelObj->mt->first_level != tObj->BaseLevel || intelObj->mt->first_level != tObj->Attrib.BaseLevel ||
intelObj->mt->last_level < intelObj->_MaxLevel)) { intelObj->mt->last_level < intelObj->_MaxLevel)) {
intel_miptree_release(&intelObj->mt); intel_miptree_release(&intelObj->mt);
} }
@ -95,12 +95,12 @@ intel_finalize_mipmap_tree(struct intel_context *intel, GLuint unit)
perf_debug("Creating new %s %dx%dx%d %d..%d miptree to handle finalized " perf_debug("Creating new %s %dx%dx%d %d..%d miptree to handle finalized "
"texture miptree.\n", "texture miptree.\n",
_mesa_get_format_name(firstImage->base.Base.TexFormat), _mesa_get_format_name(firstImage->base.Base.TexFormat),
width, height, depth, tObj->BaseLevel, intelObj->_MaxLevel); width, height, depth, tObj->Attrib.BaseLevel, intelObj->_MaxLevel);
intelObj->mt = intel_miptree_create(intel, intelObj->mt = intel_miptree_create(intel,
intelObj->base.Target, intelObj->base.Target,
firstImage->base.Base.TexFormat, firstImage->base.Base.TexFormat,
tObj->BaseLevel, tObj->Attrib.BaseLevel,
intelObj->_MaxLevel, intelObj->_MaxLevel,
width, width,
height, height,
@ -115,7 +115,7 @@ intel_finalize_mipmap_tree(struct intel_context *intel, GLuint unit)
*/ */
nr_faces = _mesa_num_tex_faces(intelObj->base.Target); nr_faces = _mesa_num_tex_faces(intelObj->base.Target);
for (face = 0; face < nr_faces; face++) { for (face = 0; face < nr_faces; face++) {
for (i = tObj->BaseLevel; i <= intelObj->_MaxLevel; i++) { for (i = tObj->Attrib.BaseLevel; i <= intelObj->_MaxLevel; i++) {
struct intel_texture_image *intelImage = struct intel_texture_image *intelImage =
intel_texture_image(intelObj->base.Image[face][i]); intel_texture_image(intelObj->base.Image[face][i]);
/* skip too small size mipmap */ /* skip too small size mipmap */

View File

@ -543,7 +543,7 @@ brw_predraw_resolve_inputs(struct brw_context *brw, bool rendering,
struct gl_sampler_object *sampler = _mesa_get_samplerobj(ctx, i); struct gl_sampler_object *sampler = _mesa_get_samplerobj(ctx, i);
enum isl_format view_format = enum isl_format view_format =
translate_tex_format(brw, tex_obj->_Format, sampler->sRGBDecode); translate_tex_format(brw, tex_obj->_Format, sampler->Attrib.sRGBDecode);
unsigned min_level, min_layer, num_levels, num_layers; unsigned min_level, min_layer, num_levels, num_layers;
if (tex_obj->base.Immutable) { if (tex_obj->base.Immutable) {
@ -553,8 +553,8 @@ brw_predraw_resolve_inputs(struct brw_context *brw, bool rendering,
num_layers = tex_obj->base.Target != GL_TEXTURE_3D ? num_layers = tex_obj->base.Target != GL_TEXTURE_3D ?
tex_obj->base.NumLayers : INTEL_REMAINING_LAYERS; tex_obj->base.NumLayers : INTEL_REMAINING_LAYERS;
} else { } else {
min_level = tex_obj->base.BaseLevel; min_level = tex_obj->base.Attrib.BaseLevel;
num_levels = tex_obj->_MaxLevel - tex_obj->base.BaseLevel + 1; num_levels = tex_obj->_MaxLevel - tex_obj->base.Attrib.BaseLevel + 1;
min_layer = 0; min_layer = 0;
num_layers = INTEL_REMAINING_LAYERS; num_layers = INTEL_REMAINING_LAYERS;
} }
@ -586,7 +586,7 @@ brw_predraw_resolve_inputs(struct brw_context *brw, bool rendering,
brw_cache_flush_for_read(brw, tex_obj->mt->bo); brw_cache_flush_for_read(brw, tex_obj->mt->bo);
if (tex_obj->base.StencilSampling || if (tex_obj->base.Attrib.StencilSampling ||
tex_obj->mt->format == MESA_FORMAT_S_UINT8) { tex_obj->mt->format == MESA_FORMAT_S_UINT8) {
intel_update_r8stencil(brw, tex_obj->mt); intel_update_r8stencil(brw, tex_obj->mt);
} }

View File

@ -41,7 +41,7 @@ brw_generate_mipmap(struct gl_context *ctx, GLenum target,
struct brw_context *brw = brw_context(ctx); struct brw_context *brw = brw_context(ctx);
struct gen_device_info *devinfo = &brw->screen->devinfo; struct gen_device_info *devinfo = &brw->screen->devinfo;
struct intel_texture_object *intel_obj = intel_texture_object(tex_obj); struct intel_texture_object *intel_obj = intel_texture_object(tex_obj);
const unsigned base_level = tex_obj->BaseLevel; const unsigned base_level = tex_obj->Attrib.BaseLevel;
unsigned last_level, first_layer, last_layer; unsigned last_level, first_layer, last_layer;
/* Blorp doesn't handle combined depth/stencil surfaces on Gen4-5 yet. */ /* Blorp doesn't handle combined depth/stencil surfaces on Gen4-5 yet. */
@ -120,7 +120,7 @@ brw_generate_mipmap(struct gl_context *ctx, GLenum target,
* encode and decode steps, sRGB mipmap generation should match * encode and decode steps, sRGB mipmap generation should match
* the mipmap generation for a non-sRGB texture." * the mipmap generation for a non-sRGB texture."
*/ */
bool do_srgb = tex_obj->Sampler.sRGBDecode == GL_DECODE_EXT; bool do_srgb = tex_obj->Sampler.Attrib.sRGBDecode == GL_DECODE_EXT;
for (unsigned dst_level = base_level + 1; for (unsigned dst_level = base_level + 1;
dst_level <= last_level; dst_level <= last_level;

View File

@ -206,10 +206,10 @@ brw_populate_sampler_prog_key_data(struct gl_context *ctx,
if (unit->_Current && unit->_Current->Target != GL_TEXTURE_BUFFER) { if (unit->_Current && unit->_Current->Target != GL_TEXTURE_BUFFER) {
const struct gl_texture_object *t = unit->_Current; const struct gl_texture_object *t = unit->_Current;
const struct gl_texture_image *img = t->Image[0][t->BaseLevel]; const struct gl_texture_image *img = t->Image[0][t->Attrib.BaseLevel];
struct gl_sampler_object *sampler = _mesa_get_samplerobj(ctx, unit_id); struct gl_sampler_object *sampler = _mesa_get_samplerobj(ctx, unit_id);
const bool alpha_depth = t->DepthMode == GL_ALPHA && const bool alpha_depth = t->Attrib.DepthMode == GL_ALPHA &&
(img->_BaseFormat == GL_DEPTH_COMPONENT || (img->_BaseFormat == GL_DEPTH_COMPONENT ||
img->_BaseFormat == GL_DEPTH_STENCIL); img->_BaseFormat == GL_DEPTH_STENCIL);
@ -220,13 +220,13 @@ brw_populate_sampler_prog_key_data(struct gl_context *ctx,
key->swizzles[s] = brw_get_texture_swizzle(ctx, t); key->swizzles[s] = brw_get_texture_swizzle(ctx, t);
if (devinfo->gen < 8 && if (devinfo->gen < 8 &&
sampler->MinFilter != GL_NEAREST && sampler->Attrib.MinFilter != GL_NEAREST &&
sampler->MagFilter != GL_NEAREST) { sampler->Attrib.MagFilter != GL_NEAREST) {
if (sampler->WrapS == GL_CLAMP) if (sampler->Attrib.WrapS == GL_CLAMP)
key->gl_clamp_mask[0] |= 1 << s; key->gl_clamp_mask[0] |= 1 << s;
if (sampler->WrapT == GL_CLAMP) if (sampler->Attrib.WrapT == GL_CLAMP)
key->gl_clamp_mask[1] |= 1 << s; key->gl_clamp_mask[1] |= 1 << s;
if (sampler->WrapR == GL_CLAMP) if (sampler->Attrib.WrapR == GL_CLAMP)
key->gl_clamp_mask[2] |= 1 << s; key->gl_clamp_mask[2] |= 1 << s;
} }
@ -245,7 +245,7 @@ brw_populate_sampler_prog_key_data(struct gl_context *ctx,
* leaving normal texture swizzling to SCS. * leaving normal texture swizzling to SCS.
*/ */
unsigned src_swizzle = unsigned src_swizzle =
devinfo->is_haswell ? t->_Swizzle : key->swizzles[s]; devinfo->is_haswell ? t->Attrib._Swizzle : key->swizzles[s];
for (int i = 0; i < 4; i++) { for (int i = 0; i < 4; i++) {
unsigned src_comp = GET_SWZ(src_swizzle, i); unsigned src_comp = GET_SWZ(src_swizzle, i);
if (src_comp == SWIZZLE_ONE || src_comp == SWIZZLE_W) { if (src_comp == SWIZZLE_ONE || src_comp == SWIZZLE_W) {

View File

@ -324,7 +324,7 @@ int
brw_get_texture_swizzle(const struct gl_context *ctx, brw_get_texture_swizzle(const struct gl_context *ctx,
const struct gl_texture_object *t) const struct gl_texture_object *t)
{ {
const struct gl_texture_image *img = t->Image[0][t->BaseLevel]; const struct gl_texture_image *img = t->Image[0][t->Attrib.BaseLevel];
int swizzles[SWIZZLE_NIL + 1] = { int swizzles[SWIZZLE_NIL + 1] = {
SWIZZLE_X, SWIZZLE_X,
@ -338,7 +338,7 @@ brw_get_texture_swizzle(const struct gl_context *ctx,
if (img->_BaseFormat == GL_DEPTH_COMPONENT || if (img->_BaseFormat == GL_DEPTH_COMPONENT ||
img->_BaseFormat == GL_DEPTH_STENCIL) { img->_BaseFormat == GL_DEPTH_STENCIL) {
GLenum depth_mode = t->DepthMode; GLenum depth_mode = t->Attrib.DepthMode;
/* In ES 3.0, DEPTH_TEXTURE_MODE is expected to be GL_RED for textures /* In ES 3.0, DEPTH_TEXTURE_MODE is expected to be GL_RED for textures
* with depth component data specified with a sized internal format. * with depth component data specified with a sized internal format.
@ -434,10 +434,10 @@ brw_get_texture_swizzle(const struct gl_context *ctx,
break; break;
} }
return MAKE_SWIZZLE4(swizzles[GET_SWZ(t->_Swizzle, 0)], return MAKE_SWIZZLE4(swizzles[GET_SWZ(t->Attrib._Swizzle, 0)],
swizzles[GET_SWZ(t->_Swizzle, 1)], swizzles[GET_SWZ(t->Attrib._Swizzle, 1)],
swizzles[GET_SWZ(t->_Swizzle, 2)], swizzles[GET_SWZ(t->Attrib._Swizzle, 2)],
swizzles[GET_SWZ(t->_Swizzle, 3)]); swizzles[GET_SWZ(t->Attrib._Swizzle, 3)]);
} }
/** /**
@ -502,8 +502,8 @@ static void brw_update_texture_surface(struct gl_context *ctx,
* texturing functions that return a float, as our code generation always * texturing functions that return a float, as our code generation always
* selects the .x channel (which would always be 0). * selects the .x channel (which would always be 0).
*/ */
struct gl_texture_image *firstImage = obj->Image[0][obj->BaseLevel]; struct gl_texture_image *firstImage = obj->Image[0][obj->Attrib.BaseLevel];
const bool alpha_depth = obj->DepthMode == GL_ALPHA && const bool alpha_depth = obj->Attrib.DepthMode == GL_ALPHA &&
(firstImage->_BaseFormat == GL_DEPTH_COMPONENT || (firstImage->_BaseFormat == GL_DEPTH_COMPONENT ||
firstImage->_BaseFormat == GL_DEPTH_STENCIL); firstImage->_BaseFormat == GL_DEPTH_STENCIL);
const unsigned swizzle = (unlikely(alpha_depth) ? SWIZZLE_XYZW : const unsigned swizzle = (unlikely(alpha_depth) ? SWIZZLE_XYZW :
@ -526,7 +526,7 @@ static void brw_update_texture_surface(struct gl_context *ctx,
} }
enum isl_format format = translate_tex_format(brw, mesa_fmt, enum isl_format format = translate_tex_format(brw, mesa_fmt,
for_txf ? GL_DECODE_EXT : for_txf ? GL_DECODE_EXT :
sampler->sRGBDecode); sampler->Attrib.sRGBDecode);
/* Implement gen6 and gen7 gather work-around */ /* Implement gen6 and gen7 gather work-around */
bool need_green_to_blue = false; bool need_green_to_blue = false;
@ -566,7 +566,7 @@ static void brw_update_texture_surface(struct gl_context *ctx,
} }
} }
if (obj->StencilSampling && firstImage->_BaseFormat == GL_DEPTH_STENCIL) { if (obj->Attrib.StencilSampling && firstImage->_BaseFormat == GL_DEPTH_STENCIL) {
if (devinfo->gen <= 7) { if (devinfo->gen <= 7) {
assert(mt->shadow_mt && !mt->stencil_mt->shadow_needs_update); assert(mt->shadow_mt && !mt->stencil_mt->shadow_needs_update);
mt = mt->shadow_mt; mt = mt->shadow_mt;
@ -587,8 +587,8 @@ static void brw_update_texture_surface(struct gl_context *ctx,
struct isl_view view = { struct isl_view view = {
.format = format, .format = format,
.base_level = obj->MinLevel + obj->BaseLevel, .base_level = obj->MinLevel + obj->Attrib.BaseLevel,
.levels = intel_obj->_MaxLevel - obj->BaseLevel + 1, .levels = intel_obj->_MaxLevel - obj->Attrib.BaseLevel + 1,
.base_array_layer = obj->MinLayer, .base_array_layer = obj->MinLayer,
.array_len = view_num_layers, .array_len = view_num_layers,
.swizzle = { .swizzle = {
@ -1151,7 +1151,7 @@ is_depth_texture(struct intel_texture_object *iobj)
{ {
GLenum base_format = _mesa_get_format_base_format(iobj->_Format); GLenum base_format = _mesa_get_format_base_format(iobj->_Format);
return base_format == GL_DEPTH_COMPONENT || return base_format == GL_DEPTH_COMPONENT ||
(base_format == GL_DEPTH_STENCIL && !iobj->base.StencilSampling); (base_format == GL_DEPTH_STENCIL && !iobj->base.Attrib.StencilSampling);
} }
static void static void

View File

@ -23,6 +23,8 @@
#include <assert.h> #include <assert.h>
#include "main/samplerobj.h"
#include "dev/gen_device_info.h" #include "dev/gen_device_info.h"
#include "common/gen_sample_positions.h" #include "common/gen_sample_positions.h"
#include "genxml/gen_macros.h" #include "genxml/gen_macros.h"
@ -52,7 +54,6 @@
#include "main/fbobject.h" #include "main/fbobject.h"
#include "main/framebuffer.h" #include "main/framebuffer.h"
#include "main/glformats.h" #include "main/glformats.h"
#include "main/samplerobj.h"
#include "main/shaderapi.h" #include "main/shaderapi.h"
#include "main/stencil.h" #include "main/stencil.h"
#include "main/transformfeedback.h" #include "main/transformfeedback.h"
@ -4965,40 +4966,40 @@ genX(upload_default_color)(struct brw_context *brw,
* R channel, while the hardware uses A. Spam R into all the * R channel, while the hardware uses A. Spam R into all the
* channels for safety. * channels for safety.
*/ */
color.ui[0] = sampler->BorderColor.ui[0]; color.ui[0] = sampler->Attrib.BorderColor.ui[0];
color.ui[1] = sampler->BorderColor.ui[0]; color.ui[1] = sampler->Attrib.BorderColor.ui[0];
color.ui[2] = sampler->BorderColor.ui[0]; color.ui[2] = sampler->Attrib.BorderColor.ui[0];
color.ui[3] = sampler->BorderColor.ui[0]; color.ui[3] = sampler->Attrib.BorderColor.ui[0];
break; break;
case GL_ALPHA: case GL_ALPHA:
color.ui[0] = 0u; color.ui[0] = 0u;
color.ui[1] = 0u; color.ui[1] = 0u;
color.ui[2] = 0u; color.ui[2] = 0u;
color.ui[3] = sampler->BorderColor.ui[3]; color.ui[3] = sampler->Attrib.BorderColor.ui[3];
break; break;
case GL_INTENSITY: case GL_INTENSITY:
color.ui[0] = sampler->BorderColor.ui[0]; color.ui[0] = sampler->Attrib.BorderColor.ui[0];
color.ui[1] = sampler->BorderColor.ui[0]; color.ui[1] = sampler->Attrib.BorderColor.ui[0];
color.ui[2] = sampler->BorderColor.ui[0]; color.ui[2] = sampler->Attrib.BorderColor.ui[0];
color.ui[3] = sampler->BorderColor.ui[0]; color.ui[3] = sampler->Attrib.BorderColor.ui[0];
break; break;
case GL_LUMINANCE: case GL_LUMINANCE:
color.ui[0] = sampler->BorderColor.ui[0]; color.ui[0] = sampler->Attrib.BorderColor.ui[0];
color.ui[1] = sampler->BorderColor.ui[0]; color.ui[1] = sampler->Attrib.BorderColor.ui[0];
color.ui[2] = sampler->BorderColor.ui[0]; color.ui[2] = sampler->Attrib.BorderColor.ui[0];
color.ui[3] = float_as_int(1.0); color.ui[3] = float_as_int(1.0);
break; break;
case GL_LUMINANCE_ALPHA: case GL_LUMINANCE_ALPHA:
color.ui[0] = sampler->BorderColor.ui[0]; color.ui[0] = sampler->Attrib.BorderColor.ui[0];
color.ui[1] = sampler->BorderColor.ui[0]; color.ui[1] = sampler->Attrib.BorderColor.ui[0];
color.ui[2] = sampler->BorderColor.ui[0]; color.ui[2] = sampler->Attrib.BorderColor.ui[0];
color.ui[3] = sampler->BorderColor.ui[3]; color.ui[3] = sampler->Attrib.BorderColor.ui[3];
break; break;
default: default:
color.ui[0] = sampler->BorderColor.ui[0]; color.ui[0] = sampler->Attrib.BorderColor.ui[0];
color.ui[1] = sampler->BorderColor.ui[1]; color.ui[1] = sampler->Attrib.BorderColor.ui[1];
color.ui[2] = sampler->BorderColor.ui[2]; color.ui[2] = sampler->Attrib.BorderColor.ui[2];
color.ui[3] = sampler->BorderColor.ui[3]; color.ui[3] = sampler->Attrib.BorderColor.ui[3];
break; break;
} }
@ -5199,7 +5200,7 @@ genX(update_sampler_state)(struct brw_context *brw,
struct GENX(SAMPLER_STATE) samp_st = { 0 }; struct GENX(SAMPLER_STATE) samp_st = { 0 };
/* Select min and mip filters. */ /* Select min and mip filters. */
switch (sampler->MinFilter) { switch (sampler->Attrib.MinFilter) {
case GL_NEAREST: case GL_NEAREST:
samp_st.MinModeFilter = MAPFILTER_NEAREST; samp_st.MinModeFilter = MAPFILTER_NEAREST;
samp_st.MipModeFilter = MIPFILTER_NONE; samp_st.MipModeFilter = MIPFILTER_NONE;
@ -5229,21 +5230,21 @@ genX(update_sampler_state)(struct brw_context *brw,
} }
/* Select mag filter. */ /* Select mag filter. */
samp_st.MagModeFilter = sampler->MagFilter == GL_LINEAR ? samp_st.MagModeFilter = sampler->Attrib.MagFilter == GL_LINEAR ?
MAPFILTER_LINEAR : MAPFILTER_NEAREST; MAPFILTER_LINEAR : MAPFILTER_NEAREST;
/* Enable anisotropic filtering if desired. */ /* Enable anisotropic filtering if desired. */
samp_st.MaximumAnisotropy = RATIO21; samp_st.MaximumAnisotropy = RATIO21;
if (sampler->MaxAnisotropy > 1.0f) { if (sampler->Attrib.MaxAnisotropy > 1.0f) {
if (samp_st.MinModeFilter == MAPFILTER_LINEAR) if (samp_st.MinModeFilter == MAPFILTER_LINEAR)
samp_st.MinModeFilter = MAPFILTER_ANISOTROPIC; samp_st.MinModeFilter = MAPFILTER_ANISOTROPIC;
if (samp_st.MagModeFilter == MAPFILTER_LINEAR) if (samp_st.MagModeFilter == MAPFILTER_LINEAR)
samp_st.MagModeFilter = MAPFILTER_ANISOTROPIC; samp_st.MagModeFilter = MAPFILTER_ANISOTROPIC;
if (sampler->MaxAnisotropy > 2.0f) { if (sampler->Attrib.MaxAnisotropy > 2.0f) {
samp_st.MaximumAnisotropy = samp_st.MaximumAnisotropy =
MIN2((sampler->MaxAnisotropy - 2) / 2, RATIO161); MIN2((sampler->Attrib.MaxAnisotropy - 2) / 2, RATIO161);
} }
} }
@ -5261,10 +5262,10 @@ genX(update_sampler_state)(struct brw_context *brw,
} }
bool either_nearest = bool either_nearest =
sampler->MinFilter == GL_NEAREST || sampler->MagFilter == GL_NEAREST; sampler->Attrib.MinFilter == GL_NEAREST || sampler->Attrib.MagFilter == GL_NEAREST;
unsigned wrap_s = translate_wrap_mode(sampler->WrapS, either_nearest); unsigned wrap_s = translate_wrap_mode(sampler->Attrib.WrapS, either_nearest);
unsigned wrap_t = translate_wrap_mode(sampler->WrapT, either_nearest); unsigned wrap_t = translate_wrap_mode(sampler->Attrib.WrapT, either_nearest);
unsigned wrap_r = translate_wrap_mode(sampler->WrapR, either_nearest); unsigned wrap_r = translate_wrap_mode(sampler->Attrib.WrapR, either_nearest);
if (target == GL_TEXTURE_CUBE_MAP || if (target == GL_TEXTURE_CUBE_MAP ||
target == GL_TEXTURE_CUBE_MAP_ARRAY) { target == GL_TEXTURE_CUBE_MAP_ARRAY) {
@ -5274,7 +5275,7 @@ genX(update_sampler_state)(struct brw_context *brw,
* Ivybridge and Baytrail seem to have problems with CUBE mode and * Ivybridge and Baytrail seem to have problems with CUBE mode and
* integer formats. Fall back to CLAMP for now. * integer formats. Fall back to CLAMP for now.
*/ */
if ((tex_cube_map_seamless || sampler->CubeMapSeamless) && if ((tex_cube_map_seamless || sampler->Attrib.CubeMapSeamless) &&
!(GEN_GEN == 7 && !GEN_IS_HASWELL && texObj->_IsIntegerFormat)) { !(GEN_GEN == 7 && !GEN_IS_HASWELL && texObj->_IsIntegerFormat)) {
wrap_s = TCM_CUBE; wrap_s = TCM_CUBE;
wrap_t = TCM_CUBE; wrap_t = TCM_CUBE;
@ -5298,8 +5299,8 @@ genX(update_sampler_state)(struct brw_context *brw,
samp_st.TCZAddressControlMode = wrap_r; samp_st.TCZAddressControlMode = wrap_r;
samp_st.ShadowFunction = samp_st.ShadowFunction =
sampler->CompareMode == GL_COMPARE_R_TO_TEXTURE_ARB ? sampler->Attrib.CompareMode == GL_COMPARE_R_TO_TEXTURE_ARB ?
intel_translate_shadow_compare_func(sampler->CompareFunc) : 0; intel_translate_shadow_compare_func(sampler->Attrib.CompareFunc) : 0;
#if GEN_GEN >= 7 #if GEN_GEN >= 7
/* Set shadow function. */ /* Set shadow function. */
@ -5313,14 +5314,14 @@ genX(update_sampler_state)(struct brw_context *brw,
#endif #endif
const float hw_max_lod = GEN_GEN >= 7 ? 14 : 13; const float hw_max_lod = GEN_GEN >= 7 ? 14 : 13;
samp_st.MinLOD = CLAMP(sampler->MinLod, 0, hw_max_lod); samp_st.MinLOD = CLAMP(sampler->Attrib.MinLod, 0, hw_max_lod);
samp_st.MaxLOD = CLAMP(sampler->MaxLod, 0, hw_max_lod); samp_st.MaxLOD = CLAMP(sampler->Attrib.MaxLod, 0, hw_max_lod);
samp_st.TextureLODBias = samp_st.TextureLODBias =
CLAMP(tex_unit_lod_bias + sampler->LodBias, -16, 15); CLAMP(tex_unit_lod_bias + sampler->Attrib.LodBias, -16, 15);
#if GEN_GEN == 6 #if GEN_GEN == 6
samp_st.BaseMipLevel = samp_st.BaseMipLevel =
CLAMP(texObj->MinLevel + texObj->BaseLevel, 0, hw_max_lod); CLAMP(texObj->MinLevel + texObj->Attrib.BaseLevel, 0, hw_max_lod);
samp_st.MinandMagStateNotEqual = samp_st.MinandMagStateNotEqual =
samp_st.MinModeFilter != samp_st.MagModeFilter; samp_st.MinModeFilter != samp_st.MagModeFilter;
#endif #endif
@ -5335,7 +5336,7 @@ genX(update_sampler_state)(struct brw_context *brw,
wrap_mode_needs_border_color(wrap_r)) { wrap_mode_needs_border_color(wrap_r)) {
genX(upload_default_color)(brw, sampler, format, base_format, genX(upload_default_color)(brw, sampler, format, base_format,
texObj->_IsIntegerFormat, texObj->_IsIntegerFormat,
texObj->StencilSampling, texObj->Attrib.StencilSampling,
&border_color_offset); &border_color_offset);
} }
#if GEN_GEN < 6 #if GEN_GEN < 6
@ -5368,7 +5369,7 @@ update_sampler_state(struct brw_context *brw,
if (texObj->Target == GL_TEXTURE_BUFFER) if (texObj->Target == GL_TEXTURE_BUFFER)
return; return;
struct gl_texture_image *firstImage = texObj->Image[0][texObj->BaseLevel]; struct gl_texture_image *firstImage = texObj->Image[0][texObj->Attrib.BaseLevel];
genX(update_sampler_state)(brw, texObj->Target, genX(update_sampler_state)(brw, texObj->Target,
ctx->Texture.CubeMapSeamless, ctx->Texture.CubeMapSeamless,
texUnit->LodBias, texUnit->LodBias,

View File

@ -611,7 +611,7 @@ intel_create_image_from_texture(__DRIcontext *context, int target,
return NULL; return NULL;
} }
if (level < obj->BaseLevel || level > obj->_MaxLevel) { if (level < obj->Attrib.BaseLevel || level > obj->_MaxLevel) {
*error = __DRI_IMAGE_ERROR_BAD_MATCH; *error = __DRI_IMAGE_ERROR_BAD_MATCH;
return NULL; return NULL;
} }

View File

@ -105,10 +105,10 @@ intel_miptree_create_for_teximage(struct brw_context *brw,
* resizable buffers, or require that buffers implement lazy * resizable buffers, or require that buffers implement lazy
* pagetable arrangements. * pagetable arrangements.
*/ */
if ((intelObj->base.Sampler.MinFilter == GL_NEAREST || if ((intelObj->base.Sampler.Attrib.MinFilter == GL_NEAREST ||
intelObj->base.Sampler.MinFilter == GL_LINEAR) && intelObj->base.Sampler.Attrib.MinFilter == GL_LINEAR) &&
intelImage->base.Base.Level == 0 && intelImage->base.Base.Level == 0 &&
!intelObj->base.GenerateMipmap) { !intelObj->base.Attrib.GenerateMipmap) {
lastLevel = 0; lastLevel = 0;
} else { } else {
lastLevel = _mesa_get_tex_max_num_levels(intelObj->base.Target, lastLevel = _mesa_get_tex_max_num_levels(intelObj->base.Target,

View File

@ -49,9 +49,9 @@ intel_update_max_level(struct gl_texture_object *tObj,
if (!tObj->_MipmapComplete || if (!tObj->_MipmapComplete ||
(tObj->_RenderToTexture && (tObj->_RenderToTexture &&
(sampler->MinFilter == GL_NEAREST || (sampler->Attrib.MinFilter == GL_NEAREST ||
sampler->MinFilter == GL_LINEAR))) { sampler->Attrib.MinFilter == GL_LINEAR))) {
intelObj->_MaxLevel = tObj->BaseLevel; intelObj->_MaxLevel = tObj->Attrib.BaseLevel;
} else { } else {
intelObj->_MaxLevel = tObj->_MaxLevel; intelObj->_MaxLevel = tObj->_MaxLevel;
} }
@ -78,7 +78,7 @@ intel_finalize_mipmap_tree(struct brw_context *brw,
return; return;
/* What levels does this validated texture image require? */ /* What levels does this validated texture image require? */
int validate_first_level = tObj->BaseLevel; int validate_first_level = tObj->Attrib.BaseLevel;
int validate_last_level = intelObj->_MaxLevel; int validate_last_level = intelObj->_MaxLevel;
/* Skip the loop over images in the common case of no images having /* Skip the loop over images in the common case of no images having
@ -103,7 +103,7 @@ intel_finalize_mipmap_tree(struct brw_context *brw,
*/ */
assert(!tObj->Immutable || brw->screen->devinfo.gen < 6); assert(!tObj->Immutable || brw->screen->devinfo.gen < 6);
firstImage = intel_texture_image(tObj->Image[0][tObj->BaseLevel]); firstImage = intel_texture_image(tObj->Image[0][tObj->Attrib.BaseLevel]);
/* Check tree can hold all active levels. Check tree matches /* Check tree can hold all active levels. Check tree matches
* target, imageFormat, etc. * target, imageFormat, etc.

View File

@ -261,7 +261,7 @@ teximage_fits(struct gl_texture_object *t, int level)
if (!ti || !to_nouveau_teximage(ti)->surface.bo) if (!ti || !to_nouveau_teximage(ti)->surface.bo)
return GL_FALSE; return GL_FALSE;
if (level == t->BaseLevel && (s->offset & 0x7f)) if (level == t->Attrib.BaseLevel && (s->offset & 0x7f))
return GL_FALSE; return GL_FALSE;
return t->Target == GL_TEXTURE_RECTANGLE || return t->Target == GL_TEXTURE_RECTANGLE ||
@ -296,19 +296,19 @@ validate_teximage(struct gl_context *ctx, struct gl_texture_object *t,
static int static int
get_last_level(struct gl_texture_object *t) get_last_level(struct gl_texture_object *t)
{ {
struct gl_texture_image *base = t->Image[0][t->BaseLevel]; struct gl_texture_image *base = t->Image[0][t->Attrib.BaseLevel];
if (t->Sampler.MinFilter == GL_NEAREST || if (t->Sampler.Attrib.MinFilter == GL_NEAREST ||
t->Sampler.MinFilter == GL_LINEAR || !base) t->Sampler.Attrib.MinFilter == GL_LINEAR || !base)
return t->BaseLevel; return t->Attrib.BaseLevel;
else else
return MIN2(t->BaseLevel + base->MaxNumLevels - 1, t->MaxLevel); return MIN2(t->Attrib.BaseLevel + base->MaxNumLevels - 1, t->Attrib.MaxLevel);
} }
static void static void
relayout_texture(struct gl_context *ctx, struct gl_texture_object *t) relayout_texture(struct gl_context *ctx, struct gl_texture_object *t)
{ {
struct gl_texture_image *base = t->Image[0][t->BaseLevel]; struct gl_texture_image *base = t->Image[0][t->Attrib.BaseLevel];
if (base && t->Target != GL_TEXTURE_RECTANGLE) { if (base && t->Target != GL_TEXTURE_RECTANGLE) {
struct nouveau_surface *ss = to_nouveau_texture(t)->surfaces; struct nouveau_surface *ss = to_nouveau_texture(t)->surfaces;
@ -325,7 +325,7 @@ relayout_texture(struct gl_context *ctx, struct gl_texture_object *t)
nouveau_bo_ref(NULL, &ss[i].bo); nouveau_bo_ref(NULL, &ss[i].bo);
/* Relayout the mipmap tree. */ /* Relayout the mipmap tree. */
for (i = t->BaseLevel; i <= last; i++) { for (i = t->Attrib.BaseLevel; i <= last; i++) {
pitch = _mesa_format_row_stride(s->format, width); pitch = _mesa_format_row_stride(s->format, width);
size = get_format_blocksy(s->format, height) * pitch; size = get_format_blocksy(s->format, height) * pitch;
@ -348,7 +348,7 @@ relayout_texture(struct gl_context *ctx, struct gl_texture_object *t)
height = minify(height, 1); height = minify(height, 1);
} }
if (t->BaseLevel <= last) { if (t->Attrib.BaseLevel <= last) {
/* Get new storage. */ /* Get new storage. */
size = align(offset, 64); size = align(offset, 64);
assert(size); assert(size);
@ -358,7 +358,7 @@ relayout_texture(struct gl_context *ctx, struct gl_texture_object *t)
0, size, NULL, &ss[last].bo); 0, size, NULL, &ss[last].bo);
assert(!ret); assert(!ret);
for (i = t->BaseLevel; i < last; i++) for (i = t->Attrib.BaseLevel; i < last; i++)
nouveau_bo_ref(ss[last].bo, &ss[i].bo); nouveau_bo_ref(ss[last].bo, &ss[i].bo);
} }
} }
@ -370,7 +370,7 @@ nouveau_texture_validate(struct gl_context *ctx, struct gl_texture_object *t)
struct nouveau_texture *nt = to_nouveau_texture(t); struct nouveau_texture *nt = to_nouveau_texture(t);
int i, last = get_last_level(t); int i, last = get_last_level(t);
if (!teximage_fits(t, t->BaseLevel) || if (!teximage_fits(t, t->Attrib.BaseLevel) ||
!teximage_fits(t, last)) !teximage_fits(t, last))
return GL_FALSE; return GL_FALSE;
@ -378,7 +378,7 @@ nouveau_texture_validate(struct gl_context *ctx, struct gl_texture_object *t)
nt->dirty = GL_FALSE; nt->dirty = GL_FALSE;
/* Copy the teximages to the actual miptree. */ /* Copy the teximages to the actual miptree. */
for (i = t->BaseLevel; i <= last; i++) { for (i = t->Attrib.BaseLevel; i <= last; i++) {
struct nouveau_surface *s = &nt->surfaces[i]; struct nouveau_surface *s = &nt->surfaces[i];
validate_teximage(ctx, t, i, 0, 0, 0, validate_teximage(ctx, t, i, 0, 0, 0,
@ -394,7 +394,7 @@ nouveau_texture_validate(struct gl_context *ctx, struct gl_texture_object *t)
void void
nouveau_texture_reallocate(struct gl_context *ctx, struct gl_texture_object *t) nouveau_texture_reallocate(struct gl_context *ctx, struct gl_texture_object *t)
{ {
if (!teximage_fits(t, t->BaseLevel) || if (!teximage_fits(t, t->Attrib.BaseLevel) ||
!teximage_fits(t, get_last_level(t))) { !teximage_fits(t, get_last_level(t))) {
texture_dirty(t); texture_dirty(t);
relayout_texture(ctx, t); relayout_texture(ctx, t);
@ -502,7 +502,7 @@ nouveau_teximage(struct gl_context *ctx, GLint dims,
texture_dirty(t); texture_dirty(t);
} }
if (level == t->BaseLevel) { if (level == t->Attrib.BaseLevel) {
if (!teximage_fits(t, level)) if (!teximage_fits(t, level))
relayout_texture(ctx, t); relayout_texture(ctx, t);
nouveau_texture_validate(ctx, t); nouveau_texture_validate(ctx, t);

View File

@ -37,7 +37,7 @@ texunit_needs_combiners(struct gl_texture_unit *u,
struct gl_fixedfunc_texture_unit *f) struct gl_fixedfunc_texture_unit *f)
{ {
struct gl_texture_object *t = u->_Current; struct gl_texture_object *t = u->_Current;
struct gl_texture_image *ti = t->Image[0][t->BaseLevel]; struct gl_texture_image *ti = t->Image[0][t->Attrib.BaseLevel];
return ti->TexFormat == MESA_FORMAT_A_UNORM8 || return ti->TexFormat == MESA_FORMAT_A_UNORM8 ||
ti->TexFormat == MESA_FORMAT_L_UNORM8 || ti->TexFormat == MESA_FORMAT_L_UNORM8 ||

View File

@ -139,7 +139,7 @@ get_input_arg(struct combiner_state *rc, int arg, int flags)
int i = (source == GL_TEXTURE ? int i = (source == GL_TEXTURE ?
rc->unit : source - GL_TEXTURE0); rc->unit : source - GL_TEXTURE0);
struct gl_texture_object *t = rc->ctx->Texture.Unit[i]._Current; struct gl_texture_object *t = rc->ctx->Texture.Unit[i]._Current;
mesa_format format = t->Image[0][t->BaseLevel]->TexFormat; mesa_format format = t->Image[0][t->Attrib.BaseLevel]->TexFormat;
if (format == MESA_FORMAT_A_UNORM8) { if (format == MESA_FORMAT_A_UNORM8) {
/* Emulated using I8. */ /* Emulated using I8. */

View File

@ -67,35 +67,35 @@ nv04_emit_tex_obj(struct gl_context *ctx, int emit)
if (ctx->Texture.Unit[i]._Current) { if (ctx->Texture.Unit[i]._Current) {
struct gl_texture_object *t = ctx->Texture.Unit[i]._Current; struct gl_texture_object *t = ctx->Texture.Unit[i]._Current;
struct gl_texture_image *ti = t->Image[0][t->BaseLevel]; struct gl_texture_image *ti = t->Image[0][t->Attrib.BaseLevel];
const struct gl_sampler_object *sa = _mesa_get_samplerobj(ctx, i); const struct gl_sampler_object *sa = _mesa_get_samplerobj(ctx, i);
int lod_max = 1, lod_bias = 0; int lod_max = 1, lod_bias = 0;
if (!nouveau_texture_validate(ctx, t)) if (!nouveau_texture_validate(ctx, t))
return; return;
s = &to_nouveau_texture(t)->surfaces[t->BaseLevel]; s = &to_nouveau_texture(t)->surfaces[t->Attrib.BaseLevel];
if (sa->MinFilter != GL_NEAREST && if (sa->Attrib.MinFilter != GL_NEAREST &&
sa->MinFilter != GL_LINEAR) { sa->Attrib.MinFilter != GL_LINEAR) {
lod_max = CLAMP(MIN2(sa->MaxLod, t->_MaxLambda), lod_max = CLAMP(MIN2(sa->Attrib.MaxLod, t->_MaxLambda),
0, 15) + 1; 0, 15) + 1;
lod_bias = CLAMP(ctx->Texture.Unit[i].LodBias + lod_bias = CLAMP(ctx->Texture.Unit[i].LodBias +
sa->LodBias, -16, 15) * 8; sa->Attrib.LodBias, -16, 15) * 8;
} }
format |= nvgl_wrap_mode(sa->WrapT) << 28 | format |= nvgl_wrap_mode(sa->Attrib.WrapT) << 28 |
nvgl_wrap_mode(sa->WrapS) << 24 | nvgl_wrap_mode(sa->Attrib.WrapS) << 24 |
ti->HeightLog2 << 20 | ti->HeightLog2 << 20 |
ti->WidthLog2 << 16 | ti->WidthLog2 << 16 |
lod_max << 12 | lod_max << 12 |
get_tex_format(ti); get_tex_format(ti);
filter |= log2i(sa->MaxAnisotropy) << 31 | filter |= log2i(sa->Attrib.MaxAnisotropy) << 31 |
nvgl_filter_mode(sa->MagFilter) << 28 | nvgl_filter_mode(sa->Attrib.MagFilter) << 28 |
log2i(sa->MaxAnisotropy) << 27 | log2i(sa->Attrib.MaxAnisotropy) << 27 |
nvgl_filter_mode(sa->MinFilter) << 24 | nvgl_filter_mode(sa->Attrib.MinFilter) << 24 |
(lod_bias & 0xff) << 16; (lod_bias & 0xff) << 16;
} else { } else {

View File

@ -170,7 +170,7 @@ get_input_arg(struct combiner_state *rc, int arg, int flags)
int i = (source == GL_TEXTURE ? int i = (source == GL_TEXTURE ?
rc->unit : source - GL_TEXTURE0); rc->unit : source - GL_TEXTURE0);
struct gl_texture_object *t = rc->ctx->Texture.Unit[i]._Current; struct gl_texture_object *t = rc->ctx->Texture.Unit[i]._Current;
mesa_format format = t->Image[0][t->BaseLevel]->TexFormat; mesa_format format = t->Image[0][t->Attrib.BaseLevel]->TexFormat;
if (format == MESA_FORMAT_A_UNORM8) { if (format == MESA_FORMAT_A_UNORM8) {
/* Emulated using I8. */ /* Emulated using I8. */

View File

@ -173,25 +173,25 @@ nv10_emit_tex_obj(struct gl_context *ctx, int emit)
} }
t = ctx->Texture.Unit[i]._Current; t = ctx->Texture.Unit[i]._Current;
s = &to_nouveau_texture(t)->surfaces[t->BaseLevel]; s = &to_nouveau_texture(t)->surfaces[t->Attrib.BaseLevel];
ti = t->Image[0][t->BaseLevel]; ti = t->Image[0][t->Attrib.BaseLevel];
sa = _mesa_get_samplerobj(ctx, i); sa = _mesa_get_samplerobj(ctx, i);
if (!nouveau_texture_validate(ctx, t)) if (!nouveau_texture_validate(ctx, t))
return; return;
/* Recompute the texturing registers. */ /* Recompute the texturing registers. */
tx_format = nvgl_wrap_mode(sa->WrapT) << 28 tx_format = nvgl_wrap_mode(sa->Attrib.WrapT) << 28
| nvgl_wrap_mode(sa->WrapS) << 24 | nvgl_wrap_mode(sa->Attrib.WrapS) << 24
| ti->HeightLog2 << 20 | ti->HeightLog2 << 20
| ti->WidthLog2 << 16 | ti->WidthLog2 << 16
| 5 << 4 | 1 << 12; | 5 << 4 | 1 << 12;
tx_filter = nvgl_filter_mode(sa->MagFilter) << 28 tx_filter = nvgl_filter_mode(sa->Attrib.MagFilter) << 28
| nvgl_filter_mode(sa->MinFilter) << 24; | nvgl_filter_mode(sa->Attrib.MinFilter) << 24;
tx_enable = NV10_3D_TEX_ENABLE_ENABLE tx_enable = NV10_3D_TEX_ENABLE_ENABLE
| log2i(sa->MaxAnisotropy) << 4; | log2i(sa->Attrib.MaxAnisotropy) << 4;
if (t->Target == GL_TEXTURE_RECTANGLE) { if (t->Target == GL_TEXTURE_RECTANGLE) {
BEGIN_NV04(push, NV10_3D(TEX_NPOT_PITCH(i)), 1); BEGIN_NV04(push, NV10_3D(TEX_NPOT_PITCH(i)), 1);
@ -204,11 +204,11 @@ nv10_emit_tex_obj(struct gl_context *ctx, int emit)
tx_format |= get_tex_format_pot(ti); tx_format |= get_tex_format_pot(ti);
} }
if (sa->MinFilter != GL_NEAREST && if (sa->Attrib.MinFilter != GL_NEAREST &&
sa->MinFilter != GL_LINEAR) { sa->Attrib.MinFilter != GL_LINEAR) {
int lod_min = sa->MinLod; int lod_min = sa->Attrib.MinLod;
int lod_max = MIN2(sa->MaxLod, t->_MaxLambda); int lod_max = MIN2(sa->Attrib.MaxLod, t->_MaxLambda);
int lod_bias = sa->LodBias int lod_bias = sa->Attrib.LodBias
+ ctx->Texture.Unit[i].LodBias; + ctx->Texture.Unit[i].LodBias;
lod_max = CLAMP(lod_max, 0, 15); lod_max = CLAMP(lod_max, 0, 15);

View File

@ -180,8 +180,8 @@ nv20_emit_tex_obj(struct gl_context *ctx, int emit)
} }
t = ctx->Texture.Unit[i]._Current; t = ctx->Texture.Unit[i]._Current;
s = &to_nouveau_texture(t)->surfaces[t->BaseLevel]; s = &to_nouveau_texture(t)->surfaces[t->Attrib.BaseLevel];
ti = t->Image[0][t->BaseLevel]; ti = t->Image[0][t->Attrib.BaseLevel];
sa = _mesa_get_samplerobj(ctx, i); sa = _mesa_get_samplerobj(ctx, i);
if (!nouveau_texture_validate(ctx, t)) if (!nouveau_texture_validate(ctx, t))
@ -199,24 +199,24 @@ nv20_emit_tex_obj(struct gl_context *ctx, int emit)
case GL_TEXTURE_1D: case GL_TEXTURE_1D:
tx_wrap = NV20_3D_TEX_WRAP_R_CLAMP_TO_EDGE tx_wrap = NV20_3D_TEX_WRAP_R_CLAMP_TO_EDGE
| NV20_3D_TEX_WRAP_T_CLAMP_TO_EDGE | NV20_3D_TEX_WRAP_T_CLAMP_TO_EDGE
| nvgl_wrap_mode_nv20(sa->WrapS) << 0; | nvgl_wrap_mode_nv20(sa->Attrib.WrapS) << 0;
break; break;
default: default:
tx_wrap = nvgl_wrap_mode_nv20(sa->WrapR) << 16 tx_wrap = nvgl_wrap_mode_nv20(sa->Attrib.WrapR) << 16
| nvgl_wrap_mode_nv20(sa->WrapT) << 8 | nvgl_wrap_mode_nv20(sa->Attrib.WrapT) << 8
| nvgl_wrap_mode_nv20(sa->WrapS) << 0; | nvgl_wrap_mode_nv20(sa->Attrib.WrapS) << 0;
break; break;
} }
tx_filter = nvgl_filter_mode(sa->MagFilter) << 24 tx_filter = nvgl_filter_mode(sa->Attrib.MagFilter) << 24
| nvgl_filter_mode(sa->MinFilter) << 16 | nvgl_filter_mode(sa->Attrib.MinFilter) << 16
| 2 << 12; | 2 << 12;
r = FLOAT_TO_UBYTE(sa->BorderColor.f[0]); r = FLOAT_TO_UBYTE(sa->Attrib.BorderColor.f[0]);
g = FLOAT_TO_UBYTE(sa->BorderColor.f[1]); g = FLOAT_TO_UBYTE(sa->Attrib.BorderColor.f[1]);
b = FLOAT_TO_UBYTE(sa->BorderColor.f[2]); b = FLOAT_TO_UBYTE(sa->Attrib.BorderColor.f[2]);
a = FLOAT_TO_UBYTE(sa->BorderColor.f[3]); a = FLOAT_TO_UBYTE(sa->Attrib.BorderColor.f[3]);
switch (ti->_BaseFormat) { switch (ti->_BaseFormat) {
case GL_LUMINANCE: case GL_LUMINANCE:
a = 0xff; a = 0xff;
@ -237,7 +237,7 @@ nv20_emit_tex_obj(struct gl_context *ctx, int emit)
tx_bcolor = b << 0 | g << 8 | r << 16 | a << 24; tx_bcolor = b << 0 | g << 8 | r << 16 | a << 24;
tx_enable = NV20_3D_TEX_ENABLE_ENABLE tx_enable = NV20_3D_TEX_ENABLE_ENABLE
| log2i(sa->MaxAnisotropy) << 4; | log2i(sa->Attrib.MaxAnisotropy) << 4;
if (t->Target == GL_TEXTURE_RECTANGLE) { if (t->Target == GL_TEXTURE_RECTANGLE) {
BEGIN_NV04(push, NV20_3D(TEX_NPOT_PITCH(i)), 1); BEGIN_NV04(push, NV20_3D(TEX_NPOT_PITCH(i)), 1);
@ -250,11 +250,11 @@ nv20_emit_tex_obj(struct gl_context *ctx, int emit)
tx_format |= get_tex_format_pot(ti); tx_format |= get_tex_format_pot(ti);
} }
if (sa->MinFilter != GL_NEAREST && if (sa->Attrib.MinFilter != GL_NEAREST &&
sa->MinFilter != GL_LINEAR) { sa->Attrib.MinFilter != GL_LINEAR) {
int lod_min = sa->MinLod; int lod_min = sa->Attrib.MinLod;
int lod_max = MIN2(sa->MaxLod, t->_MaxLambda); int lod_max = MIN2(sa->Attrib.MaxLod, t->_MaxLambda);
int lod_bias = sa->LodBias int lod_bias = sa->Attrib.LodBias
+ ctx->Texture.Unit[i].LodBias; + ctx->Texture.Unit[i].LodBias;
lod_max = CLAMP(lod_max, 0, 15); lod_max = CLAMP(lod_max, 0, 15);

View File

@ -365,10 +365,10 @@ void r200TexUpdateParameters(struct gl_context *ctx, GLuint unit)
struct gl_sampler_object *samp = _mesa_get_samplerobj(ctx, unit); struct gl_sampler_object *samp = _mesa_get_samplerobj(ctx, unit);
radeonTexObj* t = radeon_tex_obj(ctx->Texture.Unit[unit]._Current); radeonTexObj* t = radeon_tex_obj(ctx->Texture.Unit[unit]._Current);
r200SetTexMaxAnisotropy(t , samp->MaxAnisotropy); r200SetTexMaxAnisotropy(t , samp->Attrib.MaxAnisotropy);
r200SetTexFilter(t, samp->MinFilter, samp->MagFilter); r200SetTexFilter(t, samp->Attrib.MinFilter, samp->Attrib.MagFilter);
r200SetTexWrap(t, samp->WrapS, samp->WrapT, samp->WrapR); r200SetTexWrap(t, samp->Attrib.WrapS, samp->Attrib.WrapT, samp->Attrib.WrapR);
r200SetTexBorderColor(t, samp->BorderColor.f); r200SetTexBorderColor(t, samp->Attrib.BorderColor.f);
} }
/** /**
@ -476,13 +476,13 @@ static struct gl_texture_object *r200NewTextureObject(struct gl_context * ctx,
_mesa_enum_to_string(target), t); _mesa_enum_to_string(target), t);
_mesa_initialize_texture_object(ctx, &t->base, name, target); _mesa_initialize_texture_object(ctx, &t->base, name, target);
t->base.Sampler.MaxAnisotropy = rmesa->radeon.initialMaxAnisotropy; t->base.Sampler.Attrib.MaxAnisotropy = rmesa->radeon.initialMaxAnisotropy;
/* Initialize hardware state */ /* Initialize hardware state */
r200SetTexWrap( t, t->base.Sampler.WrapS, t->base.Sampler.WrapT, t->base.Sampler.WrapR ); r200SetTexWrap( t, t->base.Sampler.Attrib.WrapS, t->base.Sampler.Attrib.WrapT, t->base.Sampler.Attrib.WrapR );
r200SetTexMaxAnisotropy( t, t->base.Sampler.MaxAnisotropy ); r200SetTexMaxAnisotropy( t, t->base.Sampler.Attrib.MaxAnisotropy );
r200SetTexFilter(t, t->base.Sampler.MinFilter, t->base.Sampler.MagFilter); r200SetTexFilter(t, t->base.Sampler.Attrib.MinFilter, t->base.Sampler.Attrib.MagFilter);
r200SetTexBorderColor(t, t->base.Sampler.BorderColor.f); r200SetTexBorderColor(t, t->base.Sampler.Attrib.BorderColor.f);
return &t->base; return &t->base;
} }
@ -493,7 +493,7 @@ r200NewSamplerObject(struct gl_context *ctx, GLuint name)
r200ContextPtr rmesa = R200_CONTEXT(ctx); r200ContextPtr rmesa = R200_CONTEXT(ctx);
struct gl_sampler_object *samp = _mesa_new_sampler_object(ctx, name); struct gl_sampler_object *samp = _mesa_new_sampler_object(ctx, name);
if (samp) if (samp)
samp->MaxAnisotropy = rmesa->radeon.initialMaxAnisotropy; samp->Attrib.MaxAnisotropy = rmesa->radeon.initialMaxAnisotropy;
return samp; return samp;
} }

View File

@ -251,16 +251,16 @@ static void calculate_min_max_lod(struct gl_sampler_object *samp, struct gl_text
case GL_TEXTURE_2D: case GL_TEXTURE_2D:
case GL_TEXTURE_3D: case GL_TEXTURE_3D:
case GL_TEXTURE_CUBE_MAP: case GL_TEXTURE_CUBE_MAP:
if (samp->MinFilter == GL_NEAREST || samp->MinFilter == GL_LINEAR) { if (samp->Attrib.MinFilter == GL_NEAREST || samp->Attrib.MinFilter == GL_LINEAR) {
/* GL_NEAREST and GL_LINEAR only care about GL_TEXTURE_BASE_LEVEL. /* GL_NEAREST and GL_LINEAR only care about GL_TEXTURE_BASE_LEVEL.
*/ */
minLod = maxLod = tObj->BaseLevel; minLod = maxLod = tObj->Attrib.BaseLevel;
} else { } else {
minLod = tObj->BaseLevel + (GLint)(samp->MinLod); minLod = tObj->Attrib.BaseLevel + (GLint)(samp->Attrib.MinLod);
minLod = MAX2(minLod, tObj->BaseLevel); minLod = MAX2(minLod, tObj->Attrib.BaseLevel);
minLod = MIN2(minLod, tObj->MaxLevel); minLod = MIN2(minLod, tObj->Attrib.MaxLevel);
maxLod = tObj->BaseLevel + (GLint)(samp->MaxLod + 0.5); maxLod = tObj->Attrib.BaseLevel + (GLint)(samp->Attrib.MaxLod + 0.5);
maxLod = MIN2(maxLod, tObj->MaxLevel); maxLod = MIN2(maxLod, tObj->Attrib.MaxLevel);
maxLod = MIN2(maxLod, tObj->Image[0][minLod]->MaxNumLevels - 1 + minLod); maxLod = MIN2(maxLod, tObj->Image[0][minLod]->MaxNumLevels - 1 + minLod);
maxLod = MAX2(maxLod, minLod); /* need at least one level */ maxLod = MAX2(maxLod, minLod); /* need at least one level */
} }
@ -315,12 +315,12 @@ static GLboolean radeon_miptree_matches_texture(radeon_mipmap_tree *mt, struct g
unsigned numLevels; unsigned numLevels;
radeon_mipmap_level *mtBaseLevel; radeon_mipmap_level *mtBaseLevel;
if (texObj->BaseLevel < mt->baseLevel) if (texObj->Attrib.BaseLevel < mt->baseLevel)
return GL_FALSE; return GL_FALSE;
mtBaseLevel = &mt->levels[texObj->BaseLevel - mt->baseLevel]; mtBaseLevel = &mt->levels[texObj->Attrib.BaseLevel - mt->baseLevel];
firstImage = texObj->Image[0][texObj->BaseLevel]; firstImage = texObj->Image[0][texObj->Attrib.BaseLevel];
numLevels = MIN2(texObj->_MaxLevel - texObj->BaseLevel + 1, firstImage->MaxNumLevels); numLevels = MIN2(texObj->_MaxLevel - texObj->Attrib.BaseLevel + 1, firstImage->MaxNumLevels);
if (radeon_is_debug_enabled(RADEON_TEXTURE,RADEON_TRACE)) { if (radeon_is_debug_enabled(RADEON_TEXTURE,RADEON_TRACE)) {
fprintf(stderr, "Checking if miptree %p matches texObj %p\n", mt, texObj); fprintf(stderr, "Checking if miptree %p matches texObj %p\n", mt, texObj);
@ -358,7 +358,7 @@ static GLboolean radeon_miptree_matches_texture(radeon_mipmap_tree *mt, struct g
void radeon_try_alloc_miptree(radeonContextPtr rmesa, radeonTexObj *t) void radeon_try_alloc_miptree(radeonContextPtr rmesa, radeonTexObj *t)
{ {
struct gl_texture_object *texObj = &t->base; struct gl_texture_object *texObj = &t->base;
struct gl_texture_image *texImg = texObj->Image[0][texObj->BaseLevel]; struct gl_texture_image *texImg = texObj->Image[0][texObj->Attrib.BaseLevel];
GLuint numLevels; GLuint numLevels;
assert(!t->mt); assert(!t->mt);
@ -369,10 +369,10 @@ void radeon_try_alloc_miptree(radeonContextPtr rmesa, radeonTexObj *t)
} }
numLevels = MIN2(texObj->MaxLevel - texObj->BaseLevel + 1, texImg->MaxNumLevels); numLevels = MIN2(texObj->Attrib.MaxLevel - texObj->Attrib.BaseLevel + 1, texImg->MaxNumLevels);
t->mt = radeon_miptree_create(rmesa, t->base.Target, t->mt = radeon_miptree_create(rmesa, t->base.Target,
texImg->TexFormat, texObj->BaseLevel, texImg->TexFormat, texObj->Attrib.BaseLevel,
numLevels, texImg->Width, texImg->Height, numLevels, texImg->Width, texImg->Height,
texImg->Depth, t->tile_bits); texImg->Depth, t->tile_bits);
} }
@ -524,7 +524,7 @@ int radeon_validate_texture_miptree(struct gl_context * ctx,
"%s: Validating texture %p now, minLod = %d, maxLod = %d\n", "%s: Validating texture %p now, minLod = %d, maxLod = %d\n",
__func__, texObj ,t->minLod, t->maxLod); __func__, texObj ,t->minLod, t->maxLod);
dst_miptree = get_biggest_matching_miptree(t, t->base.BaseLevel, t->base._MaxLevel); dst_miptree = get_biggest_matching_miptree(t, t->base.Attrib.BaseLevel, t->base._MaxLevel);
radeon_miptree_unreference(&t->mt); radeon_miptree_unreference(&t->mt);
if (!dst_miptree) { if (!dst_miptree) {

View File

@ -315,10 +315,10 @@ void radeonTexUpdateParameters(struct gl_context *ctx, GLuint unit)
struct gl_sampler_object *samp = _mesa_get_samplerobj(ctx, unit); struct gl_sampler_object *samp = _mesa_get_samplerobj(ctx, unit);
radeonTexObj* t = radeon_tex_obj(ctx->Texture.Unit[unit]._Current); radeonTexObj* t = radeon_tex_obj(ctx->Texture.Unit[unit]._Current);
radeonSetTexMaxAnisotropy(t , samp->MaxAnisotropy); radeonSetTexMaxAnisotropy(t , samp->Attrib.MaxAnisotropy);
radeonSetTexFilter(t, samp->MinFilter, samp->MagFilter); radeonSetTexFilter(t, samp->Attrib.MinFilter, samp->Attrib.MagFilter);
radeonSetTexWrap(t, samp->WrapS, samp->WrapT); radeonSetTexWrap(t, samp->Attrib.WrapS, samp->Attrib.WrapT);
radeonSetTexBorderColor(t, samp->BorderColor.f); radeonSetTexBorderColor(t, samp->Attrib.BorderColor.f);
} }
@ -410,7 +410,7 @@ radeonNewTextureObject( struct gl_context *ctx, GLuint name, GLenum target )
radeonTexObj* t = CALLOC_STRUCT(radeon_tex_obj); radeonTexObj* t = CALLOC_STRUCT(radeon_tex_obj);
_mesa_initialize_texture_object(ctx, &t->base, name, target); _mesa_initialize_texture_object(ctx, &t->base, name, target);
t->base.Sampler.MaxAnisotropy = rmesa->radeon.initialMaxAnisotropy; t->base.Sampler.Attrib.MaxAnisotropy = rmesa->radeon.initialMaxAnisotropy;
t->border_fallback = GL_FALSE; t->border_fallback = GL_FALSE;
@ -418,10 +418,10 @@ radeonNewTextureObject( struct gl_context *ctx, GLuint name, GLenum target )
t->pp_txformat = (RADEON_TXFORMAT_ENDIAN_NO_SWAP | t->pp_txformat = (RADEON_TXFORMAT_ENDIAN_NO_SWAP |
RADEON_TXFORMAT_PERSPECTIVE_ENABLE); RADEON_TXFORMAT_PERSPECTIVE_ENABLE);
radeonSetTexWrap( t, t->base.Sampler.WrapS, t->base.Sampler.WrapT ); radeonSetTexWrap( t, t->base.Sampler.Attrib.WrapS, t->base.Sampler.Attrib.WrapT );
radeonSetTexMaxAnisotropy( t, t->base.Sampler.MaxAnisotropy ); radeonSetTexMaxAnisotropy( t, t->base.Sampler.Attrib.MaxAnisotropy );
radeonSetTexFilter( t, t->base.Sampler.MinFilter, t->base.Sampler.MagFilter ); radeonSetTexFilter( t, t->base.Sampler.Attrib.MinFilter, t->base.Sampler.Attrib.MagFilter );
radeonSetTexBorderColor( t, t->base.Sampler.BorderColor.f ); radeonSetTexBorderColor( t, t->base.Sampler.Attrib.BorderColor.f );
return &t->base; return &t->base;
} }
@ -432,7 +432,7 @@ radeonNewSamplerObject(struct gl_context *ctx, GLuint name)
r100ContextPtr rmesa = R100_CONTEXT(ctx); r100ContextPtr rmesa = R100_CONTEXT(ctx);
struct gl_sampler_object *samp = _mesa_new_sampler_object(ctx, name); struct gl_sampler_object *samp = _mesa_new_sampler_object(ctx, name);
if (samp) if (samp)
samp->MaxAnisotropy = rmesa->radeon.initialMaxAnisotropy; samp->Attrib.MaxAnisotropy = rmesa->radeon.initialMaxAnisotropy;
return samp; return samp;
} }

View File

@ -201,7 +201,7 @@ do { \
static GLenum static GLenum
texture_base_format(const struct gl_texture_object *t) texture_base_format(const struct gl_texture_object *t)
{ {
return t->Image[0][t->BaseLevel]->_BaseFormat; return t->Image[0][t->Attrib.BaseLevel]->_BaseFormat;
} }
static GLboolean radeonUpdateTextureEnv( struct gl_context *ctx, int unit ) static GLboolean radeonUpdateTextureEnv( struct gl_context *ctx, int unit )

View File

@ -651,7 +651,7 @@ static radeon_mipmap_tree *radeon_miptree_create_for_teximage(radeonContextPtr r
height = texImage->Height; height = texImage->Height;
depth = texImage->Depth; depth = texImage->Depth;
if (texImage->Level > texObj->BaseLevel && if (texImage->Level > texObj->Attrib.BaseLevel &&
(width == 1 || (width == 1 ||
(texObj->Target != GL_TEXTURE_1D && height == 1) || (texObj->Target != GL_TEXTURE_1D && height == 1) ||
(texObj->Target == GL_TEXTURE_3D && depth == 1))) { (texObj->Target == GL_TEXTURE_3D && depth == 1))) {
@ -663,10 +663,10 @@ static radeon_mipmap_tree *radeon_miptree_create_for_teximage(radeonContextPtr r
firstLevel = texImage->Level; firstLevel = texImage->Level;
lastLevel = texImage->Level; lastLevel = texImage->Level;
} else { } else {
if (texImage->Level < texObj->BaseLevel) if (texImage->Level < texObj->Attrib.BaseLevel)
firstLevel = 0; firstLevel = 0;
else else
firstLevel = texObj->BaseLevel; firstLevel = texObj->Attrib.BaseLevel;
for (i = texImage->Level; i > firstLevel; i--) { for (i = texImage->Level; i > firstLevel; i--) {
width <<= 1; width <<= 1;
@ -675,8 +675,8 @@ static radeon_mipmap_tree *radeon_miptree_create_for_teximage(radeonContextPtr r
if (depth != 1) if (depth != 1)
depth <<= 1; depth <<= 1;
} }
if ((texObj->Sampler.MinFilter == GL_NEAREST || if ((texObj->Sampler.Attrib.MinFilter == GL_NEAREST ||
texObj->Sampler.MinFilter == GL_LINEAR) && texObj->Sampler.Attrib.MinFilter == GL_LINEAR) &&
texImage->Level == firstLevel) { texImage->Level == firstLevel) {
lastLevel = firstLevel; lastLevel = firstLevel;
} else { } else {

View File

@ -602,31 +602,31 @@ pop_texture_group(struct gl_context *ctx, struct gl_texture_attrib_node *texstat
samp = &obj->Sampler; samp = &obj->Sampler;
_mesa_TexParameterfv(target, GL_TEXTURE_BORDER_COLOR, samp->BorderColor.f); _mesa_TexParameterfv(target, GL_TEXTURE_BORDER_COLOR, samp->Attrib.BorderColor.f);
_mesa_TexParameteri(target, GL_TEXTURE_WRAP_S, samp->WrapS); _mesa_TexParameteri(target, GL_TEXTURE_WRAP_S, samp->Attrib.WrapS);
_mesa_TexParameteri(target, GL_TEXTURE_WRAP_T, samp->WrapT); _mesa_TexParameteri(target, GL_TEXTURE_WRAP_T, samp->Attrib.WrapT);
_mesa_TexParameteri(target, GL_TEXTURE_WRAP_R, samp->WrapR); _mesa_TexParameteri(target, GL_TEXTURE_WRAP_R, samp->Attrib.WrapR);
_mesa_TexParameteri(target, GL_TEXTURE_MIN_FILTER, samp->MinFilter); _mesa_TexParameteri(target, GL_TEXTURE_MIN_FILTER, samp->Attrib.MinFilter);
_mesa_TexParameteri(target, GL_TEXTURE_MAG_FILTER, samp->MagFilter); _mesa_TexParameteri(target, GL_TEXTURE_MAG_FILTER, samp->Attrib.MagFilter);
_mesa_TexParameterf(target, GL_TEXTURE_MIN_LOD, samp->MinLod); _mesa_TexParameterf(target, GL_TEXTURE_MIN_LOD, samp->Attrib.MinLod);
_mesa_TexParameterf(target, GL_TEXTURE_MAX_LOD, samp->MaxLod); _mesa_TexParameterf(target, GL_TEXTURE_MAX_LOD, samp->Attrib.MaxLod);
_mesa_TexParameterf(target, GL_TEXTURE_LOD_BIAS, samp->LodBias); _mesa_TexParameterf(target, GL_TEXTURE_LOD_BIAS, samp->Attrib.LodBias);
_mesa_TexParameterf(target, GL_TEXTURE_PRIORITY, obj->Priority); _mesa_TexParameterf(target, GL_TEXTURE_PRIORITY, obj->Attrib.Priority);
_mesa_TexParameteri(target, GL_TEXTURE_BASE_LEVEL, obj->BaseLevel); _mesa_TexParameteri(target, GL_TEXTURE_BASE_LEVEL, obj->Attrib.BaseLevel);
if (target != GL_TEXTURE_RECTANGLE_ARB) if (target != GL_TEXTURE_RECTANGLE_ARB)
_mesa_TexParameteri(target, GL_TEXTURE_MAX_LEVEL, obj->MaxLevel); _mesa_TexParameteri(target, GL_TEXTURE_MAX_LEVEL, obj->Attrib.MaxLevel);
if (ctx->Extensions.EXT_texture_filter_anisotropic) { if (ctx->Extensions.EXT_texture_filter_anisotropic) {
_mesa_TexParameterf(target, GL_TEXTURE_MAX_ANISOTROPY_EXT, _mesa_TexParameterf(target, GL_TEXTURE_MAX_ANISOTROPY_EXT,
samp->MaxAnisotropy); samp->Attrib.MaxAnisotropy);
} }
if (ctx->Extensions.ARB_shadow) { if (ctx->Extensions.ARB_shadow) {
_mesa_TexParameteri(target, GL_TEXTURE_COMPARE_MODE, _mesa_TexParameteri(target, GL_TEXTURE_COMPARE_MODE,
samp->CompareMode); samp->Attrib.CompareMode);
_mesa_TexParameteri(target, GL_TEXTURE_COMPARE_FUNC, _mesa_TexParameteri(target, GL_TEXTURE_COMPARE_FUNC,
samp->CompareFunc); samp->Attrib.CompareFunc);
} }
if (ctx->Extensions.ARB_depth_texture) if (ctx->Extensions.ARB_depth_texture)
_mesa_TexParameteri(target, GL_DEPTH_TEXTURE_MODE, obj->DepthMode); _mesa_TexParameteri(target, GL_DEPTH_TEXTURE_MODE, obj->Attrib.DepthMode);
} }
/* remove saved references to the texture objects */ /* remove saved references to the texture objects */

View File

@ -998,9 +998,9 @@ build_bitmap_atlas(struct gl_context *ctx, struct gl_bitmap_atlas *atlas,
goto out_of_memory; goto out_of_memory;
} }
atlas->texObj->Sampler.MinFilter = GL_NEAREST; atlas->texObj->Sampler.Attrib.MinFilter = GL_NEAREST;
atlas->texObj->Sampler.MagFilter = GL_NEAREST; atlas->texObj->Sampler.Attrib.MagFilter = GL_NEAREST;
atlas->texObj->MaxLevel = 0; atlas->texObj->Attrib.MaxLevel = 0;
atlas->texObj->Immutable = GL_TRUE; atlas->texObj->Immutable = GL_TRUE;
atlas->texImage = _mesa_get_tex_image(ctx, atlas->texObj, atlas->texImage = _mesa_get_tex_image(ctx, atlas->texObj,

View File

@ -286,7 +286,7 @@ static GLuint make_state_key( struct gl_context *ctx, struct state_key *key )
key->unit[i].source_index = texObj->TargetIndex; key->unit[i].source_index = texObj->TargetIndex;
const struct gl_sampler_object *samp = _mesa_get_samplerobj(ctx, i); const struct gl_sampler_object *samp = _mesa_get_samplerobj(ctx, i);
if (samp->CompareMode == GL_COMPARE_R_TO_TEXTURE) { if (samp->Attrib.CompareMode == GL_COMPARE_R_TO_TEXTURE) {
const GLenum format = _mesa_texture_base_format(texObj); const GLenum format = _mesa_texture_base_format(texObj);
key->unit[i].shadow = (format == GL_DEPTH_COMPONENT || key->unit[i].shadow = (format == GL_DEPTH_COMPONENT ||
format == GL_DEPTH_STENCIL_EXT); format == GL_DEPTH_STENCIL_EXT);

View File

@ -117,7 +117,7 @@ generate_texture_mipmap(struct gl_context *ctx,
FLUSH_VERTICES(ctx, 0); FLUSH_VERTICES(ctx, 0);
if (texObj->BaseLevel >= texObj->MaxLevel) { if (texObj->Attrib.BaseLevel >= texObj->Attrib.MaxLevel) {
/* nothing to do */ /* nothing to do */
return; return;
} }
@ -131,7 +131,7 @@ generate_texture_mipmap(struct gl_context *ctx,
_mesa_lock_texture(ctx, texObj); _mesa_lock_texture(ctx, texObj);
srcImage = _mesa_select_tex_image(texObj, target, texObj->BaseLevel); srcImage = _mesa_select_tex_image(texObj, target, texObj->Attrib.BaseLevel);
if (caller) { if (caller) {
if (!srcImage) { if (!srcImage) {
_mesa_unlock_texture(ctx, texObj); _mesa_unlock_texture(ctx, texObj);

View File

@ -57,10 +57,10 @@ _mesa_compute_num_levels(struct gl_context *ctx,
const struct gl_texture_image *baseImage; const struct gl_texture_image *baseImage;
GLuint numLevels; GLuint numLevels;
baseImage = _mesa_get_tex_image(ctx, texObj, target, texObj->BaseLevel); baseImage = _mesa_get_tex_image(ctx, texObj, target, texObj->Attrib.BaseLevel);
numLevels = texObj->BaseLevel + baseImage->MaxNumLevels; numLevels = texObj->Attrib.BaseLevel + baseImage->MaxNumLevels;
numLevels = MIN2(numLevels, (GLuint) texObj->MaxLevel + 1); numLevels = MIN2(numLevels, (GLuint) texObj->Attrib.MaxLevel + 1);
if (texObj->Immutable) if (texObj->Immutable)
numLevels = MIN2(numLevels, texObj->NumLevels); numLevels = MIN2(numLevels, texObj->NumLevels);
assert(numLevels >= 1); assert(numLevels >= 1);
@ -1954,7 +1954,7 @@ generate_mipmap_uncompressed(struct gl_context *ctx, GLenum target,
_mesa_uncompressed_format_to_type_and_comps(srcImage->TexFormat, &datatype, &comps); _mesa_uncompressed_format_to_type_and_comps(srcImage->TexFormat, &datatype, &comps);
for (level = texObj->BaseLevel; level < maxLevel; level++) { for (level = texObj->Attrib.BaseLevel; level < maxLevel; level++) {
/* generate image[level+1] from image[level] */ /* generate image[level+1] from image[level] */
struct gl_texture_image *srcImage, *dstImage; struct gl_texture_image *srcImage, *dstImage;
GLint srcRowStride, dstRowStride; GLint srcRowStride, dstRowStride;
@ -2130,7 +2130,7 @@ generate_mipmap_compressed(struct gl_context *ctx, GLenum target,
ctx->Pack = ctx->DefaultPacking; ctx->Pack = ctx->DefaultPacking;
/* Get the uncompressed image */ /* Get the uncompressed image */
assert(srcImage->Level == texObj->BaseLevel); assert(srcImage->Level == texObj->Attrib.BaseLevel);
ctx->Driver.GetTexSubImage(ctx, ctx->Driver.GetTexSubImage(ctx,
0, 0, 0, 0, 0, 0,
srcImage->Width, srcImage->Height, srcImage->Width, srcImage->Height,
@ -2141,7 +2141,7 @@ generate_mipmap_compressed(struct gl_context *ctx, GLenum target,
ctx->Pack = save; ctx->Pack = save;
} }
for (level = texObj->BaseLevel; level < maxLevel; level++) { for (level = texObj->Attrib.BaseLevel; level < maxLevel; level++) {
/* generate image[level+1] from image[level] */ /* generate image[level+1] from image[level] */
const struct gl_texture_image *srcImage; const struct gl_texture_image *srcImage;
struct gl_texture_image *dstImage; struct gl_texture_image *dstImage;
@ -2237,15 +2237,15 @@ _mesa_generate_mipmap(struct gl_context *ctx, GLenum target,
GLint maxLevel; GLint maxLevel;
assert(texObj); assert(texObj);
srcImage = _mesa_select_tex_image(texObj, target, texObj->BaseLevel); srcImage = _mesa_select_tex_image(texObj, target, texObj->Attrib.BaseLevel);
assert(srcImage); assert(srcImage);
maxLevel = _mesa_max_texture_levels(ctx, texObj->Target) - 1; maxLevel = _mesa_max_texture_levels(ctx, texObj->Target) - 1;
assert(maxLevel >= 0); /* bad target */ assert(maxLevel >= 0); /* bad target */
maxLevel = MIN2(maxLevel, texObj->MaxLevel); maxLevel = MIN2(maxLevel, texObj->Attrib.MaxLevel);
_mesa_prepare_mipmap_levels(ctx, texObj, texObj->BaseLevel, maxLevel); _mesa_prepare_mipmap_levels(ctx, texObj, texObj->Attrib.BaseLevel, maxLevel);
if (_mesa_is_format_compressed(srcImage->TexFormat)) { if (_mesa_is_format_compressed(srcImage->TexFormat)) {
generate_mipmap_compressed(ctx, target, texObj, srcImage, maxLevel); generate_mipmap_compressed(ctx, target, texObj, srcImage, maxLevel);

View File

@ -933,6 +933,47 @@ typedef enum
MAX_FACES = 6 MAX_FACES = 6
} gl_face_index; } gl_face_index;
/**
* Sampler state saved and restore by glPush/PopAttrib.
*
* Don't put fields here that glPushAttrib shouldn't save.
* E.g. no GLES fields because GLES doesn't have glPushAttrib.
*/
struct gl_sampler_attrib
{
GLenum16 WrapS; /**< S-axis texture image wrap mode */
GLenum16 WrapT; /**< T-axis texture image wrap mode */
GLenum16 WrapR; /**< R-axis texture image wrap mode */
GLenum16 MinFilter; /**< minification filter */
GLenum16 MagFilter; /**< magnification filter */
GLenum16 sRGBDecode; /**< GL_DECODE_EXT or GL_SKIP_DECODE_EXT */
union gl_color_union BorderColor; /**< Interpreted according to texture format */
GLfloat MinLod; /**< min lambda, OpenGL 1.2 */
GLfloat MaxLod; /**< max lambda, OpenGL 1.2 */
GLfloat LodBias; /**< OpenGL 1.4 */
GLfloat MaxAnisotropy; /**< GL_EXT_texture_filter_anisotropic */
GLenum16 CompareMode; /**< GL_ARB_shadow */
GLenum16 CompareFunc; /**< GL_ARB_shadow */
GLboolean CubeMapSeamless; /**< GL_AMD_seamless_cubemap_per_texture */
};
/**
* Texture state saved and restored by glPush/PopAttrib.
*
* Don't put fields here that glPushAttrib shouldn't save.
* E.g. no GLES fields because GLES doesn't have glPushAttrib.
*/
struct gl_texture_object_attrib
{
GLfloat Priority; /**< in [0,1] */
GLint BaseLevel; /**< min mipmap level, OpenGL 1.2 */
GLint MaxLevel; /**< max mipmap level (max=1000), OpenGL 1.2 */
GLenum Swizzle[4]; /**< GL_EXT_texture_swizzle */
GLushort _Swizzle; /**< same as Swizzle, but SWIZZLE_* format */
GLenum16 DepthMode; /**< GL_ARB_depth_texture */
bool StencilSampling; /**< Should we sample stencil instead of depth? */
GLboolean GenerateMipmap; /**< GL_SGIS_generate_mipmap */
};
/** /**
* Sampler object state. These objects are new with GL_ARB_sampler_objects * Sampler object state. These objects are new with GL_ARB_sampler_objects
@ -945,20 +986,7 @@ struct gl_sampler_object
GLchar *Label; /**< GL_KHR_debug */ GLchar *Label; /**< GL_KHR_debug */
GLint RefCount; GLint RefCount;
GLenum16 WrapS; /**< S-axis texture image wrap mode */ struct gl_sampler_attrib Attrib; /**< State saved by glPushAttrib */
GLenum16 WrapT; /**< T-axis texture image wrap mode */
GLenum16 WrapR; /**< R-axis texture image wrap mode */
GLenum16 MinFilter; /**< minification filter */
GLenum16 MagFilter; /**< magnification filter */
GLenum16 sRGBDecode; /**< GL_DECODE_EXT or GL_SKIP_DECODE_EXT */
union gl_color_union BorderColor; /**< Interpreted according to texture format */
GLfloat MinLod; /**< min lambda, OpenGL 1.2 */
GLfloat MaxLod; /**< max lambda, OpenGL 1.2 */
GLfloat LodBias; /**< OpenGL 1.4 */
GLfloat MaxAnisotropy; /**< GL_EXT_texture_filter_anisotropic */
GLenum16 CompareMode; /**< GL_ARB_shadow */
GLenum16 CompareFunc; /**< GL_ARB_shadow */
GLboolean CubeMapSeamless; /**< GL_AMD_seamless_cubemap_per_texture */
/** GL_ARB_bindless_texture */ /** GL_ARB_bindless_texture */
bool HandleAllocated; bool HandleAllocated;
@ -976,23 +1004,17 @@ struct gl_texture_object
GLint RefCount; /**< reference count */ GLint RefCount; /**< reference count */
GLuint Name; /**< the user-visible texture object ID */ GLuint Name; /**< the user-visible texture object ID */
GLenum16 Target; /**< GL_TEXTURE_1D, GL_TEXTURE_2D, etc. */ GLenum16 Target; /**< GL_TEXTURE_1D, GL_TEXTURE_2D, etc. */
GLenum16 DepthMode; /**< GL_ARB_depth_texture */
GLchar *Label; /**< GL_KHR_debug */ GLchar *Label; /**< GL_KHR_debug */
struct gl_sampler_object Sampler; struct gl_sampler_object Sampler;
struct gl_texture_object_attrib Attrib; /**< State saved by glPushAttrib */
gl_texture_index TargetIndex; /**< The gl_texture_unit::CurrentTex index. gl_texture_index TargetIndex; /**< The gl_texture_unit::CurrentTex index.
Only valid when Target is valid. */ Only valid when Target is valid. */
GLfloat Priority; /**< in [0,1] */
GLint MaxLevel; /**< max mipmap level (max=1000), OpenGL 1.2 */
GLint BaseLevel; /**< min mipmap level, OpenGL 1.2 */
GLbyte _MaxLevel; /**< actual max mipmap level (q in the spec) */ GLbyte _MaxLevel; /**< actual max mipmap level (q in the spec) */
GLfloat _MaxLambda; /**< = _MaxLevel - BaseLevel (q - p in spec) */ GLfloat _MaxLambda; /**< = _MaxLevel - BaseLevel (q - p in spec) */
GLint CropRect[4]; /**< GL_OES_draw_texture */ GLint CropRect[4]; /**< GL_OES_draw_texture */
GLenum Swizzle[4]; /**< GL_EXT_texture_swizzle */
GLushort _Swizzle; /**< same as Swizzle, but SWIZZLE_* format */
GLbyte ImmutableLevels; /**< ES 3.0 / ARB_texture_view */ GLbyte ImmutableLevels; /**< ES 3.0 / ARB_texture_view */
GLboolean GenerateMipmap; /**< GL_SGIS_generate_mipmap */
GLboolean _BaseComplete; /**< Is the base texture level valid? */ GLboolean _BaseComplete; /**< Is the base texture level valid? */
GLboolean _MipmapComplete; /**< Is the whole mipmap valid? */ GLboolean _MipmapComplete; /**< Is the whole mipmap valid? */
GLboolean _IsIntegerFormat; /**< Does the texture store integer values? */ GLboolean _IsIntegerFormat; /**< Does the texture store integer values? */
@ -1002,7 +1024,6 @@ struct gl_texture_object
GLboolean Immutable; /**< GL_ARB_texture_storage */ GLboolean Immutable; /**< GL_ARB_texture_storage */
GLboolean _IsFloat; /**< GL_OES_float_texture */ GLboolean _IsFloat; /**< GL_OES_float_texture */
GLboolean _IsHalfFloat; /**< GL_OES_half_float_texture */ GLboolean _IsHalfFloat; /**< GL_OES_half_float_texture */
bool StencilSampling; /**< Should we sample stencil instead of depth? */
bool HandleAllocated; /**< GL_ARB_bindless_texture */ bool HandleAllocated; /**< GL_ARB_bindless_texture */
/** GL_OES_EGL_image_external */ /** GL_OES_EGL_image_external */

View File

@ -117,23 +117,23 @@ _mesa_init_sampler_object(struct gl_sampler_object *sampObj, GLuint name)
simple_mtx_init(&sampObj->Mutex, mtx_plain); simple_mtx_init(&sampObj->Mutex, mtx_plain);
sampObj->Name = name; sampObj->Name = name;
sampObj->RefCount = 1; sampObj->RefCount = 1;
sampObj->WrapS = GL_REPEAT; sampObj->Attrib.WrapS = GL_REPEAT;
sampObj->WrapT = GL_REPEAT; sampObj->Attrib.WrapT = GL_REPEAT;
sampObj->WrapR = GL_REPEAT; sampObj->Attrib.WrapR = GL_REPEAT;
sampObj->MinFilter = GL_NEAREST_MIPMAP_LINEAR; sampObj->Attrib.MinFilter = GL_NEAREST_MIPMAP_LINEAR;
sampObj->MagFilter = GL_LINEAR; sampObj->Attrib.MagFilter = GL_LINEAR;
sampObj->BorderColor.f[0] = 0.0; sampObj->Attrib.BorderColor.f[0] = 0.0;
sampObj->BorderColor.f[1] = 0.0; sampObj->Attrib.BorderColor.f[1] = 0.0;
sampObj->BorderColor.f[2] = 0.0; sampObj->Attrib.BorderColor.f[2] = 0.0;
sampObj->BorderColor.f[3] = 0.0; sampObj->Attrib.BorderColor.f[3] = 0.0;
sampObj->MinLod = -1000.0F; sampObj->Attrib.MinLod = -1000.0F;
sampObj->MaxLod = 1000.0F; sampObj->Attrib.MaxLod = 1000.0F;
sampObj->LodBias = 0.0F; sampObj->Attrib.LodBias = 0.0F;
sampObj->MaxAnisotropy = 1.0F; sampObj->Attrib.MaxAnisotropy = 1.0F;
sampObj->CompareMode = GL_NONE; sampObj->Attrib.CompareMode = GL_NONE;
sampObj->CompareFunc = GL_LEQUAL; sampObj->Attrib.CompareFunc = GL_LEQUAL;
sampObj->sRGBDecode = GL_DECODE_EXT; sampObj->Attrib.sRGBDecode = GL_DECODE_EXT;
sampObj->CubeMapSeamless = GL_FALSE; sampObj->Attrib.CubeMapSeamless = GL_FALSE;
sampObj->HandleAllocated = GL_FALSE; sampObj->HandleAllocated = GL_FALSE;
/* GL_ARB_bindless_texture */ /* GL_ARB_bindless_texture */
@ -521,13 +521,13 @@ _mesa_set_sampler_wrap(struct gl_context *ctx, struct gl_sampler_object *samp,
assert(validate_texture_wrap_mode(ctx, t)); assert(validate_texture_wrap_mode(ctx, t));
assert(validate_texture_wrap_mode(ctx, r)); assert(validate_texture_wrap_mode(ctx, r));
if (samp->WrapS == s && samp->WrapT == t && samp->WrapR == r) if (samp->Attrib.WrapS == s && samp->Attrib.WrapT == t && samp->Attrib.WrapR == r)
return; return;
flush(ctx); flush(ctx);
samp->WrapS = s; samp->Attrib.WrapS = s;
samp->WrapT = t; samp->Attrib.WrapT = t;
samp->WrapR = r; samp->Attrib.WrapR = r;
} }
#define INVALID_PARAM 0x100 #define INVALID_PARAM 0x100
@ -538,11 +538,11 @@ static GLuint
set_sampler_wrap_s(struct gl_context *ctx, struct gl_sampler_object *samp, set_sampler_wrap_s(struct gl_context *ctx, struct gl_sampler_object *samp,
GLint param) GLint param)
{ {
if (samp->WrapS == param) if (samp->Attrib.WrapS == param)
return GL_FALSE; return GL_FALSE;
if (validate_texture_wrap_mode(ctx, param)) { if (validate_texture_wrap_mode(ctx, param)) {
flush(ctx); flush(ctx);
samp->WrapS = param; samp->Attrib.WrapS = param;
return GL_TRUE; return GL_TRUE;
} }
return INVALID_PARAM; return INVALID_PARAM;
@ -553,11 +553,11 @@ static GLuint
set_sampler_wrap_t(struct gl_context *ctx, struct gl_sampler_object *samp, set_sampler_wrap_t(struct gl_context *ctx, struct gl_sampler_object *samp,
GLint param) GLint param)
{ {
if (samp->WrapT == param) if (samp->Attrib.WrapT == param)
return GL_FALSE; return GL_FALSE;
if (validate_texture_wrap_mode(ctx, param)) { if (validate_texture_wrap_mode(ctx, param)) {
flush(ctx); flush(ctx);
samp->WrapT = param; samp->Attrib.WrapT = param;
return GL_TRUE; return GL_TRUE;
} }
return INVALID_PARAM; return INVALID_PARAM;
@ -568,11 +568,11 @@ static GLuint
set_sampler_wrap_r(struct gl_context *ctx, struct gl_sampler_object *samp, set_sampler_wrap_r(struct gl_context *ctx, struct gl_sampler_object *samp,
GLint param) GLint param)
{ {
if (samp->WrapR == param) if (samp->Attrib.WrapR == param)
return GL_FALSE; return GL_FALSE;
if (validate_texture_wrap_mode(ctx, param)) { if (validate_texture_wrap_mode(ctx, param)) {
flush(ctx); flush(ctx);
samp->WrapR = param; samp->Attrib.WrapR = param;
return GL_TRUE; return GL_TRUE;
} }
return INVALID_PARAM; return INVALID_PARAM;
@ -592,19 +592,19 @@ _mesa_set_sampler_filters(struct gl_context *ctx,
assert(mag_filter == GL_NEAREST || assert(mag_filter == GL_NEAREST ||
mag_filter == GL_LINEAR); mag_filter == GL_LINEAR);
if (samp->MinFilter == min_filter && samp->MagFilter == mag_filter) if (samp->Attrib.MinFilter == min_filter && samp->Attrib.MagFilter == mag_filter)
return; return;
flush(ctx); flush(ctx);
samp->MinFilter = min_filter; samp->Attrib.MinFilter = min_filter;
samp->MagFilter = mag_filter; samp->Attrib.MagFilter = mag_filter;
} }
static GLuint static GLuint
set_sampler_min_filter(struct gl_context *ctx, struct gl_sampler_object *samp, set_sampler_min_filter(struct gl_context *ctx, struct gl_sampler_object *samp,
GLint param) GLint param)
{ {
if (samp->MinFilter == param) if (samp->Attrib.MinFilter == param)
return GL_FALSE; return GL_FALSE;
switch (param) { switch (param) {
@ -615,7 +615,7 @@ set_sampler_min_filter(struct gl_context *ctx, struct gl_sampler_object *samp,
case GL_NEAREST_MIPMAP_LINEAR: case GL_NEAREST_MIPMAP_LINEAR:
case GL_LINEAR_MIPMAP_LINEAR: case GL_LINEAR_MIPMAP_LINEAR:
flush(ctx); flush(ctx);
samp->MinFilter = param; samp->Attrib.MinFilter = param;
return GL_TRUE; return GL_TRUE;
default: default:
return INVALID_PARAM; return INVALID_PARAM;
@ -627,14 +627,14 @@ static GLuint
set_sampler_mag_filter(struct gl_context *ctx, struct gl_sampler_object *samp, set_sampler_mag_filter(struct gl_context *ctx, struct gl_sampler_object *samp,
GLint param) GLint param)
{ {
if (samp->MagFilter == param) if (samp->Attrib.MagFilter == param)
return GL_FALSE; return GL_FALSE;
switch (param) { switch (param) {
case GL_NEAREST: case GL_NEAREST:
case GL_LINEAR: case GL_LINEAR:
flush(ctx); flush(ctx);
samp->MagFilter = param; samp->Attrib.MagFilter = param;
return GL_TRUE; return GL_TRUE;
default: default:
return INVALID_PARAM; return INVALID_PARAM;
@ -646,11 +646,11 @@ static GLuint
set_sampler_lod_bias(struct gl_context *ctx, struct gl_sampler_object *samp, set_sampler_lod_bias(struct gl_context *ctx, struct gl_sampler_object *samp,
GLfloat param) GLfloat param)
{ {
if (samp->LodBias == param) if (samp->Attrib.LodBias == param)
return GL_FALSE; return GL_FALSE;
flush(ctx); flush(ctx);
samp->LodBias = param; samp->Attrib.LodBias = param;
return GL_TRUE; return GL_TRUE;
} }
@ -661,10 +661,10 @@ set_sampler_border_colorf(struct gl_context *ctx,
const GLfloat params[4]) const GLfloat params[4])
{ {
flush(ctx); flush(ctx);
samp->BorderColor.f[RCOMP] = params[0]; samp->Attrib.BorderColor.f[RCOMP] = params[0];
samp->BorderColor.f[GCOMP] = params[1]; samp->Attrib.BorderColor.f[GCOMP] = params[1];
samp->BorderColor.f[BCOMP] = params[2]; samp->Attrib.BorderColor.f[BCOMP] = params[2];
samp->BorderColor.f[ACOMP] = params[3]; samp->Attrib.BorderColor.f[ACOMP] = params[3];
return GL_TRUE; return GL_TRUE;
} }
@ -675,10 +675,10 @@ set_sampler_border_colori(struct gl_context *ctx,
const GLint params[4]) const GLint params[4])
{ {
flush(ctx); flush(ctx);
samp->BorderColor.i[RCOMP] = params[0]; samp->Attrib.BorderColor.i[RCOMP] = params[0];
samp->BorderColor.i[GCOMP] = params[1]; samp->Attrib.BorderColor.i[GCOMP] = params[1];
samp->BorderColor.i[BCOMP] = params[2]; samp->Attrib.BorderColor.i[BCOMP] = params[2];
samp->BorderColor.i[ACOMP] = params[3]; samp->Attrib.BorderColor.i[ACOMP] = params[3];
return GL_TRUE; return GL_TRUE;
} }
@ -689,10 +689,10 @@ set_sampler_border_colorui(struct gl_context *ctx,
const GLuint params[4]) const GLuint params[4])
{ {
flush(ctx); flush(ctx);
samp->BorderColor.ui[RCOMP] = params[0]; samp->Attrib.BorderColor.ui[RCOMP] = params[0];
samp->BorderColor.ui[GCOMP] = params[1]; samp->Attrib.BorderColor.ui[GCOMP] = params[1];
samp->BorderColor.ui[BCOMP] = params[2]; samp->Attrib.BorderColor.ui[BCOMP] = params[2];
samp->BorderColor.ui[ACOMP] = params[3]; samp->Attrib.BorderColor.ui[ACOMP] = params[3];
return GL_TRUE; return GL_TRUE;
} }
@ -701,11 +701,11 @@ static GLuint
set_sampler_min_lod(struct gl_context *ctx, struct gl_sampler_object *samp, set_sampler_min_lod(struct gl_context *ctx, struct gl_sampler_object *samp,
GLfloat param) GLfloat param)
{ {
if (samp->MinLod == param) if (samp->Attrib.MinLod == param)
return GL_FALSE; return GL_FALSE;
flush(ctx); flush(ctx);
samp->MinLod = param; samp->Attrib.MinLod = param;
return GL_TRUE; return GL_TRUE;
} }
@ -714,11 +714,11 @@ static GLuint
set_sampler_max_lod(struct gl_context *ctx, struct gl_sampler_object *samp, set_sampler_max_lod(struct gl_context *ctx, struct gl_sampler_object *samp,
GLfloat param) GLfloat param)
{ {
if (samp->MaxLod == param) if (samp->Attrib.MaxLod == param)
return GL_FALSE; return GL_FALSE;
flush(ctx); flush(ctx);
samp->MaxLod = param; samp->Attrib.MaxLod = param;
return GL_TRUE; return GL_TRUE;
} }
@ -734,13 +734,13 @@ set_sampler_compare_mode(struct gl_context *ctx,
if (!ctx->Extensions.ARB_shadow) if (!ctx->Extensions.ARB_shadow)
return GL_FALSE; return GL_FALSE;
if (samp->CompareMode == param) if (samp->Attrib.CompareMode == param)
return GL_FALSE; return GL_FALSE;
if (param == GL_NONE || if (param == GL_NONE ||
param == GL_COMPARE_R_TO_TEXTURE_ARB) { param == GL_COMPARE_R_TO_TEXTURE_ARB) {
flush(ctx); flush(ctx);
samp->CompareMode = param; samp->Attrib.CompareMode = param;
return GL_TRUE; return GL_TRUE;
} }
@ -759,7 +759,7 @@ set_sampler_compare_func(struct gl_context *ctx,
if (!ctx->Extensions.ARB_shadow) if (!ctx->Extensions.ARB_shadow)
return GL_FALSE; return GL_FALSE;
if (samp->CompareFunc == param) if (samp->Attrib.CompareFunc == param)
return GL_FALSE; return GL_FALSE;
switch (param) { switch (param) {
@ -772,7 +772,7 @@ set_sampler_compare_func(struct gl_context *ctx,
case GL_ALWAYS: case GL_ALWAYS:
case GL_NEVER: case GL_NEVER:
flush(ctx); flush(ctx);
samp->CompareFunc = param; samp->Attrib.CompareFunc = param;
return GL_TRUE; return GL_TRUE;
default: default:
return INVALID_PARAM; return INVALID_PARAM;
@ -787,7 +787,7 @@ set_sampler_max_anisotropy(struct gl_context *ctx,
if (!ctx->Extensions.EXT_texture_filter_anisotropic) if (!ctx->Extensions.EXT_texture_filter_anisotropic)
return INVALID_PNAME; return INVALID_PNAME;
if (samp->MaxAnisotropy == param) if (samp->Attrib.MaxAnisotropy == param)
return GL_FALSE; return GL_FALSE;
if (param < 1.0F) if (param < 1.0F)
@ -795,7 +795,7 @@ set_sampler_max_anisotropy(struct gl_context *ctx,
flush(ctx); flush(ctx);
/* clamp to max, that's what NVIDIA does */ /* clamp to max, that's what NVIDIA does */
samp->MaxAnisotropy = MIN2(param, ctx->Const.MaxTextureMaxAnisotropy); samp->Attrib.MaxAnisotropy = MIN2(param, ctx->Const.MaxTextureMaxAnisotropy);
return GL_TRUE; return GL_TRUE;
} }
@ -808,14 +808,14 @@ set_sampler_cube_map_seamless(struct gl_context *ctx,
|| !ctx->Extensions.AMD_seamless_cubemap_per_texture) || !ctx->Extensions.AMD_seamless_cubemap_per_texture)
return INVALID_PNAME; return INVALID_PNAME;
if (samp->CubeMapSeamless == param) if (samp->Attrib.CubeMapSeamless == param)
return GL_FALSE; return GL_FALSE;
if (param != GL_TRUE && param != GL_FALSE) if (param != GL_TRUE && param != GL_FALSE)
return INVALID_VALUE; return INVALID_VALUE;
flush(ctx); flush(ctx);
samp->CubeMapSeamless = param; samp->Attrib.CubeMapSeamless = param;
return GL_TRUE; return GL_TRUE;
} }
@ -826,7 +826,7 @@ _mesa_set_sampler_srgb_decode(struct gl_context *ctx,
assert(param == GL_DECODE_EXT || param == GL_SKIP_DECODE_EXT); assert(param == GL_DECODE_EXT || param == GL_SKIP_DECODE_EXT);
flush(ctx); flush(ctx);
samp->sRGBDecode = param; samp->Attrib.sRGBDecode = param;
} }
static GLuint static GLuint
@ -836,7 +836,7 @@ set_sampler_srgb_decode(struct gl_context *ctx,
if (!ctx->Extensions.EXT_texture_sRGB_decode) if (!ctx->Extensions.EXT_texture_sRGB_decode)
return INVALID_PNAME; return INVALID_PNAME;
if (samp->sRGBDecode == param) if (samp->Attrib.sRGBDecode == param)
return GL_FALSE; return GL_FALSE;
/* The EXT_texture_sRGB_decode spec says: /* The EXT_texture_sRGB_decode spec says:
@ -854,7 +854,7 @@ set_sampler_srgb_decode(struct gl_context *ctx,
return INVALID_PARAM; return INVALID_PARAM;
flush(ctx); flush(ctx);
samp->sRGBDecode = param; samp->Attrib.sRGBDecode = param;
return GL_TRUE; return GL_TRUE;
} }
@ -1410,47 +1410,47 @@ _mesa_GetSamplerParameteriv(GLuint sampler, GLenum pname, GLint *params)
switch (pname) { switch (pname) {
case GL_TEXTURE_WRAP_S: case GL_TEXTURE_WRAP_S:
*params = sampObj->WrapS; *params = sampObj->Attrib.WrapS;
break; break;
case GL_TEXTURE_WRAP_T: case GL_TEXTURE_WRAP_T:
*params = sampObj->WrapT; *params = sampObj->Attrib.WrapT;
break; break;
case GL_TEXTURE_WRAP_R: case GL_TEXTURE_WRAP_R:
*params = sampObj->WrapR; *params = sampObj->Attrib.WrapR;
break; break;
case GL_TEXTURE_MIN_FILTER: case GL_TEXTURE_MIN_FILTER:
*params = sampObj->MinFilter; *params = sampObj->Attrib.MinFilter;
break; break;
case GL_TEXTURE_MAG_FILTER: case GL_TEXTURE_MAG_FILTER:
*params = sampObj->MagFilter; *params = sampObj->Attrib.MagFilter;
break; break;
case GL_TEXTURE_MIN_LOD: case GL_TEXTURE_MIN_LOD:
/* GL spec 'Data Conversions' section specifies that floating-point /* GL spec 'Data Conversions' section specifies that floating-point
* value in integer Get function is rounded to nearest integer * value in integer Get function is rounded to nearest integer
*/ */
*params = lroundf(sampObj->MinLod); *params = lroundf(sampObj->Attrib.MinLod);
break; break;
case GL_TEXTURE_MAX_LOD: case GL_TEXTURE_MAX_LOD:
/* GL spec 'Data Conversions' section specifies that floating-point /* GL spec 'Data Conversions' section specifies that floating-point
* value in integer Get function is rounded to nearest integer * value in integer Get function is rounded to nearest integer
*/ */
*params = lroundf(sampObj->MaxLod); *params = lroundf(sampObj->Attrib.MaxLod);
break; break;
case GL_TEXTURE_LOD_BIAS: case GL_TEXTURE_LOD_BIAS:
/* GL spec 'Data Conversions' section specifies that floating-point /* GL spec 'Data Conversions' section specifies that floating-point
* value in integer Get function is rounded to nearest integer * value in integer Get function is rounded to nearest integer
*/ */
*params = lroundf(sampObj->LodBias); *params = lroundf(sampObj->Attrib.LodBias);
break; break;
case GL_TEXTURE_COMPARE_MODE: case GL_TEXTURE_COMPARE_MODE:
if (!ctx->Extensions.ARB_shadow) if (!ctx->Extensions.ARB_shadow)
goto invalid_pname; goto invalid_pname;
*params = sampObj->CompareMode; *params = sampObj->Attrib.CompareMode;
break; break;
case GL_TEXTURE_COMPARE_FUNC: case GL_TEXTURE_COMPARE_FUNC:
if (!ctx->Extensions.ARB_shadow) if (!ctx->Extensions.ARB_shadow)
goto invalid_pname; goto invalid_pname;
*params = sampObj->CompareFunc; *params = sampObj->Attrib.CompareFunc;
break; break;
case GL_TEXTURE_MAX_ANISOTROPY_EXT: case GL_TEXTURE_MAX_ANISOTROPY_EXT:
if (!ctx->Extensions.EXT_texture_filter_anisotropic) if (!ctx->Extensions.EXT_texture_filter_anisotropic)
@ -1458,25 +1458,25 @@ _mesa_GetSamplerParameteriv(GLuint sampler, GLenum pname, GLint *params)
/* GL spec 'Data Conversions' section specifies that floating-point /* GL spec 'Data Conversions' section specifies that floating-point
* value in integer Get function is rounded to nearest integer * value in integer Get function is rounded to nearest integer
*/ */
*params = lroundf(sampObj->MaxAnisotropy); *params = lroundf(sampObj->Attrib.MaxAnisotropy);
break; break;
case GL_TEXTURE_BORDER_COLOR: case GL_TEXTURE_BORDER_COLOR:
if (!ctx->Extensions.ARB_texture_border_clamp) if (!ctx->Extensions.ARB_texture_border_clamp)
goto invalid_pname; goto invalid_pname;
params[0] = FLOAT_TO_INT(sampObj->BorderColor.f[0]); params[0] = FLOAT_TO_INT(sampObj->Attrib.BorderColor.f[0]);
params[1] = FLOAT_TO_INT(sampObj->BorderColor.f[1]); params[1] = FLOAT_TO_INT(sampObj->Attrib.BorderColor.f[1]);
params[2] = FLOAT_TO_INT(sampObj->BorderColor.f[2]); params[2] = FLOAT_TO_INT(sampObj->Attrib.BorderColor.f[2]);
params[3] = FLOAT_TO_INT(sampObj->BorderColor.f[3]); params[3] = FLOAT_TO_INT(sampObj->Attrib.BorderColor.f[3]);
break; break;
case GL_TEXTURE_CUBE_MAP_SEAMLESS: case GL_TEXTURE_CUBE_MAP_SEAMLESS:
if (!ctx->Extensions.AMD_seamless_cubemap_per_texture) if (!ctx->Extensions.AMD_seamless_cubemap_per_texture)
goto invalid_pname; goto invalid_pname;
*params = sampObj->CubeMapSeamless; *params = sampObj->Attrib.CubeMapSeamless;
break; break;
case GL_TEXTURE_SRGB_DECODE_EXT: case GL_TEXTURE_SRGB_DECODE_EXT:
if (!ctx->Extensions.EXT_texture_sRGB_decode) if (!ctx->Extensions.EXT_texture_sRGB_decode)
goto invalid_pname; goto invalid_pname;
*params = (GLenum) sampObj->sRGBDecode; *params = (GLenum) sampObj->Attrib.sRGBDecode;
break; break;
default: default:
goto invalid_pname; goto invalid_pname;
@ -1502,53 +1502,53 @@ _mesa_GetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat *params)
switch (pname) { switch (pname) {
case GL_TEXTURE_WRAP_S: case GL_TEXTURE_WRAP_S:
*params = (GLfloat) sampObj->WrapS; *params = (GLfloat) sampObj->Attrib.WrapS;
break; break;
case GL_TEXTURE_WRAP_T: case GL_TEXTURE_WRAP_T:
*params = (GLfloat) sampObj->WrapT; *params = (GLfloat) sampObj->Attrib.WrapT;
break; break;
case GL_TEXTURE_WRAP_R: case GL_TEXTURE_WRAP_R:
*params = (GLfloat) sampObj->WrapR; *params = (GLfloat) sampObj->Attrib.WrapR;
break; break;
case GL_TEXTURE_MIN_FILTER: case GL_TEXTURE_MIN_FILTER:
*params = (GLfloat) sampObj->MinFilter; *params = (GLfloat) sampObj->Attrib.MinFilter;
break; break;
case GL_TEXTURE_MAG_FILTER: case GL_TEXTURE_MAG_FILTER:
*params = (GLfloat) sampObj->MagFilter; *params = (GLfloat) sampObj->Attrib.MagFilter;
break; break;
case GL_TEXTURE_MIN_LOD: case GL_TEXTURE_MIN_LOD:
*params = sampObj->MinLod; *params = sampObj->Attrib.MinLod;
break; break;
case GL_TEXTURE_MAX_LOD: case GL_TEXTURE_MAX_LOD:
*params = sampObj->MaxLod; *params = sampObj->Attrib.MaxLod;
break; break;
case GL_TEXTURE_LOD_BIAS: case GL_TEXTURE_LOD_BIAS:
*params = sampObj->LodBias; *params = sampObj->Attrib.LodBias;
break; break;
case GL_TEXTURE_COMPARE_MODE: case GL_TEXTURE_COMPARE_MODE:
*params = (GLfloat) sampObj->CompareMode; *params = (GLfloat) sampObj->Attrib.CompareMode;
break; break;
case GL_TEXTURE_COMPARE_FUNC: case GL_TEXTURE_COMPARE_FUNC:
*params = (GLfloat) sampObj->CompareFunc; *params = (GLfloat) sampObj->Attrib.CompareFunc;
break; break;
case GL_TEXTURE_MAX_ANISOTROPY_EXT: case GL_TEXTURE_MAX_ANISOTROPY_EXT:
*params = sampObj->MaxAnisotropy; *params = sampObj->Attrib.MaxAnisotropy;
break; break;
case GL_TEXTURE_BORDER_COLOR: case GL_TEXTURE_BORDER_COLOR:
params[0] = sampObj->BorderColor.f[0]; params[0] = sampObj->Attrib.BorderColor.f[0];
params[1] = sampObj->BorderColor.f[1]; params[1] = sampObj->Attrib.BorderColor.f[1];
params[2] = sampObj->BorderColor.f[2]; params[2] = sampObj->Attrib.BorderColor.f[2];
params[3] = sampObj->BorderColor.f[3]; params[3] = sampObj->Attrib.BorderColor.f[3];
break; break;
case GL_TEXTURE_CUBE_MAP_SEAMLESS: case GL_TEXTURE_CUBE_MAP_SEAMLESS:
if (!ctx->Extensions.AMD_seamless_cubemap_per_texture) if (!ctx->Extensions.AMD_seamless_cubemap_per_texture)
goto invalid_pname; goto invalid_pname;
*params = (GLfloat) sampObj->CubeMapSeamless; *params = (GLfloat) sampObj->Attrib.CubeMapSeamless;
break; break;
case GL_TEXTURE_SRGB_DECODE_EXT: case GL_TEXTURE_SRGB_DECODE_EXT:
if (!ctx->Extensions.EXT_texture_sRGB_decode) if (!ctx->Extensions.EXT_texture_sRGB_decode)
goto invalid_pname; goto invalid_pname;
*params = (GLfloat) sampObj->sRGBDecode; *params = (GLfloat) sampObj->Attrib.sRGBDecode;
break; break;
default: default:
goto invalid_pname; goto invalid_pname;
@ -1574,53 +1574,53 @@ _mesa_GetSamplerParameterIiv(GLuint sampler, GLenum pname, GLint *params)
switch (pname) { switch (pname) {
case GL_TEXTURE_WRAP_S: case GL_TEXTURE_WRAP_S:
*params = sampObj->WrapS; *params = sampObj->Attrib.WrapS;
break; break;
case GL_TEXTURE_WRAP_T: case GL_TEXTURE_WRAP_T:
*params = sampObj->WrapT; *params = sampObj->Attrib.WrapT;
break; break;
case GL_TEXTURE_WRAP_R: case GL_TEXTURE_WRAP_R:
*params = sampObj->WrapR; *params = sampObj->Attrib.WrapR;
break; break;
case GL_TEXTURE_MIN_FILTER: case GL_TEXTURE_MIN_FILTER:
*params = sampObj->MinFilter; *params = sampObj->Attrib.MinFilter;
break; break;
case GL_TEXTURE_MAG_FILTER: case GL_TEXTURE_MAG_FILTER:
*params = sampObj->MagFilter; *params = sampObj->Attrib.MagFilter;
break; break;
case GL_TEXTURE_MIN_LOD: case GL_TEXTURE_MIN_LOD:
*params = (GLint) sampObj->MinLod; *params = (GLint) sampObj->Attrib.MinLod;
break; break;
case GL_TEXTURE_MAX_LOD: case GL_TEXTURE_MAX_LOD:
*params = (GLint) sampObj->MaxLod; *params = (GLint) sampObj->Attrib.MaxLod;
break; break;
case GL_TEXTURE_LOD_BIAS: case GL_TEXTURE_LOD_BIAS:
*params = (GLint) sampObj->LodBias; *params = (GLint) sampObj->Attrib.LodBias;
break; break;
case GL_TEXTURE_COMPARE_MODE: case GL_TEXTURE_COMPARE_MODE:
*params = sampObj->CompareMode; *params = sampObj->Attrib.CompareMode;
break; break;
case GL_TEXTURE_COMPARE_FUNC: case GL_TEXTURE_COMPARE_FUNC:
*params = sampObj->CompareFunc; *params = sampObj->Attrib.CompareFunc;
break; break;
case GL_TEXTURE_MAX_ANISOTROPY_EXT: case GL_TEXTURE_MAX_ANISOTROPY_EXT:
*params = (GLint) sampObj->MaxAnisotropy; *params = (GLint) sampObj->Attrib.MaxAnisotropy;
break; break;
case GL_TEXTURE_BORDER_COLOR: case GL_TEXTURE_BORDER_COLOR:
params[0] = sampObj->BorderColor.i[0]; params[0] = sampObj->Attrib.BorderColor.i[0];
params[1] = sampObj->BorderColor.i[1]; params[1] = sampObj->Attrib.BorderColor.i[1];
params[2] = sampObj->BorderColor.i[2]; params[2] = sampObj->Attrib.BorderColor.i[2];
params[3] = sampObj->BorderColor.i[3]; params[3] = sampObj->Attrib.BorderColor.i[3];
break; break;
case GL_TEXTURE_CUBE_MAP_SEAMLESS: case GL_TEXTURE_CUBE_MAP_SEAMLESS:
if (!ctx->Extensions.AMD_seamless_cubemap_per_texture) if (!ctx->Extensions.AMD_seamless_cubemap_per_texture)
goto invalid_pname; goto invalid_pname;
*params = sampObj->CubeMapSeamless; *params = sampObj->Attrib.CubeMapSeamless;
break; break;
case GL_TEXTURE_SRGB_DECODE_EXT: case GL_TEXTURE_SRGB_DECODE_EXT:
if (!ctx->Extensions.EXT_texture_sRGB_decode) if (!ctx->Extensions.EXT_texture_sRGB_decode)
goto invalid_pname; goto invalid_pname;
*params = (GLenum) sampObj->sRGBDecode; *params = (GLenum) sampObj->Attrib.sRGBDecode;
break; break;
default: default:
goto invalid_pname; goto invalid_pname;
@ -1646,53 +1646,53 @@ _mesa_GetSamplerParameterIuiv(GLuint sampler, GLenum pname, GLuint *params)
switch (pname) { switch (pname) {
case GL_TEXTURE_WRAP_S: case GL_TEXTURE_WRAP_S:
*params = sampObj->WrapS; *params = sampObj->Attrib.WrapS;
break; break;
case GL_TEXTURE_WRAP_T: case GL_TEXTURE_WRAP_T:
*params = sampObj->WrapT; *params = sampObj->Attrib.WrapT;
break; break;
case GL_TEXTURE_WRAP_R: case GL_TEXTURE_WRAP_R:
*params = sampObj->WrapR; *params = sampObj->Attrib.WrapR;
break; break;
case GL_TEXTURE_MIN_FILTER: case GL_TEXTURE_MIN_FILTER:
*params = sampObj->MinFilter; *params = sampObj->Attrib.MinFilter;
break; break;
case GL_TEXTURE_MAG_FILTER: case GL_TEXTURE_MAG_FILTER:
*params = sampObj->MagFilter; *params = sampObj->Attrib.MagFilter;
break; break;
case GL_TEXTURE_MIN_LOD: case GL_TEXTURE_MIN_LOD:
*params = (GLuint) sampObj->MinLod; *params = (GLuint) sampObj->Attrib.MinLod;
break; break;
case GL_TEXTURE_MAX_LOD: case GL_TEXTURE_MAX_LOD:
*params = (GLuint) sampObj->MaxLod; *params = (GLuint) sampObj->Attrib.MaxLod;
break; break;
case GL_TEXTURE_LOD_BIAS: case GL_TEXTURE_LOD_BIAS:
*params = (GLuint) sampObj->LodBias; *params = (GLuint) sampObj->Attrib.LodBias;
break; break;
case GL_TEXTURE_COMPARE_MODE: case GL_TEXTURE_COMPARE_MODE:
*params = sampObj->CompareMode; *params = sampObj->Attrib.CompareMode;
break; break;
case GL_TEXTURE_COMPARE_FUNC: case GL_TEXTURE_COMPARE_FUNC:
*params = sampObj->CompareFunc; *params = sampObj->Attrib.CompareFunc;
break; break;
case GL_TEXTURE_MAX_ANISOTROPY_EXT: case GL_TEXTURE_MAX_ANISOTROPY_EXT:
*params = (GLuint) sampObj->MaxAnisotropy; *params = (GLuint) sampObj->Attrib.MaxAnisotropy;
break; break;
case GL_TEXTURE_BORDER_COLOR: case GL_TEXTURE_BORDER_COLOR:
params[0] = sampObj->BorderColor.ui[0]; params[0] = sampObj->Attrib.BorderColor.ui[0];
params[1] = sampObj->BorderColor.ui[1]; params[1] = sampObj->Attrib.BorderColor.ui[1];
params[2] = sampObj->BorderColor.ui[2]; params[2] = sampObj->Attrib.BorderColor.ui[2];
params[3] = sampObj->BorderColor.ui[3]; params[3] = sampObj->Attrib.BorderColor.ui[3];
break; break;
case GL_TEXTURE_CUBE_MAP_SEAMLESS: case GL_TEXTURE_CUBE_MAP_SEAMLESS:
if (!ctx->Extensions.AMD_seamless_cubemap_per_texture) if (!ctx->Extensions.AMD_seamless_cubemap_per_texture)
goto invalid_pname; goto invalid_pname;
*params = sampObj->CubeMapSeamless; *params = sampObj->Attrib.CubeMapSeamless;
break; break;
case GL_TEXTURE_SRGB_DECODE_EXT: case GL_TEXTURE_SRGB_DECODE_EXT:
if (!ctx->Extensions.EXT_texture_sRGB_decode) if (!ctx->Extensions.EXT_texture_sRGB_decode)
goto invalid_pname; goto invalid_pname;
*params = (GLenum) sampObj->sRGBDecode; *params = (GLenum) sampObj->Attrib.sRGBDecode;
break; break;
default: default:
goto invalid_pname; goto invalid_pname;

View File

@ -51,7 +51,7 @@ _mesa_get_samplerobj(struct gl_context *ctx, GLuint unit)
static inline GLboolean static inline GLboolean
_mesa_is_mipmap_filter(const struct gl_sampler_object *samp) _mesa_is_mipmap_filter(const struct gl_sampler_object *samp)
{ {
return samp->MinFilter != GL_NEAREST && samp->MinFilter != GL_LINEAR; return samp->Attrib.MinFilter != GL_NEAREST && samp->Attrib.MinFilter != GL_LINEAR;
} }

View File

@ -468,10 +468,10 @@ _mesa_is_image_unit_valid(struct gl_context *ctx, struct gl_image_unit *u)
if (!t->_BaseComplete && !t->_MipmapComplete) if (!t->_BaseComplete && !t->_MipmapComplete)
_mesa_test_texobj_completeness(ctx, t); _mesa_test_texobj_completeness(ctx, t);
if (u->Level < t->BaseLevel || if (u->Level < t->Attrib.BaseLevel ||
u->Level > t->_MaxLevel || u->Level > t->_MaxLevel ||
(u->Level == t->BaseLevel && !t->_BaseComplete) || (u->Level == t->Attrib.BaseLevel && !t->_BaseComplete) ||
(u->Level != t->BaseLevel && !t->_MipmapComplete)) (u->Level != t->Attrib.BaseLevel && !t->_MipmapComplete))
return GL_FALSE; return GL_FALSE;
if (_mesa_tex_target_is_layered(t->Target) && if (_mesa_tex_target_is_layered(t->Target) &&

View File

@ -2745,9 +2745,9 @@ static inline void
check_gen_mipmap(struct gl_context *ctx, GLenum target, check_gen_mipmap(struct gl_context *ctx, GLenum target,
struct gl_texture_object *texObj, GLint level) struct gl_texture_object *texObj, GLint level)
{ {
if (texObj->GenerateMipmap && if (texObj->Attrib.GenerateMipmap &&
level == texObj->BaseLevel && level == texObj->Attrib.BaseLevel &&
level < texObj->MaxLevel) { level < texObj->Attrib.MaxLevel) {
assert(ctx->Driver.GenerateMipmap); assert(ctx->Driver.GenerateMipmap);
ctx->Driver.GenerateMipmap(ctx, target, texObj); ctx->Driver.GenerateMipmap(ctx, target, texObj);
} }

View File

@ -174,7 +174,7 @@ _mesa_get_texbuffer_format(const struct gl_context *ctx, GLenum internalFormat);
static inline const struct gl_texture_image * static inline const struct gl_texture_image *
_mesa_base_tex_image(const struct gl_texture_object *texObj) _mesa_base_tex_image(const struct gl_texture_object *texObj)
{ {
return texObj->Image[0][texObj->BaseLevel]; return texObj->Image[0][texObj->Attrib.BaseLevel];
} }

View File

@ -67,7 +67,7 @@ static bool
valid_filter_for_float(const struct gl_context *ctx, valid_filter_for_float(const struct gl_context *ctx,
const struct gl_texture_object *obj) const struct gl_texture_object *obj)
{ {
switch (obj->Sampler.MagFilter) { switch (obj->Sampler.Attrib.MagFilter) {
case GL_LINEAR: case GL_LINEAR:
if (obj->_IsHalfFloat && !ctx->Extensions.OES_texture_half_float_linear) { if (obj->_IsHalfFloat && !ctx->Extensions.OES_texture_half_float_linear) {
return false; return false;
@ -82,7 +82,7 @@ valid_filter_for_float(const struct gl_context *ctx,
unreachable("Invalid mag filter"); unreachable("Invalid mag filter");
} }
switch (obj->Sampler.MinFilter) { switch (obj->Sampler.Attrib.MinFilter) {
case GL_LINEAR: case GL_LINEAR:
case GL_NEAREST_MIPMAP_LINEAR: case GL_NEAREST_MIPMAP_LINEAR:
case GL_LINEAR_MIPMAP_NEAREST: case GL_LINEAR_MIPMAP_NEAREST:
@ -323,9 +323,9 @@ _mesa_initialize_texture_object( struct gl_context *ctx,
else { else {
obj->TargetIndex = NUM_TEXTURE_TARGETS; /* invalid/error value */ obj->TargetIndex = NUM_TEXTURE_TARGETS; /* invalid/error value */
} }
obj->Priority = 1.0F; obj->Attrib.Priority = 1.0F;
obj->BaseLevel = 0; obj->Attrib.BaseLevel = 0;
obj->MaxLevel = 1000; obj->Attrib.MaxLevel = 1000;
/* must be one; no support for (YUV) planes in separate buffers */ /* must be one; no support for (YUV) planes in separate buffers */
obj->RequiredTextureImageUnits = 1; obj->RequiredTextureImageUnits = 1;
@ -333,34 +333,34 @@ _mesa_initialize_texture_object( struct gl_context *ctx,
/* sampler state */ /* sampler state */
if (target == GL_TEXTURE_RECTANGLE_NV || if (target == GL_TEXTURE_RECTANGLE_NV ||
target == GL_TEXTURE_EXTERNAL_OES) { target == GL_TEXTURE_EXTERNAL_OES) {
obj->Sampler.WrapS = GL_CLAMP_TO_EDGE; obj->Sampler.Attrib.WrapS = GL_CLAMP_TO_EDGE;
obj->Sampler.WrapT = GL_CLAMP_TO_EDGE; obj->Sampler.Attrib.WrapT = GL_CLAMP_TO_EDGE;
obj->Sampler.WrapR = GL_CLAMP_TO_EDGE; obj->Sampler.Attrib.WrapR = GL_CLAMP_TO_EDGE;
obj->Sampler.MinFilter = GL_LINEAR; obj->Sampler.Attrib.MinFilter = GL_LINEAR;
} }
else { else {
obj->Sampler.WrapS = GL_REPEAT; obj->Sampler.Attrib.WrapS = GL_REPEAT;
obj->Sampler.WrapT = GL_REPEAT; obj->Sampler.Attrib.WrapT = GL_REPEAT;
obj->Sampler.WrapR = GL_REPEAT; obj->Sampler.Attrib.WrapR = GL_REPEAT;
obj->Sampler.MinFilter = GL_NEAREST_MIPMAP_LINEAR; obj->Sampler.Attrib.MinFilter = GL_NEAREST_MIPMAP_LINEAR;
} }
obj->Sampler.MagFilter = GL_LINEAR; obj->Sampler.Attrib.MagFilter = GL_LINEAR;
obj->Sampler.MinLod = -1000.0; obj->Sampler.Attrib.MinLod = -1000.0;
obj->Sampler.MaxLod = 1000.0; obj->Sampler.Attrib.MaxLod = 1000.0;
obj->Sampler.LodBias = 0.0; obj->Sampler.Attrib.LodBias = 0.0;
obj->Sampler.MaxAnisotropy = 1.0; obj->Sampler.Attrib.MaxAnisotropy = 1.0;
obj->Sampler.CompareMode = GL_NONE; /* ARB_shadow */ obj->Sampler.Attrib.CompareMode = GL_NONE; /* ARB_shadow */
obj->Sampler.CompareFunc = GL_LEQUAL; /* ARB_shadow */ obj->Sampler.Attrib.CompareFunc = GL_LEQUAL; /* ARB_shadow */
obj->DepthMode = ctx->API == API_OPENGL_CORE ? GL_RED : GL_LUMINANCE; obj->Attrib.DepthMode = ctx->API == API_OPENGL_CORE ? GL_RED : GL_LUMINANCE;
obj->StencilSampling = false; obj->Attrib.StencilSampling = false;
obj->Sampler.CubeMapSeamless = GL_FALSE; obj->Sampler.Attrib.CubeMapSeamless = GL_FALSE;
obj->Sampler.HandleAllocated = GL_FALSE; obj->Sampler.HandleAllocated = GL_FALSE;
obj->Swizzle[0] = GL_RED; obj->Attrib.Swizzle[0] = GL_RED;
obj->Swizzle[1] = GL_GREEN; obj->Attrib.Swizzle[1] = GL_GREEN;
obj->Swizzle[2] = GL_BLUE; obj->Attrib.Swizzle[2] = GL_BLUE;
obj->Swizzle[3] = GL_ALPHA; obj->Attrib.Swizzle[3] = GL_ALPHA;
obj->_Swizzle = SWIZZLE_NOOP; obj->Attrib._Swizzle = SWIZZLE_NOOP;
obj->Sampler.sRGBDecode = GL_DECODE_EXT; obj->Sampler.Attrib.sRGBDecode = GL_DECODE_EXT;
obj->BufferObjectFormat = GL_R8; obj->BufferObjectFormat = GL_R8;
obj->_BufferObjectFormat = MESA_FORMAT_R_UNORM8; obj->_BufferObjectFormat = MESA_FORMAT_R_UNORM8;
obj->ImageFormatCompatibilityType = GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE; obj->ImageFormatCompatibilityType = GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE;
@ -394,11 +394,11 @@ finish_texture_init(struct gl_context *ctx, GLenum target,
case GL_TEXTURE_RECTANGLE_NV: case GL_TEXTURE_RECTANGLE_NV:
case GL_TEXTURE_EXTERNAL_OES: case GL_TEXTURE_EXTERNAL_OES:
/* have to init wrap and filter state here - kind of klunky */ /* have to init wrap and filter state here - kind of klunky */
obj->Sampler.WrapS = GL_CLAMP_TO_EDGE; obj->Sampler.Attrib.WrapS = GL_CLAMP_TO_EDGE;
obj->Sampler.WrapT = GL_CLAMP_TO_EDGE; obj->Sampler.Attrib.WrapT = GL_CLAMP_TO_EDGE;
obj->Sampler.WrapR = GL_CLAMP_TO_EDGE; obj->Sampler.Attrib.WrapR = GL_CLAMP_TO_EDGE;
obj->Sampler.MinFilter = filter; obj->Sampler.Attrib.MinFilter = filter;
obj->Sampler.MagFilter = filter; obj->Sampler.Attrib.MagFilter = filter;
if (ctx->Driver.TexParameter) { if (ctx->Driver.TexParameter) {
/* XXX we probably don't need to make all these calls */ /* XXX we probably don't need to make all these calls */
ctx->Driver.TexParameter(ctx, obj, GL_TEXTURE_WRAP_S); ctx->Driver.TexParameter(ctx, obj, GL_TEXTURE_WRAP_S);
@ -473,35 +473,35 @@ _mesa_copy_texture_object( struct gl_texture_object *dest,
dest->Target = src->Target; dest->Target = src->Target;
dest->TargetIndex = src->TargetIndex; dest->TargetIndex = src->TargetIndex;
dest->Name = src->Name; dest->Name = src->Name;
dest->Priority = src->Priority; dest->Attrib.Priority = src->Attrib.Priority;
dest->Sampler.BorderColor.f[0] = src->Sampler.BorderColor.f[0]; dest->Sampler.Attrib.BorderColor.f[0] = src->Sampler.Attrib.BorderColor.f[0];
dest->Sampler.BorderColor.f[1] = src->Sampler.BorderColor.f[1]; dest->Sampler.Attrib.BorderColor.f[1] = src->Sampler.Attrib.BorderColor.f[1];
dest->Sampler.BorderColor.f[2] = src->Sampler.BorderColor.f[2]; dest->Sampler.Attrib.BorderColor.f[2] = src->Sampler.Attrib.BorderColor.f[2];
dest->Sampler.BorderColor.f[3] = src->Sampler.BorderColor.f[3]; dest->Sampler.Attrib.BorderColor.f[3] = src->Sampler.Attrib.BorderColor.f[3];
dest->Sampler.WrapS = src->Sampler.WrapS; dest->Sampler.Attrib.WrapS = src->Sampler.Attrib.WrapS;
dest->Sampler.WrapT = src->Sampler.WrapT; dest->Sampler.Attrib.WrapT = src->Sampler.Attrib.WrapT;
dest->Sampler.WrapR = src->Sampler.WrapR; dest->Sampler.Attrib.WrapR = src->Sampler.Attrib.WrapR;
dest->Sampler.MinFilter = src->Sampler.MinFilter; dest->Sampler.Attrib.MinFilter = src->Sampler.Attrib.MinFilter;
dest->Sampler.MagFilter = src->Sampler.MagFilter; dest->Sampler.Attrib.MagFilter = src->Sampler.Attrib.MagFilter;
dest->Sampler.MinLod = src->Sampler.MinLod; dest->Sampler.Attrib.MinLod = src->Sampler.Attrib.MinLod;
dest->Sampler.MaxLod = src->Sampler.MaxLod; dest->Sampler.Attrib.MaxLod = src->Sampler.Attrib.MaxLod;
dest->Sampler.LodBias = src->Sampler.LodBias; dest->Sampler.Attrib.LodBias = src->Sampler.Attrib.LodBias;
dest->BaseLevel = src->BaseLevel; dest->Attrib.BaseLevel = src->Attrib.BaseLevel;
dest->MaxLevel = src->MaxLevel; dest->Attrib.MaxLevel = src->Attrib.MaxLevel;
dest->Sampler.MaxAnisotropy = src->Sampler.MaxAnisotropy; dest->Sampler.Attrib.MaxAnisotropy = src->Sampler.Attrib.MaxAnisotropy;
dest->Sampler.CompareMode = src->Sampler.CompareMode; dest->Sampler.Attrib.CompareMode = src->Sampler.Attrib.CompareMode;
dest->Sampler.CompareFunc = src->Sampler.CompareFunc; dest->Sampler.Attrib.CompareFunc = src->Sampler.Attrib.CompareFunc;
dest->Sampler.CubeMapSeamless = src->Sampler.CubeMapSeamless; dest->Sampler.Attrib.CubeMapSeamless = src->Sampler.Attrib.CubeMapSeamless;
dest->DepthMode = src->DepthMode; dest->Attrib.DepthMode = src->Attrib.DepthMode;
dest->StencilSampling = src->StencilSampling; dest->Attrib.StencilSampling = src->Attrib.StencilSampling;
dest->Sampler.sRGBDecode = src->Sampler.sRGBDecode; dest->Sampler.Attrib.sRGBDecode = src->Sampler.Attrib.sRGBDecode;
dest->_MaxLevel = src->_MaxLevel; dest->_MaxLevel = src->_MaxLevel;
dest->_MaxLambda = src->_MaxLambda; dest->_MaxLambda = src->_MaxLambda;
dest->GenerateMipmap = src->GenerateMipmap; dest->Attrib.GenerateMipmap = src->Attrib.GenerateMipmap;
dest->_BaseComplete = src->_BaseComplete; dest->_BaseComplete = src->_BaseComplete;
dest->_MipmapComplete = src->_MipmapComplete; dest->_MipmapComplete = src->_MipmapComplete;
COPY_4V(dest->Swizzle, src->Swizzle); COPY_4V(dest->Attrib.Swizzle, src->Attrib.Swizzle);
dest->_Swizzle = src->_Swizzle; dest->Attrib._Swizzle = src->Attrib._Swizzle;
dest->_IsHalfFloat = src->_IsHalfFloat; dest->_IsHalfFloat = src->_IsHalfFloat;
dest->_IsFloat = src->_IsFloat; dest->_IsFloat = src->_IsFloat;
@ -682,7 +682,7 @@ void
_mesa_test_texobj_completeness( const struct gl_context *ctx, _mesa_test_texobj_completeness( const struct gl_context *ctx,
struct gl_texture_object *t ) struct gl_texture_object *t )
{ {
const GLint baseLevel = t->BaseLevel; const GLint baseLevel = t->Attrib.BaseLevel;
const struct gl_texture_image *baseImage; const struct gl_texture_image *baseImage;
GLint maxLevels = 0; GLint maxLevels = 0;
@ -706,9 +706,9 @@ _mesa_test_texobj_completeness( const struct gl_context *ctx,
return; return;
} }
if (t->MaxLevel < baseLevel) { if (t->Attrib.MaxLevel < baseLevel) {
incomplete(t, MIPMAP, "MAX_LEVEL (%d) < BASE_LEVEL (%d)", incomplete(t, MIPMAP, "MAX_LEVEL (%d) < BASE_LEVEL (%d)",
t->MaxLevel, baseLevel); t->Attrib.MaxLevel, baseLevel);
return; return;
} }
@ -750,7 +750,7 @@ _mesa_test_texobj_completeness( const struct gl_context *ctx,
assert(maxLevels > 0); assert(maxLevels > 0);
t->_MaxLevel = MIN3(t->MaxLevel, t->_MaxLevel = MIN3(t->Attrib.MaxLevel,
/* 'p' in the GL spec */ /* 'p' in the GL spec */
(int) (baseLevel + baseImage->MaxNumLevels - 1), (int) (baseLevel + baseImage->MaxNumLevels - 1),
/* 'q' in the GL spec */ /* 'q' in the GL spec */
@ -926,7 +926,7 @@ _mesa_cube_level_complete(const struct gl_texture_object *texObj,
GLboolean GLboolean
_mesa_cube_complete(const struct gl_texture_object *texObj) _mesa_cube_complete(const struct gl_texture_object *texObj)
{ {
return _mesa_cube_level_complete(texObj, texObj->BaseLevel); return _mesa_cube_level_complete(texObj, texObj->Attrib.BaseLevel);
} }
/** /**
@ -1034,8 +1034,8 @@ _mesa_get_fallback_texture(struct gl_context *ctx, gl_texture_index tex)
return NULL; return NULL;
assert(texObj->RefCount == 1); assert(texObj->RefCount == 1);
texObj->Sampler.MinFilter = GL_NEAREST; texObj->Sampler.Attrib.MinFilter = GL_NEAREST;
texObj->Sampler.MagFilter = GL_NEAREST; texObj->Sampler.Attrib.MagFilter = GL_NEAREST;
texFormat = ctx->Driver.ChooseTextureFormat(ctx, target, texFormat = ctx->Driver.ChooseTextureFormat(ctx, target,
GL_RGBA, GL_RGBA, GL_RGBA, GL_RGBA,
@ -1172,7 +1172,7 @@ invalidate_tex_image_error_check(struct gl_context *ctx, GLuint texture,
* of the maximum texture width, height, or depth, the error * of the maximum texture width, height, or depth, the error
* INVALID_VALUE is generated." * INVALID_VALUE is generated."
*/ */
if (level < 0 || level > t->MaxLevel) { if (level < 0 || level > t->Attrib.MaxLevel) {
_mesa_error(ctx, GL_INVALID_VALUE, "%s(level)", name); _mesa_error(ctx, GL_INVALID_VALUE, "%s(level)", name);
return NULL; return NULL;
} }
@ -2089,7 +2089,7 @@ _mesa_PrioritizeTextures( GLsizei n, const GLuint *texName,
if (texName[i] > 0) { if (texName[i] > 0) {
struct gl_texture_object *t = _mesa_lookup_texture(ctx, texName[i]); struct gl_texture_object *t = _mesa_lookup_texture(ctx, texName[i]);
if (t) { if (t) {
t->Priority = CLAMP( priorities[i], 0.0F, 1.0F ); t->Attrib.Priority = CLAMP( priorities[i], 0.0F, 1.0F );
} }
} }
} }

View File

@ -127,7 +127,7 @@ _mesa_is_texture_complete(const struct gl_texture_object *texObj,
const struct gl_sampler_object *sampler, const struct gl_sampler_object *sampler,
bool linear_as_nearest_for_int_tex) bool linear_as_nearest_for_int_tex)
{ {
struct gl_texture_image *img = texObj->Image[0][texObj->BaseLevel]; struct gl_texture_image *img = texObj->Image[0][texObj->Attrib.BaseLevel];
bool isMultisample = img && img->NumSamples >= 2; bool isMultisample = img && img->NumSamples >= 2;
/* /*
@ -147,11 +147,11 @@ _mesa_is_texture_complete(const struct gl_texture_object *texObj,
*/ */
if (!isMultisample && if (!isMultisample &&
(texObj->_IsIntegerFormat || (texObj->_IsIntegerFormat ||
(texObj->StencilSampling && (texObj->Attrib.StencilSampling &&
img->_BaseFormat == GL_DEPTH_STENCIL)) && img->_BaseFormat == GL_DEPTH_STENCIL)) &&
(sampler->MagFilter != GL_NEAREST || (sampler->Attrib.MagFilter != GL_NEAREST ||
(sampler->MinFilter != GL_NEAREST && (sampler->Attrib.MinFilter != GL_NEAREST &&
sampler->MinFilter != GL_NEAREST_MIPMAP_NEAREST))) { sampler->Attrib.MinFilter != GL_NEAREST_MIPMAP_NEAREST))) {
/* If the format is integer, only nearest filtering is allowed, /* If the format is integer, only nearest filtering is allowed,
* but some applications (eg: Grid Autosport) uses the default * but some applications (eg: Grid Autosport) uses the default
* filtering values. * filtering values.

View File

@ -268,13 +268,13 @@ set_tex_parameteri(struct gl_context *ctx,
if (!_mesa_target_allows_setting_sampler_parameters(texObj->Target)) if (!_mesa_target_allows_setting_sampler_parameters(texObj->Target))
goto invalid_dsa; goto invalid_dsa;
if (texObj->Sampler.MinFilter == params[0]) if (texObj->Sampler.Attrib.MinFilter == params[0])
return GL_FALSE; return GL_FALSE;
switch (params[0]) { switch (params[0]) {
case GL_NEAREST: case GL_NEAREST:
case GL_LINEAR: case GL_LINEAR:
flush(ctx); flush(ctx);
texObj->Sampler.MinFilter = params[0]; texObj->Sampler.Attrib.MinFilter = params[0];
return GL_TRUE; return GL_TRUE;
case GL_NEAREST_MIPMAP_NEAREST: case GL_NEAREST_MIPMAP_NEAREST:
case GL_LINEAR_MIPMAP_NEAREST: case GL_LINEAR_MIPMAP_NEAREST:
@ -283,7 +283,7 @@ set_tex_parameteri(struct gl_context *ctx,
if (texObj->Target != GL_TEXTURE_RECTANGLE_NV && if (texObj->Target != GL_TEXTURE_RECTANGLE_NV &&
texObj->Target != GL_TEXTURE_EXTERNAL_OES) { texObj->Target != GL_TEXTURE_EXTERNAL_OES) {
flush(ctx); flush(ctx);
texObj->Sampler.MinFilter = params[0]; texObj->Sampler.Attrib.MinFilter = params[0];
return GL_TRUE; return GL_TRUE;
} }
FALLTHROUGH; FALLTHROUGH;
@ -296,13 +296,13 @@ set_tex_parameteri(struct gl_context *ctx,
if (!_mesa_target_allows_setting_sampler_parameters(texObj->Target)) if (!_mesa_target_allows_setting_sampler_parameters(texObj->Target))
goto invalid_dsa; goto invalid_dsa;
if (texObj->Sampler.MagFilter == params[0]) if (texObj->Sampler.Attrib.MagFilter == params[0])
return GL_FALSE; return GL_FALSE;
switch (params[0]) { switch (params[0]) {
case GL_NEAREST: case GL_NEAREST:
case GL_LINEAR: case GL_LINEAR:
flush(ctx); /* does not effect completeness */ flush(ctx); /* does not effect completeness */
texObj->Sampler.MagFilter = params[0]; texObj->Sampler.Attrib.MagFilter = params[0];
return GL_TRUE; return GL_TRUE;
default: default:
goto invalid_param; goto invalid_param;
@ -313,11 +313,11 @@ set_tex_parameteri(struct gl_context *ctx,
if (!_mesa_target_allows_setting_sampler_parameters(texObj->Target)) if (!_mesa_target_allows_setting_sampler_parameters(texObj->Target))
goto invalid_dsa; goto invalid_dsa;
if (texObj->Sampler.WrapS == params[0]) if (texObj->Sampler.Attrib.WrapS == params[0])
return GL_FALSE; return GL_FALSE;
if (validate_texture_wrap_mode(ctx, texObj->Target, params[0])) { if (validate_texture_wrap_mode(ctx, texObj->Target, params[0])) {
flush(ctx); flush(ctx);
texObj->Sampler.WrapS = params[0]; texObj->Sampler.Attrib.WrapS = params[0];
return GL_TRUE; return GL_TRUE;
} }
return GL_FALSE; return GL_FALSE;
@ -326,11 +326,11 @@ set_tex_parameteri(struct gl_context *ctx,
if (!_mesa_target_allows_setting_sampler_parameters(texObj->Target)) if (!_mesa_target_allows_setting_sampler_parameters(texObj->Target))
goto invalid_dsa; goto invalid_dsa;
if (texObj->Sampler.WrapT == params[0]) if (texObj->Sampler.Attrib.WrapT == params[0])
return GL_FALSE; return GL_FALSE;
if (validate_texture_wrap_mode(ctx, texObj->Target, params[0])) { if (validate_texture_wrap_mode(ctx, texObj->Target, params[0])) {
flush(ctx); flush(ctx);
texObj->Sampler.WrapT = params[0]; texObj->Sampler.Attrib.WrapT = params[0];
return GL_TRUE; return GL_TRUE;
} }
return GL_FALSE; return GL_FALSE;
@ -339,11 +339,11 @@ set_tex_parameteri(struct gl_context *ctx,
if (!_mesa_target_allows_setting_sampler_parameters(texObj->Target)) if (!_mesa_target_allows_setting_sampler_parameters(texObj->Target))
goto invalid_dsa; goto invalid_dsa;
if (texObj->Sampler.WrapR == params[0]) if (texObj->Sampler.Attrib.WrapR == params[0])
return GL_FALSE; return GL_FALSE;
if (validate_texture_wrap_mode(ctx, texObj->Target, params[0])) { if (validate_texture_wrap_mode(ctx, texObj->Target, params[0])) {
flush(ctx); flush(ctx);
texObj->Sampler.WrapR = params[0]; texObj->Sampler.Attrib.WrapR = params[0];
return GL_TRUE; return GL_TRUE;
} }
return GL_FALSE; return GL_FALSE;
@ -352,7 +352,7 @@ set_tex_parameteri(struct gl_context *ctx,
if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx)) if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx))
goto invalid_pname; goto invalid_pname;
if (texObj->BaseLevel == params[0]) if (texObj->Attrib.BaseLevel == params[0])
return GL_FALSE; return GL_FALSE;
/* Section 8.10 (Texture Parameters) of the OpenGL 4.5 Core Profile spec /* Section 8.10 (Texture Parameters) of the OpenGL 4.5 Core Profile spec
@ -386,14 +386,14 @@ set_tex_parameteri(struct gl_context *ctx,
/** See note about ARB_texture_storage below */ /** See note about ARB_texture_storage below */
if (texObj->Immutable) if (texObj->Immutable)
texObj->BaseLevel = MIN2(texObj->ImmutableLevels - 1, params[0]); texObj->Attrib.BaseLevel = MIN2(texObj->ImmutableLevels - 1, params[0]);
else else
texObj->BaseLevel = params[0]; texObj->Attrib.BaseLevel = params[0];
return GL_TRUE; return GL_TRUE;
case GL_TEXTURE_MAX_LEVEL: case GL_TEXTURE_MAX_LEVEL:
if (texObj->MaxLevel == params[0]) if (texObj->Attrib.MaxLevel == params[0])
return GL_FALSE; return GL_FALSE;
if (params[0] < 0 || if (params[0] < 0 ||
@ -412,10 +412,10 @@ set_tex_parameteri(struct gl_context *ctx,
* passed the call to TexStorage* for the texture object. * passed the call to TexStorage* for the texture object.
*/ */
if (texObj->Immutable) if (texObj->Immutable)
texObj->MaxLevel = CLAMP(params[0], texObj->BaseLevel, texObj->Attrib.MaxLevel = CLAMP(params[0], texObj->Attrib.BaseLevel,
texObj->ImmutableLevels - 1); texObj->ImmutableLevels - 1);
else else
texObj->MaxLevel = params[0]; texObj->Attrib.MaxLevel = params[0];
return GL_TRUE; return GL_TRUE;
@ -425,9 +425,9 @@ set_tex_parameteri(struct gl_context *ctx,
if (params[0] && texObj->Target == GL_TEXTURE_EXTERNAL_OES) if (params[0] && texObj->Target == GL_TEXTURE_EXTERNAL_OES)
goto invalid_param; goto invalid_param;
if (texObj->GenerateMipmap != params[0]) { if (texObj->Attrib.GenerateMipmap != params[0]) {
/* no flush() */ /* no flush() */
texObj->GenerateMipmap = params[0] ? GL_TRUE : GL_FALSE; texObj->Attrib.GenerateMipmap = params[0] ? GL_TRUE : GL_FALSE;
return GL_TRUE; return GL_TRUE;
} }
return GL_FALSE; return GL_FALSE;
@ -439,12 +439,12 @@ set_tex_parameteri(struct gl_context *ctx,
if (!_mesa_target_allows_setting_sampler_parameters(texObj->Target)) if (!_mesa_target_allows_setting_sampler_parameters(texObj->Target))
goto invalid_dsa; goto invalid_dsa;
if (texObj->Sampler.CompareMode == params[0]) if (texObj->Sampler.Attrib.CompareMode == params[0])
return GL_FALSE; return GL_FALSE;
if (params[0] == GL_NONE || if (params[0] == GL_NONE ||
params[0] == GL_COMPARE_R_TO_TEXTURE_ARB) { params[0] == GL_COMPARE_R_TO_TEXTURE_ARB) {
flush(ctx); flush(ctx);
texObj->Sampler.CompareMode = params[0]; texObj->Sampler.Attrib.CompareMode = params[0];
return GL_TRUE; return GL_TRUE;
} }
goto invalid_param; goto invalid_param;
@ -458,7 +458,7 @@ set_tex_parameteri(struct gl_context *ctx,
if (!_mesa_target_allows_setting_sampler_parameters(texObj->Target)) if (!_mesa_target_allows_setting_sampler_parameters(texObj->Target))
goto invalid_dsa; goto invalid_dsa;
if (texObj->Sampler.CompareFunc == params[0]) if (texObj->Sampler.Attrib.CompareFunc == params[0])
return GL_FALSE; return GL_FALSE;
switch (params[0]) { switch (params[0]) {
case GL_LEQUAL: case GL_LEQUAL:
@ -470,7 +470,7 @@ set_tex_parameteri(struct gl_context *ctx,
case GL_ALWAYS: case GL_ALWAYS:
case GL_NEVER: case GL_NEVER:
flush(ctx); flush(ctx);
texObj->Sampler.CompareFunc = params[0]; texObj->Sampler.Attrib.CompareFunc = params[0];
return GL_TRUE; return GL_TRUE;
default: default:
goto invalid_param; goto invalid_param;
@ -483,14 +483,14 @@ set_tex_parameteri(struct gl_context *ctx,
* existed in OpenGL ES. * existed in OpenGL ES.
*/ */
if (ctx->API == API_OPENGL_COMPAT && ctx->Extensions.ARB_depth_texture) { if (ctx->API == API_OPENGL_COMPAT && ctx->Extensions.ARB_depth_texture) {
if (texObj->DepthMode == params[0]) if (texObj->Attrib.DepthMode == params[0])
return GL_FALSE; return GL_FALSE;
if (params[0] == GL_LUMINANCE || if (params[0] == GL_LUMINANCE ||
params[0] == GL_INTENSITY || params[0] == GL_INTENSITY ||
params[0] == GL_ALPHA || params[0] == GL_ALPHA ||
(ctx->Extensions.ARB_texture_rg && params[0] == GL_RED)) { (ctx->Extensions.ARB_texture_rg && params[0] == GL_RED)) {
flush(ctx); flush(ctx);
texObj->DepthMode = params[0]; texObj->Attrib.DepthMode = params[0];
return GL_TRUE; return GL_TRUE;
} }
goto invalid_param; goto invalid_param;
@ -503,10 +503,10 @@ set_tex_parameteri(struct gl_context *ctx,
if (!stencil && params[0] != GL_DEPTH_COMPONENT) if (!stencil && params[0] != GL_DEPTH_COMPONENT)
goto invalid_param; goto invalid_param;
if (texObj->StencilSampling == stencil) if (texObj->Attrib.StencilSampling == stencil)
return GL_FALSE; return GL_FALSE;
texObj->StencilSampling = stencil; texObj->Attrib.StencilSampling = stencil;
return GL_TRUE; return GL_TRUE;
} }
goto invalid_pname; goto invalid_pname;
@ -537,8 +537,8 @@ set_tex_parameteri(struct gl_context *ctx,
assert(comp < 4); assert(comp < 4);
flush(ctx); flush(ctx);
texObj->Swizzle[comp] = params[0]; texObj->Attrib.Swizzle[comp] = params[0];
set_swizzle_component(&texObj->_Swizzle, comp, swz); set_swizzle_component(&texObj->Attrib._Swizzle, comp, swz);
return GL_TRUE; return GL_TRUE;
} }
goto invalid_pname; goto invalid_pname;
@ -551,8 +551,8 @@ set_tex_parameteri(struct gl_context *ctx,
for (comp = 0; comp < 4; comp++) { for (comp = 0; comp < 4; comp++) {
const GLint swz = comp_to_swizzle(params[comp]); const GLint swz = comp_to_swizzle(params[comp]);
if (swz >= 0) { if (swz >= 0) {
texObj->Swizzle[comp] = params[comp]; texObj->Attrib.Swizzle[comp] = params[comp];
set_swizzle_component(&texObj->_Swizzle, comp, swz); set_swizzle_component(&texObj->Attrib._Swizzle, comp, swz);
} }
else { else {
_mesa_error(ctx, GL_INVALID_ENUM, _mesa_error(ctx, GL_INVALID_ENUM,
@ -573,9 +573,9 @@ set_tex_parameteri(struct gl_context *ctx,
goto invalid_dsa; goto invalid_dsa;
if (decode == GL_DECODE_EXT || decode == GL_SKIP_DECODE_EXT) { if (decode == GL_DECODE_EXT || decode == GL_SKIP_DECODE_EXT) {
if (texObj->Sampler.sRGBDecode != decode) { if (texObj->Sampler.Attrib.sRGBDecode != decode) {
flush(ctx); flush(ctx);
texObj->Sampler.sRGBDecode = decode; texObj->Sampler.Attrib.sRGBDecode = decode;
} }
return GL_TRUE; return GL_TRUE;
} }
@ -593,9 +593,9 @@ set_tex_parameteri(struct gl_context *ctx,
if (param != GL_TRUE && param != GL_FALSE) { if (param != GL_TRUE && param != GL_FALSE) {
goto invalid_param; goto invalid_param;
} }
if (param != texObj->Sampler.CubeMapSeamless) { if (param != texObj->Sampler.Attrib.CubeMapSeamless) {
flush(ctx); flush(ctx);
texObj->Sampler.CubeMapSeamless = param; texObj->Sampler.Attrib.CubeMapSeamless = param;
} }
return GL_TRUE; return GL_TRUE;
} }
@ -671,10 +671,10 @@ set_tex_parameterf(struct gl_context *ctx,
if (!_mesa_target_allows_setting_sampler_parameters(texObj->Target)) if (!_mesa_target_allows_setting_sampler_parameters(texObj->Target))
goto invalid_dsa; goto invalid_dsa;
if (texObj->Sampler.MinLod == params[0]) if (texObj->Sampler.Attrib.MinLod == params[0])
return GL_FALSE; return GL_FALSE;
flush(ctx); flush(ctx);
texObj->Sampler.MinLod = params[0]; texObj->Sampler.Attrib.MinLod = params[0];
return GL_TRUE; return GL_TRUE;
case GL_TEXTURE_MAX_LOD: case GL_TEXTURE_MAX_LOD:
@ -684,10 +684,10 @@ set_tex_parameterf(struct gl_context *ctx,
if (!_mesa_target_allows_setting_sampler_parameters(texObj->Target)) if (!_mesa_target_allows_setting_sampler_parameters(texObj->Target))
goto invalid_dsa; goto invalid_dsa;
if (texObj->Sampler.MaxLod == params[0]) if (texObj->Sampler.Attrib.MaxLod == params[0])
return GL_FALSE; return GL_FALSE;
flush(ctx); flush(ctx);
texObj->Sampler.MaxLod = params[0]; texObj->Sampler.Attrib.MaxLod = params[0];
return GL_TRUE; return GL_TRUE;
case GL_TEXTURE_PRIORITY: case GL_TEXTURE_PRIORITY:
@ -695,7 +695,7 @@ set_tex_parameterf(struct gl_context *ctx,
goto invalid_pname; goto invalid_pname;
flush(ctx); flush(ctx);
texObj->Priority = CLAMP(params[0], 0.0F, 1.0F); texObj->Attrib.Priority = CLAMP(params[0], 0.0F, 1.0F);
return GL_TRUE; return GL_TRUE;
case GL_TEXTURE_MAX_ANISOTROPY_EXT: case GL_TEXTURE_MAX_ANISOTROPY_EXT:
@ -703,7 +703,7 @@ set_tex_parameterf(struct gl_context *ctx,
if (!_mesa_target_allows_setting_sampler_parameters(texObj->Target)) if (!_mesa_target_allows_setting_sampler_parameters(texObj->Target))
goto invalid_dsa; goto invalid_dsa;
if (texObj->Sampler.MaxAnisotropy == params[0]) if (texObj->Sampler.Attrib.MaxAnisotropy == params[0])
return GL_FALSE; return GL_FALSE;
if (params[0] < 1.0F) { if (params[0] < 1.0F) {
_mesa_error(ctx, GL_INVALID_VALUE, "glTex%sParameter(param)", _mesa_error(ctx, GL_INVALID_VALUE, "glTex%sParameter(param)",
@ -712,7 +712,7 @@ set_tex_parameterf(struct gl_context *ctx,
} }
flush(ctx); flush(ctx);
/* clamp to max, that's what NVIDIA does */ /* clamp to max, that's what NVIDIA does */
texObj->Sampler.MaxAnisotropy = MIN2(params[0], texObj->Sampler.Attrib.MaxAnisotropy = MIN2(params[0],
ctx->Const.MaxTextureMaxAnisotropy); ctx->Const.MaxTextureMaxAnisotropy);
return GL_TRUE; return GL_TRUE;
} }
@ -731,9 +731,9 @@ set_tex_parameterf(struct gl_context *ctx,
if (!_mesa_target_allows_setting_sampler_parameters(texObj->Target)) if (!_mesa_target_allows_setting_sampler_parameters(texObj->Target))
goto invalid_dsa; goto invalid_dsa;
if (texObj->Sampler.LodBias != params[0]) { if (texObj->Sampler.Attrib.LodBias != params[0]) {
flush(ctx); flush(ctx);
texObj->Sampler.LodBias = params[0]; texObj->Sampler.Attrib.LodBias = params[0];
return GL_TRUE; return GL_TRUE;
} }
break; break;
@ -757,15 +757,15 @@ set_tex_parameterf(struct gl_context *ctx,
flush(ctx); flush(ctx);
/* ARB_texture_float disables clamping */ /* ARB_texture_float disables clamping */
if (ctx->Extensions.ARB_texture_float) { if (ctx->Extensions.ARB_texture_float) {
texObj->Sampler.BorderColor.f[RCOMP] = params[0]; texObj->Sampler.Attrib.BorderColor.f[RCOMP] = params[0];
texObj->Sampler.BorderColor.f[GCOMP] = params[1]; texObj->Sampler.Attrib.BorderColor.f[GCOMP] = params[1];
texObj->Sampler.BorderColor.f[BCOMP] = params[2]; texObj->Sampler.Attrib.BorderColor.f[BCOMP] = params[2];
texObj->Sampler.BorderColor.f[ACOMP] = params[3]; texObj->Sampler.Attrib.BorderColor.f[ACOMP] = params[3];
} else { } else {
texObj->Sampler.BorderColor.f[RCOMP] = CLAMP(params[0], 0.0F, 1.0F); texObj->Sampler.Attrib.BorderColor.f[RCOMP] = CLAMP(params[0], 0.0F, 1.0F);
texObj->Sampler.BorderColor.f[GCOMP] = CLAMP(params[1], 0.0F, 1.0F); texObj->Sampler.Attrib.BorderColor.f[GCOMP] = CLAMP(params[1], 0.0F, 1.0F);
texObj->Sampler.BorderColor.f[BCOMP] = CLAMP(params[2], 0.0F, 1.0F); texObj->Sampler.Attrib.BorderColor.f[BCOMP] = CLAMP(params[2], 0.0F, 1.0F);
texObj->Sampler.BorderColor.f[ACOMP] = CLAMP(params[3], 0.0F, 1.0F); texObj->Sampler.Attrib.BorderColor.f[ACOMP] = CLAMP(params[3], 0.0F, 1.0F);
} }
return GL_TRUE; return GL_TRUE;
@ -1028,7 +1028,7 @@ _mesa_texture_parameterIiv(struct gl_context *ctx,
} }
FLUSH_VERTICES(ctx, _NEW_TEXTURE_OBJECT); FLUSH_VERTICES(ctx, _NEW_TEXTURE_OBJECT);
/* set the integer-valued border color */ /* set the integer-valued border color */
COPY_4V(texObj->Sampler.BorderColor.i, params); COPY_4V(texObj->Sampler.Attrib.BorderColor.i, params);
break; break;
default: default:
_mesa_texture_parameteriv(ctx, texObj, pname, params, dsa); _mesa_texture_parameteriv(ctx, texObj, pname, params, dsa);
@ -1056,7 +1056,7 @@ _mesa_texture_parameterIuiv(struct gl_context *ctx,
} }
FLUSH_VERTICES(ctx, _NEW_TEXTURE_OBJECT); FLUSH_VERTICES(ctx, _NEW_TEXTURE_OBJECT);
/* set the unsigned integer-valued border color */ /* set the unsigned integer-valued border color */
COPY_4V(texObj->Sampler.BorderColor.ui, params); COPY_4V(texObj->Sampler.Attrib.BorderColor.ui, params);
break; break;
default: default:
_mesa_texture_parameteriv(ctx, texObj, pname, (const GLint *) params, _mesa_texture_parameteriv(ctx, texObj, pname, (const GLint *) params,
@ -2146,19 +2146,19 @@ get_tex_parameterfv(struct gl_context *ctx,
_mesa_lock_context_textures(ctx); _mesa_lock_context_textures(ctx);
switch (pname) { switch (pname) {
case GL_TEXTURE_MAG_FILTER: case GL_TEXTURE_MAG_FILTER:
*params = ENUM_TO_FLOAT(obj->Sampler.MagFilter); *params = ENUM_TO_FLOAT(obj->Sampler.Attrib.MagFilter);
break; break;
case GL_TEXTURE_MIN_FILTER: case GL_TEXTURE_MIN_FILTER:
*params = ENUM_TO_FLOAT(obj->Sampler.MinFilter); *params = ENUM_TO_FLOAT(obj->Sampler.Attrib.MinFilter);
break; break;
case GL_TEXTURE_WRAP_S: case GL_TEXTURE_WRAP_S:
*params = ENUM_TO_FLOAT(obj->Sampler.WrapS); *params = ENUM_TO_FLOAT(obj->Sampler.Attrib.WrapS);
break; break;
case GL_TEXTURE_WRAP_T: case GL_TEXTURE_WRAP_T:
*params = ENUM_TO_FLOAT(obj->Sampler.WrapT); *params = ENUM_TO_FLOAT(obj->Sampler.Attrib.WrapT);
break; break;
case GL_TEXTURE_WRAP_R: case GL_TEXTURE_WRAP_R:
*params = ENUM_TO_FLOAT(obj->Sampler.WrapR); *params = ENUM_TO_FLOAT(obj->Sampler.Attrib.WrapR);
break; break;
case GL_TEXTURE_BORDER_COLOR: case GL_TEXTURE_BORDER_COLOR:
if (ctx->API == API_OPENGLES || if (ctx->API == API_OPENGLES ||
@ -2166,16 +2166,16 @@ get_tex_parameterfv(struct gl_context *ctx,
goto invalid_pname; goto invalid_pname;
if (_mesa_get_clamp_fragment_color(ctx, ctx->DrawBuffer)) { if (_mesa_get_clamp_fragment_color(ctx, ctx->DrawBuffer)) {
params[0] = CLAMP(obj->Sampler.BorderColor.f[0], 0.0F, 1.0F); params[0] = CLAMP(obj->Sampler.Attrib.BorderColor.f[0], 0.0F, 1.0F);
params[1] = CLAMP(obj->Sampler.BorderColor.f[1], 0.0F, 1.0F); params[1] = CLAMP(obj->Sampler.Attrib.BorderColor.f[1], 0.0F, 1.0F);
params[2] = CLAMP(obj->Sampler.BorderColor.f[2], 0.0F, 1.0F); params[2] = CLAMP(obj->Sampler.Attrib.BorderColor.f[2], 0.0F, 1.0F);
params[3] = CLAMP(obj->Sampler.BorderColor.f[3], 0.0F, 1.0F); params[3] = CLAMP(obj->Sampler.Attrib.BorderColor.f[3], 0.0F, 1.0F);
} }
else { else {
params[0] = obj->Sampler.BorderColor.f[0]; params[0] = obj->Sampler.Attrib.BorderColor.f[0];
params[1] = obj->Sampler.BorderColor.f[1]; params[1] = obj->Sampler.Attrib.BorderColor.f[1];
params[2] = obj->Sampler.BorderColor.f[2]; params[2] = obj->Sampler.Attrib.BorderColor.f[2];
params[3] = obj->Sampler.BorderColor.f[3]; params[3] = obj->Sampler.Attrib.BorderColor.f[3];
} }
break; break;
case GL_TEXTURE_RESIDENT: case GL_TEXTURE_RESIDENT:
@ -2188,51 +2188,51 @@ get_tex_parameterfv(struct gl_context *ctx,
if (ctx->API != API_OPENGL_COMPAT) if (ctx->API != API_OPENGL_COMPAT)
goto invalid_pname; goto invalid_pname;
*params = obj->Priority; *params = obj->Attrib.Priority;
break; break;
case GL_TEXTURE_MIN_LOD: case GL_TEXTURE_MIN_LOD:
if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx)) if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx))
goto invalid_pname; goto invalid_pname;
*params = obj->Sampler.MinLod; *params = obj->Sampler.Attrib.MinLod;
break; break;
case GL_TEXTURE_MAX_LOD: case GL_TEXTURE_MAX_LOD:
if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx)) if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx))
goto invalid_pname; goto invalid_pname;
*params = obj->Sampler.MaxLod; *params = obj->Sampler.Attrib.MaxLod;
break; break;
case GL_TEXTURE_BASE_LEVEL: case GL_TEXTURE_BASE_LEVEL:
if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx)) if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx))
goto invalid_pname; goto invalid_pname;
*params = (GLfloat) obj->BaseLevel; *params = (GLfloat) obj->Attrib.BaseLevel;
break; break;
case GL_TEXTURE_MAX_LEVEL: case GL_TEXTURE_MAX_LEVEL:
*params = (GLfloat) obj->MaxLevel; *params = (GLfloat) obj->Attrib.MaxLevel;
break; break;
case GL_TEXTURE_MAX_ANISOTROPY_EXT: case GL_TEXTURE_MAX_ANISOTROPY_EXT:
if (!ctx->Extensions.EXT_texture_filter_anisotropic) if (!ctx->Extensions.EXT_texture_filter_anisotropic)
goto invalid_pname; goto invalid_pname;
*params = obj->Sampler.MaxAnisotropy; *params = obj->Sampler.Attrib.MaxAnisotropy;
break; break;
case GL_GENERATE_MIPMAP_SGIS: case GL_GENERATE_MIPMAP_SGIS:
if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES) if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES)
goto invalid_pname; goto invalid_pname;
*params = (GLfloat) obj->GenerateMipmap; *params = (GLfloat) obj->Attrib.GenerateMipmap;
break; break;
case GL_TEXTURE_COMPARE_MODE_ARB: case GL_TEXTURE_COMPARE_MODE_ARB:
if ((!_mesa_is_desktop_gl(ctx) || !ctx->Extensions.ARB_shadow) if ((!_mesa_is_desktop_gl(ctx) || !ctx->Extensions.ARB_shadow)
&& !_mesa_is_gles3(ctx)) && !_mesa_is_gles3(ctx))
goto invalid_pname; goto invalid_pname;
*params = (GLfloat) obj->Sampler.CompareMode; *params = (GLfloat) obj->Sampler.Attrib.CompareMode;
break; break;
case GL_TEXTURE_COMPARE_FUNC_ARB: case GL_TEXTURE_COMPARE_FUNC_ARB:
if ((!_mesa_is_desktop_gl(ctx) || !ctx->Extensions.ARB_shadow) if ((!_mesa_is_desktop_gl(ctx) || !ctx->Extensions.ARB_shadow)
&& !_mesa_is_gles3(ctx)) && !_mesa_is_gles3(ctx))
goto invalid_pname; goto invalid_pname;
*params = (GLfloat) obj->Sampler.CompareFunc; *params = (GLfloat) obj->Sampler.Attrib.CompareFunc;
break; break;
case GL_DEPTH_TEXTURE_MODE_ARB: case GL_DEPTH_TEXTURE_MODE_ARB:
/* GL_DEPTH_TEXTURE_MODE_ARB is removed in core-profile and it has /* GL_DEPTH_TEXTURE_MODE_ARB is removed in core-profile and it has
@ -2240,19 +2240,19 @@ get_tex_parameterfv(struct gl_context *ctx,
*/ */
if (ctx->API != API_OPENGL_COMPAT || !ctx->Extensions.ARB_depth_texture) if (ctx->API != API_OPENGL_COMPAT || !ctx->Extensions.ARB_depth_texture)
goto invalid_pname; goto invalid_pname;
*params = (GLfloat) obj->DepthMode; *params = (GLfloat) obj->Attrib.DepthMode;
break; break;
case GL_DEPTH_STENCIL_TEXTURE_MODE: case GL_DEPTH_STENCIL_TEXTURE_MODE:
if (!_mesa_has_ARB_stencil_texturing(ctx) && !_mesa_is_gles31(ctx)) if (!_mesa_has_ARB_stencil_texturing(ctx) && !_mesa_is_gles31(ctx))
goto invalid_pname; goto invalid_pname;
*params = (GLfloat) *params = (GLfloat)
(obj->StencilSampling ? GL_STENCIL_INDEX : GL_DEPTH_COMPONENT); (obj->Attrib.StencilSampling ? GL_STENCIL_INDEX : GL_DEPTH_COMPONENT);
break; break;
case GL_TEXTURE_LOD_BIAS: case GL_TEXTURE_LOD_BIAS:
if (_mesa_is_gles(ctx)) if (_mesa_is_gles(ctx))
goto invalid_pname; goto invalid_pname;
*params = obj->Sampler.LodBias; *params = obj->Sampler.Attrib.LodBias;
break; break;
case GL_TEXTURE_CROP_RECT_OES: case GL_TEXTURE_CROP_RECT_OES:
if (ctx->API != API_OPENGLES || !ctx->Extensions.OES_draw_texture) if (ctx->API != API_OPENGLES || !ctx->Extensions.OES_draw_texture)
@ -2272,7 +2272,7 @@ get_tex_parameterfv(struct gl_context *ctx,
|| !ctx->Extensions.EXT_texture_swizzle) || !ctx->Extensions.EXT_texture_swizzle)
&& !_mesa_is_gles3(ctx)) && !_mesa_is_gles3(ctx))
goto invalid_pname; goto invalid_pname;
*params = (GLfloat) obj->Swizzle[pname - GL_TEXTURE_SWIZZLE_R_EXT]; *params = (GLfloat) obj->Attrib.Swizzle[pname - GL_TEXTURE_SWIZZLE_R_EXT];
break; break;
case GL_TEXTURE_SWIZZLE_RGBA_EXT: case GL_TEXTURE_SWIZZLE_RGBA_EXT:
@ -2284,7 +2284,7 @@ get_tex_parameterfv(struct gl_context *ctx,
else { else {
GLuint comp; GLuint comp;
for (comp = 0; comp < 4; comp++) { for (comp = 0; comp < 4; comp++) {
params[comp] = (GLfloat) obj->Swizzle[comp]; params[comp] = (GLfloat) obj->Attrib.Swizzle[comp];
} }
} }
break; break;
@ -2293,7 +2293,7 @@ get_tex_parameterfv(struct gl_context *ctx,
if (!_mesa_is_desktop_gl(ctx) if (!_mesa_is_desktop_gl(ctx)
|| !ctx->Extensions.AMD_seamless_cubemap_per_texture) || !ctx->Extensions.AMD_seamless_cubemap_per_texture)
goto invalid_pname; goto invalid_pname;
*params = (GLfloat) obj->Sampler.CubeMapSeamless; *params = (GLfloat) obj->Sampler.Attrib.CubeMapSeamless;
break; break;
case GL_TEXTURE_IMMUTABLE_FORMAT: case GL_TEXTURE_IMMUTABLE_FORMAT:
@ -2340,7 +2340,7 @@ get_tex_parameterfv(struct gl_context *ctx,
case GL_TEXTURE_SRGB_DECODE_EXT: case GL_TEXTURE_SRGB_DECODE_EXT:
if (!ctx->Extensions.EXT_texture_sRGB_decode) if (!ctx->Extensions.EXT_texture_sRGB_decode)
goto invalid_pname; goto invalid_pname;
*params = (GLfloat) obj->Sampler.sRGBDecode; *params = (GLfloat) obj->Sampler.Attrib.sRGBDecode;
break; break;
case GL_IMAGE_FORMAT_COMPATIBILITY_TYPE: case GL_IMAGE_FORMAT_COMPATIBILITY_TYPE:
@ -2384,19 +2384,19 @@ get_tex_parameteriv(struct gl_context *ctx,
_mesa_lock_texture(ctx, obj); _mesa_lock_texture(ctx, obj);
switch (pname) { switch (pname) {
case GL_TEXTURE_MAG_FILTER: case GL_TEXTURE_MAG_FILTER:
*params = (GLint) obj->Sampler.MagFilter; *params = (GLint) obj->Sampler.Attrib.MagFilter;
break; break;
case GL_TEXTURE_MIN_FILTER: case GL_TEXTURE_MIN_FILTER:
*params = (GLint) obj->Sampler.MinFilter; *params = (GLint) obj->Sampler.Attrib.MinFilter;
break; break;
case GL_TEXTURE_WRAP_S: case GL_TEXTURE_WRAP_S:
*params = (GLint) obj->Sampler.WrapS; *params = (GLint) obj->Sampler.Attrib.WrapS;
break; break;
case GL_TEXTURE_WRAP_T: case GL_TEXTURE_WRAP_T:
*params = (GLint) obj->Sampler.WrapT; *params = (GLint) obj->Sampler.Attrib.WrapT;
break; break;
case GL_TEXTURE_WRAP_R: case GL_TEXTURE_WRAP_R:
*params = (GLint) obj->Sampler.WrapR; *params = (GLint) obj->Sampler.Attrib.WrapR;
break; break;
case GL_TEXTURE_BORDER_COLOR: case GL_TEXTURE_BORDER_COLOR:
if (ctx->API == API_OPENGLES || if (ctx->API == API_OPENGLES ||
@ -2405,10 +2405,10 @@ get_tex_parameteriv(struct gl_context *ctx,
{ {
GLfloat b[4]; GLfloat b[4];
b[0] = CLAMP(obj->Sampler.BorderColor.f[0], 0.0F, 1.0F); b[0] = CLAMP(obj->Sampler.Attrib.BorderColor.f[0], 0.0F, 1.0F);
b[1] = CLAMP(obj->Sampler.BorderColor.f[1], 0.0F, 1.0F); b[1] = CLAMP(obj->Sampler.Attrib.BorderColor.f[1], 0.0F, 1.0F);
b[2] = CLAMP(obj->Sampler.BorderColor.f[2], 0.0F, 1.0F); b[2] = CLAMP(obj->Sampler.Attrib.BorderColor.f[2], 0.0F, 1.0F);
b[3] = CLAMP(obj->Sampler.BorderColor.f[3], 0.0F, 1.0F); b[3] = CLAMP(obj->Sampler.Attrib.BorderColor.f[3], 0.0F, 1.0F);
params[0] = FLOAT_TO_INT(b[0]); params[0] = FLOAT_TO_INT(b[0]);
params[1] = FLOAT_TO_INT(b[1]); params[1] = FLOAT_TO_INT(b[1]);
params[2] = FLOAT_TO_INT(b[2]); params[2] = FLOAT_TO_INT(b[2]);
@ -2425,7 +2425,7 @@ get_tex_parameteriv(struct gl_context *ctx,
if (ctx->API != API_OPENGL_COMPAT) if (ctx->API != API_OPENGL_COMPAT)
goto invalid_pname; goto invalid_pname;
*params = FLOAT_TO_INT(obj->Priority); *params = FLOAT_TO_INT(obj->Attrib.Priority);
break; break;
case GL_TEXTURE_MIN_LOD: case GL_TEXTURE_MIN_LOD:
if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx)) if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx))
@ -2440,7 +2440,7 @@ get_tex_parameteriv(struct gl_context *ctx,
* it cannot be represented by the returned data type, then the * it cannot be represented by the returned data type, then the
* nearest value representable using that type is returned. * nearest value representable using that type is returned.
*/ */
*params = CLAMP(lroundf(obj->Sampler.MinLod), INT_MIN, INT_MAX); *params = CLAMP(lroundf(obj->Sampler.Attrib.MinLod), INT_MIN, INT_MAX);
break; break;
case GL_TEXTURE_MAX_LOD: case GL_TEXTURE_MAX_LOD:
if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx)) if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx))
@ -2455,16 +2455,16 @@ get_tex_parameteriv(struct gl_context *ctx,
* it cannot be represented by the returned data type, then the * it cannot be represented by the returned data type, then the
* nearest value representable using that type is returned. * nearest value representable using that type is returned.
*/ */
*params = CLAMP(lroundf(obj->Sampler.MaxLod), INT_MIN, INT_MAX); *params = CLAMP(lroundf(obj->Sampler.Attrib.MaxLod), INT_MIN, INT_MAX);
break; break;
case GL_TEXTURE_BASE_LEVEL: case GL_TEXTURE_BASE_LEVEL:
if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx)) if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx))
goto invalid_pname; goto invalid_pname;
*params = obj->BaseLevel; *params = obj->Attrib.BaseLevel;
break; break;
case GL_TEXTURE_MAX_LEVEL: case GL_TEXTURE_MAX_LEVEL:
*params = obj->MaxLevel; *params = obj->Attrib.MaxLevel;
break; break;
case GL_TEXTURE_MAX_ANISOTROPY_EXT: case GL_TEXTURE_MAX_ANISOTROPY_EXT:
if (!ctx->Extensions.EXT_texture_filter_anisotropic) if (!ctx->Extensions.EXT_texture_filter_anisotropic)
@ -2479,36 +2479,36 @@ get_tex_parameteriv(struct gl_context *ctx,
* it cannot be represented by the returned data type, then the * it cannot be represented by the returned data type, then the
* nearest value representable using that type is returned. * nearest value representable using that type is returned.
*/ */
*params = CLAMP(lroundf(obj->Sampler.MaxAnisotropy), INT_MIN, INT_MAX); *params = CLAMP(lroundf(obj->Sampler.Attrib.MaxAnisotropy), INT_MIN, INT_MAX);
break; break;
case GL_GENERATE_MIPMAP_SGIS: case GL_GENERATE_MIPMAP_SGIS:
if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES) if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES)
goto invalid_pname; goto invalid_pname;
*params = (GLint) obj->GenerateMipmap; *params = (GLint) obj->Attrib.GenerateMipmap;
break; break;
case GL_TEXTURE_COMPARE_MODE_ARB: case GL_TEXTURE_COMPARE_MODE_ARB:
if ((!_mesa_is_desktop_gl(ctx) || !ctx->Extensions.ARB_shadow) if ((!_mesa_is_desktop_gl(ctx) || !ctx->Extensions.ARB_shadow)
&& !_mesa_is_gles3(ctx)) && !_mesa_is_gles3(ctx))
goto invalid_pname; goto invalid_pname;
*params = (GLint) obj->Sampler.CompareMode; *params = (GLint) obj->Sampler.Attrib.CompareMode;
break; break;
case GL_TEXTURE_COMPARE_FUNC_ARB: case GL_TEXTURE_COMPARE_FUNC_ARB:
if ((!_mesa_is_desktop_gl(ctx) || !ctx->Extensions.ARB_shadow) if ((!_mesa_is_desktop_gl(ctx) || !ctx->Extensions.ARB_shadow)
&& !_mesa_is_gles3(ctx)) && !_mesa_is_gles3(ctx))
goto invalid_pname; goto invalid_pname;
*params = (GLint) obj->Sampler.CompareFunc; *params = (GLint) obj->Sampler.Attrib.CompareFunc;
break; break;
case GL_DEPTH_TEXTURE_MODE_ARB: case GL_DEPTH_TEXTURE_MODE_ARB:
if (ctx->API != API_OPENGL_COMPAT || !ctx->Extensions.ARB_depth_texture) if (ctx->API != API_OPENGL_COMPAT || !ctx->Extensions.ARB_depth_texture)
goto invalid_pname; goto invalid_pname;
*params = (GLint) obj->DepthMode; *params = (GLint) obj->Attrib.DepthMode;
break; break;
case GL_DEPTH_STENCIL_TEXTURE_MODE: case GL_DEPTH_STENCIL_TEXTURE_MODE:
if (!_mesa_has_ARB_stencil_texturing(ctx) && !_mesa_is_gles31(ctx)) if (!_mesa_has_ARB_stencil_texturing(ctx) && !_mesa_is_gles31(ctx))
goto invalid_pname; goto invalid_pname;
*params = (GLint) *params = (GLint)
(obj->StencilSampling ? GL_STENCIL_INDEX : GL_DEPTH_COMPONENT); (obj->Attrib.StencilSampling ? GL_STENCIL_INDEX : GL_DEPTH_COMPONENT);
break; break;
case GL_TEXTURE_LOD_BIAS: case GL_TEXTURE_LOD_BIAS:
if (_mesa_is_gles(ctx)) if (_mesa_is_gles(ctx))
@ -2524,7 +2524,7 @@ get_tex_parameteriv(struct gl_context *ctx,
* it cannot be represented by the returned data type, then the * it cannot be represented by the returned data type, then the
* nearest value representable using that type is returned. * nearest value representable using that type is returned.
*/ */
*params = CLAMP(lroundf(obj->Sampler.LodBias), INT_MIN, INT_MAX); *params = CLAMP(lroundf(obj->Sampler.Attrib.LodBias), INT_MIN, INT_MAX);
break; break;
case GL_TEXTURE_CROP_RECT_OES: case GL_TEXTURE_CROP_RECT_OES:
if (ctx->API != API_OPENGLES || !ctx->Extensions.OES_draw_texture) if (ctx->API != API_OPENGLES || !ctx->Extensions.OES_draw_texture)
@ -2543,7 +2543,7 @@ get_tex_parameteriv(struct gl_context *ctx,
|| !ctx->Extensions.EXT_texture_swizzle) || !ctx->Extensions.EXT_texture_swizzle)
&& !_mesa_is_gles3(ctx)) && !_mesa_is_gles3(ctx))
goto invalid_pname; goto invalid_pname;
*params = obj->Swizzle[pname - GL_TEXTURE_SWIZZLE_R_EXT]; *params = obj->Attrib.Swizzle[pname - GL_TEXTURE_SWIZZLE_R_EXT];
break; break;
case GL_TEXTURE_SWIZZLE_RGBA_EXT: case GL_TEXTURE_SWIZZLE_RGBA_EXT:
@ -2551,14 +2551,14 @@ get_tex_parameteriv(struct gl_context *ctx,
|| !ctx->Extensions.EXT_texture_swizzle) || !ctx->Extensions.EXT_texture_swizzle)
&& !_mesa_is_gles3(ctx)) && !_mesa_is_gles3(ctx))
goto invalid_pname; goto invalid_pname;
COPY_4V(params, obj->Swizzle); COPY_4V(params, obj->Attrib.Swizzle);
break; break;
case GL_TEXTURE_CUBE_MAP_SEAMLESS: case GL_TEXTURE_CUBE_MAP_SEAMLESS:
if (!_mesa_is_desktop_gl(ctx) if (!_mesa_is_desktop_gl(ctx)
|| !ctx->Extensions.AMD_seamless_cubemap_per_texture) || !ctx->Extensions.AMD_seamless_cubemap_per_texture)
goto invalid_pname; goto invalid_pname;
*params = (GLint) obj->Sampler.CubeMapSeamless; *params = (GLint) obj->Sampler.Attrib.CubeMapSeamless;
break; break;
case GL_TEXTURE_IMMUTABLE_FORMAT: case GL_TEXTURE_IMMUTABLE_FORMAT:
@ -2606,7 +2606,7 @@ get_tex_parameteriv(struct gl_context *ctx,
case GL_TEXTURE_SRGB_DECODE_EXT: case GL_TEXTURE_SRGB_DECODE_EXT:
if (!ctx->Extensions.EXT_texture_sRGB_decode) if (!ctx->Extensions.EXT_texture_sRGB_decode)
goto invalid_pname; goto invalid_pname;
*params = obj->Sampler.sRGBDecode; *params = obj->Sampler.Attrib.sRGBDecode;
break; break;
case GL_IMAGE_FORMAT_COMPATIBILITY_TYPE: case GL_IMAGE_FORMAT_COMPATIBILITY_TYPE:
@ -2648,7 +2648,7 @@ get_tex_parameterIiv(struct gl_context *ctx,
{ {
switch (pname) { switch (pname) {
case GL_TEXTURE_BORDER_COLOR: case GL_TEXTURE_BORDER_COLOR:
COPY_4V(params, obj->Sampler.BorderColor.i); COPY_4V(params, obj->Sampler.Attrib.BorderColor.i);
break; break;
default: default:
get_tex_parameteriv(ctx, obj, pname, params, dsa); get_tex_parameteriv(ctx, obj, pname, params, dsa);

View File

@ -529,10 +529,10 @@ update_tex_combine(struct gl_context *ctx,
} }
else { else {
const struct gl_texture_object *texObj = texUnit->_Current; const struct gl_texture_object *texObj = texUnit->_Current;
GLenum format = texObj->Image[0][texObj->BaseLevel]->_BaseFormat; GLenum format = texObj->Image[0][texObj->Attrib.BaseLevel]->_BaseFormat;
if (format == GL_DEPTH_COMPONENT || format == GL_DEPTH_STENCIL_EXT) { if (format == GL_DEPTH_COMPONENT || format == GL_DEPTH_STENCIL_EXT) {
format = texObj->DepthMode; format = texObj->Attrib.DepthMode;
} }
calculate_derived_texenv(&fftexUnit->_EnvMode, fftexUnit->EnvMode, format); calculate_derived_texenv(&fftexUnit->_EnvMode, fftexUnit->EnvMode, format);
fftexUnit->_CurrentCombine = & fftexUnit->_EnvMode; fftexUnit->_CurrentCombine = & fftexUnit->_EnvMode;

View File

@ -510,7 +510,7 @@ is_sampler_border_color_valid(struct gl_sampler_object *samp)
{ 1, 1, 1, 0 }, { 1, 1, 1, 0 },
{ 1, 1, 1, 1 }, { 1, 1, 1, 1 },
}; };
size_t size = sizeof(samp->BorderColor.ui); size_t size = sizeof(samp->Attrib.BorderColor.ui);
/* The ARB_bindless_texture spec says: /* The ARB_bindless_texture spec says:
* *
@ -523,16 +523,16 @@ is_sampler_border_color_valid(struct gl_sampler_object *samp)
* (0.0,0.0,0.0,0.0), (0.0,0.0,0.0,1.0), (1.0,1.0,1.0,0.0), and * (0.0,0.0,0.0,0.0), (0.0,0.0,0.0,1.0), (1.0,1.0,1.0,0.0), and
* (1.0,1.0,1.0,1.0)." * (1.0,1.0,1.0,1.0)."
*/ */
if (!memcmp(samp->BorderColor.f, valid_float_border_colors[0], size) || if (!memcmp(samp->Attrib.BorderColor.f, valid_float_border_colors[0], size) ||
!memcmp(samp->BorderColor.f, valid_float_border_colors[1], size) || !memcmp(samp->Attrib.BorderColor.f, valid_float_border_colors[1], size) ||
!memcmp(samp->BorderColor.f, valid_float_border_colors[2], size) || !memcmp(samp->Attrib.BorderColor.f, valid_float_border_colors[2], size) ||
!memcmp(samp->BorderColor.f, valid_float_border_colors[3], size)) !memcmp(samp->Attrib.BorderColor.f, valid_float_border_colors[3], size))
return GL_TRUE; return GL_TRUE;
if (!memcmp(samp->BorderColor.ui, valid_integer_border_colors[0], size) || if (!memcmp(samp->Attrib.BorderColor.ui, valid_integer_border_colors[0], size) ||
!memcmp(samp->BorderColor.ui, valid_integer_border_colors[1], size) || !memcmp(samp->Attrib.BorderColor.ui, valid_integer_border_colors[1], size) ||
!memcmp(samp->BorderColor.ui, valid_integer_border_colors[2], size) || !memcmp(samp->Attrib.BorderColor.ui, valid_integer_border_colors[2], size) ||
!memcmp(samp->BorderColor.ui, valid_integer_border_colors[3], size)) !memcmp(samp->Attrib.BorderColor.ui, valid_integer_border_colors[3], size))
return GL_TRUE; return GL_TRUE;
return GL_FALSE; return GL_FALSE;

View File

@ -110,23 +110,23 @@ st_convert_sampler(const struct st_context *st,
struct pipe_sampler_state *sampler) struct pipe_sampler_state *sampler)
{ {
memset(sampler, 0, sizeof(*sampler)); memset(sampler, 0, sizeof(*sampler));
sampler->wrap_s = gl_wrap_xlate(msamp->WrapS); sampler->wrap_s = gl_wrap_xlate(msamp->Attrib.WrapS);
sampler->wrap_t = gl_wrap_xlate(msamp->WrapT); sampler->wrap_t = gl_wrap_xlate(msamp->Attrib.WrapT);
sampler->wrap_r = gl_wrap_xlate(msamp->WrapR); sampler->wrap_r = gl_wrap_xlate(msamp->Attrib.WrapR);
if (texobj->_IsIntegerFormat && st->ctx->Const.ForceIntegerTexNearest) { if (texobj->_IsIntegerFormat && st->ctx->Const.ForceIntegerTexNearest) {
sampler->min_img_filter = gl_filter_to_img_filter(GL_NEAREST); sampler->min_img_filter = gl_filter_to_img_filter(GL_NEAREST);
sampler->mag_img_filter = gl_filter_to_img_filter(GL_NEAREST); sampler->mag_img_filter = gl_filter_to_img_filter(GL_NEAREST);
} else { } else {
sampler->min_img_filter = gl_filter_to_img_filter(msamp->MinFilter); sampler->min_img_filter = gl_filter_to_img_filter(msamp->Attrib.MinFilter);
sampler->mag_img_filter = gl_filter_to_img_filter(msamp->MagFilter); sampler->mag_img_filter = gl_filter_to_img_filter(msamp->Attrib.MagFilter);
} }
sampler->min_mip_filter = gl_filter_to_mip_filter(msamp->MinFilter); sampler->min_mip_filter = gl_filter_to_mip_filter(msamp->Attrib.MinFilter);
if (texobj->Target != GL_TEXTURE_RECTANGLE_ARB) if (texobj->Target != GL_TEXTURE_RECTANGLE_ARB)
sampler->normalized_coords = 1; sampler->normalized_coords = 1;
sampler->lod_bias = msamp->LodBias + tex_unit_lod_bias; sampler->lod_bias = msamp->Attrib.LodBias + tex_unit_lod_bias;
/* Reduce the number of states by allowing only the values that AMD GCN /* Reduce the number of states by allowing only the values that AMD GCN
* can represent. Apps use lod_bias for smooth transitions to bigger mipmap * can represent. Apps use lod_bias for smooth transitions to bigger mipmap
* levels. * levels.
@ -134,8 +134,8 @@ st_convert_sampler(const struct st_context *st,
sampler->lod_bias = CLAMP(sampler->lod_bias, -16, 16); sampler->lod_bias = CLAMP(sampler->lod_bias, -16, 16);
sampler->lod_bias = roundf(sampler->lod_bias * 256) / 256; sampler->lod_bias = roundf(sampler->lod_bias * 256) / 256;
sampler->min_lod = MAX2(msamp->MinLod, 0.0f); sampler->min_lod = MAX2(msamp->Attrib.MinLod, 0.0f);
sampler->max_lod = msamp->MaxLod; sampler->max_lod = msamp->Attrib.MaxLod;
if (sampler->max_lod < sampler->min_lod) { if (sampler->max_lod < sampler->min_lod) {
/* The GL spec doesn't seem to specify what to do in this case. /* The GL spec doesn't seem to specify what to do in this case.
* Swap the values. * Swap the values.
@ -161,14 +161,14 @@ st_convert_sampler(const struct st_context *st,
/* For non-black borders... */ /* For non-black borders... */
if (/* This is true if wrap modes are using the border color: */ if (/* This is true if wrap modes are using the border color: */
(sampler->wrap_s | sampler->wrap_t | sampler->wrap_r) & 0x1 && (sampler->wrap_s | sampler->wrap_t | sampler->wrap_r) & 0x1 &&
(msamp->BorderColor.ui[0] || (msamp->Attrib.BorderColor.ui[0] ||
msamp->BorderColor.ui[1] || msamp->Attrib.BorderColor.ui[1] ||
msamp->BorderColor.ui[2] || msamp->Attrib.BorderColor.ui[2] ||
msamp->BorderColor.ui[3])) { msamp->Attrib.BorderColor.ui[3])) {
const GLboolean is_integer = texobj->_IsIntegerFormat; const GLboolean is_integer = texobj->_IsIntegerFormat;
GLenum texBaseFormat = _mesa_base_tex_image(texobj)->_BaseFormat; GLenum texBaseFormat = _mesa_base_tex_image(texobj)->_BaseFormat;
if (texobj->StencilSampling) if (texobj->Attrib.StencilSampling)
texBaseFormat = GL_STENCIL_INDEX; texBaseFormat = GL_STENCIL_INDEX;
if (st->apply_texture_swizzle_to_border_color) { if (st->apply_texture_swizzle_to_border_color) {
@ -187,34 +187,34 @@ st_convert_sampler(const struct st_context *st,
view->swizzle_a, view->swizzle_a,
}; };
st_translate_color(&msamp->BorderColor, &tmp, st_translate_color(&msamp->Attrib.BorderColor, &tmp,
texBaseFormat, is_integer); texBaseFormat, is_integer);
util_format_apply_color_swizzle(&sampler->border_color, util_format_apply_color_swizzle(&sampler->border_color,
&tmp, swz, is_integer); &tmp, swz, is_integer);
} else { } else {
st_translate_color(&msamp->BorderColor, st_translate_color(&msamp->Attrib.BorderColor,
&sampler->border_color, &sampler->border_color,
texBaseFormat, is_integer); texBaseFormat, is_integer);
} }
} else { } else {
st_translate_color(&msamp->BorderColor, st_translate_color(&msamp->Attrib.BorderColor,
&sampler->border_color, &sampler->border_color,
texBaseFormat, is_integer); texBaseFormat, is_integer);
} }
} }
sampler->max_anisotropy = (msamp->MaxAnisotropy == 1.0 ? sampler->max_anisotropy = (msamp->Attrib.MaxAnisotropy == 1.0 ?
0 : (GLuint) msamp->MaxAnisotropy); 0 : (GLuint) msamp->Attrib.MaxAnisotropy);
/* If sampling a depth texture and using shadow comparison */ /* If sampling a depth texture and using shadow comparison */
if (msamp->CompareMode == GL_COMPARE_R_TO_TEXTURE) { if (msamp->Attrib.CompareMode == GL_COMPARE_R_TO_TEXTURE) {
GLenum texBaseFormat = _mesa_base_tex_image(texobj)->_BaseFormat; GLenum texBaseFormat = _mesa_base_tex_image(texobj)->_BaseFormat;
if (texBaseFormat == GL_DEPTH_COMPONENT || if (texBaseFormat == GL_DEPTH_COMPONENT ||
(texBaseFormat == GL_DEPTH_STENCIL && !texobj->StencilSampling)) { (texBaseFormat == GL_DEPTH_STENCIL && !texobj->Attrib.StencilSampling)) {
sampler->compare_mode = PIPE_TEX_COMPARE_R_TO_TEXTURE; sampler->compare_mode = PIPE_TEX_COMPARE_R_TO_TEXTURE;
sampler->compare_func = st_compare_func_to_pipe(msamp->CompareFunc); sampler->compare_func = st_compare_func_to_pipe(msamp->Attrib.CompareFunc);
} }
} }
@ -222,7 +222,7 @@ st_convert_sampler(const struct st_context *st,
* enable should be ignored and treated as disabled when using texture * enable should be ignored and treated as disabled when using texture
* handles, as specified by ARB_bindless_texture. * handles, as specified by ARB_bindless_texture.
*/ */
sampler->seamless_cube_map = msamp->CubeMapSeamless; sampler->seamless_cube_map = msamp->Attrib.CubeMapSeamless;
} }
/** /**

View File

@ -546,7 +546,7 @@ allocate_full_mipmap(const struct st_texture_object *stObj,
return FALSE; return FALSE;
} }
if (stImage->base.Level > 0 || stObj->base.GenerateMipmap) if (stImage->base.Level > 0 || stObj->base.Attrib.GenerateMipmap)
return TRUE; return TRUE;
/* If the application has explicitly called glTextureParameter to set /* If the application has explicitly called glTextureParameter to set
@ -556,8 +556,8 @@ allocate_full_mipmap(const struct st_texture_object *stObj,
* Core Mesa will initialize MaxLevel to value much larger than * Core Mesa will initialize MaxLevel to value much larger than
* MAX_TEXTURE_LEVELS, so we check that to see if it's been set at all. * MAX_TEXTURE_LEVELS, so we check that to see if it's been set at all.
*/ */
if (stObj->base.MaxLevel < MAX_TEXTURE_LEVELS && if (stObj->base.Attrib.MaxLevel < MAX_TEXTURE_LEVELS &&
stObj->base.MaxLevel - stObj->base.BaseLevel > 0) stObj->base.Attrib.MaxLevel - stObj->base.Attrib.BaseLevel > 0)
return TRUE; return TRUE;
if (stImage->base._BaseFormat == GL_DEPTH_COMPONENT || if (stImage->base._BaseFormat == GL_DEPTH_COMPONENT ||
@ -565,11 +565,11 @@ allocate_full_mipmap(const struct st_texture_object *stObj,
/* depth/stencil textures are seldom mipmapped */ /* depth/stencil textures are seldom mipmapped */
return FALSE; return FALSE;
if (stObj->base.BaseLevel == 0 && stObj->base.MaxLevel == 0) if (stObj->base.Attrib.BaseLevel == 0 && stObj->base.Attrib.MaxLevel == 0)
return FALSE; return FALSE;
if (stObj->base.Sampler.MinFilter == GL_NEAREST || if (stObj->base.Sampler.Attrib.MinFilter == GL_NEAREST ||
stObj->base.Sampler.MinFilter == GL_LINEAR) stObj->base.Sampler.Attrib.MinFilter == GL_LINEAR)
/* not a mipmap minification filter */ /* not a mipmap minification filter */
return FALSE; return FALSE;
@ -582,7 +582,7 @@ allocate_full_mipmap(const struct st_texture_object *stObj,
* allocate a mipmapped texture by default. This may cause texture * allocate a mipmapped texture by default. This may cause texture
* reallocation later, but GL_NEAREST_MIPMAP_LINEAR is pretty rare. * reallocation later, but GL_NEAREST_MIPMAP_LINEAR is pretty rare.
*/ */
if (stObj->base.Sampler.MinFilter == GL_NEAREST_MIPMAP_LINEAR) if (stObj->base.Sampler.Attrib.MinFilter == GL_NEAREST_MIPMAP_LINEAR)
return FALSE; return FALSE;
if (stObj->base.Target == GL_TEXTURE_3D) if (stObj->base.Target == GL_TEXTURE_3D)
@ -2676,14 +2676,14 @@ st_finalize_texture(struct gl_context *ctx,
if (tObj->_MipmapComplete) if (tObj->_MipmapComplete)
stObj->lastLevel = stObj->base._MaxLevel; stObj->lastLevel = stObj->base._MaxLevel;
else if (tObj->_BaseComplete) else if (tObj->_BaseComplete)
stObj->lastLevel = stObj->base.BaseLevel; stObj->lastLevel = stObj->base.Attrib.BaseLevel;
/* Skip the loop over images in the common case of no images having /* Skip the loop over images in the common case of no images having
* changed. But if the GL_BASE_LEVEL or GL_MAX_LEVEL change to something we * changed. But if the GL_BASE_LEVEL or GL_MAX_LEVEL change to something we
* haven't looked at, then we do need to look at those new images. * haven't looked at, then we do need to look at those new images.
*/ */
if (!stObj->needs_validation && if (!stObj->needs_validation &&
stObj->base.BaseLevel >= stObj->validated_first_level && stObj->base.Attrib.BaseLevel >= stObj->validated_first_level &&
stObj->lastLevel <= stObj->validated_last_level) { stObj->lastLevel <= stObj->validated_last_level) {
return GL_TRUE; return GL_TRUE;
} }
@ -2694,7 +2694,7 @@ st_finalize_texture(struct gl_context *ctx,
} }
firstImage = st_texture_image_const(stObj->base.Image[cubeMapFace] firstImage = st_texture_image_const(stObj->base.Image[cubeMapFace]
[stObj->base.BaseLevel]); [stObj->base.Attrib.BaseLevel]);
assert(firstImage); assert(firstImage);
/* If both firstImage and stObj point to a texture which can contain /* If both firstImage and stObj point to a texture which can contain
@ -2817,7 +2817,7 @@ st_finalize_texture(struct gl_context *ctx,
*/ */
for (face = 0; face < nr_faces; face++) { for (face = 0; face < nr_faces; face++) {
GLuint level; GLuint level;
for (level = stObj->base.BaseLevel; level <= stObj->lastLevel; level++) { for (level = stObj->base.Attrib.BaseLevel; level <= stObj->lastLevel; level++) {
struct st_texture_image *stImage = struct st_texture_image *stImage =
st_texture_image(stObj->base.Image[face][level]); st_texture_image(stObj->base.Image[face][level]);
@ -2850,7 +2850,7 @@ st_finalize_texture(struct gl_context *ctx,
} }
} }
stObj->validated_first_level = stObj->base.BaseLevel; stObj->validated_first_level = stObj->base.Attrib.BaseLevel;
stObj->validated_last_level = stObj->lastLevel; stObj->validated_last_level = stObj->lastLevel;
stObj->needs_validation = false; stObj->needs_validation = false;
@ -3094,8 +3094,8 @@ st_TestProxyTexImage(struct gl_context *ctx, GLenum target,
/* For immutable textures we know the final number of mip levels */ /* For immutable textures we know the final number of mip levels */
pt.last_level = numLevels - 1; pt.last_level = numLevels - 1;
} }
else if (level == 0 && (texObj->Sampler.MinFilter == GL_LINEAR || else if (level == 0 && (texObj->Sampler.Attrib.MinFilter == GL_LINEAR ||
texObj->Sampler.MinFilter == GL_NEAREST)) { texObj->Sampler.Attrib.MinFilter == GL_NEAREST)) {
/* assume just one mipmap level */ /* assume just one mipmap level */
pt.last_level = 0; pt.last_level = 0;
} }

View File

@ -56,7 +56,7 @@ st_generate_mipmap(struct gl_context *ctx, GLenum target,
struct st_context *st = st_context(ctx); struct st_context *st = st_context(ctx);
struct st_texture_object *stObj = st_texture_object(texObj); struct st_texture_object *stObj = st_texture_object(texObj);
struct pipe_resource *pt = st_get_texobj_resource(texObj); struct pipe_resource *pt = st_get_texobj_resource(texObj);
uint baseLevel = texObj->BaseLevel; uint baseLevel = texObj->Attrib.BaseLevel;
enum pipe_format format; enum pipe_format format;
uint lastLevel, first_layer, last_layer; uint lastLevel, first_layer, last_layer;
@ -88,16 +88,16 @@ st_generate_mipmap(struct gl_context *ctx, GLenum target,
stObj->lastLevel = lastLevel; stObj->lastLevel = lastLevel;
if (!texObj->Immutable) { if (!texObj->Immutable) {
const GLboolean genSave = texObj->GenerateMipmap; const GLboolean genSave = texObj->Attrib.GenerateMipmap;
/* Temporarily set GenerateMipmap to true so that allocate_full_mipmap() /* Temporarily set GenerateMipmap to true so that allocate_full_mipmap()
* makes the right decision about full mipmap allocation. * makes the right decision about full mipmap allocation.
*/ */
texObj->GenerateMipmap = GL_TRUE; texObj->Attrib.GenerateMipmap = GL_TRUE;
_mesa_prepare_mipmap_levels(ctx, texObj, baseLevel, lastLevel); _mesa_prepare_mipmap_levels(ctx, texObj, baseLevel, lastLevel);
texObj->GenerateMipmap = genSave; texObj->Attrib.GenerateMipmap = genSave;
/* At this point, memory for all the texture levels has been /* At this point, memory for all the texture levels has been
* allocated. However, the base level image may be in one resource * allocated. However, the base level image may be in one resource
@ -131,7 +131,7 @@ st_generate_mipmap(struct gl_context *ctx, GLenum target,
else else
format = pt->format; format = pt->format;
if (texObj->Sampler.sRGBDecode == GL_SKIP_DECODE_EXT) if (texObj->Sampler.Attrib.sRGBDecode == GL_SKIP_DECODE_EXT)
format = util_format_linear(format); format = util_format_linear(format);
/* First see if the driver supports hardware mipmap generation, /* First see if the driver supports hardware mipmap generation,

View File

@ -396,7 +396,7 @@ get_texture_format_swizzle(const struct st_context *st,
{ {
GLenum baseFormat = _mesa_base_tex_image(&stObj->base)->_BaseFormat; GLenum baseFormat = _mesa_base_tex_image(&stObj->base)->_BaseFormat;
unsigned tex_swizzle; unsigned tex_swizzle;
GLenum depth_mode = stObj->base.DepthMode; GLenum depth_mode = stObj->base.Attrib.DepthMode;
/* In ES 3.0, DEPTH_TEXTURE_MODE is expected to be GL_RED for textures /* In ES 3.0, DEPTH_TEXTURE_MODE is expected to be GL_RED for textures
* with depth component data specified with a sized internal format. * with depth component data specified with a sized internal format.
@ -417,7 +417,7 @@ get_texture_format_swizzle(const struct st_context *st,
glsl130_or_later); glsl130_or_later);
/* Combine the texture format swizzle with user's swizzle */ /* Combine the texture format swizzle with user's swizzle */
return swizzle_swizzle(stObj->base._Swizzle, tex_swizzle); return swizzle_swizzle(stObj->base.Attrib._Swizzle, tex_swizzle);
} }
@ -479,7 +479,7 @@ get_sampler_view_format(struct st_context *st,
if (baseFormat == GL_DEPTH_COMPONENT || if (baseFormat == GL_DEPTH_COMPONENT ||
baseFormat == GL_DEPTH_STENCIL || baseFormat == GL_DEPTH_STENCIL ||
baseFormat == GL_STENCIL_INDEX) { baseFormat == GL_STENCIL_INDEX) {
if (stObj->base.StencilSampling || baseFormat == GL_STENCIL_INDEX) if (stObj->base.Attrib.StencilSampling || baseFormat == GL_STENCIL_INDEX)
format = util_format_stencil_only(format); format = util_format_stencil_only(format);
return format; return format;
@ -541,7 +541,7 @@ st_create_texture_sampler_view_from_stobj(struct st_context *st,
if (stObj->level_override >= 0) { if (stObj->level_override >= 0) {
templ.u.tex.first_level = templ.u.tex.last_level = stObj->level_override; templ.u.tex.first_level = templ.u.tex.last_level = stObj->level_override;
} else { } else {
templ.u.tex.first_level = stObj->base.MinLevel + stObj->base.BaseLevel; templ.u.tex.first_level = stObj->base.MinLevel + stObj->base.Attrib.BaseLevel;
templ.u.tex.last_level = last_level(stObj); templ.u.tex.last_level = last_level(stObj);
} }
if (stObj->layer_override >= 0) { if (stObj->layer_override >= 0) {
@ -573,7 +573,7 @@ st_get_texture_sampler_view_from_stobj(struct st_context *st,
const struct st_sampler_view *sv; const struct st_sampler_view *sv;
bool srgb_skip_decode = false; bool srgb_skip_decode = false;
if (!ignore_srgb_decode && samp->sRGBDecode == GL_SKIP_DECODE_EXT) if (!ignore_srgb_decode && samp->Attrib.sRGBDecode == GL_SKIP_DECODE_EXT)
srgb_skip_decode = true; srgb_skip_decode = true;
sv = st_texture_get_current_sampler_view(st, stObj); sv = st_texture_get_current_sampler_view(st, stObj);
@ -590,7 +590,7 @@ st_get_texture_sampler_view_from_stobj(struct st_context *st,
assert(get_sampler_view_format(st, stObj, srgb_skip_decode) == view->format); assert(get_sampler_view_format(st, stObj, srgb_skip_decode) == view->format);
assert(gl_target_to_pipe(stObj->base.Target) == view->target); assert(gl_target_to_pipe(stObj->base.Target) == view->target);
assert(stObj->level_override >= 0 || assert(stObj->level_override >= 0 ||
stObj->base.MinLevel + stObj->base.BaseLevel == view->u.tex.first_level); stObj->base.MinLevel + stObj->base.Attrib.BaseLevel == view->u.tex.first_level);
assert(stObj->level_override >= 0 || last_level(stObj) == view->u.tex.last_level); assert(stObj->level_override >= 0 || last_level(stObj) == view->u.tex.last_level);
assert(stObj->layer_override >= 0 || stObj->base.MinLayer == view->u.tex.first_layer); assert(stObj->layer_override >= 0 || stObj->base.MinLayer == view->u.tex.first_layer);
assert(stObj->layer_override >= 0 || last_layer(stObj) == view->u.tex.last_layer); assert(stObj->layer_override >= 0 || last_layer(stObj) == view->u.tex.last_layer);

View File

@ -87,12 +87,12 @@ fetch_texel_lod( struct gl_context *ctx, const GLfloat texcoord[4], GLfloat lamb
GLfloat rgba[4]; GLfloat rgba[4];
const struct gl_sampler_object *samp = _mesa_get_samplerobj(ctx, unit); const struct gl_sampler_object *samp = _mesa_get_samplerobj(ctx, unit);
lambda = CLAMP(lambda, samp->MinLod, samp->MaxLod); lambda = CLAMP(lambda, samp->Attrib.MinLod, samp->Attrib.MaxLod);
swrast->TextureSample[unit](ctx, samp, ctx->Texture.Unit[unit]._Current, swrast->TextureSample[unit](ctx, samp, ctx->Texture.Unit[unit]._Current,
1, (const GLfloat (*)[4]) texcoord, 1, (const GLfloat (*)[4]) texcoord,
&lambda, &rgba); &lambda, &rgba);
swizzle_texel(rgba, color, texObj->_Swizzle); swizzle_texel(rgba, color, texObj->Attrib._Swizzle);
} }
else { else {
ASSIGN_4V(color, 0.0F, 0.0F, 0.0F, 1.0F); ASSIGN_4V(color, 0.0F, 0.0F, 0.0F, 1.0F);
@ -133,14 +133,14 @@ fetch_texel_deriv( struct gl_context *ctx, const GLfloat texcoord[4],
texcoord[0], texcoord[1], texcoord[3], texcoord[0], texcoord[1], texcoord[3],
1.0F / texcoord[3]); 1.0F / texcoord[3]);
lambda += lodBias + texUnit->LodBias + samp->LodBias; lambda += lodBias + texUnit->LodBias + samp->Attrib.LodBias;
lambda = CLAMP(lambda, samp->MinLod, samp->MaxLod); lambda = CLAMP(lambda, samp->Attrib.MinLod, samp->Attrib.MaxLod);
swrast->TextureSample[unit](ctx, samp, ctx->Texture.Unit[unit]._Current, swrast->TextureSample[unit](ctx, samp, ctx->Texture.Unit[unit]._Current,
1, (const GLfloat (*)[4]) texcoord, 1, (const GLfloat (*)[4]) texcoord,
&lambda, &rgba); &lambda, &rgba);
swizzle_texel(rgba, color, texObj->_Swizzle); swizzle_texel(rgba, color, texObj->Attrib._Swizzle);
} }
else { else {
ASSIGN_4V(color, 0.0F, 0.0F, 0.0F, 1.0F); ASSIGN_4V(color, 0.0F, 0.0F, 0.0F, 1.0F);

View File

@ -504,13 +504,13 @@ interpolate_texcoords(struct gl_context *ctx, SWspan *span)
swrast_texture_image_const(img); swrast_texture_image_const(img);
const struct gl_sampler_object *samp = _mesa_get_samplerobj(ctx, u); const struct gl_sampler_object *samp = _mesa_get_samplerobj(ctx, u);
needLambda = (samp->MinFilter != samp->MagFilter) needLambda = (samp->Attrib.MinFilter != samp->Attrib.MagFilter)
|| _swrast_use_fragment_program(ctx); || _swrast_use_fragment_program(ctx);
/* LOD is calculated directly in the ansiotropic filter, we can /* LOD is calculated directly in the ansiotropic filter, we can
* skip the normal lambda function as the result is ignored. * skip the normal lambda function as the result is ignored.
*/ */
if (samp->MaxAnisotropy > 1.0F && if (samp->Attrib.MaxAnisotropy > 1.0F &&
samp->MinFilter == GL_LINEAR_MIPMAP_LINEAR) { samp->Attrib.MinFilter == GL_LINEAR_MIPMAP_LINEAR) {
needLambda = GL_FALSE; needLambda = GL_FALSE;
} }
texW = swImg->WidthScale; texW = swImg->WidthScale;

View File

@ -660,9 +660,9 @@ _swrast_texture_span( struct gl_context *ctx, SWspan *span )
/* adjust texture lod (lambda) */ /* adjust texture lod (lambda) */
if (span->arrayMask & SPAN_LAMBDA) { if (span->arrayMask & SPAN_LAMBDA) {
if (texUnit->LodBias + samp->LodBias != 0.0F) { if (texUnit->LodBias + samp->Attrib.LodBias != 0.0F) {
/* apply LOD bias, but don't clamp yet */ /* apply LOD bias, but don't clamp yet */
const GLfloat bias = CLAMP(texUnit->LodBias + samp->LodBias, const GLfloat bias = CLAMP(texUnit->LodBias + samp->Attrib.LodBias,
-ctx->Const.MaxTextureLodBias, -ctx->Const.MaxTextureLodBias,
ctx->Const.MaxTextureLodBias); ctx->Const.MaxTextureLodBias);
GLuint i; GLuint i;
@ -671,11 +671,11 @@ _swrast_texture_span( struct gl_context *ctx, SWspan *span )
} }
} }
if (samp->MinLod != -1000.0F || if (samp->Attrib.MinLod != -1000.0F ||
samp->MaxLod != 1000.0F) { samp->Attrib.MaxLod != 1000.0F) {
/* apply LOD clamping to lambda */ /* apply LOD clamping to lambda */
const GLfloat min = samp->MinLod; const GLfloat min = samp->Attrib.MinLod;
const GLfloat max = samp->MaxLod; const GLfloat max = samp->Attrib.MaxLod;
GLuint i; GLuint i;
for (i = 0; i < span->end; i++) { for (i = 0; i < span->end; i++) {
GLfloat l = lambda[i]; GLfloat l = lambda[i];
@ -683,8 +683,8 @@ _swrast_texture_span( struct gl_context *ctx, SWspan *span )
} }
} }
} }
else if (samp->MaxAnisotropy > 1.0F && else if (samp->Attrib.MaxAnisotropy > 1.0F &&
samp->MinFilter == GL_LINEAR_MIPMAP_LINEAR) { samp->Attrib.MinFilter == GL_LINEAR_MIPMAP_LINEAR) {
/* sample_lambda_2d_aniso is beeing used as texture_sample_func, /* sample_lambda_2d_aniso is beeing used as texture_sample_func,
* it requires the current SWspan *span as an additional parameter. * it requires the current SWspan *span as an additional parameter.
* In order to keep the same function signature, the unused lambda * In order to keep the same function signature, the unused lambda
@ -702,8 +702,8 @@ _swrast_texture_span( struct gl_context *ctx, SWspan *span )
span->end, texcoords, lambda, texels ); span->end, texcoords, lambda, texels );
/* GL_EXT_texture_swizzle */ /* GL_EXT_texture_swizzle */
if (curObj->_Swizzle != SWIZZLE_NOOP) { if (curObj->Attrib._Swizzle != SWIZZLE_NOOP) {
swizzle_texels(curObj->_Swizzle, span->end, texels); swizzle_texels(curObj->Attrib._Swizzle, span->end, texels);
} }
} }
} }

View File

@ -312,7 +312,7 @@ set_fetch_functions(const struct gl_sampler_object *samp,
{ {
mesa_format format = texImage->Base.TexFormat; mesa_format format = texImage->Base.TexFormat;
if (samp->sRGBDecode == GL_SKIP_DECODE_EXT) if (samp->Attrib.sRGBDecode == GL_SKIP_DECODE_EXT)
format = _mesa_get_srgb_format_linear(format); format = _mesa_get_srgb_format_linear(format);
texImage->FetchTexel = NULL; texImage->FetchTexel = NULL;

View File

@ -515,28 +515,28 @@ nearest_texcoord(const struct gl_sampler_object *samp,
switch (texObj->Target) { switch (texObj->Target) {
case GL_TEXTURE_RECTANGLE_ARB: case GL_TEXTURE_RECTANGLE_ARB:
*i = clamp_rect_coord_nearest(samp->WrapS, texcoord[0], width); *i = clamp_rect_coord_nearest(samp->Attrib.WrapS, texcoord[0], width);
*j = clamp_rect_coord_nearest(samp->WrapT, texcoord[1], height); *j = clamp_rect_coord_nearest(samp->Attrib.WrapT, texcoord[1], height);
*k = 0; *k = 0;
break; break;
case GL_TEXTURE_1D: case GL_TEXTURE_1D:
*i = nearest_texel_location(samp->WrapS, img, width, texcoord[0]); *i = nearest_texel_location(samp->Attrib.WrapS, img, width, texcoord[0]);
*j = 0; *j = 0;
*k = 0; *k = 0;
break; break;
case GL_TEXTURE_2D: case GL_TEXTURE_2D:
*i = nearest_texel_location(samp->WrapS, img, width, texcoord[0]); *i = nearest_texel_location(samp->Attrib.WrapS, img, width, texcoord[0]);
*j = nearest_texel_location(samp->WrapT, img, height, texcoord[1]); *j = nearest_texel_location(samp->Attrib.WrapT, img, height, texcoord[1]);
*k = 0; *k = 0;
break; break;
case GL_TEXTURE_1D_ARRAY_EXT: case GL_TEXTURE_1D_ARRAY_EXT:
*i = nearest_texel_location(samp->WrapS, img, width, texcoord[0]); *i = nearest_texel_location(samp->Attrib.WrapS, img, width, texcoord[0]);
*j = tex_array_slice(texcoord[1], height); *j = tex_array_slice(texcoord[1], height);
*k = 0; *k = 0;
break; break;
case GL_TEXTURE_2D_ARRAY_EXT: case GL_TEXTURE_2D_ARRAY_EXT:
*i = nearest_texel_location(samp->WrapS, img, width, texcoord[0]); *i = nearest_texel_location(samp->Attrib.WrapS, img, width, texcoord[0]);
*j = nearest_texel_location(samp->WrapT, img, height, texcoord[1]); *j = nearest_texel_location(samp->Attrib.WrapT, img, height, texcoord[1]);
*k = tex_array_slice(texcoord[2], depth); *k = tex_array_slice(texcoord[2], depth);
break; break;
default: default:
@ -565,24 +565,24 @@ linear_texcoord(const struct gl_sampler_object *samp,
switch (texObj->Target) { switch (texObj->Target) {
case GL_TEXTURE_RECTANGLE_ARB: case GL_TEXTURE_RECTANGLE_ARB:
clamp_rect_coord_linear(samp->WrapS, texcoord[0], clamp_rect_coord_linear(samp->Attrib.WrapS, texcoord[0],
width, i0, i1, wi); width, i0, i1, wi);
clamp_rect_coord_linear(samp->WrapT, texcoord[1], clamp_rect_coord_linear(samp->Attrib.WrapT, texcoord[1],
height, j0, j1, wj); height, j0, j1, wj);
*slice = 0; *slice = 0;
break; break;
case GL_TEXTURE_1D: case GL_TEXTURE_1D:
case GL_TEXTURE_2D: case GL_TEXTURE_2D:
linear_texel_locations(samp->WrapS, img, width, linear_texel_locations(samp->Attrib.WrapS, img, width,
texcoord[0], i0, i1, wi); texcoord[0], i0, i1, wi);
linear_texel_locations(samp->WrapT, img, height, linear_texel_locations(samp->Attrib.WrapT, img, height,
texcoord[1], j0, j1, wj); texcoord[1], j0, j1, wj);
*slice = 0; *slice = 0;
break; break;
case GL_TEXTURE_1D_ARRAY_EXT: case GL_TEXTURE_1D_ARRAY_EXT:
linear_texel_locations(samp->WrapS, img, width, linear_texel_locations(samp->Attrib.WrapS, img, width,
texcoord[0], i0, i1, wi); texcoord[0], i0, i1, wi);
*j0 = tex_array_slice(texcoord[1], height); *j0 = tex_array_slice(texcoord[1], height);
*j1 = *j0; *j1 = *j0;
@ -590,9 +590,9 @@ linear_texcoord(const struct gl_sampler_object *samp,
break; break;
case GL_TEXTURE_2D_ARRAY_EXT: case GL_TEXTURE_2D_ARRAY_EXT:
linear_texel_locations(samp->WrapS, img, width, linear_texel_locations(samp->Attrib.WrapS, img, width,
texcoord[0], i0, i1, wi); texcoord[0], i0, i1, wi);
linear_texel_locations(samp->WrapT, img, height, linear_texel_locations(samp->Attrib.WrapT, img, height,
texcoord[1], j0, j1, wj); texcoord[1], j0, j1, wj);
*slice = tex_array_slice(texcoord[2], depth); *slice = tex_array_slice(texcoord[2], depth);
break; break;
@ -613,11 +613,11 @@ static GLint
linear_mipmap_level(const struct gl_texture_object *tObj, GLfloat lambda) linear_mipmap_level(const struct gl_texture_object *tObj, GLfloat lambda)
{ {
if (lambda < 0.0F) if (lambda < 0.0F)
return tObj->BaseLevel; return tObj->Attrib.BaseLevel;
else if (lambda > tObj->_MaxLambda) else if (lambda > tObj->_MaxLambda)
return (GLint) (tObj->BaseLevel + tObj->_MaxLambda); return (GLint) (tObj->Attrib.BaseLevel + tObj->_MaxLambda);
else else
return (GLint) (tObj->BaseLevel + lambda); return (GLint) (tObj->Attrib.BaseLevel + lambda);
} }
@ -635,7 +635,7 @@ nearest_mipmap_level(const struct gl_texture_object *tObj, GLfloat lambda)
l = tObj->_MaxLambda + 0.4999F; l = tObj->_MaxLambda + 0.4999F;
else else
l = lambda; l = lambda;
level = (GLint) (tObj->BaseLevel + l + 0.5F); level = (GLint) (tObj->Attrib.BaseLevel + l + 0.5F);
if (level > tObj->_MaxLevel) if (level > tObj->_MaxLevel)
level = tObj->_MaxLevel; level = tObj->_MaxLevel;
return level; return level;
@ -669,12 +669,12 @@ compute_min_mag_ranges(const struct gl_sampler_object *samp,
GLfloat minMagThresh; GLfloat minMagThresh;
/* we shouldn't be here if minfilter == magfilter */ /* we shouldn't be here if minfilter == magfilter */
assert(samp->MinFilter != samp->MagFilter); assert(samp->Attrib.MinFilter != samp->Attrib.MagFilter);
/* This bit comes from the OpenGL spec: */ /* This bit comes from the OpenGL spec: */
if (samp->MagFilter == GL_LINEAR if (samp->Attrib.MagFilter == GL_LINEAR
&& (samp->MinFilter == GL_NEAREST_MIPMAP_NEAREST || && (samp->Attrib.MinFilter == GL_NEAREST_MIPMAP_NEAREST ||
samp->MinFilter == GL_NEAREST_MIPMAP_LINEAR)) { samp->Attrib.MinFilter == GL_NEAREST_MIPMAP_LINEAR)) {
minMagThresh = 0.5F; minMagThresh = 0.5F;
} }
else { else {
@ -776,28 +776,28 @@ get_border_color(const struct gl_sampler_object *samp,
{ {
switch (img->_BaseFormat) { switch (img->_BaseFormat) {
case GL_RGB: case GL_RGB:
rgba[0] = samp->BorderColor.f[0]; rgba[0] = samp->Attrib.BorderColor.f[0];
rgba[1] = samp->BorderColor.f[1]; rgba[1] = samp->Attrib.BorderColor.f[1];
rgba[2] = samp->BorderColor.f[2]; rgba[2] = samp->Attrib.BorderColor.f[2];
rgba[3] = 1.0F; rgba[3] = 1.0F;
break; break;
case GL_ALPHA: case GL_ALPHA:
rgba[0] = rgba[1] = rgba[2] = 0.0; rgba[0] = rgba[1] = rgba[2] = 0.0;
rgba[3] = samp->BorderColor.f[3]; rgba[3] = samp->Attrib.BorderColor.f[3];
break; break;
case GL_LUMINANCE: case GL_LUMINANCE:
rgba[0] = rgba[1] = rgba[2] = samp->BorderColor.f[0]; rgba[0] = rgba[1] = rgba[2] = samp->Attrib.BorderColor.f[0];
rgba[3] = 1.0; rgba[3] = 1.0;
break; break;
case GL_LUMINANCE_ALPHA: case GL_LUMINANCE_ALPHA:
rgba[0] = rgba[1] = rgba[2] = samp->BorderColor.f[0]; rgba[0] = rgba[1] = rgba[2] = samp->Attrib.BorderColor.f[0];
rgba[3] = samp->BorderColor.f[3]; rgba[3] = samp->Attrib.BorderColor.f[3];
break; break;
case GL_INTENSITY: case GL_INTENSITY:
rgba[0] = rgba[1] = rgba[2] = rgba[3] = samp->BorderColor.f[0]; rgba[0] = rgba[1] = rgba[2] = rgba[3] = samp->Attrib.BorderColor.f[0];
break; break;
default: default:
COPY_4V(rgba, samp->BorderColor.f); COPY_4V(rgba, samp->Attrib.BorderColor.f);
break; break;
} }
} }
@ -855,7 +855,7 @@ sample_1d_nearest(struct gl_context *ctx,
const struct swrast_texture_image *swImg = swrast_texture_image_const(img); const struct swrast_texture_image *swImg = swrast_texture_image_const(img);
const GLint width = img->Width2; /* without border, power of two */ const GLint width = img->Width2; /* without border, power of two */
GLint i; GLint i;
i = nearest_texel_location(samp->WrapS, img, width, texcoord[0]); i = nearest_texel_location(samp->Attrib.WrapS, img, width, texcoord[0]);
/* skip over the border, if any */ /* skip over the border, if any */
i += img->Border; i += img->Border;
if (i < 0 || i >= (GLint) img->Width) { if (i < 0 || i >= (GLint) img->Width) {
@ -884,7 +884,7 @@ sample_1d_linear(struct gl_context *ctx,
GLfloat a; GLfloat a;
GLfloat t0[4], t1[4]; /* texels */ GLfloat t0[4], t1[4]; /* texels */
linear_texel_locations(samp->WrapS, img, width, texcoord[0], &i0, &i1, &a); linear_texel_locations(samp->Attrib.WrapS, img, width, texcoord[0], &i0, &i1, &a);
if (img->Border) { if (img->Border) {
i0 += img->Border; i0 += img->Border;
@ -1050,7 +1050,7 @@ sample_lambda_1d( struct gl_context *ctx,
if (minStart < minEnd) { if (minStart < minEnd) {
/* do the minified texels */ /* do the minified texels */
const GLuint m = minEnd - minStart; const GLuint m = minEnd - minStart;
switch (samp->MinFilter) { switch (samp->Attrib.MinFilter) {
case GL_NEAREST: case GL_NEAREST:
for (i = minStart; i < minEnd; i++) for (i = minStart; i < minEnd; i++)
sample_1d_nearest(ctx, samp, _mesa_base_tex_image(tObj), sample_1d_nearest(ctx, samp, _mesa_base_tex_image(tObj),
@ -1085,7 +1085,7 @@ sample_lambda_1d( struct gl_context *ctx,
if (magStart < magEnd) { if (magStart < magEnd) {
/* do the magnified texels */ /* do the magnified texels */
switch (samp->MagFilter) { switch (samp->Attrib.MagFilter) {
case GL_NEAREST: case GL_NEAREST:
for (i = magStart; i < magEnd; i++) for (i = magStart; i < magEnd; i++)
sample_1d_nearest(ctx, samp, _mesa_base_tex_image(tObj), sample_1d_nearest(ctx, samp, _mesa_base_tex_image(tObj),
@ -1125,8 +1125,8 @@ sample_2d_nearest(struct gl_context *ctx,
GLint i, j; GLint i, j;
(void) ctx; (void) ctx;
i = nearest_texel_location(samp->WrapS, img, width, texcoord[0]); i = nearest_texel_location(samp->Attrib.WrapS, img, width, texcoord[0]);
j = nearest_texel_location(samp->WrapT, img, height, texcoord[1]); j = nearest_texel_location(samp->Attrib.WrapT, img, height, texcoord[1]);
/* skip over the border, if any */ /* skip over the border, if any */
i += img->Border; i += img->Border;
@ -1161,8 +1161,8 @@ sample_2d_linear(struct gl_context *ctx,
GLfloat a, b; GLfloat a, b;
GLfloat t00[4], t10[4], t01[4], t11[4]; /* sampled texel colors */ GLfloat t00[4], t10[4], t01[4], t11[4]; /* sampled texel colors */
linear_texel_locations(samp->WrapS, img, width, texcoord[0], &i0, &i1, &a); linear_texel_locations(samp->Attrib.WrapS, img, width, texcoord[0], &i0, &i1, &a);
linear_texel_locations(samp->WrapT, img, height, texcoord[1], &j0, &j1, &b); linear_texel_locations(samp->Attrib.WrapT, img, height, texcoord[1], &j0, &j1, &b);
if (img->Border) { if (img->Border) {
i0 += img->Border; i0 += img->Border;
@ -1227,8 +1227,8 @@ sample_2d_linear_repeat(struct gl_context *ctx,
(void) ctx; (void) ctx;
assert(samp->WrapS == GL_REPEAT); assert(samp->Attrib.WrapS == GL_REPEAT);
assert(samp->WrapT == GL_REPEAT); assert(samp->Attrib.WrapT == GL_REPEAT);
assert(img->Border == 0); assert(img->Border == 0);
assert(swImg->_IsPowerOfTwo); assert(swImg->_IsPowerOfTwo);
@ -1336,8 +1336,8 @@ sample_2d_linear_mipmap_linear_repeat(struct gl_context *ctx,
{ {
GLuint i; GLuint i;
assert(lambda != NULL); assert(lambda != NULL);
assert(samp->WrapS == GL_REPEAT); assert(samp->Attrib.WrapS == GL_REPEAT);
assert(samp->WrapT == GL_REPEAT); assert(samp->Attrib.WrapT == GL_REPEAT);
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
GLint level = linear_mipmap_level(tObj, lambda[i]); GLint level = linear_mipmap_level(tObj, lambda[i]);
if (level >= tObj->_MaxLevel) { if (level >= tObj->_MaxLevel) {
@ -1386,8 +1386,8 @@ sample_linear_2d(struct gl_context *ctx,
const struct gl_texture_image *image = _mesa_base_tex_image(tObj); const struct gl_texture_image *image = _mesa_base_tex_image(tObj);
const struct swrast_texture_image *swImg = swrast_texture_image_const(image); const struct swrast_texture_image *swImg = swrast_texture_image_const(image);
(void) lambda; (void) lambda;
if (samp->WrapS == GL_REPEAT && if (samp->Attrib.WrapS == GL_REPEAT &&
samp->WrapT == GL_REPEAT && samp->Attrib.WrapT == GL_REPEAT &&
swImg->_IsPowerOfTwo && swImg->_IsPowerOfTwo &&
image->Border == 0) { image->Border == 0) {
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
@ -1427,8 +1427,8 @@ opt_sample_rgb_2d(struct gl_context *ctx,
GLuint k; GLuint k;
(void) ctx; (void) ctx;
(void) lambda; (void) lambda;
assert(samp->WrapS==GL_REPEAT); assert(samp->Attrib.WrapS==GL_REPEAT);
assert(samp->WrapT==GL_REPEAT); assert(samp->Attrib.WrapT==GL_REPEAT);
assert(img->Border==0); assert(img->Border==0);
assert(img->TexFormat == MESA_FORMAT_BGR_UNORM8); assert(img->TexFormat == MESA_FORMAT_BGR_UNORM8);
assert(swImg->_IsPowerOfTwo); assert(swImg->_IsPowerOfTwo);
@ -1472,8 +1472,8 @@ opt_sample_rgba_2d(struct gl_context *ctx,
GLuint i; GLuint i;
(void) ctx; (void) ctx;
(void) lambda; (void) lambda;
assert(samp->WrapS==GL_REPEAT); assert(samp->Attrib.WrapS==GL_REPEAT);
assert(samp->WrapT==GL_REPEAT); assert(samp->Attrib.WrapT==GL_REPEAT);
assert(img->Border==0); assert(img->Border==0);
assert(img->TexFormat == MESA_FORMAT_A8B8G8R8_UNORM); assert(img->TexFormat == MESA_FORMAT_A8B8G8R8_UNORM);
assert(swImg->_IsPowerOfTwo); assert(swImg->_IsPowerOfTwo);
@ -1505,8 +1505,8 @@ sample_lambda_2d(struct gl_context *ctx,
GLuint minStart, minEnd; /* texels with minification */ GLuint minStart, minEnd; /* texels with minification */
GLuint magStart, magEnd; /* texels with magnification */ GLuint magStart, magEnd; /* texels with magnification */
const GLboolean repeatNoBorderPOT = (samp->WrapS == GL_REPEAT) const GLboolean repeatNoBorderPOT = (samp->Attrib.WrapS == GL_REPEAT)
&& (samp->WrapT == GL_REPEAT) && (samp->Attrib.WrapT == GL_REPEAT)
&& (tImg->Border == 0) && (tImg->Border == 0)
&& (_mesa_format_row_stride(tImg->TexFormat, tImg->Width) == && (_mesa_format_row_stride(tImg->TexFormat, tImg->Width) ==
swImg->RowStride) swImg->RowStride)
@ -1519,7 +1519,7 @@ sample_lambda_2d(struct gl_context *ctx,
if (minStart < minEnd) { if (minStart < minEnd) {
/* do the minified texels */ /* do the minified texels */
const GLuint m = minEnd - minStart; const GLuint m = minEnd - minStart;
switch (samp->MinFilter) { switch (samp->Attrib.MinFilter) {
case GL_NEAREST: case GL_NEAREST:
if (repeatNoBorderPOT) { if (repeatNoBorderPOT) {
switch (tImg->TexFormat) { switch (tImg->TexFormat) {
@ -1576,7 +1576,7 @@ sample_lambda_2d(struct gl_context *ctx,
/* do the magnified texels */ /* do the magnified texels */
const GLuint m = magEnd - magStart; const GLuint m = magEnd - magStart;
switch (samp->MagFilter) { switch (samp->Attrib.MagFilter) {
case GL_NEAREST: case GL_NEAREST:
if (repeatNoBorderPOT) { if (repeatNoBorderPOT) {
switch (tImg->TexFormat) { switch (tImg->TexFormat) {
@ -1870,7 +1870,7 @@ sample_lambda_2d_aniso(struct gl_context *ctx,
const struct gl_texture_image *tImg = _mesa_base_tex_image(tObj); const struct gl_texture_image *tImg = _mesa_base_tex_image(tObj);
const struct swrast_texture_image *swImg = swrast_texture_image_const(tImg); const struct swrast_texture_image *swImg = swrast_texture_image_const(tImg);
const GLfloat maxEccentricity = const GLfloat maxEccentricity =
samp->MaxAnisotropy * samp->MaxAnisotropy; samp->Attrib.MaxAnisotropy * samp->Attrib.MaxAnisotropy;
/* re-calculate the lambda values so that they are usable with anisotropic /* re-calculate the lambda values so that they are usable with anisotropic
* filtering * filtering
@ -1901,8 +1901,8 @@ sample_lambda_2d_aniso(struct gl_context *ctx,
/* from swrast/s_texcombine.c _swrast_texture_span */ /* from swrast/s_texcombine.c _swrast_texture_span */
const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[u]; const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[u];
const GLboolean adjustLOD = const GLboolean adjustLOD =
(texUnit->LodBias + samp->LodBias != 0.0F) (texUnit->LodBias + samp->Attrib.LodBias != 0.0F)
|| (samp->MinLod != -1000.0F || samp->MaxLod != 1000.0F); || (samp->Attrib.MinLod != -1000.0F || samp->Attrib.MaxLod != 1000.0F);
GLuint i; GLuint i;
@ -1965,18 +1965,18 @@ sample_lambda_2d_aniso(struct gl_context *ctx,
if (adjustLOD) { if (adjustLOD) {
/* from swrast/s_texcombine.c _swrast_texture_span */ /* from swrast/s_texcombine.c _swrast_texture_span */
if (texUnit->LodBias + samp->LodBias != 0.0F) { if (texUnit->LodBias + samp->Attrib.LodBias != 0.0F) {
/* apply LOD bias, but don't clamp yet */ /* apply LOD bias, but don't clamp yet */
const GLfloat bias = const GLfloat bias =
CLAMP(texUnit->LodBias + samp->LodBias, CLAMP(texUnit->LodBias + samp->Attrib.LodBias,
-ctx->Const.MaxTextureLodBias, -ctx->Const.MaxTextureLodBias,
ctx->Const.MaxTextureLodBias); ctx->Const.MaxTextureLodBias);
lod += bias; lod += bias;
if (samp->MinLod != -1000.0F || if (samp->Attrib.MinLod != -1000.0F ||
samp->MaxLod != 1000.0F) { samp->Attrib.MaxLod != 1000.0F) {
/* apply LOD clamping to lambda */ /* apply LOD clamping to lambda */
lod = CLAMP(lod, samp->MinLod, samp->MaxLod); lod = CLAMP(lod, samp->Attrib.MinLod, samp->Attrib.MaxLod);
} }
} }
} }
@ -2028,9 +2028,9 @@ sample_3d_nearest(struct gl_context *ctx,
GLint i, j, k; GLint i, j, k;
(void) ctx; (void) ctx;
i = nearest_texel_location(samp->WrapS, img, width, texcoord[0]); i = nearest_texel_location(samp->Attrib.WrapS, img, width, texcoord[0]);
j = nearest_texel_location(samp->WrapT, img, height, texcoord[1]); j = nearest_texel_location(samp->Attrib.WrapT, img, height, texcoord[1]);
k = nearest_texel_location(samp->WrapR, img, depth, texcoord[2]); k = nearest_texel_location(samp->Attrib.WrapR, img, depth, texcoord[2]);
if (i < 0 || i >= (GLint) img->Width || if (i < 0 || i >= (GLint) img->Width ||
j < 0 || j >= (GLint) img->Height || j < 0 || j >= (GLint) img->Height ||
@ -2064,9 +2064,9 @@ sample_3d_linear(struct gl_context *ctx,
GLfloat t000[4], t010[4], t001[4], t011[4]; GLfloat t000[4], t010[4], t001[4], t011[4];
GLfloat t100[4], t110[4], t101[4], t111[4]; GLfloat t100[4], t110[4], t101[4], t111[4];
linear_texel_locations(samp->WrapS, img, width, texcoord[0], &i0, &i1, &a); linear_texel_locations(samp->Attrib.WrapS, img, width, texcoord[0], &i0, &i1, &a);
linear_texel_locations(samp->WrapT, img, height, texcoord[1], &j0, &j1, &b); linear_texel_locations(samp->Attrib.WrapT, img, height, texcoord[1], &j0, &j1, &b);
linear_texel_locations(samp->WrapR, img, depth, texcoord[2], &k0, &k1, &c); linear_texel_locations(samp->Attrib.WrapR, img, depth, texcoord[2], &k0, &k1, &c);
if (img->Border) { if (img->Border) {
i0 += img->Border; i0 += img->Border;
@ -2278,7 +2278,7 @@ sample_lambda_3d(struct gl_context *ctx,
if (minStart < minEnd) { if (minStart < minEnd) {
/* do the minified texels */ /* do the minified texels */
GLuint m = minEnd - minStart; GLuint m = minEnd - minStart;
switch (samp->MinFilter) { switch (samp->Attrib.MinFilter) {
case GL_NEAREST: case GL_NEAREST:
for (i = minStart; i < minEnd; i++) for (i = minStart; i < minEnd; i++)
sample_3d_nearest(ctx, samp, _mesa_base_tex_image(tObj), sample_3d_nearest(ctx, samp, _mesa_base_tex_image(tObj),
@ -2313,7 +2313,7 @@ sample_lambda_3d(struct gl_context *ctx,
if (magStart < magEnd) { if (magStart < magEnd) {
/* do the magnified texels */ /* do the magnified texels */
switch (samp->MagFilter) { switch (samp->Attrib.MagFilter) {
case GL_NEAREST: case GL_NEAREST:
for (i = magStart; i < magEnd; i++) for (i = magStart; i < magEnd; i++)
sample_3d_nearest(ctx, samp, _mesa_base_tex_image(tObj), sample_3d_nearest(ctx, samp, _mesa_base_tex_image(tObj),
@ -2429,12 +2429,12 @@ sample_nearest_cube(struct gl_context *ctx,
const struct gl_texture_image **images; const struct gl_texture_image **images;
GLfloat newCoord[4]; GLfloat newCoord[4];
images = choose_cube_face(tObj, texcoords[i], newCoord); images = choose_cube_face(tObj, texcoords[i], newCoord);
sample_2d_nearest(ctx, samp, images[tObj->BaseLevel], sample_2d_nearest(ctx, samp, images[tObj->Attrib.BaseLevel],
newCoord, rgba[i]); newCoord, rgba[i]);
} }
if (is_depth_texture(tObj)) { if (is_depth_texture(tObj)) {
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
apply_depth_mode(tObj->DepthMode, rgba[i][0], rgba[i]); apply_depth_mode(tObj->Attrib.DepthMode, rgba[i][0], rgba[i]);
} }
} }
} }
@ -2453,12 +2453,12 @@ sample_linear_cube(struct gl_context *ctx,
const struct gl_texture_image **images; const struct gl_texture_image **images;
GLfloat newCoord[4]; GLfloat newCoord[4];
images = choose_cube_face(tObj, texcoords[i], newCoord); images = choose_cube_face(tObj, texcoords[i], newCoord);
sample_2d_linear(ctx, samp, images[tObj->BaseLevel], sample_2d_linear(ctx, samp, images[tObj->Attrib.BaseLevel],
newCoord, rgba[i]); newCoord, rgba[i]);
} }
if (is_depth_texture(tObj)) { if (is_depth_texture(tObj)) {
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
apply_depth_mode(tObj->DepthMode, rgba[i][0], rgba[i]); apply_depth_mode(tObj->Attrib.DepthMode, rgba[i][0], rgba[i]);
} }
} }
} }
@ -2493,7 +2493,7 @@ sample_cube_nearest_mipmap_nearest(struct gl_context *ctx,
} }
if (is_depth_texture(tObj)) { if (is_depth_texture(tObj)) {
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
apply_depth_mode(tObj->DepthMode, rgba[i][0], rgba[i]); apply_depth_mode(tObj->Attrib.DepthMode, rgba[i][0], rgba[i]);
} }
} }
} }
@ -2518,7 +2518,7 @@ sample_cube_linear_mipmap_nearest(struct gl_context *ctx,
} }
if (is_depth_texture(tObj)) { if (is_depth_texture(tObj)) {
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
apply_depth_mode(tObj->DepthMode, rgba[i][0], rgba[i]); apply_depth_mode(tObj->Attrib.DepthMode, rgba[i][0], rgba[i]);
} }
} }
} }
@ -2553,7 +2553,7 @@ sample_cube_nearest_mipmap_linear(struct gl_context *ctx,
} }
if (is_depth_texture(tObj)) { if (is_depth_texture(tObj)) {
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
apply_depth_mode(tObj->DepthMode, rgba[i][0], rgba[i]); apply_depth_mode(tObj->Attrib.DepthMode, rgba[i][0], rgba[i]);
} }
} }
} }
@ -2588,7 +2588,7 @@ sample_cube_linear_mipmap_linear(struct gl_context *ctx,
} }
if (is_depth_texture(tObj)) { if (is_depth_texture(tObj)) {
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
apply_depth_mode(tObj->DepthMode, rgba[i][0], rgba[i]); apply_depth_mode(tObj->Attrib.DepthMode, rgba[i][0], rgba[i]);
} }
} }
} }
@ -2612,7 +2612,7 @@ sample_lambda_cube(struct gl_context *ctx,
if (minStart < minEnd) { if (minStart < minEnd) {
/* do the minified texels */ /* do the minified texels */
const GLuint m = minEnd - minStart; const GLuint m = minEnd - minStart;
switch (samp->MinFilter) { switch (samp->Attrib.MinFilter) {
case GL_NEAREST: case GL_NEAREST:
sample_nearest_cube(ctx, samp, tObj, m, texcoords + minStart, sample_nearest_cube(ctx, samp, tObj, m, texcoords + minStart,
lambda + minStart, rgba + minStart); lambda + minStart, rgba + minStart);
@ -2650,7 +2650,7 @@ sample_lambda_cube(struct gl_context *ctx,
if (magStart < magEnd) { if (magStart < magEnd) {
/* do the magnified texels */ /* do the magnified texels */
const GLuint m = magEnd - magStart; const GLuint m = magEnd - magStart;
switch (samp->MagFilter) { switch (samp->Attrib.MagFilter) {
case GL_NEAREST: case GL_NEAREST:
sample_nearest_cube(ctx, samp, tObj, m, texcoords + magStart, sample_nearest_cube(ctx, samp, tObj, m, texcoords + magStart,
lambda + magStart, rgba + magStart); lambda + magStart, rgba + magStart);
@ -2688,17 +2688,17 @@ sample_nearest_rect(struct gl_context *ctx,
(void) ctx; (void) ctx;
(void) lambda; (void) lambda;
assert(samp->WrapS == GL_CLAMP || assert(samp->Attrib.WrapS == GL_CLAMP ||
samp->WrapS == GL_CLAMP_TO_EDGE || samp->Attrib.WrapS == GL_CLAMP_TO_EDGE ||
samp->WrapS == GL_CLAMP_TO_BORDER); samp->Attrib.WrapS == GL_CLAMP_TO_BORDER);
assert(samp->WrapT == GL_CLAMP || assert(samp->Attrib.WrapT == GL_CLAMP ||
samp->WrapT == GL_CLAMP_TO_EDGE || samp->Attrib.WrapT == GL_CLAMP_TO_EDGE ||
samp->WrapT == GL_CLAMP_TO_BORDER); samp->Attrib.WrapT == GL_CLAMP_TO_BORDER);
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
GLint row, col; GLint row, col;
col = clamp_rect_coord_nearest(samp->WrapS, texcoords[i][0], width); col = clamp_rect_coord_nearest(samp->Attrib.WrapS, texcoords[i][0], width);
row = clamp_rect_coord_nearest(samp->WrapT, texcoords[i][1], height); row = clamp_rect_coord_nearest(samp->Attrib.WrapT, texcoords[i][1], height);
if (col < 0 || col >= width || row < 0 || row >= height) if (col < 0 || col >= width || row < 0 || row >= height)
get_border_color(samp, img, rgba[i]); get_border_color(samp, img, rgba[i]);
else else
@ -2723,12 +2723,12 @@ sample_linear_rect(struct gl_context *ctx,
(void) ctx; (void) ctx;
(void) lambda; (void) lambda;
assert(samp->WrapS == GL_CLAMP || assert(samp->Attrib.WrapS == GL_CLAMP ||
samp->WrapS == GL_CLAMP_TO_EDGE || samp->Attrib.WrapS == GL_CLAMP_TO_EDGE ||
samp->WrapS == GL_CLAMP_TO_BORDER); samp->Attrib.WrapS == GL_CLAMP_TO_BORDER);
assert(samp->WrapT == GL_CLAMP || assert(samp->Attrib.WrapT == GL_CLAMP ||
samp->WrapT == GL_CLAMP_TO_EDGE || samp->Attrib.WrapT == GL_CLAMP_TO_EDGE ||
samp->WrapT == GL_CLAMP_TO_BORDER); samp->Attrib.WrapT == GL_CLAMP_TO_BORDER);
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
GLint i0, j0, i1, j1; GLint i0, j0, i1, j1;
@ -2736,9 +2736,9 @@ sample_linear_rect(struct gl_context *ctx,
GLfloat a, b; GLfloat a, b;
GLbitfield useBorderColor = 0x0; GLbitfield useBorderColor = 0x0;
clamp_rect_coord_linear(samp->WrapS, texcoords[i][0], width, clamp_rect_coord_linear(samp->Attrib.WrapS, texcoords[i][0], width,
&i0, &i1, &a); &i0, &i1, &a);
clamp_rect_coord_linear(samp->WrapT, texcoords[i][1], height, clamp_rect_coord_linear(samp->Attrib.WrapT, texcoords[i][1], height,
&j0, &j1, &b); &j0, &j1, &b);
/* compute integer rows/columns */ /* compute integer rows/columns */
@ -2790,7 +2790,7 @@ sample_lambda_rect(struct gl_context *ctx,
&minStart, &minEnd, &magStart, &magEnd); &minStart, &minEnd, &magStart, &magEnd);
if (minStart < minEnd) { if (minStart < minEnd) {
if (samp->MinFilter == GL_NEAREST) { if (samp->Attrib.MinFilter == GL_NEAREST) {
sample_nearest_rect(ctx, samp, tObj, minEnd - minStart, sample_nearest_rect(ctx, samp, tObj, minEnd - minStart,
texcoords + minStart, NULL, rgba + minStart); texcoords + minStart, NULL, rgba + minStart);
} }
@ -2800,7 +2800,7 @@ sample_lambda_rect(struct gl_context *ctx,
} }
} }
if (magStart < magEnd) { if (magStart < magEnd) {
if (samp->MagFilter == GL_NEAREST) { if (samp->Attrib.MagFilter == GL_NEAREST) {
sample_nearest_rect(ctx, samp, tObj, magEnd - magStart, sample_nearest_rect(ctx, samp, tObj, magEnd - magStart,
texcoords + magStart, NULL, rgba + magStart); texcoords + magStart, NULL, rgba + magStart);
} }
@ -2834,8 +2834,8 @@ sample_2d_array_nearest(struct gl_context *ctx,
GLint array; GLint array;
(void) ctx; (void) ctx;
i = nearest_texel_location(samp->WrapS, img, width, texcoord[0]); i = nearest_texel_location(samp->Attrib.WrapS, img, width, texcoord[0]);
j = nearest_texel_location(samp->WrapT, img, height, texcoord[1]); j = nearest_texel_location(samp->Attrib.WrapT, img, height, texcoord[1]);
array = tex_array_slice(texcoord[2], depth); array = tex_array_slice(texcoord[2], depth);
if (i < 0 || i >= (GLint) img->Width || if (i < 0 || i >= (GLint) img->Width ||
@ -2870,12 +2870,12 @@ sample_2d_array_linear(struct gl_context *ctx,
GLfloat a, b; GLfloat a, b;
GLfloat t00[4], t01[4], t10[4], t11[4]; GLfloat t00[4], t01[4], t10[4], t11[4];
linear_texel_locations(samp->WrapS, img, width, texcoord[0], &i0, &i1, &a); linear_texel_locations(samp->Attrib.WrapS, img, width, texcoord[0], &i0, &i1, &a);
linear_texel_locations(samp->WrapT, img, height, texcoord[1], &j0, &j1, &b); linear_texel_locations(samp->Attrib.WrapT, img, height, texcoord[1], &j0, &j1, &b);
array = tex_array_slice(texcoord[2], depth); array = tex_array_slice(texcoord[2], depth);
if (array < 0 || array >= depth) { if (array < 0 || array >= depth) {
COPY_4V(rgba, samp->BorderColor.f); COPY_4V(rgba, samp->Attrib.BorderColor.f);
} }
else { else {
if (img->Border) { if (img->Border) {
@ -3067,7 +3067,7 @@ sample_lambda_2d_array(struct gl_context *ctx,
if (minStart < minEnd) { if (minStart < minEnd) {
/* do the minified texels */ /* do the minified texels */
GLuint m = minEnd - minStart; GLuint m = minEnd - minStart;
switch (samp->MinFilter) { switch (samp->Attrib.MinFilter) {
case GL_NEAREST: case GL_NEAREST:
for (i = minStart; i < minEnd; i++) for (i = minStart; i < minEnd; i++)
sample_2d_array_nearest(ctx, samp, _mesa_base_tex_image(tObj), sample_2d_array_nearest(ctx, samp, _mesa_base_tex_image(tObj),
@ -3110,7 +3110,7 @@ sample_lambda_2d_array(struct gl_context *ctx,
if (magStart < magEnd) { if (magStart < magEnd) {
/* do the magnified texels */ /* do the magnified texels */
switch (samp->MagFilter) { switch (samp->Attrib.MagFilter) {
case GL_NEAREST: case GL_NEAREST:
for (i = magStart; i < magEnd; i++) for (i = magStart; i < magEnd; i++)
sample_2d_array_nearest(ctx, samp, _mesa_base_tex_image(tObj), sample_2d_array_nearest(ctx, samp, _mesa_base_tex_image(tObj),
@ -3152,7 +3152,7 @@ sample_1d_array_nearest(struct gl_context *ctx,
GLint array; GLint array;
(void) ctx; (void) ctx;
i = nearest_texel_location(samp->WrapS, img, width, texcoord[0]); i = nearest_texel_location(samp->Attrib.WrapS, img, width, texcoord[0]);
array = tex_array_slice(texcoord[1], height); array = tex_array_slice(texcoord[1], height);
if (i < 0 || i >= (GLint) img->Width || if (i < 0 || i >= (GLint) img->Width ||
@ -3185,7 +3185,7 @@ sample_1d_array_linear(struct gl_context *ctx,
GLfloat a; GLfloat a;
GLfloat t0[4], t1[4]; GLfloat t0[4], t1[4];
linear_texel_locations(samp->WrapS, img, width, texcoord[0], &i0, &i1, &a); linear_texel_locations(samp->Attrib.WrapS, img, width, texcoord[0], &i0, &i1, &a);
array = tex_array_slice(texcoord[1], height); array = tex_array_slice(texcoord[1], height);
if (img->Border) { if (img->Border) {
@ -3357,7 +3357,7 @@ sample_lambda_1d_array(struct gl_context *ctx,
if (minStart < minEnd) { if (minStart < minEnd) {
/* do the minified texels */ /* do the minified texels */
GLuint m = minEnd - minStart; GLuint m = minEnd - minStart;
switch (samp->MinFilter) { switch (samp->Attrib.MinFilter) {
case GL_NEAREST: case GL_NEAREST:
for (i = minStart; i < minEnd; i++) for (i = minStart; i < minEnd; i++)
sample_1d_array_nearest(ctx, samp, _mesa_base_tex_image(tObj), sample_1d_array_nearest(ctx, samp, _mesa_base_tex_image(tObj),
@ -3396,7 +3396,7 @@ sample_lambda_1d_array(struct gl_context *ctx,
if (magStart < magEnd) { if (magStart < magEnd) {
/* do the magnified texels */ /* do the magnified texels */
switch (samp->MagFilter) { switch (samp->Attrib.MagFilter) {
case GL_NEAREST: case GL_NEAREST:
for (i = magStart; i < magEnd; i++) for (i = magStart; i < magEnd; i++)
sample_1d_array_nearest(ctx, samp, _mesa_base_tex_image(tObj), sample_1d_array_nearest(ctx, samp, _mesa_base_tex_image(tObj),
@ -3519,15 +3519,15 @@ choose_depth_texture_level(const struct gl_sampler_object *samp,
{ {
GLint level; GLint level;
if (samp->MinFilter == GL_NEAREST || samp->MinFilter == GL_LINEAR) { if (samp->Attrib.MinFilter == GL_NEAREST || samp->Attrib.MinFilter == GL_LINEAR) {
/* no mipmapping - use base level */ /* no mipmapping - use base level */
level = tObj->BaseLevel; level = tObj->Attrib.BaseLevel;
} }
else { else {
/* choose mipmap level */ /* choose mipmap level */
lambda = CLAMP(lambda, samp->MinLod, samp->MaxLod); lambda = CLAMP(lambda, samp->Attrib.MinLod, samp->Attrib.MaxLod);
level = (GLint) lambda; level = (GLint) lambda;
level = CLAMP(level, tObj->BaseLevel, tObj->_MaxLevel); level = CLAMP(level, tObj->Attrib.BaseLevel, tObj->_MaxLevel);
} }
return level; return level;
@ -3568,10 +3568,10 @@ sample_depth_texture( struct gl_context *ctx,
/* XXXX if samp->MinFilter != samp->MagFilter, we're ignoring lambda */ /* XXXX if samp->MinFilter != samp->MagFilter, we're ignoring lambda */
function = (samp->CompareMode == GL_COMPARE_R_TO_TEXTURE_ARB) ? function = (samp->Attrib.CompareMode == GL_COMPARE_R_TO_TEXTURE_ARB) ?
samp->CompareFunc : GL_NONE; samp->Attrib.CompareFunc : GL_NONE;
if (samp->MagFilter == GL_NEAREST) { if (samp->Attrib.MagFilter == GL_NEAREST) {
GLuint i; GLuint i;
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
GLfloat depthSample, depthRef; GLfloat depthSample, depthRef;
@ -3584,19 +3584,19 @@ sample_depth_texture( struct gl_context *ctx,
swImg->FetchTexel(swImg, col, row, slice, &depthSample); swImg->FetchTexel(swImg, col, row, slice, &depthSample);
} }
else { else {
depthSample = samp->BorderColor.f[0]; depthSample = samp->Attrib.BorderColor.f[0];
} }
depthRef = CLAMP(texcoords[i][compare_coord], 0.0F, 1.0F); depthRef = CLAMP(texcoords[i][compare_coord], 0.0F, 1.0F);
result = shadow_compare(function, depthRef, depthSample); result = shadow_compare(function, depthRef, depthSample);
apply_depth_mode(tObj->DepthMode, result, texel[i]); apply_depth_mode(tObj->Attrib.DepthMode, result, texel[i]);
} }
} }
else { else {
GLuint i; GLuint i;
assert(samp->MagFilter == GL_LINEAR); assert(samp->Attrib.MagFilter == GL_LINEAR);
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
GLfloat depth00, depth01, depth10, depth11, depthRef; GLfloat depth00, depth01, depth10, depth11, depthRef;
GLint i0, i1, j0, j1; GLint i0, i1, j0, j1;
@ -3624,21 +3624,21 @@ sample_depth_texture( struct gl_context *ctx,
} }
if (slice < 0 || slice >= (GLint) depth) { if (slice < 0 || slice >= (GLint) depth) {
depth00 = samp->BorderColor.f[0]; depth00 = samp->Attrib.BorderColor.f[0];
depth01 = samp->BorderColor.f[0]; depth01 = samp->Attrib.BorderColor.f[0];
depth10 = samp->BorderColor.f[0]; depth10 = samp->Attrib.BorderColor.f[0];
depth11 = samp->BorderColor.f[0]; depth11 = samp->Attrib.BorderColor.f[0];
} }
else { else {
/* get four depth samples from the texture */ /* get four depth samples from the texture */
if (useBorderTexel & (I0BIT | J0BIT)) { if (useBorderTexel & (I0BIT | J0BIT)) {
depth00 = samp->BorderColor.f[0]; depth00 = samp->Attrib.BorderColor.f[0];
} }
else { else {
swImg->FetchTexel(swImg, i0, j0, slice, &depth00); swImg->FetchTexel(swImg, i0, j0, slice, &depth00);
} }
if (useBorderTexel & (I1BIT | J0BIT)) { if (useBorderTexel & (I1BIT | J0BIT)) {
depth10 = samp->BorderColor.f[0]; depth10 = samp->Attrib.BorderColor.f[0];
} }
else { else {
swImg->FetchTexel(swImg, i1, j0, slice, &depth10); swImg->FetchTexel(swImg, i1, j0, slice, &depth10);
@ -3646,13 +3646,13 @@ sample_depth_texture( struct gl_context *ctx,
if (tObj->Target != GL_TEXTURE_1D_ARRAY_EXT) { if (tObj->Target != GL_TEXTURE_1D_ARRAY_EXT) {
if (useBorderTexel & (I0BIT | J1BIT)) { if (useBorderTexel & (I0BIT | J1BIT)) {
depth01 = samp->BorderColor.f[0]; depth01 = samp->Attrib.BorderColor.f[0];
} }
else { else {
swImg->FetchTexel(swImg, i0, j1, slice, &depth01); swImg->FetchTexel(swImg, i0, j1, slice, &depth01);
} }
if (useBorderTexel & (I1BIT | J1BIT)) { if (useBorderTexel & (I1BIT | J1BIT)) {
depth11 = samp->BorderColor.f[0]; depth11 = samp->Attrib.BorderColor.f[0];
} }
else { else {
swImg->FetchTexel(swImg, i1, j1, slice, &depth11); swImg->FetchTexel(swImg, i1, j1, slice, &depth11);
@ -3670,7 +3670,7 @@ sample_depth_texture( struct gl_context *ctx,
depth00, depth01, depth10, depth11, depth00, depth01, depth10, depth11,
wi, wj); wi, wj);
apply_depth_mode(tObj->DepthMode, result, texel[i]); apply_depth_mode(tObj->Attrib.DepthMode, result, texel[i]);
} /* for */ } /* for */
} /* if filter */ } /* if filter */
} }
@ -3718,7 +3718,7 @@ _swrast_choose_texture_sample_func( struct gl_context *ctx,
} }
else { else {
const GLboolean needLambda = const GLboolean needLambda =
(GLboolean) (sampler->MinFilter != sampler->MagFilter); (GLboolean) (sampler->Attrib.MinFilter != sampler->Attrib.MagFilter);
switch (t->Target) { switch (t->Target) {
case GL_TEXTURE_1D: case GL_TEXTURE_1D:
@ -3728,11 +3728,11 @@ _swrast_choose_texture_sample_func( struct gl_context *ctx,
else if (needLambda) { else if (needLambda) {
return sample_lambda_1d; return sample_lambda_1d;
} }
else if (sampler->MinFilter == GL_LINEAR) { else if (sampler->Attrib.MinFilter == GL_LINEAR) {
return sample_linear_1d; return sample_linear_1d;
} }
else { else {
assert(sampler->MinFilter == GL_NEAREST); assert(sampler->Attrib.MinFilter == GL_NEAREST);
return sample_nearest_1d; return sample_nearest_1d;
} }
case GL_TEXTURE_2D: case GL_TEXTURE_2D:
@ -3741,13 +3741,13 @@ _swrast_choose_texture_sample_func( struct gl_context *ctx,
} }
else if (needLambda) { else if (needLambda) {
/* Anisotropic filtering extension. Activated only if mipmaps are used */ /* Anisotropic filtering extension. Activated only if mipmaps are used */
if (sampler->MaxAnisotropy > 1.0F && if (sampler->Attrib.MaxAnisotropy > 1.0F &&
sampler->MinFilter == GL_LINEAR_MIPMAP_LINEAR) { sampler->Attrib.MinFilter == GL_LINEAR_MIPMAP_LINEAR) {
return sample_lambda_2d_aniso; return sample_lambda_2d_aniso;
} }
return sample_lambda_2d; return sample_lambda_2d;
} }
else if (sampler->MinFilter == GL_LINEAR) { else if (sampler->Attrib.MinFilter == GL_LINEAR) {
return sample_linear_2d; return sample_linear_2d;
} }
else { else {
@ -3757,10 +3757,10 @@ _swrast_choose_texture_sample_func( struct gl_context *ctx,
swrast_texture_image_const(img); swrast_texture_image_const(img);
texture_sample_func func; texture_sample_func func;
assert(sampler->MinFilter == GL_NEAREST); assert(sampler->Attrib.MinFilter == GL_NEAREST);
func = &sample_nearest_2d; func = &sample_nearest_2d;
if (sampler->WrapS == GL_REPEAT && if (sampler->Attrib.WrapS == GL_REPEAT &&
sampler->WrapT == GL_REPEAT && sampler->Attrib.WrapT == GL_REPEAT &&
swImg->_IsPowerOfTwo && swImg->_IsPowerOfTwo &&
img->Border == 0) { img->Border == 0) {
if (img->TexFormat == MESA_FORMAT_BGR_UNORM8) if (img->TexFormat == MESA_FORMAT_BGR_UNORM8)
@ -3775,22 +3775,22 @@ _swrast_choose_texture_sample_func( struct gl_context *ctx,
if (needLambda) { if (needLambda) {
return sample_lambda_3d; return sample_lambda_3d;
} }
else if (sampler->MinFilter == GL_LINEAR) { else if (sampler->Attrib.MinFilter == GL_LINEAR) {
return sample_linear_3d; return sample_linear_3d;
} }
else { else {
assert(sampler->MinFilter == GL_NEAREST); assert(sampler->Attrib.MinFilter == GL_NEAREST);
return sample_nearest_3d; return sample_nearest_3d;
} }
case GL_TEXTURE_CUBE_MAP: case GL_TEXTURE_CUBE_MAP:
if (needLambda) { if (needLambda) {
return sample_lambda_cube; return sample_lambda_cube;
} }
else if (sampler->MinFilter == GL_LINEAR) { else if (sampler->Attrib.MinFilter == GL_LINEAR) {
return sample_linear_cube; return sample_linear_cube;
} }
else { else {
assert(sampler->MinFilter == GL_NEAREST); assert(sampler->Attrib.MinFilter == GL_NEAREST);
return sample_nearest_cube; return sample_nearest_cube;
} }
case GL_TEXTURE_RECTANGLE_NV: case GL_TEXTURE_RECTANGLE_NV:
@ -3800,11 +3800,11 @@ _swrast_choose_texture_sample_func( struct gl_context *ctx,
else if (needLambda) { else if (needLambda) {
return sample_lambda_rect; return sample_lambda_rect;
} }
else if (sampler->MinFilter == GL_LINEAR) { else if (sampler->Attrib.MinFilter == GL_LINEAR) {
return sample_linear_rect; return sample_linear_rect;
} }
else { else {
assert(sampler->MinFilter == GL_NEAREST); assert(sampler->Attrib.MinFilter == GL_NEAREST);
return sample_nearest_rect; return sample_nearest_rect;
} }
case GL_TEXTURE_1D_ARRAY_EXT: case GL_TEXTURE_1D_ARRAY_EXT:
@ -3814,11 +3814,11 @@ _swrast_choose_texture_sample_func( struct gl_context *ctx,
else if (needLambda) { else if (needLambda) {
return sample_lambda_1d_array; return sample_lambda_1d_array;
} }
else if (sampler->MinFilter == GL_LINEAR) { else if (sampler->Attrib.MinFilter == GL_LINEAR) {
return sample_linear_1d_array; return sample_linear_1d_array;
} }
else { else {
assert(sampler->MinFilter == GL_NEAREST); assert(sampler->Attrib.MinFilter == GL_NEAREST);
return sample_nearest_1d_array; return sample_nearest_1d_array;
} }
case GL_TEXTURE_2D_ARRAY_EXT: case GL_TEXTURE_2D_ARRAY_EXT:
@ -3828,11 +3828,11 @@ _swrast_choose_texture_sample_func( struct gl_context *ctx,
else if (needLambda) { else if (needLambda) {
return sample_lambda_2d_array; return sample_lambda_2d_array;
} }
else if (sampler->MinFilter == GL_LINEAR) { else if (sampler->Attrib.MinFilter == GL_LINEAR) {
return sample_linear_2d_array; return sample_linear_2d_array;
} }
else { else {
assert(sampler->MinFilter == GL_NEAREST); assert(sampler->Attrib.MinFilter == GL_NEAREST);
return sample_nearest_2d_array; return sample_nearest_2d_array;
} }
default: default:

View File

@ -268,7 +268,7 @@ _swrast_map_texture(struct gl_context *ctx, struct gl_texture_object *texObj)
GLuint face, level; GLuint face, level;
for (face = 0; face < faces; face++) { for (face = 0; face < faces; face++) {
for (level = texObj->BaseLevel; level < MAX_TEXTURE_LEVELS; level++) { for (level = texObj->Attrib.BaseLevel; level < MAX_TEXTURE_LEVELS; level++) {
struct gl_texture_image *texImage = texObj->Image[face][level]; struct gl_texture_image *texImage = texObj->Image[face][level];
struct swrast_texture_image *swImage = swrast_texture_image(texImage); struct swrast_texture_image *swImage = swrast_texture_image(texImage);
unsigned int i, slices; unsigned int i, slices;
@ -328,7 +328,7 @@ _swrast_unmap_texture(struct gl_context *ctx, struct gl_texture_object *texObj)
GLuint face, level; GLuint face, level;
for (face = 0; face < faces; face++) { for (face = 0; face < faces; face++) {
for (level = texObj->BaseLevel; level < MAX_TEXTURE_LEVELS; level++) { for (level = texObj->Attrib.BaseLevel; level < MAX_TEXTURE_LEVELS; level++) {
struct gl_texture_image *texImage = texObj->Image[face][level]; struct gl_texture_image *texImage = texObj->Image[face][level];
struct swrast_texture_image *swImage = swrast_texture_image(texImage); struct swrast_texture_image *swImage = swrast_texture_image(texImage);
unsigned int i, slices; unsigned int i, slices;

View File

@ -553,7 +553,7 @@ affine_span(struct gl_context *ctx, SWspan *span,
info.smask = texImg->Width - 1; \ info.smask = texImg->Width - 1; \
info.tmask = texImg->Height - 1; \ info.tmask = texImg->Height - 1; \
info.format = texImg->TexFormat; \ info.format = texImg->TexFormat; \
info.filter = obj->Sampler.MinFilter; \ info.filter = obj->Sampler.Attrib.MinFilter; \
info.envmode = unit->EnvMode; \ info.envmode = unit->EnvMode; \
info.er = 0; \ info.er = 0; \
info.eg = 0; \ info.eg = 0; \
@ -820,7 +820,7 @@ fast_persp_span(struct gl_context *ctx, SWspan *span,
info.smask = texImg->Width - 1; \ info.smask = texImg->Width - 1; \
info.tmask = texImg->Height - 1; \ info.tmask = texImg->Height - 1; \
info.format = texImg->TexFormat; \ info.format = texImg->TexFormat; \
info.filter = obj->Sampler.MinFilter; \ info.filter = obj->Sampler.Attrib.MinFilter; \
info.envmode = unit->EnvMode; \ info.envmode = unit->EnvMode; \
info.er = 0; \ info.er = 0; \
info.eg = 0; \ info.eg = 0; \
@ -1064,8 +1064,8 @@ _swrast_choose_triangle( struct gl_context *ctx )
swImg = swrast_texture_image_const(texImg); swImg = swrast_texture_image_const(texImg);
format = texImg ? texImg->TexFormat : MESA_FORMAT_NONE; format = texImg ? texImg->TexFormat : MESA_FORMAT_NONE;
minFilter = texObj2D ? samp->MinFilter : GL_NONE; minFilter = texObj2D ? samp->Attrib.MinFilter : GL_NONE;
magFilter = texObj2D ? samp->MagFilter : GL_NONE; magFilter = texObj2D ? samp->Attrib.MagFilter : GL_NONE;
envMode = ctx->Texture.FixedFuncUnit[0].EnvMode; envMode = ctx->Texture.FixedFuncUnit[0].EnvMode;
/* First see if we can use an optimized 2-D texture function */ /* First see if we can use an optimized 2-D texture function */
@ -1074,9 +1074,9 @@ _swrast_choose_triangle( struct gl_context *ctx )
&& !_mesa_ati_fragment_shader_enabled(ctx) && !_mesa_ati_fragment_shader_enabled(ctx)
&& ctx->Texture._MaxEnabledTexImageUnit == 0 && ctx->Texture._MaxEnabledTexImageUnit == 0
&& ctx->Texture.Unit[0]._Current->Target == GL_TEXTURE_2D && ctx->Texture.Unit[0]._Current->Target == GL_TEXTURE_2D
&& samp->WrapS == GL_REPEAT && samp->Attrib.WrapS == GL_REPEAT
&& samp->WrapT == GL_REPEAT && samp->Attrib.WrapT == GL_REPEAT
&& texObj2D->_Swizzle == SWIZZLE_NOOP && texObj2D->Attrib._Swizzle == SWIZZLE_NOOP
&& swImg->_IsPowerOfTwo && swImg->_IsPowerOfTwo
&& texImg->Border == 0 && texImg->Border == 0
&& (_mesa_format_row_stride(format, texImg->Width) == && (_mesa_format_row_stride(format, texImg->Width) ==