コード例 #1
0
ファイル: etna_mem.c プロジェクト: sjhill71/etna_viv
int etna_vidmem_alloc_linear(etna_vidmem **mem_out, size_t bytes, gceSURF_TYPE type, gcePOOL pool, bool lock)
{
    if(mem_out == NULL) return ETNA_INVALID_ADDR;
    etna_vidmem *mem = ETNA_NEW(etna_vidmem);
    if(mem == NULL) return ETNA_OUT_OF_MEMORY;

    mem->type = type;

    if(viv_alloc_linear_vidmem(bytes, ETNA_VIDMEM_ALIGNMENT, type, pool, &mem->node, &mem->size)!=0)
    {
#ifdef DEBUG
        fprintf(stderr, "Error allocating render target tile status memory\n");
#endif
        return ETNA_OUT_OF_MEMORY;
    }
#ifdef DEBUG
    printf("Allocated: node=%08x size=%08x\n", (uint32_t)mem->node, mem->size);
#endif
    if(lock)
    {
        int status = etna_vidmem_lock(mem);
        if(status != ETNA_OK)
        {
            etna_vidmem_free(mem);
            return status;
        }
    }
    *mem_out = mem;
    return ETNA_OK;
}
コード例 #2
0
ファイル: etna_resource.c プロジェクト: troosh/etna_viv
static void etna_screen_resource_destroy(struct pipe_screen *screen,
                        struct pipe_resource *resource_)
{
    struct etna_screen *priv = etna_screen(screen);
    struct etna_resource *resource = etna_resource(resource_);
    if(resource == NULL)
        return;
    if(resource->last_ctx != NULL)
    {
        /* XXX This could fail when multiple contexts share this resource,
         * (the last one to bind it will "own" it) or fail miserably if
         * the context was since destroyed.
         */
        struct etna_pipe_context *ectx = resource->last_ctx;
        DBG_F(ETNA_DBG_RESOURCE_MSGS, "%p: resource queued destroyed (%ix%ix%i)", resource, resource_->width0, resource_->height0, resource_->depth0);
        etna_vidmem_queue_free(ectx->ctx->queue, resource->surface);
        etna_vidmem_queue_free(ectx->ctx->queue, resource->ts);
    } else {
        DBG_F(ETNA_DBG_RESOURCE_MSGS, "%p: resource destroyed (%ix%ix%i)", resource, resource_->width0, resource_->height0, resource_->depth0);
        etna_vidmem_free(priv->dev, resource->surface);
        etna_vidmem_free(priv->dev, resource->ts);
    }
    FREE(resource);
}