Panagiotis Christopoulos Charitos 12 years ago
parent
commit
fa46a80ac6

+ 5 - 3
AndroidManifest.xml

@@ -9,18 +9,20 @@
 		<activity 
 			android:name="android.app.NativeActivity"
 			android:label="AnKi Bench"
+			android:screenOrientation="landscape"
 			android:configChanges="orientation|keyboardHidden">
 			<meta-data 
 				android:name="android.app.lib_name"
-				android:value="ankibench" />
+				android:value="ankibench"/>
 			<intent-filter>
-				<action android:name="android.intent.action.MAIN" />
-				<category android:name="android.intent.category.LAUNCHER" />
+				<action android:name="android.intent.action.MAIN"/>
+				<category android:name="android.intent.category.LAUNCHER"/>
 			</intent-filter>
 		</activity>
 	</application>
 	<uses-feature android:glEsVersion="0x00030000"/>
 	<uses-sdk android:minSdkVersion="18"/>
+	<uses-permission android:name="android.permission.WAKE_LOCK"/>
 	<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
 	<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
 </manifest>

+ 5 - 3
CMakeLists.txt

@@ -47,7 +47,7 @@ IF(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
 ELSEIF(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
 	SET(_WIN_BACKEND "MACOS")
 ELSE()
-	SET(_WIN_BACKEND "DONT_KNOW")
+	MESSAGE(FATAL_ERROR "Couldn't determine the window backend. You need to specify it manually")
 ENDIF()
 
 SET(ANKI_WINDOW_BACKEND "${_WIN_BACKEND}" CACHE STRING "The window backend (GLXX11 or EGLX11 or EGLFBDEV or MACOS or or ANDROID or DUMMY)")
@@ -85,8 +85,10 @@ ENDIF()
 SET(CXX_FLAGS "${CXX_FLAGS} -static-libstdc++ ")
 
 # SSE
-IF(NOT ${ANKI_WINDOW_BACKEND} STREQUAL "ANDROID")
+IF(${ANKI_WINDOW_BACKEND} STREQUAL "GLXX11" OR ${ANKI_WINDOW_BACKEND} STREQUAL "MACOS")
 	SET(COMPILER_FLAGS "${COMPILER_FLAGS} -msse4 ")
+ELSE()
+	SET(COMPILER_FLAGS "${COMPILER_FLAGS} -mfpu=neon ")
 ENDIF()
 
 IF(${ANKI_BUILD_TYPE} STREQUAL "Debug")
@@ -96,7 +98,7 @@ IF(${ANKI_BUILD_TYPE} STREQUAL "Debug")
 ELSE()
 	# Release
 
-	SET(COMPILER_FLAGS "${COMPILER_FLAGS} -ffast-math -O4 -flto ")
+	SET(COMPILER_FLAGS "${COMPILER_FLAGS} -ffast-math -O4 -flto -DNODEBUG ")
 
 	# Add this because Android compiler complains
 	IF(ANDROID)

+ 1 - 1
bench/Main.cpp

@@ -142,7 +142,7 @@ void initSubsystems()
 	initializer.get("is.maxSpotLightsPerTile") = 4;
 	initializer.get("is.maxSpotTexLightsPerTile") = 4;
 	initializer.get("pps.enabled") = false;
-	//initializer.get("renderingQuality") = 0.25;
+	initializer.get("renderingQuality") = 0.25;
 	initializer.get("maxTextureSize") = 256;
 	initializer.get("mrt") = false;
 #endif

+ 1 - 1
build/clean

@@ -1,2 +1,2 @@
 #!/bin/bash
-ls | xargs -I % echo % | grep -v clean | grep -v genmakefile | xargs -I % rm -rf %
+ls | xargs -I % echo % | grep -v clean | grep -v .sh | xargs -I % rm -rf %

+ 53 - 0
include/anki/core/WorkingThread.h

@@ -0,0 +1,53 @@
+#ifndef ANKI_CORE_WORKING_THREAD_H
+#define ANKI_CORE_WORKING_THREAD_H
+
+#include "anki/util/Barrier.h"
+#include "anki/util/StdTypes.h"
+#include <thread>
+#include <memory>
+
+namespace anki {
+
+/// A job assignment for a WorkingThread
+struct WorkingThreadJob
+{
+	virtual ~WorkingThreadJob()
+	{}
+
+	virtual void operator()(U32 id) = 0;
+};
+
+/// The thread that executes a WorkingThreadJob
+class WorkingThread
+{
+public:
+	/// Constructor
+	WorkingThread(U32 id, const std::shared_ptr<WorkingThreadJob>& job);
+
+	/// @name Accessors
+	/// @{
+	U32 getId() const
+	{
+		return id;
+	}
+	/// @}
+
+private:
+	U32 id = 0; ///< An ID just to identify the thread
+	std::thread thread; ///< Runs the workingFunc
+	std::mutex mutex; ///< Protect the jobDone
+	std::condition_variable condVar; ///< To wake up the thread
+	std::shared_ptr<WorkingThreadJob> job;
+	Bool jobDone = false;
+
+	/// Start thread
+	void start();
+
+	/// Thread loop
+	void workingFunc();
+};
+
+} // end namespace anki
+
+#endif
+

+ 2 - 0
include/anki/renderer/MainRenderer.h

@@ -20,6 +20,8 @@ public:
 	/// @see Renderer::init
 	void init(const RendererInitializer& initializer);
 
+	void render(SceneGraph& scene);
+
 	/// Save the color buffer to a tga (lossless & uncompressed & slow)
 	/// or jpeg (lossy & compressed fast)
 	/// @param filename The file to save

+ 1 - 1
shaders/Pack.glsl

@@ -22,7 +22,7 @@ vec3 unpackNormal(in vec2 enc)
 #if GL_ES
 uint packUnorm4x8(in vec4 v)
 {
-	vec4 a = clamp(v, 0.0, 1.0) * 255.0;
+	highp vec4 a = clamp(v, 0.0, 1.0) * 255.0;
 	return uint(a.x) | (uint(a.y) << 8) | (uint(a.z) << 16) | (uint(a.w) << 24);
 }
  

+ 1 - 1
src/core/CMakeLists.txt

@@ -1,4 +1,4 @@
-SET(ANKI_CORE_SOURCES App.cpp Async.cpp Logger.cpp StdinListener.cpp ThreadPool.cpp Timestamp.cpp Counters.cpp)
+SET(ANKI_CORE_SOURCES App.cpp Async.cpp Logger.cpp StdinListener.cpp ThreadPool.cpp WorkingThread.cpp Timestamp.cpp Counters.cpp)
 
 IF(${ANKI_WINDOW_BACKEND} STREQUAL "GLXX11")
 	SET(ANKI_CORE_SOURCES ${ANKI_CORE_SOURCES} NativeWindowGlxX11.cpp)

+ 49 - 0
src/core/WorkingThread.cpp

@@ -0,0 +1,49 @@
+#include "anki/core/WorkingThread.h"
+#include "anki/core/Logger.h"
+
+namespace anki {
+
+#if 0
+
+//==============================================================================
+WorkingThread::WorkingThread(
+	U32 id, 
+	const std::shared_ptr<WorkingThreadJob>& job)
+{}
+
+//==============================================================================
+void WorkingThread::start()
+{
+	ANKI_LOGI("Starting working thread %d", id);
+	thread = std::thread(&WorkingThread::workingFunc, this);
+}
+
+//==============================================================================
+void WorkingThread::workingFunc()
+{
+	while(1)
+	{
+		// Wait for something
+		{
+			std::unique_lock<std::mutex> lock(mutex);
+			while(jobDone == true)
+			{
+				condVar.wait(lock);
+			}
+		}
+
+		// Exec
+		(*job)(id);
+
+		// Nullify
+		{
+			std::lock_guard<std::mutex> lock(mutex);
+			jobDone = true;
+		}
+
+		barrier->wait();
+	}
+}
+#endif
+
+} // end namespace anki

+ 8 - 0
src/renderer/MainRenderer.cpp

@@ -33,6 +33,14 @@ void MainRenderer::init(const RendererInitializer& initializer_)
 		getWidth(), getHeight());
 }
 
+//==============================================================================
+void MainRenderer::render(SceneGraph& scene)
+{
+	ANKI_COUNTER_START_TIMER(C_MAIN_RENDERER_TIME);
+	Renderer::render(scene);
+	ANKI_COUNTER_STOP_TIMER_INC(C_MAIN_RENDERER_TIME);
+}
+
 //==============================================================================
 void MainRenderer::initGl()
 {

+ 1 - 1
src/resource/Image.cpp

@@ -479,7 +479,7 @@ void Image::load(const char* filename, U32 maxTextureSize)
 		}
 		else if(strcmp(ext, "ankitex") == 0)
 		{
-#if 1
+#if 0
 			compression = Image::DC_RAW;
 #elif ANKI_GL == ANKI_GL_DESKTOP
 			compression = Image::DC_S3TC;