Mesa (master): r600: use persistent bos for shaders

Alex Deucher agd5f at kemper.freedesktop.org
Sun Aug 23 17:42:53 UTC 2009


Module: Mesa
Branch: master
Commit: 7a05a4c65cdb109ed43ee4587492f4637d3707b3
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=7a05a4c65cdb109ed43ee4587492f4637d3707b3

Author: Alex Deucher <alexdeucher at gmail.com>
Date:   Sun Aug 23 13:41:43 2009 -0400

r600: use persistent bos for shaders

---

 src/mesa/drivers/dri/r600/r600_emit.c |   50 +++++++++++++++++----------------
 1 files changed, 26 insertions(+), 24 deletions(-)

diff --git a/src/mesa/drivers/dri/r600/r600_emit.c b/src/mesa/drivers/dri/r600/r600_emit.c
index b0c7294..be86de1 100644
--- a/src/mesa/drivers/dri/r600/r600_emit.c
+++ b/src/mesa/drivers/dri/r600/r600_emit.c
@@ -51,53 +51,55 @@ void r600EmitCacheFlush(context_t *rmesa)
 {
 }
 
-GLboolean r600EmitShader(GLcontext * ctx, 
+GLboolean r600EmitShader(GLcontext * ctx,
                          void ** shaderbo,
-			             GLvoid * data, 
+			 GLvoid * data,
                          int sizeinDWORD,
-                         char * szShaderUsage) 
+                         char * szShaderUsage)
 {
-    radeonContextPtr radeonctx = RADEON_CONTEXT(ctx);
-
-    struct radeon_bo * pbo;
-    uint32_t *out;
+	radeonContextPtr radeonctx = RADEON_CONTEXT(ctx);
+	struct radeon_bo * pbo;
+	uint32_t *out;
 
 shader_again_alloc:
-    pbo = radeon_bo_open(radeonctx->radeonScreen->bom,
-			 0,
-                         sizeinDWORD * 4,
-                         256,
-                         RADEON_GEM_DOMAIN_GTT,
-			 0);
+	pbo = radeon_bo_open(radeonctx->radeonScreen->bom,
+			     0,
+			     sizeinDWORD * 4,
+			     256,
+			     RADEON_GEM_DOMAIN_GTT,
+			     0);
 
 	if (!pbo) {
 		rcommonFlushCmdBuf(radeonctx, __FUNCTION__);
 		goto shader_again_alloc;
 	}
 
+	radeon_cs_space_add_persistent_bo(radeonctx->cmdbuf.cs,
+					  pbo,
+					  RADEON_GEM_DOMAIN_GTT, 0);
+
         if (radeon_cs_space_check_with_bo(radeonctx->cmdbuf.cs,
                                           pbo,
-                                          RADEON_GEM_DOMAIN_GTT, 0))
+                                          RADEON_GEM_DOMAIN_GTT, 0)) {
                 fprintf(stderr,"failure to revalidate BOs - badness\n");
-
+		return GL_FALSE;
+	}
 
 	radeon_bo_map(pbo, 1);
 
-    radeon_bo_ref(pbo);
-
-    out = (uint32_t*)(pbo->ptr);
+	out = (uint32_t*)(pbo->ptr);
 
-    memcpy(out, data, sizeinDWORD * 4);
+	memcpy(out, data, sizeinDWORD * 4);
 
-    radeon_bo_unmap(pbo); 
+	radeon_bo_unmap(pbo);
 
-    *shaderbo = (void*)pbo;
+	*shaderbo = (void*)pbo;
 
-    return GL_TRUE;
+	return GL_TRUE;
 }
 
-GLboolean r600DeleteShader(GLcontext * ctx, 
-                           void * shaderbo) 
+GLboolean r600DeleteShader(GLcontext * ctx,
+                           void * shaderbo)
 {
     struct radeon_bo * pbo = (struct radeon_bo *)shaderbo;
 




More information about the mesa-commit mailing list