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->internal_format = obj->Image[0][0]->InternalFormat;
|
||||||
out->view_minlevel = obj->MinLevel;
|
out->view_minlevel = obj->Attrib.MinLevel;
|
||||||
out->view_numlevels = obj->NumLevels;
|
out->view_numlevels = obj->Attrib.NumLevels;
|
||||||
out->view_minlayer = obj->MinLayer;
|
out->view_minlayer = obj->Attrib.MinLayer;
|
||||||
out->view_numlayers = obj->NumLayers;
|
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.tex_obj = texObj;
|
||||||
fb_tex_blit.baseLevelSave = texObj->Attrib.BaseLevel;
|
fb_tex_blit.baseLevelSave = texObj->Attrib.BaseLevel;
|
||||||
fb_tex_blit.maxLevelSave = texObj->Attrib.MaxLevel;
|
fb_tex_blit.maxLevelSave = texObj->Attrib.MaxLevel;
|
||||||
fb_tex_blit.stencilSamplingSave = texObj->Attrib.StencilSampling;
|
fb_tex_blit.stencilSamplingSave = texObj->StencilSampling;
|
||||||
|
|
||||||
if (glsl_version) {
|
if (glsl_version) {
|
||||||
setup_glsl_blit_framebuffer(ctx, blit, drawFb, rb, target, do_depth);
|
setup_glsl_blit_framebuffer(ctx, blit, drawFb, rb, target, do_depth);
|
||||||
@@ -338,7 +338,7 @@ _mesa_meta_fb_tex_blit_end(struct gl_context *ctx, GLenum target,
|
|||||||
&blit->maxLevelSave, false);
|
&blit->maxLevelSave, false);
|
||||||
|
|
||||||
/* If ARB_stencil_texturing is not supported, the mode won't have changed. */
|
/* If ARB_stencil_texturing is not supported, the mode won't have changed. */
|
||||||
if (texObj->Attrib.StencilSampling != blit->stencilSamplingSave) {
|
if (texObj->StencilSampling != blit->stencilSamplingSave) {
|
||||||
/* GLint so the compiler won't complain about type signedness mismatch
|
/* GLint so the compiler won't complain about type signedness mismatch
|
||||||
* in the call to _mesa_texture_parameteriv below.
|
* in the call to _mesa_texture_parameteriv below.
|
||||||
*/
|
*/
|
||||||
|
@@ -745,8 +745,8 @@ brw_blorp_copytexsubimage(struct brw_context *brw,
|
|||||||
apply_y_flip(&srcY0, &srcY1, src_rb->Height);
|
apply_y_flip(&srcY0, &srcY1, src_rb->Height);
|
||||||
|
|
||||||
/* Account for face selection and texture view MinLayer */
|
/* Account for face selection and texture view MinLayer */
|
||||||
int dst_slice = slice + dst_image->TexObject->MinLayer + dst_image->Face;
|
int dst_slice = slice + dst_image->TexObject->Attrib.MinLayer + dst_image->Face;
|
||||||
int dst_level = dst_image->Level + dst_image->TexObject->MinLevel;
|
int dst_level = dst_image->Level + dst_image->TexObject->Attrib.MinLevel;
|
||||||
|
|
||||||
brw_blorp_blit_miptrees(brw,
|
brw_blorp_blit_miptrees(brw,
|
||||||
src_mt, src_irb->mt_level, src_irb->mt_layer,
|
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;
|
unsigned min_level, min_layer, num_levels, num_layers;
|
||||||
if (tex_obj->base.Immutable) {
|
if (tex_obj->base.Immutable) {
|
||||||
min_level = tex_obj->base.MinLevel;
|
min_level = tex_obj->base.Attrib.MinLevel;
|
||||||
num_levels = MIN2(tex_obj->base.NumLevels, tex_obj->_MaxLevel + 1);
|
num_levels = MIN2(tex_obj->base.Attrib.NumLevels, tex_obj->_MaxLevel + 1);
|
||||||
min_layer = tex_obj->base.MinLayer;
|
min_layer = tex_obj->base.Attrib.MinLayer;
|
||||||
num_layers = tex_obj->base.Target != GL_TEXTURE_3D ?
|
num_layers = tex_obj->base.Target != GL_TEXTURE_3D ?
|
||||||
tex_obj->base.NumLayers : INTEL_REMAINING_LAYERS;
|
tex_obj->base.Attrib.NumLayers : INTEL_REMAINING_LAYERS;
|
||||||
} else {
|
} else {
|
||||||
min_level = tex_obj->base.Attrib.BaseLevel;
|
min_level = tex_obj->base.Attrib.BaseLevel;
|
||||||
num_levels = tex_obj->_MaxLevel - tex_obj->base.Attrib.BaseLevel + 1;
|
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);
|
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) {
|
tex_obj->mt->format == MESA_FORMAT_S_UINT8) {
|
||||||
intel_update_r8stencil(brw, tex_obj->mt);
|
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;
|
unsigned view_num_layers;
|
||||||
if (obj->Immutable && obj->Target != GL_TEXTURE_3D) {
|
if (obj->Immutable && obj->Target != GL_TEXTURE_3D) {
|
||||||
view_num_layers = obj->NumLayers;
|
view_num_layers = obj->Attrib.NumLayers;
|
||||||
} else {
|
} else {
|
||||||
view_num_layers = mt->surf.dim == ISL_SURF_DIM_3D ?
|
view_num_layers = mt->surf.dim == ISL_SURF_DIM_3D ?
|
||||||
mt->surf.logical_level0_px.depth :
|
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) {
|
if (devinfo->gen <= 7) {
|
||||||
assert(mt->shadow_mt && !mt->stencil_mt->shadow_needs_update);
|
assert(mt->shadow_mt && !mt->stencil_mt->shadow_needs_update);
|
||||||
mt = mt->shadow_mt;
|
mt = mt->shadow_mt;
|
||||||
@@ -587,9 +587,9 @@ static void brw_update_texture_surface(struct gl_context *ctx,
|
|||||||
|
|
||||||
struct isl_view view = {
|
struct isl_view view = {
|
||||||
.format = format,
|
.format = format,
|
||||||
.base_level = obj->MinLevel + obj->Attrib.BaseLevel,
|
.base_level = obj->Attrib.MinLevel + obj->Attrib.BaseLevel,
|
||||||
.levels = intel_obj->_MaxLevel - obj->Attrib.BaseLevel + 1,
|
.levels = intel_obj->_MaxLevel - obj->Attrib.BaseLevel + 1,
|
||||||
.base_array_layer = obj->MinLayer,
|
.base_array_layer = obj->Attrib.MinLayer,
|
||||||
.array_len = view_num_layers,
|
.array_len = view_num_layers,
|
||||||
.swizzle = {
|
.swizzle = {
|
||||||
.r = swizzle_to_scs(GET_SWZ(swizzle, 0), need_green_to_blue),
|
.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);
|
GLenum base_format = _mesa_get_format_base_format(iobj->_Format);
|
||||||
return base_format == GL_DEPTH_COMPONENT ||
|
return base_format == GL_DEPTH_COMPONENT ||
|
||||||
(base_format == GL_DEPTH_STENCIL && !iobj->base.Attrib.StencilSampling);
|
(base_format == GL_DEPTH_STENCIL && !iobj->base.StencilSampling);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -1550,20 +1550,20 @@ update_image_surface(struct brw_context *brw,
|
|||||||
base_layer = 0;
|
base_layer = 0;
|
||||||
num_layers = minify(mt->surf.logical_level0_px.depth, u->Level);
|
num_layers = minify(mt->surf.logical_level0_px.depth, u->Level);
|
||||||
} else {
|
} else {
|
||||||
assert(obj->Immutable || obj->MinLayer == 0);
|
assert(obj->Immutable || obj->Attrib.MinLayer == 0);
|
||||||
base_layer = obj->MinLayer;
|
base_layer = obj->Attrib.MinLayer;
|
||||||
num_layers = obj->Immutable ?
|
num_layers = obj->Immutable ?
|
||||||
obj->NumLayers :
|
obj->Attrib.NumLayers :
|
||||||
mt->surf.logical_level0_px.array_len;
|
mt->surf.logical_level0_px.array_len;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
base_layer = obj->MinLayer + u->_Layer;
|
base_layer = obj->Attrib.MinLayer + u->_Layer;
|
||||||
num_layers = 1;
|
num_layers = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct isl_view view = {
|
struct isl_view view = {
|
||||||
.format = format,
|
.format = format,
|
||||||
.base_level = obj->MinLevel + u->Level,
|
.base_level = obj->Attrib.MinLevel + u->Level,
|
||||||
.levels = 1,
|
.levels = 1,
|
||||||
.base_array_layer = base_layer,
|
.base_array_layer = base_layer,
|
||||||
.array_len = num_layers,
|
.array_len = num_layers,
|
||||||
|
@@ -5321,7 +5321,7 @@ genX(update_sampler_state)(struct brw_context *brw,
|
|||||||
|
|
||||||
#if GEN_GEN == 6
|
#if GEN_GEN == 6
|
||||||
samp_st.BaseMipLevel =
|
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.MinandMagStateNotEqual =
|
||||||
samp_st.MinModeFilter != samp_st.MagModeFilter;
|
samp_st.MinModeFilter != samp_st.MagModeFilter;
|
||||||
#endif
|
#endif
|
||||||
@@ -5336,7 +5336,7 @@ genX(update_sampler_state)(struct brw_context *brw,
|
|||||||
wrap_mode_needs_border_color(wrap_r)) {
|
wrap_mode_needs_border_color(wrap_r)) {
|
||||||
genX(upload_default_color)(brw, sampler, format, base_format,
|
genX(upload_default_color)(brw, sampler, format, base_format,
|
||||||
texObj->_IsIntegerFormat,
|
texObj->_IsIntegerFormat,
|
||||||
texObj->Attrib.StencilSampling,
|
texObj->StencilSampling,
|
||||||
&border_color_offset);
|
&border_color_offset);
|
||||||
}
|
}
|
||||||
#if GEN_GEN < 6
|
#if GEN_GEN < 6
|
||||||
|
@@ -81,13 +81,13 @@ intel_copy_image_sub_data(struct gl_context *ctx,
|
|||||||
|
|
||||||
if (src_image) {
|
if (src_image) {
|
||||||
src_mt = intel_texture_image(src_image)->mt;
|
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 */
|
/* Cube maps actually have different images per face */
|
||||||
if (src_image->TexObject->Target == GL_TEXTURE_CUBE_MAP)
|
if (src_image->TexObject->Target == GL_TEXTURE_CUBE_MAP)
|
||||||
src_z = src_image->Face;
|
src_z = src_image->Face;
|
||||||
|
|
||||||
src_z += src_image->TexObject->MinLayer;
|
src_z += src_image->TexObject->Attrib.MinLayer;
|
||||||
} else {
|
} else {
|
||||||
assert(src_renderbuffer);
|
assert(src_renderbuffer);
|
||||||
src_mt = intel_renderbuffer(src_renderbuffer)->mt;
|
src_mt = intel_renderbuffer(src_renderbuffer)->mt;
|
||||||
@@ -98,13 +98,13 @@ intel_copy_image_sub_data(struct gl_context *ctx,
|
|||||||
if (dst_image) {
|
if (dst_image) {
|
||||||
dst_mt = intel_texture_image(dst_image)->mt;
|
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 */
|
/* Cube maps actually have different images per face */
|
||||||
if (dst_image->TexObject->Target == GL_TEXTURE_CUBE_MAP)
|
if (dst_image->TexObject->Target == GL_TEXTURE_CUBE_MAP)
|
||||||
dst_z = dst_image->Face;
|
dst_z = dst_image->Face;
|
||||||
|
|
||||||
dst_z += dst_image->TexObject->MinLayer;
|
dst_z += dst_image->TexObject->Attrib.MinLayer;
|
||||||
} else {
|
} else {
|
||||||
assert(dst_renderbuffer);
|
assert(dst_renderbuffer);
|
||||||
dst_mt = intel_renderbuffer(dst_renderbuffer)->mt;
|
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;
|
rb->AllocStorage = intel_nop_alloc_storage;
|
||||||
|
|
||||||
/* adjust for texture view parameters */
|
/* adjust for texture view parameters */
|
||||||
layer += image->TexObject->MinLayer;
|
layer += image->TexObject->Attrib.MinLayer;
|
||||||
level += image->TexObject->MinLevel;
|
level += image->TexObject->Attrib.MinLevel;
|
||||||
|
|
||||||
intel_miptree_check_level_layer(mt, level, layer);
|
intel_miptree_check_level_layer(mt, level, layer);
|
||||||
irb->mt_level = level;
|
irb->mt_level = level;
|
||||||
@@ -549,8 +549,8 @@ intel_renderbuffer_update_wrapper(struct brw_context *brw,
|
|||||||
|
|
||||||
if (!layered) {
|
if (!layered) {
|
||||||
irb->layer_count = 1;
|
irb->layer_count = 1;
|
||||||
} else if (mt->target != GL_TEXTURE_3D && image->TexObject->NumLayers > 0) {
|
} else if (mt->target != GL_TEXTURE_3D && image->TexObject->Attrib.NumLayers > 0) {
|
||||||
irb->layer_count = image->TexObject->NumLayers;
|
irb->layer_count = image->TexObject->Attrib.NumLayers;
|
||||||
} else {
|
} else {
|
||||||
irb->layer_count = mt->surf.dim == ISL_SURF_DIM_3D ?
|
irb->layer_count = mt->surf.dim == ISL_SURF_DIM_3D ?
|
||||||
minify(mt->surf.logical_level0_px.depth, level) :
|
minify(mt->surf.logical_level0_px.depth, level) :
|
||||||
|
@@ -231,8 +231,8 @@ intel_map_texture_image(struct gl_context *ctx,
|
|||||||
slice = tex_image->Face;
|
slice = tex_image->Face;
|
||||||
|
|
||||||
intel_miptree_map(brw, mt,
|
intel_miptree_map(brw, mt,
|
||||||
tex_image->Level + tex_image->TexObject->MinLevel,
|
tex_image->Level + tex_image->TexObject->Attrib.MinLevel,
|
||||||
slice + tex_image->TexObject->MinLayer,
|
slice + tex_image->TexObject->Attrib.MinLayer,
|
||||||
x, y, w, h, mode,
|
x, y, w, h, mode,
|
||||||
(void **)map, &stride);
|
(void **)map, &stride);
|
||||||
|
|
||||||
@@ -251,8 +251,8 @@ intel_unmap_texture_image(struct gl_context *ctx,
|
|||||||
slice = tex_image->Face;
|
slice = tex_image->Face;
|
||||||
|
|
||||||
intel_miptree_unmap(brw, mt,
|
intel_miptree_unmap(brw, mt,
|
||||||
tex_image->Level + tex_image->TexObject->MinLevel,
|
tex_image->Level + tex_image->TexObject->Attrib.MinLevel,
|
||||||
slice + tex_image->TexObject->MinLayer);
|
slice + tex_image->TexObject->Attrib.MinLayer);
|
||||||
}
|
}
|
||||||
|
|
||||||
static GLboolean
|
static GLboolean
|
||||||
@@ -274,7 +274,7 @@ intel_texture_view(struct gl_context *ctx,
|
|||||||
* except it hasn't copied our mt pointers, etc.
|
* except it hasn't copied our mt pointers, etc.
|
||||||
*/
|
*/
|
||||||
const int numFaces = _mesa_num_tex_faces(texObj->Target);
|
const int numFaces = _mesa_num_tex_faces(texObj->Target);
|
||||||
const int numLevels = texObj->NumLevels;
|
const int numLevels = texObj->Attrib.NumLevels;
|
||||||
|
|
||||||
int face;
|
int face;
|
||||||
int level;
|
int level;
|
||||||
|
@@ -136,8 +136,8 @@ intel_texsubimage_blorp(struct brw_context *brw, GLuint dims,
|
|||||||
const struct gl_pixelstore_attrib *packing)
|
const struct gl_pixelstore_attrib *packing)
|
||||||
{
|
{
|
||||||
struct intel_texture_image *intel_image = intel_texture_image(tex_image);
|
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_level = tex_image->Level + tex_image->TexObject->Attrib.MinLevel;
|
||||||
const unsigned mt_z = tex_image->TexObject->MinLayer + tex_image->Face + z;
|
const unsigned mt_z = tex_image->TexObject->Attrib.MinLayer + tex_image->Face + z;
|
||||||
|
|
||||||
/* The blorp path can't understand crazy format hackery */
|
/* The blorp path can't understand crazy format hackery */
|
||||||
if (_mesa_base_tex_format(&brw->ctx, tex_image->InternalFormat) !=
|
if (_mesa_base_tex_format(&brw->ctx, tex_image->InternalFormat) !=
|
||||||
@@ -228,7 +228,7 @@ intel_texsubimage_tiled_memcpy(struct gl_context * ctx,
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* If this is a nontrivial texture view, let another path handle it instead. */
|
/* If this is a nontrivial texture view, let another path handle it instead. */
|
||||||
if (texImage->TexObject->MinLayer)
|
if (texImage->TexObject->Attrib.MinLayer)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!image->mt ||
|
if (!image->mt ||
|
||||||
@@ -249,7 +249,7 @@ intel_texsubimage_tiled_memcpy(struct gl_context * ctx,
|
|||||||
if (devinfo->gen < 5 && brw->has_swizzling)
|
if (devinfo->gen < 5 && brw->has_swizzling)
|
||||||
return false;
|
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
|
/* Since we are going to write raw data to the miptree, we need to resolve
|
||||||
* any pending fast color clears before we start.
|
* 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)
|
const struct gl_pixelstore_attrib *packing)
|
||||||
{
|
{
|
||||||
struct intel_texture_image *intel_image = intel_texture_image(tex_image);
|
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_level = tex_image->Level + tex_image->TexObject->Attrib.MinLevel;
|
||||||
const unsigned mt_z = tex_image->TexObject->MinLayer + tex_image->Face + z;
|
const unsigned mt_z = tex_image->TexObject->Attrib.MinLayer + tex_image->Face + z;
|
||||||
|
|
||||||
/* The blorp path can't understand crazy format hackery */
|
/* The blorp path can't understand crazy format hackery */
|
||||||
if (_mesa_base_tex_format(&brw->ctx, tex_image->InternalFormat) !=
|
if (_mesa_base_tex_format(&brw->ctx, tex_image->InternalFormat) !=
|
||||||
@@ -781,7 +781,7 @@ intel_gettexsubimage_tiled_memcpy(struct gl_context *ctx,
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* If this is a nontrivial texture view, let another path handle it instead. */
|
/* If this is a nontrivial texture view, let another path handle it instead. */
|
||||||
if (texImage->TexObject->MinLayer)
|
if (texImage->TexObject->Attrib.MinLayer)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!image->mt ||
|
if (!image->mt ||
|
||||||
@@ -802,7 +802,7 @@ intel_gettexsubimage_tiled_memcpy(struct gl_context *ctx,
|
|||||||
if (devinfo->gen < 5 && brw->has_swizzling)
|
if (devinfo->gen < 5 && brw->has_swizzling)
|
||||||
return false;
|
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
|
/* Since we are going to write raw data to the miptree, we need to resolve
|
||||||
* any pending fast color clears before we start.
|
* 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
|
* greater than or equal to zero and smaller than the value of
|
||||||
* TEXTURE_VIEW_NUM_LEVELS for texture."
|
* 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);
|
_mesa_max_texture_levels(ctx, target);
|
||||||
|
|
||||||
if (level < 0 || level >= max_levels) {
|
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.
|
* just with the purpose of getting the value.
|
||||||
*/
|
*/
|
||||||
struct gl_texture_object *tex_obj = _mesa_new_texture_object(ctx, 0, target);
|
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);
|
_mesa_delete_texture_object(ctx, tex_obj);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@@ -62,7 +62,7 @@ _mesa_compute_num_levels(struct gl_context *ctx,
|
|||||||
numLevels = texObj->Attrib.BaseLevel + baseImage->MaxNumLevels;
|
numLevels = texObj->Attrib.BaseLevel + baseImage->MaxNumLevels;
|
||||||
numLevels = MIN2(numLevels, (GLuint) texObj->Attrib.MaxLevel + 1);
|
numLevels = MIN2(numLevels, (GLuint) texObj->Attrib.MaxLevel + 1);
|
||||||
if (texObj->Immutable)
|
if (texObj->Immutable)
|
||||||
numLevels = MIN2(numLevels, texObj->NumLevels);
|
numLevels = MIN2(numLevels, texObj->Attrib.NumLevels);
|
||||||
assert(numLevels >= 1);
|
assert(numLevels >= 1);
|
||||||
|
|
||||||
return numLevels;
|
return numLevels;
|
||||||
|
@@ -970,8 +970,13 @@ struct gl_texture_object_attrib
|
|||||||
GLenum Swizzle[4]; /**< GL_EXT_texture_swizzle */
|
GLenum Swizzle[4]; /**< GL_EXT_texture_swizzle */
|
||||||
GLushort _Swizzle; /**< same as Swizzle, but SWIZZLE_* format */
|
GLushort _Swizzle; /**< same as Swizzle, but SWIZZLE_* format */
|
||||||
GLenum16 DepthMode; /**< GL_ARB_depth_texture */
|
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 */
|
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) */
|
GLbyte _MaxLevel; /**< actual max mipmap level (q in the spec) */
|
||||||
GLfloat _MaxLambda; /**< = _MaxLevel - BaseLevel (q - p in spec) */
|
GLfloat _MaxLambda; /**< = _MaxLevel - BaseLevel (q - p in spec) */
|
||||||
GLint CropRect[4]; /**< GL_OES_draw_texture */
|
GLint CropRect[4]; /**< GL_OES_draw_texture */
|
||||||
GLbyte ImmutableLevels; /**< ES 3.0 / ARB_texture_view */
|
|
||||||
GLboolean _BaseComplete; /**< Is the base texture level valid? */
|
GLboolean _BaseComplete; /**< Is the base texture level valid? */
|
||||||
GLboolean _MipmapComplete; /**< Is the whole mipmap valid? */
|
GLboolean _MipmapComplete; /**< Is the whole mipmap valid? */
|
||||||
GLboolean _IsIntegerFormat; /**< Does the texture store integer values? */
|
GLboolean _IsIntegerFormat; /**< Does the texture store integer values? */
|
||||||
@@ -1025,24 +1029,20 @@ struct gl_texture_object
|
|||||||
GLboolean _IsHalfFloat; /**< GL_OES_half_float_texture */
|
GLboolean _IsHalfFloat; /**< GL_OES_half_float_texture */
|
||||||
bool HandleAllocated; /**< GL_ARB_bindless_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 */
|
/** GL_OES_EGL_image_external */
|
||||||
GLubyte RequiredTextureImageUnits;
|
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 */
|
/** GL_EXT_memory_object */
|
||||||
GLenum16 TextureTiling;
|
GLenum16 TextureTiling;
|
||||||
|
|
||||||
/** GL_ARB_shader_image_load_store */
|
|
||||||
GLenum16 ImageFormatCompatibilityType;
|
|
||||||
|
|
||||||
/** GL_ARB_texture_buffer_object */
|
/** GL_ARB_texture_buffer_object */
|
||||||
GLenum16 BufferObjectFormat;
|
GLenum16 BufferObjectFormat;
|
||||||
/** Equivalent Mesa format for BufferObjectFormat. */
|
/** Equivalent Mesa format for BufferObjectFormat. */
|
||||||
mesa_format _BufferObjectFormat;
|
mesa_format _BufferObjectFormat;
|
||||||
|
/* TODO: BufferObject->Name should be restored by glPopAttrib(GL_TEXTURE_BIT); */
|
||||||
struct gl_buffer_object *BufferObject;
|
struct gl_buffer_object *BufferObject;
|
||||||
|
|
||||||
/** GL_ARB_texture_buffer_range */
|
/** 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)
|
if (!tex_format)
|
||||||
return GL_FALSE;
|
return GL_FALSE;
|
||||||
|
|
||||||
switch (t->ImageFormatCompatibilityType) {
|
switch (t->Attrib.ImageFormatCompatibilityType) {
|
||||||
case GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE:
|
case GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE:
|
||||||
if (_mesa_get_format_bytes(tex_format) !=
|
if (_mesa_get_format_bytes(tex_format) !=
|
||||||
_mesa_get_format_bytes(u->_ActualFormat))
|
_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.CompareMode = GL_NONE; /* ARB_shadow */
|
||||||
obj->Sampler.Attrib.CompareFunc = GL_LEQUAL; /* ARB_shadow */
|
obj->Sampler.Attrib.CompareFunc = GL_LEQUAL; /* ARB_shadow */
|
||||||
obj->Attrib.DepthMode = ctx->API == API_OPENGL_CORE ? GL_RED : GL_LUMINANCE;
|
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.Attrib.CubeMapSeamless = GL_FALSE;
|
||||||
obj->Sampler.HandleAllocated = GL_FALSE;
|
obj->Sampler.HandleAllocated = GL_FALSE;
|
||||||
obj->Attrib.Swizzle[0] = GL_RED;
|
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->Sampler.Attrib.sRGBDecode = GL_DECODE_EXT;
|
||||||
obj->BufferObjectFormat = GL_R8;
|
obj->BufferObjectFormat = GL_R8;
|
||||||
obj->_BufferObjectFormat = MESA_FORMAT_R_UNORM8;
|
obj->_BufferObjectFormat = MESA_FORMAT_R_UNORM8;
|
||||||
obj->ImageFormatCompatibilityType = GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE;
|
obj->Attrib.ImageFormatCompatibilityType = GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE;
|
||||||
|
|
||||||
/* GL_ARB_bindless_texture */
|
/* GL_ARB_bindless_texture */
|
||||||
_mesa_init_texture_handles(obj);
|
_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
|
/* Adjust max level for views: the data store may have more levels than
|
||||||
* the view exposes.
|
* 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 */
|
/* 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 &&
|
if (!isMultisample &&
|
||||||
(texObj->_IsIntegerFormat ||
|
(texObj->_IsIntegerFormat ||
|
||||||
(texObj->Attrib.StencilSampling &&
|
(texObj->StencilSampling &&
|
||||||
img->_BaseFormat == GL_DEPTH_STENCIL)) &&
|
img->_BaseFormat == GL_DEPTH_STENCIL)) &&
|
||||||
(sampler->Attrib.MagFilter != GL_NEAREST ||
|
(sampler->Attrib.MagFilter != GL_NEAREST ||
|
||||||
(sampler->Attrib.MinFilter != 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 */
|
/** See note about ARB_texture_storage below */
|
||||||
if (texObj->Immutable)
|
if (texObj->Immutable)
|
||||||
texObj->Attrib.BaseLevel = MIN2(texObj->ImmutableLevels - 1, params[0]);
|
texObj->Attrib.BaseLevel = MIN2(texObj->Attrib.ImmutableLevels - 1, params[0]);
|
||||||
else
|
else
|
||||||
texObj->Attrib.BaseLevel = params[0];
|
texObj->Attrib.BaseLevel = params[0];
|
||||||
|
|
||||||
@@ -413,7 +413,7 @@ set_tex_parameteri(struct gl_context *ctx,
|
|||||||
*/
|
*/
|
||||||
if (texObj->Immutable)
|
if (texObj->Immutable)
|
||||||
texObj->Attrib.MaxLevel = CLAMP(params[0], texObj->Attrib.BaseLevel,
|
texObj->Attrib.MaxLevel = CLAMP(params[0], texObj->Attrib.BaseLevel,
|
||||||
texObj->ImmutableLevels - 1);
|
texObj->Attrib.ImmutableLevels - 1);
|
||||||
else
|
else
|
||||||
texObj->Attrib.MaxLevel = params[0];
|
texObj->Attrib.MaxLevel = params[0];
|
||||||
|
|
||||||
@@ -503,10 +503,10 @@ set_tex_parameteri(struct gl_context *ctx,
|
|||||||
if (!stencil && params[0] != GL_DEPTH_COMPONENT)
|
if (!stencil && params[0] != GL_DEPTH_COMPONENT)
|
||||||
goto invalid_param;
|
goto invalid_param;
|
||||||
|
|
||||||
if (texObj->Attrib.StencilSampling == stencil)
|
if (texObj->StencilSampling == stencil)
|
||||||
return GL_FALSE;
|
return GL_FALSE;
|
||||||
|
|
||||||
texObj->Attrib.StencilSampling = stencil;
|
texObj->StencilSampling = stencil;
|
||||||
return GL_TRUE;
|
return GL_TRUE;
|
||||||
}
|
}
|
||||||
goto invalid_pname;
|
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))
|
if (!_mesa_has_ARB_stencil_texturing(ctx) && !_mesa_is_gles31(ctx))
|
||||||
goto invalid_pname;
|
goto invalid_pname;
|
||||||
*params = (GLfloat)
|
*params = (GLfloat)
|
||||||
(obj->Attrib.StencilSampling ? GL_STENCIL_INDEX : GL_DEPTH_COMPONENT);
|
(obj->StencilSampling ? GL_STENCIL_INDEX : GL_DEPTH_COMPONENT);
|
||||||
break;
|
break;
|
||||||
case GL_TEXTURE_LOD_BIAS:
|
case GL_TEXTURE_LOD_BIAS:
|
||||||
if (_mesa_is_gles(ctx))
|
if (_mesa_is_gles(ctx))
|
||||||
@@ -2302,7 +2302,7 @@ get_tex_parameterfv(struct gl_context *ctx,
|
|||||||
|
|
||||||
case GL_TEXTURE_IMMUTABLE_LEVELS:
|
case GL_TEXTURE_IMMUTABLE_LEVELS:
|
||||||
if (_mesa_is_gles3(ctx) || _mesa_has_texture_view(ctx))
|
if (_mesa_is_gles3(ctx) || _mesa_has_texture_view(ctx))
|
||||||
*params = (GLfloat) obj->ImmutableLevels;
|
*params = (GLfloat) obj->Attrib.ImmutableLevels;
|
||||||
else
|
else
|
||||||
goto invalid_pname;
|
goto invalid_pname;
|
||||||
break;
|
break;
|
||||||
@@ -2310,25 +2310,25 @@ get_tex_parameterfv(struct gl_context *ctx,
|
|||||||
case GL_TEXTURE_VIEW_MIN_LEVEL:
|
case GL_TEXTURE_VIEW_MIN_LEVEL:
|
||||||
if (!_mesa_has_texture_view(ctx))
|
if (!_mesa_has_texture_view(ctx))
|
||||||
goto invalid_pname;
|
goto invalid_pname;
|
||||||
*params = (GLfloat) obj->MinLevel;
|
*params = (GLfloat) obj->Attrib.MinLevel;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GL_TEXTURE_VIEW_NUM_LEVELS:
|
case GL_TEXTURE_VIEW_NUM_LEVELS:
|
||||||
if (!_mesa_has_texture_view(ctx))
|
if (!_mesa_has_texture_view(ctx))
|
||||||
goto invalid_pname;
|
goto invalid_pname;
|
||||||
*params = (GLfloat) obj->NumLevels;
|
*params = (GLfloat) obj->Attrib.NumLevels;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GL_TEXTURE_VIEW_MIN_LAYER:
|
case GL_TEXTURE_VIEW_MIN_LAYER:
|
||||||
if (!_mesa_has_texture_view(ctx))
|
if (!_mesa_has_texture_view(ctx))
|
||||||
goto invalid_pname;
|
goto invalid_pname;
|
||||||
*params = (GLfloat) obj->MinLayer;
|
*params = (GLfloat) obj->Attrib.MinLayer;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GL_TEXTURE_VIEW_NUM_LAYERS:
|
case GL_TEXTURE_VIEW_NUM_LAYERS:
|
||||||
if (!_mesa_has_texture_view(ctx))
|
if (!_mesa_has_texture_view(ctx))
|
||||||
goto invalid_pname;
|
goto invalid_pname;
|
||||||
*params = (GLfloat) obj->NumLayers;
|
*params = (GLfloat) obj->Attrib.NumLayers;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES:
|
case GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES:
|
||||||
@@ -2346,7 +2346,7 @@ get_tex_parameterfv(struct gl_context *ctx,
|
|||||||
case GL_IMAGE_FORMAT_COMPATIBILITY_TYPE:
|
case GL_IMAGE_FORMAT_COMPATIBILITY_TYPE:
|
||||||
if (!ctx->Extensions.ARB_shader_image_load_store)
|
if (!ctx->Extensions.ARB_shader_image_load_store)
|
||||||
goto invalid_pname;
|
goto invalid_pname;
|
||||||
*params = (GLfloat) obj->ImageFormatCompatibilityType;
|
*params = (GLfloat) obj->Attrib.ImageFormatCompatibilityType;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GL_TEXTURE_TARGET:
|
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))
|
if (!_mesa_has_ARB_stencil_texturing(ctx) && !_mesa_is_gles31(ctx))
|
||||||
goto invalid_pname;
|
goto invalid_pname;
|
||||||
*params = (GLint)
|
*params = (GLint)
|
||||||
(obj->Attrib.StencilSampling ? GL_STENCIL_INDEX : GL_DEPTH_COMPONENT);
|
(obj->StencilSampling ? GL_STENCIL_INDEX : GL_DEPTH_COMPONENT);
|
||||||
break;
|
break;
|
||||||
case GL_TEXTURE_LOD_BIAS:
|
case GL_TEXTURE_LOD_BIAS:
|
||||||
if (_mesa_is_gles(ctx))
|
if (_mesa_is_gles(ctx))
|
||||||
@@ -2568,7 +2568,7 @@ get_tex_parameteriv(struct gl_context *ctx,
|
|||||||
case GL_TEXTURE_IMMUTABLE_LEVELS:
|
case GL_TEXTURE_IMMUTABLE_LEVELS:
|
||||||
if (_mesa_is_gles3(ctx) ||
|
if (_mesa_is_gles3(ctx) ||
|
||||||
(_mesa_is_desktop_gl(ctx) && ctx->Extensions.ARB_texture_view))
|
(_mesa_is_desktop_gl(ctx) && ctx->Extensions.ARB_texture_view))
|
||||||
*params = obj->ImmutableLevels;
|
*params = obj->Attrib.ImmutableLevels;
|
||||||
else
|
else
|
||||||
goto invalid_pname;
|
goto invalid_pname;
|
||||||
break;
|
break;
|
||||||
@@ -2576,25 +2576,25 @@ get_tex_parameteriv(struct gl_context *ctx,
|
|||||||
case GL_TEXTURE_VIEW_MIN_LEVEL:
|
case GL_TEXTURE_VIEW_MIN_LEVEL:
|
||||||
if (!ctx->Extensions.ARB_texture_view)
|
if (!ctx->Extensions.ARB_texture_view)
|
||||||
goto invalid_pname;
|
goto invalid_pname;
|
||||||
*params = (GLint) obj->MinLevel;
|
*params = (GLint) obj->Attrib.MinLevel;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GL_TEXTURE_VIEW_NUM_LEVELS:
|
case GL_TEXTURE_VIEW_NUM_LEVELS:
|
||||||
if (!ctx->Extensions.ARB_texture_view)
|
if (!ctx->Extensions.ARB_texture_view)
|
||||||
goto invalid_pname;
|
goto invalid_pname;
|
||||||
*params = (GLint) obj->NumLevels;
|
*params = (GLint) obj->Attrib.NumLevels;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GL_TEXTURE_VIEW_MIN_LAYER:
|
case GL_TEXTURE_VIEW_MIN_LAYER:
|
||||||
if (!ctx->Extensions.ARB_texture_view)
|
if (!ctx->Extensions.ARB_texture_view)
|
||||||
goto invalid_pname;
|
goto invalid_pname;
|
||||||
*params = (GLint) obj->MinLayer;
|
*params = (GLint) obj->Attrib.MinLayer;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GL_TEXTURE_VIEW_NUM_LAYERS:
|
case GL_TEXTURE_VIEW_NUM_LAYERS:
|
||||||
if (!ctx->Extensions.ARB_texture_view)
|
if (!ctx->Extensions.ARB_texture_view)
|
||||||
goto invalid_pname;
|
goto invalid_pname;
|
||||||
*params = (GLint) obj->NumLayers;
|
*params = (GLint) obj->Attrib.NumLayers;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES:
|
case GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES:
|
||||||
@@ -2612,7 +2612,7 @@ get_tex_parameteriv(struct gl_context *ctx,
|
|||||||
case GL_IMAGE_FORMAT_COMPATIBILITY_TYPE:
|
case GL_IMAGE_FORMAT_COMPATIBILITY_TYPE:
|
||||||
if (!ctx->Extensions.ARB_shader_image_load_store)
|
if (!ctx->Extensions.ARB_shader_image_load_store)
|
||||||
goto invalid_pname;
|
goto invalid_pname;
|
||||||
*params = obj->ImageFormatCompatibilityType;
|
*params = obj->Attrib.ImageFormatCompatibilityType;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GL_TEXTURE_TARGET:
|
case GL_TEXTURE_TARGET:
|
||||||
|
@@ -486,34 +486,34 @@ _mesa_set_texture_view_state(struct gl_context *ctx,
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
texObj->Immutable = GL_TRUE;
|
texObj->Immutable = GL_TRUE;
|
||||||
texObj->ImmutableLevels = levels;
|
texObj->Attrib.ImmutableLevels = levels;
|
||||||
texObj->MinLevel = 0;
|
texObj->Attrib.MinLevel = 0;
|
||||||
texObj->NumLevels = levels;
|
texObj->Attrib.NumLevels = levels;
|
||||||
texObj->MinLayer = 0;
|
texObj->Attrib.MinLayer = 0;
|
||||||
texObj->NumLayers = 1;
|
texObj->Attrib.NumLayers = 1;
|
||||||
switch (target) {
|
switch (target) {
|
||||||
case GL_TEXTURE_1D_ARRAY:
|
case GL_TEXTURE_1D_ARRAY:
|
||||||
texObj->NumLayers = texImage->Height;
|
texObj->Attrib.NumLayers = texImage->Height;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GL_TEXTURE_2D_MULTISAMPLE:
|
case GL_TEXTURE_2D_MULTISAMPLE:
|
||||||
texObj->NumLevels = 1;
|
texObj->Attrib.NumLevels = 1;
|
||||||
texObj->ImmutableLevels = 1;
|
texObj->Attrib.ImmutableLevels = 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GL_TEXTURE_2D_MULTISAMPLE_ARRAY:
|
case GL_TEXTURE_2D_MULTISAMPLE_ARRAY:
|
||||||
texObj->NumLevels = 1;
|
texObj->Attrib.NumLevels = 1;
|
||||||
texObj->ImmutableLevels = 1;
|
texObj->Attrib.ImmutableLevels = 1;
|
||||||
FALLTHROUGH;
|
FALLTHROUGH;
|
||||||
/* fallthrough to set NumLayers */
|
/* fallthrough to set NumLayers */
|
||||||
|
|
||||||
case GL_TEXTURE_2D_ARRAY:
|
case GL_TEXTURE_2D_ARRAY:
|
||||||
case GL_TEXTURE_CUBE_MAP_ARRAY:
|
case GL_TEXTURE_CUBE_MAP_ARRAY:
|
||||||
texObj->NumLayers = texImage->Depth;
|
texObj->Attrib.NumLayers = texImage->Depth;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GL_TEXTURE_CUBE_MAP:
|
case GL_TEXTURE_CUBE_MAP:
|
||||||
texObj->NumLayers = 6;
|
texObj->Attrib.NumLayers = 6;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -540,8 +540,8 @@ texture_view(struct gl_context *ctx, struct gl_texture_object *origTexObj,
|
|||||||
internalformat, GL_NONE, GL_NONE);
|
internalformat, GL_NONE, GL_NONE);
|
||||||
if (texFormat == MESA_FORMAT_NONE) return;
|
if (texFormat == MESA_FORMAT_NONE) return;
|
||||||
|
|
||||||
newViewNumLevels = MIN2(numlevels, origTexObj->NumLevels - minlevel);
|
newViewNumLevels = MIN2(numlevels, origTexObj->Attrib.NumLevels - minlevel);
|
||||||
newViewNumLayers = MIN2(numlayers, origTexObj->NumLayers - minlayer);
|
newViewNumLayers = MIN2(numlayers, origTexObj->Attrib.NumLayers - minlayer);
|
||||||
|
|
||||||
faceTarget = _mesa_cube_face_target(origTexObj->Target, 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 */
|
return; /* Already recorded error */
|
||||||
}
|
}
|
||||||
|
|
||||||
texObj->MinLevel = origTexObj->MinLevel + minlevel;
|
texObj->Attrib.MinLevel = origTexObj->Attrib.MinLevel + minlevel;
|
||||||
texObj->MinLayer = origTexObj->MinLayer + minlayer;
|
texObj->Attrib.MinLayer = origTexObj->Attrib.MinLayer + minlayer;
|
||||||
texObj->NumLevels = newViewNumLevels;
|
texObj->Attrib.NumLevels = newViewNumLevels;
|
||||||
texObj->NumLayers = newViewNumLayers;
|
texObj->Attrib.NumLayers = newViewNumLayers;
|
||||||
texObj->Immutable = GL_TRUE;
|
texObj->Immutable = GL_TRUE;
|
||||||
texObj->ImmutableLevels = origTexObj->ImmutableLevels;
|
texObj->Attrib.ImmutableLevels = origTexObj->Attrib.ImmutableLevels;
|
||||||
texObj->Target = target;
|
texObj->Target = target;
|
||||||
texObj->TargetIndex = _mesa_tex_target_to_index(ctx, target);
|
texObj->TargetIndex = _mesa_tex_target_to_index(ctx, target);
|
||||||
assert(texObj->TargetIndex < NUM_TEXTURE_TARGETS);
|
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,
|
* If minlevel or minlayer is greater than level or layer, respectively,
|
||||||
* return INVALID_VALUE.
|
* return INVALID_VALUE.
|
||||||
*/
|
*/
|
||||||
newViewMinLevel = origTexObj->MinLevel + minlevel;
|
newViewMinLevel = origTexObj->Attrib.MinLevel + minlevel;
|
||||||
newViewMinLayer = origTexObj->MinLayer + minlayer;
|
newViewMinLayer = origTexObj->Attrib.MinLayer + minlayer;
|
||||||
if (newViewMinLevel >= (origTexObj->MinLevel + origTexObj->NumLevels)) {
|
if (newViewMinLevel >= (origTexObj->Attrib.MinLevel +
|
||||||
|
origTexObj->Attrib.NumLevels)) {
|
||||||
_mesa_error(ctx, GL_INVALID_VALUE,
|
_mesa_error(ctx, GL_INVALID_VALUE,
|
||||||
"glTextureView(new minlevel (%d) > orig minlevel (%d)"
|
"glTextureView(new minlevel (%d) > orig minlevel (%d)"
|
||||||
" + orig numlevels (%d))",
|
" + orig numlevels (%d))",
|
||||||
newViewMinLevel, origTexObj->MinLevel, origTexObj->NumLevels);
|
newViewMinLevel, origTexObj->Attrib.MinLevel,
|
||||||
|
origTexObj->Attrib.NumLevels);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (newViewMinLayer >= (origTexObj->MinLayer + origTexObj->NumLayers)) {
|
if (newViewMinLayer >= (origTexObj->Attrib.MinLayer +
|
||||||
|
origTexObj->Attrib.NumLayers)) {
|
||||||
_mesa_error(ctx, GL_INVALID_VALUE,
|
_mesa_error(ctx, GL_INVALID_VALUE,
|
||||||
"glTextureView(new minlayer (%d) > orig minlayer (%d)"
|
"glTextureView(new minlayer (%d) > orig minlayer (%d)"
|
||||||
" + orig numlayers (%d))",
|
" + orig numlayers (%d))",
|
||||||
newViewMinLayer, origTexObj->MinLayer, origTexObj->NumLayers);
|
newViewMinLayer, origTexObj->Attrib.MinLayer,
|
||||||
|
origTexObj->Attrib.NumLayers);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -113,7 +113,7 @@ st_convert_image(const struct st_context *st, const struct gl_image_unit *u,
|
|||||||
}
|
}
|
||||||
|
|
||||||
img->resource = stObj->pt;
|
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);
|
assert(img->u.tex.level <= img->resource->last_level);
|
||||||
if (stObj->pt->target == PIPE_TEXTURE_3D) {
|
if (stObj->pt->target == PIPE_TEXTURE_3D) {
|
||||||
if (u->Layered) {
|
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;
|
img->u.tex.last_layer = u->_Layer;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
img->u.tex.first_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.MinLayer;
|
img->u.tex.last_layer = u->_Layer + stObj->base.Attrib.MinLayer;
|
||||||
if (u->Layered && img->resource->array_size > 1) {
|
if (u->Layered && img->resource->array_size > 1) {
|
||||||
if (stObj->base.Immutable)
|
if (stObj->base.Immutable)
|
||||||
img->u.tex.last_layer += stObj->base.NumLayers - 1;
|
img->u.tex.last_layer += stObj->base.Attrib.NumLayers - 1;
|
||||||
else
|
else
|
||||||
img->u.tex.last_layer += img->resource->array_size - 1;
|
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;
|
const GLboolean is_integer = texobj->_IsIntegerFormat;
|
||||||
GLenum texBaseFormat = _mesa_base_tex_image(texobj)->_BaseFormat;
|
GLenum texBaseFormat = _mesa_base_tex_image(texobj)->_BaseFormat;
|
||||||
|
|
||||||
if (texobj->Attrib.StencilSampling)
|
if (texobj->StencilSampling)
|
||||||
texBaseFormat = GL_STENCIL_INDEX;
|
texBaseFormat = GL_STENCIL_INDEX;
|
||||||
|
|
||||||
if (st->apply_texture_swizzle_to_border_color) {
|
if (st->apply_texture_swizzle_to_border_color) {
|
||||||
@@ -212,7 +212,7 @@ st_convert_sampler(const struct st_context *st,
|
|||||||
GLenum texBaseFormat = _mesa_base_tex_image(texobj)->_BaseFormat;
|
GLenum texBaseFormat = _mesa_base_tex_image(texobj)->_BaseFormat;
|
||||||
|
|
||||||
if (texBaseFormat == GL_DEPTH_COMPONENT ||
|
if (texBaseFormat == GL_DEPTH_COMPONENT ||
|
||||||
(texBaseFormat == GL_DEPTH_STENCIL && !texobj->Attrib.StencilSampling)) {
|
(texBaseFormat == GL_DEPTH_STENCIL && !texobj->StencilSampling)) {
|
||||||
sampler->compare_mode = PIPE_TEX_COMPARE_R_TO_TEXTURE;
|
sampler->compare_mode = PIPE_TEX_COMPARE_R_TO_TEXTURE;
|
||||||
sampler->compare_func = st_compare_func_to_pipe(msamp->Attrib.CompareFunc);
|
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_level = stObj->pt != src_res ? 0 : src_image->Level;
|
||||||
src_z += src_image->Face;
|
src_z += src_image->Face;
|
||||||
if (src_image->TexObject->Immutable) {
|
if (src_image->TexObject->Immutable) {
|
||||||
src_level += src_image->TexObject->MinLevel;
|
src_level += src_image->TexObject->Attrib.MinLevel;
|
||||||
src_z += src_image->TexObject->MinLayer;
|
src_z += src_image->TexObject->Attrib.MinLayer;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
struct st_renderbuffer *src = st_renderbuffer(src_renderbuffer);
|
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_level = stObj->pt != dst_res ? 0 : dst_image->Level;
|
||||||
dst_z += dst_image->Face;
|
dst_z += dst_image->Face;
|
||||||
if (dst_image->TexObject->Immutable) {
|
if (dst_image->TexObject->Immutable) {
|
||||||
dst_level += dst_image->TexObject->MinLevel;
|
dst_level += dst_image->TexObject->Attrib.MinLevel;
|
||||||
dst_z += dst_image->TexObject->MinLayer;
|
dst_z += dst_image->TexObject->Attrib.MinLayer;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
struct st_renderbuffer *dst = st_renderbuffer(dst_renderbuffer);
|
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 &&
|
if (strb->is_rtt && resource->array_size > 1 &&
|
||||||
stTexObj->base.Immutable) {
|
stTexObj->base.Immutable) {
|
||||||
const struct gl_texture_object *tex = &stTexObj->base;
|
const struct gl_texture_object *tex = &stTexObj->base;
|
||||||
first_layer += tex->MinLayer;
|
first_layer += tex->Attrib.MinLayer;
|
||||||
if (!strb->rtt_layered)
|
if (!strb->rtt_layered)
|
||||||
last_layer += tex->MinLayer;
|
last_layer += tex->Attrib.MinLayer;
|
||||||
else
|
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 =
|
struct pipe_surface **psurf =
|
||||||
|
@@ -1459,10 +1459,10 @@ try_pbo_upload(struct gl_context *ctx, GLuint dims,
|
|||||||
/* Set up the surface */
|
/* Set up the surface */
|
||||||
{
|
{
|
||||||
unsigned level = stObj->pt != stImage->pt
|
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);
|
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;
|
struct pipe_surface templ;
|
||||||
memset(&templ, 0, sizeof(templ));
|
memset(&templ, 0, sizeof(templ));
|
||||||
@@ -1507,7 +1507,7 @@ st_TexSubImage(struct gl_context *ctx, GLuint dims,
|
|||||||
GLenum gl_target = texImage->TexObject->Target;
|
GLenum gl_target = texImage->TexObject->Target;
|
||||||
unsigned bind;
|
unsigned bind;
|
||||||
GLubyte *map;
|
GLubyte *map;
|
||||||
unsigned dstz = texImage->Face + texImage->TexObject->MinLayer;
|
unsigned dstz = texImage->Face + texImage->TexObject->Attrib.MinLayer;
|
||||||
unsigned dst_level = 0;
|
unsigned dst_level = 0;
|
||||||
bool throttled = false;
|
bool throttled = false;
|
||||||
|
|
||||||
@@ -1515,7 +1515,7 @@ st_TexSubImage(struct gl_context *ctx, GLuint dims,
|
|||||||
st_invalidate_readpix_cache(st);
|
st_invalidate_readpix_cache(st);
|
||||||
|
|
||||||
if (stObj->pt == stImage->pt)
|
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) &&
|
assert(!_mesa_is_format_etc2(texImage->TexFormat) &&
|
||||||
!_mesa_is_format_astc_2d(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. */
|
/* Set up the surface. */
|
||||||
{
|
{
|
||||||
unsigned level = stObj->pt != stImage->pt
|
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);
|
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;
|
struct pipe_surface templ;
|
||||||
memset(&templ, 0, sizeof(templ));
|
memset(&templ, 0, sizeof(templ));
|
||||||
@@ -2188,12 +2188,12 @@ st_GetTexSubImage(struct gl_context * ctx,
|
|||||||
}
|
}
|
||||||
|
|
||||||
assert(texImage->Face == 0 ||
|
assert(texImage->Face == 0 ||
|
||||||
texImage->TexObject->MinLayer == 0 ||
|
texImage->TexObject->Attrib.MinLayer == 0 ||
|
||||||
zoffset == 0);
|
zoffset == 0);
|
||||||
|
|
||||||
memset(&blit, 0, sizeof(blit));
|
memset(&blit, 0, sizeof(blit));
|
||||||
blit.src.resource = src;
|
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.src.format = src_format;
|
||||||
blit.dst.resource = dst;
|
blit.dst.resource = dst;
|
||||||
blit.dst.level = 0;
|
blit.dst.level = 0;
|
||||||
@@ -2202,7 +2202,7 @@ st_GetTexSubImage(struct gl_context * ctx,
|
|||||||
blit.dst.box.x = 0;
|
blit.dst.box.x = 0;
|
||||||
blit.src.box.y = yoffset;
|
blit.src.box.y = yoffset;
|
||||||
blit.dst.box.y = 0;
|
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.dst.box.z = 0;
|
||||||
blit.src.box.width = blit.dst.box.width = width;
|
blit.src.box.width = blit.dst.box.width = width;
|
||||||
blit.src.box.height = blit.dst.box.height = height;
|
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.resource = stImage->pt;
|
||||||
blit.dst.format = dst_format;
|
blit.dst.format = dst_format;
|
||||||
blit.dst.level = stObj->pt != stImage->pt
|
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.x = destX;
|
||||||
blit.dst.box.y = destY;
|
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.width = width;
|
||||||
blit.dst.box.height = height;
|
blit.dst.box.height = height;
|
||||||
blit.dst.box.depth = 1;
|
blit.dst.box.depth = 1;
|
||||||
@@ -3134,7 +3135,7 @@ st_TextureView(struct gl_context *ctx,
|
|||||||
struct gl_texture_image *image = texObj->Image[0][0];
|
struct gl_texture_image *image = texObj->Image[0][0];
|
||||||
|
|
||||||
const int numFaces = _mesa_num_tex_faces(texObj->Target);
|
const int numFaces = _mesa_num_tex_faces(texObj->Target);
|
||||||
const int numLevels = texObj->NumLevels;
|
const int numLevels = texObj->Attrib.NumLevels;
|
||||||
|
|
||||||
int face;
|
int face;
|
||||||
int level;
|
int level;
|
||||||
@@ -3244,8 +3245,8 @@ st_ClearTexSubImage(struct gl_context *ctx,
|
|||||||
* not a texture view, the offsets will be zero.
|
* not a texture view, the offsets will be zero.
|
||||||
*/
|
*/
|
||||||
assert(stImage->pt == st_texture_object(texObj)->pt);
|
assert(stImage->pt == st_texture_object(texObj)->pt);
|
||||||
level = texImage->Level + texObj->MinLevel;
|
level = texImage->Level + texObj->Attrib.MinLevel;
|
||||||
box.z += texObj->MinLayer;
|
box.z += texObj->Attrib.MinLayer;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* Texture level sizes may be inconsistent. We my have "loose",
|
/* Texture level sizes may be inconsistent. We my have "loose",
|
||||||
|
@@ -64,7 +64,7 @@ st_generate_mipmap(struct gl_context *ctx, GLenum target,
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
if (texObj->Immutable)
|
if (texObj->Immutable)
|
||||||
baseLevel += texObj->MinLevel;
|
baseLevel += texObj->Attrib.MinLevel;
|
||||||
|
|
||||||
/* not sure if this ultimately actually should work,
|
/* not sure if this ultimately actually should work,
|
||||||
but we're not supporting multisampled textures yet. */
|
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;
|
lastLevel = _mesa_compute_num_levels(ctx, texObj, target) - 1;
|
||||||
|
|
||||||
if (texObj->Immutable)
|
if (texObj->Immutable)
|
||||||
lastLevel += texObj->MinLevel;
|
lastLevel += texObj->Attrib.MinLevel;
|
||||||
|
|
||||||
if (lastLevel == 0)
|
if (lastLevel == 0)
|
||||||
return;
|
return;
|
||||||
|
@@ -445,10 +445,11 @@ check_sampler_swizzle(const struct st_context *st,
|
|||||||
static unsigned
|
static unsigned
|
||||||
last_level(const struct st_texture_object *stObj)
|
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);
|
stObj->pt->last_level);
|
||||||
if (stObj->base.Immutable)
|
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;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -457,7 +458,8 @@ static unsigned
|
|||||||
last_layer(const struct st_texture_object *stObj)
|
last_layer(const struct st_texture_object *stObj)
|
||||||
{
|
{
|
||||||
if (stObj->base.Immutable && stObj->pt->array_size > 1)
|
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);
|
stObj->pt->array_size - 1);
|
||||||
return 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 ||
|
if (baseFormat == GL_DEPTH_COMPONENT ||
|
||||||
baseFormat == GL_DEPTH_STENCIL ||
|
baseFormat == GL_DEPTH_STENCIL ||
|
||||||
baseFormat == GL_STENCIL_INDEX) {
|
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);
|
format = util_format_stencil_only(format);
|
||||||
|
|
||||||
return format;
|
return format;
|
||||||
@@ -541,13 +543,14 @@ st_create_texture_sampler_view_from_stobj(struct st_context *st,
|
|||||||
if (stObj->level_override >= 0) {
|
if (stObj->level_override >= 0) {
|
||||||
templ.u.tex.first_level = templ.u.tex.last_level = stObj->level_override;
|
templ.u.tex.first_level = templ.u.tex.last_level = stObj->level_override;
|
||||||
} else {
|
} else {
|
||||||
templ.u.tex.first_level = stObj->base.MinLevel + stObj->base.Attrib.BaseLevel;
|
templ.u.tex.first_level = stObj->base.Attrib.MinLevel +
|
||||||
|
stObj->base.Attrib.BaseLevel;
|
||||||
templ.u.tex.last_level = last_level(stObj);
|
templ.u.tex.last_level = last_level(stObj);
|
||||||
}
|
}
|
||||||
if (stObj->layer_override >= 0) {
|
if (stObj->layer_override >= 0) {
|
||||||
templ.u.tex.first_layer = templ.u.tex.last_layer = stObj->layer_override;
|
templ.u.tex.first_layer = templ.u.tex.last_layer = stObj->layer_override;
|
||||||
} else {
|
} 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);
|
templ.u.tex.last_layer = last_layer(stObj);
|
||||||
}
|
}
|
||||||
assert(templ.u.tex.first_layer <= templ.u.tex.last_layer);
|
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(get_sampler_view_format(st, stObj, srgb_skip_decode) == view->format);
|
||||||
assert(gl_target_to_pipe(stObj->base.Target) == view->target);
|
assert(gl_target_to_pipe(stObj->base.Target) == view->target);
|
||||||
assert(stObj->level_override >= 0 ||
|
assert(stObj->level_override >= 0 ||
|
||||||
stObj->base.MinLevel + stObj->base.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->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 || last_layer(stObj) == view->u.tex.last_layer);
|
||||||
assert(stObj->layer_override < 0 ||
|
assert(stObj->layer_override < 0 ||
|
||||||
(stObj->layer_override == view->u.tex.first_layer &&
|
(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;
|
level = stImage->base.Level;
|
||||||
|
|
||||||
if (stObj->base.Immutable) {
|
if (stObj->base.Immutable) {
|
||||||
level += stObj->base.MinLevel;
|
level += stObj->base.Attrib.MinLevel;
|
||||||
z += stObj->base.MinLayer;
|
z += stObj->base.Attrib.MinLayer;
|
||||||
if (stObj->pt->array_size > 1)
|
if (stObj->pt->array_size > 1)
|
||||||
d = MIN2(d, stObj->base.NumLayers);
|
d = MIN2(d, stObj->base.Attrib.NumLayers);
|
||||||
}
|
}
|
||||||
|
|
||||||
z += stImage->base.Face;
|
z += stImage->base.Face;
|
||||||
@@ -308,7 +308,7 @@ st_texture_image_unmap(struct st_context *st,
|
|||||||
struct pipe_transfer **transfer;
|
struct pipe_transfer **transfer;
|
||||||
|
|
||||||
if (stObj->base.Immutable)
|
if (stObj->base.Immutable)
|
||||||
slice += stObj->base.MinLayer;
|
slice += stObj->base.Attrib.MinLayer;
|
||||||
transfer = &stImage->transfer[slice + stImage->base.Face].transfer;
|
transfer = &stImage->transfer[slice + stImage->base.Face].transfer;
|
||||||
|
|
||||||
DBG("%s\n", __func__);
|
DBG("%s\n", __func__);
|
||||||
|
Reference in New Issue
Block a user