// SwiftShader Software Renderer
//
// Copyright(c) 2005-2011 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.
//

#include "SwiftConfig.hpp"

#include "Configurator.hpp"
#include "Debug.hpp"
#include "Config.hpp"
#include "Version.h"

#include <sstream>
#include <stdio.h>
#include <time.h>
#include <sys/stat.h>

#if PERF_PROFILE
extern Profiler profiler;
#endif

namespace sw
{
	std::string itoa(int number)
	{
		std::stringstream ss;
		ss << number;
		return ss.str();
	}
	
	std::string ftoa(double number)
	{
		std::stringstream ss;
		ss << number;
		return ss.str();
	}

	SwiftConfig::SwiftConfig(bool disableServerOverride)
	{
		InitializeCriticalSection(&criticalSection);

		readConfiguration(disableServerOverride);

		if(!disableServerOverride)
		{
			writeConfiguration();
		}

		receiveBuffer = 0;

		if(!config.disableServer)
		{
			createServer();
		}
	}

	SwiftConfig::~SwiftConfig()
	{
		destroyServer();

		DeleteCriticalSection(&criticalSection);
	}

	void SwiftConfig::createServer()
	{
		bufferLength = 16 * 1024;
		receiveBuffer = new char[bufferLength];

		WSADATA winsockData;
		WSAStartup(MAKEWORD(2, 2), &winsockData);

		addrinfo hints = {0};
		hints.ai_family = AF_INET;
		hints.ai_socktype = SOCK_STREAM;
		hints.ai_protocol = IPPROTO_TCP;
		hints.ai_flags = AI_PASSIVE;

		addrinfo *info;
		getaddrinfo("localhost", "8080", &hints, &info);

		listenSocket = socket(info->ai_family, info->ai_socktype, info->ai_protocol);
		bind(listenSocket, info->ai_addr, (int)info->ai_addrlen);
		listen(listenSocket, SOMAXCONN);

		terminate = false;
		serverThread = CreateThread(0, 1024 * 1024, serverRoutine, this, 0, 0);
	}

	void SwiftConfig::destroyServer()
	{
		if(receiveBuffer)
		{
			terminate = true;
			WaitForSingleObject(serverThread, INFINITE);
			CloseHandle(serverThread);

			closesocket(listenSocket);

			WSACleanup();

			delete[] receiveBuffer;
			receiveBuffer = 0;
		}
	}

	bool SwiftConfig::hasNewConfiguration(bool reset)
	{
		bool value = newConfig;

		if(reset)
		{
			newConfig = false;
		}

		return value;
	}

	void SwiftConfig::getConfiguration(Configuration &configuration)
	{
		EnterCriticalSection(&criticalSection);
		configuration = config;
		LeaveCriticalSection(&criticalSection);
	}

	unsigned long __stdcall SwiftConfig::serverRoutine(void *parameters)
	{
		SwiftConfig *swiftConfig = (SwiftConfig*)parameters;

		swiftConfig->serverLoop();

		return 0;
	}

	bool SwiftConfig::pending(SOCKET socket, int ms)
	{
		fd_set sockets = {1, {socket}};
		timeval timeout = {ms / 1000, ms % 1000};

		return select(0, &sockets, 0, 0, &timeout) == 1;
	}

	void SwiftConfig::serverLoop()
	{
		readConfiguration();

		while(!terminate)
		{
			if(pending(listenSocket, 100))
			{
				clientSocket = accept(listenSocket, 0, 0);
				int bytesReceived = 1;

				while(bytesReceived > 0 && !terminate)
				{
					if(pending(clientSocket, 10))
					{
						bytesReceived = recv(clientSocket, receiveBuffer, bufferLength, 0);

						if(bytesReceived > 0)
						{
							receiveBuffer[bytesReceived] = 0;
							
							respond(receiveBuffer);
						}
					}
				}

				closesocket(clientSocket);
			}
		}
	}

	bool match(const char **url, char *string)
	{
		size_t length = strlen(string);

		if(strncmp(*url, string, length) == 0)
		{
			*url += length;

			return true;
		}

		return false;
	}

	void SwiftConfig::respond(const char *request)
	{
		if(match(&request, "GET /"))
		{
			if(match(&request, "swiftshader") || match(&request, "swiftconfig"))
			{
				if(match(&request, " ") || match(&request, "/ "))
				{
					return send(OK, page());
				}
			}
		}
		else if(match(&request, "POST /"))
		{
			if(match(&request, "swiftshader") || match(&request, "swiftconfig"))
			{
				if(match(&request, " ") || match(&request, "/ "))
				{
					EnterCriticalSection(&criticalSection);

					const char *postData = strstr(request, "\r\n\r\n");
					postData = postData ? postData + 4 : 0;

					if(postData && strlen(postData) > 0)
					{
						parsePost(postData);
					}
					else   // POST data in next packet
					{
						int bytesReceived = recv(clientSocket, receiveBuffer, bufferLength, 0);
						
						if(bytesReceived > 0)
						{
							receiveBuffer[bytesReceived] = 0;
							parsePost(receiveBuffer);
						}
					}

					writeConfiguration();
					newConfig = true;

					if(config.disableServer)
					{
						destroyServer();
					}

					LeaveCriticalSection(&criticalSection);

					return send(OK, page());
				}
				else if(match(&request, "/profile "))
				{
					return send(OK, profile());
				}
			}
		}

		return send(NotFound);
	}

	std::string SwiftConfig::page()
	{
		std::string html;

		const std::string selected = "selected='selected'";
		const std::string checked = "checked='checked'";
		const std::string empty = "";

		html += "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01//EN' 'http://www.w3.org/TR/html4/strict.dtd'>\n";
		html += "<html>\n";
		html += "<head>\n";
		html += "<meta http-equiv='content-type' content='text/html; charset=UTF-8'>\n";
		html += "<title>SwiftShader Configuration Panel</title>\n";
		html += "</head>\n";
		html += "<body>\n";
		html += "<div id='profile'></div>\n";
		html += "<script type='text/javascript'>\n";
		html += "request();\n";
		html += "function request()\n";
		html += "{\n";
		html += "var xhr = new XMLHttpRequest();\n";
		html += "xhr.open('POST', 'http://localhost:8080/swiftshader/profile', true);\n";
		html += "xhr.onreadystatechange = function()\n";
		html += "{\n";
		html += "if(xhr.readyState == 4 && xhr.status == 200)\n";
		html += "{\n";
		html += "document.getElementById('profile').innerHTML = xhr.responseText;\n";
		html += "setTimeout('request()', 1000);\n";
		html += "}\n";
		html += "}\n";
		html += "xhr.send();\n";
		html += "}\n";
		html += "</script>\n";
		html += "<form method='POST' action=''>\n";
		html += "<h1>SwiftShader Configuration Panel</h1>\n";
		html += "<hr><p>\n";
		html += "<input type='submit' value='Apply changes' title='Click to apply all settings.'>\n";
	//	html += "<input type='reset' value='Reset changes' title='Click to reset your changes to the previous value.'>\n";
		html += "</p><hr>\n";
		html += "<h2><em>Device capabilities</em></h2>\n";
		html += "<table>\n";
		html += "<tr><td>Build revision:</td><td>" REVISION_STRING "</td></tr>\n";
		html += "<tr><td>Pixel shader model:</td><td><select name='pixelShaderVersion' title='The highest version of pixel shader supported by SwiftShader. Lower versions might be faster if supported by the application. Only effective after restarting the application.'>\n";
		html += "<option value='0'"  + (config.pixelShaderVersion ==  0 ? selected : empty) + ">0.0</option>\n";
		html += "<option value='11'" + (config.pixelShaderVersion == 11 ? selected : empty) + ">1.1</option>\n";
		html += "<option value='12'" + (config.pixelShaderVersion == 12 ? selected : empty) + ">1.2</option>\n";
		html += "<option value='13'" + (config.pixelShaderVersion == 13 ? selected : empty) + ">1.3</option>\n";
		html += "<option value='14'" + (config.pixelShaderVersion == 14 ? selected : empty) + ">1.4</option>\n";
		html += "<option value='20'" + (config.pixelShaderVersion == 20 ? selected : empty) + ">2.0</option>\n";
		html += "<option value='21'" + (config.pixelShaderVersion == 21 ? selected : empty) + ">2.x</option>\n";
		html += "<option value='30'" + (config.pixelShaderVersion == 30 ? selected : empty) + ">3.0 (default)</option>\n";
		html += "</select></td></tr>\n";
		html += "<tr><td>Vertex shader model:</td><td><select name='vertexShaderVersion' title='The highest version of vertex shader supported by SwiftShader. Lower versions might be faster if supported by the application. Only effective after restarting the application.'>\n";
		html += "<option value='0'"  + (config.vertexShaderVersion ==  0 ? selected : empty) + ">0.0</option>\n";
		html += "<option value='11'" + (config.vertexShaderVersion == 11 ? selected : empty) + ">1.1</option>\n";
		html += "<option value='20'" + (config.vertexShaderVersion == 20 ? selected : empty) + ">2.0</option>\n";
		html += "<option value='21'" + (config.vertexShaderVersion == 21 ? selected : empty) + ">2.x</option>\n";
		html += "<option value='30'" + (config.vertexShaderVersion == 30 ? selected : empty) + ">3.0 (default)</option>\n";
		html += "</select></td></tr>\n";
		html += "<tr><td>Texture memory:</td><td><select name='textureMemory' title='The maximum amount of memory used for textures and other resources.'>\n";
		html += "<option value='128'"  + (config.textureMemory == 128  ? selected : empty) + ">128 MB</option>\n";
		html += "<option value='256'"  + (config.textureMemory == 256  ? selected : empty) + ">256 MB (default)</option>\n";
		html += "<option value='512'"  + (config.textureMemory == 512  ? selected : empty) + ">512 MB</option>\n";
		html += "<option value='1024'" + (config.textureMemory == 1024 ? selected : empty) + ">1024 MB</option>\n";
		html += "<option value='2048'" + (config.textureMemory == 2048 ? selected : empty) + ">2048 MB</option>\n";
		html += "</select></td></tr>\n";
		html += "<tr><td>Device identifier:</td><td><select name='identifier' title='The information used by some applications to determine device capabilities.'>\n";
		html += "<option value='0'" + (config.identifier == 0 ? selected : empty) + ">TransGaming SwiftShader (default)</option>\n";
		html += "<option value='1'" + (config.identifier == 1 ? selected : empty) + ">NVIDIA GeForce 7900 GS</option>\n";
		html += "<option value='2'" + (config.identifier == 2 ? selected : empty) + ">ATI Mobility Radeon X1600</option>\n";
		html += "<option value='3'" + (config.identifier == 3 ? selected : empty) + ">Intel GMA X3100</option>\n";
		html += "<option value='4'" + (config.identifier == 4 ? selected : empty) + ">System device</option>\n";
		html += "</select></td></tr>\n";
		html += "</table>\n";
		html += "<h2><em>Cache sizes</em></h2>\n";
		html += "<table>\n";
		html += "<tr><td>Vertex routine cache size:</td><td><select name='vertexRoutineCacheSize' title='The number of dynamically generated vertex processing routines being cached for reuse. Lower numbers save memory but require more routines to be regenerated.'>\n";
		html += "<option value='64'"   + (config.vertexRoutineCacheSize == 64   ? selected : empty) + ">64</option>\n";
		html += "<option value='128'"  + (config.vertexRoutineCacheSize == 128  ? selected : empty) + ">128</option>\n";
		html += "<option value='256'"  + (config.vertexRoutineCacheSize == 256  ? selected : empty) + ">256</option>\n";
		html += "<option value='512'"  + (config.vertexRoutineCacheSize == 512  ? selected : empty) + ">512</option>\n";
		html += "<option value='1024'" + (config.vertexRoutineCacheSize == 1024 ? selected : empty) + ">1024 (default)</option>\n";
		html += "<option value='2048'" + (config.vertexRoutineCacheSize == 2048 ? selected : empty) + ">2048</option>\n";
		html += "<option value='4096'" + (config.vertexRoutineCacheSize == 4096 ? selected : empty) + ">4096</option>\n";
		html += "</select></td>\n";
		html += "</tr>\n";
		html += "<tr><td>Pixel routine cache size:</td><td><select name='pixelRoutineCacheSize' title='The number of dynamically generated pixel processing routines being cached for reuse. Lower numbers save memory but require more routines to be regenerated.'>\n";
		html += "<option value='64'"   + (config.pixelRoutineCacheSize == 64   ? selected : empty) + ">64</option>\n";
		html += "<option value='128'"  + (config.pixelRoutineCacheSize == 128  ? selected : empty) + ">128</option>\n";
		html += "<option value='256'"  + (config.pixelRoutineCacheSize == 256  ? selected : empty) + ">256</option>\n";
		html += "<option value='512'"  + (config.pixelRoutineCacheSize == 512  ? selected : empty) + ">512</option>\n";
		html += "<option value='1024'" + (config.pixelRoutineCacheSize == 1024 ? selected : empty) + ">1024 (default)</option>\n";
		html += "<option value='2048'" + (config.pixelRoutineCacheSize == 2048 ? selected : empty) + ">2048</option>\n";
		html += "<option value='4096'" + (config.pixelRoutineCacheSize == 4096 ? selected : empty) + ">4096</option>\n";
		html += "</select></td>\n";
		html += "</tr>\n";
		html += "<tr><td>Setup routine cache size:</td><td><select name='setupRoutineCacheSize' title='The number of dynamically generated primitive setup routines being cached for reuse. Lower numbers save memory but require more routines to be regenerated.'>\n";
		html += "<option value='64'"   + (config.setupRoutineCacheSize == 64   ? selected : empty) + ">64</option>\n";
		html += "<option value='128'"  + (config.setupRoutineCacheSize == 128  ? selected : empty) + ">128</option>\n";
		html += "<option value='256'"  + (config.setupRoutineCacheSize == 256  ? selected : empty) + ">256</option>\n";
		html += "<option value='512'"  + (config.setupRoutineCacheSize == 512  ? selected : empty) + ">512</option>\n";
		html += "<option value='1024'" + (config.setupRoutineCacheSize == 1024 ? selected : empty) + ">1024 (default)</option>\n";
		html += "<option value='2048'" + (config.setupRoutineCacheSize == 2048 ? selected : empty) + ">2048</option>\n";
		html += "<option value='4096'" + (config.setupRoutineCacheSize == 4096 ? selected : empty) + ">4096</option>\n";
		html += "</select></td>\n";
		html += "</tr>\n";
		html += "<tr><td>Vertex cache size:</td><td><select name='vertexCacheSize' title='The number of processed vertices being cached for reuse. Lower numbers save memory but require more vertices to be reprocessed.'>\n";
		html += "<option value='64'"   + (config.vertexCacheSize == 64   ? selected : empty) + ">64 (default)</option>\n";
		html += "</select></td>\n";
		html += "</tr>\n";
		html += "</table>\n";
		html += "<h2><em>Quality</em></h2>\n";
		html += "<table>\n";
		html += "<tr><td>Maximum texture sampling quality:</td><td><select name='textureSampleQuality' title='The maximum texture filtering quality. Lower settings can be faster but cause visual artifacts.'>\n";
		html += "<option value='0'" + (config.textureSampleQuality == 0 ? selected : empty) + ">Point</option>\n";
		html += "<option value='1'" + (config.textureSampleQuality == 1 ? selected : empty) + ">Linear</option>\n";
		html += "<option value='2'" + (config.textureSampleQuality == 2 ? selected : empty) + ">Anisotropic (default)</option>\n";
		html += "</select></td>\n";
		html += "</tr>\n";
		html += "<tr><td>Maximum mipmapping quality:</td><td><select name='mipmapQuality' title='The maximum mipmap filtering quality. Higher settings can be more visually appealing but are slower.'>\n";
		html += "<option value='0'" + (config.mipmapQuality == 0 ? selected : empty) + ">Point</option>\n";
		html += "<option value='1'" + (config.mipmapQuality == 1 ? selected : empty) + ">Linear (default)</option>\n";
		html += "</select></td>\n";
		html += "</tr>\n";
		html += "<tr><td>Perspective correction:</td><td><select name='perspectiveCorrection' title='Enables or disables perspective correction. Disabling it is faster but can causes distortion. Recommended for 2D applications only.'>\n";
		html += "<option value='0'" + (config.perspectiveCorrection == 0 ? selected : empty) + ">Off</option>\n";
		html += "<option value='1'" + (config.perspectiveCorrection == 1 ? selected : empty) + ">On (default)</option>\n";
		html += "</select></td>\n";
		html += "</tr>\n";
		html += "<tr><td>Transcendental function precision:</td><td><select name='transcendentalPrecision' title='The precision at which log/exp/pow/rcp/rsq/nrm shader instructions are computed. Lower settings can be faster but cause visual artifacts.'>\n";
		html += "<option value='0'" + (config.transcendentalPrecision == 0 ? selected : empty) + ">Approximate</option>\n";
		html += "<option value='1'" + (config.transcendentalPrecision == 1 ? selected : empty) + ">Partial</option>\n";
		html += "<option value='2'" + (config.transcendentalPrecision == 2 ? selected : empty) + ">Accurate (default)</option>\n";
		html += "<option value='3'" + (config.transcendentalPrecision == 3 ? selected : empty) + ">WHQL</option>\n";
		html += "<option value='4'" + (config.transcendentalPrecision == 4 ? selected : empty) + ">IEEE</option>\n";
		html += "</select></td>\n";
		html += "</tr>\n";
		html += "<tr><td>Transparency anti-aliasing:</td><td><select name='transparencyAntialiasing' title='The technique used to anti-alias alpha-tested transparent textures.'>\n";
		html += "<option value='0'" + (config.transparencyAntialiasing == 0 ? selected : empty) + ">None (default)</option>\n";
		html += "<option value='1'" + (config.transparencyAntialiasing == 1 ? selected : empty) + ">Alpha-to-Coverage</option>\n";
		html += "</select></td>\n";
		html += "</table>\n";
		html += "<h2><em>Processor settings</em></h2>\n";
		html += "<table>\n";
		html += "<tr><td>Number of threads:</td><td><select name='threadCount' title='The number of rendering threads to be used.'>\n";
		html += "<option value='-1'" + (config.threadCount == -1 ? selected : empty) + ">Core count</option>\n";
		html += "<option value='0'"  + (config.threadCount == 0  ? selected : empty) + ">Process affinity (default)</option>\n";
		html += "<option value='1'"  + (config.threadCount == 1  ? selected : empty) + ">1</option>\n";
		html += "<option value='2'"  + (config.threadCount == 2  ? selected : empty) + ">2</option>\n";
		html += "<option value='3'"  + (config.threadCount == 3  ? selected : empty) + ">3</option>\n";
		html += "<option value='4'"  + (config.threadCount == 4  ? selected : empty) + ">4</option>\n";
		html += "<option value='5'"  + (config.threadCount == 5  ? selected : empty) + ">5</option>\n";
		html += "<option value='6'"  + (config.threadCount == 6  ? selected : empty) + ">6</option>\n";
		html += "<option value='7'"  + (config.threadCount == 7  ? selected : empty) + ">7</option>\n";
		html += "<option value='8'"  + (config.threadCount == 8  ? selected : empty) + ">8</option>\n";
		html += "<option value='9'"  + (config.threadCount == 9  ? selected : empty) + ">9</option>\n";
		html += "<option value='10'" + (config.threadCount == 10 ? selected : empty) + ">10</option>\n";
		html += "<option value='11'" + (config.threadCount == 11 ? selected : empty) + ">11</option>\n";
		html += "<option value='12'" + (config.threadCount == 12 ? selected : empty) + ">12</option>\n";
		html += "<option value='13'" + (config.threadCount == 13 ? selected : empty) + ">13</option>\n";
		html += "<option value='14'" + (config.threadCount == 14 ? selected : empty) + ">14</option>\n";
		html += "<option value='15'" + (config.threadCount == 15 ? selected : empty) + ">15</option>\n";
		html += "<option value='16'" + (config.threadCount == 16 ? selected : empty) + ">16</option>\n";
		html += "</select></td></tr>\n";
		html += "<tr><td>Enable SSE:</td><td><input name = 'enableSSE' type='checkbox'" + (config.enableSSE == true ? checked : empty) + " disabled='disabled' title='If checked enables the use of SSE instruction set extentions if supported by the CPU.'></td></tr>";
		html += "<tr><td>Enable SSE2:</td><td><input name = 'enableSSE2' type='checkbox'" + (config.enableSSE2 == true ? checked : empty) + " disabled='disabled' title='If checked enables the use of SSE2 instruction set extentions if supported by the CPU.'></td></tr>";
		html += "<tr><td>Enable SSE3:</td><td><input name = 'enableSSE3' type='checkbox'" + (config.enableSSE3 == true ? checked : empty) + " title='If checked enables the use of SSE3 instruction set extentions if supported by the CPU.'></td></tr>";
		html += "<tr><td>Enable SSSE3:</td><td><input name = 'enableSSSE3' type='checkbox'" + (config.enableSSSE3 == true ? checked : empty) + " title='If checked enables the use of SSSE3 instruction set extentions if supported by the CPU.'></td></tr>";
		html += "<tr><td>Enable SSE4.1:</td><td><input name = 'enableSSE4_1' type='checkbox'" + (config.enableSSE4_1 == true ? checked : empty) + " title='If checked enables the use of SSE4.1 instruction set extentions if supported by the CPU.'></td></tr>";
		html += "</table>\n";
		html += "<h2><em>Compiler optimizations</em></h2>\n";
		html += "<table>\n";

		for(int pass = 0; pass < 10; pass++)
		{
			html += "<tr><td>Optimization pass " + itoa(pass + 1) + ":</td><td><select name='optimization" + itoa(pass + 1) + "' title='An optimization pass for the shader compiler.'>\n";
			html += "<option value='0'"  + (config.optimization[pass] == 0  ? selected : empty) + ">Disabled" + (pass > 0 ? " (default)" : "") + "</option>\n";
			html += "<option value='1'"  + (config.optimization[pass] == 1  ? selected : empty) + ">Instruction Combining" + (pass == 0 ? " (default)" : "") + "</option>\n";
			html += "<option value='2'"  + (config.optimization[pass] == 2  ? selected : empty) + ">Control Flow Simplification</option>\n";
			html += "<option value='3'"  + (config.optimization[pass] == 3  ? selected : empty) + ">Loop Invariant Code Motion</option>\n";
			html += "<option value='4'"  + (config.optimization[pass] == 4  ? selected : empty) + ">Aggressive Dead Code Elimination</option>\n";
			html += "<option value='5'"  + (config.optimization[pass] == 5  ? selected : empty) + ">Global Value Numbering</option>\n";
			html += "<option value='6'"  + (config.optimization[pass] == 6  ? selected : empty) + ">Commutative Expressions Reassociation</option>\n";
			html += "<option value='7'"  + (config.optimization[pass] == 7  ? selected : empty) + ">Dead Store Elimination</option>\n";
			html += "<option value='8'"  + (config.optimization[pass] == 8  ? selected : empty) + ">Sparse Conditional Copy Propagation</option>\n";
			html += "</select></td></tr>\n";
		}

		html += "</table>\n";
		html += "<h2><em>Testing & Experimental</em></h2>\n";
		html += "<table>\n";
		html += "<tr><td>Disable SwiftConfig server:</td><td><input name = 'disableServer' type='checkbox'" + (config.disableServer == true ? checked : empty) + " title='If checked disables the web browser based control panel.'></td></tr>";
		html += "<tr><td>Force windowed mode:</td><td><input name = 'forceWindowed' type='checkbox'" + (config.forceWindowed == true ? checked : empty) + " title='If checked prevents the application from switching to full-screen mode.'></td></tr>";
		html += "<tr><td>Complementary depth buffer:</td><td><input name = 'complementaryDepthBuffer' type='checkbox'" + (config.complementaryDepthBuffer == true ? checked : empty) + " title='If checked causes 1 - z to be stored in the depth buffer.'></td></tr>";
		html += "<tr><td>Post alpha blend sRGB conversion:</td><td><input name = 'postBlendSRGB' type='checkbox'" + (config.postBlendSRGB == true ? checked : empty) + " title='If checked alpha blending is performed in linear color space.'></td></tr>";
		html += "<tr><td>Exact color rounding:</td><td><input name = 'exactColorRounding' type='checkbox'" + (config.exactColorRounding == true ? checked : empty) + " title='If checked color rounding is done at high accuracy.'></td></tr>";
		html += "<tr><td>Disable alpha display formats:</td><td><input name = 'disableAlphaMode' type='checkbox'" + (config.disableAlphaMode == true ? checked : empty) + " title='If checked the device does not advertise the A8R8G8B8 display mode.'></td></tr>";
		html += "<tr><td>Disable 10-bit display formats:</td><td><input name = 'disable10BitMode' type='checkbox'" + (config.disable10BitMode == true ? checked : empty) + " title='If checked the device does not advertise the A2R10G10B10 display mode.'></td></tr>";
		html += "<tr><td>Frame-buffer API:</td><td><select name='frameBufferAPI' title='The API used for displaying the rendered result on screen (requires restart).'>\n";
		html += "<option value='0'" + (config.frameBufferAPI == 0 ? selected : empty) + ">DirectDraw (default)</option>\n";
		html += "<option value='1'" + (config.frameBufferAPI == 1 ? selected : empty) + ">GDI</option>\n";
		html += "</select></td>\n";
		html += "<tr><td>Shadow mapping extensions:</td><td><select name='shadowMapping' title='Features that may accelerate or improve the quality of shadow mapping.'>\n";
		html += "<option value='0'" + (config.shadowMapping == 0 ? selected : empty) + ">None</option>\n";
		html += "<option value='1'" + (config.shadowMapping == 1 ? selected : empty) + ">Fetch4</option>\n";
		html += "<option value='2'" + (config.shadowMapping == 2 ? selected : empty) + ">DST</option>\n";
		html += "<option value='3'" + (config.shadowMapping == 3 ? selected : empty) + ">Fetch4 & DST (default)</option>\n";
		html += "</select></td>\n";
		html += "<tr><td>Force clearing registers that have no default value:</td><td><input name = 'forceClearRegisters' type='checkbox'" + (config.forceClearRegisters == true ? checked : empty) + " title='Initializes shader register values to 0 even if they have no default.'></td></tr>";
		html += "</table>\n";
	#ifndef NDEBUG
		html += "<h2><em>Debugging</em></h2>\n";
		html += "<table>\n";
		html += "<tr><td>Minimum primitives:</td><td><input type='text' size='10' maxlength='10' name='minPrimitives' value='" + itoa(config.minPrimitives) + "'></td></tr>\n";
		html += "<tr><td>Maximum primitives:</td><td><input type='text' size='10' maxlength='10' name='maxPrimitives' value='" + itoa(config.maxPrimitives) + "'></td></tr>\n";
		html += "</table>\n";
	#endif
		html += "<hr><p>\n";
		html += "<span style='font-size:10pt'>Hover the mouse pointer over a control to get additional information.</span><br>\n";
		html += "<span style='font-size:10pt'>Some settings can be applied interactively, some need a restart of the application.</span><br>\n";
		html += "<span style='font-size:10pt'>Removing the SwiftShader.ini file results in resetting the options to their default.</span></p>\n";
		html += "</form>\n";
		html += "</body>\n";
		html += "</html>\n";

		#if PERF_PROFILE
			profiler.reset();
		#endif

		return html;
	}

	std::string SwiftConfig::profile()
	{
		std::string html;

		#if PERF_PROFILE
			int texTime = (int)(1000 * profiler.cycles[PERF_TEX] / profiler.cycles[PERF_PIXEL] + 0.5);
			int shaderTime = (int)(1000 * profiler.cycles[PERF_SHADER] / profiler.cycles[PERF_PIXEL] + 0.5);
			int pipeTime = (int)(1000 * profiler.cycles[PERF_PIPE] / profiler.cycles[PERF_PIXEL] + 0.5);
			int ropTime = (int)(1000 * profiler.cycles[PERF_ROP] / profiler.cycles[PERF_PIXEL] + 0.5);
			int interpTime = (int)(1000 * profiler.cycles[PERF_INTERP] / profiler.cycles[PERF_PIXEL] + 0.5);
			int rastTime = 1000 - pipeTime;

			pipeTime -= shaderTime + ropTime + interpTime;
			shaderTime -= texTime;

			double texTimeF = (double)texTime / 10;
			double shaderTimeF = (double)shaderTime / 10;
			double pipeTimeF = (double)pipeTime / 10;
			double ropTimeF = (double)ropTime / 10;
			double interpTimeF = (double)interpTime / 10;
			double rastTimeF = (double)rastTime / 10;

			double averageRopOperations = profiler.ropOperationsTotal / std::max(profiler.framesTotal, 1) / 1.0e6f;
			double averageCompressedTex = profiler.compressedTexTotal / std::max(profiler.framesTotal, 1) / 1.0e6f;
			double averageTexOperations = profiler.texOperationsTotal / std::max(profiler.framesTotal, 1) / 1.0e6f;

			html += "<p>FPS: " + ftoa(profiler.FPS) + "</p>\n";
			html += "<p>Frame: " + itoa(profiler.framesTotal) + "</p>\n";
			html += "<p>Raster operations (million): " + ftoa(profiler.ropOperationsFrame / 1.0e6f) + " (current), " + ftoa(averageRopOperations) + " (average)</p>\n";
			html += "<p>Texture operations (million): " + ftoa(profiler.texOperationsFrame / 1.0e6f) + " (current), " + ftoa(averageTexOperations) + " (average)</p>\n";
			html += "<p>Compressed texture operations (million): " + ftoa(profiler.compressedTexFrame / 1.0e6f) + " (current), " + ftoa(averageCompressedTex) + " (average)</p>\n";
			html += "<div id='profile' style='position:relative; width:1010px; height:50px; background-color:silver;'>";
			html += "<div style='position:relative; width:1000px; height:40px; background-color:white; left:5px; top:5px;'>";
			html += "<div style='position:relative; float:left; width:" + itoa(rastTime)   + "px; height:40px; border-style:none; text-align:center; line-height:40px; background-color:#FFFF7F; overflow:hidden;'>" + ftoa(rastTimeF)   + "% rast</div>\n";
			html += "<div style='position:relative; float:left; width:" + itoa(pipeTime)   + "px; height:40px; border-style:none; text-align:center; line-height:40px; background-color:#FF7F7F; overflow:hidden;'>" + ftoa(pipeTimeF)   + "% pipe</div>\n";
			html += "<div style='position:relative; float:left; width:" + itoa(interpTime) + "px; height:40px; border-style:none; text-align:center; line-height:40px; background-color:#7FFFFF; overflow:hidden;'>" + ftoa(interpTimeF) + "% interp</div>\n";
			html += "<div style='position:relative; float:left; width:" + itoa(shaderTime) + "px; height:40px; border-style:none; text-align:center; line-height:40px; background-color:#7FFF7F; overflow:hidden;'>" + ftoa(shaderTimeF) + "% shader</div>\n";
			html += "<div style='position:relative; float:left; width:" + itoa(texTime)    + "px; height:40px; border-style:none; text-align:center; line-height:40px; background-color:#FF7FFF; overflow:hidden;'>" + ftoa(texTimeF)    + "% tex</div>\n";
			html += "<div style='position:relative; float:left; width:" + itoa(ropTime)    + "px; height:40px; border-style:none; text-align:center; line-height:40px; background-color:#7F7FFF; overflow:hidden;'>" + ftoa(ropTimeF)    + "% rop</div>\n";
			html += "</div></div>\n";

			for(int i = 0; i < PERF_TIMERS; i++)
			{
				profiler.cycles[i] = 0;
			}
		#endif

		return html;
	}

	void SwiftConfig::send(Status code, std::string body)
	{
		std::string status;
		char header[1024];

		switch(code)
		{
		case OK:       status += "HTTP/1.1 200 OK\r\n";        break;
		case NotFound: status += "HTTP/1.1 404 Not Found\r\n"; break;
		}

		sprintf(header, "Content-Type: text/html; charset=UTF-8\r\n"
						"Content-Length: %d\r\n"
						"Host: localhost\r\n"
						"\r\n", body.size());

		std::string message = status + header + body;
		::send(clientSocket, message.c_str(), (int)message.length(), 0);
	}

	void SwiftConfig::parsePost(const char *post)
	{
		// Only enabled checkboxes appear in the POST
		config.enableSSE = true;
		config.enableSSE2 = true;
		config.enableSSE3 = false;
		config.enableSSSE3 = false;
		config.enableSSE4_1 = false;
		config.disableServer = false;
		config.forceWindowed = false;
		config.complementaryDepthBuffer = false;
		config.postBlendSRGB = false;
		config.exactColorRounding = false;
		config.disableAlphaMode = false;
		config.disable10BitMode = false;
		config.forceClearRegisters = false;

		while(*post != 0)
		{
			int integer;
			int index;

			if(sscanf(post, "pixelShaderVersion=%d", &integer))
			{
				config.pixelShaderVersion = integer;
			}
			else if(sscanf(post, "vertexShaderVersion=%d", &integer))
			{
				config.vertexShaderVersion = integer;
			}
			else if(sscanf(post, "textureMemory=%d", &integer))
			{
				config.textureMemory = integer;
			}
			else if(sscanf(post, "identifier=%d", &integer))
			{
				config.identifier = integer;
			}
			else if(sscanf(post, "vertexRoutineCacheSize=%d", &integer))
			{
				config.vertexRoutineCacheSize = integer;
			}
			else if(sscanf(post, "pixelRoutineCacheSize=%d", &integer))
			{
				config.pixelRoutineCacheSize = integer;
			}
			else if(sscanf(post, "setupRoutineCacheSize=%d", &integer))
			{
				config.setupRoutineCacheSize = integer;
			}
			else if(sscanf(post, "vertexCacheSize=%d", &integer))
			{
				config.vertexCacheSize = integer;
			}
			else if(sscanf(post, "textureSampleQuality=%d", &integer))
			{
				config.textureSampleQuality = integer;
			}
			else if(sscanf(post, "mipmapQuality=%d", &integer))
			{
				config.mipmapQuality = integer;
			}
			else if(sscanf(post, "perspectiveCorrection=%d", &integer))
			{
				config.perspectiveCorrection = integer != 0;
			}
			else if(sscanf(post, "transcendentalPrecision=%d", &integer))
			{
				config.transcendentalPrecision = integer;
			}
			else if(sscanf(post, "transparencyAntialiasing=%d", &integer))
			{
				config.transparencyAntialiasing = integer;
			}
			else if(sscanf(post, "threadCount=%d", &integer))
			{
				config.threadCount = integer;
			}
			else if(sscanf(post, "frameBufferAPI=%d", &integer))
			{
				config.frameBufferAPI = integer;
			}
			else if(sscanf(post, "shadowMapping=%d", &integer))
			{
				config.shadowMapping = integer;
			}
			else if(strstr(post, "enableSSE=on"))
			{
				config.enableSSE = true;
			}
			else if(strstr(post, "enableSSE2=on"))
			{
				if(config.enableSSE)
				{
					config.enableSSE2 = true;
				}
			}
			else if(strstr(post, "enableSSE3=on"))
			{
				if(config.enableSSE2)
				{
					config.enableSSE3 = true;
				}
			}
			else if(strstr(post, "enableSSSE3=on"))
			{
				if(config.enableSSE3)
				{
					config.enableSSSE3 = true;
				}
			}
			else if(strstr(post, "enableSSE4_1=on"))
			{
				if(config.enableSSSE3)
				{
					config.enableSSE4_1 = true;
				}
			}
			else if(sscanf(post, "optimization%d=%d", &index, &integer))
			{
				config.optimization[index - 1] = (Optimization)integer;
			}
			else if(strstr(post, "disableServer=on"))
			{
				config.disableServer = true;
			}
			else if(strstr(post, "forceWindowed=on"))
			{
				config.forceWindowed = true;
			}
			else if(strstr(post, "complementaryDepthBuffer=on"))
			{
				config.complementaryDepthBuffer = true;
			}
			else if(strstr(post, "postBlendSRGB=on"))
			{
				config.postBlendSRGB = true;
			}
			else if(strstr(post, "exactColorRounding=on"))
			{
				config.exactColorRounding = true;
			}
			else if(strstr(post, "disableAlphaMode=on"))
			{
				config.disableAlphaMode = true;
			}
			else if(strstr(post, "disable10BitMode=on"))
			{
				config.disable10BitMode = true;
			}
			else if(strstr(post, "forceClearRegisters=on"))
			{
				config.forceClearRegisters = true;
			}
		#ifndef NDEBUG		
			else if(sscanf(post, "minPrimitives=%d", &integer))
			{
				config.minPrimitives = integer;
			}
			else if(sscanf(post, "maxPrimitives=%d", &integer))
			{
				config.maxPrimitives = integer;
			}
		#endif
			else
			{
				ASSERT(false);
			}

			do
			{
				post++;
			}
			while(post[-1] != '&' && *post != 0);
		}
	}

	void SwiftConfig::readConfiguration(bool disableServerOverride)
	{
		Configurator ini("SwiftShader.ini");

		config.pixelShaderVersion = ini.getInteger("Capabilities", "PixelShaderVersion", 30);
		config.vertexShaderVersion = ini.getInteger("Capabilities", "VertexShaderVersion", 30);
		config.textureMemory = ini.getInteger("Capabilities", "TextureMemory", 256);
		config.identifier = ini.getInteger("Capabilities", "Identifier", 0);
		config.vertexRoutineCacheSize = ini.getInteger("Caches", "VertexRoutineCacheSize", 1024);
		config.pixelRoutineCacheSize = ini.getInteger("Caches", "PixelRoutineCacheSize", 1024);
		config.setupRoutineCacheSize = ini.getInteger("Caches", "SetupRoutineCacheSize", 1024);
		config.vertexCacheSize = ini.getInteger("Caches", "VertexCacheSize", 64);
		config.textureSampleQuality = ini.getInteger("Quality", "TextureSampleQuality", 2);
		config.mipmapQuality = ini.getInteger("Quality", "MipmapQuality", 1);
		config.perspectiveCorrection = ini.getBoolean("Quality", "PerspectiveCorrection", true);
		config.transcendentalPrecision = ini.getInteger("Quality", "TranscendentalPrecision", 2);
		config.transparencyAntialiasing = ini.getInteger("Quality", "TransparencyAntialiasing", 0);
		config.threadCount = ini.getInteger("Processor", "ThreadCount", 0);
		config.enableSSE = ini.getBoolean("Processor", "EnableSSE", true);
		config.enableSSE2 = ini.getBoolean("Processor", "EnableSSE2", true);
		config.enableSSE3 = ini.getBoolean("Processor", "EnableSSE3", true);
		config.enableSSSE3 = ini.getBoolean("Processor", "EnableSSSE3", true);
		config.enableSSE4_1 = ini.getBoolean("Processor", "EnableSSE4_1", true);

		for(int pass = 0; pass < 10; pass++)
		{
			config.optimization[pass] = (Optimization)ini.getInteger("Optimization", "OptimizationPass" + itoa(pass + 1), pass == 0 ? InstructionCombining : Disabled);
		}

		config.disableServer = ini.getBoolean("Testing", "DisableServer", true);
		config.forceWindowed = ini.getBoolean("Testing", "ForceWindowed", false);
		config.complementaryDepthBuffer = ini.getBoolean("Testing", "ComplementaryDepthBuffer", false);
		config.postBlendSRGB = ini.getBoolean("Testing", "PostBlendSRGB", false);
		config.exactColorRounding = ini.getBoolean("Testing", "ExactColorRounding", false);
		config.disableAlphaMode = ini.getBoolean("Testing", "DisableAlphaMode", false);
		config.disable10BitMode = ini.getBoolean("Testing", "Disable10BitMode", false);
		config.frameBufferAPI = ini.getInteger("Testing", "FrameBufferAPI", 0);
		config.shadowMapping = ini.getInteger("Testing", "ShadowMapping", 3);
		config.forceClearRegisters = ini.getBoolean("Testing", "ForceClearRegisters", false);

	#ifndef NDEBUG
		config.minPrimitives = 1;
		config.maxPrimitives = 1 << 21;
	#endif

		struct stat status;
		int lastModified = ini.getInteger("LastModified", "Time", 0);

		bool noConfig = stat("SwiftShader.ini", &status) != 0;
		newConfig = !noConfig && abs((int)status.st_mtime - lastModified) > 1;

		if(disableServerOverride)
		{
			config.disableServer = true;
		}
	}

	void SwiftConfig::writeConfiguration()
	{
		Configurator ini("SwiftShader.ini");
		
		ini.addValue("Capabilities", "PixelShaderVersion", itoa(config.pixelShaderVersion));
		ini.addValue("Capabilities", "VertexShaderVersion", itoa(config.vertexShaderVersion));
		ini.addValue("Capabilities", "TextureMemory", itoa(config.textureMemory));
		ini.addValue("Capabilities", "Identifier", itoa(config.identifier));
		ini.addValue("Caches", "VertexRoutineCacheSize", itoa(config.vertexRoutineCacheSize));
		ini.addValue("Caches", "PixelRoutineCacheSize", itoa(config.pixelRoutineCacheSize));
		ini.addValue("Caches", "SetupRoutineCacheSize", itoa(config.setupRoutineCacheSize));
		ini.addValue("Caches", "VertexCacheSize", itoa(config.vertexCacheSize));
		ini.addValue("Quality", "TextureSampleQuality", itoa(config.textureSampleQuality));
		ini.addValue("Quality", "MipmapQuality", itoa(config.mipmapQuality));
		ini.addValue("Quality", "PerspectiveCorrection", itoa(config.perspectiveCorrection));
		ini.addValue("Quality", "TranscendentalPrecision", itoa(config.transcendentalPrecision));
		ini.addValue("Quality", "TransparencyAntialiasing", itoa(config.transparencyAntialiasing));
		ini.addValue("Processor", "ThreadCount", itoa(config.threadCount));
	//	ini.addValue("Processor", "EnableSSE", itoa(config.enableSSE));
	//	ini.addValue("Processor", "EnableSSE2", itoa(config.enableSSE2));
		ini.addValue("Processor", "EnableSSE3", itoa(config.enableSSE3));
		ini.addValue("Processor", "EnableSSSE3", itoa(config.enableSSSE3));
		ini.addValue("Processor", "EnableSSE4_1", itoa(config.enableSSE4_1));

		for(int pass = 0; pass < 10; pass++)
		{
			ini.addValue("Optimization", "OptimizationPass" + itoa(pass + 1), itoa(config.optimization[pass]));
		}

		ini.addValue("Testing", "DisableServer", itoa(config.disableServer));
		ini.addValue("Testing", "ForceWindowed", itoa(config.forceWindowed));
		ini.addValue("Testing", "ComplementaryDepthBuffer", itoa(config.complementaryDepthBuffer));
		ini.addValue("Testing", "PostBlendSRGB", itoa(config.postBlendSRGB));
		ini.addValue("Testing", "ExactColorRounding", itoa(config.exactColorRounding));
		ini.addValue("Testing", "DisableAlphaMode", itoa(config.disableAlphaMode));
		ini.addValue("Testing", "Disable10BitMode", itoa(config.disable10BitMode));
		ini.addValue("Testing", "FrameBufferAPI", itoa(config.frameBufferAPI));
		ini.addValue("Testing", "ShadowMapping", itoa(config.shadowMapping));
		ini.addValue("Testing", "ForceClearRegisters", itoa(config.forceClearRegisters));
		ini.addValue("LastModified", "Time", itoa((int)time(0)));

		ini.writeFile("SwiftShader Configuration File\n"
		              ";\n"
					  "; To get an overview of the valid settings and their meaning,\n"
					  "; run the application in windowed mode and open the\n"
					  "; SwiftConfig application or go to http://localhost:8080/swiftconfig.");
	}
}
