|
|
@ -48,6 +48,8 @@ |
|
|
|
#include "util/u_hash_table.h" |
|
|
|
#include "util/u_hash_table.h" |
|
|
|
|
|
|
|
|
|
|
|
struct vtest_resource { |
|
|
|
struct vtest_resource { |
|
|
|
|
|
|
|
uint32_t res_id; |
|
|
|
|
|
|
|
|
|
|
|
struct iovec iov; |
|
|
|
struct iovec iov; |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
@ -587,14 +589,13 @@ static int vtest_create_resource_decode_args2(struct vtest_context *ctx, |
|
|
|
return 0; |
|
|
|
return 0; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int vtest_create_resource_setup_shm(uint32_t res_id, |
|
|
|
static int vtest_create_resource_setup_shm(struct vtest_resource *res, |
|
|
|
struct vtest_resource *res, |
|
|
|
|
|
|
|
size_t size) |
|
|
|
size_t size) |
|
|
|
{ |
|
|
|
{ |
|
|
|
int fd; |
|
|
|
int fd; |
|
|
|
void *ptr; |
|
|
|
void *ptr; |
|
|
|
|
|
|
|
|
|
|
|
fd = vtest_new_shm(res_id, size); |
|
|
|
fd = vtest_new_shm(res->res_id, size); |
|
|
|
if (fd < 0) |
|
|
|
if (fd < 0) |
|
|
|
return report_failed_call("vtest_new_shm", fd); |
|
|
|
return report_failed_call("vtest_new_shm", fd); |
|
|
|
|
|
|
|
|
|
|
@ -630,12 +631,13 @@ static int vtest_create_resource_internal(struct vtest_context *ctx, |
|
|
|
res = CALLOC_STRUCT(vtest_resource); |
|
|
|
res = CALLOC_STRUCT(vtest_resource); |
|
|
|
if (!res) |
|
|
|
if (!res) |
|
|
|
return -ENOMEM; |
|
|
|
return -ENOMEM; |
|
|
|
|
|
|
|
res->res_id = args->handle; |
|
|
|
|
|
|
|
|
|
|
|
/* no shm for v1 resources or v2 multi-sample resources */ |
|
|
|
/* no shm for v1 resources or v2 multi-sample resources */ |
|
|
|
if (shm_size) { |
|
|
|
if (shm_size) { |
|
|
|
int fd; |
|
|
|
int fd; |
|
|
|
|
|
|
|
|
|
|
|
fd = vtest_create_resource_setup_shm(args->handle, res, shm_size); |
|
|
|
fd = vtest_create_resource_setup_shm(res, shm_size); |
|
|
|
if (fd < 0) { |
|
|
|
if (fd < 0) { |
|
|
|
FREE(res); |
|
|
|
FREE(res); |
|
|
|
return -ENOMEM; |
|
|
|
return -ENOMEM; |
|
|
@ -655,7 +657,7 @@ static int vtest_create_resource_internal(struct vtest_context *ctx, |
|
|
|
virgl_renderer_resource_attach_iov(args->handle, &res->iov, 1); |
|
|
|
virgl_renderer_resource_attach_iov(args->handle, &res->iov, 1); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
util_hash_table_set(renderer.resource_table, intptr_to_pointer(args->handle), res); |
|
|
|
util_hash_table_set(renderer.resource_table, intptr_to_pointer(res->res_id), res); |
|
|
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
return 0; |
|
|
|
} |
|
|
|
} |
|
|
@ -835,7 +837,7 @@ static int vtest_transfer_get_internal(struct vtest_context *ctx, |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (args) { |
|
|
|
if (args) { |
|
|
|
ret = virgl_renderer_transfer_read_iov(args->handle, |
|
|
|
ret = virgl_renderer_transfer_read_iov(res->res_id, |
|
|
|
ctx->ctx_id, |
|
|
|
ctx->ctx_id, |
|
|
|
args->level, |
|
|
|
args->level, |
|
|
|
args->stride, |
|
|
|
args->stride, |
|
|
@ -890,7 +892,7 @@ static int vtest_transfer_put_internal(struct vtest_context *ctx, |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (args) { |
|
|
|
if (args) { |
|
|
|
ret = virgl_renderer_transfer_write_iov(args->handle, |
|
|
|
ret = virgl_renderer_transfer_write_iov(res->res_id, |
|
|
|
ctx->ctx_id, |
|
|
|
ctx->ctx_id, |
|
|
|
args->level, |
|
|
|
args->level, |
|
|
|
args->stride, |
|
|
|
args->stride, |
|
|
|