Browse Source

RenderGraph: More work

Panagiotis Christopoulos Charitos 8 years ago
parent
commit
ca28094553
100 changed files with 400 additions and 314 deletions
  1. 5 5
      bled/Main.cpp
  2. 3 3
      samples/common/Framework.cpp
  3. 2 2
      samples/simple_scene/Main.cpp
  4. 2 2
      samples/sponza/Main.cpp
  5. 6 6
      sandbox/Main.cpp
  6. 1 0
      src/anki/Gr.h
  7. 5 5
      src/anki/collision/CompoundShape.cpp
  8. 1 1
      src/anki/collision/CompoundShape.h
  9. 2 2
      src/anki/collision/Tests.cpp
  10. 3 3
      src/anki/core/App.cpp
  11. 1 1
      src/anki/core/App.h
  12. 4 4
      src/anki/core/NativeWindowSdl.cpp
  13. 1 1
      src/anki/core/StagingGpuMemoryManager.cpp
  14. 2 2
      src/anki/core/StdinListener.cpp
  15. 6 6
      src/anki/core/Trace.cpp
  16. 2 2
      src/anki/event/AnimationEvent.cpp
  17. 1 1
      src/anki/event/Event.h
  18. 3 3
      src/anki/event/EventManager.cpp
  19. 1 1
      src/anki/event/EventManager.h
  20. 2 2
      src/anki/event/JitterMoveEvent.cpp
  21. 2 2
      src/anki/event/LightEvent.cpp
  22. 1 0
      src/anki/gr/Common.h
  23. 1 0
      src/anki/gr/GrObject.h
  24. 75 13
      src/anki/gr/RenderGraph.cpp
  25. 22 5
      src/anki/gr/RenderGraph.h
  26. 2 2
      src/anki/gr/common/ClassGpuAllocator.cpp
  27. 2 2
      src/anki/gr/common/FrameGpuAllocator.cpp
  28. 1 1
      src/anki/gr/common/StackGpuAllocator.cpp
  29. 1 1
      src/anki/gr/gl/Buffer.cpp
  30. 41 41
      src/anki/gr/gl/CommandBuffer.cpp
  31. 5 5
      src/anki/gr/gl/CommandBufferImpl.cpp
  32. 2 2
      src/anki/gr/gl/Fence.cpp
  33. 1 1
      src/anki/gr/gl/FenceImpl.cpp
  34. 3 3
      src/anki/gr/gl/FramebufferImpl.cpp
  35. 3 3
      src/anki/gr/gl/GlObject.cpp
  36. 1 1
      src/anki/gr/gl/GrManager.cpp
  37. 1 1
      src/anki/gr/gl/GrManagerImpl.cpp
  38. 5 5
      src/anki/gr/gl/GrManagerImplSdl.cpp
  39. 1 1
      src/anki/gr/gl/OcclusionQuery.cpp
  40. 5 5
      src/anki/gr/gl/RenderingThread.cpp
  41. 1 1
      src/anki/gr/gl/Sampler.cpp
  42. 2 2
      src/anki/gr/gl/ShaderImpl.cpp
  43. 2 2
      src/anki/gr/gl/ShaderProgramImpl.cpp
  44. 1 1
      src/anki/gr/gl/Texture.cpp
  45. 1 1
      src/anki/gr/gl/TextureImpl.cpp
  46. 1 1
      src/anki/gr/vulkan/BufferImpl.cpp
  47. 4 4
      src/anki/gr/vulkan/CommandBufferFactory.cpp
  48. 1 1
      src/anki/gr/vulkan/CommandBufferImpl.cpp
  49. 1 1
      src/anki/gr/vulkan/Common.h
  50. 9 9
      src/anki/gr/vulkan/DescriptorSet.cpp
  51. 2 2
      src/anki/gr/vulkan/FramebufferImpl.cpp
  52. 1 1
      src/anki/gr/vulkan/GpuMemoryManager.cpp
  53. 1 1
      src/anki/gr/vulkan/GrManager.cpp
  54. 14 14
      src/anki/gr/vulkan/GrManagerImpl.cpp
  55. 2 2
      src/anki/gr/vulkan/GrManagerImplSdl.cpp
  56. 1 1
      src/anki/gr/vulkan/OcclusionQueryImpl.cpp
  57. 2 2
      src/anki/gr/vulkan/PipelineCache.cpp
  58. 1 1
      src/anki/gr/vulkan/PipelineLayout.cpp
  59. 1 1
      src/anki/gr/vulkan/QueryExtra.cpp
  60. 1 1
      src/anki/gr/vulkan/SamplerImpl.cpp
  61. 4 4
      src/anki/gr/vulkan/ShaderImpl.cpp
  62. 1 1
      src/anki/gr/vulkan/ShaderProgramImpl.cpp
  63. 3 3
      src/anki/gr/vulkan/TextureImpl.cpp
  64. 1 1
      src/anki/input/InputSdl.cpp
  65. 5 5
      src/anki/misc/ConfigSet.cpp
  66. 16 16
      src/anki/misc/Xml.cpp
  67. 11 11
      src/anki/misc/Xml.h
  68. 3 3
      src/anki/physics/PhysicsBody.cpp
  69. 6 6
      src/anki/physics/PhysicsCollisionShape.cpp
  70. 2 2
      src/anki/physics/PhysicsPlayerController.cpp
  71. 3 3
      src/anki/physics/PhysicsWorld.cpp
  72. 1 1
      src/anki/physics/PhysicsWorld.h
  73. 2 2
      src/anki/renderer/Bloom.cpp
  74. 1 1
      src/anki/renderer/Bloom.h
  75. 1 1
      src/anki/renderer/Clusterer.cpp
  76. 3 3
      src/anki/renderer/Dbg.cpp
  77. 2 2
      src/anki/renderer/DebugDrawer.cpp
  78. 3 3
      src/anki/renderer/DepthDownscale.cpp
  79. 2 2
      src/anki/renderer/DownscaleBlur.cpp
  80. 3 3
      src/anki/renderer/FinalComposite.cpp
  81. 3 3
      src/anki/renderer/ForwardShading.cpp
  82. 2 2
      src/anki/renderer/GBuffer.cpp
  83. 5 5
      src/anki/renderer/Indirect.cpp
  84. 4 4
      src/anki/renderer/LensFlare.cpp
  85. 2 2
      src/anki/renderer/LightBin.cpp
  86. 3 3
      src/anki/renderer/LightShading.cpp
  87. 2 2
      src/anki/renderer/MainRenderer.cpp
  88. 7 5
      src/anki/renderer/Renderer.cpp
  89. 2 0
      src/anki/renderer/Renderer.h
  90. 1 1
      src/anki/renderer/ScreenSpaceLensFlare.cpp
  91. 1 1
      src/anki/renderer/ShadowMapping.cpp
  92. 3 3
      src/anki/renderer/Ssao.cpp
  93. 2 2
      src/anki/renderer/TemporalAA.cpp
  94. 1 1
      src/anki/renderer/Tonemapping.cpp
  95. 3 3
      src/anki/renderer/Volumetric.cpp
  96. 2 2
      src/anki/resource/Animation.cpp
  97. 1 1
      src/anki/resource/AsyncLoader.cpp
  98. 2 2
      src/anki/resource/CollisionResource.cpp
  99. 2 2
      src/anki/resource/Common.cpp
  100. 2 2
      src/anki/resource/DummyRsrc.h

+ 5 - 5
bled/Main.cpp

@@ -27,7 +27,7 @@ MyApp* app = nullptr;
 //==============================================================================
 Error MyApp::init()
 {
-	Error err = ErrorCode::NONE;
+	Error err = Error::NONE;
 	ANKI_LOGI("Other init...");
 
 	SceneGraph& scene = app->getSceneGraph();
@@ -60,13 +60,13 @@ Error MyApp::init()
 			// .loadColorGradingTexture("textures/adis/dungeon.ankitex");
 	}
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 //==============================================================================
 Error MyApp::userMainLoop(Bool& quit)
 {
-	Error err = ErrorCode::NONE;
+	Error err = Error::NONE;
 	F32 dist = 0.1;
 	F32 ang = toRad(2.5);
 	F32 scale = 0.01;
@@ -217,7 +217,7 @@ Error MyApp::userMainLoop(Bool& quit)
 //==============================================================================
 Error init(int argc, char* argv[])
 {
-	Error err = ErrorCode::NONE;
+	Error err = Error::NONE;
 
 	// Config
 	Config config;
@@ -252,7 +252,7 @@ Error init(int argc, char* argv[])
 //==============================================================================
 int main(int argc, char* argv[])
 {
-	Error err = ErrorCode::NONE;
+	Error err = Error::NONE;
 
 	err = init(argc, argv);
 

+ 3 - 3
samples/common/Framework.cpp

@@ -27,7 +27,7 @@ Error SampleApp::init(int argc, char** argv)
 
 	ANKI_CHECK(sampleExtraInit());
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 Error SampleApp::userMainLoop(Bool& quit)
@@ -44,7 +44,7 @@ Error SampleApp::userMainLoop(Bool& quit)
 	if(in.getKey(KeyCode::ESCAPE))
 	{
 		quit = true;
-		return ErrorCode::NONE;
+		return Error::NONE;
 	}
 
 	// move the camera
@@ -136,5 +136,5 @@ Error SampleApp::userMainLoop(Bool& quit)
 		mover->rotateLocalX(ROTATE_ANGLE * in.getMousePosition().y() * MOUSE_SENSITIVITY);
 	}
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }

+ 2 - 2
samples/simple_scene/Main.cpp

@@ -16,13 +16,13 @@ public:
 		ScriptResourcePtr script;
 		ANKI_CHECK(getResourceManager().loadResource("assets/scene.lua", script));
 		ANKI_CHECK(getScriptManager().evalString(script->getSource()));
-		return ErrorCode::NONE;
+		return Error::NONE;
 	}
 };
 
 int main(int argc, char* argv[])
 {
-	Error err = ErrorCode::NONE;
+	Error err = Error::NONE;
 
 	MyApp* app = new MyApp;
 	err = app->init(argc, argv);

+ 2 - 2
samples/sponza/Main.cpp

@@ -18,13 +18,13 @@ public:
 		ANKI_CHECK(getScriptManager().evalString(script->getSource()));
 
 		getMainRenderer().getOffscreenRenderer().getVolumetric().setFogParticleColor(Vec3(1.0, 0.9, 0.9) * 0.009);
-		return ErrorCode::NONE;
+		return Error::NONE;
 	}
 };
 
 int main(int argc, char* argv[])
 {
-	Error err = ErrorCode::NONE;
+	Error err = Error::NONE;
 
 	MyApp* app = new MyApp;
 	err = app->init(argc, argv);

+ 6 - 6
sandbox/Main.cpp

@@ -29,7 +29,7 @@ Error MyApp::init(int argc, char* argv[])
 	if(argc < 3)
 	{
 		ANKI_LOGE("usage: %s /path/to/config.xml relative/path/to/scene.lua", argv[0]);
-		return ErrorCode::USER_DATA;
+		return Error::USER_DATA;
 	}
 
 	// Config
@@ -82,7 +82,7 @@ Error MyApp::init(int argc, char* argv[])
 	pnode->addChild(&cam);
 #endif
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 Error MyApp::userMainLoop(Bool& quit)
@@ -100,7 +100,7 @@ Error MyApp::userMainLoop(Bool& quit)
 	if(in.getKey(KeyCode::ESCAPE))
 	{
 		quit = true;
-		return ErrorCode::NONE;
+		return Error::NONE;
 	}
 
 	// move the camera
@@ -200,15 +200,15 @@ Error MyApp::userMainLoop(Bool& quit)
 	if(m_profile && getGlobalTimestamp() == 500)
 	{
 		quit = true;
-		return ErrorCode::NONE;
+		return Error::NONE;
 	}
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 int main(int argc, char* argv[])
 {
-	Error err = ErrorCode::NONE;
+	Error err = Error::NONE;
 
 	app = new MyApp;
 	err = app->init(argc, argv);

+ 1 - 0
src/anki/Gr.h

@@ -16,6 +16,7 @@
 #include <anki/gr/Fence.h>
 #include <anki/gr/GrManager.h>
 #include <anki/gr/GrObjectCache.h>
+#include <anki/gr/RenderGraph.h>
 
 /// @defgroup graphics Graphics API abstraction
 

+ 5 - 5
src/anki/collision/CompoundShape.cpp

@@ -25,7 +25,7 @@ F32 CompoundShape::testPlane(const Plane& p) const
 		F32 a = cs.testPlane(p);
 		minv = min(minv, a);
 		maxv = max(maxv, a);
-		return ErrorCode::NONE;
+		return Error::NONE;
 	});
 	(void)err;
 
@@ -45,7 +45,7 @@ void CompoundShape::accept(MutableVisitor& v)
 {
 	Error err = iterateShapes([&](CollisionShape& cs) -> Error {
 		cs.accept(v);
-		return ErrorCode::NONE;
+		return Error::NONE;
 	});
 	(void)err;
 }
@@ -54,7 +54,7 @@ void CompoundShape::accept(ConstVisitor& v) const
 {
 	Error err = iterateShapes([&](const CollisionShape& cs) -> Error {
 		cs.accept(v);
-		return ErrorCode::NONE;
+		return Error::NONE;
 	});
 	(void)err;
 }
@@ -63,7 +63,7 @@ void CompoundShape::transform(const Transform& trf)
 {
 	Error err = iterateShapes([&](CollisionShape& cs) -> Error {
 		cs.transform(trf);
-		return ErrorCode::NONE;
+		return Error::NONE;
 	});
 	(void)err;
 }
@@ -81,7 +81,7 @@ void CompoundShape::computeAabb(Aabb& out) const
 			minv[i] = min(minv[i], aabb.getMin()[i]);
 			maxv[i] = max(maxv[i], aabb.getMax()[i]);
 		}
-		return ErrorCode::NONE;
+		return Error::NONE;
 	});
 	(void)err;
 

+ 1 - 1
src/anki/collision/CompoundShape.h

@@ -57,7 +57,7 @@ private:
 template<typename TFunc>
 inline Error CompoundShape::iterateShapes(TFunc f) const
 {
-	Error err = ErrorCode::NONE;
+	Error err = Error::NONE;
 	U count = 0;
 	const Chunk* chunk = &m_dflt;
 

+ 2 - 2
src/anki/collision/Tests.cpp

@@ -272,10 +272,10 @@ static Bool tcx(const CollisionShape& a, const CollisionShape& b)
 		if(testCollisionShapes(cs, b))
 		{
 			inside = true;
-			return ErrorCode::FUNCTION_FAILED;
+			return Error::FUNCTION_FAILED;
 		}
 
-		return ErrorCode::NONE;
+		return Error::NONE;
 	});
 	(void)err;
 

+ 3 - 3
src/anki/core/App.cpp

@@ -307,7 +307,7 @@ Error App::initInternal(const ConfigSet& config_, AllocAlignedCallback allocCb,
 	ANKI_CHECK(m_script->init(m_allocCb, m_allocCbData, m_scene, m_renderer));
 
 	ANKI_CORE_LOGI("Application initialized");
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 Error App::initDirs(const ConfigSet& cfg)
@@ -367,7 +367,7 @@ Error App::initDirs(const ConfigSet& cfg)
 	createDirectory(cacheDir.c_str());
 #endif
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 Error App::mainLoop()
@@ -428,7 +428,7 @@ Error App::mainLoop()
 		ANKI_TRACE_STOP_FRAME();
 	}
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 } // end namespace anki

+ 1 - 1
src/anki/core/App.h

@@ -102,7 +102,7 @@ public:
 	virtual ANKI_USE_RESULT Error userMainLoop(Bool& quit)
 	{
 		// Do nothing
-		return ErrorCode::NONE;
+		return Error::NONE;
 	}
 
 	Input& getInput()

+ 4 - 4
src/anki/core/NativeWindowSdl.cpp

@@ -19,7 +19,7 @@ Error NativeWindow::init(NativeWindowInitInfo& init, HeapAllocator<U8>& alloc)
 	if(SDL_Init(INIT_SUBSYSTEMS) != 0)
 	{
 		ANKI_CORE_LOGE("SDL_Init() failed");
-		return ErrorCode::FUNCTION_FAILED;
+		return Error::FUNCTION_FAILED;
 	}
 
 	//
@@ -36,7 +36,7 @@ Error NativeWindow::init(NativeWindowInitInfo& init, HeapAllocator<U8>& alloc)
 		|| SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, init.m_doubleBuffer))
 	{
 		ANKI_CORE_LOGE("SDL_GL_SetAttribute() failed");
-		return ErrorCode::FUNCTION_FAILED;
+		return Error::FUNCTION_FAILED;
 	}
 #endif
 
@@ -60,7 +60,7 @@ Error NativeWindow::init(NativeWindowInitInfo& init, HeapAllocator<U8>& alloc)
 	if(m_impl->m_window == nullptr)
 	{
 		ANKI_CORE_LOGE("SDL_CreateWindow() failed");
-		return ErrorCode::FUNCTION_FAILED;
+		return Error::FUNCTION_FAILED;
 	}
 
 	// Set the size after loading a fullscreen window
@@ -79,7 +79,7 @@ Error NativeWindow::init(NativeWindowInitInfo& init, HeapAllocator<U8>& alloc)
 	}
 
 	ANKI_CORE_LOGI("SDL window created");
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void NativeWindow::destroy()

+ 1 - 1
src/anki/core/StagingGpuMemoryManager.cpp

@@ -45,7 +45,7 @@ Error StagingGpuMemoryManager::init(GrManager* gr, const ConfigSet& cfg)
 	gr->getTextureBufferInfo(alignment, maxSize);
 	initBuffer(StagingGpuMemoryType::TEXTURE, alignment, maxSize, BufferUsageBit::TEXTURE_ALL, *gr);
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void StagingGpuMemoryManager::initBuffer(

+ 2 - 2
src/anki/core/StdinListener.cpp

@@ -33,7 +33,7 @@ Error StdinListener::create(HeapAllocator<String>& alloc)
 	m_alloc = alloc;
 	m_thrd.start(this, workingFunc);
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 Error StdinListener::workingFunc(ThreadCallbackInfo& info)
@@ -53,7 +53,7 @@ Error StdinListener::workingFunc(ThreadCallbackInfo& info)
 		self.m_q.getBack().create(alloc, &buff[0]);
 	}
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 String StdinListener::getLine()

+ 6 - 6
src/anki/core/Trace.cpp

@@ -87,7 +87,7 @@ Error TraceManager::create(HeapAllocator<U8> alloc, const CString& cacheDir)
 	if(getenv("ANKI_DISABLE_TRACE") && CString(getenv("ANKI_DISABLE_TRACE")) == "1")
 	{
 		m_disabled = true;
-		return ErrorCode::NONE;
+		return Error::NONE;
 	}
 
 	memset(&m_perFrameCounters[0], 0, sizeof(m_perFrameCounters));
@@ -117,7 +117,7 @@ Error TraceManager::create(HeapAllocator<U8> alloc, const CString& cacheDir)
 		ANKI_CHECK(m_perFrameFile.writeText(fmt, eventNames[i]));
 	}
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void TraceManager::startEvent()
@@ -167,7 +167,7 @@ Error TraceManager::flushCounters()
 {
 	if(ANKI_UNLIKELY(m_disabled))
 	{
-		return ErrorCode::NONE;
+		return Error::NONE;
 	}
 
 	// Write the FPS counter
@@ -194,14 +194,14 @@ Error TraceManager::flushCounters()
 		ANKI_CHECK(m_perFrameFile.writeText("%llu, ", count));
 	}
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 Error TraceManager::flushEvents()
 {
 	if(ANKI_UNLIKELY(m_disabled))
 	{
-		return ErrorCode::NONE;
+		return Error::NONE;
 	}
 
 	// Write the events
@@ -235,7 +235,7 @@ Error TraceManager::flushEvents()
 		ANKI_CHECK(m_perFrameFile.writeText(fmt, F64(ns) / 1000000.0)); // Time in ms
 	}
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void TraceManager::startFrame()

+ 2 - 2
src/anki/event/AnimationEvent.cpp

@@ -27,7 +27,7 @@ Error AnimationEvent::init(const AnimationResourcePtr& anim, SceneNode* movableS
 		movableSceneNode,
 		m_anim->getRepeat() ? Flag::REANIMATE : Flag::NONE);
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 Error AnimationEvent::update(F32 prevUpdateTime, F32 crntTime)
@@ -46,7 +46,7 @@ Error AnimationEvent::update(F32 prevUpdateTime, F32 crntTime)
 	trf.setScale(scale);
 	move.setLocalTransform(trf);
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 } // end namespace anki

+ 1 - 1
src/anki/event/Event.h

@@ -112,7 +112,7 @@ public:
 		(void)prevUpdateTime;
 		(void)crntTime;
 		kill = true;
-		return ErrorCode::NONE;
+		return Error::NONE;
 	}
 
 protected:

+ 3 - 3
src/anki/event/EventManager.cpp

@@ -17,7 +17,7 @@ EventManager::~EventManager()
 {
 	Error err = iterateEvents([&](Event& event) -> Error {
 		event.setMarkedForDeletion();
-		return ErrorCode::NONE;
+		return Error::NONE;
 	});
 	(void)err;
 
@@ -28,7 +28,7 @@ Error EventManager::create(SceneGraph* scene)
 {
 	ANKI_ASSERT(scene);
 	m_scene = scene;
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 SceneAllocator<U8> EventManager::getSceneAllocator() const
@@ -55,7 +55,7 @@ void EventManager::unregisterEvent(List<Event*>::Iterator it)
 
 Error EventManager::updateAllEvents(F32 prevUpdateTime, F32 crntTime)
 {
-	Error err = ErrorCode::NONE;
+	Error err = Error::NONE;
 	m_prevUpdateTime = prevUpdateTime;
 	m_crntTime = crntTime;
 

+ 1 - 1
src/anki/event/EventManager.h

@@ -46,7 +46,7 @@ public:
 	template<typename Func>
 	ANKI_USE_RESULT Error iterateEvents(Func func)
 	{
-		Error err = ErrorCode::NONE;
+		Error err = Error::NONE;
 		auto it = m_events.getBegin();
 		auto end = m_events.getEnd();
 		for(; it != end && !err; ++it)

+ 2 - 2
src/anki/event/JitterMoveEvent.cpp

@@ -20,7 +20,7 @@ Error JitterMoveEvent::init(F32 startTime, F32 duration, SceneNode* node)
 
 	m_originalPos = move.getLocalTransform().getOrigin();
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void JitterMoveEvent::setPositionLimits(const Vec4& posMin, const Vec4& posMax)
@@ -49,7 +49,7 @@ Error JitterMoveEvent::update(F32 prevUpdateTime, F32 crntTime)
 
 	move.setLocalTransform(trf);
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 } // end namespace anki

+ 2 - 2
src/anki/event/LightEvent.cpp

@@ -34,7 +34,7 @@ Error LightEvent::init(F32 startTime, F32 duration, SceneNode* light)
 	m_originalDiffColor = lightc.getDiffuseColor();
 	m_originalSpecColor = lightc.getSpecularColor();
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 Error LightEvent::update(F32 prevUpdateTime, F32 crntTime)
@@ -78,7 +78,7 @@ Error LightEvent::update(F32 prevUpdateTime, F32 crntTime)
 
 	lightc.setSpecularColor(m_originalSpecColor + factor * m_specularIntensityMultiplier);
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 } // end namespace anki

+ 1 - 0
src/anki/gr/Common.h

@@ -68,6 +68,7 @@ ANKI_GR_CLASS(Framebuffer)
 ANKI_GR_CLASS(OcclusionQuery)
 ANKI_GR_CLASS(ShaderProgram)
 ANKI_GR_CLASS(Fence)
+ANKI_GR_CLASS(RenderGraph)
 
 #undef ANKI_GR_CLASS
 

+ 1 - 0
src/anki/gr/GrObject.h

@@ -27,6 +27,7 @@ enum GrObjectType : U16
 	TEXTURE,
 	SHADER_PROGRAM,
 	FENCE,
+	RENDER_GRAPH,
 	COUNT
 };
 

+ 75 - 13
src/anki/gr/RenderGraph.cpp

@@ -8,6 +8,7 @@
 #include <anki/gr/Texture.h>
 #include <anki/gr/Framebuffer.h>
 #include <anki/util/BitSet.h>
+#include <anki/util/File.h>
 
 namespace anki
 {
@@ -35,22 +36,87 @@ public:
 	BitSet<MAX_PASSES> m_passIsInBatch = {false};
 };
 
-RenderGraph::RenderGraph(GrManager* gr)
-	: m_gr(gr)
+RenderGraph::RenderGraph(GrManager* manager, U64 hash, GrObjectCache* cache)
+	: GrObject(manager, CLASS_TYPE, hash, cache)
 {
-	ANKI_ASSERT(gr);
+	ANKI_ASSERT(manager);
 
 	m_tmpAlloc = StackAllocator<U8>(m_gr->getAllocator().getMemoryPool().getAllocationCallback(),
 		m_gr->getAllocator().getMemoryPool().getAllocationCallbackUserData(),
 		512_B);
 }
 
+RenderGraph::~RenderGraph()
+{
+	// TODO
+}
+
+template<typename T>
+void RenderGraph::increaseStorage(T*& oldStorage, U32& count, U32& storage)
+{
+	T* newStorage;
+	if(count == storage)
+	{
+		storage = max<U32>(2, storage * 2);
+		newStorage = m_tmpAlloc.newArray<T>(storage);
+		for(U i = 0; i < count; ++i)
+		{
+			newStorage[i] = oldStorage[i];
+		}
+	}
+	else
+	{
+		newStorage = oldStorage;
+	}
+
+	++count;
+	oldStorage = newStorage;
+}
+
+void RenderGraph::reset()
+{
+	for(U i = 0; i < m_renderTargetsCount; ++i)
+	{
+		m_renderTargets[i].m_tex.reset(nullptr);
+	}
+	m_renderTargetsCount = 0;
+	m_renderTargetsStorage = 0;
+
+	// for(Pass* pass : m_passes)
+}
+
+Error RenderGraph::dumpDependencyDotFile(const BakeContext& ctx, CString path) const
+{
+	File file;
+	ANKI_CHECK(file.open(StringAuto(m_tmpAlloc).sprintf("%s/rgraph.dot", &path[0]).toCString(), FileOpenFlag::WRITE));
+
+	ANKI_CHECK(file.writeText("digraph {\n"));
+
+	for(U batchIdx = 0; batchIdx < ctx.m_batches.getSize(); ++batchIdx)
+	{
+		ANKI_CHECK(file.writeText("\tsubgraph cluster_%u {\n", batchIdx));
+		ANKI_CHECK(file.writeText("\t\tlabel=\"batch_%u\";\n", batchIdx));
+
+		for(const Pass* pass : ctx.m_batches[batchIdx]->m_passes)
+		{
+			for(const Pass* dep : pass->m_dependsOn)
+			{
+				ANKI_CHECK(file.writeText("\t\t%s->%s;\n", &pass->m_name[0], &dep->m_name[0]));
+			}
+		}
+
+		ANKI_CHECK(file.writeText("\t}\n"));
+	}
+
+	ANKI_CHECK(file.writeText("}"));
+	return Error::NONE;
+}
+
 RenderGraphHandle RenderGraph::pushRenderTarget(CString name, TexturePtr tex, Bool imported)
 {
-	const PtrSize crntSize = m_renderTargets.getSize();
-	m_renderTargets.resize(m_tmpAlloc, crntSize + 1);
+	increaseStorage(m_renderTargets, m_renderTargetsCount, m_renderTargetsStorage);
 
-	RenderTarget& target = m_renderTargets.getBack();
+	RenderTarget& target = m_renderTargets[m_renderTargetsCount - 1];
 	target.m_imported = imported;
 	target.m_tex = tex;
 
@@ -65,7 +131,7 @@ RenderGraphHandle RenderGraph::pushRenderTarget(CString name, TexturePtr tex, Bo
 		strcpy(&target.m_name[0], NA);
 	}
 
-	return crntSize & TEXTURE_TYPE;
+	return (m_renderTargetsCount - 1) & TEXTURE_TYPE;
 }
 
 RenderGraphHandle RenderGraph::importRenderTarget(CString name, TexturePtr tex)
@@ -238,19 +304,15 @@ void RenderGraph::bake()
 	}
 
 	// Find out what barriers we need between passes
-	/*
-	for(batch : batches)
+	/*for(PassBatch& batch : ctx.m_batches)
 	{
-		consumers = gatherConsumers(batch);
-
 		for(c : consumers)
 		{
 			lastProducer = findLastProducer(c);
 		}
 
 
-	}
-	*/
+	}*/
 }
 
 } // end namespace anki

+ 22 - 5
src/anki/gr/RenderGraph.h

@@ -5,7 +5,7 @@
 
 #pragma once
 
-#include <anki/gr/Common.h>
+#include <anki/gr/GrObject.h>
 #include <anki/gr/Enums.h>
 #include <anki/util/HashMap.h>
 
@@ -51,10 +51,14 @@ public:
 };
 
 /// XXX
-class RenderGraph
+class RenderGraph final : public GrObject
 {
+	ANKI_GR_OBJECT
+
 public:
-	RenderGraph(GrManager* gr);
+	static const GrObjectType CLASS_TYPE = GrObjectType::RENDER_GRAPH;
+
+	RenderGraph(GrManager* manager, U64 hash, GrObjectCache* cache);
 
 	// Non-copyable
 	RenderGraph(const RenderGraph&) = delete;
@@ -64,6 +68,11 @@ public:
 	// Non-copyable
 	RenderGraph& operator=(const RenderGraph&) = delete;
 
+	void init()
+	{
+		// Do nothing, implement the method for the interface
+	}
+
 	/// @name 1st step methods
 	/// @{
 	RenderGraphHandle importRenderTarget(CString name, TexturePtr tex);
@@ -143,7 +152,7 @@ private:
 		U32 m_texturesInUse = 0;
 	};
 
-	HashMap<TextureInitInfo, RenderTargetCacheEntry*> m_renderTargetCache; ///< Non-imported render targets.
+	HashMap<TextureInitInfo, RenderTargetCacheEntry*> m_renderTargetCache; ///< Imported render targets.
 	HashMap<FramebufferInitInfo, FramebufferPtr> m_framebufferCache;
 
 	class RenderTarget
@@ -154,7 +163,9 @@ private:
 		Array<char, MAX_GR_OBJECT_NAME_LENGTH + 1> m_name;
 	};
 
-	DynamicArray<RenderTarget> m_renderTargets;
+	RenderTarget* m_renderTargets = nullptr;
+	U32 m_renderTargetsCount = 0;
+	U32 m_renderTargetsStorage = 0;
 
 	/// Render pass or compute job.
 	class Pass
@@ -177,6 +188,12 @@ private:
 	Bool passHasUnmetDependencies(const BakeContext& ctx, const Pass& pass) const;
 
 	static Bool passADependsOnB(const Pass& a, const Pass& b);
+
+	/// Dump the dependency graph into a file.
+	ANKI_USE_RESULT Error dumpDependencyDotFile(const BakeContext& ctx, CString path) const;
+
+	template<typename T>
+	void increaseStorage(T*& oldStorage, U32& count, U32& storage);
 };
 /// @}
 

+ 2 - 2
src/anki/gr/common/ClassGpuAllocator.cpp

@@ -160,7 +160,7 @@ Error ClassGpuAllocator::createChunk(Class& cl, Chunk*& chunk)
 
 	cl.m_inUseChunks.pushBack(chunk);
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void ClassGpuAllocator::destroyChunk(Class& cl, Chunk& chunk)
@@ -207,7 +207,7 @@ Error ClassGpuAllocator::allocate(PtrSize size, U alignment, ClassGpuAllocatorHa
 
 	ANKI_ASSERT(handle.m_memory && handle.m_chunk);
 	ANKI_ASSERT(isAligned(alignment, handle.m_offset));
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void ClassGpuAllocator::free(ClassGpuAllocatorHandle& handle)

+ 2 - 2
src/anki/gr/common/FrameGpuAllocator.cpp

@@ -45,7 +45,7 @@ Error FrameGpuAllocator::allocate(PtrSize originalSize, PtrSize& outOffset)
 {
 	ANKI_ASSERT(isCreated());
 	ANKI_ASSERT(originalSize > 0);
-	Error err = ErrorCode::NONE;
+	Error err = Error::NONE;
 
 	// Align size
 	PtrSize size = getAlignedRoundUp(m_alignment, originalSize);
@@ -72,7 +72,7 @@ Error FrameGpuAllocator::allocate(PtrSize originalSize, PtrSize& outOffset)
 	else
 	{
 		outOffset = MAX_PTR_SIZE;
-		err = ErrorCode::OUT_OF_MEMORY;
+		err = Error::OUT_OF_MEMORY;
 	}
 
 	return err;

+ 1 - 1
src/anki/gr/common/StackGpuAllocator.cpp

@@ -122,7 +122,7 @@ Error StackGpuAllocator::allocate(PtrSize size, StackGpuAllocatorHandle& handle)
 		}
 	} while(retry);
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void StackGpuAllocator::reset()

+ 1 - 1
src/anki/gr/gl/Buffer.cpp

@@ -47,7 +47,7 @@ public:
 		(void)oldState;
 		ANKI_ASSERT(oldState == GlObject::State::TO_BE_CREATED);
 
-		return ErrorCode::NONE;
+		return Error::NONE;
 	}
 };
 

+ 41 - 41
src/anki/gr/gl/CommandBuffer.cpp

@@ -104,7 +104,7 @@ void CommandBuffer::bindVertexBuffer(
 		{
 			glBindVertexBuffer(m_binding, m_buff->m_impl->getGlName(), m_offset, m_stride);
 			glVertexBindingDivisor(m_binding, (m_instanced) ? 1 : 0);
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -143,7 +143,7 @@ void CommandBuffer::setVertexAttribute(U32 location, U32 buffBinding, const Pixe
 		{
 			glVertexAttribFormat(m_location, m_compSize, m_fmt, m_normalized, m_relativeOffset);
 			glVertexAttribBinding(m_location, m_buffBinding);
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -174,7 +174,7 @@ void CommandBuffer::bindIndexBuffer(BufferPtr buff, PtrSize offset, IndexType ty
 		Error operator()(GlState& state)
 		{
 			glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_buff->m_impl->getGlName());
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -209,7 +209,7 @@ void CommandBuffer::setPrimitiveRestart(Bool enable)
 				glDisable(GL_PRIMITIVE_RESTART);
 			}
 
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -234,7 +234,7 @@ void CommandBuffer::setViewport(U16 minx, U16 miny, U16 maxx, U16 maxy)
 		Error operator()(GlState& state)
 		{
 			glViewport(m_value[0], m_value[1], m_value[2], m_value[3]);
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -264,7 +264,7 @@ void CommandBuffer::setScissor(U16 minx, U16 miny, U16 maxx, U16 maxy)
 				state.m_scissor = m_value;
 				glScissor(m_value[0], m_value[1], m_value[2], m_value[3]);
 			}
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -289,7 +289,7 @@ void CommandBuffer::setFillMode(FillMode mode)
 		Error operator()(GlState& state)
 		{
 			glPolygonMode(GL_FRONT_AND_BACK, m_fillMode);
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -314,7 +314,7 @@ void CommandBuffer::setCullMode(FaceSelectionBit mode)
 		Error operator()(GlState& state)
 		{
 			glCullFace(m_mode);
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -350,7 +350,7 @@ void CommandBuffer::setPolygonOffset(F32 factor, F32 units)
 				glPolygonOffset(m_factor, m_units);
 			}
 
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -384,7 +384,7 @@ void CommandBuffer::setStencilOperations(FaceSelectionBit face,
 		Error operator()(GlState& state)
 		{
 			glStencilOpSeparate(m_face, m_stencilFail, m_stencilPassDepthFail, m_stencilPassDepthPass);
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -439,7 +439,7 @@ void CommandBuffer::setStencilWriteMask(FaceSelectionBit face, U32 mask)
 				state.m_stencilWriteMask[0] = state.m_stencilWriteMask[1] = m_mask;
 			}
 
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -470,7 +470,7 @@ void CommandBuffer::setDepthWrite(Bool enable)
 		{
 			glDepthMask(m_enable);
 			state.m_depthWriteMask = m_enable;
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -495,7 +495,7 @@ void CommandBuffer::setDepthCompareOperation(CompareOperation op)
 		Error operator()(GlState& state)
 		{
 			glDepthFunc(m_op);
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -535,7 +535,7 @@ void CommandBuffer::setColorChannelWriteMask(U32 attachment, ColorBit mask)
 
 			state.m_colorWriteMasks[m_attachment] = {{r, g, b, a}};
 
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -569,7 +569,7 @@ void CommandBuffer::setBlendFactors(
 		Error operator()(GlState&)
 		{
 			glBlendFuncSeparatei(m_attachment, m_srcRgb, m_dstRgb, m_srcA, m_dstA);
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -602,7 +602,7 @@ void CommandBuffer::setBlendOperation(U32 attachment, BlendOperation funcRgb, Bl
 		Error operator()(GlState&)
 		{
 			glBlendEquationSeparatei(m_attachment, m_funcRgb, m_funcA);
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -639,7 +639,7 @@ void CommandBuffer::bindTexture(U32 set, U32 binding, TexturePtr tex, DepthStenc
 			{
 				glBindSampler(m_unit, 0);
 			}
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -672,7 +672,7 @@ void CommandBuffer::bindTextureAndSampler(
 		{
 			glBindTextureUnit(m_unit, m_tex->m_impl->getGlName());
 			glBindSampler(m_unit, m_sampler->m_impl->getGlName());
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -704,7 +704,7 @@ void CommandBuffer::bindUniformBuffer(U32 set, U32 binding, BufferPtr buff, PtrS
 		Error operator()(GlState&)
 		{
 			m_buff->m_impl->bind(GL_UNIFORM_BUFFER, m_binding, m_offset, m_range);
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -739,7 +739,7 @@ void CommandBuffer::bindStorageBuffer(U32 set, U32 binding, BufferPtr buff, PtrS
 		Error operator()(GlState&)
 		{
 			m_buff->m_impl->bind(GL_SHADER_STORAGE_BUFFER, m_binding, m_offset, m_range);
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -778,7 +778,7 @@ void CommandBuffer::bindImage(U32 set, U32 binding, TexturePtr img, U32 level)
 				0,
 				GL_READ_WRITE,
 				m_img->m_impl->m_internalFormat);
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -821,7 +821,7 @@ void CommandBuffer::bindTextureBuffer(
 			const GLuint tex = state.m_texBuffTextures[m_set][m_binding];
 			glTextureBufferRange(tex, m_fmt, m_buff->m_impl->getGlName(), m_offset, m_range);
 
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -854,7 +854,7 @@ void CommandBuffer::bindShaderProgram(ShaderProgramPtr prog)
 		Error operator()(GlState&)
 		{
 			glUseProgram(m_prog->m_impl->getGlName());
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -889,7 +889,7 @@ void CommandBuffer::beginRenderPass(FramebufferPtr fb, U16 minx, U16 miny, U16 m
 		Error operator()(GlState& state)
 		{
 			m_fb->m_impl->bind(state, m_renderArea[0], m_renderArea[1], m_renderArea[2], m_renderArea[3]);
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -915,7 +915,7 @@ void CommandBuffer::endRenderPass()
 		Error operator()(GlState&)
 		{
 			m_fb->endRenderPass();
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -952,7 +952,7 @@ void CommandBuffer::drawElements(
 
 			ANKI_TRACE_INC_COUNTER(GR_DRAWCALLS, 1);
 			ANKI_TRACE_INC_COUNTER(GR_VERTICES, m_info.m_instanceCount * m_info.m_count);
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -997,7 +997,7 @@ void CommandBuffer::drawArrays(PrimitiveTopology topology, U32 count, U32 instan
 
 			ANKI_TRACE_INC_COUNTER(GR_DRAWCALLS, 1);
 			ANKI_TRACE_INC_COUNTER(GR_VERTICES, m_info.m_instanceCount * m_info.m_count);
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -1043,7 +1043,7 @@ void CommandBuffer::drawElementsIndirect(
 				m_topology, m_indexType, numberToPtr<void*>(m_offset), m_drawCount, sizeof(DrawElementsIndirectInfo));
 
 			glBindBuffer(GL_DRAW_INDIRECT_BUFFER, 0);
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -1086,7 +1086,7 @@ void CommandBuffer::drawArraysIndirect(
 				m_topology, numberToPtr<void*>(m_offset), m_drawCount, sizeof(DrawArraysIndirectInfo));
 
 			glBindBuffer(GL_DRAW_INDIRECT_BUFFER, 0);
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -1111,7 +1111,7 @@ void CommandBuffer::dispatchCompute(U32 groupCountX, U32 groupCountY, U32 groupC
 		Error operator()(GlState&)
 		{
 			glDispatchCompute(m_size[0], m_size[1], m_size[2]);
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -1140,7 +1140,7 @@ void CommandBuffer::beginOcclusionQuery(OcclusionQueryPtr query)
 		Error operator()(GlState&)
 		{
 			m_handle->m_impl->begin();
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -1162,7 +1162,7 @@ void CommandBuffer::endOcclusionQuery(OcclusionQueryPtr query)
 		Error operator()(GlState&)
 		{
 			m_handle->m_impl->end();
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -1194,7 +1194,7 @@ void CommandBuffer::copyBufferToTextureSurface(
 		Error operator()(GlState& state)
 		{
 			m_tex->m_impl->writeSurface(m_surf, m_buff->m_impl->getGlName(), m_offset, m_range);
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -1230,7 +1230,7 @@ void CommandBuffer::copyBufferToTextureVolume(
 		Error operator()(GlState& state)
 		{
 			m_tex->m_impl->writeVolume(m_vol, m_buff->m_impl->getGlName(), m_offset, m_range);
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -1266,7 +1266,7 @@ void CommandBuffer::copyBufferToBuffer(
 		Error operator()(GlState& state)
 		{
 			m_dst->m_impl->write(m_src->m_impl->getGlName(), m_srcOffset, m_dstOffset, m_range);
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -1297,7 +1297,7 @@ void CommandBuffer::generateMipmaps2d(TexturePtr tex, U face, U layer)
 		Error operator()(GlState&)
 		{
 			m_tex->m_impl->generateMipmaps2d(m_face, m_layer);
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -1368,7 +1368,7 @@ void CommandBuffer::copyTextureSurfaceToTextureSurface(
 		Error operator()(GlState&)
 		{
 			TextureImpl::copy(*m_src->m_impl, m_srcSurf, *m_dest->m_impl, m_destSurf);
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -1392,7 +1392,7 @@ void CommandBuffer::setBufferBarrier(
 		Error operator()(GlState&)
 		{
 			glMemoryBarrier(m_barrier);
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -1474,7 +1474,7 @@ void CommandBuffer::clearTextureSurface(
 		Error operator()(GlState&)
 		{
 			m_tex->m_impl->clear(m_surf, m_val, m_aspect);
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -1503,7 +1503,7 @@ void CommandBuffer::fillBuffer(BufferPtr buff, PtrSize offset, PtrSize size, U32
 		Error operator()(GlState&)
 		{
 			m_buff->m_impl->fill(m_offset, m_size, m_value);
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -1537,7 +1537,7 @@ void CommandBuffer::writeOcclusionQueryResultToBuffer(OcclusionQueryPtr query, P
 			glGetQueryObjectuiv(m_query->m_impl->getGlName(), GL_QUERY_RESULT, numberToPtr<GLuint*>(m_offset));
 			glBindBuffer(GL_QUERY_BUFFER, 0);
 
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 

+ 5 - 5
src/anki/gr/gl/CommandBufferImpl.cpp

@@ -66,7 +66,7 @@ Error CommandBufferImpl::executeAllCommands()
 	m_executed = true;
 #endif
 
-	Error err = ErrorCode::NONE;
+	Error err = Error::NONE;
 	GlState& state = m_manager->getImplementation().getState();
 
 	GlCommand* command = m_firstCommand;
@@ -213,7 +213,7 @@ void CommandBufferImpl::flushDrawcall(CommandBuffer& cmdb)
 		Error operator()(GlState&)
 		{
 			glStencilFuncSeparate(m_face, m_func, m_ref, m_compareMask);
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -250,7 +250,7 @@ void CommandBufferImpl::flushDrawcall(CommandBuffer& cmdb)
 			{
 				glDisable(GL_DEPTH_TEST);
 			}
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -279,7 +279,7 @@ void CommandBufferImpl::flushDrawcall(CommandBuffer& cmdb)
 			{
 				glDisable(GL_STENCIL_TEST);
 			}
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -313,7 +313,7 @@ void CommandBufferImpl::flushDrawcall(CommandBuffer& cmdb)
 					glDisablei(GL_BLEND, i);
 				}
 			}
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 

+ 2 - 2
src/anki/gr/gl/Fence.cpp

@@ -73,7 +73,7 @@ Bool Fence::clientWait(F64 seconds)
 			else
 			{
 				ANKI_ASSERT(out == GL_WAIT_FAILED);
-				return ErrorCode::FUNCTION_FAILED;
+				return Error::FUNCTION_FAILED;
 			}
 
 			if(m_barrier)
@@ -81,7 +81,7 @@ Bool Fence::clientWait(F64 seconds)
 				m_barrier->wait();
 			}
 
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 

+ 1 - 1
src/anki/gr/gl/FenceImpl.cpp

@@ -28,7 +28,7 @@ FenceImpl::~FenceImpl()
 		Error operator()(GlState&)
 		{
 			glDeleteSync(m_fence);
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 

+ 3 - 3
src/anki/gr/gl/FramebufferImpl.cpp

@@ -23,7 +23,7 @@ Error FramebufferImpl::init(const FramebufferInitInfo& init)
 	if(m_in.m_colorAttachmentCount == 1 && !m_in.m_colorAttachments[0].m_texture.isCreated())
 	{
 		m_bindDefault = true;
-		return ErrorCode::NONE;
+		return Error::NONE;
 	}
 
 	m_bindDefault = false;
@@ -104,11 +104,11 @@ Error FramebufferImpl::init(const FramebufferInitInfo& init)
 	if(status != GL_FRAMEBUFFER_COMPLETE)
 	{
 		ANKI_GL_LOGE("FBO is incomplete. Status: 0x%x", status);
-		return ErrorCode::FUNCTION_FAILED;
+		return Error::FUNCTION_FAILED;
 	}
 
 	glBindFramebuffer(GL_FRAMEBUFFER, 0);
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void FramebufferImpl::attachTextureInternal(

+ 3 - 3
src/anki/gr/gl/GlObject.cpp

@@ -22,7 +22,7 @@ GlObject::GlObject(GrManager* manager)
 
 Error GlObject::serializeRenderingThread()
 {
-	Error err = ErrorCode::NONE;
+	Error err = Error::NONE;
 	State state = State(m_state.load());
 	ANKI_ASSERT(state != State::NEW);
 
@@ -35,7 +35,7 @@ Error GlObject::serializeRenderingThread()
 
 		if(state == State::ERROR)
 		{
-			err = ErrorCode::UNKNOWN;
+			err = Error::UNKNOWN;
 		}
 	}
 
@@ -59,7 +59,7 @@ public:
 	Error operator()(GlState&)
 	{
 		m_callback(1, &m_glName);
-		return ErrorCode::NONE;
+		return Error::NONE;
 	}
 };
 

+ 1 - 1
src/anki/gr/gl/GrManager.cpp

@@ -34,7 +34,7 @@ Error GrManager::init(GrManagerInitInfo& init)
 	m_impl.reset(m_alloc.newInstance<GrManagerImpl>(this));
 	ANKI_CHECK(m_impl->init(init));
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void GrManager::beginFrame()

+ 1 - 1
src/anki/gr/gl/GrManagerImpl.cpp

@@ -53,7 +53,7 @@ Error GrManagerImpl::init(GrManagerInitInfo& init)
 	m_thread->start();
 	m_thread->syncClientServer();
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 } // end namespace anki

+ 5 - 5
src/anki/gr/gl/GrManagerImplSdl.cpp

@@ -44,7 +44,7 @@ public:
 			if(SDL_GL_SetAttribute(SDL_GL_CONTEXT_FLAGS, SDL_GL_CONTEXT_DEBUG_FLAG))
 			{
 				ANKI_GL_LOGE("SDL_GL_SetAttribute() failed");
-				return ErrorCode::FUNCTION_FAILED;
+				return Error::FUNCTION_FAILED;
 			}
 		}
 
@@ -53,7 +53,7 @@ public:
 			|| SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE))
 		{
 			ANKI_GL_LOGE("SDL_GL_SetAttribute() failed");
-			return ErrorCode::FUNCTION_FAILED;
+			return Error::FUNCTION_FAILED;
 		}
 
 		// Create context
@@ -61,7 +61,7 @@ public:
 		if(m_context == nullptr)
 		{
 			ANKI_GL_LOGE("SDL_GL_CreateContext() failed");
-			return ErrorCode::FUNCTION_FAILED;
+			return Error::FUNCTION_FAILED;
 		}
 
 		// GLEW
@@ -69,11 +69,11 @@ public:
 		if(glewInit() != GLEW_OK)
 		{
 			ANKI_GL_LOGE("GLEW initialization failed");
-			return ErrorCode::FUNCTION_FAILED;
+			return Error::FUNCTION_FAILED;
 		}
 		glGetError();
 
-		return ErrorCode::NONE;
+		return Error::NONE;
 	}
 
 	void pinContextToCurrentThread(Bool pin)

+ 1 - 1
src/anki/gr/gl/OcclusionQuery.cpp

@@ -43,7 +43,7 @@ void OcclusionQuery::init()
 			(void)oldState;
 			ANKI_ASSERT(oldState == GlObject::State::TO_BE_CREATED);
 
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 

+ 5 - 5
src/anki/gr/gl/RenderingThread.cpp

@@ -31,7 +31,7 @@ public:
 	ANKI_USE_RESULT Error operator()(GlState&)
 	{
 		m_renderingThread->m_syncBarrier.wait();
-		return ErrorCode::NONE;
+		return Error::NONE;
 	}
 };
 
@@ -49,7 +49,7 @@ public:
 	ANKI_USE_RESULT Error operator()(GlState&)
 	{
 		m_renderingThread->swapBuffersInternal();
-		return ErrorCode::NONE;
+		return Error::NONE;
 	}
 };
 
@@ -59,7 +59,7 @@ class EmptyCommand final : public GlCommand
 public:
 	ANKI_USE_RESULT Error operator()(GlState&)
 	{
-		return ErrorCode::NONE;
+		return Error::NONE;
 	}
 };
 
@@ -101,7 +101,7 @@ void RenderingThread::flushCommandBuffer(CommandBufferPtr cmdb, FencePtr* fence)
 			Error operator()(GlState&)
 			{
 				m_fence->m_impl->m_fence = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0);
-				return ErrorCode::NONE;
+				return Error::NONE;
 			}
 		};
 
@@ -218,7 +218,7 @@ Error RenderingThread::threadCallback(ThreadCallbackInfo& info)
 {
 	RenderingThread* thread = static_cast<RenderingThread*>(info.m_userData);
 	thread->threadLoop();
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void RenderingThread::threadLoop()

+ 1 - 1
src/anki/gr/gl/Sampler.cpp

@@ -45,7 +45,7 @@ void Sampler::init(const SamplerInitInfo& init)
 			(void)oldState;
 			ANKI_ASSERT(oldState == GlObject::State::TO_BE_CREATED);
 
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 

+ 2 - 2
src/anki/gr/gl/ShaderImpl.cpp

@@ -172,10 +172,10 @@ Error ShaderImpl::init(ShaderType type, const CString& source)
 		logShaderErrorCode(compilerLog.toCString(), fullSrc.toCString(), alloc);
 
 		// Compilation failed, set error anyway
-		return ErrorCode::USER_DATA;
+		return Error::USER_DATA;
 	}
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 } // end namespace anki

+ 2 - 2
src/anki/gr/gl/ShaderProgramImpl.cpp

@@ -72,7 +72,7 @@ Error ShaderProgramImpl::initCompute(ShaderPtr comp)
 
 Error ShaderProgramImpl::link(GLuint vert, GLuint frag)
 {
-	Error err = ErrorCode::NONE;
+	Error err = Error::NONE;
 
 	glLinkProgram(m_glName);
 	GLint status = 0;
@@ -92,7 +92,7 @@ Error ShaderProgramImpl::link(GLuint vert, GLuint frag)
 
 		ANKI_GL_LOGE("Link error log follows (vs:%u, fs:%u):\n%s", vert, frag, &infoLogTxt[0]);
 
-		err = ErrorCode::USER_DATA;
+		err = Error::USER_DATA;
 	}
 
 	return err;

+ 1 - 1
src/anki/gr/gl/Texture.cpp

@@ -42,7 +42,7 @@ public:
 		ANKI_ASSERT(oldState == GlObject::State::TO_BE_CREATED);
 		(void)oldState;
 
-		return ErrorCode::NONE;
+		return Error::NONE;
 	}
 };
 

+ 1 - 1
src/anki/gr/gl/TextureImpl.cpp

@@ -79,7 +79,7 @@ public:
 			glDeleteTextures(1, &m_tex);
 		}
 
-		return ErrorCode::NONE;
+		return Error::NONE;
 	}
 };
 

+ 1 - 1
src/anki/gr/vulkan/BufferImpl.cpp

@@ -134,7 +134,7 @@ Error BufferImpl::init(PtrSize size, BufferUsageBit usage, BufferMapAccessBit ac
 	m_access = access;
 	m_size = size;
 	m_usage = usage;
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void* BufferImpl::map(PtrSize offset, PtrSize range, BufferMapAccessBit access)

+ 4 - 4
src/anki/gr/vulkan/CommandBufferFactory.cpp

@@ -42,7 +42,7 @@ Error CommandBufferThreadAllocator::init()
 
 	ANKI_VK_CHECK(vkCreateCommandPool(m_factory->m_dev, &ci, nullptr, &m_pool));
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void CommandBufferThreadAllocator::destroyList(IntrusiveList<MicroCommandBuffer>& list)
@@ -183,7 +183,7 @@ Error CommandBufferThreadAllocator::newCommandBuffer(CommandBufferFlag cmdbFlags
 
 	ANKI_ASSERT(out && out->m_refcount.load() == 0);
 	outPtr.reset(out);
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void CommandBufferThreadAllocator::deleteCommandBuffer(MicroCommandBuffer* ptr)
@@ -212,7 +212,7 @@ Error CommandBufferFactory::init(GrAllocator<U8> alloc, VkDevice dev, uint32_t q
 	m_alloc = alloc;
 	m_dev = dev;
 	m_queueFamily = queueFamily;
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void CommandBufferFactory::destroy()
@@ -285,7 +285,7 @@ Error CommandBufferFactory::newCommandBuffer(ThreadId tid, CommandBufferFlag cmd
 	ANKI_ASSERT(alloc);
 	ANKI_CHECK(alloc->newCommandBuffer(cmdbFlags, ptr));
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 } // end namespace anki

+ 1 - 1
src/anki/gr/vulkan/CommandBufferImpl.cpp

@@ -48,7 +48,7 @@ Error CommandBufferImpl::init(const CommandBufferInitInfo& init)
 		m_activeFb = init.m_framebuffer;
 	}
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void CommandBufferImpl::beginRecording()

+ 1 - 1
src/anki/gr/vulkan/Common.h

@@ -79,7 +79,7 @@ const U DESCRIPTOR_FRAME_BUFFERING = 60 * 5; ///< How many frames worth of descr
 		if((rez = (x)) < 0)                                                     \
 		{                                                                       \
 			ANKI_VK_LOGE("Vulkan function failed (VkResult: %d): %s", rez, #x); \
-			return ErrorCode::FUNCTION_FAILED;                                  \
+			return Error::FUNCTION_FAILED;                                      \
 		}                                                                       \
 	} while(0)
 

+ 9 - 9
src/anki/gr/vulkan/DescriptorSet.cpp

@@ -57,7 +57,7 @@ public:
 			ANKI_CHECK(newSet(hash, bindings, out));
 		}
 
-		return ErrorCode::NONE;
+		return Error::NONE;
 	}
 
 private:
@@ -121,7 +121,7 @@ DSThreadAllocator::~DSThreadAllocator()
 Error DSThreadAllocator::init()
 {
 	ANKI_CHECK(createNewPool());
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 Error DSThreadAllocator::createNewPool()
@@ -155,7 +155,7 @@ Error DSThreadAllocator::createNewPool()
 	m_pools.resize(m_layoutEntry->m_factory->m_alloc, m_pools.getSize() + 1);
 	m_pools[m_pools.getSize() - 1] = pool;
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 const DS* DSThreadAllocator::tryFindSet(U64 hash)
@@ -245,7 +245,7 @@ Error DSThreadAllocator::newSet(
 	writeSet(bindings, *out);
 
 	out_ = out;
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void DSThreadAllocator::writeSet(const Array<AnyBinding, MAX_BINDINGS_PER_DESCRIPTOR_SET>& bindings, const DS& set)
@@ -413,7 +413,7 @@ Error DSLayoutCacheEntry::init(const DescriptorBinding* bindings, U bindingCount
 	m_poolCreateInf.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO;
 	m_poolCreateInf.poolSizeCount = poolSizeCount;
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 Error DSLayoutCacheEntry::getOrCreateThreadAllocator(ThreadId tid, DSThreadAllocator*& alloc)
@@ -461,7 +461,7 @@ Error DSLayoutCacheEntry::getOrCreateThreadAllocator(ThreadId tid, DSThreadAlloc
 	}
 
 	ANKI_ASSERT(alloc);
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void DescriptorSetState::flush(Bool& stateDirty,
@@ -606,7 +606,7 @@ Error DescriptorSetFactory::newDescriptorSetLayout(const DescriptorSetLayoutInit
 	layout.m_handle = cache->m_layoutHandle;
 	layout.m_entry = cache;
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 Error DescriptorSetFactory::newDescriptorSet(ThreadId tid,
@@ -624,7 +624,7 @@ Error DescriptorSetFactory::newDescriptorSet(ThreadId tid,
 	if(!dirty)
 	{
 		ANKI_TRACE_STOP_EVENT(VK_DESCRIPTOR_SET_GET_OR_CREATE);
-		return ErrorCode::NONE;
+		return Error::NONE;
 	}
 
 	DescriptorSetLayout layout = state.m_layout;
@@ -641,7 +641,7 @@ Error DescriptorSetFactory::newDescriptorSet(ThreadId tid,
 	ANKI_ASSERT(set.m_handle != VK_NULL_HANDLE);
 
 	ANKI_TRACE_STOP_EVENT(VK_DESCRIPTOR_SET_GET_OR_CREATE);
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 } // end namespace anki

+ 2 - 2
src/anki/gr/vulkan/FramebufferImpl.cpp

@@ -85,7 +85,7 @@ Error FramebufferImpl::init(const FramebufferInitInfo& init)
 		m_attachedSurfaces[MAX_COLOR_ATTACHMENTS] = init.m_depthStencilAttachment.m_surface;
 	}
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 Error FramebufferImpl::initFbs(const FramebufferInitInfo& init)
@@ -187,7 +187,7 @@ Error FramebufferImpl::initFbs(const FramebufferInitInfo& init)
 		ANKI_VK_CHECK(vkCreateFramebuffer(getDevice(), &ci, nullptr, &m_fbs[0]));
 	}
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void FramebufferImpl::setupAttachmentDescriptor(

+ 1 - 1
src/anki/gr/vulkan/GpuMemoryManager.cpp

@@ -79,7 +79,7 @@ public:
 		ANKI_ASSERT(mem->m_mappedAddress == nullptr);
 		cmem = mem;
 
-		return ErrorCode::NONE;
+		return Error::NONE;
 	}
 
 	void free(ClassGpuAllocatorMemory* cmem)

+ 1 - 1
src/anki/gr/vulkan/GrManager.cpp

@@ -31,7 +31,7 @@ Error GrManager::init(GrManagerInitInfo& init)
 	m_impl.reset(m_alloc.newInstance<GrManagerImpl>(this));
 	ANKI_CHECK(m_impl->init(init));
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void GrManager::beginFrame()

+ 14 - 14
src/anki/gr/vulkan/GrManagerImpl.cpp

@@ -135,10 +135,10 @@ Error GrManagerImpl::init(const GrManagerInitInfo& init)
 	if(err)
 	{
 		ANKI_VK_LOGE("Vulkan initialization failed");
-		return ErrorCode::FUNCTION_FAILED;
+		return Error::FUNCTION_FAILED;
 	}
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 Error GrManagerImpl::initInternal(const GrManagerInitInfo& init)
@@ -245,7 +245,7 @@ Error GrManagerImpl::initInternal(const GrManagerInitInfo& init)
 	m_descrFactory.init(getAllocator(), m_device);
 	m_pplineLayoutFactory.init(getAllocator(), m_device);
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 Error GrManagerImpl::initInstance(const GrManagerInitInfo& init)
@@ -413,7 +413,7 @@ Error GrManagerImpl::initInstance(const GrManagerInitInfo& init)
 	if(count < 1)
 	{
 		ANKI_VK_LOGE("Wrong number of physical devices");
-		return ErrorCode::FUNCTION_FAILED;
+		return Error::FUNCTION_FAILED;
 	}
 
 	count = 1;
@@ -444,7 +444,7 @@ Error GrManagerImpl::initInstance(const GrManagerInitInfo& init)
 
 	vkGetPhysicalDeviceFeatures(m_physicalDevice, &m_devFeatures);
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 Error GrManagerImpl::initDevice(const GrManagerInitInfo& init)
@@ -478,7 +478,7 @@ Error GrManagerImpl::initDevice(const GrManagerInitInfo& init)
 	{
 		ANKI_VK_LOGE("Couldn't find a queue family with graphics+compute+transfer+present."
 					 "The assumption was wrong. The code needs to be reworked");
-		return ErrorCode::FUNCTION_FAILED;
+		return Error::FUNCTION_FAILED;
 	}
 
 	m_queueIdx = desiredFamilyIdx;
@@ -562,7 +562,7 @@ Error GrManagerImpl::initDevice(const GrManagerInitInfo& init)
 		else
 		{
 			ANKI_VK_LOGE("VK_KHR_maintenance1 or VK_AMD_negative_viewport_height required");
-			return ErrorCode::FUNCTION_FAILED;
+			return Error::FUNCTION_FAILED;
 		}
 
 		ANKI_VK_LOGI("Will enable the following device extensions:");
@@ -589,7 +589,7 @@ Error GrManagerImpl::initDevice(const GrManagerInitInfo& init)
 		}
 	}
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 Error GrManagerImpl::initSwapchain(const GrManagerInitInfo& init)
@@ -600,7 +600,7 @@ Error GrManagerImpl::initSwapchain(const GrManagerInitInfo& init)
 	if(surfaceProperties.currentExtent.width == MAX_U32 || surfaceProperties.currentExtent.height == MAX_U32)
 	{
 		ANKI_VK_LOGE("Wrong surface size");
-		return ErrorCode::FUNCTION_FAILED;
+		return Error::FUNCTION_FAILED;
 	}
 	m_surfaceWidth = surfaceProperties.currentExtent.width;
 	m_surfaceHeight = surfaceProperties.currentExtent.height;
@@ -626,7 +626,7 @@ Error GrManagerImpl::initSwapchain(const GrManagerInitInfo& init)
 	if(m_surfaceFormat == VK_FORMAT_UNDEFINED)
 	{
 		ANKI_VK_LOGE("Surface format not found");
-		return ErrorCode::FUNCTION_FAILED;
+		return Error::FUNCTION_FAILED;
 	}
 
 	// Chose present mode
@@ -663,7 +663,7 @@ Error GrManagerImpl::initSwapchain(const GrManagerInitInfo& init)
 	if(presentMode == VK_PRESENT_MODE_MAX_ENUM_KHR)
 	{
 		ANKI_VK_LOGE("Couldn't find a present mode");
-		return ErrorCode::FUNCTION_FAILED;
+		return Error::FUNCTION_FAILED;
 	}
 
 	// Create swapchain
@@ -693,7 +693,7 @@ Error GrManagerImpl::initSwapchain(const GrManagerInitInfo& init)
 	if(count != MAX_FRAMES_IN_FLIGHT)
 	{
 		ANKI_VK_LOGE("Requested a swapchain with %u images but got one with %u", MAX_FRAMES_IN_FLIGHT, count);
-		return ErrorCode::FUNCTION_FAILED;
+		return Error::FUNCTION_FAILED;
 	}
 
 	ANKI_VK_LOGI("Created a swapchain. Image count: %u, present mode: %u", count, presentMode);
@@ -726,7 +726,7 @@ Error GrManagerImpl::initSwapchain(const GrManagerInitInfo& init)
 		ANKI_VK_CHECK(vkCreateImageView(m_device, &ci, nullptr, &m_backbuffers[i].m_imageView));
 	}
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 Error GrManagerImpl::initMemory(const ConfigSet& cfg)
@@ -734,7 +734,7 @@ Error GrManagerImpl::initMemory(const ConfigSet& cfg)
 	vkGetPhysicalDeviceMemoryProperties(m_physicalDevice, &m_memoryProperties);
 	m_gpuMemManager.init(m_physicalDevice, m_device, getAllocator());
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 #if ANKI_GR_MANAGER_DEBUG_MEMMORY

+ 2 - 2
src/anki/gr/vulkan/GrManagerImplSdl.cpp

@@ -26,7 +26,7 @@ Error GrManagerImpl::initSurface(const GrManagerInitInfo& init)
 	if(!SDL_GetWindowWMInfo(init.m_window->getNative().m_window, &wminfo))
 	{
 		ANKI_VK_LOGE("SDL_GetWindowWMInfo() failed");
-		return ErrorCode::NONE;
+		return Error::NONE;
 	}
 
 #if ANKI_OS == ANKI_OS_LINUX
@@ -53,7 +53,7 @@ Error GrManagerImpl::initSurface(const GrManagerInitInfo& init)
 #error TODO
 #endif
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 } // end namespace anki

+ 1 - 1
src/anki/gr/vulkan/OcclusionQueryImpl.cpp

@@ -20,7 +20,7 @@ OcclusionQueryImpl::~OcclusionQueryImpl()
 Error OcclusionQueryImpl::init()
 {
 	ANKI_CHECK(getGrManagerImpl().getQueryAllocator().newQuery(m_handle));
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 OcclusionQueryResult OcclusionQueryImpl::getResult() const

+ 2 - 2
src/anki/gr/vulkan/PipelineCache.cpp

@@ -67,7 +67,7 @@ Error PipelineCache::init(
 
 	ANKI_VK_CHECK(vkCreatePipelineCache(dev, &ci, nullptr, &m_cacheHandle));
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void PipelineCache::destroy(VkDevice dev, VkPhysicalDevice pdev, GrAllocator<U8> alloc)
@@ -116,7 +116,7 @@ Error PipelineCache::destroyInternal(VkDevice dev, VkPhysicalDevice pdev, GrAllo
 
 	m_dumpFilename.destroy(alloc);
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 } // end namespace anki

+ 1 - 1
src/anki/gr/vulkan/PipelineLayout.cpp

@@ -68,7 +68,7 @@ Error PipelineLayoutFactory::newPipelineLayout(
 		layout.m_handle = lay->m_handle;
 	}
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 } // end namespace anki

+ 1 - 1
src/anki/gr/vulkan/QueryExtra.cpp

@@ -74,7 +74,7 @@ Error QueryAllocator::newQuery(QueryAllocationHandle& handle)
 	}
 
 	ANKI_ASSERT(handle == true);
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void QueryAllocator::deleteQuery(QueryAllocationHandle& handle)

+ 1 - 1
src/anki/gr/vulkan/SamplerImpl.cpp

@@ -76,7 +76,7 @@ Error SamplerImpl::init(const SamplerInitInfo& ii)
 	// Create
 	ANKI_VK_CHECK(vkCreateSampler(getDevice(), &ci, nullptr, &m_handle));
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 } // end namespace anki

+ 4 - 4
src/anki/gr/vulkan/ShaderImpl.cpp

@@ -202,7 +202,7 @@ Error ShaderImpl::genSpirv(const CString& source, std::vector<unsigned int>& spi
 	if(!shader.parse(&GLSLANG_LIMITS, 100, false, messages))
 	{
 		logShaderErrorCode(shader.getInfoLog(), source, getAllocator());
-		return ErrorCode::USER_DATA;
+		return Error::USER_DATA;
 	}
 
 	// Setup the program
@@ -212,13 +212,13 @@ Error ShaderImpl::genSpirv(const CString& source, std::vector<unsigned int>& spi
 	if(!program.link(messages))
 	{
 		ANKI_VK_LOGE("glslang failed to link a shader");
-		return ErrorCode::USER_DATA;
+		return Error::USER_DATA;
 	}
 
 	// Gen SPIRV
 	glslang::GlslangToSpv(*program.getIntermediate(stage), spirv);
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 Error ShaderImpl::init(ShaderType shaderType, const CString& source)
@@ -314,7 +314,7 @@ Error ShaderImpl::init(ShaderType shaderType, const CString& source)
 	// Get reflection info
 	doReflection(spirv);
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void ShaderImpl::doReflection(const std::vector<unsigned int>& spirv)

+ 1 - 1
src/anki/gr/vulkan/ShaderProgramImpl.cpp

@@ -168,7 +168,7 @@ Error ShaderProgramImpl::init(const Array<ShaderPtr, U(ShaderType::COUNT)>& shad
 			getDevice(), getGrManagerImpl().getPipelineCache(), 1, &ci, nullptr, &m_computePpline));
 	}
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 } // end namespace anki

+ 3 - 3
src/anki/gr/vulkan/TextureImpl.cpp

@@ -131,7 +131,7 @@ Error TextureImpl::init(const TextureInitInfo& init_, Texture* tex)
 		getGrManagerImpl().flushCommandBuffer(cmdb, nullptr);
 	}
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 VkFormatFeatureFlags TextureImpl::calcFeatures(const TextureInitInfo& init)
@@ -249,7 +249,7 @@ Error TextureImpl::initImage(const TextureInitInfo& init_)
 	if(!supported)
 	{
 		ANKI_VK_LOGE("Unsupported texture format: %u %u", U(init.m_format.m_components), U(init.m_format.m_transform));
-		return ErrorCode::FUNCTION_FAILED;
+		return Error::FUNCTION_FAILED;
 	}
 
 	// Contunue with the creation
@@ -367,7 +367,7 @@ Error TextureImpl::initImage(const TextureInitInfo& init_)
 		ANKI_TRACE_STOP_EVENT(VK_BIND_OBJECT);
 	}
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void TextureImpl::computeBarrierInfo(TextureUsageBit before,

+ 1 - 1
src/anki/input/InputSdl.cpp

@@ -368,7 +368,7 @@ Error Input::handleEvents()
 		moveCursor(Vec2(0.0));
 	}
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void Input::moveCursor(const Vec2& pos)

+ 5 - 5
src/anki/misc/ConfigSet.cpp

@@ -186,7 +186,7 @@ Error ConfigSet::loadFromFile(CString filename)
 		}
 	}
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 Error ConfigSet::saveToFile(CString filename) const
@@ -225,7 +225,7 @@ Error ConfigSet::saveToFile(CString filename) const
 	}
 
 	ANKI_CHECK(file.writeText("</config>\n"));
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 Error ConfigSet::setFromCommandLineArguments(U cmdLineArgsCount, char* cmdLineArgs[])
@@ -239,7 +239,7 @@ Error ConfigSet::setFromCommandLineArguments(U cmdLineArgsCount, char* cmdLineAr
 			if(i + 2 >= cmdLineArgsCount)
 			{
 				ANKI_MISC_LOGE("Wrong number of arguments after -cfg");
-				return ErrorCode::USER_DATA;
+				return Error::USER_DATA;
 			}
 
 			// Get the option
@@ -250,7 +250,7 @@ Error ConfigSet::setFromCommandLineArguments(U cmdLineArgsCount, char* cmdLineAr
 			if(option == nullptr)
 			{
 				ANKI_MISC_LOGE("Option name following -cfg not found: %s", arg);
-				return ErrorCode::USER_DATA;
+				return Error::USER_DATA;
 			}
 
 			// Set the value
@@ -270,7 +270,7 @@ Error ConfigSet::setFromCommandLineArguments(U cmdLineArgsCount, char* cmdLineAr
 		}
 	}
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 } // end namespace anki

+ 16 - 16
src/anki/misc/Xml.cpp

@@ -12,11 +12,11 @@ namespace anki
 
 ANKI_USE_RESULT Error XmlElement::check() const
 {
-	Error err = ErrorCode::NONE;
+	Error err = Error::NONE;
 	if(m_el == nullptr)
 	{
 		ANKI_MISC_LOGE("Empty element");
-		err = ErrorCode::USER_DATA;
+		err = Error::USER_DATA;
 	}
 	return err;
 }
@@ -44,7 +44,7 @@ Error XmlElement::getMat3(Mat3& out) const
 	if(!err && arr.getSize() != 9)
 	{
 		ANKI_MISC_LOGE("Expecting 9 elements for Mat3");
-		err = ErrorCode::USER_DATA;
+		err = Error::USER_DATA;
 	}
 
 	if(!err)
@@ -71,7 +71,7 @@ Error XmlElement::getMat4(Mat4& out) const
 	if(!err && arr.getSize() != 16)
 	{
 		ANKI_MISC_LOGE("Expecting 16 elements for Mat4");
-		err = ErrorCode::USER_DATA;
+		err = Error::USER_DATA;
 	}
 
 	if(!err)
@@ -98,7 +98,7 @@ Error XmlElement::getVec2(Vec2& out) const
 	if(!err && arr.getSize() != 2)
 	{
 		ANKI_MISC_LOGE("Expecting 2 elements for Vec2");
-		err = ErrorCode::USER_DATA;
+		err = Error::USER_DATA;
 	}
 
 	if(!err)
@@ -125,7 +125,7 @@ Error XmlElement::getVec3(Vec3& out) const
 	if(!err && arr.getSize() != 3)
 	{
 		ANKI_MISC_LOGE("Expecting 3 elements for Vec3");
-		err = ErrorCode::USER_DATA;
+		err = Error::USER_DATA;
 	}
 
 	if(!err)
@@ -152,7 +152,7 @@ Error XmlElement::getVec4(Vec4& out) const
 	if(!err && arr.getSize() != 4)
 	{
 		ANKI_MISC_LOGE("Expecting 4 elements for Vec4");
-		err = ErrorCode::USER_DATA;
+		err = Error::USER_DATA;
 	}
 
 	if(!err)
@@ -204,7 +204,7 @@ Error XmlElement::getChildElement(const CString& name, XmlElement& out) const
 	if(!out)
 	{
 		ANKI_MISC_LOGE("Cannot find tag \"%s\"", &name[0]);
-		err = ErrorCode::USER_DATA;
+		err = Error::USER_DATA;
 	}
 
 	return err;
@@ -239,7 +239,7 @@ Error XmlElement::getSiblingElementsCount(U32& out) const
 
 	out = count;
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 Error XmlElement::getAttributeTextOptional(const CString& name, CString& out, Bool& attribPresent) const
@@ -250,7 +250,7 @@ Error XmlElement::getAttributeTextOptional(const CString& name, CString& out, Bo
 	if(!attrib)
 	{
 		attribPresent = false;
-		return ErrorCode::NONE;
+		return Error::NONE;
 	}
 
 	attribPresent = true;
@@ -265,7 +265,7 @@ Error XmlElement::getAttributeTextOptional(const CString& name, CString& out, Bo
 		out = CString();
 	}
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 CString XmlDocument::XML_HEADER = R"(<?xml version="1.0" encoding="UTF-8" ?>)";
@@ -280,7 +280,7 @@ Error XmlDocument::loadFile(const CString& filename, GenericMemoryPoolAllocator<
 
 	ANKI_CHECK(parse(text.toCString(), alloc));
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 Error XmlDocument::parse(const CString& xmlText, GenericMemoryPoolAllocator<U8> alloc)
@@ -292,21 +292,21 @@ Error XmlDocument::parse(const CString& xmlText, GenericMemoryPoolAllocator<U8>
 		ANKI_MISC_LOGE(
 			"Cannot parse file. Reason: %s", ((m_doc.GetErrorStr1() == nullptr) ? "unknown" : m_doc.GetErrorStr1()));
 
-		return ErrorCode::USER_DATA;
+		return Error::USER_DATA;
 	}
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 ANKI_USE_RESULT Error XmlDocument::getChildElement(const CString& name, XmlElement& out) const
 {
-	Error err = ErrorCode::NONE;
+	Error err = Error::NONE;
 	out = XmlElement(m_doc.FirstChildElement(&name[0]), m_alloc);
 
 	if(!out)
 	{
 		ANKI_MISC_LOGE("Cannot find tag \"%s\"", &name[0]);
-		err = ErrorCode::USER_DATA;
+		err = Error::USER_DATA;
 	}
 
 	return err;

+ 11 - 11
src/anki/misc/Xml.h

@@ -75,10 +75,10 @@ public:
 		else
 		{
 			ANKI_MISC_LOGE("Failed to return number. Element: %s", m_el->Value());
-			return ErrorCode::USER_DATA;
+			return Error::USER_DATA;
 		}
 
-		return ErrorCode::NONE;
+		return Error::NONE;
 	}
 
 	/// Get a number of numbers.
@@ -95,7 +95,7 @@ public:
 		else
 		{
 			out = DynamicArrayAuto<T>(m_alloc);
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	}
 
@@ -153,7 +153,7 @@ public:
 		}
 		else
 		{
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	}
 
@@ -172,13 +172,13 @@ public:
 			if(arr.getSize() != 1)
 			{
 				ANKI_MISC_LOGE("Expecting one element for attrib %s", &name[0]);
-				return ErrorCode::USER_DATA;
+				return Error::USER_DATA;
 			}
 
 			out = arr[0];
 		}
 
-		return ErrorCode::NONE;
+		return Error::NONE;
 	}
 
 	/// Get the attribute's value as a vector.
@@ -196,7 +196,7 @@ public:
 			if(arr.getSize() != sizeof(T) / sizeof(out[0]))
 			{
 				ANKI_MISC_LOGE("Expecting %u elements for attrib %s", sizeof(T) / sizeof(out[0]), &name[0]);
-				return ErrorCode::USER_DATA;
+				return Error::USER_DATA;
 			}
 
 			U count = 0;
@@ -206,7 +206,7 @@ public:
 			}
 		}
 
-		return ErrorCode::NONE;
+		return Error::NONE;
 	}
 
 	/// Get the attribute's value as a matrix.
@@ -294,7 +294,7 @@ private:
 		out = DynamicArrayAuto<T>(m_alloc);
 		out.create(list.getSize());
 
-		Error err = ErrorCode::NONE;
+		Error err = Error::NONE;
 		auto it = list.getBegin();
 		auto end = list.getEnd();
 		U i = 0;
@@ -317,11 +317,11 @@ private:
 		if(!found)
 		{
 			ANKI_MISC_LOGE("Attribute not found \"%s\"", &attrib[0]);
-			return ErrorCode::USER_DATA;
+			return Error::USER_DATA;
 		}
 		else
 		{
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	}
 };

+ 3 - 3
src/anki/physics/PhysicsBody.cpp

@@ -47,7 +47,7 @@ Error PhysicsBody::create(const PhysicsBodyInitInfo& init)
 
 		NewtonSceneCollisionSetSubCollisionMatrix(scene, m_sceneCollisionProxy, &trf[0][0]);
 
-		return ErrorCode::NONE;
+		return Error::NONE;
 	}
 	else if(init.m_kinematic)
 	{
@@ -61,7 +61,7 @@ Error PhysicsBody::create(const PhysicsBodyInitInfo& init)
 	if(!m_body)
 	{
 		ANKI_PHYS_LOGE("NewtonCreateXXBody() failed");
-		return ErrorCode::FUNCTION_FAILED;
+		return Error::FUNCTION_FAILED;
 	}
 
 	// Material
@@ -84,7 +84,7 @@ Error PhysicsBody::create(const PhysicsBodyInitInfo& init)
 	// Activate
 	NewtonBodySetSimulationState(m_body, true);
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void PhysicsBody::setTransform(const Transform& trf)

+ 6 - 6
src/anki/physics/PhysicsCollisionShape.cpp

@@ -21,13 +21,13 @@ PhysicsCollisionShape::~PhysicsCollisionShape()
 
 Error PhysicsSphere::create(PhysicsCollisionShapeInitInfo& init, F32 radius)
 {
-	Error err = ErrorCode::NONE;
+	Error err = Error::NONE;
 
 	m_shape = NewtonCreateSphere(m_world->getNewtonWorld(), radius, m_gid++, nullptr);
 	if(!m_shape)
 	{
 		ANKI_PHYS_LOGE("NewtonCreateSphere() failed");
-		err = ErrorCode::FUNCTION_FAILED;
+		err = Error::FUNCTION_FAILED;
 	}
 
 	return err;
@@ -35,13 +35,13 @@ Error PhysicsSphere::create(PhysicsCollisionShapeInitInfo& init, F32 radius)
 
 Error PhysicsBox::create(PhysicsCollisionShapeInitInfo& init, const Vec3& extend)
 {
-	Error err = ErrorCode::NONE;
+	Error err = Error::NONE;
 
 	m_shape = NewtonCreateBox(m_world->getNewtonWorld(), extend.x(), extend.y(), extend.z(), m_gid++, nullptr);
 	if(!m_shape)
 	{
 		ANKI_PHYS_LOGE("NewtonCreateBox() failed");
-		err = ErrorCode::FUNCTION_FAILED;
+		err = Error::FUNCTION_FAILED;
 	}
 
 	return err;
@@ -57,7 +57,7 @@ Error PhysicsTriangleSoup::create(PhysicsCollisionShapeInitInfo& init,
 	if(!m_shape)
 	{
 		ANKI_PHYS_LOGE("NewtonCreateBox() failed");
-		return ErrorCode::FUNCTION_FAILED;
+		return Error::FUNCTION_FAILED;
 	}
 
 	NewtonTreeCollisionBeginBuild(m_shape);
@@ -82,7 +82,7 @@ Error PhysicsTriangleSoup::create(PhysicsCollisionShapeInitInfo& init,
 	const I optimize = 1;
 	NewtonTreeCollisionEndBuild(m_shape, optimize);
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 } // end namespace anki

+ 2 - 2
src/anki/physics/PhysicsPlayerController.cpp

@@ -57,7 +57,7 @@ Error PhysicsPlayerController::create(const PhysicsPlayerControllerInitInfo& ini
 
 	if(m_newtonPlayer == nullptr)
 	{
-		return ErrorCode::FUNCTION_FAILED;
+		return Error::FUNCTION_FAILED;
 	}
 
 	// Set some data
@@ -71,7 +71,7 @@ Error PhysicsPlayerController::create(const PhysicsPlayerControllerInitInfo& ini
 	location.m_posit.m_z = init.m_position.z();
 	NewtonBodySetMatrix(body, &location[0][0]);
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void PhysicsPlayerController::moveToPosition(const Vec4& position)

+ 3 - 3
src/anki/physics/PhysicsWorld.cpp

@@ -55,7 +55,7 @@ PhysicsWorld::~PhysicsWorld()
 
 Error PhysicsWorld::create(AllocAlignedCallback allocCb, void* allocCbData)
 {
-	Error err = ErrorCode::NONE;
+	Error err = Error::NONE;
 
 	m_alloc = HeapAllocator<U8>(allocCb, allocCbData);
 
@@ -68,7 +68,7 @@ Error PhysicsWorld::create(AllocAlignedCallback allocCb, void* allocCbData)
 	if(!m_world)
 	{
 		ANKI_PHYS_LOGE("NewtonCreate() failed");
-		return ErrorCode::FUNCTION_FAILED;
+		return Error::FUNCTION_FAILED;
 	}
 
 	// Set the simplified solver mode (faster but less accurate)
@@ -106,7 +106,7 @@ Error PhysicsWorld::updateAsync(F32 dt)
 	// Update
 	NewtonUpdateAsync(m_world, dt);
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void PhysicsWorld::waitUpdate()

+ 1 - 1
src/anki/physics/PhysicsWorld.h

@@ -113,7 +113,7 @@ private:
 template<typename T, typename... TArgs>
 inline PhysicsPtr<T> PhysicsWorld::newInstance(TArgs&&... args)
 {
-	Error err = ErrorCode::NONE;
+	Error err = Error::NONE;
 	PhysicsPtr<T> out;
 
 	T* ptr = m_alloc.template newInstance<T>(this);

+ 2 - 2
src/anki/renderer/Bloom.cpp

@@ -54,7 +54,7 @@ Error BloomExposure::init(const ConfigSet& config)
 	m_prog->getOrCreateVariant(consts.get(), variant);
 	m_grProg = variant->getProgram();
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void BloomExposure::setPreRunBarriers(RenderingContext& ctx)
@@ -126,7 +126,7 @@ Error BloomUpscale::init(const ConfigSet& config)
 	m_prog->getOrCreateVariant(consts.get(), variant);
 	m_grProg = variant->getProgram();
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void BloomUpscale::setPreRunBarriers(RenderingContext& ctx)

+ 1 - 1
src/anki/renderer/Bloom.h

@@ -116,7 +116,7 @@ private:
 		ANKI_CHECK(m_extractExposure.init(cfg));
 		ANKI_CHECK(m_upscale.init(cfg));
 		ANKI_CHECK(m_sslf.init(cfg));
-		return ErrorCode::NONE;
+		return Error::NONE;
 	}
 };
 

+ 1 - 1
src/anki/renderer/Clusterer.cpp

@@ -19,7 +19,7 @@ public:
 	Error operator()(U32 threadId, PtrSize threadsCount)
 	{
 		m_clusterer->update(threadId, threadsCount, m_frustumChanged);
-		return ErrorCode::NONE;
+		return Error::NONE;
 	}
 };
 

+ 3 - 3
src/anki/renderer/Dbg.cpp

@@ -38,7 +38,7 @@ Error Dbg::init(const ConfigSet& initializer)
 {
 	m_enabled = initializer.getNumber("r.dbg.enabled");
 	m_flags.set(DbgFlag::ALL);
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 Error Dbg::lazyInit()
@@ -67,7 +67,7 @@ Error Dbg::lazyInit()
 	m_drawer = getAllocator().newInstance<DebugDrawer>();
 	ANKI_CHECK(m_drawer->init(m_r));
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 Error Dbg::run(RenderingContext& ctx)
@@ -259,7 +259,7 @@ Error Dbg::run(RenderingContext& ctx)
 
 	m_drawer->finishFrame();
 	cmdb->endRenderPass();
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 Bool Dbg::getDepthTestEnabled() const

+ 2 - 2
src/anki/renderer/DebugDrawer.cpp

@@ -47,7 +47,7 @@ Error DebugDrawer::init(Renderer* r)
 	m_vpMat.setIdentity();
 	m_mvpMat.setIdentity();
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void DebugDrawer::prepareFrame(CommandBufferPtr& jobs)
@@ -388,7 +388,7 @@ void CollisionDebugDrawer::visit(const CompoundShape& cs)
 	CollisionDebugDrawer* self = this;
 	Error err = cs.iterateShapes([&](const CollisionShape& a) -> Error {
 		a.accept(*self);
-		return ErrorCode::NONE;
+		return Error::NONE;
 	});
 	(void)err;
 }

+ 3 - 3
src/anki/renderer/DepthDownscale.cpp

@@ -57,7 +57,7 @@ Error HalfDepth::init(const ConfigSet&)
 	m_prog->getOrCreateVariant(mutations.get(), variant);
 	m_grProg = variant->getProgram();
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void HalfDepth::setPreRunBarriers(RenderingContext& ctx)
@@ -134,7 +134,7 @@ Error QuarterDepth::init(const ConfigSet&)
 	m_prog->getOrCreateVariant(mutations.get(), variant);
 	m_grProg = variant->getProgram();
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void QuarterDepth::setPreRunBarriers(RenderingContext& ctx)
@@ -176,7 +176,7 @@ Error DepthDownscale::initInternal(const ConfigSet& cfg)
 {
 	ANKI_CHECK(m_hd.init(cfg));
 	ANKI_CHECK(m_qd.init(cfg));
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 Error DepthDownscale::init(const ConfigSet& cfg)

+ 2 - 2
src/anki/renderer/DownscaleBlur.cpp

@@ -39,7 +39,7 @@ Error DownscaleBlur::initSubpass(U idx, const UVec2& inputTexSize)
 	fbInit.m_colorAttachments[0].m_loadOperation = AttachmentLoadOperation::DONT_CARE;
 	pass.m_fb = getGrManager().newInstance<Framebuffer>(fbInit);
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 Error DownscaleBlur::init(const ConfigSet& cfg)
@@ -72,7 +72,7 @@ Error DownscaleBlur::initInternal(const ConfigSet&)
 	m_prog->getOrCreateVariant(variant);
 	m_grProg = variant->getProgram();
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void DownscaleBlur::setPreRunBarriers(RenderingContext& ctx)

+ 3 - 3
src/anki/renderer/FinalComposite.cpp

@@ -77,7 +77,7 @@ Error FinalComposite::initInternal(const ConfigSet& config)
 	m_prog->getOrCreateVariant(mutations.get(), consts.get(), variant);
 	m_grProgs[1] = variant->getProgram();
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 Error FinalComposite::init(const ConfigSet& config)
@@ -99,7 +99,7 @@ Error FinalComposite::loadColorGradingTexture(CString filename)
 	ANKI_ASSERT(m_lut->getHeight() == LUT_SIZE);
 	ANKI_ASSERT(m_lut->getDepth() == LUT_SIZE);
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 Error FinalComposite::run(RenderingContext& ctx)
@@ -167,7 +167,7 @@ Error FinalComposite::run(RenderingContext& ctx)
 			TextureSurfaceInfo(0, 0, 0, 0));
 	}
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 } // end namespace anki

+ 3 - 3
src/anki/renderer/ForwardShading.cpp

@@ -58,7 +58,7 @@ Error ForwardShading::initInternal(const ConfigSet&)
 
 	ANKI_CHECK(initVol());
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 Error ForwardShading::initVol()
@@ -76,7 +76,7 @@ Error ForwardShading::initVol()
 	m_vol.m_prog->getOrCreateVariant(consts.get(), variant);
 	m_vol.m_grProg = variant->getProgram();
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void ForwardShading::drawVolumetric(RenderingContext& ctx, CommandBufferPtr cmdb)
@@ -231,7 +231,7 @@ Error ForwardShadingUpscale::initInternal(const ConfigSet& config)
 	fbInit.m_colorAttachments[0].m_loadOperation = AttachmentLoadOperation::LOAD;
 	m_fb = getGrManager().newInstance<Framebuffer>(fbInit);
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void ForwardShadingUpscale::run(RenderingContext& ctx)

+ 2 - 2
src/anki/renderer/GBuffer.cpp

@@ -77,7 +77,7 @@ Error GBuffer::createRt()
 
 	m_fb = getGrManager().newInstance<Framebuffer>(fbInit);
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 Error GBuffer::init(const ConfigSet& initializer)
@@ -96,7 +96,7 @@ Error GBuffer::init(const ConfigSet& initializer)
 Error GBuffer::initInternal(const ConfigSet& initializer)
 {
 	ANKI_CHECK(createRt());
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void GBuffer::buildCommandBuffers(RenderingContext& ctx, U threadId, U threadCount) const

+ 5 - 5
src/anki/renderer/Indirect.cpp

@@ -71,7 +71,7 @@ Error Indirect::initInternal(const ConfigSet& config)
 	if(m_cubemapArrSize < 2)
 	{
 		ANKI_R_LOGE("Too low ir.cubemapTextureArraySize");
-		return ErrorCode::USER_DATA;
+		return Error::USER_DATA;
 	}
 
 	m_cacheEntries.create(getAllocator(), m_cubemapArrSize);
@@ -90,7 +90,7 @@ Error Indirect::initInternal(const ConfigSet& config)
 	sinit.m_repeat = false;
 	m_integrationLutSampler = getGrManager().newInstance<Sampler>(sinit);
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 Error Indirect::loadMesh(CString fname, BufferPtr& vert, BufferPtr& idx, U32& idxCount)
@@ -140,7 +140,7 @@ Error Indirect::loadMesh(CString fname, BufferPtr& vert, BufferPtr& idx, U32& id
 	m_r->getResourceManager().getTransferGpuAllocator().release(handle, fence);
 	m_r->getResourceManager().getTransferGpuAllocator().release(handle2, fence);
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void Indirect::initFaceInfo(U cacheEntryIdx, U faceIdx)
@@ -261,7 +261,7 @@ Error Indirect::initIs()
 	ANKI_CHECK(
 		loadMesh("engine_data/Slight.ankimesh", m_is.m_slightPositions, m_is.m_slightIndices, m_is.m_slightIdxCount));
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 Error Indirect::initIrradiance()
@@ -295,7 +295,7 @@ Error Indirect::initIrradiance()
 	m_irradiance.m_prog->getOrCreateVariant(consts.get(), variant);
 	m_irradiance.m_grProg = variant->getProgram();
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void Indirect::runMs(RenderingContext& rctx, const RenderQueue& rqueue, U layer, U faceIdx)

+ 4 - 4
src/anki/renderer/LensFlare.cpp

@@ -47,7 +47,7 @@ Error LensFlare::initInternal(const ConfigSet& config)
 	ANKI_CHECK(initSprite(config));
 	ANKI_CHECK(initOcclusion(config));
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 Error LensFlare::initSprite(const ConfigSet& config)
@@ -58,7 +58,7 @@ Error LensFlare::initSprite(const ConfigSet& config)
 	if(m_maxSpritesPerFlare < 1 || m_maxFlares < 1)
 	{
 		ANKI_R_LOGE("Incorrect m_maxSpritesPerFlare or m_maxFlares");
-		return ErrorCode::USER_DATA;
+		return Error::USER_DATA;
 	}
 
 	m_maxSprites = m_maxSpritesPerFlare * m_maxFlares;
@@ -72,7 +72,7 @@ Error LensFlare::initSprite(const ConfigSet& config)
 	m_realProg->getOrCreateVariant(consts.get(), variant);
 	m_realGrProg = variant->getProgram();
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 Error LensFlare::initOcclusion(const ConfigSet& config)
@@ -99,7 +99,7 @@ Error LensFlare::initOcclusion(const ConfigSet& config)
 	m_updateIndirectBuffProg->getOrCreateVariant(variant);
 	m_updateIndirectBuffGrProg = variant->getProgram();
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void LensFlare::resetOcclusionQueries(RenderingContext& ctx, CommandBufferPtr cmdb)

+ 2 - 2
src/anki/renderer/LightBin.cpp

@@ -335,7 +335,7 @@ public:
 	Error operator()(U32 threadId, PtrSize threadsCount)
 	{
 		m_ctx->m_bin->binLights(threadId, threadsCount, *m_ctx);
-		return ErrorCode::NONE;
+		return Error::NONE;
 	}
 };
 
@@ -504,7 +504,7 @@ Error LightBin::bin(const Mat4& viewMat,
 	normalRoughnessDecalTexAtlas = ctx.m_normalRoughnessDecalTexAtlas;
 
 	ANKI_TRACE_STOP_EVENT(RENDERER_LIGHT_BINNING);
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void LightBin::binLights(U32 threadId, PtrSize threadsCount, LightBinContext& ctx)

+ 3 - 3
src/anki/renderer/LightShading.cpp

@@ -74,7 +74,7 @@ Error LightShading::initInternal(const ConfigSet& config)
 	if(m_maxLightIds == 0)
 	{
 		ANKI_R_LOGE("Incorrect number of max light indices");
-		return ErrorCode::USER_DATA;
+		return Error::USER_DATA;
 	}
 
 	m_clusterCounts[0] = config.getNumber("r.clusterSizeX");
@@ -121,7 +121,7 @@ Error LightShading::initInternal(const ConfigSet& config)
 	fbInit.m_colorAttachments[0].m_loadOperation = AttachmentLoadOperation::DONT_CARE;
 	m_fb = getGrManager().newInstance<Framebuffer>(fbInit);
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 Error LightShading::binLights(RenderingContext& ctx)
@@ -145,7 +145,7 @@ Error LightShading::binLights(RenderingContext& ctx)
 		ctx.m_lightShading.m_diffDecalTex,
 		ctx.m_lightShading.m_normRoughnessDecalTex));
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void LightShading::run(RenderingContext& ctx)

+ 2 - 2
src/anki/renderer/MainRenderer.cpp

@@ -79,7 +79,7 @@ Error MainRenderer::create(ThreadPool* threadpool,
 
 	ANKI_R_LOGI("Main renderer initialized. Rendering size %ux%u", m_width, m_height);
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 Error MainRenderer::render(RenderQueue& rqueue)
@@ -138,7 +138,7 @@ Error MainRenderer::render(RenderQueue& rqueue)
 
 	ANKI_TRACE_STOP_EVENT(RENDER);
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 Dbg& MainRenderer::getDbg()

+ 7 - 5
src/anki/renderer/Renderer.cpp

@@ -92,7 +92,7 @@ Error Renderer::initInternal(const ConfigSet& config)
 	if(m_width < 10 || m_height < 10)
 	{
 		ANKI_R_LOGE("Incorrect sizes");
-		return ErrorCode::USER_DATA;
+		return Error::USER_DATA;
 	}
 
 	{
@@ -167,7 +167,9 @@ Error Renderer::initInternal(const ConfigSet& config)
 
 	initJitteredMats();
 
-	return ErrorCode::NONE;
+	m_rgraph = m_gr->newInstance<RenderGraph>();
+
+	return Error::NONE;
 }
 
 void Renderer::initJitteredMats()
@@ -382,7 +384,7 @@ Error Renderer::render(RenderingContext& ctx)
 	m_prevViewProjMat = ctx.m_renderQueue->m_viewProjectionMatrix;
 	m_prevCamTransform = ctx.m_renderQueue->m_cameraTransform;
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 Vec3 Renderer::unproject(
@@ -602,7 +604,7 @@ Error Renderer::buildCommandBuffers(RenderingContext& ctx)
 		Error operator()(U32 threadId, PtrSize threadCount)
 		{
 			m_r->buildCommandBuffersInternal(*m_ctx, threadId, threadCount);
-			return ErrorCode::NONE;
+			return Error::NONE;
 		}
 	};
 
@@ -616,7 +618,7 @@ Error Renderer::buildCommandBuffers(RenderingContext& ctx)
 
 	ANKI_CHECK(threadPool.waitForAllThreadsToFinish());
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 } // end namespace anki

+ 2 - 0
src/anki/renderer/Renderer.h

@@ -460,6 +460,8 @@ private:
 	SamplerPtr m_nearestSampler;
 	SamplerPtr m_linearSampler;
 
+	RenderGraphPtr m_rgraph;
+
 	ANKI_USE_RESULT Error initInternal(const ConfigSet& initializer);
 
 	ANKI_USE_RESULT Error buildCommandBuffers(RenderingContext& ctx);

+ 1 - 1
src/anki/renderer/ScreenSpaceLensFlare.cpp

@@ -38,7 +38,7 @@ Error ScreenSpaceLensFlare::initInternal(const ConfigSet& config)
 	m_prog->getOrCreateVariant(consts.get(), variant);
 	m_grProg = variant->getProgram();
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void ScreenSpaceLensFlare::run(RenderingContext& ctx)

+ 1 - 1
src/anki/renderer/ShadowMapping.cpp

@@ -159,7 +159,7 @@ Error ShadowMapping::initInternal(const ConfigSet& config)
 	m_esmResolveProg->getOrCreateVariant(consts.get(), variant);
 	m_esmResolveGrProg = variant->getProgram();
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void ShadowMapping::run(RenderingContext& ctx)

+ 3 - 3
src/anki/renderer/Ssao.cpp

@@ -35,7 +35,7 @@ Error SsaoMain::init(const ConfigSet& config)
 	m_prog->getOrCreateVariant(consts.get(), variant);
 	m_grProg = variant->getProgram();
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void SsaoMain::setPreRunBarriers(RenderingContext& ctx)
@@ -103,7 +103,7 @@ Error SsaoHBlur::init(const ConfigSet& config)
 
 	m_grProg = variant->getProgram();
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void SsaoHBlur::setPreRunBarriers(RenderingContext& ctx)
@@ -150,7 +150,7 @@ Error SsaoVBlur::init(const ConfigSet& config)
 
 	m_grProg = variant->getProgram();
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void SsaoVBlur::setPreRunBarriers(RenderingContext& ctx)

+ 2 - 2
src/anki/renderer/TemporalAA.cpp

@@ -31,7 +31,7 @@ Error TemporalAA::init(const ConfigSet& config)
 		ANKI_R_LOGE("Failed to init TAA");
 	}
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 Error TemporalAA::initInternal(const ConfigSet& config)
@@ -58,7 +58,7 @@ Error TemporalAA::initInternal(const ConfigSet& config)
 		m_fbs[i] = getGrManager().newInstance<Framebuffer>(fbInit);
 	}
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void TemporalAA::setPreRunBarriers(RenderingContext& ctx)

+ 1 - 1
src/anki/renderer/Tonemapping.cpp

@@ -58,7 +58,7 @@ Error Tonemapping::initInternal(const ConfigSet& initializer)
 
 	m_r->getResourceManager().getTransferGpuAllocator().release(handle, fence);
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void Tonemapping::run(RenderingContext& ctx)

+ 3 - 3
src/anki/renderer/Volumetric.cpp

@@ -58,7 +58,7 @@ Error VolumetricMain::init(const ConfigSet& config)
 	m_prog->getOrCreateVariant(mutators.get(), consts.get(), variant);
 	m_grProg = variant->getProgram();
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 TexturePtr VolumetricMain::getRt() const
@@ -162,7 +162,7 @@ Error VolumetricHBlur::init(const ConfigSet& config)
 	m_prog->getOrCreateVariant(mutators.get(), consts.get(), variant);
 	m_grProg = variant->getProgram();
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void VolumetricHBlur::setPreRunBarriers(RenderingContext& ctx)
@@ -216,7 +216,7 @@ Error VolumetricVBlur::init(const ConfigSet& config)
 	m_prog->getOrCreateVariant(mutators.get(), consts.get(), variant);
 	m_grProg = variant->getProgram();
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void VolumetricVBlur::setPreRunBarriers(RenderingContext& ctx)

+ 2 - 2
src/anki/resource/Animation.cpp

@@ -68,7 +68,7 @@ Error Animation::load(const ResourceFilename& filename, Bool async)
 	if(channelCount == 0)
 	{
 		ANKI_RESOURCE_LOGE("Didn't found any channels");
-		return ErrorCode::USER_DATA;
+		return Error::USER_DATA;
 	}
 	m_channels.create(getAllocator(), channelCount);
 
@@ -223,7 +223,7 @@ Error Animation::load(const ResourceFilename& filename, Bool async)
 
 	m_duration = maxTime - m_startTime;
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 void Animation::interpolate(U channelIndex, F64 time, Vec3& pos, Quat& rot, F32& scale) const

+ 1 - 1
src/anki/resource/AsyncLoader.cpp

@@ -77,7 +77,7 @@ Error AsyncLoader::threadCallback(ThreadCallbackInfo& info)
 
 Error AsyncLoader::threadWorker()
 {
-	Error err = ErrorCode::NONE;
+	Error err = Error::NONE;
 
 	while(!err)
 	{

+ 2 - 2
src/anki/resource/CollisionResource.cpp

@@ -60,10 +60,10 @@ Error CollisionResource::load(const ResourceFilename& filename, Bool async)
 	else
 	{
 		ANKI_RESOURCE_LOGE("Incorrect collision type");
-		return ErrorCode::USER_DATA;
+		return Error::USER_DATA;
 	}
 
-	return ErrorCode::NONE;
+	return Error::NONE;
 }
 
 } // end namespace anki

+ 2 - 2
src/anki/resource/Common.cpp

@@ -38,7 +38,7 @@ const CString& shaderTypeToFileExtension(ShaderType type)
 Error fileExtensionToShaderType(const CString& filename, ShaderType& type)
 {
 	type = ShaderType::COUNT;
-	Error err = ErrorCode::NONE;
+	Error err = Error::NONE;
 
 	// Find the shader type
 	if(filename.find(".vert.glsl") != ResourceFilename::NPOS)
@@ -68,7 +68,7 @@ Error fileExtensionToShaderType(const CString& filename, ShaderType& type)
 	else
 	{
 		ANKI_RESOURCE_LOGE("Wrong shader file format: %s", &filename[0]);
-		err = ErrorCode::USER_DATA;
+		err = Error::USER_DATA;
 	}
 
 	return err;

+ 2 - 2
src/anki/resource/DummyRsrc.h

@@ -32,7 +32,7 @@ public:
 
 	ANKI_USE_RESULT Error load(const ResourceFilename& filename, Bool async)
 	{
-		Error err = ErrorCode::NONE;
+		Error err = Error::NONE;
 		if(filename.find("error") == ResourceFilename::NPOS)
 		{
 			m_memory = getAllocator().allocate(128);
@@ -44,7 +44,7 @@ public:
 		else
 		{
 			ANKI_RESOURCE_LOGE("Dummy error");
-			err = ErrorCode::USER_DATA;
+			err = Error::USER_DATA;
 		}
 
 		return err;

Some files were not shown because too many files changed in this diff