• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 <array>
25 #include <string>
26 
27 namespace sw
28 {
29 	class SwiftConfig
30 	{
31 	public:
32 		struct Configuration
33 		{
34 			int pixelShaderVersion;
35 			int vertexShaderVersion;
36 			int textureMemory;
37 			int identifier;
38 			int vertexRoutineCacheSize;
39 			int pixelRoutineCacheSize;
40 			int setupRoutineCacheSize;
41 			int vertexCacheSize;
42 			int textureSampleQuality;
43 			int mipmapQuality;
44 			bool perspectiveCorrection;
45 			int transcendentalPrecision;
46 			int threadCount;
47 			bool enableSSE;
48 			bool enableSSE2;
49 			bool enableSSE3;
50 			bool enableSSSE3;
51 			bool enableSSE4_1;
52 			std::array<rr::Optimization::Pass, 10> optimization;
53 			bool disableServer;
54 			bool keepSystemCursor;
55 			bool forceWindowed;
56 			bool complementaryDepthBuffer;
57 			bool postBlendSRGB;
58 			bool exactColorRounding;
59 			bool disableAlphaMode;
60 			bool disable10BitMode;
61 			int transparencyAntialiasing;
62 			int frameBufferAPI;
63 			bool precache;
64 			int shadowMapping;
65 			bool forceClearRegisters;
66 		#ifndef NDEBUG
67 			unsigned int minPrimitives;
68 			unsigned int maxPrimitives;
69 		#endif
70 		};
71 
72 		SwiftConfig(bool disableServerOverride);
73 
74 		~SwiftConfig();
75 
76 		bool hasNewConfiguration(bool reset = true);
77 		void getConfiguration(Configuration &configuration);
78 
79 	private:
80 		enum Status
81 		{
82 			OK = 200,
83 			NotFound = 404
84 		};
85 
86 		void createServer();
87 		void destroyServer();
88 
89 		static void serverRoutine(void *parameters);
90 
91 		void serverLoop();
92 		void respond(Socket *clientSocket, const char *request);
93 		std::string page();
94 		std::string profile();
95 		void send(Socket *clientSocket, Status code, std::string body = "");
96 		void parsePost(const char *post);
97 
98 		void readConfiguration(bool disableServerOverride = false);
99 		void writeConfiguration();
100 
101 		Configuration config;
102 
103 		Thread *serverThread;
104 		volatile bool terminate;
105 		MutexLock criticalSection;   // Protects reading and writing the configuration settings
106 
107 		bool newConfig;
108 
109 		Socket *listenSocket;
110 
111 		int bufferLength;
112 		char *receiveBuffer;
113 	};
114 }
115 
116 #endif   // sw_SwiftConfig_hpp
117