mesa: fix glPopAttrib for many texture fields
Move the fields that should be restored by glPopAttrib into the Attrib structure, which is the only portion of texture objects that is restored by glPopAttrib. Also moves fields that should not be restored by glPopAttrib out of the Attrib structure. This is based on the GL 4.6 Compatibility spec. Reviewed-by: Zoltán Böszörményi <zboszor@gmail.com> Acked-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8181>
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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.
|
||||
*/
|
||||
|
@@ -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,
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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,
|
||||
|
@@ -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
|
||||
|
@@ -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;
|
||||
|
@@ -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) :
|
||||
|
@@ -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;
|
||||
|
@@ -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.
|
||||
|
@@ -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) {
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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 */
|
||||
|
@@ -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))
|
||||
|
@@ -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 */
|
||||
|
@@ -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 &&
|
||||
|
@@ -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:
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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);
|
||||
|
@@ -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 =
|
||||
|
@@ -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",
|
||||
|
@@ -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;
|
||||
|
@@ -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 &&
|
||||
|
@@ -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__);
|
||||
|
Reference in New Issue
Block a user