break;
if (intelObj->mt != intelImage->mt) {
- intel_miptree_copy_teximage(intel, intelImage, intelObj->mt);
+ intel_miptree_copy_teximage(intel, intelImage, intelObj->mt,
+ false /* invalidate */);
}
/* After we're done, we'd better agree that our layout is
return true;
}
-
-/**
- * \param mode bitmask of GL_MAP_READ_BIT, GL_MAP_WRITE_BIT
- */
-static void
-intel_tex_map_image_for_swrast(struct intel_context *intel,
- struct intel_texture_image *intel_image,
- GLbitfield mode)
-{
- int level;
- int face;
- struct intel_mipmap_tree *mt;
- unsigned int x, y;
-
- if (!intel_image || !intel_image->mt)
- return;
-
- level = intel_image->base.Base.Level;
- face = intel_image->base.Base.Face;
- mt = intel_image->mt;
-
- for (int i = 0; i < mt->level[level].depth; i++)
- intel_miptree_slice_resolve_depth(intel, mt, level, i);
-
- if (mt->target == GL_TEXTURE_3D ||
- mt->target == GL_TEXTURE_2D_ARRAY ||
- mt->target == GL_TEXTURE_1D_ARRAY) {
- int i;
-
- /* ImageOffsets[] is only used for swrast's fetch_texel_3d, so we can't
- * share code with the normal path.
- */
- for (i = 0; i < mt->level[level].depth; i++) {
- intel_miptree_get_image_offset(mt, level, i, &x, &y);
- intel_image->base.ImageOffsets[i] = x + y * (mt->region->pitch /
- mt->region->cpp);
- }
-
- DBG("%s \n", __FUNCTION__);
-
- intel_image->base.Map = intel_region_map(intel, mt->region, mode);
- } else {
- assert(intel_image->base.Base.Depth == 1);
- intel_miptree_get_image_offset(mt, level, face, &x, &y);
-
- DBG("%s: (%d,%d) -> (%d, %d)/%d\n",
- __FUNCTION__, face, level, x, y, mt->region->pitch);
-
- intel_image->base.Map = intel_region_map(intel, mt->region, mode) +
- x * mt->cpp + y * mt->region->pitch;
- }
-
- assert(mt->region->pitch % mt->region->cpp == 0);
- intel_image->base.RowStride = mt->region->pitch / mt->region->cpp;
-}
-
-static void
-intel_tex_unmap_image_for_swrast(struct intel_context *intel,
- struct intel_texture_image *intel_image)
-{
- if (intel_image && intel_image->mt) {
- intel_region_unmap(intel, intel_image->mt->region);
- intel_image->base.Map = NULL;
- }
-}
-
-/**
- * \param mode bitmask of GL_MAP_READ_BIT, GL_MAP_WRITE_BIT
- */
-void
-intel_tex_map_images(struct intel_context *intel,
- struct intel_texture_object *intelObj,
- GLbitfield mode)
-{
- GLuint nr_faces = _mesa_num_tex_faces(intelObj->base.Target);
- int i, face;
-
- DBG("%s\n", __FUNCTION__);
-
- for (i = intelObj->base.BaseLevel; i <= intelObj->_MaxLevel; i++) {
- for (face = 0; face < nr_faces; face++) {
- struct intel_texture_image *intel_image =
- intel_texture_image(intelObj->base.Image[face][i]);
-
- intel_tex_map_image_for_swrast(intel, intel_image, mode);
- }
- }
-}
-
-void
-intel_tex_unmap_images(struct intel_context *intel,
- struct intel_texture_object *intelObj)
-{
- GLuint nr_faces = _mesa_num_tex_faces(intelObj->base.Target);
- int i, face;
-
- for (i = intelObj->base.BaseLevel; i <= intelObj->_MaxLevel; i++) {
- for (face = 0; face < nr_faces; face++) {
- struct intel_texture_image *intel_image =
- intel_texture_image(intelObj->base.Image[face][i]);
-
- intel_tex_unmap_image_for_swrast(intel, intel_image);
- }
- }
-}