--- src/qxl_surface.c | 44 +++++++++++++++----------------------------- 1 file changed, 15 insertions(+), 29 deletions(-)
diff --git a/src/qxl_surface.c b/src/qxl_surface.c index 1747dca..137c1c7 100644 --- a/src/qxl_surface.c +++ b/src/qxl_surface.c @@ -356,34 +356,21 @@ qxl_surface_cache_create_primary (surface_cache_t *cache, return surface; } -static struct QXLSurfaceCmd * -make_surface_cmd (surface_cache_t *cache, uint32_t id, QXLSurfaceCmdType type) +static void +init_surface_cmd (struct QXLSurfaceCmd *cmd, surface_cache_t *cache, + uint32_t id, QXLSurfaceCmdType type) { - struct QXLSurfaceCmd *cmd; - qxl_screen_t *qxl = cache->qxl; - - qxl_garbage_collect (qxl); - - cmd = qxl_allocnf (qxl, sizeof *cmd); - - cmd->release_info.id = pointer_to_u64 (cmd) | 2; cmd->type = type; cmd->flags = 0; cmd->surface_id = id; - - return cmd; } static void push_surface_cmd (surface_cache_t *cache, struct QXLSurfaceCmd *cmd) { - struct QXLCommand command; qxl_screen_t *qxl = cache->qxl; - command.type = QXL_CMD_SURFACE; - command.data = physical_address (qxl, cmd, qxl->main_mem_slot); - - qxl_ring_push (qxl->command_ring, &command); + qxlhw_push_surface_cmd (qxl->hw, cmd); } enum ROPDescriptor @@ -529,7 +516,7 @@ surface_send_create (surface_cache_t *cache, { SpiceBitmapFmt format; pixman_format_code_t pformat; - struct QXLSurfaceCmd *cmd; + struct QXLSurfaceCmd cmd; int stride; uint32_t *dev_addr; int n_attempts = 0; @@ -592,17 +579,16 @@ retry: surface->address = address; surface->end = (char *)address + stride * height; - cmd = make_surface_cmd (cache, surface->id, QXL_SURFACE_CMD_CREATE); + init_surface_cmd (&cmd, cache, surface->id, QXL_SURFACE_CMD_CREATE); - cmd->u.surface_create.format = format; - cmd->u.surface_create.width = width; - cmd->u.surface_create.height = height; - cmd->u.surface_create.stride = - stride; + cmd.u.surface_create.format = format; + cmd.u.surface_create.width = width; + cmd.u.surface_create.height = height; + cmd.u.surface_create.stride = -stride; - cmd->u.surface_create.data = - physical_address (qxl, surface->address, qxl->vram_mem_slot); + cmd.u.surface_create.data = (QXLPHYSICAL)surface->address; - push_surface_cmd (cache, cmd); + push_surface_cmd (cache, &cmd); dev_addr = (uint32_t *)((uint8_t *)surface->address + stride * (height - 1)); @@ -701,16 +687,16 @@ unlink_surface (qxl_surface_t *surface) static void send_destroy (qxl_surface_t *surface) { - struct QXLSurfaceCmd *cmd; + struct QXLSurfaceCmd cmd; if (surface->dev_image) pixman_image_unref (surface->dev_image); if (surface->host_image) pixman_image_unref (surface->host_image); - cmd = make_surface_cmd (surface->cache, surface->id, QXL_SURFACE_CMD_DESTROY); + init_surface_cmd (&cmd, surface->cache, surface->id, QXL_SURFACE_CMD_DESTROY); - push_surface_cmd (surface->cache, cmd); + push_surface_cmd (surface->cache, &cmd); } static void -- 1.7.9.3 _______________________________________________ Spice-devel mailing list Spice-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/spice-devel