I wrote a small test program that modifies a region using BitBlt, then checks the color of that region. I found that even immediately after BitBlt, it takes over 80 milliseconds before the correct color can be reliably detected.
Then, I added an XSync(gdi_display, False) after the XFlush in x11drv_surface_flush, and the delay dropped to around 50–60 milliseconds.
Is this expected?
I was hoping that after BitBlt, the updated color could be detected immediately, without needing to add a delay or jitter.
But it seems that XFlush only pushes the commands to the X server, and is not like vkQueuePresentKHR with semaphores or fences, which signal that the data has been pushed to the display (even though that still doesn’t guarantee vertical scanout completion).