#ifndef IMATERIALSYSTEMHARDWARECONFIG_H #define IMATERIALSYSTEMHARDWARECONFIG_H #ifdef _WIN32 #pragma once #endif #if defined( DX_TO_GL_ABSTRACTION ) #define IsPlatformOpenGL() true #else #define IsPlatformOpenGL() false #endif #include "interface.h" #include "imageformat.h" #include "imaterialsystem.h" FORCEINLINE bool IsOpenGL(void) { return IsPlatformOpenGL(); } enum VertexCompressionType_t { VERTEX_COMPRESSION_INVALID = 0xFFFFFFFF, VERTEX_COMPRESSION_NONE = 0, VERTEX_COMPRESSION_ON = 1 }; #ifdef _GAMECONSOLE #define DEFCONFIGMETHOD( ret_type, method, xbox_return_value ) \ FORCEINLINE ret_type method const \ { \ return xbox_return_value; \ } #else #define DEFCONFIGMETHOD( ret_type, method, xbox_return_value ) \ virtual ret_type method const = 0; #endif enum ShadowFilterMode_t { SHADOWFILTERMODE_DEFAULT = 0, NVIDIA_PCF = 0, ATI_NO_PCF_FETCH4 = 1, NVIDIA_PCF_CHEAP = 2, ATI_NOPCF = 3, GAMECONSOLE_NINE_TAP_PCF = 0, GAMECONSOLE_SINGLE_TAP_PCF = 1, #if defined( _GAMECONSOLE ) SHADOWFILTERMODE_FIRST_CHEAP_MODE = GAMECONSOLE_SINGLE_TAP_PCF, #else SHADOWFILTERMODE_FIRST_CHEAP_MODE = NVIDIA_PCF_CHEAP, #endif }; enum CSMQualityMode_t { CSMQUALITY_VERY_LOW, CSMQUALITY_LOW, CSMQUALITY_MEDIUM, CSMQUALITY_HIGH, CSMQUALITY_TOTAL_MODES }; enum CSMShaderMode_t { CSMSHADERMODE_LOW_OR_VERY_LOW = 0, CSMSHADERMODE_MEDIUM = 1, CSMSHADERMODE_HIGH = 2, CSMSHADERMODE_ATIFETCH4 = 3, CSMSHADERMODE_TOTAL_MODES }; class IMaterialSystemHardwareConfig { public: virtual int GetFrameBufferColorDepth() const = 0; virtual int GetSamplerCount() const = 0; virtual bool HasSetDeviceGammaRamp() const = 0; DEFCONFIGMETHOD(bool, SupportsStaticControlFlow(), true); virtual VertexCompressionType_t SupportsCompressedVertices() const = 0; virtual int MaximumAnisotropicLevel() const = 0; virtual int MaxTextureWidth() const = 0; virtual int MaxTextureHeight() const = 0; virtual int TextureMemorySize() const = 0; virtual bool SupportsMipmappedCubemaps() const = 0; virtual int NumVertexShaderConstants() const = 0; virtual int NumPixelShaderConstants() const = 0; virtual int MaxNumLights() const = 0; virtual int MaxTextureAspectRatio() const = 0; virtual int MaxVertexShaderBlendMatrices() const = 0; virtual int MaxUserClipPlanes() const = 0; virtual bool UseFastClipping() const = 0; DEFCONFIGMETHOD(int, GetDXSupportLevel(), 98); virtual const char* GetShaderDLLName() const = 0; virtual bool ReadPixelsFromFrontBuffer() const = 0; virtual bool PreferDynamicTextures() const = 0; DEFCONFIGMETHOD(bool, SupportsHDR(), true); virtual bool NeedsAAClamp() const = 0; virtual bool NeedsATICentroidHack() const = 0; virtual int GetMaxDXSupportLevel() const = 0; virtual bool SpecifiesFogColorInLinearSpace() const = 0; DEFCONFIGMETHOD(bool, SupportsSRGB(), true); DEFCONFIGMETHOD(bool, FakeSRGBWrite(), false); DEFCONFIGMETHOD(bool, CanDoSRGBReadFromRTs(), true); virtual bool SupportsGLMixedSizeTargets() const = 0; virtual bool IsAAEnabled() const = 0; virtual int GetVertexSamplerCount() const = 0; virtual int GetMaxVertexTextureDimension() const = 0; virtual int MaxTextureDepth() const = 0; virtual HDRType_t GetHDRType() const = 0; virtual HDRType_t GetHardwareHDRType() const = 0; virtual bool SupportsStreamOffset() const = 0; virtual int StencilBufferBits() const = 0; virtual int MaxViewports() const = 0; virtual void OverrideStreamOffsetSupport(bool bOverrideEnabled, bool bEnableSupport) = 0; virtual ShadowFilterMode_t GetShadowFilterMode(bool bForceLowQualityShadows, bool bPS30) const = 0; virtual int NeedsShaderSRGBConversion() const = 0; DEFCONFIGMETHOD(bool, UsesSRGBCorrectBlending(), IsX360()); virtual bool HasFastVertexTextures() const = 0; virtual int MaxHWMorphBatchCount() const = 0; virtual bool SupportsHDRMode(HDRType_t nHDRMode) const = 0; virtual bool GetHDREnabled(void) const = 0; virtual void SetHDREnabled(bool bEnable) = 0; virtual bool SupportsBorderColor(void) const = 0; virtual bool SupportsFetch4(void) const = 0; virtual float GetShadowDepthBias() const = 0; virtual float GetShadowSlopeScaleDepthBias() const = 0; virtual bool PreferZPrepass() const = 0; virtual bool SuppressPixelShaderCentroidHackFixup() const = 0; virtual bool PreferTexturesInHWMemory() const = 0; virtual bool PreferHardwareSync() const = 0; virtual bool ActualHasFastVertexTextures() const = 0; virtual bool SupportsShadowDepthTextures(void) const = 0; virtual ImageFormat GetShadowDepthTextureFormat(void) const = 0; virtual ImageFormat GetHighPrecisionShadowDepthTextureFormat(void) const = 0; virtual ImageFormat GetNullTextureFormat(void) const = 0; virtual int GetMinDXSupportLevel() const = 0; virtual bool IsUnsupported() const = 0; virtual float GetLightMapScaleFactor() const = 0; virtual bool SupportsCascadedShadowMapping() const = 0; virtual CSMQualityMode_t GetCSMQuality() const = 0; virtual bool SupportsBilinearPCFSampling() const = 0; virtual CSMShaderMode_t GetCSMShaderMode(CSMQualityMode_t nQualityLevel) const = 0; virtual bool GetCSMAccurateBlending(void) const = 0; virtual void SetCSMAccurateBlending(bool bEnable) = 0; virtual bool SupportsResolveDepth() const = 0; virtual bool HasFullResolutionDepthTexture() const = 0; #if defined ( STDSHADER_DBG_DLL_EXPORT ) || defined( STDSHADER_DX9_DLL_EXPORT ) inline bool SupportsPixelShaders_2_b() const { return GetDXSupportLevel() >= 92; } inline bool SupportsPixelShaders_3_0() const { return GetDXSupportLevel() >= 95; } #endif inline bool ShouldAlwaysUseShaderModel2bShaders() const { return IsOpenGL(); } inline bool PlatformRequiresNonNullPixelShaders() const { return IsOpenGL(); } }; #endif