Browse Source

Fix a bug in render scaling

Panagiotis Christopoulos Charitos 3 years ago
parent
commit
2943076748
2 changed files with 41 additions and 60 deletions
  1. 35 57
      AnKi/Gr/Vulkan/GrManager.cpp
  2. 6 3
      AnKi/Renderer/MainRenderer.cpp

+ 35 - 57
AnKi/Gr/Vulkan/GrManager.cpp

@@ -96,64 +96,42 @@ GrManagerStats GrManager::getStats() const
 	return out;
 }
 
-BufferPtr GrManager::newBuffer(const BufferInitInfo& init)
-{
-	return BufferPtr(Buffer::newInstance(this, init));
-}
-
-TexturePtr GrManager::newTexture(const TextureInitInfo& init)
-{
-	return TexturePtr(Texture::newInstance(this, init));
-}
-
-TextureViewPtr GrManager::newTextureView(const TextureViewInitInfo& init)
-{
-	return TextureViewPtr(TextureView::newInstance(this, init));
-}
-
-SamplerPtr GrManager::newSampler(const SamplerInitInfo& init)
-{
-	return SamplerPtr(Sampler::newInstance(this, init));
-}
-
-ShaderPtr GrManager::newShader(const ShaderInitInfo& init)
-{
-	return ShaderPtr(Shader::newInstance(this, init));
-}
-
-ShaderProgramPtr GrManager::newShaderProgram(const ShaderProgramInitInfo& init)
-{
-	return ShaderProgramPtr(ShaderProgram::newInstance(this, init));
-}
-
-CommandBufferPtr GrManager::newCommandBuffer(const CommandBufferInitInfo& init)
-{
-	return CommandBufferPtr(CommandBuffer::newInstance(this, init));
-}
-
-FramebufferPtr GrManager::newFramebuffer(const FramebufferInitInfo& init)
-{
-	return FramebufferPtr(Framebuffer::newInstance(this, init));
-}
-
-OcclusionQueryPtr GrManager::newOcclusionQuery()
-{
-	return OcclusionQueryPtr(OcclusionQuery::newInstance(this));
-}
-
-TimestampQueryPtr GrManager::newTimestampQuery()
-{
-	return TimestampQueryPtr(TimestampQuery::newInstance(this));
-}
+#define ANKI_NEW_GR_OBJECT(type) \
+	type##Ptr GrManager::new##type(const type##InitInfo& init) \
+	{ \
+		type##Ptr ptr(type::newInstance(this, init)); \
+		if(ANKI_UNLIKELY(!ptr.isCreated())) \
+		{ \
+			ANKI_VK_LOGF("Failed to create a " ANKI_STRINGIZE(type) " object"); \
+		} \
+		return ptr; \
+	}
 
-RenderGraphPtr GrManager::newRenderGraph()
-{
-	return RenderGraphPtr(RenderGraph::newInstance(this));
-}
+#define ANKI_NEW_GR_OBJECT_NO_INIT_INFO(type) \
+	type##Ptr GrManager::new##type() \
+	{ \
+		type##Ptr ptr(type::newInstance(this)); \
+		if(ANKI_UNLIKELY(!ptr.isCreated())) \
+		{ \
+			ANKI_VK_LOGF("Failed to create a " ANKI_STRINGIZE(type) " object"); \
+		} \
+		return ptr; \
+	}
 
-AccelerationStructurePtr GrManager::newAccelerationStructure(const AccelerationStructureInitInfo& init)
-{
-	return AccelerationStructurePtr(AccelerationStructure::newInstance(this, init));
-}
+ANKI_NEW_GR_OBJECT(Buffer)
+ANKI_NEW_GR_OBJECT(Texture)
+ANKI_NEW_GR_OBJECT(TextureView)
+ANKI_NEW_GR_OBJECT(Sampler)
+ANKI_NEW_GR_OBJECT(Shader)
+ANKI_NEW_GR_OBJECT(ShaderProgram)
+ANKI_NEW_GR_OBJECT(CommandBuffer)
+ANKI_NEW_GR_OBJECT(Framebuffer)
+ANKI_NEW_GR_OBJECT_NO_INIT_INFO(OcclusionQuery)
+ANKI_NEW_GR_OBJECT_NO_INIT_INFO(TimestampQuery)
+ANKI_NEW_GR_OBJECT_NO_INIT_INFO(RenderGraph)
+ANKI_NEW_GR_OBJECT(AccelerationStructure)
+
+#undef ANKI_NEW_GR_OBJECT
+#undef ANKI_NEW_GR_OBJECT_NO_INIT_INFO
 
 } // end namespace anki

+ 6 - 3
AnKi/Renderer/MainRenderer.cpp

@@ -46,7 +46,7 @@ Error MainRenderer::init(const MainRendererInitInfo& inf)
 	// Init other
 	if(!m_rDrawToDefaultFb)
 	{
-		ANKI_CHECK(inf.m_resourceManager->loadResource("Shaders/BlitGraphics.ankiprog", m_blitProg));
+		ANKI_CHECK(inf.m_resourceManager->loadResource("Shaders/BlitRaster.ankiprog", m_blitProg));
 		const ShaderProgramResourceVariant* variant;
 		m_blitProg->getOrCreateVariant(variant);
 		m_blitGrProg = variant->getProgram();
@@ -55,8 +55,11 @@ Error MainRenderer::init(const MainRendererInitInfo& inf)
 		UVec2 resolution = UVec2(Vec2(m_swapchainResolution) * inf.m_config->getRRenderScaling());
 		alignRoundDown(2, resolution.x());
 		alignRoundDown(2, resolution.y());
-		m_tmpRtDesc = m_r->create2DRenderTargetDescription(resolution.x(), resolution.y(), Format::R8G8B8_UNORM,
-														   "Final Composite");
+		m_tmpRtDesc = m_r->create2DRenderTargetDescription(
+			resolution.x(), resolution.y(),
+			(m_r->getGrManager().getDeviceCapabilities().m_unalignedBbpTextureFormats) ? Format::R8G8B8_UNORM
+																					   : Format::R8G8B8A8_UNORM,
+			"Final Composite");
 		m_tmpRtDesc.bake();
 
 		// FB descr