framegraph bugfix
This commit is contained in:
parent
1d3961ec74
commit
5c695160d3
1
.gitignore
vendored
1
.gitignore
vendored
@ -5,3 +5,4 @@
|
||||
build/
|
||||
vsxmake*/
|
||||
/tools
|
||||
*.log
|
||||
|
||||
@ -17,5 +17,6 @@ namespace api {
|
||||
virtual void BindVertexBuffer(BufferDesc buffers) = 0;
|
||||
virtual void BindVertexBuffers(uint32_t buffer_count, const BufferDesc* buffers, const uint32_t* offsets) = 0;
|
||||
virtual void DrawIndexed(uint32_t index_count, uint32_t first_index, uint32_t first_vertex) = 0;
|
||||
virtual void ExecuteSurfaceBarriers(const ResourceBarrierDesc& desc) = 0;
|
||||
};
|
||||
}
|
||||
@ -145,7 +145,7 @@ namespace api {
|
||||
desc.type = RenderPassType::Present;
|
||||
desc.textureBarriersCount = 1;
|
||||
desc.pTextureBarriers = &barrier;
|
||||
RenderAPI::Ptr()->ExecuteResourceBarriers(desc);
|
||||
view.context->ExecuteSurfaceBarriers(desc);
|
||||
}
|
||||
void FrameGraph::ExecuteComputePass(RenderPassNode* node, FRenderView& view)
|
||||
{
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
#pragma once
|
||||
#include "type.h"
|
||||
#include "render/renderapi.h"
|
||||
namespace vkn {
|
||||
@ -15,6 +16,7 @@ namespace vkn {
|
||||
void BindVertexBuffer(BufferDesc desc) override;
|
||||
void BindVertexBuffers(uint32_t buffer_count, const BufferDesc* descs, const uint32_t* offsets)override;
|
||||
void DrawIndexed(uint32_t index_count, uint32_t first_index, uint32_t first_vertex) override;
|
||||
void ExecuteSurfaceBarriers(const ResourceBarrierDesc& desc) override;
|
||||
|
||||
void BeginRecord(VkCommandBufferUsageFlags flag);
|
||||
void EndRecord(VkQueue queue);
|
||||
|
||||
@ -332,14 +332,12 @@ namespace vkn {
|
||||
{
|
||||
VulkanContext& ctx = *(VulkanContext*)&context;
|
||||
window.Aquire(ctx);
|
||||
ctx.BeginRecord(VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT);
|
||||
graph.mSurface = ctx.surface;
|
||||
EventSystem::Ptr()->BeginRenderFrame.Invoke();
|
||||
}
|
||||
void VulkanAPI::EndFrame()
|
||||
{
|
||||
VulkanContext& ctx = *(VulkanContext*)&context;
|
||||
ctx.EndRecord(Backend::RenderWorker->GetQueue().Ptr());
|
||||
window.Present(ctx);
|
||||
}
|
||||
void VulkanAPI::ExecuteResourceBarriers(const ResourceBarrierDesc& desc) {
|
||||
@ -456,11 +454,15 @@ namespace vkn {
|
||||
submitInfo.pWaitSemaphores = waitSemaphores;
|
||||
submitInfo.pWaitDstStageMask = waitDstStageMasks;
|
||||
submitInfo.waitSemaphoreCount = semaphoreCount;
|
||||
VkFence fence = nullptr;
|
||||
if (node->IsLastOutput()) {
|
||||
ctx.graphSemaphore = passInfo->semaphores[context.frame];
|
||||
if (graph.mSurface.state == ResourceState::PRESENT) {
|
||||
fence = ctx.surfaceFence;
|
||||
}
|
||||
}
|
||||
//zlog::info("+++++sign {:#x}", (uintptr_t)passInfo->semaphores[context.frame]);
|
||||
vkQueueSubmit(Backend::RenderWorker->GetQueue().Ptr(), 1, &submitInfo, nullptr);
|
||||
vkQueueSubmit(Backend::RenderWorker->GetQueue().Ptr(), 1, &submitInfo, fence);
|
||||
}
|
||||
RenderPassInfo* VulkanAPI::GetRenderPassInfo(Name name, size_t hash) {
|
||||
if (hash) {
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
#include "vkn/vulkan_context.h"
|
||||
#include "vkn/backend.h"
|
||||
#include "vkn/vulkan_api.h"
|
||||
#include "vkn/thread/command_worker.h"
|
||||
#include "zlog.h"
|
||||
namespace vkn {
|
||||
void VulkanContext::SetScissor(uint32_t x, uint32_t y, uint32_t width, uint32_t height)
|
||||
@ -49,6 +50,12 @@ namespace vkn {
|
||||
{
|
||||
vkCmdDrawIndexed(command, index_count, 1, first_index, first_vertex, 0);
|
||||
}
|
||||
void VulkanContext::ExecuteSurfaceBarriers(const ResourceBarrierDesc& desc)
|
||||
{
|
||||
BeginRecord(VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT);
|
||||
VulkanAPI::Ptr()->ExecuteResourceBarriers(desc);
|
||||
EndRecord(Backend::RenderWorker->GetQueue().Ptr());
|
||||
}
|
||||
void VulkanContext::BeginRecord(VkCommandBufferUsageFlags flag)
|
||||
{
|
||||
VkCommandBufferBeginInfo beginInfo{
|
||||
@ -79,6 +86,6 @@ namespace vkn {
|
||||
//zlog::info("-----wait {:#x}", (uintptr_t)waitSemaphores[0]);
|
||||
//zlog::info("+++++sign {:#x}", (uintptr_t)signalSemaphores[0]);
|
||||
vkQueueSubmit(queue, 1, &submitInfo, surfaceFence);
|
||||
graphSemaphore = nullptr;
|
||||
graphSemaphore = presentSemaphore;
|
||||
}
|
||||
}
|
||||
|
||||
@ -47,7 +47,7 @@ namespace vkn {
|
||||
colorAttachment.storeOp = VK_ATTACHMENT_STORE_OP_STORE;
|
||||
colorAttachment.stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
|
||||
colorAttachment.stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE;
|
||||
colorAttachment.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
|
||||
colorAttachment.initialLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
|
||||
colorAttachment.finalLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR;
|
||||
|
||||
VkAttachmentReference colorAttachmentRef = {};
|
||||
@ -64,7 +64,7 @@ namespace vkn {
|
||||
dependency.dstSubpass = 0;
|
||||
dependency.srcStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
|
||||
dependency.dstStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
|
||||
dependency.srcAccessMask = 0; // or VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
|
||||
dependency.srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
|
||||
dependency.dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
|
||||
|
||||
VkRenderPassCreateInfo info = {};
|
||||
@ -140,7 +140,7 @@ namespace vkn {
|
||||
ImGui::End();
|
||||
|
||||
ImGui::Render();
|
||||
VulkanContext& ctx = *(VulkanContext*)&context.parent;
|
||||
VulkanContext& ctx = *(VulkanContext*)context.parent;
|
||||
ImGui_ImplVulkan_RenderDrawData(ImGui::GetDrawData(), ctx.command);
|
||||
ImGuiIO& io = ImGui::GetIO();
|
||||
// 更新并渲染平台窗口
|
||||
|
||||
@ -109,7 +109,7 @@ namespace vkn {
|
||||
//zlog::info("present+++++++++++:: {:#x}", (uintptr_t)ctx.presentSemaphore);
|
||||
VkPresentInfoKHR presentInfo = {};
|
||||
presentInfo.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR;
|
||||
presentInfo.pWaitSemaphores = &ctx.presentSemaphore;
|
||||
presentInfo.pWaitSemaphores = &ctx.graphSemaphore;
|
||||
presentInfo.waitSemaphoreCount = 1;
|
||||
presentInfo.pSwapchains = &mPtr;
|
||||
presentInfo.swapchainCount = 1;
|
||||
|
||||
14
game/zworld/imgui.ini
Normal file
14
game/zworld/imgui.ini
Normal file
@ -0,0 +1,14 @@
|
||||
[Window][Debug##Default]
|
||||
ViewportPos=480,240
|
||||
ViewportId=0x16723995
|
||||
Size=400,400
|
||||
Collapsed=0
|
||||
|
||||
[Window][Hello, ImGui!]
|
||||
ViewportPos=480,240
|
||||
ViewportId=0x41ACA57A
|
||||
Size=191,71
|
||||
Collapsed=0
|
||||
|
||||
[Docking][Data]
|
||||
|
||||
Loading…
Reference in New Issue
Block a user