Mesa (radeon-rewrite): radeon: fixup map/ unmap texture to work with override BOs

Dave Airlie airlied at kemper.freedesktop.org
Thu Mar 26 03:28:07 UTC 2009


Module: Mesa
Branch: radeon-rewrite
Commit: 258686a973d7aef4bf956f540e99e65dc5bbee9c
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=258686a973d7aef4bf956f540e99e65dc5bbee9c

Author: Dave Airlie <airlied at redhat.com>
Date:   Wed Mar 25 17:01:37 2009 +1000

radeon: fixup map/unmap texture to work with override BOs

if you hit this you've already failed but we shouldn't crash

---

 src/mesa/drivers/dri/radeon/radeon_texture.c |   26 +++++++++++++++++++++++++-
 1 files changed, 25 insertions(+), 1 deletions(-)

diff --git a/src/mesa/drivers/dri/radeon/radeon_texture.c b/src/mesa/drivers/dri/radeon/radeon_texture.c
index d212898..a38d76a 100644
--- a/src/mesa/drivers/dri/radeon/radeon_texture.c
+++ b/src/mesa/drivers/dri/radeon/radeon_texture.c
@@ -131,6 +131,25 @@ void radeon_teximage_unmap(radeon_texture_image *image)
 	}
 }
 
+static void map_override(GLcontext *ctx, radeonTexObj *t)
+{
+	radeon_texture_image *img = get_radeon_texture_image(t->base.Image[0][0]);
+
+	radeon_bo_map(t->bo, GL_FALSE);
+
+	img->base.Data = t->bo->ptr;
+	_mesa_set_fetch_functions(&img->base, 2);
+}
+
+static void unmap_override(GLcontext *ctx, radeonTexObj *t)
+{
+	radeon_texture_image *img = get_radeon_texture_image(t->base.Image[0][0]);
+
+	radeon_bo_unmap(t->bo);
+
+	img->base.Data = NULL;
+}
+
 /**
  * Map a validated texture for reading during software rendering.
  */
@@ -143,8 +162,11 @@ void radeonMapTexture(GLcontext *ctx, struct gl_texture_object *texObj)
 	  return;
 
 	/* for r100 3D sw fallbacks don't have mt */
+	if (t->image_override && t->bo)
+		map_override(ctx, t);
+
 	if (!t->mt)
-	    return;
+		return;
 
 	radeon_bo_map(t->mt->bo, GL_FALSE);
 	for(face = 0; face < t->mt->faces; ++face) {
@@ -158,6 +180,8 @@ void radeonUnmapTexture(GLcontext *ctx, struct gl_texture_object *texObj)
 	radeonTexObj* t = radeon_tex_obj(texObj);
 	int face, level;
 
+	if (t->image_override && t->bo)
+		unmap_override(ctx, t);
 	/* for r100 3D sw fallbacks don't have mt */
 	if (!t->mt)
 	  return;




More information about the mesa-commit mailing list