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

Author: Alex Deucher <[email protected]>
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;
 

_______________________________________________
mesa-commit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to