diff --git a/src/gallium/frontends/dri/dri2.c b/src/gallium/frontends/dri/dri2.c index b0c0d7eafbe..fe114a14f0d 100644 --- a/src/gallium/frontends/dri/dri2.c +++ b/src/gallium/frontends/dri/dri2.c @@ -1925,10 +1925,10 @@ dri2_interop_export_object(__DRIcontext *_ctx, } out->internal_format = obj->Image[0][0]->InternalFormat; - out->view_minlevel = obj->MinLevel; - out->view_numlevels = obj->NumLevels; - out->view_minlayer = obj->MinLayer; - out->view_numlayers = obj->NumLayers; + out->view_minlevel = obj->Attrib.MinLevel; + out->view_numlevels = obj->Attrib.NumLevels; + out->view_minlayer = obj->Attrib.MinLayer; + out->view_numlayers = obj->Attrib.NumLayers; } } diff --git a/src/mesa/drivers/common/meta_blit.c b/src/mesa/drivers/common/meta_blit.c index 161ed713dd7..26b054bd819 100644 --- a/src/mesa/drivers/common/meta_blit.c +++ b/src/mesa/drivers/common/meta_blit.c @@ -178,7 +178,7 @@ blitframebuffer_texture(struct gl_context *ctx, fb_tex_blit.tex_obj = texObj; fb_tex_blit.baseLevelSave = texObj->Attrib.BaseLevel; fb_tex_blit.maxLevelSave = texObj->Attrib.MaxLevel; - fb_tex_blit.stencilSamplingSave = texObj->Attrib.StencilSampling; + fb_tex_blit.stencilSamplingSave = texObj->StencilSampling; if (glsl_version) { setup_glsl_blit_framebuffer(ctx, blit, drawFb, rb, target, do_depth); @@ -338,7 +338,7 @@ _mesa_meta_fb_tex_blit_end(struct gl_context *ctx, GLenum target, &blit->maxLevelSave, false); /* If ARB_stencil_texturing is not supported, the mode won't have changed. */ - if (texObj->Attrib.StencilSampling != blit->stencilSamplingSave) { + if (texObj->StencilSampling != blit->stencilSamplingSave) { /* GLint so the compiler won't complain about type signedness mismatch * in the call to _mesa_texture_parameteriv below. */ diff --git a/src/mesa/drivers/dri/i965/brw_blorp.c b/src/mesa/drivers/dri/i965/brw_blorp.c index 2f08d0b3d4d..c65a534116e 100644 --- a/src/mesa/drivers/dri/i965/brw_blorp.c +++ b/src/mesa/drivers/dri/i965/brw_blorp.c @@ -745,8 +745,8 @@ brw_blorp_copytexsubimage(struct brw_context *brw, apply_y_flip(&srcY0, &srcY1, src_rb->Height); /* Account for face selection and texture view MinLayer */ - int dst_slice = slice + dst_image->TexObject->MinLayer + dst_image->Face; - int dst_level = dst_image->Level + dst_image->TexObject->MinLevel; + int dst_slice = slice + dst_image->TexObject->Attrib.MinLayer + dst_image->Face; + int dst_level = dst_image->Level + dst_image->TexObject->Attrib.MinLevel; brw_blorp_blit_miptrees(brw, src_mt, src_irb->mt_level, src_irb->mt_layer, diff --git a/src/mesa/drivers/dri/i965/brw_draw.c b/src/mesa/drivers/dri/i965/brw_draw.c index c82a7385f2f..3dc44205ad7 100644 --- a/src/mesa/drivers/dri/i965/brw_draw.c +++ b/src/mesa/drivers/dri/i965/brw_draw.c @@ -547,11 +547,11 @@ brw_predraw_resolve_inputs(struct brw_context *brw, bool rendering, unsigned min_level, min_layer, num_levels, num_layers; if (tex_obj->base.Immutable) { - min_level = tex_obj->base.MinLevel; - num_levels = MIN2(tex_obj->base.NumLevels, tex_obj->_MaxLevel + 1); - min_layer = tex_obj->base.MinLayer; + min_level = tex_obj->base.Attrib.MinLevel; + num_levels = MIN2(tex_obj->base.Attrib.NumLevels, tex_obj->_MaxLevel + 1); + min_layer = tex_obj->base.Attrib.MinLayer; num_layers = tex_obj->base.Target != GL_TEXTURE_3D ? - tex_obj->base.NumLayers : INTEL_REMAINING_LAYERS; + tex_obj->base.Attrib.NumLayers : INTEL_REMAINING_LAYERS; } else { min_level = tex_obj->base.Attrib.BaseLevel; num_levels = tex_obj->_MaxLevel - tex_obj->base.Attrib.BaseLevel + 1; @@ -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.Attrib.StencilSampling || + if (tex_obj->base.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_wm_surface_state.c b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c index a448571585b..51613dc75e5 100644 --- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c +++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c @@ -491,7 +491,7 @@ static void brw_update_texture_surface(struct gl_context *ctx, */ unsigned view_num_layers; if (obj->Immutable && obj->Target != GL_TEXTURE_3D) { - view_num_layers = obj->NumLayers; + view_num_layers = obj->Attrib.NumLayers; } else { view_num_layers = mt->surf.dim == ISL_SURF_DIM_3D ? mt->surf.logical_level0_px.depth : @@ -566,7 +566,7 @@ static void brw_update_texture_surface(struct gl_context *ctx, } } - if (obj->Attrib.StencilSampling && firstImage->_BaseFormat == GL_DEPTH_STENCIL) { + if (obj->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,9 +587,9 @@ static void brw_update_texture_surface(struct gl_context *ctx, struct isl_view view = { .format = format, - .base_level = obj->MinLevel + obj->Attrib.BaseLevel, + .base_level = obj->Attrib.MinLevel + obj->Attrib.BaseLevel, .levels = intel_obj->_MaxLevel - obj->Attrib.BaseLevel + 1, - .base_array_layer = obj->MinLayer, + .base_array_layer = obj->Attrib.MinLayer, .array_len = view_num_layers, .swizzle = { .r = swizzle_to_scs(GET_SWZ(swizzle, 0), need_green_to_blue), @@ -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.Attrib.StencilSampling); + (base_format == GL_DEPTH_STENCIL && !iobj->base.StencilSampling); } static void @@ -1550,20 +1550,20 @@ update_image_surface(struct brw_context *brw, base_layer = 0; num_layers = minify(mt->surf.logical_level0_px.depth, u->Level); } else { - assert(obj->Immutable || obj->MinLayer == 0); - base_layer = obj->MinLayer; + assert(obj->Immutable || obj->Attrib.MinLayer == 0); + base_layer = obj->Attrib.MinLayer; num_layers = obj->Immutable ? - obj->NumLayers : + obj->Attrib.NumLayers : mt->surf.logical_level0_px.array_len; } } else { - base_layer = obj->MinLayer + u->_Layer; + base_layer = obj->Attrib.MinLayer + u->_Layer; num_layers = 1; } struct isl_view view = { .format = format, - .base_level = obj->MinLevel + u->Level, + .base_level = obj->Attrib.MinLevel + u->Level, .levels = 1, .base_array_layer = base_layer, .array_len = num_layers, diff --git a/src/mesa/drivers/dri/i965/genX_state_upload.c b/src/mesa/drivers/dri/i965/genX_state_upload.c index d46eb3a49e8..65b1d82d09c 100644 --- a/src/mesa/drivers/dri/i965/genX_state_upload.c +++ b/src/mesa/drivers/dri/i965/genX_state_upload.c @@ -5321,7 +5321,7 @@ genX(update_sampler_state)(struct brw_context *brw, #if GEN_GEN == 6 samp_st.BaseMipLevel = - CLAMP(texObj->MinLevel + texObj->Attrib.BaseLevel, 0, hw_max_lod); + CLAMP(texObj->Attrib.MinLevel + texObj->Attrib.BaseLevel, 0, hw_max_lod); samp_st.MinandMagStateNotEqual = samp_st.MinModeFilter != samp_st.MagModeFilter; #endif @@ -5336,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->Attrib.StencilSampling, + texObj->StencilSampling, &border_color_offset); } #if GEN_GEN < 6 diff --git a/src/mesa/drivers/dri/i965/intel_copy_image.c b/src/mesa/drivers/dri/i965/intel_copy_image.c index 00593235d1e..5fb8622655a 100644 --- a/src/mesa/drivers/dri/i965/intel_copy_image.c +++ b/src/mesa/drivers/dri/i965/intel_copy_image.c @@ -81,13 +81,13 @@ intel_copy_image_sub_data(struct gl_context *ctx, if (src_image) { src_mt = intel_texture_image(src_image)->mt; - src_level = src_image->Level + src_image->TexObject->MinLevel; + src_level = src_image->Level + src_image->TexObject->Attrib.MinLevel; /* Cube maps actually have different images per face */ if (src_image->TexObject->Target == GL_TEXTURE_CUBE_MAP) src_z = src_image->Face; - src_z += src_image->TexObject->MinLayer; + src_z += src_image->TexObject->Attrib.MinLayer; } else { assert(src_renderbuffer); src_mt = intel_renderbuffer(src_renderbuffer)->mt; @@ -98,13 +98,13 @@ intel_copy_image_sub_data(struct gl_context *ctx, if (dst_image) { dst_mt = intel_texture_image(dst_image)->mt; - dst_level = dst_image->Level + dst_image->TexObject->MinLevel; + dst_level = dst_image->Level + dst_image->TexObject->Attrib.MinLevel; /* Cube maps actually have different images per face */ if (dst_image->TexObject->Target == GL_TEXTURE_CUBE_MAP) dst_z = dst_image->Face; - dst_z += dst_image->TexObject->MinLayer; + dst_z += dst_image->TexObject->Attrib.MinLayer; } else { assert(dst_renderbuffer); dst_mt = intel_renderbuffer(dst_renderbuffer)->mt; diff --git a/src/mesa/drivers/dri/i965/intel_fbo.c b/src/mesa/drivers/dri/i965/intel_fbo.c index b1f24d4d1d3..6761a9e224a 100644 --- a/src/mesa/drivers/dri/i965/intel_fbo.c +++ b/src/mesa/drivers/dri/i965/intel_fbo.c @@ -540,8 +540,8 @@ intel_renderbuffer_update_wrapper(struct brw_context *brw, rb->AllocStorage = intel_nop_alloc_storage; /* adjust for texture view parameters */ - layer += image->TexObject->MinLayer; - level += image->TexObject->MinLevel; + layer += image->TexObject->Attrib.MinLayer; + level += image->TexObject->Attrib.MinLevel; intel_miptree_check_level_layer(mt, level, layer); irb->mt_level = level; @@ -549,8 +549,8 @@ intel_renderbuffer_update_wrapper(struct brw_context *brw, if (!layered) { irb->layer_count = 1; - } else if (mt->target != GL_TEXTURE_3D && image->TexObject->NumLayers > 0) { - irb->layer_count = image->TexObject->NumLayers; + } else if (mt->target != GL_TEXTURE_3D && image->TexObject->Attrib.NumLayers > 0) { + irb->layer_count = image->TexObject->Attrib.NumLayers; } else { irb->layer_count = mt->surf.dim == ISL_SURF_DIM_3D ? minify(mt->surf.logical_level0_px.depth, level) : diff --git a/src/mesa/drivers/dri/i965/intel_tex.c b/src/mesa/drivers/dri/i965/intel_tex.c index b8341d5462b..e08102321e7 100644 --- a/src/mesa/drivers/dri/i965/intel_tex.c +++ b/src/mesa/drivers/dri/i965/intel_tex.c @@ -231,8 +231,8 @@ intel_map_texture_image(struct gl_context *ctx, slice = tex_image->Face; intel_miptree_map(brw, mt, - tex_image->Level + tex_image->TexObject->MinLevel, - slice + tex_image->TexObject->MinLayer, + tex_image->Level + tex_image->TexObject->Attrib.MinLevel, + slice + tex_image->TexObject->Attrib.MinLayer, x, y, w, h, mode, (void **)map, &stride); @@ -251,8 +251,8 @@ intel_unmap_texture_image(struct gl_context *ctx, slice = tex_image->Face; intel_miptree_unmap(brw, mt, - tex_image->Level + tex_image->TexObject->MinLevel, - slice + tex_image->TexObject->MinLayer); + tex_image->Level + tex_image->TexObject->Attrib.MinLevel, + slice + tex_image->TexObject->Attrib.MinLayer); } static GLboolean @@ -274,7 +274,7 @@ intel_texture_view(struct gl_context *ctx, * except it hasn't copied our mt pointers, etc. */ const int numFaces = _mesa_num_tex_faces(texObj->Target); - const int numLevels = texObj->NumLevels; + const int numLevels = texObj->Attrib.NumLevels; int face; int level; diff --git a/src/mesa/drivers/dri/i965/intel_tex_image.c b/src/mesa/drivers/dri/i965/intel_tex_image.c index fd3ea8a6db3..d5efb92d631 100644 --- a/src/mesa/drivers/dri/i965/intel_tex_image.c +++ b/src/mesa/drivers/dri/i965/intel_tex_image.c @@ -136,8 +136,8 @@ intel_texsubimage_blorp(struct brw_context *brw, GLuint dims, const struct gl_pixelstore_attrib *packing) { struct intel_texture_image *intel_image = intel_texture_image(tex_image); - const unsigned mt_level = tex_image->Level + tex_image->TexObject->MinLevel; - const unsigned mt_z = tex_image->TexObject->MinLayer + tex_image->Face + z; + const unsigned mt_level = tex_image->Level + tex_image->TexObject->Attrib.MinLevel; + const unsigned mt_z = tex_image->TexObject->Attrib.MinLayer + tex_image->Face + z; /* The blorp path can't understand crazy format hackery */ if (_mesa_base_tex_format(&brw->ctx, tex_image->InternalFormat) != @@ -228,7 +228,7 @@ intel_texsubimage_tiled_memcpy(struct gl_context * ctx, return false; /* If this is a nontrivial texture view, let another path handle it instead. */ - if (texImage->TexObject->MinLayer) + if (texImage->TexObject->Attrib.MinLayer) return false; if (!image->mt || @@ -249,7 +249,7 @@ intel_texsubimage_tiled_memcpy(struct gl_context * ctx, if (devinfo->gen < 5 && brw->has_swizzling) return false; - int level = texImage->Level + texImage->TexObject->MinLevel; + int level = texImage->Level + texImage->TexObject->Attrib.MinLevel; /* Since we are going to write raw data to the miptree, we need to resolve * any pending fast color clears before we start. @@ -702,8 +702,8 @@ intel_gettexsubimage_blorp(struct brw_context *brw, const struct gl_pixelstore_attrib *packing) { struct intel_texture_image *intel_image = intel_texture_image(tex_image); - const unsigned mt_level = tex_image->Level + tex_image->TexObject->MinLevel; - const unsigned mt_z = tex_image->TexObject->MinLayer + tex_image->Face + z; + const unsigned mt_level = tex_image->Level + tex_image->TexObject->Attrib.MinLevel; + const unsigned mt_z = tex_image->TexObject->Attrib.MinLayer + tex_image->Face + z; /* The blorp path can't understand crazy format hackery */ if (_mesa_base_tex_format(&brw->ctx, tex_image->InternalFormat) != @@ -781,7 +781,7 @@ intel_gettexsubimage_tiled_memcpy(struct gl_context *ctx, return false; /* If this is a nontrivial texture view, let another path handle it instead. */ - if (texImage->TexObject->MinLayer) + if (texImage->TexObject->Attrib.MinLayer) return false; if (!image->mt || @@ -802,7 +802,7 @@ intel_gettexsubimage_tiled_memcpy(struct gl_context *ctx, if (devinfo->gen < 5 && brw->has_swizzling) return false; - int level = texImage->Level + texImage->TexObject->MinLevel; + int level = texImage->Level + texImage->TexObject->Attrib.MinLevel; /* Since we are going to write raw data to the miptree, we need to resolve * any pending fast color clears before we start. diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c index 798f59d2499..267e2f1319a 100644 --- a/src/mesa/main/fbobject.c +++ b/src/mesa/main/fbobject.c @@ -3710,7 +3710,7 @@ check_level(struct gl_context *ctx, struct gl_texture_object *texObj, * greater than or equal to zero and smaller than the value of * TEXTURE_VIEW_NUM_LEVELS for texture." */ - const int max_levels = texObj->Immutable ? texObj->ImmutableLevels : + const int max_levels = texObj->Immutable ? texObj->Attrib.ImmutableLevels : _mesa_max_texture_levels(ctx, target); if (level < 0 || level >= max_levels) { diff --git a/src/mesa/main/formatquery.c b/src/mesa/main/formatquery.c index 006e7ff32d8..d1a74fb0d22 100644 --- a/src/mesa/main/formatquery.c +++ b/src/mesa/main/formatquery.c @@ -1458,7 +1458,7 @@ _mesa_GetInternalformativ(GLenum target, GLenum internalformat, GLenum pname, * just with the purpose of getting the value. */ struct gl_texture_object *tex_obj = _mesa_new_texture_object(ctx, 0, target); - buffer[0] = tex_obj->ImageFormatCompatibilityType; + buffer[0] = tex_obj->Attrib.ImageFormatCompatibilityType; _mesa_delete_texture_object(ctx, tex_obj); break; diff --git a/src/mesa/main/mipmap.c b/src/mesa/main/mipmap.c index fca74602e92..3836f8b4c65 100644 --- a/src/mesa/main/mipmap.c +++ b/src/mesa/main/mipmap.c @@ -62,7 +62,7 @@ _mesa_compute_num_levels(struct gl_context *ctx, numLevels = texObj->Attrib.BaseLevel + baseImage->MaxNumLevels; numLevels = MIN2(numLevels, (GLuint) texObj->Attrib.MaxLevel + 1); if (texObj->Immutable) - numLevels = MIN2(numLevels, texObj->NumLevels); + numLevels = MIN2(numLevels, texObj->Attrib.NumLevels); assert(numLevels >= 1); return numLevels; diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index d3e3ff73501..69c72955ec9 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -970,8 +970,13 @@ struct gl_texture_object_attrib 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? */ + GLenum16 ImageFormatCompatibilityType; /**< GL_ARB_shader_image_load_store */ + GLushort MinLayer; /**< GL_ARB_texture_view */ + GLushort NumLayers; /**< GL_ARB_texture_view */ GLboolean GenerateMipmap; /**< GL_SGIS_generate_mipmap */ + GLbyte ImmutableLevels; /**< ES 3.0 / ARB_texture_view */ + GLubyte MinLevel; /**< GL_ARB_texture_view */ + GLubyte NumLevels; /**< GL_ARB_texture_view */ }; /** @@ -1013,7 +1018,6 @@ struct gl_texture_object 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 */ - GLbyte ImmutableLevels; /**< ES 3.0 / ARB_texture_view */ GLboolean _BaseComplete; /**< Is the base texture level valid? */ GLboolean _MipmapComplete; /**< Is the whole mipmap valid? */ GLboolean _IsIntegerFormat; /**< Does the texture store integer values? */ @@ -1025,24 +1029,20 @@ struct gl_texture_object GLboolean _IsHalfFloat; /**< GL_OES_half_float_texture */ bool HandleAllocated; /**< GL_ARB_bindless_texture */ + /* This should not be restored by glPopAttrib: */ + bool StencilSampling; /**< Should we sample stencil instead of depth? */ + /** GL_OES_EGL_image_external */ GLubyte RequiredTextureImageUnits; - GLubyte MinLevel; /**< GL_ARB_texture_view */ - GLubyte NumLevels; /**< GL_ARB_texture_view */ - GLushort MinLayer; /**< GL_ARB_texture_view */ - GLushort NumLayers; /**< GL_ARB_texture_view */ - /** GL_EXT_memory_object */ GLenum16 TextureTiling; - /** GL_ARB_shader_image_load_store */ - GLenum16 ImageFormatCompatibilityType; - /** GL_ARB_texture_buffer_object */ GLenum16 BufferObjectFormat; /** Equivalent Mesa format for BufferObjectFormat. */ mesa_format _BufferObjectFormat; + /* TODO: BufferObject->Name should be restored by glPopAttrib(GL_TEXTURE_BIT); */ struct gl_buffer_object *BufferObject; /** GL_ARB_texture_buffer_range */ diff --git a/src/mesa/main/shaderimage.c b/src/mesa/main/shaderimage.c index d1fd25b8f3d..7a47585ce05 100644 --- a/src/mesa/main/shaderimage.c +++ b/src/mesa/main/shaderimage.c @@ -495,7 +495,7 @@ _mesa_is_image_unit_valid(struct gl_context *ctx, struct gl_image_unit *u) if (!tex_format) return GL_FALSE; - switch (t->ImageFormatCompatibilityType) { + switch (t->Attrib.ImageFormatCompatibilityType) { case GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE: if (_mesa_get_format_bytes(tex_format) != _mesa_get_format_bytes(u->_ActualFormat)) diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c index 3911e2d8fb8..0b0252a0c6a 100644 --- a/src/mesa/main/texobj.c +++ b/src/mesa/main/texobj.c @@ -352,7 +352,7 @@ _mesa_initialize_texture_object( struct gl_context *ctx, 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->StencilSampling = false; obj->Sampler.Attrib.CubeMapSeamless = GL_FALSE; obj->Sampler.HandleAllocated = GL_FALSE; obj->Attrib.Swizzle[0] = GL_RED; @@ -363,7 +363,7 @@ _mesa_initialize_texture_object( struct gl_context *ctx, 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; + obj->Attrib.ImageFormatCompatibilityType = GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE; /* GL_ARB_bindless_texture */ _mesa_init_texture_handles(obj); @@ -710,7 +710,7 @@ _mesa_test_texobj_completeness( const struct gl_context *ctx, /* Adjust max level for views: the data store may have more levels than * the view exposes. */ - t->_MaxLevel = MAX2(MIN2(t->_MaxLevel, t->NumLevels - 1), 0); + t->_MaxLevel = MAX2(MIN2(t->_MaxLevel, t->Attrib.NumLevels - 1), 0); } /* Compute _MaxLambda = q - p in the spec used during mipmapping */ diff --git a/src/mesa/main/texobj.h b/src/mesa/main/texobj.h index ce5539263ba..313be779ddc 100644 --- a/src/mesa/main/texobj.h +++ b/src/mesa/main/texobj.h @@ -143,7 +143,7 @@ _mesa_is_texture_complete(const struct gl_texture_object *texObj, */ if (!isMultisample && (texObj->_IsIntegerFormat || - (texObj->Attrib.StencilSampling && + (texObj->StencilSampling && img->_BaseFormat == GL_DEPTH_STENCIL)) && (sampler->Attrib.MagFilter != GL_NEAREST || (sampler->Attrib.MinFilter != GL_NEAREST && diff --git a/src/mesa/main/texparam.c b/src/mesa/main/texparam.c index d99ed4f1408..a05615e2386 100644 --- a/src/mesa/main/texparam.c +++ b/src/mesa/main/texparam.c @@ -386,7 +386,7 @@ set_tex_parameteri(struct gl_context *ctx, /** See note about ARB_texture_storage below */ if (texObj->Immutable) - texObj->Attrib.BaseLevel = MIN2(texObj->ImmutableLevels - 1, params[0]); + texObj->Attrib.BaseLevel = MIN2(texObj->Attrib.ImmutableLevels - 1, params[0]); else texObj->Attrib.BaseLevel = params[0]; @@ -413,7 +413,7 @@ set_tex_parameteri(struct gl_context *ctx, */ if (texObj->Immutable) texObj->Attrib.MaxLevel = CLAMP(params[0], texObj->Attrib.BaseLevel, - texObj->ImmutableLevels - 1); + texObj->Attrib.ImmutableLevels - 1); else texObj->Attrib.MaxLevel = params[0]; @@ -503,10 +503,10 @@ set_tex_parameteri(struct gl_context *ctx, if (!stencil && params[0] != GL_DEPTH_COMPONENT) goto invalid_param; - if (texObj->Attrib.StencilSampling == stencil) + if (texObj->StencilSampling == stencil) return GL_FALSE; - texObj->Attrib.StencilSampling = stencil; + texObj->StencilSampling = stencil; return GL_TRUE; } goto invalid_pname; @@ -2246,7 +2246,7 @@ get_tex_parameterfv(struct gl_context *ctx, if (!_mesa_has_ARB_stencil_texturing(ctx) && !_mesa_is_gles31(ctx)) goto invalid_pname; *params = (GLfloat) - (obj->Attrib.StencilSampling ? GL_STENCIL_INDEX : GL_DEPTH_COMPONENT); + (obj->StencilSampling ? GL_STENCIL_INDEX : GL_DEPTH_COMPONENT); break; case GL_TEXTURE_LOD_BIAS: if (_mesa_is_gles(ctx)) @@ -2302,7 +2302,7 @@ get_tex_parameterfv(struct gl_context *ctx, case GL_TEXTURE_IMMUTABLE_LEVELS: if (_mesa_is_gles3(ctx) || _mesa_has_texture_view(ctx)) - *params = (GLfloat) obj->ImmutableLevels; + *params = (GLfloat) obj->Attrib.ImmutableLevels; else goto invalid_pname; break; @@ -2310,25 +2310,25 @@ get_tex_parameterfv(struct gl_context *ctx, case GL_TEXTURE_VIEW_MIN_LEVEL: if (!_mesa_has_texture_view(ctx)) goto invalid_pname; - *params = (GLfloat) obj->MinLevel; + *params = (GLfloat) obj->Attrib.MinLevel; break; case GL_TEXTURE_VIEW_NUM_LEVELS: if (!_mesa_has_texture_view(ctx)) goto invalid_pname; - *params = (GLfloat) obj->NumLevels; + *params = (GLfloat) obj->Attrib.NumLevels; break; case GL_TEXTURE_VIEW_MIN_LAYER: if (!_mesa_has_texture_view(ctx)) goto invalid_pname; - *params = (GLfloat) obj->MinLayer; + *params = (GLfloat) obj->Attrib.MinLayer; break; case GL_TEXTURE_VIEW_NUM_LAYERS: if (!_mesa_has_texture_view(ctx)) goto invalid_pname; - *params = (GLfloat) obj->NumLayers; + *params = (GLfloat) obj->Attrib.NumLayers; break; case GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES: @@ -2346,7 +2346,7 @@ get_tex_parameterfv(struct gl_context *ctx, case GL_IMAGE_FORMAT_COMPATIBILITY_TYPE: if (!ctx->Extensions.ARB_shader_image_load_store) goto invalid_pname; - *params = (GLfloat) obj->ImageFormatCompatibilityType; + *params = (GLfloat) obj->Attrib.ImageFormatCompatibilityType; break; case GL_TEXTURE_TARGET: @@ -2508,7 +2508,7 @@ get_tex_parameteriv(struct gl_context *ctx, if (!_mesa_has_ARB_stencil_texturing(ctx) && !_mesa_is_gles31(ctx)) goto invalid_pname; *params = (GLint) - (obj->Attrib.StencilSampling ? GL_STENCIL_INDEX : GL_DEPTH_COMPONENT); + (obj->StencilSampling ? GL_STENCIL_INDEX : GL_DEPTH_COMPONENT); break; case GL_TEXTURE_LOD_BIAS: if (_mesa_is_gles(ctx)) @@ -2568,7 +2568,7 @@ get_tex_parameteriv(struct gl_context *ctx, case GL_TEXTURE_IMMUTABLE_LEVELS: if (_mesa_is_gles3(ctx) || (_mesa_is_desktop_gl(ctx) && ctx->Extensions.ARB_texture_view)) - *params = obj->ImmutableLevels; + *params = obj->Attrib.ImmutableLevels; else goto invalid_pname; break; @@ -2576,25 +2576,25 @@ get_tex_parameteriv(struct gl_context *ctx, case GL_TEXTURE_VIEW_MIN_LEVEL: if (!ctx->Extensions.ARB_texture_view) goto invalid_pname; - *params = (GLint) obj->MinLevel; + *params = (GLint) obj->Attrib.MinLevel; break; case GL_TEXTURE_VIEW_NUM_LEVELS: if (!ctx->Extensions.ARB_texture_view) goto invalid_pname; - *params = (GLint) obj->NumLevels; + *params = (GLint) obj->Attrib.NumLevels; break; case GL_TEXTURE_VIEW_MIN_LAYER: if (!ctx->Extensions.ARB_texture_view) goto invalid_pname; - *params = (GLint) obj->MinLayer; + *params = (GLint) obj->Attrib.MinLayer; break; case GL_TEXTURE_VIEW_NUM_LAYERS: if (!ctx->Extensions.ARB_texture_view) goto invalid_pname; - *params = (GLint) obj->NumLayers; + *params = (GLint) obj->Attrib.NumLayers; break; case GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES: @@ -2612,7 +2612,7 @@ get_tex_parameteriv(struct gl_context *ctx, case GL_IMAGE_FORMAT_COMPATIBILITY_TYPE: if (!ctx->Extensions.ARB_shader_image_load_store) goto invalid_pname; - *params = obj->ImageFormatCompatibilityType; + *params = obj->Attrib.ImageFormatCompatibilityType; break; case GL_TEXTURE_TARGET: diff --git a/src/mesa/main/textureview.c b/src/mesa/main/textureview.c index 2986afb7c11..48596487d22 100644 --- a/src/mesa/main/textureview.c +++ b/src/mesa/main/textureview.c @@ -486,34 +486,34 @@ _mesa_set_texture_view_state(struct gl_context *ctx, */ texObj->Immutable = GL_TRUE; - texObj->ImmutableLevels = levels; - texObj->MinLevel = 0; - texObj->NumLevels = levels; - texObj->MinLayer = 0; - texObj->NumLayers = 1; + texObj->Attrib.ImmutableLevels = levels; + texObj->Attrib.MinLevel = 0; + texObj->Attrib.NumLevels = levels; + texObj->Attrib.MinLayer = 0; + texObj->Attrib.NumLayers = 1; switch (target) { case GL_TEXTURE_1D_ARRAY: - texObj->NumLayers = texImage->Height; + texObj->Attrib.NumLayers = texImage->Height; break; case GL_TEXTURE_2D_MULTISAMPLE: - texObj->NumLevels = 1; - texObj->ImmutableLevels = 1; + texObj->Attrib.NumLevels = 1; + texObj->Attrib.ImmutableLevels = 1; break; case GL_TEXTURE_2D_MULTISAMPLE_ARRAY: - texObj->NumLevels = 1; - texObj->ImmutableLevels = 1; + texObj->Attrib.NumLevels = 1; + texObj->Attrib.ImmutableLevels = 1; FALLTHROUGH; /* fallthrough to set NumLayers */ case GL_TEXTURE_2D_ARRAY: case GL_TEXTURE_CUBE_MAP_ARRAY: - texObj->NumLayers = texImage->Depth; + texObj->Attrib.NumLayers = texImage->Depth; break; case GL_TEXTURE_CUBE_MAP: - texObj->NumLayers = 6; + texObj->Attrib.NumLayers = 6; break; } } @@ -540,8 +540,8 @@ texture_view(struct gl_context *ctx, struct gl_texture_object *origTexObj, internalformat, GL_NONE, GL_NONE); if (texFormat == MESA_FORMAT_NONE) return; - newViewNumLevels = MIN2(numlevels, origTexObj->NumLevels - minlevel); - newViewNumLayers = MIN2(numlayers, origTexObj->NumLayers - minlayer); + newViewNumLevels = MIN2(numlevels, origTexObj->Attrib.NumLevels - minlevel); + newViewNumLayers = MIN2(numlayers, origTexObj->Attrib.NumLayers - minlayer); faceTarget = _mesa_cube_face_target(origTexObj->Target, minlayer); @@ -687,12 +687,12 @@ texture_view(struct gl_context *ctx, struct gl_texture_object *origTexObj, return; /* Already recorded error */ } - texObj->MinLevel = origTexObj->MinLevel + minlevel; - texObj->MinLayer = origTexObj->MinLayer + minlayer; - texObj->NumLevels = newViewNumLevels; - texObj->NumLayers = newViewNumLayers; + texObj->Attrib.MinLevel = origTexObj->Attrib.MinLevel + minlevel; + texObj->Attrib.MinLayer = origTexObj->Attrib.MinLayer + minlayer; + texObj->Attrib.NumLevels = newViewNumLevels; + texObj->Attrib.NumLayers = newViewNumLayers; texObj->Immutable = GL_TRUE; - texObj->ImmutableLevels = origTexObj->ImmutableLevels; + texObj->Attrib.ImmutableLevels = origTexObj->Attrib.ImmutableLevels; texObj->Target = target; texObj->TargetIndex = _mesa_tex_target_to_index(ctx, target); assert(texObj->TargetIndex < NUM_TEXTURE_TARGETS); @@ -800,21 +800,25 @@ _mesa_TextureView(GLuint texture, GLenum target, GLuint origtexture, * If minlevel or minlayer is greater than level or layer, respectively, * return INVALID_VALUE. */ - newViewMinLevel = origTexObj->MinLevel + minlevel; - newViewMinLayer = origTexObj->MinLayer + minlayer; - if (newViewMinLevel >= (origTexObj->MinLevel + origTexObj->NumLevels)) { + newViewMinLevel = origTexObj->Attrib.MinLevel + minlevel; + newViewMinLayer = origTexObj->Attrib.MinLayer + minlayer; + if (newViewMinLevel >= (origTexObj->Attrib.MinLevel + + origTexObj->Attrib.NumLevels)) { _mesa_error(ctx, GL_INVALID_VALUE, "glTextureView(new minlevel (%d) > orig minlevel (%d)" " + orig numlevels (%d))", - newViewMinLevel, origTexObj->MinLevel, origTexObj->NumLevels); + newViewMinLevel, origTexObj->Attrib.MinLevel, + origTexObj->Attrib.NumLevels); return; } - if (newViewMinLayer >= (origTexObj->MinLayer + origTexObj->NumLayers)) { + if (newViewMinLayer >= (origTexObj->Attrib.MinLayer + + origTexObj->Attrib.NumLayers)) { _mesa_error(ctx, GL_INVALID_VALUE, "glTextureView(new minlayer (%d) > orig minlayer (%d)" " + orig numlayers (%d))", - newViewMinLayer, origTexObj->MinLayer, origTexObj->NumLayers); + newViewMinLayer, origTexObj->Attrib.MinLayer, + origTexObj->Attrib.NumLayers); return; } diff --git a/src/mesa/state_tracker/st_atom_image.c b/src/mesa/state_tracker/st_atom_image.c index 0cf63db57ab..0cb69c2ba26 100644 --- a/src/mesa/state_tracker/st_atom_image.c +++ b/src/mesa/state_tracker/st_atom_image.c @@ -113,7 +113,7 @@ st_convert_image(const struct st_context *st, const struct gl_image_unit *u, } img->resource = stObj->pt; - img->u.tex.level = u->Level + stObj->base.MinLevel; + img->u.tex.level = u->Level + stObj->base.Attrib.MinLevel; assert(img->u.tex.level <= img->resource->last_level); if (stObj->pt->target == PIPE_TEXTURE_3D) { if (u->Layered) { @@ -124,11 +124,11 @@ st_convert_image(const struct st_context *st, const struct gl_image_unit *u, img->u.tex.last_layer = u->_Layer; } } else { - img->u.tex.first_layer = u->_Layer + stObj->base.MinLayer; - img->u.tex.last_layer = u->_Layer + stObj->base.MinLayer; + img->u.tex.first_layer = u->_Layer + stObj->base.Attrib.MinLayer; + img->u.tex.last_layer = u->_Layer + stObj->base.Attrib.MinLayer; if (u->Layered && img->resource->array_size > 1) { if (stObj->base.Immutable) - img->u.tex.last_layer += stObj->base.NumLayers - 1; + img->u.tex.last_layer += stObj->base.Attrib.NumLayers - 1; else img->u.tex.last_layer += img->resource->array_size - 1; } diff --git a/src/mesa/state_tracker/st_atom_sampler.c b/src/mesa/state_tracker/st_atom_sampler.c index 3ea5a25464e..a2af3a7b7e0 100644 --- a/src/mesa/state_tracker/st_atom_sampler.c +++ b/src/mesa/state_tracker/st_atom_sampler.c @@ -168,7 +168,7 @@ st_convert_sampler(const struct st_context *st, const GLboolean is_integer = texobj->_IsIntegerFormat; GLenum texBaseFormat = _mesa_base_tex_image(texobj)->_BaseFormat; - if (texobj->Attrib.StencilSampling) + if (texobj->StencilSampling) texBaseFormat = GL_STENCIL_INDEX; if (st->apply_texture_swizzle_to_border_color) { @@ -212,7 +212,7 @@ st_convert_sampler(const struct st_context *st, GLenum texBaseFormat = _mesa_base_tex_image(texobj)->_BaseFormat; if (texBaseFormat == GL_DEPTH_COMPONENT || - (texBaseFormat == GL_DEPTH_STENCIL && !texobj->Attrib.StencilSampling)) { + (texBaseFormat == GL_DEPTH_STENCIL && !texobj->StencilSampling)) { sampler->compare_mode = PIPE_TEX_COMPARE_R_TO_TEXTURE; sampler->compare_func = st_compare_func_to_pipe(msamp->Attrib.CompareFunc); } diff --git a/src/mesa/state_tracker/st_cb_copyimage.c b/src/mesa/state_tracker/st_cb_copyimage.c index 5d79148db7b..aae732ea372 100644 --- a/src/mesa/state_tracker/st_cb_copyimage.c +++ b/src/mesa/state_tracker/st_cb_copyimage.c @@ -650,8 +650,8 @@ st_CopyImageSubData(struct gl_context *ctx, src_level = stObj->pt != src_res ? 0 : src_image->Level; src_z += src_image->Face; if (src_image->TexObject->Immutable) { - src_level += src_image->TexObject->MinLevel; - src_z += src_image->TexObject->MinLayer; + src_level += src_image->TexObject->Attrib.MinLevel; + src_z += src_image->TexObject->Attrib.MinLayer; } } else { struct st_renderbuffer *src = st_renderbuffer(src_renderbuffer); @@ -666,8 +666,8 @@ st_CopyImageSubData(struct gl_context *ctx, dst_level = stObj->pt != dst_res ? 0 : dst_image->Level; dst_z += dst_image->Face; if (dst_image->TexObject->Immutable) { - dst_level += dst_image->TexObject->MinLevel; - dst_z += dst_image->TexObject->MinLayer; + dst_level += dst_image->TexObject->Attrib.MinLevel; + dst_z += dst_image->TexObject->Attrib.MinLayer; } } else { struct st_renderbuffer *dst = st_renderbuffer(dst_renderbuffer); diff --git a/src/mesa/state_tracker/st_cb_fbo.c b/src/mesa/state_tracker/st_cb_fbo.c index 1337bc47a74..18e1841b2de 100644 --- a/src/mesa/state_tracker/st_cb_fbo.c +++ b/src/mesa/state_tracker/st_cb_fbo.c @@ -513,11 +513,12 @@ st_update_renderbuffer_surface(struct st_context *st, if (strb->is_rtt && resource->array_size > 1 && stTexObj->base.Immutable) { const struct gl_texture_object *tex = &stTexObj->base; - first_layer += tex->MinLayer; + first_layer += tex->Attrib.MinLayer; if (!strb->rtt_layered) - last_layer += tex->MinLayer; + last_layer += tex->Attrib.MinLayer; else - last_layer = MIN2(first_layer + tex->NumLayers - 1, last_layer); + last_layer = MIN2(first_layer + tex->Attrib.NumLayers - 1, + last_layer); } struct pipe_surface **psurf = diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c index 67c1dc7f587..463944061f7 100644 --- a/src/mesa/state_tracker/st_cb_texture.c +++ b/src/mesa/state_tracker/st_cb_texture.c @@ -1459,10 +1459,10 @@ try_pbo_upload(struct gl_context *ctx, GLuint dims, /* Set up the surface */ { unsigned level = stObj->pt != stImage->pt - ? 0 : texImage->TexObject->MinLevel + texImage->Level; + ? 0 : texImage->TexObject->Attrib.MinLevel + texImage->Level; unsigned max_layer = util_max_layer(texture, level); - zoffset += texImage->Face + texImage->TexObject->MinLayer; + zoffset += texImage->Face + texImage->TexObject->Attrib.MinLayer; struct pipe_surface templ; memset(&templ, 0, sizeof(templ)); @@ -1507,7 +1507,7 @@ st_TexSubImage(struct gl_context *ctx, GLuint dims, GLenum gl_target = texImage->TexObject->Target; unsigned bind; GLubyte *map; - unsigned dstz = texImage->Face + texImage->TexObject->MinLayer; + unsigned dstz = texImage->Face + texImage->TexObject->Attrib.MinLayer; unsigned dst_level = 0; bool throttled = false; @@ -1515,7 +1515,7 @@ st_TexSubImage(struct gl_context *ctx, GLuint dims, st_invalidate_readpix_cache(st); if (stObj->pt == stImage->pt) - dst_level = texImage->TexObject->MinLevel + texImage->Level; + dst_level = texImage->TexObject->Attrib.MinLevel + texImage->Level; assert(!_mesa_is_format_etc2(texImage->TexFormat) && !_mesa_is_format_astc_2d(texImage->TexFormat) && @@ -1889,10 +1889,10 @@ st_CompressedTexSubImage(struct gl_context *ctx, GLuint dims, /* Set up the surface. */ { unsigned level = stObj->pt != stImage->pt - ? 0 : texImage->TexObject->MinLevel + texImage->Level; + ? 0 : texImage->TexObject->Attrib.MinLevel + texImage->Level; unsigned max_layer = util_max_layer(texture, level); - GLint layer = z + texImage->Face + texImage->TexObject->MinLayer; + GLint layer = z + texImage->Face + texImage->TexObject->Attrib.MinLayer; struct pipe_surface templ; memset(&templ, 0, sizeof(templ)); @@ -2188,12 +2188,12 @@ st_GetTexSubImage(struct gl_context * ctx, } assert(texImage->Face == 0 || - texImage->TexObject->MinLayer == 0 || + texImage->TexObject->Attrib.MinLayer == 0 || zoffset == 0); memset(&blit, 0, sizeof(blit)); blit.src.resource = src; - blit.src.level = texImage->Level + texImage->TexObject->MinLevel; + blit.src.level = texImage->Level + texImage->TexObject->Attrib.MinLevel; blit.src.format = src_format; blit.dst.resource = dst; blit.dst.level = 0; @@ -2202,7 +2202,7 @@ st_GetTexSubImage(struct gl_context * ctx, blit.dst.box.x = 0; blit.src.box.y = yoffset; blit.dst.box.y = 0; - blit.src.box.z = texImage->Face + texImage->TexObject->MinLayer + zoffset; + blit.src.box.z = texImage->Face + texImage->TexObject->Attrib.MinLayer + zoffset; blit.dst.box.z = 0; blit.src.box.width = blit.dst.box.width = width; blit.src.box.height = blit.dst.box.height = height; @@ -2592,10 +2592,11 @@ st_CopyTexSubImage(struct gl_context *ctx, GLuint dims, blit.dst.resource = stImage->pt; blit.dst.format = dst_format; blit.dst.level = stObj->pt != stImage->pt - ? 0 : texImage->Level + texImage->TexObject->MinLevel; + ? 0 : texImage->Level + texImage->TexObject->Attrib.MinLevel; blit.dst.box.x = destX; blit.dst.box.y = destY; - blit.dst.box.z = stImage->base.Face + slice + texImage->TexObject->MinLayer; + blit.dst.box.z = stImage->base.Face + slice + + texImage->TexObject->Attrib.MinLayer; blit.dst.box.width = width; blit.dst.box.height = height; blit.dst.box.depth = 1; @@ -3134,7 +3135,7 @@ st_TextureView(struct gl_context *ctx, struct gl_texture_image *image = texObj->Image[0][0]; const int numFaces = _mesa_num_tex_faces(texObj->Target); - const int numLevels = texObj->NumLevels; + const int numLevels = texObj->Attrib.NumLevels; int face; int level; @@ -3244,8 +3245,8 @@ st_ClearTexSubImage(struct gl_context *ctx, * not a texture view, the offsets will be zero. */ assert(stImage->pt == st_texture_object(texObj)->pt); - level = texImage->Level + texObj->MinLevel; - box.z += texObj->MinLayer; + level = texImage->Level + texObj->Attrib.MinLevel; + box.z += texObj->Attrib.MinLayer; } else { /* Texture level sizes may be inconsistent. We my have "loose", diff --git a/src/mesa/state_tracker/st_gen_mipmap.c b/src/mesa/state_tracker/st_gen_mipmap.c index 70a56c4431e..8f39315178e 100644 --- a/src/mesa/state_tracker/st_gen_mipmap.c +++ b/src/mesa/state_tracker/st_gen_mipmap.c @@ -64,7 +64,7 @@ st_generate_mipmap(struct gl_context *ctx, GLenum target, return; if (texObj->Immutable) - baseLevel += texObj->MinLevel; + baseLevel += texObj->Attrib.MinLevel; /* not sure if this ultimately actually should work, but we're not supporting multisampled textures yet. */ @@ -74,7 +74,7 @@ st_generate_mipmap(struct gl_context *ctx, GLenum target, lastLevel = _mesa_compute_num_levels(ctx, texObj, target) - 1; if (texObj->Immutable) - lastLevel += texObj->MinLevel; + lastLevel += texObj->Attrib.MinLevel; if (lastLevel == 0) return; diff --git a/src/mesa/state_tracker/st_sampler_view.c b/src/mesa/state_tracker/st_sampler_view.c index 1516d0deb6b..0eb22cfae0f 100644 --- a/src/mesa/state_tracker/st_sampler_view.c +++ b/src/mesa/state_tracker/st_sampler_view.c @@ -445,10 +445,11 @@ check_sampler_swizzle(const struct st_context *st, static unsigned last_level(const struct st_texture_object *stObj) { - unsigned ret = MIN2(stObj->base.MinLevel + stObj->base._MaxLevel, + unsigned ret = MIN2(stObj->base.Attrib.MinLevel + stObj->base._MaxLevel, stObj->pt->last_level); if (stObj->base.Immutable) - ret = MIN2(ret, stObj->base.MinLevel + stObj->base.NumLevels - 1); + ret = MIN2(ret, stObj->base.Attrib.MinLevel + + stObj->base.Attrib.NumLevels - 1); return ret; } @@ -457,7 +458,8 @@ static unsigned last_layer(const struct st_texture_object *stObj) { if (stObj->base.Immutable && stObj->pt->array_size > 1) - return MIN2(stObj->base.MinLayer + stObj->base.NumLayers - 1, + return MIN2(stObj->base.Attrib.MinLayer + + stObj->base.Attrib.NumLayers - 1, stObj->pt->array_size - 1); return stObj->pt->array_size - 1; } @@ -479,7 +481,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.Attrib.StencilSampling || baseFormat == GL_STENCIL_INDEX) + if (stObj->base.StencilSampling || baseFormat == GL_STENCIL_INDEX) format = util_format_stencil_only(format); return format; @@ -541,13 +543,14 @@ 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.Attrib.BaseLevel; + templ.u.tex.first_level = stObj->base.Attrib.MinLevel + + stObj->base.Attrib.BaseLevel; templ.u.tex.last_level = last_level(stObj); } if (stObj->layer_override >= 0) { templ.u.tex.first_layer = templ.u.tex.last_layer = stObj->layer_override; } else { - templ.u.tex.first_layer = stObj->base.MinLayer; + templ.u.tex.first_layer = stObj->base.Attrib.MinLayer; templ.u.tex.last_layer = last_layer(stObj); } assert(templ.u.tex.first_layer <= templ.u.tex.last_layer); @@ -590,9 +593,11 @@ 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.Attrib.BaseLevel == view->u.tex.first_level); + stObj->base.Attrib.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 || + stObj->base.Attrib.MinLayer == view->u.tex.first_layer); assert(stObj->layer_override >= 0 || last_layer(stObj) == view->u.tex.last_layer); assert(stObj->layer_override < 0 || (stObj->layer_override == view->u.tex.first_layer && diff --git a/src/mesa/state_tracker/st_texture.c b/src/mesa/state_tracker/st_texture.c index bb63eefdffe..3510704ddf8 100644 --- a/src/mesa/state_tracker/st_texture.c +++ b/src/mesa/state_tracker/st_texture.c @@ -268,10 +268,10 @@ st_texture_image_map(struct st_context *st, struct st_texture_image *stImage, level = stImage->base.Level; if (stObj->base.Immutable) { - level += stObj->base.MinLevel; - z += stObj->base.MinLayer; + level += stObj->base.Attrib.MinLevel; + z += stObj->base.Attrib.MinLayer; if (stObj->pt->array_size > 1) - d = MIN2(d, stObj->base.NumLayers); + d = MIN2(d, stObj->base.Attrib.NumLayers); } z += stImage->base.Face; @@ -308,7 +308,7 @@ st_texture_image_unmap(struct st_context *st, struct pipe_transfer **transfer; if (stObj->base.Immutable) - slice += stObj->base.MinLayer; + slice += stObj->base.Attrib.MinLayer; transfer = &stImage->transfer[slice + stImage->base.Face].transfer; DBG("%s\n", __func__);