rpms/mesa/F-11 radeon-rewrite-fixes.patch, NONE, 1.1 mesa.spec, 1.242, 1.243

Dave Airlie airlied at fedoraproject.org
Thu Apr 16 09:07:42 UTC 2009


Author: airlied

Update of /cvs/pkgs/rpms/mesa/F-11
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv10037

Modified Files:
	mesa.spec 
Added Files:
	radeon-rewrite-fixes.patch 
Log Message:
* Thu Apr 16 2009 Dave Airlie <airlied at redhat.com> 7.5-0.11
- radeon-rewrite-fixes.patch: fix context crash in compiz + r200 fixes


radeon-rewrite-fixes.patch:

--- NEW FILE radeon-rewrite-fixes.patch ---
diff -up mesa-20090322/src/mesa/drivers/dri/common/dri_util.c.dave mesa-20090322/src/mesa/drivers/dri/common/dri_util.c
--- mesa-20090322/src/mesa/drivers/dri/common/dri_util.c.dave	2009-03-21 21:26:15.000000000 +1000
+++ mesa-20090322/src/mesa/drivers/dri/common/dri_util.c	2009-04-16 18:59:17.000000000 +1000
@@ -37,6 +37,9 @@
 typedef GLboolean ( * PFNGLXGETMSCRATEOMLPROC) (__DRIdrawable *drawable, int32_t *numerator, int32_t *denominator);
 #endif
 
+static void dri_get_drawable(__DRIdrawable *pdp);
+static void dri_put_drawable(__DRIdrawable *pdp);
+
 /**
  * This is just a token extension used to signal that the driver
  * supports setting a read drawable.
@@ -127,7 +130,7 @@ static int driUnbindContext(__DRIcontext
 	return GL_FALSE;
     }
 
-    pdp->refcount--;
+    dri_put_drawable(pdp);
 
     if (prp != pdp) {
         if (prp->refcount == 0) {
@@ -135,7 +138,7 @@ static int driUnbindContext(__DRIcontext
 	    return GL_FALSE;
 	}
 
-	prp->refcount--;
+    	dri_put_drawable(prp);
     }
 
 
@@ -175,9 +178,9 @@ static int driBindContext(__DRIcontext *
     pcp->driDrawablePriv = pdp;
     pcp->driReadablePriv = prp;
     pdp->driContextPriv = pcp;
-    pdp->refcount++;
+    dri_get_drawable(pdp);
     if ( pdp != prp ) {
-	prp->refcount++;
+        dri_get_drawable(prp);
     }
 
     /*
@@ -435,7 +438,7 @@ driCreateNewDrawable(__DRIscreen *psp, c
 
     pdp->loaderPrivate = data;
     pdp->hHWDrawable = hwDrawable;
-    pdp->refcount = 0;
+    pdp->refcount = 1;
     pdp->pStamp = NULL;
     pdp->lastStamp = 0;
     pdp->index = 0;
@@ -488,12 +491,19 @@ dri2CreateNewDrawable(__DRIscreen *scree
     return pdraw;
 }
 
-
-static void
-driDestroyDrawable(__DRIdrawable *pdp)
+static void dri_get_drawable(__DRIdrawable *pdp)
+{
+    pdp->refcount++;
+}
+	
+static void dri_put_drawable(__DRIdrawable *pdp)
 {
     __DRIscreenPrivate *psp;
 
+    pdp->refcount--;
+    if (pdp->refcount)
+	return;
+
     if (pdp) {
 	psp = pdp->driScreenPriv;
         (*psp->DriverAPI.DestroyBuffer)(pdp);
@@ -509,6 +519,12 @@ driDestroyDrawable(__DRIdrawable *pdp)
     }
 }
 
+static void
+driDestroyDrawable(__DRIdrawable *pdp)
+{
+    dri_put_drawable(pdp);
+}
+
 /*@}*/
 
 
diff -up mesa-20090322/src/mesa/drivers/dri/r200/r200_cmdbuf.c.dave mesa-20090322/src/mesa/drivers/dri/r200/r200_cmdbuf.c
--- mesa-20090322/src/mesa/drivers/dri/r200/r200_cmdbuf.c.dave	2009-04-16 18:58:14.000000000 +1000
+++ mesa-20090322/src/mesa/drivers/dri/r200/r200_cmdbuf.c	2009-04-16 18:58:32.000000000 +1000
@@ -209,6 +209,11 @@ GLushort *r200AllocEltsOpenEnded( r200Co
    rmesa->radeon.tcl.elt_dma_offset = 0;
    rmesa->tcl.elt_used = min_nr * 2;
 
+   radeon_validate_bo(&rmesa->radeon, rmesa->radeon.tcl.elt_dma_bo,
+                      RADEON_GEM_DOMAIN_GTT, 0);
+   if (radeon_revalidate_bos(rmesa->radeon.glCtx) == GL_FALSE)
+      fprintf(stderr,"failure to revalidate BOs - badness\n");
+
    radeon_bo_map(rmesa->radeon.tcl.elt_dma_bo, 1);
    retval = rmesa->radeon.tcl.elt_dma_bo->ptr + rmesa->radeon.tcl.elt_dma_offset;
    
diff -up mesa-20090322/src/mesa/drivers/dri/r200/r200_texstate.c.dave mesa-20090322/src/mesa/drivers/dri/r200/r200_texstate.c
--- mesa-20090322/src/mesa/drivers/dri/r200/r200_texstate.c.dave	2009-04-16 18:58:14.000000000 +1000
+++ mesa-20090322/src/mesa/drivers/dri/r200/r200_texstate.c	2009-04-16 18:58:32.000000000 +1000
@@ -1422,8 +1422,8 @@ void set_re_cntl_d3d( GLcontext *ctx, in
  */
 static void setup_hardware_state(r200ContextPtr rmesa, radeonTexObj *t)
 {
-   const struct gl_texture_image *firstImage =
-      t->base.Image[0][t->mt->firstLevel];
+   int firstlevel = t->mt ? t->mt->firstLevel : 0;
+   const struct gl_texture_image *firstImage = t->base.Image[0][firstlevel];
    GLint log2Width, log2Height, log2Depth, texelBytes;
    
    if ( t->bo ) {
diff -up mesa-20090322/src/mesa/drivers/dri/r300/r300_cmdbuf.c.dave mesa-20090322/src/mesa/drivers/dri/r300/r300_cmdbuf.c
--- mesa-20090322/src/mesa/drivers/dri/r300/r300_cmdbuf.c.dave	2009-04-16 18:58:14.000000000 +1000
+++ mesa-20090322/src/mesa/drivers/dri/r300/r300_cmdbuf.c	2009-04-16 18:58:32.000000000 +1000
@@ -214,6 +214,7 @@ static void emit_cb_offset(GLcontext *ct
 	struct radeon_renderbuffer *rrb;
 	uint32_t cbpitch;
 	uint32_t offset = r300->radeon.state.color.draw_offset;
+	uint32_t dw = 6;
 
 	rrb = radeon_get_colorbuffer(&r300->radeon);
 	if (!rrb || !rrb->bo) {
@@ -230,11 +231,16 @@ static void emit_cb_offset(GLcontext *ct
 	if (rrb->bo->flags & RADEON_BO_FLAGS_MACRO_TILE)
 		cbpitch |= R300_COLOR_TILE_ENABLE;
 
-	BEGIN_BATCH_NO_AUTOSTATE(8);
+    	if (r300->radeon.radeonScreen->kernel_mm)
+		dw += 2;
+	BEGIN_BATCH_NO_AUTOSTATE(dw);
 	OUT_BATCH_REGSEQ(R300_RB3D_COLOROFFSET0, 1);
 	OUT_BATCH_RELOC(offset, rrb->bo, offset, 0, RADEON_GEM_DOMAIN_VRAM, 0);
 	OUT_BATCH_REGSEQ(R300_RB3D_COLORPITCH0, 1);
-	OUT_BATCH_RELOC(cbpitch, rrb->bo, cbpitch, 0, RADEON_GEM_DOMAIN_VRAM, 0);
+    	if (!r300->radeon.radeonScreen->kernel_mm)
+		OUT_BATCH(cbpitch);
+	else
+		OUT_BATCH_RELOC(cbpitch, rrb->bo, cbpitch, 0, RADEON_GEM_DOMAIN_VRAM, 0);
 	END_BATCH();
     if (r300->radeon.radeonScreen->driScreen->dri2.enabled) {
         if (r300->radeon.radeonScreen->chip_family >= CHIP_FAMILY_RV515) {
diff -up mesa-20090322/src/mesa/drivers/dri/radeon/radeon_common.c.dave mesa-20090322/src/mesa/drivers/dri/radeon/radeon_common.c
--- mesa-20090322/src/mesa/drivers/dri/radeon/radeon_common.c.dave	2009-04-16 18:58:14.000000000 +1000
+++ mesa-20090322/src/mesa/drivers/dri/radeon/radeon_common.c	2009-04-16 18:58:32.000000000 +1000
@@ -928,6 +928,7 @@ void radeon_validate_reset_bos(radeonCon
 	int i;
 
 	for (i = 0; i < radeon->state.validated_bo_count; i++) {
+		radeon_bo_unref(radeon->state.bos[i].bo);
 		radeon->state.bos[i].bo = NULL;
 		radeon->state.bos[i].read_domains = 0;
 		radeon->state.bos[i].write_domain = 0;
@@ -938,6 +939,7 @@ void radeon_validate_reset_bos(radeonCon
 
 void radeon_validate_bo(radeonContextPtr radeon, struct radeon_bo *bo, uint32_t read_domains, uint32_t write_domain)
 {
+	radeon_bo_ref(bo);
 	radeon->state.bos[radeon->state.validated_bo_count].bo = bo;
 	radeon->state.bos[radeon->state.validated_bo_count].read_domains = read_domains;
 	radeon->state.bos[radeon->state.validated_bo_count].write_domain = write_domain;
diff -up mesa-20090322/src/mesa/drivers/dri/radeon/radeon_state_init.c.dave mesa-20090322/src/mesa/drivers/dri/radeon/radeon_state_init.c
--- mesa-20090322/src/mesa/drivers/dri/radeon/radeon_state_init.c.dave	2009-04-16 18:58:14.000000000 +1000
+++ mesa-20090322/src/mesa/drivers/dri/radeon/radeon_state_init.c	2009-04-16 18:58:32.000000000 +1000
@@ -448,6 +448,17 @@ static void ctx_emit_cs(GLcontext *ctx, 
    // }
 
    END_BATCH();
+   BEGIN_BATCH_NO_AUTOSTATE(4);
+   OUT_BATCH(CP_PACKET0(RADEON_RE_TOP_LEFT, 0));
+   OUT_BATCH(0);
+   OUT_BATCH(CP_PACKET0(RADEON_RE_WIDTH_HEIGHT, 0));
+   if (rrb) {
+       OUT_BATCH(((rrb->width - 1) << RADEON_RE_WIDTH_SHIFT) |
+                 ((rrb->height - 1) << RADEON_RE_HEIGHT_SHIFT));
+   } else {
+       OUT_BATCH(0);
+   }
+   END_BATCH();
 }
 
 static void cube_emit(GLcontext *ctx, struct radeon_state_atom *atom)


Index: mesa.spec
===================================================================
RCS file: /cvs/pkgs/rpms/mesa/F-11/mesa.spec,v
retrieving revision 1.242
retrieving revision 1.243
diff -u -r1.242 -r1.243
--- mesa.spec	15 Apr 2009 15:19:12 -0000	1.242
+++ mesa.spec	16 Apr 2009 09:07:11 -0000	1.243
@@ -20,7 +20,7 @@
 Summary: Mesa graphics libraries
 Name: mesa
 Version: 7.5
-Release: 0.10%{?dist}
+Release: 0.11%{?dist}
 License: MIT
 Group: System Environment/Libraries
 URL: http://www.mesa3d.org
@@ -49,6 +49,7 @@
 Patch13: mesa-7.5-sparc64.patch
 
 Patch20: mesa-7.5-get-driver-name.patch
+Patch21: radeon-rewrite-fixes.patch
 
 BuildRequires: pkgconfig autoconf automake
 %if %{with_dri}
@@ -178,6 +179,7 @@
 %patch12 -p1 -b .intel-nowarn
 %patch13 -p1 -b .sparc64
 %patch20 -p1 -b .get-driver-name
+%patch21 -p1 -b .radfixes
 
 # Hack the demos to use installed data files
 sed -i 's,../images,%{_libdir}/mesa-demos-data,' progs/demos/*.c
@@ -434,6 +436,9 @@
 %{_libdir}/mesa-demos-data
 
 %changelog
+* Thu Apr 16 2009 Dave Airlie <airlied at redhat.com> 7.5-0.11
+- radeon-rewrite-fixes.patch: fix context crash in compiz + r200 fixes
+
 * Tue Apr 14 2009 Adam Jackson <ajax at redhat.com> 7.5-0.10
 - mesa-7.5-get-driver-name.patch: Fix glXGetScreenDriver for DRI2 (#495342)
 




More information about the scm-commits mailing list