correct merge errors

This commit is contained in:
jsg 2020-09-03 08:36:23 +00:00
parent 1c86a17858
commit 390b12b7bd
3 changed files with 19 additions and 8 deletions

View File

@ -194,7 +194,7 @@ bool
os_get_available_system_memory(uint64_t *size) os_get_available_system_memory(uint64_t *size)
{ {
#if DETECT_OS_LINUX #if DETECT_OS_LINUX
char *meminfo = os_read_file("/proc/meminfo"); char *meminfo = os_read_file("/proc/meminfo", NULL);
if (!meminfo) if (!meminfo)
return false; return false;

View File

@ -35,7 +35,7 @@
#ifdef HAVE_PTHREAD #ifdef HAVE_PTHREAD
#include <signal.h> #include <signal.h>
#if defined(PTHREAD_SETAFFINITY_IN_NP_HEADER) || defined(__OpenBSD__) #ifdef HAVE_PTHREAD_NP_H
#include <pthread_np.h> #include <pthread_np.h>
#endif #endif
#endif #endif

View File

@ -772,6 +772,7 @@ struct x11_swapchain {
uint64_t send_sbc; uint64_t send_sbc;
uint64_t last_present_msc; uint64_t last_present_msc;
uint32_t stamp; uint32_t stamp;
int sent_image_count;
bool has_present_queue; bool has_present_queue;
bool has_acquire_queue; bool has_acquire_queue;
@ -854,6 +855,8 @@ x11_handle_dri3_present_event(struct x11_swapchain *chain,
for (unsigned i = 0; i < chain->base.image_count; i++) { for (unsigned i = 0; i < chain->base.image_count; i++) {
if (chain->images[i].pixmap == idle->pixmap) { if (chain->images[i].pixmap == idle->pixmap) {
chain->images[i].busy = false; chain->images[i].busy = false;
chain->sent_image_count--;
assert(chain->sent_image_count >= 0);
if (chain->has_acquire_queue) if (chain->has_acquire_queue)
wsi_queue_push(&chain->acquire_queue, i); wsi_queue_push(&chain->acquire_queue, i);
break; break;
@ -1034,7 +1037,11 @@ x11_present_to_x11(struct x11_swapchain *chain, uint32_t image_index,
xshmfence_reset(image->shm_fence); xshmfence_reset(image->shm_fence);
++chain->sent_image_count;
assert(chain->sent_image_count <= chain->base.image_count);
++chain->send_sbc; ++chain->send_sbc;
xcb_void_cookie_t cookie = xcb_void_cookie_t cookie =
xcb_present_pixmap(chain->conn, xcb_present_pixmap(chain->conn,
chain->window, chain->window,
@ -1105,11 +1112,9 @@ x11_manage_fifo_queues(void *state)
assert(chain->has_present_queue); assert(chain->has_present_queue);
while (chain->status >= 0) { while (chain->status >= 0) {
/* It should be safe to unconditionally block here. Later in the loop /* We can block here unconditionally because after an image was sent to
* we blocks until the previous present has landed on-screen. At that * the server (later on in this loop) we ensure at least one image is
* point, we should have received IDLE_NOTIFY on all images presented * acquirable by the consumer or wait there on such an event.
* before that point so the client should be able to acquire any image
* other than the currently presented one.
*/ */
uint32_t image_index = 0; uint32_t image_index = 0;
result = wsi_queue_pull(&chain->present_queue, &image_index, INT64_MAX); result = wsi_queue_pull(&chain->present_queue, &image_index, INT64_MAX);
@ -1142,7 +1147,12 @@ x11_manage_fifo_queues(void *state)
goto fail; goto fail;
if (chain->has_acquire_queue) { if (chain->has_acquire_queue) {
while (chain->last_present_msc < target_msc) { /* Wait for our presentation to occur and ensure we have at least one
* image that can be acquired by the client afterwards. This ensures we
* can pull on the present-queue on the next loop.
*/
while (chain->last_present_msc < target_msc ||
chain->sent_image_count == chain->base.image_count) {
xcb_generic_event_t *event = xcb_generic_event_t *event =
xcb_wait_for_special_event(chain->conn, chain->special_event); xcb_wait_for_special_event(chain->conn, chain->special_event);
if (!event) { if (!event) {
@ -1485,6 +1495,7 @@ x11_surface_create_swapchain(VkIcdSurfaceBase *icd_surface,
chain->depth = bit_depth; chain->depth = bit_depth;
chain->extent = pCreateInfo->imageExtent; chain->extent = pCreateInfo->imageExtent;
chain->send_sbc = 0; chain->send_sbc = 0;
chain->sent_image_count = 0;
chain->last_present_msc = 0; chain->last_present_msc = 0;
chain->has_acquire_queue = false; chain->has_acquire_queue = false;
chain->has_present_queue = false; chain->has_present_queue = false;