/** * Map a single texture image for glTexImage and friends. */ void radeon_teximage_map(radeon_texture_image *image, GLboolean write_enable) { radeon_print(RADEON_TEXTURE, RADEON_VERBOSE, "%s(img %p), write_enable %s.\n", __func__, image, write_enable ? "true": "false"); if (image->mt) { assert(!image->base.Map); radeon_bo_map(image->mt->bo, write_enable); teximage_set_map_data(image); } }
/** * Map a validated texture for reading during software rendering. */ void radeonMapTexture(GLcontext *ctx, struct gl_texture_object *texObj) { radeonTexObj* t = radeon_tex_obj(texObj); int face, level; radeon_print(RADEON_TEXTURE, RADEON_VERBOSE, "%s(%p, tex %p)\n", __func__, ctx, texObj); if (!radeon_validate_texture_miptree(ctx, texObj)) { radeon_error("%s(%p, tex %p) Failed to validate miptree for " "sw fallback.\n", __func__, ctx, texObj); return; } if (t->image_override && t->bo) { radeon_print(RADEON_TEXTURE, RADEON_VERBOSE, "%s(%p, tex %p) Work around for missing miptree in r100.\n", __func__, ctx, texObj); map_override(ctx, t); } /* for r100 3D sw fallbacks don't have mt */ if (!t->mt) { radeon_warning("%s(%p, tex %p) No miptree in texture.\n", __func__, ctx, texObj); return; } radeon_bo_map(t->mt->bo, GL_FALSE); for(face = 0; face < t->mt->faces; ++face) { for(level = t->minLod; level <= t->maxLod; ++level) teximage_set_map_data(get_radeon_texture_image(texObj->Image[face][level])); } }