浏览代码

Move Blit, ClearTextureCompute, DepthAwareBlur and DepthAwareBlurCompute to the new format

Panagiotis Christopoulos Charitos 5 年之前
父节点
当前提交
28ac67faf9

+ 0 - 0
shaders/Blit.glslp → shaders/Blit.ankiprog


+ 7 - 7
shaders/ClearTextureCompute.glslp → shaders/ClearTextureCompute.ankiprog

@@ -18,30 +18,30 @@ layout(push_constant) uniform pc_
 };
 };
 
 
 #if IS_2D
 #if IS_2D
-layout(set = 0, binding = 0) uniform writeonly image2D u_img;
+layout(set = 0, binding = 0) uniform writeonly image2D u_img2d;
 #else
 #else
-layout(set = 0, binding = 0) uniform writeonly image3D u_img;
+layout(set = 0, binding = 0) uniform writeonly image3D u_img3d;
 #endif
 #endif
 
 
 void main()
 void main()
 {
 {
 #if IS_2D
 #if IS_2D
-	const UVec2 size = UVec2(imageSize(u_img));
+	const UVec2 size = UVec2(imageSize(u_img2d));
 	if(gl_GlobalInvocationID.x >= size.x || gl_GlobalInvocationID.y >= size.y)
 	if(gl_GlobalInvocationID.x >= size.x || gl_GlobalInvocationID.y >= size.y)
 	{
 	{
 		return;
 		return;
 	}
 	}
 
 
-	imageStore(u_img, IVec2(gl_GlobalInvocationID.xy), u_clearColor);
+	imageStore(u_img2d, IVec2(gl_GlobalInvocationID.xy), u_clearColor);
 #else
 #else
-	const UVec3 size = UVec3(imageSize(u_img));
+	const UVec3 size = UVec3(imageSize(u_img3d));
 	if(gl_GlobalInvocationID.x >= size.x || gl_GlobalInvocationID.y >= size.y || gl_GlobalInvocationID.z >= size.z)
 	if(gl_GlobalInvocationID.x >= size.x || gl_GlobalInvocationID.y >= size.y || gl_GlobalInvocationID.z >= size.z)
 	{
 	{
 		return;
 		return;
 	}
 	}
 
 
-	imageStore(u_img, IVec3(gl_GlobalInvocationID), u_clearColor);
+	imageStore(u_img3d, IVec3(gl_GlobalInvocationID), u_clearColor);
 #endif
 #endif
 }
 }
 
 
-#pragma anki end
+#pragma anki end

+ 0 - 36
shaders/Dbg.glslp

@@ -1,36 +0,0 @@
-// Copyright (C) 2009-2020, Panagiotis Christopoulos Charitos and contributors.
-// All rights reserved.
-// Code licensed under the BSD License.
-// http://www.anki3d.org/LICENSE
-
-#pragma anki start vert
-#include <shaders/Common.glsl>
-
-layout(location = 0) in Vec4 in_position;
-layout(location = 1) in Vec4 in_color;
-
-layout(location = 0) out Vec4 out_color;
-
-out gl_PerVertex
-{
-	Vec4 gl_Position;
-};
-
-void main()
-{
-	out_color = in_color;
-	gl_Position = in_position;
-}
-#pragma anki end
-
-#pragma anki start frag
-#include <shaders/Common.glsl>
-
-layout(location = 0) in Vec4 in_color;
-layout(location = 0) out Vec4 out_color;
-
-void main()
-{
-	out_color = in_color;
-}
-#pragma anki end

+ 0 - 14
shaders/DepthAwareBlur.glslp → shaders/DepthAwareBlur.ankiprog

@@ -3,24 +3,10 @@
 // Code licensed under the BSD License.
 // Code licensed under the BSD License.
 // http://www.anki3d.org/LICENSE
 // http://www.anki3d.org/LICENSE
 
 
-#pragma anki mutator ORIENTATION 0 1 2 // 0: VERTICAL, 1: HORIZONTAL, 2: BOX
-#pragma anki mutator SAMPLE_COUNT 3 5 7 9 11 13 15
-#pragma anki mutator COLOR_COMPONENTS 4 3 1
-
-#pragma anki input const UVec2 TEXTURE_SIZE
-
 #pragma anki start vert
 #pragma anki start vert
 #include <shaders/QuadVert.glsl>
 #include <shaders/QuadVert.glsl>
 #pragma anki end
 #pragma anki end
 
 
 #pragma anki start frag
 #pragma anki start frag
-#if ORIENTATION == 0
-#	define VERTICAL 1
-#elif ORIENTATION == 1
-#	define HORIZONTAL 1
-#else
-#	define BOX 1
-#endif
-
 #include <shaders/DepthAwareBlur.glsl>
 #include <shaders/DepthAwareBlur.glsl>
 #pragma anki end
 #pragma anki end

+ 13 - 7
shaders/DepthAwareBlur.glsl

@@ -3,23 +3,29 @@
 // Code licensed under the BSD License.
 // Code licensed under the BSD License.
 // http://www.anki3d.org/LICENSE
 // http://www.anki3d.org/LICENSE
 
 
-// Defines it needs:
-// HORIZONTAL | VERTICAL | BOX
-// COLOR_COMPONENTS
-// WORKGROUP_SIZE (only for compute)
-// TEXTURE_SIZE
-// SAMPLE_COUNT (must be odd number)
+#pragma anki mutator ORIENTATION 0 1 2 // 0: VERTICAL, 1: HORIZONTAL, 2: BOX
+#pragma anki mutator SAMPLE_COUNT 3 5 7 9 11 13 15
+#pragma anki mutator COLOR_COMPONENTS 4 3 1
 
 
-#pragma once
+ANKI_SPECIALIZATION_CONSTANT_UVEC2(TEXTURE_SIZE, 0, UVec2(1));
 
 
 #include <shaders/Common.glsl>
 #include <shaders/Common.glsl>
 
 
+#if ORIENTATION == 0
+#	define VERTICAL 1
+#elif ORIENTATION == 1
+#	define HORIZONTAL 1
+#else
+#	define BOX 1
+#endif
+
 #if SAMPLE_COUNT < 3
 #if SAMPLE_COUNT < 3
 #	error See file
 #	error See file
 #endif
 #endif
 
 
 #if defined(ANKI_COMPUTE_SHADER)
 #if defined(ANKI_COMPUTE_SHADER)
 #	define USE_COMPUTE 1
 #	define USE_COMPUTE 1
+const UVec2 WORKGROUP_SIZE = UVec2(8u, 8u);
 #else
 #else
 #	define USE_COMPUTE 0
 #	define USE_COMPUTE 0
 #endif
 #endif

+ 8 - 0
shaders/DepthAwareBlurCompute.ankiprog

@@ -0,0 +1,8 @@
+// Copyright (C) 2009-2020, Panagiotis Christopoulos Charitos and contributors.
+// All rights reserved.
+// Code licensed under the BSD License.
+// http://www.anki3d.org/LICENSE
+
+#pragma anki start comp
+#include <shaders/DepthAwareBlur.glsl>
+#pragma anki end

+ 0 - 23
shaders/DepthAwareBlurCompute.glslp

@@ -1,23 +0,0 @@
-// Copyright (C) 2009-2020, Panagiotis Christopoulos Charitos and contributors.
-// All rights reserved.
-// Code licensed under the BSD License.
-// http://www.anki3d.org/LICENSE
-
-#pragma anki mutator ORIENTATION 0 1 2 // 0: VERTICAL, 1: HORIZONTAL, 2: BOX -->
-#pragma anki mutator SAMPLE_COUNT 3 5 7 9 11 13 15
-#pragma anki mutator COLOR_COMPONENTS 4 3 1
-
-#pragma anki input const UVec2 TEXTURE_SIZE
-#pragma anki input const UVec2 WORKGROUP_SIZE
-
-#pragma anki start comp
-#if ORIENTATION == 0
-#	define VERTICAL 1
-#elif ORIENTATION == 1
-#	define HORIZONTAL 1
-#else
-#	define BOX 1
-#endif
-
-#include <shaders/DepthAwareBlur.glsl>
-#pragma anki end

+ 1 - 0
src/anki/core/App.cpp

@@ -764,6 +764,7 @@ Error App::compileAllShaders()
 			{
 			{
 				ANKI_ASSERT(hash != 0);
 				ANKI_ASSERT(hash != 0);
 				m_newHash = hash;
 				m_newHash = hash;
+				// TODO Need to consider getDeviceCapabilities and getBindlessLimits
 				return hash == m_metafileHash;
 				return hash == m_metafileHash;
 			};
 			};
 		} skip;
 		} skip;

+ 3 - 0
src/anki/core/CoreTracer.cpp

@@ -109,6 +109,9 @@ CoreTracer::~CoreTracer()
 Error CoreTracer::init(GenericMemoryPoolAllocator<U8> alloc, CString directory)
 Error CoreTracer::init(GenericMemoryPoolAllocator<U8> alloc, CString directory)
 {
 {
 	TracerSingleton::init(alloc);
 	TracerSingleton::init(alloc);
+	const Bool enableTracer = getenv("ANKI_CORE_TRACER_ENABLED") && getenv("ANKI_CORE_TRACER_ENABLED")[0] == '1';
+	TracerSingleton::get().setEnabled(enableTracer);
+	ANKI_CORE_LOGI("Tracing is %s from the beginning", (enableTracer) ? "enabled" : "disabled");
 
 
 	m_alloc = alloc;
 	m_alloc = alloc;
 	m_thread.start(this,
 	m_thread.start(this,

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

@@ -62,8 +62,8 @@ Error MainRenderer::init(ThreadHive* hive,
 	// Init other
 	// Init other
 	if(!m_rDrawToDefaultFb)
 	if(!m_rDrawToDefaultFb)
 	{
 	{
-		ANKI_CHECK(resources->loadResource("shaders/Blit.glslp", m_blitProg));
-		const ShaderProgramResourceVariant* variant;
+		ANKI_CHECK(resources->loadResource("shaders/Blit.ankiprog", m_blitProg));
+		const ShaderProgramResourceVariant2* variant;
 		m_blitProg->getOrCreateVariant(variant);
 		m_blitProg->getOrCreateVariant(variant);
 		m_blitGrProg = variant->getProgram();
 		m_blitGrProg = variant->getProgram();
 
 

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

@@ -81,7 +81,7 @@ private:
 	UniquePtr<Renderer> m_r;
 	UniquePtr<Renderer> m_r;
 	Bool m_rDrawToDefaultFb = false;
 	Bool m_rDrawToDefaultFb = false;
 
 
-	ShaderProgramResourcePtr m_blitProg;
+	ShaderProgramResource2Ptr m_blitProg;
 	ShaderProgramPtr m_blitGrProg;
 	ShaderProgramPtr m_blitGrProg;
 
 
 	U32 m_width = 0; ///< Default FB size.
 	U32 m_width = 0; ///< Default FB size.

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

@@ -120,7 +120,7 @@ Error Renderer::initInternal(const ConfigSet& config)
 	m_dummyBuff = getGrManager().newBuffer(BufferInitInfo(
 	m_dummyBuff = getGrManager().newBuffer(BufferInitInfo(
 		1024, BufferUsageBit::UNIFORM_ALL | BufferUsageBit::STORAGE_ALL, BufferMapAccessBit::NONE, "Dummy"));
 		1024, BufferUsageBit::UNIFORM_ALL | BufferUsageBit::STORAGE_ALL, BufferMapAccessBit::NONE, "Dummy"));
 
 
-	ANKI_CHECK(m_resources->loadResource("shaders/ClearTextureCompute.glslp", m_clearTexComputeProg));
+	ANKI_CHECK(m_resources->loadResource("shaders/ClearTextureCompute.ankiprog", m_clearTexComputeProg));
 
 
 	// Init the stages. Careful with the order!!!!!!!!!!
 	// Init the stages. Careful with the order!!!!!!!!!!
 	m_genericCompute.reset(m_alloc.newInstance<GenericCompute>(this));
 	m_genericCompute.reset(m_alloc.newInstance<GenericCompute>(this));
@@ -497,11 +497,11 @@ TexturePtr Renderer::createAndClearRenderTarget(const TextureInitInfo& inf, cons
 				else
 				else
 				{
 				{
 					// Compute
 					// Compute
-					ShaderProgramResourceMutationInitList<1> mutators(m_clearTexComputeProg);
-					mutators.add("IS_2D", U32((inf.m_type != TextureType::_3D) ? 1 : 0));
+					ShaderProgramResourceVariantInitInfo2 variantInitInfo(m_clearTexComputeProg);
+					variantInitInfo.addMutation("IS_2D", I32((inf.m_type != TextureType::_3D) ? 1 : 0));
 
 
-					const ShaderProgramResourceVariant* variant;
-					m_clearTexComputeProg->getOrCreateVariant(mutators.get(), variant);
+					const ShaderProgramResourceVariant2* variant;
+					m_clearTexComputeProg->getOrCreateVariant(variantInitInfo, variant);
 
 
 					cmdb->bindShaderProgram(variant->getProgram());
 					cmdb->bindShaderProgram(variant->getProgram());
 
 

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

@@ -421,7 +421,7 @@ private:
 
 
 	RendererPrecreatedSamplers m_samplers;
 	RendererPrecreatedSamplers m_samplers;
 
 
-	ShaderProgramResourcePtr m_clearTexComputeProg;
+	ShaderProgramResource2Ptr m_clearTexComputeProg;
 
 
 	RendererStats m_stats;
 	RendererStats m_stats;
 	Bool m_statsEnabled = false;
 	Bool m_statsEnabled = false;