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 26namespace 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 BackoffLock 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