summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorWladimir J. van der Laan <laanwj@gmail.com>2013-10-17 08:03:51 +0200
committerWladimir J. van der Laan <laanwj@gmail.com>2013-10-17 08:05:20 +0200
commit84a59848f1df3a9c28a35dc3d18e24ea69ac1b7b (patch)
tree77b9bf53a401a7c2cbbf7f54c85f36b54c863435 /src
parentc78f82f36d6256491cfb9f24c02bce04677ed0b4 (diff)
downloadetna_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.c30
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)