Archived
1
Fork 0

Add labels for render passes and framebuffers

This commit is contained in:
redstrate 2020-09-23 10:17:24 -04:00
parent 482c7ef748
commit 1ba9222a43
11 changed files with 30 additions and 5 deletions

View file

@ -215,11 +215,15 @@ struct GFXComputePipelineCreateInfo {
};
struct GFXFramebufferCreateInfo {
std::string label;
GFXRenderPass* render_pass;
std::vector<GFXTexture*> attachments;
};
struct GFXRenderPassCreateInfo {
std::string label;
std::vector<GFXPixelFormat> attachments;
};

View file

@ -54,6 +54,8 @@ public:
// misc operations
GFXSize get_alignment(const GFXSize size) override;
GFXCommandBuffer* acquire_command_buffer() override;
void submit(GFXCommandBuffer* command_buffer, const int identifier) override;
private:

View file

@ -432,7 +432,6 @@ void GFXVulkan::copy_texture(GFXTexture* from, GFXBuffer* to) {
console::error(System::GFX, "Copy Texture->Buffer unimplemented!");
}
GFXFramebuffer* GFXVulkan::create_framebuffer(const GFXFramebufferCreateInfo& info) {
GFXVulkanFramebuffer* framebuffer = new GFXVulkanFramebuffer();
@ -457,6 +456,8 @@ GFXFramebuffer* GFXVulkan::create_framebuffer(const GFXFramebufferCreateInfo& in
vkCreateFramebuffer(device, &framebufferInfo, nullptr, &framebuffer->handle);
name_object(device, VK_OBJECT_TYPE_FRAMEBUFFER, (uint64_t)framebuffer->handle, info.label);
framebuffer->width = ((GFXVulkanTexture*)info.attachments[0])->width;
framebuffer->height = ((GFXVulkanTexture*)info.attachments[0])->height;
@ -536,6 +537,8 @@ GFXRenderPass* GFXVulkan::create_render_pass(const GFXRenderPassCreateInfo& info
vkCreateRenderPass(device, &renderPassInfo, nullptr, &renderPass->handle);
name_object(device, VK_OBJECT_TYPE_RENDER_PASS, (uint64_t)renderPass->handle, info.label);
renderPass->numAttachments = static_cast<unsigned int>(descriptions.size());
renderPass->hasDepthAttachment = hasDepthAttachment;
@ -779,6 +782,10 @@ GFXSize GFXVulkan::get_alignment(GFXSize size) {
return (size + minUboAlignment / 2) & ~int(minUboAlignment - 1);
}
GFXCommandBuffer* GFXVulkan::acquire_command_buffer() {
return new GFXCommandBuffer();
}
void GFXVulkan::submit(GFXCommandBuffer* command_buffer, const int identifier) {
vkWaitForFences(device, 1, &inFlightFences[currentFrame], VK_TRUE, std::numeric_limits<uint64_t>::max());

View file

@ -12,6 +12,7 @@ DoFPass::DoFPass(GFX* gfx, Renderer* renderer) : renderer(renderer) {
aperture_texture = assetm->get<Texture>(file::app_domain / "textures/aperture.png");
GFXRenderPassCreateInfo renderPassInfo = {};
renderPassInfo.label = "Depth of Field";
renderPassInfo.attachments.push_back(GFXPixelFormat::RGBA_32F);
renderpass = gfx->create_render_pass(renderPassInfo);

View file

@ -6,6 +6,7 @@
GaussianHelper::GaussianHelper(GFX* gfx, const prism::Extent extent) : extent(extent) {
// render pass
GFXRenderPassCreateInfo renderPassInfo = {};
renderPassInfo.label = "Gaussian";
renderPassInfo.attachments.push_back(GFXPixelFormat::RGBA_32F);
renderPass = gfx->create_render_pass(renderPassInfo);

View file

@ -16,7 +16,7 @@ void ImGuiPass::initialize() {
io.BackendFlags |= ImGuiBackendFlags_RendererHasVtxOffset;
io.BackendFlags |= ImGuiBackendFlags_RendererHasViewports;
#if !defined(PLATFORM_TVOS) && !defined(PLATFORM_IOS)
#if !defined(PLATFORM_TVOS) && !defined(PLATFORM_IOS) && !defined(PLATFORM_WINDOWS)
load_font("OpenSans-Regular.ttf");
#endif
create_font_texture();

View file

@ -778,12 +778,14 @@ void Renderer::createDummyTexture() {
void Renderer::createOffscreenResources() {
GFXRenderPassCreateInfo renderPassInfo = {};
renderPassInfo.label = "Offscreen";
renderPassInfo.attachments.push_back(GFXPixelFormat::RGBA_32F);
renderPassInfo.attachments.push_back(GFXPixelFormat::DEPTH_32F);
offscreenRenderPass = gfx->create_render_pass(renderPassInfo);
renderPassInfo = {};
renderPassInfo.label = "Offscreen Unorm";
renderPassInfo.attachments = {GFXPixelFormat::RGBA8_UNORM};
unormRenderPass = gfx->create_render_pass(renderPassInfo);
@ -813,6 +815,7 @@ void Renderer::createOffscreenResources() {
if(viewport_mode) {
GFXRenderPassCreateInfo renderPassInfo = {};
renderPassInfo.label = "Viewport";
renderPassInfo.attachments.push_back(GFXPixelFormat::RGBA8_UNORM);
viewportRenderPass = gfx->create_render_pass(renderPassInfo);
@ -1001,6 +1004,7 @@ void Renderer::createGaussianResources() {
void Renderer::createBRDF() {
GFXRenderPassCreateInfo renderPassInfo = {};
renderPassInfo.label = "BRDF Gen";
renderPassInfo.attachments.push_back(GFXPixelFormat::R8G8_SFLOAT);
brdfRenderPass = gfx->create_render_pass(renderPassInfo);

View file

@ -61,6 +61,7 @@ SceneCapture::SceneCapture(GFX* gfx) {
// render pass
GFXRenderPassCreateInfo renderPassInfo = {};
renderPassInfo.label = "Scene Capture Cube";
renderPassInfo.attachments.push_back(GFXPixelFormat::R8G8B8A8_UNORM);
renderPassInfo.attachments.push_back(GFXPixelFormat::DEPTH_32F);
@ -423,6 +424,7 @@ void SceneCapture::createIrradianceResources() {
irradianceFramebuffer = gfx->create_framebuffer(info);
GFXRenderPassCreateInfo renderPassInfo = {};
renderPassInfo.label = "Irradiance";
renderPassInfo.attachments.push_back(GFXPixelFormat::R8G8B8A8_UNORM);
irradianceRenderPass = gfx->create_render_pass(renderPassInfo);

View file

@ -295,10 +295,12 @@ void ShadowPass::create_render_passes() {
// render pass
GFXRenderPassCreateInfo renderPassInfo = {};
renderPassInfo.label = "Shadow";
renderPassInfo.attachments.push_back(GFXPixelFormat::DEPTH_32F);
render_pass = gfx->create_render_pass(renderPassInfo);
renderPassInfo.label = "Shadow Cube";
renderPassInfo.attachments.clear();
renderPassInfo.attachments.push_back(GFXPixelFormat::R_32F);
renderPassInfo.attachments.push_back(GFXPixelFormat::DEPTH_32F);

View file

@ -98,6 +98,7 @@ void SMAAPass::create_textures() {
void SMAAPass::create_render_pass() {
GFXRenderPassCreateInfo createInfo = {};
createInfo.label = "SMAA";
createInfo.attachments = {GFXPixelFormat::R16G16B16A16_SFLOAT};
render_pass = engine->get_gfx()->create_render_pass(createInfo);

View file

@ -72,6 +72,8 @@ int platform::open_window(const std::string_view title, const prism::Rectangle r
engine->add_window(window, 0, rect.extent);
app->initialize_render();
return 0;
}
@ -154,8 +156,6 @@ int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow
app_main(engine);
app->initialize_render();
MSG msg = { };
while (GetMessage(&msg, NULL, 0, 0))
{
@ -207,8 +207,9 @@ LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
HCURSOR arrowCursor = LoadCursor(NULL, IDC_ARROW);
SetCursor(arrowCursor);
engine->begin_frame(1.0f / 60.0f);
engine->update(1.0f / 60.0f);
engine->begin_frame(1.0f / 60.0f);
engine->render(0);
if(engine->is_quitting()) {