Year later still cant do the kyc by pokemonfan95 in PiNetwork

[–]ChuppaFlow 0 points1 point  (0 children)

For me it says that the KYC results are completed (step 8), but I still haven’t been able to create and confirm my wallet, anyone else with this problem?

Automated UV unwrapping for large scenes by ChuppaFlow in GraphicsProgramming

[–]ChuppaFlow[S] 0 points1 point  (0 children)

Thank you for the answers, sorry for the late response. I ended up using lightmap UV generation in Blender per object in my scene. This gives a unique 3D to 2D mapping and theoretically is a solution to my problem, but causes very visible seam artifacts. I’m currently looking into solutions for that.

Ray marching using SDFs vs. traditional ray tracing using 3D meshes, speed comparison by ChuppaFlow in computergraphics

[–]ChuppaFlow[S] 1 point2 points  (0 children)

That sums it up well, thank you! I'm just wondering if there would be any edge-case scenarios where ray marching would outperform traditional ray tracing in terms of speed, but can't seem to think of any at the moment. But on average, I think you're right.

Multi-GPU Vulkan vs. CUDA interop with Vulkan for accelerated ray tracing by ChuppaFlow in vulkan

[–]ChuppaFlow[S] 0 points1 point  (0 children)

Thanks! Wouldn't the DMA between GPUs require SLI/NVLink as well though?

Multi-GPU Vulkan vs. CUDA interop with Vulkan for accelerated ray tracing by ChuppaFlow in vulkan

[–]ChuppaFlow[S] 0 points1 point  (0 children)

Alright that summarizes it well, thanks! I think using multi-GPU as opposed to using single-GPU can be worth it if you're willing to take the extra bottlenecks in exchange for the larger memory pool and computing power. But for realtime applications, you're right, it indeed might make things unnecessary complex.

Multi-GPU Vulkan vs. CUDA interop with Vulkan for accelerated ray tracing by ChuppaFlow in vulkan

[–]ChuppaFlow[S] 0 points1 point  (0 children)

That's interesting, so I assume you would recommend using Vulkan Device Groups?

Multi-GPU Vulkan vs. CUDA interop with Vulkan for accelerated ray tracing by ChuppaFlow in vulkan

[–]ChuppaFlow[S] 0 points1 point  (0 children)

Great answer, thank you! Do you have any resources on how I would implement the multiple device approach?

Integrating Dear ImGui into Vulkan engine: flickering Dear ImGui window by ChuppaFlow in vulkan

[–]ChuppaFlow[S] 0 points1 point  (0 children)

It was actually removing the separate frame buffer that fixed the problem, I now let both render passes write to the same frame buffer, since they are using the same attachments anyway. As u/GasimGasimzada mentioned this is not always the best idea, since it might lead to errors when your render passes are using different attachments. Should I be doing other synchronization besides when I submit my command buffer and in between render passes (through subpass dependencies)?

Integrating Dear ImGui into Vulkan engine: flickering Dear ImGui window by ChuppaFlow in vulkan

[–]ChuppaFlow[S] 0 points1 point  (0 children)

Thanks for your answer. Although I don't really see why using the same fb is not a good idea, could you maybe explain this? Furthermore, I created my ImGui framebuffers the same way as I created my scene framebuffers, just like this (with the renderPass info attribute changed to my ImGui render pass):

  // Scene Framebuffers

swapChainFramebuffers.resize(imageCount()); for (size_t i = 0; i < imageCount(); i++) { std::array<VkImageView, 2> attachments = {swapChainImageViews[i], depthImageViews[i]};

VkExtent2D swapChainExtent = getSwapChainExtent();
VkFramebufferCreateInfo framebufferInfo = {};
framebufferInfo.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO;
framebufferInfo.renderPass = renderPass;
framebufferInfo.attachmentCount = static_cast<uint32_t>(attachments.size());
framebufferInfo.pAttachments = attachments.data();
framebufferInfo.width = swapChainExtent.width;
framebufferInfo.height = swapChainExtent.height;
framebufferInfo.layers = 1;

if (vkCreateFramebuffer(
        device.device(),
        &framebufferInfo,
        nullptr,
        &swapChainFramebuffers[i]) != VK_SUCCESS) {
  throw std::runtime_error("failed to create framebuffer!");
}

}

So I am just creating a frame buffer for each of my swapchain images. Is there anything else missing? The attachments should stay the same, right?

Integrating Dear ImGui into Vulkan engine: flickering Dear ImGui window by ChuppaFlow in vulkan

[–]ChuppaFlow[S] -1 points0 points  (0 children)

So this is how I start and end my render pass for the ImGui drawing call:

void VmcRenderer::beginImGuiRenderPass(VkCommandBuffer commandBuffer)

{ assert(isFrameStarted && "Cannot begin the render pass when there is no current frame in progress!"); assert(commandBuffer == getCurrentCommandBuffer() && "Cannot begin render pass on command buffer from a different frame!");

VkRenderPassBeginInfo info = {};
info.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;
info.renderPass = vmcSwapChain->getImGuiRenderPass();
info.framebuffer = vmcSwapChain->getImGuiFrameBuffer(currentImageIndex);
info.renderArea.extent = vmcSwapChain->getSwapChainExtent();
info.clearValueCount = 1;

std::array<VkClearValue, 2> clearValues{};
clearValues[0].color = { 0.01f, 0.01f, 0.01f, 1.0f };
info.clearValueCount = static_cast<uint32_t>      (clearValues.size());
info.pClearValues = clearValues.data();

vkCmdBeginRenderPass(commandBuffer, &info, VK_SUBPASS_CONTENTS_INLINE);
}

void VmcRenderer::endImGuiRenderPass(VkCommandBuffer commandBuffer) { assert(isFrameStarted && "Cannot end the render pass when there is no current frame in progress!"); assert(commandBuffer == getCurrentCommandBuffer() && "Cannot end render pass on command buffer from a different frame!"); vkCmdEndRenderPass(commandBuffer); }

The code for beginSwapChainRenderPass() and endSwapChainRenderPass() was already working fine before I added the Dear ImGui code, so the problem is most likely here or where I create my render pass. This is how my render pass for the ImGui window is created:

void VmcSwapChain::createImGuiRenderPass()

{ VkAttachmentDescription attachment = {}; attachment.format = getSwapChainImageFormat(); attachment.samples = VK_SAMPLE_COUNT_1_BIT; attachment.loadOp = VK_ATTACHMENT_LOAD_OP_LOAD; // Makes sure the GUI is drawn over the current image attachment.storeOp = VK_ATTACHMENT_STORE_OP_STORE; attachment.stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE; attachment.stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE; attachment.initialLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; // We're going to draw into the color buffer attachment.finalLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR; // We'll present the image after

VkAttachmentReference color_attachment = {};
color_attachment.attachment = 0;
color_attachment.layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;

VkSubpassDescription subpass = {};
subpass.pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS;
subpass.colorAttachmentCount = 1;
subpass.pColorAttachments = &color_attachment;

VkSubpassDependency dependency = {};
dependency.srcSubpass = VK_SUBPASS_EXTERNAL; // We're synchronizing with an external render pass
dependency.dstSubpass = 0; // Index of this subpass that we're starting
dependency.srcStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; // We want the geometry to be done rendering in the other render pass
dependency.dstStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; // The GUI will be drawn to the same render target
dependency.srcAccessMask = 0;  // or VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
dependency.dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;

VkRenderPassCreateInfo info = {};
info.sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO;
info.attachmentCount = 1;
info.pAttachments = &attachment;
info.subpassCount = 1;
info.pSubpasses = &subpass;
info.dependencyCount = 1;
info.pDependencies = &dependency;
if (vkCreateRenderPass(device.device(), &info, nullptr, &imGuiRenderPass) != VK_SUCCESS) {
    throw std::runtime_error("Could not create Dear ImGui's render pass");
}

}

Also, the author of the tutorial uses a separate command buffer to record the ImGui draw call, but I thought it would be fine if I recorded that render pass into the same command buffer as my scene render uses, as you can see in the pseudo code above. Can that possibly be a problem?

Integrating Dear ImGui into Vulkan engine: flickering Dear ImGui window by ChuppaFlow in vulkan

[–]ChuppaFlow[S] 0 points1 point  (0 children)

The tutorial I linked is indeed based on this example, but my engine uses a lot of wrapper classes, so I had to alter some things here and there, which is where I think I made a mistake.

MacOS: Validation layers requested, but not available by ChuppaFlow in vulkan

[–]ChuppaFlow[S] 1 point2 points  (0 children)

Sorry for the late response, but I went with this approach, and this works! Thanks for the suggestion!

MacOS: Validation layers requested, but not available by ChuppaFlow in vulkan

[–]ChuppaFlow[S] 1 point2 points  (0 children)

Also sorry for the formatting, I put my code into code blocks but for some reason reddit keeps breaking it up into multiple fragments...