Sfoglia il codice sorgente

Adding option to disable and forget about tessellation

Panagiotis Christopoulos Charitos 12 anni fa
parent
commit
f6638b7133

+ 2 - 0
bench/Main.cpp

@@ -142,6 +142,8 @@ void initSubsystems()
 	initializer.get("pps.hdr.renderingQuality") = 0.3;
 	initializer.get("maxTextureSize") = 1024;
 	initializer.get("mrt") = false;
+	initializer.get("tilesXCount") = 32;
+	initializer.get("tilesYCount") = 32;
 	initializer.get("pps.sharpen") = false;
 	initializer.get("pps.gammaCorrection") = false;
 #endif

+ 2 - 2
include/anki/Config.h.cmake

@@ -111,8 +111,8 @@
 #define ANKI_SAFE_ALIGNMENT 16
 
 // Renderer and rendering related config options
-#define ANKI_RENDERER_MAX_TILES_X 16
-#define ANKI_RENDERER_MAX_TILES_Y 16
+#define ANKI_RENDERER_MAX_TILES_X 32
+#define ANKI_RENDERER_MAX_TILES_Y 32
 
 #define ANKI_RENDERER_USE_MATERIAL_UBOS 0
 

+ 6 - 0
include/anki/renderer/Renderer.h

@@ -165,6 +165,11 @@ public:
 		return isOffscreen;
 	}
 
+	Bool usesTessellation() const
+	{
+		return tessellation;
+	}
+
 	F32 getRenderingQuality() const
 	{
 		return renderingQuality;
@@ -259,6 +264,7 @@ private:
 	U8 samples; ///< Number of sample in multisampling
 	Bool8 useMrt; ///< Use MRT or pack things inside the G buffer
 	Bool8 isOffscreen; ///< Is offscreen renderer?
+	Bool8 tessellation;
 	F32 renderingQuality; ///< Rendering quality. Relevant for offscreen 
 	U32 maxTextureSize; ///< Texture size limit. Just kept here.
 	UVec2 tilesCount;

+ 1 - 1
shaders/BsCommonVert.glsl

@@ -9,7 +9,7 @@ layout(location = 3) in vec2 texCoord;
 /// @name Varyings
 /// @{
 out vec2 vTexCoord;
-out flat float vAlpha;
+flat out float vAlpha;
 /// @}
 
 //==============================================================================

+ 6 - 0
src/gl/BufferObject.cpp

@@ -59,6 +59,12 @@ void BufferObject::create(GLenum target_, U32 sizeInBytes_,
 		{
 			throw ANKI_EXCEPTION("Buffer size exceeds GL implementation max");
 		}
+
+		if(sizeInBytes_ > 16384)
+		{
+			ANKI_LOGW("The size (%u) of the uniform buffer is greater "
+				"than the spec's min", sizeInBytes_);
+		}
 	}
 
 	usage = usage_;

+ 5 - 0
src/renderer/Renderer.cpp

@@ -67,6 +67,7 @@ RendererInitializer::RendererInitializer()
 	newOption("samples", 1);
 	newOption("tilesXCount", 16);
 	newOption("tilesYCount", 16);
+	newOption("tessellation", true);
 
 	if(GlStateCommonSingleton::get().getGpu() == GlStateCommon::GPU_ARM)
 	{
@@ -110,6 +111,9 @@ void Renderer::init(const RendererInitializer& initializer)
 	tilesCount.x() = initializer.get("tilesXCount");
 	tilesCount.y() = initializer.get("tilesYCount");
 
+	tessellation = GlStateCommonSingleton::get().isTessellationSupported() 
+		&& (U)initializer.get("tessellation");
+
 	// a few sanity checks
 	if(samples != 1 && samples != 4 && samples != 8 && samples != 16
 		&& samples != 32)
@@ -147,6 +151,7 @@ void Renderer::init(const RendererInitializer& initializer)
 	ss << "#define USE_MRT " << (U)useMrt << "\n"
 		<< "#define RENDERING_WIDTH " << width << "\n"
 		<< "#define RENDERING_HEIGHT " << height << "\n";
+
 	shaderPostProcessorString = ss.str();
 }
 

+ 10 - 0
src/resource/MaterialShaderProgramCreator.cpp

@@ -4,6 +4,8 @@
 #include "anki/util/StringList.h"
 #include "anki/misc/Xml.h"
 #include "anki/core/Logger.h"
+#include "anki/renderer/MainRenderer.h"
+
 #include <algorithm>
 #include <sstream>
 
@@ -77,12 +79,20 @@ void MaterialShaderProgramCreator::parseShaderProgramTag(
 	}
 
 	// Write all
+	tessellation = 
+		tessellation && MainRendererSingleton::get().usesTessellation();
+
 	std::stringstream defines;
 	defines << "#define INSTANCING " << (U)instanced << "\n";
 	defines << "#define INSTANCE_ID_FRAGMENT_SHADER " 
 		<< (U)instanceIdInFragmentShader << "\n";
 	defines << "#define TESSELLATION " << (U)tessellation << "\n";
 
+	if(!tessellation)
+	{
+		defines << "#pragma anki disable tess\n";
+	}
+
 	source  = defines.str() + srcLines.join("\n");
 }
 

+ 5 - 0
src/resource/Model.cpp

@@ -63,6 +63,11 @@ void ModelPatchBase::createVao(const ShaderProgram& prog,
 			offset);
 	}
 
+	if(vao.getAttachmentsCount() < 1)
+	{
+		throw ANKI_EXCEPTION("The program doesn't have any attributes");
+	}
+
 	// The indices VBO
 	meshb.getVboInfo(Mesh::VA_INDICES, vbo, size, type,
 			stride, offset);

+ 1 - 1
src/resource/ShaderProgramPrePreprocessor.cpp

@@ -22,7 +22,7 @@ static Array<const char*, 10> commands = {{
 	"#pragma anki start computeShader",
 	"#pragma anki include",
 	"#pragma anki transformFeedbackVaryings separate",
-	"#pragma anki transformFeedbackVaryings interleaved"
+	"#pragma anki transformFeedbackVaryings interleaved",
 	"#pragma anki disable tess"}};
 
 static_assert(ST_VERTEX == 0 && ST_COMPUTE == 5, "See file");

+ 4 - 1
testapp/Main.cpp

@@ -478,7 +478,7 @@ void mainLoop()
 
 		// Sleep
 		//
-#if 1
+#if 0
 		timer.stop();
 		if(timer.getElapsedTime() < AppSingleton::get().getTimerTick())
 		{
@@ -570,6 +570,9 @@ void initSubsystems(int argc, char* argv[])
 	initializer.get("height") = win->getHeight();
 	initializer.get("lodDistance") = 20.0;
 	initializer.get("samples") = 1;
+	initializer.get("tessellation") = true;
+	initializer.get("tilesXCount") = 16;
+	initializer.get("tilesYCount") = 16;
 
 	MainRendererSingleton::get().init(initializer);