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/Capabilities.cpp b/src/D3D9/Capabilities.cpp
new file mode 100644
index 0000000..d6f3cf4
--- /dev/null
+++ b/src/D3D9/Capabilities.cpp
@@ -0,0 +1,417 @@
+// 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 "Capabilities.hpp"
+
+#include "Main/Config.hpp"
+
+namespace D3D9
+{
+	bool Capabilities::Surface::RenderTarget::NULL_ = true;
+	bool Capabilities::Surface::RenderTarget::R8G8B8 = false;
+	bool Capabilities::Surface::RenderTarget::R5G6B5 = true;
+	bool Capabilities::Surface::RenderTarget::X1R5G5B5 = true;
+	bool Capabilities::Surface::RenderTarget::A1R5G5B5 = true;
+	bool Capabilities::Surface::RenderTarget::A4R4G4B4 = true;
+	bool Capabilities::Surface::RenderTarget::R3G3B2 = false;
+	bool Capabilities::Surface::RenderTarget::A8R3G3B2 = false;
+	bool Capabilities::Surface::RenderTarget::X4R4G4B4 = true;
+	bool Capabilities::Surface::RenderTarget::A8R8G8B8 = true;
+	bool Capabilities::Surface::RenderTarget::X8R8G8B8 = true;
+	bool Capabilities::Surface::RenderTarget::A8B8G8R8 = true;
+	bool Capabilities::Surface::RenderTarget::X8B8G8R8 = true;
+	bool Capabilities::Surface::RenderTarget::G16R16 = true;
+	bool Capabilities::Surface::RenderTarget::A2B10G10R10 = true;
+	bool Capabilities::Surface::RenderTarget::A2R10G10B10 = true;
+	bool Capabilities::Surface::RenderTarget::A16B16G16R16 = true;
+	bool Capabilities::Surface::RenderTarget::R16F = true;
+	bool Capabilities::Surface::RenderTarget::G16R16F = true;
+	bool Capabilities::Surface::RenderTarget::A16B16G16R16F = true;
+	bool Capabilities::Surface::RenderTarget::R32F = true;
+	bool Capabilities::Surface::RenderTarget::G32R32F = true;
+	bool Capabilities::Surface::RenderTarget::A32B32G32R32F = true;
+
+	bool Capabilities::Surface::DepthStencil::D32 = true;
+	bool Capabilities::Surface::DepthStencil::D24S8 = true;
+	bool Capabilities::Surface::DepthStencil::D24X8 = true;
+	bool Capabilities::Surface::DepthStencil::D16 = true;
+	bool Capabilities::Surface::DepthStencil::D24FS8 = true;
+	bool Capabilities::Surface::DepthStencil::D32F_LOCKABLE = true;
+	bool Capabilities::Surface::DepthStencil::DF24 = true;
+	bool Capabilities::Surface::DepthStencil::DF16 = true;
+	bool Capabilities::Surface::DepthStencil::INTZ = true;
+
+	bool Capabilities::Surface::A8 = true;
+	bool Capabilities::Surface::R5G6B5 = true;
+	bool Capabilities::Surface::X1R5G5B5 = true;
+	bool Capabilities::Surface::A1R5G5B5 = true;
+	bool Capabilities::Surface::A4R4G4B4 = true;
+	bool Capabilities::Surface::R3G3B2 = true;
+	bool Capabilities::Surface::A8R3G3B2 = true;
+	bool Capabilities::Surface::X4R4G4B4 = true;
+	bool Capabilities::Surface::R8G8B8 = true;
+	bool Capabilities::Surface::X8R8G8B8 = true;
+	bool Capabilities::Surface::A8R8G8B8 = true;
+	bool Capabilities::Surface::X8B8G8R8 = true;
+	bool Capabilities::Surface::A8B8G8R8 = true;
+	bool Capabilities::Surface::P8 = false;
+	bool Capabilities::Surface::A8P8 = false;
+	bool Capabilities::Surface::G16R16 = true;
+	bool Capabilities::Surface::A2R10G10B10 = true;
+	bool Capabilities::Surface::A2B10G10R10 = true;
+	bool Capabilities::Surface::A16B16G16R16 = true;
+	bool Capabilities::Surface::DXT1 = S3TC_SUPPORT;
+	bool Capabilities::Surface::DXT2 = S3TC_SUPPORT;
+	bool Capabilities::Surface::DXT3 = S3TC_SUPPORT;
+	bool Capabilities::Surface::DXT4 = S3TC_SUPPORT;
+	bool Capabilities::Surface::DXT5 = S3TC_SUPPORT;
+	bool Capabilities::Surface::ATI1 = S3TC_SUPPORT;
+	bool Capabilities::Surface::ATI2 = S3TC_SUPPORT;
+	bool Capabilities::Surface::R16F = true;
+	bool Capabilities::Surface::G16R16F = true;
+	bool Capabilities::Surface::A16B16G16R16F = true;
+	bool Capabilities::Surface::R32F = true;
+	bool Capabilities::Surface::G32R32F = true;
+	bool Capabilities::Surface::A32B32G32R32F = true;
+	bool Capabilities::Surface::V8U8 = true;
+	bool Capabilities::Surface::L6V5U5 = true;
+	bool Capabilities::Surface::X8L8V8U8 = true;
+	bool Capabilities::Surface::Q8W8V8U8 = true;
+	bool Capabilities::Surface::V16U16 = true;
+	bool Capabilities::Surface::A2W10V10U10 = true;
+	bool Capabilities::Surface::Q16W16V16U16 = true;
+	bool Capabilities::Surface::L8 = true;
+	bool Capabilities::Surface::A4L4 = true;
+	bool Capabilities::Surface::L16 = true;
+	bool Capabilities::Surface::A8L8 = true;
+	bool Capabilities::Surface::NVDB = false;
+	bool Capabilities::Surface::ATOC = true;
+
+	bool Capabilities::Volume::A8 = true;
+	bool Capabilities::Volume::R5G6B5 = true;
+	bool Capabilities::Volume::X1R5G5B5 = true;
+	bool Capabilities::Volume::A1R5G5B5 = true;
+	bool Capabilities::Volume::A4R4G4B4 = true;
+	bool Capabilities::Volume::R3G3B2 = true;
+	bool Capabilities::Volume::A8R3G3B2 = true;
+	bool Capabilities::Volume::X4R4G4B4 = true;
+	bool Capabilities::Volume::R8G8B8 = false;
+	bool Capabilities::Volume::X8R8G8B8 = true;
+	bool Capabilities::Volume::A8R8G8B8 = true;
+	bool Capabilities::Volume::X8B8G8R8 = true;
+	bool Capabilities::Volume::A8B8G8R8 = true;
+	bool Capabilities::Volume::P8 = false;
+	bool Capabilities::Volume::A8P8 = false;
+	bool Capabilities::Volume::G16R16 = true;
+	bool Capabilities::Volume::A2R10G10B10 = true;
+	bool Capabilities::Volume::A2B10G10R10 = true;
+	bool Capabilities::Volume::A16B16G16R16 = true;
+	bool Capabilities::Volume::DXT1 = S3TC_SUPPORT;
+	bool Capabilities::Volume::DXT2 = S3TC_SUPPORT;
+	bool Capabilities::Volume::DXT3 = S3TC_SUPPORT;
+	bool Capabilities::Volume::DXT4 = S3TC_SUPPORT;
+	bool Capabilities::Volume::DXT5 = S3TC_SUPPORT;
+	bool Capabilities::Volume::ATI1 = S3TC_SUPPORT;
+	bool Capabilities::Volume::ATI2 = S3TC_SUPPORT;
+	bool Capabilities::Volume::R16F = true;
+	bool Capabilities::Volume::G16R16F = true;
+	bool Capabilities::Volume::A16B16G16R16F = true;
+	bool Capabilities::Volume::R32F = true;
+	bool Capabilities::Volume::G32R32F = true;
+	bool Capabilities::Volume::A32B32G32R32F = true;
+	bool Capabilities::Volume::V8U8 = true;
+	bool Capabilities::Volume::L6V5U5 = true;
+	bool Capabilities::Volume::X8L8V8U8 = true;
+	bool Capabilities::Volume::Q8W8V8U8 = true;
+	bool Capabilities::Volume::V16U16 = true;
+	bool Capabilities::Volume::A2W10V10U10 = true;
+	bool Capabilities::Volume::Q16W16V16U16 = true;
+	bool Capabilities::Volume::L8 = true;
+	bool Capabilities::Volume::A4L4 = true;
+	bool Capabilities::Volume::L16 = true;
+	bool Capabilities::Volume::A8L8 = true;
+
+	bool Capabilities::CubeMap::RenderTarget::NULL_ = true;
+	bool Capabilities::CubeMap::RenderTarget::R8G8B8 = false;
+	bool Capabilities::CubeMap::RenderTarget::R5G6B5 = true;
+	bool Capabilities::CubeMap::RenderTarget::X1R5G5B5 = true;
+	bool Capabilities::CubeMap::RenderTarget::A1R5G5B5 = true;
+	bool Capabilities::CubeMap::RenderTarget::A4R4G4B4 = true;
+	bool Capabilities::CubeMap::RenderTarget::R3G3B2 = false;
+	bool Capabilities::CubeMap::RenderTarget::A8R3G3B2 = false;
+	bool Capabilities::CubeMap::RenderTarget::X4R4G4B4 = true;
+	bool Capabilities::CubeMap::RenderTarget::A8R8G8B8 = true;
+	bool Capabilities::CubeMap::RenderTarget::X8R8G8B8 = true;
+	bool Capabilities::CubeMap::RenderTarget::A8B8G8R8 = true;
+	bool Capabilities::CubeMap::RenderTarget::X8B8G8R8 = true;
+	bool Capabilities::CubeMap::RenderTarget::G16R16 = true;
+	bool Capabilities::CubeMap::RenderTarget::A2B10G10R10 = true;
+	bool Capabilities::CubeMap::RenderTarget::A2R10G10B10 = true;
+	bool Capabilities::CubeMap::RenderTarget::A16B16G16R16 = true;
+	bool Capabilities::CubeMap::RenderTarget::R16F = true;
+	bool Capabilities::CubeMap::RenderTarget::G16R16F = true;
+	bool Capabilities::CubeMap::RenderTarget::A16B16G16R16F = true;
+	bool Capabilities::CubeMap::RenderTarget::R32F = true;
+	bool Capabilities::CubeMap::RenderTarget::G32R32F = true;
+	bool Capabilities::CubeMap::RenderTarget::A32B32G32R32F = true;
+
+	bool Capabilities::CubeMap::DepthStencil::D32 = false;
+	bool Capabilities::CubeMap::DepthStencil::D24S8 = false;
+	bool Capabilities::CubeMap::DepthStencil::D24X8 = false;
+	bool Capabilities::CubeMap::DepthStencil::D16 = false;
+	bool Capabilities::CubeMap::DepthStencil::D24FS8 = false;
+	bool Capabilities::CubeMap::DepthStencil::D32F_LOCKABLE = false;
+	bool Capabilities::CubeMap::DepthStencil::DF24 = false;
+	bool Capabilities::CubeMap::DepthStencil::DF16 = false;
+	bool Capabilities::CubeMap::DepthStencil::INTZ = false;
+
+	bool Capabilities::CubeMap::A8 = true;
+	bool Capabilities::CubeMap::R5G6B5 = true;
+	bool Capabilities::CubeMap::X1R5G5B5 = true;
+	bool Capabilities::CubeMap::A1R5G5B5 = true;
+	bool Capabilities::CubeMap::A4R4G4B4 = true;
+	bool Capabilities::CubeMap::R3G3B2 = true;
+	bool Capabilities::CubeMap::A8R3G3B2 = true;
+	bool Capabilities::CubeMap::X4R4G4B4 = true;
+	bool Capabilities::CubeMap::R8G8B8 = false;
+	bool Capabilities::CubeMap::X8R8G8B8 = true;
+	bool Capabilities::CubeMap::A8R8G8B8 = true;
+	bool Capabilities::CubeMap::X8B8G8R8 = true;
+	bool Capabilities::CubeMap::A8B8G8R8 = true;
+	bool Capabilities::CubeMap::P8 = false;
+	bool Capabilities::CubeMap::A8P8 = false;
+	bool Capabilities::CubeMap::G16R16 = true;
+	bool Capabilities::CubeMap::A2R10G10B10 = true;
+	bool Capabilities::CubeMap::A2B10G10R10 = true;
+	bool Capabilities::CubeMap::A16B16G16R16 = true;
+	bool Capabilities::CubeMap::DXT1 = S3TC_SUPPORT;
+	bool Capabilities::CubeMap::DXT2 = S3TC_SUPPORT;
+	bool Capabilities::CubeMap::DXT3 = S3TC_SUPPORT;
+	bool Capabilities::CubeMap::DXT4 = S3TC_SUPPORT;
+	bool Capabilities::CubeMap::DXT5 = S3TC_SUPPORT;
+	bool Capabilities::CubeMap::ATI1 = S3TC_SUPPORT;
+	bool Capabilities::CubeMap::ATI2 = S3TC_SUPPORT;
+	bool Capabilities::CubeMap::R16F = true;
+	bool Capabilities::CubeMap::G16R16F = true;
+	bool Capabilities::CubeMap::A16B16G16R16F = true;
+	bool Capabilities::CubeMap::R32F = true;
+	bool Capabilities::CubeMap::G32R32F = true;
+	bool Capabilities::CubeMap::A32B32G32R32F = true;
+	bool Capabilities::CubeMap::V8U8 = true;
+	bool Capabilities::CubeMap::L6V5U5 = true;
+	bool Capabilities::CubeMap::X8L8V8U8 = true;
+	bool Capabilities::CubeMap::Q8W8V8U8 = true;
+	bool Capabilities::CubeMap::V16U16 = true;
+	bool Capabilities::CubeMap::A2W10V10U10 = true;
+	bool Capabilities::CubeMap::Q16W16V16U16 = true;
+	bool Capabilities::CubeMap::L8 = true;
+	bool Capabilities::CubeMap::A4L4 = true;
+	bool Capabilities::CubeMap::L16 = true;
+	bool Capabilities::CubeMap::A8L8 = true;
+
+	bool Capabilities::VolumeTexture::A8 = true;
+	bool Capabilities::VolumeTexture::R5G6B5 = true;
+	bool Capabilities::VolumeTexture::X1R5G5B5 = true;
+	bool Capabilities::VolumeTexture::A1R5G5B5 = true;
+	bool Capabilities::VolumeTexture::A4R4G4B4 = true;
+	bool Capabilities::VolumeTexture::R3G3B2 = true;
+	bool Capabilities::VolumeTexture::A8R3G3B2 = true;
+	bool Capabilities::VolumeTexture::X4R4G4B4 = true;
+	bool Capabilities::VolumeTexture::R8G8B8 = false;
+	bool Capabilities::VolumeTexture::X8R8G8B8 = true;
+	bool Capabilities::VolumeTexture::A8R8G8B8 = true;
+	bool Capabilities::VolumeTexture::X8B8G8R8 = true;
+	bool Capabilities::VolumeTexture::A8B8G8R8 = true;
+	bool Capabilities::VolumeTexture::P8 = false;
+	bool Capabilities::VolumeTexture::A8P8 = false;
+	bool Capabilities::VolumeTexture::G16R16 = true;
+	bool Capabilities::VolumeTexture::A2R10G10B10 = true;
+	bool Capabilities::VolumeTexture::A2B10G10R10 = true;
+	bool Capabilities::VolumeTexture::A16B16G16R16 = true;
+	bool Capabilities::VolumeTexture::DXT1 = S3TC_SUPPORT;
+	bool Capabilities::VolumeTexture::DXT2 = S3TC_SUPPORT;
+	bool Capabilities::VolumeTexture::DXT3 = S3TC_SUPPORT;
+	bool Capabilities::VolumeTexture::DXT4 = S3TC_SUPPORT;
+	bool Capabilities::VolumeTexture::DXT5 = S3TC_SUPPORT;
+	bool Capabilities::VolumeTexture::ATI1 = S3TC_SUPPORT;
+	bool Capabilities::VolumeTexture::ATI2 = S3TC_SUPPORT;
+	bool Capabilities::VolumeTexture::R16F = true;
+	bool Capabilities::VolumeTexture::G16R16F = true;
+	bool Capabilities::VolumeTexture::A16B16G16R16F = true;
+	bool Capabilities::VolumeTexture::R32F = true;
+	bool Capabilities::VolumeTexture::G32R32F = true;
+	bool Capabilities::VolumeTexture::A32B32G32R32F = true;
+	bool Capabilities::VolumeTexture::V8U8 = true;
+	bool Capabilities::VolumeTexture::L6V5U5 = true;
+	bool Capabilities::VolumeTexture::X8L8V8U8 = true;
+	bool Capabilities::VolumeTexture::Q8W8V8U8 = true;
+	bool Capabilities::VolumeTexture::V16U16 = true;
+	bool Capabilities::VolumeTexture::A2W10V10U10 = true;
+	bool Capabilities::VolumeTexture::Q16W16V16U16 = true;
+	bool Capabilities::VolumeTexture::L8 = true;
+	bool Capabilities::VolumeTexture::A4L4 = true;
+	bool Capabilities::VolumeTexture::L16 = true;
+	bool Capabilities::VolumeTexture::A8L8 = true;
+
+	bool Capabilities::Texture::RenderTarget::NULL_ = true;
+	bool Capabilities::Texture::RenderTarget::R8G8B8 = false;
+	bool Capabilities::Texture::RenderTarget::R5G6B5 = true;
+	bool Capabilities::Texture::RenderTarget::X1R5G5B5 = true;
+	bool Capabilities::Texture::RenderTarget::A1R5G5B5 = true;
+	bool Capabilities::Texture::RenderTarget::A4R4G4B4 = true;
+	bool Capabilities::Texture::RenderTarget::R3G3B2 = false;
+	bool Capabilities::Texture::RenderTarget::A8R3G3B2 = false;
+	bool Capabilities::Texture::RenderTarget::X4R4G4B4 = true;
+	bool Capabilities::Texture::RenderTarget::A8R8G8B8 = true;
+	bool Capabilities::Texture::RenderTarget::X8R8G8B8 = true;
+	bool Capabilities::Texture::RenderTarget::A8B8G8R8 = true;
+	bool Capabilities::Texture::RenderTarget::X8B8G8R8 = true;
+	bool Capabilities::Texture::RenderTarget::G16R16 = true;
+	bool Capabilities::Texture::RenderTarget::A2B10G10R10 = true;
+	bool Capabilities::Texture::RenderTarget::A2R10G10B10 = true;
+	bool Capabilities::Texture::RenderTarget::A16B16G16R16 = true;
+	bool Capabilities::Texture::RenderTarget::R16F = true;
+	bool Capabilities::Texture::RenderTarget::G16R16F = true;
+	bool Capabilities::Texture::RenderTarget::A16B16G16R16F = true;
+	bool Capabilities::Texture::RenderTarget::R32F = true;
+	bool Capabilities::Texture::RenderTarget::G32R32F = true;
+	bool Capabilities::Texture::RenderTarget::A32B32G32R32F = true;
+
+	bool Capabilities::Texture::DepthStencil::D32 = true;
+	bool Capabilities::Texture::DepthStencil::D24S8 = true;
+	bool Capabilities::Texture::DepthStencil::D24X8 = true;
+	bool Capabilities::Texture::DepthStencil::D16 = true;
+	bool Capabilities::Texture::DepthStencil::D24FS8 = true;
+	bool Capabilities::Texture::DepthStencil::D32F_LOCKABLE = true;
+	bool Capabilities::Texture::DepthStencil::DF24 = true;
+	bool Capabilities::Texture::DepthStencil::DF16 = true;
+	bool Capabilities::Texture::DepthStencil::INTZ = true;
+
+	bool Capabilities::Texture::NULL_ = true;
+	bool Capabilities::Texture::A8 = true;
+	bool Capabilities::Texture::R5G6B5 = true;
+	bool Capabilities::Texture::X1R5G5B5 = true;
+	bool Capabilities::Texture::A1R5G5B5 = true;
+	bool Capabilities::Texture::A4R4G4B4 = true;
+	bool Capabilities::Texture::R3G3B2 = true;
+	bool Capabilities::Texture::A8R3G3B2 = true;
+	bool Capabilities::Texture::X4R4G4B4 = true;
+	bool Capabilities::Texture::R8G8B8 = false;
+	bool Capabilities::Texture::X8R8G8B8 = true;
+	bool Capabilities::Texture::A8R8G8B8 = true;
+	bool Capabilities::Texture::X8B8G8R8 = true;
+	bool Capabilities::Texture::A8B8G8R8 = true;
+	bool Capabilities::Texture::P8 = false;
+	bool Capabilities::Texture::A8P8 = false;
+	bool Capabilities::Texture::G16R16 = true;
+	bool Capabilities::Texture::A2R10G10B10 = true;
+	bool Capabilities::Texture::A2B10G10R10 = true;
+	bool Capabilities::Texture::A16B16G16R16 = true;
+	bool Capabilities::Texture::DXT1 = S3TC_SUPPORT;
+	bool Capabilities::Texture::DXT2 = S3TC_SUPPORT;
+	bool Capabilities::Texture::DXT3 = S3TC_SUPPORT;
+	bool Capabilities::Texture::DXT4 = S3TC_SUPPORT;
+	bool Capabilities::Texture::DXT5 = S3TC_SUPPORT;
+	bool Capabilities::Texture::ATI1 = S3TC_SUPPORT;
+	bool Capabilities::Texture::ATI2 = S3TC_SUPPORT;
+	bool Capabilities::Texture::R16F = true;
+	bool Capabilities::Texture::G16R16F = true;
+	bool Capabilities::Texture::A16B16G16R16F = true;
+	bool Capabilities::Texture::R32F = true;
+	bool Capabilities::Texture::G32R32F = true;
+	bool Capabilities::Texture::A32B32G32R32F = true;
+	bool Capabilities::Texture::V8U8 = true;
+	bool Capabilities::Texture::L6V5U5 = true;
+	bool Capabilities::Texture::X8L8V8U8 = true;
+	bool Capabilities::Texture::Q8W8V8U8 = true;
+	bool Capabilities::Texture::V16U16 = true;
+	bool Capabilities::Texture::A2W10V10U10 = true;
+	bool Capabilities::Texture::Q16W16V16U16 = true;
+	bool Capabilities::Texture::L8 = true;
+	bool Capabilities::Texture::A4L4 = true;
+	bool Capabilities::Texture::L16 = true;
+	bool Capabilities::Texture::A8L8 = true;
+	bool Capabilities::Texture::D32 = true;
+	bool Capabilities::Texture::D24S8 = true;
+	bool Capabilities::Texture::D24X8 = true;
+	bool Capabilities::Texture::D16 = true;
+	bool Capabilities::Texture::D24FS8 = true;
+	bool Capabilities::Texture::D32F_LOCKABLE = true;
+	bool Capabilities::Texture::DF24 = true;
+	bool Capabilities::Texture::DF16 = true;
+	bool Capabilities::Texture::INTZ = true;
+
+	bool Capabilities::isSRGBreadable(D3DFORMAT format)
+	{
+		// Keep in sync with Surface::isSRGBreadable
+		switch(format)
+		{
+		case D3DFMT_L8:
+		case D3DFMT_A8L8:
+		case D3DFMT_R8G8B8:
+		case D3DFMT_A8R8G8B8:
+		case D3DFMT_X8R8G8B8:
+		case D3DFMT_A8B8G8R8:
+		case D3DFMT_X8B8G8R8:
+		case D3DFMT_R5G6B5:
+		case D3DFMT_X1R5G5B5:
+		case D3DFMT_A1R5G5B5:
+		case D3DFMT_A4R4G4B4:
+		case D3DFMT_DXT1:
+		case D3DFMT_DXT2:
+		case D3DFMT_DXT3:
+		case D3DFMT_DXT4:
+		case D3DFMT_DXT5:
+		case D3DFMT_ATI1:
+		case D3DFMT_ATI2:
+			return true;
+		default:
+			return false;
+		}
+
+		return false;
+	}
+
+	bool Capabilities::isSRGBwritable(D3DFORMAT format)
+	{
+		// Keep in sync with Surface::isSRGBwritable
+		switch(format)
+		{
+		case D3DFMT_NULL:
+		case D3DFMT_A8R8G8B8:
+		case D3DFMT_X8R8G8B8:
+		case D3DFMT_A8B8G8R8:
+		case D3DFMT_X8B8G8R8:
+		case D3DFMT_R5G6B5:
+			return true;
+		default:
+			return false;
+		}
+	}
+
+	unsigned int pixelShaderVersionX = D3DPS_VERSION(3, 0);
+	unsigned int vertexShaderVersionX = D3DVS_VERSION(3, 0);
+
+	unsigned long pixelShaderArbitrarySwizzle = D3DPS20CAPS_ARBITRARYSWIZZLE;
+	unsigned long pixelShaderGradientInstructions = D3DPS20CAPS_GRADIENTINSTRUCTIONS;
+	unsigned long pixelShaderPredication = D3DPS20CAPS_PREDICATION;
+	unsigned long pixelShaderNoDependentReadLimit = D3DPS20CAPS_NODEPENDENTREADLIMIT;
+	unsigned long pixelShaderNoTexInstructionLimit = D3DPS20CAPS_NOTEXINSTRUCTIONLIMIT;
+
+	unsigned long pixelShaderDynamicFlowControlDepth = D3DPS20_MAX_DYNAMICFLOWCONTROLDEPTH;
+	unsigned long pixelShaderStaticFlowControlDepth = D3DPS20_MAX_STATICFLOWCONTROLDEPTH;
+
+	unsigned long vertexShaderPredication = D3DVS20CAPS_PREDICATION;
+	unsigned long vertexShaderDynamicFlowControlDepth = D3DVS20_MAX_DYNAMICFLOWCONTROLDEPTH;
+
+	unsigned int textureMemory = 256 * 1024 * 1024;
+	unsigned int maxAnisotropy = 16;
+}