<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span></span><span>I was able to get this to work in my application but couldn't come up with a<br>
</span>
<div>clean way to provide the functionality in the existing xcb functions.<br>
</div>
<div><br>
</div>
<div>It's not just the xcb_image_put request that needs to be split up. Separate<br>
</div>
<div>images have to be created via multiple calls to xcb_image_create and a call to<br>
</div>
<div>xcb_image_put has to be made for each image.<br>
</div>
<div><br>
</div>
<div>I suppose that xcb_image_put could detect if the image is too large and split<br>
</div>
<div>the image up internally but then you have the problem Bart mentioned where<br>
</div>
<div>there are multiple cookies to track each request and it's unclear what to</div>
<div>return.<br>
</div>
<span></span>
<div></div>
<div><br>
</div>
<div>- Paul</div>
<span></span></div>
<div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>From:</b> Bart Massey <bart@cs.pdx.edu><br>
<b>Sent:</b> Wednesday, January 30, 2019 11:35 AM<br>
<b>To:</b> Uli Schlachter<br>
<b>Cc:</b> paul ewing; xcb@lists.freedesktop.org<br>
<b>Subject:</b> Re: [Xcb] How can I increase the maximum request length?</font>
<div> </div>
</div>
<div>
<div dir="ltr">Uli: Thanks for looking at this more closely and confirming my earlier analysis!
<div><br>
</div>
<div>> <span style="color:rgb(33,33,33)">Worse, it cannot (easily) support splitting up huge requests. It returns</span></div>
<span style="color:rgb(33,33,33)">the void cookie that is used by the request. If it generates multiple</span><br style="color:rgb(33,33,33)">
<span style="color:rgb(33,33,33)">requests, which of the cookies should be returned?</span><br style="color:rgb(33,33,33)">
<div><span style="color:rgb(33,33,33)"><br>
</span></div>
<div><span style="color:rgb(33,33,33)">Could maybe just force all but the last cookie and return that. Return the error cookie if one of the earlier requests fails. Loses the async, but is call-compatible.</span></div>
<div><span style="color:rgb(33,33,33)"><br>
</span></div>
<div><span style="color:rgb(33,33,33)">Probably better to add another entry point that returns all the cookies as needed.</span></div>
</div>
<br>
<div class="x_gmail_quote">
<div dir="ltr" class="x_gmail_attr">On Wed, Jan 30, 2019 at 4:31 AM Uli Schlachter <<a href="mailto:psychon@znc.in">psychon@znc.in</a>> wrote:<br>
</div>
<blockquote class="x_gmail_quote" style="margin:0 0 0 .8ex; border-left:1px #ccc solid; padding-left:1ex">
Hi,<br>
<br>
On 19.01.19 03:51, paul ewing wrote:<br>
> Ah, I think the previous email I linked to may have simply been wrong. It<br>
> states that BIG-REQUESTS increases the max request size to 16GB from 256KB but<br>
> I think the maximum is actually only 16MB.<br>
<br>
The maximum request length is determined by the X11 server. Without<br>
BIG-REQUESTS, the X11 server can announce support for at most 256 KiB,<br>
but it can also support less. BIG-REQUESTS only changes this so that the<br>
X11 server *can* support bigger requests. However, the limit is still<br>
imposed by the X11 server and any overly large requests cause the<br>
connection to be terminated. So no, you cannot increase the limit.<br>
<br>
Also, XCB automatically uses the BIG-REQUESTS extension to query the<br>
maximum supported request size. So, you can just use<br>
xcb_get_maximum_request_length() to query the limit that the X11 server<br>
announces. Splitting huge requests into smaller chunks is something that<br>
libxcb does not do for you.<br>
<br>
> I'll split up the image in the application code for now and see if I can come<br>
> up with a clean implementation before submitting a pull request to xcb.<br>
<br>
Possibly helpful pointer:<br>
<a href="https://gitlab.freedesktop.org/cairo/cairo/commit/51435eeb0c4d9e53d76dae8b5af279ad518a05f8" rel="noreferrer" target="_blank">https://gitlab.freedesktop.org/cairo/cairo/commit/51435eeb0c4d9e53d76dae8b5af279ad518a05f8</a><br>
<br>
> ________________________________<br>
> From: Bart Massey <<a href="mailto:bart@cs.pdx.edu" target="_blank">bart@cs.pdx.edu</a>><br>
> Sent: Friday, January 18, 2019 5:39 PM<br>
> To: paul ewing<br>
> Cc: <a href="mailto:xcb@lists.freedesktop.org" target="_blank">xcb@lists.freedesktop.org</a><br>
> Subject: Re: [Xcb] How can I increase the maximum request length?<br>
> <br>
> Offhand, looks like your bigger display is too big to use a single PutImage request even with BIG-REQUESTS enabled. Looks like xcb_image_put() doesn't break the request into pieces for you (maybe it should? pull requests welcome) so you'll have to put the
 image a piece at a time: break it into bands and use the y offset.<br>
<br>
>From a quick look: xcb_image_put() does not break requests into smaller<br>
chunks. It just calls xcb_put_image() with some values it got out of the<br>
xcb_image_t*.<br>
<br>
Worse, it cannot (easily) support splitting up huge requests. It returns<br>
the void cookie that is used by the request. If it generates multiple<br>
requests, which of the cookies should be returned?<br>
<br>
<a href="https://sources.debian.org/src/xcb-util-image/0.4.0-1/image/xcb_image.c/?hl=448#L448" rel="noreferrer" target="_blank">https://sources.debian.org/src/xcb-util-image/0.4.0-1/image/xcb_image.c/?hl=448#L448</a><br>
<br>
Cheers,<br>
Uli<br>
-- <br>
Homophobia - The fear that another man will treat you the way you treat<br>
women.<br>
_______________________________________________<br>
Xcb mailing list<br>
<a href="mailto:Xcb@lists.freedesktop.org" target="_blank">Xcb@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/xcb" rel="noreferrer" target="_blank">https://lists.freedesktop.org/mailman/listinfo/xcb</a></blockquote>
</div>
</div>
</div>
</body>
</html>