Add back the D3D9 code from before the April 2014 code dump.

Bug 22533227

Change-Id: Ib669fcd6a644c79b3a9e8f5dcf7da278d75cefef
Reviewed-on: https://swiftshader-review.googlesource.com/3730
Reviewed-by: Nicolas Capens <capn@google.com>
Tested-by: Nicolas Capens <capn@google.com>
diff --git a/src/D3D9/D3D9.cpp b/src/D3D9/D3D9.cpp
new file mode 100644
index 0000000..9a11bd4
--- /dev/null
+++ b/src/D3D9/D3D9.cpp
@@ -0,0 +1,293 @@
+// 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 "Direct3D9.hpp"
+#include "Direct3D9Ex.hpp"
+
+#include "Debug.hpp"
+
+#include "resource.h"
+
+#include <stdio.h>
+#include <assert.h>
+
+namespace D3D9
+{
+	class Direct3DShaderValidator9
+	{
+	public:
+		Direct3DShaderValidator9();
+
+		virtual ~Direct3DShaderValidator9();
+
+		virtual int __stdcall ValidateShader(long *shader, long *shader1, long *shader2, long *shader3);
+		virtual int __stdcall ValidateShader2(long *shader);
+		virtual int __stdcall ValidateShader3(long *shader, long *shader1, long *shader2, long *shader3);
+		virtual int __stdcall ValidateShader4(long *shader, long *shader1, long *shader2, long *shader3);
+		virtual int __stdcall ValidateShader5(long *shader, long *shader1, long *shader2);
+		virtual int __stdcall ValidateShader6(long *shader, long *shader1, long *shader2, long *shader3);
+	};
+
+	Direct3DShaderValidator9::Direct3DShaderValidator9()
+	{
+	}
+
+	Direct3DShaderValidator9::~Direct3DShaderValidator9()
+	{
+	}
+
+	int __stdcall Direct3DShaderValidator9::ValidateShader(long *shader, long *shader1, long *shader2, long *shader3)   // FIXME
+	{
+		TRACE("");
+
+		UNIMPLEMENTED();
+
+		return true;   // FIXME
+	}
+
+	int __stdcall Direct3DShaderValidator9::ValidateShader2(long *shader)   // FIXME
+	{
+		TRACE("");
+
+		UNIMPLEMENTED();
+
+		return true;   // FIXME
+	}
+
+	int __stdcall Direct3DShaderValidator9::ValidateShader3(long *shader, long *shader1, long *shader2, long *shader3)
+	{
+		TRACE("");
+
+		UNIMPLEMENTED();
+
+		return true;   // FIXME
+	}
+
+	int __stdcall Direct3DShaderValidator9::ValidateShader4(long *shader, long *shader1, long *shader2, long *shader3)
+	{
+		TRACE("");
+
+		UNIMPLEMENTED();
+
+		return true;   // FIXME
+	}
+
+	int __stdcall Direct3DShaderValidator9::ValidateShader5(long *shader, long *shader1, long *shader2)   // FIXME
+	{
+		TRACE("");
+
+		UNIMPLEMENTED();
+
+		return true;   // FIXME
+	}
+
+	int __stdcall Direct3DShaderValidator9::ValidateShader6(long *shader, long *shader1, long *shader2, long *shader3)   // FIXME
+	{
+		TRACE("");
+
+		UNIMPLEMENTED();
+
+		return true;   // FIXME
+	}
+}
+
+using namespace D3D9;
+
+extern "C"
+{
+	HINSTANCE dllInstance = 0;
+
+	int	__stdcall DllMain(HINSTANCE instance, unsigned long reason, void *reserved)
+	{
+		#ifndef NDEBUG
+			if(dllInstance == 0)
+			{
+				FILE *file = fopen("debug.txt", "w");   // Clear debug log
+				fclose(file);
+			}
+		#endif
+
+		GTRACE("HINSTANCE instance = 0x%0.8p, unsigned long reason = %d, void *reserved = 0x%0.8p", instance, reason, reserved);
+
+		dllInstance	= instance;
+
+		switch(reason)
+		{
+		case DLL_PROCESS_DETACH:
+			break;
+		case DLL_PROCESS_ATTACH:
+			DisableThreadLibraryCalls(instance);
+			break;
+		case DLL_THREAD_ATTACH:
+			break;
+		case DLL_THREAD_DETACH:
+			break;
+		default:
+			SetLastError(ERROR_INVALID_PARAMETER);
+			return FALSE;
+		}
+
+		return TRUE;
+	}
+
+	IDirect3D9 *__stdcall Direct3DCreate9(unsigned int version)
+	{
+		GTRACE("");
+
+		// D3D_SDK_VERSION check
+		if(version != (31 | 0x80000000) && // 9.0a/b DEBUG_INFO
+		   version != 31 &&                // 9.0a/b
+		   version != (32 | 0x80000000) && // 9.0c DEBUG_INFO
+		   version != 32)                  // 9.0c
+		{
+			return 0;
+		}
+
+		IDirect3D9 *device = new D3D9::Direct3D9(version, dllInstance);
+
+		if(device)
+		{
+			device->AddRef();
+		}
+
+		return device;
+	}
+
+	HRESULT __stdcall Direct3DCreate9Ex(unsigned int version, IDirect3D9Ex **device)
+	{
+		// D3D_SDK_VERSION check
+		if(version != (31 | 0x80000000) && // 9.0a/b DEBUG_INFO
+		   version != 31 &&                // 9.0a/b
+		   version != (32 | 0x80000000) && // 9.0c DEBUG_INFO
+		   version != 32)                  // 9.0c
+		{
+			return NOTAVAILABLE();
+		}
+
+		*device = new D3D9::Direct3D9Ex(version, dllInstance);
+
+		if(device)
+		{
+			(*device)->AddRef();
+		}
+		else
+		{
+			return OUTOFMEMORY();
+		}
+
+		return D3D_OK;
+	}
+
+	int __stdcall CheckFullscreen()
+	{
+		GTRACE("");
+
+		UNIMPLEMENTED();
+
+		return FALSE;
+	}
+
+	int __stdcall D3DPERF_BeginEvent(D3DCOLOR color, const wchar_t *name)
+	{
+		GTRACE("");
+
+	//	UNIMPLEMENTED();   // PIX unsupported
+
+		return -1;
+	}
+
+	int __stdcall D3DPERF_EndEvent()
+	{
+		GTRACE("");
+
+	//	UNIMPLEMENTED();   // PIX unsupported
+
+		return -1;
+	}
+
+	unsigned long __stdcall D3DPERF_GetStatus()
+	{
+		GTRACE("");
+
+	//	UNIMPLEMENTED();   // PIX unsupported
+
+		return 0;
+	}
+
+	int __stdcall D3DPERF_QueryRepeatFrame()
+	{
+		GTRACE("");
+
+	//	UNIMPLEMENTED();   // PIX unsupported
+
+		return FALSE;
+	}
+
+	void __stdcall D3DPERF_SetMarker(D3DCOLOR color, const wchar_t *name)
+	{
+		GTRACE("");
+
+	//	UNIMPLEMENTED();   // PIX unsupported
+	}
+
+	void __stdcall D3DPERF_SetOptions(unsigned long options)
+	{
+		GTRACE("");
+
+	//	UNIMPLEMENTED();   // PIX unsupported
+	}
+
+	void __stdcall D3DPERF_SetRegion(D3DCOLOR color, const wchar_t *name)
+	{
+		GTRACE("");
+	
+	//	UNIMPLEMENTED();   // PIX unsupported
+	}
+
+	void __cdecl DebugSetLevel(long level)
+	{
+		GTRACE("long level = %d", level);
+
+	//	UNIMPLEMENTED();   // Debug output unsupported
+	}
+
+	void __cdecl DebugSetMute(long mute)
+	{
+		GTRACE("long mute = %d", mute);
+
+	//	UNIMPLEMENTED();   // Debug output unsupported
+	}
+	
+	void *__stdcall Direct3DShaderValidatorCreate9()
+	{
+		GTRACE("");
+
+	//	UNIMPLEMENTED();
+
+		return 0;
+
+	//	return new D3D9::Direct3DShaderValidator9();
+	}
+
+	void __stdcall PSGPError()
+	{
+		GTRACE("");
+
+		UNIMPLEMENTED();
+	}
+
+	void __stdcall PSGPSampleTexture()
+	{
+		GTRACE("");
+
+		UNIMPLEMENTED();
+	}
+}