void LightingParser_ResolveGBuffer( Metal::DeviceContext& context, LightingParserContext& parserContext, MainTargetsBox& mainTargets, LightingResolveTextureBox& lightingResTargets) { Metal::GPUProfiler::DebugAnnotation anno(context, L"ResolveGBuffer"); const bool doSampleFrequencyOptimisation = Tweakable("SampleFrequencyOptimisation", true); LightingResolveContext lightingResolveContext(mainTargets); const unsigned samplingCount = lightingResolveContext.GetSamplingCount(); const bool useMsaaSamplers = lightingResolveContext.UseMsaaSamplers(); auto& resolveRes = Techniques::FindCachedBoxDep2<LightingResolveResources>(samplingCount); // // Our inputs is the prepared gbuffer // -- we resolve the lighting and write out a "lighting resolve texture" // if (doSampleFrequencyOptimisation && samplingCount>1) { context.Bind(resolveRes._alwaysWriteToStencil, 0xff); // todo -- instead of clearing the stencil every time, how // about doing a progressive walk through all of the bits! context.ClearStencil(mainTargets._secondaryDepthBuffer, 0); context.Bind(ResourceList<Metal::RenderTargetView, 0>(), &mainTargets._secondaryDepthBuffer); context.BindPS(MakeResourceList(mainTargets._msaaDepthBufferSRV, mainTargets._gbufferRTVsSRV[1])); SetupVertexGeneratorShader(context); CATCH_ASSETS_BEGIN context.Bind(*resolveRes._perSampleMask); context.Draw(4); CATCH_ASSETS_END(parserContext) }
static void AmbientOcclusion_DrawDebugging( Metal::DeviceContext& context, AmbientOcclusionResources& resources) { SetupVertexGeneratorShader(context); context.BindPS(MakeResourceList(resources._aoSRV)); context.Bind(::Assets::GetAssetDep<Metal::ShaderProgram>( "game/xleres/basic2D.vsh:fullscreen:vs_*", "game/xleres/postprocess/debugging.psh:AODebugging:ps_*")); context.Draw(4); }
static void DrawObject( Metal::DeviceContext& devContext, ParsingContext& parserContext, const VisGeoBox& visBox, const ResolvedShader& shader, const RetainedEntity& obj) { if (!obj._properties.GetParameter(Parameters::Visible, true) || !GetShowMarker(obj)) return; const auto& cbLayout = ::Assets::GetAssetDep<Techniques::PredefinedCBLayout>( "game/xleres/BasicMaterialConstants.txt"); shader.Apply(devContext, parserContext, { MakeLocalTransformPacket( GetTransform(obj), ExtractTranslation(parserContext.GetProjectionDesc()._cameraToWorld)), cbLayout.BuildCBDataAsPkt(ParameterBox()) }); devContext.Bind(MakeResourceList(visBox._cubeVB), visBox._cubeVBStride, 0); devContext.Draw(visBox._cubeVBCount); }