Selaa lähdekoodia

r600: use persistent bos for shaders

tags/mesa_7_6_rc1
Alex Deucher 16 vuotta sitten
vanhempi
commit
7a05a4c65c
1 muutettua tiedostoa jossa 26 lisäystä ja 24 poistoa
  1. 26
    24
      src/mesa/drivers/dri/r600/r600_emit.c

+ 26
- 24
src/mesa/drivers/dri/r600/r600_emit.c Näytä tiedosto

@@ -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;


Loading…
Peruuta
Tallenna