intel: make intel_texture_image a subclass of swrast_texture_image

We need to subclass swrast_texture_image because if we use swrast for
fallback rendering, we'll need to have swrast_texture_image objects.
This commit is contained in:
Brian Paul
2011-09-17 14:50:48 -06:00
parent 1da896803c
commit fa2c886863
8 changed files with 101 additions and 93 deletions

View File

@@ -534,19 +534,19 @@ intel_set_teximage_alpha_to_one(struct gl_context *ctx,
struct intel_region *region = intel_image->mt->region; struct intel_region *region = intel_image->mt->region;
BATCH_LOCALS; BATCH_LOCALS;
assert(intel_image->base.TexFormat == MESA_FORMAT_ARGB8888); assert(intel_image->base.Base.TexFormat == MESA_FORMAT_ARGB8888);
/* get dest x/y in destination texture */ /* get dest x/y in destination texture */
intel_miptree_get_image_offset(intel_image->mt, intel_miptree_get_image_offset(intel_image->mt,
intel_image->base.Level, intel_image->base.Base.Level,
intel_image->base.Face, intel_image->base.Base.Face,
0, 0,
&image_x, &image_y); &image_x, &image_y);
x1 = image_x; x1 = image_x;
y1 = image_y; y1 = image_y;
x2 = image_x + intel_image->base.Width; x2 = image_x + intel_image->base.Base.Width;
y2 = image_y + intel_image->base.Height; y2 = image_y + intel_image->base.Base.Height;
pitch = region->pitch; pitch = region->pitch;
cpp = region->cpp; cpp = region->cpp;

View File

@@ -611,8 +611,8 @@ intel_renderbuffer_set_draw_offset(struct intel_renderbuffer *irb,
/* compute offset of the particular 2D image within the texture region */ /* compute offset of the particular 2D image within the texture region */
intel_miptree_get_image_offset(intel_image->mt, intel_miptree_get_image_offset(intel_image->mt,
intel_image->base.Level, intel_image->base.Base.Level,
intel_image->base.Face, intel_image->base.Base.Face,
zoffset, zoffset,
&dst_x, &dst_y); &dst_x, &dst_y);
@@ -738,18 +738,18 @@ intel_render_texture(struct gl_context * ctx,
struct intel_mipmap_tree *new_mt; struct intel_mipmap_tree *new_mt;
new_mt = intel_miptree_create(intel, image->TexObject->Target, new_mt = intel_miptree_create(intel, image->TexObject->Target,
intel_image->base.TexFormat, intel_image->base.Base.TexFormat,
intel_image->base.Level, intel_image->base.Base.Level,
intel_image->base.Level, intel_image->base.Base.Level,
intel_image->base.Width, intel_image->base.Base.Width,
intel_image->base.Height, intel_image->base.Base.Height,
intel_image->base.Depth, intel_image->base.Base.Depth,
GL_TRUE); GL_TRUE);
intel_miptree_image_copy(intel, intel_miptree_image_copy(intel,
new_mt, new_mt,
intel_image->base.Face, intel_image->base.Base.Face,
intel_image->base.Level, intel_image->base.Base.Level,
old_mt); old_mt);
intel_miptree_release(intel, &intel_image->mt); intel_miptree_release(intel, &intel_image->mt);

View File

@@ -224,7 +224,7 @@ intel_miptree_match_image(struct intel_mipmap_tree *mt,
struct gl_texture_image *image) struct gl_texture_image *image)
{ {
struct intel_texture_image *intelImage = intel_texture_image(image); struct intel_texture_image *intelImage = intel_texture_image(image);
GLuint level = intelImage->base.Level; GLuint level = intelImage->base.Base.Level;
/* Images with borders are never pulled into mipmap trees. */ /* Images with borders are never pulled into mipmap trees. */
if (image->Border) if (image->Border)

View File

@@ -71,7 +71,7 @@ intel_copy_texsubimage(struct intel_context *intel,
{ {
struct gl_context *ctx = &intel->ctx; struct gl_context *ctx = &intel->ctx;
struct intel_renderbuffer *irb; struct intel_renderbuffer *irb;
const GLenum internalFormat = intelImage->base.InternalFormat; const GLenum internalFormat = intelImage->base.Base.InternalFormat;
bool copy_supported = false; bool copy_supported = false;
bool copy_supported_with_alpha_override = false; bool copy_supported_with_alpha_override = false;
@@ -85,17 +85,17 @@ intel_copy_texsubimage(struct intel_context *intel,
return GL_FALSE; return GL_FALSE;
} }
copy_supported = intelImage->base.TexFormat == irb->Base.Format; copy_supported = intelImage->base.Base.TexFormat == irb->Base.Format;
/* Converting ARGB8888 to XRGB8888 is trivial: ignore the alpha bits */ /* Converting ARGB8888 to XRGB8888 is trivial: ignore the alpha bits */
if (irb->Base.Format == MESA_FORMAT_ARGB8888 && if (irb->Base.Format == MESA_FORMAT_ARGB8888 &&
intelImage->base.TexFormat == MESA_FORMAT_XRGB8888) { intelImage->base.Base.TexFormat == MESA_FORMAT_XRGB8888) {
copy_supported = true; copy_supported = true;
} }
/* Converting XRGB8888 to ARGB8888 requires setting the alpha bits to 1.0 */ /* Converting XRGB8888 to ARGB8888 requires setting the alpha bits to 1.0 */
if (irb->Base.Format == MESA_FORMAT_XRGB8888 && if (irb->Base.Format == MESA_FORMAT_XRGB8888 &&
intelImage->base.TexFormat == MESA_FORMAT_ARGB8888) { intelImage->base.Base.TexFormat == MESA_FORMAT_ARGB8888) {
copy_supported_with_alpha_override = true; copy_supported_with_alpha_override = true;
} }
@@ -103,7 +103,7 @@ intel_copy_texsubimage(struct intel_context *intel,
if (unlikely(INTEL_DEBUG & DEBUG_FALLBACKS)) if (unlikely(INTEL_DEBUG & DEBUG_FALLBACKS))
fprintf(stderr, "%s mismatched formats %s, %s\n", fprintf(stderr, "%s mismatched formats %s, %s\n",
__FUNCTION__, __FUNCTION__,
_mesa_get_format_name(intelImage->base.TexFormat), _mesa_get_format_name(intelImage->base.Base.TexFormat),
_mesa_get_format_name(irb->Base.Format)); _mesa_get_format_name(irb->Base.Format));
return GL_FALSE; return GL_FALSE;
} }
@@ -117,8 +117,8 @@ intel_copy_texsubimage(struct intel_context *intel,
/* get dest x/y in destination texture */ /* get dest x/y in destination texture */
intel_miptree_get_image_offset(intelImage->mt, intel_miptree_get_image_offset(intelImage->mt,
intelImage->base.Level, intelImage->base.Base.Level,
intelImage->base.Face, intelImage->base.Base.Face,
0, 0,
&image_x, &image_y); &image_x, &image_y);

View File

@@ -53,40 +53,40 @@ intel_miptree_create_for_teximage(struct intel_context *intel,
{ {
GLuint firstLevel; GLuint firstLevel;
GLuint lastLevel; GLuint lastLevel;
GLuint width = intelImage->base.Width; GLuint width = intelImage->base.Base.Width;
GLuint height = intelImage->base.Height; GLuint height = intelImage->base.Base.Height;
GLuint depth = intelImage->base.Depth; GLuint depth = intelImage->base.Base.Depth;
GLuint i; GLuint i;
DBG("%s\n", __FUNCTION__); DBG("%s\n", __FUNCTION__);
if (intelImage->base.Border) if (intelImage->base.Base.Border)
return NULL; return NULL;
if (intelImage->base.Level > intelObj->base.BaseLevel && if (intelImage->base.Base.Level > intelObj->base.BaseLevel &&
(intelImage->base.Width == 1 || (intelImage->base.Base.Width == 1 ||
(intelObj->base.Target != GL_TEXTURE_1D && (intelObj->base.Target != GL_TEXTURE_1D &&
intelImage->base.Height == 1) || intelImage->base.Base.Height == 1) ||
(intelObj->base.Target == GL_TEXTURE_3D && (intelObj->base.Target == GL_TEXTURE_3D &&
intelImage->base.Depth == 1))) { intelImage->base.Base.Depth == 1))) {
/* For this combination, we're at some lower mipmap level and /* For this combination, we're at some lower mipmap level and
* some important dimension is 1. We can't extrapolate up to a * some important dimension is 1. We can't extrapolate up to a
* likely base level width/height/depth for a full mipmap stack * likely base level width/height/depth for a full mipmap stack
* from this info, so just allocate this one level. * from this info, so just allocate this one level.
*/ */
firstLevel = intelImage->base.Level; firstLevel = intelImage->base.Base.Level;
lastLevel = intelImage->base.Level; lastLevel = intelImage->base.Base.Level;
} else { } else {
/* If this image disrespects BaseLevel, allocate from level zero. /* If this image disrespects BaseLevel, allocate from level zero.
* Usually BaseLevel == 0, so it's unlikely to happen. * Usually BaseLevel == 0, so it's unlikely to happen.
*/ */
if (intelImage->base.Level < intelObj->base.BaseLevel) if (intelImage->base.Base.Level < intelObj->base.BaseLevel)
firstLevel = 0; firstLevel = 0;
else else
firstLevel = intelObj->base.BaseLevel; firstLevel = intelObj->base.BaseLevel;
/* Figure out image dimensions at start level. */ /* Figure out image dimensions at start level. */
for (i = intelImage->base.Level; i > firstLevel; i--) { for (i = intelImage->base.Base.Level; i > firstLevel; i--) {
width <<= 1; width <<= 1;
if (height != 1) if (height != 1)
height <<= 1; height <<= 1;
@@ -101,7 +101,7 @@ intel_miptree_create_for_teximage(struct intel_context *intel,
*/ */
if ((intelObj->base.Sampler.MinFilter == GL_NEAREST || if ((intelObj->base.Sampler.MinFilter == GL_NEAREST ||
intelObj->base.Sampler.MinFilter == GL_LINEAR) && intelObj->base.Sampler.MinFilter == GL_LINEAR) &&
intelImage->base.Level == firstLevel && intelImage->base.Base.Level == firstLevel &&
(intel->gen < 4 || firstLevel == 0)) { (intel->gen < 4 || firstLevel == 0)) {
lastLevel = firstLevel; lastLevel = firstLevel;
} else { } else {
@@ -111,7 +111,7 @@ intel_miptree_create_for_teximage(struct intel_context *intel,
return intel_miptree_create(intel, return intel_miptree_create(intel,
intelObj->base.Target, intelObj->base.Target,
intelImage->base.TexFormat, intelImage->base.Base.TexFormat,
firstLevel, firstLevel,
lastLevel, lastLevel,
width, width,
@@ -184,8 +184,8 @@ try_pbo_upload(struct intel_context *intel,
else else
src_stride = width; src_stride = width;
intel_miptree_get_image_offset(intelImage->mt, intelImage->base.Level, intel_miptree_get_image_offset(intelImage->mt, intelImage->base.Base.Level,
intelImage->base.Face, 0, intelImage->base.Base.Face, 0,
&dst_x, &dst_y); &dst_x, &dst_y);
dst_stride = intelImage->mt->region->pitch; dst_stride = intelImage->mt->region->pitch;
@@ -239,8 +239,8 @@ try_pbo_zcopy(struct intel_context *intel,
else else
src_stride = width; src_stride = width;
intel_miptree_get_image_offset(intelImage->mt, intelImage->base.Level, intel_miptree_get_image_offset(intelImage->mt, intelImage->base.Base.Level,
intelImage->base.Face, 0, intelImage->base.Base.Face, 0,
&dst_x, &dst_y); &dst_x, &dst_y);
dst_stride = intelImage->mt->region->pitch; dst_stride = intelImage->mt->region->pitch;
@@ -271,8 +271,8 @@ intel_tex_image_s8z24_scattergather(struct intel_context *intel,
struct gl_renderbuffer *depth_rb = intel_image->depth_rb; struct gl_renderbuffer *depth_rb = intel_image->depth_rb;
struct gl_renderbuffer *stencil_rb = intel_image->stencil_rb; struct gl_renderbuffer *stencil_rb = intel_image->stencil_rb;
int w = intel_image->base.Width; int w = intel_image->base.Base.Width;
int h = intel_image->base.Height; int h = intel_image->base.Base.Height;
uint32_t depth_row[w]; uint32_t depth_row[w];
uint8_t stencil_row[w]; uint8_t stencil_row[w];
@@ -333,15 +333,15 @@ intel_tex_image_s8z24_create_renderbuffers(struct intel_context *intel,
struct gl_context *ctx = &intel->ctx; struct gl_context *ctx = &intel->ctx;
bool ok = true; bool ok = true;
int width = image->base.Width; int width = image->base.Base.Width;
int height = image->base.Height; int height = image->base.Base.Height;
struct gl_renderbuffer *drb; struct gl_renderbuffer *drb;
struct gl_renderbuffer *srb; struct gl_renderbuffer *srb;
struct intel_renderbuffer *idrb; struct intel_renderbuffer *idrb;
struct intel_renderbuffer *isrb; struct intel_renderbuffer *isrb;
assert(intel->has_separate_stencil); assert(intel->has_separate_stencil);
assert(image->base.TexFormat == MESA_FORMAT_S8_Z24); assert(image->base.Base.TexFormat == MESA_FORMAT_S8_Z24);
assert(image->mt != NULL); assert(image->mt != NULL);
drb = intel_create_wrapped_renderbuffer(ctx, width, height, drb = intel_create_wrapped_renderbuffer(ctx, width, height,
@@ -418,11 +418,11 @@ intelTexImage(struct gl_context * ctx,
assert(!intelImage->mt); assert(!intelImage->mt);
if (intelObj->mt && if (intelObj->mt &&
intel_miptree_match_image(intelObj->mt, &intelImage->base)) { intel_miptree_match_image(intelObj->mt, &intelImage->base.Base)) {
/* Use an existing miptree when possible */ /* Use an existing miptree when possible */
intel_miptree_reference(&intelImage->mt, intelObj->mt); intel_miptree_reference(&intelImage->mt, intelObj->mt);
assert(intelImage->mt); assert(intelImage->mt);
} else if (intelImage->base.Border == 0) { } else if (intelImage->base.Base.Border == 0) {
/* Didn't fit in the object miptree, but it's suitable for inclusion in /* Didn't fit in the object miptree, but it's suitable for inclusion in
* a miptree, so create one just for our level and store it in the image. * a miptree, so create one just for our level and store it in the image.
* It'll get moved into the object miptree at validate time. * It'll get moved into the object miptree at validate time.
@@ -448,7 +448,7 @@ intelTexImage(struct gl_context * ctx,
intelImage->mt && intelImage->mt &&
_mesa_is_bufferobj(unpack->BufferObj) && _mesa_is_bufferobj(unpack->BufferObj) &&
check_pbo_format(internalFormat, format, check_pbo_format(internalFormat, format,
type, intelImage->base.TexFormat)) { type, intelImage->base.Base.TexFormat)) {
DBG("trying pbo upload\n"); DBG("trying pbo upload\n");
@@ -502,10 +502,10 @@ intelTexImage(struct gl_context * ctx,
} }
texImage->Data = intel_miptree_image_map(intel, texImage->Data = intel_miptree_image_map(intel,
intelImage->mt, intelImage->mt,
intelImage->base.Face, intelImage->base.Base.Face,
intelImage->base.Level, intelImage->base.Base.Level,
&dstRowStride, &dstRowStride,
intelImage->base.ImageOffsets); intelImage->base.Base.ImageOffsets);
} }
texImage->RowStride = dstRowStride / intelImage->mt->cpp; texImage->RowStride = dstRowStride / intelImage->mt->cpp;
@@ -669,25 +669,25 @@ intel_get_tex_image(struct gl_context * ctx, GLenum target, GLint level,
/* Image is stored in hardware format in a buffer managed by the /* Image is stored in hardware format in a buffer managed by the
* kernel. Need to explicitly map and unmap it. * kernel. Need to explicitly map and unmap it.
*/ */
intelImage->base.Data = intelImage->base.Base.Data =
intel_miptree_image_map(intel, intel_miptree_image_map(intel,
intelImage->mt, intelImage->mt,
intelImage->base.Face, intelImage->base.Base.Face,
intelImage->base.Level, intelImage->base.Base.Level,
&intelImage->base.RowStride, &intelImage->base.Base.RowStride,
intelImage->base.ImageOffsets); intelImage->base.Base.ImageOffsets);
intelImage->base.RowStride /= intelImage->mt->cpp; intelImage->base.Base.RowStride /= intelImage->mt->cpp;
} }
else { else {
/* Otherwise, the image should actually be stored in /* Otherwise, the image should actually be stored in
* intelImage->base.Data. This is pretty confusing for * intelImage->base.Base.Data. This is pretty confusing for
* everybody, I'd much prefer to separate the two functions of * everybody, I'd much prefer to separate the two functions of
* texImage->Data - storage for texture images in main memory * texImage->Data - storage for texture images in main memory
* and access (ie mappings) of images. In other words, we'd * and access (ie mappings) of images. In other words, we'd
* create a new texImage->Map field and leave Data simply for * create a new texImage->Map field and leave Data simply for
* storage. * storage.
*/ */
assert(intelImage->base.Data); assert(intelImage->base.Base.Data);
} }
if (intelImage->stencil_rb) { if (intelImage->stencil_rb) {
@@ -712,7 +712,7 @@ intel_get_tex_image(struct gl_context * ctx, GLenum target, GLint level,
/* Unmap */ /* Unmap */
if (intelImage->mt) { if (intelImage->mt) {
intel_miptree_image_unmap(intel, intelImage->mt); intel_miptree_image_unmap(intel, intelImage->mt);
intelImage->base.Data = NULL; intelImage->base.Base.Data = NULL;
} }
} }
@@ -806,7 +806,7 @@ intelSetTexBuffer2(__DRIcontext *pDRICtx, GLint target,
texImage->RowStride = rb->region->pitch; texImage->RowStride = rb->region->pitch;
intel_miptree_reference(&intelImage->mt, intelObj->mt); intel_miptree_reference(&intelImage->mt, intelObj->mt);
if (!intel_miptree_match_image(intelObj->mt, &intelImage->base)) { if (!intel_miptree_match_image(intelObj->mt, &intelImage->base.Base)) {
fprintf(stderr, "miptree doesn't match image\n"); fprintf(stderr, "miptree doesn't match image\n");
} }
@@ -862,7 +862,7 @@ intel_image_target_texture_2d(struct gl_context *ctx, GLenum target,
texImage->RowStride = image->region->pitch; texImage->RowStride = image->region->pitch;
intel_miptree_reference(&intelImage->mt, intelObj->mt); intel_miptree_reference(&intelImage->mt, intelObj->mt);
if (!intel_miptree_match_image(intelObj->mt, &intelImage->base)) if (!intel_miptree_match_image(intelObj->mt, &intelImage->base.Base))
fprintf(stderr, "miptree doesn't match image\n"); fprintf(stderr, "miptree doesn't match image\n");
} }
#endif #endif

View File

@@ -28,9 +28,12 @@
#ifndef _INTEL_TEX_OBJ_H #ifndef _INTEL_TEX_OBJ_H
#define _INTEL_TEX_OBJ_H #define _INTEL_TEX_OBJ_H
#include "swrast/s_context.h"
struct intel_texture_object struct intel_texture_object
{ {
struct gl_texture_object base; /* The "parent" object */ struct gl_texture_object base;
/* This is a mirror of base._MaxLevel, updated at validate time, /* This is a mirror of base._MaxLevel, updated at validate time,
* except that we don't bother with the non-base levels for * except that we don't bother with the non-base levels for
@@ -48,9 +51,14 @@ struct intel_texture_object
struct intel_mipmap_tree *mt; struct intel_mipmap_tree *mt;
}; };
/**
* intel_texture_image is a subclass of swrast_texture_image because we
* sometimes fall back to using the swrast module for software rendering.
*/
struct intel_texture_image struct intel_texture_image
{ {
struct gl_texture_image base; struct swrast_texture_image base;
/* If intelImage->mt != NULL, image data is stored here. /* If intelImage->mt != NULL, image data is stored here.
* Else if intelImage->base.Data != NULL, image is stored there. * Else if intelImage->base.Data != NULL, image is stored there.

View File

@@ -116,7 +116,7 @@ intel_blit_texsubimage(struct gl_context * ctx,
dstRowStride = pitch; dstRowStride = pitch;
intel_miptree_get_image_offset(intelImage->mt, level, intel_miptree_get_image_offset(intelImage->mt, level,
intelImage->base.Face, 0, intelImage->base.Base.Face, 0,
&blit_x, &blit_y); &blit_x, &blit_y);
blit_x += xoffset; blit_x += xoffset;
blit_y += yoffset; blit_y += yoffset;

View File

@@ -41,26 +41,26 @@ copy_image_data_to_tree(struct intel_context *intel,
*/ */
intel_miptree_image_copy(intel, intel_miptree_image_copy(intel,
intelObj->mt, intelObj->mt,
intelImage->base.Face, intelImage->base.Base.Face,
intelImage->base.Level, intelImage->mt); intelImage->base.Base.Level, intelImage->mt);
intel_miptree_release(intel, &intelImage->mt); intel_miptree_release(intel, &intelImage->mt);
} }
else { else {
assert(intelImage->base.Data != NULL); assert(intelImage->base.Base.Data != NULL);
/* More straightforward upload. /* More straightforward upload.
*/ */
intel_miptree_image_data(intel, intel_miptree_image_data(intel,
intelObj->mt, intelObj->mt,
intelImage->base.Face, intelImage->base.Base.Face,
intelImage->base.Level, intelImage->base.Base.Level,
intelImage->base.Data, intelImage->base.Base.Data,
intelImage->base.RowStride, intelImage->base.Base.RowStride,
intelImage->base.RowStride * intelImage->base.Base.RowStride *
intelImage->base.Height); intelImage->base.Base.Height);
_mesa_align_free(intelImage->base.Data); _mesa_align_free(intelImage->base.Base.Data);
intelImage->base.Data = NULL; intelImage->base.Base.Data = NULL;
} }
intel_miptree_reference(&intelImage->mt, intelObj->mt); intel_miptree_reference(&intelImage->mt, intelObj->mt);
@@ -91,7 +91,7 @@ intel_finalize_mipmap_tree(struct intel_context *intel, GLuint unit)
/* Fallback case: /* Fallback case:
*/ */
if (firstImage->base.Border) { if (firstImage->base.Base.Border) {
if (intelObj->mt) { if (intelObj->mt) {
intel_miptree_release(intel, &intelObj->mt); intel_miptree_release(intel, &intelObj->mt);
} }
@@ -108,12 +108,12 @@ intel_finalize_mipmap_tree(struct intel_context *intel, GLuint unit)
*/ */
if (intelObj->mt && if (intelObj->mt &&
(intelObj->mt->target != intelObj->base.Target || (intelObj->mt->target != intelObj->base.Target ||
intelObj->mt->format != firstImage->base.TexFormat || intelObj->mt->format != firstImage->base.Base.TexFormat ||
intelObj->mt->first_level != tObj->BaseLevel || intelObj->mt->first_level != tObj->BaseLevel ||
intelObj->mt->last_level < intelObj->_MaxLevel || intelObj->mt->last_level < intelObj->_MaxLevel ||
intelObj->mt->width0 != firstImage->base.Width || intelObj->mt->width0 != firstImage->base.Base.Width ||
intelObj->mt->height0 != firstImage->base.Height || intelObj->mt->height0 != firstImage->base.Base.Height ||
intelObj->mt->depth0 != firstImage->base.Depth)) { intelObj->mt->depth0 != firstImage->base.Base.Depth)) {
intel_miptree_release(intel, &intelObj->mt); intel_miptree_release(intel, &intelObj->mt);
} }
@@ -123,12 +123,12 @@ intel_finalize_mipmap_tree(struct intel_context *intel, GLuint unit)
if (!intelObj->mt) { if (!intelObj->mt) {
intelObj->mt = intel_miptree_create(intel, intelObj->mt = intel_miptree_create(intel,
intelObj->base.Target, intelObj->base.Target,
firstImage->base.TexFormat, firstImage->base.Base.TexFormat,
tObj->BaseLevel, tObj->BaseLevel,
intelObj->_MaxLevel, intelObj->_MaxLevel,
firstImage->base.Width, firstImage->base.Base.Width,
firstImage->base.Height, firstImage->base.Base.Height,
firstImage->base.Depth, firstImage->base.Base.Depth,
GL_TRUE); GL_TRUE);
if (!intelObj->mt) if (!intelObj->mt)
return GL_FALSE; return GL_FALSE;
@@ -173,15 +173,15 @@ intel_tex_map_level_images(struct intel_context *intel,
intel_texture_image(intelObj->base.Image[face][level]); intel_texture_image(intelObj->base.Image[face][level]);
if (intelImage && intelImage->mt) { if (intelImage && intelImage->mt) {
intelImage->base.Data = intelImage->base.Base.Data =
intel_miptree_image_map(intel, intel_miptree_image_map(intel,
intelImage->mt, intelImage->mt,
intelImage->base.Face, intelImage->base.Base.Face,
intelImage->base.Level, intelImage->base.Base.Level,
&intelImage->base.RowStride, &intelImage->base.Base.RowStride,
intelImage->base.ImageOffsets); intelImage->base.Base.ImageOffsets);
/* convert stride to texels, not bytes */ /* convert stride to texels, not bytes */
intelImage->base.RowStride /= intelImage->mt->cpp; intelImage->base.Base.RowStride /= intelImage->mt->cpp;
/* intelImage->base.ImageStride /= intelImage->mt->cpp; */ /* intelImage->base.ImageStride /= intelImage->mt->cpp; */
} }
} }
@@ -201,7 +201,7 @@ intel_tex_unmap_level_images(struct intel_context *intel,
if (intelImage && intelImage->mt) { if (intelImage && intelImage->mt) {
intel_miptree_image_unmap(intel, intelImage->mt); intel_miptree_image_unmap(intel, intelImage->mt);
intelImage->base.Data = NULL; intelImage->base.Base.Data = NULL;
} }
} }
} }