S&box Wiki

Revision Difference

Constant_Buffers#545914

<cat>Code.Shader</cat> <title>Constant Buffers</title> # What are constant buffers Constant buffer or "cbuffers" as known by HLSL is a buffer/struct which is stored in GPU memory and can be accessed within your shader. Once the file is included you should be able to access the cbuffer like a regular variable within your shader. An example of its usage can be seen below: ``` VS { #include "common/vertex.hlsl" #include "common.fxc" // Contains PerViewConstantBuffer_t // // Main // PixelInput MainVs( INSTANCED_SHADER_PARAMS( VS_INPUT i ) ) { PixelInput o = ProcessVertex( i ); o.vPositionWs.z += sin(g_flTime) * 5.0f; // wiggle return FinalizeVertex( o ); } } ``` ## PerViewConstantBuffer_t Usage: `#include "common.fxc"` | Type | Field | Note | |------|-------|------| | float4x4 | g_matWorldToProjection | | | float4x4 | g_matProjectionToWorld | | | float4x4 | g_matWorldToView | | | float4x4 | g_matViewToProjection | | | float4 | g_vInvProjRow3 | | | float4 | g_vClipPlane0 | | | float | g_flToneMapScalarLinear | | | float | g_flLightMapScalar | | | float | g_flEnvMapScalar | | | float | g_flToneMapScalarGamma | | | float3 | g_vCameraPositionWs | The world position of the camera | | float | g_flViewportMinZ | | | float3 | g_vCameraDirWs | The current camera direction | | float | g_flViewportMaxZ | | | float3 | g_vCameraUpDirWs | | | float | g_flTime | The time since the client has connected | | float3 | g_vDepthPsToVsConversion | | | float | g_flNearPlane | NearZ | | float | g_flFarPlane | FarZ | | float | g_flLightBinnerFarPlane | | | float2 | g_vInvViewportSize | | | float2 | g_vViewportToGBufferRatio | | | float2 | g_vMorphTextureAtlasSize | | | float4 | g_vInvGBufferSize | | | float | g_flOOTransformTextureWidth | | | float | g_flOOTransformTextureHeight | | | float2 | g_vViewportOffset | | | float2 | g_vViewportSize | | | float2 | g_vRenderTargetSize | | | float | g_flFogBlendToBackground | | | float | g_flHenyeyGreensteinCoeff | | | float3 | g_vFogColor | | | float | g_flNegFogStartOverFogRange | | | float | g_flInvFogRange | | | float | g_flFogMaxDensity | | | float | g_flFogExponent | | | float | g_flMod2xIdentity | | | float2 | g_bRoughnessParams | | | bool | g_bUseRoughnessCone | | | bool | g_bUseRoughnessEllipse | | | float | g_bStereoEnabled | | | float | g_flStereoCameraIndex | | | float3 | g_vMiddleEyePositionWs | | | float | g_flPad2 | Padding for alignment, unused | | float4x4 | g_matWorldToProjectionMultiview[ 2 ] | | | float4 | g_vCameraPositionWsMultiview[ 2 ] | | | float4 | g_vFrameBufferCopyInvSizeAndUvScale | | | float4 | g_vCameraAngles | | | float4 | g_vWorldToCameraOffset | | | float4 | g_vWorldToCameraOffsetMultiview[ 2 ] | | | float4 | g_vPerViewConstantExtraData0 | | | float4 | g_vPerViewConstantExtraData1 | | | float4 | g_vPerViewConstantExtraData2 | | | float4 | g_vPerViewConstantExtraData3 | | | float4x4 | m_matPrevProjectionToWorld | | ## PerViewLightingConstantBuffer_t Usage: `#include "common.fxc"` | Type | Field | Note | |------|-------|------| | float | g_flInvPointLightTextureWidth | | | float | g_flInvSpotLightTextureWidth | | | float | g_flInvLightTransformTextureWidth | | | float | g_flInvLightTextureHeight | | | float4 | g_vLightBinCounts | | | float2 | g_vLowResDeferredLightingTextureDim | | | float2 | g_vLowResDeferredLightingTextureInvDim | | | float3 | g_vToolsAmbientLighting | | | float | g_flSSAOEnabled | | | float3 | g_vIrradAtlasInvSize | | | float | g_flIrradGlobalLightingFactor | | | float4 | g_vGlobalLightingSHRed | | | float4 | g_vGlobalLightingSHGreen | | | float4 | g_vGlobalLightingSHBlue | | | float3 | g_vRayleighScatteringCoeff | | | float | g_flMieScatteringEccentricity | | | float3 | g_vMieScatteringCoeff | | | float | g_flMieForwardScatteringRatio | | | float3 | g_vSpecularCubeMapScale | | | float | g_flDefaultEnvMapIndex | | | float4 | g_vLightCookieSheetSequenceAndSizes | | | float3 | g_vLpvBoxMinCascade0 | | | float | g_flLpvBrightnessScale | | | float3 | g_vLpvInvBoxDimCascade0 | | | float2 | g_vLpvInvCoeffTextureDim | | ## PerLayerConstantBuffer_t Usage: `#include "common.fxc"` | Type | Field | Note | |------|-------|------| | float4 | g_vWireframeColor | The wireframe color for the current rendering layer(mat_wireframe N) | ## PerViewConstantBufferVR_t Usage: `#include "vr_common.fxc"` | Type | Field | Note | |------|-------|------| | bool | g_bVolumetricFogEnabled | | | bool | g_bGradientFogEnabled | | | bool | g_bCubemapFogEnabled | | | bool | g_bSphericalVignetteEnabled | | | bool | g_bAmbientOcclusionProxiesEnabled | | | float4 | g_vAoProxyDownres | | | float | g_flExcitationAmount | Xen animations | | float | g_flDepressionAmount | Xen animations | | float4 | g_vWindDirection | Current wind direction | | float | g_flWindSpeed | Current wind speed | | float4 | g_vInteractionProjectionOrigin | | | float4 | g_vInteractionVolumeInvExtents | | | float4 | g_vInteractionTriggerVolumeInvMins | | | float4 | g_vInteractionTriggerVolumeWorldToVolumeScale | | | float4 | g_vGradientFogBiasAndScale | | | float4 | m_vGradientFogExponents | | | float4 | g_vGradientFogColor_Opacity | | | float4 | g_vGradientFogCullingParams | | | float | g_flCubeFogOffset | | | float | g_flCubeFogScale | | | float | g_flCubeFogBias | | | float | g_flCubeFogExponent | | | float | g_flCubeFogHeightOffset | | | float | g_flCubeFogHeightScale | | | float | g_flCubeFogHeightExponent | | | float | g_flCubeMapSizeLog2 | | | float4x4 | g_matvCubeFogSkyWsToOs | | | float4 | g_vCubeFogCullingParams | | | float4 | g_vSphericalVignetteBiasAndScale | | | float4 | g_vSphericalVignetteOrigin_Exponent | | | float4 | g_vSphericalVignetteColor_Opacity | | | float | g_flVolFogNearClipPlane | | | float | g_flVolFogClipPlaneRange | | | float4 | g_vVolFogDitherScaleBias | | | float4 | g_vVolFogPostWorldToFrustumScale | | | float4 | g_vVolFogPostWorldToFrustumBias | | | float4x4 | g_mVolFogFromWorld[ 2 ] | | | float4 | g_vHighPrecisionLightingOffsetWs | | ## SkyConstantBuffer_t Usage: `#include "sky.fxc"` | Type | Field | Note | |------|-------|------| | float4x3 | g_matSkyOsToWs | Convert from Sky Object Space to Sky World Space | | float4x3 | g_matSkyWsToOs | Convert from Sky World Space to Sky Object Space | ## SunLightShaderParamsCB Usage: `#include "sun_shadowing.fxc"` | Type | Field | Note | |------|-------|------| | float4 | g_vSunLightColor | Current sun color | | float3 | g_vSunLightDir | Current sun direction | | float | g_flSunNormalizedRadius | | | float | g_flSunShadowingInvShadowTextureWidth | | | float | g_flSunShadowingInvShadowTextureHeight | | | float | g_flSunShadowingHalfInvShadowTextureWidth | | | float | g_flSunShadowingHalfInvShadowTextureHeight | | | float | g_flSunShadowingShadowTextureWidth | | | float | g_flSunShadowingShadowTextureHeight | | | float | g_flSunShadowingSplitLerpFactorBase | | | float | g_flSunShadowingSplitLerpFactorInvRange | | | float | g_flSunShadowingZLerpFactorBase | | | float | g_flSunShadowingZLerpFactorRange | | | float4x4 | g_matWorldToShadowTexMatrices[4] | | | float4 | g_vCascadeAtlasUVOffsets[4] | | | float4 | g_flCascadeViewShadowBiasScales[4] | | | int | g_nSunShadowCascadeCount | |