Browse Source

Some refactoring

Panagiotis Christopoulos Charitos 9 years ago
parent
commit
3f9849f9f1

+ 0 - 12
include/anki/renderer/Bloom.h

@@ -22,17 +22,6 @@ class ShaderProgram;
 /// Bloom pass.
 /// Bloom pass.
 class Bloom : public RenderingPass
 class Bloom : public RenderingPass
 {
 {
-public:
-	U32 getBlurringIterationsCount() const
-	{
-		return m_blurringIterationsCount;
-	}
-
-	void setBlurringIterationsCount(const U32 x)
-	{
-		m_blurringIterationsCount = x;
-	}
-
 anki_internal:
 anki_internal:
 	static const PixelFormat RT_PIXEL_FORMAT;
 	static const PixelFormat RT_PIXEL_FORMAT;
 
 
@@ -70,7 +59,6 @@ private:
 	U32 m_width, m_height;
 	U32 m_width, m_height;
 	F32 m_threshold = 10.0; ///< How bright it is
 	F32 m_threshold = 10.0; ///< How bright it is
 	F32 m_scale = 1.0;
 	F32 m_scale = 1.0;
-	U32 m_blurringIterationsCount = 2; ///< The blurring iterations
 	F32 m_blurringDist = 1.0; ///< Distance in blurring
 	F32 m_blurringDist = 1.0; ///< Distance in blurring
 
 
 	FramebufferPtr m_hblurFb;
 	FramebufferPtr m_hblurFb;

+ 9 - 34
include/anki/renderer/Is.h

@@ -63,45 +63,20 @@ anki_internal:
 		cmdb->generateMipmaps(m_rt, 0, 0);
 		cmdb->generateMipmaps(m_rt, 0, 0);
 	}
 	}
 
 
-	DynamicBufferToken getCommonVarsToken() const
-	{
-		return m_commonVarsToken;
-	}
-
-	DynamicBufferToken getPointLightsToken() const
-	{
-		return m_pLightsToken;
-	}
-
-	DynamicBufferToken getSpotLightsToken() const
-	{
-		return m_sLightsToken;
-	}
-
-	DynamicBufferToken getClustersToken() const
-	{
-		return m_clustersToken;
-	}
-
-	DynamicBufferToken getLightIndicesToken() const
-	{
-		return m_lightIdsToken;
-	}
-
 private:
 private:
+	static const U COMMON_VARS_LOCATION = 0;
+	static const U P_LIGHTS_LOCATION = 1;
+	static const U S_LIGHTS_LOCATION = 2;
+	static const U PROBES_LOCATION = 3;
+	static const U CLUSTERS_LOCATION = 0;
+	static const U LIGHT_IDS_LOCATION = 1;
+
 	/// The IS render target
 	/// The IS render target
 	TexturePtr m_rt;
 	TexturePtr m_rt;
 
 
 	/// The IS FBO
 	/// The IS FBO
 	FramebufferPtr m_fb;
 	FramebufferPtr m_fb;
 
 
-	DynamicBufferToken m_commonVarsToken;
-	DynamicBufferToken m_pLightsToken;
-	DynamicBufferToken m_sLightsToken;
-	DynamicBufferToken m_clustersToken;
-	DynamicBufferToken m_lightIdsToken;
-	DynamicBufferToken m_probesToken;
-
 	ResourceGroupPtr m_rcGroup;
 	ResourceGroupPtr m_rcGroup;
 
 
 	// Light shaders
 	// Light shaders
@@ -128,9 +103,9 @@ private:
 	ANKI_USE_RESULT Error initInternal(const ConfigSet& initializer);
 	ANKI_USE_RESULT Error initInternal(const ConfigSet& initializer);
 
 
 	/// Prepare GL for rendering
 	/// Prepare GL for rendering
-	void setState(CommandBufferPtr& cmdBuff);
+	void setState(const RenderingContext& ctx, CommandBufferPtr& cmdBuff);
 
 
-	void updateCommonBlock(const FrustumComponent& frc);
+	void updateCommonBlock(const FrustumComponent& frc, RenderingContext& ctx);
 
 
 	// Binning
 	// Binning
 	void binLights(U32 threadId, PtrSize threadsCount, TaskCommonData& data);
 	void binLights(U32 threadId, PtrSize threadsCount, TaskCommonData& data);

+ 9 - 1
include/anki/renderer/Renderer.h

@@ -46,6 +46,15 @@ public:
 	} m_ms;
 	} m_ms;
 	/// @}
 	/// @}
 
 
+	/// @name IS
+	/// @{
+	class Is
+	{
+	public:
+		DynamicBufferInfo m_dynBufferInfo;
+	} m_is;
+	/// @}
+
 	/// @name Shadow mapping
 	/// @name Shadow mapping
 	/// @{
 	/// @{
 	class Sm
 	class Sm
@@ -79,7 +88,6 @@ public:
 	class Fs
 	class Fs
 	{
 	{
 	public:
 	public:
-		DynamicBufferInfo m_set1DynInfo;
 		Array<CommandBufferPtr, ThreadPool::MAX_THREADS> m_commandBuffers;
 		Array<CommandBufferPtr, ThreadPool::MAX_THREADS> m_commandBuffers;
 	} m_fs;
 	} m_fs;
 	/// @}
 	/// @}

+ 2 - 2
sandbox/config.xml

@@ -17,8 +17,8 @@
 	<bloom.blurringDist>1</bloom.blurringDist>
 	<bloom.blurringDist>1</bloom.blurringDist>
 	<bloom.samples>17</bloom.samples>
 	<bloom.samples>17</bloom.samples>
 	<bloom.blurringIterationsCount>1</bloom.blurringIterationsCount>
 	<bloom.blurringIterationsCount>1</bloom.blurringIterationsCount>
-	<bloom.threshold>2</bloom.threshold>
-	<bloom.scale>2</bloom.scale>
+	<bloom.threshold>2.5</bloom.threshold>
+	<bloom.scale>2.5</bloom.scale>
 	<ssao.enabled>1</ssao.enabled>
 	<ssao.enabled>1</ssao.enabled>
 	<ssao.renderingQuality>0.250000</ssao.renderingQuality>
 	<ssao.renderingQuality>0.250000</ssao.renderingQuality>
 	<ssao.blurringIterationsCount>1</ssao.blurringIterationsCount>
 	<ssao.blurringIterationsCount>1</ssao.blurringIterationsCount>

+ 2 - 0
shaders/Bloom.frag.glsl

@@ -43,10 +43,12 @@ vec3 readTexture(in uint mipmap)
 void main()
 void main()
 {
 {
 	out_color = readTexture(MIPMAP);
 	out_color = readTexture(MIPMAP);
+#if 0
 	out_color += readTexture(MIPMAP - 1);
 	out_color += readTexture(MIPMAP - 1);
 	out_color += readTexture(MIPMAP - 2);
 	out_color += readTexture(MIPMAP - 2);
 
 
 	out_color /= 3.0;
 	out_color /= 3.0;
+#endif
 	out_color =
 	out_color =
 		tonemap(out_color, u_averageLuminancePad3.x, u_thresholdScalePad2.x)
 		tonemap(out_color, u_averageLuminancePad3.x, u_thresholdScalePad2.x)
 		* u_thresholdScalePad2.y;
 		* u_thresholdScalePad2.y;

+ 1 - 1
shaders/Pps.frag.glsl

@@ -128,7 +128,7 @@ void main()
 
 
 #if 0
 #if 0
 	{
 	{
-		out_color = textureLod(u_isRt, in_uv, 0.0).rgb;
+		out_color = bloom;
 	}
 	}
 #endif
 #endif
 }
 }

+ 1 - 3
src/renderer/Bloom.cpp

@@ -49,8 +49,6 @@ Error Bloom::initInternal(const ConfigSet& config)
 	m_threshold = config.getNumber("bloom.threshold");
 	m_threshold = config.getNumber("bloom.threshold");
 	m_scale = config.getNumber("bloom.scale");
 	m_scale = config.getNumber("bloom.scale");
 	m_blurringDist = config.getNumber("bloom.blurringDist");
 	m_blurringDist = config.getNumber("bloom.blurringDist");
-	m_blurringIterationsCount =
-		config.getNumber("bloom.blurringIterationsCount");
 
 
 	ANKI_CHECK(initFb(m_hblurFb, m_hblurRt));
 	ANKI_CHECK(initFb(m_hblurFb, m_hblurRt));
 	ANKI_CHECK(initFb(m_vblurFb, m_vblurRt));
 	ANKI_CHECK(initFb(m_vblurFb, m_vblurRt));
@@ -90,7 +88,7 @@ Error Bloom::initInternal(const ConfigSet& config)
 	pps.sprintf("#define HPASS\n"
 	pps.sprintf("#define HPASS\n"
 				"#define COL_RGB\n"
 				"#define COL_RGB\n"
 				"#define TEXTURE_SIZE vec2(%f, %f)\n"
 				"#define TEXTURE_SIZE vec2(%f, %f)\n"
-				"#define KERNEL_SIZE 15\n",
+				"#define KERNEL_SIZE 19\n",
 		F32(m_width),
 		F32(m_width),
 		F32(m_height));
 		F32(m_height));
 
 

+ 1 - 13
src/renderer/Fs.cpp

@@ -70,18 +70,6 @@ Error Fs::init(const ConfigSet&)
 	return ErrorCode::NONE;
 	return ErrorCode::NONE;
 }
 }
 
 
-//==============================================================================
-void Fs::prepareBuildCommandBuffers(RenderingContext& ctx)
-{
-	DynamicBufferInfo& dyn = ctx.m_fs.m_set1DynInfo;
-	dyn.m_uniformBuffers[0] = m_r->getIs().getCommonVarsToken();
-	dyn.m_uniformBuffers[1] = m_r->getIs().getPointLightsToken();
-	dyn.m_uniformBuffers[2] = m_r->getIs().getSpotLightsToken();
-
-	dyn.m_storageBuffers[0] = m_r->getIs().getClustersToken();
-	dyn.m_storageBuffers[1] = m_r->getIs().getLightIndicesToken();
-}
-
 //==============================================================================
 //==============================================================================
 Error Fs::buildCommandBuffers(
 Error Fs::buildCommandBuffers(
 	RenderingContext& ctx, U threadId, U threadCount) const
 	RenderingContext& ctx, U threadId, U threadCount) const
@@ -111,7 +99,7 @@ Error Fs::buildCommandBuffers(
 
 
 	cmdb->setViewport(0, 0, m_width, m_height);
 	cmdb->setViewport(0, 0, m_width, m_height);
 	cmdb->setPolygonOffset(0.0, 0.0);
 	cmdb->setPolygonOffset(0.0, 0.0);
-	cmdb->bindResourceGroup(m_globalResources, 1, &ctx.m_fs.m_set1DynInfo);
+	cmdb->bindResourceGroup(m_globalResources, 1, &ctx.m_is.m_dynBufferInfo);
 
 
 	// Start drawing
 	// Start drawing
 	Error err = m_r->getSceneDrawer().drawRange(Pass::MS_FS,
 	Error err = m_r->getSceneDrawer().drawRange(Pass::MS_FS,

+ 16 - 24
src/renderer/Is.cpp

@@ -509,7 +509,7 @@ Error Is::populateBuffers(RenderingContext& ctx)
 			getGrManager().allocateFrameHostVisibleMemory(
 			getGrManager().allocateFrameHostVisibleMemory(
 				sizeof(ShaderPointLight) * visiblePointLightsCount,
 				sizeof(ShaderPointLight) * visiblePointLightsCount,
 				BufferUsage::UNIFORM,
 				BufferUsage::UNIFORM,
-				m_pLightsToken));
+				ctx.m_is.m_dynBufferInfo.m_uniformBuffers[P_LIGHTS_LOCATION]));
 
 
 		taskData.m_pointLights =
 		taskData.m_pointLights =
 			WeakArray<ShaderPointLight>(data, visiblePointLightsCount);
 			WeakArray<ShaderPointLight>(data, visiblePointLightsCount);
@@ -520,7 +520,8 @@ Error Is::populateBuffers(RenderingContext& ctx)
 	}
 	}
 	else
 	else
 	{
 	{
-		m_pLightsToken.markUnused();
+		ctx.m_is.m_dynBufferInfo.m_uniformBuffers[P_LIGHTS_LOCATION]
+			.markUnused();
 	}
 	}
 
 
 	if(visibleSpotLightsCount)
 	if(visibleSpotLightsCount)
@@ -529,7 +530,7 @@ Error Is::populateBuffers(RenderingContext& ctx)
 			getGrManager().allocateFrameHostVisibleMemory(
 			getGrManager().allocateFrameHostVisibleMemory(
 				sizeof(ShaderSpotLight) * visibleSpotLightsCount,
 				sizeof(ShaderSpotLight) * visibleSpotLightsCount,
 				BufferUsage::UNIFORM,
 				BufferUsage::UNIFORM,
-				m_sLightsToken));
+				ctx.m_is.m_dynBufferInfo.m_uniformBuffers[S_LIGHTS_LOCATION]));
 
 
 		taskData.m_spotLights =
 		taskData.m_spotLights =
 			WeakArray<ShaderSpotLight>(data, visibleSpotLightsCount);
 			WeakArray<ShaderSpotLight>(data, visibleSpotLightsCount);
@@ -540,7 +541,8 @@ Error Is::populateBuffers(RenderingContext& ctx)
 	}
 	}
 	else
 	else
 	{
 	{
-		m_sLightsToken.markUnused();
+		ctx.m_is.m_dynBufferInfo.m_uniformBuffers[S_LIGHTS_LOCATION]
+			.markUnused();
 	}
 	}
 
 
 	if(m_r->getIrEnabled() && visibleProbeCount)
 	if(m_r->getIrEnabled() && visibleProbeCount)
@@ -549,7 +551,7 @@ Error Is::populateBuffers(RenderingContext& ctx)
 			getGrManager().allocateFrameHostVisibleMemory(
 			getGrManager().allocateFrameHostVisibleMemory(
 				sizeof(ShaderProbe) * visibleProbeCount,
 				sizeof(ShaderProbe) * visibleProbeCount,
 				BufferUsage::UNIFORM,
 				BufferUsage::UNIFORM,
-				m_probesToken));
+				ctx.m_is.m_dynBufferInfo.m_uniformBuffers[PROBES_LOCATION]));
 
 
 		taskData.m_probes = WeakArray<ShaderProbe>(data, visibleProbeCount);
 		taskData.m_probes = WeakArray<ShaderProbe>(data, visibleProbeCount);
 
 
@@ -559,7 +561,7 @@ Error Is::populateBuffers(RenderingContext& ctx)
 	}
 	}
 	else
 	else
 	{
 	{
-		m_probesToken.markUnused();
+		ctx.m_is.m_dynBufferInfo.m_uniformBuffers[PROBES_LOCATION].markUnused();
 	}
 	}
 
 
 	taskData.m_is = this;
 	taskData.m_is = this;
@@ -569,7 +571,7 @@ Error Is::populateBuffers(RenderingContext& ctx)
 		getGrManager().allocateFrameHostVisibleMemory(
 		getGrManager().allocateFrameHostVisibleMemory(
 			sizeof(ShaderCluster) * clusterCount,
 			sizeof(ShaderCluster) * clusterCount,
 			BufferUsage::STORAGE,
 			BufferUsage::STORAGE,
-			m_clustersToken));
+			ctx.m_is.m_dynBufferInfo.m_storageBuffers[CLUSTERS_LOCATION]));
 
 
 	taskData.m_clusters = WeakArray<ShaderCluster>(data, clusterCount);
 	taskData.m_clusters = WeakArray<ShaderCluster>(data, clusterCount);
 
 
@@ -578,7 +580,7 @@ Error Is::populateBuffers(RenderingContext& ctx)
 		static_cast<U32*>(getGrManager().allocateFrameHostVisibleMemory(
 		static_cast<U32*>(getGrManager().allocateFrameHostVisibleMemory(
 			m_maxLightIds * sizeof(U32),
 			m_maxLightIds * sizeof(U32),
 			BufferUsage::STORAGE,
 			BufferUsage::STORAGE,
-			m_lightIdsToken));
+			ctx.m_is.m_dynBufferInfo.m_storageBuffers[LIGHT_IDS_LOCATION]));
 
 
 	taskData.m_lightIds = WeakArray<U32>(data2, m_maxLightIds);
 	taskData.m_lightIds = WeakArray<U32>(data2, m_maxLightIds);
 
 
@@ -590,7 +592,7 @@ Error Is::populateBuffers(RenderingContext& ctx)
 	}
 	}
 
 
 	// Update uniforms
 	// Update uniforms
-	updateCommonBlock(*m_frc);
+	updateCommonBlock(*m_frc, ctx);
 
 
 	// Sync
 	// Sync
 	ANKI_CHECK(threadPool.waitForAllThreadsToFinish());
 	ANKI_CHECK(threadPool.waitForAllThreadsToFinish());
@@ -955,41 +957,31 @@ void Is::writeAndBinProbe(const FrustumComponent& camFrc,
 }
 }
 
 
 //==============================================================================
 //==============================================================================
-void Is::setState(CommandBufferPtr& cmdb)
+void Is::setState(const RenderingContext& ctx, CommandBufferPtr& cmdb)
 {
 {
 	cmdb->beginRenderPass(m_fb);
 	cmdb->beginRenderPass(m_fb);
 	cmdb->setViewport(0, 0, m_r->getWidth(), m_r->getHeight());
 	cmdb->setViewport(0, 0, m_r->getWidth(), m_r->getHeight());
 	cmdb->bindPipeline(m_lightPpline);
 	cmdb->bindPipeline(m_lightPpline);
-
-	DynamicBufferInfo dyn;
-	dyn.m_uniformBuffers[0] = m_commonVarsToken;
-	dyn.m_uniformBuffers[1] = m_pLightsToken;
-	dyn.m_uniformBuffers[2] = m_sLightsToken;
-	dyn.m_uniformBuffers[3] = m_probesToken;
-
-	dyn.m_storageBuffers[0] = m_clustersToken;
-	dyn.m_storageBuffers[1] = m_lightIdsToken;
-
-	cmdb->bindResourceGroup(m_rcGroup, 0, &dyn);
+	cmdb->bindResourceGroup(m_rcGroup, 0, &ctx.m_is.m_dynBufferInfo);
 }
 }
 
 
 //==============================================================================
 //==============================================================================
 void Is::run(RenderingContext& ctx)
 void Is::run(RenderingContext& ctx)
 {
 {
 	CommandBufferPtr& cmdb = ctx.m_commandBuffer;
 	CommandBufferPtr& cmdb = ctx.m_commandBuffer;
-	setState(cmdb);
+	setState(ctx, cmdb);
 	cmdb->drawArrays(4, m_r->getTileCount());
 	cmdb->drawArrays(4, m_r->getTileCount());
 	cmdb->endRenderPass();
 	cmdb->endRenderPass();
 }
 }
 
 
 //==============================================================================
 //==============================================================================
-void Is::updateCommonBlock(const FrustumComponent& fr)
+void Is::updateCommonBlock(const FrustumComponent& fr, RenderingContext& ctx)
 {
 {
 	ShaderCommonUniforms* blk = static_cast<ShaderCommonUniforms*>(
 	ShaderCommonUniforms* blk = static_cast<ShaderCommonUniforms*>(
 		getGrManager().allocateFrameHostVisibleMemory(
 		getGrManager().allocateFrameHostVisibleMemory(
 			sizeof(ShaderCommonUniforms),
 			sizeof(ShaderCommonUniforms),
 			BufferUsage::UNIFORM,
 			BufferUsage::UNIFORM,
-			m_commonVarsToken));
+			ctx.m_is.m_dynBufferInfo.m_uniformBuffers[COMMON_VARS_LOCATION]));
 
 
 	// Start writing
 	// Start writing
 	blk->m_projectionParams = fr.getProjectionParameters();
 	blk->m_projectionParams = fr.getProjectionParameters();

+ 0 - 1
src/renderer/Renderer.cpp

@@ -430,7 +430,6 @@ Error Renderer::buildCommandBuffers(RenderingContext& ctx)
 	{
 	{
 		m_sm->prepareBuildCommandBuffers(ctx);
 		m_sm->prepareBuildCommandBuffers(ctx);
 	}
 	}
-	m_fs->prepareBuildCommandBuffers(ctx);
 
 
 	// Build
 	// Build
 	class Task : public ThreadPoolTask
 	class Task : public ThreadPoolTask