radeon: move glGetTexImage handlers to seperate file

This commit is contained in:
Maciej Cencora
2010-01-17 12:47:46 +01:00
parent 2b801066a1
commit ccbe3f0314
9 changed files with 102 additions and 60 deletions
+1
View File
@@ -25,6 +25,7 @@ RADEON_COMMON_SOURCES = \
radeon_span.c \
radeon_texture.c \
radeon_tex_copy.c \
radeon_tex_getimage.c \
radeon_tile.c
DRIVER_SOURCES = r200_context.c \
+1
View File
@@ -0,0 +1 @@
../radeon/radeon_tex_getimage.c
+1
View File
@@ -35,6 +35,7 @@ RADEON_COMMON_SOURCES = \
radeon_queryobj.c \
radeon_texture.c \
radeon_tex_copy.c \
radeon_tex_getimage.c \
radeon_tile.c
DRIVER_SOURCES = \
+1
View File
@@ -0,0 +1 @@
../radeon/radeon_tex_getimage.c
+1
View File
@@ -35,6 +35,7 @@ RADEON_COMMON_SOURCES = \
radeon_texture.c \
radeon_queryobj.c \
radeon_tex_copy.c \
radeon_tex_getimage.c \
radeon_tile.c
DRIVER_SOURCES = \
+1
View File
@@ -0,0 +1 @@
../radeon/radeon_tex_getimage.c
+1
View File
@@ -26,6 +26,7 @@ RADEON_COMMON_SOURCES = \
radeon_span.c \
radeon_texture.c \
radeon_tex_copy.c \
radeon_tex_getimage.c \
radeon_tile.c
DRIVER_SOURCES = \
@@ -0,0 +1,95 @@
/*
* Copyright (C) 2009 Maciej Cencora.
* Copyright (C) 2008 Nicolai Haehnle.
* Copyright (C) The Weather Channel, Inc. 2002. All Rights Reserved.
*
* The Weather Channel (TM) funded Tungsten Graphics to develop the
* initial release of the Radeon 8500 driver under the XFree86 license.
* This notice must be preserved.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice (including the
* next paragraph) shall be included in all copies or substantial
* portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
*/
#include "radeon_common_context.h"
#include "radeon_texture.h"
#include "radeon_mipmap_tree.h"
#include "main/texgetimage.h"
/**
* Need to map texture image into memory before copying image data,
* then unmap it.
*/
static void
radeon_get_tex_image(GLcontext * ctx, GLenum target, GLint level,
GLenum format, GLenum type, GLvoid * pixels,
struct gl_texture_object *texObj,
struct gl_texture_image *texImage, int compressed)
{
radeon_texture_image *image = get_radeon_texture_image(texImage);
radeon_print(RADEON_TEXTURE, RADEON_NORMAL,
"%s(%p, tex %p, image %p) compressed %d.\n",
__func__, ctx, texObj, image, compressed);
if (image->mt) {
/* Map the texture image read-only */
radeon_teximage_map(image, GL_FALSE);
} else {
/* Image hasn't been uploaded to a miptree yet */
assert(image->base.Data);
}
if (compressed) {
/* FIXME: this can't work for small textures (mips) which
use different hw stride */
_mesa_get_compressed_teximage(ctx, target, level, pixels,
texObj, texImage);
} else {
_mesa_get_teximage(ctx, target, level, format, type, pixels,
texObj, texImage);
}
if (image->mt) {
radeon_teximage_unmap(image);
}
}
void
radeonGetTexImage(GLcontext * ctx, GLenum target, GLint level,
GLenum format, GLenum type, GLvoid * pixels,
struct gl_texture_object *texObj,
struct gl_texture_image *texImage)
{
radeon_get_tex_image(ctx, target, level, format, type, pixels,
texObj, texImage, 0);
}
void
radeonGetCompressedTexImage(GLcontext *ctx, GLenum target, GLint level,
GLvoid *pixels,
struct gl_texture_object *texObj,
struct gl_texture_image *texImage)
{
radeon_get_tex_image(ctx, target, level, 0, 0, pixels,
texObj, texImage, 1);
}
@@ -39,7 +39,6 @@
#include "main/texstore.h"
#include "main/teximage.h"
#include "main/texobj.h"
#include "main/texgetimage.h"
#include "xmlpool.h" /* for symbolic values of enum-type options */
@@ -998,62 +997,3 @@ void radeonTexSubImage3D(GLcontext * ctx, GLenum target, GLint level,
radeon_texsubimage(ctx, 3, target, level, xoffset, yoffset, zoffset, width, height, depth, 0,
format, type, pixels, packing, texObj, texImage, 0);
}
/**
* Need to map texture image into memory before copying image data,
* then unmap it.
*/
static void
radeon_get_tex_image(GLcontext * ctx, GLenum target, GLint level,
GLenum format, GLenum type, GLvoid * pixels,
struct gl_texture_object *texObj,
struct gl_texture_image *texImage, int compressed)
{
radeon_texture_image *image = get_radeon_texture_image(texImage);
radeon_print(RADEON_TEXTURE, RADEON_NORMAL,
"%s(%p, tex %p, image %p) compressed %d.\n",
__func__, ctx, texObj, image, compressed);
if (image->mt) {
/* Map the texture image read-only */
radeon_teximage_map(image, GL_FALSE);
} else {
/* Image hasn't been uploaded to a miptree yet */
assert(image->base.Data);
}
if (compressed) {
/* FIXME: this can't work for small textures (mips) which
use different hw stride */
_mesa_get_compressed_teximage(ctx, target, level, pixels,
texObj, texImage);
} else {
_mesa_get_teximage(ctx, target, level, format, type, pixels,
texObj, texImage);
}
if (image->mt) {
radeon_teximage_unmap(image);
}
}
void
radeonGetTexImage(GLcontext * ctx, GLenum target, GLint level,
GLenum format, GLenum type, GLvoid * pixels,
struct gl_texture_object *texObj,
struct gl_texture_image *texImage)
{
radeon_get_tex_image(ctx, target, level, format, type, pixels,
texObj, texImage, 0);
}
void
radeonGetCompressedTexImage(GLcontext *ctx, GLenum target, GLint level,
GLvoid *pixels,
struct gl_texture_object *texObj,
struct gl_texture_image *texImage)
{
radeon_get_tex_image(ctx, target, level, 0, 0, pixels,
texObj, texImage, 1);
}