void UnsetParameters(FRHICommandList& RHICmdList) { ObjectBufferParameters.UnsetParameters(RHICmdList, GetComputeShader()); ObjectIndirectArguments.UnsetUAV(RHICmdList, GetComputeShader()); CulledObjectBounds.UnsetUAV(RHICmdList, GetComputeShader()); CulledObjectData.UnsetUAV(RHICmdList, GetComputeShader()); CulledObjectBoxBounds.UnsetUAV(RHICmdList, GetComputeShader()); }
void FFluidSimConfinementShader::SetUniformBuffers(FRHICommandList& RHICmdList, FFluidSimulationShaderConstantParameters& ConstantParameters, FFluidSimulationShaderVariableParameters& VariableParameters) { FFluidSimulationShaderConstantParametersRef ConstantParametersBuffer; FFluidSimulationShaderVariableParametersRef VariableParametersBuffer; ConstantParametersBuffer = FFluidSimulationShaderConstantParametersRef::CreateUniformBufferImmediate(ConstantParameters, UniformBuffer_SingleDraw); VariableParametersBuffer = FFluidSimulationShaderVariableParametersRef::CreateUniformBufferImmediate(VariableParameters, UniformBuffer_SingleDraw); SetUniformBufferParameter(RHICmdList, GetComputeShader(), GetUniformBufferParameter<FFluidSimulationShaderConstantParameters>(), ConstantParametersBuffer); SetUniformBufferParameter(RHICmdList, GetComputeShader(), GetUniformBufferParameter<FFluidSimulationShaderVariableParameters>(), VariableParametersBuffer); }
void SetParameters(FRHICommandList& RHICmdList, uint32 InputStreamStride, uint32 InputStreamFloatOffset, uint32 InputStreamVertexCount, uint32 OutputBufferFloatOffset, FBoneBufferTypeRef BoneBuffer, FUniformBufferRHIRef UniformBuffer, FShaderResourceViewRHIRef VertexBufferSRV, FRWBuffer& SkinBuffer, const FVector& MeshOrigin, const FVector& MeshExtension) { FComputeShaderRHIParamRef ComputeShaderRHI = GetComputeShader(); SetShaderValue(RHICmdList, ComputeShaderRHI, SkinMeshOriginParameter, MeshOrigin); SetShaderValue(RHICmdList, ComputeShaderRHI, SkinMeshExtensionParameter, MeshExtension); SetShaderValue(RHICmdList, ComputeShaderRHI, SkinInputStreamStride, InputStreamStride); SetShaderValue(RHICmdList, ComputeShaderRHI, SkinInputStreamVertexCount, InputStreamVertexCount); SetShaderValue(RHICmdList, ComputeShaderRHI, SkinInputStreamFloatOffset, InputStreamFloatOffset); SetShaderValue(RHICmdList, ComputeShaderRHI, SkinOutputBufferFloatOffset, OutputBufferFloatOffset); if (UniformBuffer) { SetUniformBufferParameter(RHICmdList, ComputeShaderRHI, GetUniformBufferParameter<GPUSkinCacheBonesUniformShaderParameters>(), UniformBuffer); } else { RHICmdList.SetShaderResourceViewParameter(ComputeShaderRHI, BoneMatrices.GetBaseIndex(), BoneBuffer.VertexBufferSRV); } RHICmdList.SetShaderResourceViewParameter(ComputeShaderRHI, SkinInputStream.GetBaseIndex(), VertexBufferSRV); RHICmdList.SetUAVParameter( ComputeShaderRHI, SkinCacheBufferRW.GetBaseIndex(), SkinBuffer.UAV ); }
void FClearBufferReplacementCS::SetParameters( FRHICommandList& RHICmdList, FUnorderedAccessViewRHIParamRef BufferRW, uint32 Dword ) { FComputeShaderRHIParamRef ComputeShaderRHI = GetComputeShader(); SetShaderValue(RHICmdList, ComputeShaderRHI, ClearDword, Dword); RHICmdList.TransitionResource(EResourceTransitionAccess::ERWBarrier, EResourceTransitionPipeline::EGfxToCompute, BufferRW); RHICmdList.SetUAVParameter(ComputeShaderRHI, ClearBufferRW.GetBaseIndex(), BufferRW); }
void UnsetParameters(FRHICommandList& RHICmdList, const FViewInfo& View) { ScreenGridConeVisibility.UnsetUAV(RHICmdList, GetComputeShader()); ConeDepthVisibilityFunction.UnsetUAV(RHICmdList, GetComputeShader()); FAOScreenGridResources* ScreenGridResources = View.ViewState->AOScreenGridResources; int32 NumOutUAVs = 0; FUnorderedAccessViewRHIParamRef OutUAVs[2]; OutUAVs[NumOutUAVs++] = ScreenGridResources->ScreenGridConeVisibility.UAV; if (bSupportIrradiance) { OutUAVs[NumOutUAVs++] = ScreenGridResources->ConeDepthVisibilityFunction.UAV; } RHICmdList.TransitionResources(EResourceTransitionAccess::EReadable, EResourceTransitionPipeline::EComputeToCompute, OutUAVs, NumOutUAVs); }
void SetParameters(FRHICommandList& RHICmdList, const FScene* Scene, const FSceneView& View, const FMatrix& WorldToShadowValue, int32 NumPlanes, const FPlane* PlaneData, const FVector4& ShadowBoundingSphereValue) { FComputeShaderRHIParamRef ShaderRHI = GetComputeShader(); FGlobalShader::SetParameters(RHICmdList, ShaderRHI, View); ObjectBufferParameters.Set(RHICmdList, ShaderRHI, *(Scene->DistanceFieldSceneData.ObjectBuffers), Scene->DistanceFieldSceneData.NumObjectsInBuffer); ObjectIndirectArguments.SetBuffer(RHICmdList, ShaderRHI, GShadowCulledObjectBuffers.Buffers.ObjectIndirectArguments); CulledObjectBounds.SetBuffer(RHICmdList, ShaderRHI, GShadowCulledObjectBuffers.Buffers.Bounds); CulledObjectData.SetBuffer(RHICmdList, ShaderRHI, GShadowCulledObjectBuffers.Buffers.Data); CulledObjectBoxBounds.SetBuffer(RHICmdList, ShaderRHI, GShadowCulledObjectBuffers.Buffers.BoxBounds); SetShaderValue(RHICmdList, ShaderRHI, ObjectBoundingGeometryIndexCount, StencilingGeometry::GLowPolyStencilSphereIndexBuffer.GetIndexCount()); SetShaderValue(RHICmdList, ShaderRHI, WorldToShadow, WorldToShadowValue); SetShaderValue(RHICmdList, ShaderRHI, ShadowBoundingSphere, ShadowBoundingSphereValue); if (NumPlanes < 12) { SetShaderValue(RHICmdList, ShaderRHI, NumShadowHullPlanes, NumPlanes); SetShaderValueArray(RHICmdList, ShaderRHI, ShadowConvexHull, PlaneData, NumPlanes); } else { SetShaderValue(RHICmdList, ShaderRHI, NumShadowHullPlanes, 0); } }
void UnsetParameters(FRHICommandList& RHICmdList, IPooledRenderTarget& OutTextureValue) { OutTexture.UnsetUAV(RHICmdList, GetComputeShader()); FUnorderedAccessViewRHIParamRef OutUAV = OutTextureValue.GetRenderTargetItem().UAV; RHICmdList.TransitionResources(EResourceTransitionAccess::EReadable, EResourceTransitionPipeline::EComputeToGfx, &OutUAV, 1); }
void SetParameters( FRHICommandList& RHICmdList, const FSceneView& View, int32 SurfelStartIndexValue, int32 NumSurfelsToGenerateValue, const FMaterialRenderProxy* MaterialProxy, FUniformBufferRHIParamRef PrimitiveUniformBuffer, const FMatrix& Instance0Transform ) { FComputeShaderRHIParamRef ShaderRHI = GetComputeShader(); FMaterialShader::SetParameters(RHICmdList, ShaderRHI, MaterialProxy, *MaterialProxy->GetMaterial(View.GetFeatureLevel()), View, View.ViewUniformBuffer, true, ESceneRenderTargetsMode::SetTextures); SetUniformBufferParameter(RHICmdList, ShaderRHI,GetUniformBufferParameter<FPrimitiveUniformShaderParameters>(),PrimitiveUniformBuffer); const FScene* Scene = (const FScene*)View.Family->Scene; FUnorderedAccessViewRHIParamRef UniformMeshUAVs[1]; UniformMeshUAVs[0] = Scene->DistanceFieldSceneData.SurfelBuffers->Surfels.UAV; RHICmdList.TransitionResources(EResourceTransitionAccess::ERWBarrier, EResourceTransitionPipeline::EComputeToCompute, UniformMeshUAVs, ARRAY_COUNT(UniformMeshUAVs)); SurfelBufferParameters.Set(RHICmdList, ShaderRHI, *Scene->DistanceFieldSceneData.SurfelBuffers, *Scene->DistanceFieldSceneData.InstancedSurfelBuffers); SetShaderValue(RHICmdList, ShaderRHI, SurfelStartIndex, SurfelStartIndexValue); SetShaderValue(RHICmdList, ShaderRHI, NumSurfelsToGenerate, NumSurfelsToGenerateValue); SetShaderValue(RHICmdList, ShaderRHI, Instance0InverseTransform, Instance0Transform.Inverse()); }
void FComputeGlobalShader::UnsetUAV(FRHICommandList& CommandList) { if (ShaderResourceParam.IsBound()) { CommandList.SetUAVParameter(GetComputeShader(), ShaderResourceParam.GetBaseIndex(), FUnorderedAccessViewRHIRef()); } }
void UnsetParameters(FRHICommandList& RHICmdList) { ObjectIndirectArguments.UnsetUAV(RHICmdList, GetComputeShader()); FUnorderedAccessViewRHIParamRef OutUAVs[1]; OutUAVs[0] = GShadowCulledObjectBuffers.Buffers.ObjectIndirectArguments.UAV; RHICmdList.TransitionResources(EResourceTransitionAccess::EReadable, EResourceTransitionPipeline::EComputeToCompute, OutUAVs, ARRAY_COUNT(OutUAVs)); }
void FClearTexture2DReplacementScissorCS::SetParameters(FRHICommandList& RHICmdList, FUnorderedAccessViewRHIParamRef TextureRW, FLinearColor InClearColor, const FVector4& InTargetBounds) { FComputeShaderRHIParamRef ComputeShaderRHI = GetComputeShader(); SetShaderValue(RHICmdList, ComputeShaderRHI, ClearColor, InClearColor); SetShaderValue(RHICmdList, ComputeShaderRHI, TargetBounds, InTargetBounds); RHICmdList.TransitionResource(EResourceTransitionAccess::ERWBarrier, EResourceTransitionPipeline::EGfxToCompute, TextureRW); RHICmdList.SetUAVParameter(ComputeShaderRHI, ClearTextureRW.GetBaseIndex(), TextureRW); }
void FFluidSimVorticityShader::UnbindBuffers(FRHICommandList& RHICmdList) { FComputeShaderRHIParamRef ComputeShaderRHI = GetComputeShader(); if (VelocityIn.IsBound()) RHICmdList.SetShaderResourceViewParameter(ComputeShaderRHI, VelocityIn.GetBaseIndex(), FShaderResourceViewRHIRef()); if (VorticityOut.IsBound()) RHICmdList.SetUAVParameter(ComputeShaderRHI, VorticityOut.GetBaseIndex(), FUnorderedAccessViewRHIRef()); }
void SetParameters( FRHICommandList& RHICmdList, const FViewInfo& View, FIntPoint TileListGroupSizeValue, FSceneRenderTargetItem& DistanceFieldNormal, const FDistanceFieldAOParameters& Parameters, FSceneRenderTargetItem& SpecularOcclusionBuffer) { FComputeShaderRHIParamRef ShaderRHI = GetComputeShader(); FGlobalShader::SetParameters(RHICmdList, ShaderRHI, View); DeferredParameters.Set(RHICmdList, ShaderRHI, View); ObjectParameters.Set(RHICmdList, ShaderRHI, GAOCulledObjectBuffers.Buffers); AOParameters.Set(RHICmdList, ShaderRHI, Parameters); ScreenGridParameters.Set(RHICmdList, ShaderRHI, View, DistanceFieldNormal); FAOSampleData2 AOSampleData; TArray<FVector, TInlineAllocator<9> > SampleDirections; GetSpacedVectors(SampleDirections); for (int32 SampleIndex = 0; SampleIndex < NumConeSampleDirections; SampleIndex++) { AOSampleData.SampleDirections[SampleIndex] = FVector4(SampleDirections[SampleIndex]); } SetUniformBufferParameterImmediate(RHICmdList, ShaderRHI, GetUniformBufferParameter<FAOSampleData2>(), AOSampleData); FTileIntersectionResources* TileIntersectionResources = View.ViewState->AOTileIntersectionResources; SetSRVParameter(RHICmdList, ShaderRHI, TileHeadDataUnpacked, TileIntersectionResources->TileHeadDataUnpacked.SRV); SetSRVParameter(RHICmdList, ShaderRHI, TileArrayData, TileIntersectionResources->TileArrayData.SRV); SetSRVParameter(RHICmdList, ShaderRHI, TileConeDepthRanges, TileIntersectionResources->TileConeDepthRanges.SRV); SetShaderValue(RHICmdList, ShaderRHI, TileListGroupSize, TileListGroupSizeValue); extern float GAOConeHalfAngle; SetShaderValue(RHICmdList, ShaderRHI, TanConeHalfAngle, FMath::Tan(GAOConeHalfAngle)); FVector UnoccludedVector(0); for (int32 SampleIndex = 0; SampleIndex < NumConeSampleDirections; SampleIndex++) { UnoccludedVector += SampleDirections[SampleIndex]; } float BentNormalNormalizeFactorValue = 1.0f / (UnoccludedVector / NumConeSampleDirections).Size(); SetShaderValue(RHICmdList, ShaderRHI, BentNormalNormalizeFactor, BentNormalNormalizeFactorValue); int32 NumOutUAVs = 0; FUnorderedAccessViewRHIParamRef OutUAVs[1]; OutUAVs[NumOutUAVs++] = SpecularOcclusionBuffer.UAV; RHICmdList.TransitionResources(EResourceTransitionAccess::ERWBarrier, EResourceTransitionPipeline::EComputeToCompute, OutUAVs, NumOutUAVs); SpecularOcclusion.SetTexture(RHICmdList, ShaderRHI, SpecularOcclusionBuffer.ShaderResourceTexture, SpecularOcclusionBuffer.UAV); }
void SetCS( FRHICommandList& RHICmdList, const FRenderingCompositePassContext& Context, const FSceneView& View ) { const FComputeShaderRHIParamRef ShaderRHI = GetComputeShader(); FGlobalShader::SetParameters(RHICmdList, ShaderRHI, Context.View); PostprocessParameter.SetCS(ShaderRHI, Context, TStaticSamplerState<SF_Point,AM_Clamp,AM_Clamp,AM_Clamp>::GetRHI()); CameraMotionParams.Set(RHICmdList, Context.View, ShaderRHI); SetShaderValue(RHICmdList, ShaderRHI, ViewDimensions, View.ViewRect); }
void UnsetParameters(FRHICommandList& RHICmdList, FSceneRenderTargetItem& SpecularOcclusionBuffer) { SpecularOcclusion.UnsetUAV(RHICmdList, GetComputeShader()); int32 NumOutUAVs = 0; FUnorderedAccessViewRHIParamRef OutUAVs[1]; OutUAVs[NumOutUAVs++] = SpecularOcclusionBuffer.UAV; RHICmdList.TransitionResources(EResourceTransitionAccess::EReadable, EResourceTransitionPipeline::EComputeToCompute, OutUAVs, NumOutUAVs); }
void UnsetParameters(FRHICommandList& RHICmdList) { FComputeShaderRHIParamRef ComputeShaderRHI = GetComputeShader(); FShaderResourceViewRHIParamRef NullSRV = FShaderResourceViewRHIParamRef(); RHICmdList.SetShaderResourceViewParameter(ComputeShaderRHI, BoneMatrices.GetBaseIndex(), NullSRV); RHICmdList.SetShaderResourceViewParameter(ComputeShaderRHI, SkinInputStream.GetBaseIndex(), NullSRV); RHICmdList.SetUAVParameter( ComputeShaderRHI, SkinCacheBufferRW.GetBaseIndex(), FUnorderedAccessViewRHIParamRef() ); }
void UnsetParameters(FRHICommandList& RHICmdList, FViewInfo& View) { FComputeShaderRHIParamRef ShaderRHI = GetComputeShader(); SurfelBufferParameters.UnsetParameters(RHICmdList, ShaderRHI); const FScene* Scene = (const FScene*)View.Family->Scene; FUnorderedAccessViewRHIParamRef UniformMeshUAVs[1]; UniformMeshUAVs[0] = Scene->DistanceFieldSceneData.SurfelBuffers->Surfels.UAV; RHICmdList.TransitionResources(EResourceTransitionAccess::EReadable, EResourceTransitionPipeline::EComputeToCompute, UniformMeshUAVs, ARRAY_COUNT(UniformMeshUAVs)); }
void SetParameters(FRHICommandList& RHICmdList, const FSceneView& View, FTextureRHIParamRef SSRTexture, TArray<FReflectionCaptureSortData>& SortData, FUnorderedAccessViewRHIParamRef OutSceneColorUAV, const TRefCountPtr<IPooledRenderTarget>& DynamicBentNormalAO) { const FComputeShaderRHIParamRef ShaderRHI = GetComputeShader(); FGlobalShader::SetParameters(RHICmdList, ShaderRHI, View); DeferredParameters.Set(RHICmdList, ShaderRHI, View); FScene* Scene = (FScene*)View.Family->Scene; check(Scene->ReflectionSceneData.CubemapArray.IsValid()); check(Scene->ReflectionSceneData.CubemapArray.GetRenderTarget().IsValid()); FSceneRenderTargetItem& CubemapArray = Scene->ReflectionSceneData.CubemapArray.GetRenderTarget(); SetTextureParameter( RHICmdList, ShaderRHI, ReflectionEnvironmentColorTexture, ReflectionEnvironmentColorSampler, TStaticSamplerState<SF_Trilinear, AM_Clamp, AM_Clamp, AM_Clamp>::GetRHI(), CubemapArray.ShaderResourceTexture); SetTextureParameter(RHICmdList, ShaderRHI, ScreenSpaceReflections, SSRTexture ); SetTextureParameter(RHICmdList, ShaderRHI, InSceneColor, GSceneRenderTargets.GetSceneColor()->GetRenderTargetItem().ShaderResourceTexture ); OutSceneColor.SetTexture(RHICmdList, ShaderRHI, NULL, OutSceneColorUAV); SetShaderValue(RHICmdList, ShaderRHI, ViewDimensionsParameter, View.ViewRect); FReflectionCaptureData SamplePositionsBuffer; for (int32 CaptureIndex = 0; CaptureIndex < SortData.Num(); CaptureIndex++) { SamplePositionsBuffer.PositionAndRadius[CaptureIndex] = SortData[CaptureIndex].PositionAndRadius; SamplePositionsBuffer.CaptureProperties[CaptureIndex] = SortData[CaptureIndex].CaptureProperties; SamplePositionsBuffer.BoxTransform[CaptureIndex] = SortData[CaptureIndex].BoxTransform; SamplePositionsBuffer.BoxScales[CaptureIndex] = SortData[CaptureIndex].BoxScales; } SetUniformBufferParameterImmediate(RHICmdList, ShaderRHI, GetUniformBufferParameter<FReflectionCaptureData>(), SamplePositionsBuffer); SetShaderValue(RHICmdList, ShaderRHI, NumCaptures, SortData.Num()); SetTextureParameter(RHICmdList, ShaderRHI, PreIntegratedGF, PreIntegratedGFSampler, TStaticSamplerState<SF_Bilinear,AM_Clamp,AM_Clamp,AM_Clamp>::GetRHI(), GSystemTextures.PreintegratedGF->GetRenderTargetItem().ShaderResourceTexture); SkyLightParameters.SetParameters(RHICmdList, ShaderRHI, Scene, View.Family->EngineShowFlags.SkyLighting); const float MinOcclusion = Scene->SkyLight ? Scene->SkyLight->MinOcclusion : 0; SpecularOcclusionParameters.SetParameters(RHICmdList, ShaderRHI, DynamicBentNormalAO, CVarSkySpecularOcclusionStrength.GetValueOnRenderThread(), MinOcclusion); }
void SetParameters(FRHICommandList& RHICmdList, const FScene* Scene, const FSceneView& View, float MaxOcclusionDistance, const FVector4& VolumeBoundsValue) { FComputeShaderRHIParamRef ShaderRHI = GetComputeShader(); FGlobalShader::SetParameters(RHICmdList, ShaderRHI, View); ObjectBufferParameters.Set(RHICmdList, ShaderRHI, *(Scene->DistanceFieldSceneData.ObjectBuffers), Scene->DistanceFieldSceneData.NumObjectsInBuffer); ObjectIndirectArguments.SetBuffer(RHICmdList, ShaderRHI, GGlobalDistanceFieldCulledObjectBuffers.Buffers.ObjectIndirectArguments); CulledObjectBounds.SetBuffer(RHICmdList, ShaderRHI, GGlobalDistanceFieldCulledObjectBuffers.Buffers.Bounds); CulledObjectData.SetBuffer(RHICmdList, ShaderRHI, GGlobalDistanceFieldCulledObjectBuffers.Buffers.Data); CulledObjectBoxBounds.SetBuffer(RHICmdList, ShaderRHI, GGlobalDistanceFieldCulledObjectBuffers.Buffers.BoxBounds); extern float GAOConeHalfAngle; const float GlobalMaxSphereQueryRadius = MaxOcclusionDistance / (1 + FMath::Tan(GAOConeHalfAngle)); SetShaderValue(RHICmdList, ShaderRHI, AOGlobalMaxSphereQueryRadius, GlobalMaxSphereQueryRadius); SetShaderValue(RHICmdList, ShaderRHI, VolumeBounds, VolumeBoundsValue); }
void SetCS(FRHICommandList& RHICmdList, const FRenderingCompositePassContext& Context, const FSceneView& View, FIntPoint WriteMaskDimensions) { const FComputeShaderRHIParamRef ShaderRHI = GetComputeShader(); FGlobalShader::SetParameters(RHICmdList, ShaderRHI, Context.View); //PostprocessParameter.SetCS(ShaderRHI, Context, Context.RHICmdList, TStaticSamplerState<SF_Point, AM_Clamp, AM_Clamp, AM_Clamp>::GetRHI()); FSceneRenderTargets& SceneContext = FSceneRenderTargets::Get(RHICmdList); SetShaderValue(Context.RHICmdList, ShaderRHI, RTWriteMaskDimensions, WriteMaskDimensions); SetSRVParameter(Context.RHICmdList, ShaderRHI, RTWriteMaskInput0, SceneContext.DBufferA->GetRenderTargetItem().RTWriteMaskBufferRHI_SRV); SetSRVParameter(Context.RHICmdList, ShaderRHI, RTWriteMaskInput1, SceneContext.DBufferB->GetRenderTargetItem().RTWriteMaskBufferRHI_SRV); SetSRVParameter(Context.RHICmdList, ShaderRHI, RTWriteMaskInput2, SceneContext.DBufferC->GetRenderTargetItem().RTWriteMaskBufferRHI_SRV); int32 UseMask = CVarGenerateDecalRTWriteMaskTexture.GetValueOnRenderThread(); SetShaderValue(Context.RHICmdList, ShaderRHI, UtilizeMask, UseMask); }
void FFluidSimConfinementShader::SetSurfaces( FRHICommandList& RHICmdList, FShaderResourceViewRHIRef ObstaclesInSRV, FShaderResourceViewRHIRef VorticityInSRV, FShaderResourceViewRHIRef VelocityInSRV, FUnorderedAccessViewRHIRef VelocityOutUAV ) { FComputeShaderRHIParamRef ComputeShaderRHI = GetComputeShader(); if (ObstaclesIn.IsBound()) RHICmdList.SetShaderResourceViewParameter(ComputeShaderRHI, ObstaclesIn.GetBaseIndex(), ObstaclesInSRV); if (VorticityIn.IsBound()) RHICmdList.SetShaderResourceViewParameter(ComputeShaderRHI, VorticityIn.GetBaseIndex(), VorticityInSRV); if (VelocityIn.IsBound()) RHICmdList.SetShaderResourceViewParameter(ComputeShaderRHI, VelocityIn.GetBaseIndex(), VelocityInSRV); if (VelocityIn.IsBound()) RHICmdList.SetUAVParameter(ComputeShaderRHI, VelocityOut.GetBaseIndex(), VelocityOutUAV); }
void SetCS(const FRenderingCompositePassContext& Context, FIntPoint ThreadGroupCountValue, FIntPoint LeftTopOffsetValue, FIntPoint GatherExtent) { const FComputeShaderRHIParamRef ShaderRHI = GetComputeShader(); FGlobalShader::SetParameters(ShaderRHI, Context.View); PostprocessParameter.SetCS(ShaderRHI, Context, TStaticSamplerState<SF_Point,AM_Clamp,AM_Clamp,AM_Clamp>::GetRHI()); SetShaderValue(ShaderRHI, ThreadGroupCount, ThreadGroupCountValue); SetShaderValue(ShaderRHI, LeftTopOffset, LeftTopOffsetValue); FVector4 HistogramParametersValue(GatherExtent.X, GatherExtent.Y, 0, 0); SetShaderValue(ShaderRHI, HistogramParameters, HistogramParametersValue); { FVector4 Temp[3]; FRCPassPostProcessEyeAdaptation::ComputeEyeAdaptationParamsValue(Context.View, Temp); SetShaderValueArray(ShaderRHI, EyeAdaptationParams, Temp, 3); } }
void SetParameters(FRHICommandList& RHICmdList, const FScene* Scene, const FSceneView& View, const FProjectedShadowInfo* ProjectedShadowInfo) { FComputeShaderRHIParamRef ShaderRHI = GetComputeShader(); FGlobalShader::SetParameters(RHICmdList, ShaderRHI, View); ObjectBufferParameters.Set(RHICmdList, ShaderRHI, *(Scene->DistanceFieldSceneData.ObjectBuffers), Scene->DistanceFieldSceneData.NumObjectsInBuffer); ObjectIndirectArguments.SetBuffer(RHICmdList, ShaderRHI, GShadowCulledObjectBuffers.Buffers.ObjectIndirectArguments); CulledObjectBounds.SetBuffer(RHICmdList, ShaderRHI, GShadowCulledObjectBuffers.Buffers.Bounds); CulledObjectData.SetBuffer(RHICmdList, ShaderRHI, GShadowCulledObjectBuffers.Buffers.Data); CulledObjectBoxBounds.SetBuffer(RHICmdList, ShaderRHI, GShadowCulledObjectBuffers.Buffers.BoxBounds); SetShaderValue(RHICmdList, ShaderRHI, ObjectBoundingGeometryIndexCount, StencilingGeometry::GLowPolyStencilSphereIndexBuffer.GetIndexCount()); const FMatrix WorldToShadowValue = FTranslationMatrix(ProjectedShadowInfo->PreShadowTranslation) * ProjectedShadowInfo->SubjectAndReceiverMatrix; SetShaderValue(RHICmdList, ShaderRHI, WorldToShadow, WorldToShadowValue); int32 NumPlanes = 0; const FPlane* PlaneData = NULL; FVector4 ShadowBoundingSphereValue(0, 0, 0, 0); if (ProjectedShadowInfo->bDirectionalLight) { NumPlanes = ProjectedShadowInfo->CascadeSettings.ShadowBoundsAccurate.Planes.Num(); PlaneData = ProjectedShadowInfo->CascadeSettings.ShadowBoundsAccurate.Planes.GetData(); } else if (ProjectedShadowInfo->bOnePassPointLightShadow) { ShadowBoundingSphereValue = FVector4(ProjectedShadowInfo->ShadowBounds.Center.X, ProjectedShadowInfo->ShadowBounds.Center.Y, ProjectedShadowInfo->ShadowBounds.Center.Z, ProjectedShadowInfo->ShadowBounds.W); } else { NumPlanes = ProjectedShadowInfo->CasterFrustum.Planes.Num(); PlaneData = ProjectedShadowInfo->CasterFrustum.Planes.GetData(); ShadowBoundingSphereValue = FVector4(ProjectedShadowInfo->PreShadowTranslation, 0); } check(NumPlanes < 12); SetShaderValue(RHICmdList, ShaderRHI, NumShadowHullPlanes, NumPlanes); SetShaderValue(RHICmdList, ShaderRHI, ShadowBoundingSphere, ShadowBoundingSphereValue); SetShaderValueArray(RHICmdList, ShaderRHI, ShadowConvexHull, PlaneData, NumPlanes); }
void FComputeGlobalShader::SetUniformBuffer(FRHICommandList& CommandList, const FComputeShaderUniformBuffer& UniformBuffer) { TUniformBufferRef<FComputeShaderUniformBuffer> Buffer; Buffer = TUniformBufferRef<FComputeShaderUniformBuffer>::CreateUniformBufferImmediate(UniformBuffer, UniformBuffer_SingleDraw); SetUniformBufferParameter(CommandList, GetComputeShader(), GetUniformBufferParameter<FComputeShaderUniformBuffer>(), Buffer); }
void FClearTexture2DReplacementCS::SetParameters( FRHICommandList& RHICmdList, FUnorderedAccessViewRHIParamRef TextureRW, FLinearColor Value ) { FComputeShaderRHIParamRef ComputeShaderRHI = GetComputeShader(); SetShaderValue(RHICmdList, ComputeShaderRHI, ClearColor, Value); RHICmdList.SetUAVParameter(ComputeShaderRHI, ClearTextureRW.GetBaseIndex(), TextureRW); }
void UnsetParameters(FRHICommandList& RHICmdList) { ScreenGridConeVisibility.UnsetUAV(RHICmdList, GetComputeShader()); ConeDepthVisibilityFunction.UnsetUAV(RHICmdList, GetComputeShader()); }
void SetParameters( FRHICommandList& RHICmdList, const FViewInfo& View, FIntPoint TileListGroupSizeValue, FSceneRenderTargetItem& DistanceFieldNormal, const FDistanceFieldAOParameters& Parameters, const FGlobalDistanceFieldInfo& GlobalDistanceFieldInfo) { FComputeShaderRHIParamRef ShaderRHI = GetComputeShader(); FGlobalShader::SetParameters(RHICmdList, ShaderRHI, View); DeferredParameters.Set(RHICmdList, ShaderRHI, View); ObjectParameters.Set(RHICmdList, ShaderRHI, GAOCulledObjectBuffers.Buffers); AOParameters.Set(RHICmdList, ShaderRHI, Parameters); ScreenGridParameters.Set(RHICmdList, ShaderRHI, View, DistanceFieldNormal); if (bUseGlobalDistanceField) { GlobalDistanceFieldParameters.Set(RHICmdList, ShaderRHI, GlobalDistanceFieldInfo.ParameterData); } FAOSampleData2 AOSampleData; TArray<FVector, TInlineAllocator<9> > SampleDirections; GetSpacedVectors(SampleDirections); for (int32 SampleIndex = 0; SampleIndex < NumConeSampleDirections; SampleIndex++) { AOSampleData.SampleDirections[SampleIndex] = FVector4(SampleDirections[SampleIndex]); } SetUniformBufferParameterImmediate(RHICmdList, ShaderRHI, GetUniformBufferParameter<FAOSampleData2>(), AOSampleData); FTileIntersectionResources* TileIntersectionResources = View.ViewState->AOTileIntersectionResources; SetSRVParameter(RHICmdList, ShaderRHI, TileHeadDataUnpacked, TileIntersectionResources->TileHeadDataUnpacked.SRV); SetSRVParameter(RHICmdList, ShaderRHI, TileArrayData, TileIntersectionResources->TileArrayData.SRV); SetSRVParameter(RHICmdList, ShaderRHI, TileConeDepthRanges, TileIntersectionResources->TileConeDepthRanges.SRV); SetShaderValue(RHICmdList, ShaderRHI, TileListGroupSize, TileListGroupSizeValue); extern float GAOConeHalfAngle; SetShaderValue(RHICmdList, ShaderRHI, TanConeHalfAngle, FMath::Tan(GAOConeHalfAngle)); FVector UnoccludedVector(0); for (int32 SampleIndex = 0; SampleIndex < NumConeSampleDirections; SampleIndex++) { UnoccludedVector += SampleDirections[SampleIndex]; } float BentNormalNormalizeFactorValue = 1.0f / (UnoccludedVector / NumConeSampleDirections).Size(); SetShaderValue(RHICmdList, ShaderRHI, BentNormalNormalizeFactor, BentNormalNormalizeFactorValue); FAOScreenGridResources* ScreenGridResources = View.ViewState->AOScreenGridResources; ScreenGridConeVisibility.SetBuffer(RHICmdList, ShaderRHI, ScreenGridResources->ScreenGridConeVisibility); if (bSupportIrradiance) { ConeDepthVisibilityFunction.SetBuffer(RHICmdList, ShaderRHI, ScreenGridResources->ConeDepthVisibilityFunction); } }
void FClearBufferReplacementCS::SetParameters( FRHICommandList& RHICmdList, FUnorderedAccessViewRHIParamRef BufferRW, uint32 Dword ) { FComputeShaderRHIParamRef ComputeShaderRHI = GetComputeShader(); SetShaderValue(RHICmdList, ComputeShaderRHI, ClearDword, Dword); RHICmdList.SetUAVParameter(ComputeShaderRHI, ClearBufferRW.GetBaseIndex(), BufferRW); }
void UnsetParameters(FRHICommandList& RHICmdList) { const FComputeShaderRHIParamRef ShaderRHI = GetComputeShader(); OutSceneColor.UnsetUAV(RHICmdList, ShaderRHI); }
void SetParameters( FRHICommandList& RHICmdList, const FSceneView& View, int32 ViewIndex, int32 NumViews, const TArray<FSortedLightSceneInfo, SceneRenderingAllocator>& SortedLights, int32 NumLightsToRenderInSortedLights, const FSimpleLightArray& SimpleLights, int32 StartIndex, int32 NumThisPass, IPooledRenderTarget& InTextureValue, IPooledRenderTarget& OutTextureValue) { FComputeShaderRHIParamRef ShaderRHI = GetComputeShader(); FGlobalShader::SetParameters(RHICmdList, ShaderRHI, View); DeferredParameters.Set(RHICmdList, ShaderRHI, View); SetTextureParameter(RHICmdList, ShaderRHI, InTexture, InTextureValue.GetRenderTargetItem().ShaderResourceTexture); FUnorderedAccessViewRHIParamRef OutUAV = OutTextureValue.GetRenderTargetItem().UAV; RHICmdList.TransitionResources(EResourceTransitionAccess::ERWBarrier, EResourceTransitionPipeline::EGfxToCompute, &OutUAV, 1); OutTexture.SetTexture(RHICmdList, ShaderRHI, 0, OutUAV); SetShaderValue(RHICmdList, ShaderRHI, ViewDimensions, View.ViewRect); SetTextureParameter( RHICmdList, ShaderRHI, PreIntegratedBRDF, PreIntegratedBRDFSampler, TStaticSamplerState<SF_Bilinear,AM_Clamp,AM_Clamp,AM_Clamp>::GetRHI(), GEngine->PreIntegratedSkinBRDFTexture->Resource->TextureRHI ); static const auto AllowStaticLightingVar = IConsoleManager::Get().FindTConsoleVariableDataInt(TEXT("r.AllowStaticLighting")); const bool bAllowStaticLighting = (!AllowStaticLightingVar || AllowStaticLightingVar->GetValueOnRenderThread() != 0); FTiledDeferredLightData LightData; FTiledDeferredLightData2 LightData2; for (int32 LightIndex = 0; LightIndex < NumThisPass; LightIndex++) { if (StartIndex + LightIndex < NumLightsToRenderInSortedLights) { const FSortedLightSceneInfo& SortedLightInfo = SortedLights[StartIndex + LightIndex]; const FLightSceneInfoCompact& LightSceneInfoCompact = SortedLightInfo.SceneInfo; const FLightSceneInfo* const LightSceneInfo = LightSceneInfoCompact.LightSceneInfo; FVector NormalizedLightDirection; FVector2D SpotAngles; float SourceRadius; float SourceLength; float MinRoughness; // Get the light parameters LightSceneInfo->Proxy->GetParameters( LightData.LightPositionAndInvRadius[LightIndex], LightData.LightColorAndFalloffExponent[LightIndex], NormalizedLightDirection, SpotAngles, SourceRadius, SourceLength, MinRoughness); if (LightSceneInfo->Proxy->IsInverseSquared()) { // Correction for lumen units LightData.LightColorAndFalloffExponent[LightIndex].X *= 16.0f; LightData.LightColorAndFalloffExponent[LightIndex].Y *= 16.0f; LightData.LightColorAndFalloffExponent[LightIndex].Z *= 16.0f; LightData.LightColorAndFalloffExponent[LightIndex].W = 0; } // When rendering reflection captures, the direct lighting of the light is actually the indirect specular from the main view if (View.bIsReflectionCapture) { LightData.LightColorAndFalloffExponent[LightIndex].X *= LightSceneInfo->Proxy->GetIndirectLightingScale(); LightData.LightColorAndFalloffExponent[LightIndex].Y *= LightSceneInfo->Proxy->GetIndirectLightingScale(); LightData.LightColorAndFalloffExponent[LightIndex].Z *= LightSceneInfo->Proxy->GetIndirectLightingScale(); } { // SpotlightMaskAndMinRoughness, >0:Spotlight, MinRoughness = abs(); float W = FMath::Max(0.0001f, MinRoughness) * ((LightSceneInfo->Proxy->GetLightType() == LightType_Spot) ? 1 : -1); LightData2.LightDirectionAndSpotlightMaskAndMinRoughness[LightIndex] = FVector4(NormalizedLightDirection, W); } LightData2.SpotAnglesAndSourceRadiusAndSimpleLighting[LightIndex] = FVector4(SpotAngles.X, SpotAngles.Y, SourceRadius, 0); int32 ShadowMapChannel = LightSceneInfo->Proxy->GetShadowMapChannel(); if (!bAllowStaticLighting) { ShadowMapChannel = INDEX_NONE; } LightData2.ShadowMapChannelMask[LightIndex] = FVector4( ShadowMapChannel == 0 ? 1 : 0, ShadowMapChannel == 1 ? 1 : 0, ShadowMapChannel == 2 ? 1 : 0, ShadowMapChannel == 3 ? 1 : 0); } else { int32 SimpleLightIndex = StartIndex + LightIndex - NumLightsToRenderInSortedLights; const FSimpleLightEntry& SimpleLight = SimpleLights.InstanceData[SimpleLightIndex]; const FSimpleLightPerViewEntry& SimpleLightPerViewData = SimpleLights.GetViewDependentData(SimpleLightIndex, ViewIndex, NumViews); LightData.LightPositionAndInvRadius[LightIndex] = FVector4(SimpleLightPerViewData.Position, 1.0f / FMath::Max(SimpleLight.Radius, KINDA_SMALL_NUMBER)); LightData.LightColorAndFalloffExponent[LightIndex] = FVector4(SimpleLight.Color, SimpleLight.Exponent); LightData2.LightDirectionAndSpotlightMaskAndMinRoughness[LightIndex] = FVector4(FVector(1, 0, 0), 0); LightData2.SpotAnglesAndSourceRadiusAndSimpleLighting[LightIndex] = FVector4(-2, 1, 0, 1); LightData2.ShadowMapChannelMask[LightIndex] = FVector4(0, 0, 0, 0); if( SimpleLight.Exponent == 0.0f ) { // Correction for lumen units LightData.LightColorAndFalloffExponent[LightIndex] *= 16.0f; } } } SetUniformBufferParameterImmediate(RHICmdList, ShaderRHI, GetUniformBufferParameter<FTiledDeferredLightData>(), LightData); SetUniformBufferParameterImmediate(RHICmdList, ShaderRHI, GetUniformBufferParameter<FTiledDeferredLightData2>(), LightData2); SetShaderValue(RHICmdList, ShaderRHI, NumLights, NumThisPass); }