| // 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. | |
| #ifndef D3D9_Capabilities_hpp | |
| #define D3D9_Capabilities_hpp | |
| #include "Config.hpp" | |
| #include <d3d9.h> | |
| namespace D3D9 | |
| { | |
| enum | |
| { | |
| D3DFMT_ATI1 = MAKEFOURCC('A', 'T', 'I', '1'), | |
| D3DFMT_ATI2 = MAKEFOURCC('A', 'T', 'I', '2'), | |
| D3DFMT_INST = MAKEFOURCC('I', 'N', 'S', 'T'), | |
| D3DFMT_DF24 = MAKEFOURCC('D', 'F', '2', '4'), | |
| D3DFMT_DF16 = MAKEFOURCC('D', 'F', '1', '6'), | |
| D3DFMT_NULL = MAKEFOURCC('N', 'U', 'L', 'L'), | |
| D3DFMT_GET4 = MAKEFOURCC('G', 'E', 'T', '4'), | |
| D3DFMT_GET1 = MAKEFOURCC('G', 'E', 'T', '1'), | |
| D3DFMT_NVDB = MAKEFOURCC('N', 'V', 'D', 'B'), | |
| D3DFMT_A2M1 = MAKEFOURCC('A', '2', 'M', '1'), | |
| D3DFMT_A2M0 = MAKEFOURCC('A', '2', 'M', '0'), | |
| D3DFMT_ATOC = MAKEFOURCC('A', 'T', 'O', 'C'), | |
| D3DFMT_INTZ = MAKEFOURCC('I', 'N', 'T', 'Z') | |
| }; | |
| struct Capabilities | |
| { | |
| struct Surface | |
| { | |
| struct RenderTarget | |
| { | |
| static bool NULL_; | |
| static bool R8G8B8; | |
| static bool R5G6B5; | |
| static bool X1R5G5B5; | |
| static bool A1R5G5B5; | |
| static bool A4R4G4B4; | |
| static bool R3G3B2; | |
| static bool A8R3G3B2; | |
| static bool X4R4G4B4; | |
| static bool A8R8G8B8; | |
| static bool X8R8G8B8; | |
| static bool A8B8G8R8; | |
| static bool X8B8G8R8; | |
| // Integer HDR formats | |
| static bool G16R16; | |
| static bool A2B10G10R10; | |
| static bool A2R10G10B10; | |
| static bool A16B16G16R16; | |
| // Floating-point formats | |
| static bool R16F; | |
| static bool G16R16F; | |
| static bool A16B16G16R16F; | |
| static bool R32F; | |
| static bool G32R32F; | |
| static bool A32B32G32R32F; | |
| }; | |
| struct DepthStencil | |
| { | |
| static bool D32; | |
| static bool D24S8; | |
| static bool D24X8; | |
| static bool D16; | |
| static bool D24FS8; | |
| static bool D32F_LOCKABLE; | |
| static bool DF24; | |
| static bool DF16; | |
| static bool INTZ; | |
| }; | |
| static bool A8; | |
| static bool R5G6B5; | |
| static bool X1R5G5B5; | |
| static bool A1R5G5B5; | |
| static bool A4R4G4B4; | |
| static bool R3G3B2; | |
| static bool A8R3G3B2; | |
| static bool X4R4G4B4; | |
| static bool R8G8B8; | |
| static bool X8R8G8B8; | |
| static bool A8R8G8B8; | |
| static bool A8B8G8R8; | |
| static bool X8B8G8R8; | |
| // Paletted formats | |
| static bool P8; | |
| static bool A8P8; | |
| // Integer HDR formats | |
| static bool G16R16; | |
| static bool A2R10G10B10; | |
| static bool A2B10G10R10; | |
| static bool A16B16G16R16; | |
| // Compressed formats | |
| static bool DXT1; | |
| static bool DXT2; | |
| static bool DXT3; | |
| static bool DXT4; | |
| static bool DXT5; | |
| static bool ATI1; | |
| static bool ATI2; | |
| // Floating-point formats | |
| static bool R16F; | |
| static bool G16R16F; | |
| static bool A16B16G16R16F; | |
| static bool R32F; | |
| static bool G32R32F; | |
| static bool A32B32G32R32F; | |
| // Bump map formats | |
| static bool V8U8; | |
| static bool L6V5U5; | |
| static bool X8L8V8U8; | |
| static bool Q8W8V8U8; | |
| static bool V16U16; | |
| static bool A2W10V10U10; | |
| static bool Q16W16V16U16; | |
| // Luminance formats | |
| static bool L8; | |
| static bool A4L4; | |
| static bool L16; | |
| static bool A8L8; | |
| // Depth Bounds Test | |
| static bool NVDB; | |
| // Transparency anti-aliasing | |
| static bool ATOC; | |
| }; | |
| struct Volume | |
| { | |
| static bool A8; | |
| static bool R5G6B5; | |
| static bool X1R5G5B5; | |
| static bool A1R5G5B5; | |
| static bool A4R4G4B4; | |
| static bool R3G3B2; | |
| static bool A8R3G3B2; | |
| static bool X4R4G4B4; | |
| static bool R8G8B8; | |
| static bool X8R8G8B8; | |
| static bool A8R8G8B8; | |
| static bool A8B8G8R8; | |
| static bool X8B8G8R8; | |
| // Paletted formats | |
| static bool P8; | |
| static bool A8P8; | |
| // Integer HDR formats | |
| static bool G16R16; | |
| static bool A2R10G10B10; | |
| static bool A2B10G10R10; | |
| static bool A16B16G16R16; | |
| // Compressed formats | |
| static bool DXT1; | |
| static bool DXT2; | |
| static bool DXT3; | |
| static bool DXT4; | |
| static bool DXT5; | |
| static bool ATI1; | |
| static bool ATI2; | |
| // Floating-point formats | |
| static bool R16F; | |
| static bool G16R16F; | |
| static bool A16B16G16R16F; | |
| static bool R32F; | |
| static bool G32R32F; | |
| static bool A32B32G32R32F; | |
| // Bump map formats | |
| static bool V8U8; | |
| static bool L6V5U5; | |
| static bool X8L8V8U8; | |
| static bool Q8W8V8U8; | |
| static bool V16U16; | |
| static bool A2W10V10U10; | |
| static bool Q16W16V16U16; | |
| // Luminance formats | |
| static bool L8; | |
| static bool A4L4; | |
| static bool L16; | |
| static bool A8L8; | |
| }; | |
| struct CubeMap | |
| { | |
| struct RenderTarget | |
| { | |
| static bool NULL_; | |
| static bool R8G8B8; | |
| static bool R5G6B5; | |
| static bool X1R5G5B5; | |
| static bool A1R5G5B5; | |
| static bool A4R4G4B4; | |
| static bool R3G3B2; | |
| static bool A8R3G3B2; | |
| static bool X4R4G4B4; | |
| static bool A8R8G8B8; | |
| static bool X8R8G8B8; | |
| static bool A8B8G8R8; | |
| static bool X8B8G8R8; | |
| // Integer HDR formats | |
| static bool G16R16; | |
| static bool A2B10G10R10; | |
| static bool A2R10G10B10; | |
| static bool A16B16G16R16; | |
| // Floating-point formats | |
| static bool R16F; | |
| static bool G16R16F; | |
| static bool A16B16G16R16F; | |
| static bool R32F; | |
| static bool G32R32F; | |
| static bool A32B32G32R32F; | |
| }; | |
| struct DepthStencil | |
| { | |
| static bool D32; | |
| static bool D24S8; | |
| static bool D24X8; | |
| static bool D16; | |
| static bool D24FS8; | |
| static bool D32F_LOCKABLE; | |
| static bool DF24; | |
| static bool DF16; | |
| static bool INTZ; | |
| }; | |
| static bool A8; | |
| static bool R5G6B5; | |
| static bool X1R5G5B5; | |
| static bool A1R5G5B5; | |
| static bool A4R4G4B4; | |
| static bool R3G3B2; | |
| static bool A8R3G3B2; | |
| static bool X4R4G4B4; | |
| static bool R8G8B8; | |
| static bool X8R8G8B8; | |
| static bool A8R8G8B8; | |
| static bool A8B8G8R8; | |
| static bool X8B8G8R8; | |
| // Paletted formats | |
| static bool P8; | |
| static bool A8P8; | |
| // Integer HDR formats | |
| static bool G16R16; | |
| static bool A2R10G10B10; | |
| static bool A2B10G10R10; | |
| static bool A16B16G16R16; | |
| // Compressed formats | |
| static bool DXT1; | |
| static bool DXT2; | |
| static bool DXT3; | |
| static bool DXT4; | |
| static bool DXT5; | |
| static bool ATI1; | |
| static bool ATI2; | |
| // Floating-point formats | |
| static bool R16F; | |
| static bool G16R16F; | |
| static bool A16B16G16R16F; | |
| static bool R32F; | |
| static bool G32R32F; | |
| static bool A32B32G32R32F; | |
| // Bump map formats | |
| static bool V8U8; | |
| static bool L6V5U5; | |
| static bool X8L8V8U8; | |
| static bool Q8W8V8U8; | |
| static bool V16U16; | |
| static bool A2W10V10U10; | |
| static bool Q16W16V16U16; | |
| // Luminance formats | |
| static bool L8; | |
| static bool A4L4; | |
| static bool L16; | |
| static bool A8L8; | |
| }; | |
| struct VolumeTexture | |
| { | |
| static bool A8; | |
| static bool R5G6B5; | |
| static bool X1R5G5B5; | |
| static bool A1R5G5B5; | |
| static bool A4R4G4B4; | |
| static bool R3G3B2; | |
| static bool A8R3G3B2; | |
| static bool X4R4G4B4; | |
| static bool R8G8B8; | |
| static bool X8R8G8B8; | |
| static bool A8R8G8B8; | |
| static bool A8B8G8R8; | |
| static bool X8B8G8R8; | |
| // Paletted formats | |
| static bool P8; | |
| static bool A8P8; | |
| // Integer HDR formats | |
| static bool G16R16; | |
| static bool A2R10G10B10; | |
| static bool A2B10G10R10; | |
| static bool A16B16G16R16; | |
| // Compressed formats | |
| static bool DXT1; | |
| static bool DXT2; | |
| static bool DXT3; | |
| static bool DXT4; | |
| static bool DXT5; | |
| static bool ATI1; | |
| static bool ATI2; | |
| // Floating-point formats | |
| static bool R16F; | |
| static bool G16R16F; | |
| static bool A16B16G16R16F; | |
| static bool R32F; | |
| static bool G32R32F; | |
| static bool A32B32G32R32F; | |
| // Bump map formats | |
| static bool V8U8; | |
| static bool L6V5U5; | |
| static bool X8L8V8U8; | |
| static bool Q8W8V8U8; | |
| static bool V16U16; | |
| static bool A2W10V10U10; | |
| static bool Q16W16V16U16; | |
| // Luminance formats | |
| static bool L8; | |
| static bool A4L4; | |
| static bool L16; | |
| static bool A8L8; | |
| }; | |
| struct Texture | |
| { | |
| struct RenderTarget | |
| { | |
| static bool NULL_; | |
| static bool R8G8B8; | |
| static bool R5G6B5; | |
| static bool X1R5G5B5; | |
| static bool A1R5G5B5; | |
| static bool A4R4G4B4; | |
| static bool R3G3B2; | |
| static bool A8R3G3B2; | |
| static bool X4R4G4B4; | |
| static bool A8R8G8B8; | |
| static bool X8R8G8B8; | |
| static bool A8B8G8R8; | |
| static bool X8B8G8R8; | |
| // Integer HDR formats | |
| static bool G16R16; | |
| static bool A2B10G10R10; | |
| static bool A2R10G10B10; | |
| static bool A16B16G16R16; | |
| // Floating-point formats | |
| static bool R16F; | |
| static bool G16R16F; | |
| static bool A16B16G16R16F; | |
| static bool R32F; | |
| static bool G32R32F; | |
| static bool A32B32G32R32F; | |
| }; | |
| struct DepthStencil | |
| { | |
| static bool D32; | |
| static bool D24S8; | |
| static bool D24X8; | |
| static bool D16; | |
| static bool D24FS8; | |
| static bool D32F_LOCKABLE; | |
| static bool DF24; | |
| static bool DF16; | |
| static bool INTZ; | |
| }; | |
| static bool NULL_; | |
| static bool A8; | |
| static bool R5G6B5; | |
| static bool X1R5G5B5; | |
| static bool A1R5G5B5; | |
| static bool A4R4G4B4; | |
| static bool R3G3B2; | |
| static bool A8R3G3B2; | |
| static bool X4R4G4B4; | |
| static bool R8G8B8; | |
| static bool X8R8G8B8; | |
| static bool A8R8G8B8; | |
| static bool A8B8G8R8; | |
| static bool X8B8G8R8; | |
| // Paletted formats | |
| static bool P8; | |
| static bool A8P8; | |
| // Integer HDR formats | |
| static bool G16R16; | |
| static bool A2R10G10B10; | |
| static bool A2B10G10R10; | |
| static bool A16B16G16R16; | |
| // Compressed formats | |
| static bool DXT1; | |
| static bool DXT2; | |
| static bool DXT3; | |
| static bool DXT4; | |
| static bool DXT5; | |
| static bool ATI1; | |
| static bool ATI2; | |
| // Floating-point formats | |
| static bool R16F; | |
| static bool G16R16F; | |
| static bool A16B16G16R16F; | |
| static bool R32F; | |
| static bool G32R32F; | |
| static bool A32B32G32R32F; | |
| // Bump map formats | |
| static bool V8U8; | |
| static bool L6V5U5; | |
| static bool X8L8V8U8; | |
| static bool Q8W8V8U8; | |
| static bool V16U16; | |
| static bool A2W10V10U10; | |
| static bool Q16W16V16U16; | |
| // Luminance formats | |
| static bool L8; | |
| static bool A4L4; | |
| static bool L16; | |
| static bool A8L8; | |
| // Depth formats | |
| static bool D32; | |
| static bool D24S8; | |
| static bool D24X8; | |
| static bool D16; | |
| static bool D24FS8; | |
| static bool D32F_LOCKABLE; | |
| static bool DF24; | |
| static bool DF16; | |
| static bool INTZ; | |
| }; | |
| static bool isSRGBreadable(D3DFORMAT format); | |
| static bool isSRGBwritable(D3DFORMAT format); | |
| }; | |
| extern unsigned int pixelShaderVersionX; | |
| extern unsigned int vertexShaderVersionX; | |
| extern unsigned long pixelShaderArbitrarySwizzle; | |
| extern unsigned long pixelShaderGradientInstructions; | |
| extern unsigned long pixelShaderPredication; | |
| extern unsigned long pixelShaderNoDependentReadLimit; | |
| extern unsigned long pixelShaderNoTexInstructionLimit; | |
| extern unsigned long pixelShaderDynamicFlowControlDepth; | |
| extern unsigned long pixelShaderStaticFlowControlDepth; | |
| extern unsigned long vertexShaderPredication; | |
| extern unsigned long vertexShaderDynamicFlowControlDepth; | |
| extern unsigned int textureMemory; | |
| extern unsigned int maxAnisotropy; | |
| enum | |
| { | |
| MAX_VERTEX_SHADER_CONST = 256, | |
| MAX_PIXEL_SHADER_CONST = 224, | |
| MAX_VERTEX_INPUTS = 16, | |
| MAX_VERTEX_OUTPUTS = 12, | |
| MAX_PIXEL_INPUTS = 10, | |
| }; | |
| // Shader Model 3.0 requirements | |
| static_assert(MAX_VERTEX_SHADER_CONST >= 256, ""); | |
| static_assert(MAX_PIXEL_SHADER_CONST == 224, ""); | |
| static_assert(MAX_VERTEX_INPUTS == 16, ""); | |
| static_assert(MAX_VERTEX_OUTPUTS == 12, ""); | |
| static_assert(MAX_PIXEL_INPUTS == 10, ""); | |
| // Back-end minimum requirements | |
| static_assert(sw::VERTEX_UNIFORM_VECTORS >= MAX_VERTEX_SHADER_CONST, ""); | |
| static_assert(sw::FRAGMENT_UNIFORM_VECTORS >= MAX_PIXEL_SHADER_CONST, ""); | |
| static_assert(sw::MAX_VERTEX_INPUTS >= MAX_VERTEX_INPUTS, ""); | |
| static_assert(sw::MAX_VERTEX_OUTPUTS >= MAX_VERTEX_OUTPUTS, ""); | |
| static_assert(sw::MAX_FRAGMENT_INPUTS >= MAX_PIXEL_INPUTS, ""); | |
| } | |
| #endif // D3D9_Capabilities_hpp |