private static void submitCommandBuffer(VkQueue queue, VkCommandBuffer commandBuffer) { if (commandBuffer == null || commandBuffer.address() == 0) return; VkSubmitInfo submitInfo = VkSubmitInfo.calloc() .sType(VK_STRUCTURE_TYPE_SUBMIT_INFO); PointerBuffer pCommandBuffers = memAllocPointer(1) .put(commandBuffer) .flip(); submitInfo.pCommandBuffers(pCommandBuffers); int err = vkQueueSubmit(queue, submitInfo, VK_NULL_HANDLE); memFree(pCommandBuffers); submitInfo.free(); if (err != VK_SUCCESS) { throw new AssertionError("Failed to submit command buffer: " + VKUtil.translateVulkanResult(err)); } }
private static void submitCommandBuffer(VkQueue queue, VkCommandBuffer commandBuffer) { if (commandBuffer == null || commandBuffer.address() == NULL) return; VkSubmitInfo submitInfo = VkSubmitInfo.calloc() .sType(VK_STRUCTURE_TYPE_SUBMIT_INFO); PointerBuffer pCommandBuffers = memAllocPointer(1) .put(commandBuffer) .flip(); submitInfo.pCommandBuffers(pCommandBuffers); int err = vkQueueSubmit(queue, submitInfo, VK_NULL_HANDLE); memFree(pCommandBuffers); submitInfo.free(); if (err != VK_SUCCESS) { throw new AssertionError("Failed to submit command buffer: " + translateVulkanResult(err)); } }
@NoTransform private static VkQueue createDeviceQueue(VkDevice device, int queueFamilyIndex) { PointerBuffer pQueue = stackMallocPointer(1); vkGetDeviceQueue(device, queueFamilyIndex, 0, pQueue); long queue = pQueue.get(0); return new VkQueue(queue, device); }
private static void submitCommandBuffer(VkQueue queue, VkCommandBuffer commandBuffer) { if (commandBuffer == null || commandBuffer.address() == NULL) return; VkSubmitInfo submitInfo = VkSubmitInfo.callocStack() .sType(VK_STRUCTURE_TYPE_SUBMIT_INFO); PointerBuffer pCommandBuffers = stackMallocPointer(1) .put(commandBuffer) .flip(); submitInfo.pCommandBuffers(pCommandBuffers); int err = vkQueueSubmit(queue, submitInfo, VK_NULL_HANDLE); if (err != VK_SUCCESS) { throw new AssertionError("Failed to submit command buffer: " + translateVulkanResult(err)); } }
private VkQueue createDeviceQueue(VkDevice device, int queueFamilyIndex) { PointerBuffer pQueue = memAllocPointer(1); vkGetDeviceQueue(device, queueFamilyIndex, 0, pQueue); long queue = pQueue.get(0); memFree(pQueue); return new VkQueue(queue, device); }
private static VkQueue createDeviceQueue(VkDevice device, int queueFamilyIndex) { PointerBuffer pQueue = memAllocPointer(1); vkGetDeviceQueue(device, queueFamilyIndex, 0, pQueue); long queue = pQueue.get(0); memFree(pQueue); return new VkQueue(queue, device); }
private static void submitPostPresentBarrier(long image, VkCommandBuffer commandBuffer, VkQueue queue) { VkCommandBufferBeginInfo cmdBufInfo = VkCommandBufferBeginInfo.calloc() .sType(VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO) .pNext(NULL); int err = vkBeginCommandBuffer(commandBuffer, cmdBufInfo); cmdBufInfo.free(); if (err != VK_SUCCESS) { throw new AssertionError("Failed to begin command buffer: " + translateVulkanResult(err)); } VkImageMemoryBarrier.Buffer postPresentBarrier = createPostPresentBarrier(image); vkCmdPipelineBarrier( commandBuffer, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_FLAGS_NONE, null, // No memory barriers, null, // No buffer barriers, postPresentBarrier); // one image barrier postPresentBarrier.free(); err = vkEndCommandBuffer(commandBuffer); if (err != VK_SUCCESS) { throw new AssertionError("Failed to wait for idle queue: " + translateVulkanResult(err)); } // Submit the command buffer submitCommandBuffer(queue, commandBuffer); }
@UseNewStack private static void submitPostPresentBarrier(long image, VkCommandBuffer commandBuffer, VkQueue queue) { VkCommandBufferBeginInfo cmdBufInfo = VkCommandBufferBeginInfo.callocStack() .sType(VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO) .pNext(NULL); int err = vkBeginCommandBuffer(commandBuffer, cmdBufInfo); if (err != VK_SUCCESS) { throw new AssertionError("Failed to begin command buffer: " + translateVulkanResult(err)); } VkImageMemoryBarrier.Buffer postPresentBarrier = VkImageMemoryBarrier.callocStack(1) .sType(VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER) .pNext(NULL) .srcAccessMask(0) .dstAccessMask(VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT) .oldLayout(VK_IMAGE_LAYOUT_PRESENT_SRC_KHR) .newLayout(VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL) .srcQueueFamilyIndex(VK_QUEUE_FAMILY_IGNORED) .dstQueueFamilyIndex(VK_QUEUE_FAMILY_IGNORED) .image(image); postPresentBarrier.subresourceRange() .aspectMask(VK_IMAGE_ASPECT_COLOR_BIT) .baseMipLevel(0) .levelCount(1) .baseArrayLayer(0) .layerCount(1); vkCmdPipelineBarrier( commandBuffer, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_FLAGS_NONE, null, // No memory barriers, null, // No buffer barriers, postPresentBarrier); // one image barrier err = vkEndCommandBuffer(commandBuffer); if (err != VK_SUCCESS) { throw new AssertionError("Failed to wait for idle queue: " + translateVulkanResult(err)); } // Submit the command buffer submitCommandBuffer(queue, commandBuffer); }
void recreate(VkCommandBuffer setupCommandBuffer, VkDevice device, VkPhysicalDevice physicalDevice, long surface, ColorFormatAndSpace colorFormatAndSpace, VkQueue queue, long renderPass, long renderCommandPool, long pipeline, Vertices vertices) { // Begin the setup command buffer (the one we will use for swapchain/framebuffer creation) VkCommandBufferBeginInfo cmdBufInfo = VkCommandBufferBeginInfo.calloc() .sType(VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO) .pNext(0); int err = vkBeginCommandBuffer(setupCommandBuffer, cmdBufInfo); cmdBufInfo.free(); if (err != VK_SUCCESS) { throw new AssertionError("Failed to begin setup command buffer: " + VKUtil.translateVulkanResult(err)); } long oldChain = swapchain != null ? swapchain.swapchainHandle : VK_NULL_HANDLE; // Create the swapchain (this will also add a memory barrier to initialize the framebuffer images) swapchain = createSwapChain(device, physicalDevice, surface, oldChain, setupCommandBuffer, width, height, colorFormatAndSpace.colorFormat, colorFormatAndSpace.colorSpace); err = vkEndCommandBuffer(setupCommandBuffer); if (err != VK_SUCCESS) { throw new AssertionError("Failed to end setup command buffer: " + VKUtil.translateVulkanResult(err)); } submitCommandBuffer(queue, setupCommandBuffer); vkQueueWaitIdle(queue); if (framebuffers != null) { for (int i = 0; i < framebuffers.length; i++) vkDestroyFramebuffer(device, framebuffers[i], null); } framebuffers = createFramebuffers(device, swapchain, renderPass, width, height); // Create render command buffers if (renderCommandBuffers != null) { vkResetCommandPool(device, renderCommandPool, 0); } renderCommandBuffers = createRenderCommandBuffers(device, renderCommandPool, framebuffers, renderPass, width, height, pipeline, vertices.verticesBuf); mustRecreate = false; }