aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--demos/cube.c20
-rw-r--r--demos/tri.c17
2 files changed, 34 insertions, 3 deletions
diff --git a/demos/cube.c b/demos/cube.c
index 8c50858c..e3f3c45d 100644
--- a/demos/cube.c
+++ b/demos/cube.c
@@ -205,6 +205,7 @@ struct demo {
XGL_GPU_MEMORY mem;
XGL_COLOR_ATTACHMENT_VIEW view;
+ XGL_FENCE fence;
} buffers[DEMO_BUFFER_COUNT];
struct {
@@ -348,17 +349,22 @@ static void demo_draw(struct demo *demo)
const XGL_WSI_X11_PRESENT_INFO present = {
.destWindow = demo->window,
.srcImage = demo->buffers[demo->current_buffer].image,
- .async = false
+ .async = true,
+ .flip = false,
};
+ XGL_FENCE fence = demo->buffers[demo->current_buffer].fence;
XGL_RESULT err;
demo_draw_build_cmd(demo);
+ err = xglWaitForFences(demo->device, 1, &fence, XGL_TRUE, ~((XGL_UINT64) 0));
+ assert(err == XGL_SUCCESS || err == XGL_ERROR_UNAVAILABLE);
+
err = xglQueueSubmit(demo->queue, 1, &demo->cmd,
0, NULL, XGL_NULL_HANDLE);
assert(!err);
- err = xglWsiX11QueuePresent(demo->queue, &present, XGL_NULL_HANDLE);
+ err = xglWsiX11QueuePresent(demo->queue, &present, fence);
assert(!err);
demo->current_buffer = (demo->current_buffer + 1) % DEMO_BUFFER_COUNT;
@@ -375,6 +381,11 @@ static void demo_prepare_buffers(struct demo *demo)
},
.flags = 0,
};
+ const XGL_FENCE_CREATE_INFO fence = {
+ .sType = XGL_STRUCTURE_TYPE_FENCE_CREATE_INFO,
+ .pNext = NULL,
+ .flags = 0,
+ };
XGL_RESULT err;
XGL_UINT i;
@@ -397,6 +408,10 @@ static void demo_prepare_buffers(struct demo *demo)
err = xglCreateColorAttachmentView(demo->device,
&color_attachment_view, &demo->buffers[i].view);
assert(!err);
+
+ err = xglCreateFence(demo->device,
+ &fence, &demo->buffers[i].fence);
+ assert(!err);
}
}
@@ -1324,6 +1339,7 @@ static void demo_cleanup(struct demo *demo)
xglFreeMemory(demo->depth.mem);
for (i = 0; i < DEMO_BUFFER_COUNT; i++) {
+ xglDestroyObject(demo->buffers[i].fence);
xglDestroyObject(demo->buffers[i].view);
xglDestroyObject(demo->buffers[i].image);
}
diff --git a/demos/tri.c b/demos/tri.c
index 9aae4292..3d9be2d9 100644
--- a/demos/tri.c
+++ b/demos/tri.c
@@ -36,6 +36,7 @@ struct demo {
XGL_GPU_MEMORY mem;
XGL_COLOR_ATTACHMENT_VIEW view;
+ XGL_FENCE fence;
} buffers[DEMO_BUFFER_COUNT];
struct {
@@ -142,15 +143,19 @@ static void demo_draw(struct demo *demo)
.destWindow = demo->window,
.srcImage = demo->buffers[demo->current_buffer].image,
};
+ XGL_FENCE fence = demo->buffers[demo->current_buffer].fence;
XGL_RESULT err;
demo_draw_build_cmd(demo);
+ err = xglWaitForFences(demo->device, 1, &fence, XGL_TRUE, ~((XGL_UINT64) 0));
+ assert(err == XGL_SUCCESS || err == XGL_ERROR_UNAVAILABLE);
+
err = xglQueueSubmit(demo->queue, 1, &demo->cmd,
0, NULL, XGL_NULL_HANDLE);
assert(!err);
- err = xglWsiX11QueuePresent(demo->queue, &present, XGL_NULL_HANDLE);
+ err = xglWsiX11QueuePresent(demo->queue, &present, fence);
assert(!err);
demo->current_buffer = (demo->current_buffer + 1) % DEMO_BUFFER_COUNT;
@@ -167,6 +172,11 @@ static void demo_prepare_buffers(struct demo *demo)
},
.flags = 0,
};
+ const XGL_FENCE_CREATE_INFO fence = {
+ .sType = XGL_STRUCTURE_TYPE_FENCE_CREATE_INFO,
+ .pNext = NULL,
+ .flags = 0,
+ };
XGL_RESULT err;
XGL_UINT i;
@@ -189,6 +199,10 @@ static void demo_prepare_buffers(struct demo *demo)
err = xglCreateColorAttachmentView(demo->device,
&color_attachment_view, &demo->buffers[i].view);
assert(!err);
+
+ err = xglCreateFence(demo->device,
+ &fence, &demo->buffers[i].fence);
+ assert(!err);
}
}
@@ -894,6 +908,7 @@ static void demo_cleanup(struct demo *demo)
xglFreeMemory(demo->depth.mem);
for (i = 0; i < DEMO_BUFFER_COUNT; i++) {
+ xglDestroyObject(demo->buffers[i].fence);
xglDestroyObject(demo->buffers[i].view);
xglDestroyObject(demo->buffers[i].image);
}