diff options
author | Marek Olšák <marek.olsak@amd.com> | 2020-10-05 02:45:03 -0400 |
---|---|---|
committer | Marge Bot <eric+marge@anholt.net> | 2020-12-01 11:52:11 +0000 |
commit | 9a8b54285d24e84facc6f7aefe486a568b6e80c4 (patch) | |
tree | 9831010ffe437eb9cb8d18fffc3deb58fe14c607 /src/mesa/drivers/dri | |
parent | 7fa9d9d06c44e9cf3d39b2ce5126bf1b0abff586 (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/mesa/drivers/dri')
25 files changed, 226 insertions, 225 deletions
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 { |