X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Fvk.c;fp=src%2Fvk.c;h=f5557b3c53f50334a9b5f635ad51e2bcefde672b;hb=51c70e21b25d107c4d86c6ae0c16eac7e0fff22a;hp=ebc31ae0bda63298cf542ca49aa3327843f348ab;hpb=6d36eee057f3d8504e337e6000c664683c2989ab;p=vktest3 diff --git a/src/vk.c b/src/vk.c index ebc31ae..f5557b3 100644 --- a/src/vk.c +++ b/src/vk.c @@ -253,6 +253,45 @@ int vk_next_image(VkSemaphore sem) return (int)idx; } +int vk_submit(VkQueue q, VkCommandBuffer cmdbuf, VkSemaphore semwait, VkSemaphore semsig) +{ + /* TODO: investigate if we need to expose the wait stage */ + VkPipelineStageFlags wait_stage = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; + VkSubmitInfo sinf = {0}; + sinf.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; + sinf.waitSemaphoreCount = semwait ? 1 : 0; + sinf.pWaitSemaphores = &semwait; + sinf.pWaitDstStageMask = &wait_stage; + sinf.commandBufferCount = 1; + sinf.pCommandBuffers = &cmdbuf; + sinf.signalSemaphoreCount = semsig ? 1 : 0; + sinf.pSignalSemaphores = &semsig; + + if(vkQueueSubmit(q, 1, &sinf, 0) != 0) { + fprintf(stderr, "failed to submit command buffer\n"); + return -1; + } + return 0; +} + +int vk_present(VkQueue q, int imgid, VkSemaphore semwait) +{ + VkPresentInfoKHR pinf = {0}; + + pinf.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR; + pinf.waitSemaphoreCount = semwait ? 1 : 0; + pinf.pWaitSemaphores = &semwait; + pinf.swapchainCount = 1; + pinf.pSwapchains = &vksc; + pinf.pImageIndices = (unsigned int*)&imgid; + + if(vkQueuePresentKHR(q, &pinf) != 0) { + fprintf(stderr, "present failed\n"); + return -1; + } + return 0; +} + int vk_find_qfamily(unsigned int flags) { int i, famidx = -1; @@ -359,6 +398,16 @@ VkCommandBuffer vk_create_cmdbuf(unsigned int qflags, int level) return vk_create_cmdbuf_fam(qfam, level); } +VkCommandBuffer vk_get_cmdbuf(int imgid) +{ + if(imgid < 0 || imgid >= vksc_numimg) { + fprintf(stderr, "vk_get_cmdbuf: invalid id %d, swap chain has %d images\n", + imgid, vksc_numimg); + return 0; + } + return vksc_cmdbuf[imgid]; +} + int vk_create_rpass(void) { int i; @@ -499,7 +548,7 @@ int vk_create_fb(void) if(!framebufs) { framebufs = darr_alloc(0, sizeof *framebufs); - darr_push(framebufs, &framebuf); /* add dummy rpass */ + darr_push(framebufs, &framebuf); /* add dummy framebuffer */ } for(i=1; i