diff options
Diffstat (limited to 'mp/src/public/materialsystem/imaterialsystemhardwareconfig.h')
| -rw-r--r-- | mp/src/public/materialsystem/imaterialsystemhardwareconfig.h | 424 |
1 files changed, 212 insertions, 212 deletions
diff --git a/mp/src/public/materialsystem/imaterialsystemhardwareconfig.h b/mp/src/public/materialsystem/imaterialsystemhardwareconfig.h index 4aef4228..699b9bdf 100644 --- a/mp/src/public/materialsystem/imaterialsystemhardwareconfig.h +++ b/mp/src/public/materialsystem/imaterialsystemhardwareconfig.h @@ -1,212 +1,212 @@ -//========= Copyright Valve Corporation, All rights reserved. ============//
-//
-// Purpose:
-//
-// $Header: $
-// $NoKeywords: $
-//===========================================================================//
-
-#ifndef IMATERIALSYSTEMHARDWARECONFIG_H
-#define IMATERIALSYSTEMHARDWARECONFIG_H
-
-#ifdef _WIN32
-#pragma once
-#endif
-
-
-#include "tier1/interface.h"
-
-//-----------------------------------------------------------------------------
-// GL helpers
-//-----------------------------------------------------------------------------
-FORCEINLINE bool IsEmulatingGL()
-{
- static bool bIsEmulatingGL = ( Plat_GetCommandLineA() ) ? ( strstr( Plat_GetCommandLineA(), "-r_emulate_gl" ) != NULL ) : false;
- return bIsEmulatingGL;
-}
-
-FORCEINLINE bool IsOpenGL( void )
-{
- return IsPlatformOpenGL() || IsEmulatingGL();
-}
-
-//-----------------------------------------------------------------------------
-// Material system interface version
-//-----------------------------------------------------------------------------
-#define MATERIALSYSTEM_HARDWARECONFIG_INTERFACE_VERSION "MaterialSystemHardwareConfig012"
-
-// HDRFIXME NOTE: must match common_ps_fxc.h
-enum HDRType_t
-{
- HDR_TYPE_NONE,
- HDR_TYPE_INTEGER,
- HDR_TYPE_FLOAT,
-};
-
-// For now, vertex compression is simply "on or off" (for the sake of simplicity
-// and MeshBuilder perf.), but later we may support multiple flavours.
-enum VertexCompressionType_t
-{
- // This indicates an uninitialized VertexCompressionType_t value
- VERTEX_COMPRESSION_INVALID = 0xFFFFFFFF,
-
- // 'VERTEX_COMPRESSION_NONE' means that no elements of a vertex are compressed
- VERTEX_COMPRESSION_NONE = 0,
-
- // Currently (more stuff may be added as needed), 'VERTEX_COMPRESSION_ON' means:
- // - if a vertex contains VERTEX_ELEMENT_NORMAL, this is compressed
- // (see CVertexBuilder::CompressedNormal3f)
- // - if a vertex contains VERTEX_ELEMENT_USERDATA4 (and a normal - together defining a tangent
- // frame, with the binormal reconstructed in the vertex shader), this is compressed
- // (see CVertexBuilder::CompressedUserData)
- // - if a vertex contains VERTEX_ELEMENT_BONEWEIGHTSx, this is compressed
- // (see CVertexBuilder::CompressedBoneWeight3fv)
- VERTEX_COMPRESSION_ON = 1
-};
-
-
-// use DEFCONFIGMETHOD to define time-critical methods that we want to make just return constants
-// on the 360, so that the checks will happen at compile time. Not all methods are defined this way
-// - just the ones that I perceive as being called often in the frame interval.
-#ifdef _X360
-#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
-
-
-
-//-----------------------------------------------------------------------------
-// Material system configuration
-//-----------------------------------------------------------------------------
-class IMaterialSystemHardwareConfig
-{
-public:
- // on xbox, some methods are inlined to return constants
-
- DEFCONFIGMETHOD( bool, HasDestAlphaBuffer(), true );
- DEFCONFIGMETHOD( bool, HasStencilBuffer(), true );
- virtual int GetFrameBufferColorDepth() const = 0;
- virtual int GetSamplerCount() const = 0;
- virtual bool HasSetDeviceGammaRamp() const = 0;
- DEFCONFIGMETHOD( bool, SupportsCompressedTextures(), true );
- virtual VertexCompressionType_t SupportsCompressedVertices() const = 0;
- DEFCONFIGMETHOD( bool, SupportsNormalMapCompression(), true );
- DEFCONFIGMETHOD( bool, SupportsVertexAndPixelShaders(), true );
- DEFCONFIGMETHOD( bool, SupportsPixelShaders_1_4(), true );
- DEFCONFIGMETHOD( bool, SupportsStaticControlFlow(), true );
- DEFCONFIGMETHOD( bool, SupportsPixelShaders_2_0(), true );
- DEFCONFIGMETHOD( bool, SupportsVertexShaders_2_0(), true );
- virtual int MaximumAnisotropicLevel() const = 0; // 0 means no anisotropic filtering
- virtual int MaxTextureWidth() const = 0;
- virtual int MaxTextureHeight() const = 0;
- virtual int TextureMemorySize() const = 0;
- virtual bool SupportsOverbright() const = 0;
- virtual bool SupportsCubeMaps() const = 0;
- virtual bool SupportsMipmappedCubemaps() const = 0;
- virtual bool SupportsNonPow2Textures() const = 0;
-
- // The number of texture stages represents the number of computations
- // we can do in the fixed-function pipeline, it is *not* related to the
- // simultaneous number of textures we can use
- virtual int GetTextureStageCount() const = 0;
- virtual int NumVertexShaderConstants() const = 0;
- virtual int NumPixelShaderConstants() const = 0;
- virtual int MaxNumLights() const = 0;
- virtual bool SupportsHardwareLighting() const = 0;
- virtual int MaxBlendMatrices() const = 0;
- virtual int MaxBlendMatrixIndices() const = 0;
- virtual int MaxTextureAspectRatio() const = 0;
- virtual int MaxVertexShaderBlendMatrices() const = 0;
- virtual int MaxUserClipPlanes() const = 0;
- virtual bool UseFastClipping() const = 0;
-
- // This here should be the major item looked at when checking for compat
- // from anywhere other than the material system shaders
- DEFCONFIGMETHOD( int, GetDXSupportLevel(), 98 );
- virtual const char *GetShaderDLLName() const = 0;
-
- virtual bool ReadPixelsFromFrontBuffer() const = 0;
-
- // Are dx dynamic textures preferred?
- virtual bool PreferDynamicTextures() const = 0;
-
- DEFCONFIGMETHOD( bool, SupportsHDR(), true );
-
- virtual bool HasProjectedBumpEnv() const = 0;
- virtual bool SupportsSpheremapping() const = 0;
- virtual bool NeedsAAClamp() const = 0;
- virtual bool NeedsATICentroidHack() const = 0;
-
- virtual bool SupportsColorOnSecondStream() const = 0;
- virtual bool SupportsStaticPlusDynamicLighting() const = 0;
-
- // Does our card have a hard time with fillrate
- // relative to other cards w/ the same dx level?
- virtual bool PreferReducedFillrate() const = 0;
-
- // This is the max dx support level supported by the card
- virtual int GetMaxDXSupportLevel() const = 0;
-
- // Does the card specify fog color in linear space when sRGBWrites are enabled?
- virtual bool SpecifiesFogColorInLinearSpace() const = 0;
-
- // Does the card support sRGB reads/writes?
- DEFCONFIGMETHOD( bool, SupportsSRGB(), true );
- DEFCONFIGMETHOD( bool, FakeSRGBWrite(), false );
- DEFCONFIGMETHOD( bool, CanDoSRGBReadFromRTs(), true );
-
- virtual bool SupportsGLMixedSizeTargets() const = 0;
-
- virtual bool IsAAEnabled() const = 0; // Is antialiasing being used?
-
- // NOTE: Anything after this was added after shipping HL2.
- virtual int GetVertexTextureCount() const = 0;
- virtual int GetMaxVertexTextureDimension() const = 0;
-
- virtual int MaxTextureDepth() const = 0;
-
- virtual HDRType_t GetHDRType() const = 0;
- virtual HDRType_t GetHardwareHDRType() const = 0;
-
- DEFCONFIGMETHOD( bool, SupportsPixelShaders_2_b(), true );
- virtual bool SupportsStreamOffset() const = 0;
-
- virtual int StencilBufferBits() const = 0;
- virtual int MaxViewports() const = 0;
-
- virtual void OverrideStreamOffsetSupport( bool bOverrideEnabled, bool bEnableSupport ) = 0;
-
- virtual int GetShadowFilterMode() const = 0;
-
- virtual int NeedsShaderSRGBConversion() const = 0;
-
- DEFCONFIGMETHOD( bool, UsesSRGBCorrectBlending(), true );
-
- virtual bool SupportsShaderModel_3_0() const = 0;
- virtual bool HasFastVertexTextures() const = 0;
- virtual int MaxHWMorphBatchCount() const = 0;
-
- // Does the board actually support this?
- DEFCONFIGMETHOD( bool, ActuallySupportsPixelShaders_2_b(), true );
-
- 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;
-
- inline bool ShouldAlwaysUseShaderModel2bShaders() const { return IsOpenGL(); }
- inline bool PlatformRequiresNonNullPixelShaders() const { return IsOpenGL(); }
-};
-
-#endif // IMATERIALSYSTEMHARDWARECONFIG_H
+//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $Header: $ +// $NoKeywords: $ +//===========================================================================// + +#ifndef IMATERIALSYSTEMHARDWARECONFIG_H +#define IMATERIALSYSTEMHARDWARECONFIG_H + +#ifdef _WIN32 +#pragma once +#endif + + +#include "tier1/interface.h" + +//----------------------------------------------------------------------------- +// GL helpers +//----------------------------------------------------------------------------- +FORCEINLINE bool IsEmulatingGL() +{ + static bool bIsEmulatingGL = ( Plat_GetCommandLineA() ) ? ( strstr( Plat_GetCommandLineA(), "-r_emulate_gl" ) != NULL ) : false; + return bIsEmulatingGL; +} + +FORCEINLINE bool IsOpenGL( void ) +{ + return IsPlatformOpenGL() || IsEmulatingGL(); +} + +//----------------------------------------------------------------------------- +// Material system interface version +//----------------------------------------------------------------------------- +#define MATERIALSYSTEM_HARDWARECONFIG_INTERFACE_VERSION "MaterialSystemHardwareConfig012" + +// HDRFIXME NOTE: must match common_ps_fxc.h +enum HDRType_t +{ + HDR_TYPE_NONE, + HDR_TYPE_INTEGER, + HDR_TYPE_FLOAT, +}; + +// For now, vertex compression is simply "on or off" (for the sake of simplicity +// and MeshBuilder perf.), but later we may support multiple flavours. +enum VertexCompressionType_t +{ + // This indicates an uninitialized VertexCompressionType_t value + VERTEX_COMPRESSION_INVALID = 0xFFFFFFFF, + + // 'VERTEX_COMPRESSION_NONE' means that no elements of a vertex are compressed + VERTEX_COMPRESSION_NONE = 0, + + // Currently (more stuff may be added as needed), 'VERTEX_COMPRESSION_ON' means: + // - if a vertex contains VERTEX_ELEMENT_NORMAL, this is compressed + // (see CVertexBuilder::CompressedNormal3f) + // - if a vertex contains VERTEX_ELEMENT_USERDATA4 (and a normal - together defining a tangent + // frame, with the binormal reconstructed in the vertex shader), this is compressed + // (see CVertexBuilder::CompressedUserData) + // - if a vertex contains VERTEX_ELEMENT_BONEWEIGHTSx, this is compressed + // (see CVertexBuilder::CompressedBoneWeight3fv) + VERTEX_COMPRESSION_ON = 1 +}; + + +// use DEFCONFIGMETHOD to define time-critical methods that we want to make just return constants +// on the 360, so that the checks will happen at compile time. Not all methods are defined this way +// - just the ones that I perceive as being called often in the frame interval. +#ifdef _X360 +#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 + + + +//----------------------------------------------------------------------------- +// Material system configuration +//----------------------------------------------------------------------------- +class IMaterialSystemHardwareConfig +{ +public: + // on xbox, some methods are inlined to return constants + + DEFCONFIGMETHOD( bool, HasDestAlphaBuffer(), true ); + DEFCONFIGMETHOD( bool, HasStencilBuffer(), true ); + virtual int GetFrameBufferColorDepth() const = 0; + virtual int GetSamplerCount() const = 0; + virtual bool HasSetDeviceGammaRamp() const = 0; + DEFCONFIGMETHOD( bool, SupportsCompressedTextures(), true ); + virtual VertexCompressionType_t SupportsCompressedVertices() const = 0; + DEFCONFIGMETHOD( bool, SupportsNormalMapCompression(), true ); + DEFCONFIGMETHOD( bool, SupportsVertexAndPixelShaders(), true ); + DEFCONFIGMETHOD( bool, SupportsPixelShaders_1_4(), true ); + DEFCONFIGMETHOD( bool, SupportsStaticControlFlow(), true ); + DEFCONFIGMETHOD( bool, SupportsPixelShaders_2_0(), true ); + DEFCONFIGMETHOD( bool, SupportsVertexShaders_2_0(), true ); + virtual int MaximumAnisotropicLevel() const = 0; // 0 means no anisotropic filtering + virtual int MaxTextureWidth() const = 0; + virtual int MaxTextureHeight() const = 0; + virtual int TextureMemorySize() const = 0; + virtual bool SupportsOverbright() const = 0; + virtual bool SupportsCubeMaps() const = 0; + virtual bool SupportsMipmappedCubemaps() const = 0; + virtual bool SupportsNonPow2Textures() const = 0; + + // The number of texture stages represents the number of computations + // we can do in the fixed-function pipeline, it is *not* related to the + // simultaneous number of textures we can use + virtual int GetTextureStageCount() const = 0; + virtual int NumVertexShaderConstants() const = 0; + virtual int NumPixelShaderConstants() const = 0; + virtual int MaxNumLights() const = 0; + virtual bool SupportsHardwareLighting() const = 0; + virtual int MaxBlendMatrices() const = 0; + virtual int MaxBlendMatrixIndices() const = 0; + virtual int MaxTextureAspectRatio() const = 0; + virtual int MaxVertexShaderBlendMatrices() const = 0; + virtual int MaxUserClipPlanes() const = 0; + virtual bool UseFastClipping() const = 0; + + // This here should be the major item looked at when checking for compat + // from anywhere other than the material system shaders + DEFCONFIGMETHOD( int, GetDXSupportLevel(), 98 ); + virtual const char *GetShaderDLLName() const = 0; + + virtual bool ReadPixelsFromFrontBuffer() const = 0; + + // Are dx dynamic textures preferred? + virtual bool PreferDynamicTextures() const = 0; + + DEFCONFIGMETHOD( bool, SupportsHDR(), true ); + + virtual bool HasProjectedBumpEnv() const = 0; + virtual bool SupportsSpheremapping() const = 0; + virtual bool NeedsAAClamp() const = 0; + virtual bool NeedsATICentroidHack() const = 0; + + virtual bool SupportsColorOnSecondStream() const = 0; + virtual bool SupportsStaticPlusDynamicLighting() const = 0; + + // Does our card have a hard time with fillrate + // relative to other cards w/ the same dx level? + virtual bool PreferReducedFillrate() const = 0; + + // This is the max dx support level supported by the card + virtual int GetMaxDXSupportLevel() const = 0; + + // Does the card specify fog color in linear space when sRGBWrites are enabled? + virtual bool SpecifiesFogColorInLinearSpace() const = 0; + + // Does the card support sRGB reads/writes? + DEFCONFIGMETHOD( bool, SupportsSRGB(), true ); + DEFCONFIGMETHOD( bool, FakeSRGBWrite(), false ); + DEFCONFIGMETHOD( bool, CanDoSRGBReadFromRTs(), true ); + + virtual bool SupportsGLMixedSizeTargets() const = 0; + + virtual bool IsAAEnabled() const = 0; // Is antialiasing being used? + + // NOTE: Anything after this was added after shipping HL2. + virtual int GetVertexTextureCount() const = 0; + virtual int GetMaxVertexTextureDimension() const = 0; + + virtual int MaxTextureDepth() const = 0; + + virtual HDRType_t GetHDRType() const = 0; + virtual HDRType_t GetHardwareHDRType() const = 0; + + DEFCONFIGMETHOD( bool, SupportsPixelShaders_2_b(), true ); + virtual bool SupportsStreamOffset() const = 0; + + virtual int StencilBufferBits() const = 0; + virtual int MaxViewports() const = 0; + + virtual void OverrideStreamOffsetSupport( bool bOverrideEnabled, bool bEnableSupport ) = 0; + + virtual int GetShadowFilterMode() const = 0; + + virtual int NeedsShaderSRGBConversion() const = 0; + + DEFCONFIGMETHOD( bool, UsesSRGBCorrectBlending(), true ); + + virtual bool SupportsShaderModel_3_0() const = 0; + virtual bool HasFastVertexTextures() const = 0; + virtual int MaxHWMorphBatchCount() const = 0; + + // Does the board actually support this? + DEFCONFIGMETHOD( bool, ActuallySupportsPixelShaders_2_b(), true ); + + 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; + + inline bool ShouldAlwaysUseShaderModel2bShaders() const { return IsOpenGL(); } + inline bool PlatformRequiresNonNullPixelShaders() const { return IsOpenGL(); } +}; + +#endif // IMATERIALSYSTEMHARDWARECONFIG_H |