Procházet zdrojové kódy

Decrease the storage of shadowmapping. Add a check for some GL extensions

Panagiotis Christopoulos Charitos před 8 roky
rodič
revize
a50a739728

+ 7 - 1
src/anki/gr/gl/Common.cpp

@@ -370,7 +370,13 @@ void convertTextureInformation(const PixelFormat& pf,
 		{
 		{
 			format = GL_R;
 			format = GL_R;
 			internalFormat = GL_R16UI;
 			internalFormat = GL_R16UI;
-			type = GL_UNSIGNED_INT;
+			type = GL_UNSIGNED_SHORT;
+		}
+		else if(pf.m_transform == TransformFormat::UNORM)
+		{
+			format = GL_R;
+			internalFormat = GL_R16;
+			type = GL_UNSIGNED_SHORT;
 		}
 		}
 		else
 		else
 		{
 		{

+ 7 - 0
src/anki/gr/gl/Common.h

@@ -36,6 +36,13 @@ class RenderingThread;
 #define ANKI_GL_LOGW(...) ANKI_LOG("GL  ", WARNING, __VA_ARGS__)
 #define ANKI_GL_LOGW(...) ANKI_LOG("GL  ", WARNING, __VA_ARGS__)
 #define ANKI_GL_LOGF(...) ANKI_LOG("GL  ", FATAL, __VA_ARGS__)
 #define ANKI_GL_LOGF(...) ANKI_LOG("GL  ", FATAL, __VA_ARGS__)
 
 
+enum class GlExtensions : U16
+{
+	NONE = 0,
+	ARB_SHADER_BALLOT = 1 << 0,
+};
+ANKI_ENUM_ALLOW_NUMERIC_OPERATIONS(GlExtensions, inline)
+
 // Spec limits
 // Spec limits
 const U MAX_UNIFORM_BLOCK_SIZE = 16384;
 const U MAX_UNIFORM_BLOCK_SIZE = 16384;
 const U MAX_STORAGE_BLOCK_SIZE = 2 << 27;
 const U MAX_STORAGE_BLOCK_SIZE = 2 << 27;

+ 13 - 0
src/anki/gr/gl/GlState.cpp

@@ -178,6 +178,19 @@ void GlState::initRenderThread()
 			glBindTexture(GL_TEXTURE_BUFFER, m_texBuffTextures[i][j]);
 			glBindTexture(GL_TEXTURE_BUFFER, m_texBuffTextures[i][j]);
 		}
 		}
 	}
 	}
+
+	// Get extensions
+	GLint extCount = 0;
+	glGetIntegerv(GL_NUM_EXTENSIONS, &extCount);
+	while(extCount--)
+	{
+		const char* ext = reinterpret_cast<const char*>(glGetStringi(GL_EXTENSIONS, extCount));
+		if(CString(ext) == "GL_ARB_shader_ballot")
+		{
+			ANKI_GL_LOGI("Found GL_ARB_shader_ballot");
+			m_extensions |= GlExtensions::ARB_SHADER_BALLOT;
+		}
+	}
 }
 }
 
 
 void GlState::destroy()
 void GlState::destroy()

+ 1 - 0
src/anki/gr/gl/GlState.h

@@ -22,6 +22,7 @@ class GlState
 {
 {
 public:
 public:
 	GrManager* m_manager;
 	GrManager* m_manager;
+	GlExtensions m_extensions = GlExtensions::NONE;
 	I32 m_version = -1; ///< Minor major GL version. Something like 430
 	I32 m_version = -1; ///< Minor major GL version. Something like 430
 	GpuVendor m_gpu = GpuVendor::UNKNOWN;
 	GpuVendor m_gpu = GpuVendor::UNKNOWN;
 	Bool8 m_registerMessages = false;
 	Bool8 m_registerMessages = false;

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

@@ -42,7 +42,7 @@ static const char* SHADER_HEADER = R"(#version %u %s
 #define ANKI_USING_FRAG_COORD(height_) vec4 anki_fragCoord = gl_FragCoord;
 #define ANKI_USING_FRAG_COORD(height_) vec4 anki_fragCoord = gl_FragCoord;
 #endif
 #endif
 
 
-#if 1
+#if %u
 #extension GL_ARB_shader_ballot : require
 #extension GL_ARB_shader_ballot : require
 #define ANKI_ARB_SHADER_BALLOT 1
 #define ANKI_ARB_SHADER_BALLOT 1
 #endif
 #endif
@@ -105,6 +105,7 @@ Error ShaderImpl::init(ShaderType type, const CString& source)
 		MAX_IMAGE_BINDINGS,
 		MAX_IMAGE_BINDINGS,
 		MAX_TEXTURE_BINDINGS * MAX_DESCRIPTOR_SETS,
 		MAX_TEXTURE_BINDINGS * MAX_DESCRIPTOR_SETS,
 		MAX_TEXTURE_BUFFER_BINDINGS,
 		MAX_TEXTURE_BUFFER_BINDINGS,
+		!!(getManager().getImplementation().getState().m_extensions & GlExtensions::ARB_SHADER_BALLOT),
 		&source[0]);
 		&source[0]);
 
 
 	// 2) Gen name, create, compile and link
 	// 2) Gen name, create, compile and link

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

@@ -87,7 +87,7 @@ const PixelFormat FORWARD_SHADING_COLOR_ATTACHMENT_PIXEL_FORMAT(ComponentFormat:
 const PixelFormat DBG_COLOR_ATTACHMENT_PIXEL_FORMAT(ComponentFormat::R8G8B8, TransformFormat::UNORM);
 const PixelFormat DBG_COLOR_ATTACHMENT_PIXEL_FORMAT(ComponentFormat::R8G8B8, TransformFormat::UNORM);
 
 
 const PixelFormat SHADOW_DEPTH_PIXEL_FORMAT(ComponentFormat::D32, TransformFormat::FLOAT);
 const PixelFormat SHADOW_DEPTH_PIXEL_FORMAT(ComponentFormat::D32, TransformFormat::FLOAT);
-const PixelFormat SHADOW_COLOR_PIXEL_FORMAT(ComponentFormat::R32, TransformFormat::FLOAT);
+const PixelFormat SHADOW_COLOR_PIXEL_FORMAT(ComponentFormat::R16, TransformFormat::UNORM);
 /// @}
 /// @}
 
 
 } // end namespace anki
 } // end namespace anki