summaryrefslogtreecommitdiff
path: root/materialsystem/shaderapidx9/hardwareconfig.h
diff options
context:
space:
mode:
Diffstat (limited to 'materialsystem/shaderapidx9/hardwareconfig.h')
-rw-r--r--materialsystem/shaderapidx9/hardwareconfig.h286
1 files changed, 286 insertions, 0 deletions
diff --git a/materialsystem/shaderapidx9/hardwareconfig.h b/materialsystem/shaderapidx9/hardwareconfig.h
new file mode 100644
index 0000000..792a80e
--- /dev/null
+++ b/materialsystem/shaderapidx9/hardwareconfig.h
@@ -0,0 +1,286 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//
+//===========================================================================//
+
+#ifndef HARDWARECONFIG_H
+#define HARDWARECONFIG_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+#include "materialsystem/imaterialsystemhardwareconfig.h"
+#include "IHardwareConfigInternal.h"
+#include "bitmap/imageformat.h"
+#include "materialsystem/imaterialsystem.h"
+
+
+//-----------------------------------------------------------------------------
+// Forward declarations
+//-----------------------------------------------------------------------------
+struct ShaderDeviceInfo_t;
+
+
+//-----------------------------------------------------------------------------
+// Vendor IDs sometimes needed for vendor-specific code
+//-----------------------------------------------------------------------------
+#define VENDORID_NVIDIA 0x10DE
+#define VENDORID_ATI 0x1002
+#define VENDORID_INTEL 0x8086
+
+//-----------------------------------------------------------------------------
+// ShaderAPI constants
+//-----------------------------------------------------------------------------
+enum
+{
+#if defined( DX_TO_GL_ABSTRACTION )
+ MAXUSERCLIPPLANES = 2,
+#else
+ MAXUSERCLIPPLANES = 6,
+#endif
+ MAX_NUM_LIGHTS = 4,
+ MAX_OUTPUTS = 3,
+};
+
+
+//-----------------------------------------------------------------------------
+// Hardware caps structures
+//-----------------------------------------------------------------------------
+enum CompressedTextureState_t
+{
+ COMPRESSED_TEXTURES_ON,
+ COMPRESSED_TEXTURES_OFF,
+ COMPRESSED_TEXTURES_NOT_INITIALIZED
+};
+
+struct HardwareCaps_t : public MaterialAdapterInfo_t
+{
+ // *****************************NOTE*********************************************
+ // If you change any members, make sure and reflect the changes in CHardwareConfig::ForceCapsToDXLevel for every dxlevel!!!!!
+ // If you change any members, make sure and reflect the changes in CHardwareConfig::ForceCapsToDXLevel for every dxlevel!!!!!
+ // If you change any members, make sure and reflect the changes in CHardwareConfig::ForceCapsToDXLevel for every dxlevel!!!!!
+ // If you change any members, make sure and reflect the changes in CHardwareConfig::ForceCapsToDXLevel for every dxlevel!!!!!
+ // If you change any members, make sure and reflect the changes in CHardwareConfig::ForceCapsToDXLevel for every dxlevel!!!!!
+ // *****************************NOTE*********************************************
+ //
+ // NOTE: Texture stages are an obsolete concept; used by fixed-function hardware
+ // Samplers are dx9+, indicating how many textures we can simultaneously bind
+ // In Dx8, samplers didn't exist and texture stages were used to indicate the
+ // number of simultaneously bound textures; we'll emulate that by slamming
+ // the number of samplers to == the number of texture stages.
+ CompressedTextureState_t m_SupportsCompressedTextures;
+ VertexCompressionType_t m_SupportsCompressedVertices;
+ int m_NumSamplers;
+ int m_NumTextureStages;
+ int m_nMaxAnisotropy;
+ int m_MaxTextureWidth;
+ int m_MaxTextureHeight;
+ int m_MaxTextureDepth;
+ int m_MaxTextureAspectRatio;
+ int m_MaxPrimitiveCount;
+ int m_NumPixelShaderConstants;
+ int m_NumBooleanPixelShaderConstants;
+ int m_NumIntegerPixelShaderConstants;
+ int m_NumVertexShaderConstants;
+ int m_NumBooleanVertexShaderConstants;
+ int m_NumIntegerVertexShaderConstants;
+ int m_TextureMemorySize;
+ int m_MaxNumLights;
+ int m_MaxBlendMatrices;
+ int m_MaxBlendMatrixIndices;
+ int m_MaxVertexShaderBlendMatrices;
+ int m_MaxUserClipPlanes;
+ HDRType_t m_HDRType;
+ char m_pShaderDLL[32];
+ ImageFormat m_ShadowDepthTextureFormat;
+ ImageFormat m_NullTextureFormat;
+ int m_nVertexTextureCount;
+ int m_nMaxVertexTextureDimension;
+ unsigned long m_AlphaToCoverageState; // State to ping to toggle Alpha To Coverage (vendor-dependent)
+ unsigned long m_AlphaToCoverageEnableValue; // Value to set above state to turn on Alpha To Coverage (vendor-dependent)
+ unsigned long m_AlphaToCoverageDisableValue; // Value to set above state to turn off Alpha To Coverage (vendor-dependent)
+ int m_nMaxViewports;
+ float m_flMinGammaControlPoint;
+ float m_flMaxGammaControlPoint;
+ int m_nGammaControlPointCount;
+ int m_MaxVertexShader30InstructionSlots;
+ int m_MaxPixelShader30InstructionSlots;
+ int m_MaxSimultaneousRenderTargets;
+
+ bool m_bDeviceOk : 1;
+ bool m_HasSetDeviceGammaRamp : 1;
+ bool m_SupportsVertexShaders : 1;
+ bool m_SupportsVertexShaders_2_0 : 1;
+ bool m_SupportsPixelShaders : 1;
+ bool m_SupportsPixelShaders_1_4 : 1;
+ bool m_SupportsPixelShaders_2_0 : 1;
+ bool m_SupportsPixelShaders_2_b : 1;
+ bool m_SupportsShaderModel_3_0 : 1;
+ bool m_bSupportsAnisotropicFiltering : 1;
+ bool m_bSupportsMagAnisotropicFiltering : 1;
+ bool m_bSupportsVertexTextures : 1;
+ bool m_ZBiasAndSlopeScaledDepthBiasSupported : 1;
+ bool m_SupportsMipmapping : 1;
+ bool m_SupportsOverbright : 1;
+ bool m_SupportsCubeMaps : 1;
+ bool m_SupportsHardwareLighting : 1;
+ bool m_SupportsMipmappedCubemaps : 1;
+ bool m_SupportsNonPow2Textures : 1;
+ bool m_PreferDynamicTextures : 1;
+ bool m_HasProjectedBumpEnv : 1;
+ bool m_SupportsSRGB : 1; // Means both read and write
+ bool m_bSupportsSpheremapping : 1;
+ bool m_UseFastClipping : 1;
+ bool m_bNeedsATICentroidHack : 1;
+ bool m_bDisableShaderOptimizations : 1;
+ bool m_bColorOnSecondStream : 1;
+ bool m_bSupportsStreamOffset : 1;
+ bool m_bFogColorSpecifiedInLinearSpace : 1;
+ bool m_bFogColorAlwaysLinearSpace : 1;
+ bool m_bSupportsAlphaToCoverage : 1;
+ bool m_bSupportsShadowDepthTextures : 1;
+ bool m_bSupportsFetch4 : 1;
+ bool m_bSoftwareVertexProcessing : 1;
+ bool m_bScissorSupported : 1;
+ bool m_bSupportsFloat32RenderTargets : 1;
+ bool m_bSupportsBorderColor : 1;
+ bool m_bDX10Card : 1; // Indicates DX10 part with performant vertex textures running DX9 path
+ bool m_bDX10Blending : 1; // Indicates DX10 part that does DX10 blending (but may not have performant vertex textures, such as Intel parts)
+ bool m_bSupportsStaticControlFlow : 1; // Useful on OpenGL, where we have a mix of support...
+ bool m_FakeSRGBWrite : 1; // Gotta do this on OpenGL. Mostly hidden, but some high level code needs to know
+ bool m_CanDoSRGBReadFromRTs : 1; // Gotta do this on OpenGL. Mostly hidden, but some high level code needs to know
+ bool m_bSupportsGLMixedSizeTargets : 1; // on OpenGL, are mixed size depth buffers supported - aka ARB_framebuffer_object
+ bool m_bCanStretchRectFromTextures : 1; // Does the device expose D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES (or is it >DX9?)
+
+ HDRType_t m_MaxHDRType;
+};
+
+
+//-----------------------------------------------------------------------------
+// Contains the hardware configuration for the current device
+//-----------------------------------------------------------------------------
+class CHardwareConfig : public IHardwareConfigInternal
+{
+public:
+ CHardwareConfig();
+
+ // Sets up the hardware caps given the specified DX level
+ void SetupHardwareCaps( const ShaderDeviceInfo_t& mode, const HardwareCaps_t &actualCaps );
+
+ // FIXME: This is for backward compat only.. don't use these
+ void SetupHardwareCaps( int nDXLevel, const HardwareCaps_t &actualCaps );
+ HardwareCaps_t& ActualCapsForEdit() { return m_ActualCaps; }
+ HardwareCaps_t& CapsForEdit() { return m_Caps; }
+
+ // Members of IMaterialSystemHardwareConfig
+ virtual bool HasDestAlphaBuffer() const;
+ virtual bool HasStencilBuffer() const;
+ virtual int GetFrameBufferColorDepth() const;
+ virtual int GetSamplerCount() const;
+ virtual bool HasSetDeviceGammaRamp() const;
+ virtual bool SupportsCompressedTextures() const;
+ virtual VertexCompressionType_t SupportsCompressedVertices() const;
+ virtual bool SupportsBorderColor() const;
+ virtual bool SupportsFetch4() const;
+ virtual bool CanStretchRectFromTextures() const;
+ virtual bool SupportsVertexAndPixelShaders() const;
+ virtual bool SupportsPixelShaders_1_4() const;
+ virtual bool SupportsPixelShaders_2_0() const;
+ virtual bool SupportsStaticControlFlow() const;
+ virtual bool SupportsVertexShaders_2_0() const;
+ virtual int MaximumAnisotropicLevel() const;
+ virtual int MaxTextureWidth() const;
+ virtual int MaxTextureHeight() const;
+ virtual int TextureMemorySize() const;
+ virtual bool SupportsOverbright() const;
+ virtual bool SupportsCubeMaps() const;
+ virtual bool SupportsMipmappedCubemaps() const;
+ virtual bool SupportsNonPow2Textures() const;
+ virtual int GetTextureStageCount() const;
+ virtual int NumVertexShaderConstants() const;
+ virtual int NumBooleanVertexShaderConstants() const;
+ virtual int NumIntegerVertexShaderConstants() const;
+ virtual int NumPixelShaderConstants() const;
+ virtual int NumBooleanPixelShaderConstants() const;
+ virtual int NumIntegerPixelShaderConstants() const;
+ virtual int MaxNumLights() const;
+ virtual bool SupportsHardwareLighting() const;
+ virtual int MaxBlendMatrices() const;
+ virtual int MaxBlendMatrixIndices() const;
+ virtual int MaxTextureAspectRatio() const;
+ virtual int MaxVertexShaderBlendMatrices() const;
+ virtual int MaxUserClipPlanes() const;
+ virtual bool UseFastClipping() const;
+ virtual int GetDXSupportLevel() const;
+ virtual const char *GetShaderDLLName() const;
+ virtual bool ReadPixelsFromFrontBuffer() const;
+ virtual bool PreferDynamicTextures() const;
+ virtual bool SupportsHDR() const;
+ virtual bool HasProjectedBumpEnv() const;
+ virtual bool SupportsSpheremapping() const;
+ virtual bool NeedsAAClamp() const;
+ virtual bool NeedsATICentroidHack() const;
+ virtual bool SupportsColorOnSecondStream() const;
+ virtual bool SupportsStaticPlusDynamicLighting() const;
+ virtual bool PreferReducedFillrate() const;
+ virtual int GetMaxDXSupportLevel() const;
+ virtual bool SpecifiesFogColorInLinearSpace() const;
+ virtual bool SupportsSRGB() const;
+ virtual bool FakeSRGBWrite() const;
+ virtual bool CanDoSRGBReadFromRTs() const;
+ virtual bool SupportsGLMixedSizeTargets() const;
+ virtual bool IsAAEnabled() const;
+ virtual int GetVertexTextureCount() const;
+ virtual int GetMaxVertexTextureDimension() const;
+ virtual int MaxTextureDepth() const;
+ virtual HDRType_t GetHDRType() const;
+ virtual HDRType_t GetHardwareHDRType() const;
+ virtual bool SupportsPixelShaders_2_b() const;
+ virtual bool SupportsShaderModel_3_0() const;
+ virtual bool SupportsStreamOffset() const;
+ virtual int StencilBufferBits() const;
+ virtual int MaxViewports() const;
+ virtual void OverrideStreamOffsetSupport( bool bOverrideEnabled, bool bEnableSupport );
+ virtual int GetShadowFilterMode() const;
+ virtual int NeedsShaderSRGBConversion() const;
+ virtual bool UsesSRGBCorrectBlending() const;
+ virtual bool HasFastVertexTextures() const;
+ virtual int MaxHWMorphBatchCount() const;
+
+ const char *GetHWSpecificShaderDLLName() const;
+ int GetActualSamplerCount() const;
+ int GetActualTextureStageCount() const;
+ bool SupportsMipmapping() const;
+ virtual bool ActuallySupportsPixelShaders_2_b() const;
+
+ virtual bool SupportsHDRMode( HDRType_t nHDRMode ) const;
+
+ const HardwareCaps_t& ActualCaps() const { return m_ActualCaps; }
+ const HardwareCaps_t& Caps() const { return m_Caps; }
+ virtual bool GetHDREnabled( void ) const;
+ virtual void SetHDREnabled( bool bEnable );
+
+protected:
+ // Gets the recommended configuration associated with a particular dx level
+ void ForceCapsToDXLevel( HardwareCaps_t *pCaps, int nDxLevel, const HardwareCaps_t &actualCaps );
+
+ // Members related to capabilities
+ HardwareCaps_t m_ActualCaps;
+ HardwareCaps_t m_Caps;
+ HardwareCaps_t m_UnOverriddenCaps;
+ bool m_bHDREnabled;
+};
+
+
+//-----------------------------------------------------------------------------
+// Singleton hardware config
+//-----------------------------------------------------------------------------
+extern CHardwareConfig *g_pHardwareConfig;
+
+
+#endif // HARDWARECONFIG_H