Home | History | Annotate | Download | only in Main
      1 // Copyright 2016 The SwiftShader Authors. All Rights Reserved.
      2 //
      3 // Licensed under the Apache License, Version 2.0 (the "License");
      4 // you may not use this file except in compliance with the License.
      5 // You may obtain a copy of the License at
      6 //
      7 //    http://www.apache.org/licenses/LICENSE-2.0
      8 //
      9 // Unless required by applicable law or agreed to in writing, software
     10 // distributed under the License is distributed on an "AS IS" BASIS,
     11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     12 // See the License for the specific language governing permissions and
     13 // limitations under the License.
     14 
     15 #ifndef sw_SwiftConfig_hpp
     16 #define sw_SwiftConfig_hpp
     17 
     18 #include "Reactor/Nucleus.hpp"
     19 
     20 #include "Common/Thread.hpp"
     21 #include "Common/MutexLock.hpp"
     22 #include "Common/Socket.hpp"
     23 
     24 #include <string>
     25 
     26 namespace sw
     27 {
     28 	class SwiftConfig
     29 	{
     30 	public:
     31 		struct Configuration
     32 		{
     33 			int pixelShaderVersion;
     34 			int vertexShaderVersion;
     35 			int textureMemory;
     36 			int identifier;
     37 			int vertexRoutineCacheSize;
     38 			int pixelRoutineCacheSize;
     39 			int setupRoutineCacheSize;
     40 			int vertexCacheSize;
     41 			int textureSampleQuality;
     42 			int mipmapQuality;
     43 			bool perspectiveCorrection;
     44 			int transcendentalPrecision;
     45 			int threadCount;
     46 			bool enableSSE;
     47 			bool enableSSE2;
     48 			bool enableSSE3;
     49 			bool enableSSSE3;
     50 			bool enableSSE4_1;
     51 			Optimization optimization[10];
     52 			bool disableServer;
     53 			bool keepSystemCursor;
     54 			bool forceWindowed;
     55 			bool complementaryDepthBuffer;
     56 			bool postBlendSRGB;
     57 			bool exactColorRounding;
     58 			bool disableAlphaMode;
     59 			bool disable10BitMode;
     60 			int transparencyAntialiasing;
     61 			int frameBufferAPI;
     62 			bool precache;
     63 			int shadowMapping;
     64 			bool forceClearRegisters;
     65 		#ifndef NDEBUG
     66 			unsigned int minPrimitives;
     67 			unsigned int maxPrimitives;
     68 		#endif
     69 		};
     70 
     71 		SwiftConfig(bool disableServerOverride);
     72 
     73 		~SwiftConfig();
     74 
     75 		bool hasNewConfiguration(bool reset = true);
     76 		void getConfiguration(Configuration &configuration);
     77 
     78 	private:
     79 		enum Status
     80 		{
     81 			OK = 200,
     82 			NotFound = 404
     83 		};
     84 
     85 		void createServer();
     86 		void destroyServer();
     87 
     88 		static void serverRoutine(void *parameters);
     89 
     90 		void serverLoop();
     91 		void respond(Socket *clientSocket, const char *request);
     92 		std::string page();
     93 		std::string profile();
     94 		void send(Socket *clientSocket, Status code, std::string body = "");
     95 		void parsePost(const char *post);
     96 
     97 		void readConfiguration(bool disableServerOverride = false);
     98 		void writeConfiguration();
     99 
    100 		Configuration config;
    101 
    102 		Thread *serverThread;
    103 		volatile bool terminate;
    104 		MutexLock criticalSection;   // Protects reading and writing the configuration settings
    105 
    106 		bool newConfig;
    107 
    108 		Socket *listenSocket;
    109 
    110 		int bufferLength;
    111 		char *receiveBuffer;
    112 	};
    113 }
    114 
    115 #endif   // sw_SwiftConfig_hpp
    116