blob: efde23a3c898baeff22de60247c216ae8903994d [file] [log] [blame]
// SwiftShader Software Renderer
//
// Copyright(c) 2005-2012 TransGaming Inc.
//
// All rights reserved. No part of this software may be copied, distributed, transmitted,
// transcribed, stored in a retrieval system, translated into any human or computer
// language by any means, or disclosed to third parties without the explicit written
// agreement of TransGaming Inc. Without such an agreement, no rights or licenses, express
// or implied, including but not limited to any patent rights, are granted to you.
//
#ifndef sw_SwiftConfig_hpp
#define sw_SwiftConfig_hpp
#include "Reactor/Nucleus.hpp"
#include "Common/Thread.hpp"
#include "Common/MutexLock.hpp"
#include "Common/Socket.hpp"
#include <string>
namespace sw
{
class SwiftConfig
{
public:
struct Configuration
{
int pixelShaderVersion;
int vertexShaderVersion;
int textureMemory;
int identifier;
int vertexRoutineCacheSize;
int pixelRoutineCacheSize;
int setupRoutineCacheSize;
int vertexCacheSize;
int textureSampleQuality;
int mipmapQuality;
bool perspectiveCorrection;
int transcendentalPrecision;
int threadCount;
bool enableSSE;
bool enableSSE2;
bool enableSSE3;
bool enableSSSE3;
bool enableSSE4_1;
Optimization optimization[10];
bool disableServer;
bool keepSystemCursor;
bool forceWindowed;
bool complementaryDepthBuffer;
bool postBlendSRGB;
bool exactColorRounding;
bool disableAlphaMode;
bool disable10BitMode;
int transparencyAntialiasing;
int frameBufferAPI;
bool precache;
int shadowMapping;
bool forceClearRegisters;
#ifndef NDEBUG
unsigned int minPrimitives;
unsigned int maxPrimitives;
#endif
};
SwiftConfig(bool disableServerOverride);
~SwiftConfig();
bool hasNewConfiguration(bool reset = true);
void getConfiguration(Configuration &configuration);
private:
enum Status
{
OK = 200,
NotFound = 404
};
void createServer();
void destroyServer();
static void serverRoutine(void *parameters);
void serverLoop();
void respond(Socket *clientSocket, const char *request);
std::string page();
std::string profile();
void send(Socket *clientSocket, Status code, std::string body = "");
void parsePost(const char *post);
void readConfiguration(bool disableServerOverride = false);
void writeConfiguration();
Configuration config;
Thread *serverThread;
volatile bool terminate;
BackoffLock criticalSection; // Protects reading and writing the configuration settings
bool newConfig;
Socket *listenSocket;
Socket *clientSocket;
int bufferLength;
char *receiveBuffer;
};
}
#endif // sw_SwiftConfig_hpp