[Spice-devel] [PATCH] [xf86-video-qxl] In XSpice mode, enable the ability to specify the various ram buffer sizes.
Alon Levy
alon at pobox.com
Fri Aug 22 05:52:11 PDT 2014
With agent running we do.
On August 22, 2014 7:55:19 AM EDT, "Marc-André Lureau" <mlureau at redhat.com> wrote:
>Hi Jeremy
>
>I wish we could have dynamic allocation for Xspice, avoiding those
>parameters, but this could be improved later.
>
>Few remarks below:
>
>----- Original Message -----
>> Also adjust the mode selection to fit, and add a few larger modes.
>>
>> Signed-off-by: Jeremy White <jwhite at codeweavers.com>
>> ---
>> examples/spiceqxl.xorg.conf.example | 13 +++++++++++++
>> src/qxl.h | 3 +++
>> src/qxl_driver.c | 19 +++++++++++++++----
>> src/spiceqxl_driver.c | 33
>+++++++++++++++------------------
>> src/spiceqxl_driver.h | 7 +++----
>> 5 files changed, 49 insertions(+), 26 deletions(-)
>>
>> diff --git a/examples/spiceqxl.xorg.conf.example
>> b/examples/spiceqxl.xorg.conf.example
>> index be8a16b..8fd5d2f 100644
>> --- a/examples/spiceqxl.xorg.conf.example
>> +++ b/examples/spiceqxl.xorg.conf.example
>> @@ -96,6 +96,19 @@ Section "Device"
>> # defaults to 4
>> #Option "NumHeads" "4"
>>
>> + # The amount of frame buffer ram, in megabytes, to allocate
>> + # defaults to 16
>> + #Option "FrameBufferSize" "16"
>> +
>> + # The amount of surface buffer ram, in megabytes, to allocate
>> + # Must be larger than FrameBufferSize
>
>Is there a runtime check for that?
>
>> + # defaults to 128
>> + #Option "SurfaceBufferSize" "128"
>> +
>> + # The amount of command buffer ram, in megabytes, to allocate
>> + # defaults to 128
>> + #Option "CommandBufferSize" "128"
>> +
>> # Set Spice Agent Mouse
>> # defaults to false
>> #Option "SpiceAgentMouse" "False"
>> diff --git a/src/qxl.h b/src/qxl.h
>> index 19555ba..fa9b13f 100644
>> --- a/src/qxl.h
>> +++ b/src/qxl.h
>> @@ -154,6 +154,9 @@ enum {
>> OPTION_SPICE_VDAGENT_UINPUT_PATH,
>> OPTION_SPICE_VDAGENT_UID,
>> OPTION_SPICE_VDAGENT_GID,
>> + OPTION_FRAME_BUFFER_SIZE,
>> + OPTION_SURFACE_BUFFER_SIZE,
>> + OPTION_COMMAND_BUFFER_SIZE,
>> #endif
>> OPTION_COUNT,
>> };
>> diff --git a/src/qxl_driver.c b/src/qxl_driver.c
>> index d9bf447..87cdca4 100644
>> --- a/src/qxl_driver.c
>> +++ b/src/qxl_driver.c
>> @@ -146,6 +146,12 @@ const OptionInfoRec DefaultOptions[] =
>> "SpiceVdagentUid", OPTV_INTEGER, {0}, FALSE},
>> { OPTION_SPICE_VDAGENT_GID,
>> "SpiceVdagentGid", OPTV_INTEGER, {0}, FALSE},
>> + { OPTION_FRAME_BUFFER_SIZE,
>> + "FrameBufferSize", OPTV_INTEGER,
>> {DEFAULT_FRAME_BUFFER_SIZE}, FALSE},
>> + { OPTION_SURFACE_BUFFER_SIZE,
>> + "SurfaceBufferSize", OPTV_INTEGER,
>> {DEFAULT_SURFACE_BUFFER_SIZE}, FALSE},
>> + { OPTION_COMMAND_BUFFER_SIZE,
>> + "CommandBufferSize", OPTV_INTEGER,
>> {DEFAULT_COMMAND_BUFFER_SIZE}, FALSE},
>> #endif
>>
>> { -1, NULL, OPTV_NONE, {0}, FALSE }
>> @@ -190,11 +196,9 @@ unmap_memory_helper (qxl_screen_t *qxl)
>> static void
>> map_memory_helper (qxl_screen_t *qxl)
>> {
>> - qxl->ram = calloc (RAM_SIZE, 1);
>> - qxl->ram_size = RAM_SIZE;
>> + qxl->ram = calloc (qxl->ram_size, 1);
>> qxl->ram_physical = qxl->ram;
>> - qxl->vram = calloc (VRAM_SIZE, 1);
>> - qxl->vram_size = VRAM_SIZE;
>> + qxl->vram = calloc (qxl->vram_size, 1);
>> qxl->vram_physical = qxl->vram;
>> qxl->rom = calloc (ROM_SIZE, 1);
>>
>> @@ -1081,6 +1085,13 @@ qxl_pre_init (ScrnInfoPtr pScrn, int flags)
>> strncpy(qxl->playback_fifo_dir, playback_fifo_dir,
>> sizeof(qxl->playback_fifo_dir));
>> else
>> qxl->playback_fifo_dir[0] = '\0';
>> +
>> + qxl->surface0_size =
>> + get_int_option (qxl->options, OPTION_FRAME_BUFFER_SIZE,
>> "QXL_FRAME_BUFFER_SIZE") << 20L;
>> + qxl->vram_size =
>> + get_int_option (qxl->options, OPTION_SURFACE_BUFFER_SIZE,
>> "QXL_SURFACE_BUFFER_SIZE") << 20L;
>> + qxl->ram_size =
>> + get_int_option (qxl->options, OPTION_COMMAND_BUFFER_SIZE,
>> "QXL_COMMAND_BUFFER_SIZE") << 20L;
>> #endif
>>
>> if (!qxl_map_memory (qxl, scrnIndex))
>> diff --git a/src/spiceqxl_driver.c b/src/spiceqxl_driver.c
>> index 990467f..1561562 100644
>> --- a/src/spiceqxl_driver.c
>> +++ b/src/spiceqxl_driver.c
>> @@ -83,20 +83,18 @@ static QXLMode qxl_modes[] = {
>> QXL_MODE_EX(1600, 1200),
>> QXL_MODE_EX(1680, 1050),
>> QXL_MODE_EX(1920, 1080),
>> -#if VGA_RAM_SIZE >= (16 * 1024 * 1024)
>> - /* these modes need more than 8 MB video memory */
>> QXL_MODE_EX(1920, 1200),
>> QXL_MODE_EX(1920, 1440),
>> QXL_MODE_EX(2048, 1536),
>> QXL_MODE_EX(2560, 1440),
>> QXL_MODE_EX(2560, 1600),
>> -#endif
>> -#if VGA_RAM_SIZE >= (32 * 1024 * 1024)
>> - /* these modes need more than 16 MB video memory */
>> + QXL_MODE_EX(3840, 1080),
>> QXL_MODE_EX(2560, 2048),
>> QXL_MODE_EX(2800, 2100),
>> QXL_MODE_EX(3200, 2400),
>> -#endif
>> + QXL_MODE_EX(5760, 1080),
>> + QXL_MODE_EX(7680, 1080),
>> +
>> };
>>
>>
>> @@ -106,9 +104,8 @@ void init_qxl_rom(qxl_screen_t* qxl, uint32_t
>rom_size)
>> QXLRom *rom = qxl->rom;
>> struct QXLModes *modes = (struct QXLModes *)(rom + 1);
>> uint32_t ram_header_size;
>> - uint32_t surface0_area_size;
>> uint32_t num_pages;
>> - uint32_t fb, maxfb = 0;
>> + uint32_t fb;
>> int i;
>>
>> memset(rom, 0, rom_size);
>> @@ -127,9 +124,12 @@ void init_qxl_rom(qxl_screen_t* qxl, uint32_t
>rom_size)
>> modes->n_modes = (SPICE_ARRAY_SIZE(qxl_modes));
>> for (i = 0; i < modes->n_modes; i++) {
>> fb = qxl_modes[i].y_res * qxl_modes[i].stride;
>> - if (maxfb < fb) {
>> - maxfb = fb;
>> + if (fb > qxl->surface0_size)
>> + {
>> + modes->n_modes--; i--;
>> + continue;
>
>Isn't this going to check the same qxl_modes[i] until i ==
>modes->n_modes?
>
>> }
>> +
>> modes->modes[i].id = (i);
>> modes->modes[i].x_res = (qxl_modes[i].x_res);
>> modes->modes[i].y_res = (qxl_modes[i].y_res);
>> @@ -139,21 +139,18 @@ void init_qxl_rom(qxl_screen_t* qxl, uint32_t
>rom_size)
>> modes->modes[i].y_mili = (qxl_modes[i].y_mili);
>> modes->modes[i].orientation = (qxl_modes[i].orientation);
>> }
>> - if (maxfb < VGA_RAM_SIZE) // TODO - id != 0? (in original code
>from
>> qxl.c)
>> - maxfb = VGA_RAM_SIZE;
>>
>> ram_header_size = ALIGN(sizeof(struct QXLRam), 4096);
>> - surface0_area_size = ALIGN(maxfb, 4096);
>> - num_pages = VRAM_SIZE;
>> + num_pages = qxl->vram_size;
>> num_pages -= ram_header_size;
>> - num_pages -= surface0_area_size;
>> + num_pages -= qxl->surface0_size;
>> num_pages = num_pages / TARGET_PAGE_SIZE;
>>
>> rom->draw_area_offset = (0);
>> - rom->surface0_area_size = (surface0_area_size);
>> - rom->pages_offset = (surface0_area_size);
>> + rom->surface0_area_size = (qxl->surface0_size);
>> + rom->pages_offset = (rom->surface0_area_size);
>> rom->num_pages = (num_pages);
>> - rom->ram_header_offset = (VRAM_SIZE - ram_header_size);
>> + rom->ram_header_offset = (qxl->vram_size - ram_header_size);
>>
>> qxl->shadow_rom = *qxl->rom; // TODO - do we need this?
>> }
>> diff --git a/src/spiceqxl_driver.h b/src/spiceqxl_driver.h
>> index c1a7c48..35d0f42 100644
>> --- a/src/spiceqxl_driver.h
>> +++ b/src/spiceqxl_driver.h
>> @@ -23,10 +23,9 @@
>> #ifndef SPICEQXL_DRIVER_H
>> #define SPICEQXL_DRIVER_H 1
>>
>> -#define VGA_RAM_SIZE (16 * 1024 * 1024)
>> -
>> -#define RAM_SIZE (128L<<20) // must be >VGA_RAM_SIZE
>> -#define VRAM_SIZE (128L<<20)
>> +#define DEFAULT_FRAME_BUFFER_SIZE 16
>> +#define DEFAULT_SURFACE_BUFFER_SIZE 128
>> +#define DEFAULT_COMMAND_BUFFER_SIZE 128
>> #define ROM_SIZE (1<<20) // TODO - put correct size
>>
>> void init_qxl_rom(qxl_screen_t* qxl, uint32_t rom_size);
>> --
>> 1.7.10.4
>>
>> _______________________________________________
>> Spice-devel mailing list
>> Spice-devel at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/spice-devel
>>
>_______________________________________________
>Spice-devel mailing list
>Spice-devel at lists.freedesktop.org
>http://lists.freedesktop.org/mailman/listinfo/spice-devel
--
Sent from my Android device with K-9 Mail. Please excuse my brevity.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/spice-devel/attachments/20140822/9039b7fb/attachment.html>
More information about the Spice-devel
mailing list