summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarek Olšák <marek.olsak@amd.com>2020-10-05 02:45:03 -0400
committerMarge Bot <eric+marge@anholt.net>2020-12-01 11:52:11 +0000
commit9a8b54285d24e84facc6f7aefe486a568b6e80c4 (patch)
tree9831010ffe437eb9cb8d18fffc3deb58fe14c607 /src
parent7fa9d9d06c44e9cf3d39b2ce5126bf1b0abff586 (diff)
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>
Diffstat (limited to 'src')
-rw-r--r--src/gallium/frontends/dri/dri2.c2
-rw-r--r--src/gallium/frontends/dri/dri_helpers.c2
-rw-r--r--src/mesa/drivers/common/meta.c6
-rw-r--r--src/mesa/drivers/common/meta_blit.c14
-rw-r--r--src/mesa/drivers/common/meta_generate_mipmap.c16
-rw-r--r--src/mesa/drivers/dri/i915/i830_texstate.c28
-rw-r--r--src/mesa/drivers/dri/i915/i915_texstate.c42
-rw-r--r--src/mesa/drivers/dri/i915/intel_screen.c2
-rw-r--r--src/mesa/drivers/dri/i915/intel_tex_image.c10
-rw-r--r--src/mesa/drivers/dri/i915/intel_tex_validate.c18
-rw-r--r--src/mesa/drivers/dri/i965/brw_draw.c8
-rw-r--r--src/mesa/drivers/dri/i965/brw_generate_mipmap.c4
-rw-r--r--src/mesa/drivers/dri/i965/brw_wm.c16
-rw-r--r--src/mesa/drivers/dri/i965/brw_wm_surface_state.c26
-rw-r--r--src/mesa/drivers/dri/i965/genX_state_upload.c79
-rw-r--r--src/mesa/drivers/dri/i965/intel_screen.c2
-rw-r--r--src/mesa/drivers/dri/i965/intel_tex_image.c6
-rw-r--r--src/mesa/drivers/dri/i965/intel_tex_validate.c10
-rw-r--r--src/mesa/drivers/dri/nouveau/nouveau_texture.c28
-rw-r--r--src/mesa/drivers/dri/nouveau/nv04_context.c2
-rw-r--r--src/mesa/drivers/dri/nouveau/nv04_state_frag.c2
-rw-r--r--src/mesa/drivers/dri/nouveau/nv04_state_tex.c24
-rw-r--r--src/mesa/drivers/dri/nouveau/nv10_state_frag.c2
-rw-r--r--src/mesa/drivers/dri/nouveau/nv10_state_tex.c24
-rw-r--r--src/mesa/drivers/dri/nouveau/nv20_state_tex.c36
-rw-r--r--src/mesa/drivers/dri/r200/r200_tex.c20
-rw-r--r--src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c30
-rw-r--r--src/mesa/drivers/dri/radeon/radeon_tex.c20
-rw-r--r--src/mesa/drivers/dri/radeon/radeon_texstate.c2
-rw-r--r--src/mesa/drivers/dri/radeon/radeon_texture.c10
-rw-r--r--src/mesa/main/attrib.c32
-rw-r--r--src/mesa/main/dlist.c6
-rw-r--r--src/mesa/main/ff_fragment_shader.cpp2
-rw-r--r--src/mesa/main/genmipmap.c4
-rw-r--r--src/mesa/main/mipmap.c18
-rw-r--r--src/mesa/main/mtypes.h59
-rw-r--r--src/mesa/main/samplerobj.c262
-rw-r--r--src/mesa/main/samplerobj.h2
-rw-r--r--src/mesa/main/shaderimage.c6
-rw-r--r--src/mesa/main/teximage.c6
-rw-r--r--src/mesa/main/teximage.h2
-rw-r--r--src/mesa/main/texobj.c138
-rw-r--r--src/mesa/main/texobj.h10
-rw-r--r--src/mesa/main/texparam.c218
-rw-r--r--src/mesa/main/texstate.c4
-rw-r--r--src/mesa/main/texturebindless.c18
-rw-r--r--src/mesa/state_tracker/st_atom_sampler.c46
-rw-r--r--src/mesa/state_tracker/st_cb_texture.c28
-rw-r--r--src/mesa/state_tracker/st_gen_mipmap.c10
-rw-r--r--src/mesa/state_tracker/st_sampler_view.c12
-rw-r--r--src/mesa/swrast/s_fragprog.c10
-rw-r--r--src/mesa/swrast/s_span.c6
-rw-r--r--src/mesa/swrast/s_texcombine.c20
-rw-r--r--src/mesa/swrast/s_texfetch.c2
-rw-r--r--src/mesa/swrast/s_texfilter.c294
-rw-r--r--src/mesa/swrast/s_texture.c4
-rw-r--r--src/mesa/swrast/s_triangle.c14
57 files changed, 873 insertions, 851 deletions
diff --git a/src/gallium/frontends/dri/dri2.c b/src/gallium/frontends/dri/dri2.c
index 2f4454a1b60..76a27ff76af 100644
--- a/src/gallium/frontends/dri/dri2.c
+++ b/src/gallium/frontends/dri/dri2.c
@@ -1902,7 +1902,7 @@ dri2_interop_export_object(__DRIcontext *_ctx,
* section 3.8.10 (Texture Completeness) of the OpenGL 2.1
* 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);
return MESA_GLINTEROP_INVALID_MIP_LEVEL;
}
diff --git a/src/gallium/frontends/dri/dri_helpers.c b/src/gallium/frontends/dri/dri_helpers.c
index 01a1fb3d96c..87162736147 100644
--- a/src/gallium/frontends/dri/dri_helpers.c
+++ b/src/gallium/frontends/dri/dri_helpers.c
@@ -352,7 +352,7 @@ dri2_create_from_texture(__DRIcontext *context, int target, unsigned texture,
return NULL;
}
- if (level < obj->BaseLevel || level > obj->_MaxLevel) {
+ if (level < obj->Attrib.BaseLevel || level > obj->_MaxLevel) {
*error = __DRI_IMAGE_ERROR_BAD_MATCH;
return NULL;
}
diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c
index 6abe8681025..ca6e966f919 100644
--- a/src/mesa/drivers/common/meta.c
+++ b/src/mesa/drivers/common/meta.c
@@ -3153,8 +3153,8 @@ decompress_texture_image(struct gl_context *ctx,
{
/* save texture object state */
- const GLint baseLevelSave = texObj->BaseLevel;
- const GLint maxLevelSave = texObj->MaxLevel;
+ const GLint baseLevelSave = texObj->Attrib.BaseLevel;
+ const GLint maxLevelSave = texObj->Attrib.MaxLevel;
/* restrict sampling to the texture level of interest */
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;
- texImage = texObj->Image[0][texObj->BaseLevel];
+ texImage = texObj->Image[0][texObj->Attrib.BaseLevel];
tw = texImage->Width2;
th = texImage->Height2;
diff --git a/src/mesa/drivers/common/meta_blit.c b/src/mesa/drivers/common/meta_blit.c
index 81fd4e12f97..161ed713dd7 100644
--- a/src/mesa/drivers/common/meta_blit.c
+++ b/src/mesa/drivers/common/meta_blit.c
@@ -176,9 +176,9 @@ blitframebuffer_texture(struct gl_context *ctx,
target = texObj->Target;
fb_tex_blit.tex_obj = texObj;
- fb_tex_blit.baseLevelSave = texObj->BaseLevel;
- fb_tex_blit.maxLevelSave = texObj->MaxLevel;
- fb_tex_blit.stencilSamplingSave = texObj->StencilSampling;
+ fb_tex_blit.baseLevelSave = texObj->Attrib.BaseLevel;
+ fb_tex_blit.maxLevelSave = texObj->Attrib.MaxLevel;
+ fb_tex_blit.stencilSamplingSave = texObj->Attrib.StencilSampling;
if (glsl_version) {
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
* 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,
&blit->baseLevelSave, false);
- if (blit->maxLevelSave != texObj->MaxLevel)
+ if (blit->maxLevelSave != texObj->Attrib.MaxLevel)
_mesa_texture_parameteriv(ctx, texObj, GL_TEXTURE_MAX_LEVEL,
&blit->maxLevelSave, false);
/* 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
* 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_set_sampler_filters(ctx, samp_obj, filter, filter);
_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 */
_mesa_bind_texture(ctx, target, texObj);
diff --git a/src/mesa/drivers/common/meta_generate_mipmap.c b/src/mesa/drivers/common/meta_generate_mipmap.c
index 5fac4078f81..aa1f2b2011a 100644
--- a/src/mesa/drivers/common/meta_generate_mipmap.c
+++ b/src/mesa/drivers/common/meta_generate_mipmap.c
@@ -71,7 +71,7 @@ fallback_required(struct gl_context *ctx, GLenum target,
return true;
}
- srcLevel = texObj->BaseLevel;
+ srcLevel = texObj->Attrib.BaseLevel;
baseImage = _mesa_select_tex_image(texObj, target, srcLevel);
if (!baseImage) {
_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 vertex verts[4];
- const GLuint baseLevel = texObj->BaseLevel;
- const GLuint maxLevel = texObj->MaxLevel;
- const GLint maxLevelSave = texObj->MaxLevel;
- const GLboolean genMipmapSave = texObj->GenerateMipmap;
+ const GLuint baseLevel = texObj->Attrib.BaseLevel;
+ const GLuint maxLevel = texObj->Attrib.MaxLevel;
+ const GLint maxLevelSave = texObj->Attrib.MaxLevel;
+ const GLboolean genMipmapSave = texObj->Attrib.GenerateMipmap;
const GLboolean use_glsl_version = ctx->Extensions.ARB_vertex_shader &&
ctx->Extensions.ARB_fragment_shader;
GLenum faceTarget;
@@ -226,7 +226,7 @@ _mesa_meta_GenerateMipmap(struct gl_context *ctx, GLenum target,
if (ctx->Extensions.EXT_texture_sRGB_decode) {
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);
_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);
- if (texObj->_Swizzle != SWIZZLE_NOOP) {
+ if (texObj->Attrib._Swizzle != SWIZZLE_NOOP) {
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;
_mesa_texture_parameteriv(ctx, texObj, GL_TEXTURE_SWIZZLE_RGBA,
swizzleNoop, false);
diff --git a/src/mesa/drivers/dri/i915/i830_texstate.c b/src/mesa/drivers/dri/i915/i830_texstate.c
index d8f1026b818..e4b95cb1b16 100644
--- a/src/mesa/drivers/dri/i915/i830_texstate.c
+++ b/src/mesa/drivers/dri/i915/i830_texstate.c
@@ -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
* 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);
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;
uint32_t minlod_fixed, maxlod_fixed;
- switch (sampler->MinFilter) {
+ switch (sampler->Attrib.MinFilter) {
case GL_NEAREST:
minFilt = FILTER_NEAREST;
mipFilt = MIPFILTER_NONE;
@@ -222,14 +222,14 @@ i830_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
return false;
}
- if (sampler->MaxAnisotropy > 1.0) {
+ if (sampler->Attrib.MaxAnisotropy > 1.0) {
minFilt = FILTER_ANISOTROPIC;
magFilt = FILTER_ANISOTROPIC;
/* no trilinear + anisotropic */
mipFilt = MIPFILTER_NEAREST;
}
else {
- switch (sampler->MagFilter) {
+ switch (sampler->Attrib.MagFilter) {
case GL_NEAREST:
magFilt = FILTER_NEAREST;
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)
lodbias = -64;
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
* MAX_LEVEL and MAX_LOD.
*/
- minlod_fixed = U_FIXED(CLAMP(sampler->MinLod, 0.0, 11), 4);
- maxlod = MIN2(sampler->MaxLod, tObj->_MaxLevel - tObj->BaseLevel);
+ minlod_fixed = U_FIXED(CLAMP(sampler->Attrib.MinLod, 0.0, 11), 4);
+ maxlod = MIN2(sampler->Attrib.MaxLod, tObj->_MaxLevel - tObj->Attrib.BaseLevel);
if (intel->intelScreen->deviceID == PCI_CHIP_I855_GM ||
intel->intelScreen->deviceID == PCI_CHIP_I865_G) {
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 wt = sampler->WrapT;
+ GLenum ws = sampler->Attrib.WrapS;
+ GLenum wt = sampler->Attrib.WrapT;
/* 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 */
- CLAMPED_FLOAT_TO_UBYTE(border[0], sampler->BorderColor.f[0]);
- CLAMPED_FLOAT_TO_UBYTE(border[1], sampler->BorderColor.f[1]);
- CLAMPED_FLOAT_TO_UBYTE(border[2], sampler->BorderColor.f[2]);
- CLAMPED_FLOAT_TO_UBYTE(border[3], sampler->BorderColor.f[3]);
+ CLAMPED_FLOAT_TO_UBYTE(border[0], sampler->Attrib.BorderColor.f[0]);
+ CLAMPED_FLOAT_TO_UBYTE(border[1], sampler->Attrib.BorderColor.f[1]);
+ CLAMPED_FLOAT_TO_UBYTE(border[2], sampler->Attrib.BorderColor.f[2]);
+ CLAMPED_FLOAT_TO_UBYTE(border[3], sampler->Attrib.BorderColor.f[3]);
state[I830_TEXREG_TM0S4] = PACK_COLOR_8888(border[3],
border[0],
diff --git a/src/mesa/drivers/dri/i915/i915_texstate.c b/src/mesa/drivers/dri/i915/i915_texstate.c
index 6b4f6ed38e2..2f6a6536a93 100644
--- a/src/mesa/drivers/dri/i915/i915_texstate.c
+++ b/src/mesa/drivers/dri/i915/i915_texstate.c
@@ -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
* 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);
i915->state.tex_buffer[unit] = intelObj->mt->region->bo;
i915->state.tex_offset[unit] = intelObj->mt->offset;
format = translate_texture_format(firstImage->TexFormat,
- tObj->DepthMode);
+ tObj->Attrib.DepthMode);
state[I915_TEXREG_MS3] =
(((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
* MAX_LOD.
*/
- maxlod = MIN2(sampler->MaxLod, tObj->_MaxLevel - tObj->BaseLevel);
+ maxlod = MIN2(sampler->Attrib.MaxLod, tObj->_MaxLevel - tObj->Attrib.BaseLevel);
state[I915_TEXREG_MS4] =
((((intelObj->mt->region->pitch / 4) - 1) << MS4_PITCH_SHIFT) |
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;
- switch (sampler->MinFilter) {
+ switch (sampler->Attrib.MinFilter) {
case GL_NEAREST:
minFilt = FILTER_NEAREST;
mipFilt = MIPFILTER_NONE;
@@ -229,16 +229,16 @@ i915_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
return false;
}
- if (sampler->MaxAnisotropy > 1.0) {
+ if (sampler->Attrib.MaxAnisotropy > 1.0) {
minFilt = FILTER_ANISOTROPIC;
magFilt = FILTER_ANISOTROPIC;
- if (sampler->MaxAnisotropy > 2.0)
+ if (sampler->Attrib.MaxAnisotropy > 2.0)
aniso = SS2_MAX_ANISO_4;
else
aniso = SS2_MAX_ANISO_2;
}
else {
- switch (sampler->MagFilter) {
+ switch (sampler->Attrib.MagFilter) {
case GL_NEAREST:
magFilt = FILTER_NEAREST;
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)
lodbias = -256;
if (lodbias > 255)
@@ -266,14 +266,14 @@ i915_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
/* 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) {
if (tObj->Target == GL_TEXTURE_1D)
return false;
state[I915_TEXREG_SS2] |=
(SS2_SHADOW_ENABLE |
- intel_translate_shadow_compare_func(sampler->CompareFunc));
+ intel_translate_shadow_compare_func(sampler->Attrib.CompareFunc));
minFilt = 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 wt = sampler->WrapT;
- GLenum wr = sampler->WrapR;
+ GLenum ws = sampler->Attrib.WrapS;
+ GLenum wt = sampler->Attrib.WrapT;
+ GLenum wr = sampler->Attrib.WrapR;
float minlod;
/* 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.
*/
if (tObj->Target == GL_TEXTURE_3D &&
- (sampler->MinFilter != GL_NEAREST ||
- sampler->MagFilter != GL_NEAREST) &&
+ (sampler->Attrib.MinFilter != GL_NEAREST ||
+ sampler->Attrib.MagFilter != GL_NEAREST) &&
(ws == GL_CLAMP ||
wt == 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(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] |= (U_FIXED(CLAMP(minlod, 0.0, 11.0), 4) <<
SS3_MIN_LOD_SHIFT);
}
- if (sampler->sRGBDecode == GL_DECODE_EXT &&
+ if (sampler->Attrib.sRGBDecode == GL_DECODE_EXT &&
(_mesa_get_srgb_format_linear(firstImage->TexFormat) !=
firstImage->TexFormat)) {
state[I915_TEXREG_SS2] |= SS2_REVERSE_GAMMA_ENABLE;
}
/* convert border color from float to ubyte */
- CLAMPED_FLOAT_TO_UBYTE(border[0], sampler->BorderColor.f[0]);
- CLAMPED_FLOAT_TO_UBYTE(border[1], sampler->BorderColor.f[1]);
- CLAMPED_FLOAT_TO_UBYTE(border[2], sampler->BorderColor.f[2]);
- CLAMPED_FLOAT_TO_UBYTE(border[3], sampler->BorderColor.f[3]);
+ CLAMPED_FLOAT_TO_UBYTE(border[0], sampler->Attrib.BorderColor.f[0]);
+ CLAMPED_FLOAT_TO_UBYTE(border[1], sampler->Attrib.BorderColor.f[1]);
+ CLAMPED_FLOAT_TO_UBYTE(border[2], sampler->Attrib.BorderColor.f[2]);
+ CLAMPED_FLOAT_TO_UBYTE(border[3], sampler->Attrib.BorderColor.f[3]);
if (firstImage->_BaseFormat == GL_DEPTH_COMPONENT) {
/* GL specs that border color for depth textures is taken from the
diff --git a/src/mesa/drivers/dri/i915/intel_screen.c b/src/mesa/drivers/dri/i915/intel_screen.c
index 296f24eadd0..60b35d37a6e 100644
--- a/src/mesa/drivers/dri/i915/intel_screen.c
+++ b/src/mesa/drivers/dri/i915/intel_screen.c
@@ -392,7 +392,7 @@ intel_create_image_from_texture(__DRIcontext *context, int target,
return NULL;
}
- if (level < obj->BaseLevel || level > obj->_MaxLevel) {
+ if (level < obj->Attrib.BaseLevel || level > obj->_MaxLevel) {
*error = __DRI_IMAGE_ERROR_BAD_MATCH;
return NULL;
}
diff --git a/src/mesa/drivers/dri/i915/intel_tex_image.c b/src/mesa/drivers/dri/i915/intel_tex_image.c
index 1d037ab3554..7880ba4f3f6 100644
--- a/src/mesa/drivers/dri/i915/intel_tex_image.c
+++ b/src/mesa/drivers/dri/i915/intel_tex_image.c
@@ -44,7 +44,7 @@ intel_miptree_create_for_teximage(struct intel_context *intel,
DBG("%s\n", __func__);
- if (intelImage->base.Base.Level > intelObj->base.BaseLevel &&
+ if (intelImage->base.Base.Level > intelObj->base.Attrib.BaseLevel &&
(width == 1 ||
(intelObj->base.Target != GL_TEXTURE_1D && height == 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.
* 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;
else
- firstLevel = intelObj->base.BaseLevel;
+ firstLevel = intelObj->base.Attrib.BaseLevel;
/* Figure out image dimensions at start level. */
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
* pagetable arrangements.
*/
- if ((intelObj->base.Sampler.MinFilter == GL_NEAREST ||
- intelObj->base.Sampler.MinFilter == GL_LINEAR) &&
+ if ((intelObj->base.Sampler.Attrib.MinFilter == GL_NEAREST ||
+ intelObj->base.Sampler.Attrib.MinFilter == GL_LINEAR) &&
intelImage->base.Base.Level == firstLevel) {
lastLevel = firstLevel;
} else {
diff --git a/src/mesa/drivers/dri/i915/intel_tex_validate.c b/src/mesa/drivers/dri/i915/intel_tex_validate.c
index c2111e5e209..17db3d2e477 100644
--- a/src/mesa/drivers/dri/i915/intel_tex_validate.c
+++ b/src/mesa/drivers/dri/i915/intel_tex_validate.c
@@ -24,9 +24,9 @@ intel_update_max_level(struct intel_texture_object *intelObj,
struct gl_texture_object *tObj = &intelObj->base;
int maxlevel;
- if (sampler->MinFilter == GL_NEAREST ||
- sampler->MinFilter == GL_LINEAR) {
- maxlevel = tObj->BaseLevel;
+ if (sampler->Attrib.MinFilter == GL_NEAREST ||
+ sampler->Attrib.MinFilter == GL_LINEAR) {
+ maxlevel = tObj->Attrib.BaseLevel;
} else {
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?
*/
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;
if (!intelObj->needs_validate)
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
* target, imageFormat, etc.
@@ -80,7 +80,7 @@ intel_finalize_mipmap_tree(struct intel_context *intel, GLuint unit)
*/
if (intelObj->mt &&
(!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)) {
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 "
"texture miptree.\n",
_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->base.Target,
firstImage->base.Base.TexFormat,
- tObj->BaseLevel,
+ tObj->Attrib.BaseLevel,
intelObj->_MaxLevel,
width,
height,
@@ -115,7 +115,7 @@ intel_finalize_mipmap_tree(struct intel_context *intel, GLuint unit)
*/
nr_faces = _mesa_num_tex_faces(intelObj->base.Target);
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 =
intel_texture_image(intelObj->base.Image[face][i]);
/* skip too small size mipmap */
diff --git a/src/mesa/drivers/dri/i965/brw_draw.c b/src/mesa/drivers/dri/i965/brw_draw.c
index f1d233aeae7..c82a7385f2f 100644
--- a/src/mesa/drivers/dri/i965/brw_draw.c
+++ b/src/mesa/drivers/dri/i965/brw_draw.c
@@ -543,7 +543,7 @@ brw_predraw_resolve_inputs(struct brw_context *brw, bool rendering,
struct gl_sampler_object *sampler = _mesa_get_samplerobj(ctx, i);
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;
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 ?
tex_obj->base.NumLayers : INTEL_REMAINING_LAYERS;
} else {
- min_level = tex_obj->base.BaseLevel;
- num_levels = tex_obj->_MaxLevel - tex_obj->base.BaseLevel + 1;
+ min_level = tex_obj->base.Attrib.BaseLevel;
+ num_levels = tex_obj->_MaxLevel - tex_obj->base.Attrib.BaseLevel + 1;
min_layer = 0;
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);
- if (tex_obj->base.StencilSampling ||
+ if (tex_obj->base.Attrib.StencilSampling ||
tex_obj->mt->format == MESA_FORMAT_S_UINT8) {
intel_update_r8stencil(brw, tex_obj->mt);
}
diff --git a/src/mesa/drivers/dri/i965/brw_generate_mipmap.c b/src/mesa/drivers/dri/i965/brw_generate_mipmap.c
index 4125ae6e11c..f65c07d219e 100644
--- a/src/mesa/drivers/dri/i965/brw_generate_mipmap.c
+++ b/src/mesa/drivers/dri/i965/brw_generate_mipmap.c
@@ -41,7 +41,7 @@ brw_generate_mipmap(struct gl_context *ctx, GLenum target,
struct brw_context *brw = brw_context(ctx);
struct gen_device_info *devinfo = &brw->screen->devinfo;
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;
/* 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
* 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;
dst_level <= last_level;
diff --git a/src/mesa/drivers/dri/i965/brw_wm.c b/src/mesa/drivers/dri/i965/brw_wm.c
index e0ce6100f09..a013aa127ee 100644
--- a/src/mesa/drivers/dri/i965/brw_wm.c
+++ b/src/mesa/drivers/dri/i965/brw_wm.c
@@ -206,10 +206,10 @@ brw_populate_sampler_prog_key_data(struct gl_context *ctx,
if (unit->_Current && unit->_Current->Target != GL_TEXTURE_BUFFER) {
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);
- 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_STENCIL);
@@ -220,13 +220,13 @@ brw_populate_sampler_prog_key_data(struct gl_context *ctx,
key->swizzles[s] = brw_get_texture_swizzle(ctx, t);
if (devinfo->gen < 8 &&
- sampler->MinFilter != GL_NEAREST &&
- sampler->MagFilter != GL_NEAREST) {
- if (sampler->WrapS == GL_CLAMP)
+ sampler->Attrib.MinFilter != GL_NEAREST &&
+ sampler->Attrib.MagFilter != GL_NEAREST) {
+ if (sampler->Attrib.WrapS == GL_CLAMP)
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;
- if (sampler->WrapR == GL_CLAMP)
+ if (sampler->Attrib.WrapR == GL_CLAMP)
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.
*/
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++) {
unsigned src_comp = GET_SWZ(src_swizzle, i);
if (src_comp == SWIZZLE_ONE || src_comp == SWIZZLE_W) {
diff --git a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
index a5fbd1829d9..a448571585b 100644
--- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
+++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
@@ -324,7 +324,7 @@ int
brw_get_texture_swizzle(const struct gl_context *ctx,
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] = {
SWIZZLE_X,
@@ -338,7 +338,7 @@ brw_get_texture_swizzle(const struct gl_context *ctx,
if (img->_BaseFormat == GL_DEPTH_COMPONENT ||
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
* with depth component data specified with a sized internal format.
@@ -434,10 +434,10 @@ brw_get_texture_swizzle(const struct gl_context *ctx,
break;
}
- return MAKE_SWIZZLE4(swizzles[GET_SWZ(t->_Swizzle, 0)],
- swizzles[GET_SWZ(t->_Swizzle, 1)],
- swizzles[GET_SWZ(t->_Swizzle, 2)],
- swizzles[GET_SWZ(t->_Swizzle, 3)]);
+ return MAKE_SWIZZLE4(swizzles[GET_SWZ(t->Attrib._Swizzle, 0)],
+ swizzles[GET_SWZ(t->Attrib._Swizzle, 1)],
+ swizzles[GET_SWZ(t->Attrib._Swizzle, 2)],
+ 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
* selects the .x channel (which would always be 0).
*/
- struct gl_texture_image *firstImage = obj->Image[0][obj->BaseLevel];
- const bool alpha_depth = obj->DepthMode == GL_ALPHA &&
+ struct gl_texture_image *firstImage = obj->Image[0][obj->Attrib.BaseLevel];
+ const bool alpha_depth = obj->Attrib.DepthMode == GL_ALPHA &&
(firstImage->_BaseFormat == GL_DEPTH_COMPONENT ||
firstImage->_BaseFormat == GL_DEPTH_STENCIL);
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,
for_txf ? GL_DECODE_EXT :
- sampler->sRGBDecode);
+ sampler->Attrib.sRGBDecode);
/* Implement gen6 and gen7 gather work-around */
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) {
assert(mt->shadow_mt && !mt->stencil_mt->shadow_needs_update);
mt = mt->shadow_mt;
@@ -587,8 +587,8 @@ static void brw_update_texture_surface(struct gl_context *ctx,
struct isl_view view = {
.format = format,
- .base_level = obj->MinLevel + obj->BaseLevel,
- .levels = intel_obj->_MaxLevel - obj->BaseLevel + 1,
+ .base_level = obj->MinLevel + obj->Attrib.BaseLevel,
+ .levels = intel_obj->_MaxLevel - obj->Attrib.BaseLevel + 1,
.base_array_layer = obj->MinLayer,
.array_len = view_num_layers,
.swizzle = {
@@ -1151,7 +1151,7 @@ is_depth_texture(struct intel_texture_object *iobj)
{
GLenum base_format = _mesa_get_format_base_format(iobj->_Format);
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
diff --git a/src/mesa/drivers/dri/i965/genX_state_upload.c b/src/mesa/drivers/dri/i965/genX_state_upload.c
index 244746b53fe..d46eb3a49e8 100644
--- a/src/mesa/drivers/dri/i965/genX_state_upload.c
+++ b/src/mesa/drivers/dri/i965/genX_state_upload.c
@@ -23,6 +23,8 @@
#include <assert.h>
+#include "main/samplerobj.h"
+
#include "dev/gen_device_info.h"
#include "common/gen_sample_positions.h"
#include "genxml/gen_macros.h"
@@ -52,7 +54,6 @@
#include "main/fbobject.h"
#include "main/framebuffer.h"
#include "main/glformats.h"
-#include "main/samplerobj.h"
#include "main/shaderapi.h"
#include "main/stencil.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
* channels for safety.
*/
- color.ui[0] = sampler->BorderColor.ui[0];
- color.ui[1] = sampler->BorderColor.ui[0];
- color.ui[2] = sampler->BorderColor.ui[0];
- color.ui[3] = sampler->BorderColor.ui[0];
+ color.ui[0] = sampler->Attrib.BorderColor.ui[0];
+ color.ui[1] = sampler->Attrib.BorderColor.ui[0];
+ color.ui[2] = sampler->Attrib.BorderColor.ui[0];
+ color.ui[3] = sampler->Attrib.BorderColor.ui[0];
break;
case GL_ALPHA:
color.ui[0] = 0u;
color.ui[1] = 0u;
color.ui[2] = 0u;
- color.ui[3] = sampler->BorderColor.ui[3];
+ color.ui[3] = sampler->Attrib.BorderColor.ui[3];
break;
case GL_INTENSITY:
- color.ui[0] = sampler->BorderColor.ui[0];
- color.ui[1] = sampler->BorderColor.ui[0];
- color.ui[2] = sampler->BorderColor.ui[0];
- color.ui[3] = sampler->BorderColor.ui[0];
+ color.ui[0] = sampler->Attrib.BorderColor.ui[0];
+ color.ui[1] = sampler->Attrib.BorderColor.ui[0];
+ color.ui[2] = sampler->Attrib.BorderColor.ui[0];
+ color.ui[3] = sampler->Attrib.BorderColor.ui[0];
break;
case GL_LUMINANCE:
- color.ui[0] = sampler->BorderColor.ui[0];
- color.ui[1] = sampler->BorderColor.ui[0];
- color.ui[2] = sampler->BorderColor.ui[0];
+ color.ui[0] = sampler->Attrib.BorderColor.ui[0];
+ color.ui[1] = sampler->Attrib.BorderColor.ui[0];
+ color.ui[2] = sampler->Attrib.BorderColor.ui[0];
color.ui[3] = float_as_int(1.0);
break;
case GL_LUMINANCE_ALPHA:
- color.ui[0] = sampler->BorderColor.ui[0];
- color.ui[1] = sampler->BorderColor.ui[0];
- color.ui[2] = sampler->BorderColor.ui[0];
- color.ui[3] = sampler->BorderColor.ui[3];
+ color.ui[0] = sampler->Attrib.BorderColor.ui[0];
+ color.ui[1] = sampler->Attrib.BorderColor.ui[0];
+ color.ui[2] = sampler->Attrib.BorderColor.ui[0];
+ color.ui[3] = sampler->Attrib.BorderColor.ui[3];
break;
default:
- color.ui[0] = sampler->BorderColor.ui[0];
- color.ui[1] = sampler->BorderColor.ui[1];
- color.ui[2] = sampler->BorderColor.ui[2];
- color.ui[3] = sampler->BorderColor.ui[3];
+ color.ui[0] = sampler->Attrib.BorderColor.ui[0];
+ color.ui[1] = sampler->Attrib.BorderColor.ui[1];
+ color.ui[2] = sampler->Attrib.BorderColor.ui[2];
+ color.ui[3] = sampler->Attrib.BorderColor.ui[3];
break;
}
@@ -5199,7 +5200,7 @@ genX(update_sampler_state)(struct brw_context *brw,
struct GENX(SAMPLER_STATE) samp_st = { 0 };
/* Select min and mip filters. */
- switch (sampler->MinFilter) {
+ switch (sampler->Attrib.MinFilter) {
case GL_NEAREST:
samp_st.MinModeFilter = MAPFILTER_NEAREST;
samp_st.MipModeFilter = MIPFILTER_NONE;
@@ -5229,21 +5230,21 @@ genX(update_sampler_state)(struct brw_context *brw,
}
/* Select mag filter. */
- samp_st.MagModeFilter = sampler->MagFilter == GL_LINEAR ?
+ samp_st.MagModeFilter = sampler->Attrib.MagFilter == GL_LINEAR ?
MAPFILTER_LINEAR : MAPFILTER_NEAREST;
/* Enable anisotropic filtering if desired. */
samp_st.MaximumAnisotropy = RATIO21;
- if (sampler->MaxAnisotropy > 1.0f) {
+ if (sampler->Attrib.MaxAnisotropy > 1.0f) {
if (samp_st.MinModeFilter == MAPFILTER_LINEAR)
samp_st.MinModeFilter = MAPFILTER_ANISOTROPIC;
if (samp_st.MagModeFilter == MAPFILTER_LINEAR)
samp_st.MagModeFilter = MAPFILTER_ANISOTROPIC;
- if (sampler->MaxAnisotropy > 2.0f) {
+ if (sampler->Attrib.MaxAnisotropy > 2.0f) {
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 =
- sampler->MinFilter == GL_NEAREST || sampler->MagFilter == GL_NEAREST;
- unsigned wrap_s = translate_wrap_mode(sampler->WrapS, either_nearest);
- unsigned wrap_t = translate_wrap_mode(sampler->WrapT, either_nearest);
- unsigned wrap_r = translate_wrap_mode(sampler->WrapR, either_nearest);
+ sampler->Attrib.MinFilter == GL_NEAREST || sampler->Attrib.MagFilter == GL_NEAREST;
+ unsigned wrap_s = translate_wrap_mode(sampler->Attrib.WrapS, either_nearest);
+ unsigned wrap_t = translate_wrap_mode(sampler->Attrib.WrapT, either_nearest);
+ unsigned wrap_r = translate_wrap_mode(sampler->Attrib.WrapR, either_nearest);
if (target == GL_TEXTURE_CUBE_MAP ||
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
* 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)) {
wrap_s = 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.ShadowFunction =
- sampler->CompareMode == GL_COMPARE_R_TO_TEXTURE_ARB ?
- intel_translate_shadow_compare_func(sampler->CompareFunc) : 0;
+ sampler->Attrib.CompareMode == GL_COMPARE_R_TO_TEXTURE_ARB ?
+ intel_translate_shadow_compare_func(sampler->Attrib.CompareFunc) : 0;
#if GEN_GEN >= 7
/* Set shadow function. */
@@ -5313,14 +5314,14 @@ genX(update_sampler_state)(struct brw_context *brw,
#endif
const float hw_max_lod = GEN_GEN >= 7 ? 14 : 13;
- samp_st.MinLOD = CLAMP(sampler->MinLod, 0, hw_max_lod);
- samp_st.MaxLOD = CLAMP(sampler->MaxLod, 0, hw_max_lod);
+ samp_st.MinLOD = CLAMP(sampler->Attrib.MinLod, 0, hw_max_lod);
+ samp_st.MaxLOD = CLAMP(sampler->Attrib.MaxLod, 0, hw_max_lod);
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
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.MinModeFilter != samp_st.MagModeFilter;
#endif
@@ -5335,7 +5336,7 @@ genX(update_sampler_state)(struct brw_context *brw,
wrap_mode_needs_border_color(wrap_r)) {
genX(upload_default_color)(brw, sampler, format, base_format,
texObj->_IsIntegerFormat,
- texObj->StencilSampling,
+ texObj->Attrib.StencilSampling,
&border_color_offset);
}
#if GEN_GEN < 6
@@ -5368,7 +5369,7 @@ update_sampler_state(struct brw_context *brw,
if (texObj->Target == GL_TEXTURE_BUFFER)
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,
ctx->Texture.CubeMapSeamless,
texUnit->LodBias,
diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c
index 4492d43c040..e5606f8f7d0 100644
--- a/src/mesa/drivers/dri/i965/intel_screen.c
+++ b/src/mesa/drivers/dri/i965/intel_screen.c
@@ -611,7 +611,7 @@ intel_create_image_from_texture(__DRIcontext *context, int target,
return NULL;
}
- if (level < obj->BaseLevel || level > obj->_MaxLevel) {
+ if (level < obj->Attrib.BaseLevel || level > obj->_MaxLevel) {
*error = __DRI_IMAGE_ERROR_BAD_MATCH;
return NULL;
}
diff --git a/src/mesa/drivers/dri/i965/intel_tex_image.c b/src/mesa/drivers/dri/i965/intel_tex_image.c
index c0a4a9c2ca9..fd3ea8a6db3 100644
--- a/src/mesa/drivers/dri/i965/intel_tex_image.c
+++ b/src/mesa/drivers/dri/i965/intel_tex_image.c
@@ -105,10 +105,10 @@ intel_miptree_create_for_teximage(struct brw_context *brw,
* resizable buffers, or require that buffers implement lazy
* pagetable arrangements.
*/
- if ((intelObj->base.Sampler.MinFilter == GL_NEAREST ||
- intelObj->base.Sampler.MinFilter == GL_LINEAR) &&
+ if ((intelObj->base.Sampler.Attrib.MinFilter == GL_NEAREST ||
+ intelObj->base.Sampler.Attrib.MinFilter == GL_LINEAR) &&
intelImage->base.Base.Level == 0 &&
- !intelObj->base.GenerateMipmap) {
+ !intelObj->base.Attrib.GenerateMipmap) {
lastLevel = 0;
} else {
lastLevel = _mesa_get_tex_max_num_levels(intelObj->base.Target,
diff --git a/src/mesa/drivers/dri/i965/intel_tex_validate.c b/src/mesa/drivers/dri/i965/intel_tex_validate.c
index 37aa8f43ec9..4af63b74062 100644
--- a/src/mesa/drivers/dri/i965/intel_tex_validate.c
+++ b/src/mesa/drivers/dri/i965/intel_tex_validate.c
@@ -49,9 +49,9 @@ intel_update_max_level(struct gl_texture_object *tObj,
if (!tObj->_MipmapComplete ||
(tObj->_RenderToTexture &&
- (sampler->MinFilter == GL_NEAREST ||
- sampler->MinFilter == GL_LINEAR))) {
- intelObj->_MaxLevel = tObj->BaseLevel;
+ (sampler->Attrib.MinFilter == GL_NEAREST ||
+ sampler->Attrib.MinFilter == GL_LINEAR))) {
+ intelObj->_MaxLevel = tObj->Attrib.BaseLevel;
} else {
intelObj->_MaxLevel = tObj->_MaxLevel;
}
@@ -78,7 +78,7 @@ intel_finalize_mipmap_tree(struct brw_context *brw,
return;
/* 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;
/* 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);
- 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
* target, imageFormat, etc.
diff --git a/src/mesa/drivers/dri/nouveau/nouveau_texture.c b/src/mesa/drivers/dri/nouveau/nouveau_texture.c
index b5ab7bafc12..76b59f51734 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_texture.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_texture.c
@@ -261,7 +261,7 @@ teximage_fits(struct gl_texture_object *t, int level)
if (!ti || !to_nouveau_teximage(ti)->surface.bo)
return GL_FALSE;
- if (level == t->BaseLevel && (s->offset & 0x7f))
+ if (level == t->Attrib.BaseLevel && (s->offset & 0x7f))
return GL_FALSE;
return t->Target == GL_TEXTURE_RECTANGLE ||
@@ -296,19 +296,19 @@ validate_teximage(struct gl_context *ctx, struct gl_texture_object *t,
static int
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 ||
- t->Sampler.MinFilter == GL_LINEAR || !base)
- return t->BaseLevel;
+ if (t->Sampler.Attrib.MinFilter == GL_NEAREST ||
+ t->Sampler.Attrib.MinFilter == GL_LINEAR || !base)
+ return t->Attrib.BaseLevel;
else
- return MIN2(t->BaseLevel + base->MaxNumLevels - 1, t->MaxLevel);
+ return MIN2(t->Attrib.BaseLevel + base->MaxNumLevels - 1, t->Attrib.MaxLevel);
}
static void
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) {
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);
/* 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);
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);
}
- if (t->BaseLevel <= last) {
+ if (t->Attrib.BaseLevel <= last) {
/* Get new storage. */
size = align(offset, 64);
assert(size);
@@ -358,7 +358,7 @@ relayout_texture(struct gl_context *ctx, struct gl_texture_object *t)
0, size, NULL, &ss[last].bo);
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);
}
}
@@ -370,7 +370,7 @@ nouveau_texture_validate(struct gl_context *ctx, struct gl_texture_object *t)
struct nouveau_texture *nt = to_nouveau_texture(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))
return GL_FALSE;
@@ -378,7 +378,7 @@ nouveau_texture_validate(struct gl_context *ctx, struct gl_texture_object *t)
nt->dirty = GL_FALSE;
/* 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];
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
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))) {
texture_dirty(t);
relayout_texture(ctx, t);
@@ -502,7 +502,7 @@ nouveau_teximage(struct gl_context *ctx, GLint dims,
texture_dirty(t);
}
- if (level == t->BaseLevel) {
+ if (level == t->Attrib.BaseLevel) {
if (!teximage_fits(t, level))
relayout_texture(ctx, t);
nouveau_texture_validate(ctx, t);
diff --git a/src/mesa/drivers/dri/nouveau/nv04_context.c b/src/mesa/drivers/dri/nouveau/nv04_context.c
index 60a4e4892a9..d64fcc3ccd7 100644
--- a/src/mesa/drivers/dri/nouveau/nv04_context.c
+++ b/src/mesa/drivers/dri/nouveau/nv04_context.c
@@ -37,7 +37,7 @@ texunit_needs_combiners(struct gl_texture_unit *u,
struct gl_fixedfunc_texture_unit *f)
{
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 ||
ti->TexFormat == MESA_FORMAT_L_UNORM8 ||
diff --git a/src/mesa/drivers/dri/nouveau/nv04_state_frag.c b/src/mesa/drivers/dri/nouveau/nv04_state_frag.c
index 26e2e91a6e0..c57973605ad 100644
--- a/src/mesa/drivers/dri/nouveau/nv04_state_frag.c
+++ b/src/mesa/drivers/dri/nouveau/nv04_state_frag.c
@@ -139,7 +139,7 @@ get_input_arg(struct combiner_state *rc, int arg, int flags)
int i = (source == GL_TEXTURE ?
rc->unit : source - GL_TEXTURE0);
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) {
/* Emulated using I8. */
diff --git a/src/mesa/drivers/dri/nouveau/nv04_state_tex.c b/src/mesa/drivers/dri/nouveau/nv04_state_tex.c
index 15eaa71531b..1078dc821a1 100644
--- a/src/mesa/drivers/dri/nouveau/nv04_state_tex.c
+++ b/src/mesa/drivers/dri/nouveau/nv04_state_tex.c
@@ -67,35 +67,35 @@ nv04_emit_tex_obj(struct gl_context *ctx, int emit)
if (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);
int lod_max = 1, lod_bias = 0;
if (!nouveau_texture_validate(ctx, t))
return;
- s = &to_nouveau_texture(t)->surfaces[t->BaseLevel];
+ s = &to_nouveau_texture(t)->surfaces[t->Attrib.BaseLevel];
- if (sa->MinFilter != GL_NEAREST &&
- sa->MinFilter != GL_LINEAR) {
- lod_max = CLAMP(MIN2(sa->MaxLod, t->_MaxLambda),
+ if (sa->Attrib.MinFilter != GL_NEAREST &&
+ sa->Attrib.MinFilter != GL_LINEAR) {
+ lod_max = CLAMP(MIN2(sa->Attrib.MaxLod, t->_MaxLambda),
0, 15) + 1;
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 |
- nvgl_wrap_mode(sa->WrapS) << 24 |
+ format |= nvgl_wrap_mode(sa->Attrib.WrapT) << 28 |
+ nvgl_wrap_mode(sa->Attrib.WrapS) << 24 |
ti->HeightLog2 << 20 |
ti->WidthLog2 << 16 |
lod_max << 12 |
get_tex_format(ti);
- filter |= log2i(sa->MaxAnisotropy) << 31 |
- nvgl_filter_mode(sa->MagFilter) << 28 |
- log2i(sa->MaxAnisotropy) << 27 |
- nvgl_filter_mode(sa->MinFilter) << 24 |
+ filter |= log2i(sa->Attrib.MaxAnisotropy) << 31 |
+ nvgl_filter_mode(sa->Attrib.MagFilter) << 28 |
+ log2i(sa->Attrib.MaxAnisotropy) << 27 |
+ nvgl_filter_mode(sa->Attrib.MinFilter) << 24 |
(lod_bias & 0xff) << 16;
} else {
diff --git a/src/mesa/drivers/dri/nouveau/nv10_state_frag.c b/src/mesa/drivers/dri/nouveau/nv10_state_frag.c
index 27400d3ebdc..122831b1d6e 100644
--- a/src/mesa/drivers/dri/nouveau/nv10_state_frag.c
+++ b/src/mesa/drivers/dri/nouveau/nv10_state_frag.c
@@ -170,7 +170,7 @@ get_input_arg(struct combiner_state *rc, int arg, int flags)
int i = (source == GL_TEXTURE ?
rc->unit : source - GL_TEXTURE0);
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) {
/* Emulated using I8. */
diff --git a/src/mesa/drivers/dri/nouveau/nv10_state_tex.c b/src/mesa/drivers/dri/nouveau/nv10_state_tex.c
index d741d416673..0a0ee683e6d 100644
--- a/src/mesa/drivers/dri/nouveau/nv10_state_tex.c
+++ b/src/mesa/drivers/dri/nouveau/nv10_state_tex.c
@@ -173,25 +173,25 @@ nv10_emit_tex_obj(struct gl_context *ctx, int emit)
}
t = ctx->Texture.Unit[i]._Current;
- s = &to_nouveau_texture(t)->surfaces[t->BaseLevel];
- ti = t->Image[0][t->BaseLevel];
+ s = &to_nouveau_texture(t)->surfaces[t->Attrib.BaseLevel];
+ ti = t->Image[0][t->Attrib.BaseLevel];
sa = _mesa_get_samplerobj(ctx, i);
if (!nouveau_texture_validate(ctx, t))
return;
/* Recompute the texturing registers. */
- tx_format = nvgl_wrap_mode(sa->WrapT) << 28
- | nvgl_wrap_mode(sa->WrapS) << 24
+ tx_format = nvgl_wrap_mode(sa->Attrib.WrapT) << 28
+ | nvgl_wrap_mode(sa->Attrib.WrapS) << 24
| ti->HeightLog2 << 20
| ti->WidthLog2 << 16
| 5 << 4 | 1 << 12;
- tx_filter = nvgl_filter_mode(sa->MagFilter) << 28
- | nvgl_filter_mode(sa->MinFilter) << 24;
+ tx_filter = nvgl_filter_mode(sa->Attrib.MagFilter) << 28
+ | nvgl_filter_mode(sa->Attrib.MinFilter) << 24;
tx_enable = NV10_3D_TEX_ENABLE_ENABLE
- | log2i(sa->MaxAnisotropy) << 4;
+ | log2i(sa->Attrib.MaxAnisotropy) << 4;
if (t->Target == GL_TEXTURE_RECTANGLE) {
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);
}
- if (sa->MinFilter != GL_NEAREST &&
- sa->MinFilter != GL_LINEAR) {
- int lod_min = sa->MinLod;
- int lod_max = MIN2(sa->MaxLod, t->_MaxLambda);
- int lod_bias = sa->LodBias
+ if (sa->Attrib.MinFilter != GL_NEAREST &&
+ sa->Attrib.MinFilter != GL_LINEAR) {
+ int lod_min = sa->Attrib.MinLod;
+ int lod_max = MIN2(sa->Attrib.MaxLod, t->_MaxLambda);
+ int lod_bias = sa->Attrib.LodBias
+ ctx->Texture.Unit[i].LodBias;
lod_max = CLAMP(lod_max, 0, 15);
diff --git a/src/mesa/drivers/dri/nouveau/nv20_state_tex.c b/src/mesa/drivers/dri/nouveau/nv20_state_tex.c
index 9960ae0d449..e1faa3137d0 100644
--- a/src/mesa/drivers/dri/nouveau/nv20_state_tex.c
+++ b/src/mesa/drivers/dri/nouveau/nv20_state_tex.c
@@ -180,8 +180,8 @@ nv20_emit_tex_obj(struct gl_context *ctx, int emit)
}
t = ctx->Texture.Unit[i]._Current;
- s = &to_nouveau_texture(t)->surfaces[t->BaseLevel];
- ti = t->Image[0][t->BaseLevel];
+ s = &to_nouveau_texture(t)->surfaces[t->Attrib.BaseLevel];
+ ti = t->Image[0][t->Attrib.BaseLevel];
sa = _mesa_get_samplerobj(ctx, i);
if (!nouveau_texture_validate(ctx, t))
@@ -199,24 +199,24 @@ nv20_emit_tex_obj(struct gl_context *ctx, int emit)
case GL_TEXTURE_1D:
tx_wrap = NV20_3D_TEX_WRAP_R_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;
default:
- tx_wrap = nvgl_wrap_mode_nv20(sa->WrapR) << 16
- | nvgl_wrap_mode_nv20(sa->WrapT) << 8
- | nvgl_wrap_mode_nv20(sa->WrapS) << 0;
+ tx_wrap = nvgl_wrap_mode_nv20(sa->Attrib.WrapR) << 16
+ | nvgl_wrap_mode_nv20(sa->Attrib.WrapT) << 8
+ | nvgl_wrap_mode_nv20(sa->Attrib.WrapS) << 0;
break;
}
- tx_filter = nvgl_filter_mode(sa->MagFilter) << 24
- | nvgl_filter_mode(sa->MinFilter) << 16
+ tx_filter = nvgl_filter_mode(sa->Attrib.MagFilter) << 24
+ | nvgl_filter_mode(sa->Attrib.MinFilter) << 16
| 2 << 12;
- r = FLOAT_TO_UBYTE(sa->BorderColor.f[0]);
- g = FLOAT_TO_UBYTE(sa->BorderColor.f[1]);
- b = FLOAT_TO_UBYTE(sa->BorderColor.f[2]);
- a = FLOAT_TO_UBYTE(sa->BorderColor.f[3]);
+ r = FLOAT_TO_UBYTE(sa->Attrib.BorderColor.f[0]);
+ g = FLOAT_TO_UBYTE(sa->Attrib.BorderColor.f[1]);
+ b = FLOAT_TO_UBYTE(sa->Attrib.BorderColor.f[2]);
+ a = FLOAT_TO_UBYTE(sa->Attrib.BorderColor.f[3]);
switch (ti->_BaseFormat) {
case GL_LUMINANCE:
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_enable = NV20_3D_TEX_ENABLE_ENABLE
- | log2i(sa->MaxAnisotropy) << 4;
+ | log2i(sa->Attrib.MaxAnisotropy) << 4;
if (t->Target == GL_TEXTURE_RECTANGLE) {
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);
}
- if (sa->MinFilter != GL_NEAREST &&
- sa->MinFilter != GL_LINEAR) {
- int lod_min = sa->MinLod;
- int lod_max = MIN2(sa->MaxLod, t->_MaxLambda);
- int lod_bias = sa->LodBias
+ if (sa->Attrib.MinFilter != GL_NEAREST &&
+ sa->Attrib.MinFilter != GL_LINEAR) {
+ int lod_min = sa->Attrib.MinLod;
+ int lod_max = MIN2(sa->Attrib.MaxLod, t->_MaxLambda);
+ int lod_bias = sa->Attrib.LodBias
+ ctx->Texture.Unit[i].LodBias;
lod_max = CLAMP(lod_max, 0, 15);
diff --git a/src/mesa/drivers/dri/r200/r200_tex.c b/src/mesa/drivers/dri/r200/r200_tex.c
index 6e51ebe5553..92c82e67d18 100644
--- a/src/mesa/drivers/dri/r200/r200_tex.c
+++ b/src/mesa/drivers/dri/r200/r200_tex.c
@@ -365,10 +365,10 @@ void r200TexUpdateParameters(struct gl_context *ctx, GLuint unit)
struct gl_sampler_object *samp = _mesa_get_samplerobj(ctx, unit);
radeonTexObj* t = radeon_tex_obj(ctx->Texture.Unit[unit]._Current);
- r200SetTexMaxAnisotropy(t , samp->MaxAnisotropy);
- r200SetTexFilter(t, samp->MinFilter, samp->MagFilter);
- r200SetTexWrap(t, samp->WrapS, samp->WrapT, samp->WrapR);
- r200SetTexBorderColor(t, samp->BorderColor.f);
+ r200SetTexMaxAnisotropy(t , samp->Attrib.MaxAnisotropy);
+ r200SetTexFilter(t, samp->Attrib.MinFilter, samp->Attrib.MagFilter);
+ r200SetTexWrap(t, samp->Attrib.WrapS, samp->Attrib.WrapT, samp->Attrib.WrapR);
+ 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_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 */
- r200SetTexWrap( t, t->base.Sampler.WrapS, t->base.Sampler.WrapT, t->base.Sampler.WrapR );
- r200SetTexMaxAnisotropy( t, t->base.Sampler.MaxAnisotropy );
- r200SetTexFilter(t, t->base.Sampler.MinFilter, t->base.Sampler.MagFilter);
- r200SetTexBorderColor(t, t->base.Sampler.BorderColor.f);
+ r200SetTexWrap( t, t->base.Sampler.Attrib.WrapS, t->base.Sampler.Attrib.WrapT, t->base.Sampler.Attrib.WrapR );
+ r200SetTexMaxAnisotropy( t, t->base.Sampler.Attrib.MaxAnisotropy );
+ r200SetTexFilter(t, t->base.Sampler.Attrib.MinFilter, t->base.Sampler.Attrib.MagFilter);
+ r200SetTexBorderColor(t, t->base.Sampler.Attrib.BorderColor.f);
return &t->base;
}
@@ -493,7 +493,7 @@ r200NewSamplerObject(struct gl_context *ctx, GLuint name)
r200ContextPtr rmesa = R200_CONTEXT(ctx);
struct gl_sampler_object *samp = _mesa_new_sampler_object(ctx, name);
if (samp)
- samp->MaxAnisotropy = rmesa->radeon.initialMaxAnisotropy;
+ samp->Attrib.MaxAnisotropy = rmesa->radeon.initialMaxAnisotropy;
return samp;
}
diff --git a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
index 09ccc5c6a12..1187803643d 100644
--- a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
+++ b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
@@ -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_3D:
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.
*/
- minLod = maxLod = tObj->BaseLevel;
+ minLod = maxLod = tObj->Attrib.BaseLevel;
} else {
- minLod = tObj->BaseLevel + (GLint)(samp->MinLod);
- minLod = MAX2(minLod, tObj->BaseLevel);
- minLod = MIN2(minLod, tObj->MaxLevel);
- maxLod = tObj->BaseLevel + (GLint)(samp->MaxLod + 0.5);
- maxLod = MIN2(maxLod, tObj->MaxLevel);
+ minLod = tObj->Attrib.BaseLevel + (GLint)(samp->Attrib.MinLod);
+ minLod = MAX2(minLod, tObj->Attrib.BaseLevel);
+ minLod = MIN2(minLod, tObj->Attrib.MaxLevel);
+ maxLod = tObj->Attrib.BaseLevel + (GLint)(samp->Attrib.MaxLod + 0.5);
+ maxLod = MIN2(maxLod, tObj->Attrib.MaxLevel);
maxLod = MIN2(maxLod, tObj->Image[0][minLod]->MaxNumLevels - 1 + minLod);
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;
radeon_mipmap_level *mtBaseLevel;
- if (texObj->BaseLevel < mt->baseLevel)
+ if (texObj->Attrib.BaseLevel < mt->baseLevel)
return GL_FALSE;
- mtBaseLevel = &mt->levels[texObj->BaseLevel - mt->baseLevel];
- firstImage = texObj->Image[0][texObj->BaseLevel];
- numLevels = MIN2(texObj->_MaxLevel - texObj->BaseLevel + 1, firstImage->MaxNumLevels);
+ mtBaseLevel = &mt->levels[texObj->Attrib.BaseLevel - mt->baseLevel];
+ firstImage = texObj->Image[0][texObj->Attrib.BaseLevel];
+ numLevels = MIN2(texObj->_MaxLevel - texObj->Attrib.BaseLevel + 1, firstImage->MaxNumLevels);
if (radeon_is_debug_enabled(RADEON_TEXTURE,RADEON_TRACE)) {
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)
{
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;
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,
- texImg->TexFormat, texObj->BaseLevel,
+ texImg->TexFormat, texObj->Attrib.BaseLevel,
numLevels, texImg->Width, texImg->Height,
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",
__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);
if (!dst_miptree) {
diff --git a/src/mesa/drivers/dri/radeon/radeon_tex.c b/src/mesa/drivers/dri/radeon/radeon_tex.c
index 6a5579b2c2b..bb8d8335f8b 100644
--- a/src/mesa/drivers/dri/radeon/radeon_tex.c
+++ b/src/mesa/drivers/dri/radeon/radeon_tex.c
@@ -315,10 +315,10 @@ void radeonTexUpdateParameters(struct gl_context *ctx, GLuint unit)
struct gl_sampler_object *samp = _mesa_get_samplerobj(ctx, unit);
radeonTexObj* t = radeon_tex_obj(ctx->Texture.Unit[unit]._Current);
- radeonSetTexMaxAnisotropy(t , samp->MaxAnisotropy);
- radeonSetTexFilter(t, samp->MinFilter, samp->MagFilter);
- radeonSetTexWrap(t, samp->WrapS, samp->WrapT);
- radeonSetTexBorderColor(t, samp->BorderColor.f);
+ radeonSetTexMaxAnisotropy(t , samp->Attrib.MaxAnisotropy);
+ radeonSetTexFilter(t, samp->Attrib.MinFilter, samp->Attrib.MagFilter);
+ radeonSetTexWrap(t, samp->Attrib.WrapS, samp->Attrib.WrapT);
+ 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);
_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;
@@ -418,10 +418,10 @@ radeonNewTextureObject( struct gl_context *ctx, GLuint name, GLenum target )
t->pp_txformat = (RADEON_TXFORMAT_ENDIAN_NO_SWAP |
RADEON_TXFORMAT_PERSPECTIVE_ENABLE);
- radeonSetTexWrap( t, t->base.Sampler.WrapS, t->base.Sampler.WrapT );
- radeonSetTexMaxAnisotropy( t, t->base.Sampler.MaxAnisotropy );
- radeonSetTexFilter( t, t->base.Sampler.MinFilter, t->base.Sampler.MagFilter );
- radeonSetTexBorderColor( t, t->base.Sampler.BorderColor.f );
+ radeonSetTexWrap( t, t->base.Sampler.Attrib.WrapS, t->base.Sampler.Attrib.WrapT );
+ radeonSetTexMaxAnisotropy( t, t->base.Sampler.Attrib.MaxAnisotropy );
+ radeonSetTexFilter( t, t->base.Sampler.Attrib.MinFilter, t->base.Sampler.Attrib.MagFilter );
+ radeonSetTexBorderColor( t, t->base.Sampler.Attrib.BorderColor.f );
return &t->base;
}
@@ -432,7 +432,7 @@ radeonNewSamplerObject(struct gl_context *ctx, GLuint name)
r100ContextPtr rmesa = R100_CONTEXT(ctx);
struct gl_sampler_object *samp = _mesa_new_sampler_object(ctx, name);
if (samp)
- samp->MaxAnisotropy = rmesa->radeon.initialMaxAnisotropy;
+ samp->Attrib.MaxAnisotropy = rmesa->radeon.initialMaxAnisotropy;
return samp;
}
diff --git a/src/mesa/drivers/dri/radeon/radeon_texstate.c b/src/mesa/drivers/dri/radeon/radeon_texstate.c
index 79f0095f480..1f77f74da14 100644
--- a/src/mesa/drivers/dri/radeon/radeon_texstate.c
+++ b/src/mesa/drivers/dri/radeon/radeon_texstate.c
@@ -201,7 +201,7 @@ do { \
static GLenum
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 )
diff --git a/src/mesa/drivers/dri/radeon/radeon_texture.c b/src/mesa/drivers/dri/radeon/radeon_texture.c
index e6ab7a80ecd..21036972d06 100644
--- a/src/mesa/drivers/dri/radeon/radeon_texture.c
+++ b/src/mesa/drivers/dri/radeon/radeon_texture.c
@@ -651,7 +651,7 @@ static radeon_mipmap_tree *radeon_miptree_create_for_teximage(radeonContextPtr r
height = texImage->Height;
depth = texImage->Depth;
- if (texImage->Level > texObj->BaseLevel &&
+ if (texImage->Level > texObj->Attrib.BaseLevel &&
(width == 1 ||
(texObj->Target != GL_TEXTURE_1D && height == 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;
lastLevel = texImage->Level;
} else {
- if (texImage->Level < texObj->BaseLevel)
+ if (texImage->Level < texObj->Attrib.BaseLevel)
firstLevel = 0;
else
- firstLevel = texObj->BaseLevel;
+ firstLevel = texObj->Attrib.BaseLevel;
for (i = texImage->Level; i > firstLevel; i--) {
width <<= 1;
@@ -675,8 +675,8 @@ static radeon_mipmap_tree *radeon_miptree_create_for_teximage(radeonContextPtr r
if (depth != 1)
depth <<= 1;
}
- if ((texObj->Sampler.MinFilter == GL_NEAREST ||
- texObj->Sampler.MinFilter == GL_LINEAR) &&
+ if ((texObj->Sampler.Attrib.MinFilter == GL_NEAREST ||
+ texObj->Sampler.Attrib.MinFilter == GL_LINEAR) &&
texImage->Level == firstLevel) {
lastLevel = firstLevel;
} else {
diff --git a/src/mesa/main/attrib.c b/src/mesa/main/attrib.c
index bb565989e6e..4e27f3197e5 100644
--- a/src/mesa/main/attrib.c
+++ b/src/mesa/main/attrib.c
@@ -602,31 +602,31 @@ pop_texture_group(struct gl_context *ctx, struct gl_texture_attrib_node *texstat
samp = &obj->Sampler;
- _mesa_TexParameterfv(target, GL_TEXTURE_BORDER_COLOR, samp->BorderColor.f);
- _mesa_TexParameteri(target, GL_TEXTURE_WRAP_S, samp->WrapS);
- _mesa_TexParameteri(target, GL_TEXTURE_WRAP_T, samp->WrapT);
- _mesa_TexParameteri(target, GL_TEXTURE_WRAP_R, samp->WrapR);
- _mesa_TexParameteri(target, GL_TEXTURE_MIN_FILTER, samp->MinFilter);
- _mesa_TexParameteri(target, GL_TEXTURE_MAG_FILTER, samp->MagFilter);
- _mesa_TexParameterf(target, GL_TEXTURE_MIN_LOD, samp->MinLod);
- _mesa_TexParameterf(target, GL_TEXTURE_MAX_LOD, samp->MaxLod);
- _mesa_TexParameterf(target, GL_TEXTURE_LOD_BIAS, samp->LodBias);
- _mesa_TexParameterf(target, GL_TEXTURE_PRIORITY, obj->Priority);
- _mesa_TexParameteri(target, GL_TEXTURE_BASE_LEVEL, obj->BaseLevel);
+ _mesa_TexParameterfv(target, GL_TEXTURE_BORDER_COLOR, samp->Attrib.BorderColor.f);
+ _mesa_TexParameteri(target, GL_TEXTURE_WRAP_S, samp->Attrib.WrapS);
+ _mesa_TexParameteri(target, GL_TEXTURE_WRAP_T, samp->Attrib.WrapT);
+ _mesa_TexParameteri(target, GL_TEXTURE_WRAP_R, samp->Attrib.WrapR);
+ _mesa_TexParameteri(target, GL_TEXTURE_MIN_FILTER, samp->Attrib.MinFilter);
+ _mesa_TexParameteri(target, GL_TEXTURE_MAG_FILTER, samp->Attrib.MagFilter);
+ _mesa_TexParameterf(target, GL_TEXTURE_MIN_LOD, samp->Attrib.MinLod);
+ _mesa_TexParameterf(target, GL_TEXTURE_MAX_LOD, samp->Attrib.MaxLod);
+ _mesa_TexParameterf(target, GL_TEXTURE_LOD_BIAS, samp->Attrib.LodBias);
+ _mesa_TexParameterf(target, GL_TEXTURE_PRIORITY, obj->Attrib.Priority);
+ _mesa_TexParameteri(target, GL_TEXTURE_BASE_LEVEL, obj->Attrib.BaseLevel);
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) {
_mesa_TexParameterf(target, GL_TEXTURE_MAX_ANISOTROPY_EXT,
- samp->MaxAnisotropy);
+ samp->Attrib.MaxAnisotropy);
}
if (ctx->Extensions.ARB_shadow) {
_mesa_TexParameteri(target, GL_TEXTURE_COMPARE_MODE,
- samp->CompareMode);
+ samp->Attrib.CompareMode);
_mesa_TexParameteri(target, GL_TEXTURE_COMPARE_FUNC,
- samp->CompareFunc);
+ samp->Attrib.CompareFunc);
}
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 */
diff --git a/src/mesa/main/dlist.c b/src/mesa/main/dlist.c
index 3e2237f81a9..a5b8a8b009e 100644
--- a/src/mesa/main/dlist.c
+++ b/src/mesa/main/dlist.c
@@ -998,9 +998,9 @@ build_bitmap_atlas(struct gl_context *ctx, struct gl_bitmap_atlas *atlas,
goto out_of_memory;
}
- atlas->texObj->Sampler.MinFilter = GL_NEAREST;
- atlas->texObj->Sampler.MagFilter = GL_NEAREST;
- atlas->texObj->MaxLevel = 0;
+ atlas->texObj->Sampler.Attrib.MinFilter = GL_NEAREST;
+ atlas->texObj->Sampler.Attrib.MagFilter = GL_NEAREST;
+ atlas->texObj->Attrib.MaxLevel = 0;
atlas->texObj->Immutable = GL_TRUE;
atlas->texImage = _mesa_get_tex_image(ctx, atlas->texObj,
diff --git a/src/mesa/main/ff_fragment_shader.cpp b/src/mesa/main/ff_fragment_shader.cpp
index 05633d0d7d4..94ed943ab77 100644
--- a/src/mesa/main/ff_fragment_shader.cpp
+++ b/src/mesa/main/ff_fragment_shader.cpp
@@ -286,7 +286,7 @@ static GLuint make_state_key( struct gl_context *ctx, struct state_key *key )
key->unit[i].source_index = texObj->TargetIndex;
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);
key->unit[i].shadow = (format == GL_DEPTH_COMPONENT ||
format == GL_DEPTH_STENCIL_EXT);
diff --git a/src/mesa/main/genmipmap.c b/src/mesa/main/genmipmap.c
index dcbe9675070..16e2b037635 100644
--- a/src/mesa/main/genmipmap.c
+++ b/src/mesa/main/genmipmap.c
@@ -117,7 +117,7 @@ generate_texture_mipmap(struct gl_context *ctx,
FLUSH_VERTICES(ctx, 0);
- if (texObj->BaseLevel >= texObj->MaxLevel) {
+ if (texObj->Attrib.BaseLevel >= texObj->Attrib.MaxLevel) {
/* nothing to do */
return;
}
@@ -131,7 +131,7 @@ generate_texture_mipmap(struct gl_context *ctx,
_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 (!srcImage) {
_mesa_unlock_texture(ctx, texObj);
diff --git a/src/mesa/main/mipmap.c b/src/mesa/main/mipmap.c
index f882bae89ce..fca74602e92 100644
--- a/src/mesa/main/mipmap.c
+++ b/src/mesa/main/mipmap.c
@@ -57,10 +57,10 @@ _mesa_compute_num_levels(struct gl_context *ctx,
const struct gl_texture_image *baseImage;
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 = MIN2(numLevels, (GLuint) texObj->MaxLevel + 1);
+ numLevels = texObj->Attrib.BaseLevel + baseImage->MaxNumLevels;
+ numLevels = MIN2(numLevels, (GLuint) texObj->Attrib.MaxLevel + 1);
if (texObj->Immutable)
numLevels = MIN2(numLevels, texObj->NumLevels);
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);
- for (level = texObj->BaseLevel; level < maxLevel; level++) {
+ for (level = texObj->Attrib.BaseLevel; level < maxLevel; level++) {
/* generate image[level+1] from image[level] */
struct gl_texture_image *srcImage, *dstImage;
GLint srcRowStride, dstRowStride;
@@ -2130,7 +2130,7 @@ generate_mipmap_compressed(struct gl_context *ctx, GLenum target,
ctx->Pack = ctx->DefaultPacking;
/* Get the uncompressed image */
- assert(srcImage->Level == texObj->BaseLevel);
+ assert(srcImage->Level == texObj->Attrib.BaseLevel);
ctx->Driver.GetTexSubImage(ctx,
0, 0, 0,
srcImage->Width, srcImage->Height,
@@ -2141,7 +2141,7 @@ generate_mipmap_compressed(struct gl_context *ctx, GLenum target,
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] */
const struct gl_texture_image *srcImage;
struct gl_texture_image *dstImage;
@@ -2237,15 +2237,15 @@ _mesa_generate_mipmap(struct gl_context *ctx, GLenum target,
GLint maxLevel;
assert(texObj);
- srcImage = _mesa_select_tex_image(texObj, target, texObj->BaseLevel);
+ srcImage = _mesa_select_tex_image(texObj, target, texObj->Attrib.BaseLevel);
assert(srcImage);
maxLevel = _mesa_max_texture_levels(ctx, texObj->Target) - 1;
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)) {
generate_mipmap_compressed(ctx, target, texObj, srcImage, maxLevel);
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index df8ae832cea..fdf75499c84 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -933,18 +933,14 @@ typedef enum
MAX_FACES = 6
} gl_face_index;
-
/**
- * Sampler object state. These objects are new with GL_ARB_sampler_objects
- * and OpenGL 3.3. Legacy texture objects also contain a sampler object.
+ * 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_object
+struct gl_sampler_attrib
{
- simple_mtx_t Mutex;
- GLuint Name;
- GLchar *Label; /**< GL_KHR_debug */
- GLint RefCount;
-
GLenum16 WrapS; /**< S-axis texture image wrap mode */
GLenum16 WrapT; /**< T-axis texture image wrap mode */
GLenum16 WrapR; /**< R-axis texture image wrap mode */
@@ -956,9 +952,41 @@ struct gl_sampler_object
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 */
+ 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
+ * and OpenGL 3.3. Legacy texture objects also contain a sampler object.
+ */
+struct gl_sampler_object
+{
+ simple_mtx_t Mutex;
+ GLuint Name;
+ GLchar *Label; /**< GL_KHR_debug */
+ GLint RefCount;
+
+ struct gl_sampler_attrib Attrib; /**< State saved by glPushAttrib */
/** GL_ARB_bindless_texture */
bool HandleAllocated;
@@ -976,23 +1004,17 @@ struct gl_texture_object
GLint RefCount; /**< reference count */
GLuint Name; /**< the user-visible texture object ID */
GLenum16 Target; /**< GL_TEXTURE_1D, GL_TEXTURE_2D, etc. */
- GLenum16 DepthMode; /**< GL_ARB_depth_texture */
GLchar *Label; /**< GL_KHR_debug */
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.
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) */
GLfloat _MaxLambda; /**< = _MaxLevel - BaseLevel (q - p in spec) */
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 */
- GLboolean GenerateMipmap; /**< GL_SGIS_generate_mipmap */
GLboolean _BaseComplete; /**< Is the base texture level valid? */
GLboolean _MipmapComplete; /**< Is the whole mipmap valid? */
GLboolean _IsIntegerFormat; /**< Does the texture store integer values? */
@@ -1002,7 +1024,6 @@ struct gl_texture_object
GLboolean Immutable; /**< GL_ARB_texture_storage */
GLboolean _IsFloat; /**< GL_OES_float_texture */
GLboolean _IsHalfFloat; /**< GL_OES_half_float_texture */
- bool StencilSampling; /**< Should we sample stencil instead of depth? */
bool HandleAllocated; /**< GL_ARB_bindless_texture */
/** GL_OES_EGL_image_external */
diff --git a/src/mesa/main/samplerobj.c b/src/mesa/main/samplerobj.c
index bc58a5c1437..3568b975dd4 100644
--- a/src/mesa/main/samplerobj.c
+++ b/src/mesa/main/samplerobj.c
@@ -117,23 +117,23 @@ _mesa_init_sampler_object(struct gl_sampler_object *sampObj, GLuint name)
simple_mtx_init(&sampObj->Mutex, mtx_plain);
sampObj->Name = name;
sampObj->RefCount = 1;
- sampObj->WrapS = GL_REPEAT;
- sampObj->WrapT = GL_REPEAT;
- sampObj->WrapR = GL_REPEAT;
- sampObj->MinFilter = GL_NEAREST_MIPMAP_LINEAR;
- sampObj->MagFilter = GL_LINEAR;
- sampObj->BorderColor.f[0] = 0.0;
- sampObj->BorderColor.f[1] = 0.0;
- sampObj->BorderColor.f[2] = 0.0;
- sampObj->BorderColor.f[3] = 0.0;
- sampObj->MinLod = -1000.0F;
- sampObj->MaxLod = 1000.0F;
- sampObj->LodBias = 0.0F;
- sampObj->MaxAnisotropy = 1.0F;
- sampObj->CompareMode = GL_NONE;
- sampObj->CompareFunc = GL_LEQUAL;
- sampObj->sRGBDecode = GL_DECODE_EXT;
- sampObj->CubeMapSeamless = GL_FALSE;
+ sampObj->Attrib.WrapS = GL_REPEAT;
+ sampObj->Attrib.WrapT = GL_REPEAT;
+ sampObj->Attrib.WrapR = GL_REPEAT;
+ sampObj->Attrib.MinFilter = GL_NEAREST_MIPMAP_LINEAR;
+ sampObj->Attrib.MagFilter = GL_LINEAR;
+ sampObj->Attrib.BorderColor.f[0] = 0.0;
+ sampObj->Attrib.BorderColor.f[1] = 0.0;
+ sampObj->Attrib.BorderColor.f[2] = 0.0;
+ sampObj->Attrib.BorderColor.f[3] = 0.0;
+ sampObj->Attrib.MinLod = -1000.0F;
+ sampObj->Attrib.MaxLod = 1000.0F;
+ sampObj->Attrib.LodBias = 0.0F;
+ sampObj->Attrib.MaxAnisotropy = 1.0F;
+ sampObj->Attrib.CompareMode = GL_NONE;
+ sampObj->Attrib.CompareFunc = GL_LEQUAL;
+ sampObj->Attrib.sRGBDecode = GL_DECODE_EXT;
+ sampObj->Attrib.CubeMapSeamless = GL_FALSE;
sampObj->HandleAllocated = GL_FALSE;
/* 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, 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;
flush(ctx);
- samp->WrapS = s;
- samp->WrapT = t;
- samp->WrapR = r;
+ samp->Attrib.WrapS = s;
+ samp->Attrib.WrapT = t;
+ samp->Attrib.WrapR = r;
}
#define INVALID_PARAM 0x100
@@ -538,11 +538,11 @@ static GLuint
set_sampler_wrap_s(struct gl_context *ctx, struct gl_sampler_object *samp,
GLint param)
{
- if (samp->WrapS == param)
+ if (samp->Attrib.WrapS == param)
return GL_FALSE;
if (validate_texture_wrap_mode(ctx, param)) {
flush(ctx);
- samp->WrapS = param;
+ samp->Attrib.WrapS = param;
return GL_TRUE;
}
return INVALID_PARAM;
@@ -553,11 +553,11 @@ static GLuint
set_sampler_wrap_t(struct gl_context *ctx, struct gl_sampler_object *samp,
GLint param)
{
- if (samp->WrapT == param)
+ if (samp->Attrib.WrapT == param)
return GL_FALSE;
if (validate_texture_wrap_mode(ctx, param)) {
flush(ctx);
- samp->WrapT = param;
+ samp->Attrib.WrapT = param;
return GL_TRUE;
}
return INVALID_PARAM;
@@ -568,11 +568,11 @@ static GLuint
set_sampler_wrap_r(struct gl_context *ctx, struct gl_sampler_object *samp,
GLint param)
{
- if (samp->WrapR == param)
+ if (samp->Attrib.WrapR == param)
return GL_FALSE;
if (validate_texture_wrap_mode(ctx, param)) {
flush(ctx);
- samp->WrapR = param;
+ samp->Attrib.WrapR = param;
return GL_TRUE;
}
return INVALID_PARAM;
@@ -592,19 +592,19 @@ _mesa_set_sampler_filters(struct gl_context *ctx,
assert(mag_filter == GL_NEAREST ||
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;
flush(ctx);
- samp->MinFilter = min_filter;
- samp->MagFilter = mag_filter;
+ samp->Attrib.MinFilter = min_filter;
+ samp->Attrib.MagFilter = mag_filter;
}
static GLuint
set_sampler_min_filter(struct gl_context *ctx, struct gl_sampler_object *samp,
GLint param)
{
- if (samp->MinFilter == param)
+ if (samp->Attrib.MinFilter == param)
return GL_FALSE;
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_LINEAR_MIPMAP_LINEAR:
flush(ctx);
- samp->MinFilter = param;
+ samp->Attrib.MinFilter = param;
return GL_TRUE;
default:
return INVALID_PARAM;
@@ -627,14 +627,14 @@ static GLuint
set_sampler_mag_filter(struct gl_context *ctx, struct gl_sampler_object *samp,
GLint param)
{
- if (samp->MagFilter == param)
+ if (samp->Attrib.MagFilter == param)
return GL_FALSE;
switch (param) {
case GL_NEAREST:
case GL_LINEAR:
flush(ctx);
- samp->MagFilter = param;
+ samp->Attrib.MagFilter = param;
return GL_TRUE;
default:
return INVALID_PARAM;
@@ -646,11 +646,11 @@ static GLuint
set_sampler_lod_bias(struct gl_context *ctx, struct gl_sampler_object *samp,
GLfloat param)
{
- if (samp->LodBias == param)
+ if (samp->Attrib.LodBias == param)
return GL_FALSE;
flush(ctx);
- samp->LodBias = param;
+ samp->Attrib.LodBias = param;
return GL_TRUE;
}
@@ -661,10 +661,10 @@ set_sampler_border_colorf(struct gl_context *ctx,
const GLfloat params[4])
{
flush(ctx);
- samp->BorderColor.f[RCOMP] = params[0];
- samp->BorderColor.f[GCOMP] = params[1];
- samp->BorderColor.f[BCOMP] = params[2];
- samp->BorderColor.f[ACOMP] = params[3];
+ samp->Attrib.BorderColor.f[RCOMP] = params[0];
+ samp->Attrib.BorderColor.f[GCOMP] = params[1];
+ samp->Attrib.BorderColor.f[BCOMP] = params[2];
+ samp->Attrib.BorderColor.f[ACOMP] = params[3];
return GL_TRUE;
}
@@ -675,10 +675,10 @@ set_sampler_border_colori(struct gl_context *ctx,
const GLint params[4])
{
flush(ctx);
- samp->BorderColor.i[RCOMP] = params[0];
- samp->BorderColor.i[GCOMP] = params[1];
- samp->BorderColor.i[BCOMP] = params[2];
- samp->BorderColor.i[ACOMP] = params[3];
+ samp->Attrib.BorderColor.i[RCOMP] = params[0];
+ samp->Attrib.BorderColor.i[GCOMP] = params[1];
+ samp->Attrib.BorderColor.i[BCOMP] = params[2];
+ samp->Attrib.BorderColor.i[ACOMP] = params[3];
return GL_TRUE;
}
@@ -689,10 +689,10 @@ set_sampler_border_colorui(struct gl_context *ctx,
const GLuint params[4])
{
flush(ctx);
- samp->BorderColor.ui[RCOMP] = params[0];
- samp->BorderColor.ui[GCOMP] = params[1];
- samp->BorderColor.ui[BCOMP] = params[2];
- samp->BorderColor.ui[ACOMP] = params[3];
+ samp->Attrib.BorderColor.ui[RCOMP] = params[0];
+ samp->Attrib.BorderColor.ui[GCOMP] = params[1];
+ samp->Attrib.BorderColor.ui[BCOMP] = params[2];
+ samp->Attrib.BorderColor.ui[ACOMP] = params[3];
return GL_TRUE;
}
@@ -701,11 +701,11 @@ static GLuint
set_sampler_min_lod(struct gl_context *ctx, struct gl_sampler_object *samp,
GLfloat param)
{
- if (samp->MinLod == param)
+ if (samp->Attrib.MinLod == param)
return GL_FALSE;
flush(ctx);
- samp->MinLod = param;
+ samp->Attrib.MinLod = param;
return GL_TRUE;
}
@@ -714,11 +714,11 @@ static GLuint
set_sampler_max_lod(struct gl_context *ctx, struct gl_sampler_object *samp,
GLfloat param)
{
- if (samp->MaxLod == param)
+ if (samp->Attrib.MaxLod == param)
return GL_FALSE;
flush(ctx);
- samp->MaxLod = param;
+ samp->Attrib.MaxLod = param;
return GL_TRUE;
}
@@ -734,13 +734,13 @@ set_sampler_compare_mode(struct gl_context *ctx,
if (!ctx->Extensions.ARB_shadow)
return GL_FALSE;
- if (samp->CompareMode == param)
+ if (samp->Attrib.CompareMode == param)
return GL_FALSE;
if (param == GL_NONE ||
param == GL_COMPARE_R_TO_TEXTURE_ARB) {
flush(ctx);
- samp->CompareMode = param;
+ samp->Attrib.CompareMode = param;
return GL_TRUE;
}
@@ -759,7 +759,7 @@ set_sampler_compare_func(struct gl_context *ctx,
if (!ctx->Extensions.ARB_shadow)
return GL_FALSE;
- if (samp->CompareFunc == param)
+ if (samp->Attrib.CompareFunc == param)
return GL_FALSE;
switch (param) {
@@ -772,7 +772,7 @@ set_sampler_compare_func(struct gl_context *ctx,
case GL_ALWAYS:
case GL_NEVER:
flush(ctx);
- samp->CompareFunc = param;
+ samp->Attrib.CompareFunc = param;
return GL_TRUE;
default:
return INVALID_PARAM;
@@ -787,7 +787,7 @@ set_sampler_max_anisotropy(struct gl_context *ctx,
if (!ctx->Extensions.EXT_texture_filter_anisotropic)
return INVALID_PNAME;
- if (samp->MaxAnisotropy == param)
+ if (samp->Attrib.MaxAnisotropy == param)
return GL_FALSE;
if (param < 1.0F)
@@ -795,7 +795,7 @@ set_sampler_max_anisotropy(struct gl_context *ctx,
flush(ctx);
/* 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;
}
@@ -808,14 +808,14 @@ set_sampler_cube_map_seamless(struct gl_context *ctx,
|| !ctx->Extensions.AMD_seamless_cubemap_per_texture)
return INVALID_PNAME;
- if (samp->CubeMapSeamless == param)
+ if (samp->Attrib.CubeMapSeamless == param)
return GL_FALSE;
if (param != GL_TRUE && param != GL_FALSE)
return INVALID_VALUE;
flush(ctx);
- samp->CubeMapSeamless = param;
+ samp->Attrib.CubeMapSeamless = param;
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);
flush(ctx);
- samp->sRGBDecode = param;
+ samp->Attrib.sRGBDecode = param;
}
static GLuint
@@ -836,7 +836,7 @@ set_sampler_srgb_decode(struct gl_context *ctx,
if (!ctx->Extensions.EXT_texture_sRGB_decode)
return INVALID_PNAME;
- if (samp->sRGBDecode == param)
+ if (samp->Attrib.sRGBDecode == param)
return GL_FALSE;
/* The EXT_texture_sRGB_decode spec says:
@@ -854,7 +854,7 @@ set_sampler_srgb_decode(struct gl_context *ctx,
return INVALID_PARAM;
flush(ctx);
- samp->sRGBDecode = param;
+ samp->Attrib.sRGBDecode = param;
return GL_TRUE;
}
@@ -1410,47 +1410,47 @@ _mesa_GetSamplerParameteriv(GLuint sampler, GLenum pname, GLint *params)
switch (pname) {
case GL_TEXTURE_WRAP_S:
- *params = sampObj->WrapS;
+ *params = sampObj->Attrib.WrapS;
break;
case GL_TEXTURE_WRAP_T:
- *params = sampObj->WrapT;
+ *params = sampObj->Attrib.WrapT;
break;
case GL_TEXTURE_WRAP_R:
- *params = sampObj->WrapR;
+ *params = sampObj->Attrib.WrapR;
break;
case GL_TEXTURE_MIN_FILTER:
- *params = sampObj->MinFilter;
+ *params = sampObj->Attrib.MinFilter;
break;
case GL_TEXTURE_MAG_FILTER:
- *params = sampObj->MagFilter;
+ *params = sampObj->Attrib.MagFilter;
break;
case GL_TEXTURE_MIN_LOD:
/* GL spec 'Data Conversions' section specifies that floating-point
* value in integer Get function is rounded to nearest integer
*/
- *params = lroundf(sampObj->MinLod);
+ *params = lroundf(sampObj->Attrib.MinLod);
break;
case GL_TEXTURE_MAX_LOD:
/* GL spec 'Data Conversions' section specifies that floating-point
* value in integer Get function is rounded to nearest integer
*/
- *params = lroundf(sampObj->MaxLod);
+ *params = lroundf(sampObj->Attrib.MaxLod);
break;
case GL_TEXTURE_LOD_BIAS:
/* GL spec 'Data Conversions' section specifies that floating-point
* value in integer Get function is rounded to nearest integer
*/
- *params = lroundf(sampObj->LodBias);
+ *params = lroundf(sampObj->Attrib.LodBias);
break;
case GL_TEXTURE_COMPARE_MODE:
if (!ctx->Extensions.ARB_shadow)
goto invalid_pname;
- *params = sampObj->CompareMode;
+ *params = sampObj->Attrib.CompareMode;
break;
case GL_TEXTURE_COMPARE_FUNC:
if (!ctx->Extensions.ARB_shadow)
goto invalid_pname;
- *params = sampObj->CompareFunc;
+ *params = sampObj->Attrib.CompareFunc;
break;
case GL_TEXTURE_MAX_ANISOTROPY_EXT:
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
* value in integer Get function is rounded to nearest integer
*/
- *params = lroundf(sampObj->MaxAnisotropy);
+ *params = lroundf(sampObj->Attrib.MaxAnisotropy);
break;
case GL_TEXTURE_BORDER_COLOR:
if (!ctx->Extensions.ARB_texture_border_clamp)
goto invalid_pname;
- params[0] = FLOAT_TO_INT(sampObj->BorderColor.f[0]);
- params[1] = FLOAT_TO_INT(sampObj->BorderColor.f[1]);
- params[2] = FLOAT_TO_INT(sampObj->BorderColor.f[2]);
- params[3] = FLOAT_TO_INT(sampObj->BorderColor.f[3]);
+ params[0] = FLOAT_TO_INT(sampObj->Attrib.BorderColor.f[0]);
+ params[1] = FLOAT_TO_INT(sampObj->Attrib.BorderColor.f[1]);
+ params[2] = FLOAT_TO_INT(sampObj->Attrib.BorderColor.f[2]);
+ params[3] = FLOAT_TO_INT(sampObj->Attrib.BorderColor.f[3]);
break;
case GL_TEXTURE_CUBE_MAP_SEAMLESS:
if (!ctx->Extensions.AMD_seamless_cubemap_per_texture)
goto invalid_pname;
- *params = sampObj->CubeMapSeamless;
+ *params = sampObj->Attrib.CubeMapSeamless;
break;
case GL_TEXTURE_SRGB_DECODE_EXT:
if (!ctx->Extensions.EXT_texture_sRGB_decode)
goto invalid_pname;
- *params = (GLenum) sampObj->sRGBDecode;
+ *params = (GLenum) sampObj->Attrib.sRGBDecode;
break;
default:
goto invalid_pname;
@@ -1502,53 +1502,53 @@ _mesa_GetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat *params)
switch (pname) {
case GL_TEXTURE_WRAP_S:
- *params = (GLfloat) sampObj->WrapS;
+ *params = (GLfloat) sampObj->Attrib.WrapS;
break;
case GL_TEXTURE_WRAP_T:
- *params = (GLfloat) sampObj->WrapT;
+ *params = (GLfloat) sampObj->Attrib.WrapT;
break;
case GL_TEXTURE_WRAP_R:
- *params = (GLfloat) sampObj->WrapR;
+ *params = (GLfloat) sampObj->Attrib.WrapR;
break;
case GL_TEXTURE_MIN_FILTER:
- *params = (GLfloat) sampObj->MinFilter;
+ *params = (GLfloat) sampObj->Attrib.MinFilter;
break;
case GL_TEXTURE_MAG_FILTER:
- *params = (GLfloat) sampObj->MagFilter;
+ *params = (GLfloat) sampObj->Attrib.MagFilter;
break;
case GL_TEXTURE_MIN_LOD:
- *params = sampObj->MinLod;
+ *params = sampObj->Attrib.MinLod;
break;
case GL_TEXTURE_MAX_LOD:
- *params = sampObj->MaxLod;
+ *params = sampObj->Attrib.MaxLod;
break;
case GL_TEXTURE_LOD_BIAS:
- *params = sampObj->LodBias;
+ *params = sampObj->Attrib.LodBias;
break;
case GL_TEXTURE_COMPARE_MODE:
- *params = (GLfloat) sampObj->CompareMode;
+ *params = (GLfloat) sampObj->Attrib.CompareMode;
break;
case GL_TEXTURE_COMPARE_FUNC:
- *params = (GLfloat) sampObj->CompareFunc;
+ *params = (GLfloat) sampObj->Attrib.CompareFunc;
break;
case GL_TEXTURE_MAX_ANISOTROPY_EXT:
- *params = sampObj->MaxAnisotropy;
+ *params = sampObj->Attrib.MaxAnisotropy;
break;
case GL_TEXTURE_BORDER_COLOR:
- params[0] = sampObj->BorderColor.f[0];
- params[1] = sampObj->BorderColor.f[1];
- params[2] = sampObj->BorderColor.f[2];
- params[3] = sampObj->BorderColor.f[3];
+ params[0] = sampObj->Attrib.BorderColor.f[0];
+ params[1] = sampObj->Attrib.BorderColor.f[1];
+ params[2] = sampObj->Attrib.BorderColor.f[2];
+ params[3] = sampObj->Attrib.BorderColor.f[3];
break;
case GL_TEXTURE_CUBE_MAP_SEAMLESS:
if (!ctx->Extensions.AMD_seamless_cubemap_per_texture)
goto invalid_pname;
- *params = (GLfloat) sampObj->CubeMapSeamless;
+ *params = (GLfloat) sampObj->Attrib.CubeMapSeamless;
break;
case GL_TEXTURE_SRGB_DECODE_EXT:
if (!ctx->Extensions.EXT_texture_sRGB_decode)
goto invalid_pname;
- *params = (GLfloat) sampObj->sRGBDecode;
+ *params = (GLfloat) sampObj->Attrib.sRGBDecode;
break;
default:
goto invalid_pname;
@@ -1574,53 +1574,53 @@ _mesa_GetSamplerParameterIiv(GLuint sampler, GLenum pname, GLint *params)
switch (pname) {
case GL_TEXTURE_WRAP_S:
- *params = sampObj->WrapS;
+ *params = sampObj->Attrib.WrapS;
break;
case GL_TEXTURE_WRAP_T:
- *params = sampObj->WrapT;
+ *params = sampObj->Attrib.WrapT;
break;
case GL_TEXTURE_WRAP_R:
- *params = sampObj->WrapR;
+ *params = sampObj->Attrib.WrapR;
break;
case GL_TEXTURE_MIN_FILTER:
- *params = sampObj->MinFilter;
+ *params = sampObj->Attrib.MinFilter;
break;
case GL_TEXTURE_MAG_FILTER:
- *params = sampObj->MagFilter;
+ *params = sampObj->Attrib.MagFilter;
break;
case GL_TEXTURE_MIN_LOD:
- *params = (GLint) sampObj->MinLod;
+ *params = (GLint) sampObj->Attrib.MinLod;
break;
case GL_TEXTURE_MAX_LOD:
- *params = (GLint) sampObj->MaxLod;
+ *params = (GLint) sampObj->Attrib.MaxLod;
break;
case GL_TEXTURE_LOD_BIAS:
- *params = (GLint) sampObj->LodBias;
+ *params = (GLint) sampObj->Attrib.LodBias;
break;
case GL_TEXTURE_COMPARE_MODE:
- *params = sampObj->CompareMode;
+ *params = sampObj->Attrib.CompareMode;
break;
case GL_TEXTURE_COMPARE_FUNC:
- *params = sampObj->CompareFunc;
+ *params = sampObj->Attrib.CompareFunc;
break;
case GL_TEXTURE_MAX_ANISOTROPY_EXT:
- *params = (GLint) sampObj->MaxAnisotropy;
+ *params = (GLint) sampObj->Attrib.MaxAnisotropy;
break;
case GL_TEXTURE_BORDER_COLOR:
- params[0] = sampObj->BorderColor.i[0];
- params[1] = sampObj->BorderColor.i[1];
- params[2] = sampObj->BorderColor.i[2];
- params[3] = sampObj->BorderColor.i[3];
+ params[0] = sampObj->Attrib.BorderColor.i[0];
+ params[1] = sampObj->Attrib.BorderColor.i[1];
+ params[2] = sampObj->Attrib.BorderColor.i[2];
+ params[3] = sampObj->Attrib.BorderColor.i[3];
break;
case GL_TEXTURE_CUBE_MAP_SEAMLESS:
if (!ctx->Extensions.AMD_seamless_cubemap_per_texture)
goto invalid_pname;
- *params = sampObj->CubeMapSeamless;
+ *params = sampObj->Attrib.CubeMapSeamless;
break;
case GL_TEXTURE_SRGB_DECODE_EXT:
if (!ctx->Extensions.EXT_texture_sRGB_decode)
goto invalid_pname;
- *params = (GLenum) sampObj->sRGBDecode;
+ *params = (GLenum) sampObj->Attrib.sRGBDecode;
break;
default:
goto invalid_pname;
@@ -1646,53 +1646,53 @@ _mesa_GetSamplerParameterIuiv(GLuint sampler, GLenum pname, GLuint *params)
switch (pname) {
case GL_TEXTURE_WRAP_S:
- *params = sampObj->WrapS;
+ *params = sampObj->Attrib.WrapS;
break;
case GL_TEXTURE_WRAP_T:
- *params = sampObj->WrapT;
+ *params = sampObj->Attrib.WrapT;
break;
case GL_TEXTURE_WRAP_R:
- *params = sampObj->WrapR;
+ *params = sampObj->Attrib.WrapR;
break;
case GL_TEXTURE_MIN_FILTER:
- *params = sampObj->MinFilter;
+ *params = sampObj->Attrib.MinFilter;
break;
case GL_TEXTURE_MAG_FILTER:
- *params = sampObj->MagFilter;
+ *params = sampObj->Attrib.MagFilter;
break;
case GL_TEXTURE_MIN_LOD:
- *params = (GLuint) sampObj->MinLod;
+ *params = (GLuint) sampObj->Attrib.MinLod;
break;
case GL_TEXTURE_MAX_LOD:
- *params = (GLuint) sampObj->MaxLod;
+ *params = (GLuint) sampObj->Attrib.MaxLod;
break;
case GL_TEXTURE_LOD_BIAS:
- *params = (GLuint) sampObj->LodBias;
+ *params = (GLuint) sampObj->Attrib.LodBias;
break;
case GL_TEXTURE_COMPARE_MODE:
- *params = sampObj->CompareMode;
+ *params = sampObj->Attrib.CompareMode;
break;
case GL_TEXTURE_COMPARE_FUNC:
- *params = sampObj->CompareFunc;
+ *params = sampObj->Attrib.CompareFunc;
break;
case GL_TEXTURE_MAX_ANISOTROPY_EXT:
- *params = (GLuint) sampObj->MaxAnisotropy;
+ *params = (GLuint) sampObj->Attrib.MaxAnisotropy;
break;
case GL_TEXTURE_BORDER_COLOR:
- params[0] = sampObj->BorderColor.ui[0];
- params[1] = sampObj->BorderColor.ui[1];
- params[2] = sampObj->BorderColor.ui[2];
- params[3] = sampObj->BorderColor.ui[3];
+ params[0] = sampObj->Attrib.BorderColor.ui[0];
+ params[1] = sampObj->Attrib.BorderColor.ui[1];
+ params[2] = sampObj->Attrib.BorderColor.ui[2];
+ params[3] = sampObj->Attrib.BorderColor.ui[3];
break;
case GL_TEXTURE_CUBE_MAP_SEAMLESS:
if (!ctx->Extensions.AMD_seamless_cubemap_per_texture)
goto invalid_pname;
- *params = sampObj->CubeMapSeamless;
+ *params = sampObj->Attrib.CubeMapSeamless;
break;
case GL_TEXTURE_SRGB_DECODE_EXT:
if (!ctx->Extensions.EXT_texture_sRGB_decode)
goto invalid_pname;
- *params = (GLenum) sampObj->sRGBDecode;
+ *params = (GLenum) sampObj->Attrib.sRGBDecode;
break;
default:
goto invalid_pname;
diff --git a/src/mesa/main/samplerobj.h b/src/mesa/main/samplerobj.h
index 2a28757b9b2..2e9903352a2 100644
--- a/src/mesa/main/samplerobj.h
+++ b/src/mesa/main/samplerobj.h
@@ -51,7 +51,7 @@ _mesa_get_samplerobj(struct gl_context *ctx, GLuint unit)
static inline GLboolean
_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;
}
diff --git a/src/mesa/main/shaderimage.c b/src/mesa/main/shaderimage.c
index b0ff09f256d..d1fd25b8f3d 100644
--- a/src/mesa/main/shaderimage.c
+++ b/src/mesa/main/shaderimage.c
@@ -468,10 +468,10 @@ _mesa_is_image_unit_valid(struct gl_context *ctx, struct gl_image_unit *u)
if (!t->_BaseComplete && !t->_MipmapComplete)
_mesa_test_texobj_completeness(ctx, t);
- if (u->Level < t->BaseLevel ||
+ if (u->Level < t->Attrib.BaseLevel ||
u->Level > t->_MaxLevel ||
- (u->Level == t->BaseLevel && !t->_BaseComplete) ||
- (u->Level != t->BaseLevel && !t->_MipmapComplete))
+ (u->Level == t->Attrib.BaseLevel && !t->_BaseComplete) ||
+ (u->Level != t->Attrib.BaseLevel && !t->_MipmapComplete))
return GL_FALSE;
if (_mesa_tex_target_is_layered(t->Target) &&
diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c
index 6ac346993b1..40313d8eb09 100644
--- a/src/mesa/main/teximage.c
+++ b/src/mesa/main/teximage.c
@@ -2745,9 +2745,9 @@ static inline void
check_gen_mipmap(struct gl_context *ctx, GLenum target,
struct gl_texture_object *texObj, GLint level)
{
- if (texObj->GenerateMipmap &&
- level == texObj->BaseLevel &&
- level < texObj->MaxLevel) {
+ if (texObj->Attrib.GenerateMipmap &&
+ level == texObj->Attrib.BaseLevel &&
+ level < texObj->Attrib.MaxLevel) {
assert(ctx->Driver.GenerateMipmap);
ctx->Driver.GenerateMipmap(ctx, target, texObj);
}
diff --git a/src/mesa/main/teximage.h b/src/mesa/main/teximage.h
index ee4b1ac8595..f9e5042ad8c 100644
--- a/src/mesa/main/teximage.h
+++ b/src/mesa/main/teximage.h
@@ -174,7 +174,7 @@ _mesa_get_texbuffer_format(const struct gl_context *ctx, GLenum internalFormat);
static inline const struct gl_texture_image *
_mesa_base_tex_image(const struct gl_texture_object *texObj)
{
- return texObj->Image[0][texObj->BaseLevel];
+ return texObj->Image[0][texObj->Attrib.BaseLevel];
}
diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c
index cddec5aabab..265df9c4512 100644
--- a/src/mesa/main/texobj.c
+++ b/src/mesa/main/texobj.c
@@ -67,7 +67,7 @@ static bool
valid_filter_for_float(const struct gl_context *ctx,
const struct gl_texture_object *obj)
{
- switch (obj->Sampler.MagFilter) {
+ switch (obj->Sampler.Attrib.MagFilter) {
case GL_LINEAR:
if (obj->_IsHalfFloat && !ctx->Extensions.OES_texture_half_float_linear) {
return false;
@@ -82,7 +82,7 @@ valid_filter_for_float(const struct gl_context *ctx,
unreachable("Invalid mag filter");
}
- switch (obj->Sampler.MinFilter) {
+ switch (obj->Sampler.Attrib.MinFilter) {
case GL_LINEAR:
case GL_NEAREST_MIPMAP_LINEAR:
case GL_LINEAR_MIPMAP_NEAREST:
@@ -323,9 +323,9 @@ _mesa_initialize_texture_object( struct gl_context *ctx,
else {
obj->TargetIndex = NUM_TEXTURE_TARGETS; /* invalid/error value */
}
- obj->Priority = 1.0F;
- obj->BaseLevel = 0;
- obj->MaxLevel = 1000;
+ obj->Attrib.Priority = 1.0F;
+ obj->Attrib.BaseLevel = 0;
+ obj->Attrib.MaxLevel = 1000;
/* must be one; no support for (YUV) planes in separate buffers */
obj->RequiredTextureImageUnits = 1;
@@ -333,34 +333,34 @@ _mesa_initialize_texture_object( struct gl_context *ctx,
/* sampler state */
if (target == GL_TEXTURE_RECTANGLE_NV ||
target == GL_TEXTURE_EXTERNAL_OES) {
- obj->Sampler.WrapS = GL_CLAMP_TO_EDGE;
- obj->Sampler.WrapT = GL_CLAMP_TO_EDGE;
- obj->Sampler.WrapR = GL_CLAMP_TO_EDGE;
- obj->Sampler.MinFilter = GL_LINEAR;
+ obj->Sampler.Attrib.WrapS = GL_CLAMP_TO_EDGE;
+ obj->Sampler.Attrib.WrapT = GL_CLAMP_TO_EDGE;
+ obj->Sampler.Attrib.WrapR = GL_CLAMP_TO_EDGE;
+ obj->Sampler.Attrib.MinFilter = GL_LINEAR;
}
else {
- obj->Sampler.WrapS = GL_REPEAT;
- obj->Sampler.WrapT = GL_REPEAT;
- obj->Sampler.WrapR = GL_REPEAT;
- obj->Sampler.MinFilter = GL_NEAREST_MIPMAP_LINEAR;
- }
- obj->Sampler.MagFilter = GL_LINEAR;
- obj->Sampler.MinLod = -1000.0;
- obj->Sampler.MaxLod = 1000.0;
- obj->Sampler.LodBias = 0.0;
- obj->Sampler.MaxAnisotropy = 1.0;
- obj->Sampler.CompareMode = GL_NONE; /* ARB_shadow */
- obj->Sampler.CompareFunc = GL_LEQUAL; /* ARB_shadow */
- obj->DepthMode = ctx->API == API_OPENGL_CORE ? GL_RED : GL_LUMINANCE;
- obj->StencilSampling = false;
- obj->Sampler.CubeMapSeamless = GL_FALSE;
+ obj->Sampler.Attrib.WrapS = GL_REPEAT;
+ obj->Sampler.Attrib.WrapT = GL_REPEAT;
+ obj->Sampler.Attrib.WrapR = GL_REPEAT;
+ obj->Sampler.Attrib.MinFilter = GL_NEAREST_MIPMAP_LINEAR;
+ }
+ obj->Sampler.Attrib.MagFilter = GL_LINEAR;
+ obj->Sampler.Attrib.MinLod = -1000.0;
+ obj->Sampler.Attrib.MaxLod = 1000.0;
+ obj->Sampler.Attrib.LodBias = 0.0;
+ obj->Sampler.Attrib.MaxAnisotropy = 1.0;
+ obj->Sampler.Attrib.CompareMode = GL_NONE; /* ARB_shadow */
+ obj->Sampler.Attrib.CompareFunc = GL_LEQUAL; /* ARB_shadow */
+ obj->Attrib.DepthMode = ctx->API == API_OPENGL_CORE ? GL_RED : GL_LUMINANCE;
+ obj->Attrib.StencilSampling = false;
+ obj->Sampler.Attrib.CubeMapSeamless = GL_FALSE;
obj->Sampler.HandleAllocated = GL_FALSE;
- obj->Swizzle[0] = GL_RED;
- obj->Swizzle[1] = GL_GREEN;
- obj->Swizzle[2] = GL_BLUE;
- obj->Swizzle[3] = GL_ALPHA;
- obj->_Swizzle = SWIZZLE_NOOP;
- obj->Sampler.sRGBDecode = GL_DECODE_EXT;
+ obj->Attrib.Swizzle[0] = GL_RED;
+ obj->Attrib.Swizzle[1] = GL_GREEN;
+ obj->Attrib.Swizzle[2] = GL_BLUE;
+ obj->Attrib.Swizzle[3] = GL_ALPHA;
+ obj->Attrib._Swizzle = SWIZZLE_NOOP;
+ obj->Sampler.Attrib.sRGBDecode = GL_DECODE_EXT;
obj->BufferObjectFormat = GL_R8;
obj->_BufferObjectFormat = MESA_FORMAT_R_UNORM8;
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_EXTERNAL_OES:
/* have to init wrap and filter state here - kind of klunky */
- obj->Sampler.WrapS = GL_CLAMP_TO_EDGE;
- obj->Sampler.WrapT = GL_CLAMP_TO_EDGE;
- obj->Sampler.WrapR = GL_CLAMP_TO_EDGE;
- obj->Sampler.MinFilter = filter;
- obj->Sampler.MagFilter = filter;
+ obj->Sampler.Attrib.WrapS = GL_CLAMP_TO_EDGE;
+ obj->Sampler.Attrib.WrapT = GL_CLAMP_TO_EDGE;
+ obj->Sampler.Attrib.WrapR = GL_CLAMP_TO_EDGE;
+ obj->Sampler.Attrib.MinFilter = filter;
+ obj->Sampler.Attrib.MagFilter = filter;
if (ctx->Driver.TexParameter) {
/* XXX we probably don't need to make all these calls */
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->TargetIndex = src->TargetIndex;
dest->Name = src->Name;
- dest->Priority = src->Priority;
- dest->Sampler.BorderColor.f[0] = src->Sampler.BorderColor.f[0];
- dest->Sampler.BorderColor.f[1] = src->Sampler.BorderColor.f[1];
- dest->Sampler.BorderColor.f[2] = src->Sampler.BorderColor.f[2];
- dest->Sampler.BorderColor.f[3] = src->Sampler.BorderColor.f[3];
- dest->Sampler.WrapS = src->Sampler.WrapS;
- dest->Sampler.WrapT = src->Sampler.WrapT;
- dest->Sampler.WrapR = src->Sampler.WrapR;
- dest->Sampler.MinFilter = src->Sampler.MinFilter;
- dest->Sampler.MagFilter = src->Sampler.MagFilter;
- dest->Sampler.MinLod = src->Sampler.MinLod;
- dest->Sampler.MaxLod = src->Sampler.MaxLod;
- dest->Sampler.LodBias = src->Sampler.LodBias;
- dest->BaseLevel = src->BaseLevel;
- dest->MaxLevel = src->MaxLevel;
- dest->Sampler.MaxAnisotropy = src->Sampler.MaxAnisotropy;
- dest->Sampler.CompareMode = src->Sampler.CompareMode;
- dest->Sampler.CompareFunc = src->Sampler.CompareFunc;
- dest->Sampler.CubeMapSeamless = src->Sampler.CubeMapSeamless;
- dest->DepthMode = src->DepthMode;
- dest->StencilSampling = src->StencilSampling;
- dest->Sampler.sRGBDecode = src->Sampler.sRGBDecode;
+ dest->Attrib.Priority = src->Attrib.Priority;
+ dest->Sampler.Attrib.BorderColor.f[0] = src->Sampler.Attrib.BorderColor.f[0];
+ dest->Sampler.Attrib.BorderColor.f[1] = src->Sampler.Attrib.BorderColor.f[1];
+ dest->Sampler.Attrib.BorderColor.f[2] = src->Sampler.Attrib.BorderColor.f[2];
+ dest->Sampler.Attrib.BorderColor.f[3] = src->Sampler.Attrib.BorderColor.f[3];
+ dest->Sampler.Attrib.WrapS = src->Sampler.Attrib.WrapS;
+ dest->Sampler.Attrib.WrapT = src->Sampler.Attrib.WrapT;
+ dest->Sampler.Attrib.WrapR = src->Sampler.Attrib.WrapR;
+ dest->Sampler.Attrib.MinFilter = src->Sampler.Attrib.MinFilter;
+ dest->Sampler.Attrib.MagFilter = src->Sampler.Attrib.MagFilter;
+ dest->Sampler.Attrib.MinLod = src->Sampler.Attrib.MinLod;
+ dest->Sampler.Attrib.MaxLod = src->Sampler.Attrib.MaxLod;
+ dest->Sampler.Attrib.LodBias = src->Sampler.Attrib.LodBias;
+ dest->Attrib.BaseLevel = src->Attrib.BaseLevel;
+ dest->Attrib.MaxLevel = src->Attrib.MaxLevel;
+ dest->Sampler.Attrib.MaxAnisotropy = src->Sampler.Attrib.MaxAnisotropy;
+ dest->Sampler.Attrib.CompareMode = src->Sampler.Attrib.CompareMode;
+ dest->Sampler.Attrib.CompareFunc = src->Sampler.Attrib.CompareFunc;
+ dest->Sampler.Attrib.CubeMapSeamless = src->Sampler.Attrib.CubeMapSeamless;
+ dest->Attrib.DepthMode = src->Attrib.DepthMode;
+ dest->Attrib.StencilSampling = src->Attrib.StencilSampling;
+ dest->Sampler.Attrib.sRGBDecode = src->Sampler.Attrib.sRGBDecode;
dest->_MaxLevel = src->_MaxLevel;
dest->_MaxLambda = src->_MaxLambda;
- dest->GenerateMipmap = src->GenerateMipmap;
+ dest->Attrib.GenerateMipmap = src->Attrib.GenerateMipmap;
dest->_BaseComplete = src->_BaseComplete;
dest->_MipmapComplete = src->_MipmapComplete;
- COPY_4V(dest->Swizzle, src->Swizzle);
- dest->_Swizzle = src->_Swizzle;
+ COPY_4V(dest->Attrib.Swizzle, src->Attrib.Swizzle);
+ dest->Attrib._Swizzle = src->Attrib._Swizzle;
dest->_IsHalfFloat = src->_IsHalfFloat;
dest->_IsFloat = src->_IsFloat;
@@ -682,7 +682,7 @@ void
_mesa_test_texobj_completeness( const struct gl_context *ctx,
struct gl_texture_object *t )
{
- const GLint baseLevel = t->BaseLevel;
+ const GLint baseLevel = t->Attrib.BaseLevel;
const struct gl_texture_image *baseImage;
GLint maxLevels = 0;
@@ -706,9 +706,9 @@ _mesa_test_texobj_completeness( const struct gl_context *ctx,
return;
}
- if (t->MaxLevel < baseLevel) {
+ if (t->Attrib.MaxLevel < baseLevel) {
incomplete(t, MIPMAP, "MAX_LEVEL (%d) < BASE_LEVEL (%d)",
- t->MaxLevel, baseLevel);
+ t->Attrib.MaxLevel, baseLevel);
return;
}
@@ -750,7 +750,7 @@ _mesa_test_texobj_completeness( const struct gl_context *ctx,
assert(maxLevels > 0);
- t->_MaxLevel = MIN3(t->MaxLevel,
+ t->_MaxLevel = MIN3(t->Attrib.MaxLevel,
/* 'p' in the GL spec */
(int) (baseLevel + baseImage->MaxNumLevels - 1),
/* 'q' in the GL spec */
@@ -926,7 +926,7 @@ _mesa_cube_level_complete(const struct gl_texture_object *texObj,
GLboolean
_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;
assert(texObj->RefCount == 1);
- texObj->Sampler.MinFilter = GL_NEAREST;
- texObj->Sampler.MagFilter = GL_NEAREST;
+ texObj->Sampler.Attrib.MinFilter = GL_NEAREST;
+ texObj->Sampler.Attrib.MagFilter = GL_NEAREST;
texFormat = ctx->Driver.ChooseTextureFormat(ctx, target,
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
* 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);
return NULL;
}
@@ -2089,7 +2089,7 @@ _mesa_PrioritizeTextures( GLsizei n, const GLuint *texName,
if (texName[i] > 0) {
struct gl_texture_object *t = _mesa_lookup_texture(ctx, texName[i]);
if (t) {
- t->Priority = CLAMP( priorities[i], 0.0F, 1.0F );
+ t->Attrib.Priority = CLAMP( priorities[i], 0.0F, 1.0F );
}
}
}
diff --git a/src/mesa/main/texobj.h b/src/mesa/main/texobj.h
index b6d62fbd67f..4a79a87d82a 100644
--- a/src/mesa/main/texobj.h
+++ b/src/mesa/main/texobj.h
@@ -127,7 +127,7 @@ _mesa_is_texture_complete(const struct gl_texture_object *texObj,
const struct gl_sampler_object *sampler,
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;
/*
@@ -147,11 +147,11 @@ _mesa_is_texture_complete(const struct gl_texture_object *texObj,
*/
if (!isMultisample &&
(texObj->_IsIntegerFormat ||
- (texObj->StencilSampling &&
+ (texObj->Attrib.StencilSampling &&
img->_BaseFormat == GL_DEPTH_STENCIL)) &&
- (sampler->MagFilter != GL_NEAREST ||
- (sampler->MinFilter != GL_NEAREST &&
- sampler->MinFilter != GL_NEAREST_MIPMAP_NEAREST))) {
+ (sampler->Attrib.MagFilter != GL_NEAREST ||
+ (sampler->Attrib.MinFilter != GL_NEAREST &&
+ sampler->Attrib.MinFilter != GL_NEAREST_MIPMAP_NEAREST))) {
/* If the format is integer, only nearest filtering is allowed,
* but some applications (eg: Grid Autosport) uses the default
* filtering values.
diff --git a/src/mesa/main/texparam.c b/src/mesa/main/texparam.c
index 14b4119ad86..d99ed4f1408 100644
--- a/src/mesa/main/texparam.c
+++ b/src/mesa/main/texparam.c
@@ -268,13 +268,13 @@ set_tex_parameteri(struct gl_context *ctx,
if (!_mesa_target_allows_setting_sampler_parameters(texObj->Target))
goto invalid_dsa;
- if (texObj->Sampler.MinFilter == params[0])
+ if (texObj->Sampler.Attrib.MinFilter == params[0])
return GL_FALSE;
switch (params[0]) {
case GL_NEAREST:
case GL_LINEAR:
flush(ctx);
- texObj->Sampler.MinFilter = params[0];
+ texObj->Sampler.Attrib.MinFilter = params[0];
return GL_TRUE;
case GL_NEAREST_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 &&
texObj->Target != GL_TEXTURE_EXTERNAL_OES) {
flush(ctx);
- texObj->Sampler.MinFilter = params[0];
+ texObj->Sampler.Attrib.MinFilter = params[0];
return GL_TRUE;
}
FALLTHROUGH;
@@ -296,13 +296,13 @@ set_tex_parameteri(struct gl_context *ctx,
if (!_mesa_target_allows_setting_sampler_parameters(texObj->Target))
goto invalid_dsa;
- if (texObj->Sampler.MagFilter == params[0])
+ if (texObj->Sampler.Attrib.MagFilter == params[0])
return GL_FALSE;
switch (params[0]) {
case GL_NEAREST:
case GL_LINEAR:
flush(ctx); /* does not effect completeness */
- texObj->Sampler.MagFilter = params[0];
+ texObj->Sampler.Attrib.MagFilter = params[0];
return GL_TRUE;
default:
goto invalid_param;
@@ -313,11 +313,11 @@ set_tex_parameteri(struct gl_context *ctx,
if (!_mesa_target_allows_setting_sampler_parameters(texObj->Target))
goto invalid_dsa;
- if (texObj->Sampler.WrapS == params[0])
+ if (texObj->Sampler.Attrib.WrapS == params[0])
return GL_FALSE;
if (validate_texture_wrap_mode(ctx, texObj->Target, params[0])) {
flush(ctx);
- texObj->Sampler.WrapS = params[0];
+ texObj->Sampler.Attrib.WrapS = params[0];
return GL_TRUE;
}
return GL_FALSE;
@@ -326,11 +326,11 @@ set_tex_parameteri(struct gl_context *ctx,
if (!_mesa_target_allows_setting_sampler_parameters(texObj->Target))
goto invalid_dsa;
- if (texObj->Sampler.WrapT == params[0])
+ if (texObj->Sampler.Attrib.WrapT == params[0])
return GL_FALSE;
if (validate_texture_wrap_mode(ctx, texObj->Target, params[0])) {
flush(ctx);
- texObj->Sampler.WrapT = params[0];
+ texObj->Sampler.Attrib.WrapT = params[0];
return GL_TRUE;
}
return GL_FALSE;
@@ -339,11 +339,11 @@ set_tex_parameteri(struct gl_context *ctx,
if (!_mesa_target_allows_setting_sampler_parameters(texObj->Target))
goto invalid_dsa;
- if (texObj->Sampler.WrapR == params[0])
+ if (texObj->Sampler.Attrib.WrapR == params[0])
return GL_FALSE;
if (validate_texture_wrap_mode(ctx, texObj->Target, params[0])) {
flush(ctx);
- texObj->Sampler.WrapR = params[0];
+ texObj->Sampler.Attrib.WrapR = params[0];
return GL_TRUE;
}
return GL_FALSE;
@@ -352,7 +352,7 @@ set_tex_parameteri(struct gl_context *ctx,
if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx))
goto invalid_pname;
- if (texObj->BaseLevel == params[0])
+ if (texObj->Attrib.BaseLevel == params[0])
return GL_FALSE;
/* 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 */
if (texObj->Immutable)
- texObj->BaseLevel = MIN2(texObj->ImmutableLevels - 1, params[0]);
+ texObj->Attrib.BaseLevel = MIN2(texObj->ImmutableLevels - 1, params[0]);
else
- texObj->BaseLevel = params[0];
+ texObj->Attrib.BaseLevel = params[0];
return GL_TRUE;
case GL_TEXTURE_MAX_LEVEL:
- if (texObj->MaxLevel == params[0])
+ if (texObj->Attrib.MaxLevel == params[0])
return GL_FALSE;
if (params[0] < 0 ||
@@ -412,10 +412,10 @@ set_tex_parameteri(struct gl_context *ctx,
* passed the call to TexStorage* for the texture object.
*/
if (texObj->Immutable)
- texObj->MaxLevel = CLAMP(params[0], texObj->BaseLevel,
+ texObj->Attrib.MaxLevel = CLAMP(params[0], texObj->Attrib.BaseLevel,
texObj->ImmutableLevels - 1);
else
- texObj->MaxLevel = params[0];
+ texObj->Attrib.MaxLevel = params[0];
return GL_TRUE;
@@ -425,9 +425,9 @@ set_tex_parameteri(struct gl_context *ctx,
if (params[0] && texObj->Target == GL_TEXTURE_EXTERNAL_OES)
goto invalid_param;
- if (texObj->GenerateMipmap != params[0]) {
+ if (texObj->Attrib.GenerateMipmap != params[0]) {
/* no flush() */
- texObj->GenerateMipmap = params[0] ? GL_TRUE : GL_FALSE;
+ texObj->Attrib.GenerateMipmap = params[0] ? GL_TRUE : GL_FALSE;
return GL_TRUE;
}
return GL_FALSE;
@@ -439,12 +439,12 @@ set_tex_parameteri(struct gl_context *ctx,
if (!_mesa_target_allows_setting_sampler_parameters(texObj->Target))
goto invalid_dsa;
- if (texObj->Sampler.CompareMode == params[0])
+ if (texObj->Sampler.Attrib.CompareMode == params[0])
return GL_FALSE;
if (params[0] == GL_NONE ||
params[0] == GL_COMPARE_R_TO_TEXTURE_ARB) {
flush(ctx);
- texObj->Sampler.CompareMode = params[0];
+ texObj->Sampler.Attrib.CompareMode = params[0];
return GL_TRUE;
}
goto invalid_param;
@@ -458,7 +458,7 @@ set_tex_parameteri(struct gl_context *ctx,
if (!_mesa_target_allows_setting_sampler_parameters(texObj->Target))
goto invalid_dsa;
- if (texObj->Sampler.CompareFunc == params[0])
+ if (texObj->Sampler.Attrib.CompareFunc == params[0])
return GL_FALSE;
switch (params[0]) {
case GL_LEQUAL:
@@ -470,7 +470,7 @@ set_tex_parameteri(struct gl_context *ctx,
case GL_ALWAYS:
case GL_NEVER:
flush(ctx);
- texObj->Sampler.CompareFunc = params[0];
+ texObj->Sampler.Attrib.CompareFunc = params[0];
return GL_TRUE;
default:
goto invalid_param;
@@ -483,14 +483,14 @@ set_tex_parameteri(struct gl_context *ctx,
* existed in OpenGL ES.
*/
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;
if (params[0] == GL_LUMINANCE ||
params[0] == GL_INTENSITY ||
params[0] == GL_ALPHA ||
(ctx->Extensions.ARB_texture_rg && params[0] == GL_RED)) {
flush(ctx);
- texObj->DepthMode = params[0];
+ texObj->Attrib.DepthMode = params[0];
return GL_TRUE;
}
goto invalid_param;
@@ -503,10 +503,10 @@ set_tex_parameteri(struct gl_context *ctx,
if (!stencil && params[0] != GL_DEPTH_COMPONENT)
goto invalid_param;
- if (texObj->StencilSampling == stencil)
+ if (texObj->Attrib.StencilSampling == stencil)
return GL_FALSE;
- texObj->StencilSampling = stencil;
+ texObj->Attrib.StencilSampling = stencil;
return GL_TRUE;
}
goto invalid_pname;
@@ -537,8 +537,8 @@ set_tex_parameteri(struct gl_context *ctx,
assert(comp < 4);
flush(ctx);
- texObj->Swizzle[comp] = params[0];
- set_swizzle_component(&texObj->_Swizzle, comp, swz);
+ texObj->Attrib.Swizzle[comp] = params[0];
+ set_swizzle_component(&texObj->Attrib._Swizzle, comp, swz);
return GL_TRUE;
}
goto invalid_pname;
@@ -551,8 +551,8 @@ set_tex_parameteri(struct gl_context *ctx,
for (comp = 0; comp < 4; comp++) {
const GLint swz = comp_to_swizzle(params[comp]);
if (swz >= 0) {
- texObj->Swizzle[comp] = params[comp];
- set_swizzle_component(&texObj->_Swizzle, comp, swz);
+ texObj->Attrib.Swizzle[comp] = params[comp];
+ set_swizzle_component(&texObj->Attrib._Swizzle, comp, swz);
}
else {
_mesa_error(ctx, GL_INVALID_ENUM,
@@ -573,9 +573,9 @@ set_tex_parameteri(struct gl_context *ctx,
goto invalid_dsa;
if (decode == GL_DECODE_EXT || decode == GL_SKIP_DECODE_EXT) {
- if (texObj->Sampler.sRGBDecode != decode) {
+ if (texObj->Sampler.Attrib.sRGBDecode != decode) {
flush(ctx);
- texObj->Sampler.sRGBDecode = decode;
+ texObj->Sampler.Attrib.sRGBDecode = decode;
}
return GL_TRUE;
}
@@ -593,9 +593,9 @@ set_tex_parameteri(struct gl_context *ctx,
if (param != GL_TRUE && param != GL_FALSE) {
goto invalid_param;
}
- if (param != texObj->Sampler.CubeMapSeamless) {
+ if (param != texObj->Sampler.Attrib.CubeMapSeamless) {
flush(ctx);
- texObj->Sampler.CubeMapSeamless = param;
+ texObj->Sampler.Attrib.CubeMapSeamless = param;
}
return GL_TRUE;
}
@@ -671,10 +671,10 @@ set_tex_parameterf(struct gl_context *ctx,
if (!_mesa_target_allows_setting_sampler_parameters(texObj->Target))
goto invalid_dsa;
- if (texObj->Sampler.MinLod == params[0])
+ if (texObj->Sampler.Attrib.MinLod == params[0])
return GL_FALSE;
flush(ctx);
- texObj->Sampler.MinLod = params[0];
+ texObj->Sampler.Attrib.MinLod = params[0];
return GL_TRUE;
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))
goto invalid_dsa;
- if (texObj->Sampler.MaxLod == params[0])
+ if (texObj->Sampler.Attrib.MaxLod == params[0])
return GL_FALSE;
flush(ctx);
- texObj->Sampler.MaxLod = params[0];
+ texObj->Sampler.Attrib.MaxLod = params[0];
return GL_TRUE;
case GL_TEXTURE_PRIORITY:
@@ -695,7 +695,7 @@ set_tex_parameterf(struct gl_context *ctx,
goto invalid_pname;
flush(ctx);
- texObj->Priority = CLAMP(params[0], 0.0F, 1.0F);
+ texObj->Attrib.Priority = CLAMP(params[0], 0.0F, 1.0F);
return GL_TRUE;
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))
goto invalid_dsa;
- if (texObj->Sampler.MaxAnisotropy == params[0])
+ if (texObj->Sampler.Attrib.MaxAnisotropy == params[0])
return GL_FALSE;
if (params[0] < 1.0F) {
_mesa_error(ctx, GL_INVALID_VALUE, "glTex%sParameter(param)",
@@ -712,7 +712,7 @@ set_tex_parameterf(struct gl_context *ctx,
}
flush(ctx);
/* clamp to max, that's what NVIDIA does */
- texObj->Sampler.MaxAnisotropy = MIN2(params[0],
+ texObj->Sampler.Attrib.MaxAnisotropy = MIN2(params[0],
ctx->Const.MaxTextureMaxAnisotropy);
return GL_TRUE;
}
@@ -731,9 +731,9 @@ set_tex_parameterf(struct gl_context *ctx,
if (!_mesa_target_allows_setting_sampler_parameters(texObj->Target))
goto invalid_dsa;
- if (texObj->Sampler.LodBias != params[0]) {
+ if (texObj->Sampler.Attrib.LodBias != params[0]) {
flush(ctx);
- texObj->Sampler.LodBias = params[0];
+ texObj->Sampler.Attrib.LodBias = params[0];
return GL_TRUE;
}
break;
@@ -757,15 +757,15 @@ set_tex_parameterf(struct gl_context *ctx,
flush(ctx);
/* ARB_texture_float disables clamping */
if (ctx->Extensions.ARB_texture_float) {
- texObj->Sampler.BorderColor.f[RCOMP] = params[0];
- texObj->Sampler.BorderColor.f[GCOMP] = params[1];
- texObj->Sampler.BorderColor.f[BCOMP] = params[2];
- texObj->Sampler.BorderColor.f[ACOMP] = params[3];
+ texObj->Sampler.Attrib.BorderColor.f[RCOMP] = params[0];
+ texObj->Sampler.Attrib.BorderColor.f[GCOMP] = params[1];
+ texObj->Sampler.Attrib.BorderColor.f[BCOMP] = params[2];
+ texObj->Sampler.Attrib.BorderColor.f[ACOMP] = params[3];
} else {
- texObj->Sampler.BorderColor.f[RCOMP] = CLAMP(params[0], 0.0F, 1.0F);
- texObj->Sampler.BorderColor.f[GCOMP] = CLAMP(params[1], 0.0F, 1.0F);
- texObj->Sampler.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[RCOMP] = CLAMP(params[0], 0.0F, 1.0F);
+ texObj->Sampler.Attrib.BorderColor.f[GCOMP] = CLAMP(params[1], 0.0F, 1.0F);
+ texObj->Sampler.Attrib.BorderColor.f[BCOMP] = CLAMP(params[2], 0.0F, 1.0F);
+ texObj->Sampler.Attrib.BorderColor.f[ACOMP] = CLAMP(params[3], 0.0F, 1.0F);
}
return GL_TRUE;
@@ -1028,7 +1028,7 @@ _mesa_texture_parameterIiv(struct gl_context *ctx,
}
FLUSH_VERTICES(ctx, _NEW_TEXTURE_OBJECT);
/* set the integer-valued border color */
- COPY_4V(texObj->Sampler.BorderColor.i, params);
+ COPY_4V(texObj->Sampler.Attrib.BorderColor.i, params);
break;
default:
_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);
/* set the unsigned integer-valued border color */
- COPY_4V(texObj->Sampler.BorderColor.ui, params);
+ COPY_4V(texObj->Sampler.Attrib.BorderColor.ui, params);
break;
default:
_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);
switch (pname) {
case GL_TEXTURE_MAG_FILTER:
- *params = ENUM_TO_FLOAT(obj->Sampler.MagFilter);
+ *params = ENUM_TO_FLOAT(obj->Sampler.Attrib.MagFilter);
break;
case GL_TEXTURE_MIN_FILTER:
- *params = ENUM_TO_FLOAT(obj->Sampler.MinFilter);
+ *params = ENUM_TO_FLOAT(obj->Sampler.Attrib.MinFilter);
break;
case GL_TEXTURE_WRAP_S:
- *params = ENUM_TO_FLOAT(obj->Sampler.WrapS);
+ *params = ENUM_TO_FLOAT(obj->Sampler.Attrib.WrapS);
break;
case GL_TEXTURE_WRAP_T:
- *params = ENUM_TO_FLOAT(obj->Sampler.WrapT);
+ *params = ENUM_TO_FLOAT(obj->Sampler.Attrib.WrapT);
break;
case GL_TEXTURE_WRAP_R:
- *params = ENUM_TO_FLOAT(obj->Sampler.WrapR);
+ *params = ENUM_TO_FLOAT(obj->Sampler.Attrib.WrapR);
break;
case GL_TEXTURE_BORDER_COLOR:
if (ctx->API == API_OPENGLES ||
@@ -2166,16 +2166,16 @@ get_tex_parameterfv(struct gl_context *ctx,
goto invalid_pname;
if (_mesa_get_clamp_fragment_color(ctx, ctx->DrawBuffer)) {
- params[0] = CLAMP(obj->Sampler.BorderColor.f[0], 0.0F, 1.0F);
- params[1] = CLAMP(obj->Sampler.BorderColor.f[1], 0.0F, 1.0F);
- params[2] = CLAMP(obj->Sampler.BorderColor.f[2], 0.0F, 1.0F);
- params[3] = CLAMP(obj->Sampler.BorderColor.f[3], 0.0F, 1.0F);
+ params[0] = CLAMP(obj->Sampler.Attrib.BorderColor.f[0], 0.0F, 1.0F);
+ params[1] = CLAMP(obj->Sampler.Attrib.BorderColor.f[1], 0.0F, 1.0F);
+ params[2] = CLAMP(obj->Sampler.Attrib.BorderColor.f[2], 0.0F, 1.0F);
+ params[3] = CLAMP(obj->Sampler.Attrib.BorderColor.f[3], 0.0F, 1.0F);
}
else {
- params[0] = obj->Sampler.BorderColor.f[0];
- params[1] = obj->Sampler.BorderColor.f[1];
- params[2] = obj->Sampler.BorderColor.f[2];
- params[3] = obj->Sampler.BorderColor.f[3];
+ params[0] = obj->Sampler.Attrib.BorderColor.f[0];
+ params[1] = obj->Sampler.Attrib.BorderColor.f[1];
+ params[2] = obj->Sampler.Attrib.BorderColor.f[2];
+ params[3] = obj->Sampler.Attrib.BorderColor.f[3];
}
break;
case GL_TEXTURE_RESIDENT:
@@ -2188,51 +2188,51 @@ get_tex_parameterfv(struct gl_context *ctx,
if (ctx->API != API_OPENGL_COMPAT)
goto invalid_pname;
- *params = obj->Priority;
+ *params = obj->Attrib.Priority;
break;
case GL_TEXTURE_MIN_LOD:
if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx))
goto invalid_pname;
- *params = obj->Sampler.MinLod;
+ *params = obj->Sampler.Attrib.MinLod;
break;
case GL_TEXTURE_MAX_LOD:
if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx))
goto invalid_pname;
- *params = obj->Sampler.MaxLod;
+ *params = obj->Sampler.Attrib.MaxLod;
break;
case GL_TEXTURE_BASE_LEVEL:
if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx))
goto invalid_pname;
- *params = (GLfloat) obj->BaseLevel;
+ *params = (GLfloat) obj->Attrib.BaseLevel;
break;
case GL_TEXTURE_MAX_LEVEL:
- *params = (GLfloat) obj->MaxLevel;
+ *params = (GLfloat) obj->Attrib.MaxLevel;
break;
case GL_TEXTURE_MAX_ANISOTROPY_EXT:
if (!ctx->Extensions.EXT_texture_filter_anisotropic)
goto invalid_pname;
- *params = obj->Sampler.MaxAnisotropy;
+ *params = obj->Sampler.Attrib.MaxAnisotropy;
break;
case GL_GENERATE_MIPMAP_SGIS:
if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES)
goto invalid_pname;
- *params = (GLfloat) obj->GenerateMipmap;
+ *params = (GLfloat) obj->Attrib.GenerateMipmap;
break;
case GL_TEXTURE_COMPARE_MODE_ARB:
if ((!_mesa_is_desktop_gl(ctx) || !ctx->Extensions.ARB_shadow)
&& !_mesa_is_gles3(ctx))
goto invalid_pname;
- *params = (GLfloat) obj->Sampler.CompareMode;
+ *params = (GLfloat) obj->Sampler.Attrib.CompareMode;
break;
case GL_TEXTURE_COMPARE_FUNC_ARB:
if ((!_mesa_is_desktop_gl(ctx) || !ctx->Extensions.ARB_shadow)
&& !_mesa_is_gles3(ctx))
goto invalid_pname;
- *params = (GLfloat) obj->Sampler.CompareFunc;
+ *params = (GLfloat) obj->Sampler.Attrib.CompareFunc;
break;
case GL_DEPTH_TEXTURE_MODE_ARB:
/* 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)
goto invalid_pname;
- *params = (GLfloat) obj->DepthMode;
+ *params = (GLfloat) obj->Attrib.DepthMode;
break;
case GL_DEPTH_STENCIL_TEXTURE_MODE:
if (!_mesa_has_ARB_stencil_texturing(ctx) && !_mesa_is_gles31(ctx))
goto invalid_pname;
*params = (GLfloat)
- (obj->StencilSampling ? GL_STENCIL_INDEX : GL_DEPTH_COMPONENT);
+ (obj->Attrib.StencilSampling ? GL_STENCIL_INDEX : GL_DEPTH_COMPONENT);
break;
case GL_TEXTURE_LOD_BIAS:
if (_mesa_is_gles(ctx))
goto invalid_pname;
- *params = obj->Sampler.LodBias;
+ *params = obj->Sampler.Attrib.LodBias;
break;
case GL_TEXTURE_CROP_RECT_OES:
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)
&& !_mesa_is_gles3(ctx))
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;
case GL_TEXTURE_SWIZZLE_RGBA_EXT:
@@ -2284,7 +2284,7 @@ get_tex_parameterfv(struct gl_context *ctx,
else {
GLuint comp;
for (comp = 0; comp < 4; comp++) {
- params[comp] = (GLfloat) obj->Swizzle[comp];
+ params[comp] = (GLfloat) obj->Attrib.Swizzle[comp];
}
}
break;
@@ -2293,7 +2293,7 @@ get_tex_parameterfv(struct gl_context *ctx,
if (!_mesa_is_desktop_gl(ctx)
|| !ctx->Extensions.AMD_seamless_cubemap_per_texture)
goto invalid_pname;
- *params = (GLfloat) obj->Sampler.CubeMapSeamless;
+ *params = (GLfloat) obj->Sampler.Attrib.CubeMapSeamless;
break;
case GL_TEXTURE_IMMUTABLE_FORMAT:
@@ -2340,7 +2340,7 @@ get_tex_parameterfv(struct gl_context *ctx,
case GL_TEXTURE_SRGB_DECODE_EXT:
if (!ctx->Extensions.EXT_texture_sRGB_decode)
goto invalid_pname;
- *params = (GLfloat) obj->Sampler.sRGBDecode;
+ *params = (GLfloat) obj->Sampler.Attrib.sRGBDecode;
break;
case GL_IMAGE_FORMAT_COMPATIBILITY_TYPE:
@@ -2384,19 +2384,19 @@ get_tex_parameteriv(struct gl_context *ctx,
_mesa_lock_texture(ctx, obj);
switch (pname) {
case GL_TEXTURE_MAG_FILTER:
- *params = (GLint) obj->Sampler.MagFilter;
+ *params = (GLint) obj->Sampler.Attrib.MagFilter;
break;
case GL_TEXTURE_MIN_FILTER:
- *params = (GLint) obj->Sampler.MinFilter;
+ *params = (GLint) obj->Sampler.Attrib.MinFilter;
break;
case GL_TEXTURE_WRAP_S:
- *params = (GLint) obj->Sampler.WrapS;
+ *params = (GLint) obj->Sampler.Attrib.WrapS;
break;
case GL_TEXTURE_WRAP_T:
- *params = (GLint) obj->Sampler.WrapT;
+ *params = (GLint) obj->Sampler.Attrib.WrapT;
break;
case GL_TEXTURE_WRAP_R:
- *params = (GLint) obj->Sampler.WrapR;
+ *params = (GLint) obj->Sampler.Attrib.WrapR;
break;
case GL_TEXTURE_BORDER_COLOR:
if (ctx->API == API_OPENGLES ||
@@ -2405,10 +2405,10 @@ get_tex_parameteriv(struct gl_context *ctx,
{
GLfloat b[4];
- b[0] = CLAMP(obj->Sampler.BorderColor.f[0], 0.0F, 1.0F);
- b[1] = CLAMP(obj->Sampler.BorderColor.f[1], 0.0F, 1.0F);
- b[2] = CLAMP(obj->Sampler.BorderColor.f[2], 0.0F, 1.0F);
- b[3] = CLAMP(obj->Sampler.BorderColor.f[3], 0.0F, 1.0F);
+ b[0] = CLAMP(obj->Sampler.Attrib.BorderColor.f[0], 0.0F, 1.0F);
+ b[1] = CLAMP(obj->Sampler.Attrib.BorderColor.f[1], 0.0F, 1.0F);
+ b[2] = CLAMP(obj->Sampler.Attrib.BorderColor.f[2], 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[1] = FLOAT_TO_INT(b[1]);
params[2] = FLOAT_TO_INT(b[2]);
@@ -2425,7 +2425,7 @@ get_tex_parameteriv(struct gl_context *ctx,
if (ctx->API != API_OPENGL_COMPAT)
goto invalid_pname;
- *params = FLOAT_TO_INT(obj->Priority);
+ *params = FLOAT_TO_INT(obj->Attrib.Priority);
break;
case GL_TEXTURE_MIN_LOD:
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
* 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;
case GL_TEXTURE_MAX_LOD:
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
* 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;
case GL_TEXTURE_BASE_LEVEL:
if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx))
goto invalid_pname;
- *params = obj->BaseLevel;
+ *params = obj->Attrib.BaseLevel;
break;
case GL_TEXTURE_MAX_LEVEL:
- *params = obj->MaxLevel;
+ *params = obj->Attrib.MaxLevel;
break;
case GL_TEXTURE_MAX_ANISOTROPY_EXT:
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
* 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;
case GL_GENERATE_MIPMAP_SGIS:
if (ctx->API != API_OPENGL_COMPAT && ctx->API != API_OPENGLES)
goto invalid_pname;
- *params = (GLint) obj->GenerateMipmap;
+ *params = (GLint) obj->Attrib.GenerateMipmap;
break;
case GL_TEXTURE_COMPARE_MODE_ARB:
if ((!_mesa_is_desktop_gl(ctx) || !ctx->Extensions.ARB_shadow)
&& !_mesa_is_gles3(ctx))
goto invalid_pname;
- *params = (GLint) obj->Sampler.CompareMode;
+ *params = (GLint) obj->Sampler.Attrib.CompareMode;
break;
case GL_TEXTURE_COMPARE_FUNC_ARB:
if ((!_mesa_is_desktop_gl(ctx) || !ctx->Extensions.ARB_shadow)
&& !_mesa_is_gles3(ctx))
goto invalid_pname;
- *params = (GLint) obj->Sampler.CompareFunc;
+ *params = (GLint) obj->Sampler.Attrib.CompareFunc;
break;
case GL_DEPTH_TEXTURE_MODE_ARB:
if (ctx->API != API_OPENGL_COMPAT || !ctx->Extensions.ARB_depth_texture)
goto invalid_pname;
- *params = (GLint) obj->DepthMode;
+ *params = (GLint) obj->Attrib.DepthMode;
break;
case GL_DEPTH_STENCIL_TEXTURE_MODE:
if (!_mesa_has_ARB_stencil_texturing(ctx) && !_mesa_is_gles31(ctx))
goto invalid_pname;
*params = (GLint)
- (obj->StencilSampling ? GL_STENCIL_INDEX : GL_DEPTH_COMPONENT);
+ (obj->Attrib.StencilSampling ? GL_STENCIL_INDEX : GL_DEPTH_COMPONENT);
break;
case GL_TEXTURE_LOD_BIAS:
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
* 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;
case GL_TEXTURE_CROP_RECT_OES:
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)
&& !_mesa_is_gles3(ctx))
goto invalid_pname;
- *params = obj->Swizzle[pname - GL_TEXTURE_SWIZZLE_R_EXT];
+ *params = obj->Attrib.Swizzle[pname - GL_TEXTURE_SWIZZLE_R_EXT];
break;
case GL_TEXTURE_SWIZZLE_RGBA_EXT:
@@ -2551,14 +2551,14 @@ get_tex_parameteriv(struct gl_context *ctx,
|| !ctx->Extensions.EXT_texture_swizzle)
&& !_mesa_is_gles3(ctx))
goto invalid_pname;
- COPY_4V(params, obj->Swizzle);
+ COPY_4V(params, obj->Attrib.Swizzle);
break;
case GL_TEXTURE_CUBE_MAP_SEAMLESS:
if (!_mesa_is_desktop_gl(ctx)
|| !ctx->Extensions.AMD_seamless_cubemap_per_texture)
goto invalid_pname;
- *params = (GLint) obj->Sampler.CubeMapSeamless;
+ *params = (GLint) obj->Sampler.Attrib.CubeMapSeamless;
break;
case GL_TEXTURE_IMMUTABLE_FORMAT:
@@ -2606,7 +2606,7 @@ get_tex_parameteriv(struct gl_context *ctx,
case GL_TEXTURE_SRGB_DECODE_EXT:
if (!ctx->Extensions.EXT_texture_sRGB_decode)
goto invalid_pname;
- *params = obj->Sampler.sRGBDecode;
+ *params = obj->Sampler.Attrib.sRGBDecode;
break;
case GL_IMAGE_FORMAT_COMPATIBILITY_TYPE:
@@ -2648,7 +2648,7 @@ get_tex_parameterIiv(struct gl_context *ctx,
{
switch (pname) {
case GL_TEXTURE_BORDER_COLOR:
- COPY_4V(params, obj->Sampler.BorderColor.i);
+ COPY_4V(params, obj->Sampler.Attrib.BorderColor.i);
break;
default:
get_tex_parameteriv(ctx, obj, pname, params, dsa);
diff --git a/src/mesa/main/texstate.c b/src/mesa/main/texstate.c
index 0d1c0ea449a..dd4c64f87a1 100644
--- a/src/mesa/main/texstate.c
+++ b/src/mesa/main/texstate.c
@@ -529,10 +529,10 @@ update_tex_combine(struct gl_context *ctx,
}
else {
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) {
- format = texObj->DepthMode;
+ format = texObj->Attrib.DepthMode;
}
calculate_derived_texenv(&fftexUnit->_EnvMode, fftexUnit->EnvMode, format);
fftexUnit->_CurrentCombine = & fftexUnit->_EnvMode;
diff --git a/src/mesa/main/texturebindless.c b/src/mesa/main/texturebindless.c
index a4d700e6362..939c01dd021 100644
--- a/src/mesa/main/texturebindless.c
+++ b/src/mesa/main/texturebindless.c
@@ -510,7 +510,7 @@ is_sampler_border_color_valid(struct gl_sampler_object *samp)
{ 1, 1, 1, 0 },
{ 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:
*
@@ -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
* (1.0,1.0,1.0,1.0)."
*/
- if (!memcmp(samp->BorderColor.f, valid_float_border_colors[0], size) ||
- !memcmp(samp->BorderColor.f, valid_float_border_colors[1], size) ||
- !memcmp(samp->BorderColor.f, valid_float_border_colors[2], size) ||
- !memcmp(samp->BorderColor.f, valid_float_border_colors[3], size))
+ if (!memcmp(samp->Attrib.BorderColor.f, valid_float_border_colors[0], size) ||
+ !memcmp(samp->Attrib.BorderColor.f, valid_float_border_colors[1], size) ||
+ !memcmp(samp->Attrib.BorderColor.f, valid_float_border_colors[2], size) ||
+ !memcmp(samp->Attrib.BorderColor.f, valid_float_border_colors[3], size))
return GL_TRUE;
- if (!memcmp(samp->BorderColor.ui, valid_integer_border_colors[0], size) ||
- !memcmp(samp->BorderColor.ui, valid_integer_border_colors[1], size) ||
- !memcmp(samp->BorderColor.ui, valid_integer_border_colors[2], size) ||
- !memcmp(samp->BorderColor.ui, valid_integer_border_colors[3], size))
+ if (!memcmp(samp->Attrib.BorderColor.ui, valid_integer_border_colors[0], size) ||
+ !memcmp(samp->Attrib.BorderColor.ui, valid_integer_border_colors[1], size) ||
+ !memcmp(samp->Attrib.BorderColor.ui, valid_integer_border_colors[2], size) ||
+ !memcmp(samp->Attrib.BorderColor.ui, valid_integer_border_colors[3], size))
return GL_TRUE;
return GL_FALSE;
diff --git a/src/mesa/state_tracker/st_atom_sampler.c b/src/mesa/state_tracker/st_atom_sampler.c
index b3711292153..50fd4ecafa2 100644
--- a/src/mesa/state_tracker/st_atom_sampler.c
+++ b/src/mesa/state_tracker/st_atom_sampler.c
@@ -110,23 +110,23 @@ st_convert_sampler(const struct st_context *st,
struct pipe_sampler_state *sampler)
{
memset(sampler, 0, sizeof(*sampler));
- sampler->wrap_s = gl_wrap_xlate(msamp->WrapS);
- sampler->wrap_t = gl_wrap_xlate(msamp->WrapT);
- sampler->wrap_r = gl_wrap_xlate(msamp->WrapR);
+ sampler->wrap_s = gl_wrap_xlate(msamp->Attrib.WrapS);
+ sampler->wrap_t = gl_wrap_xlate(msamp->Attrib.WrapT);
+ sampler->wrap_r = gl_wrap_xlate(msamp->Attrib.WrapR);
if (texobj->_IsIntegerFormat && st->ctx->Const.ForceIntegerTexNearest) {
sampler->min_img_filter = gl_filter_to_img_filter(GL_NEAREST);
sampler->mag_img_filter = gl_filter_to_img_filter(GL_NEAREST);
} else {
- sampler->min_img_filter = gl_filter_to_img_filter(msamp->MinFilter);
- sampler->mag_img_filter = gl_filter_to_img_filter(msamp->MagFilter);
+ sampler->min_img_filter = gl_filter_to_img_filter(msamp->Attrib.MinFilter);
+ 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)
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
* can represent. Apps use lod_bias for smooth transitions to bigger mipmap
* 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 = roundf(sampler->lod_bias * 256) / 256;
- sampler->min_lod = MAX2(msamp->MinLod, 0.0f);
- sampler->max_lod = msamp->MaxLod;
+ sampler->min_lod = MAX2(msamp->Attrib.MinLod, 0.0f);
+ sampler->max_lod = msamp->Attrib.MaxLod;
if (sampler->max_lod < sampler->min_lod) {
/* The GL spec doesn't seem to specify what to do in this case.
* Swap the values.
@@ -161,14 +161,14 @@ st_convert_sampler(const struct st_context *st,
/* For non-black borders... */
if (/* This is true if wrap modes are using the border color: */
(sampler->wrap_s | sampler->wrap_t | sampler->wrap_r) & 0x1 &&
- (msamp->BorderColor.ui[0] ||
- msamp->BorderColor.ui[1] ||
- msamp->BorderColor.ui[2] ||
- msamp->BorderColor.ui[3])) {
+ (msamp->Attrib.BorderColor.ui[0] ||
+ msamp->Attrib.BorderColor.ui[1] ||
+ msamp->Attrib.BorderColor.ui[2] ||
+ msamp->Attrib.BorderColor.ui[3])) {
const GLboolean is_integer = texobj->_IsIntegerFormat;
GLenum texBaseFormat = _mesa_base_tex_image(texobj)->_BaseFormat;
- if (texobj->StencilSampling)
+ if (texobj->Attrib.StencilSampling)
texBaseFormat = GL_STENCIL_INDEX;
if (st->apply_texture_swizzle_to_border_color) {
@@ -187,34 +187,34 @@ st_convert_sampler(const struct st_context *st,
view->swizzle_a,
};
- st_translate_color(&msamp->BorderColor, &tmp,
+ st_translate_color(&msamp->Attrib.BorderColor, &tmp,
texBaseFormat, is_integer);
util_format_apply_color_swizzle(&sampler->border_color,
&tmp, swz, is_integer);
} else {
- st_translate_color(&msamp->BorderColor,
+ st_translate_color(&msamp->Attrib.BorderColor,
&sampler->border_color,
texBaseFormat, is_integer);
}
} else {
- st_translate_color(&msamp->BorderColor,
+ st_translate_color(&msamp->Attrib.BorderColor,
&sampler->border_color,
texBaseFormat, is_integer);
}
}
- sampler->max_anisotropy = (msamp->MaxAnisotropy == 1.0 ?
- 0 : (GLuint) msamp->MaxAnisotropy);
+ sampler->max_anisotropy = (msamp->Attrib.MaxAnisotropy == 1.0 ?
+ 0 : (GLuint) msamp->Attrib.MaxAnisotropy);
/* 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;
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_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
* handles, as specified by ARB_bindless_texture.
*/
- sampler->seamless_cube_map = msamp->CubeMapSeamless;
+ sampler->seamless_cube_map = msamp->Attrib.CubeMapSeamless;
}
/**
diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c
index 2296dd614a6..2b379c14cfa 100644
--- a/src/mesa/state_tracker/st_cb_texture.c
+++ b/src/mesa/state_tracker/st_cb_texture.c
@@ -546,7 +546,7 @@ allocate_full_mipmap(const struct st_texture_object *stObj,
return FALSE;
}
- if (stImage->base.Level > 0 || stObj->base.GenerateMipmap)
+ if (stImage->base.Level > 0 || stObj->base.Attrib.GenerateMipmap)
return TRUE;
/* 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
* MAX_TEXTURE_LEVELS, so we check that to see if it's been set at all.
*/
- if (stObj->base.MaxLevel < MAX_TEXTURE_LEVELS &&
- stObj->base.MaxLevel - stObj->base.BaseLevel > 0)
+ if (stObj->base.Attrib.MaxLevel < MAX_TEXTURE_LEVELS &&
+ stObj->base.Attrib.MaxLevel - stObj->base.Attrib.BaseLevel > 0)
return TRUE;
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 */
return FALSE;
- if (stObj->base.BaseLevel == 0 && stObj->base.MaxLevel == 0)
+ if (stObj->base.Attrib.BaseLevel == 0 && stObj->base.Attrib.MaxLevel == 0)
return FALSE;
- if (stObj->base.Sampler.MinFilter == GL_NEAREST ||
- stObj->base.Sampler.MinFilter == GL_LINEAR)
+ if (stObj->base.Sampler.Attrib.MinFilter == GL_NEAREST ||
+ stObj->base.Sampler.Attrib.MinFilter == GL_LINEAR)
/* not a mipmap minification filter */
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
* 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;
if (stObj->base.Target == GL_TEXTURE_3D)
@@ -2676,14 +2676,14 @@ st_finalize_texture(struct gl_context *ctx,
if (tObj->_MipmapComplete)
stObj->lastLevel = stObj->base._MaxLevel;
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
* 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.
*/
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) {
return GL_TRUE;
}
@@ -2694,7 +2694,7 @@ st_finalize_texture(struct gl_context *ctx,
}
firstImage = st_texture_image_const(stObj->base.Image[cubeMapFace]
- [stObj->base.BaseLevel]);
+ [stObj->base.Attrib.BaseLevel]);
assert(firstImage);
/* 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++) {
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 =
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->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 */
pt.last_level = numLevels - 1;
}
- else if (level == 0 && (texObj->Sampler.MinFilter == GL_LINEAR ||
- texObj->Sampler.MinFilter == GL_NEAREST)) {
+ else if (level == 0 && (texObj->Sampler.Attrib.MinFilter == GL_LINEAR ||
+ texObj->Sampler.Attrib.MinFilter == GL_NEAREST)) {
/* assume just one mipmap level */
pt.last_level = 0;
}
diff --git a/src/mesa/state_tracker/st_gen_mipmap.c b/src/mesa/state_tracker/st_gen_mipmap.c
index 90b0b2d9745..eb7d255d232 100644
--- a/src/mesa/state_tracker/st_gen_mipmap.c
+++ b/src/mesa/state_tracker/st_gen_mipmap.c
@@ -56,7 +56,7 @@ st_generate_mipmap(struct gl_context *ctx, GLenum target,
struct st_context *st = st_context(ctx);
struct st_texture_object *stObj = st_texture_object(texObj);
struct pipe_resource *pt = st_get_texobj_resource(texObj);
- uint baseLevel = texObj->BaseLevel;
+ uint baseLevel = texObj->Attrib.BaseLevel;
enum pipe_format format;
uint lastLevel, first_layer, last_layer;
@@ -88,16 +88,16 @@ st_generate_mipmap(struct gl_context *ctx, GLenum target,
stObj->lastLevel = lastLevel;
if (!texObj->Immutable) {
- const GLboolean genSave = texObj->GenerateMipmap;
+ const GLboolean genSave = texObj->Attrib.GenerateMipmap;
/* Temporarily set GenerateMipmap to true so that allocate_full_mipmap()
* 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);
- texObj->GenerateMipmap = genSave;
+ texObj->Attrib.GenerateMipmap = genSave;
/* At this point, memory for all the texture levels has been
* 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
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);
/* First see if the driver supports hardware mipmap generation,
diff --git a/src/mesa/state_tracker/st_sampler_view.c b/src/mesa/state_tracker/st_sampler_view.c
index 6d7ab315951..1516d0deb6b 100644
--- a/src/mesa/state_tracker/st_sampler_view.c
+++ b/src/mesa/state_tracker/st_sampler_view.c
@@ -396,7 +396,7 @@ get_texture_format_swizzle(const struct st_context *st,
{
GLenum baseFormat = _mesa_base_tex_image(&stObj->base)->_BaseFormat;
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
* 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);
/* 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 ||
baseFormat == GL_DEPTH_STENCIL ||
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);
return format;
@@ -541,7 +541,7 @@ st_create_texture_sampler_view_from_stobj(struct st_context *st,
if (stObj->level_override >= 0) {
templ.u.tex.first_level = templ.u.tex.last_level = stObj->level_override;
} 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);
}
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;
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;
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(gl_target_to_pipe(stObj->base.Target) == view->target);
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->layer_override >= 0 || stObj->base.MinLayer == view->u.tex.first_layer);
assert(stObj->layer_override >= 0 || last_layer(stObj) == view->u.tex.last_layer);
diff --git a/src/mesa/swrast/s_fragprog.c b/src/mesa/swrast/s_fragprog.c
index 6fb793fb621..6fbf7bc3c51 100644
--- a/src/mesa/swrast/s_fragprog.c
+++ b/src/mesa/swrast/s_fragprog.c
@@ -87,12 +87,12 @@ fetch_texel_lod( struct gl_context *ctx, const GLfloat texcoord[4], GLfloat lamb
GLfloat rgba[4];
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,
1, (const GLfloat (*)[4]) texcoord,
&lambda, &rgba);
- swizzle_texel(rgba, color, texObj->_Swizzle);
+ swizzle_texel(rgba, color, texObj->Attrib._Swizzle);
}
else {
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],
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,
1, (const GLfloat (*)[4]) texcoord,
&lambda, &rgba);
- swizzle_texel(rgba, color, texObj->_Swizzle);
+ swizzle_texel(rgba, color, texObj->Attrib._Swizzle);
}
else {
ASSIGN_4V(color, 0.0F, 0.0F, 0.0F, 1.0F);
diff --git a/src/mesa/swrast/s_span.c b/src/mesa/swrast/s_span.c
index dcb2db01e6d..d1933e32929 100644
--- a/src/mesa/swrast/s_span.c
+++ b/src/mesa/swrast/s_span.c
@@ -504,13 +504,13 @@ interpolate_texcoords(struct gl_context *ctx, SWspan *span)
swrast_texture_image_const(img);
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);
/* LOD is calculated directly in the ansiotropic filter, we can
* skip the normal lambda function as the result is ignored.
*/
- if (samp->MaxAnisotropy > 1.0F &&
- samp->MinFilter == GL_LINEAR_MIPMAP_LINEAR) {
+ if (samp->Attrib.MaxAnisotropy > 1.0F &&
+ samp->Attrib.MinFilter == GL_LINEAR_MIPMAP_LINEAR) {
needLambda = GL_FALSE;
}
texW = swImg->WidthScale;
diff --git a/src/mesa/swrast/s_texcombine.c b/src/mesa/swrast/s_texcombine.c
index 1ee906effd9..4e177ceb668 100644
--- a/src/mesa/swrast/s_texcombine.c
+++ b/src/mesa/swrast/s_texcombine.c
@@ -660,9 +660,9 @@ _swrast_texture_span( struct gl_context *ctx, SWspan *span )
/* adjust texture lod (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 */
- const GLfloat bias = CLAMP(texUnit->LodBias + samp->LodBias,
+ const GLfloat bias = CLAMP(texUnit->LodBias + samp->Attrib.LodBias,
-ctx->Const.MaxTextureLodBias,
ctx->Const.MaxTextureLodBias);
GLuint i;
@@ -671,11 +671,11 @@ _swrast_texture_span( struct gl_context *ctx, SWspan *span )
}
}
- if (samp->MinLod != -1000.0F ||
- samp->MaxLod != 1000.0F) {
+ if (samp->Attrib.MinLod != -1000.0F ||
+ samp->Attrib.MaxLod != 1000.0F) {
/* apply LOD clamping to lambda */
- const GLfloat min = samp->MinLod;
- const GLfloat max = samp->MaxLod;
+ const GLfloat min = samp->Attrib.MinLod;
+ const GLfloat max = samp->Attrib.MaxLod;
GLuint i;
for (i = 0; i < span->end; i++) {
GLfloat l = lambda[i];
@@ -683,8 +683,8 @@ _swrast_texture_span( struct gl_context *ctx, SWspan *span )
}
}
}
- else if (samp->MaxAnisotropy > 1.0F &&
- samp->MinFilter == GL_LINEAR_MIPMAP_LINEAR) {
+ else if (samp->Attrib.MaxAnisotropy > 1.0F &&
+ samp->Attrib.MinFilter == GL_LINEAR_MIPMAP_LINEAR) {
/* sample_lambda_2d_aniso is beeing used as texture_sample_func,
* it requires the current SWspan *span as an additional parameter.
* 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 );
/* GL_EXT_texture_swizzle */
- if (curObj->_Swizzle != SWIZZLE_NOOP) {
- swizzle_texels(curObj->_Swizzle, span->end, texels);
+ if (curObj->Attrib._Swizzle != SWIZZLE_NOOP) {
+ swizzle_texels(curObj->Attrib._Swizzle, span->end, texels);
}
}
}
diff --git a/src/mesa/swrast/s_texfetch.c b/src/mesa/swrast/s_texfetch.c
index cae8268b3aa..5963948d220 100644
--- a/src/mesa/swrast/s_texfetch.c
+++ b/src/mesa/swrast/s_texfetch.c
@@ -312,7 +312,7 @@ set_fetch_functions(const struct gl_sampler_object *samp,
{
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);
texImage->FetchTexel = NULL;
diff --git a/src/mesa/swrast/s_texfilter.c b/src/mesa/swrast/s_texfilter.c
index 28bd57be8a1..e78f71ec9eb 100644
--- a/src/mesa/swrast/s_texfilter.c
+++ b/src/mesa/swrast/s_texfilter.c
@@ -515,28 +515,28 @@ nearest_texcoord(const struct gl_sampler_object *samp,
switch (texObj->Target) {
case GL_TEXTURE_RECTANGLE_ARB:
- *i = clamp_rect_coord_nearest(samp->WrapS, texcoord[0], width);
- *j = clamp_rect_coord_nearest(samp->WrapT, texcoord[1], height);
+ *i = clamp_rect_coord_nearest(samp->Attrib.WrapS, texcoord[0], width);
+ *j = clamp_rect_coord_nearest(samp->Attrib.WrapT, texcoord[1], height);
*k = 0;
break;
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;
*k = 0;
break;
case GL_TEXTURE_2D:
- *i = nearest_texel_location(samp->WrapS, img, width, texcoord[0]);
- *j = nearest_texel_location(samp->WrapT, img, height, texcoord[1]);
+ *i = nearest_texel_location(samp->Attrib.WrapS, img, width, texcoord[0]);
+ *j = nearest_texel_location(samp->Attrib.WrapT, img, height, texcoord[1]);
*k = 0;
break;
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);
*k = 0;
break;
case GL_TEXTURE_2D_ARRAY_EXT:
- *i = nearest_texel_location(samp->WrapS, img, width, texcoord[0]);
- *j = nearest_texel_location(samp->WrapT, img, height, texcoord[1]);
+ *i = nearest_texel_location(samp->Attrib.WrapS, img, width, texcoord[0]);
+ *j = nearest_texel_location(samp->Attrib.WrapT, img, height, texcoord[1]);
*k = tex_array_slice(texcoord[2], depth);
break;
default:
@@ -565,24 +565,24 @@ linear_texcoord(const struct gl_sampler_object *samp,
switch (texObj->Target) {
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);
- clamp_rect_coord_linear(samp->WrapT, texcoord[1],
+ clamp_rect_coord_linear(samp->Attrib.WrapT, texcoord[1],
height, j0, j1, wj);
*slice = 0;
break;
case GL_TEXTURE_1D:
case GL_TEXTURE_2D:
- linear_texel_locations(samp->WrapS, img, width,
+ linear_texel_locations(samp->Attrib.WrapS, img, width,
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);
*slice = 0;
break;
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);
*j0 = tex_array_slice(texcoord[1], height);
*j1 = *j0;
@@ -590,9 +590,9 @@ linear_texcoord(const struct gl_sampler_object *samp,
break;
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);
- linear_texel_locations(samp->WrapT, img, height,
+ linear_texel_locations(samp->Attrib.WrapT, img, height,
texcoord[1], j0, j1, wj);
*slice = tex_array_slice(texcoord[2], depth);
break;
@@ -613,11 +613,11 @@ static GLint
linear_mipmap_level(const struct gl_texture_object *tObj, GLfloat lambda)
{
if (lambda < 0.0F)
- return tObj->BaseLevel;
+ return tObj->Attrib.BaseLevel;
else if (lambda > tObj->_MaxLambda)
- return (GLint) (tObj->BaseLevel + tObj->_MaxLambda);
+ return (GLint) (tObj->Attrib.BaseLevel + tObj->_MaxLambda);
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;
else
l = lambda;
- level = (GLint) (tObj->BaseLevel + l + 0.5F);
+ level = (GLint) (tObj->Attrib.BaseLevel + l + 0.5F);
if (level > tObj->_MaxLevel)
level = tObj->_MaxLevel;
return level;
@@ -669,12 +669,12 @@ compute_min_mag_ranges(const struct gl_sampler_object *samp,
GLfloat minMagThresh;
/* 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: */
- if (samp->MagFilter == GL_LINEAR
- && (samp->MinFilter == GL_NEAREST_MIPMAP_NEAREST ||
- samp->MinFilter == GL_NEAREST_MIPMAP_LINEAR)) {
+ if (samp->Attrib.MagFilter == GL_LINEAR
+ && (samp->Attrib.MinFilter == GL_NEAREST_MIPMAP_NEAREST ||
+ samp->Attrib.MinFilter == GL_NEAREST_MIPMAP_LINEAR)) {
minMagThresh = 0.5F;
}
else {
@@ -776,28 +776,28 @@ get_border_color(const struct gl_sampler_object *samp,
{
switch (img->_BaseFormat) {
case GL_RGB:
- rgba[0] = samp->BorderColor.f[0];
- rgba[1] = samp->BorderColor.f[1];
- rgba[2] = samp->BorderColor.f[2];
+ rgba[0] = samp->Attrib.BorderColor.f[0];
+ rgba[1] = samp->Attrib.BorderColor.f[1];
+ rgba[2] = samp->Attrib.BorderColor.f[2];
rgba[3] = 1.0F;
break;
case GL_ALPHA:
rgba[0] = rgba[1] = rgba[2] = 0.0;
- rgba[3] = samp->BorderColor.f[3];
+ rgba[3] = samp->Attrib.BorderColor.f[3];
break;
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;
break;
case GL_LUMINANCE_ALPHA:
- rgba[0] = rgba[1] = rgba[2] = samp->BorderColor.f[0];
- rgba[3] = samp->BorderColor.f[3];
+ rgba[0] = rgba[1] = rgba[2] = samp->Attrib.BorderColor.f[0];
+ rgba[3] = samp->Attrib.BorderColor.f[3];
break;
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;
default:
- COPY_4V(rgba, samp->BorderColor.f);
+ COPY_4V(rgba, samp->Attrib.BorderColor.f);
break;
}
}
@@ -855,7 +855,7 @@ sample_1d_nearest(struct gl_context *ctx,
const struct swrast_texture_image *swImg = swrast_texture_image_const(img);
const GLint width = img->Width2; /* without border, power of two */
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 */
i += img->Border;
if (i < 0 || i >= (GLint) img->Width) {
@@ -884,7 +884,7 @@ sample_1d_linear(struct gl_context *ctx,
GLfloat a;
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) {
i0 += img->Border;
@@ -1050,7 +1050,7 @@ sample_lambda_1d( struct gl_context *ctx,
if (minStart < minEnd) {
/* do the minified texels */
const GLuint m = minEnd - minStart;
- switch (samp->MinFilter) {
+ switch (samp->Attrib.MinFilter) {
case GL_NEAREST:
for (i = minStart; i < minEnd; i++)
sample_1d_nearest(ctx, samp, _mesa_base_tex_image(tObj),
@@ -1085,7 +1085,7 @@ sample_lambda_1d( struct gl_context *ctx,
if (magStart < magEnd) {
/* do the magnified texels */
- switch (samp->MagFilter) {
+ switch (samp->Attrib.MagFilter) {
case GL_NEAREST:
for (i = magStart; i < magEnd; i++)
sample_1d_nearest(ctx, samp, _mesa_base_tex_image(tObj),
@@ -1125,8 +1125,8 @@ sample_2d_nearest(struct gl_context *ctx,
GLint i, j;
(void) ctx;
- i = nearest_texel_location(samp->WrapS, img, width, texcoord[0]);
- j = nearest_texel_location(samp->WrapT, img, height, texcoord[1]);
+ i = nearest_texel_location(samp->Attrib.WrapS, img, width, texcoord[0]);
+ j = nearest_texel_location(samp->Attrib.WrapT, img, height, texcoord[1]);
/* skip over the border, if any */
i += img->Border;
@@ -1161,8 +1161,8 @@ sample_2d_linear(struct gl_context *ctx,
GLfloat a, b;
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->WrapT, img, height, texcoord[1], &j0, &j1, &b);
+ linear_texel_locations(samp->Attrib.WrapS, img, width, texcoord[0], &i0, &i1, &a);
+ linear_texel_locations(samp->Attrib.WrapT, img, height, texcoord[1], &j0, &j1, &b);
if (img->Border) {
i0 += img->Border;
@@ -1227,8 +1227,8 @@ sample_2d_linear_repeat(struct gl_context *ctx,
(void) ctx;
- assert(samp->WrapS == GL_REPEAT);
- assert(samp->WrapT == GL_REPEAT);
+ assert(samp->Attrib.WrapS == GL_REPEAT);
+ assert(samp->Attrib.WrapT == GL_REPEAT);
assert(img->Border == 0);
assert(swImg->_IsPowerOfTwo);
@@ -1336,8 +1336,8 @@ sample_2d_linear_mipmap_linear_repeat(struct gl_context *ctx,
{
GLuint i;
assert(lambda != NULL);
- assert(samp->WrapS == GL_REPEAT);
- assert(samp->WrapT == GL_REPEAT);
+ assert(samp->Attrib.WrapS == GL_REPEAT);
+ assert(samp->Attrib.WrapT == GL_REPEAT);
for (i = 0; i < n; i++) {
GLint level = linear_mipmap_level(tObj, lambda[i]);
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 swrast_texture_image *swImg = swrast_texture_image_const(image);
(void) lambda;
- if (samp->WrapS == GL_REPEAT &&
- samp->WrapT == GL_REPEAT &&
+ if (samp->Attrib.WrapS == GL_REPEAT &&
+ samp->Attrib.WrapT == GL_REPEAT &&
swImg->_IsPowerOfTwo &&
image->Border == 0) {
for (i = 0; i < n; i++) {
@@ -1427,8 +1427,8 @@ opt_sample_rgb_2d(struct gl_context *ctx,
GLuint k;
(void) ctx;
(void) lambda;
- assert(samp->WrapS==GL_REPEAT);
- assert(samp->WrapT==GL_REPEAT);
+ assert(samp->Attrib.WrapS==GL_REPEAT);
+ assert(samp->Attrib.WrapT==GL_REPEAT);
assert(img->Border==0);
assert(img->TexFormat == MESA_FORMAT_BGR_UNORM8);
assert(swImg->_IsPowerOfTwo);
@@ -1472,8 +1472,8 @@ opt_sample_rgba_2d(struct gl_context *ctx,
GLuint i;
(void) ctx;
(void) lambda;
- assert(samp->WrapS==GL_REPEAT);
- assert(samp->WrapT==GL_REPEAT);
+ assert(samp->Attrib.WrapS==GL_REPEAT);
+ assert(samp->Attrib.WrapT==GL_REPEAT);
assert(img->Border==0);
assert(img->TexFormat == MESA_FORMAT_A8B8G8R8_UNORM);
assert(swImg->_IsPowerOfTwo);
@@ -1505,8 +1505,8 @@ sample_lambda_2d(struct gl_context *ctx,
GLuint minStart, minEnd; /* texels with minification */
GLuint magStart, magEnd; /* texels with magnification */
- const GLboolean repeatNoBorderPOT = (samp->WrapS == GL_REPEAT)
- && (samp->WrapT == GL_REPEAT)
+ const GLboolean repeatNoBorderPOT = (samp->Attrib.WrapS == GL_REPEAT)
+ && (samp->Attrib.WrapT == GL_REPEAT)
&& (tImg->Border == 0)
&& (_mesa_format_row_stride(tImg->TexFormat, tImg->Width) ==
swImg->RowStride)
@@ -1519,7 +1519,7 @@ sample_lambda_2d(struct gl_context *ctx,
if (minStart < minEnd) {
/* do the minified texels */
const GLuint m = minEnd - minStart;
- switch (samp->MinFilter) {
+ switch (samp->Attrib.MinFilter) {
case GL_NEAREST:
if (repeatNoBorderPOT) {
switch (tImg->TexFormat) {
@@ -1576,7 +1576,7 @@ sample_lambda_2d(struct gl_context *ctx,
/* do the magnified texels */
const GLuint m = magEnd - magStart;
- switch (samp->MagFilter) {
+ switch (samp->Attrib.MagFilter) {
case GL_NEAREST:
if (repeatNoBorderPOT) {
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 swrast_texture_image *swImg = swrast_texture_image_const(tImg);
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
* filtering
@@ -1901,8 +1901,8 @@ sample_lambda_2d_aniso(struct gl_context *ctx,
/* from swrast/s_texcombine.c _swrast_texture_span */
const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[u];
const GLboolean adjustLOD =
- (texUnit->LodBias + samp->LodBias != 0.0F)
- || (samp->MinLod != -1000.0F || samp->MaxLod != 1000.0F);
+ (texUnit->LodBias + samp->Attrib.LodBias != 0.0F)
+ || (samp->Attrib.MinLod != -1000.0F || samp->Attrib.MaxLod != 1000.0F);
GLuint i;
@@ -1965,18 +1965,18 @@ sample_lambda_2d_aniso(struct gl_context *ctx,
if (adjustLOD) {
/* 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 */
const GLfloat bias =
- CLAMP(texUnit->LodBias + samp->LodBias,
+ CLAMP(texUnit->LodBias + samp->Attrib.LodBias,
-ctx->Const.MaxTextureLodBias,
ctx->Const.MaxTextureLodBias);
lod += bias;
- if (samp->MinLod != -1000.0F ||
- samp->MaxLod != 1000.0F) {
+ if (samp->Attrib.MinLod != -1000.0F ||
+ samp->Attrib.MaxLod != 1000.0F) {
/* 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;
(void) ctx;
- i = nearest_texel_location(samp->WrapS, img, width, texcoord[0]);
- j = nearest_texel_location(samp->WrapT, img, height, texcoord[1]);
- k = nearest_texel_location(samp->WrapR, img, depth, texcoord[2]);
+ i = nearest_texel_location(samp->Attrib.WrapS, img, width, texcoord[0]);
+ j = nearest_texel_location(samp->Attrib.WrapT, img, height, texcoord[1]);
+ k = nearest_texel_location(samp->Attrib.WrapR, img, depth, texcoord[2]);
if (i < 0 || i >= (GLint) img->Width ||
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 t100[4], t110[4], t101[4], t111[4];
- linear_texel_locations(samp->WrapS, img, width, texcoord[0], &i0, &i1, &a);
- linear_texel_locations(samp->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.WrapS, img, width, texcoord[0], &i0, &i1, &a);
+ linear_texel_locations(samp->Attrib.WrapT, img, height, texcoord[1], &j0, &j1, &b);
+ linear_texel_locations(samp->Attrib.WrapR, img, depth, texcoord[2], &k0, &k1, &c);
if (img->Border) {
i0 += img->Border;
@@ -2278,7 +2278,7 @@ sample_lambda_3d(struct gl_context *ctx,
if (minStart < minEnd) {
/* do the minified texels */
GLuint m = minEnd - minStart;
- switch (samp->MinFilter) {
+ switch (samp->Attrib.MinFilter) {
case GL_NEAREST:
for (i = minStart; i < minEnd; i++)
sample_3d_nearest(ctx, samp, _mesa_base_tex_image(tObj),
@@ -2313,7 +2313,7 @@ sample_lambda_3d(struct gl_context *ctx,
if (magStart < magEnd) {
/* do the magnified texels */
- switch (samp->MagFilter) {
+ switch (samp->Attrib.MagFilter) {
case GL_NEAREST:
for (i = magStart; i < magEnd; i++)
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;
GLfloat newCoord[4];
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]);
}
if (is_depth_texture(tObj)) {
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;
GLfloat newCoord[4];
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]);
}
if (is_depth_texture(tObj)) {
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)) {
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)) {
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)) {
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)) {
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) {
/* do the minified texels */
const GLuint m = minEnd - minStart;
- switch (samp->MinFilter) {
+ switch (samp->Attrib.MinFilter) {
case GL_NEAREST:
sample_nearest_cube(ctx, samp, tObj, m, texcoords + minStart,
lambda + minStart, rgba + minStart);
@@ -2650,7 +2650,7 @@ sample_lambda_cube(struct gl_context *ctx,
if (magStart < magEnd) {
/* do the magnified texels */
const GLuint m = magEnd - magStart;
- switch (samp->MagFilter) {
+ switch (samp->Attrib.MagFilter) {
case GL_NEAREST:
sample_nearest_cube(ctx, samp, tObj, m, texcoords + magStart,
lambda + magStart, rgba + magStart);
@@ -2688,17 +2688,17 @@ sample_nearest_rect(struct gl_context *ctx,
(void) ctx;
(void) lambda;
- assert(samp->WrapS == GL_CLAMP ||
- samp->WrapS == GL_CLAMP_TO_EDGE ||
- samp->WrapS == GL_CLAMP_TO_BORDER);
- assert(samp->WrapT == GL_CLAMP ||
- samp->WrapT == GL_CLAMP_TO_EDGE ||
- samp->WrapT == GL_CLAMP_TO_BORDER);
+ assert(samp->Attrib.WrapS == GL_CLAMP ||
+ samp->Attrib.WrapS == GL_CLAMP_TO_EDGE ||
+ samp->Attrib.WrapS == GL_CLAMP_TO_BORDER);
+ assert(samp->Attrib.WrapT == GL_CLAMP ||
+ samp->Attrib.WrapT == GL_CLAMP_TO_EDGE ||
+ samp->Attrib.WrapT == GL_CLAMP_TO_BORDER);
for (i = 0; i < n; i++) {
GLint row, col;
- col = clamp_rect_coord_nearest(samp->WrapS, texcoords[i][0], width);
- row = clamp_rect_coord_nearest(samp->WrapT, texcoords[i][1], height);
+ col = clamp_rect_coord_nearest(samp->Attrib.WrapS, texcoords[i][0], width);
+ row = clamp_rect_coord_nearest(samp->Attrib.WrapT, texcoords[i][1], height);
if (col < 0 || col >= width || row < 0 || row >= height)
get_border_color(samp, img, rgba[i]);
else
@@ -2723,12 +2723,12 @@ sample_linear_rect(struct gl_context *ctx,
(void) ctx;
(void) lambda;
- assert(samp->WrapS == GL_CLAMP ||
- samp->WrapS == GL_CLAMP_TO_EDGE ||
- samp->WrapS == GL_CLAMP_TO_BORDER);
- assert(samp->WrapT == GL_CLAMP ||
- samp->WrapT == GL_CLAMP_TO_EDGE ||
- samp->WrapT == GL_CLAMP_TO_BORDER);
+ assert(samp->Attrib.WrapS == GL_CLAMP ||
+ samp->Attrib.WrapS == GL_CLAMP_TO_EDGE ||
+ samp->Attrib.WrapS == GL_CLAMP_TO_BORDER);
+ assert(samp->Attrib.WrapT == GL_CLAMP ||
+ samp->Attrib.WrapT == GL_CLAMP_TO_EDGE ||
+ samp->Attrib.WrapT == GL_CLAMP_TO_BORDER);
for (i = 0; i < n; i++) {
GLint i0, j0, i1, j1;
@@ -2736,9 +2736,9 @@ sample_linear_rect(struct gl_context *ctx,
GLfloat a, b;
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);
- clamp_rect_coord_linear(samp->WrapT, texcoords[i][1], height,
+ clamp_rect_coord_linear(samp->Attrib.WrapT, texcoords[i][1], height,
&j0, &j1, &b);
/* compute integer rows/columns */
@@ -2790,7 +2790,7 @@ sample_lambda_rect(struct gl_context *ctx,
&minStart, &minEnd, &magStart, &magEnd);
if (minStart < minEnd) {
- if (samp->MinFilter == GL_NEAREST) {
+ if (samp->Attrib.MinFilter == GL_NEAREST) {
sample_nearest_rect(ctx, samp, tObj, minEnd - minStart,
texcoords + minStart, NULL, rgba + minStart);
}
@@ -2800,7 +2800,7 @@ sample_lambda_rect(struct gl_context *ctx,
}
}
if (magStart < magEnd) {
- if (samp->MagFilter == GL_NEAREST) {
+ if (samp->Attrib.MagFilter == GL_NEAREST) {
sample_nearest_rect(ctx, samp, tObj, magEnd - magStart,
texcoords + magStart, NULL, rgba + magStart);
}
@@ -2834,8 +2834,8 @@ sample_2d_array_nearest(struct gl_context *ctx,
GLint array;
(void) ctx;
- i = nearest_texel_location(samp->WrapS, img, width, texcoord[0]);
- j = nearest_texel_location(samp->WrapT, img, height, texcoord[1]);
+ i = nearest_texel_location(samp->Attrib.WrapS, img, width, texcoord[0]);
+ j = nearest_texel_location(samp->Attrib.WrapT, img, height, texcoord[1]);
array = tex_array_slice(texcoord[2], depth);
if (i < 0 || i >= (GLint) img->Width ||
@@ -2870,12 +2870,12 @@ sample_2d_array_linear(struct gl_context *ctx,
GLfloat a, b;
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->WrapT, img, height, texcoord[1], &j0, &j1, &b);
+ linear_texel_locations(samp->Attrib.WrapS, img, width, texcoord[0], &i0, &i1, &a);
+ linear_texel_locations(samp->Attrib.WrapT, img, height, texcoord[1], &j0, &j1, &b);
array = tex_array_slice(texcoord[2], depth);
if (array < 0 || array >= depth) {
- COPY_4V(rgba, samp->BorderColor.f);
+ COPY_4V(rgba, samp->Attrib.BorderColor.f);
}
else {
if (img->Border) {
@@ -3067,7 +3067,7 @@ sample_lambda_2d_array(struct gl_context *ctx,
if (minStart < minEnd) {
/* do the minified texels */
GLuint m = minEnd - minStart;
- switch (samp->MinFilter) {
+ switch (samp->Attrib.MinFilter) {
case GL_NEAREST:
for (i = minStart; i < minEnd; i++)
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) {
/* do the magnified texels */
- switch (samp->MagFilter) {
+ switch (samp->Attrib.MagFilter) {
case GL_NEAREST:
for (i = magStart; i < magEnd; i++)
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;
(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);
if (i < 0 || i >= (GLint) img->Width ||
@@ -3185,7 +3185,7 @@ sample_1d_array_linear(struct gl_context *ctx,
GLfloat a;
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);
if (img->Border) {
@@ -3357,7 +3357,7 @@ sample_lambda_1d_array(struct gl_context *ctx,
if (minStart < minEnd) {
/* do the minified texels */
GLuint m = minEnd - minStart;
- switch (samp->MinFilter) {
+ switch (samp->Attrib.MinFilter) {
case GL_NEAREST:
for (i = minStart; i < minEnd; i++)
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) {
/* do the magnified texels */
- switch (samp->MagFilter) {
+ switch (samp->Attrib.MagFilter) {
case GL_NEAREST:
for (i = magStart; i < magEnd; i++)
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;
- 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 */
- level = tObj->BaseLevel;
+ level = tObj->Attrib.BaseLevel;
}
else {
/* choose mipmap level */
- lambda = CLAMP(lambda, samp->MinLod, samp->MaxLod);
+ lambda = CLAMP(lambda, samp->Attrib.MinLod, samp->Attrib.MaxLod);
level = (GLint) lambda;
- level = CLAMP(level, tObj->BaseLevel, tObj->_MaxLevel);
+ level = CLAMP(level, tObj->Attrib.BaseLevel, tObj->_MaxLevel);
}
return level;
@@ -3568,10 +3568,10 @@ sample_depth_texture( struct gl_context *ctx,
/* XXXX if samp->MinFilter != samp->MagFilter, we're ignoring lambda */
- function = (samp->CompareMode == GL_COMPARE_R_TO_TEXTURE_ARB) ?
- samp->CompareFunc : GL_NONE;
+ function = (samp->Attrib.CompareMode == GL_COMPARE_R_TO_TEXTURE_ARB) ?
+ samp->Attrib.CompareFunc : GL_NONE;
- if (samp->MagFilter == GL_NEAREST) {
+ if (samp->Attrib.MagFilter == GL_NEAREST) {
GLuint i;
for (i = 0; i < n; i++) {
GLfloat depthSample, depthRef;
@@ -3584,19 +3584,19 @@ sample_depth_texture( struct gl_context *ctx,
swImg->FetchTexel(swImg, col, row, slice, &depthSample);
}
else {
- depthSample = samp->BorderColor.f[0];
+ depthSample = samp->Attrib.BorderColor.f[0];
}
depthRef = CLAMP(texcoords[i][compare_coord], 0.0F, 1.0F);
result = shadow_compare(function, depthRef, depthSample);
- apply_depth_mode(tObj->DepthMode, result, texel[i]);
+ apply_depth_mode(tObj->Attrib.DepthMode, result, texel[i]);
}
}
else {
GLuint i;
- assert(samp->MagFilter == GL_LINEAR);
+ assert(samp->Attrib.MagFilter == GL_LINEAR);
for (i = 0; i < n; i++) {
GLfloat depth00, depth01, depth10, depth11, depthRef;
GLint i0, i1, j0, j1;
@@ -3624,21 +3624,21 @@ sample_depth_texture( struct gl_context *ctx,
}
if (slice < 0 || slice >= (GLint) depth) {
- depth00 = samp->BorderColor.f[0];
- depth01 = samp->BorderColor.f[0];
- depth10 = samp->BorderColor.f[0];
- depth11 = samp->BorderColor.f[0];
+ depth00 = samp->Attrib.BorderColor.f[0];
+ depth01 = samp->Attrib.BorderColor.f[0];
+ depth10 = samp->Attrib.BorderColor.f[0];
+ depth11 = samp->Attrib.BorderColor.f[0];
}
else {
/* get four depth samples from the texture */
if (useBorderTexel & (I0BIT | J0BIT)) {
- depth00 = samp->BorderColor.f[0];
+ depth00 = samp->Attrib.BorderColor.f[0];
}
else {
swImg->FetchTexel(swImg, i0, j0, slice, &depth00);
}
if (useBorderTexel & (I1BIT | J0BIT)) {
- depth10 = samp->BorderColor.f[0];
+ depth10 = samp->Attrib.BorderColor.f[0];
}
else {
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 (useBorderTexel & (I0BIT | J1BIT)) {
- depth01 = samp->BorderColor.f[0];
+ depth01 = samp->Attrib.BorderColor.f[0];
}
else {
swImg->FetchTexel(swImg, i0, j1, slice, &depth01);
}
if (useBorderTexel & (I1BIT | J1BIT)) {
- depth11 = samp->BorderColor.f[0];
+ depth11 = samp->Attrib.BorderColor.f[0];
}
else {
swImg->FetchTexel(swImg, i1, j1, slice, &depth11);
@@ -3670,7 +3670,7 @@ sample_depth_texture( struct gl_context *ctx,
depth00, depth01, depth10, depth11,
wi, wj);
- apply_depth_mode(tObj->DepthMode, result, texel[i]);
+ apply_depth_mode(tObj->Attrib.DepthMode, result, texel[i]);
} /* for */
} /* if filter */
}
@@ -3718,7 +3718,7 @@ _swrast_choose_texture_sample_func( struct gl_context *ctx,
}
else {
const GLboolean needLambda =
- (GLboolean) (sampler->MinFilter != sampler->MagFilter);
+ (GLboolean) (sampler->Attrib.MinFilter != sampler->Attrib.MagFilter);
switch (t->Target) {
case GL_TEXTURE_1D:
@@ -3728,11 +3728,11 @@ _swrast_choose_texture_sample_func( struct gl_context *ctx,
else if (needLambda) {
return sample_lambda_1d;
}
- else if (sampler->MinFilter == GL_LINEAR) {
+ else if (sampler->Attrib.MinFilter == GL_LINEAR) {
return sample_linear_1d;
}
else {
- assert(sampler->MinFilter == GL_NEAREST);
+ assert(sampler->Attrib.MinFilter == GL_NEAREST);
return sample_nearest_1d;
}
case GL_TEXTURE_2D:
@@ -3741,13 +3741,13 @@ _swrast_choose_texture_sample_func( struct gl_context *ctx,
}
else if (needLambda) {
/* Anisotropic filtering extension. Activated only if mipmaps are used */
- if (sampler->MaxAnisotropy > 1.0F &&
- sampler->MinFilter == GL_LINEAR_MIPMAP_LINEAR) {
+ if (sampler->Attrib.MaxAnisotropy > 1.0F &&
+ sampler->Attrib.MinFilter == GL_LINEAR_MIPMAP_LINEAR) {
return sample_lambda_2d_aniso;
}
return sample_lambda_2d;
}
- else if (sampler->MinFilter == GL_LINEAR) {
+ else if (sampler->Attrib.MinFilter == GL_LINEAR) {
return sample_linear_2d;
}
else {
@@ -3757,10 +3757,10 @@ _swrast_choose_texture_sample_func( struct gl_context *ctx,
swrast_texture_image_const(img);
texture_sample_func func;
- assert(sampler->MinFilter == GL_NEAREST);
+ assert(sampler->Attrib.MinFilter == GL_NEAREST);
func = &sample_nearest_2d;
- if (sampler->WrapS == GL_REPEAT &&
- sampler->WrapT == GL_REPEAT &&
+ if (sampler->Attrib.WrapS == GL_REPEAT &&
+ sampler->Attrib.WrapT == GL_REPEAT &&
swImg->_IsPowerOfTwo &&
img->Border == 0) {
if (img->TexFormat == MESA_FORMAT_BGR_UNORM8)
@@ -3775,22 +3775,22 @@ _swrast_choose_texture_sample_func( struct gl_context *ctx,
if (needLambda) {
return sample_lambda_3d;
}
- else if (sampler->MinFilter == GL_LINEAR) {
+ else if (sampler->Attrib.MinFilter == GL_LINEAR) {
return sample_linear_3d;
}
else {
- assert(sampler->MinFilter == GL_NEAREST);
+ assert(sampler->Attrib.MinFilter == GL_NEAREST);
return sample_nearest_3d;
}
case GL_TEXTURE_CUBE_MAP:
if (needLambda) {
return sample_lambda_cube;
}
- else if (sampler->MinFilter == GL_LINEAR) {
+ else if (sampler->Attrib.MinFilter == GL_LINEAR) {
return sample_linear_cube;
}
else {
- assert(sampler->MinFilter == GL_NEAREST);
+ assert(sampler->Attrib.MinFilter == GL_NEAREST);
return sample_nearest_cube;
}
case GL_TEXTURE_RECTANGLE_NV:
@@ -3800,11 +3800,11 @@ _swrast_choose_texture_sample_func( struct gl_context *ctx,
else if (needLambda) {
return sample_lambda_rect;
}
- else if (sampler->MinFilter == GL_LINEAR) {
+ else if (sampler->Attrib.MinFilter == GL_LINEAR) {
return sample_linear_rect;
}
else {
- assert(sampler->MinFilter == GL_NEAREST);
+ assert(sampler->Attrib.MinFilter == GL_NEAREST);
return sample_nearest_rect;
}
case GL_TEXTURE_1D_ARRAY_EXT:
@@ -3814,11 +3814,11 @@ _swrast_choose_texture_sample_func( struct gl_context *ctx,
else if (needLambda) {
return sample_lambda_1d_array;
}
- else if (sampler->MinFilter == GL_LINEAR) {
+ else if (sampler->Attrib.MinFilter == GL_LINEAR) {
return sample_linear_1d_array;
}
else {
- assert(sampler->MinFilter == GL_NEAREST);
+ assert(sampler->Attrib.MinFilter == GL_NEAREST);
return sample_nearest_1d_array;
}
case GL_TEXTURE_2D_ARRAY_EXT:
@@ -3828,11 +3828,11 @@ _swrast_choose_texture_sample_func( struct gl_context *ctx,
else if (needLambda) {
return sample_lambda_2d_array;
}
- else if (sampler->MinFilter == GL_LINEAR) {
+ else if (sampler->Attrib.MinFilter == GL_LINEAR) {
return sample_linear_2d_array;
}
else {
- assert(sampler->MinFilter == GL_NEAREST);
+ assert(sampler->Attrib.MinFilter == GL_NEAREST);
return sample_nearest_2d_array;
}
default:
diff --git a/src/mesa/swrast/s_texture.c b/src/mesa/swrast/s_texture.c
index 24fddd7718d..1592f6e4be2 100644
--- a/src/mesa/swrast/s_texture.c
+++ b/src/mesa/swrast/s_texture.c
@@ -268,7 +268,7 @@ _swrast_map_texture(struct gl_context *ctx, struct gl_texture_object *texObj)
GLuint face, level;
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 swrast_texture_image *swImage = swrast_texture_image(texImage);
unsigned int i, slices;
@@ -328,7 +328,7 @@ _swrast_unmap_texture(struct gl_context *ctx, struct gl_texture_object *texObj)
GLuint face, level;
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 swrast_texture_image *swImage = swrast_texture_image(texImage);
unsigned int i, slices;
diff --git a/src/mesa/swrast/s_triangle.c b/src/mesa/swrast/s_triangle.c
index 289fa12228b..c66427c9fe9 100644
--- a/src/mesa/swrast/s_triangle.c
+++ b/src/mesa/swrast/s_triangle.c
@@ -553,7 +553,7 @@ affine_span(struct gl_context *ctx, SWspan *span,
info.smask = texImg->Width - 1; \
info.tmask = texImg->Height - 1; \
info.format = texImg->TexFormat; \
- info.filter = obj->Sampler.MinFilter; \
+ info.filter = obj->Sampler.Attrib.MinFilter; \
info.envmode = unit->EnvMode; \
info.er = 0; \
info.eg = 0; \
@@ -820,7 +820,7 @@ fast_persp_span(struct gl_context *ctx, SWspan *span,
info.smask = texImg->Width - 1; \
info.tmask = texImg->Height - 1; \
info.format = texImg->TexFormat; \
- info.filter = obj->Sampler.MinFilter; \
+ info.filter = obj->Sampler.Attrib.MinFilter; \
info.envmode = unit->EnvMode; \
info.er = 0; \
info.eg = 0; \
@@ -1064,8 +1064,8 @@ _swrast_choose_triangle( struct gl_context *ctx )
swImg = swrast_texture_image_const(texImg);
format = texImg ? texImg->TexFormat : MESA_FORMAT_NONE;
- minFilter = texObj2D ? samp->MinFilter : GL_NONE;
- magFilter = texObj2D ? samp->MagFilter : GL_NONE;
+ minFilter = texObj2D ? samp->Attrib.MinFilter : GL_NONE;
+ magFilter = texObj2D ? samp->Attrib.MagFilter : GL_NONE;
envMode = ctx->Texture.FixedFuncUnit[0].EnvMode;
/* 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)
&& ctx->Texture._MaxEnabledTexImageUnit == 0
&& ctx->Texture.Unit[0]._Current->Target == GL_TEXTURE_2D
- && samp->WrapS == GL_REPEAT
- && samp->WrapT == GL_REPEAT
- && texObj2D->_Swizzle == SWIZZLE_NOOP
+ && samp->Attrib.WrapS == GL_REPEAT
+ && samp->Attrib.WrapT == GL_REPEAT
+ && texObj2D->Attrib._Swizzle == SWIZZLE_NOOP
&& swImg->_IsPowerOfTwo
&& texImg->Border == 0
&& (_mesa_format_row_stride(format, texImg->Width) ==