// Copyright 2016 The SwiftShader Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#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;
}
