diff --git a/src/gallium/winsys/virgl/vtest/virgl_vtest_socket.c b/src/gallium/winsys/virgl/vtest/virgl_vtest_socket.c index b73fb8d17bc..a74b4c69daf 100644 --- a/src/gallium/winsys/virgl/vtest/virgl_vtest_socket.c +++ b/src/gallium/winsys/virgl/vtest/virgl_vtest_socket.c @@ -285,19 +285,19 @@ int virgl_vtest_send_get_caps(struct virgl_vtest_winsys *vws, return 0; } -static int virgl_vtest_send_resource_create2(struct virgl_vtest_winsys *vws, - uint32_t handle, - enum pipe_texture_target target, - uint32_t format, - uint32_t bind, - uint32_t width, - uint32_t height, - uint32_t depth, - uint32_t array_size, - uint32_t last_level, - uint32_t nr_samples, - uint32_t size, - int *out_fd) +static uint32_t virgl_vtest_send_resource_create2(struct virgl_vtest_winsys *vws, + uint32_t handle, + enum pipe_texture_target target, + uint32_t format, + uint32_t bind, + uint32_t width, + uint32_t height, + uint32_t depth, + uint32_t array_size, + uint32_t last_level, + uint32_t nr_samples, + uint32_t size, + int *out_fd) { uint32_t res_create_buf[VCMD_RES_CREATE2_SIZE], vtest_hdr[VTEST_HDR_SIZE]; @@ -333,25 +333,25 @@ static int virgl_vtest_send_resource_create2(struct virgl_vtest_winsys *vws, *out_fd = virgl_vtest_receive_fd(vws->sock_fd); if (*out_fd < 0) { fprintf(stderr, "failed to get fd\n"); - return -1; + return 0; } return handle; } -int virgl_vtest_send_resource_create(struct virgl_vtest_winsys *vws, - uint32_t handle, - enum pipe_texture_target target, - uint32_t format, - uint32_t bind, - uint32_t width, - uint32_t height, - uint32_t depth, - uint32_t array_size, - uint32_t last_level, - uint32_t nr_samples, - uint32_t size, - int *out_fd) +uint32_t virgl_vtest_send_resource_create(struct virgl_vtest_winsys *vws, + uint32_t handle, + enum pipe_texture_target target, + uint32_t format, + uint32_t bind, + uint32_t width, + uint32_t height, + uint32_t depth, + uint32_t array_size, + uint32_t last_level, + uint32_t nr_samples, + uint32_t size, + int *out_fd) { uint32_t res_create_buf[VCMD_RES_CREATE_SIZE], vtest_hdr[VTEST_HDR_SIZE]; @@ -561,10 +561,10 @@ int virgl_vtest_busy_wait(struct virgl_vtest_winsys *vws, int handle, return result[0]; } -int +uint32_t virgl_vtest_send_create_blob(struct virgl_vtest_winsys *vws, - uint32_t size, uint32_t blob_id, - int *out_fd) + uint32_t size, uint32_t blob_id, + int *out_fd) { uint32_t vtest_hdr[VTEST_HDR_SIZE]; vtest_hdr[VTEST_CMD_LEN] = VCMD_RES_CREATE_BLOB_SIZE; diff --git a/src/gallium/winsys/virgl/vtest/virgl_vtest_winsys.c b/src/gallium/winsys/virgl/vtest/virgl_vtest_winsys.c index 2b096083bd8..5c4eeef655d 100644 --- a/src/gallium/winsys/virgl/vtest/virgl_vtest_winsys.c +++ b/src/gallium/winsys/virgl/vtest/virgl_vtest_winsys.c @@ -223,7 +223,7 @@ static void virgl_vtest_resource_reference(struct virgl_winsys *vws, *dres = sres; } -static int +static uint32_t virgl_vtest_winsys_resource_create_blob(struct virgl_winsys *vws, enum pipe_texture_target target, uint32_t format, @@ -277,7 +277,8 @@ virgl_vtest_winsys_resource_create(struct virgl_winsys *vws, { struct virgl_vtest_winsys *vtws = virgl_vtest_winsys(vws); struct virgl_hw_res *res; - static int handle = 1; + static uint32_t handle = 1; + uint32_t new_handle = handle; int fd = -1; struct virgl_resource_params params = { .size = size, .bind = bind, @@ -312,22 +313,22 @@ virgl_vtest_winsys_resource_create(struct virgl_winsys *vws, VIRGL_RESOURCE_FLAG_MAP_COHERENT))) { width = ALIGN(width, getpagesize()); size = ALIGN(size, getpagesize()); - handle = virgl_vtest_winsys_resource_create_blob(vws, target, format, bind, - width, height, depth, - array_size, last_level, nr_samples, - flags, size, &fd); - - if (handle) { - pipe_reference_init(&res->reference, 1); - p_atomic_set(&res->num_cs_references, 0); - } + new_handle = virgl_vtest_winsys_resource_create_blob(vws, target, format, bind, + width, height, depth, + array_size, last_level, nr_samples, + flags, size, &fd); } else { - - handle = virgl_vtest_send_resource_create(vtws, handle, target, pipe_to_virgl_format(format), bind, - width, height, depth, array_size, - last_level, nr_samples, size, &fd); + new_handle = virgl_vtest_send_resource_create(vtws, new_handle, target, pipe_to_virgl_format(format), bind, + width, height, depth, array_size, + last_level, nr_samples, size, &fd); } + if (new_handle == 0) { + FREE(res); + return NULL; + } + + handle = new_handle; res->bind = bind; res->format = format; res->height = height; @@ -337,7 +338,7 @@ virgl_vtest_winsys_resource_create(struct virgl_winsys *vws, if (vtws->protocol_version >= 2) { if (res->size == 0) { res->ptr = NULL; - res->res_handle = handle; + res->res_handle = new_handle; goto out; } @@ -360,7 +361,7 @@ virgl_vtest_winsys_resource_create(struct virgl_winsys *vws, close(fd); } - res->res_handle = handle; + res->res_handle = new_handle; if (map_front_private && res->ptr && res->dt) { void *dt_map = vtws->sws->displaytarget_map(vtws->sws, res->dt, PIPE_MAP_READ_WRITE); uint32_t shm_stride = util_format_get_stride(res->format, res->width); diff --git a/src/gallium/winsys/virgl/vtest/virgl_vtest_winsys.h b/src/gallium/winsys/virgl/vtest/virgl_vtest_winsys.h index 8b3c37dcf29..8ad4060ce39 100644 --- a/src/gallium/winsys/virgl/vtest/virgl_vtest_winsys.h +++ b/src/gallium/winsys/virgl/vtest/virgl_vtest_winsys.h @@ -105,19 +105,19 @@ int virgl_vtest_connect(struct virgl_vtest_winsys *vws); int virgl_vtest_send_get_caps(struct virgl_vtest_winsys *vws, struct virgl_drm_caps *caps); -int virgl_vtest_send_resource_create(struct virgl_vtest_winsys *vws, - uint32_t handle, - enum pipe_texture_target target, - uint32_t format, - uint32_t bind, - uint32_t width, - uint32_t height, - uint32_t depth, - uint32_t array_size, - uint32_t last_level, - uint32_t nr_samples, - uint32_t size, - int *out_fd); +uint32_t virgl_vtest_send_resource_create(struct virgl_vtest_winsys *vws, + uint32_t handle, + enum pipe_texture_target target, + uint32_t format, + uint32_t bind, + uint32_t width, + uint32_t height, + uint32_t depth, + uint32_t array_size, + uint32_t last_level, + uint32_t nr_samples, + uint32_t size, + int *out_fd); int virgl_vtest_send_resource_unref(struct virgl_vtest_winsys *vws, uint32_t handle); @@ -154,7 +154,7 @@ int virgl_vtest_recv_transfer_get_data(struct virgl_vtest_winsys *vws, int virgl_vtest_busy_wait(struct virgl_vtest_winsys *vws, int handle, int flags); -int +uint32_t virgl_vtest_send_create_blob(struct virgl_vtest_winsys *vws, uint32_t size, uint32_t blob_id, int *fd); #endif