diff options
author | Wladimir J. van der Laan <laanwj@gmail.com> | 2013-10-17 08:03:51 +0200 |
---|---|---|
committer | Wladimir J. van der Laan <laanwj@gmail.com> | 2013-10-17 08:05:20 +0200 |
commit | 84a59848f1df3a9c28a35dc3d18e24ea69ac1b7b (patch) | |
tree | 77b9bf53a401a7c2cbbf7f54c85f36b54c863435 /src | |
parent | c78f82f36d6256491cfb9f24c02bce04677ed0b4 (diff) | |
download | etna_viv-84a59848f1df3a9c28a35dc3d18e24ea69ac1b7b.tar.gz etna_viv-84a59848f1df3a9c28a35dc3d18e24ea69ac1b7b.tar.xz |
etnaviv: support importing external vidmem nodes
Add support for importing external jgckVIDMEM nodes.
This could be used to experiment with transferring textures between
processes, at least until the new kernel driver.
Diffstat (limited to 'src')
-rw-r--r-- | src/etnaviv/etna_bo.c | 30 |
1 files changed, 24 insertions, 6 deletions
diff --git a/src/etnaviv/etna_bo.c b/src/etnaviv/etna_bo.c index df23e18..8c6069e 100644 --- a/src/etnaviv/etna_bo.c +++ b/src/etnaviv/etna_bo.c @@ -38,6 +38,7 @@ enum etna_bo_type { ETNA_BO_TYPE_VIDMEM, /* Main vidmem */ + ETNA_BO_TYPE_VIDMEM_EXTERNAL, /* Main vidmem, external handle */ ETNA_BO_TYPE_USERMEM, /* Mapped user memory */ ETNA_BO_TYPE_CONTIGUOUS,/* Contiguous memory */ ETNA_BO_TYPE_PHYSICAL /* Mmap-ed physical memory */ @@ -208,8 +209,20 @@ error: struct etna_bo *etna_bo_from_name(struct viv_conn *conn, uint32_t name) { - /* TODO */ - return NULL; + struct etna_bo *mem = ETNA_CALLOC_STRUCT(etna_bo); + if(mem == NULL) return NULL; + + mem->bo_type = ETNA_BO_TYPE_VIDMEM_EXTERNAL; + mem->node = (viv_node_t)name; + + /* Lock to this address space */ + int status = etna_bo_lock(conn, mem); + if(status != ETNA_OK) + { + free(mem); + return NULL; + } + return mem; } struct etna_bo *etna_bo_ref(struct etna_bo *bo) @@ -245,6 +258,12 @@ int etna_bo_del(struct viv_conn *conn, struct etna_bo *mem, struct etna_queue *q } } break; + case ETNA_BO_TYPE_VIDMEM_EXTERNAL: + if((rv = etna_bo_unlock(conn, mem, queue)) != ETNA_OK) + { + printf("etna: Warning: could not unlock memory\n"); + } + break; case ETNA_BO_TYPE_USERMEM: if(queue) { @@ -275,14 +294,13 @@ int etna_bo_del(struct viv_conn *conn, struct etna_bo *mem, struct etna_queue *q int etna_bo_get_name(struct etna_bo *bo, uint32_t *name) { - /* TODO */ - return -1; + *name = (uint32_t)bo->node; + return 0; } uint32_t etna_bo_handle(struct etna_bo *bo) { - /* TODO */ - return 0; + return (uint32_t)bo->node; } uint32_t etna_bo_size(struct etna_bo *bo) |