looks good to me, ack
On Fri, Aug 22, 2014 at 5:08 PM, Jeremy White <jwh...@codeweavers.com> wrote: > Also adjust the mode selection to fit, and add a few larger modes. > > Signed-off-by: Jeremy White <jwh...@codeweavers.com> > --- > examples/spiceqxl.xorg.conf.example | 30 ++++++++++++++++++ > src/qxl.h | 3 ++ > src/qxl_driver.c | 19 ++++++++--- > src/spiceqxl_driver.c | 60 > ++++++++++++++++------------------- > src/spiceqxl_driver.h | 7 ++-- > 5 files changed, 79 insertions(+), 40 deletions(-) > > diff --git a/examples/spiceqxl.xorg.conf.example > b/examples/spiceqxl.xorg.conf.example > index be8a16b..597a5bd 100644 > --- a/examples/spiceqxl.xorg.conf.example > +++ b/examples/spiceqxl.xorg.conf.example > @@ -96,6 +96,36 @@ Section "Device" > # defaults to 4 > #Option "NumHeads" "4" > > + #-------------------------------------------------------------- > + # Buffer Size notes: > + # The following buffer sizes are used for Xspice only > + # If you are using the DFPS mode, surface ram is not used, > + # and you can set it to 1. > + # Otherwise, the surface buffer should be at least as large > + # as the frame buffer, and probably a multiple like 8. > + # The command buffer ram should also be substantially larger > + # than the frame buffer, and note that the frame buffer occupies > + # the front of the command buffer. Hence, our default size > + # is a command buffer 7x the size of the frame buffer. > + # If you see 'Out of memory' errors in your xorg.log, you probably > need > + # to increase the surface or command buffer sizes. > + #-------------------------------------------------------------- > + > + # The amount of surface buffer ram, in megabytes, to allocate > + # defaults to 128 > + #Option "SurfaceBufferSize" "128" > + > + # The amount of command buffer ram, in megabytes, to allocate > + # defaults to 128 > + #Option "CommandBufferSize" "128" > + > + # The amount of frame buffer ram, in megabytes, to reserve > + # This is reserved out of the CommandBuffer RAM > + # This governs the maximum size the X screen can be; > + # 4 Heads at 1920x1080 require 32M of RAM > + # defaults to 16 > + #Option "FrameBufferSize" "16" > + > # 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 7436a62..072953c 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..68a2a70 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,10 +104,9 @@ 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; > - int i; > + uint32_t fb; > + int i, m; > > memset(rom, 0, rom_size); > > @@ -124,36 +121,35 @@ void init_qxl_rom(qxl_screen_t* qxl, uint32_t > rom_size) > rom->slots_end = 1; > rom->n_surfaces = (NUM_SURFACES); > > - modes->n_modes = (SPICE_ARRAY_SIZE(qxl_modes)); > - for (i = 0; i < modes->n_modes; i++) { > + for (i = 0, m = 0; i < (SPICE_ARRAY_SIZE(qxl_modes)); i++) { > fb = qxl_modes[i].y_res * qxl_modes[i].stride; > - if (maxfb < fb) { > - maxfb = fb; > - } > - 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); > - modes->modes[i].bits = (qxl_modes[i].bits); > - modes->modes[i].stride = (qxl_modes[i].stride); > - modes->modes[i].x_mili = (qxl_modes[i].x_mili); > - modes->modes[i].y_mili = (qxl_modes[i].y_mili); > - modes->modes[i].orientation = (qxl_modes[i].orientation); > + if (fb > qxl->surface0_size) > + continue; > + > + modes->modes[m].id = m; > + modes->modes[m].x_res = qxl_modes[i].x_res; > + modes->modes[m].y_res = qxl_modes[i].y_res; > + modes->modes[m].bits = qxl_modes[i].bits; > + modes->modes[m].stride = qxl_modes[i].stride; > + modes->modes[m].x_mili = qxl_modes[i].x_mili; > + modes->modes[m].y_mili = qxl_modes[i].y_mili; > + modes->modes[m].orientation = qxl_modes[i].orientation; > + > + m++; > } > - if (maxfb < VGA_RAM_SIZE) // TODO - id != 0? (in original code from > qxl.c) > - maxfb = VGA_RAM_SIZE; > + modes->n_modes = m; > > 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->num_pages = (num_pages); > - rom->ram_header_offset = (VRAM_SIZE - ram_header_size); > + rom->draw_area_offset = 0; > + rom->surface0_area_size = qxl->surface0_size; > + rom->pages_offset = rom->surface0_area_size; > + rom->num_pages = num_pages; > + 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@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/spice-devel > -- Marc-André Lureau
_______________________________________________ Spice-devel mailing list Spice-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/spice-devel