master e419e1bd1b40 cached
617 files
21.3 MB
1.4M tokens
2689 symbols
1 requests
Download .txt
Showing preview only (5,742K chars total). Download the full file or copy to clipboard to get everything.
Repository: GameTechDev/DynamicCheckerboardRendering
Branch: master
Commit: e419e1bd1b40
Files: 617
Total size: 21.3 MB

Directory structure:
gitextract_hdu2kkqx/

├── .gitattributes
├── .gitignore
├── LICENSE
├── Libraries/
│   ├── D3DX12/
│   │   ├── d3dx12.h
│   │   └── readme.md
│   ├── D3DX12AffinityLayer/
│   │   ├── Desktop/
│   │   │   ├── CD3DX12AffinityCommandAllocator.cpp
│   │   │   ├── CD3DX12AffinityCommandAllocator.h
│   │   │   ├── CD3DX12AffinityCommandList.cpp
│   │   │   ├── CD3DX12AffinityCommandList.h
│   │   │   ├── CD3DX12AffinityCommandQueue.cpp
│   │   │   ├── CD3DX12AffinityCommandQueue.h
│   │   │   ├── CD3DX12AffinityCommandSignature.cpp
│   │   │   ├── CD3DX12AffinityCommandSignature.h
│   │   │   ├── CD3DX12AffinityDescriptorHeap.cpp
│   │   │   ├── CD3DX12AffinityDescriptorHeap.h
│   │   │   ├── CD3DX12AffinityDevice.cpp
│   │   │   ├── CD3DX12AffinityDevice.h
│   │   │   ├── CD3DX12AffinityDeviceChild.cpp
│   │   │   ├── CD3DX12AffinityDeviceChild.h
│   │   │   ├── CD3DX12AffinityFence.cpp
│   │   │   ├── CD3DX12AffinityFence.h
│   │   │   ├── CD3DX12AffinityGraphicsCommandList.cpp
│   │   │   ├── CD3DX12AffinityGraphicsCommandList.h
│   │   │   ├── CD3DX12AffinityHeap.cpp
│   │   │   ├── CD3DX12AffinityHeap.h
│   │   │   ├── CD3DX12AffinityObject.cpp
│   │   │   ├── CD3DX12AffinityObject.h
│   │   │   ├── CD3DX12AffinityPageable.cpp
│   │   │   ├── CD3DX12AffinityPageable.h
│   │   │   ├── CD3DX12AffinityPipelineState.cpp
│   │   │   ├── CD3DX12AffinityPipelineState.h
│   │   │   ├── CD3DX12AffinityQueryHeap.cpp
│   │   │   ├── CD3DX12AffinityQueryHeap.h
│   │   │   ├── CD3DX12AffinityResource.cpp
│   │   │   ├── CD3DX12AffinityResource.h
│   │   │   ├── CD3DX12AffinityRootSignature.cpp
│   │   │   ├── CD3DX12AffinityRootSignature.h
│   │   │   ├── CDXGIAffinitySwapChain.cpp
│   │   │   ├── CDXGIAffinitySwapChain.h
│   │   │   ├── D3DX12AffinityCreateMultiDevice.cpp
│   │   │   ├── D3DX12AffinityLayer.vcxproj
│   │   │   ├── D3DX12AffinityLayer.vcxproj.filters
│   │   │   ├── DXGIXAffinityCreateLDASwapChain.cpp
│   │   │   ├── DXGIXAffinityCreateSingleWindowSwapChain.cpp
│   │   │   ├── Utils.cpp
│   │   │   ├── Utils.h
│   │   │   ├── d3dx12.h
│   │   │   ├── d3dx12affinity.cpp
│   │   │   ├── d3dx12affinity.h
│   │   │   ├── d3dx12affinity_d3dx12.h
│   │   │   └── d3dx12affinity_structs.h
│   │   ├── UWP/
│   │   │   ├── CD3DX12AffinityCommandAllocator.cpp
│   │   │   ├── CD3DX12AffinityCommandAllocator.h
│   │   │   ├── CD3DX12AffinityCommandList.cpp
│   │   │   ├── CD3DX12AffinityCommandList.h
│   │   │   ├── CD3DX12AffinityCommandQueue.cpp
│   │   │   ├── CD3DX12AffinityCommandQueue.h
│   │   │   ├── CD3DX12AffinityCommandSignature.cpp
│   │   │   ├── CD3DX12AffinityCommandSignature.h
│   │   │   ├── CD3DX12AffinityDescriptorHeap.cpp
│   │   │   ├── CD3DX12AffinityDescriptorHeap.h
│   │   │   ├── CD3DX12AffinityDevice.cpp
│   │   │   ├── CD3DX12AffinityDevice.h
│   │   │   ├── CD3DX12AffinityDeviceChild.cpp
│   │   │   ├── CD3DX12AffinityDeviceChild.h
│   │   │   ├── CD3DX12AffinityFence.cpp
│   │   │   ├── CD3DX12AffinityFence.h
│   │   │   ├── CD3DX12AffinityGraphicsCommandList.cpp
│   │   │   ├── CD3DX12AffinityGraphicsCommandList.h
│   │   │   ├── CD3DX12AffinityHeap.cpp
│   │   │   ├── CD3DX12AffinityHeap.h
│   │   │   ├── CD3DX12AffinityObject.cpp
│   │   │   ├── CD3DX12AffinityObject.h
│   │   │   ├── CD3DX12AffinityPageable.cpp
│   │   │   ├── CD3DX12AffinityPageable.h
│   │   │   ├── CD3DX12AffinityPipelineState.cpp
│   │   │   ├── CD3DX12AffinityPipelineState.h
│   │   │   ├── CD3DX12AffinityQueryHeap.cpp
│   │   │   ├── CD3DX12AffinityQueryHeap.h
│   │   │   ├── CD3DX12AffinityResource.cpp
│   │   │   ├── CD3DX12AffinityResource.h
│   │   │   ├── CD3DX12AffinityRootSignature.cpp
│   │   │   ├── CD3DX12AffinityRootSignature.h
│   │   │   ├── CDXGIAffinitySwapChain.cpp
│   │   │   ├── CDXGIAffinitySwapChain.h
│   │   │   ├── D3DX12AffinityCreateMultiDevice.cpp
│   │   │   ├── D3DX12AffinityLayer.vcxproj
│   │   │   ├── D3DX12AffinityLayer.vcxproj.filters
│   │   │   ├── DXGIXAffinityCreateLDASwapChain.cpp
│   │   │   ├── DXGIXAffinityCreateSingleWindowSwapChain.cpp
│   │   │   ├── Utils.cpp
│   │   │   ├── Utils.h
│   │   │   ├── d3dx12.h
│   │   │   ├── d3dx12affinity.cpp
│   │   │   ├── d3dx12affinity.h
│   │   │   ├── d3dx12affinity_d3dx12.h
│   │   │   └── d3dx12affinity_structs.h
│   │   └── readme.md
│   └── D3DX12Residency/
│       ├── d3dx12Residency.h
│       └── readme.md
├── MiniEngine/
│   ├── .gitignore
│   ├── Core/
│   │   ├── ART/
│   │   │   ├── Animation/
│   │   │   │   ├── AnimatedValue.cpp
│   │   │   │   ├── AnimatedValue.h
│   │   │   │   ├── AnimatedValue.inl
│   │   │   │   ├── AnimationController.cpp
│   │   │   │   ├── AnimationController.h
│   │   │   │   ├── CameraAnimation.cpp
│   │   │   │   ├── CameraAnimation.h
│   │   │   │   ├── SceneAnimation.cpp
│   │   │   │   ├── SceneAnimation.h
│   │   │   │   └── SerializationUtil.h
│   │   │   ├── CommonDefs.h
│   │   │   ├── GUI/
│   │   │   │   ├── AnimationWidget.cpp
│   │   │   │   ├── AnimationWidget.h
│   │   │   │   ├── GUICore.cpp
│   │   │   │   ├── GUICore.h
│   │   │   │   ├── GUIUtil.h
│   │   │   │   ├── IGUIWidget.h
│   │   │   │   ├── SequencerWidget.cpp
│   │   │   │   ├── SequencerWidget.h
│   │   │   │   └── imgui/
│   │   │   │       ├── LICENSE.txt
│   │   │   │       ├── README.md
│   │   │   │       ├── imconfig.h
│   │   │   │       ├── imgui.cpp
│   │   │   │       ├── imgui.h
│   │   │   │       ├── imgui_demo.cpp
│   │   │   │       ├── imgui_draw.cpp
│   │   │   │       ├── imgui_impl_dx11.cpp
│   │   │   │       ├── imgui_impl_dx11.h
│   │   │   │       ├── imgui_internal.h
│   │   │   │       ├── stb_rect_pack.h
│   │   │   │       ├── stb_textedit.h
│   │   │   │       └── stb_truetype.h
│   │   │   ├── PerfStat/
│   │   │   │   ├── PerfStat.cpp
│   │   │   │   └── PerfStat.h
│   │   │   ├── Sequencer/
│   │   │   │   ├── FrameSequencer.cpp
│   │   │   │   └── FrameSequencer.h
│   │   │   └── Wddm22Defs.h
│   │   ├── BitonicSort.cpp
│   │   ├── BitonicSort.h
│   │   ├── BuddyAllocator.cpp
│   │   ├── BuddyAllocator.h
│   │   ├── BufferManager.cpp
│   │   ├── BufferManager.h
│   │   ├── Camera.cpp
│   │   ├── Camera.h
│   │   ├── CameraController.cpp
│   │   ├── CameraController.h
│   │   ├── Color.cpp
│   │   ├── Color.h
│   │   ├── ColorBuffer.cpp
│   │   ├── ColorBuffer.h
│   │   ├── CommandAllocatorPool.cpp
│   │   ├── CommandAllocatorPool.h
│   │   ├── CommandContext.cpp
│   │   ├── CommandContext.h
│   │   ├── CommandListManager.cpp
│   │   ├── CommandListManager.h
│   │   ├── CommandSignature.cpp
│   │   ├── CommandSignature.h
│   │   ├── Core_VS17.vcxproj
│   │   ├── Core_VS17.vcxproj.filters
│   │   ├── DDSTextureLoader.cpp
│   │   ├── DDSTextureLoader.h
│   │   ├── DepthBuffer.cpp
│   │   ├── DepthBuffer.h
│   │   ├── DepthOfField.cpp
│   │   ├── DepthOfField.h
│   │   ├── DescriptorHeap.cpp
│   │   ├── DescriptorHeap.h
│   │   ├── DynamicDescriptorHeap.cpp
│   │   ├── DynamicDescriptorHeap.h
│   │   ├── DynamicUploadBuffer.cpp
│   │   ├── DynamicUploadBuffer.h
│   │   ├── EngineProfiling.cpp
│   │   ├── EngineProfiling.h
│   │   ├── EngineTuning.cpp
│   │   ├── EngineTuning.h
│   │   ├── EsramAllocator.h
│   │   ├── FXAA.cpp
│   │   ├── FXAA.h
│   │   ├── FileUtility.cpp
│   │   ├── FileUtility.h
│   │   ├── Fonts/
│   │   │   └── consola24.h
│   │   ├── GameCore.cpp
│   │   ├── GameCore.h
│   │   ├── GameInput.cpp
│   │   ├── GameInput.h
│   │   ├── GpuBuffer.cpp
│   │   ├── GpuBuffer.h
│   │   ├── GpuCounterManager.cpp
│   │   ├── GpuCounterManager.h
│   │   ├── GpuResource.h
│   │   ├── GraphRenderer.cpp
│   │   ├── GraphRenderer.h
│   │   ├── GraphicsCommon.cpp
│   │   ├── GraphicsCommon.h
│   │   ├── GraphicsCore.cpp
│   │   ├── GraphicsCore.h
│   │   ├── Hash.h
│   │   ├── LinearAllocator.cpp
│   │   ├── LinearAllocator.h
│   │   ├── Math/
│   │   │   ├── BoundingPlane.h
│   │   │   ├── BoundingSphere.h
│   │   │   ├── Common.h
│   │   │   ├── Frustum.cpp
│   │   │   ├── Frustum.h
│   │   │   ├── Functions.inl
│   │   │   ├── Matrix3.h
│   │   │   ├── Matrix4.h
│   │   │   ├── Quaternion.h
│   │   │   ├── Random.cpp
│   │   │   ├── Random.h
│   │   │   ├── Scalar.h
│   │   │   ├── Transform.h
│   │   │   └── Vector.h
│   │   ├── MotionBlur.cpp
│   │   ├── MotionBlur.h
│   │   ├── ParticleEffect.cpp
│   │   ├── ParticleEffect.h
│   │   ├── ParticleEffectManager.cpp
│   │   ├── ParticleEffectManager.h
│   │   ├── ParticleEffectProperties.h
│   │   ├── ParticleEmissionProperties.cpp
│   │   ├── ParticleShaderStructs.h
│   │   ├── PipelineState.cpp
│   │   ├── PipelineState.h
│   │   ├── PixelBuffer.cpp
│   │   ├── PixelBuffer.h
│   │   ├── PostEffects.cpp
│   │   ├── PostEffects.h
│   │   ├── ReadbackBuffer.cpp
│   │   ├── ReadbackBuffer.h
│   │   ├── RootSignature.cpp
│   │   ├── RootSignature.h
│   │   ├── SSAO.cpp
│   │   ├── SSAO.h
│   │   ├── SamplerManager.cpp
│   │   ├── SamplerManager.h
│   │   ├── Shaders/
│   │   │   ├── AdaptExposureCS.hlsl
│   │   │   ├── AoBlurAndUpsampleCS.hlsli
│   │   │   ├── AoBlurUpsampleBlendOutCS.hlsl
│   │   │   ├── AoBlurUpsampleCS.hlsl
│   │   │   ├── AoBlurUpsamplePreMinBlendOutCS.hlsl
│   │   │   ├── AoBlurUpsamplePreMinCS.hlsl
│   │   │   ├── AoPrepareDepthBuffers1CS.hlsl
│   │   │   ├── AoPrepareDepthBuffers2CS.hlsl
│   │   │   ├── AoRender1CS.hlsl
│   │   │   ├── AoRender2CS.hlsl
│   │   │   ├── AoRenderCS.hlsli
│   │   │   ├── ApplyBloom2CS.hlsl
│   │   │   ├── ApplyBloomCS.hlsl
│   │   │   ├── AverageLumaCS.hlsl
│   │   │   ├── BicubicHorizontalUpsamplePS.hlsl
│   │   │   ├── BicubicUpsampleGammaPS.hlsl
│   │   │   ├── BicubicUpsamplePS.hlsl
│   │   │   ├── BicubicVerticalUpsamplePS.hlsl
│   │   │   ├── BilinearUpsamplePS.hlsl
│   │   │   ├── Bitonic32InnerSortCS.hlsl
│   │   │   ├── Bitonic32OuterSortCS.hlsl
│   │   │   ├── Bitonic32PreSortCS.hlsl
│   │   │   ├── Bitonic64InnerSortCS.hlsl
│   │   │   ├── Bitonic64OuterSortCS.hlsl
│   │   │   ├── Bitonic64PreSortCS.hlsl
│   │   │   ├── BitonicIndirectArgsCS.hlsl
│   │   │   ├── BitonicSortCommon.hlsli
│   │   │   ├── BloomExtractAndDownsampleHdrCS.hlsl
│   │   │   ├── BloomExtractAndDownsampleLdrCS.hlsl
│   │   │   ├── BlurCS.hlsl
│   │   │   ├── BoundNeighborhoodCS.hlsl
│   │   │   ├── BufferCopyPS.hlsl
│   │   │   ├── CameraMotionBlurPrePassCS.hlsl
│   │   │   ├── CameraMotionBlurPrePassLinearZCS.hlsl
│   │   │   ├── CameraVelocityCS.hlsl
│   │   │   ├── ColorSpaceUtility.hlsli
│   │   │   ├── CopyBackPostBufferCS.hlsl
│   │   │   ├── DebugDrawHistogramCS.hlsl
│   │   │   ├── DebugLuminanceHdr2CS.hlsl
│   │   │   ├── DebugLuminanceHdrCS.hlsl
│   │   │   ├── DebugLuminanceLdr2CS.hlsl
│   │   │   ├── DebugLuminanceLdrCS.hlsl
│   │   │   ├── DebugSSAOCS.hlsl
│   │   │   ├── DoFCombine2CS.hlsl
│   │   │   ├── DoFCombineCS.hlsl
│   │   │   ├── DoFCombineFast2CS.hlsl
│   │   │   ├── DoFCombineFastCS.hlsl
│   │   │   ├── DoFCommon.hlsli
│   │   │   ├── DoFDebugBlueCS.hlsl
│   │   │   ├── DoFDebugGreenCS.hlsl
│   │   │   ├── DoFDebugRedCS.hlsl
│   │   │   ├── DoFMedianFilterCS.hlsl
│   │   │   ├── DoFMedianFilterFixupCS.hlsl
│   │   │   ├── DoFMedianFilterSepAlphaCS.hlsl
│   │   │   ├── DoFPass1CS.hlsl
│   │   │   ├── DoFPass2CS.hlsl
│   │   │   ├── DoFPass2DebugCS.hlsl
│   │   │   ├── DoFPass2FastCS.hlsl
│   │   │   ├── DoFPass2FixupCS.hlsl
│   │   │   ├── DoFPreFilterCS.hlsl
│   │   │   ├── DoFPreFilterFastCS.hlsl
│   │   │   ├── DoFPreFilterFixupCS.hlsl
│   │   │   ├── DoFRS.hlsli
│   │   │   ├── DoFTilePassCS.hlsl
│   │   │   ├── DoFTilePassFixupCS.hlsl
│   │   │   ├── DownsampleBloomAllCS.hlsl
│   │   │   ├── DownsampleBloomCS.hlsl
│   │   │   ├── ExtractLumaCS.hlsl
│   │   │   ├── FXAAPass1CS.hlsli
│   │   │   ├── FXAAPass1_Luma2_CS.hlsl
│   │   │   ├── FXAAPass1_Luma_CS.hlsl
│   │   │   ├── FXAAPass1_RGB2_CS.hlsl
│   │   │   ├── FXAAPass1_RGB_CS.hlsl
│   │   │   ├── FXAAPass2CS.hlsli
│   │   │   ├── FXAAPass2H2CS.hlsl
│   │   │   ├── FXAAPass2HCS.hlsl
│   │   │   ├── FXAAPass2HDebug2CS.hlsl
│   │   │   ├── FXAAPass2HDebugCS.hlsl
│   │   │   ├── FXAAPass2V2CS.hlsl
│   │   │   ├── FXAAPass2VCS.hlsl
│   │   │   ├── FXAAPass2VDebug2CS.hlsl
│   │   │   ├── FXAAPass2VDebugCS.hlsl
│   │   │   ├── FXAAResolveWorkQueueCS.hlsl
│   │   │   ├── FXAARootSignature.hlsli
│   │   │   ├── GenerateHistogramCS.hlsl
│   │   │   ├── GenerateMipsCS.hlsli
│   │   │   ├── GenerateMipsGammaCS.hlsl
│   │   │   ├── GenerateMipsGammaOddCS.hlsl
│   │   │   ├── GenerateMipsGammaOddXCS.hlsl
│   │   │   ├── GenerateMipsGammaOddYCS.hlsl
│   │   │   ├── GenerateMipsLinearCS.hlsl
│   │   │   ├── GenerateMipsLinearOddCS.hlsl
│   │   │   ├── GenerateMipsLinearOddXCS.hlsl
│   │   │   ├── GenerateMipsLinearOddYCS.hlsl
│   │   │   ├── LinearizeDepthCS.hlsl
│   │   │   ├── MagnifyPixelsPS.hlsl
│   │   │   ├── MotionBlurFinalPassCS.hlsl
│   │   │   ├── MotionBlurFinalPassPS.hlsl
│   │   │   ├── MotionBlurPrePassCS.hlsl
│   │   │   ├── MotionBlurRS.hlsli
│   │   │   ├── ParticleBinCullingCS.hlsl
│   │   │   ├── ParticleDepthBoundsCS.hlsl
│   │   │   ├── ParticleDispatchIndirectArgsCS.hlsl
│   │   │   ├── ParticleFinalDispatchIndirectArgsCS.hlsl
│   │   │   ├── ParticleLargeBinCullingCS.hlsl
│   │   │   ├── ParticleNoSortVS.hlsl
│   │   │   ├── ParticlePS.hlsl
│   │   │   ├── ParticlePreSortCS.hlsl
│   │   │   ├── ParticleRS.hlsli
│   │   │   ├── ParticleSortIndirectArgsCS.hlsl
│   │   │   ├── ParticleSpawnCS.hlsl
│   │   │   ├── ParticleTileCullingCS.hlsl
│   │   │   ├── ParticleTileRender2CS.hlsl
│   │   │   ├── ParticleTileRenderCS.hlsl
│   │   │   ├── ParticleTileRenderFast2CS.hlsl
│   │   │   ├── ParticleTileRenderFastCS.hlsl
│   │   │   ├── ParticleTileRenderFastDynamic2CS.hlsl
│   │   │   ├── ParticleTileRenderFastDynamicCS.hlsl
│   │   │   ├── ParticleTileRenderFastLowRes2CS.hlsl
│   │   │   ├── ParticleTileRenderFastLowResCS.hlsl
│   │   │   ├── ParticleTileRenderSlowDynamic2CS.hlsl
│   │   │   ├── ParticleTileRenderSlowDynamicCS.hlsl
│   │   │   ├── ParticleTileRenderSlowLowRes2CS.hlsl
│   │   │   ├── ParticleTileRenderSlowLowResCS.hlsl
│   │   │   ├── ParticleUpdateCS.hlsl
│   │   │   ├── ParticleUpdateCommon.hlsli
│   │   │   ├── ParticleUtility.hlsli
│   │   │   ├── ParticleVS.hlsl
│   │   │   ├── PerfGraphBackgroundVS.hlsl
│   │   │   ├── PerfGraphPS.hlsl
│   │   │   ├── PerfGraphRS.hlsli
│   │   │   ├── PerfGraphVS.hlsl
│   │   │   ├── PixelPacking.hlsli
│   │   │   ├── PixelPacking_LUV.hlsli
│   │   │   ├── PixelPacking_R11G11B10.hlsli
│   │   │   ├── PixelPacking_RGBE.hlsli
│   │   │   ├── PixelPacking_RGBM.hlsli
│   │   │   ├── PixelPacking_Velocity.hlsli
│   │   │   ├── PostEffectsRS.hlsli
│   │   │   ├── PresentHDRPS.hlsl
│   │   │   ├── PresentRS.hlsli
│   │   │   ├── PresentSDRPS.hlsl
│   │   │   ├── ResolveTAACS.hlsl
│   │   │   ├── SSAORS.hlsli
│   │   │   ├── ScreenQuadVS.hlsl
│   │   │   ├── ShaderUtility.hlsli
│   │   │   ├── SharpenTAACS.hlsl
│   │   │   ├── SharpeningUpsampleGammaPS.hlsl
│   │   │   ├── SharpeningUpsamplePS.hlsl
│   │   │   ├── TemporalBlendCS.hlsl
│   │   │   ├── TemporalRS.hlsli
│   │   │   ├── TextAntialiasPS.hlsl
│   │   │   ├── TextRS.hlsli
│   │   │   ├── TextShadowPS.hlsl
│   │   │   ├── TextVS.hlsl
│   │   │   ├── ToneMap2CS.hlsl
│   │   │   ├── ToneMapCS.hlsl
│   │   │   ├── ToneMapHDR2CS.hlsl
│   │   │   ├── ToneMapHDRCS.hlsl
│   │   │   ├── ToneMappingUtility.hlsli
│   │   │   ├── UpsampleAndBlurCS.hlsl
│   │   │   └── VarianceMapCS.hlsl
│   │   ├── ShadowBuffer.cpp
│   │   ├── ShadowBuffer.h
│   │   ├── ShadowCamera.cpp
│   │   ├── ShadowCamera.h
│   │   ├── SystemTime.cpp
│   │   ├── SystemTime.h
│   │   ├── TemporalEffects.cpp
│   │   ├── TemporalEffects.h
│   │   ├── TextRenderer.cpp
│   │   ├── TextRenderer.h
│   │   ├── TextureManager.cpp
│   │   ├── TextureManager.h
│   │   ├── Utility.cpp
│   │   ├── Utility.h
│   │   ├── VectorMath.h
│   │   ├── d3dx12.h
│   │   ├── dds.h
│   │   ├── pch.cpp
│   │   └── pch.h
│   ├── CreateNewLibrary.bat
│   ├── CreateNewSolution.bat
│   ├── License.txt
│   ├── Model/
│   │   ├── Model.cpp
│   │   ├── Model.h
│   │   ├── ModelH3D.cpp
│   │   ├── Model_VS17.vcxproj
│   │   └── Model_VS17.vcxproj.filters
│   ├── ModelViewer/
│   │   ├── CompileSM6Test.bat
│   │   ├── ForwardPlusLighting.cpp
│   │   ├── ForwardPlusLighting.h
│   │   ├── ModelViewer.cpp
│   │   ├── ModelViewer_VS17.sln
│   │   ├── ModelViewer_VS17.vcxproj
│   │   ├── ModelViewer_VS17.vcxproj.filters
│   │   ├── Scene.cpp
│   │   ├── Scene.h
│   │   ├── Shaders/
│   │   │   ├── CheckerboardColorResolveCS.hlsl
│   │   │   ├── CheckerboardDepthResolveCS.hlsl
│   │   │   ├── DepthViewerPS.hlsl
│   │   │   ├── DepthViewerPSHeader.hlsli
│   │   │   ├── DepthViewerPS_CBR.hlsl
│   │   │   ├── DepthViewerVS.hlsl
│   │   │   ├── FillLightGridCS.hlsli
│   │   │   ├── FillLightGridCS_16.hlsl
│   │   │   ├── FillLightGridCS_24.hlsl
│   │   │   ├── FillLightGridCS_32.hlsl
│   │   │   ├── FillLightGridCS_8.hlsl
│   │   │   ├── LightGrid.hlsli
│   │   │   ├── ModelViewerPS.hlsl
│   │   │   ├── ModelViewerPSHeader.hlsli
│   │   │   ├── ModelViewerPS_CBR.hlsl
│   │   │   ├── ModelViewerPS_CBR_PP.hlsl
│   │   │   ├── ModelViewerPS_CPS.hlsl
│   │   │   ├── ModelViewerRS.hlsli
│   │   │   ├── ModelViewerVS.hlsl
│   │   │   ├── MsaaColorResolveCS.hlsl
│   │   │   ├── MsaaDepthResolveCS.hlsl
│   │   │   ├── SamplePositions.hlsli
│   │   │   ├── UpsampleColorResolveCS.hlsl
│   │   │   ├── UpsampleDepthResolveCS.hlsl
│   │   │   └── WaveTileCountPS.hlsl
│   │   ├── UWP.appxmanifest
│   │   ├── engineTuning.txt
│   │   └── perfreport.csv
│   ├── PropertySheets/
│   │   ├── Debug.props
│   │   ├── OrganizedBuild.props
│   │   ├── Profile.props
│   │   ├── Release.props
│   │   ├── UWP.props
│   │   ├── VS17.props
│   │   └── Win32.props
│   ├── rapidjson-master/
│   │   └── include/
│   │       └── rapidjson/
│   │           ├── allocators.h
│   │           ├── cursorstreamwrapper.h
│   │           ├── document.h
│   │           ├── encodedstream.h
│   │           ├── encodings.h
│   │           ├── error/
│   │           │   ├── en.h
│   │           │   └── error.h
│   │           ├── filereadstream.h
│   │           ├── filewritestream.h
│   │           ├── fwd.h
│   │           ├── internal/
│   │           │   ├── biginteger.h
│   │           │   ├── diyfp.h
│   │           │   ├── dtoa.h
│   │           │   ├── ieee754.h
│   │           │   ├── itoa.h
│   │           │   ├── meta.h
│   │           │   ├── pow10.h
│   │           │   ├── regex.h
│   │           │   ├── stack.h
│   │           │   ├── strfunc.h
│   │           │   ├── strtod.h
│   │           │   └── swap.h
│   │           ├── istreamwrapper.h
│   │           ├── memorybuffer.h
│   │           ├── memorystream.h
│   │           ├── msinttypes/
│   │           │   ├── inttypes.h
│   │           │   └── stdint.h
│   │           ├── ostreamwrapper.h
│   │           ├── pointer.h
│   │           ├── prettywriter.h
│   │           ├── rapidjson.h
│   │           ├── reader.h
│   │           ├── schema.h
│   │           ├── stream.h
│   │           ├── stringbuffer.h
│   │           └── writer.h
│   ├── readme.md
│   └── zlib-1.2.11/
│       ├── zconf.h
│       ├── zlib.h
│       └── zlibstat.lib
├── README.md
├── Sponza/
│   ├── MySequence/
│   │   ├── frame0001.tga
│   │   ├── frame0002.tga
│   │   ├── frame0003.tga
│   │   ├── frame0004.tga
│   │   ├── frame0005.tga
│   │   ├── frame0006.tga
│   │   ├── frame0007.tga
│   │   ├── frame0008.tga
│   │   ├── frame0009.tga
│   │   └── perfreport.csv
│   ├── animation.json
│   ├── default.anim
│   ├── sponza.h3d
│   ├── sponza.scn
│   └── textures/
│       ├── default.DDS
│       ├── default_normal.DDS
│       ├── default_specular.DDS
│       └── textures/
│           ├── background.dds
│           ├── background_ddn.dds
│           ├── chain_texture.dds
│           ├── chain_texture_ddn.dds
│           ├── chain_texture_mask.dds
│           ├── lion.dds
│           ├── lion2_ddn.dds
│           ├── lion_ddn.dds
│           ├── spnza_bricks_a_ddn.dds
│           ├── spnza_bricks_a_diff.dds
│           ├── spnza_bricks_a_spec.dds
│           ├── sponza_arch_ddn.dds
│           ├── sponza_arch_diff.dds
│           ├── sponza_arch_spec.dds
│           ├── sponza_ceiling_a_diff.dds
│           ├── sponza_ceiling_a_spec.dds
│           ├── sponza_column_a_ddn.dds
│           ├── sponza_column_a_diff.dds
│           ├── sponza_column_a_spec.dds
│           ├── sponza_column_b_ddn.dds
│           ├── sponza_column_b_diff.dds
│           ├── sponza_column_b_spec.dds
│           ├── sponza_column_c_ddn.dds
│           ├── sponza_column_c_diff.dds
│           ├── sponza_column_c_spec.dds
│           ├── sponza_curtain_blue_diff.dds
│           ├── sponza_curtain_diff.dds
│           ├── sponza_curtain_green_diff.dds
│           ├── sponza_details_diff.dds
│           ├── sponza_details_spec.dds
│           ├── sponza_fabric_blue_diff.dds
│           ├── sponza_fabric_diff.dds
│           ├── sponza_fabric_green_diff.dds
│           ├── sponza_fabric_spec.dds
│           ├── sponza_flagpole_diff.dds
│           ├── sponza_flagpole_spec.dds
│           ├── sponza_floor_a_diff.dds
│           ├── sponza_floor_a_spec.dds
│           ├── sponza_roof_diff.dds
│           ├── sponza_thorn_ddn.dds
│           ├── sponza_thorn_diff.dds
│           ├── sponza_thorn_mask.dds
│           ├── sponza_thorn_spec.dds
│           ├── vase_ddn.dds
│           ├── vase_dif.dds
│           ├── vase_hanging.dds
│           ├── vase_plant.dds
│           ├── vase_plant_mask.dds
│           ├── vase_plant_spec.dds
│           ├── vase_round.dds
│           ├── vase_round_ddn.dds
│           └── vase_round_spec.dds
├── TechniqueDemos/
│   ├── .gitignore
│   └── D3D12MemoryManagement/
│       ├── readme.md
│       └── src/
│           ├── Camera.cpp
│           ├── Camera.h
│           ├── Color.hlsl
│           ├── Context.cpp
│           ├── Context.h
│           ├── D3D12MemoryManagement.cpp
│           ├── D3D12MemoryManagement.h
│           ├── D3D12MemoryManagement.sln
│           ├── D3D12MemoryManagement.vcxproj
│           ├── D3D12MemoryManagement.vcxproj.filters
│           ├── Framework.cpp
│           ├── Framework.h
│           ├── List.h
│           ├── Log.cpp
│           ├── Log.h
│           ├── Paging.cpp
│           ├── Paging.h
│           ├── Render.cpp
│           ├── Render.h
│           ├── Resource.h
│           ├── Shader.cpp
│           ├── Shader.h
│           ├── Texture.hlsl
│           ├── TileGrid.dds
│           ├── Util.cpp
│           ├── Util.h
│           ├── Versioning.cpp
│           ├── Versioning.h
│           ├── d3dx12.h
│           ├── main.cpp
│           ├── stdafx.cpp
│           └── stdafx.h
└── todo.md

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitattributes
================================================
# Auto detect text files and perform LF normalization
* text=auto

# Explicitly declare code/VS files as CRLF
*.cpp eol=crlf
*.h eol=crlf
*.hlsl eol=crlf
*.vcxproj eol=crlf
*.filters eol=crlf
*.sln eol=crlf

# Explicitly declare resource files as binary
*.bin binary

================================================
FILE: .gitignore
================================================

*.opendb
.vs
MiniEngine/ModelViewer/imgui.ini
/teaser_panning1x.anim
/teaser_panning2x.anim
/testexe/ModelViewer.exe


================================================
FILE: LICENSE
================================================
The MIT License (MIT)

Copyright (c) 2015 Microsoft

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.



================================================
FILE: Libraries/D3DX12/d3dx12.h
================================================
//*********************************************************
//
// Copyright (c) Microsoft. All rights reserved.
// This code is licensed under the MIT License (MIT).
// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
//
//*********************************************************

#ifndef __D3DX12_H__
#define __D3DX12_H__

#include "d3d12.h"

#if defined( __cplusplus )

struct CD3DX12_DEFAULT {};
extern const DECLSPEC_SELECTANY CD3DX12_DEFAULT D3D12_DEFAULT;

//------------------------------------------------------------------------------------------------
inline bool operator==( const D3D12_VIEWPORT& l, const D3D12_VIEWPORT& r )
{
    return l.TopLeftX == r.TopLeftX && l.TopLeftY == r.TopLeftY && l.Width == r.Width &&
        l.Height == r.Height && l.MinDepth == r.MinDepth && l.MaxDepth == r.MaxDepth;
}

//------------------------------------------------------------------------------------------------
inline bool operator!=( const D3D12_VIEWPORT& l, const D3D12_VIEWPORT& r )
{ return !( l == r ); }

//------------------------------------------------------------------------------------------------
struct CD3DX12_RECT : public D3D12_RECT
{
    CD3DX12_RECT()
    {}
    explicit CD3DX12_RECT( const D3D12_RECT& o ) :
        D3D12_RECT( o )
    {}
    explicit CD3DX12_RECT(
        LONG Left,
        LONG Top,
        LONG Right,
        LONG Bottom )
    {
        left = Left;
        top = Top;
        right = Right;
        bottom = Bottom;
    }
    ~CD3DX12_RECT() {}
    operator const D3D12_RECT&() const { return *this; }
};

//------------------------------------------------------------------------------------------------
struct CD3DX12_VIEWPORT : public D3D12_VIEWPORT
{
    CD3DX12_VIEWPORT()
    {}
    explicit CD3DX12_VIEWPORT( const D3D12_VIEWPORT& o ) :
        D3D12_VIEWPORT( o )
    {}
    explicit CD3DX12_VIEWPORT(
        FLOAT topLeftX,
        FLOAT topLeftY,
        FLOAT width,
        FLOAT height,
        FLOAT minDepth = D3D12_MIN_DEPTH,
        FLOAT maxDepth = D3D12_MAX_DEPTH )
    {
        TopLeftX = topLeftX;
        TopLeftY = topLeftY;
        Width = width;
        Height = height;
        MinDepth = minDepth;
        MaxDepth = maxDepth;
    }
    explicit CD3DX12_VIEWPORT(
        _In_ ID3D12Resource* pResource,
        UINT mipSlice = 0,
        FLOAT topLeftX = 0.0f,
        FLOAT topLeftY = 0.0f,
        FLOAT minDepth = D3D12_MIN_DEPTH,
        FLOAT maxDepth = D3D12_MAX_DEPTH )
    {
        D3D12_RESOURCE_DESC Desc = pResource->GetDesc();
        const UINT64 SubresourceWidth = Desc.Width >> mipSlice;
        const UINT64 SubresourceHeight = Desc.Height >> mipSlice;
        switch (Desc.Dimension)
        {
        case D3D12_RESOURCE_DIMENSION_BUFFER:
            TopLeftX = topLeftX;
            TopLeftY = 0.0f;
            Width = Desc.Width - topLeftX;
            Height = 1.0f;
            break;
        case D3D12_RESOURCE_DIMENSION_TEXTURE1D:
            TopLeftX = topLeftX;
            TopLeftY = 0.0f;
            Width = (SubresourceWidth ? SubresourceWidth : 1.0f) - topLeftX;
            Height = 1.0f;
            break;
        case D3D12_RESOURCE_DIMENSION_TEXTURE2D:
        case D3D12_RESOURCE_DIMENSION_TEXTURE3D:
            TopLeftX = topLeftX;
            TopLeftY = topLeftY;
            Width = (SubresourceWidth ? SubresourceWidth : 1.0f) - topLeftX;
            Height = (SubresourceHeight ? SubresourceHeight: 1.0f) - topLeftY;
            break;
        default: break;
        }

        MinDepth = minDepth;
        MaxDepth = maxDepth;
    }
    ~CD3DX12_VIEWPORT() {}
    operator const D3D12_VIEWPORT&() const { return *this; }
};

//------------------------------------------------------------------------------------------------
struct CD3DX12_BOX : public D3D12_BOX
{
    CD3DX12_BOX()
    {}
    explicit CD3DX12_BOX( const D3D12_BOX& o ) :
        D3D12_BOX( o )
    {}
    explicit CD3DX12_BOX(
        LONG Left,
        LONG Right )
    {
        left = Left;
        top = 0;
        front = 0;
        right = Right;
        bottom = 1;
        back = 1;
    }
    explicit CD3DX12_BOX(
        LONG Left,
        LONG Top,
        LONG Right,
        LONG Bottom )
    {
        left = Left;
        top = Top;
        front = 0;
        right = Right;
        bottom = Bottom;
        back = 1;
    }
    explicit CD3DX12_BOX(
        LONG Left,
        LONG Top,
        LONG Front,
        LONG Right,
        LONG Bottom,
        LONG Back )
    {
        left = Left;
        top = Top;
        front = Front;
        right = Right;
        bottom = Bottom;
        back = Back;
    }
    ~CD3DX12_BOX() {}
    operator const D3D12_BOX&() const { return *this; }
};
inline bool operator==( const D3D12_BOX& l, const D3D12_BOX& r )
{
    return l.left == r.left && l.top == r.top && l.front == r.front &&
        l.right == r.right && l.bottom == r.bottom && l.back == r.back;
}
inline bool operator!=( const D3D12_BOX& l, const D3D12_BOX& r )
{ return !( l == r ); }

//------------------------------------------------------------------------------------------------
struct CD3DX12_DEPTH_STENCIL_DESC : public D3D12_DEPTH_STENCIL_DESC
{
    CD3DX12_DEPTH_STENCIL_DESC()
    {}
    explicit CD3DX12_DEPTH_STENCIL_DESC( const D3D12_DEPTH_STENCIL_DESC& o ) :
        D3D12_DEPTH_STENCIL_DESC( o )
    {}
    explicit CD3DX12_DEPTH_STENCIL_DESC( CD3DX12_DEFAULT )
    {
        DepthEnable = TRUE;
        DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ALL;
        DepthFunc = D3D12_COMPARISON_FUNC_LESS;
        StencilEnable = FALSE;
        StencilReadMask = D3D12_DEFAULT_STENCIL_READ_MASK;
        StencilWriteMask = D3D12_DEFAULT_STENCIL_WRITE_MASK;
        const D3D12_DEPTH_STENCILOP_DESC defaultStencilOp =
        { D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_COMPARISON_FUNC_ALWAYS };
        FrontFace = defaultStencilOp;
        BackFace = defaultStencilOp;
    }
    explicit CD3DX12_DEPTH_STENCIL_DESC(
        BOOL depthEnable,
        D3D12_DEPTH_WRITE_MASK depthWriteMask,
        D3D12_COMPARISON_FUNC depthFunc,
        BOOL stencilEnable,
        UINT8 stencilReadMask,
        UINT8 stencilWriteMask,
        D3D12_STENCIL_OP frontStencilFailOp,
        D3D12_STENCIL_OP frontStencilDepthFailOp,
        D3D12_STENCIL_OP frontStencilPassOp,
        D3D12_COMPARISON_FUNC frontStencilFunc,
        D3D12_STENCIL_OP backStencilFailOp,
        D3D12_STENCIL_OP backStencilDepthFailOp,
        D3D12_STENCIL_OP backStencilPassOp,
        D3D12_COMPARISON_FUNC backStencilFunc )
    {
        DepthEnable = depthEnable;
        DepthWriteMask = depthWriteMask;
        DepthFunc = depthFunc;
        StencilEnable = stencilEnable;
        StencilReadMask = stencilReadMask;
        StencilWriteMask = stencilWriteMask;
        FrontFace.StencilFailOp = frontStencilFailOp;
        FrontFace.StencilDepthFailOp = frontStencilDepthFailOp;
        FrontFace.StencilPassOp = frontStencilPassOp;
        FrontFace.StencilFunc = frontStencilFunc;
        BackFace.StencilFailOp = backStencilFailOp;
        BackFace.StencilDepthFailOp = backStencilDepthFailOp;
        BackFace.StencilPassOp = backStencilPassOp;
        BackFace.StencilFunc = backStencilFunc;
    }
    ~CD3DX12_DEPTH_STENCIL_DESC() {}
    operator const D3D12_DEPTH_STENCIL_DESC&() const { return *this; }
};

//------------------------------------------------------------------------------------------------
struct CD3DX12_DEPTH_STENCIL_DESC1 : public D3D12_DEPTH_STENCIL_DESC1
{
    CD3DX12_DEPTH_STENCIL_DESC1()
    {}
    explicit CD3DX12_DEPTH_STENCIL_DESC1( const D3D12_DEPTH_STENCIL_DESC1& o ) :
        D3D12_DEPTH_STENCIL_DESC1( o )
    {}
    explicit CD3DX12_DEPTH_STENCIL_DESC1( const D3D12_DEPTH_STENCIL_DESC& o )
    {
        DepthEnable                  = o.DepthEnable;
        DepthWriteMask               = o.DepthWriteMask;
        DepthFunc                    = o.DepthFunc;
        StencilEnable                = o.StencilEnable;
        StencilReadMask              = o.StencilReadMask;
        StencilWriteMask             = o.StencilWriteMask;
        FrontFace.StencilFailOp      = o.FrontFace.StencilFailOp;
        FrontFace.StencilDepthFailOp = o.FrontFace.StencilDepthFailOp;
        FrontFace.StencilPassOp      = o.FrontFace.StencilPassOp;
        FrontFace.StencilFunc        = o.FrontFace.StencilFunc;
        BackFace.StencilFailOp       = o.BackFace.StencilFailOp;
        BackFace.StencilDepthFailOp  = o.BackFace.StencilDepthFailOp;
        BackFace.StencilPassOp       = o.BackFace.StencilPassOp;
        BackFace.StencilFunc         = o.BackFace.StencilFunc;
        DepthBoundsTestEnable        = FALSE;
    }
    explicit CD3DX12_DEPTH_STENCIL_DESC1( CD3DX12_DEFAULT )
    {
        DepthEnable = TRUE;
        DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ALL;
        DepthFunc = D3D12_COMPARISON_FUNC_LESS;
        StencilEnable = FALSE;
        StencilReadMask = D3D12_DEFAULT_STENCIL_READ_MASK;
        StencilWriteMask = D3D12_DEFAULT_STENCIL_WRITE_MASK;
        const D3D12_DEPTH_STENCILOP_DESC defaultStencilOp =
        { D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_COMPARISON_FUNC_ALWAYS };
        FrontFace = defaultStencilOp;
        BackFace = defaultStencilOp;
        DepthBoundsTestEnable = FALSE;
    }
    explicit CD3DX12_DEPTH_STENCIL_DESC1(
        BOOL depthEnable,
        D3D12_DEPTH_WRITE_MASK depthWriteMask,
        D3D12_COMPARISON_FUNC depthFunc,
        BOOL stencilEnable,
        UINT8 stencilReadMask,
        UINT8 stencilWriteMask,
        D3D12_STENCIL_OP frontStencilFailOp,
        D3D12_STENCIL_OP frontStencilDepthFailOp,
        D3D12_STENCIL_OP frontStencilPassOp,
        D3D12_COMPARISON_FUNC frontStencilFunc,
        D3D12_STENCIL_OP backStencilFailOp,
        D3D12_STENCIL_OP backStencilDepthFailOp,
        D3D12_STENCIL_OP backStencilPassOp,
        D3D12_COMPARISON_FUNC backStencilFunc,
        BOOL depthBoundsTestEnable )
    {
        DepthEnable = depthEnable;
        DepthWriteMask = depthWriteMask;
        DepthFunc = depthFunc;
        StencilEnable = stencilEnable;
        StencilReadMask = stencilReadMask;
        StencilWriteMask = stencilWriteMask;
        FrontFace.StencilFailOp = frontStencilFailOp;
        FrontFace.StencilDepthFailOp = frontStencilDepthFailOp;
        FrontFace.StencilPassOp = frontStencilPassOp;
        FrontFace.StencilFunc = frontStencilFunc;
        BackFace.StencilFailOp = backStencilFailOp;
        BackFace.StencilDepthFailOp = backStencilDepthFailOp;
        BackFace.StencilPassOp = backStencilPassOp;
        BackFace.StencilFunc = backStencilFunc;
        DepthBoundsTestEnable = depthBoundsTestEnable;
    }
    ~CD3DX12_DEPTH_STENCIL_DESC1() {}
    operator const D3D12_DEPTH_STENCIL_DESC1&() const { return *this; }
    operator const D3D12_DEPTH_STENCIL_DESC() const
    {
        D3D12_DEPTH_STENCIL_DESC D;
        D.DepthEnable                  = DepthEnable;
        D.DepthWriteMask               = DepthWriteMask;
        D.DepthFunc                    = DepthFunc;
        D.StencilEnable                = StencilEnable;
        D.StencilReadMask              = StencilReadMask;
        D.StencilWriteMask             = StencilWriteMask;
        D.FrontFace.StencilFailOp      = FrontFace.StencilFailOp;
        D.FrontFace.StencilDepthFailOp = FrontFace.StencilDepthFailOp;
        D.FrontFace.StencilPassOp      = FrontFace.StencilPassOp;
        D.FrontFace.StencilFunc        = FrontFace.StencilFunc;
        D.BackFace.StencilFailOp       = BackFace.StencilFailOp;
        D.BackFace.StencilDepthFailOp  = BackFace.StencilDepthFailOp;
        D.BackFace.StencilPassOp       = BackFace.StencilPassOp;
        D.BackFace.StencilFunc         = BackFace.StencilFunc;
        return D;
    }
};

//------------------------------------------------------------------------------------------------
struct CD3DX12_BLEND_DESC : public D3D12_BLEND_DESC
{
    CD3DX12_BLEND_DESC()
    {}
    explicit CD3DX12_BLEND_DESC( const D3D12_BLEND_DESC& o ) :
        D3D12_BLEND_DESC( o )
    {}
    explicit CD3DX12_BLEND_DESC( CD3DX12_DEFAULT )
    {
        AlphaToCoverageEnable = FALSE;
        IndependentBlendEnable = FALSE;
        const D3D12_RENDER_TARGET_BLEND_DESC defaultRenderTargetBlendDesc =
        {
            FALSE,FALSE,
            D3D12_BLEND_ONE, D3D12_BLEND_ZERO, D3D12_BLEND_OP_ADD,
            D3D12_BLEND_ONE, D3D12_BLEND_ZERO, D3D12_BLEND_OP_ADD,
            D3D12_LOGIC_OP_NOOP,
            D3D12_COLOR_WRITE_ENABLE_ALL,
        };
        for (UINT i = 0; i < D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT; ++i)
            RenderTarget[ i ] = defaultRenderTargetBlendDesc;
    }
    ~CD3DX12_BLEND_DESC() {}
    operator const D3D12_BLEND_DESC&() const { return *this; }
};

//------------------------------------------------------------------------------------------------
struct CD3DX12_RASTERIZER_DESC : public D3D12_RASTERIZER_DESC
{
    CD3DX12_RASTERIZER_DESC()
    {}
    explicit CD3DX12_RASTERIZER_DESC( const D3D12_RASTERIZER_DESC& o ) :
        D3D12_RASTERIZER_DESC( o )
    {}
    explicit CD3DX12_RASTERIZER_DESC( CD3DX12_DEFAULT )
    {
        FillMode = D3D12_FILL_MODE_SOLID;
        CullMode = D3D12_CULL_MODE_BACK;
        FrontCounterClockwise = FALSE;
        DepthBias = D3D12_DEFAULT_DEPTH_BIAS;
        DepthBiasClamp = D3D12_DEFAULT_DEPTH_BIAS_CLAMP;
        SlopeScaledDepthBias = D3D12_DEFAULT_SLOPE_SCALED_DEPTH_BIAS;
        DepthClipEnable = TRUE;
        MultisampleEnable = FALSE;
        AntialiasedLineEnable = FALSE;
        ForcedSampleCount = 0;
        ConservativeRaster = D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF;
    }
    explicit CD3DX12_RASTERIZER_DESC(
        D3D12_FILL_MODE fillMode,
        D3D12_CULL_MODE cullMode,
        BOOL frontCounterClockwise,
        INT depthBias,
        FLOAT depthBiasClamp,
        FLOAT slopeScaledDepthBias,
        BOOL depthClipEnable,
        BOOL multisampleEnable,
        BOOL antialiasedLineEnable, 
        UINT forcedSampleCount, 
        D3D12_CONSERVATIVE_RASTERIZATION_MODE conservativeRaster)
    {
        FillMode = fillMode;
        CullMode = cullMode;
        FrontCounterClockwise = frontCounterClockwise;
        DepthBias = depthBias;
        DepthBiasClamp = depthBiasClamp;
        SlopeScaledDepthBias = slopeScaledDepthBias;
        DepthClipEnable = depthClipEnable;
        MultisampleEnable = multisampleEnable;
        AntialiasedLineEnable = antialiasedLineEnable;
        ForcedSampleCount = forcedSampleCount;
        ConservativeRaster = conservativeRaster;
    }
    ~CD3DX12_RASTERIZER_DESC() {}
    operator const D3D12_RASTERIZER_DESC&() const { return *this; }
};

//------------------------------------------------------------------------------------------------
struct CD3DX12_RESOURCE_ALLOCATION_INFO : public D3D12_RESOURCE_ALLOCATION_INFO
{
    CD3DX12_RESOURCE_ALLOCATION_INFO()
    {}
    explicit CD3DX12_RESOURCE_ALLOCATION_INFO( const D3D12_RESOURCE_ALLOCATION_INFO& o ) :
        D3D12_RESOURCE_ALLOCATION_INFO( o )
    {}
    CD3DX12_RESOURCE_ALLOCATION_INFO(
        UINT64 size,
        UINT64 alignment )
    {
        SizeInBytes = size;
        Alignment = alignment;
    }
    operator const D3D12_RESOURCE_ALLOCATION_INFO&() const { return *this; }
};

//------------------------------------------------------------------------------------------------
struct CD3DX12_HEAP_PROPERTIES : public D3D12_HEAP_PROPERTIES
{
    CD3DX12_HEAP_PROPERTIES()
    {}
    explicit CD3DX12_HEAP_PROPERTIES(const D3D12_HEAP_PROPERTIES &o) :
        D3D12_HEAP_PROPERTIES(o)
    {}
    CD3DX12_HEAP_PROPERTIES( 
        D3D12_CPU_PAGE_PROPERTY cpuPageProperty, 
        D3D12_MEMORY_POOL memoryPoolPreference,
        UINT creationNodeMask = 1, 
        UINT nodeMask = 1 )
    {
        Type = D3D12_HEAP_TYPE_CUSTOM;
        CPUPageProperty = cpuPageProperty;
        MemoryPoolPreference = memoryPoolPreference;
        CreationNodeMask = creationNodeMask;
        VisibleNodeMask = nodeMask;
    }
    explicit CD3DX12_HEAP_PROPERTIES( 
        D3D12_HEAP_TYPE type, 
        UINT creationNodeMask = 1, 
        UINT nodeMask = 1 )
    {
        Type = type;
        CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN;
        MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN;
        CreationNodeMask = creationNodeMask;
        VisibleNodeMask = nodeMask;
    }
    operator const D3D12_HEAP_PROPERTIES&() const { return *this; }
    bool IsCPUAccessible() const
    {
        return Type == D3D12_HEAP_TYPE_UPLOAD || Type == D3D12_HEAP_TYPE_READBACK || (Type == D3D12_HEAP_TYPE_CUSTOM &&
            (CPUPageProperty == D3D12_CPU_PAGE_PROPERTY_WRITE_COMBINE || CPUPageProperty == D3D12_CPU_PAGE_PROPERTY_WRITE_BACK));
    }
};
inline bool operator==( const D3D12_HEAP_PROPERTIES& l, const D3D12_HEAP_PROPERTIES& r )
{
    return l.Type == r.Type && l.CPUPageProperty == r.CPUPageProperty && 
        l.MemoryPoolPreference == r.MemoryPoolPreference &&
        l.CreationNodeMask == r.CreationNodeMask &&
        l.VisibleNodeMask == r.VisibleNodeMask;
}
inline bool operator!=( const D3D12_HEAP_PROPERTIES& l, const D3D12_HEAP_PROPERTIES& r )
{ return !( l == r ); }

//------------------------------------------------------------------------------------------------
struct CD3DX12_HEAP_DESC : public D3D12_HEAP_DESC
{
    CD3DX12_HEAP_DESC()
    {}
    explicit CD3DX12_HEAP_DESC(const D3D12_HEAP_DESC &o) :
        D3D12_HEAP_DESC(o)
    {}
    CD3DX12_HEAP_DESC( 
        UINT64 size, 
        D3D12_HEAP_PROPERTIES properties, 
        UINT64 alignment = 0, 
        D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE )
    {
        SizeInBytes = size;
        Properties = properties;
        Alignment = alignment;
        Flags = flags;
    }
    CD3DX12_HEAP_DESC( 
        UINT64 size, 
        D3D12_HEAP_TYPE type, 
        UINT64 alignment = 0, 
        D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE )
    {
        SizeInBytes = size;
        Properties = CD3DX12_HEAP_PROPERTIES( type );
        Alignment = alignment;
        Flags = flags;
    }
    CD3DX12_HEAP_DESC( 
        UINT64 size, 
        D3D12_CPU_PAGE_PROPERTY cpuPageProperty, 
        D3D12_MEMORY_POOL memoryPoolPreference, 
        UINT64 alignment = 0, 
        D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE )
    {
        SizeInBytes = size;
        Properties = CD3DX12_HEAP_PROPERTIES( cpuPageProperty, memoryPoolPreference );
        Alignment = alignment;
        Flags = flags;
    }
    CD3DX12_HEAP_DESC( 
        const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo,
        D3D12_HEAP_PROPERTIES properties, 
        D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE )
    {
        SizeInBytes = resAllocInfo.SizeInBytes;
        Properties = properties;
        Alignment = resAllocInfo.Alignment;
        Flags = flags;
    }
    CD3DX12_HEAP_DESC( 
        const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo,
        D3D12_HEAP_TYPE type, 
        D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE )
    {
        SizeInBytes = resAllocInfo.SizeInBytes;
        Properties = CD3DX12_HEAP_PROPERTIES( type );
        Alignment = resAllocInfo.Alignment;
        Flags = flags;
    }
    CD3DX12_HEAP_DESC( 
        const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo,
        D3D12_CPU_PAGE_PROPERTY cpuPageProperty, 
        D3D12_MEMORY_POOL memoryPoolPreference, 
        D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE )
    {
        SizeInBytes = resAllocInfo.SizeInBytes;
        Properties = CD3DX12_HEAP_PROPERTIES( cpuPageProperty, memoryPoolPreference );
        Alignment = resAllocInfo.Alignment;
        Flags = flags;
    }
    operator const D3D12_HEAP_DESC&() const { return *this; }
    bool IsCPUAccessible() const
    { return static_cast< const CD3DX12_HEAP_PROPERTIES* >( &Properties )->IsCPUAccessible(); }
};
inline bool operator==( const D3D12_HEAP_DESC& l, const D3D12_HEAP_DESC& r )
{
    return l.SizeInBytes == r.SizeInBytes &&
        l.Properties == r.Properties && 
        l.Alignment == r.Alignment &&
        l.Flags == r.Flags;
}
inline bool operator!=( const D3D12_HEAP_DESC& l, const D3D12_HEAP_DESC& r )
{ return !( l == r ); }

//------------------------------------------------------------------------------------------------
struct CD3DX12_CLEAR_VALUE : public D3D12_CLEAR_VALUE
{
    CD3DX12_CLEAR_VALUE()
    {}
    explicit CD3DX12_CLEAR_VALUE(const D3D12_CLEAR_VALUE &o) :
        D3D12_CLEAR_VALUE(o)
    {}
    CD3DX12_CLEAR_VALUE( 
        DXGI_FORMAT format, 
        const FLOAT color[4] )
    {
        Format = format;
        memcpy( Color, color, sizeof( Color ) );
    }
    CD3DX12_CLEAR_VALUE( 
        DXGI_FORMAT format, 
        FLOAT depth,
        UINT8 stencil )
    {
        Format = format;
        /* Use memcpy to preserve NAN values */
        memcpy( &DepthStencil.Depth, &depth, sizeof( depth ) );
        DepthStencil.Stencil = stencil;
    }
    operator const D3D12_CLEAR_VALUE&() const { return *this; }
};

//------------------------------------------------------------------------------------------------
struct CD3DX12_RANGE : public D3D12_RANGE
{
    CD3DX12_RANGE()
    {}
    explicit CD3DX12_RANGE(const D3D12_RANGE &o) :
        D3D12_RANGE(o)
    {}
    CD3DX12_RANGE( 
        SIZE_T begin, 
        SIZE_T end )
    {
        Begin = begin;
        End = end;
    }
    operator const D3D12_RANGE&() const { return *this; }
};

//------------------------------------------------------------------------------------------------
struct CD3DX12_RANGE_UINT64 : public D3D12_RANGE_UINT64
{
    CD3DX12_RANGE_UINT64()
    {}
    explicit CD3DX12_RANGE_UINT64(const D3D12_RANGE_UINT64 &o) :
        D3D12_RANGE_UINT64(o)
    {}
    CD3DX12_RANGE_UINT64( 
        UINT64 begin, 
        UINT64 end )
    {
        Begin = begin;
        End = end;
    }
    operator const D3D12_RANGE_UINT64&() const { return *this; }
};

//------------------------------------------------------------------------------------------------
struct CD3DX12_SUBRESOURCE_RANGE_UINT64 : public D3D12_SUBRESOURCE_RANGE_UINT64
{
    CD3DX12_SUBRESOURCE_RANGE_UINT64()
    {}
    explicit CD3DX12_SUBRESOURCE_RANGE_UINT64(const D3D12_SUBRESOURCE_RANGE_UINT64 &o) :
        D3D12_SUBRESOURCE_RANGE_UINT64(o)
    {}
    CD3DX12_SUBRESOURCE_RANGE_UINT64( 
        UINT subresource,
        const D3D12_RANGE_UINT64& range )
    {
        Subresource = subresource;
        Range = range;
    }
    CD3DX12_SUBRESOURCE_RANGE_UINT64( 
        UINT subresource,
        UINT64 begin, 
        UINT64 end )
    {
        Subresource = subresource;
        Range.Begin = begin;
        Range.End = end;
    }
    operator const D3D12_SUBRESOURCE_RANGE_UINT64&() const { return *this; }
};

//------------------------------------------------------------------------------------------------
struct CD3DX12_SHADER_BYTECODE : public D3D12_SHADER_BYTECODE
{
    CD3DX12_SHADER_BYTECODE()
    {}
    explicit CD3DX12_SHADER_BYTECODE(const D3D12_SHADER_BYTECODE &o) :
        D3D12_SHADER_BYTECODE(o)
    {}
    CD3DX12_SHADER_BYTECODE(
        _In_ ID3DBlob* pShaderBlob )
    {
        pShaderBytecode = pShaderBlob->GetBufferPointer();
        BytecodeLength = pShaderBlob->GetBufferSize();
    }
    CD3DX12_SHADER_BYTECODE(
        const void* _pShaderBytecode,
        SIZE_T bytecodeLength )
    {
        pShaderBytecode = _pShaderBytecode;
        BytecodeLength = bytecodeLength;
    }
    operator const D3D12_SHADER_BYTECODE&() const { return *this; }
};

//------------------------------------------------------------------------------------------------
struct CD3DX12_TILED_RESOURCE_COORDINATE : public D3D12_TILED_RESOURCE_COORDINATE
{
    CD3DX12_TILED_RESOURCE_COORDINATE()
    {}
    explicit CD3DX12_TILED_RESOURCE_COORDINATE(const D3D12_TILED_RESOURCE_COORDINATE &o) :
        D3D12_TILED_RESOURCE_COORDINATE(o)
    {}
    CD3DX12_TILED_RESOURCE_COORDINATE( 
        UINT x, 
        UINT y, 
        UINT z, 
        UINT subresource ) 
    {
        X = x;
        Y = y;
        Z = z;
        Subresource = subresource;
    }
    operator const D3D12_TILED_RESOURCE_COORDINATE&() const { return *this; }
};

//------------------------------------------------------------------------------------------------
struct CD3DX12_TILE_REGION_SIZE : public D3D12_TILE_REGION_SIZE
{
    CD3DX12_TILE_REGION_SIZE()
    {}
    explicit CD3DX12_TILE_REGION_SIZE(const D3D12_TILE_REGION_SIZE &o) :
        D3D12_TILE_REGION_SIZE(o)
    {}
    CD3DX12_TILE_REGION_SIZE( 
        UINT numTiles, 
        BOOL useBox, 
        UINT width, 
        UINT16 height, 
        UINT16 depth ) 
    {
        NumTiles = numTiles;
        UseBox = useBox;
        Width = width;
        Height = height;
        Depth = depth;
    }
    operator const D3D12_TILE_REGION_SIZE&() const { return *this; }
};

//------------------------------------------------------------------------------------------------
struct CD3DX12_SUBRESOURCE_TILING : public D3D12_SUBRESOURCE_TILING
{
    CD3DX12_SUBRESOURCE_TILING()
    {}
    explicit CD3DX12_SUBRESOURCE_TILING(const D3D12_SUBRESOURCE_TILING &o) :
        D3D12_SUBRESOURCE_TILING(o)
    {}
    CD3DX12_SUBRESOURCE_TILING( 
        UINT widthInTiles, 
        UINT16 heightInTiles, 
        UINT16 depthInTiles, 
        UINT startTileIndexInOverallResource ) 
    {
        WidthInTiles = widthInTiles;
        HeightInTiles = heightInTiles;
        DepthInTiles = depthInTiles;
        StartTileIndexInOverallResource = startTileIndexInOverallResource;
    }
    operator const D3D12_SUBRESOURCE_TILING&() const { return *this; }
};

//------------------------------------------------------------------------------------------------
struct CD3DX12_TILE_SHAPE : public D3D12_TILE_SHAPE
{
    CD3DX12_TILE_SHAPE()
    {}
    explicit CD3DX12_TILE_SHAPE(const D3D12_TILE_SHAPE &o) :
        D3D12_TILE_SHAPE(o)
    {}
    CD3DX12_TILE_SHAPE( 
        UINT widthInTexels, 
        UINT heightInTexels, 
        UINT depthInTexels ) 
    {
        WidthInTexels = widthInTexels;
        HeightInTexels = heightInTexels;
        DepthInTexels = depthInTexels;
    }
    operator const D3D12_TILE_SHAPE&() const { return *this; }
};

//------------------------------------------------------------------------------------------------
struct CD3DX12_RESOURCE_BARRIER : public D3D12_RESOURCE_BARRIER
{
    CD3DX12_RESOURCE_BARRIER()
    {}
    explicit CD3DX12_RESOURCE_BARRIER(const D3D12_RESOURCE_BARRIER &o) :
        D3D12_RESOURCE_BARRIER(o)
    {}
    static inline CD3DX12_RESOURCE_BARRIER Transition(
        _In_ ID3D12Resource* pResource,
        D3D12_RESOURCE_STATES stateBefore,
        D3D12_RESOURCE_STATES stateAfter,
        UINT subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES,
        D3D12_RESOURCE_BARRIER_FLAGS flags = D3D12_RESOURCE_BARRIER_FLAG_NONE)
    {
        CD3DX12_RESOURCE_BARRIER result;
        ZeroMemory(&result, sizeof(result));
        D3D12_RESOURCE_BARRIER &barrier = result;
        result.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;
        result.Flags = flags;
        barrier.Transition.pResource = pResource;
        barrier.Transition.StateBefore = stateBefore;
        barrier.Transition.StateAfter = stateAfter;
        barrier.Transition.Subresource = subresource;
        return result;
    }
    static inline CD3DX12_RESOURCE_BARRIER Aliasing(
        _In_ ID3D12Resource* pResourceBefore,
        _In_ ID3D12Resource* pResourceAfter)
    {
        CD3DX12_RESOURCE_BARRIER result;
        ZeroMemory(&result, sizeof(result));
        D3D12_RESOURCE_BARRIER &barrier = result;
        result.Type = D3D12_RESOURCE_BARRIER_TYPE_ALIASING;
        barrier.Aliasing.pResourceBefore = pResourceBefore;
        barrier.Aliasing.pResourceAfter = pResourceAfter;
        return result;
    }
    static inline CD3DX12_RESOURCE_BARRIER UAV(
        _In_ ID3D12Resource* pResource)
    {
        CD3DX12_RESOURCE_BARRIER result;
        ZeroMemory(&result, sizeof(result));
        D3D12_RESOURCE_BARRIER &barrier = result;
        result.Type = D3D12_RESOURCE_BARRIER_TYPE_UAV;
        barrier.UAV.pResource = pResource;
        return result;
    }
    operator const D3D12_RESOURCE_BARRIER&() const { return *this; }
};

//------------------------------------------------------------------------------------------------
struct CD3DX12_PACKED_MIP_INFO : public D3D12_PACKED_MIP_INFO
{
    CD3DX12_PACKED_MIP_INFO()
    {}
    explicit CD3DX12_PACKED_MIP_INFO(const D3D12_PACKED_MIP_INFO &o) :
        D3D12_PACKED_MIP_INFO(o)
    {}
    CD3DX12_PACKED_MIP_INFO( 
        UINT8 numStandardMips, 
        UINT8 numPackedMips, 
        UINT numTilesForPackedMips, 
        UINT startTileIndexInOverallResource ) 
    {
        NumStandardMips = numStandardMips;
        NumPackedMips = numPackedMips;
        NumTilesForPackedMips = numTilesForPackedMips;
        StartTileIndexInOverallResource = startTileIndexInOverallResource;
    }
    operator const D3D12_PACKED_MIP_INFO&() const { return *this; }
};

//------------------------------------------------------------------------------------------------
struct CD3DX12_SUBRESOURCE_FOOTPRINT : public D3D12_SUBRESOURCE_FOOTPRINT
{
    CD3DX12_SUBRESOURCE_FOOTPRINT()
    {}
    explicit CD3DX12_SUBRESOURCE_FOOTPRINT(const D3D12_SUBRESOURCE_FOOTPRINT &o) :
        D3D12_SUBRESOURCE_FOOTPRINT(o)
    {}
    CD3DX12_SUBRESOURCE_FOOTPRINT( 
        DXGI_FORMAT format, 
        UINT width, 
        UINT height, 
        UINT depth, 
        UINT rowPitch ) 
    {
        Format = format;
        Width = width;
        Height = height;
        Depth = depth;
        RowPitch = rowPitch;
    }
    explicit CD3DX12_SUBRESOURCE_FOOTPRINT( 
        const D3D12_RESOURCE_DESC& resDesc, 
        UINT rowPitch ) 
    {
        Format = resDesc.Format;
        Width = UINT( resDesc.Width );
        Height = resDesc.Height;
        Depth = (resDesc.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D ? resDesc.DepthOrArraySize : 1);
        RowPitch = rowPitch;
    }
    operator const D3D12_SUBRESOURCE_FOOTPRINT&() const { return *this; }
};

//------------------------------------------------------------------------------------------------
struct CD3DX12_TEXTURE_COPY_LOCATION : public D3D12_TEXTURE_COPY_LOCATION
{ 
    CD3DX12_TEXTURE_COPY_LOCATION()
    {}
    explicit CD3DX12_TEXTURE_COPY_LOCATION(const D3D12_TEXTURE_COPY_LOCATION &o) :
        D3D12_TEXTURE_COPY_LOCATION(o)
    {}
    CD3DX12_TEXTURE_COPY_LOCATION(ID3D12Resource* pRes) { pResource = pRes; }
    CD3DX12_TEXTURE_COPY_LOCATION(ID3D12Resource* pRes, D3D12_PLACED_SUBRESOURCE_FOOTPRINT const& Footprint)
    {
        pResource = pRes;
        Type = D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT;
        PlacedFootprint = Footprint;
    }
    CD3DX12_TEXTURE_COPY_LOCATION(ID3D12Resource* pRes, UINT Sub)
    {
        pResource = pRes;
        Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX;
        SubresourceIndex = Sub;
    }
}; 

//------------------------------------------------------------------------------------------------
struct CD3DX12_DESCRIPTOR_RANGE : public D3D12_DESCRIPTOR_RANGE
{
    CD3DX12_DESCRIPTOR_RANGE() { }
    explicit CD3DX12_DESCRIPTOR_RANGE(const D3D12_DESCRIPTOR_RANGE &o) :
        D3D12_DESCRIPTOR_RANGE(o)
    {}
    CD3DX12_DESCRIPTOR_RANGE(
        D3D12_DESCRIPTOR_RANGE_TYPE rangeType,
        UINT numDescriptors,
        UINT baseShaderRegister,
        UINT registerSpace = 0,
        UINT offsetInDescriptorsFromTableStart =
        D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND)
    {
        Init(rangeType, numDescriptors, baseShaderRegister, registerSpace, offsetInDescriptorsFromTableStart);
    }
    
    inline void Init(
        D3D12_DESCRIPTOR_RANGE_TYPE rangeType,
        UINT numDescriptors,
        UINT baseShaderRegister,
        UINT registerSpace = 0,
        UINT offsetInDescriptorsFromTableStart =
        D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND)
    {
        Init(*this, rangeType, numDescriptors, baseShaderRegister, registerSpace, offsetInDescriptorsFromTableStart);
    }
    
    static inline void Init(
        _Out_ D3D12_DESCRIPTOR_RANGE &range,
        D3D12_DESCRIPTOR_RANGE_TYPE rangeType,
        UINT numDescriptors,
        UINT baseShaderRegister,
        UINT registerSpace = 0,
        UINT offsetInDescriptorsFromTableStart =
        D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND)
    {
        range.RangeType = rangeType;
        range.NumDescriptors = numDescriptors;
        range.BaseShaderRegister = baseShaderRegister;
        range.RegisterSpace = registerSpace;
        range.OffsetInDescriptorsFromTableStart = offsetInDescriptorsFromTableStart;
    }
};

//------------------------------------------------------------------------------------------------
struct CD3DX12_ROOT_DESCRIPTOR_TABLE : public D3D12_ROOT_DESCRIPTOR_TABLE
{
    CD3DX12_ROOT_DESCRIPTOR_TABLE() {}
    explicit CD3DX12_ROOT_DESCRIPTOR_TABLE(const D3D12_ROOT_DESCRIPTOR_TABLE &o) :
        D3D12_ROOT_DESCRIPTOR_TABLE(o)
    {}
    CD3DX12_ROOT_DESCRIPTOR_TABLE(
        UINT numDescriptorRanges,
        _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* _pDescriptorRanges)
    {
        Init(numDescriptorRanges, _pDescriptorRanges);
    }
    
    inline void Init(
        UINT numDescriptorRanges,
        _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* _pDescriptorRanges)
    {
        Init(*this, numDescriptorRanges, _pDescriptorRanges);
    }
    
    static inline void Init(
        _Out_ D3D12_ROOT_DESCRIPTOR_TABLE &rootDescriptorTable,
        UINT numDescriptorRanges,
        _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* _pDescriptorRanges)
    {
        rootDescriptorTable.NumDescriptorRanges = numDescriptorRanges;
        rootDescriptorTable.pDescriptorRanges = _pDescriptorRanges;
    }
};

//------------------------------------------------------------------------------------------------
struct CD3DX12_ROOT_CONSTANTS : public D3D12_ROOT_CONSTANTS
{
    CD3DX12_ROOT_CONSTANTS() {}
    explicit CD3DX12_ROOT_CONSTANTS(const D3D12_ROOT_CONSTANTS &o) :
        D3D12_ROOT_CONSTANTS(o)
    {}
    CD3DX12_ROOT_CONSTANTS(
        UINT num32BitValues,
        UINT shaderRegister,
        UINT registerSpace = 0)
    {
        Init(num32BitValues, shaderRegister, registerSpace);
    }
    
    inline void Init(
        UINT num32BitValues,
        UINT shaderRegister,
        UINT registerSpace = 0)
    {
        Init(*this, num32BitValues, shaderRegister, registerSpace);
    }
    
    static inline void Init(
        _Out_ D3D12_ROOT_CONSTANTS &rootConstants,
        UINT num32BitValues,
        UINT shaderRegister,
        UINT registerSpace = 0)
    {
        rootConstants.Num32BitValues = num32BitValues;
        rootConstants.ShaderRegister = shaderRegister;
        rootConstants.RegisterSpace = registerSpace;
    }
};

//------------------------------------------------------------------------------------------------
struct CD3DX12_ROOT_DESCRIPTOR : public D3D12_ROOT_DESCRIPTOR
{
    CD3DX12_ROOT_DESCRIPTOR() {}
    explicit CD3DX12_ROOT_DESCRIPTOR(const D3D12_ROOT_DESCRIPTOR &o) :
        D3D12_ROOT_DESCRIPTOR(o)
    {}
    CD3DX12_ROOT_DESCRIPTOR(
        UINT shaderRegister,
        UINT registerSpace = 0)
    {
        Init(shaderRegister, registerSpace);
    }
    
    inline void Init(
        UINT shaderRegister,
        UINT registerSpace = 0)
    {
        Init(*this, shaderRegister, registerSpace);
    }
    
    static inline void Init(_Out_ D3D12_ROOT_DESCRIPTOR &table, UINT shaderRegister, UINT registerSpace = 0)
    {
        table.ShaderRegister = shaderRegister;
        table.RegisterSpace = registerSpace;
    }
};

//------------------------------------------------------------------------------------------------
struct CD3DX12_ROOT_PARAMETER : public D3D12_ROOT_PARAMETER
{
    CD3DX12_ROOT_PARAMETER() {}
    explicit CD3DX12_ROOT_PARAMETER(const D3D12_ROOT_PARAMETER &o) :
        D3D12_ROOT_PARAMETER(o)
    {}
    
    static inline void InitAsDescriptorTable(
        _Out_ D3D12_ROOT_PARAMETER &rootParam,
        UINT numDescriptorRanges,
        _In_reads_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* pDescriptorRanges,
        D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
    {
        rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE;
        rootParam.ShaderVisibility = visibility;
        CD3DX12_ROOT_DESCRIPTOR_TABLE::Init(rootParam.DescriptorTable, numDescriptorRanges, pDescriptorRanges);
    }

    static inline void InitAsConstants(
        _Out_ D3D12_ROOT_PARAMETER &rootParam,
        UINT num32BitValues,
        UINT shaderRegister,
        UINT registerSpace = 0,
        D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
    {
        rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS;
        rootParam.ShaderVisibility = visibility;
        CD3DX12_ROOT_CONSTANTS::Init(rootParam.Constants, num32BitValues, shaderRegister, registerSpace);
    }

    static inline void InitAsConstantBufferView(
        _Out_ D3D12_ROOT_PARAMETER &rootParam,
        UINT shaderRegister,
        UINT registerSpace = 0,
        D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
    {
        rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_CBV;
        rootParam.ShaderVisibility = visibility;
        CD3DX12_ROOT_DESCRIPTOR::Init(rootParam.Descriptor, shaderRegister, registerSpace);
    }

    static inline void InitAsShaderResourceView(
        _Out_ D3D12_ROOT_PARAMETER &rootParam,
        UINT shaderRegister,
        UINT registerSpace = 0,
        D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
    {
        rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_SRV;
        rootParam.ShaderVisibility = visibility;
        CD3DX12_ROOT_DESCRIPTOR::Init(rootParam.Descriptor, shaderRegister, registerSpace);
    }

    static inline void InitAsUnorderedAccessView(
        _Out_ D3D12_ROOT_PARAMETER &rootParam,
        UINT shaderRegister,
        UINT registerSpace = 0,
        D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
    {
        rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_UAV;
        rootParam.ShaderVisibility = visibility;
        CD3DX12_ROOT_DESCRIPTOR::Init(rootParam.Descriptor, shaderRegister, registerSpace);
    }
    
    inline void InitAsDescriptorTable(
        UINT numDescriptorRanges,
        _In_reads_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* pDescriptorRanges,
        D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
    {
        InitAsDescriptorTable(*this, numDescriptorRanges, pDescriptorRanges, visibility);
    }
    
    inline void InitAsConstants(
        UINT num32BitValues,
        UINT shaderRegister,
        UINT registerSpace = 0,
        D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
    {
        InitAsConstants(*this, num32BitValues, shaderRegister, registerSpace, visibility);
    }

    inline void InitAsConstantBufferView(
        UINT shaderRegister,
        UINT registerSpace = 0,
        D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
    {
        InitAsConstantBufferView(*this, shaderRegister, registerSpace, visibility);
    }

    inline void InitAsShaderResourceView(
        UINT shaderRegister,
        UINT registerSpace = 0,
        D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
    {
        InitAsShaderResourceView(*this, shaderRegister, registerSpace, visibility);
    }

    inline void InitAsUnorderedAccessView(
        UINT shaderRegister,
        UINT registerSpace = 0,
        D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
    {
        InitAsUnorderedAccessView(*this, shaderRegister, registerSpace, visibility);
    }
};

//------------------------------------------------------------------------------------------------
struct CD3DX12_STATIC_SAMPLER_DESC : public D3D12_STATIC_SAMPLER_DESC
{
    CD3DX12_STATIC_SAMPLER_DESC() {}
    explicit CD3DX12_STATIC_SAMPLER_DESC(const D3D12_STATIC_SAMPLER_DESC &o) :
        D3D12_STATIC_SAMPLER_DESC(o)
    {}
    CD3DX12_STATIC_SAMPLER_DESC(
         UINT shaderRegister,
         D3D12_FILTER filter = D3D12_FILTER_ANISOTROPIC,
         D3D12_TEXTURE_ADDRESS_MODE addressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP,
         D3D12_TEXTURE_ADDRESS_MODE addressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP,
         D3D12_TEXTURE_ADDRESS_MODE addressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP,
         FLOAT mipLODBias = 0,
         UINT maxAnisotropy = 16,
         D3D12_COMPARISON_FUNC comparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL,
         D3D12_STATIC_BORDER_COLOR borderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE,
         FLOAT minLOD = 0.f,
         FLOAT maxLOD = D3D12_FLOAT32_MAX,
         D3D12_SHADER_VISIBILITY shaderVisibility = D3D12_SHADER_VISIBILITY_ALL, 
         UINT registerSpace = 0)
    {
        Init(
            shaderRegister,
            filter,
            addressU,
            addressV,
            addressW,
            mipLODBias,
            maxAnisotropy,
            comparisonFunc,
            borderColor,
            minLOD,
            maxLOD,
            shaderVisibility,
            registerSpace);
    }
    
    static inline void Init(
        _Out_ D3D12_STATIC_SAMPLER_DESC &samplerDesc,
         UINT shaderRegister,
         D3D12_FILTER filter = D3D12_FILTER_ANISOTROPIC,
         D3D12_TEXTURE_ADDRESS_MODE addressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP,
         D3D12_TEXTURE_ADDRESS_MODE addressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP,
         D3D12_TEXTURE_ADDRESS_MODE addressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP,
         FLOAT mipLODBias = 0,
         UINT maxAnisotropy = 16,
         D3D12_COMPARISON_FUNC comparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL,
         D3D12_STATIC_BORDER_COLOR borderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE,
         FLOAT minLOD = 0.f,
         FLOAT maxLOD = D3D12_FLOAT32_MAX,
         D3D12_SHADER_VISIBILITY shaderVisibility = D3D12_SHADER_VISIBILITY_ALL, 
         UINT registerSpace = 0)
    {
        samplerDesc.ShaderRegister = shaderRegister;
        samplerDesc.Filter = filter;
        samplerDesc.AddressU = addressU;
        samplerDesc.AddressV = addressV;
        samplerDesc.AddressW = addressW;
        samplerDesc.MipLODBias = mipLODBias;
        samplerDesc.MaxAnisotropy = maxAnisotropy;
        samplerDesc.ComparisonFunc = comparisonFunc;
        samplerDesc.BorderColor = borderColor;
        samplerDesc.MinLOD = minLOD;
        samplerDesc.MaxLOD = maxLOD;
        samplerDesc.ShaderVisibility = shaderVisibility;
        samplerDesc.RegisterSpace = registerSpace;
    }
    inline void Init(
         UINT shaderRegister,
         D3D12_FILTER filter = D3D12_FILTER_ANISOTROPIC,
         D3D12_TEXTURE_ADDRESS_MODE addressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP,
         D3D12_TEXTURE_ADDRESS_MODE addressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP,
         D3D12_TEXTURE_ADDRESS_MODE addressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP,
         FLOAT mipLODBias = 0,
         UINT maxAnisotropy = 16,
         D3D12_COMPARISON_FUNC comparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL,
         D3D12_STATIC_BORDER_COLOR borderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE,
         FLOAT minLOD = 0.f,
         FLOAT maxLOD = D3D12_FLOAT32_MAX,
         D3D12_SHADER_VISIBILITY shaderVisibility = D3D12_SHADER_VISIBILITY_ALL, 
         UINT registerSpace = 0)
    {
        Init(
            *this,
            shaderRegister,
            filter,
            addressU,
            addressV,
            addressW,
            mipLODBias,
            maxAnisotropy,
            comparisonFunc,
            borderColor,
            minLOD,
            maxLOD,
            shaderVisibility,
            registerSpace);
    }
    
};

//------------------------------------------------------------------------------------------------
struct CD3DX12_ROOT_SIGNATURE_DESC : public D3D12_ROOT_SIGNATURE_DESC
{
    CD3DX12_ROOT_SIGNATURE_DESC() {}
    explicit CD3DX12_ROOT_SIGNATURE_DESC(const D3D12_ROOT_SIGNATURE_DESC &o) :
        D3D12_ROOT_SIGNATURE_DESC(o)
    {}
    CD3DX12_ROOT_SIGNATURE_DESC(
        UINT numParameters,
        _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters,
        UINT numStaticSamplers = 0,
        _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = NULL,
        D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE)
    {
        Init(numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags);
    }
    CD3DX12_ROOT_SIGNATURE_DESC(CD3DX12_DEFAULT)
    {
        Init(0, NULL, 0, NULL, D3D12_ROOT_SIGNATURE_FLAG_NONE);
    }
    
    inline void Init(
        UINT numParameters,
        _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters,
        UINT numStaticSamplers = 0,
        _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = NULL,
        D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE)
    {
        Init(*this, numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags);
    }

    static inline void Init(
        _Out_ D3D12_ROOT_SIGNATURE_DESC &desc,
        UINT numParameters,
        _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters,
        UINT numStaticSamplers = 0,
        _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = NULL,
        D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE)
    {
        desc.NumParameters = numParameters;
        desc.pParameters = _pParameters;
        desc.NumStaticSamplers = numStaticSamplers;
        desc.pStaticSamplers = _pStaticSamplers;
        desc.Flags = flags;
    }
};

//------------------------------------------------------------------------------------------------
struct CD3DX12_DESCRIPTOR_RANGE1 : public D3D12_DESCRIPTOR_RANGE1
{
    CD3DX12_DESCRIPTOR_RANGE1() { }
    explicit CD3DX12_DESCRIPTOR_RANGE1(const D3D12_DESCRIPTOR_RANGE1 &o) :
        D3D12_DESCRIPTOR_RANGE1(o)
    {}
    CD3DX12_DESCRIPTOR_RANGE1(
        D3D12_DESCRIPTOR_RANGE_TYPE rangeType,
        UINT numDescriptors,
        UINT baseShaderRegister,
        UINT registerSpace = 0,
        D3D12_DESCRIPTOR_RANGE_FLAGS flags = D3D12_DESCRIPTOR_RANGE_FLAG_NONE,
        UINT offsetInDescriptorsFromTableStart =
        D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND)
    {
        Init(rangeType, numDescriptors, baseShaderRegister, registerSpace, flags, offsetInDescriptorsFromTableStart);
    }
    
    inline void Init(
        D3D12_DESCRIPTOR_RANGE_TYPE rangeType,
        UINT numDescriptors,
        UINT baseShaderRegister,
        UINT registerSpace = 0,
        D3D12_DESCRIPTOR_RANGE_FLAGS flags = D3D12_DESCRIPTOR_RANGE_FLAG_NONE,
        UINT offsetInDescriptorsFromTableStart =
        D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND)
    {
        Init(*this, rangeType, numDescriptors, baseShaderRegister, registerSpace, flags, offsetInDescriptorsFromTableStart);
    }
    
    static inline void Init(
        _Out_ D3D12_DESCRIPTOR_RANGE1 &range,
        D3D12_DESCRIPTOR_RANGE_TYPE rangeType,
        UINT numDescriptors,
        UINT baseShaderRegister,
        UINT registerSpace = 0,
        D3D12_DESCRIPTOR_RANGE_FLAGS flags = D3D12_DESCRIPTOR_RANGE_FLAG_NONE,
        UINT offsetInDescriptorsFromTableStart =
        D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND)
    {
        range.RangeType = rangeType;
        range.NumDescriptors = numDescriptors;
        range.BaseShaderRegister = baseShaderRegister;
        range.RegisterSpace = registerSpace;
        range.Flags = flags;
        range.OffsetInDescriptorsFromTableStart = offsetInDescriptorsFromTableStart;
    }
};

//------------------------------------------------------------------------------------------------
struct CD3DX12_ROOT_DESCRIPTOR_TABLE1 : public D3D12_ROOT_DESCRIPTOR_TABLE1
{
    CD3DX12_ROOT_DESCRIPTOR_TABLE1() {}
    explicit CD3DX12_ROOT_DESCRIPTOR_TABLE1(const D3D12_ROOT_DESCRIPTOR_TABLE1 &o) :
        D3D12_ROOT_DESCRIPTOR_TABLE1(o)
    {}
    CD3DX12_ROOT_DESCRIPTOR_TABLE1(
        UINT numDescriptorRanges,
        _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* _pDescriptorRanges)
    {
        Init(numDescriptorRanges, _pDescriptorRanges);
    }
    
    inline void Init(
        UINT numDescriptorRanges,
        _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* _pDescriptorRanges)
    {
        Init(*this, numDescriptorRanges, _pDescriptorRanges);
    }
    
    static inline void Init(
        _Out_ D3D12_ROOT_DESCRIPTOR_TABLE1 &rootDescriptorTable,
        UINT numDescriptorRanges,
        _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* _pDescriptorRanges)
    {
        rootDescriptorTable.NumDescriptorRanges = numDescriptorRanges;
        rootDescriptorTable.pDescriptorRanges = _pDescriptorRanges;
    }
};

//------------------------------------------------------------------------------------------------
struct CD3DX12_ROOT_DESCRIPTOR1 : public D3D12_ROOT_DESCRIPTOR1
{
    CD3DX12_ROOT_DESCRIPTOR1() {}
    explicit CD3DX12_ROOT_DESCRIPTOR1(const D3D12_ROOT_DESCRIPTOR1 &o) :
        D3D12_ROOT_DESCRIPTOR1(o)
    {}
    CD3DX12_ROOT_DESCRIPTOR1(
        UINT shaderRegister,
        UINT registerSpace = 0,
        D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE)
    {
        Init(shaderRegister, registerSpace, flags);
    }
    
    inline void Init(
        UINT shaderRegister,
        UINT registerSpace = 0,
        D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE)
    {
        Init(*this, shaderRegister, registerSpace, flags);
    }
    
    static inline void Init(
        _Out_ D3D12_ROOT_DESCRIPTOR1 &table, 
        UINT shaderRegister, 
        UINT registerSpace = 0, 
        D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE)
    {
        table.ShaderRegister = shaderRegister;
        table.RegisterSpace = registerSpace;
        table.Flags = flags;
    }
};

//------------------------------------------------------------------------------------------------
struct CD3DX12_ROOT_PARAMETER1 : public D3D12_ROOT_PARAMETER1
{
    CD3DX12_ROOT_PARAMETER1() {}
    explicit CD3DX12_ROOT_PARAMETER1(const D3D12_ROOT_PARAMETER1 &o) :
        D3D12_ROOT_PARAMETER1(o)
    {}
    
    static inline void InitAsDescriptorTable(
        _Out_ D3D12_ROOT_PARAMETER1 &rootParam,
        UINT numDescriptorRanges,
        _In_reads_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* pDescriptorRanges,
        D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
    {
        rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE;
        rootParam.ShaderVisibility = visibility;
        CD3DX12_ROOT_DESCRIPTOR_TABLE1::Init(rootParam.DescriptorTable, numDescriptorRanges, pDescriptorRanges);
    }

    static inline void InitAsConstants(
        _Out_ D3D12_ROOT_PARAMETER1 &rootParam,
        UINT num32BitValues,
        UINT shaderRegister,
        UINT registerSpace = 0,
        D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
    {
        rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS;
        rootParam.ShaderVisibility = visibility;
        CD3DX12_ROOT_CONSTANTS::Init(rootParam.Constants, num32BitValues, shaderRegister, registerSpace);
    }

    static inline void InitAsConstantBufferView(
        _Out_ D3D12_ROOT_PARAMETER1 &rootParam,
        UINT shaderRegister,
        UINT registerSpace = 0,
        D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE,
        D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
    {
        rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_CBV;
        rootParam.ShaderVisibility = visibility;
        CD3DX12_ROOT_DESCRIPTOR1::Init(rootParam.Descriptor, shaderRegister, registerSpace, flags);
    }

    static inline void InitAsShaderResourceView(
        _Out_ D3D12_ROOT_PARAMETER1 &rootParam,
        UINT shaderRegister,
        UINT registerSpace = 0,
        D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE,
        D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
    {
        rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_SRV;
        rootParam.ShaderVisibility = visibility;
        CD3DX12_ROOT_DESCRIPTOR1::Init(rootParam.Descriptor, shaderRegister, registerSpace, flags);
    }

    static inline void InitAsUnorderedAccessView(
        _Out_ D3D12_ROOT_PARAMETER1 &rootParam,
        UINT shaderRegister,
        UINT registerSpace = 0,
        D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE,
        D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
    {
        rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_UAV;
        rootParam.ShaderVisibility = visibility;
        CD3DX12_ROOT_DESCRIPTOR1::Init(rootParam.Descriptor, shaderRegister, registerSpace, flags);
    }
    
    inline void InitAsDescriptorTable(
        UINT numDescriptorRanges,
        _In_reads_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* pDescriptorRanges,
        D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
    {
        InitAsDescriptorTable(*this, numDescriptorRanges, pDescriptorRanges, visibility);
    }
    
    inline void InitAsConstants(
        UINT num32BitValues,
        UINT shaderRegister,
        UINT registerSpace = 0,
        D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
    {
        InitAsConstants(*this, num32BitValues, shaderRegister, registerSpace, visibility);
    }

    inline void InitAsConstantBufferView(
        UINT shaderRegister,
        UINT registerSpace = 0,
        D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE,
        D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
    {
        InitAsConstantBufferView(*this, shaderRegister, registerSpace, flags, visibility);
    }

    inline void InitAsShaderResourceView(
        UINT shaderRegister,
        UINT registerSpace = 0,
        D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE,
        D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
    {
        InitAsShaderResourceView(*this, shaderRegister, registerSpace, flags, visibility);
    }

    inline void InitAsUnorderedAccessView(
        UINT shaderRegister,
        UINT registerSpace = 0,
        D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE,
        D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
    {
        InitAsUnorderedAccessView(*this, shaderRegister, registerSpace, flags, visibility);
    }
};

//------------------------------------------------------------------------------------------------
struct CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC : public D3D12_VERSIONED_ROOT_SIGNATURE_DESC
{
    CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC() {}
    explicit CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(const D3D12_VERSIONED_ROOT_SIGNATURE_DESC &o) :
        D3D12_VERSIONED_ROOT_SIGNATURE_DESC(o)
    {}
    explicit CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(const D3D12_ROOT_SIGNATURE_DESC &o)
    {
        Version = D3D_ROOT_SIGNATURE_VERSION_1_0;
        Desc_1_0 = o;
    }
    explicit CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(const D3D12_ROOT_SIGNATURE_DESC1 &o)
    {
        Version = D3D_ROOT_SIGNATURE_VERSION_1_1;
        Desc_1_1 = o;
    }
    CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(
        UINT numParameters,
        _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters,
        UINT numStaticSamplers = 0,
        _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = NULL,
        D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE)
    {
        Init_1_0(numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags);
    }
    CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(
        UINT numParameters,
        _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER1* _pParameters,
        UINT numStaticSamplers = 0,
        _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = NULL,
        D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE)
    {
        Init_1_1(numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags);
    }
    CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(CD3DX12_DEFAULT)
    {
        Init_1_1(0, NULL, 0, NULL, D3D12_ROOT_SIGNATURE_FLAG_NONE);
    }
    
    inline void Init_1_0(
        UINT numParameters,
        _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters,
        UINT numStaticSamplers = 0,
        _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = NULL,
        D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE)
    {
        Init_1_0(*this, numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags);
    }

    static inline void Init_1_0(
        _Out_ D3D12_VERSIONED_ROOT_SIGNATURE_DESC &desc,
        UINT numParameters,
        _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER* _pParameters,
        UINT numStaticSamplers = 0,
        _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = NULL,
        D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE)
    {
        desc.Version = D3D_ROOT_SIGNATURE_VERSION_1_0;
        desc.Desc_1_0.NumParameters = numParameters;
        desc.Desc_1_0.pParameters = _pParameters;
        desc.Desc_1_0.NumStaticSamplers = numStaticSamplers;
        desc.Desc_1_0.pStaticSamplers = _pStaticSamplers;
        desc.Desc_1_0.Flags = flags;
    }

    inline void Init_1_1(
        UINT numParameters,
        _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER1* _pParameters,
        UINT numStaticSamplers = 0,
        _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = NULL,
        D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE)
    {
        Init_1_1(*this, numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags);
    }

    static inline void Init_1_1(
        _Out_ D3D12_VERSIONED_ROOT_SIGNATURE_DESC &desc,
        UINT numParameters,
        _In_reads_opt_(numParameters) const D3D12_ROOT_PARAMETER1* _pParameters,
        UINT numStaticSamplers = 0,
        _In_reads_opt_(numStaticSamplers) const D3D12_STATIC_SAMPLER_DESC* _pStaticSamplers = NULL,
        D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE)
    {
        desc.Version = D3D_ROOT_SIGNATURE_VERSION_1_1;
        desc.Desc_1_1.NumParameters = numParameters;
        desc.Desc_1_1.pParameters = _pParameters;
        desc.Desc_1_1.NumStaticSamplers = numStaticSamplers;
        desc.Desc_1_1.pStaticSamplers = _pStaticSamplers;
        desc.Desc_1_1.Flags = flags;
    }
};

//------------------------------------------------------------------------------------------------
struct CD3DX12_CPU_DESCRIPTOR_HANDLE : public D3D12_CPU_DESCRIPTOR_HANDLE
{
    CD3DX12_CPU_DESCRIPTOR_HANDLE() {}
    explicit CD3DX12_CPU_DESCRIPTOR_HANDLE(const D3D12_CPU_DESCRIPTOR_HANDLE &o) :
        D3D12_CPU_DESCRIPTOR_HANDLE(o)
    {}
    CD3DX12_CPU_DESCRIPTOR_HANDLE(CD3DX12_DEFAULT) { ptr = 0; }
    CD3DX12_CPU_DESCRIPTOR_HANDLE(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE &other, INT offsetScaledByIncrementSize)
    {
        InitOffsetted(other, offsetScaledByIncrementSize);
    }
    CD3DX12_CPU_DESCRIPTOR_HANDLE(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE &other, INT offsetInDescriptors, UINT descriptorIncrementSize)
    {
        InitOffsetted(other, offsetInDescriptors, descriptorIncrementSize);
    }
    CD3DX12_CPU_DESCRIPTOR_HANDLE& Offset(INT offsetInDescriptors, UINT descriptorIncrementSize)
    { 
        ptr += offsetInDescriptors * descriptorIncrementSize;
        return *this;
    }
    CD3DX12_CPU_DESCRIPTOR_HANDLE& Offset(INT offsetScaledByIncrementSize) 
    { 
        ptr += offsetScaledByIncrementSize;
        return *this;
    }
    bool operator==(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE& other) const
    {
        return (ptr == other.ptr);
    }
    bool operator!=(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE& other) const
    {
        return (ptr != other.ptr);
    }
    CD3DX12_CPU_DESCRIPTOR_HANDLE &operator=(const D3D12_CPU_DESCRIPTOR_HANDLE &other)
    {
        ptr = other.ptr;
        return *this;
    }
    
    inline void InitOffsetted(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize)
    {
        InitOffsetted(*this, base, offsetScaledByIncrementSize);
    }
    
    inline void InitOffsetted(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize)
    {
        InitOffsetted(*this, base, offsetInDescriptors, descriptorIncrementSize);
    }
    
    static inline void InitOffsetted(_Out_ D3D12_CPU_DESCRIPTOR_HANDLE &handle, _In_ const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize)
    {
        handle.ptr = base.ptr + offsetScaledByIncrementSize;
    }
    
    static inline void InitOffsetted(_Out_ D3D12_CPU_DESCRIPTOR_HANDLE &handle, _In_ const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize)
    {
        handle.ptr = base.ptr + offsetInDescriptors * descriptorIncrementSize;
    }
};

//------------------------------------------------------------------------------------------------
struct CD3DX12_GPU_DESCRIPTOR_HANDLE : public D3D12_GPU_DESCRIPTOR_HANDLE
{
    CD3DX12_GPU_DESCRIPTOR_HANDLE() {}
    explicit CD3DX12_GPU_DESCRIPTOR_HANDLE(const D3D12_GPU_DESCRIPTOR_HANDLE &o) :
        D3D12_GPU_DESCRIPTOR_HANDLE(o)
    {}
    CD3DX12_GPU_DESCRIPTOR_HANDLE(CD3DX12_DEFAULT) { ptr = 0; }
    CD3DX12_GPU_DESCRIPTOR_HANDLE(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE &other, INT offsetScaledByIncrementSize)
    {
        InitOffsetted(other, offsetScaledByIncrementSize);
    }
    CD3DX12_GPU_DESCRIPTOR_HANDLE(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE &other, INT offsetInDescriptors, UINT descriptorIncrementSize)
    {
        InitOffsetted(other, offsetInDescriptors, descriptorIncrementSize);
    }
    CD3DX12_GPU_DESCRIPTOR_HANDLE& Offset(INT offsetInDescriptors, UINT descriptorIncrementSize)
    { 
        ptr += offsetInDescriptors * descriptorIncrementSize;
        return *this;
    }
    CD3DX12_GPU_DESCRIPTOR_HANDLE& Offset(INT offsetScaledByIncrementSize) 
    { 
        ptr += offsetScaledByIncrementSize;
        return *this;
    }
    inline bool operator==(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE& other) const
    {
        return (ptr == other.ptr);
    }
    inline bool operator!=(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE& other) const
    {
        return (ptr != other.ptr);
    }
    CD3DX12_GPU_DESCRIPTOR_HANDLE &operator=(const D3D12_GPU_DESCRIPTOR_HANDLE &other)
    {
        ptr = other.ptr;
        return *this;
    }
    
    inline void InitOffsetted(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize)
    {
        InitOffsetted(*this, base, offsetScaledByIncrementSize);
    }
    
    inline void InitOffsetted(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize)
    {
        InitOffsetted(*this, base, offsetInDescriptors, descriptorIncrementSize);
    }
    
    static inline void InitOffsetted(_Out_ D3D12_GPU_DESCRIPTOR_HANDLE &handle, _In_ const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize)
    {
        handle.ptr = base.ptr + offsetScaledByIncrementSize;
    }
    
    static inline void InitOffsetted(_Out_ D3D12_GPU_DESCRIPTOR_HANDLE &handle, _In_ const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize)
    {
        handle.ptr = base.ptr + offsetInDescriptors * descriptorIncrementSize;
    }
};

//------------------------------------------------------------------------------------------------
inline UINT D3D12CalcSubresource( UINT MipSlice, UINT ArraySlice, UINT PlaneSlice, UINT MipLevels, UINT ArraySize )
{ 
    return MipSlice + ArraySlice * MipLevels + PlaneSlice * MipLevels * ArraySize; 
}

//------------------------------------------------------------------------------------------------
template <typename T, typename U, typename V>
inline void D3D12DecomposeSubresource( UINT Subresource, UINT MipLevels, UINT ArraySize, _Out_ T& MipSlice, _Out_ U& ArraySlice, _Out_ V& PlaneSlice )
{
    MipSlice = static_cast<T>(Subresource % MipLevels);
    ArraySlice = static_cast<U>((Subresource / MipLevels) % ArraySize);
    PlaneSlice = static_cast<V>(Subresource / (MipLevels * ArraySize));
}

//------------------------------------------------------------------------------------------------
inline UINT8 D3D12GetFormatPlaneCount(
    _In_ ID3D12Device* pDevice,
    DXGI_FORMAT Format
    )
{
    D3D12_FEATURE_DATA_FORMAT_INFO formatInfo = {Format};
    if (FAILED(pDevice->CheckFeatureSupport(D3D12_FEATURE_FORMAT_INFO, &formatInfo, sizeof(formatInfo))))
    {
        return 0;
    }
    return formatInfo.PlaneCount;
}

//------------------------------------------------------------------------------------------------
struct CD3DX12_RESOURCE_DESC : public D3D12_RESOURCE_DESC
{
    CD3DX12_RESOURCE_DESC()
    {}
    explicit CD3DX12_RESOURCE_DESC( const D3D12_RESOURCE_DESC& o ) :
        D3D12_RESOURCE_DESC( o )
    {}
    CD3DX12_RESOURCE_DESC( 
        D3D12_RESOURCE_DIMENSION dimension,
        UINT64 alignment,
        UINT64 width,
        UINT height,
        UINT16 depthOrArraySize,
        UINT16 mipLevels,
        DXGI_FORMAT format,
        UINT sampleCount,
        UINT sampleQuality,
        D3D12_TEXTURE_LAYOUT layout,
        D3D12_RESOURCE_FLAGS flags )
    {
        Dimension = dimension;
        Alignment = alignment;
        Width = width;
        Height = height;
        DepthOrArraySize = depthOrArraySize;
        MipLevels = mipLevels;
        Format = format;
        SampleDesc.Count = sampleCount;
        SampleDesc.Quality = sampleQuality;
        Layout = layout;
        Flags = flags;
    }
    static inline CD3DX12_RESOURCE_DESC Buffer( 
        const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo,
        D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE )
    {
        return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_BUFFER, resAllocInfo.Alignment, resAllocInfo.SizeInBytes, 
            1, 1, 1, DXGI_FORMAT_UNKNOWN, 1, 0, D3D12_TEXTURE_LAYOUT_ROW_MAJOR, flags );
    }
    static inline CD3DX12_RESOURCE_DESC Buffer( 
        UINT64 width,
        D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE,
        UINT64 alignment = 0 )
    {
        return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_BUFFER, alignment, width, 1, 1, 1, 
            DXGI_FORMAT_UNKNOWN, 1, 0, D3D12_TEXTURE_LAYOUT_ROW_MAJOR, flags );
    }
    static inline CD3DX12_RESOURCE_DESC Tex1D( 
        DXGI_FORMAT format,
        UINT64 width,
        UINT16 arraySize = 1,
        UINT16 mipLevels = 0,
        D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE,
        D3D12_TEXTURE_LAYOUT layout = D3D12_TEXTURE_LAYOUT_UNKNOWN,
        UINT64 alignment = 0 )
    {
        return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_TEXTURE1D, alignment, width, 1, arraySize, 
            mipLevels, format, 1, 0, layout, flags );
    }
    static inline CD3DX12_RESOURCE_DESC Tex2D( 
        DXGI_FORMAT format,
        UINT64 width,
        UINT height,
        UINT16 arraySize = 1,
        UINT16 mipLevels = 0,
        UINT sampleCount = 1,
        UINT sampleQuality = 0,
        D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE,
        D3D12_TEXTURE_LAYOUT layout = D3D12_TEXTURE_LAYOUT_UNKNOWN,
        UINT64 alignment = 0 )
    {
        return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_TEXTURE2D, alignment, width, height, arraySize, 
            mipLevels, format, sampleCount, sampleQuality, layout, flags );
    }
    static inline CD3DX12_RESOURCE_DESC Tex3D( 
        DXGI_FORMAT format,
        UINT64 width,
        UINT height,
        UINT16 depth,
        UINT16 mipLevels = 0,
        D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE,
        D3D12_TEXTURE_LAYOUT layout = D3D12_TEXTURE_LAYOUT_UNKNOWN,
        UINT64 alignment = 0 )
    {
        return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_TEXTURE3D, alignment, width, height, depth, 
            mipLevels, format, 1, 0, layout, flags );
    }
    inline UINT16 Depth() const
    { return (Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D ? DepthOrArraySize : 1); }
    inline UINT16 ArraySize() const
    { return (Dimension != D3D12_RESOURCE_DIMENSION_TEXTURE3D ? DepthOrArraySize : 1); }
    inline UINT8 PlaneCount(_In_ ID3D12Device* pDevice) const
    { return D3D12GetFormatPlaneCount(pDevice, Format); }
    inline UINT Subresources(_In_ ID3D12Device* pDevice) const
    { return MipLevels * ArraySize() * PlaneCount(pDevice); }
    inline UINT CalcSubresource(UINT MipSlice, UINT ArraySlice, UINT PlaneSlice)
    { return D3D12CalcSubresource(MipSlice, ArraySlice, PlaneSlice, MipLevels, ArraySize()); }
    operator const D3D12_RESOURCE_DESC&() const { return *this; }
};
inline bool operator==( const D3D12_RESOURCE_DESC& l, const D3D12_RESOURCE_DESC& r )
{
    return l.Dimension == r.Dimension &&
        l.Alignment == r.Alignment &&
        l.Width == r.Width &&
        l.Height == r.Height &&
        l.DepthOrArraySize == r.DepthOrArraySize &&
        l.MipLevels == r.MipLevels &&
        l.Format == r.Format &&
        l.SampleDesc.Count == r.SampleDesc.Count &&
        l.SampleDesc.Quality == r.SampleDesc.Quality &&
        l.Layout == r.Layout &&
        l.Flags == r.Flags;
}
inline bool operator!=( const D3D12_RESOURCE_DESC& l, const D3D12_RESOURCE_DESC& r )
{ return !( l == r ); }

//------------------------------------------------------------------------------------------------
// Row-by-row memcpy
inline void MemcpySubresource(
    _In_ const D3D12_MEMCPY_DEST* pDest,
    _In_ const D3D12_SUBRESOURCE_DATA* pSrc,
    SIZE_T RowSizeInBytes,
    UINT NumRows,
    UINT NumSlices)
{
    for (UINT z = 0; z < NumSlices; ++z)
    {
        BYTE* pDestSlice = reinterpret_cast<BYTE*>(pDest->pData) + pDest->SlicePitch * z;
        const BYTE* pSrcSlice = reinterpret_cast<const BYTE*>(pSrc->pData) + pSrc->SlicePitch * z;
        for (UINT y = 0; y < NumRows; ++y)
        {
            memcpy(pDestSlice + pDest->RowPitch * y,
                   pSrcSlice + pSrc->RowPitch * y,
                   RowSizeInBytes);
        }
    }
}

//------------------------------------------------------------------------------------------------
// Returns required size of a buffer to be used for data upload
inline UINT64 GetRequiredIntermediateSize(
    _In_ ID3D12Resource* pDestinationResource,
    _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource,
    _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources)
{
    D3D12_RESOURCE_DESC Desc = pDestinationResource->GetDesc();
    UINT64 RequiredSize = 0;
    
    ID3D12Device* pDevice;
    pDestinationResource->GetDevice(__uuidof(*pDevice), reinterpret_cast<void**>(&pDevice));
    pDevice->GetCopyableFootprints(&Desc, FirstSubresource, NumSubresources, 0, nullptr, nullptr, nullptr, &RequiredSize);
    pDevice->Release();
    
    return RequiredSize;
}

//------------------------------------------------------------------------------------------------
// All arrays must be populated (e.g. by calling GetCopyableFootprints)
inline UINT64 UpdateSubresources(
    _In_ ID3D12GraphicsCommandList* pCmdList,
    _In_ ID3D12Resource* pDestinationResource,
    _In_ ID3D12Resource* pIntermediate,
    _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource,
    _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources,
    UINT64 RequiredSize,
    _In_reads_(NumSubresources) const D3D12_PLACED_SUBRESOURCE_FOOTPRINT* pLayouts,
    _In_reads_(NumSubresources) const UINT* pNumRows,
    _In_reads_(NumSubresources) const UINT64* pRowSizesInBytes,
    _In_reads_(NumSubresources) const D3D12_SUBRESOURCE_DATA* pSrcData)
{
    // Minor validation
    D3D12_RESOURCE_DESC IntermediateDesc = pIntermediate->GetDesc();
    D3D12_RESOURCE_DESC DestinationDesc = pDestinationResource->GetDesc();
    if (IntermediateDesc.Dimension != D3D12_RESOURCE_DIMENSION_BUFFER || 
        IntermediateDesc.Width < RequiredSize + pLayouts[0].Offset || 
        RequiredSize > (SIZE_T)-1 || 
        (DestinationDesc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER && 
            (FirstSubresource != 0 || NumSubresources != 1)))
    {
        return 0;
    }
    
    BYTE* pData;
    HRESULT hr = pIntermediate->Map(0, NULL, reinterpret_cast<void**>(&pData));
    if (FAILED(hr))
    {
        return 0;
    }
    
    for (UINT i = 0; i < NumSubresources; ++i)
    {
        if (pRowSizesInBytes[i] > (SIZE_T)-1) return 0;
        D3D12_MEMCPY_DEST DestData = { pData + pLayouts[i].Offset, pLayouts[i].Footprint.RowPitch, pLayouts[i].Footprint.RowPitch * pNumRows[i] };
        MemcpySubresource(&DestData, &pSrcData[i], (SIZE_T)pRowSizesInBytes[i], pNumRows[i], pLayouts[i].Footprint.Depth);
    }
    pIntermediate->Unmap(0, NULL);
    
    if (DestinationDesc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER)
    {
        CD3DX12_BOX SrcBox( UINT( pLayouts[0].Offset ), UINT( pLayouts[0].Offset + pLayouts[0].Footprint.Width ) );
        pCmdList->CopyBufferRegion(
            pDestinationResource, 0, pIntermediate, pLayouts[0].Offset, pLayouts[0].Footprint.Width);
    }
    else
    {
        for (UINT i = 0; i < NumSubresources; ++i)
        {
            CD3DX12_TEXTURE_COPY_LOCATION Dst(pDestinationResource, i + FirstSubresource);
            CD3DX12_TEXTURE_COPY_LOCATION Src(pIntermediate, pLayouts[i]);
            pCmdList->CopyTextureRegion(&Dst, 0, 0, 0, &Src, nullptr);
        }
    }
    return RequiredSize;
}

//------------------------------------------------------------------------------------------------
// Heap-allocating UpdateSubresources implementation
inline UINT64 UpdateSubresources( 
    _In_ ID3D12GraphicsCommandList* pCmdList,
    _In_ ID3D12Resource* pDestinationResource,
    _In_ ID3D12Resource* pIntermediate,
    UINT64 IntermediateOffset,
    _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource,
    _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources,
    _In_reads_(NumSubresources) D3D12_SUBRESOURCE_DATA* pSrcData)
{
    UINT64 RequiredSize = 0;
    UINT64 MemToAlloc = static_cast<UINT64>(sizeof(D3D12_PLACED_SUBRESOURCE_FOOTPRINT) + sizeof(UINT) + sizeof(UINT64)) * NumSubresources;
    if (MemToAlloc > SIZE_MAX)
    {
       return 0;
    }
    void* pMem = HeapAlloc(GetProcessHeap(), 0, static_cast<SIZE_T>(MemToAlloc));
    if (pMem == NULL)
    {
       return 0;
    }
    D3D12_PLACED_SUBRESOURCE_FOOTPRINT* pLayouts = reinterpret_cast<D3D12_PLACED_SUBRESOURCE_FOOTPRINT*>(pMem);
    UINT64* pRowSizesInBytes = reinterpret_cast<UINT64*>(pLayouts + NumSubresources);
    UINT* pNumRows = reinterpret_cast<UINT*>(pRowSizesInBytes + NumSubresources);
    
    D3D12_RESOURCE_DESC Desc = pDestinationResource->GetDesc();
    ID3D12Device* pDevice;
    pDestinationResource->GetDevice(__uuidof(*pDevice), reinterpret_cast<void**>(&pDevice));
    pDevice->GetCopyableFootprints(&Desc, FirstSubresource, NumSubresources, IntermediateOffset, pLayouts, pNumRows, pRowSizesInBytes, &RequiredSize);
    pDevice->Release();
    
    UINT64 Result = UpdateSubresources(pCmdList, pDestinationResource, pIntermediate, FirstSubresource, NumSubresources, RequiredSize, pLayouts, pNumRows, pRowSizesInBytes, pSrcData);
    HeapFree(GetProcessHeap(), 0, pMem);
    return Result;
}

//------------------------------------------------------------------------------------------------
// Stack-allocating UpdateSubresources implementation
template <UINT MaxSubresources>
inline UINT64 UpdateSubresources( 
    _In_ ID3D12GraphicsCommandList* pCmdList,
    _In_ ID3D12Resource* pDestinationResource,
    _In_ ID3D12Resource* pIntermediate,
    UINT64 IntermediateOffset,
    _In_range_(0, MaxSubresources) UINT FirstSubresource,
    _In_range_(1, MaxSubresources - FirstSubresource) UINT NumSubresources,
    _In_reads_(NumSubresources) D3D12_SUBRESOURCE_DATA* pSrcData)
{
    UINT64 RequiredSize = 0;
    D3D12_PLACED_SUBRESOURCE_FOOTPRINT Layouts[MaxSubresources];
    UINT NumRows[MaxSubresources];
    UINT64 RowSizesInBytes[MaxSubresources];
    
    D3D12_RESOURCE_DESC Desc = pDestinationResource->GetDesc();
    ID3D12Device* pDevice;
    pDestinationResource->GetDevice(__uuidof(*pDevice), reinterpret_cast<void**>(&pDevice));
    pDevice->GetCopyableFootprints(&Desc, FirstSubresource, NumSubresources, IntermediateOffset, Layouts, NumRows, RowSizesInBytes, &RequiredSize);
    pDevice->Release();
    
    return UpdateSubresources(pCmdList, pDestinationResource, pIntermediate, FirstSubresource, NumSubresources, RequiredSize, Layouts, NumRows, RowSizesInBytes, pSrcData);
}

//------------------------------------------------------------------------------------------------
inline bool D3D12IsLayoutOpaque( D3D12_TEXTURE_LAYOUT Layout )
{ return Layout == D3D12_TEXTURE_LAYOUT_UNKNOWN || Layout == D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE; }

//------------------------------------------------------------------------------------------------
template <typename t_CommandListType>
inline ID3D12CommandList * const * CommandListCast(t_CommandListType * const * pp)
{
    // This cast is useful for passing strongly typed command list pointers into
    // ExecuteCommandLists.
    // This cast is valid as long as the const-ness is respected. D3D12 APIs do
    // respect the const-ness of their arguments.
    return reinterpret_cast<ID3D12CommandList * const *>(pp);
}

//------------------------------------------------------------------------------------------------
// D3D12 exports a new method for serializing root signatures in the Windows 10 Anniversary Update.
// To help enable root signature 1.1 features when they are available and not require maintaining
// two code paths for building root signatures, this helper method reconstructs a 1.0 signature when
// 1.1 is not supported.
inline HRESULT D3DX12SerializeVersionedRootSignature(
    _In_ const D3D12_VERSIONED_ROOT_SIGNATURE_DESC* pRootSignatureDesc,
    D3D_ROOT_SIGNATURE_VERSION MaxVersion,
    _Outptr_ ID3DBlob** ppBlob,
    _Always_(_Outptr_opt_result_maybenull_) ID3DBlob** ppErrorBlob)
{
    if (ppErrorBlob != NULL)
    {
        *ppErrorBlob = NULL;
    }

    switch (MaxVersion)
    {
        case D3D_ROOT_SIGNATURE_VERSION_1_0:
            switch (pRootSignatureDesc->Version)
            {
                case D3D_ROOT_SIGNATURE_VERSION_1_0:
                    return D3D12SerializeRootSignature(&pRootSignatureDesc->Desc_1_0, D3D_ROOT_SIGNATURE_VERSION_1, ppBlob, ppErrorBlob);

                case D3D_ROOT_SIGNATURE_VERSION_1_1:
                {
                    HRESULT hr = S_OK;
                    const D3D12_ROOT_SIGNATURE_DESC1& desc_1_1 = pRootSignatureDesc->Desc_1_1;

                    const SIZE_T ParametersSize = sizeof(D3D12_ROOT_PARAMETER) * desc_1_1.NumParameters;
                    void* pParameters = (ParametersSize > 0) ? HeapAlloc(GetProcessHeap(), 0, ParametersSize) : NULL;
                    if (ParametersSize > 0 && pParameters == NULL)
                    {
                        hr = E_OUTOFMEMORY;
                    }
                    D3D12_ROOT_PARAMETER* pParameters_1_0 = reinterpret_cast<D3D12_ROOT_PARAMETER*>(pParameters);

                    if (SUCCEEDED(hr))
                    {
                        for (UINT n = 0; n < desc_1_1.NumParameters; n++)
                        {
                            __analysis_assume(ParametersSize == sizeof(D3D12_ROOT_PARAMETER) * desc_1_1.NumParameters);
                            pParameters_1_0[n].ParameterType = desc_1_1.pParameters[n].ParameterType;
                            pParameters_1_0[n].ShaderVisibility = desc_1_1.pParameters[n].ShaderVisibility;

                            switch (desc_1_1.pParameters[n].ParameterType)
                            {
                            case D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS:
                                pParameters_1_0[n].Constants.Num32BitValues = desc_1_1.pParameters[n].Constants.Num32BitValues;
                                pParameters_1_0[n].Constants.RegisterSpace = desc_1_1.pParameters[n].Constants.RegisterSpace;
                                pParameters_1_0[n].Constants.ShaderRegister = desc_1_1.pParameters[n].Constants.ShaderRegister;
                                break;

                            case D3D12_ROOT_PARAMETER_TYPE_CBV:
                            case D3D12_ROOT_PARAMETER_TYPE_SRV:
                            case D3D12_ROOT_PARAMETER_TYPE_UAV:
                                pParameters_1_0[n].Descriptor.RegisterSpace = desc_1_1.pParameters[n].Descriptor.RegisterSpace;
                                pParameters_1_0[n].Descriptor.ShaderRegister = desc_1_1.pParameters[n].Descriptor.ShaderRegister;
                                break;

                            case D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE:
                                const D3D12_ROOT_DESCRIPTOR_TABLE1& table_1_1 = desc_1_1.pParameters[n].DescriptorTable;

                                const SIZE_T DescriptorRangesSize = sizeof(D3D12_DESCRIPTOR_RANGE) * table_1_1.NumDescriptorRanges;
                                void* pDescriptorRanges = (DescriptorRangesSize > 0 && SUCCEEDED(hr)) ? HeapAlloc(GetProcessHeap(), 0, DescriptorRangesSize) : NULL;
                                if (DescriptorRangesSize > 0 && pDescriptorRanges == NULL)
                                {
                                    hr = E_OUTOFMEMORY;
                                }
                                D3D12_DESCRIPTOR_RANGE* pDescriptorRanges_1_0 = reinterpret_cast<D3D12_DESCRIPTOR_RANGE*>(pDescriptorRanges);

                                if (SUCCEEDED(hr))
                                {
                                    for (UINT x = 0; x < table_1_1.NumDescriptorRanges; x++)
                                    {
                                        __analysis_assume(DescriptorRangesSize == sizeof(D3D12_DESCRIPTOR_RANGE) * table_1_1.NumDescriptorRanges);
                                        pDescriptorRanges_1_0[x].BaseShaderRegister = table_1_1.pDescriptorRanges[x].BaseShaderRegister;
                                        pDescriptorRanges_1_0[x].NumDescriptors = table_1_1.pDescriptorRanges[x].NumDescriptors;
                                        pDescriptorRanges_1_0[x].OffsetInDescriptorsFromTableStart = table_1_1.pDescriptorRanges[x].OffsetInDescriptorsFromTableStart;
                                        pDescriptorRanges_1_0[x].RangeType = table_1_1.pDescriptorRanges[x].RangeType;
                                        pDescriptorRanges_1_0[x].RegisterSpace = table_1_1.pDescriptorRanges[x].RegisterSpace;
                                    }
                                }

                                D3D12_ROOT_DESCRIPTOR_TABLE& table_1_0 = pParameters_1_0[n].DescriptorTable;
                                table_1_0.NumDescriptorRanges = table_1_1.NumDescriptorRanges;
                                table_1_0.pDescriptorRanges = pDescriptorRanges_1_0;
                            }
                        }
                    }

                    if (SUCCEEDED(hr))
                    {
                        CD3DX12_ROOT_SIGNATURE_DESC desc_1_0(desc_1_1.NumParameters, pParameters_1_0, desc_1_1.NumStaticSamplers, desc_1_1.pStaticSamplers, desc_1_1.Flags);
                        hr = D3D12SerializeRootSignature(&desc_1_0, D3D_ROOT_SIGNATURE_VERSION_1, ppBlob, ppErrorBlob);
                    }

                    if (pParameters)
                    {
                        for (UINT n = 0; n < desc_1_1.NumParameters; n++)
                        {
                            if (desc_1_1.pParameters[n].ParameterType == D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE)
                            {
                                HeapFree(GetProcessHeap(), 0, reinterpret_cast<void*>(const_cast<D3D12_DESCRIPTOR_RANGE*>(pParameters_1_0[n].DescriptorTable.pDescriptorRanges)));
                            }
                        }
                        HeapFree(GetProcessHeap(), 0, pParameters);
                    }
                    return hr;
                }
            }
            break;

        case D3D_ROOT_SIGNATURE_VERSION_1_1:
            return D3D12SerializeVersionedRootSignature(pRootSignatureDesc, ppBlob, ppErrorBlob);
    }

    return E_INVALIDARG;
}

//------------------------------------------------------------------------------------------------
struct CD3DX12_RT_FORMAT_ARRAY : public D3D12_RT_FORMAT_ARRAY
{
    CD3DX12_RT_FORMAT_ARRAY() {}
    explicit CD3DX12_RT_FORMAT_ARRAY(const D3D12_RT_FORMAT_ARRAY& o)
        : D3D12_RT_FORMAT_ARRAY(o)
    {}
    explicit CD3DX12_RT_FORMAT_ARRAY(const DXGI_FORMAT* pFormats, UINT NumFormats)
    {
        NumRenderTargets = NumFormats;
        memcpy(RTFormats, pFormats, sizeof(RTFormats));
        // assumes ARRAY_SIZE(pFormats) == ARRAY_SIZE(RTFormats)
    }
    operator const D3D12_RT_FORMAT_ARRAY&() const { return *this; }
};

//------------------------------------------------------------------------------------------------
// Pipeline State Stream Helpers
//------------------------------------------------------------------------------------------------

//------------------------------------------------------------------------------------------------
// Stream Subobjects, i.e. elements of a stream

template <typename InnerStructType, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE Type, typename DefaultArg = InnerStructType>
class alignas(void*) CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT
{
private:
    D3D12_PIPELINE_STATE_SUBOBJECT_TYPE _Type;
    InnerStructType _Inner;
public:
    CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT() : _Type(Type), _Inner(DefaultArg()) {}
    CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT(InnerStructType const& i) : _Type(Type), _Inner(i) {}
    CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT& operator=(InnerStructType const& i) { _Inner = i; return *this; }
    operator InnerStructType() const { return _Inner; }
};
typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_PIPELINE_STATE_FLAGS,         D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_FLAGS>                           CD3DX12_PIPELINE_STATE_STREAM_FLAGS;
typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< UINT,                               D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_NODE_MASK>                       CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK;
typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< ID3D12RootSignature*,               D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_ROOT_SIGNATURE>                  CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE;
typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_INPUT_LAYOUT_DESC,            D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_INPUT_LAYOUT>                    CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT;
typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_INDEX_BUFFER_STRIP_CUT_VALUE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_IB_STRIP_CUT_VALUE>              CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE;
typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_PRIMITIVE_TOPOLOGY_TYPE,      D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY>              CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY;
typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE,              D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VS>                              CD3DX12_PIPELINE_STATE_STREAM_VS;
typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE,              D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_GS>                              CD3DX12_PIPELINE_STATE_STREAM_GS;
typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_STREAM_OUTPUT_DESC,           D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_STREAM_OUTPUT>                   CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT;
typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE,              D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_HS>                              CD3DX12_PIPELINE_STATE_STREAM_HS;
typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE,              D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DS>                              CD3DX12_PIPELINE_STATE_STREAM_DS;
typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE,              D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PS>                              CD3DX12_PIPELINE_STATE_STREAM_PS;
typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE,              D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CS>                              CD3DX12_PIPELINE_STATE_STREAM_CS;
typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_BLEND_DESC,                 D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_BLEND,          CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC;
typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_DEPTH_STENCIL_DESC,         D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL,  CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL;
typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_DEPTH_STENCIL_DESC1,        D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL1;
typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< DXGI_FORMAT,                        D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL_FORMAT>            CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT;
typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_RASTERIZER_DESC,            D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER,     CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER;
typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_RT_FORMAT_ARRAY,              D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RENDER_TARGET_FORMATS>           CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS;
typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< DXGI_SAMPLE_DESC,                   D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_DESC>                     CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC;
typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< UINT,                               D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_MASK>                     CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK;
typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_CACHED_PIPELINE_STATE,        D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CACHED_PSO>                      CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO;

//------------------------------------------------------------------------------------------------
// Stream Parser Helpers

struct ID3DX12PipelineParserCallbacks
{
    // Subobject Callbacks
    virtual void FlagsCb(D3D12_PIPELINE_STATE_FLAGS) {}
    virtual void NodeMaskCb(UINT) {}
    virtual void RootSignatureCb(ID3D12RootSignature*) {}
    virtual void InputLayoutCb(const D3D12_INPUT_LAYOUT_DESC&) {}
    virtual void IBStripCutValueCb(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE) {}
    virtual void PrimitiveTopologyTypeCb(D3D12_PRIMITIVE_TOPOLOGY_TYPE) {}
    virtual void VSCb(const D3D12_SHADER_BYTECODE&) {}
    virtual void GSCb(const D3D12_SHADER_BYTECODE&) {}
    virtual void StreamOutputCb(const D3D12_STREAM_OUTPUT_DESC&) {}
    virtual void HSCb(const D3D12_SHADER_BYTECODE&) {}
    virtual void DSCb(const D3D12_SHADER_BYTECODE&) {}
    virtual void PSCb(const D3D12_SHADER_BYTECODE&) {}
    virtual void CSCb(const D3D12_SHADER_BYTECODE&) {}
    virtual void BlendStateCb(const D3D12_BLEND_DESC&) {}
    virtual void DepthStencilStateCb(const D3D12_DEPTH_STENCIL_DESC&) {}
    virtual void DepthStencilState1Cb(const D3D12_DEPTH_STENCIL_DESC1&) {}
    virtual void DSVFormatCb(DXGI_FORMAT) {}
    virtual void RasterizerStateCb(const D3D12_RASTERIZER_DESC&) {}
    virtual void RTVFormatsCb(const D3D12_RT_FORMAT_ARRAY&) {}
    virtual void SampleDescCb(const DXGI_SAMPLE_DESC&) {}
    virtual void SampleMaskCb(UINT) {}
    virtual void CachedPSOCb(const D3D12_CACHED_PIPELINE_STATE&) {}

    // Error Callbacks
    virtual void ErrorBadInputParameter(UINT /*ParameterIndex*/) {}
    virtual void ErrorDuplicateSubobject(D3D12_PIPELINE_STATE_SUBOBJECT_TYPE /*DuplicateType*/) {}
    virtual void ErrorUnknownSubobject(UINT /*UnknownTypeValue*/) {}

};

struct CD3DX12_PIPELINE_STATE_STREAM
{
    CD3DX12_PIPELINE_STATE_STREAM() {}
    CD3DX12_PIPELINE_STATE_STREAM(const D3D12_GRAPHICS_PIPELINE_STATE_DESC& Desc)
        : Flags(Desc.Flags)
        , NodeMask(Desc.NodeMask)
        , pRootSignature(Desc.pRootSignature)
        , InputLayout(Desc.InputLayout)
        , IBStripCutValue(Desc.IBStripCutValue)
        , PrimitiveTopologyType(Desc.PrimitiveTopologyType)
        , VS(Desc.VS)
        , GS(Desc.GS)
        , StreamOutput(Desc.StreamOutput)
        , HS(Desc.HS)
        , DS(Desc.DS)
        , PS(Desc.PS)
        , BlendState(CD3DX12_BLEND_DESC(Desc.BlendState))
        , DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC1(Desc.DepthStencilState))
        , DSVFormat(Desc.DSVFormat)
        , RasterizerState(CD3DX12_RASTERIZER_DESC(Desc.RasterizerState))
        , RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets))
        , SampleDesc(Desc.SampleDesc)
        , SampleMask(Desc.SampleMask)
        , CachedPSO(Desc.CachedPSO)
    {}
    CD3DX12_PIPELINE_STATE_STREAM(const D3D12_COMPUTE_PIPELINE_STATE_DESC& Desc)
        : Flags(Desc.Flags)
        , NodeMask(Desc.NodeMask)
        , pRootSignature(Desc.pRootSignature)
        , CS(CD3DX12_SHADER_BYTECODE(Desc.CS))
        , CachedPSO(Desc.CachedPSO)
    {}
    CD3DX12_PIPELINE_STATE_STREAM_FLAGS Flags;
    CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK NodeMask;
    CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE pRootSignature;
    CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT InputLayout;
    CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE IBStripCutValue;
    CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY PrimitiveTopologyType;
    CD3DX12_PIPELINE_STATE_STREAM_VS VS;
    CD3DX12_PIPELINE_STATE_STREAM_GS GS;
    CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT StreamOutput;
    CD3DX12_PIPELINE_STATE_STREAM_HS HS;
    CD3DX12_PIPELINE_STATE_STREAM_DS DS;
    CD3DX12_PIPELINE_STATE_STREAM_PS PS;
    CD3DX12_PIPELINE_STATE_STREAM_CS CS;
    CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC BlendState;
    CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL1 DepthStencilState;
    CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT DSVFormat;
    CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER RasterizerState;
    CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS RTVFormats;
    CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC SampleDesc;
    CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK SampleMask;
    CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO CachedPSO;
    D3D12_GRAPHICS_PIPELINE_STATE_DESC GraphicsDescV0() const
    {
        D3D12_GRAPHICS_PIPELINE_STATE_DESC D;
        D.Flags                 = this->Flags;
        D.NodeMask              = this->NodeMask;
        D.pRootSignature        = this->pRootSignature;
        D.InputLayout           = this->InputLayout;
        D.IBStripCutValue       = this->IBStripCutValue;
        D.PrimitiveTopologyType = this->PrimitiveTopologyType;
        D.VS                    = this->VS;
        D.GS                    = this->GS;
        D.StreamOutput          = this->StreamOutput;
        D.HS                    = this->HS;
        D.DS                    = this->DS;
        D.PS                    = this->PS;
        D.BlendState            = this->BlendState;
        D.DepthStencilState     = CD3DX12_DEPTH_STENCIL_DESC1(D3D12_DEPTH_STENCIL_DESC1(this->DepthStencilState));
        D.DSVFormat             = this->DSVFormat;
        D.RasterizerState       = this->RasterizerState;
        D.NumRenderTargets      = D3D12_RT_FORMAT_ARRAY(this->RTVFormats).NumRenderTargets;
        memcpy(D.RTVFormats, D3D12_RT_FORMAT_ARRAY(this->RTVFormats).RTFormats, sizeof(D.RTVFormats));
        D.SampleDesc            = this->SampleDesc;
        D.SampleMask            = this->SampleMask;
        D.CachedPSO             = this->CachedPSO;
        return D;
    }
    D3D12_COMPUTE_PIPELINE_STATE_DESC ComputeDescV0() const
    {
        D3D12_COMPUTE_PIPELINE_STATE_DESC D;
        D.Flags                 = this->Flags;
        D.NodeMask              = this->NodeMask;
        D.pRootSignature        = this->pRootSignature;
        D.CS                    = this->CS;
        D.CachedPSO             = this->CachedPSO;
        return D;
    }
};

struct CD3DX12_PIPELINE_STATE_STREAM_PARSE_HELPER : public ID3DX12PipelineParserCallbacks
{
    CD3DX12_PIPELINE_STATE_STREAM PipelineStream;

    // ID3DX12PipelineParserCallbacks
    void FlagsCb(D3D12_PIPELINE_STATE_FLAGS Flags) {PipelineStream.Flags = Flags;}
    void NodeMaskCb(UINT NodeMask) {PipelineStream.NodeMask = NodeMask;}
    void RootSignatureCb(ID3D12RootSignature* pRootSignature) {PipelineStream.pRootSignature = pRootSignature;}
    void InputLayoutCb(const D3D12_INPUT_LAYOUT_DESC& InputLayout) {PipelineStream.InputLayout = InputLayout;}
    void IBStripCutValueCb(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue) {PipelineStream.IBStripCutValue = IBStripCutValue;}
    void PrimitiveTopologyTypeCb(D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType) {PipelineStream.PrimitiveTopologyType = PrimitiveTopologyType;}
    void VSCb(const D3D12_SHADER_BYTECODE& VS) {PipelineStream.VS = VS;}
    void GSCb(const D3D12_SHADER_BYTECODE& GS) {PipelineStream.GS = GS;}
    void StreamOutputCb(const D3D12_STREAM_OUTPUT_DESC& StreamOutput) {PipelineStream.StreamOutput = StreamOutput;}
    void HSCb(const D3D12_SHADER_BYTECODE& HS) {PipelineStream.HS = HS;}
    void DSCb(const D3D12_SHADER_BYTECODE& DS) {PipelineStream.DS = DS;}
    void PSCb(const D3D12_SHADER_BYTECODE& PS) {PipelineStream.PS = PS;}
    void CSCb(const D3D12_SHADER_BYTECODE& CS) {PipelineStream.CS = CS;}
    void BlendStateCb(const D3D12_BLEND_DESC& BlendState) {PipelineStream.BlendState = CD3DX12_BLEND_DESC(BlendState);}
    void DepthStencilStateCb(const D3D12_DEPTH_STENCIL_DESC& DepthStencilState) {PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(DepthStencilState);}
    void DepthStencilState1Cb(const D3D12_DEPTH_STENCIL_DESC1& DepthStencilState) {PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(DepthStencilState);}
    void DSVFormatCb(DXGI_FORMAT DSVFormat) {PipelineStream.DSVFormat = DSVFormat;}
    void RasterizerStateCb(const D3D12_RASTERIZER_DESC& RasterizerState) {PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC(RasterizerState);}
    void RTVFormatsCb(const D3D12_RT_FORMAT_ARRAY& RTVFormats) {PipelineStream.RTVFormats = RTVFormats;}
    void SampleDescCb(const DXGI_SAMPLE_DESC& SampleDesc) {PipelineStream.SampleDesc = SampleDesc;}
    void SampleMaskCb(UINT SampleMask) {PipelineStream.SampleMask = SampleMask;}
    void CachedPSOCb(const D3D12_CACHED_PIPELINE_STATE& CachedPSO) {PipelineStream.CachedPSO = CachedPSO;}
    void ErrorBadInputParameter(UINT) {}
    void ErrorDuplicateSubobject(D3D12_PIPELINE_STATE_SUBOBJECT_TYPE) {}
    void ErrorUnknownSubobject(UINT) {}
};

inline D3D12_PIPELINE_STATE_SUBOBJECT_TYPE D3DX12GetBaseSubobjectType(D3D12_PIPELINE_STATE_SUBOBJECT_TYPE SubobjectType)
{
    switch (SubobjectType)
    {
    case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1: 
        return D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL;
    default:
        return SubobjectType;
    }
}

inline HRESULT D3DX12ParsePipelineStream(const D3D12_PIPELINE_STATE_STREAM_DESC& Desc, ID3DX12PipelineParserCallbacks* pCallbacks)
{
    if (Desc.SizeInBytes == 0 || Desc.pPipelineStateSubobjectStream == nullptr)
    {
        pCallbacks->ErrorBadInputParameter(1); // first parameter issue
        return E_INVALIDARG;
    }

    if (pCallbacks == nullptr)
    {
        pCallbacks->ErrorBadInputParameter(2); // second parameter issue
        return E_INVALIDARG;
    }

    bool SubobjectSeen[D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MAX_VALID] = {0};
    for (SIZE_T CurOffset = 0, SizeOfSubobject = 0; CurOffset < Desc.SizeInBytes; CurOffset += SizeOfSubobject)
    {
        BYTE* pStream = static_cast<BYTE*>(Desc.pPipelineStateSubobjectStream)+CurOffset;
        auto SubobjectType = *reinterpret_cast<D3D12_PIPELINE_STATE_SUBOBJECT_TYPE*>(pStream);
        if (SubobjectType >= D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MAX_VALID)
        {
            pCallbacks->ErrorUnknownSubobject(SubobjectType);
            return E_INVALIDARG;
        }
        if (SubobjectSeen[D3DX12GetBaseSubobjectType(SubobjectType)])
        {
            pCallbacks->ErrorDuplicateSubobject(SubobjectType);
            return E_INVALIDARG; // disallow subobject duplicates in a stream
        }
        SubobjectSeen[SubobjectType] = true;
        switch (SubobjectType)
        {
        case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_ROOT_SIGNATURE: 
            pCallbacks->RootSignatureCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::pRootSignature)*>(pStream));
            SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::pRootSignature);
            break;
        case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VS:
            pCallbacks->VSCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::VS)*>(pStream));
            SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::VS);
            break;
        case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PS: 
            pCallbacks->PSCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::PS)*>(pStream));
            SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::PS);
            break;
        case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DS: 
            pCallbacks->DSCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::DS)*>(pStream));
            SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::DS);
            break;
        case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_HS: 
            pCallbacks->HSCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::HS)*>(pStream));
            SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::HS);
            break;
        case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_GS: 
            pCallbacks->GSCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::GS)*>(pStream));
            SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::GS);
            break;
        case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CS:
            pCallbacks->CSCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::CS)*>(pStream));
            SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::CS);
            break;
        case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_STREAM_OUTPUT: 
            pCallbacks->StreamOutputCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::StreamOutput)*>(pStream));
            SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::StreamOutput);
            break;
        case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_BLEND: 
            pCallbacks->BlendStateCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::BlendState)*>(pStream));
            SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::BlendState);
            break;
        case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_MASK: 
            pCallbacks->SampleMaskCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::SampleMask)*>(pStream));
            SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::SampleMask);
            break;
        case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER: 
            pCallbacks->RasterizerStateCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::RasterizerState)*>(pStream));
            SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::RasterizerState);
            break;
        case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL: 
            pCallbacks->DepthStencilStateCb(*reinterpret_cast<CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL*>(pStream));
            SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL);
            break;
        case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1: 
            pCallbacks->DepthStencilState1Cb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::DepthStencilState)*>(pStream));
            SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::DepthStencilState);
            break;
        case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_INPUT_LAYOUT: 
            pCallbacks->InputLayoutCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::InputLayout)*>(pStream));
            SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::InputLayout);
            break;
        case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_IB_STRIP_CUT_VALUE: 
            pCallbacks->IBStripCutValueCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::IBStripCutValue)*>(pStream));
            SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::IBStripCutValue);
            break;
        case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY: 
            pCallbacks->PrimitiveTopologyTypeCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::PrimitiveTopologyType)*>(pStream));
            SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::PrimitiveTopologyType);
            break;
        case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RENDER_TARGET_FORMATS: 
            pCallbacks->RTVFormatsCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::RTVFormats)*>(pStream));
            SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::RTVFormats);
            break;
        case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL_FORMAT: 
            pCallbacks->DSVFormatCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::DSVFormat)*>(pStream));
            SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::DSVFormat);
            break;
        case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_DESC: 
            pCallbacks->SampleDescCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::SampleDesc)*>(pStream));
            SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::SampleDesc);
            break;
        case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_NODE_MASK: 
            pCallbacks->NodeMaskCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::NodeMask)*>(pStream));
            SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::NodeMask);
            break;
        case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CACHED_PSO: 
            pCallbacks->CachedPSOCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::CachedPSO)*>(pStream));
            SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::CachedPSO);
            break;
        case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_FLAGS:
            pCallbacks->FlagsCb(*reinterpret_cast<decltype(CD3DX12_PIPELINE_STATE_STREAM::Flags)*>(pStream));
            SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::Flags);
            break;
        default:
            pCallbacks->ErrorUnknownSubobject(SubobjectType);
            return E_INVALIDARG;
            break;
        }
    }

    return S_OK;
}


#endif // defined( __cplusplus )

#endif //__D3DX12_H__





================================================
FILE: Libraries/D3DX12/readme.md
================================================
# The D3D12 Helper Library

This library provides helper functions and structs to make certain common operations less verbose in your code.

Documentation of the helper functions and structures can he found on [MSDN](https://msdn.microsoft.com/en-us/library/windows/desktop/dn708058(v=vs.85).aspx)

Note that Windows 10 Creator Update and Visual Studio 2017 are required for the latest version of D3D12 Helper Library. Visual Studio 2015 compatible version can be found from https://github.com/Microsoft/DirectX-Graphics-Samples/releases/tag/v10.0.14393.4.


================================================
FILE: Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityCommandAllocator.cpp
================================================
//*********************************************************
//
// Copyright (c) Microsoft. All rights reserved.
// This code is licensed under the MIT License (MIT).
// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
//
//*********************************************************

#include "d3dx12affinity.h"

CD3DX12AffinityCommandAllocator::CD3DX12AffinityCommandAllocator(CD3DX12AffinityDevice* device, ID3D12CommandAllocator** commandAllocators, UINT Count, bool UseDeviceActiveMaskOnReset)
    : CD3DX12AffinityPageable(device, reinterpret_cast<ID3D12Pageable**>(commandAllocators), Count)
    , mUseDeviceActiveMaskOnReset(UseDeviceActiveMaskOnReset)
{
    for (UINT i = 0; i < D3DX12_MAX_ACTIVE_NODES; i++)
    {
        if (i < Count)
        {
            mCommandAllocators[i] = commandAllocators[i];
        }
        else
        {
            mCommandAllocators[i] = nullptr;
        }
    }
#ifdef DEBUG_OBJECT_NAME
    mObjectTypeName = L"CommandAllocator";
#endif

#if !ALWAYS_RESET_ALL_COMMAND_LISTS
    if (UseDeviceActiveMaskOnReset)
    {
        SetAffinity(1 << GetActiveNodeIndex());
    }
#endif
}

HRESULT CD3DX12AffinityCommandAllocator::Reset(void)
{
#if !ALWAYS_RESET_ALL_COMMAND_LISTS
    if (mUseDeviceActiveMaskOnReset)
    {
        SetAffinity(1 << GetActiveNodeIndex());
    }
#endif

    for (UINT i = 0; i < D3DX12_MAX_ACTIVE_NODES;i++)
    {
        if (((1 << i) & mAffinityMask) != 0)
        {
            ID3D12CommandAllocator* Allocator = mCommandAllocators[i];
            HRESULT const hr = Allocator->Reset();

            if (S_OK != hr)
            {
                return hr;
            }
        }
    }

    return S_OK;
}

ID3D12CommandAllocator* CD3DX12AffinityCommandAllocator::GetChildObject(UINT AffinityIndex)
{
    return mCommandAllocators[AffinityIndex];
}


================================================
FILE: Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityCommandAllocator.h
================================================
//*********************************************************
//
// Copyright (c) Microsoft. All rights reserved.
// This code is licensed under the MIT License (MIT).
// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
//
//*********************************************************

#pragma once

#include "Utils.h"
#include "CD3DX12AffinityPageable.h"

class __declspec(uuid("BE1D71C8-88FD-4623-ABFA-D0E546D12FAF")) CD3DX12AffinityCommandAllocator : public CD3DX12AffinityPageable
{
public:
    CD3DX12AffinityCommandAllocator(CD3DX12AffinityDevice* device, ID3D12CommandAllocator** commandAllocators, UINT Count, bool UseDeviceActiveMaskOnReset);

    HRESULT STDMETHODCALLTYPE Reset(void);
    ID3D12CommandAllocator* GetChildObject(UINT AffinityIndex);

private:
    ID3D12CommandAllocator* mCommandAllocators[D3DX12_MAX_ACTIVE_NODES];
    bool mUseDeviceActiveMaskOnReset;
};


================================================
FILE: Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityCommandList.cpp
================================================
//*********************************************************
//
// Copyright (c) Microsoft. All rights reserved.
// This code is licensed under the MIT License (MIT).
// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
//
//*********************************************************

#include "d3dx12affinity.h"
#include "Utils.h"

CD3DX12AffinityCommandList::CD3DX12AffinityCommandList(CD3DX12AffinityDevice* device, ID3D12CommandList** commandLists, UINT Count)
    : CD3DX12AffinityDeviceChild(device, reinterpret_cast<ID3D12DeviceChild**>(commandLists), Count)
{
    for (UINT i = 0; i < D3DX12_MAX_ACTIVE_NODES; i++)
    {
        if (i < Count)
        {
            mCommandLists[i] = commandLists[i];
        }
        else
        {
            mCommandLists[i] = nullptr;
        }
    }
#ifdef DEBUG_OBJECT_NAME
    mObjectTypeName = L"CommandList";
#endif
}

D3D12_COMMAND_LIST_TYPE STDMETHODCALLTYPE CD3DX12AffinityCommandList::GetType(UINT AffinityIndex)
{
    return mCommandLists[AffinityIndex]->GetType();
}

BOOL STDMETHODCALLTYPE CD3DX12AffinityCommandList::AssertResourceState(
    CD3DX12AffinityResource* pResource,
    UINT Subresource,
    UINT State)
{
    UINT i = GetActiveNodeIndex();
    ID3D12CommandList* CommandList = mCommandLists[i];
    ID3D12DebugCommandList* DebugCommandList = nullptr;

    HRESULT const hr = CommandList->QueryInterface(IID_PPV_ARGS(&DebugCommandList));
    if (S_OK != hr)
    {
        return false;
    }

    if (false == DebugCommandList->AssertResourceState(pResource->mResources[i], Subresource, State))
    {
        return false;
    }

    return true;
}

HRESULT STDMETHODCALLTYPE CD3DX12AffinityCommandList::SetFeatureMask(
    D3D12_DEBUG_FEATURE Mask)
{
    for (UINT i = 0; i < D3DX12_MAX_ACTIVE_NODES;i++)
    {
        if (((1 << i) & mAffinityMask) != 0)
        {
            ID3D12CommandList* CommandList = mCommandLists[i];
            ID3D12DebugCommandList* DebugCommandList = nullptr;

            HRESULT hr = CommandList->QueryInterface(IID_PPV_ARGS(&DebugCommandList));
            if (S_OK != hr)
            {
                return hr;
            }

            hr = DebugCommandList->SetFeatureMask(Mask);

            if (S_OK != hr)
            {
                return hr;
            }
        }
    }

    return S_OK;
}

ID3D12CommandList* CD3DX12AffinityCommandList::GetChildObject(UINT AffinityIndex)
{
    return mCommandLists[AffinityIndex];
}

bool CD3DX12AffinityCommandList::IsReady()
{
    return mPendingBroadcast == 0;
}

void CD3DX12AffinityCommandList::RegisterPendingBroadcast()
{
    std::lock_guard<std::mutex> lock(mMutexPendingBroadcast);
    mPendingBroadcast++;
}

void CD3DX12AffinityCommandList::UnRegisterPendingBroadcast()
{
    std::lock_guard<std::mutex> lock(mMutexPendingBroadcast);
    mPendingBroadcast--;
}


================================================
FILE: Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityCommandList.h
================================================
//*********************************************************
//
// Copyright (c) Microsoft. All rights reserved.
// This code is licensed under the MIT License (MIT).
// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
//
//*********************************************************

#pragma once

#include "Utils.h"
#include "CD3DX12AffinityDeviceChild.h"

class __declspec(uuid("BE1D71C8-88FD-4623-ABFA-D0E546D12FAF")) CD3DX12AffinityCommandList : public CD3DX12AffinityDeviceChild
{
public:
    CD3DX12AffinityCommandList(CD3DX12AffinityDevice* device, ID3D12CommandList** commandLists, UINT Count);

    D3D12_COMMAND_LIST_TYPE STDMETHODCALLTYPE GetType(UINT AffinityIndex = 0);

    BOOL STDMETHODCALLTYPE AssertResourceState(
        _In_  CD3DX12AffinityResource* pResource,
        UINT Subresource,
        UINT State);

    HRESULT STDMETHODCALLTYPE SetFeatureMask(
        D3D12_DEBUG_FEATURE Mask);

    ID3D12CommandList* GetChildObject(UINT AffinityIndex);

    bool IsReady();
    void RegisterPendingBroadcast();
    void UnRegisterPendingBroadcast();

private:
    ID3D12CommandList* mCommandLists[D3DX12_MAX_ACTIVE_NODES];
    std::mutex mMutexPendingBroadcast;
    UINT mPendingBroadcast = 0;
};


================================================
FILE: Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityCommandQueue.cpp
================================================
//*********************************************************
//
// Copyright (c) Microsoft. All rights reserved.
// This code is licensed under the MIT License (MIT).
// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
//
//*********************************************************

#include "d3dx12affinity.h"
#include "Utils.h"

void STDMETHODCALLTYPE CD3DX12AffinityCommandQueue::UpdateTileMappings(
    CD3DX12AffinityResource* pResource,
    UINT NumResourceRegions,
    const D3D12_TILED_RESOURCE_COORDINATE* pResourceRegionStartCoordinates,
    const D3D12_TILE_REGION_SIZE* pResourceRegionSizes,
    CD3DX12AffinityHeap* pHeap,
    UINT NumRanges,
    const D3D12_TILE_RANGE_FLAGS* pRangeFlags,
    const UINT* pHeapRangeStartOffsets,
    const UINT* pRangeTileCounts,
    D3D12_TILE_MAPPING_FLAGS Flags,
    UINT AffinityMask)
{
    UINT ActiveNodeIndex = GetActiveNodeIndex();
    UINT EffectiveAffinityMask = (AffinityMask == 0) ? GetNodeMask() : AffinityMask & GetNodeMask();

    for (UINT i = 0; i < D3DX12_MAX_ACTIVE_NODES;i++)
    {
        if (((1 << i) & EffectiveAffinityMask) != 0)
        {
            {
                ID3D12CommandQueue* Queue = mCommandQueues[i];

                Queue->UpdateTileMappings(
                    pResource->mResources[i],
                    NumResourceRegions,
                    pResourceRegionStartCoordinates,
                    pResourceRegionSizes,
                    pHeap->GetChildObject(i),
                    NumRanges,
                    pRangeFlags,
                    pHeapRangeStartOffsets,
                    pRangeTileCounts,
                    Flags);
            }
        }
    }
}

void STDMETHODCALLTYPE CD3DX12AffinityCommandQueue::CopyTileMappings(
    CD3DX12AffinityResource* pDstResource,
    const D3D12_TILED_RESOURCE_COORDINATE* pDstRegionStartCoordinate,
    CD3DX12AffinityResource* pSrcResource,
    const D3D12_TILED_RESOURCE_COORDINATE* pSrcRegionStartCoordinate,
    const D3D12_TILE_REGION_SIZE* pRegionSize,
    D3D12_TILE_MAPPING_FLAGS Flags,
    UINT AffinityMask)
{
    UINT EffectiveAffinityMask = (AffinityMask == 0) ? GetNodeMask() : AffinityMask & GetNodeMask();
    for (UINT i = 0; i < D3DX12_MAX_ACTIVE_NODES;i++)
    {
        if (((1 << i) & EffectiveAffinityMask) != 0)
        {
            ID3D12CommandQueue* Queue = mCommandQueues[i];

            Queue->CopyTileMappings(
                pDstResource->mResources[i],
                pDstRegionStartCoordinate,
                pSrcResource->mResources[i],
                pSrcRegionStartCoordinate,
                pRegionSize,
                Flags);
        }
    }
}

void STDMETHODCALLTYPE CD3DX12AffinityCommandQueue::ExecuteCommandLists(
    UINT NumCommandLists,
    CD3DX12AffinityCommandList* const* ppCommandLists,
    UINT AffinityMask)
{
    std::vector<ID3D12CommandList*> mCachedCommandLists;
    mCachedCommandLists.resize(NumCommandLists);
    UINT ActiveNodeIndex = GetActiveNodeIndex();
    UINT EffectiveAffinityMask = (AffinityMask == 0) ? GetNodeMask() : AffinityMask & GetNodeMask();

    for (UINT i = 0; i < D3DX12_MAX_ACTIVE_NODES;i++)
    {
        if (((1 << i) & EffectiveAffinityMask) != 0)
        {
            {
                ID3D12CommandQueue* Queue = mCommandQueues[i];

                UINT index = 0;
                for (UINT c = 0; c < NumCommandLists; ++c)
                {
                    CD3DX12AffinityGraphicsCommandList* AffinityCommandList = static_cast<CD3DX12AffinityGraphicsCommandList*>(ppCommandLists[c]);
                    if (AffinityCommandList->GetActiveAffinityMask() & (1 << i))
                    {
                        mCachedCommandLists[index++] = AffinityCommandList->GetChildObject(i);
                    }
                }

                Queue->ExecuteCommandLists(index, mCachedCommandLists.data());

#ifdef SERIALIZE_COMMNANDLIST_EXECUTION
                ID3D12Fence* pFence;
                GetParentDevice()->mDevices[0]->CreateFence(0, D3D12_FENCE_FLAG_NONE, IID_PPV_ARGS(&pFence));
                Queue->Signal(pFence, 1);
                HANDLE hEvent = CreateEvent(nullptr, FALSE, FALSE, nullptr);
                pFence->SetEventOnCompletion(1, hEvent);
                WaitForSingleObject(hEvent, INFINITE);
                CloseHandle(hEvent);
                pFence->Release();
                if (FAILED(GetParentDevice()->mDevices[0]->GetDeviceRemovedReason()))
                {
                    __debugbreak();
                }
#endif
            }
        }
    }
    ReleaseLog(L"D3DX12AffinityLayer: [event] ExecuteCommandLists\n");
}

void STDMETHODCALLTYPE CD3DX12AffinityCommandQueue::SetMarker(
    UINT Metadata,
    const void* pData,
    UINT Size,
    UINT AffinityMask)
{
    UINT i = GetActiveNodeIndex();
    {
        ID3D12CommandQueue* Queue = mCommandQueues[i];

        Queue->SetMarker(Metadata, pData, Size);
    }
}

void STDMETHODCALLTYPE CD3DX12AffinityCommandQueue::BeginEvent(
    UINT Metadata,
    const void* pData,
    UINT Size,
    UINT AffinityMask)
{
    UINT i = GetActiveNodeIndex();
    {
        ID3D12CommandQueue* Queue = mCommandQueues[i];

        Queue->BeginEvent(Metadata, pData, Size);
    }
}

void STDMETHODCALLTYPE CD3DX12AffinityCommandQueue::EndEvent(UINT AffinityMask)
{
    UINT i = GetActiveNodeIndex();
    {
        ID3D12CommandQueue* Queue = mCommandQueues[i];

        Queue->EndEvent();
    }
}

HRESULT STDMETHODCALLTYPE CD3DX12AffinityCommandQueue::Signal(
    CD3DX12AffinityFence* pFence,
    UINT64 Value,
    UINT AffinityMask)
{
    UINT ActiveNodeIndex = GetActiveNodeIndex();
    UINT EffectiveAffinityMask = (AffinityMask == 0) ? GetNodeMask() : AffinityMask & GetNodeMask();
    for (UINT i = 0; i < D3DX12_MAX_ACTIVE_NODES;i++)
    {
        if (((1 << i) & EffectiveAffinityMask) != 0)
        {
            {
                ID3D12CommandQueue* Queue = mCommandQueues[i];

                HRESULT const hr = Queue->Signal(pFence->mFences[i], Value);

                if (hr != S_OK)
                {
                    return hr;
                }
            }
        }
    }
    return S_OK;
}

HRESULT STDMETHODCALLTYPE CD3DX12AffinityCommandQueue::Wait(
    CD3DX12AffinityFence* pFence,
    UINT64 Value,
    bool UseActiveQueueOnly,
    UINT AffinityMask)
{
    UINT ActiveNodeIndex = GetActiveNodeIndex();
    UINT EffectiveAffinityMask = (AffinityMask == 0) ? GetNodeMask() : AffinityMask & GetNodeMask();
    for (UINT i = 0; i < D3DX12_MAX_ACTIVE_NODES;i++)
    {
        if (((1 << i) & EffectiveAffinityMask) != 0)
        {
            ID3D12CommandQueue* Queue = UseActiveQueueOnly ? mCommandQueues[ActiveNodeIndex] : mCommandQueues[i];

            HRESULT const hr = Queue->Wait(pFence->mFences[i], Value);

            if (hr != S_OK)
            {
                return hr;
            }
        }
    }
    return S_OK;
}

HRESULT STDMETHODCALLTYPE CD3DX12AffinityCommandQueue::GetTimestampFrequency(
    UINT64* pFrequency,
    UINT AffinityIndex)
{
    return mCommandQueues[AffinityIndex]->GetTimestampFrequency(pFrequency);
}

HRESULT STDMETHODCALLTYPE CD3DX12AffinityCommandQueue::GetClockCalibration(
    UINT64* pGpuTimestamp,
    UINT64* pCpuTimestamp,
    UINT AffinityIndex)
{
    return mCommandQueues[AffinityIndex]->GetClockCalibration(pGpuTimestamp, pCpuTimestamp);
}

D3D12_COMMAND_QUEUE_DESC STDMETHODCALLTYPE CD3DX12AffinityCommandQueue::GetDesc(UINT AffinityIndex)
{
    return mCommandQueues[AffinityIndex]->GetDesc();
}

ID3D12CommandQueue* CD3DX12AffinityCommandQueue::GetQueueForSwapChainCreation(UINT AffinityIndex)
{
    return mCommandQueues[AffinityIndex];
}

CD3DX12AffinityCommandQueue::CD3DX12AffinityCommandQueue(CD3DX12AffinityDevice* device, ID3D12CommandQueue** commandQueues, UINT Count)
    : CD3DX12AffinityPageable(device, reinterpret_cast<ID3D12Pageable**>(commandQueues), Count)
{
    for (UINT i = 0; i < D3DX12_MAX_ACTIVE_NODES; i++)
    {
        if (i < Count)
        {
            mCommandQueues[i] = commandQueues[i];
        }
        else
        {
            mCommandQueues[i] = nullptr;
        }
    }
#ifdef DEBUG_OBJECT_NAME
    mObjectTypeName = L"CommandQueue";
#endif
}

ID3D12CommandQueue* CD3DX12AffinityCommandQueue::GetChildObject(UINT AffinityIndex)
{
    return mCommandQueues[AffinityIndex];
}

void CD3DX12AffinityCommandQueue::WaitForCompletion(UINT AffinityMask)
{
    // Very inefficient. Should be used very sparingly.
    UINT EffectiveAffinityMask = (AffinityMask == 0) ? GetNodeMask() : AffinityMask & GetNodeMask();
    for (UINT i = 0; i < D3DX12_MAX_ACTIVE_NODES;i++)
    {
        if (((1 << i) & EffectiveAffinityMask) != 0)
        {
            ID3D12Fence* pFence;
            ID3D12Device* pDevice = GetParentDevice()->GetAffinityMode() == EAffinityMode::LDA ?
                GetParentDevice()->GetChildObject(0) : GetParentDevice()->GetChildObject(i);
            pDevice->CreateFence(0, D3D12_FENCE_FLAG_NONE, IID_PPV_ARGS(&pFence));
            mCommandQueues[i]->Signal(pFence, 1);
            HANDLE hEvent = CreateEvent(nullptr, FALSE, FALSE, nullptr);
            pFence->SetEventOnCompletion(1, hEvent);
            WaitForSingleObject(hEvent, INFINITE);
            CloseHandle(hEvent);
            pFence->Release();
            if (FAILED(pDevice->GetDeviceRemovedReason()))
            {
                __debugbreak();
            }
        }
    }
}


================================================
FILE: Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityCommandQueue.h
================================================
//*********************************************************
//
// Copyright (c) Microsoft. All rights reserved.
// This code is licensed under the MIT License (MIT).
// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
//
//*********************************************************

#pragma once

#include "Utils.h"
#include "CD3DX12AffinityPageable.h"

class __declspec(uuid("BE1D71C8-88FD-4623-ABFA-D0E546D12FAF")) CD3DX12AffinityCommandQueue : public CD3DX12AffinityPageable
{
public:
    void STDMETHODCALLTYPE UpdateTileMappings(
        _In_  CD3DX12AffinityResource* pResource,
        UINT NumResourceRegions,
        _In_reads_opt_(NumResourceRegions)  const D3D12_TILED_RESOURCE_COORDINATE* pResourceRegionStartCoordinates,
        _In_reads_opt_(NumResourceRegions)  const D3D12_TILE_REGION_SIZE* pResourceRegionSizes,
        _In_opt_  CD3DX12AffinityHeap* pHeap,
        UINT NumRanges,
        _In_reads_opt_(NumRanges)  const D3D12_TILE_RANGE_FLAGS* pRangeFlags,
        _In_reads_opt_(NumRanges)  const UINT* pHeapRangeStartOffsets,
        _In_reads_opt_(NumRanges)  const UINT* pRangeTileCounts,
        D3D12_TILE_MAPPING_FLAGS Flags,
        _In_opt_  UINT AffinityMask = EAffinityMask::AllNodes);

    void STDMETHODCALLTYPE CopyTileMappings(
        _In_  CD3DX12AffinityResource* pDstResource,
        _In_  const D3D12_TILED_RESOURCE_COORDINATE* pDstRegionStartCoordinate,
        _In_  CD3DX12AffinityResource* pSrcResource,
        _In_  const D3D12_TILED_RESOURCE_COORDINATE* pSrcRegionStartCoordinate,
        _In_  const D3D12_TILE_REGION_SIZE* pRegionSize,
        D3D12_TILE_MAPPING_FLAGS Flags,
        _In_opt_  UINT AffinityMask = EAffinityMask::AllNodes);

    void STDMETHODCALLTYPE ExecuteCommandLists(
        _In_  UINT NumCommandLists,
        _In_reads_(NumCommandLists)  CD3DX12AffinityCommandList* const* ppCommandLists,
        _In_opt_  UINT AffinityMask = EAffinityMask::AllNodes);

    void STDMETHODCALLTYPE SetMarker(
        UINT Metadata,
        _In_reads_bytes_opt_(Size)  const void* pData,
        UINT Size,
        _In_opt_  UINT AffinityMask = EAffinityMask::AllNodes);

    void STDMETHODCALLTYPE BeginEvent(
        UINT Metadata,
        _In_reads_bytes_opt_(Size)  const void* pData,
        UINT Size,
        _In_opt_  UINT AffinityMask = EAffinityMask::AllNodes);

    void STDMETHODCALLTYPE EndEvent(_In_opt_  UINT AffinityMask = EAffinityMask::AllNodes);

    HRESULT STDMETHODCALLTYPE Signal(
        CD3DX12AffinityFence* pFence,
        UINT64 Value,
        _In_opt_  UINT AffinityMask = EAffinityMask::AllNodes);

    HRESULT STDMETHODCALLTYPE Wait(
        CD3DX12AffinityFence* pFence,
        UINT64 Value,
        bool UseActiveQueueOnly = false,
        _In_opt_  UINT AffinityMask = EAffinityMask::AllNodes);

    HRESULT STDMETHODCALLTYPE GetTimestampFrequency(
        _Out_  UINT64* pFrequency,
        UINT AffinityIndex = 0);

    HRESULT STDMETHODCALLTYPE GetClockCalibration(
        _Out_  UINT64* pGpuTimestamp,
        _Out_  UINT64* pCpuTimestamp,
        UINT AffinityIndex = 0);

    D3D12_COMMAND_QUEUE_DESC STDMETHODCALLTYPE GetDesc(UINT AffinityIndex = 0);

    ID3D12CommandQueue* GetQueueForSwapChainCreation(UINT AffinityIndex);
    ID3D12CommandQueue* GetChildObject(UINT AffinityIndex);
    void WaitForCompletion(UINT AffinityMask = EAffinityMask::AllNodes);

    CD3DX12AffinityCommandQueue(CD3DX12AffinityDevice* device, ID3D12CommandQueue** commandQueues, UINT Count);

private:
    std::vector<ID3D12CommandList*> mCachedCommandLists;
    ID3D12CommandQueue* mCommandQueues[D3DX12_MAX_ACTIVE_NODES];
};


================================================
FILE: Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityCommandSignature.cpp
================================================
//*********************************************************
//
// Copyright (c) Microsoft. All rights reserved.
// This code is licensed under the MIT License (MIT).
// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
//
//*********************************************************

#include "d3dx12affinity.h"

CD3DX12AffinityCommandSignature::CD3DX12AffinityCommandSignature(CD3DX12AffinityDevice* device, ID3D12CommandSignature** commandSignatures, UINT Count)
    : CD3DX12AffinityPageable(device, reinterpret_cast<ID3D12Pageable**>(commandSignatures), Count)
{
    for (UINT i = 0; i < D3DX12_MAX_ACTIVE_NODES; i++)
    {
        if (i < Count)
        {
            mCommandSignatures[i] = commandSignatures[i];
        }
        else
        {
            mCommandSignatures[i] = nullptr;
        }
    }
#ifdef DEBUG_OBJECT_NAME
    mObjectTypeName = L"CommandSignature";
#endif
}

ID3D12CommandSignature* CD3DX12AffinityCommandSignature::GetChildObject(UINT AffinityIndex)
{
    return mCommandSignatures[AffinityIndex];
}


================================================
FILE: Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityCommandSignature.h
================================================
//*********************************************************
//
// Copyright (c) Microsoft. All rights reserved.
// This code is licensed under the MIT License (MIT).
// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
//
//*********************************************************

#pragma once

#include "Utils.h"
#include "CD3DX12AffinityPageable.h"

class __declspec(uuid("BE1D71C8-88FD-4623-ABFA-D0E546D12FAF")) CD3DX12AffinityCommandSignature : public CD3DX12AffinityPageable
{
public:
    CD3DX12AffinityCommandSignature(CD3DX12AffinityDevice* device, ID3D12CommandSignature** commandSignatures, UINT Count);
    ID3D12CommandSignature* GetChildObject(UINT AffinityIndex);

private:
    ID3D12CommandSignature* mCommandSignatures[D3DX12_MAX_ACTIVE_NODES];
};


================================================
FILE: Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityDescriptorHeap.cpp
================================================
//*********************************************************
//
// Copyright (c) Microsoft. All rights reserved.
// This code is licensed under the MIT License (MIT).
// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
//
//*********************************************************

#include "d3dx12affinity.h"
#include "Utils.h"

D3D12_DESCRIPTOR_HEAP_DESC STDMETHODCALLTYPE CD3DX12AffinityDescriptorHeap::GetDesc(UINT AffinityIndex)
{
    return mDescriptorHeaps[AffinityIndex]->GetDesc();
}

D3D12_CPU_DESCRIPTOR_HANDLE STDMETHODCALLTYPE CD3DX12AffinityDescriptorHeap::GetCPUDescriptorHandleForHeapStart(void)
{
    if (GetNodeCount() == 1)
    {
        return mDescriptorHeaps[0]->GetCPUDescriptorHandleForHeapStart();
    }
    D3D12_CPU_DESCRIPTOR_HANDLE handle;
    handle.ptr = (SIZE_T)mCPUHeapStart;
    return handle;
}

D3D12_GPU_DESCRIPTOR_HANDLE STDMETHODCALLTYPE CD3DX12AffinityDescriptorHeap::GetGPUDescriptorHandleForHeapStart(void)
{
    if (GetNodeCount() == 1)
    {
        return mDescriptorHeaps[0]->GetGPUDescriptorHandleForHeapStart();
    }
    D3D12_GPU_DESCRIPTOR_HANDLE handle;
    handle.ptr = (SIZE_T)mGPUHeapStart;
    return handle;
}

D3D12_CPU_DESCRIPTOR_HANDLE STDMETHODCALLTYPE CD3DX12AffinityDescriptorHeap::GetActiveCPUDescriptorHandleForHeapStart(UINT AffinityIndex)
{
    return mDescriptorHeaps[AffinityIndex]->GetCPUDescriptorHandleForHeapStart();
}

D3D12_GPU_DESCRIPTOR_HANDLE STDMETHODCALLTYPE CD3DX12AffinityDescriptorHeap::GetActiveGPUDescriptorHandleForHeapStart(UINT AffinityIndex)
{
    return mDescriptorHeaps[AffinityIndex]->GetGPUDescriptorHandleForHeapStart();
}

void CD3DX12AffinityDescriptorHeap::InitDescriptorHandles(D3D12_DESCRIPTOR_HEAP_TYPE type)
{
    UINT const NodeCount = GetNodeCount();

    UINT maxindex = 0;
    for (UINT i = 0; i < NodeCount; ++i)
    {
        D3D12_CPU_DESCRIPTOR_HANDLE const CPUBase = mDescriptorHeaps[i]->GetCPUDescriptorHandleForHeapStart();
        D3D12_GPU_DESCRIPTOR_HANDLE const GPUBase = mDescriptorHeaps[i]->GetGPUDescriptorHandleForHeapStart();
        UINT HandleIncrement = 0;
        if (GetParentDevice()->GetAffinityMode() == EAffinityMode::LDA)
        {
            HandleIncrement = GetParentDevice()->GetChildObject(0)->GetDescriptorHandleIncrementSize(type);
        }
        for (UINT j = 0; j < mNumDescriptors; ++j)
        {
            mCPUHeapStart[j * NodeCount + i] = CPUBase.ptr + HandleIncrement * j;
            mGPUHeapStart[j * NodeCount + i] = GPUBase.ptr + HandleIncrement * j;
            maxindex = max(maxindex, j * NodeCount + i);
        }
    }


    DebugLog(L"Used up to index %u in heap array\n", maxindex);

    DebugLog(L"Created a descriptor heap with CPU start at 0x%IX and GPU start a 0x%IX\n", mCPUHeapStart, mGPUHeapStart);
    for (UINT i = 0; i < NodeCount; ++i)
    {
        DebugLog(L"  Device %u CPU starts at 0x%IX and GPU starts at 0x%IX\n",
            i, mDescriptorHeaps[i]->GetCPUDescriptorHandleForHeapStart().ptr, mDescriptorHeaps[i]->GetGPUDescriptorHandleForHeapStart().ptr);
    }

#ifdef D3DX_AFFINITY_ENABLE_HEAP_POINTER_VALIDATION
    // Validation
    {
        std::lock_guard<std::mutex> lock(GetParentDevice()->MutexPointerRanges);

        GetParentDevice()->CPUHeapPointerRanges.push_back(std::make_pair((SIZE_T)mCPUHeapStart, (SIZE_T)(mCPUHeapStart + mNumDescriptors * NodeCount)));
        GetParentDevice()->GPUHeapPointerRanges.push_back(std::make_pair((SIZE_T)mGPUHeapStart, (SIZE_T)(mGPUHeapStart + mNumDescriptors * NodeCount)));
    }
#endif
}

CD3DX12AffinityDescriptorHeap::CD3DX12AffinityDescriptorHeap(CD3DX12AffinityDevice* device, ID3D12DescriptorHeap** descriptorHeaps, UINT Count)
    : CD3DX12AffinityPageable(device, reinterpret_cast<ID3D12Pageable**>(descriptorHeaps), Count)
    , mCPUHeapStart(nullptr)
    , mGPUHeapStart(nullptr)
{
    for (UINT i = 0; i < D3DX12_MAX_ACTIVE_NODES; i++)
    {
        if (i < Count)
        {
            mDescriptorHeaps[i] = descriptorHeaps[i];
        }
        else
        {
            mDescriptorHeaps[i] = nullptr;
        }
    }
#ifdef DEBUG_OBJECT_NAME
    mObjectTypeName = L"DescriptorHeap";
#endif
}

CD3DX12AffinityDescriptorHeap::~CD3DX12AffinityDescriptorHeap()
{
    if (mCPUHeapStart != nullptr)
    {
        delete[] mCPUHeapStart;
    }
    if (mGPUHeapStart != nullptr)
    {
        delete[] mGPUHeapStart;
    }
}

ID3D12DescriptorHeap* CD3DX12AffinityDescriptorHeap::GetChildObject(UINT AffinityIndex)
{
    return mDescriptorHeaps[AffinityIndex];
}


================================================
FILE: Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityDescriptorHeap.h
================================================
//*********************************************************
//
// Copyright (c) Microsoft. All rights reserved.
// This code is licensed under the MIT License (MIT).
// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
//
//*********************************************************

#pragma once

#include "Utils.h"
#include "CD3DX12AffinityPageable.h"

class __declspec(uuid("BE1D71C8-88FD-4623-ABFA-D0E546D12FAF")) CD3DX12AffinityDescriptorHeap : public CD3DX12AffinityPageable
{
    friend class CD3DX12AffinityDevice;

public:
    D3D12_DESCRIPTOR_HEAP_DESC STDMETHODCALLTYPE GetDesc(UINT AffinityIndex = 0);

    D3D12_CPU_DESCRIPTOR_HANDLE STDMETHODCALLTYPE GetCPUDescriptorHandleForHeapStart(void);

    D3D12_GPU_DESCRIPTOR_HANDLE STDMETHODCALLTYPE GetGPUDescriptorHandleForHeapStart(void);

    D3D12_CPU_DESCRIPTOR_HANDLE STDMETHODCALLTYPE GetActiveCPUDescriptorHandleForHeapStart(UINT AffinityIndex);

    D3D12_GPU_DESCRIPTOR_HANDLE STDMETHODCALLTYPE GetActiveGPUDescriptorHandleForHeapStart(UINT AffinityIndex);

    void InitDescriptorHandles(D3D12_DESCRIPTOR_HEAP_TYPE type);

    CD3DX12AffinityDescriptorHeap(CD3DX12AffinityDevice* device, ID3D12DescriptorHeap** descriptorHeaps, UINT Count);
    CD3DX12AffinityDescriptorHeap::~CD3DX12AffinityDescriptorHeap();

    ID3D12DescriptorHeap* GetChildObject(UINT AffinityIndex);

private:
    UINT mNumDescriptors;
    ID3D12DescriptorHeap* mDescriptorHeaps[D3DX12_MAX_ACTIVE_NODES];
    UINT64* mCPUHeapStart;
    UINT64* mGPUHeapStart;
};


================================================
FILE: Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityDevice.cpp
================================================
//*********************************************************
//
// Copyright (c) Microsoft. All rights reserved.
// This code is licensed under the MIT License (MIT).
// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
//
//*********************************************************

#include "d3dx12affinity.h"
#include "Utils.h"

void STDMETHODCALLTYPE CD3DX12AffinityDevice::SetAffinity(UINT AffinityMask)
{
    CD3DX12AffinityObject::SetAffinity(AffinityMask);
    UpdateActiveDevices();
}

void CD3DX12AffinityDevice::UpdateActiveDevices()
{
    mNumActiveDevices = 0;
    for (int i = 0; i < D3DX12_MAX_ACTIVE_NODES; i++)
    {
        if (mDevices[i])
        {
            mNumActiveDevices++;
        }
        else
        {
            break;
        }
    }
}

UINT STDMETHODCALLTYPE CD3DX12AffinityDevice::GetNodeCount(void)
{
    return g_CachedNodeCount;
}

UINT CD3DX12AffinityDevice::LDAAllNodeMasks()
{
    return (1 << mLDANodeCount) - 1;
}

HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateCommandQueue(
    const D3D12_COMMAND_QUEUE_DESC* pDesc,
    REFIID riid,
    void** ppCommandQueue,
    UINT AffinityMask)
{
    D3D12_COMMAND_QUEUE_DESC Desc = *pDesc;

    UINT EffectiveAffinityMask = (AffinityMask == 0) ? GetNodeMask() : AffinityMask & GetNodeMask();
    std::vector<ID3D12CommandQueue*> Queues;
    Queues.resize(GetNodeCount(), nullptr);
    if (GetAffinityMode() == EAffinityMode::LDA)
    {
        ID3D12Device* Device = mDevices[0];
        for (UINT i = 0; i < D3DX12_MAX_ACTIVE_NODES;i++)
        {
            if (((1 << i) & EffectiveAffinityMask) != 0)
            {
                ID3D12CommandQueue* Queue = nullptr;

                Desc.NodeMask = AffinityIndexToNodeMask(i);
                HRESULT hr = Device->CreateCommandQueue(&Desc, IID_PPV_ARGS(&Queue));
                if (S_OK == hr)
                {
                    Queues[i] = Queue;
                }
                else
                {
                    return hr;
                }
            }
        }
    }
    CD3DX12AffinityCommandQueue* CommandQueue = new CD3DX12AffinityCommandQueue(this, &(Queues[0]), (UINT)Queues.size());
    (*ppCommandQueue) = CommandQueue;

    return S_OK;
}

HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateCommandAllocator(
    D3D12_COMMAND_LIST_TYPE type,
    REFIID riid,
    void** ppCommandAllocator,
    UINT AffinityMask)
{
    std::vector<ID3D12CommandAllocator*> Allocators;
    Allocators.resize(GetNodeCount(), nullptr);
    UINT EffectiveAffinityMask = (AffinityMask == 0) ? GetNodeMask() : AffinityMask & GetNodeMask();
    if (GetAffinityMode() == EAffinityMode::LDA)
    {
        ID3D12Device* Device = mDevices[0];
        for (UINT i = 0; i < D3DX12_MAX_ACTIVE_NODES;i++)
        {
            if (((1 << i) & EffectiveAffinityMask) != 0)
            {
                ID3D12CommandAllocator* Allocator = nullptr;
                HRESULT hr = Device->CreateCommandAllocator(type, IID_PPV_ARGS(&Allocator));
                if (S_OK == hr)
                {
                    Allocators[i] = Allocator;
                }
                else
                {
                    return hr;
                }
            }
        }
    }

    CD3DX12AffinityCommandAllocator* CommandAllocator = new CD3DX12AffinityCommandAllocator(this, &(Allocators[0]), (UINT)Allocators.size(), AffinityMask == 0);
    (*ppCommandAllocator) = CommandAllocator;

    return S_OK;
}

HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateGraphicsPipelineState(
    const D3DX12_AFFINITY_GRAPHICS_PIPELINE_STATE_DESC* pDesc,
    REFIID riid,
    void** ppPipelineState,
    UINT AffinityMask)
{
    CD3DX12AffinityRootSignature* AffinityRootSignature = static_cast<CD3DX12AffinityRootSignature*>(pDesc->pRootSignature);

    std::vector<ID3D12PipelineState*> PipelineStates;
    PipelineStates.resize(GetNodeCount(), nullptr);
    UINT EffectiveAffinityMask = (AffinityMask == 0) ? GetNodeMask() : AffinityMask & GetNodeMask();
    if (GetAffinityMode() == EAffinityMode::LDA)
    {
        ID3D12Device* Device = mDevices[0];
        //
        D3D12_GRAPHICS_PIPELINE_STATE_DESC ActualDescriptor;
        ActualDescriptor = pDesc->ToD3D12();
        ActualDescriptor.pRootSignature = AffinityRootSignature->mRootSignatures[0];
        ActualDescriptor.NodeMask = LDAAllNodeMasks();

        ID3D12PipelineState* PipelineState = nullptr;
        HRESULT const hr = Device->CreateGraphicsPipelineState(&ActualDescriptor, IID_PPV_ARGS(&PipelineState));
        if (S_OK == hr)
        {
            for (UINT i = 0; i < D3DX12_MAX_ACTIVE_NODES;i++)
            {
                if (((1 << i) & EffectiveAffinityMask) != 0)
                {
                    PipelineState->AddRef();
                    PipelineStates[i] = PipelineState;

                }
            }
            PipelineState->Release();
        }
        else
        {
            return hr;
        }
    }
    CD3DX12AffinityPipelineState* AffinityPipelineState = new CD3DX12AffinityPipelineState(this, &(PipelineStates[0]), (UINT)PipelineStates.size());
    (*ppPipelineState) = AffinityPipelineState;

    return S_OK;
}

HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateComputePipelineState(
    const D3DX12_AFFINITY_COMPUTE_PIPELINE_STATE_DESC* pDesc,
    REFIID riid,
    void** ppPipelineState,
    UINT AffinityMask)
{
    CD3DX12AffinityRootSignature* AffinityRootSignature = static_cast<CD3DX12AffinityRootSignature*>(pDesc->pRootSignature);

    std::vector<ID3D12PipelineState*> PipelineStates;
    PipelineStates.resize(GetNodeCount(), nullptr);
    UINT EffectiveAffinityMask = (AffinityMask == 0) ? GetNodeMask() : AffinityMask & GetNodeMask();
    if (GetAffinityMode() == EAffinityMode::LDA)
    {
        ID3D12Device* Device = mDevices[0];

        D3D12_COMPUTE_PIPELINE_STATE_DESC ActualDescriptor;
        ActualDescriptor = pDesc->ToD3D12();
        ActualDescriptor.pRootSignature = AffinityRootSignature->mRootSignatures[0];
        ActualDescriptor.NodeMask = LDAAllNodeMasks();

        ID3D12PipelineState* PipelineState = nullptr;
        HRESULT const hr = Device->CreateComputePipelineState(&ActualDescriptor, IID_PPV_ARGS(&PipelineState));
        if (S_OK == hr)
        {
            for (UINT i = 0; i < D3DX12_MAX_ACTIVE_NODES;i++)
            {
                if (((1 << i) & EffectiveAffinityMask) != 0)
                {
                    PipelineState->AddRef();
                    PipelineStates[i] = PipelineState;
                }
            }
            PipelineState->Release();
        }
        else
        {
            return hr;
        }
    }

    CD3DX12AffinityPipelineState* AffinityPipelineState = new CD3DX12AffinityPipelineState(this, &(PipelineStates[0]), (UINT)PipelineStates.size());
    (*ppPipelineState) = AffinityPipelineState;

    return S_OK;
}

HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateCommandList(
    UINT nodeMask,
    D3D12_COMMAND_LIST_TYPE type,
    CD3DX12AffinityCommandAllocator* pCommandAllocator,
    CD3DX12AffinityPipelineState* pInitialState,
    REFIID riid,
    void** ppCommandList,
    UINT AffinityMask)
{
    std::vector<ID3D12GraphicsCommandList*> CommandLists;
    CommandLists.resize(GetNodeCount(), nullptr);
    CD3DX12AffinityCommandAllocator* WrappedAllocator = static_cast<CD3DX12AffinityCommandAllocator*>(pCommandAllocator);
    CD3DX12AffinityPipelineState* WrappedState = static_cast<CD3DX12AffinityPipelineState*>(pInitialState);
    UINT EffectiveAffinityMask = (AffinityMask == 0) ? GetNodeMask() : AffinityMask & GetNodeMask();

    if (GetAffinityMode() == EAffinityMode::LDA)
    {
        ID3D12Device* Device = mDevices[0];
        for (UINT i = 0; i < D3DX12_MAX_ACTIVE_NODES;i++)
        {
            if (((1 << i) & EffectiveAffinityMask) != 0)
            {
                ID3D12GraphicsCommandList* CommandList = nullptr;
                HRESULT hr = Device->CreateCommandList(AffinityIndexToNodeMask(i), type,
                    WrappedAllocator->GetChildObject(i),
                    WrappedState ? WrappedState->mPipelineStates[i] : nullptr, IID_PPV_ARGS(&CommandList));

                if (S_OK == hr)
                {
#if !ALWAYS_RESET_ALL_COMMAND_LISTS
                    //When a new commandlist is created, it is in active state
                    //the next time the active node is changed the commnadlist will be in closed state
                    //So make sure all commandlists on non-active nodes are closed for next reuse
                    if (i != GetActiveNodeIndex() && AffinityMask == 0)
                    {
                        CommandList->Close();
                    }
#endif
                    CommandLists[i] = CommandList;
                }
                else
                {
                    return hr;
                }
            }
        }
    }


    CD3DX12AffinityGraphicsCommandList* CommandList = new CD3DX12AffinityGraphicsCommandList(this, &(CommandLists[0]), (UINT)CommandLists.size(), AffinityMask == 0);
    (*ppCommandList) = CommandList;

    return S_OK;
}

HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CheckFeatureSupport(
    D3D12_FEATURE Feature,
    void* pFeatureSupportData,
    UINT FeatureSupportDataSize,
    UINT AffinityIndex)
{
    // Return feature support for device 0 and hope that that's consistent!
    return mDevices[AffinityIndex]->CheckFeatureSupport(Feature, pFeatureSupportData, FeatureSupportDataSize);
}

HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateDescriptorHeap(
    const D3D12_DESCRIPTOR_HEAP_DESC* pDescriptorHeapDesc,
    REFIID riid,
    void** ppvHeap,
    UINT AffinityMask)
{
    D3D12_DESCRIPTOR_HEAP_DESC Desc = *pDescriptorHeapDesc;

    std::vector<ID3D12DescriptorHeap*> Heaps;
    Heaps.resize(GetNodeCount(), nullptr);
    UINT EffectiveAffinityMask = (AffinityMask == 0) ? GetNodeMask() : AffinityMask & GetNodeMask();
    if (GetAffinityMode() == EAffinityMode::LDA)
    {
        ID3D12Device* Device = mDevices[0];
        for (UINT i = 0; i < D3DX12_MAX_ACTIVE_NODES;i++)
        {
            if (((1 << i) & EffectiveAffinityMask) != 0)
            {
                ID3D12DescriptorHeap* Heap = nullptr;

                Desc.NodeMask = AffinityIndexToNodeMask(i);
                HRESULT hr = Device->CreateDescriptorHeap(&Desc, IID_PPV_ARGS(&Heap));
                if (S_OK == hr)
                {
                    Heaps[i] = Heap;
                }
                else
                {
                    return hr;
                }
            }
        }
    }

    CD3DX12AffinityDescriptorHeap* DescriptorHeap = new CD3DX12AffinityDescriptorHeap(this, &(Heaps[0]), (UINT)Heaps.size());
    DescriptorHeap->mNumDescriptors = pDescriptorHeapDesc->NumDescriptors;
    if (GetNodeCount() > 1)
    {
        DescriptorHeap->mCPUHeapStart = new UINT64[pDescriptorHeapDesc->NumDescriptors * GetNodeCount()]();
        DescriptorHeap->mGPUHeapStart = new UINT64[pDescriptorHeapDesc->NumDescriptors * GetNodeCount()]();

        DebugLog(L"Allocated %u spots in heap array\n", pDescriptorHeapDesc->NumDescriptors * GetNodeCount());

        DescriptorHeap->InitDescriptorHandles(pDescriptorHeapDesc->Type);
    }
    (*ppvHeap) = DescriptorHeap;

    return S_OK;
}

UINT STDMETHODCALLTYPE CD3DX12AffinityDevice::GetDescriptorHandleIncrementSize(
    D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType,
    UINT AffinityMask)
{
    if (GetNodeCount() == 1)
    {
        return mDevices[0]->GetDescriptorHandleIncrementSize(DescriptorHeapType);
    }
    return sizeof(UINT64) * GetNodeCount();
}

UINT STDMETHODCALLTYPE CD3DX12AffinityDevice::GetActiveDescriptorHandleIncrementSize(
    D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType,
    UINT AffinityIndex)
{
    UINT HandleIncrementSize = 0;
    if (GetAffinityMode() == EAffinityMode::LDA)
    {
        HandleIncrementSize = mDevices[0]->GetDescriptorHandleIncrementSize(DescriptorHeapType);
    }
    return HandleIncrementSize;
}

HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateRootSignature(
    UINT nodeMask,
    const void* pBlobWithRootSignature,
    SIZE_T blobLengthInBytes,
    REFIID riid,
    void** ppvRootSignature,
    UINT AffinityMask)
{
    std::vector<ID3D12RootSignature*> Signatures;
    Signatures.resize(GetNodeCount(), nullptr);
    UINT EffectiveAffinityMask = (AffinityMask == 0) ? GetNodeMask() : AffinityMask & GetNodeMask();
    if (GetAffinityMode() == EAffinityMode::LDA)
    {
        ID3D12Device* Device = mDevices[0];
        ID3D12RootSignature* Signature = nullptr;
        UINT MaskToUse = LDAAllNodeMasks();
        HRESULT hr = Device->CreateRootSignature(MaskToUse, pBlobWithRootSignature, blobLengthInBytes, IID_PPV_ARGS(&Signature));
        if (S_OK == hr)
        {
            for (UINT i = 0; i < D3DX12_MAX_ACTIVE_NODES;i++)
            {
                if (((1 << i) & EffectiveAffinityMask) != 0)
                {
                    Signature->AddRef();
                    Signatures[i] = Signature;
                }
            }
            Signature->Release();
        }
        else
        {
            return hr;
        }
    }
    CD3DX12AffinityRootSignature* Signature = new CD3DX12AffinityRootSignature(this, &(Signatures[0]), (UINT)Signatures.size());
    (*ppvRootSignature) = Signature;

    return S_OK;
}

void STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateConstantBufferView(
    const D3D12_CONSTANT_BUFFER_VIEW_DESC* pDesc,
    D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor,
    UINT AffinityMask)
{
    UINT EffectiveAffinityMask = (AffinityMask == 0) ? GetNodeMask() : AffinityMask & GetNodeMask();
    if (GetAffinityMode() == EAffinityMode::LDA)
    {
        ID3D12Device* Device = mDevices[0];
        for (UINT i = 0; i < D3DX12_MAX_ACTIVE_NODES;i++)
        {
            if (((1 << i) & EffectiveAffinityMask) != 0)
            {
                D3D12_CPU_DESCRIPTOR_HANDLE ActualDestDescriptor = GetCPUHeapPointer(DestDescriptor, i);

                D3D12_CONSTANT_BUFFER_VIEW_DESC ActualDesc = *pDesc;
                ActualDesc.BufferLocation = GetGPUVirtualAddress(pDesc->BufferLocation, i);

                Device->CreateConstantBufferView(&ActualDesc, ActualDestDescriptor);
            }
        }
    }
}

void STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateShaderResourceView(
    CD3DX12AffinityResource* pResource,
    const D3D12_SHADER_RESOURCE_VIEW_DESC* pDesc,
    D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor)
{
    CreateShaderResourceViewWithAffinity(pResource, pDesc, DestDescriptor, EAffinityMask::AllNodes);
}

void STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateShaderResourceViewWithAffinity(
    CD3DX12AffinityResource* pResource,
    const D3D12_SHADER_RESOURCE_VIEW_DESC* pDesc,
    D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor,
    UINT AffinityMask)
{
    CD3DX12AffinityResource* AffinityResource = nullptr;
    UINT EffectiveAffinityMask = (AffinityMask == 0) ? GetNodeMask() : AffinityMask & GetNodeMask();
    if (pResource)
    {
        AffinityResource = static_cast<CD3DX12AffinityResource*>(pResource);
    }
    if (GetAffinityMode() == EAffinityMode::LDA)
    {
        ID3D12Device* Device = mDevices[0];
        for (UINT i = 0; i < D3DX12_MAX_ACTIVE_NODES;i++)
        {
            if (((1 << i) & EffectiveAffinityMask) != 0)
            {
                D3D12_CPU_DESCRIPTOR_HANDLE ActualDestDescriptor = GetCPUHeapPointer(DestDescriptor, i);

                Device->CreateShaderResourceView(AffinityResource ? AffinityResource->mResources[i] : nullptr, pDesc, ActualDestDescriptor);

            }
        }
    }
}

void STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateUnorderedAccessView(
    CD3DX12AffinityResource* pResource,
    CD3DX12AffinityResource* pCounterResource,
    const D3D12_UNORDERED_ACCESS_VIEW_DESC* pDesc,
    D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor)
{
    CreateUnorderedAccessViewWithAffinity(pResource, pCounterResource, pDesc, DestDescriptor, EAffinityMask::AllNodes);
}

void STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateUnorderedAccessViewWithAffinity(
    CD3DX12AffinityResource* pResource,
    CD3DX12AffinityResource* pCounterResource,
    const D3D12_UNORDERED_ACCESS_VIEW_DESC* pDesc,
    D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor,
    UINT AffinityMask)
{
    CD3DX12AffinityResource* AffinityResource = nullptr;
    if (pResource)
    {
        AffinityResource = static_cast<CD3DX12AffinityResource*>(pResource);
    }
    CD3DX12AffinityResource* AffinityCounterResource = nullptr;
    if (pCounterResource)
    {
        AffinityCounterResource = static_cast<CD3DX12AffinityResource*>(pCounterResource);
    }

    UINT EffectiveAffinityMask = (AffinityMask == 0) ? GetNodeMask() : AffinityMask & GetNodeMask();
    if (GetAffinityMode() == EAffinityMode::LDA)
    {
        ID3D12Device* Device = mDevices[0];
        for (UINT i = 0; i < D3DX12_MAX_ACTIVE_NODES;i++)
        {
            if (((1 << i) & EffectiveAffinityMask) != 0)
            {
                D3D12_CPU_DESCRIPTOR_HANDLE ActualDestDescriptor = GetCPUHeapPointer(DestDescriptor, i);

                Device->CreateUnorderedAccessView(
                    AffinityResource ? AffinityResource->mResources[i] : nullptr,
                    AffinityCounterResource ? AffinityCounterResource->mResources[i] : nullptr,
                    pDesc, ActualDestDescriptor);
            }
        }
    }
}

void STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateRenderTargetView(
    CD3DX12AffinityResource* pResource,
    const D3D12_RENDER_TARGET_VIEW_DESC* pDesc,
    D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor)
{
    CreateRenderTargetViewWithAffinity(pResource, pDesc, DestDescriptor, EAffinityMask::AllNodes);
}

void STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateRenderTargetViewWithAffinity(
    CD3DX12AffinityResource* pResource,
    const D3D12_RENDER_TARGET_VIEW_DESC* pDesc,
    D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor,
    UINT AffinityMask)
{
    CD3DX12AffinityResource* AffinityResource = nullptr;
    if (pResource)
    {
        AffinityResource = static_cast<CD3DX12AffinityResource*>(pResource);
    }
    UINT EffectiveAffinityMask = (AffinityMask == 0) ? GetNodeMask() : AffinityMask & GetNodeMask();
    if (GetAffinityMode() == EAffinityMode::LDA)
    {
        ID3D12Device* Device = mDevices[0];
        for (UINT i = 0; i < D3DX12_MAX_ACTIVE_NODES;i++)
        {
            if (((1 << i) & EffectiveAffinityMask) != 0)
            {
                D3D12_CPU_DESCRIPTOR_HANDLE ActualDestDescriptor = GetCPUHeapPointer(DestDescriptor, i);

                ID3D12Resource* Resource = nullptr;
                if (AffinityResource)
                {
                    Resource = AffinityResource->mResources[i];
                    if (Resource != nullptr)
                    {
                        Device->CreateRenderTargetView(Resource, pDesc, ActualDestDescriptor);
                    }
                }
            }
        }
    }
}

void STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateDepthStencilView(
    CD3DX12AffinityResource* pResource,
    const D3D12_DEPTH_STENCIL_VIEW_DESC* pDesc,
    D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor)
{
    CreateDepthStencilViewWithAffinity(pResource, pDesc, DestDescriptor, EAffinityMask::AllNodes);
}

void STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateDepthStencilViewWithAffinity(
    CD3DX12AffinityResource* pResource,
    const D3D12_DEPTH_STENCIL_VIEW_DESC* pDesc,
    D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor,
    UINT AffinityMask)
{
    CD3DX12AffinityResource* AffinityResource = nullptr;
    if (pResource)
    {
        AffinityResource = static_cast<CD3DX12AffinityResource*>(pResource);
    }

    UINT EffectiveAffinityMask = (AffinityMask == 0) ? GetNodeMask() : AffinityMask & GetNodeMask();
    if (GetAffinityMode() == EAffinityMode::LDA)
    {
        ID3D12Device* Device = mDevices[0];
        for (UINT i = 0; i < D3DX12_MAX_ACTIVE_NODES;i++)
        {
            if (((1 << i) & EffectiveAffinityMask) != 0)
            {
                D3D12_CPU_DESCRIPTOR_HANDLE ActualDestDescriptor = GetCPUHeapPointer(DestDescriptor, i);

                ID3D12Resource* Resource = nullptr;
                if (AffinityResource)
                {
                    Resource = AffinityResource->mResources[i];
                }
                Device->CreateDepthStencilView(Resource, pDesc, ActualDestDescriptor);
            }
        }
    }
}

void STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateSampler(
    const D3D12_SAMPLER_DESC* pDesc,
    D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor,
    UINT AffinityMask)
{
    UINT EffectiveAffinityMask = (AffinityMask == 0) ? GetNodeMask() : AffinityMask & GetNodeMask();
    if (GetAffinityMode() == EAffinityMode::LDA)
    {
        ID3D12Device* Device = mDevices[0];
        for (UINT i = 0; i < D3DX12_MAX_ACTIVE_NODES;i++)
        {
            if (((1 << i) & EffectiveAffinityMask) != 0)
            {
                D3D12_CPU_DESCRIPTOR_HANDLE ActualDestDescriptor = GetCPUHeapPointer(DestDescriptor, i);
                Device->CreateSampler(pDesc, ActualDestDescriptor);
            }
        }
    }
}

void STDMETHODCALLTYPE CD3DX12AffinityDevice::CopyDescriptors(
    UINT NumDestDescriptorRanges,
    const D3D12_CPU_DESCRIPTOR_HANDLE* pDestDescriptorRangeStarts,
    const UINT* pDestDescriptorRangeSizes,
    UINT NumSrcDescriptorRanges,
    const D3D12_CPU_DESCRIPTOR_HANDLE* pSrcDescriptorRangeStarts,
    const UINT* pSrcDescriptorRangeSizes,
    D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType,
    UINT AffinityMask)
{
    if (NumDestDescriptorRanges == 1 && NumSrcDescriptorRanges == 1)
    {
        return CopyDescriptorsOne(NumDestDescriptorRanges, pDestDescriptorRangeStarts, pDestDescriptorRangeSizes, NumSrcDescriptorRanges,
            pSrcDescriptorRangeStarts, pSrcDescriptorRangeSizes, DescriptorHeapsType, AffinityMask);
    }
    D3D12_CPU_DESCRIPTOR_HANDLE* ActualDestDescriptorRangeStarts = new D3D12_CPU_DESCRIPTOR_HANDLE[NumDestDescriptorRanges];
    D3D12_CPU_DESCRIPTOR_HANDLE* ActualSrcDescriptorRangeStarts = new D3D12_CPU_DESCRIPTOR_HANDLE[NumSrcDescriptorRanges];
    UINT EffectiveAffinityMask = (AffinityMask == 0) ? GetNodeMask() : AffinityMask & GetNodeMask();
    if (GetAffinityMode() == EAffinityMode::LDA)
    {
        ID3D12Device* Device = mDevices[0];
        for (UINT i = 0; i < D3DX12_MAX_ACTIVE_NODES;i++)
        {
            if (((1 << i) & EffectiveAffinityMask) != 0)
            {

                {
                    for (UINT t = 0; t < NumDestDescriptorRanges; ++t)
                    {
                        ActualDestDescriptorRangeStarts[t] = GetCPUHeapPointer(pDestDescriptorRangeStarts[t], i);
                    }
                    for (UINT t = 0; t < NumSrcDescriptorRanges; ++t)
                    {
                        ActualSrcDescriptorRangeStarts[t] = GetCPUHeapPointer(pSrcDescriptorRangeStarts[t], i);
                    }

                    Device->CopyDescriptors(
                        NumDestDescriptorRanges, ActualDestDescriptorRangeStarts, pDestDescriptorRangeSizes,
                        NumSrcDescriptorRanges, ActualSrcDescriptorRangeStarts, pSrcDescriptorRangeSizes,
                        DescriptorHeapsType);
                }
            }
        }
    }

    delete[] ActualDestDescriptorRangeStarts;
    delete[] ActualSrcDescriptorRangeStarts;

}

void STDMETHODCALLTYPE CD3DX12AffinityDevice::CopyDescriptorsOne(
    UINT NumDestDescriptorRanges,
    const D3D12_CPU_DESCRIPTOR_HANDLE* pDestDescriptorRangeStarts,
    const UINT* pDestDescriptorRangeSizes,
    UINT NumSrcDescriptorRanges,
    const D3D12_CPU_DESCRIPTOR_HANDLE* pSrcDescriptorRangeStarts,
    const UINT* pSrcDescriptorRangeSizes,
    D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType,
    UINT AffinityMask)
{
    UINT ActiveNodeIndex = GetActiveNodeIndex();

    D3D12_CPU_DESCRIPTOR_HANDLE ActualDestDescriptorRangeStarts[1];
    D3D12_CPU_DESCRIPTOR_HANDLE ActualSrcDescriptorRangeStarts[1];
    UINT EffectiveAffinityMask = (AffinityMask == 0) ? GetNodeMask() : AffinityMask & GetNodeMask();
    if (GetAffinityMode() == EAffinityMode::LDA)
    {
        ID3D12Device* Device = mDevices[0];
        for (UINT i = 0; i < D3DX12_MAX_ACTIVE_NODES;i++)
        {
            if (((1 << i) & EffectiveAffinityMask) != 0)
            {
                {
                    ActualDestDescriptorRangeStarts[0] = GetCPUHeapPointer(pDestDescriptorRangeStarts[0], i);
                    ActualSrcDescriptorRangeStarts[0] = GetCPUHeapPointer(pSrcDescriptorRangeStarts[0], i);

                    Device->CopyDescriptors(
                        NumDestDescriptorRanges, ActualDestDescriptorRangeStarts, pDestDescriptorRangeSizes,
                        NumSrcDescriptorRanges, ActualSrcDescriptorRangeStarts, pSrcDescriptorRangeSizes,
                        DescriptorHeapsType);
                }
            }
        }
    }
}

void STDMETHODCALLTYPE CD3DX12AffinityDevice::CopyDescriptorsSimple(
    UINT NumDescriptors,
    D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart,
    D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart,
    D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType,
    UINT AffinityMask)
{
    UINT EffectiveAffinityMask = (AffinityMask == 0) ? GetNodeMask() : AffinityMask & GetNodeMask();
    if (GetAffinityMode() == EAffinityMode::LDA)
    {
        ID3D12Device* Device = mDevices[0];
        for (UINT i = 0; i < D3DX12_MAX_ACTIVE_NODES;i++)
        {
            if (((1 << i) & EffectiveAffinityMask) != 0)
            {
                D3D12_CPU_DESCRIPTOR_HANDLE ActualDestDescriptor = GetCPUHeapPointer(DestDescriptorRangeStart, i);
                D3D12_CPU_DESCRIPTOR_HANDLE ActualSrcDescriptor = GetCPUHeapPointer(SrcDescriptorRangeStart, i);

                Device->CopyDescriptorsSimple(NumDescriptors, ActualDestDescriptor, ActualSrcDescriptor, DescriptorHeapsType);
            }
        }
    }
}

D3D12_RESOURCE_ALLOCATION_INFO STDMETHODCALLTYPE CD3DX12AffinityDevice::GetResourceAllocationInfo(
    UINT visibleMask,
    UINT numResourceDescs,
    const D3D12_RESOURCE_DESC* pResourceDescs,
    UINT AffinityIndex)
{
    return mDevices[AffinityIndex]->GetResourceAllocationInfo(visibleMask, numResourceDescs, pResourceDescs);
}

D3D12_HEAP_PROPERTIES STDMETHODCALLTYPE CD3DX12AffinityDevice::GetCustomHeapProperties(
    UINT nodeMask,
    D3D12_HEAP_TYPE heapType,
    UINT AffinityIndex)
{
    return mDevices[AffinityIndex]->GetCustomHeapProperties(nodeMask, heapType);
}

UINT64 GetBufferSizeForResource(
    ID3D12Resource* pResource)
{
    D3D12_RESOURCE_DESC Desc = pResource->GetDesc();
    UINT64 Size = 0;
    switch (Desc.Dimension)
    {
    case D3D12_RESOURCE_DIMENSION_BUFFER:
    {
        DEBUG_ASSERT(Desc.Height == 1);
        Size = Desc.Width;
    }
    break;
    case D3D12_RESOURCE_DIMENSION_TEXTURE1D:
    case D3D12_RESOURCE_DIMENSION_TEXTURE2D:
    case D3D12_RESOURCE_DIMENSION_TEXTURE3D:
    {
        ID3D12Device* pDevice;
        pResource->GetDevice(__uuidof(*pDevice), reinterpret_cast<void**>(&pDevice));
        auto info = pDevice->GetResourceAllocationInfo(0, 1, &Desc);
        pDevice->Release();

        Size = info.SizeInBytes;
    }
    break;
    default:
    case D3D12_RESOURCE_DIMENSION_UNKNOWN:
    {
        DEBUG_ASSERT(false);
    }
    break;
    }
    return Size;
}

HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateCommittedResource(
    const D3D12_HEAP_PROPERTIES* pHeapProperties,
    D3D12_HEAP_FLAGS HeapFlags,
    const D3D12_RESOURCE_DESC* pResourceDesc,
    D3D12_RESOURCE_STATES InitialResourceState,
    const D3D12_CLEAR_VALUE* pOptimizedClearValue,
    REFIID riid,
    void** ppvResource,
    UINT AffinityMask)
{
    D3D12_HEAP_PROPERTIES& Properties = *(const_cast<D3D12_HEAP_PROPERTIES*>(pHeapProperties));

    ID3D12Resource* Resources[D3DX12_MAX_ACTIVE_NODES] = {};
    ID3D12Heap* Heaps[D3DX12_MAX_ACTIVE_NODES] = {};
    ID3D12Heap** pHeaps = nullptr;
    UINT EffectiveAffinityMask = (AffinityMask == 0) ? GetNodeMask() : AffinityMask & GetNodeMask();
    if (GetAffinityMode() == EAffinityMode::LDA)
    {
        ID3D12Device* Device = mDevices[0];
        D3D12_HEAP_PROPERTIES heapProp = Device->GetCustomHeapProperties(0, pHeapProperties->Type);

        for (UINT i = 0; i < D3DX12_MAX_ACTIVE_NODES;i++)
        {
            if (((1 << i) & EffectiveAffinityMask) != 0)
            {
                UINT nodeMask = AffinityIndexToNodeMask(i);
                Properties.CreationNodeMask = nodeMask;
                Properties.VisibleNodeMask = LDAAllNodeMasks();
                if (heapProp.MemoryPoolPreference == D3D12_MEMORY_POOL_L0)
                {
                    // System memory, don't create the resource more than once or manager syncronization.
                    if (i == 0)
                    {
                        HRESULT hr = Device->CreateCommittedResource(&Properties, HeapFlags, pResourceDesc, InitialResourceState, pOptimizedClearValue, IID_PPV_ARGS(&Resources[i]));
                        RETURN_IF_FAILED(hr);
                    }
                    else
                    {
                        Resources[i] = Resources[i - 1];
                        Resources[i]->AddRef();
                    }

                }
                else
                {
                    Properties.VisibleNodeMask = nodeMask;
#if TILE_MAPPING_GPUVA
                    if (GetNodeCount() > 1 &&
                        pResourceDesc->Dimension == D3D12_RESOURCE_DIMENSION_BUFFER)
                    {
                        UINT64 Width = (pResourceDesc->Width + D3D12_TILED_RESOURCE_TILE_SIZE_IN_BYTES - 1)
                            & ~(D3D12_TILED_RESOURCE_TILE_SIZE_IN_BYTES - 1);
                        // Video memory buffers - allocate heaps on each GPU and a single reserved resource so we don't have to remap GPUVA.
                        D3D12_HEAP_DESC HeapDesc = { Width, Properties, pResourceDesc->Alignment, D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS };
                        HRESULT hr = Device->CreateHeap(&HeapDesc, IID_PPV_ARGS(&Heaps[i]));
                        RETURN_IF_FAILED(hr);
                    }
                    else
#endif
                    {
                        HRESULT hr = Device->CreateCommittedResource(&Properties, HeapFlags, pResourceDesc, InitialResourceState, pOptimizedClearValue, IID_PPV_ARGS(&Resources[i]));
                        RETURN_IF_FAILED(hr);
                    }
                }
            }
        }
#if TILE_MAPPING_GPUVA
        if (GetNodeCount() > 1 &&
            pResourceDesc->Dimension == D3D12_RESOURCE_DIMENSION_BUFFER &&
            heapProp.MemoryPoolPreference != D3D12_MEMORY_POOL_L0)
        {
            HRESULT hr = Device->CreateReservedResource(pResourceDesc, InitialResourceState, pOptimizedClearValue, IID_PPV_ARGS(&Resources[0]));
            RETURN_IF_FAILED(hr);

            pHeaps = Heaps;

            for (UINT i = 0; i < D3DX12_MAX_ACTIVE_NODES;i++)
            {
                if (((1 << i) & EffectiveAffinityMask) != 0)
                {

                    if (i > 0)
                    {
                        Resources[i] = Resources[0];
                        Resources[i]->AddRef();
                    }

                    D3D12_TILED_RESOURCE_COORDINATE Coord = {};
                    D3D12_TILE_REGION_SIZE Region = { (UINT)(((pResourceDesc->Width - 1ull) / D3D12_TILED_RESOURCE_TILE_SIZE_IN_BYTES) + 1) };
                    D3D12_TILE_RANGE_FLAGS RangeFlags = D3D12_TILE_RANGE_FLAG_NONE;
                    UINT RangeStart = 0;

                    UINT HeapIndex = i;
#if FORCE_REMOTE_TILE_MAPPING_GPUVA
                    HeapIndex = AffinityIndices[(Counter + 1) % IndicesCount];
#endif

                    mSyncCommandQueues[i]->UpdateTileMappings(Resources[i], 1, &Coord, &Region, Heaps[HeapIndex], 1, &RangeFlags, &RangeStart, &Region.NumTiles, D3D12_TILE_MAPPING_FLAG_NO_HAZARD);
                }

                ID3D12Fence* pFence = nullptr;
                RETURN_IF_FAILED(Device->CreateFence(0, D3D12_FENCE_FLAG_NONE, IID_PPV_ARGS(&pFence)));
                HANDLE hEvent = CreateEvent(nullptr, FALSE, FALSE, nullptr);
                for (UINT i = 0; i < D3DX12_MAX_ACTIVE_NODES;i++)
                {
                    if (((1 << i) & EffectiveAffinityMask) != 0)
                    {
                        mSyncCommandQueues[i]->Signal(pFence, i + 1);
                        pFence->SetEventOnCompletion(i + 1, hEvent);
                        WaitForSingleObject(hEvent, INFINITE);
                    }
                }
                pFence->Release();
            }
        }
#endif
    }

    CD3DX12AffinityResource* Resource = new CD3DX12AffinityResource(this, Resources, GetNodeCount(), pHeaps);
    Resource->mReferenceCount = 0;
    Resource->mBufferSize = GetBufferSizeForResource(Resources[0]);
    Resource->mCPUPageProperty = mDevices[0]->GetCustomHeapProperties(0, pHeapProperties->Type).CPUPageProperty;
    {
        ReleaseLog(L"D3DX12AffinityLayer: Committed resource is not write combine, creating no shadow buffer.\n", Resource->mBufferSize);
        Resource->mShadowBuffer = nullptr;
    }

    (*ppvResource) = Resource;

    return S_OK;
}

HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateHeap(
    const D3D12_HEAP_DESC* pDesc,
    REFIID riid,
    void** ppvHeap,
    UINT AffinityMask)
{
    std::vector<ID3D12Heap*> Heaps;
    Heaps.resize(GetNodeCount(), nullptr);
    D3D12_HEAP_PROPERTIES& Properties = (const_cast<D3D12_HEAP_DESC*>(pDesc))->Properties;
    UINT EffectiveAffinityMask = (AffinityMask == 0) ? GetNodeMask() : AffinityMask & GetNodeMask();
    if (GetAffinityMode() == EAffinityMode::LDA)
    {
        ID3D12Device* Device = mDevices[0];
        for (UINT i = 0; i < D3DX12_MAX_ACTIVE_NODES;i++)
        {
            if (((1 << i) & EffectiveAffinityMask) != 0)
            {
                ID3D12Heap* Heap = nullptr;
                Properties.CreationNodeMask = AffinityIndexToNodeMask(i);
                Properties.VisibleNodeMask = LDAAllNodeMasks();

                HRESULT hr = Device->CreateHeap(pDesc, IID_PPV_ARGS(&Heap));
                if (S_OK == hr)
                {
                    Heaps[i] = Heap;
                }
                else
                {
                    return hr;
                }
            }
        }
    }
    CD3DX12AffinityHeap* Heap = new CD3DX12AffinityHeap(this, &(Heaps[0]), (UINT)Heaps.size());
    (*ppvHeap) = Heap;

    return S_OK;
}

HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CreatePlacedResource(
    CD3DX12AffinityHeap* pHeap,
    UINT64 HeapOffset,
    const D3D12_RESOURCE_DESC* pDesc,
    D3D12_RESOURCE_STATES InitialState,
    const D3D12_CLEAR_VALUE* pOptimizedClearValue,
    REFIID riid,
    void** ppvResource,
    UINT AffinityMask)
{
    std::vector<ID3D12Resource*> Resources;
    Resources.resize(GetNodeCount(), nullptr);
    UINT EffectiveAffinityMask = (AffinityMask == 0) ? GetNodeMask() : AffinityMask & GetNodeMask();
    if (GetAffinityMode() == EAffinityMode::LDA)
    {
#if TILE_MAPPING_GPUVA
        if (pDesc->Dimension == D3D12_RESOURCE_DIMENSION_BUFFER)
        {
            return E_NOTIMPL;
        }
#endif

        ID3D12Device* Device = mDevices[0];
        for (UINT i = 0; i < D3DX12_MAX_ACTIVE_NODES;i++)
        {
            if (((1 << i) & EffectiveAffinityMask) != 0)
            {
                ID3D12Resource* Resource = nullptr;

                HRESULT hr = Device->CreatePlacedResource(
                    pHeap->GetChildObject(i),
                    HeapOffset,
                    pDesc,
                    InitialState,
                    pOptimizedClearValue,
                    IID_PPV_ARGS(&Resource));
                if (S_OK == hr)
                {
                    Resources[i] = Resource;
                }
                else
                {
                    return hr;
                }
            }
        }
    }
    CD3DX12AffinityResource* Resource = new CD3DX12AffinityResource(this, &(Resources[0]), (UINT)Resources.size());
    (*ppvResource) = Resource;

    return S_OK;
}

HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateReservedResource(
    const D3D12_RESOURCE_DESC* pDesc,
    D3D12_RESOURCE_STATES InitialState,
    const D3D12_CLEAR_VALUE* pOptimizedClearValue,
    REFIID riid,
    void** ppvResource,
    UINT AffinityMask)
{
    std::vector<ID3D12Resource*> Resources;
    Resources.resize(GetNodeCount(), nullptr);
    UINT EffectiveAffinityMask = (AffinityMask == 0) ? GetNodeMask() : AffinityMask & GetNodeMask();
    if (GetAffinityMode() == EAffinityMode::LDA)
    {
#if TILE_MAPPING_GPUVA
        if (pDesc->Dimension == D3D12_RESOURCE_DIMENSION_BUFFER)
        {
            return E_NOTIMPL;
        }
#endif
        ID3D12Device* Device = mDevices[0];
        for (UINT i = 0; i < D3DX12_MAX_ACTIVE_NODES;i++)
        {
            if (((1 << i) & EffectiveAffinityMask) != 0)
            {
                ID3D12Resource* Resource = nullptr;

                HRESULT hr = Device->CreateReservedResource(
                    pDesc,
                    InitialState,
                    pOptimizedClearValue,
                    IID_PPV_ARGS(&Resource));
                if (S_OK == hr)
                {
                    Resources[i] = Resource;
                }
                else
                {
                    return hr;
                }
            }
        }
    }
    CD3DX12AffinityResource* Resource = new CD3DX12AffinityResource(this, &(Resources[0]), (UINT)Resources.size());
    (*ppvResource) = Resource;

    return S_OK;
}

HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::MakeResident(
    UINT NumObjects,
    CD3DX12AffinityPageable* const* ppObjects,
    UINT AffinityMask)
{
    std::vector<ID3D12Pageable*> Objects(NumObjects);
    UINT EffectiveAffinityMask = (AffinityMask == 0) ? GetNodeMask() : AffinityMask & GetNodeMask();
    if (GetAffinityMode() == EAffinityMode::LDA)
    {
        ID3D12Device* Device = mDevices[0];
        for (UINT i = 0; i < D3DX12_MAX_ACTIVE_NODES;i++)
        {
            if (((1 << i) & EffectiveAffinityMask) != 0)
            {
                for (UINT j = 0; j < NumObjects; ++j)
                {
                    Objects[j] = static_cast<CD3DX12AffinityPageable*>(ppObjects[j])->mPageables[i];
                }
                HRESULT const hr = Device->MakeResident(NumObjects, Objects.data());
                if (S_OK != hr)
                {
                    return hr;
                }
            }
        }
    }
    return S_OK;
}

HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::Evict(
    UINT NumObjects,
    CD3DX12AffinityPageable* const* ppObjects,
    UINT AffinityMask)
{
    std::vector<CD3DX12AffinityPageable*> AffinityPageables;
    AffinityPageables.resize(NumObjects);
    UINT EffectiveAffinityMask = (AffinityMask == 0) ? GetNodeMask() : AffinityMask & GetNodeMask();

    for (UINT i = 0; i < NumObjects; ++i)
    {
        AffinityPageables[i] = static_cast<CD3DX12AffinityPageable*>(ppObjects[i]);
    }

    std::vector<ID3D12Pageable*> Pageables;
    Pageables.resize(NumObjects);
    if (GetAffinityMode() == EAffinityMode::LDA)
    {
        ID3D12Device* Device = mDevices[0];
        for (UINT i = 0; i < D3DX12_MAX_ACTIVE_NODES;i++)
        {
            if (((1 << i) & EffectiveAffinityMask) != 0)
            {
                for (UINT j = 0; j < NumObjects; ++j)
                {
                    Pageables[j] = AffinityPageables[j]->mPageables[i];
                }

                HRESULT const hr = Device->Evict(NumObjects, Pageables.data());
                if (S_OK != hr)
                {
                    return hr;
                }
            }
        }
    }
    return S_OK;
}

HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateFence(
    UINT64 InitialValue,
    D3D12_FENCE_FLAGS Flags,
    REFIID riid,
    void** ppFence,
    UINT AffinityMask)
{
    std::vector<ID3D12Fence*> Fences;
    Fences.resize(GetNodeCount(), nullptr);
    UINT EffectiveAffinityMask = (AffinityMask == 0) ? GetNodeMask() : AffinityMask & GetNodeMask();

    if (GetAffinityMode() == EAffinityMode::LDA)
    {
        ID3D12Device* Device = mDevices[0];
        ID3D12Fence* Fence = nullptr;
        for (UINT i = 0; i < D3DX12_MAX_ACTIVE_NODES;i++)
        {
            if (((1 << i) & EffectiveAffinityMask) != 0)
            {
                HRESULT const hr = Device->CreateFence(InitialValue, Flags, IID_PPV_ARGS(&Fence));
                if (S_OK == hr)
                {
                    Fences[i] = Fence;
                }
                else
                {
                    return hr;
                }
            }
        }
    }

    CD3DX12AffinityFence* Fence = new CD3DX12AffinityFence(this, &(Fences[0]), (UINT)Fences.size());
    (*ppFence) = Fence;

    return S_OK;
}

HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::GetDeviceRemovedReason(UINT AffinityIndex)
{
    return mDevices[AffinityIndex]->GetDeviceRemovedReason();
}

void STDMETHODCALLTYPE CD3DX12AffinityDevice::GetCopyableFootprints(
    const D3D12_RESOURCE_DESC* pResourceDesc,
    UINT FirstSubresource,
    UINT NumSubresources,
    UINT64 BaseOffset,
    D3D12_PLACED_SUBRESOURCE_FOOTPRINT* pLayouts,
    UINT* pNumRows,
    UINT64* pRowSizeInBytes,
    UINT64* pTotalBytes,
    UINT AffinityMask)
{
    UINT EffectiveAffinityMask = (AffinityMask == 0) ? GetNodeMask() : AffinityMask & GetNodeMask();
    if (GetAffinityMode() == EAffinityMode::LDA)
    {
        ID3D12Device* Device = mDevices[0];
        Device->GetCopyableFootprints(
            pResourceDesc,
            FirstSubresource,
            NumSubresources,
            BaseOffset,
            pLayouts,
            pNumRows,
            pRowSizeInBytes,
            pTotalBytes);
    }
}

HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateQueryHeap(
    const D3D12_QUERY_HEAP_DESC* pDesc,
    REFIID riid,
    void** ppvHeap,
    UINT AffinityMask)
{
    D3D12_QUERY_HEAP_DESC Desc = *pDesc;

    std::vector<ID3D12QueryHeap*> QueryHeaps;
    QueryHeaps.resize(GetNodeCount(), nullptr);
    UINT EffectiveAffinityMask = (AffinityMask == 0) ? GetNodeMask() : AffinityMask & GetNodeMask();
    if (GetAffinityMode() == EAffinityMode::LDA)
    {
        ID3D12Device* Device = mDevices[0];
        for (UINT i = 0; i < D3DX12_MAX_ACTIVE_NODES;i++)
        {
            if (((1 << i) & EffectiveAffinityMask) != 0)
            {
                ID3D12QueryHeap* QueryHeap = nullptr;

                Desc.NodeMask = AffinityIndexToNodeMask(i);
                HRESULT const hr = Device->CreateQueryHeap(&Desc, IID_PPV_ARGS(&QueryHeap));
                if (S_OK == hr)
                {
                    QueryHeaps[i] = QueryHeap;
                }
                else
                {
                    return hr;
                }
            }
        }
    }
    CD3DX12AffinityQueryHeap* QueryHeap = new CD3DX12AffinityQueryHeap(this, &(QueryHeaps[0]), (UINT)QueryHeaps.size());
    (*ppvHeap) = QueryHeap;

    return S_OK;
}

HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::SetStablePowerState(
    BOOL Enable,
    UINT AffinityMask)
{
    for (UINT ActiveIndex = 0; ActiveIndex < mNumActiveDevices; ++ActiveIndex)
    {
        ID3D12Device* Device = mDevices[ActiveIndex];
        UINT const i = ActiveIndex;

        HRESULT const hr = Device->SetStablePowerState(Enable);

        if (S_OK != hr)
        {
            return hr;
        }
    }

    return S_OK;
}

HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateCommandSignature(
    const D3D12_COMMAND_SIGNATURE_DESC* pDesc,
    CD3DX12AffinityRootSignature* pRootSignature,
    REFIID riid,
    CD3DX12AffinityCommandSignature** ppvCommandSignature,
    UINT AffinityMask)
{
    D3D12_COMMAND_SIGNATURE_DESC Desc = *pDesc;
    CD3DX12AffinityRootSignature* RootSignature = static_cast<CD3DX12AffinityRootSignature*>(pRootSignature);

    std::vector<ID3D12CommandSignature*> CommandSignatures;
    CommandSignatures.resize(GetNodeCount(), nullptr);
    UINT EffectiveAffinityMask = (AffinityMask == 0) ? GetNodeMask() : AffinityMask & GetNodeMask();

    if (GetAffinityMode() == EAffinityMode::LDA)
    {
        ID3D12Device* Device = mDevices[0];
        for (UINT i = 0; i < D3DX12_MAX_ACTIVE_NODES;i++)
        {
            if (((1 << i) & EffectiveAffinityMask) != 0)
            {
                ID3D12CommandSignature* CommandSignature = nullptr;

                Desc.NodeMask = AffinityIndexToNodeMask(i);
                HRESULT const hr = Device->CreateCommandSignature(&Desc, RootSignature ? RootSignature->mRootSignatures[i] : nullptr, IID_PPV_ARGS(&CommandSignature));
                if (S_OK == hr)
                {
                    CommandSignatures[i] = CommandSignature;
                }
                else
                {
                    return hr;
                }
            }
        }
    }
    CD3DX12AffinityCommandSignature* CommandSignature = new CD3DX12AffinityCommandSignature(this, &(CommandSignatures[0]), (UINT)CommandSignatures.size());
    (*ppvCommandSignature) = CommandSignature;

    return S_OK;
}

void STDMETHODCALLTYPE CD3DX12AffinityDevice::GetResourceTiling(
    CD3DX12AffinityResource* pTiledResource,
    UINT* pNumTilesForEntireResource,
    D3D12_PACKED_MIP_INFO* pPackedMipDesc,
    D3D12_TILE_SHAPE* pStandardTileShapeForNonPackedMips,
    UINT* pNumSubresourceTilings,
    UINT FirstSubresourceTilingToGet,
    D3D12_SUBRESOURCE_TILING* pSubresourceTilingsForNonPackedMips,
    UINT AffinityIndex)
{
    mDevices[AffinityIndex]->GetResourceTiling(
        pTiledResource->mResources[AffinityIndex],
        pNumTilesForEntireResource,
        pPackedMipDesc,
        pStandardTileShapeForNonPackedMips,
        pNumSubresourceTilings,
        FirstSubresourceTilingToGet,
        pSubresourceTilingsForNonPackedMips);
}

LUID STDMETHODCALLTYPE CD3DX12AffinityDevice::GetAdapterLuid(UINT AffinityIndex)
{
    return mDevices[AffinityIndex]->GetAdapterLuid();
}

ID3D12Device* CD3DX12AffinityDevice::GetChildObject(UINT AffinityIndex)
{
    if (GetAffinityMode() == EAffinityMode::LDA)
    {
        return mDevices[0];
    }
    else
    {
        return mDevices[AffinityIndex];
    }
}

bool CD3DX12AffinityDevice::IsD3D()
{
    return true;
}

CD3DX12AffinityDevice::CD3DX12AffinityDevice(ID3D12Device** devices, UINT Count, EAffinityMode::Mask affinitymode)
    : CD3DX12AffinityObject(this, reinterpret_cast<IUnknown**>(devices), Count)
{
#ifdef DEBUG_OBJECT_NAME
    mObjectTypeName = L"Device";
#endif
    mAffinityMode = affinitymode;
    for (UINT i = 0; i < D3DX12_MAX_ACTIVE_NODES; i++)
    {
        if (i < Count)
        {
            mDevices[i] = devices[i];
        }
        else
        {
            mDevices[i] = nullptr;
        }
    }
    if (mAffinityMode == EAffinityMode::LDA)
    {
        mLDANodeCount = min(mDevices[0]->GetNodeCount(), D3DX12_MAX_ACTIVE_NODES);
    }
    else
    {
        mLDANodeCount = 0;
    }
    mDeviceCount = Count;
    if (mAffinityMode == EAffinityMode::LDA)
    {
        g_CachedNodeCount = mLDANodeCount;
        g_CachedNodeMask = (1 << mLDANodeCount) - 1;

    }
    else
    {
        g_CachedNodeCount = mDeviceCount;
        g_CachedNodeMask = (1 << mDeviceCount) - 1;

    }
    mAffinityRenderingMode = EAffinityRenderingMode::AFR;

    mParentDevice = this;
    // Re-calculate the affinity based on the effective affinity node mask.
    SetAffinity(GetNodeMask());

    UpdateActiveDevices();

    // Initialize sync queues for cross frame resources.
    if (GetAffinityMode() == EAffinityMode::LDA)
    {
        for (UINT i = 0; i < GetNodeCount(); i++)
        {
            D3D12_COMMAND_QUEUE_DESC desc;
            desc.Type = D3D12_COMMAND_LIST_TYPE_COPY;
            desc.Priority = 0;
            desc.Flags = D3D12_COMMAND_QUEUE_FLAG_NONE;
            desc.NodeMask = 1 << i;

            mDevices[0]->CreateCommandQueue(&desc, IID_PPV_ARGS(&mSyncCommandQueues[i]));
            mDevices[0]->CreateFence(0, D3D12_FENCE_FLAG_NONE, IID_PPV_ARGS(&mSyncFences[i]));
        }
    }
}

CD3DX12AffinityDevice::~CD3DX12AffinityDevice()
{
    for (UINT i = 0; i < GetNodeCount(); i++)
    {
        mSyncCommandQueues[i]->Release();
        mSyncFences[i]->Release();
    }
}

UINT CD3DX12AffinityDevice::GetDeviceCount()
{
    return mDeviceCount;
}

D3D12_CPU_DESCRIPTOR_HANDLE CD3DX12AffinityDevice::GetCPUHeapPointer(D3D12_CPU_DESCRIPTOR_HANDLE const& Original, UINT const NodeIndex)
{
    if (GetNodeCount() == 1)
    {
        return Original;
    }
#ifdef D3DX_AFFINITY_ENABLE_HEAP_POINTER_VALIDATION
    // Validation
    {
        std::lock_guard<std::mutex> lock(MutexPointerRanges);

        bool IsOK = false;
        for (auto Range : GetParentDevice()->CPUHeapPointerRanges)
        {
            if (Original.ptr >= Range.first && Original.ptr < Range.second)
            {
                IsOK = true;
                break;
            }
        }

        if (!IsOK)
        {
            DebugLog(L"Found a pointer outside of expected memory ranges!\n");
            DEBUG_FAIL_MESSAGE(L"Found a pointer outside of expected memory ranges!\n");
        }

    }
#endif
    D3D12_CPU_DESCRIPTOR_HANDLE handle;
    handle.ptr = static_cast<size_t>(((UINT64*)Original.ptr)[NodeIndex]);
    return handle;
}

D3D12_GPU_DESCRIPTOR_HANDLE CD3DX12AffinityDevice::GetGPUHeapPointer(D3D12_GPU_DESCRIPTOR_HANDLE const& Original, UINT const NodeIndex)
{
    if (GetNodeCount() == 1)
    {
        return Original;
    }
#ifdef D3DX_AFFINITY_ENABLE_HEAP_POINTER_VALIDATION
    // Validation
    {
        std::lock_guard<std::mutex> lock(MutexPointerRanges);

        bool IsOK = false;
        for (auto Range : GetParentDevice()->GPUHeapPointerRanges)
        {
            if (Original.ptr >= Range.first && Original.ptr < Range.second)
            {
                IsOK = true;
                break;
            }
        }

        if (!IsOK)
        {
            DebugLog(L"Found a pointer outside of expected memory ranges!\n");
            DEBUG_FAIL_MESSAGE("Found a pointer outside of expected memory ranges!\n");
        }

    }
#endif
    D3D12_GPU_DESCRIPTOR_HANDLE handle;
    handle.ptr = ((UINT64*)Original.ptr)[NodeIndex];
    return handle;
}

D3D12_GPU_VIRTUAL_ADDRESS CD3DX12AffinityDevice::GetGPUVirtualAddress(D3D12_GPU_VIRTUAL_ADDRESS const& Original, UINT const NodeIndex)
{
    if (NodeIndex == 0)
        return Original;

    if (Original == 0)
        return 0;

#if TILE_MAPPING_GPUVA
    if (GetAffinityMode() == EAffinityMode::LDA)
        return Original;
#endif


    // This function searches through our list of known GPU virtual addresses and finds the next lowest (or equal) address to the Original
    // The Original pointer is then assumed to be an offset into some segment of memory that starts at the next lowest address.
    // We use that offset against the equivalent base addresses across all devices.

    // TODO: It is inefficient to look through this every time i.e. for each DeviceIndex.
    // Possibly just cache the NextLowest here or change the interface to return a vector of offsetted pointers.
    // Should probably do both, since surely the user will be using heap pointers often and it would be nice
    // to simply save the base pointers for future lookup.
    // Of course this would all go away if we had a way to have consistent virtual addresses across all devices!
    // Also it might be possible to use proxy CPU memory allocated by the affinity layer to make this a simple lookup - see GetGPUHeapPointer.
    D3D12_GPU_VIRTUAL_ADDRESS NextLowest;
    D3D12_GPU_VIRTUAL_ADDRESS Return;

    {
        std::lock_guard<std::mutex> lock(MutexGPUVirtualAddresses);

        auto NextGreatestIterator = GPUVirtualAddresses.upper_bound(Original);
        auto NextLowestIterator = --NextGreatestIterator;
        NextLowest = NextLowestIterator->first;
        Return = NextLowestIterator->second[NodeIndex];
    }

    D3D12_GPU_VIRTUAL_ADDRESS const Offset = Original - NextLowest;
    Return += Offset;

    return Return;
}

void CD3DX12AffinityDevice::WriteApplicationMessage(D3D12_MESSAGE_SEVERITY const Severity, char const* const Message)
{
    DebugLog(L"Writing application message: %s\n", Message);
    if (InfoQueue)
    {
        InfoQueue->AddApplicationMessage(Severity, Message);
    }
    else
    {
        DebugLog(L"No InfoQueue to write application message.\n");
    }
}

UINT CD3DX12AffinityDevice::AffinityIndexToNodeMask(UINT const Index)
{
#ifndef D3DX12_SIMULATE_LDA_ON_SINGLE_NODE  
    if (mAffinityMode == EAffinityMode::LDA)
        return 1 << Index;
    else
#endif
        return 0;
}

EAffinityMode::Mask CD3DX12AffinityDevice::GetAffinityMode()
{
    return mAffinityMode;
}

EAffinityRenderingMode::Mask CD3DX12AffinityDevice::GetAffinityRenderingMode()
{
    return mAffinityRenderingMode;
}

void CD3DX12AffinityDevice::SetAffinityRenderingMode(EAffinityRenderingMode::Mask re
Download .txt
gitextract_hdu2kkqx/

├── .gitattributes
├── .gitignore
├── LICENSE
├── Libraries/
│   ├── D3DX12/
│   │   ├── d3dx12.h
│   │   └── readme.md
│   ├── D3DX12AffinityLayer/
│   │   ├── Desktop/
│   │   │   ├── CD3DX12AffinityCommandAllocator.cpp
│   │   │   ├── CD3DX12AffinityCommandAllocator.h
│   │   │   ├── CD3DX12AffinityCommandList.cpp
│   │   │   ├── CD3DX12AffinityCommandList.h
│   │   │   ├── CD3DX12AffinityCommandQueue.cpp
│   │   │   ├── CD3DX12AffinityCommandQueue.h
│   │   │   ├── CD3DX12AffinityCommandSignature.cpp
│   │   │   ├── CD3DX12AffinityCommandSignature.h
│   │   │   ├── CD3DX12AffinityDescriptorHeap.cpp
│   │   │   ├── CD3DX12AffinityDescriptorHeap.h
│   │   │   ├── CD3DX12AffinityDevice.cpp
│   │   │   ├── CD3DX12AffinityDevice.h
│   │   │   ├── CD3DX12AffinityDeviceChild.cpp
│   │   │   ├── CD3DX12AffinityDeviceChild.h
│   │   │   ├── CD3DX12AffinityFence.cpp
│   │   │   ├── CD3DX12AffinityFence.h
│   │   │   ├── CD3DX12AffinityGraphicsCommandList.cpp
│   │   │   ├── CD3DX12AffinityGraphicsCommandList.h
│   │   │   ├── CD3DX12AffinityHeap.cpp
│   │   │   ├── CD3DX12AffinityHeap.h
│   │   │   ├── CD3DX12AffinityObject.cpp
│   │   │   ├── CD3DX12AffinityObject.h
│   │   │   ├── CD3DX12AffinityPageable.cpp
│   │   │   ├── CD3DX12AffinityPageable.h
│   │   │   ├── CD3DX12AffinityPipelineState.cpp
│   │   │   ├── CD3DX12AffinityPipelineState.h
│   │   │   ├── CD3DX12AffinityQueryHeap.cpp
│   │   │   ├── CD3DX12AffinityQueryHeap.h
│   │   │   ├── CD3DX12AffinityResource.cpp
│   │   │   ├── CD3DX12AffinityResource.h
│   │   │   ├── CD3DX12AffinityRootSignature.cpp
│   │   │   ├── CD3DX12AffinityRootSignature.h
│   │   │   ├── CDXGIAffinitySwapChain.cpp
│   │   │   ├── CDXGIAffinitySwapChain.h
│   │   │   ├── D3DX12AffinityCreateMultiDevice.cpp
│   │   │   ├── D3DX12AffinityLayer.vcxproj
│   │   │   ├── D3DX12AffinityLayer.vcxproj.filters
│   │   │   ├── DXGIXAffinityCreateLDASwapChain.cpp
│   │   │   ├── DXGIXAffinityCreateSingleWindowSwapChain.cpp
│   │   │   ├── Utils.cpp
│   │   │   ├── Utils.h
│   │   │   ├── d3dx12.h
│   │   │   ├── d3dx12affinity.cpp
│   │   │   ├── d3dx12affinity.h
│   │   │   ├── d3dx12affinity_d3dx12.h
│   │   │   └── d3dx12affinity_structs.h
│   │   ├── UWP/
│   │   │   ├── CD3DX12AffinityCommandAllocator.cpp
│   │   │   ├── CD3DX12AffinityCommandAllocator.h
│   │   │   ├── CD3DX12AffinityCommandList.cpp
│   │   │   ├── CD3DX12AffinityCommandList.h
│   │   │   ├── CD3DX12AffinityCommandQueue.cpp
│   │   │   ├── CD3DX12AffinityCommandQueue.h
│   │   │   ├── CD3DX12AffinityCommandSignature.cpp
│   │   │   ├── CD3DX12AffinityCommandSignature.h
│   │   │   ├── CD3DX12AffinityDescriptorHeap.cpp
│   │   │   ├── CD3DX12AffinityDescriptorHeap.h
│   │   │   ├── CD3DX12AffinityDevice.cpp
│   │   │   ├── CD3DX12AffinityDevice.h
│   │   │   ├── CD3DX12AffinityDeviceChild.cpp
│   │   │   ├── CD3DX12AffinityDeviceChild.h
│   │   │   ├── CD3DX12AffinityFence.cpp
│   │   │   ├── CD3DX12AffinityFence.h
│   │   │   ├── CD3DX12AffinityGraphicsCommandList.cpp
│   │   │   ├── CD3DX12AffinityGraphicsCommandList.h
│   │   │   ├── CD3DX12AffinityHeap.cpp
│   │   │   ├── CD3DX12AffinityHeap.h
│   │   │   ├── CD3DX12AffinityObject.cpp
│   │   │   ├── CD3DX12AffinityObject.h
│   │   │   ├── CD3DX12AffinityPageable.cpp
│   │   │   ├── CD3DX12AffinityPageable.h
│   │   │   ├── CD3DX12AffinityPipelineState.cpp
│   │   │   ├── CD3DX12AffinityPipelineState.h
│   │   │   ├── CD3DX12AffinityQueryHeap.cpp
│   │   │   ├── CD3DX12AffinityQueryHeap.h
│   │   │   ├── CD3DX12AffinityResource.cpp
│   │   │   ├── CD3DX12AffinityResource.h
│   │   │   ├── CD3DX12AffinityRootSignature.cpp
│   │   │   ├── CD3DX12AffinityRootSignature.h
│   │   │   ├── CDXGIAffinitySwapChain.cpp
│   │   │   ├── CDXGIAffinitySwapChain.h
│   │   │   ├── D3DX12AffinityCreateMultiDevice.cpp
│   │   │   ├── D3DX12AffinityLayer.vcxproj
│   │   │   ├── D3DX12AffinityLayer.vcxproj.filters
│   │   │   ├── DXGIXAffinityCreateLDASwapChain.cpp
│   │   │   ├── DXGIXAffinityCreateSingleWindowSwapChain.cpp
│   │   │   ├── Utils.cpp
│   │   │   ├── Utils.h
│   │   │   ├── d3dx12.h
│   │   │   ├── d3dx12affinity.cpp
│   │   │   ├── d3dx12affinity.h
│   │   │   ├── d3dx12affinity_d3dx12.h
│   │   │   └── d3dx12affinity_structs.h
│   │   └── readme.md
│   └── D3DX12Residency/
│       ├── d3dx12Residency.h
│       └── readme.md
├── MiniEngine/
│   ├── .gitignore
│   ├── Core/
│   │   ├── ART/
│   │   │   ├── Animation/
│   │   │   │   ├── AnimatedValue.cpp
│   │   │   │   ├── AnimatedValue.h
│   │   │   │   ├── AnimatedValue.inl
│   │   │   │   ├── AnimationController.cpp
│   │   │   │   ├── AnimationController.h
│   │   │   │   ├── CameraAnimation.cpp
│   │   │   │   ├── CameraAnimation.h
│   │   │   │   ├── SceneAnimation.cpp
│   │   │   │   ├── SceneAnimation.h
│   │   │   │   └── SerializationUtil.h
│   │   │   ├── CommonDefs.h
│   │   │   ├── GUI/
│   │   │   │   ├── AnimationWidget.cpp
│   │   │   │   ├── AnimationWidget.h
│   │   │   │   ├── GUICore.cpp
│   │   │   │   ├── GUICore.h
│   │   │   │   ├── GUIUtil.h
│   │   │   │   ├── IGUIWidget.h
│   │   │   │   ├── SequencerWidget.cpp
│   │   │   │   ├── SequencerWidget.h
│   │   │   │   └── imgui/
│   │   │   │       ├── LICENSE.txt
│   │   │   │       ├── README.md
│   │   │   │       ├── imconfig.h
│   │   │   │       ├── imgui.cpp
│   │   │   │       ├── imgui.h
│   │   │   │       ├── imgui_demo.cpp
│   │   │   │       ├── imgui_draw.cpp
│   │   │   │       ├── imgui_impl_dx11.cpp
│   │   │   │       ├── imgui_impl_dx11.h
│   │   │   │       ├── imgui_internal.h
│   │   │   │       ├── stb_rect_pack.h
│   │   │   │       ├── stb_textedit.h
│   │   │   │       └── stb_truetype.h
│   │   │   ├── PerfStat/
│   │   │   │   ├── PerfStat.cpp
│   │   │   │   └── PerfStat.h
│   │   │   ├── Sequencer/
│   │   │   │   ├── FrameSequencer.cpp
│   │   │   │   └── FrameSequencer.h
│   │   │   └── Wddm22Defs.h
│   │   ├── BitonicSort.cpp
│   │   ├── BitonicSort.h
│   │   ├── BuddyAllocator.cpp
│   │   ├── BuddyAllocator.h
│   │   ├── BufferManager.cpp
│   │   ├── BufferManager.h
│   │   ├── Camera.cpp
│   │   ├── Camera.h
│   │   ├── CameraController.cpp
│   │   ├── CameraController.h
│   │   ├── Color.cpp
│   │   ├── Color.h
│   │   ├── ColorBuffer.cpp
│   │   ├── ColorBuffer.h
│   │   ├── CommandAllocatorPool.cpp
│   │   ├── CommandAllocatorPool.h
│   │   ├── CommandContext.cpp
│   │   ├── CommandContext.h
│   │   ├── CommandListManager.cpp
│   │   ├── CommandListManager.h
│   │   ├── CommandSignature.cpp
│   │   ├── CommandSignature.h
│   │   ├── Core_VS17.vcxproj
│   │   ├── Core_VS17.vcxproj.filters
│   │   ├── DDSTextureLoader.cpp
│   │   ├── DDSTextureLoader.h
│   │   ├── DepthBuffer.cpp
│   │   ├── DepthBuffer.h
│   │   ├── DepthOfField.cpp
│   │   ├── DepthOfField.h
│   │   ├── DescriptorHeap.cpp
│   │   ├── DescriptorHeap.h
│   │   ├── DynamicDescriptorHeap.cpp
│   │   ├── DynamicDescriptorHeap.h
│   │   ├── DynamicUploadBuffer.cpp
│   │   ├── DynamicUploadBuffer.h
│   │   ├── EngineProfiling.cpp
│   │   ├── EngineProfiling.h
│   │   ├── EngineTuning.cpp
│   │   ├── EngineTuning.h
│   │   ├── EsramAllocator.h
│   │   ├── FXAA.cpp
│   │   ├── FXAA.h
│   │   ├── FileUtility.cpp
│   │   ├── FileUtility.h
│   │   ├── Fonts/
│   │   │   └── consola24.h
│   │   ├── GameCore.cpp
│   │   ├── GameCore.h
│   │   ├── GameInput.cpp
│   │   ├── GameInput.h
│   │   ├── GpuBuffer.cpp
│   │   ├── GpuBuffer.h
│   │   ├── GpuCounterManager.cpp
│   │   ├── GpuCounterManager.h
│   │   ├── GpuResource.h
│   │   ├── GraphRenderer.cpp
│   │   ├── GraphRenderer.h
│   │   ├── GraphicsCommon.cpp
│   │   ├── GraphicsCommon.h
│   │   ├── GraphicsCore.cpp
│   │   ├── GraphicsCore.h
│   │   ├── Hash.h
│   │   ├── LinearAllocator.cpp
│   │   ├── LinearAllocator.h
│   │   ├── Math/
│   │   │   ├── BoundingPlane.h
│   │   │   ├── BoundingSphere.h
│   │   │   ├── Common.h
│   │   │   ├── Frustum.cpp
│   │   │   ├── Frustum.h
│   │   │   ├── Functions.inl
│   │   │   ├── Matrix3.h
│   │   │   ├── Matrix4.h
│   │   │   ├── Quaternion.h
│   │   │   ├── Random.cpp
│   │   │   ├── Random.h
│   │   │   ├── Scalar.h
│   │   │   ├── Transform.h
│   │   │   └── Vector.h
│   │   ├── MotionBlur.cpp
│   │   ├── MotionBlur.h
│   │   ├── ParticleEffect.cpp
│   │   ├── ParticleEffect.h
│   │   ├── ParticleEffectManager.cpp
│   │   ├── ParticleEffectManager.h
│   │   ├── ParticleEffectProperties.h
│   │   ├── ParticleEmissionProperties.cpp
│   │   ├── ParticleShaderStructs.h
│   │   ├── PipelineState.cpp
│   │   ├── PipelineState.h
│   │   ├── PixelBuffer.cpp
│   │   ├── PixelBuffer.h
│   │   ├── PostEffects.cpp
│   │   ├── PostEffects.h
│   │   ├── ReadbackBuffer.cpp
│   │   ├── ReadbackBuffer.h
│   │   ├── RootSignature.cpp
│   │   ├── RootSignature.h
│   │   ├── SSAO.cpp
│   │   ├── SSAO.h
│   │   ├── SamplerManager.cpp
│   │   ├── SamplerManager.h
│   │   ├── Shaders/
│   │   │   ├── AdaptExposureCS.hlsl
│   │   │   ├── AoBlurAndUpsampleCS.hlsli
│   │   │   ├── AoBlurUpsampleBlendOutCS.hlsl
│   │   │   ├── AoBlurUpsampleCS.hlsl
│   │   │   ├── AoBlurUpsamplePreMinBlendOutCS.hlsl
│   │   │   ├── AoBlurUpsamplePreMinCS.hlsl
│   │   │   ├── AoPrepareDepthBuffers1CS.hlsl
│   │   │   ├── AoPrepareDepthBuffers2CS.hlsl
│   │   │   ├── AoRender1CS.hlsl
│   │   │   ├── AoRender2CS.hlsl
│   │   │   ├── AoRenderCS.hlsli
│   │   │   ├── ApplyBloom2CS.hlsl
│   │   │   ├── ApplyBloomCS.hlsl
│   │   │   ├── AverageLumaCS.hlsl
│   │   │   ├── BicubicHorizontalUpsamplePS.hlsl
│   │   │   ├── BicubicUpsampleGammaPS.hlsl
│   │   │   ├── BicubicUpsamplePS.hlsl
│   │   │   ├── BicubicVerticalUpsamplePS.hlsl
│   │   │   ├── BilinearUpsamplePS.hlsl
│   │   │   ├── Bitonic32InnerSortCS.hlsl
│   │   │   ├── Bitonic32OuterSortCS.hlsl
│   │   │   ├── Bitonic32PreSortCS.hlsl
│   │   │   ├── Bitonic64InnerSortCS.hlsl
│   │   │   ├── Bitonic64OuterSortCS.hlsl
│   │   │   ├── Bitonic64PreSortCS.hlsl
│   │   │   ├── BitonicIndirectArgsCS.hlsl
│   │   │   ├── BitonicSortCommon.hlsli
│   │   │   ├── BloomExtractAndDownsampleHdrCS.hlsl
│   │   │   ├── BloomExtractAndDownsampleLdrCS.hlsl
│   │   │   ├── BlurCS.hlsl
│   │   │   ├── BoundNeighborhoodCS.hlsl
│   │   │   ├── BufferCopyPS.hlsl
│   │   │   ├── CameraMotionBlurPrePassCS.hlsl
│   │   │   ├── CameraMotionBlurPrePassLinearZCS.hlsl
│   │   │   ├── CameraVelocityCS.hlsl
│   │   │   ├── ColorSpaceUtility.hlsli
│   │   │   ├── CopyBackPostBufferCS.hlsl
│   │   │   ├── DebugDrawHistogramCS.hlsl
│   │   │   ├── DebugLuminanceHdr2CS.hlsl
│   │   │   ├── DebugLuminanceHdrCS.hlsl
│   │   │   ├── DebugLuminanceLdr2CS.hlsl
│   │   │   ├── DebugLuminanceLdrCS.hlsl
│   │   │   ├── DebugSSAOCS.hlsl
│   │   │   ├── DoFCombine2CS.hlsl
│   │   │   ├── DoFCombineCS.hlsl
│   │   │   ├── DoFCombineFast2CS.hlsl
│   │   │   ├── DoFCombineFastCS.hlsl
│   │   │   ├── DoFCommon.hlsli
│   │   │   ├── DoFDebugBlueCS.hlsl
│   │   │   ├── DoFDebugGreenCS.hlsl
│   │   │   ├── DoFDebugRedCS.hlsl
│   │   │   ├── DoFMedianFilterCS.hlsl
│   │   │   ├── DoFMedianFilterFixupCS.hlsl
│   │   │   ├── DoFMedianFilterSepAlphaCS.hlsl
│   │   │   ├── DoFPass1CS.hlsl
│   │   │   ├── DoFPass2CS.hlsl
│   │   │   ├── DoFPass2DebugCS.hlsl
│   │   │   ├── DoFPass2FastCS.hlsl
│   │   │   ├── DoFPass2FixupCS.hlsl
│   │   │   ├── DoFPreFilterCS.hlsl
│   │   │   ├── DoFPreFilterFastCS.hlsl
│   │   │   ├── DoFPreFilterFixupCS.hlsl
│   │   │   ├── DoFRS.hlsli
│   │   │   ├── DoFTilePassCS.hlsl
│   │   │   ├── DoFTilePassFixupCS.hlsl
│   │   │   ├── DownsampleBloomAllCS.hlsl
│   │   │   ├── DownsampleBloomCS.hlsl
│   │   │   ├── ExtractLumaCS.hlsl
│   │   │   ├── FXAAPass1CS.hlsli
│   │   │   ├── FXAAPass1_Luma2_CS.hlsl
│   │   │   ├── FXAAPass1_Luma_CS.hlsl
│   │   │   ├── FXAAPass1_RGB2_CS.hlsl
│   │   │   ├── FXAAPass1_RGB_CS.hlsl
│   │   │   ├── FXAAPass2CS.hlsli
│   │   │   ├── FXAAPass2H2CS.hlsl
│   │   │   ├── FXAAPass2HCS.hlsl
│   │   │   ├── FXAAPass2HDebug2CS.hlsl
│   │   │   ├── FXAAPass2HDebugCS.hlsl
│   │   │   ├── FXAAPass2V2CS.hlsl
│   │   │   ├── FXAAPass2VCS.hlsl
│   │   │   ├── FXAAPass2VDebug2CS.hlsl
│   │   │   ├── FXAAPass2VDebugCS.hlsl
│   │   │   ├── FXAAResolveWorkQueueCS.hlsl
│   │   │   ├── FXAARootSignature.hlsli
│   │   │   ├── GenerateHistogramCS.hlsl
│   │   │   ├── GenerateMipsCS.hlsli
│   │   │   ├── GenerateMipsGammaCS.hlsl
│   │   │   ├── GenerateMipsGammaOddCS.hlsl
│   │   │   ├── GenerateMipsGammaOddXCS.hlsl
│   │   │   ├── GenerateMipsGammaOddYCS.hlsl
│   │   │   ├── GenerateMipsLinearCS.hlsl
│   │   │   ├── GenerateMipsLinearOddCS.hlsl
│   │   │   ├── GenerateMipsLinearOddXCS.hlsl
│   │   │   ├── GenerateMipsLinearOddYCS.hlsl
│   │   │   ├── LinearizeDepthCS.hlsl
│   │   │   ├── MagnifyPixelsPS.hlsl
│   │   │   ├── MotionBlurFinalPassCS.hlsl
│   │   │   ├── MotionBlurFinalPassPS.hlsl
│   │   │   ├── MotionBlurPrePassCS.hlsl
│   │   │   ├── MotionBlurRS.hlsli
│   │   │   ├── ParticleBinCullingCS.hlsl
│   │   │   ├── ParticleDepthBoundsCS.hlsl
│   │   │   ├── ParticleDispatchIndirectArgsCS.hlsl
│   │   │   ├── ParticleFinalDispatchIndirectArgsCS.hlsl
│   │   │   ├── ParticleLargeBinCullingCS.hlsl
│   │   │   ├── ParticleNoSortVS.hlsl
│   │   │   ├── ParticlePS.hlsl
│   │   │   ├── ParticlePreSortCS.hlsl
│   │   │   ├── ParticleRS.hlsli
│   │   │   ├── ParticleSortIndirectArgsCS.hlsl
│   │   │   ├── ParticleSpawnCS.hlsl
│   │   │   ├── ParticleTileCullingCS.hlsl
│   │   │   ├── ParticleTileRender2CS.hlsl
│   │   │   ├── ParticleTileRenderCS.hlsl
│   │   │   ├── ParticleTileRenderFast2CS.hlsl
│   │   │   ├── ParticleTileRenderFastCS.hlsl
│   │   │   ├── ParticleTileRenderFastDynamic2CS.hlsl
│   │   │   ├── ParticleTileRenderFastDynamicCS.hlsl
│   │   │   ├── ParticleTileRenderFastLowRes2CS.hlsl
│   │   │   ├── ParticleTileRenderFastLowResCS.hlsl
│   │   │   ├── ParticleTileRenderSlowDynamic2CS.hlsl
│   │   │   ├── ParticleTileRenderSlowDynamicCS.hlsl
│   │   │   ├── ParticleTileRenderSlowLowRes2CS.hlsl
│   │   │   ├── ParticleTileRenderSlowLowResCS.hlsl
│   │   │   ├── ParticleUpdateCS.hlsl
│   │   │   ├── ParticleUpdateCommon.hlsli
│   │   │   ├── ParticleUtility.hlsli
│   │   │   ├── ParticleVS.hlsl
│   │   │   ├── PerfGraphBackgroundVS.hlsl
│   │   │   ├── PerfGraphPS.hlsl
│   │   │   ├── PerfGraphRS.hlsli
│   │   │   ├── PerfGraphVS.hlsl
│   │   │   ├── PixelPacking.hlsli
│   │   │   ├── PixelPacking_LUV.hlsli
│   │   │   ├── PixelPacking_R11G11B10.hlsli
│   │   │   ├── PixelPacking_RGBE.hlsli
│   │   │   ├── PixelPacking_RGBM.hlsli
│   │   │   ├── PixelPacking_Velocity.hlsli
│   │   │   ├── PostEffectsRS.hlsli
│   │   │   ├── PresentHDRPS.hlsl
│   │   │   ├── PresentRS.hlsli
│   │   │   ├── PresentSDRPS.hlsl
│   │   │   ├── ResolveTAACS.hlsl
│   │   │   ├── SSAORS.hlsli
│   │   │   ├── ScreenQuadVS.hlsl
│   │   │   ├── ShaderUtility.hlsli
│   │   │   ├── SharpenTAACS.hlsl
│   │   │   ├── SharpeningUpsampleGammaPS.hlsl
│   │   │   ├── SharpeningUpsamplePS.hlsl
│   │   │   ├── TemporalBlendCS.hlsl
│   │   │   ├── TemporalRS.hlsli
│   │   │   ├── TextAntialiasPS.hlsl
│   │   │   ├── TextRS.hlsli
│   │   │   ├── TextShadowPS.hlsl
│   │   │   ├── TextVS.hlsl
│   │   │   ├── ToneMap2CS.hlsl
│   │   │   ├── ToneMapCS.hlsl
│   │   │   ├── ToneMapHDR2CS.hlsl
│   │   │   ├── ToneMapHDRCS.hlsl
│   │   │   ├── ToneMappingUtility.hlsli
│   │   │   ├── UpsampleAndBlurCS.hlsl
│   │   │   └── VarianceMapCS.hlsl
│   │   ├── ShadowBuffer.cpp
│   │   ├── ShadowBuffer.h
│   │   ├── ShadowCamera.cpp
│   │   ├── ShadowCamera.h
│   │   ├── SystemTime.cpp
│   │   ├── SystemTime.h
│   │   ├── TemporalEffects.cpp
│   │   ├── TemporalEffects.h
│   │   ├── TextRenderer.cpp
│   │   ├── TextRenderer.h
│   │   ├── TextureManager.cpp
│   │   ├── TextureManager.h
│   │   ├── Utility.cpp
│   │   ├── Utility.h
│   │   ├── VectorMath.h
│   │   ├── d3dx12.h
│   │   ├── dds.h
│   │   ├── pch.cpp
│   │   └── pch.h
│   ├── CreateNewLibrary.bat
│   ├── CreateNewSolution.bat
│   ├── License.txt
│   ├── Model/
│   │   ├── Model.cpp
│   │   ├── Model.h
│   │   ├── ModelH3D.cpp
│   │   ├── Model_VS17.vcxproj
│   │   └── Model_VS17.vcxproj.filters
│   ├── ModelViewer/
│   │   ├── CompileSM6Test.bat
│   │   ├── ForwardPlusLighting.cpp
│   │   ├── ForwardPlusLighting.h
│   │   ├── ModelViewer.cpp
│   │   ├── ModelViewer_VS17.sln
│   │   ├── ModelViewer_VS17.vcxproj
│   │   ├── ModelViewer_VS17.vcxproj.filters
│   │   ├── Scene.cpp
│   │   ├── Scene.h
│   │   ├── Shaders/
│   │   │   ├── CheckerboardColorResolveCS.hlsl
│   │   │   ├── CheckerboardDepthResolveCS.hlsl
│   │   │   ├── DepthViewerPS.hlsl
│   │   │   ├── DepthViewerPSHeader.hlsli
│   │   │   ├── DepthViewerPS_CBR.hlsl
│   │   │   ├── DepthViewerVS.hlsl
│   │   │   ├── FillLightGridCS.hlsli
│   │   │   ├── FillLightGridCS_16.hlsl
│   │   │   ├── FillLightGridCS_24.hlsl
│   │   │   ├── FillLightGridCS_32.hlsl
│   │   │   ├── FillLightGridCS_8.hlsl
│   │   │   ├── LightGrid.hlsli
│   │   │   ├── ModelViewerPS.hlsl
│   │   │   ├── ModelViewerPSHeader.hlsli
│   │   │   ├── ModelViewerPS_CBR.hlsl
│   │   │   ├── ModelViewerPS_CBR_PP.hlsl
│   │   │   ├── ModelViewerPS_CPS.hlsl
│   │   │   ├── ModelViewerRS.hlsli
│   │   │   ├── ModelViewerVS.hlsl
│   │   │   ├── MsaaColorResolveCS.hlsl
│   │   │   ├── MsaaDepthResolveCS.hlsl
│   │   │   ├── SamplePositions.hlsli
│   │   │   ├── UpsampleColorResolveCS.hlsl
│   │   │   ├── UpsampleDepthResolveCS.hlsl
│   │   │   └── WaveTileCountPS.hlsl
│   │   ├── UWP.appxmanifest
│   │   ├── engineTuning.txt
│   │   └── perfreport.csv
│   ├── PropertySheets/
│   │   ├── Debug.props
│   │   ├── OrganizedBuild.props
│   │   ├── Profile.props
│   │   ├── Release.props
│   │   ├── UWP.props
│   │   ├── VS17.props
│   │   └── Win32.props
│   ├── rapidjson-master/
│   │   └── include/
│   │       └── rapidjson/
│   │           ├── allocators.h
│   │           ├── cursorstreamwrapper.h
│   │           ├── document.h
│   │           ├── encodedstream.h
│   │           ├── encodings.h
│   │           ├── error/
│   │           │   ├── en.h
│   │           │   └── error.h
│   │           ├── filereadstream.h
│   │           ├── filewritestream.h
│   │           ├── fwd.h
│   │           ├── internal/
│   │           │   ├── biginteger.h
│   │           │   ├── diyfp.h
│   │           │   ├── dtoa.h
│   │           │   ├── ieee754.h
│   │           │   ├── itoa.h
│   │           │   ├── meta.h
│   │           │   ├── pow10.h
│   │           │   ├── regex.h
│   │           │   ├── stack.h
│   │           │   ├── strfunc.h
│   │           │   ├── strtod.h
│   │           │   └── swap.h
│   │           ├── istreamwrapper.h
│   │           ├── memorybuffer.h
│   │           ├── memorystream.h
│   │           ├── msinttypes/
│   │           │   ├── inttypes.h
│   │           │   └── stdint.h
│   │           ├── ostreamwrapper.h
│   │           ├── pointer.h
│   │           ├── prettywriter.h
│   │           ├── rapidjson.h
│   │           ├── reader.h
│   │           ├── schema.h
│   │           ├── stream.h
│   │           ├── stringbuffer.h
│   │           └── writer.h
│   ├── readme.md
│   └── zlib-1.2.11/
│       ├── zconf.h
│       ├── zlib.h
│       └── zlibstat.lib
├── README.md
├── Sponza/
│   ├── MySequence/
│   │   ├── frame0001.tga
│   │   ├── frame0002.tga
│   │   ├── frame0003.tga
│   │   ├── frame0004.tga
│   │   ├── frame0005.tga
│   │   ├── frame0006.tga
│   │   ├── frame0007.tga
│   │   ├── frame0008.tga
│   │   ├── frame0009.tga
│   │   └── perfreport.csv
│   ├── animation.json
│   ├── default.anim
│   ├── sponza.h3d
│   ├── sponza.scn
│   └── textures/
│       ├── default.DDS
│       ├── default_normal.DDS
│       ├── default_specular.DDS
│       └── textures/
│           ├── background.dds
│           ├── background_ddn.dds
│           ├── chain_texture.dds
│           ├── chain_texture_ddn.dds
│           ├── chain_texture_mask.dds
│           ├── lion.dds
│           ├── lion2_ddn.dds
│           ├── lion_ddn.dds
│           ├── spnza_bricks_a_ddn.dds
│           ├── spnza_bricks_a_diff.dds
│           ├── spnza_bricks_a_spec.dds
│           ├── sponza_arch_ddn.dds
│           ├── sponza_arch_diff.dds
│           ├── sponza_arch_spec.dds
│           ├── sponza_ceiling_a_diff.dds
│           ├── sponza_ceiling_a_spec.dds
│           ├── sponza_column_a_ddn.dds
│           ├── sponza_column_a_diff.dds
│           ├── sponza_column_a_spec.dds
│           ├── sponza_column_b_ddn.dds
│           ├── sponza_column_b_diff.dds
│           ├── sponza_column_b_spec.dds
│           ├── sponza_column_c_ddn.dds
│           ├── sponza_column_c_diff.dds
│           ├── sponza_column_c_spec.dds
│           ├── sponza_curtain_blue_diff.dds
│           ├── sponza_curtain_diff.dds
│           ├── sponza_curtain_green_diff.dds
│           ├── sponza_details_diff.dds
│           ├── sponza_details_spec.dds
│           ├── sponza_fabric_blue_diff.dds
│           ├── sponza_fabric_diff.dds
│           ├── sponza_fabric_green_diff.dds
│           ├── sponza_fabric_spec.dds
│           ├── sponza_flagpole_diff.dds
│           ├── sponza_flagpole_spec.dds
│           ├── sponza_floor_a_diff.dds
│           ├── sponza_floor_a_spec.dds
│           ├── sponza_roof_diff.dds
│           ├── sponza_thorn_ddn.dds
│           ├── sponza_thorn_diff.dds
│           ├── sponza_thorn_mask.dds
│           ├── sponza_thorn_spec.dds
│           ├── vase_ddn.dds
│           ├── vase_dif.dds
│           ├── vase_hanging.dds
│           ├── vase_plant.dds
│           ├── vase_plant_mask.dds
│           ├── vase_plant_spec.dds
│           ├── vase_round.dds
│           ├── vase_round_ddn.dds
│           └── vase_round_spec.dds
├── TechniqueDemos/
│   ├── .gitignore
│   └── D3D12MemoryManagement/
│       ├── readme.md
│       └── src/
│           ├── Camera.cpp
│           ├── Camera.h
│           ├── Color.hlsl
│           ├── Context.cpp
│           ├── Context.h
│           ├── D3D12MemoryManagement.cpp
│           ├── D3D12MemoryManagement.h
│           ├── D3D12MemoryManagement.sln
│           ├── D3D12MemoryManagement.vcxproj
│           ├── D3D12MemoryManagement.vcxproj.filters
│           ├── Framework.cpp
│           ├── Framework.h
│           ├── List.h
│           ├── Log.cpp
│           ├── Log.h
│           ├── Paging.cpp
│           ├── Paging.h
│           ├── Render.cpp
│           ├── Render.h
│           ├── Resource.h
│           ├── Shader.cpp
│           ├── Shader.h
│           ├── Texture.hlsl
│           ├── TileGrid.dds
│           ├── Util.cpp
│           ├── Util.h
│           ├── Versioning.cpp
│           ├── Versioning.h
│           ├── d3dx12.h
│           ├── main.cpp
│           ├── stdafx.cpp
│           └── stdafx.h
└── todo.md
Download .txt
Showing preview only (259K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (2689 symbols across 248 files)

FILE: Libraries/D3DX12/d3dx12.h
  type CD3DX12_DEFAULT (line 19) | struct CD3DX12_DEFAULT {}
  function D3D12_RECT (line 34) | struct CD3DX12_RECT : public D3D12_RECT
  function D3D12_VIEWPORT (line 57) | struct CD3DX12_VIEWPORT : public D3D12_VIEWPORT
  type CD3DX12_BOX (line 122) | struct CD3DX12_BOX
  function explicit (line 126) | explicit CD3DX12_BOX( const D3D12_BOX& o ) :
  function explicit (line 129) | explicit CD3DX12_BOX(
  function explicit (line 140) | explicit CD3DX12_BOX(
  function explicit (line 153) | explicit CD3DX12_BOX(
  type CD3DX12_DEPTH_STENCIL_DESC (line 180) | struct CD3DX12_DEPTH_STENCIL_DESC
  function explicit (line 184) | explicit CD3DX12_DEPTH_STENCIL_DESC( const D3D12_DEPTH_STENCIL_DESC& o ) :
  function explicit (line 187) | explicit CD3DX12_DEPTH_STENCIL_DESC( CD3DX12_DEFAULT )
  function explicit (line 200) | explicit CD3DX12_DEPTH_STENCIL_DESC(
  type CD3DX12_DEPTH_STENCIL_DESC1 (line 236) | struct CD3DX12_DEPTH_STENCIL_DESC1
  function explicit (line 240) | explicit CD3DX12_DEPTH_STENCIL_DESC1( const D3D12_DEPTH_STENCIL_DESC1& o...
  function explicit (line 243) | explicit CD3DX12_DEPTH_STENCIL_DESC1( const D3D12_DEPTH_STENCIL_DESC& o )
  function explicit (line 261) | explicit CD3DX12_DEPTH_STENCIL_DESC1( CD3DX12_DEFAULT )
  function explicit (line 275) | explicit CD3DX12_DEPTH_STENCIL_DESC1(
  function explicit (line 336) | explicit CD3DX12_BLEND_DESC( const D3D12_BLEND_DESC& o ) :
  function explicit (line 339) | explicit CD3DX12_BLEND_DESC( CD3DX12_DEFAULT )
  type CD3DX12_RASTERIZER_DESC (line 359) | struct CD3DX12_RASTERIZER_DESC
  function explicit (line 363) | explicit CD3DX12_RASTERIZER_DESC( const D3D12_RASTERIZER_DESC& o ) :
  function explicit (line 366) | explicit CD3DX12_RASTERIZER_DESC( CD3DX12_DEFAULT )
  function explicit (line 380) | explicit CD3DX12_RASTERIZER_DESC(
  type CD3DX12_RESOURCE_ALLOCATION_INFO (line 410) | struct CD3DX12_RESOURCE_ALLOCATION_INFO
  function explicit (line 414) | explicit CD3DX12_RESOURCE_ALLOCATION_INFO( const D3D12_RESOURCE_ALLOCATI...
  function explicit (line 432) | explicit CD3DX12_HEAP_PROPERTIES(const D3D12_HEAP_PROPERTIES &o) :
  type CD3DX12_HEAP_DESC (line 476) | struct CD3DX12_HEAP_DESC
  function explicit (line 480) | explicit CD3DX12_HEAP_DESC(const D3D12_HEAP_DESC &o) :
  type CD3DX12_CLEAR_VALUE (line 563) | struct CD3DX12_CLEAR_VALUE
  function explicit (line 567) | explicit CD3DX12_CLEAR_VALUE(const D3D12_CLEAR_VALUE &o) :
  type CD3DX12_RANGE (line 591) | struct CD3DX12_RANGE
  function explicit (line 595) | explicit CD3DX12_RANGE(const D3D12_RANGE &o) :
  function explicit (line 631) | explicit CD3DX12_SUBRESOURCE_RANGE_UINT64(const D3D12_SUBRESOURCE_RANGE_...
  type CD3DX12_SHADER_BYTECODE (line 654) | struct CD3DX12_SHADER_BYTECODE
  function explicit (line 658) | explicit CD3DX12_SHADER_BYTECODE(const D3D12_SHADER_BYTECODE &o) :
  function D3D12_TILED_RESOURCE_COORDINATE (line 678) | struct CD3DX12_TILED_RESOURCE_COORDINATE : public D3D12_TILED_RESOURCE_C...
  type CD3DX12_TILE_REGION_SIZE (line 700) | struct CD3DX12_TILE_REGION_SIZE
  function explicit (line 704) | explicit CD3DX12_TILE_REGION_SIZE(const D3D12_TILE_REGION_SIZE &o) :
  function D3D12_SUBRESOURCE_TILING (line 724) | struct CD3DX12_SUBRESOURCE_TILING : public D3D12_SUBRESOURCE_TILING
  type CD3DX12_TILE_SHAPE (line 746) | struct CD3DX12_TILE_SHAPE
  function explicit (line 750) | explicit CD3DX12_TILE_SHAPE(const D3D12_TILE_SHAPE &o) :
  function D3D12_RESOURCE_BARRIER (line 766) | struct CD3DX12_RESOURCE_BARRIER : public D3D12_RESOURCE_BARRIER
  function D3D12_PACKED_MIP_INFO (line 817) | struct CD3DX12_PACKED_MIP_INFO : public D3D12_PACKED_MIP_INFO
  type CD3DX12_SUBRESOURCE_FOOTPRINT (line 839) | struct CD3DX12_SUBRESOURCE_FOOTPRINT
  function explicit (line 843) | explicit CD3DX12_SUBRESOURCE_FOOTPRINT(const D3D12_SUBRESOURCE_FOOTPRINT...
  type CD3DX12_TEXTURE_COPY_LOCATION (line 873) | struct CD3DX12_TEXTURE_COPY_LOCATION
  function explicit (line 877) | explicit CD3DX12_TEXTURE_COPY_LOCATION(const D3D12_TEXTURE_COPY_LOCATION...
  function D3D12_DESCRIPTOR_RANGE (line 896) | struct CD3DX12_DESCRIPTOR_RANGE : public D3D12_DESCRIPTOR_RANGE
  function D3D12_ROOT_DESCRIPTOR_TABLE (line 942) | struct CD3DX12_ROOT_DESCRIPTOR_TABLE : public D3D12_ROOT_DESCRIPTOR_TABLE
  function Init (line 955) | inline void Init(
  function Init (line 962) | static inline void Init(
  function D3D12_ROOT_CONSTANTS (line 973) | struct CD3DX12_ROOT_CONSTANTS : public D3D12_ROOT_CONSTANTS
  function D3D12_ROOT_DESCRIPTOR (line 1008) | struct CD3DX12_ROOT_DESCRIPTOR : public D3D12_ROOT_DESCRIPTOR
  function D3D12_ROOT_PARAMETER (line 1036) | struct CD3DX12_ROOT_PARAMETER : public D3D12_ROOT_PARAMETER
  function InitAsDescriptorTable (line 1099) | inline void InitAsDescriptorTable(
  function D3D12_STATIC_SAMPLER_DESC (line 1142) | struct CD3DX12_STATIC_SAMPLER_DESC : public D3D12_STATIC_SAMPLER_DESC
  function D3D12_ROOT_SIGNATURE_DESC (line 1244) | struct CD3DX12_ROOT_SIGNATURE_DESC : public D3D12_ROOT_SIGNATURE_DESC
  function CD3DX12_ROOT_SIGNATURE_DESC (line 1259) | CD3DX12_ROOT_SIGNATURE_DESC(CD3DX12_DEFAULT)
  function D3D12_DESCRIPTOR_RANGE1 (line 1291) | struct CD3DX12_DESCRIPTOR_RANGE1 : public D3D12_DESCRIPTOR_RANGE1
  function D3D12_ROOT_DESCRIPTOR_TABLE1 (line 1341) | struct CD3DX12_ROOT_DESCRIPTOR_TABLE1 : public D3D12_ROOT_DESCRIPTOR_TABLE1
  function Init (line 1354) | inline void Init(
  function Init (line 1361) | static inline void Init(
  function D3D12_ROOT_DESCRIPTOR1 (line 1372) | struct CD3DX12_ROOT_DESCRIPTOR1 : public D3D12_ROOT_DESCRIPTOR1
  function D3D12_ROOT_PARAMETER1 (line 1407) | struct CD3DX12_ROOT_PARAMETER1 : public D3D12_ROOT_PARAMETER1
  function InitAsDescriptorTable (line 1473) | inline void InitAsDescriptorTable(
  function D3D12_VERSIONED_ROOT_SIGNATURE_DESC (line 1519) | struct CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC : public D3D12_VERSIONED_RO...
  function CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC (line 1553) | CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(CD3DX12_DEFAULT)
  function D3D12_CPU_DESCRIPTOR_HANDLE (line 1612) | struct CD3DX12_CPU_DESCRIPTOR_HANDLE : public D3D12_CPU_DESCRIPTOR_HANDLE
  function D3D12_GPU_DESCRIPTOR_HANDLE (line 1673) | struct CD3DX12_GPU_DESCRIPTOR_HANDLE : public D3D12_GPU_DESCRIPTOR_HANDLE
  function UINT (line 1734) | inline UINT D3D12CalcSubresource( UINT MipSlice, UINT ArraySlice, UINT P...
  function D3D12DecomposeSubresource (line 1741) | void D3D12DecomposeSubresource( UINT Subresource, UINT MipLevels, UINT A...
  function UINT8 (line 1749) | inline UINT8 D3D12GetFormatPlaneCount(
  function D3D12_RESOURCE_DESC (line 1763) | struct CD3DX12_RESOURCE_DESC : public D3D12_RESOURCE_DESC
  function CD3DX12_RESOURCE_DESC (line 1795) | static inline CD3DX12_RESOURCE_DESC Buffer(
  function UINT8 (line 1854) | inline UINT8 PlaneCount(_In_ ID3D12Device* pDevice) const
  function UINT (line 1856) | inline UINT Subresources(_In_ ID3D12Device* pDevice) const
  function UINT (line 1858) | inline UINT CalcSubresource(UINT MipSlice, UINT ArraySlice, UINT PlaneSl...
  function D3D12IsLayoutOpaque (line 2042) | inline bool D3D12IsLayoutOpaque( D3D12_TEXTURE_LAYOUT Layout )
  function ID3D12CommandList (line 2047) | ID3D12CommandList * const * CommandListCast(t_CommandListType * const * pp)
  function HRESULT (line 2061) | inline HRESULT D3DX12SerializeVersionedRootSignature(
  function D3D12_RT_FORMAT_ARRAY (line 2177) | struct CD3DX12_RT_FORMAT_ARRAY : public D3D12_RT_FORMAT_ARRAY
  function CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2200) | alignas(void*) CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2211) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_PIPELINE_STATE_FL...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2212) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< UINT,                  ...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2213) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< ID3D12RootSignature*,  ...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2214) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_INPUT_LAYOUT_DESC...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2215) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_INDEX_BUFFER_STRI...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2216) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_PRIMITIVE_TOPOLOG...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2217) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, ...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2218) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, ...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2219) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_STREAM_OUTPUT_DES...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2220) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, ...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2221) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, ...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2222) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, ...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2223) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, ...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2224) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_BLEND_DESC,    ...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2225) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_DEPTH_STENCIL_D...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2226) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_DEPTH_STENCIL_D...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2227) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< DXGI_FORMAT,           ...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2228) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_RASTERIZER_DESC...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2229) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_RT_FORMAT_ARRAY, ...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2230) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< DXGI_SAMPLE_DESC,      ...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2231) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< UINT,                  ...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2232) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_CACHED_PIPELINE_S...
  type ID3DX12PipelineParserCallbacks (line 2237) | struct ID3DX12PipelineParserCallbacks
  function ErrorUnknownSubobject (line 2266) | void ErrorUnknownSubobject(UINT /*UnknownTypeValue*/) {}
  function ComputeDescV0 (line 2270) | struct CD3DX12_PIPELINE_STATE_STREAM
  function D3D12_PIPELINE_STATE_SUBOBJECT_TYPE (line 2393) | inline D3D12_PIPELINE_STATE_SUBOBJECT_TYPE D3DX12GetBaseSubobjectType(D3...
  function HRESULT (line 2404) | inline HRESULT D3DX12ParsePipelineStream(const D3D12_PIPELINE_STATE_STRE...

FILE: Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityCommandAllocator.cpp
  function HRESULT (line 41) | HRESULT CD3DX12AffinityCommandAllocator::Reset(void)
  function ID3D12CommandAllocator (line 67) | ID3D12CommandAllocator* CD3DX12AffinityCommandAllocator::GetChildObject(...

FILE: Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityCommandList.cpp
  function D3D12_COMMAND_LIST_TYPE (line 34) | D3D12_COMMAND_LIST_TYPE STDMETHODCALLTYPE CD3DX12AffinityCommandList::Ge...
  function BOOL (line 39) | BOOL STDMETHODCALLTYPE CD3DX12AffinityCommandList::AssertResourceState(
  function HRESULT (line 62) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityCommandList::SetFeatureMask(
  function ID3D12CommandList (line 90) | ID3D12CommandList* CD3DX12AffinityCommandList::GetChildObject(UINT Affin...

FILE: Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityCommandQueue.cpp
  function HRESULT (line 168) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityCommandQueue::Signal(
  function HRESULT (line 194) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityCommandQueue::Wait(
  function HRESULT (line 219) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityCommandQueue::GetTimestampFrequ...
  function HRESULT (line 226) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityCommandQueue::GetClockCalibration(
  function D3D12_COMMAND_QUEUE_DESC (line 234) | D3D12_COMMAND_QUEUE_DESC STDMETHODCALLTYPE CD3DX12AffinityCommandQueue::...
  function ID3D12CommandQueue (line 239) | ID3D12CommandQueue* CD3DX12AffinityCommandQueue::GetQueueForSwapChainCre...
  function ID3D12CommandQueue (line 263) | ID3D12CommandQueue* CD3DX12AffinityCommandQueue::GetChildObject(UINT Aff...

FILE: Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityCommandSignature.cpp
  function ID3D12CommandSignature (line 33) | ID3D12CommandSignature* CD3DX12AffinityCommandSignature::GetChildObject(...

FILE: Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityDescriptorHeap.cpp
  function D3D12_DESCRIPTOR_HEAP_DESC (line 15) | D3D12_DESCRIPTOR_HEAP_DESC STDMETHODCALLTYPE CD3DX12AffinityDescriptorHe...
  function D3D12_CPU_DESCRIPTOR_HANDLE (line 20) | D3D12_CPU_DESCRIPTOR_HANDLE STDMETHODCALLTYPE CD3DX12AffinityDescriptorH...
  function D3D12_GPU_DESCRIPTOR_HANDLE (line 31) | D3D12_GPU_DESCRIPTOR_HANDLE STDMETHODCALLTYPE CD3DX12AffinityDescriptorH...
  function D3D12_CPU_DESCRIPTOR_HANDLE (line 42) | D3D12_CPU_DESCRIPTOR_HANDLE STDMETHODCALLTYPE CD3DX12AffinityDescriptorH...
  function D3D12_GPU_DESCRIPTOR_HANDLE (line 47) | D3D12_GPU_DESCRIPTOR_HANDLE STDMETHODCALLTYPE CD3DX12AffinityDescriptorH...
  function ID3D12DescriptorHeap (line 128) | ID3D12DescriptorHeap* CD3DX12AffinityDescriptorHeap::GetChildObject(UINT...

FILE: Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityDevice.cpp
  function UINT (line 37) | UINT STDMETHODCALLTYPE CD3DX12AffinityDevice::GetNodeCount(void)
  function UINT (line 42) | UINT CD3DX12AffinityDevice::LDAAllNodeMasks()
  function HRESULT (line 47) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateCommandQueue(
  function HRESULT (line 86) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateCommandAllocator(
  function HRESULT (line 122) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateGraphicsPipelineS...
  function HRESULT (line 168) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateComputePipelineSt...
  function HRESULT (line 214) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateCommandList(
  function HRESULT (line 269) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CheckFeatureSupport(
  function HRESULT (line 279) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateDescriptorHeap(
  function UINT (line 329) | UINT STDMETHODCALLTYPE CD3DX12AffinityDevice::GetDescriptorHandleIncreme...
  function UINT (line 340) | UINT STDMETHODCALLTYPE CD3DX12AffinityDevice::GetActiveDescriptorHandleI...
  function HRESULT (line 352) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateRootSignature(
  function D3D12_RESOURCE_ALLOCATION_INFO (line 712) | D3D12_RESOURCE_ALLOCATION_INFO STDMETHODCALLTYPE CD3DX12AffinityDevice::...
  function D3D12_HEAP_PROPERTIES (line 721) | D3D12_HEAP_PROPERTIES STDMETHODCALLTYPE CD3DX12AffinityDevice::GetCustom...
  function UINT64 (line 729) | UINT64 GetBufferSizeForResource(
  function HRESULT (line 764) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateCommittedResource(
  function HRESULT (line 896) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateHeap(
  function HRESULT (line 935) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CreatePlacedResource(
  function HRESULT (line 988) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateReservedResource(
  function HRESULT (line 1036) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::MakeResident(
  function HRESULT (line 1065) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::Evict(
  function HRESULT (line 1104) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateFence(
  function HRESULT (line 1142) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::GetDeviceRemovedReason(...
  function HRESULT (line 1174) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateQueryHeap(
  function HRESULT (line 1213) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::SetStablePowerState(
  function HRESULT (line 1233) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateCommandSignature(
  function LUID (line 1295) | LUID STDMETHODCALLTYPE CD3DX12AffinityDevice::GetAdapterLuid(UINT Affini...
  function ID3D12Device (line 1300) | ID3D12Device* CD3DX12AffinityDevice::GetChildObject(UINT AffinityIndex)
  function UINT (line 1390) | UINT CD3DX12AffinityDevice::GetDeviceCount()
  function D3D12_CPU_DESCRIPTOR_HANDLE (line 1395) | D3D12_CPU_DESCRIPTOR_HANDLE CD3DX12AffinityDevice::GetCPUHeapPointer(D3D...
  function D3D12_GPU_DESCRIPTOR_HANDLE (line 1429) | D3D12_GPU_DESCRIPTOR_HANDLE CD3DX12AffinityDevice::GetGPUHeapPointer(D3D...
  function D3D12_GPU_VIRTUAL_ADDRESS (line 1463) | D3D12_GPU_VIRTUAL_ADDRESS CD3DX12AffinityDevice::GetGPUVirtualAddress(D3...
  function UINT (line 1518) | UINT CD3DX12AffinityDevice::AffinityIndexToNodeMask(UINT const Index)
  function UINT (line 1543) | UINT CD3DX12AffinityDevice::GetActiveNodeMask()

FILE: Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityDevice.h
  type D3DX12_CPU_DESCRIPTOR_HANDLE_COMPARATOR (line 18) | struct D3DX12_CPU_DESCRIPTOR_HANDLE_COMPARATOR
  type D3DX12_GPU_DESCRIPTOR_HANDLE_COMPARATOR (line 26) | struct D3DX12_GPU_DESCRIPTOR_HANDLE_COMPARATOR

FILE: Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityDeviceChild.cpp
  function HRESULT (line 23) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityDeviceChild::GetDevice(
  function HRESULT (line 33) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityDeviceChild::GetDevice(

FILE: Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityFence.cpp
  function UINT64 (line 15) | UINT64 STDMETHODCALLTYPE CD3DX12AffinityFence::GetCompletedValue(void)
  function UINT64 (line 31) | UINT64 CD3DX12AffinityFence::GetCompletedValue(UINT AffinityMask)
  function HRESULT (line 47) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityFence::SetEventOnCompletion(
  function HRESULT (line 56) | HRESULT CD3DX12AffinityFence::SetEventOnCompletion(UINT64 Value, HANDLE ...
  function HRESULT (line 70) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityFence::WaitOnFenceCompletion(
  function HRESULT (line 97) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityFence::Signal(
  function HRESULT (line 118) | HRESULT CD3DX12AffinityFence::Signal(UINT64 Value, UINT AffinityIndex)
  function ID3D12Fence (line 147) | ID3D12Fence* CD3DX12AffinityFence::GetChildObject(UINT AffinityIndex)

FILE: Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityGraphicsCommandList.cpp
  function D3D12_COMMAND_LIST_TYPE (line 21) | D3D12_COMMAND_LIST_TYPE CD3DX12AffinityGraphicsCommandList::GetType()
  function ID3D12GraphicsCommandList (line 1073) | ID3D12GraphicsCommandList* CD3DX12AffinityGraphicsCommandList::GetChildO...
  function UINT (line 1078) | UINT CD3DX12AffinityGraphicsCommandList::GetActiveAffinityMask()

FILE: Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityHeap.cpp
  function D3D12_HEAP_DESC (line 34) | D3D12_HEAP_DESC STDMETHODCALLTYPE CD3DX12AffinityHeap::GetDesc(UINT Affi...
  function ID3D12Heap (line 39) | ID3D12Heap* CD3DX12AffinityHeap::GetChildObject(UINT AffinityIndex)

FILE: Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityObject.cpp
  function HRESULT (line 15) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityObject::GetPrivateData(
  function HRESULT (line 31) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityObject::SetPrivateData(
  function HRESULT (line 47) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityObject::SetPrivateDataInterface(
  function HRESULT (line 62) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityObject::SetName(
  function UINT (line 92) | UINT CD3DX12AffinityObject::AffinityIndexToMask(UINT const Index)
  function ULONG (line 130) | ULONG CD3DX12AffinityObject::AddRef()
  function ULONG (line 136) | ULONG CD3DX12AffinityObject::Release()
  function CD3DX12AffinityDevice (line 150) | CD3DX12AffinityDevice* CD3DX12AffinityObject::GetParentDevice()
  function UINT (line 155) | UINT CD3DX12AffinityObject::GetNodeMask()
  function UINT (line 160) | UINT CD3DX12AffinityObject::GetNodeCount()
  function UINT (line 165) | UINT CD3DX12AffinityObject::GetActiveNodeIndex()

FILE: Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityObject.h
  function STDMETHODCALLTYPE (line 21) | STDMETHODCALLTYPE QueryInterface(

FILE: Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityPipelineState.cpp
  function HRESULT (line 15) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityPipelineState::GetCachedBlob(

FILE: Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityResource.cpp
  function HRESULT (line 15) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityResource::Map(
  function D3D12_RESOURCE_DESC (line 105) | D3D12_RESOURCE_DESC STDMETHODCALLTYPE CD3DX12AffinityResource::GetDesc(U...
  function D3D12_GPU_VIRTUAL_ADDRESS (line 114) | D3D12_GPU_VIRTUAL_ADDRESS STDMETHODCALLTYPE CD3DX12AffinityResource::Get...
  function HRESULT (line 144) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityResource::WriteToSubresource(
  function HRESULT (line 173) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityResource::ReadFromSubresource(
  function HRESULT (line 189) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityResource::GetHeapProperties(
  function ID3D12Resource (line 321) | ID3D12Resource* CD3DX12AffinityResource::GetChildObject(UINT AffinityIndex)

FILE: Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityRootSignature.cpp
  function ID3D12RootSignature (line 33) | ID3D12RootSignature* CD3DX12AffinityRootSignature::GetChildObject(UINT A...

FILE: Libraries/D3DX12AffinityLayer/Desktop/CDXGIAffinitySwapChain.cpp
  function HRESULT (line 18) | HRESULT STDMETHODCALLTYPE CDXGIAffinitySwapChain::GetParent(
  function HRESULT (line 31) | HRESULT STDMETHODCALLTYPE CDXGIAffinitySwapChain::Present(
  function HRESULT (line 115) | HRESULT STDMETHODCALLTYPE CDXGIAffinitySwapChain::GetBuffer(
  function HRESULT (line 203) | HRESULT STDMETHODCALLTYPE CDXGIAffinitySwapChain::SetFullscreenState(
  function HRESULT (line 238) | HRESULT STDMETHODCALLTYPE CDXGIAffinitySwapChain::GetFullscreenState(
  function HRESULT (line 251) | HRESULT STDMETHODCALLTYPE CDXGIAffinitySwapChain::GetDesc(
  function HRESULT (line 263) | HRESULT STDMETHODCALLTYPE CDXGIAffinitySwapChain::ResizeBuffers(
  function HRESULT (line 402) | HRESULT STDMETHODCALLTYPE CDXGIAffinitySwapChain::ResizeTarget(
  function HRESULT (line 436) | HRESULT STDMETHODCALLTYPE CDXGIAffinitySwapChain::GetContainingOutput(
  function HRESULT (line 448) | HRESULT STDMETHODCALLTYPE CDXGIAffinitySwapChain::GetFrameStatistics(
  function HRESULT (line 460) | HRESULT STDMETHODCALLTYPE CDXGIAffinitySwapChain::GetLastPresentCount(
  function HRESULT (line 472) | HRESULT CDXGIAffinitySwapChain::GetDesc1(DXGI_SWAP_CHAIN_DESC1* pDesc, U...
  function HRESULT (line 482) | HRESULT CDXGIAffinitySwapChain::GetFullscreenDesc(DXGI_SWAP_CHAIN_FULLSC...
  function HRESULT (line 492) | HRESULT CDXGIAffinitySwapChain::GetHwnd(HWND* pHwnd, UINT AffinityIndex)
  function HRESULT (line 502) | HRESULT CDXGIAffinitySwapChain::GetCoreWindow(REFIID refiid, void** ppUn...
  function HRESULT (line 512) | HRESULT CDXGIAffinitySwapChain::Present1(UINT SyncInterval, UINT Present...
  function BOOL (line 517) | BOOL CDXGIAffinitySwapChain::IsTemporaryMonoSupported(UINT AffinityIndex)
  function HRESULT (line 527) | HRESULT CDXGIAffinitySwapChain::GetRestrictToOutput(IDXGIOutput** ppRest...
  function HRESULT (line 537) | HRESULT CDXGIAffinitySwapChain::SetBackgroundColor(const DXGI_RGBA* pCol...
  function HRESULT (line 569) | HRESULT CDXGIAffinitySwapChain::GetBackgroundColor(DXGI_RGBA* pColor, UI...
  function HRESULT (line 579) | HRESULT CDXGIAffinitySwapChain::SetRotation(DXGI_MODE_ROTATION Rotation,...
  function HRESULT (line 610) | HRESULT CDXGIAffinitySwapChain::GetRotation(DXGI_MODE_ROTATION* pRotatio...
  function HRESULT (line 620) | HRESULT STDMETHODCALLTYPE CDXGIAffinitySwapChain::SetSourceSize(
  function HRESULT (line 655) | HRESULT STDMETHODCALLTYPE CDXGIAffinitySwapChain::GetSourceSize(
  function HRESULT (line 668) | HRESULT STDMETHODCALLTYPE CDXGIAffinitySwapChain::SetMaximumFrameLatency(
  function HRESULT (line 701) | HRESULT STDMETHODCALLTYPE CDXGIAffinitySwapChain::GetMaximumFrameLatency(
  function HANDLE (line 713) | HANDLE STDMETHODCALLTYPE CDXGIAffinitySwapChain::GetFrameLatencyWaitable...
  function HRESULT (line 723) | HRESULT CDXGIAffinitySwapChain::SetMatrixTransform(
  function HRESULT (line 757) | HRESULT CDXGIAffinitySwapChain::GetMatrixTransform(
  function UINT (line 769) | UINT CDXGIAffinitySwapChain::GetCurrentBackBufferIndex()
  function HRESULT (line 774) | HRESULT STDMETHODCALLTYPE CDXGIAffinitySwapChain::CheckColorSpaceSupport(
  function HRESULT (line 787) | HRESULT STDMETHODCALLTYPE CDXGIAffinitySwapChain::SetColorSpace1(
  function HRESULT (line 820) | HRESULT STDMETHODCALLTYPE CDXGIAffinitySwapChain::ResizeBuffers1(
  function HRESULT (line 853) | HRESULT CDXGIAffinitySwapChain::CreateDummyRenderTargetsAndCrossAdapterC...

FILE: Libraries/D3DX12AffinityLayer/Desktop/CDXGIAffinitySwapChain.h
  function UINT (line 19) | inline UINT gcd(UINT a, UINT b)
  function UINT (line 30) | inline UINT lcm(UINT a, UINT b)
  type EAffinitySwapChainMode (line 37) | enum EAffinitySwapChainMode

FILE: Libraries/D3DX12AffinityLayer/Desktop/D3DX12AffinityCreateMultiDevice.cpp
  function HRESULT (line 20) | HRESULT WINAPI D3DX12AffinityCreateLDADevice(

FILE: Libraries/D3DX12AffinityLayer/Desktop/DXGIXAffinityCreateLDASwapChain.cpp
  function HRESULT (line 17) | HRESULT STDMETHODCALLTYPE DXGIXAffinityCreateLDASwapChain(
  function HRESULT (line 37) | HRESULT STDMETHODCALLTYPE DXGIXAffinityCreateLDASwapChain(

FILE: Libraries/D3DX12AffinityLayer/Desktop/DXGIXAffinityCreateSingleWindowSwapChain.cpp
  function HRESULT (line 26) | HRESULT STDMETHODCALLTYPE DXGIXAffinityCreateSingleWindowSwapChain(

FILE: Libraries/D3DX12AffinityLayer/Desktop/Utils.cpp
  function WriteHRESULTError (line 20) | void WriteHRESULTError(HRESULT const hr)

FILE: Libraries/D3DX12AffinityLayer/Desktop/Utils.h
  type EAffinityMask (line 81) | struct EAffinityMask
  type EAffinityMode (line 94) | struct EAffinityMode
  type EAffinityRenderingMode (line 102) | struct EAffinityRenderingMode
  function c99_vsnprintf (line 147) | inline int c99_vsnprintf(char* outBuf, size_t size, const char* format, ...
  function c99_snprintf (line 159) | inline int c99_snprintf(char* outBuf, size_t size, const char* format, ...)
  function DebugLog (line 176) | inline void DebugLog(wchar_t const* const Format, ...)
  function ReleaseLog (line 196) | inline void ReleaseLog(wchar_t const* const Format, ...)

FILE: Libraries/D3DX12AffinityLayer/Desktop/d3dx12.h
  type CD3DX12_DEFAULT (line 19) | struct CD3DX12_DEFAULT {}
  function D3D12_RECT (line 34) | struct CD3DX12_RECT : public D3D12_RECT
  function D3D12_VIEWPORT (line 57) | struct CD3DX12_VIEWPORT : public D3D12_VIEWPORT
  type CD3DX12_BOX (line 122) | struct CD3DX12_BOX
  function explicit (line 126) | explicit CD3DX12_BOX( const D3D12_BOX& o ) :
  function explicit (line 129) | explicit CD3DX12_BOX(
  function explicit (line 140) | explicit CD3DX12_BOX(
  function explicit (line 153) | explicit CD3DX12_BOX(
  type CD3DX12_DEPTH_STENCIL_DESC (line 180) | struct CD3DX12_DEPTH_STENCIL_DESC
  function explicit (line 184) | explicit CD3DX12_DEPTH_STENCIL_DESC( const D3D12_DEPTH_STENCIL_DESC& o ) :
  function explicit (line 187) | explicit CD3DX12_DEPTH_STENCIL_DESC( CD3DX12_DEFAULT )
  function explicit (line 200) | explicit CD3DX12_DEPTH_STENCIL_DESC(
  type CD3DX12_DEPTH_STENCIL_DESC1 (line 236) | struct CD3DX12_DEPTH_STENCIL_DESC1
  function explicit (line 240) | explicit CD3DX12_DEPTH_STENCIL_DESC1( const D3D12_DEPTH_STENCIL_DESC1& o...
  function explicit (line 243) | explicit CD3DX12_DEPTH_STENCIL_DESC1( const D3D12_DEPTH_STENCIL_DESC& o )
  function explicit (line 261) | explicit CD3DX12_DEPTH_STENCIL_DESC1( CD3DX12_DEFAULT )
  function explicit (line 275) | explicit CD3DX12_DEPTH_STENCIL_DESC1(
  function explicit (line 336) | explicit CD3DX12_BLEND_DESC( const D3D12_BLEND_DESC& o ) :
  function explicit (line 339) | explicit CD3DX12_BLEND_DESC( CD3DX12_DEFAULT )
  type CD3DX12_RASTERIZER_DESC (line 359) | struct CD3DX12_RASTERIZER_DESC
  function explicit (line 363) | explicit CD3DX12_RASTERIZER_DESC( const D3D12_RASTERIZER_DESC& o ) :
  function explicit (line 366) | explicit CD3DX12_RASTERIZER_DESC( CD3DX12_DEFAULT )
  function explicit (line 380) | explicit CD3DX12_RASTERIZER_DESC(
  type CD3DX12_RESOURCE_ALLOCATION_INFO (line 410) | struct CD3DX12_RESOURCE_ALLOCATION_INFO
  function explicit (line 414) | explicit CD3DX12_RESOURCE_ALLOCATION_INFO( const D3D12_RESOURCE_ALLOCATI...
  function explicit (line 432) | explicit CD3DX12_HEAP_PROPERTIES(const D3D12_HEAP_PROPERTIES &o) :
  type CD3DX12_HEAP_DESC (line 476) | struct CD3DX12_HEAP_DESC
  function explicit (line 480) | explicit CD3DX12_HEAP_DESC(const D3D12_HEAP_DESC &o) :
  type CD3DX12_CLEAR_VALUE (line 563) | struct CD3DX12_CLEAR_VALUE
  function explicit (line 567) | explicit CD3DX12_CLEAR_VALUE(const D3D12_CLEAR_VALUE &o) :
  type CD3DX12_RANGE (line 591) | struct CD3DX12_RANGE
  function explicit (line 595) | explicit CD3DX12_RANGE(const D3D12_RANGE &o) :
  function explicit (line 631) | explicit CD3DX12_SUBRESOURCE_RANGE_UINT64(const D3D12_SUBRESOURCE_RANGE_...
  type CD3DX12_SHADER_BYTECODE (line 654) | struct CD3DX12_SHADER_BYTECODE
  function explicit (line 658) | explicit CD3DX12_SHADER_BYTECODE(const D3D12_SHADER_BYTECODE &o) :
  function D3D12_TILED_RESOURCE_COORDINATE (line 678) | struct CD3DX12_TILED_RESOURCE_COORDINATE : public D3D12_TILED_RESOURCE_C...
  type CD3DX12_TILE_REGION_SIZE (line 700) | struct CD3DX12_TILE_REGION_SIZE
  function explicit (line 704) | explicit CD3DX12_TILE_REGION_SIZE(const D3D12_TILE_REGION_SIZE &o) :
  function D3D12_SUBRESOURCE_TILING (line 724) | struct CD3DX12_SUBRESOURCE_TILING : public D3D12_SUBRESOURCE_TILING
  type CD3DX12_TILE_SHAPE (line 746) | struct CD3DX12_TILE_SHAPE
  function explicit (line 750) | explicit CD3DX12_TILE_SHAPE(const D3D12_TILE_SHAPE &o) :
  function D3D12_RESOURCE_BARRIER (line 766) | struct CD3DX12_RESOURCE_BARRIER : public D3D12_RESOURCE_BARRIER
  function D3D12_PACKED_MIP_INFO (line 817) | struct CD3DX12_PACKED_MIP_INFO : public D3D12_PACKED_MIP_INFO
  type CD3DX12_SUBRESOURCE_FOOTPRINT (line 839) | struct CD3DX12_SUBRESOURCE_FOOTPRINT
  function explicit (line 843) | explicit CD3DX12_SUBRESOURCE_FOOTPRINT(const D3D12_SUBRESOURCE_FOOTPRINT...
  type CD3DX12_TEXTURE_COPY_LOCATION (line 873) | struct CD3DX12_TEXTURE_COPY_LOCATION
  function explicit (line 877) | explicit CD3DX12_TEXTURE_COPY_LOCATION(const D3D12_TEXTURE_COPY_LOCATION...
  function D3D12_DESCRIPTOR_RANGE (line 896) | struct CD3DX12_DESCRIPTOR_RANGE : public D3D12_DESCRIPTOR_RANGE
  function D3D12_ROOT_DESCRIPTOR_TABLE (line 942) | struct CD3DX12_ROOT_DESCRIPTOR_TABLE : public D3D12_ROOT_DESCRIPTOR_TABLE
  function Init (line 955) | inline void Init(
  function Init (line 962) | static inline void Init(
  function D3D12_ROOT_CONSTANTS (line 973) | struct CD3DX12_ROOT_CONSTANTS : public D3D12_ROOT_CONSTANTS
  function D3D12_ROOT_DESCRIPTOR (line 1008) | struct CD3DX12_ROOT_DESCRIPTOR : public D3D12_ROOT_DESCRIPTOR
  function D3D12_ROOT_PARAMETER (line 1036) | struct CD3DX12_ROOT_PARAMETER : public D3D12_ROOT_PARAMETER
  function InitAsDescriptorTable (line 1099) | inline void InitAsDescriptorTable(
  function D3D12_STATIC_SAMPLER_DESC (line 1142) | struct CD3DX12_STATIC_SAMPLER_DESC : public D3D12_STATIC_SAMPLER_DESC
  function D3D12_ROOT_SIGNATURE_DESC (line 1244) | struct CD3DX12_ROOT_SIGNATURE_DESC : public D3D12_ROOT_SIGNATURE_DESC
  function CD3DX12_ROOT_SIGNATURE_DESC (line 1259) | CD3DX12_ROOT_SIGNATURE_DESC(CD3DX12_DEFAULT)
  function D3D12_DESCRIPTOR_RANGE1 (line 1291) | struct CD3DX12_DESCRIPTOR_RANGE1 : public D3D12_DESCRIPTOR_RANGE1
  function D3D12_ROOT_DESCRIPTOR_TABLE1 (line 1341) | struct CD3DX12_ROOT_DESCRIPTOR_TABLE1 : public D3D12_ROOT_DESCRIPTOR_TABLE1
  function Init (line 1354) | inline void Init(
  function Init (line 1361) | static inline void Init(
  function D3D12_ROOT_DESCRIPTOR1 (line 1372) | struct CD3DX12_ROOT_DESCRIPTOR1 : public D3D12_ROOT_DESCRIPTOR1
  function D3D12_ROOT_PARAMETER1 (line 1407) | struct CD3DX12_ROOT_PARAMETER1 : public D3D12_ROOT_PARAMETER1
  function InitAsDescriptorTable (line 1473) | inline void InitAsDescriptorTable(
  function D3D12_VERSIONED_ROOT_SIGNATURE_DESC (line 1519) | struct CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC : public D3D12_VERSIONED_RO...
  function CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC (line 1553) | CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(CD3DX12_DEFAULT)
  function D3D12_CPU_DESCRIPTOR_HANDLE (line 1612) | struct CD3DX12_CPU_DESCRIPTOR_HANDLE : public D3D12_CPU_DESCRIPTOR_HANDLE
  function D3D12_GPU_DESCRIPTOR_HANDLE (line 1673) | struct CD3DX12_GPU_DESCRIPTOR_HANDLE : public D3D12_GPU_DESCRIPTOR_HANDLE
  function UINT (line 1734) | inline UINT D3D12CalcSubresource( UINT MipSlice, UINT ArraySlice, UINT P...
  function D3D12DecomposeSubresource (line 1741) | void D3D12DecomposeSubresource( UINT Subresource, UINT MipLevels, UINT A...
  function UINT8 (line 1749) | inline UINT8 D3D12GetFormatPlaneCount(
  function D3D12_RESOURCE_DESC (line 1763) | struct CD3DX12_RESOURCE_DESC : public D3D12_RESOURCE_DESC
  function CD3DX12_RESOURCE_DESC (line 1795) | static inline CD3DX12_RESOURCE_DESC Buffer(
  function UINT8 (line 1854) | inline UINT8 PlaneCount(_In_ ID3D12Device* pDevice) const
  function UINT (line 1856) | inline UINT Subresources(_In_ ID3D12Device* pDevice) const
  function UINT (line 1858) | inline UINT CalcSubresource(UINT MipSlice, UINT ArraySlice, UINT PlaneSl...
  function D3D12IsLayoutOpaque (line 2042) | inline bool D3D12IsLayoutOpaque( D3D12_TEXTURE_LAYOUT Layout )
  function ID3D12CommandList (line 2047) | ID3D12CommandList * const * CommandListCast(t_CommandListType * const * pp)
  function HRESULT (line 2061) | inline HRESULT D3DX12SerializeVersionedRootSignature(
  function D3D12_RT_FORMAT_ARRAY (line 2177) | struct CD3DX12_RT_FORMAT_ARRAY : public D3D12_RT_FORMAT_ARRAY
  function CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2200) | alignas(void*) CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2211) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_PIPELINE_STATE_FL...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2212) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< UINT,                  ...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2213) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< ID3D12RootSignature*,  ...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2214) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_INPUT_LAYOUT_DESC...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2215) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_INDEX_BUFFER_STRI...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2216) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_PRIMITIVE_TOPOLOG...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2217) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, ...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2218) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, ...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2219) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_STREAM_OUTPUT_DES...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2220) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, ...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2221) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, ...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2222) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, ...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2223) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, ...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2224) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_BLEND_DESC,    ...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2225) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_DEPTH_STENCIL_D...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2226) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_DEPTH_STENCIL_D...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2227) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< DXGI_FORMAT,           ...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2228) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_RASTERIZER_DESC...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2229) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_RT_FORMAT_ARRAY, ...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2230) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< DXGI_SAMPLE_DESC,      ...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2231) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< UINT,                  ...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2232) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_CACHED_PIPELINE_S...
  type ID3DX12PipelineParserCallbacks (line 2237) | struct ID3DX12PipelineParserCallbacks
  function ErrorUnknownSubobject (line 2266) | void ErrorUnknownSubobject(UINT /*UnknownTypeValue*/) {}
  function ComputeDescV0 (line 2270) | struct CD3DX12_PIPELINE_STATE_STREAM
  function D3D12_PIPELINE_STATE_SUBOBJECT_TYPE (line 2393) | inline D3D12_PIPELINE_STATE_SUBOBJECT_TYPE D3DX12GetBaseSubobjectType(D3...
  function HRESULT (line 2404) | inline HRESULT D3DX12ParsePipelineStream(const D3D12_PIPELINE_STATE_STRE...

FILE: Libraries/D3DX12AffinityLayer/Desktop/d3dx12affinity_d3dx12.h
  function D3DX12_AFFINITY_RESOURCE_BARRIER (line 29) | struct CD3DX12_AFFINITY_RESOURCE_BARRIER : public D3DX12_AFFINITY_RESOUR...
  function D3DX12_AFFINITY_TEXTURE_COPY_LOCATION (line 80) | struct CD3DX12_AFFINITY_TEXTURE_COPY_LOCATION : public D3DX12_AFFINITY_T...
  function UINT8 (line 103) | inline UINT8 D3D12GetFormatPlaneCount(
  function D3D12_RESOURCE_DESC (line 117) | struct CD3DX12_AFFINITY_RESOURCE_DESC : public D3D12_RESOURCE_DESC
  function CD3DX12_AFFINITY_RESOURCE_DESC (line 149) | static inline CD3DX12_AFFINITY_RESOURCE_DESC Buffer(
  function UINT8 (line 212) | inline UINT8 PlaneCount(_In_ CD3DX12AffinityDevice* pDevice) const
  function UINT (line 216) | inline UINT Subresources(_In_ CD3DX12AffinityDevice* pDevice) const
  function UINT (line 220) | inline UINT CalcSubresource(UINT MipSlice, UINT ArraySlice, UINT PlaneSl...
  function CD3DX12AffinityCommandList (line 384) | inline CD3DX12AffinityCommandList* const* CommandListCast(CD3DX12Affinit...

FILE: Libraries/D3DX12AffinityLayer/Desktop/d3dx12affinity_structs.h
  type D3DX12_AFFINITY_GRAPHICS_PIPELINE_STATE_DESC (line 25) | typedef struct D3DX12_AFFINITY_GRAPHICS_PIPELINE_STATE_DESC
  type D3DX12_AFFINITY_COMPUTE_PIPELINE_STATE_DESC (line 79) | typedef struct D3DX12_AFFINITY_COMPUTE_PIPELINE_STATE_DESC
  type D3DX12_AFFINITY_RESOURCE_TRANSITION_BARRIER (line 100) | typedef struct D3DX12_AFFINITY_RESOURCE_TRANSITION_BARRIER
  type D3DX12_AFFINITY_RESOURCE_ALIASING_BARRIER (line 119) | typedef struct D3DX12_AFFINITY_RESOURCE_ALIASING_BARRIER
  type D3DX12_AFFINITY_RESOURCE_UAV_BARRIER (line 134) | typedef struct D3DX12_AFFINITY_RESOURCE_UAV_BARRIER
  type return (line 147) | typedef struct D3DX12_AFFINITY_RESOURCE_BARRIER
  type Type (line 180) | typedef struct D3DX12_AFFINITY_TEXTURE_COPY_LOCATION

FILE: Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityCommandAllocator.cpp
  function HRESULT (line 41) | HRESULT CD3DX12AffinityCommandAllocator::Reset(void)
  function ID3D12CommandAllocator (line 67) | ID3D12CommandAllocator* CD3DX12AffinityCommandAllocator::GetChildObject(...

FILE: Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityCommandList.cpp
  function D3D12_COMMAND_LIST_TYPE (line 34) | D3D12_COMMAND_LIST_TYPE STDMETHODCALLTYPE CD3DX12AffinityCommandList::Ge...
  function BOOL (line 39) | BOOL STDMETHODCALLTYPE CD3DX12AffinityCommandList::AssertResourceState(
  function HRESULT (line 62) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityCommandList::SetFeatureMask(
  function ID3D12CommandList (line 90) | ID3D12CommandList* CD3DX12AffinityCommandList::GetChildObject(UINT Affin...

FILE: Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityCommandQueue.cpp
  function HRESULT (line 168) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityCommandQueue::Signal(
  function HRESULT (line 194) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityCommandQueue::Wait(
  function HRESULT (line 219) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityCommandQueue::GetTimestampFrequ...
  function HRESULT (line 226) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityCommandQueue::GetClockCalibration(
  function D3D12_COMMAND_QUEUE_DESC (line 234) | D3D12_COMMAND_QUEUE_DESC STDMETHODCALLTYPE CD3DX12AffinityCommandQueue::...
  function ID3D12CommandQueue (line 239) | ID3D12CommandQueue* CD3DX12AffinityCommandQueue::GetQueueForSwapChainCre...
  function ID3D12CommandQueue (line 263) | ID3D12CommandQueue* CD3DX12AffinityCommandQueue::GetChildObject(UINT Aff...

FILE: Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityCommandSignature.cpp
  function ID3D12CommandSignature (line 33) | ID3D12CommandSignature* CD3DX12AffinityCommandSignature::GetChildObject(...

FILE: Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityDescriptorHeap.cpp
  function D3D12_DESCRIPTOR_HEAP_DESC (line 15) | D3D12_DESCRIPTOR_HEAP_DESC STDMETHODCALLTYPE CD3DX12AffinityDescriptorHe...
  function D3D12_CPU_DESCRIPTOR_HANDLE (line 20) | D3D12_CPU_DESCRIPTOR_HANDLE STDMETHODCALLTYPE CD3DX12AffinityDescriptorH...
  function D3D12_GPU_DESCRIPTOR_HANDLE (line 31) | D3D12_GPU_DESCRIPTOR_HANDLE STDMETHODCALLTYPE CD3DX12AffinityDescriptorH...
  function D3D12_CPU_DESCRIPTOR_HANDLE (line 42) | D3D12_CPU_DESCRIPTOR_HANDLE STDMETHODCALLTYPE CD3DX12AffinityDescriptorH...
  function D3D12_GPU_DESCRIPTOR_HANDLE (line 47) | D3D12_GPU_DESCRIPTOR_HANDLE STDMETHODCALLTYPE CD3DX12AffinityDescriptorH...
  function ID3D12DescriptorHeap (line 128) | ID3D12DescriptorHeap* CD3DX12AffinityDescriptorHeap::GetChildObject(UINT...

FILE: Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityDevice.cpp
  function UINT (line 37) | UINT STDMETHODCALLTYPE CD3DX12AffinityDevice::GetNodeCount(void)
  function UINT (line 42) | UINT CD3DX12AffinityDevice::LDAAllNodeMasks()
  function HRESULT (line 47) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateCommandQueue(
  function HRESULT (line 86) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateCommandAllocator(
  function HRESULT (line 122) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateGraphicsPipelineS...
  function HRESULT (line 168) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateComputePipelineSt...
  function HRESULT (line 214) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateCommandList(
  function HRESULT (line 269) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CheckFeatureSupport(
  function HRESULT (line 279) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateDescriptorHeap(
  function UINT (line 329) | UINT STDMETHODCALLTYPE CD3DX12AffinityDevice::GetDescriptorHandleIncreme...
  function UINT (line 340) | UINT STDMETHODCALLTYPE CD3DX12AffinityDevice::GetActiveDescriptorHandleI...
  function HRESULT (line 352) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateRootSignature(
  function D3D12_RESOURCE_ALLOCATION_INFO (line 712) | D3D12_RESOURCE_ALLOCATION_INFO STDMETHODCALLTYPE CD3DX12AffinityDevice::...
  function D3D12_HEAP_PROPERTIES (line 721) | D3D12_HEAP_PROPERTIES STDMETHODCALLTYPE CD3DX12AffinityDevice::GetCustom...
  function UINT64 (line 729) | UINT64 GetBufferSizeForResource(
  function HRESULT (line 764) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateCommittedResource(
  function HRESULT (line 896) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateHeap(
  function HRESULT (line 935) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CreatePlacedResource(
  function HRESULT (line 988) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateReservedResource(
  function HRESULT (line 1036) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::MakeResident(
  function HRESULT (line 1065) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::Evict(
  function HRESULT (line 1104) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateFence(
  function HRESULT (line 1142) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::GetDeviceRemovedReason(...
  function HRESULT (line 1174) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateQueryHeap(
  function HRESULT (line 1213) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::SetStablePowerState(
  function HRESULT (line 1233) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityDevice::CreateCommandSignature(
  function LUID (line 1295) | LUID STDMETHODCALLTYPE CD3DX12AffinityDevice::GetAdapterLuid(UINT Affini...
  function ID3D12Device (line 1300) | ID3D12Device* CD3DX12AffinityDevice::GetChildObject(UINT AffinityIndex)
  function UINT (line 1390) | UINT CD3DX12AffinityDevice::GetDeviceCount()
  function D3D12_CPU_DESCRIPTOR_HANDLE (line 1395) | D3D12_CPU_DESCRIPTOR_HANDLE CD3DX12AffinityDevice::GetCPUHeapPointer(D3D...
  function D3D12_GPU_DESCRIPTOR_HANDLE (line 1429) | D3D12_GPU_DESCRIPTOR_HANDLE CD3DX12AffinityDevice::GetGPUHeapPointer(D3D...
  function D3D12_GPU_VIRTUAL_ADDRESS (line 1463) | D3D12_GPU_VIRTUAL_ADDRESS CD3DX12AffinityDevice::GetGPUVirtualAddress(D3...
  function UINT (line 1518) | UINT CD3DX12AffinityDevice::AffinityIndexToNodeMask(UINT const Index)
  function UINT (line 1543) | UINT CD3DX12AffinityDevice::GetActiveNodeMask()

FILE: Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityDevice.h
  type D3DX12_CPU_DESCRIPTOR_HANDLE_COMPARATOR (line 18) | struct D3DX12_CPU_DESCRIPTOR_HANDLE_COMPARATOR
  type D3DX12_GPU_DESCRIPTOR_HANDLE_COMPARATOR (line 26) | struct D3DX12_GPU_DESCRIPTOR_HANDLE_COMPARATOR

FILE: Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityDeviceChild.cpp
  function HRESULT (line 23) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityDeviceChild::GetDevice(
  function HRESULT (line 33) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityDeviceChild::GetDevice(

FILE: Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityFence.cpp
  function UINT64 (line 15) | UINT64 STDMETHODCALLTYPE CD3DX12AffinityFence::GetCompletedValue(void)
  function UINT64 (line 31) | UINT64 CD3DX12AffinityFence::GetCompletedValue(UINT AffinityMask)
  function HRESULT (line 47) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityFence::SetEventOnCompletion(
  function HRESULT (line 56) | HRESULT CD3DX12AffinityFence::SetEventOnCompletion(UINT64 Value, HANDLE ...
  function HRESULT (line 70) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityFence::WaitOnFenceCompletion(
  function HRESULT (line 97) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityFence::Signal(
  function HRESULT (line 118) | HRESULT CD3DX12AffinityFence::Signal(UINT64 Value, UINT AffinityIndex)
  function ID3D12Fence (line 147) | ID3D12Fence* CD3DX12AffinityFence::GetChildObject(UINT AffinityIndex)

FILE: Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityGraphicsCommandList.cpp
  function D3D12_COMMAND_LIST_TYPE (line 21) | D3D12_COMMAND_LIST_TYPE CD3DX12AffinityGraphicsCommandList::GetType()
  function ID3D12GraphicsCommandList (line 1073) | ID3D12GraphicsCommandList* CD3DX12AffinityGraphicsCommandList::GetChildO...
  function UINT (line 1078) | UINT CD3DX12AffinityGraphicsCommandList::GetActiveAffinityMask()

FILE: Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityHeap.cpp
  function D3D12_HEAP_DESC (line 34) | D3D12_HEAP_DESC STDMETHODCALLTYPE CD3DX12AffinityHeap::GetDesc(UINT Affi...
  function ID3D12Heap (line 39) | ID3D12Heap* CD3DX12AffinityHeap::GetChildObject(UINT AffinityIndex)

FILE: Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityObject.cpp
  function HRESULT (line 15) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityObject::GetPrivateData(
  function HRESULT (line 31) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityObject::SetPrivateData(
  function HRESULT (line 47) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityObject::SetPrivateDataInterface(
  function HRESULT (line 62) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityObject::SetName(
  function UINT (line 92) | UINT CD3DX12AffinityObject::AffinityIndexToMask(UINT const Index)
  function ULONG (line 130) | ULONG CD3DX12AffinityObject::AddRef()
  function ULONG (line 136) | ULONG CD3DX12AffinityObject::Release()
  function CD3DX12AffinityDevice (line 150) | CD3DX12AffinityDevice* CD3DX12AffinityObject::GetParentDevice()
  function UINT (line 155) | UINT CD3DX12AffinityObject::GetNodeMask()
  function UINT (line 160) | UINT CD3DX12AffinityObject::GetNodeCount()
  function UINT (line 165) | UINT CD3DX12AffinityObject::GetActiveNodeIndex()

FILE: Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityObject.h
  function STDMETHODCALLTYPE (line 21) | STDMETHODCALLTYPE QueryInterface(

FILE: Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityPipelineState.cpp
  function HRESULT (line 15) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityPipelineState::GetCachedBlob(

FILE: Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityResource.cpp
  function HRESULT (line 15) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityResource::Map(
  function D3D12_RESOURCE_DESC (line 105) | D3D12_RESOURCE_DESC STDMETHODCALLTYPE CD3DX12AffinityResource::GetDesc(U...
  function D3D12_GPU_VIRTUAL_ADDRESS (line 114) | D3D12_GPU_VIRTUAL_ADDRESS STDMETHODCALLTYPE CD3DX12AffinityResource::Get...
  function HRESULT (line 144) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityResource::WriteToSubresource(
  function HRESULT (line 173) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityResource::ReadFromSubresource(
  function HRESULT (line 189) | HRESULT STDMETHODCALLTYPE CD3DX12AffinityResource::GetHeapProperties(
  function ID3D12Resource (line 321) | ID3D12Resource* CD3DX12AffinityResource::GetChildObject(UINT AffinityIndex)

FILE: Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityRootSignature.cpp
  function ID3D12RootSignature (line 33) | ID3D12RootSignature* CD3DX12AffinityRootSignature::GetChildObject(UINT A...

FILE: Libraries/D3DX12AffinityLayer/UWP/CDXGIAffinitySwapChain.cpp
  function HRESULT (line 18) | HRESULT STDMETHODCALLTYPE CDXGIAffinitySwapChain::GetParent(
  function HRESULT (line 31) | HRESULT STDMETHODCALLTYPE CDXGIAffinitySwapChain::Present(
  function HRESULT (line 115) | HRESULT STDMETHODCALLTYPE CDXGIAffinitySwapChain::GetBuffer(
  function HRESULT (line 203) | HRESULT STDMETHODCALLTYPE CDXGIAffinitySwapChain::SetFullscreenState(
  function HRESULT (line 238) | HRESULT STDMETHODCALLTYPE CDXGIAffinitySwapChain::GetFullscreenState(
  function HRESULT (line 251) | HRESULT STDMETHODCALLTYPE CDXGIAffinitySwapChain::GetDesc(
  function HRESULT (line 263) | HRESULT STDMETHODCALLTYPE CDXGIAffinitySwapChain::ResizeBuffers(
  function HRESULT (line 402) | HRESULT STDMETHODCALLTYPE CDXGIAffinitySwapChain::ResizeTarget(
  function HRESULT (line 436) | HRESULT STDMETHODCALLTYPE CDXGIAffinitySwapChain::GetContainingOutput(
  function HRESULT (line 448) | HRESULT STDMETHODCALLTYPE CDXGIAffinitySwapChain::GetFrameStatistics(
  function HRESULT (line 460) | HRESULT STDMETHODCALLTYPE CDXGIAffinitySwapChain::GetLastPresentCount(
  function HRESULT (line 472) | HRESULT CDXGIAffinitySwapChain::GetDesc1(DXGI_SWAP_CHAIN_DESC1* pDesc, U...
  function HRESULT (line 482) | HRESULT CDXGIAffinitySwapChain::GetFullscreenDesc(DXGI_SWAP_CHAIN_FULLSC...
  function HRESULT (line 492) | HRESULT CDXGIAffinitySwapChain::GetHwnd(HWND* pHwnd, UINT AffinityIndex)
  function HRESULT (line 502) | HRESULT CDXGIAffinitySwapChain::GetCoreWindow(REFIID refiid, void** ppUn...
  function HRESULT (line 512) | HRESULT CDXGIAffinitySwapChain::Present1(UINT SyncInterval, UINT Present...
  function BOOL (line 517) | BOOL CDXGIAffinitySwapChain::IsTemporaryMonoSupported(UINT AffinityIndex)
  function HRESULT (line 527) | HRESULT CDXGIAffinitySwapChain::GetRestrictToOutput(IDXGIOutput** ppRest...
  function HRESULT (line 537) | HRESULT CDXGIAffinitySwapChain::SetBackgroundColor(const DXGI_RGBA* pCol...
  function HRESULT (line 569) | HRESULT CDXGIAffinitySwapChain::GetBackgroundColor(DXGI_RGBA* pColor, UI...
  function HRESULT (line 579) | HRESULT CDXGIAffinitySwapChain::SetRotation(DXGI_MODE_ROTATION Rotation,...
  function HRESULT (line 610) | HRESULT CDXGIAffinitySwapChain::GetRotation(DXGI_MODE_ROTATION* pRotatio...
  function HRESULT (line 620) | HRESULT STDMETHODCALLTYPE CDXGIAffinitySwapChain::SetSourceSize(
  function HRESULT (line 655) | HRESULT STDMETHODCALLTYPE CDXGIAffinitySwapChain::GetSourceSize(
  function HRESULT (line 668) | HRESULT STDMETHODCALLTYPE CDXGIAffinitySwapChain::SetMaximumFrameLatency(
  function HRESULT (line 701) | HRESULT STDMETHODCALLTYPE CDXGIAffinitySwapChain::GetMaximumFrameLatency(
  function HANDLE (line 713) | HANDLE STDMETHODCALLTYPE CDXGIAffinitySwapChain::GetFrameLatencyWaitable...
  function HRESULT (line 723) | HRESULT CDXGIAffinitySwapChain::SetMatrixTransform(
  function HRESULT (line 757) | HRESULT CDXGIAffinitySwapChain::GetMatrixTransform(
  function UINT (line 769) | UINT CDXGIAffinitySwapChain::GetCurrentBackBufferIndex()
  function HRESULT (line 774) | HRESULT STDMETHODCALLTYPE CDXGIAffinitySwapChain::CheckColorSpaceSupport(
  function HRESULT (line 787) | HRESULT STDMETHODCALLTYPE CDXGIAffinitySwapChain::SetColorSpace1(
  function HRESULT (line 820) | HRESULT STDMETHODCALLTYPE CDXGIAffinitySwapChain::ResizeBuffers1(
  function HRESULT (line 853) | HRESULT CDXGIAffinitySwapChain::CreateDummyRenderTargetsAndCrossAdapterC...

FILE: Libraries/D3DX12AffinityLayer/UWP/CDXGIAffinitySwapChain.h
  function UINT (line 19) | inline UINT gcd(UINT a, UINT b)
  function UINT (line 30) | inline UINT lcm(UINT a, UINT b)
  type EAffinitySwapChainMode (line 37) | enum EAffinitySwapChainMode

FILE: Libraries/D3DX12AffinityLayer/UWP/D3DX12AffinityCreateMultiDevice.cpp
  function HRESULT (line 20) | HRESULT WINAPI D3DX12AffinityCreateLDADevice(

FILE: Libraries/D3DX12AffinityLayer/UWP/DXGIXAffinityCreateLDASwapChain.cpp
  function HRESULT (line 17) | HRESULT STDMETHODCALLTYPE DXGIXAffinityCreateLDASwapChain(
  function HRESULT (line 37) | HRESULT STDMETHODCALLTYPE DXGIXAffinityCreateLDASwapChain(

FILE: Libraries/D3DX12AffinityLayer/UWP/DXGIXAffinityCreateSingleWindowSwapChain.cpp
  function HRESULT (line 26) | HRESULT STDMETHODCALLTYPE DXGIXAffinityCreateSingleWindowSwapChain(

FILE: Libraries/D3DX12AffinityLayer/UWP/Utils.cpp
  function WriteHRESULTError (line 20) | void WriteHRESULTError(HRESULT const hr)

FILE: Libraries/D3DX12AffinityLayer/UWP/Utils.h
  type EAffinityMask (line 81) | struct EAffinityMask
  type EAffinityMode (line 94) | struct EAffinityMode
  type EAffinityRenderingMode (line 102) | struct EAffinityRenderingMode
  function c99_vsnprintf (line 147) | inline int c99_vsnprintf(char* outBuf, size_t size, const char* format, ...
  function c99_snprintf (line 159) | inline int c99_snprintf(char* outBuf, size_t size, const char* format, ...)
  function DebugLog (line 176) | inline void DebugLog(wchar_t const* const Format, ...)
  function ReleaseLog (line 196) | inline void ReleaseLog(wchar_t const* const Format, ...)

FILE: Libraries/D3DX12AffinityLayer/UWP/d3dx12.h
  type CD3DX12_DEFAULT (line 19) | struct CD3DX12_DEFAULT {}
  function D3D12_RECT (line 34) | struct CD3DX12_RECT : public D3D12_RECT
  function D3D12_VIEWPORT (line 57) | struct CD3DX12_VIEWPORT : public D3D12_VIEWPORT
  type CD3DX12_BOX (line 122) | struct CD3DX12_BOX
  function explicit (line 126) | explicit CD3DX12_BOX( const D3D12_BOX& o ) :
  function explicit (line 129) | explicit CD3DX12_BOX(
  function explicit (line 140) | explicit CD3DX12_BOX(
  function explicit (line 153) | explicit CD3DX12_BOX(
  type CD3DX12_DEPTH_STENCIL_DESC (line 180) | struct CD3DX12_DEPTH_STENCIL_DESC
  function explicit (line 184) | explicit CD3DX12_DEPTH_STENCIL_DESC( const D3D12_DEPTH_STENCIL_DESC& o ) :
  function explicit (line 187) | explicit CD3DX12_DEPTH_STENCIL_DESC( CD3DX12_DEFAULT )
  function explicit (line 200) | explicit CD3DX12_DEPTH_STENCIL_DESC(
  type CD3DX12_DEPTH_STENCIL_DESC1 (line 236) | struct CD3DX12_DEPTH_STENCIL_DESC1
  function explicit (line 240) | explicit CD3DX12_DEPTH_STENCIL_DESC1( const D3D12_DEPTH_STENCIL_DESC1& o...
  function explicit (line 243) | explicit CD3DX12_DEPTH_STENCIL_DESC1( const D3D12_DEPTH_STENCIL_DESC& o )
  function explicit (line 261) | explicit CD3DX12_DEPTH_STENCIL_DESC1( CD3DX12_DEFAULT )
  function explicit (line 275) | explicit CD3DX12_DEPTH_STENCIL_DESC1(
  function explicit (line 336) | explicit CD3DX12_BLEND_DESC( const D3D12_BLEND_DESC& o ) :
  function explicit (line 339) | explicit CD3DX12_BLEND_DESC( CD3DX12_DEFAULT )
  type CD3DX12_RASTERIZER_DESC (line 359) | struct CD3DX12_RASTERIZER_DESC
  function explicit (line 363) | explicit CD3DX12_RASTERIZER_DESC( const D3D12_RASTERIZER_DESC& o ) :
  function explicit (line 366) | explicit CD3DX12_RASTERIZER_DESC( CD3DX12_DEFAULT )
  function explicit (line 380) | explicit CD3DX12_RASTERIZER_DESC(
  type CD3DX12_RESOURCE_ALLOCATION_INFO (line 410) | struct CD3DX12_RESOURCE_ALLOCATION_INFO
  function explicit (line 414) | explicit CD3DX12_RESOURCE_ALLOCATION_INFO( const D3D12_RESOURCE_ALLOCATI...
  function explicit (line 432) | explicit CD3DX12_HEAP_PROPERTIES(const D3D12_HEAP_PROPERTIES &o) :
  type CD3DX12_HEAP_DESC (line 476) | struct CD3DX12_HEAP_DESC
  function explicit (line 480) | explicit CD3DX12_HEAP_DESC(const D3D12_HEAP_DESC &o) :
  type CD3DX12_CLEAR_VALUE (line 563) | struct CD3DX12_CLEAR_VALUE
  function explicit (line 567) | explicit CD3DX12_CLEAR_VALUE(const D3D12_CLEAR_VALUE &o) :
  type CD3DX12_RANGE (line 591) | struct CD3DX12_RANGE
  function explicit (line 595) | explicit CD3DX12_RANGE(const D3D12_RANGE &o) :
  function explicit (line 631) | explicit CD3DX12_SUBRESOURCE_RANGE_UINT64(const D3D12_SUBRESOURCE_RANGE_...
  type CD3DX12_SHADER_BYTECODE (line 654) | struct CD3DX12_SHADER_BYTECODE
  function explicit (line 658) | explicit CD3DX12_SHADER_BYTECODE(const D3D12_SHADER_BYTECODE &o) :
  function D3D12_TILED_RESOURCE_COORDINATE (line 678) | struct CD3DX12_TILED_RESOURCE_COORDINATE : public D3D12_TILED_RESOURCE_C...
  type CD3DX12_TILE_REGION_SIZE (line 700) | struct CD3DX12_TILE_REGION_SIZE
  function explicit (line 704) | explicit CD3DX12_TILE_REGION_SIZE(const D3D12_TILE_REGION_SIZE &o) :
  function D3D12_SUBRESOURCE_TILING (line 724) | struct CD3DX12_SUBRESOURCE_TILING : public D3D12_SUBRESOURCE_TILING
  type CD3DX12_TILE_SHAPE (line 746) | struct CD3DX12_TILE_SHAPE
  function explicit (line 750) | explicit CD3DX12_TILE_SHAPE(const D3D12_TILE_SHAPE &o) :
  function D3D12_RESOURCE_BARRIER (line 766) | struct CD3DX12_RESOURCE_BARRIER : public D3D12_RESOURCE_BARRIER
  function D3D12_PACKED_MIP_INFO (line 817) | struct CD3DX12_PACKED_MIP_INFO : public D3D12_PACKED_MIP_INFO
  type CD3DX12_SUBRESOURCE_FOOTPRINT (line 839) | struct CD3DX12_SUBRESOURCE_FOOTPRINT
  function explicit (line 843) | explicit CD3DX12_SUBRESOURCE_FOOTPRINT(const D3D12_SUBRESOURCE_FOOTPRINT...
  type CD3DX12_TEXTURE_COPY_LOCATION (line 873) | struct CD3DX12_TEXTURE_COPY_LOCATION
  function explicit (line 877) | explicit CD3DX12_TEXTURE_COPY_LOCATION(const D3D12_TEXTURE_COPY_LOCATION...
  function D3D12_DESCRIPTOR_RANGE (line 896) | struct CD3DX12_DESCRIPTOR_RANGE : public D3D12_DESCRIPTOR_RANGE
  function D3D12_ROOT_DESCRIPTOR_TABLE (line 942) | struct CD3DX12_ROOT_DESCRIPTOR_TABLE : public D3D12_ROOT_DESCRIPTOR_TABLE
  function Init (line 955) | inline void Init(
  function Init (line 962) | static inline void Init(
  function D3D12_ROOT_CONSTANTS (line 973) | struct CD3DX12_ROOT_CONSTANTS : public D3D12_ROOT_CONSTANTS
  function D3D12_ROOT_DESCRIPTOR (line 1008) | struct CD3DX12_ROOT_DESCRIPTOR : public D3D12_ROOT_DESCRIPTOR
  function D3D12_ROOT_PARAMETER (line 1036) | struct CD3DX12_ROOT_PARAMETER : public D3D12_ROOT_PARAMETER
  function InitAsDescriptorTable (line 1099) | inline void InitAsDescriptorTable(
  function D3D12_STATIC_SAMPLER_DESC (line 1142) | struct CD3DX12_STATIC_SAMPLER_DESC : public D3D12_STATIC_SAMPLER_DESC
  function D3D12_ROOT_SIGNATURE_DESC (line 1244) | struct CD3DX12_ROOT_SIGNATURE_DESC : public D3D12_ROOT_SIGNATURE_DESC
  function CD3DX12_ROOT_SIGNATURE_DESC (line 1259) | CD3DX12_ROOT_SIGNATURE_DESC(CD3DX12_DEFAULT)
  function D3D12_DESCRIPTOR_RANGE1 (line 1291) | struct CD3DX12_DESCRIPTOR_RANGE1 : public D3D12_DESCRIPTOR_RANGE1
  function D3D12_ROOT_DESCRIPTOR_TABLE1 (line 1341) | struct CD3DX12_ROOT_DESCRIPTOR_TABLE1 : public D3D12_ROOT_DESCRIPTOR_TABLE1
  function Init (line 1354) | inline void Init(
  function Init (line 1361) | static inline void Init(
  function D3D12_ROOT_DESCRIPTOR1 (line 1372) | struct CD3DX12_ROOT_DESCRIPTOR1 : public D3D12_ROOT_DESCRIPTOR1
  function D3D12_ROOT_PARAMETER1 (line 1407) | struct CD3DX12_ROOT_PARAMETER1 : public D3D12_ROOT_PARAMETER1
  function InitAsDescriptorTable (line 1473) | inline void InitAsDescriptorTable(
  function D3D12_VERSIONED_ROOT_SIGNATURE_DESC (line 1519) | struct CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC : public D3D12_VERSIONED_RO...
  function CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC (line 1553) | CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(CD3DX12_DEFAULT)
  function D3D12_CPU_DESCRIPTOR_HANDLE (line 1612) | struct CD3DX12_CPU_DESCRIPTOR_HANDLE : public D3D12_CPU_DESCRIPTOR_HANDLE
  function D3D12_GPU_DESCRIPTOR_HANDLE (line 1673) | struct CD3DX12_GPU_DESCRIPTOR_HANDLE : public D3D12_GPU_DESCRIPTOR_HANDLE
  function UINT (line 1734) | inline UINT D3D12CalcSubresource( UINT MipSlice, UINT ArraySlice, UINT P...
  function D3D12DecomposeSubresource (line 1741) | void D3D12DecomposeSubresource( UINT Subresource, UINT MipLevels, UINT A...
  function UINT8 (line 1749) | inline UINT8 D3D12GetFormatPlaneCount(
  function D3D12_RESOURCE_DESC (line 1763) | struct CD3DX12_RESOURCE_DESC : public D3D12_RESOURCE_DESC
  function CD3DX12_RESOURCE_DESC (line 1795) | static inline CD3DX12_RESOURCE_DESC Buffer(
  function UINT8 (line 1854) | inline UINT8 PlaneCount(_In_ ID3D12Device* pDevice) const
  function UINT (line 1856) | inline UINT Subresources(_In_ ID3D12Device* pDevice) const
  function UINT (line 1858) | inline UINT CalcSubresource(UINT MipSlice, UINT ArraySlice, UINT PlaneSl...
  function D3D12IsLayoutOpaque (line 2042) | inline bool D3D12IsLayoutOpaque( D3D12_TEXTURE_LAYOUT Layout )
  function ID3D12CommandList (line 2047) | ID3D12CommandList * const * CommandListCast(t_CommandListType * const * pp)
  function HRESULT (line 2061) | inline HRESULT D3DX12SerializeVersionedRootSignature(
  function D3D12_RT_FORMAT_ARRAY (line 2177) | struct CD3DX12_RT_FORMAT_ARRAY : public D3D12_RT_FORMAT_ARRAY
  function CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2200) | alignas(void*) CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2211) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_PIPELINE_STATE_FL...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2212) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< UINT,                  ...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2213) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< ID3D12RootSignature*,  ...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2214) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_INPUT_LAYOUT_DESC...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2215) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_INDEX_BUFFER_STRI...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2216) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_PRIMITIVE_TOPOLOG...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2217) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, ...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2218) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, ...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2219) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_STREAM_OUTPUT_DES...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2220) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, ...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2221) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, ...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2222) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, ...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2223) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, ...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2224) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_BLEND_DESC,    ...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2225) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_DEPTH_STENCIL_D...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2226) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_DEPTH_STENCIL_D...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2227) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< DXGI_FORMAT,           ...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2228) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_RASTERIZER_DESC...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2229) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_RT_FORMAT_ARRAY, ...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2230) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< DXGI_SAMPLE_DESC,      ...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2231) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< UINT,                  ...
  type CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT (line 2232) | typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_CACHED_PIPELINE_S...
  type ID3DX12PipelineParserCallbacks (line 2237) | struct ID3DX12PipelineParserCallbacks
  function ErrorUnknownSubobject (line 2266) | void ErrorUnknownSubobject(UINT /*UnknownTypeValue*/) {}
  function ComputeDescV0 (line 2270) | struct CD3DX12_PIPELINE_STATE_STREAM
  function D3D12_PIPELINE_STATE_SUBOBJECT_TYPE (line 2393) | inline D3D12_PIPELINE_STATE_SUBOBJECT_TYPE D3DX12GetBaseSubobjectType(D3...
  function HRESULT (line 2404) | inline HRESULT D3DX12ParsePipelineStream(const D3D12_PIPELINE_STATE_STRE...

FILE: Libraries/D3DX12AffinityLayer/UWP/d3dx12affinity_d3dx12.h
  function D3DX12_AFFINITY_RESOURCE_BARRIER (line 29) | struct CD3DX12_AFFINITY_RESOURCE_BARRIER : public D3DX12_AFFINITY_RESOUR...
  function D3DX12_AFFINITY_TEXTURE_COPY_LOCATION (line 80) | struct CD3DX12_AFFINITY_TEXTURE_COPY_LOCATION : public D3DX12_AFFINITY_T...
  function UINT8 (line 103) | inline UINT8 D3D12GetFormatPlaneCount(
  function D3D12_RESOURCE_DESC (line 117) | struct CD3DX12_AFFINITY_RESOURCE_DESC : public D3D12_RESOURCE_DESC
  function CD3DX12_AFFINITY_RESOURCE_DESC (line 149) | static inline CD3DX12_AFFINITY_RESOURCE_DESC Buffer(
  function UINT8 (line 212) | inline UINT8 PlaneCount(_In_ CD3DX12AffinityDevice* pDevice) const
  function UINT (line 216) | inline UINT Subresources(_In_ CD3DX12AffinityDevice* pDevice) const
  function UINT (line 220) | inline UINT CalcSubresource(UINT MipSlice, UINT ArraySlice, UINT PlaneSl...
  function CD3DX12AffinityCommandList (line 384) | inline CD3DX12AffinityCommandList* const* CommandListCast(CD3DX12Affinit...

FILE: Libraries/D3DX12AffinityLayer/UWP/d3dx12affinity_structs.h
  type D3DX12_AFFINITY_GRAPHICS_PIPELINE_STATE_DESC (line 25) | typedef struct D3DX12_AFFINITY_GRAPHICS_PIPELINE_STATE_DESC
  type D3DX12_AFFINITY_COMPUTE_PIPELINE_STATE_DESC (line 79) | typedef struct D3DX12_AFFINITY_COMPUTE_PIPELINE_STATE_DESC
  type D3DX12_AFFINITY_RESOURCE_TRANSITION_BARRIER (line 100) | typedef struct D3DX12_AFFINITY_RESOURCE_TRANSITION_BARRIER
  type D3DX12_AFFINITY_RESOURCE_ALIASING_BARRIER (line 119) | typedef struct D3DX12_AFFINITY_RESOURCE_ALIASING_BARRIER
  type D3DX12_AFFINITY_RESOURCE_UAV_BARRIER (line 134) | typedef struct D3DX12_AFFINITY_RESOURCE_UAV_BARRIER
  type return (line 147) | typedef struct D3DX12_AFFINITY_RESOURCE_BARRIER
  type Type (line 180) | typedef struct D3DX12_AFFINITY_TEXTURE_COPY_LOCATION

FILE: Libraries/D3DX12Residency/d3dx12Residency.h
  function namespace (line 13) | namespace D3DX12Residency
  type DeviceWideSyncPoint (line 449) | struct DeviceWideSyncPoint
  function IsCompleted (line 470) | inline bool IsCompleted()
  function WaitForCompletion (line 482) | inline void WaitForCompletion(HANDLE Event)
  function class (line 502) | class LRUCache
  function class (line 646) | class ResidencyManagerInternal
  function HRESULT (line 679) | HRESULT Initialize(ID3D12Device* ParentDevice, UINT DeviceNodeIndex, IDX...
  function Destroy (line 746) | void Destroy()
  function BeginTrackingObject (line 803) | void BeginTrackingObject(ManagedObject* pObject)
  function EndTrackingObject (line 820) | void EndTrackingObject(ManagedObject* pObject)
  function HRESULT (line 828) | HRESULT ExecuteCommandLists(ID3D12CommandQueue* Queue, ID3D12CommandList...
  function HRESULT (line 833) | HRESULT GetCurrentGPUSyncPoint(ID3D12CommandQueue* Queue, UINT64 *pGPUSy...
  function HRESULT (line 893) | HRESULT SignalFence(ID3D12CommandQueue *Queue, Internal::Fence *QueueFence)
  function HRESULT (line 909) | HRESULT ExecuteSubset(ID3D12CommandQueue* Queue, ID3D12CommandList** Com...
  type AsyncWorkload (line 1021) | struct AsyncWorkload
  function ProcessPagingWork (line 1087) | void ProcessPagingWork(AsyncWorkload* pWork)
  function HRESULT (line 1267) | HRESULT EnqueueAsyncWork(ResidencySet* pMasterSet, UINT64 FenceValueToSi...
  function AsyncWorkload (line 1291) | AsyncWorkload* DequeueAsyncWork()
  function GetCurrentBudget (line 1305) | void GetCurrentBudget(DXGI_QUERY_VIDEO_MEMORY_INFO* InfoOut, DXGI_MEMORY...
  function HRESULT (line 1310) | HRESULT EnqueueSyncPoint()
  function WaitForSyncPoint (line 1363) | void WaitForSyncPoint(UINT64 SyncPointID)
  function UINT64 (line 1397) | UINT64 GetCurrentEvictionGracePeriod(DXGI_QUERY_VIDEO_MEMORY_INFO* Local...
  function class (line 1455) | class ResidencyManager

FILE: MiniEngine/Core/ART/Animation/AnimatedValue.cpp
  type ART (line 9) | namespace ART {

FILE: MiniEngine/Core/ART/Animation/AnimatedValue.h
  function namespace (line 11) | namespace ART {
  function virtual (line 118) | virtual void ClearKeyframes() override;
  function virtual (line 164) | virtual void ClearKeyframes() override;

FILE: MiniEngine/Core/ART/Animation/AnimationController.cpp
  function SceneAnimation_ptr (line 39) | SceneAnimation_ptr& AnimationController::GetSceneAnimation() {
  function BaseCamera (line 48) | BaseCamera* AnimationController::GetTargetCamera() {
  function AnimatedValueBase (line 337) | AnimatedValueBase* AnimationController::GetActiveAnimationFromScene() {

FILE: MiniEngine/Core/ART/Animation/AnimationController.h
  function namespace (line 10) | namespace ART {

FILE: MiniEngine/Core/ART/Animation/CameraAnimation.cpp
  type ART (line 11) | namespace ART {
    function CameraFrame (line 13) | CameraFrame operator + (const CameraFrame& a, const CameraFrame& b) {
    function CameraFrame (line 19) | CameraFrame operator * (const CameraFrame& a, float f) {
    function CameraFrame (line 25) | CameraFrame operator * (float f, const CameraFrame& a) {

FILE: MiniEngine/Core/ART/Animation/CameraAnimation.h
  function namespace (line 10) | namespace ART {
  function DeserializeJSON (line 81) | void JSONSerializableValue<ART::CameraFrame>::DeserializeJSON(rapidjson:...

FILE: MiniEngine/Core/ART/Animation/SceneAnimation.h
  function namespace (line 12) | namespace ART {

FILE: MiniEngine/Core/ART/Animation/SerializationUtil.h
  type SerializationException (line 8) | struct SerializationException {
  function Value (line 24) | JSONSerializableValue(const T& val) : Value(val) {}
  function DeserializeJSON (line 31) | void DeserializeJSON(rapidjson::Value& jsonValue) {
  function DeserializeJSON (line 61) | float>::DeserializeJSON(rapidjson::Value& jsonValue) {
  function DeserializeJSON (line 87) | void JSONSerializableValue<std::string>::DeserializeJSON(rapidjson::Valu...
  function DeserializeJSON (line 104) | void JSONSerializableValue<Math::Vector3>::DeserializeJSON(rapidjson::Va...

FILE: MiniEngine/Core/ART/GUI/AnimationWidget.cpp
  type ARTGUI (line 24) | namespace ARTGUI {

FILE: MiniEngine/Core/ART/GUI/AnimationWidget.h
  function namespace (line 10) | namespace ARTGUI {

FILE: MiniEngine/Core/ART/GUI/GUICore.cpp
  type ARTGUI (line 27) | namespace ARTGUI {
    function initKeyCodes (line 56) | void initKeyCodes() {
    function SetHwnd (line 103) | void SetHwnd(HWND hWnd) {
    function Initialize (line 107) | void Initialize() {
    function Finalize (line 186) | void Finalize() {
    function ReleaseSwapchainResources (line 206) | void ReleaseSwapchainResources() {
    function Resize (line 218) | void Resize(uint32_t width, uint32_t height) {
    function Update (line 274) | void Update(float elapsedTime) {
    function Display (line 339) | void Display(GraphicsContext& Context) {
    function IsFocused (line 393) | bool IsFocused() {
    function IsVisible (line 397) | bool IsVisible() {
    function AddWidgetBase (line 401) | void AddWidgetBase(const IGUIWidget_ptr& widget) {
    function LRESULT (line 405) | LRESULT WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lPar...
    function SetText (line 412) | void SetText(const std::string& text) {

FILE: MiniEngine/Core/ART/GUI/GUICore.h
  function namespace (line 20) | namespace ARTGUI {

FILE: MiniEngine/Core/ART/GUI/GUIUtil.h
  function namespace (line 7) | namespace ART {

FILE: MiniEngine/Core/ART/GUI/IGUIWidget.h
  function namespace (line 9) | namespace ARTGUI {

FILE: MiniEngine/Core/ART/GUI/SequencerWidget.cpp
  type ARTGUI (line 27) | namespace ARTGUI {
    function updateFloatFromCharArray (line 50) | void updateFloatFromCharArray(float& f, char* txt) {

FILE: MiniEngine/Core/ART/GUI/SequencerWidget.h
  function namespace (line 11) | namespace ARTGUI {

FILE: MiniEngine/Core/ART/GUI/imgui/imgui.cpp
  function ImVec2 (line 830) | ImVec2 ImLineClosestPoint(const ImVec2& a, const ImVec2& b, const ImVec2...
  function ImTriangleContainsPoint (line 844) | bool ImTriangleContainsPoint(const ImVec2& a, const ImVec2& b, const ImV...
  function ImTriangleBarycentricCoords (line 852) | void ImTriangleBarycentricCoords(const ImVec2& a, const ImVec2& b, const...
  function ImVec2 (line 863) | ImVec2 ImTriangleClosestPoint(const ImVec2& a, const ImVec2& b, const Im...
  function ImStricmp (line 879) | int ImStricmp(const char* str1, const char* str2)
  function ImStrnicmp (line 886) | int ImStrnicmp(const char* str1, const char* str2, int count)
  function ImStrncpy (line 893) | void ImStrncpy(char* dst, const char* src, int count)
  function ImStrlenW (line 907) | int ImStrlenW(const ImWchar* str)
  function ImWchar (line 914) | const ImWchar* ImStrbolW(const ImWchar* buf_mid_line, const ImWchar* buf...
  function ImFormatString (line 957) | int ImFormatString(char* buf, int buf_size, const char* fmt, ...)
  function ImFormatStringV (line 970) | int ImFormatStringV(char* buf, int buf_size, const char* fmt, va_list args)
  function ImU32 (line 982) | ImU32 ImHash(const void* data, int data_size, ImU32 seed)
  function ImTextCharFromUtf8 (line 1031) | int ImTextCharFromUtf8(unsigned int* out_char, const char* in_text, cons...
  function ImTextStrFromUtf8 (line 1089) | int ImTextStrFromUtf8(ImWchar* buf, int buf_size, const char* in_text, c...
  function ImTextCountCharsFromUtf8 (line 1108) | int ImTextCountCharsFromUtf8(const char* in_text, const char* in_text_end)
  function ImTextCharToUtf8 (line 1124) | static inline int ImTextCharToUtf8(char* buf, int buf_size, unsigned int c)
  function ImTextCountUtf8BytesFromChar (line 1161) | static inline int ImTextCountUtf8BytesFromChar(unsigned int c)
  function ImTextStrToUtf8 (line 1170) | int ImTextStrToUtf8(char* buf, int buf_size, const ImWchar* in_text, con...
  function ImTextCountUtf8BytesFromStr (line 1186) | int ImTextCountUtf8BytesFromStr(const ImWchar* in_text, const ImWchar* i...
  function ImVec4 (line 1200) | ImVec4 ImGui::ColorConvertU32ToFloat4(ImU32 in)
  function ImU32 (line 1210) | ImU32 ImGui::ColorConvertFloat4ToU32(const ImVec4& in)
  function ImU32 (line 1220) | ImU32 ImGui::GetColorU32(ImGuiCol idx, float alpha_mul)
  function ImU32 (line 1228) | ImU32 ImGui::GetColorU32(const ImVec4& col)
  function ImVec4 (line 1236) | const ImVec4& ImGui::GetStyleColorVec4(ImGuiCol idx)
  function ImU32 (line 1242) | ImU32 ImGui::GetColorU32(ImU32 col)
  function FILE (line 1303) | FILE* ImFileOpen(const char* filename, const char* mode)
  function LowerBound (line 1372) | static ImVector<ImGuiStorage::Pair>::iterator LowerBound(ImVector<ImGuiS...
  function SetCursorPosYAndSetupDummyPrevLine (line 1687) | static void SetCursorPosYAndSetupDummyPrevLine(float pos_y, float line_h...
  function ImGuiID (line 1828) | ImGuiID ImGuiWindow::GetID(const char* str, const char* str_end)
  function ImGuiID (line 1836) | ImGuiID ImGuiWindow::GetID(const void* ptr)
  function ImGuiID (line 1844) | ImGuiID ImGuiWindow::GetIDNoKeepAlive(const char* str, const char* str_end)
  function SetCurrentWindow (line 1854) | static void SetCurrentWindow(ImGuiWindow* window)
  function ImGuiWindow (line 1862) | ImGuiWindow* ImGui::GetParentWindow()
  function ImVec2 (line 2010) | ImVec2 ImGui::CalcItemSize(ImVec2 size, float default_x, float default_y)
  function ImGuiContext (line 2069) | ImGuiContext* ImGui::GetCurrentContext()
  function ImGuiContext (line 2083) | ImGuiContext* ImGui::CreateContext(void* (*malloc_fn)(size_t), void (*fr...
  function ImGuiIO (line 2102) | ImGuiIO& ImGui::GetIO()
  function ImGuiStyle (line 2107) | ImGuiStyle& ImGui::GetStyle()
  function ImDrawData (line 2113) | ImDrawData* ImGui::GetDrawData()
  function ImGuiIniData (line 2434) | static ImGuiIniData* FindWindowSettings(const char* name)
  function ImGuiIniData (line 2447) | static ImGuiIniData* AddWindowSettings(const char* name)
  function LoadIniSettingsFromDisk (line 2461) | static void LoadIniSettingsFromDisk(const char* ini_filename)
  function SaveIniSettingsToDisk (line 2506) | static void SaveIniSettingsToDisk(const char* ini_filename)
  function MarkIniSettingsDirty (line 2550) | static void MarkIniSettingsDirty(ImGuiWindow* window)
  function ChildWindowComparer (line 2559) | static int ChildWindowComparer(const void* lhs, const void* rhs)
  function AddWindowToSortedBuffer (line 2572) | static void AddWindowToSortedBuffer(ImVector<ImGuiWindow*>& out_sorted_w...
  function AddDrawListToRenderList (line 2589) | static void AddDrawListToRenderList(ImVector<ImDrawList*>& out_render_li...
  function AddWindowToRenderList (line 2622) | static void AddWindowToRenderList(ImVector<ImDrawList*>& out_render_list...
  function AddWindowToRenderListSelectLayer (line 2636) | static void AddWindowToRenderListSelectLayer(ImGuiWindow* window)
  function LogRenderedText (line 2831) | static void LogRenderedText(const ImVec2& ref_pos, const char* text, con...
  function ImVec2 (line 3040) | ImVec2 ImGui::CalcTextSize(const char* text, const char* text_end, bool ...
  function ImGuiWindow (line 3097) | static ImGuiWindow* FindHoveredWindow(ImVec2 pos, bool excluding_childs)
  function IsKeyPressedMap (line 3142) | static bool IsKeyPressedMap(ImGuiKey key, bool repeat)
  function ImVec2 (line 3254) | ImVec2 ImGui::GetMousePos()
  function ImVec2 (line 3260) | ImVec2 ImGui::GetMousePosOnOpeningCurrentPopup()
  function ImVec2 (line 3277) | ImVec2 ImGui::GetMouseDragDelta(int button, float lock_threshold)
  function ImGuiMouseCursor (line 3297) | ImGuiMouseCursor ImGui::GetMouseCursor()
  function ImVec2 (line 3371) | ImVec2 ImGui::GetItemRectMin()
  function ImVec2 (line 3377) | ImVec2 ImGui::GetItemRectMax()
  function ImVec2 (line 3383) | ImVec2 ImGui::GetItemRectSize()
  function ImVec2 (line 3389) | ImVec2 ImGui::CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge, ...
  function ImRect (line 3397) | static ImRect GetVisibleRect()
  function BeginTooltipEx (line 3406) | static void BeginTooltipEx(bool override_previous_tooltip)
  function CloseInactivePopups (line 3473) | static void CloseInactivePopups()
  function ImGuiWindow (line 3504) | static ImGuiWindow* GetFrontMostModalRootWindow()
  function ClosePopupToLevel (line 3514) | static void ClosePopupToLevel(int remaining)
  function ClosePopup (line 3524) | static void ClosePopup(ImGuiID id)
  function ClearSetNextWindowData (line 3544) | static inline void ClearSetNextWindowData()
  function BeginPopupEx (line 3552) | static bool BeginPopupEx(ImGuiID id, ImGuiWindowFlags extra_flags)
  function BeginChildEx (line 3671) | static bool BeginChildEx(const char* name, ImGuiID id, const ImVec2& siz...
  function CheckStacksSize (line 3758) | static void CheckStacksSize(ImGuiWindow* window, bool write)
  function ImVec2 (line 3772) | static ImVec2 FindBestPopupWindowPos(const ImVec2& base_pos, const ImVec...
  function ImGuiWindow (line 3800) | ImGuiWindow* ImGui::FindWindowByName(const char* name)
  function ImGuiWindow (line 3811) | static ImGuiWindow* CreateNewWindow(const char* name, ImVec2 size, ImGui...
  function ApplySizeFullWithConstraint (line 3877) | static void ApplySizeFullWithConstraint(ImGuiWindow* window, ImVec2 new_...
  function ImVec2 (line 3902) | static ImVec2 CalcNextScrollFromScrollTargetAndClamp(ImGuiWindow* window)
  function Scrollbar (line 4517) | static void Scrollbar(ImGuiWindow* window, bool horizontal)
  function PushMultiItemsWidths (line 4658) | static void PushMultiItemsWidths(int components, float w_full)
  function ImFont (line 4693) | static ImFont* GetDefaultFont()
  function SetCurrentFont (line 4699) | static void SetCurrentFont(ImFont* font)
  type ImGuiStyleVarInfo (line 4812) | struct ImGuiStyleVarInfo
  function ImGuiStyleVarInfo (line 4835) | static const ImGuiStyleVarInfo* GetStyleVarInfo(ImGuiStyleVar idx)
  function ImVec2 (line 4983) | ImVec2 ImGui::GetWindowPos()
  function SetWindowScrollY (line 4990) | static void SetWindowScrollY(ImGuiWindow* window, float new_scroll_y)
  function SetWindowPos (line 4997) | static void SetWindowPos(ImGuiWindow* window, const ImVec2& pos, ImGuiCo...
  function ImVec2 (line 5025) | ImVec2 ImGui::GetWindowSize()
  function SetWindowSize (line 5031) | static void SetWindowSize(ImGuiWindow* window, const ImVec2& size, ImGui...
  function SetWindowCollapsed (line 5073) | static void SetWindowCollapsed(ImGuiWindow* window, bool collapsed, ImGu...
  function ImVec2 (line 5184) | ImVec2 ImGui::GetContentRegionMax()
  function ImVec2 (line 5193) | ImVec2 ImGui::GetContentRegionAvail()
  function ImVec2 (line 5205) | ImVec2 ImGui::GetWindowContentRegionMin()
  function ImVec2 (line 5211) | ImVec2 ImGui::GetWindowContentRegionMax()
  function ImDrawList (line 5241) | ImDrawList* ImGui::GetWindowDrawList()
  function ImFont (line 5247) | ImFont* ImGui::GetFont()
  function ImVec2 (line 5257) | ImVec2 ImGui::GetFontTexUvWhitePixel()
  function ImVec2 (line 5272) | ImVec2 ImGui::GetCursorPos()
  function ImVec2 (line 5311) | ImVec2 ImGui::GetCursorStartPos()
  function ImVec2 (line 5317) | ImVec2 ImGui::GetCursorScreenPos()
  function ImGuiStorage (line 5399) | ImGuiStorage* ImGui::GetStateStorage()
  function IsWindowContentHoverable (line 5623) | static inline bool IsWindowContentHoverable(ImGuiWindow* window)
  function ImGuiID (line 6309) | ImGuiID ImGui::GetID(const char* str_id)
  function ImGuiID (line 6314) | ImGuiID ImGui::GetID(const char* str_id_begin, const char* str_id_end)
  function ImGuiID (line 6319) | ImGuiID ImGui::GetID(const void* ptr_id)
  function DataTypeFormatString (line 6379) | static inline void DataTypeFormatString(ImGuiDataType data_type, void* d...
  function DataTypeFormatString (line 6387) | static inline void DataTypeFormatString(ImGuiDataType data_type, void* d...
  function DataTypeApplyOp (line 6405) | static void DataTypeApplyOp(ImGuiDataType data_type, int op, void* value...
  function DataTypeApplyOpFromText (line 6424) | static bool DataTypeApplyOpFromText(const char* buf, const char* initial...
  function GetMinimumStepAtDecimalPrecision (line 6536) | static float GetMinimumStepAtDecimalPrecision(int decimal_precision)
  function SliderBehaviorCalcRatioFromValue (line 6560) | static inline float SliderBehaviorCalcRatioFromValue(float v, float v_mi...
  type ImGuiPlotArrayGetterData (line 7317) | struct ImGuiPlotArrayGetterData
    method ImGuiPlotArrayGetterData (line 7322) | ImGuiPlotArrayGetterData(const float* values, int stride) { Values = v...
  function Plot_ArrayGetter (line 7325) | static float Plot_ArrayGetter(void* data, int idx)
  function InputTextCalcTextLenAndLineCount (line 7520) | static int InputTextCalcTextLenAndLineCount(const char* text_begin, cons...
  function ImVec2 (line 7534) | static ImVec2 InputTextCalcTextSizeW(const ImWchar* text_begin, const Im...
  type ImGuiStb (line 7579) | namespace ImGuiStb
    function STB_TEXTEDIT_STRINGLEN (line 7582) | static int     STB_TEXTEDIT_STRINGLEN(const STB_TEXTEDIT_STRING* obj) ...
    function ImWchar (line 7583) | static ImWchar STB_TEXTEDIT_GETCHAR(const STB_TEXTEDIT_STRING* obj, in...
    function STB_TEXTEDIT_GETWIDTH (line 7584) | static float   STB_TEXTEDIT_GETWIDTH(STB_TEXTEDIT_STRING* obj, int lin...
    function STB_TEXTEDIT_KEYTOTEXT (line 7585) | static int     STB_TEXTEDIT_KEYTOTEXT(int key)                        ...
    function STB_TEXTEDIT_LAYOUTROW (line 7587) | static void    STB_TEXTEDIT_LAYOUTROW(StbTexteditRow* r, STB_TEXTEDIT_...
    function is_separator (line 7600) | static bool is_separator(unsigned int c)                              ...
    function is_word_boundary_from_right (line 7601) | static int  is_word_boundary_from_right(STB_TEXTEDIT_STRING* obj, int ...
    function STB_TEXTEDIT_MOVEWORDLEFT_IMPL (line 7602) | static int  STB_TEXTEDIT_MOVEWORDLEFT_IMPL(STB_TEXTEDIT_STRING* obj, i...
    function is_word_boundary_from_left (line 7604) | static int  is_word_boundary_from_left(STB_TEXTEDIT_STRING* obj, int i...
    function STB_TEXTEDIT_MOVEWORDRIGHT_IMPL (line 7605) | static int  STB_TEXTEDIT_MOVEWORDRIGHT_IMPL(STB_TEXTEDIT_STRING* obj, ...
    function STB_TEXTEDIT_MOVEWORDRIGHT_IMPL (line 7607) | static int  STB_TEXTEDIT_MOVEWORDRIGHT_IMPL(STB_TEXTEDIT_STRING* obj, ...
    function STB_TEXTEDIT_DELETECHARS (line 7612) | static void STB_TEXTEDIT_DELETECHARS(STB_TEXTEDIT_STRING* obj, int pos...
    function STB_TEXTEDIT_INSERTCHARS (line 7627) | static bool STB_TEXTEDIT_INSERTCHARS(STB_TEXTEDIT_STRING* obj, int pos...
  function InputTextFilterCharacter (line 7719) | static bool InputTextFilterCharacter(unsigned int* p_char, ImGuiInputTex...
  function Items_ArrayGetter (line 8533) | static bool Items_ArrayGetter(void* data, int idx, const char** out_text)
  function Items_SingleStringGetter (line 8541) | static bool Items_SingleStringGetter(void* data, int idx, const char** o...
  function ColorSquareSize (line 9136) | static inline float ColorSquareSize()
  function ImU32 (line 9142) | static inline ImU32 ImAlphaBlendColor(ImU32 col_a, ImU32 col_b)
  function ColorEditOptionsPopup (line 9258) | static void ColorEditOptionsPopup(ImGuiColorEditFlags flags)
  function ColorPickerOptionsPopup (line 9282) | static void ColorPickerOptionsPopup(ImGuiColorEditFlags flags, float* re...
  function RenderArrow (line 9512) | static void RenderArrow(ImDrawList* draw_list, ImVec2 pos, ImVec2 half_s...
  function RenderArrowsForVerticalBar (line 9524) | static void RenderArrowsForVerticalBar(ImDrawList* draw_list, ImVec2 pos...
  function PaintVertsLinearGradientKeepAlpha (line 9532) | static void PaintVertsLinearGradientKeepAlpha(ImDrawVert* vert_start, Im...
  function OffsetNormToPixels (line 10050) | static float OffsetNormToPixels(ImGuiWindow* window, float offset_norm)
  function PixelsToOffsetNorm (line 10055) | static float PixelsToOffsetNorm(ImGuiWindow* window, float offset)
  function GetDraggedColumnOffset (line 10060) | static float GetDraggedColumnOffset(int column_index)
  function SetClipboardTextFn_DefaultImpl (line 10402) | static void SetClipboardTextFn_DefaultImpl(void*, const char* text)
  function SetClipboardTextFn_DefaultImpl (line 10428) | static void SetClipboardTextFn_DefaultImpl(void*, const char* text)
  function ImeSetInputScreenPosFn_DefaultImpl (line 10448) | static void ImeSetInputScreenPosFn_DefaultImpl(int x, int y)
  function ImeSetInputScreenPosFn_DefaultImpl (line 10464) | static void ImeSetInputScreenPosFn_DefaultImpl(int, int) {}
  type Funcs (line 10484) | struct Funcs
    method NodeDrawList (line 10486) | static void NodeDrawList(ImDrawList* draw_list, const char* label)
    method NodeWindows (line 10544) | static void NodeWindows(ImVector<ImGuiWindow*>& windows, const char* l...
    method NodeWindow (line 10553) | static void NodeWindow(ImGuiWindow* window, const char* label)

FILE: MiniEngine/Core/ART/GUI/imgui/imgui.h
  type ImDrawChannel (line 47) | struct ImDrawChannel
  type ImDrawCmd (line 48) | struct ImDrawCmd
  type ImDrawData (line 49) | struct ImDrawData
  type ImDrawList (line 50) | struct ImDrawList
  type ImDrawVert (line 51) | struct ImDrawVert
  type ImFont (line 52) | struct ImFont
  type ImFontAtlas (line 53) | struct ImFontAtlas
  type ImFontConfig (line 54) | struct ImFontConfig
  type ImColor (line 55) | struct ImColor
  type ImGuiIO (line 56) | struct ImGuiIO
  type ImGuiOnceUponAFrame (line 57) | struct ImGuiOnceUponAFrame
  type ImGuiStorage (line 58) | struct ImGuiStorage
  type ImGuiStyle (line 59) | struct ImGuiStyle
  type ImGuiTextFilter (line 60) | struct ImGuiTextFilter
  type ImGuiTextBuffer (line 61) | struct ImGuiTextBuffer
  type ImGuiTextEditCallbackData (line 62) | struct ImGuiTextEditCallbackData
  type ImGuiSizeConstraintCallbackData (line 63) | struct ImGuiSizeConstraintCallbackData
  type ImGuiListClipper (line 64) | struct ImGuiListClipper
  type ImGuiContext (line 65) | struct ImGuiContext
  type ImU32 (line 68) | typedef unsigned int ImU32;
  type ImGuiID (line 69) | typedef unsigned int ImGuiID;
  type ImWchar (line 70) | typedef unsigned short ImWchar;
  type ImGuiCol (line 72) | typedef int ImGuiCol;
  type ImGuiStyleVar (line 73) | typedef int ImGuiStyleVar;
  type ImGuiKey (line 74) | typedef int ImGuiKey;
  type ImGuiColorEditFlags (line 75) | typedef int ImGuiColorEditFlags;
  type ImGuiMouseCursor (line 76) | typedef int ImGuiMouseCursor;
  type ImGuiWindowFlags (line 77) | typedef int ImGuiWindowFlags;
  type ImGuiCond (line 78) | typedef int ImGuiCond;
  type ImGuiColumnsFlags (line 79) | typedef int ImGuiColumnsFlags;
  type ImGuiInputTextFlags (line 80) | typedef int ImGuiInputTextFlags;
  type ImGuiSelectableFlags (line 81) | typedef int ImGuiSelectableFlags;
  type ImGuiTreeNodeFlags (line 82) | typedef int ImGuiTreeNodeFlags;
  type ImU64 (line 86) | typedef unsigned __int64 ImU64;
  type ImU64 (line 88) | typedef unsigned long long ImU64;
  function ImVec2 (line 95) | struct ImVec2
  function ImVec4 (line 105) | struct ImVec4
  function namespace (line 117) | namespace ImGui
  type ImGuiWindowFlags_ (line 502) | enum ImGuiWindowFlags_
  type ImGuiInputTextFlags_ (line 532) | enum ImGuiInputTextFlags_
  type ImGuiTreeNodeFlags_ (line 556) | enum ImGuiTreeNodeFlags_
  type ImGuiSelectableFlags_ (line 574) | enum ImGuiSelectableFlags_
  type ImGuiKey_ (line 583) | enum ImGuiKey_
  type ImGuiCol_ (line 608) | enum ImGuiCol_
  type ImGuiStyleVar_ (line 664) | enum ImGuiStyleVar_
  type ImGuiColorEditFlags_ (line 683) | enum ImGuiColorEditFlags_
  type ImGuiMouseCursor_ (line 713) | enum ImGuiMouseCursor_
  type ImGuiCond_ (line 728) | enum ImGuiCond_
  type ImGuiStyle (line 741) | struct ImGuiStyle
  type ImGuiIO (line 773) | struct ImGuiIO
  type T (line 896) | typedef T                   value_type;
  type value_type (line 897) | typedef value_type*         iterator;
  type value_type (line 898) | typedef const value_type*   const_iterator;
  function value_type (line 907) | inline value_type&          operator[](int i)               { IM_ASSERT(...
  function value_type (line 908) | inline const value_type&    operator[](int i) const         { IM_ASSERT(...
  function clear (line 910) | inline void                 clear()                         { if (Data) ...
  function iterator (line 911) | inline iterator             begin()                         { return Dat...
  function iterator (line 913) | inline iterator             end()                           { return Dat...
  function value_type (line 915) | inline value_type&          front()                         { IM_ASSERT(...
  function value_type (line 916) | inline const value_type&    front() const                   { IM_ASSERT(...
  function value_type (line 918) | inline const value_type&    back() const                    { IM_ASSERT(...
  function _grow_capacity (line 921) | inline int                  _grow_capacity(int size) const  { int new_ca...
  function resize (line 923) | inline void                 resize(int new_size)            { if (new_si...
  function reserve (line 924) | inline void                 reserve(int new_capacity)
  function push_back (line 935) | inline void                 push_back(const value_type& v)  { if (Size =...
  function pop_back (line 936) | inline void                 pop_back()                      { IM_ASSERT(...
  function iterator (line 938) | inline iterator             erase(const_iterator it)        { IM_ASSERT(...
  function iterator (line 939) | inline iterator             insert(const_iterator it, const value_type& ...
  type ImGuiOnceUponAFrame (line 947) | struct ImGuiOnceUponAFrame
  type ImGuiTextFilter (line 960) | struct ImGuiTextFilter
  function is_blank (line 973) | static bool is_blank(char c) { return c == ' ' || c == '\t'; }
  function trim_blanks (line 974) | void trim_blanks() { while (b < e && is_blank(*b)) b++; while (e > b && ...
  function Clear (line 984) | void                Clear() { InputBuf[0] = 0; Build(); }
  type ImGuiTextBuffer (line 992) | struct ImGuiTextBuffer
  function empty (line 1001) | bool                empty() { return Buf.Size <= 1; }
  function clear (line 1002) | void                clear() { Buf.clear(); Buf.push_back(0); }
  function Pair (line 1016) | struct ImGuiStorage
  type ImGuiTextEditCallbackData (line 1055) | struct ImGuiTextEditCallbackData
  type ImGuiSizeConstraintCallbackData (line 1084) | struct ImGuiSizeConstraintCallbackData
  type ImColor (line 1115) | struct ImColor
  function operator (line 1124) | inline operator ImU32() const                                   { return...
  function ImGuiListClipper (line 1145) | struct ImGuiListClipper
  type ImDrawIdx (line 1187) | typedef unsigned short ImDrawIdx;
  type ImDrawVert (line 1192) | struct ImDrawVert
  type ImDrawChannel (line 1208) | struct ImDrawChannel
  function ImDrawList (line 1221) | struct ImDrawList
  function ImVec2 (line 1247) | inline ImVec2   GetClipRectMin() const { const ImVec4& cr = _ClipRectSta...
  function PathClear (line 1270) | inline    void  PathClear()                                             ...
  function PathLineTo (line 1271) | inline    void  PathLineTo(const ImVec2& pos)                           ...
  function PathLineToMergeDuplicate (line 1272) | inline    void  PathLineToMergeDuplicate(const ImVec2& pos)             ...
  function PathFillConvex (line 1273) | inline    void  PathFillConvex(ImU32 col)                               ...
  function PrimWriteVtx (line 1299) | inline    void  PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 ...
  function PrimWriteIdx (line 1300) | inline    void  PrimWriteIdx(ImDrawIdx idx)                             ...
  function PrimVtx (line 1301) | inline    void  PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) ...
  type ImDrawData (line 1307) | struct ImDrawData
  type ImFontConfig (line 1321) | struct ImFontConfig
  type ImFontAtlas (line 1352) | struct ImFontAtlas
  function GetBit (line 1386) | struct GlyphRangesBuilder
  function SetBit (line 1391) | void           SetBit(int n)        { UsedChars[n >> 3] |= 1 << (n & 7); }
  function AddChar (line 1392) | void           AddChar(ImWchar c)   { SetBit(c); }
  type CustomRect (line 1411) | struct CustomRect
  type ImFont (line 1430) | struct ImFont

FILE: MiniEngine/Core/ART/GUI/imgui/imgui_demo.cpp
  function ShowHelpMarker (line 88) | static void ShowHelpMarker(const char* desc)
  type TextFilters (line 641) | struct TextFilters { static int FilterImGuiLetters(ImGuiTextEditCallback...
    method FilterImGuiLetters (line 641) | static int FilterImGuiLetters(ImGuiTextEditCallbackData* data) { if (d...
  type Funcs (line 704) | struct Funcs
    method Sin (line 706) | static float Sin(void*, int i) { return sinf(i * 0.1f); }
    method Saw (line 707) | static float Saw(void*, int i) { return (i & 1) ? 1.0f : -1.0f; }
  function ShowExampleAppMainMenuBar (line 1982) | static void ShowExampleAppMainMenuBar()
  function ShowExampleMenuFile (line 2005) | static void ShowExampleMenuFile()
  function ShowExampleAppAutoResize (line 2063) | static void ShowExampleAppAutoResize(bool* p_open)
  function ShowExampleAppConstrainedResize (line 2080) | static void ShowExampleAppConstrainedResize(bool* p_open)
  function ShowExampleAppFixedOverlay (line 2118) | static void ShowExampleAppFixedOverlay(bool* p_open)
  function ShowExampleAppManipulatingWindowTitle (line 2136) | static void ShowExampleAppManipulatingWindowTitle(bool*)
  function ShowExampleAppCustomRendering (line 2162) | static void ShowExampleAppCustomRendering(bool* p_open)
  function Draw (line 2263) | struct ExampleAppConsole
  function ExecCommand (line 2403) | void    ExecCommand(const char* command_line)
  function TextEditCallbackStub (line 2441) | static int TextEditCallbackStub(ImGuiTextEditCallbackData* data) // In C...
  function TextEditCallback (line 2447) | int     TextEditCallback(ImGuiTextEditCallbackData* data)
  function ShowExampleAppConsole (line 2547) | static void ShowExampleAppConsole(bool* p_open)
  function Draw (line 2557) | struct ExampleAppLog
  function ShowExampleAppLog (line 2618) | static void ShowExampleAppLog(bool* p_open)
  function ShowExampleAppLayout (line 2636) | static void ShowExampleAppLayout(bool* p_open)
  function ShowExampleAppPropertyEditor (line 2682) | static void ShowExampleAppPropertyEditor(bool* p_open)
  function ShowExampleAppLongText (line 2755) | static void ShowExampleAppLongText(bool* p_open)

FILE: MiniEngine/Core/ART/GUI/imgui/imgui_draw.cpp
  function PathBezierToCasteljau (line 725) | static void PathBezierToCasteljau(ImVector<ImVec2>* path, float x1, floa...
  function ImFont (line 1198) | ImFont* ImFontAtlas::AddFont(const ImFontConfig* font_cfg)
  function Decode85Byte (line 1235) | static unsigned int Decode85Byte(char c)                                ...
  function Decode85 (line 1236) | static void         Decode85(const unsigned char* src, unsigned char* dst)
  function ImFont (line 1248) | ImFont* ImFontAtlas::AddFontDefault(const ImFontConfig* font_cfg_template)
  function ImFont (line 1264) | ImFont* ImFontAtlas::AddFontFromFileTTF(const char* filename, float size...
  function ImFont (line 1285) | ImFont* ImFontAtlas::AddFontFromMemoryTTF(void* ttf_data, int ttf_size, ...
  function ImFont (line 1297) | ImFont* ImFontAtlas::AddFontFromMemoryCompressedTTF(const void* compress...
  function ImFont (line 1309) | ImFont* ImFontAtlas::AddFontFromMemoryCompressedBase85TTF(const char* co...
  function ImFontAtlasBuildMultiplyCalcLookupTable (line 1344) | void    ImFontAtlasBuildMultiplyCalcLookupTable(unsigned char out_table[...
  function ImFontAtlasBuildMultiplyRectAlpha8 (line 1353) | void    ImFontAtlasBuildMultiplyRectAlpha8(const unsigned char table[256...
  function ImFontAtlasBuildWithStbTruetype (line 1361) | bool    ImFontAtlasBuildWithStbTruetype(ImFontAtlas* atlas)
  function ImFontAtlasBuildRegisterDefaultCustomRects (line 1569) | void ImFontAtlasBuildRegisterDefaultCustomRects(ImFontAtlas* atlas)
  function ImFontAtlasBuildSetupFont (line 1576) | void ImFontAtlasBuildSetupFont(ImFontAtlas* atlas, ImFont* font, ImFontC...
  function ImFontAtlasBuildPackCustomRects (line 1592) | void ImFontAtlasBuildPackCustomRects(ImFontAtlas* atlas, void* pack_cont...
  function ImFontAtlasBuildRenderDefaultTexData (line 1616) | void ImFontAtlasBuildRenderDefaultTexData(ImFontAtlas* atlas)
  function ImWchar (line 1667) | const ImWchar*   ImFontAtlas::GetGlyphRangesDefault()
  function ImWchar (line 1677) | const ImWchar*  ImFontAtlas::GetGlyphRangesKorean()
  function ImWchar (line 1689) | const ImWchar*  ImFontAtlas::GetGlyphRangesChinese()
  function ImWchar (line 1703) | const ImWchar*  ImFontAtlas::GetGlyphRangesJapanese()
  function ImWchar (line 1765) | const ImWchar*  ImFontAtlas::GetGlyphRangesCyrillic()
  function ImWchar (line 1778) | const ImWchar*  ImFontAtlas::GetGlyphRangesThai()
  function ImVec2 (line 2052) | ImVec2 ImFont::CalcTextSizeA(float size, float max_width, float wrap_wid...
  function ImAcos01 (line 2336) | static inline float ImAcos01(float x)
  function stb_decompress_length (line 2412) | static unsigned int stb_decompress_length(unsigned char *input)
  function stb__match (line 2419) | static void stb__match(unsigned char *data, unsigned int length)
  function stb__lit (line 2428) | static void stb__lit(unsigned char *data, unsigned int length)
  function stb_adler32 (line 2458) | static unsigned int stb_adler32(unsigned int adler32, unsigned char *buf...
  function stb_decompress (line 2489) | static unsigned int stb_decompress(unsigned char *output, unsigned char ...

FILE: MiniEngine/Core/ART/GUI/imgui/imgui_impl_dx11.cpp
  type VERTEX_CONSTANT_BUFFER (line 41) | struct VERTEX_CONSTANT_BUFFER
  function ImGui_ImplDX11_RenderDrawLists (line 49) | void ImGui_ImplDX11_RenderDrawLists(ImDrawData* draw_data)
  function IMGUI_API (line 236) | IMGUI_API LRESULT ImGui_ImplDX11_WndProcHandler(HWND, UINT msg, WPARAM w...
  function ImGui_ImplDX11_CreateFontsTexture (line 283) | static void ImGui_ImplDX11_CreateFontsTexture()
  function ImGui_ImplDX11_CreateDeviceObjects (line 342) | bool    ImGui_ImplDX11_CreateDeviceObjects()
  function float4 (line 424) | float4 main(PS_INPUT input) : SV_Target\
  function ImGui_ImplDX11_InvalidateDeviceObjects (line 483) | void    ImGui_ImplDX11_InvalidateDeviceObjects()
  function ImGui_ImplDX11_Init (line 504) | bool    ImGui_ImplDX11_Init(void* hwnd, ID3D11Device* device, ID3D11Devi...
  function ImGui_ImplDX11_Shutdown (line 542) | void ImGui_ImplDX11_Shutdown()
  function ImGui_ImplDX11_NewFrame (line 551) | void ImGui_ImplDX11_NewFrame()

FILE: MiniEngine/Core/ART/GUI/imgui/imgui_impl_dx11.h
  type ID3D11Device (line 9) | struct ID3D11Device
  type ID3D11DeviceContext (line 10) | struct ID3D11DeviceContext

FILE: MiniEngine/Core/ART/GUI/imgui/imgui_internal.h
  type ImRect (line 35) | struct ImRect
  type ImGuiColMod (line 36) | struct ImGuiColMod
  type ImGuiStyleMod (line 37) | struct ImGuiStyleMod
  type ImGuiGroupData (line 38) | struct ImGuiGroupData
  type ImGuiSimpleColumns (line 39) | struct ImGuiSimpleColumns
  type ImGuiDrawContext (line 40) | struct ImGuiDrawContext
  type ImGuiTextEditState (line 41) | struct ImGuiTextEditState
  type ImGuiIniData (line 42) | struct ImGuiIniData
  type ImGuiMouseCursorData (line 43) | struct ImGuiMouseCursorData
  type ImGuiPopupRef (line 44) | struct ImGuiPopupRef
  type ImGuiWindow (line 45) | struct ImGuiWindow
  type ImGuiLayoutType (line 47) | typedef int ImGuiLayoutType;
  type ImGuiButtonFlags (line 48) | typedef int ImGuiButtonFlags;
  type ImGuiTreeNodeFlags (line 49) | typedef int ImGuiTreeNodeFlags;
  type ImGuiSliderFlags (line 50) | typedef int ImGuiSliderFlags;
  type ImGuiItemFlags (line 51) | typedef int ImGuiItemFlags;
  function namespace (line 57) | namespace ImGuiStb
  function ImCharIsSpace (line 96) | static inline bool      ImCharIsSpace(int c)            { return c == ' ...
  function ImIsPowerOfTwo (line 97) | static inline bool      ImIsPowerOfTwo(int v)           { return v != 0 ...
  function ImUpperPowerOfTwo (line 98) | static inline int       ImUpperPowerOfTwo(int v)        { v--; v |= v >>...
  function ImMin (line 132) | static inline int    ImMin(int lhs, int rhs)                            ...
  function ImMax (line 133) | static inline int    ImMax(int lhs, int rhs)                            ...
  function ImMin (line 134) | static inline float  ImMin(float lhs, float rhs)                        ...
  function ImMax (line 135) | static inline float  ImMax(float lhs, float rhs)                        ...
  function ImVec2 (line 136) | static inline ImVec2 ImMin(const ImVec2& lhs, const ImVec2& rhs)        ...
  function ImVec2 (line 137) | static inline ImVec2 ImMax(const ImVec2& lhs, const ImVec2& rhs)        ...
  function ImClamp (line 138) | static inline int    ImClamp(int v, int mn, int mx)                     ...
  function ImClamp (line 139) | static inline float  ImClamp(float v, float mn, float mx)               ...
  function ImVec2 (line 140) | static inline ImVec2 ImClamp(const ImVec2& f, const ImVec2& mn, ImVec2 m...
  function ImSaturate (line 141) | static inline float  ImSaturate(float f)                                ...
  function ImSwap (line 142) | static inline void   ImSwap(float& a, float& b)                         ...
  function ImLerp (line 143) | static inline int    ImLerp(int a, int b, float t)                      ...
  function ImLerp (line 144) | static inline float  ImLerp(float a, float b, float t)                  ...
  function ImVec2 (line 145) | static inline ImVec2 ImLerp(const ImVec2& a, const ImVec2& b, float t)  ...
  function ImVec2 (line 146) | static inline ImVec2 ImLerp(const ImVec2& a, const ImVec2& b, const ImVe...
  function ImLengthSqr (line 147) | static inline float  ImLengthSqr(const ImVec2& lhs)                     ...
  function ImLengthSqr (line 148) | static inline float  ImLengthSqr(const ImVec4& lhs)                     ...
  function ImInvLength (line 149) | static inline float  ImInvLength(const ImVec2& lhs, float fail_value)   ...
  function ImFloor (line 150) | static inline float  ImFloor(float f)                                   ...
  function ImVec2 (line 151) | static inline ImVec2 ImFloor(const ImVec2& v)                           ...
  function ImDot (line 152) | static inline float  ImDot(const ImVec2& a, const ImVec2& b)            ...
  function ImVec2 (line 153) | static inline ImVec2 ImRotate(const ImVec2& v, float cos_a, float sin_a)...
  type ImPlacementNewDummy (line 158) | struct ImPlacementNewDummy {}
  function delete (line 160) | inline void operator delete(void*, ImPlacementNewDummy, void*) {}
  type ImGuiButtonFlags_ (line 168) | enum ImGuiButtonFlags_
  type ImGuiSliderFlags_ (line 183) | enum ImGuiSliderFlags_
  type ImGuiColumnsFlags_ (line 188) | enum ImGuiColumnsFlags_
  type ImGuiSelectableFlagsPrivate_ (line 197) | enum ImGuiSelectableFlagsPrivate_
  type ImGuiLayoutType_ (line 207) | enum ImGuiLayoutType_
  type ImGuiPlotType (line 213) | enum ImGuiPlotType
  type ImGuiDataType (line 219) | enum ImGuiDataType
  type ImGuiDir (line 226) | enum ImGuiDir
  type ImGuiCorner (line 235) | enum ImGuiCorner
  function ImRect (line 246) | struct IMGUI_API ImRect
  function Contains (line 264) | bool        Contains(const ImVec2& p) const { return p.x >= Min.x     &&...
  function Contains (line 265) | bool        Contains(const ImRect& r) const { return r.Min.x >= Min.x &&...
  function Overlaps (line 266) | bool        Overlaps(const ImRect& r) const { return r.Min.y < Max.y  &&...
  function Add (line 267) | void        Add(const ImVec2& rhs)          { if (Min.x > rhs.x)     Min...
  function Add (line 268) | void        Add(const ImRect& rhs)          { if (Min.x > rhs.Min.x) Min...
  function Expand (line 269) | void        Expand(const float amount)      { Min.x -= amount;   Min.y -...
  function Expand (line 270) | void        Expand(const ImVec2& amount)    { Min.x -= amount.x; Min.y -...
  function Translate (line 271) | void        Translate(const ImVec2& v)      { Min.x += v.x; Min.y += v.y...
  function ClipWith (line 272) | void        ClipWith(const ImRect& clip)    { if (Min.x < clip.Min.x) Mi...
  function Floor (line 273) | void        Floor()                         { Min.x = (float)(int)Min.x;...
  function ImVec2 (line 274) | ImVec2      GetClosestPoint(ImVec2 p, bool on_edge) const
  type ImGuiColMod (line 287) | struct ImGuiColMod
  function ImGuiStyleMod (line 294) | struct ImGuiStyleMod
  type ImGuiGroupData (line 304) | struct ImGuiGroupData
  type ImGuiColumnData (line 318) | struct ImGuiColumnData
  function ImGuiSimpleColumns (line 326) | struct IMGUI_API ImGuiSimpleColumns
  function ImGuiTextEditState (line 340) | struct IMGUI_API ImGuiTextEditState
  type ImGuiIniData (line 364) | struct ImGuiIniData
  type ImGuiMouseCursorData (line 374) | struct ImGuiMouseCursorData
  type ImGuiPopupRef (line 384) | struct ImGuiPopupRef
  type ImGuiItemFlags_ (line 569) | enum ImGuiItemFlags_
  function ImGuiDrawContext (line 581) | struct IMGUI_API ImGuiDrawContext
  function ImGuiWindow (line 662) | struct IMGUI_API ImGuiWindow
  function namespace (line 744) | namespace ImGui

FILE: MiniEngine/Core/ART/GUI/imgui/stb_rect_pack.h
  type stbrp_context (line 70) | typedef struct stbrp_context stbrp_context;
  type stbrp_node (line 71) | typedef struct stbrp_node    stbrp_node;
  type stbrp_rect (line 72) | typedef struct stbrp_rect    stbrp_rect;
  type stbrp_coord (line 75) | typedef int            stbrp_coord;
  type stbrp_coord (line 77) | typedef unsigned short stbrp_coord;
  type stbrp_rect (line 102) | struct stbrp_rect
  type stbrp_node (line 162) | struct stbrp_node
  type stbrp_context (line 168) | struct stbrp_context
  function STBRP_DEF (line 214) | STBRP_DEF void stbrp_setup_heuristic(stbrp_context *context, int heuristic)
  function STBRP_DEF (line 226) | STBRP_DEF void stbrp_setup_allow_out_of_mem(stbrp_context *context, int ...
  function STBRP_DEF (line 246) | STBRP_DEF void stbrp_init_target(stbrp_context *context, int width, int ...
  function stbrp__skyline_find_min_y (line 279) | static int stbrp__skyline_find_min_y(stbrp_context *c, stbrp_node *first...
  type stbrp__findresult (line 329) | typedef struct
  function stbrp__findresult (line 335) | static stbrp__findresult stbrp__skyline_find_best_pos(stbrp_context *c, ...
  function stbrp__findresult (line 430) | static stbrp__findresult stbrp__skyline_pack_rectangle(stbrp_context *co...
  function rect_height_compare (line 512) | static int rect_height_compare(const void *a, const void *b)
  function rect_width_compare (line 523) | static int rect_width_compare(const void *a, const void *b)
  function rect_original_order (line 534) | static int rect_original_order(const void *a, const void *b)
  function STBRP_DEF (line 547) | STBRP_DEF void stbrp_pack_rects(stbrp_context *context, stbrp_rect *rect...

FILE: MiniEngine/Core/ART/GUI/imgui/stb_textedit.h
  type StbUndoRecord (line 296) | typedef struct
  type StbUndoState (line 305) | typedef struct
  type STB_TexteditState (line 314) | typedef struct
  type StbTexteditRow (line 357) | typedef struct
  function stb_text_locate_coord (line 391) | static int stb_text_locate_coord(STB_TEXTEDIT_STRING *str, float x, floa...
  function stb_textedit_click (line 451) | static void stb_textedit_click(STB_TEXTEDIT_STRING *str, STB_TexteditSta...
  function stb_textedit_drag (line 460) | static void stb_textedit_drag(STB_TEXTEDIT_STRING *str, STB_TexteditStat...
  type StbFindState (line 480) | typedef struct
  function stb_textedit_find_charpos (line 490) | static void stb_textedit_find_charpos(StbFindState *find, STB_TEXTEDIT_S...
  function stb_textedit_clamp (line 550) | static void stb_textedit_clamp(STB_TEXTEDIT_STRING *str, STB_TexteditSta...
  function stb_textedit_delete (line 564) | static void stb_textedit_delete(STB_TEXTEDIT_STRING *str, STB_TexteditSt...
  function stb_textedit_delete_selection (line 572) | static void stb_textedit_delete_selection(STB_TEXTEDIT_STRING *str, STB_...
  function stb_textedit_sortselection (line 588) | static void stb_textedit_sortselection(STB_TexteditState *state)
  function stb_textedit_move_to_first (line 598) | static void stb_textedit_move_to_first(STB_TexteditState *state)
  function stb_textedit_move_to_last (line 609) | static void stb_textedit_move_to_last(STB_TEXTEDIT_STRING *str, STB_Text...
  function is_word_boundary (line 621) | static int is_word_boundary( STB_TEXTEDIT_STRING *str, int idx )
  function stb_textedit_move_to_word_previous (line 627) | static int stb_textedit_move_to_word_previous( STB_TEXTEDIT_STRING *str,...
  function stb_textedit_move_to_word_next (line 642) | static int stb_textedit_move_to_word_next( STB_TEXTEDIT_STRING *str, int...
  function stb_textedit_prep_selection_at_cursor (line 660) | static void stb_textedit_prep_selection_at_cursor(STB_TexteditState *state)
  function stb_textedit_cut (line 669) | static int stb_textedit_cut(STB_TEXTEDIT_STRING *str, STB_TexteditState ...
  function stb_textedit_paste (line 680) | static int stb_textedit_paste(STB_TEXTEDIT_STRING *str, STB_TexteditStat...
  function stb_textedit_key (line 700) | static void stb_textedit_key(STB_TEXTEDIT_STRING *str, STB_TexteditState...
  function stb_textedit_flush_redo (line 1063) | static void stb_textedit_flush_redo(StbUndoState *state)
  function stb_textedit_discard_undo (line 1070) | static void stb_textedit_discard_undo(StbUndoState *state)
  function stb_textedit_discard_redo (line 1092) | static void stb_textedit_discard_redo(StbUndoState *state)
  function StbUndoRecord (line 1112) | static StbUndoRecord *stb_text_create_undo_record(StbUndoState *state, i...
  function STB_TEXTEDIT_CHARTYPE (line 1136) | static STB_TEXTEDIT_CHARTYPE *stb_text_createundo(StbUndoState *state, i...
  function stb_text_undo (line 1156) | static void stb_text_undo(STB_TEXTEDIT_STRING *str, STB_TexteditState *s...
  function stb_text_redo (line 1224) | static void stb_text_redo(STB_TEXTEDIT_STRING *str, STB_TexteditState *s...
  function stb_text_makeundo_insert (line 1275) | static void stb_text_makeundo_insert(STB_TexteditState *state, int where...
  function stb_text_makeundo_delete (line 1280) | static void stb_text_makeundo_delete(STB_TEXTEDIT_STRING *str, STB_Texte...
  function stb_text_makeundo_replace (line 1290) | static void stb_text_makeundo_replace(STB_TEXTEDIT_STRING *str, STB_Text...
  function stb_textedit_clear_state (line 1301) | static void stb_textedit_clear_state(STB_TexteditState *state, int is_si...
  function stb_textedit_initialize_state (line 1318) | static void stb_textedit_initialize_state(STB_TexteditState *state, int ...

FILE: MiniEngine/Core/ART/GUI/imgui/stb_truetype.h
  function my_stbtt_initfont (line 250) | void my_stbtt_initfont(void)
  function my_stbtt_print (line 262) | void my_stbtt_print(float x, float y, char *text)
  function main (line 295) | int main(int argc, char **argv)
  function main (line 336) | int main(int arg, char **argv)
  type stbtt_uint8 (line 388) | typedef unsigned char   stbtt_uint8;
  type stbtt_int8 (line 389) | typedef signed   char   stbtt_int8;
  type stbtt_uint16 (line 390) | typedef unsigned short  stbtt_uint16;
  type stbtt_int16 (line 391) | typedef signed   short  stbtt_int16;
  type stbtt_uint32 (line 392) | typedef unsigned int    stbtt_uint32;
  type stbtt_int32 (line 393) | typedef signed   int    stbtt_int32;
  type stbtt__buf (line 461) | typedef struct
  type stbtt_bakedchar (line 475) | typedef struct
  type stbtt_aligned_quad (line 491) | typedef struct
  type stbtt_packedchar (line 521) | typedef struct
  type stbtt_pack_context (line 528) | typedef struct stbtt_pack_context stbtt_pack_context;
  type stbtt_fontinfo (line 529) | typedef struct stbtt_fontinfo stbtt_fontinfo;
  type stbrp_rect (line 531) | typedef struct stbrp_rect stbrp_rect;
  type stbtt_pack_range (line 565) | typedef struct
  type stbtt_pack_context (line 618) | struct stbtt_pack_context {
  type stbtt_fontinfo (line 652) | struct stbtt_fontinfo
  type stbtt_vertex (line 755) | typedef struct
  type stbtt__bitmap (line 833) | typedef struct
  function stbtt_uint8 (line 984) | static stbtt_uint8 stbtt__buf_get8(stbtt__buf *b)
  function stbtt_uint8 (line 991) | static stbtt_uint8 stbtt__buf_peek8(stbtt__buf *b)
  function stbtt__buf_seek (line 998) | static void stbtt__buf_seek(stbtt__buf *b, int o)
  function stbtt__buf_skip (line 1004) | static void stbtt__buf_skip(stbtt__buf *b, int o)
  function stbtt_uint32 (line 1009) | static stbtt_uint32 stbtt__buf_get(stbtt__buf *b, int n)
  function stbtt__buf (line 1019) | static stbtt__buf stbtt__new_buf(const void *p, size_t size)
  function stbtt__buf (line 1032) | static stbtt__buf stbtt__buf_range(const stbtt__buf *b, int o, int s)
  function stbtt__buf (line 1041) | static stbtt__buf stbtt__cff_get_index(stbtt__buf *b)
  function stbtt_uint32 (line 1055) | static stbtt_uint32 stbtt__cff_int(stbtt__buf *b)
  function stbtt__cff_skip_operand (line 1067) | static void stbtt__cff_skip_operand(stbtt__buf *b) {
  function stbtt__buf (line 1082) | static stbtt__buf stbtt__dict_get(stbtt__buf *b, int key)
  function stbtt__dict_get_ints (line 1097) | static void stbtt__dict_get_ints(stbtt__buf *b, int key, int outcount, s...
  function stbtt__cff_index_count (line 1105) | static int stbtt__cff_index_count(stbtt__buf *b)
  function stbtt__buf (line 1111) | static stbtt__buf stbtt__cff_index_get(stbtt__buf b, int i)
  function stbtt_uint16 (line 1137) | static stbtt_uint16 ttUSHORT(stbtt_uint8 *p) { return p[0]*256 + p[1]; }
  function stbtt_int16 (line 1138) | static stbtt_int16 ttSHORT(stbtt_uint8 *p)   { return p[0]*256 + p[1]; }
  function stbtt_uint32 (line 1139) | static stbtt_uint32 ttULONG(stbtt_uint8 *p)  { return (p[0]<<24) + (p[1]...
  function stbtt_int32 (line 1140) | static stbtt_int32 ttLONG(stbtt_uint8 *p)    { return (p[0]<<24) + (p[1]...
  function stbtt__isfont (line 1145) | static int stbtt__isfont(stbtt_uint8 *font)
  function stbtt_uint32 (line 1157) | static stbtt_uint32 stbtt__find_table(stbtt_uint8 *data, stbtt_uint32 fo...
  function stbtt_GetFontOffsetForIndex_internal (line 1170) | static int stbtt_GetFontOffsetForIndex_internal(unsigned char *font_coll...
  function stbtt_GetNumberOfFonts_internal (line 1189) | static int stbtt_GetNumberOfFonts_internal(unsigned char *font_collection)
  function stbtt__buf (line 1205) | static stbtt__buf stbtt__get_subrs(stbtt__buf cff, stbtt__buf fontdict)
  function stbtt_InitFont_internal (line 1218) | static int stbtt_InitFont_internal(stbtt_fontinfo *info, unsigned char *...
  function STBTT_DEF (line 1328) | STBTT_DEF int stbtt_FindGlyphIndex(const stbtt_fontinfo *info, int unico...
  function STBTT_DEF (line 1421) | STBTT_DEF int stbtt_GetCodepointShape(const stbtt_fontinfo *info, int un...
  function stbtt_setvertex (line 1426) | static void stbtt_setvertex(stbtt_vertex *v, stbtt_uint8 type, stbtt_int...
  function stbtt__GetGlyfOffset (line 1435) | static int stbtt__GetGlyfOffset(const stbtt_fontinfo *info, int glyph_in...
  function STBTT_DEF (line 1457) | STBTT_DEF int stbtt_GetGlyphBox(const stbtt_fontinfo *info, int glyph_in...
  function STBTT_DEF (line 1473) | STBTT_DEF int stbtt_GetCodepointBox(const stbtt_fontinfo *info, int code...
  function STBTT_DEF (line 1478) | STBTT_DEF int stbtt_IsGlyphEmpty(const stbtt_fontinfo *info, int glyph_i...
  function stbtt__close_shape (line 1490) | static int stbtt__close_shape(stbtt_vertex *vertices, int num_vertices, ...
  function stbtt__GetGlyphShapeTT (line 1506) | static int stbtt__GetGlyphShapeTT(const stbtt_fontinfo *info, int glyph_...
  type stbtt__csctx (line 1732) | typedef struct
  function stbtt__track_vertex (line 1746) | static void stbtt__track_vertex(stbtt__csctx *c, stbtt_int32 x, stbtt_in...
  function stbtt__csctx_v (line 1755) | static void stbtt__csctx_v(stbtt__csctx *c, stbtt_uint8 type, stbtt_int3...
  function stbtt__csctx_close_shape (line 1771) | static void stbtt__csctx_close_shape(stbtt__csctx *ctx)
  function stbtt__csctx_rmove_to (line 1777) | static void stbtt__csctx_rmove_to(stbtt__csctx *ctx, float dx, float dy)
  function stbtt__csctx_rline_to (line 1785) | static void stbtt__csctx_rline_to(stbtt__csctx *ctx, float dx, float dy)
  function stbtt__csctx_rccurve_to (line 1792) | static void stbtt__csctx_rccurve_to(stbtt__csctx *ctx, float dx1, float ...
  function stbtt__buf (line 1803) | static stbtt__buf stbtt__get_subr(stbtt__buf idx, int n)
  function stbtt__buf (line 1817) | static stbtt__buf stbtt__cid_get_glyph_subrs(const stbtt_fontinfo *info,...
  function stbtt__run_charstring (line 1845) | static int stbtt__run_charstring(const stbtt_fontinfo *info, int glyph_i...
  function stbtt__GetGlyphShapeT2 (line 2104) | static int stbtt__GetGlyphShapeT2(const stbtt_fontinfo *info, int glyph_...
  function stbtt__GetGlyphInfoT2 (line 2121) | static int stbtt__GetGlyphInfoT2(const stbtt_fontinfo *info, int glyph_i...
  function STBTT_DEF (line 2134) | STBTT_DEF int stbtt_GetGlyphShape(const stbtt_fontinfo *info, int glyph_...
  function STBTT_DEF (line 2142) | STBTT_DEF void stbtt_GetGlyphHMetrics(const stbtt_fontinfo *info, int gl...
  function STBTT_DEF (line 2154) | STBTT_DEF int  stbtt_GetGlyphKernAdvance(const stbtt_fontinfo *info, int...
  function STBTT_DEF (line 2184) | STBTT_DEF int  stbtt_GetCodepointKernAdvance(const stbtt_fontinfo *info,...
  function STBTT_DEF (line 2191) | STBTT_DEF void stbtt_GetCodepointHMetrics(const stbtt_fontinfo *info, in...
  function STBTT_DEF (line 2196) | STBTT_DEF void stbtt_GetFontVMetrics(const stbtt_fontinfo *info, int *as...
  function STBTT_DEF (line 2203) | STBTT_DEF void stbtt_GetFontBoundingBox(const stbtt_fontinfo *info, int ...
  function STBTT_DEF (line 2211) | STBTT_DEF float stbtt_ScaleForPixelHeight(const stbtt_fontinfo *info, fl...
  function STBTT_DEF (line 2217) | STBTT_DEF float stbtt_ScaleForMappingEmToPixels(const stbtt_fontinfo *in...
  function STBTT_DEF (line 2223) | STBTT_DEF void stbtt_FreeShape(const stbtt_fontinfo *info, stbtt_vertex *v)
  function STBTT_DEF (line 2233) | STBTT_DEF void stbtt_GetGlyphBitmapBoxSubpixel(const stbtt_fontinfo *fon...
  function STBTT_DEF (line 2251) | STBTT_DEF void stbtt_GetGlyphBitmapBox(const stbtt_fontinfo *font, int g...
  function STBTT_DEF (line 2256) | STBTT_DEF void stbtt_GetCodepointBitmapBoxSubpixel(const stbtt_fontinfo ...
  function STBTT_DEF (line 2261) | STBTT_DEF void stbtt_GetCodepointBitmapBox(const stbtt_fontinfo *font, i...
  type stbtt__hheap_chunk (line 2270) | typedef struct stbtt__hheap_chunk
  type stbtt__hheap (line 2275) | typedef struct stbtt__hheap
  function stbtt__hheap_free (line 2303) | static void stbtt__hheap_free(stbtt__hheap *hh, void *p)
  function stbtt__hheap_cleanup (line 2309) | static void stbtt__hheap_cleanup(stbtt__hheap *hh, void *userdata)
  type stbtt__edge (line 2319) | typedef struct stbtt__edge {
  type stbtt__active_edge (line 2325) | typedef struct stbtt__active_edge
  function stbtt__active_edge (line 2347) | static stbtt__active_edge *stbtt__new_active(stbtt__hheap *hh, stbtt__ed...
  function stbtt__active_edge (line 2369) | static stbtt__active_edge *stbtt__new_active(stbtt__hheap *hh, stbtt__ed...
  function stbtt__fill_active_edges (line 2394) | static void stbtt__fill_active_edges(unsigned char *scanline, int len, s...
  function stbtt__rasterize_sorted_edges (line 2436) | static void stbtt__rasterize_sorted_edges(stbtt__bitmap *result, stbtt__...
  function stbtt__handle_clipped_edge (line 2540) | static void stbtt__handle_clipped_edge(float *scanline, int x, stbtt__ac...
  function stbtt__fill_active_edges_new (line 2577) | static void stbtt__fill_active_edges_new(float *scanline, float *scanlin...
  function stbtt__rasterize_sorted_edges (line 2740) | static void stbtt__rasterize_sorted_edges(stbtt__bitmap *result, stbtt__...
  function stbtt__sort_edges_ins_sort (line 2836) | static void stbtt__sort_edges_ins_sort(stbtt__edge *p, int n)
  function stbtt__sort_edges_quicksort (line 2854) | static void stbtt__sort_edges_quicksort(stbtt__edge *p, int n)
  function stbtt__sort_edges (line 2916) | static void stbtt__sort_edges(stbtt__edge *p, int n)
  type stbtt__point (line 2922) | typedef struct
  function stbtt__rasterize (line 2927) | static void stbtt__rasterize(stbtt__bitmap *result, stbtt__point *pts, i...
  function stbtt__add_point (line 2984) | static void stbtt__add_point(stbtt__point *points, int n, float x, float y)
  function stbtt__tesselate_curve (line 2992) | static int stbtt__tesselate_curve(stbtt__point *points, int *num_points,...
  function stbtt__tesselate_cubic (line 3012) | static void stbtt__tesselate_cubic(stbtt__point *points, int *num_points...
  function stbtt__point (line 3055) | static stbtt__point *stbtt_FlattenCurves(stbtt_vertex *vertices, int num...
  function STBTT_DEF (line 3132) | STBTT_DEF void stbtt_Rasterize(stbtt__bitmap *result, float flatness_in_...
  function STBTT_DEF (line 3144) | STBTT_DEF void stbtt_FreeBitmap(unsigned char *bitmap, void *userdata)
  function STBTT_DEF (line 3194) | STBTT_DEF void stbtt_MakeGlyphBitmapSubpixel(const stbtt_fontinfo *info,...
  function STBTT_DEF (line 3213) | STBTT_DEF void stbtt_MakeGlyphBitmap(const stbtt_fontinfo *info, unsigne...
  function STBTT_DEF (line 3223) | STBTT_DEF void stbtt_MakeCodepointBitmapSubpixel(const stbtt_fontinfo *i...
  function STBTT_DEF (line 3233) | STBTT_DEF void stbtt_MakeCodepointBitmap(const stbtt_fontinfo *info, uns...
  function stbtt_BakeFontBitmap_internal (line 3244) | static int stbtt_BakeFontBitmap_internal(unsigned char *data, int offset...
  function STBTT_DEF (line 3290) | STBTT_DEF void stbtt_GetBakedQuad(stbtt_bakedchar *chardata, int pw, int...
  type stbrp_coord (line 3318) | typedef int stbrp_coord;
  type stbrp_context (line 3331) | typedef struct
  type stbrp_node (line 3337) | typedef struct
  type stbrp_rect (line 3342) | struct stbrp_rect
  function stbrp_init_target (line 3348) | static void stbrp_init_target(stbrp_context *con, int pw, int ph, stbrp_...
  function stbrp_pack_rects (line 3359) | static void stbrp_pack_rects(stbrp_context *con, stbrp_rect *rects, int ...
  function STBTT_DEF (line 3388) | STBTT_DEF int stbtt_PackBegin(stbtt_pack_context *spc, unsigned char *pi...
  function STBTT_DEF (line 3419) | STBTT_DEF void stbtt_PackEnd  (stbtt_pack_context *spc)
  function STBTT_DEF (line 3425) | STBTT_DEF void stbtt_PackSetOversampling(stbtt_pack_context *spc, unsign...
  function stbtt__h_prefilter (line 3437) | static void stbtt__h_prefilter(unsigned char *pixels, int w, int h, int ...
  function stbtt__v_prefilter (line 3499) | static void stbtt__v_prefilter(unsigned char *pixels, int w, int h, int ...
  function stbtt__oversample_shift (line 3561) | static float stbtt__oversample_shift(int oversample)
  function STBTT_DEF (line 3574) | STBTT_DEF int stbtt_PackFontRangesGatherRects(stbtt_pack_context *spc, c...
  function STBTT_DEF (line 3603) | STBTT_DEF int stbtt_PackFontRangesRenderIntoRects(stbtt_pack_context *sp...
  function STBTT_DEF (line 3685) | STBTT_DEF void stbtt_PackFontRangesPackRects(stbtt_pack_context *spc, st...
  function STBTT_DEF (line 3690) | STBTT_DEF int stbtt_PackFontRanges(stbtt_pack_context *spc, unsigned cha...
  function STBTT_DEF (line 3726) | STBTT_DEF int stbtt_PackFontRange(stbtt_pack_context *spc, unsigned char...
  function STBTT_DEF (line 3738) | STBTT_DEF void stbtt_GetPackedQuad(stbtt_packedchar *chardata, int pw, i...
  function stbtt_int32 (line 3772) | static stbtt_int32 stbtt__CompareUTF8toUTF16_bigendian_prefix(stbtt_uint...
  function stbtt_CompareUTF8toUTF16_bigendian_internal (line 3811) | static int stbtt_CompareUTF8toUTF16_bigendian_internal(char *s1, int len...
  function STBTT_DEF (line 3818) | STBTT_DEF const char *stbtt_GetFontNameString(const stbtt_fontinfo *font...
  function stbtt__matchpair (line 3839) | static int stbtt__matchpair(stbtt_uint8 *fc, stbtt_uint32 nm, stbtt_uint...
  function stbtt__matches (line 3886) | static int stbtt__matches(stbtt_uint8 *fc, stbtt_uint32 offset, stbtt_ui...
  function stbtt_FindMatchingFont_internal (line 3915) | static int stbtt_FindMatchingFont_internal(unsigned char *font_collectio...
  function STBTT_DEF (line 3931) | STBTT_DEF int stbtt_BakeFontBitmap(const unsigned char *data, int offset,
  function STBTT_DEF (line 3938) | STBTT_DEF int stbtt_GetFontOffsetForIndex(const unsigned char *data, int...
  function STBTT_DEF (line 3943) | STBTT_DEF int stbtt_GetNumberOfFonts(const unsigned char *data)
  function STBTT_DEF (line 3948) | STBTT_DEF int stbtt_InitFont(stbtt_fontinfo *info, const unsigned char *...
  function STBTT_DEF (line 3953) | STBTT_DEF int stbtt_FindMatchingFont(const unsigned char *fontdata, cons...
  function STBTT_DEF (line 3958) | STBTT_DEF int stbtt_CompareUTF8toUTF16_bigendian(const char *s1, int len...

FILE: MiniEngine/Core/ART/PerfStat/PerfStat.h
  function namespace (line 9) | namespace ART {

FILE: MiniEngine/Core/ART/Sequencer/FrameSequencer.h
  function namespace (line 12) | namespace ART {

FILE: MiniEngine/Core/BitonicSort.cpp
  type BitonicSort (line 31) | namespace BitonicSort
  function VerifySort (line 152) | inline void VerifySort(T* List, uint32_t ListLength, bool bAscending)
  function TestBitonicSort (line 173) | void TestBitonicSort(uint32_t ListSize, bool b64Bit, bool bAscending)

FILE: MiniEngine/Core/BitonicSort.h
  function namespace (line 75) | namespace BitonicSort

FILE: MiniEngine/Core/BuddyAllocator.cpp
  function BuddyBlock (line 168) | BuddyBlock* BuddyAllocator::Allocate(uint32_t numElements, uint32_t elem...

FILE: MiniEngine/Core/BuddyAllocator.h
  type kBuddyAllocationStrategy (line 40) | enum kBuddyAllocationStrategy
  function GetSize (line 54) | struct BuddyBlock

FILE: MiniEngine/Core/BufferManager.cpp
  type Graphics (line 21) | namespace Graphics

FILE: MiniEngine/Core/BufferManager.h
  function namespace (line 30) | namespace Graphics

FILE: MiniEngine/Core/Camera.h
  function namespace (line 19) | namespace Math

FILE: MiniEngine/Core/CameraController.cpp
  type Graphics (line 69) | namespace Graphics

FILE: MiniEngine/Core/CameraController.h
  function namespace (line 19) | namespace Math
  function namespace (line 24) | namespace GameCore

FILE: MiniEngine/Core/Color.h
  function class (line 20) | class Color

FILE: MiniEngine/Core/ColorBuffer.h
  function class (line 21) | class ColorBuffer : public PixelBuffer

FILE: MiniEngine/Core/CommandAllocatorPool.cpp
  function ID3D12CommandAllocator (line 41) | ID3D12CommandAllocator * CommandAllocatorPool::RequestAllocator(uint64_t...

FILE: MiniEngine/Core/CommandAllocatorPool.h
  function class (line 21) | class CommandAllocatorPool

FILE: MiniEngine/Core/CommandContext.cpp
  function CommandContext (line 38) | CommandContext* ContextManager::AllocateContext(D3D12_COMMAND_LIST_TYPE ...
  function CommandContext (line 78) | CommandContext& CommandContext::Begin( const std::wstring ID )
  function ComputeContext (line 87) | ComputeContext& ComputeContext::Begin(const std::wstring& ID, bool Async)

FILE: MiniEngine/Core/CommandContext.h
  function DWParam (line 37) | struct DWParam
  function class (line 61) | class ContextManager
  type NonCopyable (line 76) | struct NonCopyable
  function class (line 83) | class CommandContext : NonCopyable
  function SetRenderTarget (line 218) | void SetRenderTarget(D3D12_CPU_DESCRIPTOR_HANDLE RTV ) { SetRenderTarget...
  function SetRenderTarget (line 219) | void SetRenderTarget(D3D12_CPU_DESCRIPTOR_HANDLE RTV, D3D12_CPU_DESCRIPT...
  function SetDepthStencilTarget (line 220) | void SetDepthStencilTarget(D3D12_CPU_DESCRIPTOR_HANDLE DSV ) { SetRender...
  function FlushResourceBarriers (line 313) | inline void CommandContext::FlushResourceBarriers( void )
  function SetRootSignature (line 322) | inline void GraphicsContext::SetRootSignature( const RootSignature& Root...
  function SetRootSignature (line 333) | inline void ComputeContext::SetRootSignature( const RootSignature& RootS...
  function SetPipelineState (line 344) | inline void GraphicsContext::SetPipelineState( const GraphicsPSO& PSO )
  function SetPipelineState (line 354) | inline void ComputeContext::SetPipelineState( const ComputePSO& PSO )
  function SetViewportAndScissor (line 364) | inline void GraphicsContext::SetViewportAndScissor( UINT x, UINT y, UINT...
  function SetScissor (line 370) | inline void GraphicsContext::SetScissor( UINT left, UINT top, UINT right...
  function SetStencilRef (line 375) | inline void GraphicsContext::SetStencilRef( UINT ref )
  function SetBlendFactor (line 380) | inline void GraphicsContext::SetBlendFactor( Color BlendFactor )
  function SetPrimitiveTopology (line 385) | inline void GraphicsContext::SetPrimitiveTopology( D3D12_PRIMITIVE_TOPOL...
  function SetConstantArray (line 390) | inline void ComputeContext::SetConstantArray( UINT RootEntry, UINT NumCo...
  function SetConstant (line 395) | inline void ComputeContext::SetConstant( UINT RootEntry, DWParam Val, UI...
  function SetConstants (line 400) | inline void ComputeContext::SetConstants( UINT RootEntry, DWParam X )
  function SetConstants (line 405) | inline void ComputeContext::SetConstants( UINT RootEntry, DWParam X, DWP...
  function SetConstants (line 411) | inline void ComputeContext::SetConstants( UINT RootEntry, DWParam X, DWP...
  function SetConstants (line 418) | inline void ComputeContext::SetConstants( UINT RootEntry, DWParam X, DWP...
  function SetConstantArray (line 426) | inline void GraphicsContext::SetConstantArray( UINT RootIndex, UINT NumC...
  function SetConstant (line 431) | inline void GraphicsContext::SetConstant( UINT RootEntry, DWParam Val, U...
  function SetConstants (line 436) | inline void GraphicsContext::SetConstants( UINT RootIndex, DWParam X )
  function SetConstants (line 441) | inline void GraphicsContext::SetConstants( UINT RootIndex, DWParam X, DW...
  function SetConstants (line 447) | inline void GraphicsContext::SetConstants( UINT RootIndex, DWParam X, DW...
  function SetConstants (line 454) | inline void GraphicsContext::SetConstants( UINT RootIndex, DWParam X, DW...
  function SetConstantBuffer (line 462) | inline void ComputeContext::SetConstantBuffer( UINT RootIndex, D3D12_GPU...
  function SetConstantBuffer (line 467) | inline void GraphicsContext::SetConstantBuffer( UINT RootIndex, D3D12_GP...
  function SetDynamicConstantBufferView (line 472) | inline void GraphicsContext::SetDynamicConstantBufferView( UINT RootInde...
  function SetDynamicConstantBufferView (line 481) | inline void ComputeContext::SetDynamicConstantBufferView( UINT RootIndex...
  function SetDynamicVB (line 490) | inline void GraphicsContext::SetDynamicVB( UINT Slot, size_t NumVertices...
  function SetDynamicIB (line 507) | inline void GraphicsContext::SetDynamicIB( size_t IndexCount, const uint...
  function SetDynamicSRV (line 524) | inline void GraphicsContext::SetDynamicSRV(UINT RootIndex, size_t Buffer...
  function SetDynamicSRV (line 532) | inline void ComputeContext::SetDynamicSRV(UINT RootIndex, size_t BufferS...
  function SetBufferSRV (line 540) | inline void GraphicsContext::SetBufferSRV( UINT RootIndex, const GpuBuff...
  function SetBufferSRV (line 546) | inline void ComputeContext::SetBufferSRV( UINT RootIndex, const GpuBuffe...
  function SetBufferUAV (line 552) | inline void GraphicsContext::SetBufferUAV( UINT RootIndex, const GpuBuff...
  function SetBufferUAV (line 558) | inline void ComputeContext::SetBufferUAV( UINT RootIndex, const GpuBuffe...
  function Dispatch (line 564) | inline void ComputeContext::Dispatch( size_t GroupCountX, size_t GroupCo...
  function Dispatch1D (line 572) | inline void ComputeContext::Dispatch1D( size_t ThreadCountX, size_t Grou...
  function Dispatch2D (line 577) | inline void ComputeContext::Dispatch2D( size_t ThreadCountX, size_t Thre...
  function Dispatch3D (line 584) | inline void ComputeContext::Dispatch3D( size_t ThreadCountX, size_t Thre...
  function SetDescriptorHeap (line 592) | inline void CommandContext::SetDescriptorHeap( D3D12_DESCRIPTOR_HEAP_TYP...
  function SetDescriptorHeaps (line 601) | inline void CommandContext::SetDescriptorHeaps( UINT HeapCount, D3D12_DE...
  function SetPredication (line 618) | inline void CommandContext::SetPredication(ID3D12Resource* Buffer, UINT6...
  function SetDynamicDescriptor (line 623) | inline void GraphicsContext::SetDynamicDescriptor( UINT RootIndex, UINT ...
  function SetDynamicDescriptor (line 628) | inline void ComputeContext::SetDynamicDescriptor( UINT RootIndex, UINT O...
  function SetDynamicDescriptors (line 633) | inline void GraphicsContext::SetDynamicDescriptors( UINT RootIndex, UINT...
  function SetDynamicDescriptors (line 638) | inline void ComputeContext::SetDynamicDescriptors( UINT RootIndex, UINT ...
  function SetDynamicSampler (line 643) | inline void GraphicsContext::SetDynamicSampler( UINT RootIndex, UINT Off...
  function SetDynamicSamplers (line 648) | inline void GraphicsContext::SetDynamicSamplers( UINT RootIndex, UINT Of...
  function SetDynamicSampler (line 653) | inline void ComputeContext::SetDynamicSampler( UINT RootIndex, UINT Offs...
  function SetDynamicSamplers (line 658) | inline void ComputeContext::SetDynamicSamplers( UINT RootIndex, UINT Off...
  function SetDescriptorTable (line 663) | inline void GraphicsContext::SetDescriptorTable( UINT RootIndex, D3D12_G...
  function SetDescriptorTable (line 668) | inline void ComputeContext::SetDescriptorTable( UINT RootIndex, D3D12_GP...
  function SetIndexBuffer (line 673) | inline void GraphicsContext::SetIndexBuffer( const D3D12_INDEX_BUFFER_VI...
  function SetVertexBuffer (line 678) | inline void GraphicsContext::SetVertexBuffer( UINT Slot, const D3D12_VER...
  function SetVertexBuffers (line 683) | inline void GraphicsContext::SetVertexBuffers( UINT StartSlot, UINT Coun...
  function Draw (line 688) | inline void GraphicsContext::Draw(UINT VertexCount, UINT VertexStartOffset)
  function DrawIndexed (line 693) | inline void GraphicsContext::DrawIndexed(UINT IndexCount, UINT StartInde...
  function DrawInstanced (line 698) | inline void GraphicsContext::DrawInstanced(UINT VertexCountPerInstance, ...
  function DrawIndexedInstanced (line 707) | inline void GraphicsContext::DrawIndexedInstanced(UINT IndexCountPerInst...
  function ExecuteIndirect (line 716) | inline void GraphicsContext::ExecuteIndirect(CommandSignature& CommandSig,
  function DrawIndirect (line 728) | inline void GraphicsContext::DrawIndirect(GpuBuffer& ArgumentBuffer, uin...
  function ExecuteIndirect (line 733) | inline void ComputeContext::ExecuteIndirect(CommandSignature& CommandSig,
  function DispatchIndirect (line 745) | inline void ComputeContext::DispatchIndirect( GpuBuffer& ArgumentBuffer,...
  function CopyBuffer (line 750) | inline void CommandContext::CopyBuffer( GpuResource& Dest, GpuResource& ...
  function CopyBufferRegion (line 758) | inline void CommandContext::CopyBufferRegion( GpuResource& Dest, size_t ...
  function CopyCounter (line 766) | inline void CommandContext::CopyCounter(GpuResource& Dest, size_t DestOf...
  function ResetCounter (line 774) | inline void CommandContext::ResetCounter(StructuredBuffer& Buf, uint32_t...
  function InsertTimeStamp (line 780) | inline void CommandContext::InsertTimeStamp(ID3D12QueryHeap* pQueryHeap,...
  function ResolveTimeStamps (line 785) | inline void CommandContext::ResolveTimeStamps(ID3D12Resource* pReadbackH...
  function BeginPipelineQuery (line 790) | inline void CommandContext::BeginPipelineQuery(ID3D12QueryHeap* pQueryHe...
  function EndPipelineQuery (line 794) | inline void CommandContext::EndPipelineQuery(ID3D12QueryHeap* pQueryHeap...
  function ResolvePipelineQueries (line 798) | inline void CommandContext::ResolvePipelineQueries(ID3D12Resource* pRead...
  function SetSamplePositions (line 802) | inline void GraphicsContext::SetSamplePositions(UINT NumSamplesPerPixel,...

FILE: MiniEngine/Core/CommandListManager.cpp
  type Graphics (line 152) | namespace Graphics
  function ID3D12CommandAllocator (line 193) | ID3D12CommandAllocator* CommandQueue::RequestAllocator()

FILE: MiniEngine/Core/CommandListManager.h
  function class (line 22) | class CommandQueue
  function class (line 72) | class CommandListManager

FILE: MiniEngine/Core/CommandSignature.h
  function class (line 21) | class IndirectParameter
  function class (line 90) | class CommandSignature
  function Destroy (line 99) | void Destroy( void )
  function Reset (line 105) | void Reset( UINT NumParams )
  function ID3D12CommandSignature (line 129) | ID3D12CommandSignature* GetSignature() const { return m_Signature.Get(); }

FILE: MiniEngine/Core/DDSTextureLoader.cpp
  type handle_closer (line 31) | struct handle_closer { void operator()(HANDLE h) { if (h) CloseHandle(h)...
  function HANDLE (line 33) | inline HANDLE safe_handle( HANDLE h ) { return (h == INVALID_HANDLE_VALU...
  function HRESULT (line 37) | static HRESULT LoadTextureDataFromFile( _In_z_ const wchar_t* fileName,
  function BitsPerPixel (line 162) | size_t BitsPerPixel( _In_ DXGI_FORMAT fmt )
  function GetSurfaceInfo (line 312) | static void GetSurfaceInfo( _In_ size_t width,
  function DXGI_FORMAT (line 445) | static DXGI_FORMAT GetDXGIFormat( const DDS_PIXELFORMAT& ddpf )
  function DXGI_FORMAT (line 657) | static DXGI_FORMAT MakeSRGB( _In_ DXGI_FORMAT format )
  function HRESULT (line 689) | static HRESULT FillInitData( _In_ size_t width,
  function HRESULT (line 787) | static HRESULT CreateD3DResources( _In_ DX12_DEVICE* d3dDevice,
  function HRESULT (line 969) | static HRESULT CreateTextureFromDDS( _In_ DX12_DEVICE* d3dDevice,
  function DDS_ALPHA_MODE (line 1197) | static DDS_ALPHA_MODE GetAlphaMode( _In_ const DDS_HEADER* header )
  function _Use_decl_annotations_ (line 1225) | _Use_decl_annotations_
  function _Use_decl_annotations_ (line 1303) | _Use_decl_annotations_

FILE: MiniEngine/Core/DDSTextureLoader.h
  type DDS_ALPHA_MODE (line 30) | enum DDS_ALPHA_MODE

FILE: MiniEngine/Core/DepthBuffer.h
  function class (line 20) | class DepthBuffer : public PixelBuffer

FILE: MiniEngine/Core/DepthOfField.cpp
  type DepthOfField (line 44) | namespace DepthOfField
  type DoFConstantBuffer (line 163) | struct DoFConstantBuffer

FILE: MiniEngine/Core/DepthOfField.h
  function namespace (line 18) | namespace DepthOfField

FILE: MiniEngine/Core/DescriptorHeap.cpp
  function ID3D12DescriptorHeap (line 32) | ID3D12DescriptorHeap* DescriptorAllocator::RequestNewHeap(D3D12_DESCRIPT...
  function D3D12_CPU_DESCRIPTOR_HANDLE (line 48) | D3D12_CPU_DESCRIPTOR_HANDLE DescriptorAllocator::Allocate( uint32_t Count )
  function DescriptorHandle (line 85) | DescriptorHandle UserDescriptorHeap::Alloc( uint32_t Count )

FILE: MiniEngine/Core/DescriptorHeap.h
  function class (line 25) | class DescriptorAllocator
  function class (line 49) | class DescriptorHandle
  function operator (line 76) | void operator += ( INT OffsetScaledByDescriptorSize )
  function class (line 96) | class UserDescriptorHeap

FILE: MiniEngine/Core/DynamicDescriptorHeap.cpp
  function ID3D12DescriptorHeap (line 32) | ID3D12DescriptorHeap* DynamicDescriptorHeap::RequestDescriptorHeap(D3D12...
  function ID3D12DescriptorHeap (line 113) | inline ID3D12DescriptorHeap* DynamicDescriptorHeap::GetHeapPointer()
  function D3D12_GPU_DESCRIPTOR_HANDLE (line 271) | D3D12_GPU_DESCRIPTOR_HANDLE DynamicDescriptorHeap::UploadDirect( D3D12_C...

FILE: MiniEngine/Core/DynamicDescriptorHeap.h
  function namespace (line 21) | namespace Graphics
  function class (line 29) | class DynamicDescriptorHeap

FILE: MiniEngine/Core/DynamicUploadBuffer.cpp
  function D3D12_VERTEX_BUFFER_VIEW (line 77) | D3D12_VERTEX_BUFFER_VIEW DynamicUploadBuffer::VertexBufferView(uint32_t ...
  function D3D12_INDEX_BUFFER_VIEW (line 86) | D3D12_INDEX_BUFFER_VIEW DynamicUploadBuffer::IndexBufferView(uint32_t Nu...

FILE: MiniEngine/Core/DynamicUploadBuffer.h
  function class (line 16) | class DynamicUploadBuffer

FILE: MiniEngine/Core/EngineProfiling.cpp
  type EngineProfiling (line 42) | namespace EngineProfiling
    function Update (line 589) | void Update( void )
    function BeginBlock (line 599) | void BeginBlock(const wstring& name, CommandContext* Context)
    function EndBlock (line 604) | void EndBlock(CommandContext* Context)
    function BeginPipelineQuery (line 609) | void BeginPipelineQuery(const std::wstring& name, CommandContext* Cont...
    function EndPipelineQuery (line 613) | void EndPipelineQuery(const std::wstring& name, CommandContext* Contex...
    function IsPaused (line 617) | bool IsPaused()
    function DisplayFrameRate (line 622) | void DisplayFrameRate( TextContext& Text )
    function DisplayPerfGraph (line 635) | void DisplayPerfGraph( GraphicsContext& Context )
    function Display (line 641) | void Display( TextContext& Text, float x, float y, float /*w*/, float ...
    function WriteLastFrameToJson (line 667) | void WriteLastFrameToJson(const std::string& path) {
    function FillPerfDataForLastFrame (line 683) | void FillPerfDataForLastFrame(ART::PerfCounterReport& report) {
    function GetFrameGPUTime (line 687) | float GetFrameGPUTime( void )
  class StatHistory (line 47) | class StatHistory
    method StatHistory (line 50) | StatHistory()
    method RecordStat (line 61) | void RecordStat( uint32_t FrameIndex, float Value )
    method GetLast (line 89) | float GetLast(void) const { return m_Recent; }
    method GetMax (line 90) | float GetMax(void) const { return m_Maximum; }
    method GetMin (line 91) | float GetMin(void) const { return m_Minimum; }
    method GetAvg (line 92) | float GetAvg(void) const { return m_Average; }
    method GetHistoryLength (line 95) | uint32_t GetHistoryLength(void) const { return kExtendedHistorySize; }
  class StatPlot (line 108) | class StatPlot
    method StatPlot (line 111) | StatPlot(StatHistory& Data, Color Col = Color(1.0f, 1.0f, 1.0f))
    method SetColor (line 116) | void SetColor( Color Col )
  class StatGraph (line 126) | class StatGraph
    method StatGraph (line 129) | StatGraph(const wstring& Label, D3D12_RECT Window)
    method SetLabel (line 134) | void SetLabel(const wstring& Label)
    method SetWindow (line 139) | void SetWindow(D3D12_RECT Window)
    method AddPlot (line 144) | uint32_t AddPlot( const StatPlot& P )
  class GraphManager (line 163) | class GraphManager
  function GetTimerIndex (line 171) | class GpuTimer
  class GraphicsPipelineQuery (line 204) | class GraphicsPipelineQuery {
    method GraphicsPipelineQuery (line 206) | GraphicsPipelineQuery() {
    method Begin (line 210) | void Begin(CommandContext& Context) {
    method End (line 214) | void End(CommandContext& Context) {
    method GetPipelineStatistics (line 218) | void GetPipelineStatistics(D3D12_QUERY_DATA_PIPELINE_STATISTICS& stats) {
    method GetQueryIndex (line 222) | uint32_t GetQueryIndex() {
  class NestedTimingTree (line 230) | class NestedTimingTree
    method NestedTimingTree (line 233) | NestedTimingTree( const wstring& name, NestedTimingTree* parent = null...
    method NestedTimingTree (line 236) | NestedTimingTree* GetChild( const wstring& name )
    method NestedTimingTree (line 248) | NestedTimingTree* NextScope( void )
    method NestedTimingTree (line 256) | NestedTimingTree* PrevScope( void )
    method NestedTimingTree (line 262) | NestedTimingTree* FirstChild( void )
    method NestedTimingTree (line 267) | NestedTimingTree* LastChild( void )
    method NestedTimingTree (line 275) | NestedTimingTree* NextChild( NestedTimingTree* curChild )
    method NestedTimingTree (line 295) | NestedTimingTree* PrevChild( NestedTimingTree* curChild )
    method StartTiming (line 320) | void StartTiming( CommandContext* Context )
    method StopTiming (line 331) | void StopTiming( CommandContext* Context )
    method BeginPipelineQueryInternal (line 342) | void BeginPipelineQueryInternal(const std::wstring& Name, CommandConte...
    method EndPipelineQueryInternal (line 364) | void EndPipelineQueryInternal(const std::wstring& Name, CommandContext...
    method GatherTimes (line 375) | void GatherTimes(uint32_t FrameIndex)
    method SumInclusiveTimes (line 402) | void SumInclusiveTimes(float& cpuTime, float& gpuTime)
    method UpdateTimes (line 420) | static void UpdateTimes( void )
    method GetTotalCpuTime (line 437) | static float GetTotalCpuTime(void) { return s_TotalCpuTime.GetAvg(); }
    method GetTotalGpuTime (line 438) | static float GetTotalGpuTime(void) { return s_TotalGpuTime.GetAvg(); }
    method GetFrameDelta (line 439) | static float GetFrameDelta(void) { return s_FrameDelta.GetAvg(); }
    method Display (line 441) | static void Display( TextContext& Text, float x )
    method FillPerfData (line 451) | static void FillPerfData(ART::PerfCounterReport& report) {
    method WriteJson (line 456) | static void WriteJson(TWriter& writer) {
    method Toggle (line 460) | void Toggle()
    method IsGraphed (line 466) | bool IsGraphed(){ return m_IsGraphed;}
    method DeleteChildren (line 472) | void DeleteChildren( void )
    method writeJsonRecursive (line 480) | void writeJsonRecursive(TWriter& writer) const {
    method fillPerfDataRecursive (line 523) | void fillPerfDataRecursive(ART::PerfCounterReport& report) {
  type EngineProfiling (line 582) | namespace EngineProfiling
    function Update (line 589) | void Update( void )
    function BeginBlock (line 599) | void BeginBlock(const wstring& name, CommandContext* Context)
    function EndBlock (line 604) | void EndBlock(CommandContext* Context)
    function BeginPipelineQuery (line 609) | void BeginPipelineQuery(const std::wstring& name, CommandContext* Cont...
    function EndPipelineQuery (line 613) | void EndPipelineQuery(const std::wstring& name, CommandContext* Contex...
    function IsPaused (line 617) | bool IsPaused()
    function DisplayFrameRate (line 622) | void DisplayFrameRate( TextContext& Text )
    function DisplayPerfGraph (line 635) | void DisplayPerfGraph( GraphicsContext& Context )
    function Display (line 641) | void Display( TextContext& Text, float x, float y, float /*w*/, float ...
    function WriteLastFrameToJson (line 667) | void WriteLastFrameToJson(const std::string& path) {
    function FillPerfDataForLastFrame (line 683) | void FillPerfDataForLastFrame(ART::PerfCounterReport& report) {
    function GetFrameGPUTime (line 687) | float GetFrameGPUTime( void )

FILE: MiniEngine/Core/EngineProfiling.h
  function namespace (line 23) | namespace EngineProfiling
  function class (line 51) | class ScopedPipelineQuery {
  function class (line 64) | class ScopedTimer
  function class (line 84) | class ScopedPipelineQuery {

FILE: MiniEngine/Core/EngineTuning.cpp
  type EngineTuning (line 27) | namespace EngineTuning
  class VariableGroup (line 49) | class VariableGroup : public EngineVar
    method VariableGroup (line 52) | VariableGroup() : m_IsExpanded(false) {}
    method EngineVar (line 54) | EngineVar* FindChild( const string& name )
    method AddChild (line 60) | void AddChild( const string& name, EngineVar& child )
    method IsExpanded (line 76) | bool IsExpanded( void ) const { return m_IsExpanded; }
    method Increment (line 78) | virtual void Increment( void ) override { m_IsExpanded = true; }
    method Decrement (line 79) | virtual void Decrement( void ) override { m_IsExpanded = false; }
    method Bang (line 80) | virtual void Bang( void ) override { m_IsExpanded = !m_IsExpanded; }
    method SetValue (line 82) | virtual void SetValue( FILE*, const std::string& ) override {}
  function EngineVar (line 193) | EngineVar* VariableGroup::FirstVariable( void )
  function EngineVar (line 198) | EngineVar* VariableGroup::LastVariable( void )
  function EngineVar (line 213) | EngineVar* VariableGroup::NextVariable( EngineVar* curVar )
  function EngineVar (line 233) | EngineVar* VariableGroup::PrevVariable( EngineVar* curVar )
  function EngineVar (line 270) | EngineVar* EngineVar::NextVar( void )
  function EngineVar (line 283) | EngineVar* EngineVar::PrevVar( void )
  function log2 (line 360) | __forceinline float log2( float x ) { return log(x) / log(2.0f); }
  function exp2 (line 361) | __forceinline float exp2( float x ) { return pow(2.0f, x); }
  function ExpVar (line 369) | ExpVar& ExpVar::operator=( float val )
  function HandleDigitalButtonPress (line 517) | void HandleDigitalButtonPress( GameInput::DigitalInput button, float tim...
  function StartSave (line 574) | void StartSave(void*)
  function StartLoad (line 587) | void StartLoad(void*)

FILE: MiniEngine/Core/EngineTuning.h
  function class (line 25) | class EngineVar
  function class (line 51) | class BoolVar : public EngineVar
  function virtual (line 58) | virtual void Increment( void ) override { m_Flag = true; }
  function virtual (line 59) | virtual void Decrement( void ) override { m_Flag = false; }
  function virtual (line 60) | virtual void Bang( void ) override { m_Flag = !m_Flag; }
  function class (line 70) | class NumVar : public EngineVar
  function virtual (line 77) | virtual void Increment( void ) override { m_Value = Clamp(m_Value + m_St...
  function virtual (line 78) | virtual void Decrement( void ) override { m_Value = Clamp(m_Value - m_St...
  function class (line 93) | class ExpVar : public NumVar
  function class (line 129) | class EnumVar : public EngineVar
  function virtual (line 136) | virtual void Increment( void ) override { m_Value = (m_Value + 1) % m_En...
  function virtual (line 137) | virtual void Decrement( void ) override { m_Value = (m_Value + m_EnumLen...
  function SetListLength (line 143) | void SetListLength(int32_t listLength) { m_EnumLength = listLength; m_Va...
  function class (line 153) | class CallbackTrigger : public EngineVar
  function namespace (line 171) | namespace EngineTuning

FILE: MiniEngine/Core/EsramAllocator.h
  function class (line 18) | class EsramAllocator

FILE: MiniEngine/Core/FXAA.cpp
  type FXAA (line 40) | namespace FXAA

FILE: MiniEngine/Core/FXAA.h
  function namespace (line 21) | namespace FXAA

FILE: MiniEngine/Core/FileUtility.cpp
  type Utility (line 24) | namespace Utility
  function ByteArray (line 31) | ByteArray ReadFileHelper(const wstring& fileName)
  function ByteArray (line 51) | ByteArray ReadFileHelperEx( shared_ptr<wstring> fileName)
  function ByteArray (line 61) | ByteArray Inflate(ByteArray CompressedSource, int& err, uint32_t ChunkSi...
  function ByteArray (line 113) | ByteArray DecompressZippedFile( wstring& fileName )
  function ByteArray (line 130) | ByteArray Utility::ReadFileSync( const wstring& fileName)

FILE: MiniEngine/Core/FileUtility.h
  function namespace (line 21) | namespace Utility

FILE: MiniEngine/Core/GameCore.cpp
  type Graphics (line 38) | namespace Graphics
  function InitializeApplication (line 48) | void InitializeApplication( IGameApp& game )
  function TerminateApplication (line 58) | void TerminateApplication( IGameApp& game )
  function UpdateApplication (line 65) | bool UpdateApplication( IGameApp& game )
  function ref (line 126) | ref class MyApplicationView sealed : public Core::IFrameworkView
  function ref (line 161) | ref class ApplicationViewSource sealed : Core::IFrameworkViewSource

FILE: MiniEngine/Core/GameCore.h
  function namespace (line 18) | namespace GameCore

FILE: MiniEngine/Core/GameInput.cpp
  type GameCore (line 30) | namespace GameCore
  type DIMOUSESTATE2 (line 42) | struct DIMOUSESTATE2
  function FilterAnalogInput (line 73) | float FilterAnalogInput( int val, int deadZone )
  function FilterAnalogInput (line 91) | float FilterAnalogInput( float val, float deadZone )
  function KbmBuildKeyMapping (line 103) | void KbmBuildKeyMapping()
  function KbmZeroInputs (line 319) | void KbmZeroInputs()
  function KbmInitialize (line 325) | void KbmInitialize()
  function KbmShutdown (line 360) | void KbmShutdown()
  function KbmUpdate (line 383) | void KbmUpdate()

FILE: MiniEngine/Core/GameInput.h
  function namespace (line 16) | namespace GameInput

FILE: MiniEngine/Core/GpuBuffer.cpp
  function D3D12_CPU_DESCRIPTOR_HANDLE (line 95) | D3D12_CPU_DESCRIPTOR_HANDLE GpuBuffer::CreateConstantBufferView(uint32_t...
  function D3D12_RESOURCE_DESC (line 110) | D3D12_RESOURCE_DESC GpuBuffer::DescribeBuffer(void)
  function D3D12_CPU_DESCRIPTOR_HANDLE (line 206) | const D3D12_CPU_DESCRIPTOR_HANDLE& StructuredBuffer::GetCounterSRV(Comma...
  function D3D12_CPU_DESCRIPTOR_HANDLE (line 212) | const D3D12_CPU_DESCRIPTOR_HANDLE& StructuredBuffer::GetCounterUAV(Comma...

FILE: MiniEngine/Core/GpuBuffer.h
  function class (line 22) | class GpuBuffer : public GpuResource
  function D3D12_CPU_DESCRIPTOR_HANDLE (line 39) | const D3D12_CPU_DESCRIPTOR_HANDLE& GetUAV(void) const { return m_UAV; }
  function D3D12_CPU_DESCRIPTOR_HANDLE (line 40) | const D3D12_CPU_DESCRIPTOR_HANDLE& GetSRV(void) const { return m_SRV; }
  function D3D12_GPU_VIRTUAL_ADDRESS (line 42) | D3D12_GPU_VIRTUAL_ADDRESS RootConstantBufferView(void) const { return m_...
  function D3D12_VERTEX_BUFFER_VIEW (line 85) | inline D3D12_VERTEX_BUFFER_VIEW GpuBuffer::VertexBufferView(size_t Offse...
  function D3D12_INDEX_BUFFER_VIEW (line 94) | inline D3D12_INDEX_BUFFER_VIEW GpuBuffer::IndexBufferView(size_t Offset,...
  function class (line 103) | class ByteAddressBuffer : public GpuBuffer
  function class (line 109) | class IndirectArgsBuffer : public ByteAddressBuffer
  function class (line 117) | class StructuredBuffer : public GpuBuffer
  function class (line 137) | class TypedBuffer : public GpuBuffer

FILE: MiniEngine/Core/GpuCounterManager.h
  function namespace (line 20) | namespace GpuCounterManager

FILE: MiniEngine/Core/GpuResource.h
  function class (line 16) | class GpuResource

FILE: MiniEngine/Core/GraphRenderer.cpp
  type CBGraph (line 41) | struct CBGraph
  class GraphVector (line 49) | class GraphVector
    method GraphVector (line 106) | GraphVector(uint32_t MaxActiveGraphs, uint32_t DebugVarCount) : m_MaxA...
    method Clear (line 138) | void Clear()
    method GraphHandle (line 143) | GraphHandle AddGraph(PerfGraph* graph)
    method Toggle (line 150) | bool Toggle(GraphHandle GraphID)
    method Color (line 173) | Color GetColor(GraphHandle GraphID){ return m_Graphs[GraphID]->m_Color;}
    method Size (line 174) | uint32_t Size(){return (uint32_t)m_Graphs.size();}
    method GetActiveGraphCount (line 175) | uint32_t GetActiveGraphCount(){return m_ActiveGraphs;}
    method GetGlobalPresetMax (line 178) | float GetGlobalPresetMax()
    method PresetMax (line 193) | void PresetMax(const float* maxArray)
    method ManageMax (line 199) | void ManageMax(float* InputNode, uint32_t nodeCount, uint32_t FrameID)
  class PerfGraph (line 51) | class PerfGraph
    method PerfGraph (line 55) | PerfGraph( uint32_t NodeCount, uint32_t debugVarCount, Color color = C...
    method Clear (line 67) | void Clear(){ m_PerfTimesCPUBuffer.clear();}
    method IsGraphed (line 68) | bool IsGraphed(){ return m_IsGraphed; }
    method Color (line 69) | Color GetColor(){ return m_Color; }
    method SetColor (line 70) | void SetColor(Color color){m_Color = color;}
    method UpdateGraph (line 71) | void UpdateGraph( float* timeStamps, uint32_t frameID )
  class GraphVector (line 103) | class GraphVector
    method GraphVector (line 106) | GraphVector(uint32_t MaxActiveGraphs, uint32_t DebugVarCount) : m_MaxA...
    method Clear (line 138) | void Clear()
    method GraphHandle (line 143) | GraphHandle AddGraph(PerfGraph* graph)
    method Toggle (line 150) | bool Toggle(GraphHandle GraphID)
    method Color (line 173) | Color GetColor(GraphHandle GraphID){ return m_Graphs[GraphID]->m_Color;}
    method Size (line 174) | uint32_t Size(){return (uint32_t)m_Graphs.size();}
    method GetActiveGraphCount (line 175) | uint32_t GetActiveGraphCount(){return m_ActiveGraphs;}
    method GetGlobalPresetMax (line 178) | float GetGlobalPresetMax()
    method PresetMax (line 193) | void PresetMax(const float* maxArray)
    method ManageMax (line 199) | void ManageMax(float* InputNode, uint32_t nodeCount, uint32_t FrameID)
  function GraphHandle (line 336) | GraphHandle GraphRenderer::InitGraph( GraphType type)
  function Color (line 358) | Color GraphRenderer::GetGraphColor( GraphHandle GraphID, GraphType Type)
  function DrawGraphHeaders (line 390) | void DrawGraphHeaders(TextContext& Text, float leftMargin, float topMarg...

FILE: MiniEngine/Core/GraphRenderer.h
  function namespace (line 16) | namespace GraphRenderer

FILE: MiniEngine/Core/GraphicsCommon.cpp
  type Graphics (line 20) | namespace Graphics
  type BitonicSort (line 67) | namespace BitonicSort

FILE: MiniEngine/Core/GraphicsCommon.h
  function namespace (line 19) | namespace Graphics

FILE: MiniEngine/Core/GraphicsCore.cpp
  type GameCore (line 91) | namespace GameCore
  type Graphics (line 113) | namespace Graphics
    type eResolution (line 123) | enum eResolution { k720p, k900p, k1080p, k1440p, k1800p, k2160p }
    function SetNativeResolution (line 148) | void SetNativeResolution(void)
    type DebugZoomLevel (line 236) | enum DebugZoomLevel { kDebugZoomOff, kDebugZoom2x, kDebugZoom4x, kDebu...
  function HRESULT (line 299) | static HRESULT EnableExperimentalShaderModels() {
  type Constants (line 694) | struct Constants
  function ColorBuffer (line 888) | ColorBuffer& Graphics::GetFramebufferByIdx(uint32_t idx) {
  function ColorBuffer (line 894) | ColorBuffer& Graphics::GetOverlayBuffer() {

FILE: MiniEngine/Core/GraphicsCore.h
  function namespace (line 33) | namespace Graphics

FILE: MiniEngine/Core/Hash.h
  function namespace (line 32) | namespace Utility

FILE: MiniEngine/Core/LinearAllocator.cpp
  function LinearAllocationPage (line 35) | LinearAllocationPage* LinearAllocatorPageManager::RequestPage()
  function LinearAllocationPage (line 85) | LinearAllocationPage* LinearAllocatorPageManager::CreateNewPage( size_t ...
  function DynAlloc (line 146) | DynAlloc LinearAllocator::AllocateLargePage(size_t SizeInBytes)
  function DynAlloc (line 158) | DynAlloc LinearAllocator::Allocate(size_t SizeInBytes, size_t Alignment)

FILE: MiniEngine/Core/LinearAllocator.h
  type DynAlloc (line 34) | struct DynAlloc
  function class (line 46) | class LinearAllocationPage : public GpuResource
  type LinearAllocatorType (line 83) | enum LinearAllocatorType
  function class (line 99) | class LinearAllocatorPageManager
  function class (line 128) | class LinearAllocator
  function DestroyAll (line 142) | static void DestroyAll( void )

FILE: MiniEngine/Core/Math/BoundingPlane.h
  function namespace (line 18) | namespace Math
  function BoundingPlane (line 73) | inline BoundingPlane::BoundingPlane( Vector3 pointOnPlane, Vector3 norma...
  function BoundingPlane (line 83) | inline BoundingPlane PlaneFromPointsCCW( Vector3 A, Vector3 B, Vector3 C )

FILE: MiniEngine/Core/Math/BoundingSphere.h
  function namespace (line 18) | namespace Math

FILE: MiniEngine/Core/Math/Common.h
  function namespace (line 21) | namespace Math

FILE: MiniEngine/Core/Math/Frustum.h
  function namespace (line 19) | namespace Math

FILE: MiniEngine/Core/Math/Matrix3.h
  function namespace (line 18) | namespace Math

FILE: MiniEngine/Core/Math/Matrix4.h
  function namespace (line 18) | namespace Math

FILE: MiniEngine/Core/Math/Quaternion.h
  function namespace (line 18) | namespace Math

FILE: MiniEngine/Core/Math/Random.cpp
  type Math (line 17) | namespace Math

FILE: MiniEngine/Core/Math/Random.h
  function namespace (line 19) | namespace Math

FILE: MiniEngine/Core/Math/Scalar.h
  function namespace (line 18) | namespace Math

FILE: MiniEngine/Core/Math/Transform.h
  function namespace (line 18) | namespace Math

FILE: MiniEngine/Core/Math/Vector.h
  function namespace (line 18) | namespace Math
  function Vector3 (line 65) | Vector3 operator* ( Scalar  v1, Vector3 v2 ) { return Vector3(v1) * v2; }
  function Vector3 (line 66) | Vector3 operator/ ( Scalar  v1, Vector3 v2 ) 	{ return Vector3(v1) / v2; }
  function Vector3 (line 67) | Vector3 operator* ( float   v1, Vector3 v2 ) { return Scalar(v1) * v2; }
  function Vector3 (line 68) | Vector3 operator/ ( float   v1, Vector3 v2 ) 	{ return Scalar(v1) / v2; }
  function class (line 75) | class Vector4
  function operator (line 114) | void operator/= ( float   v2 ) { *this = *this / Scalar(v2); }
  function Vector4 (line 116) | Vector4 operator* ( Scalar  v1, Vector4 v2 ) { return Vector4(v1) * v2; }
  function Vector4 (line 117) | Vector4 operator/ ( Scalar  v1, Vector4 v2 ) 	{ return Vector4(v1) / v2; }
  function Vector4 (line 118) | Vector4 operator* ( float   v1, Vector4 v2 ) { return Scalar(v1) * v2; }
  function Vector4 (line 119) | Vector4 operator/ ( float   v1, Vector4 v2 ) 	{ return Scalar(v1) / v2; }
  function INLINE (line 125) | INLINE Vector3::Vector3( Vector4 v )
  function class (line 131) | class BoolVector

FILE: MiniEngine/Core/MotionBlur.cpp
  type MotionBlur (line 37) | namespace MotionBlur

FILE: MiniEngine/Core/MotionBlur.h
  function namespace (line 19) | namespace Math { class Matrix4; class Camera; }
  function namespace (line 23) | namespace MotionBlur

FILE: MiniEngine/Core/ParticleEffect.cpp
  type ParticleEffects (line 27) | namespace ParticleEffects
  function Color (line 42) | inline static Color RandColor( Color c0, Color c1 )
  function XMFLOAT3 (line 53) | inline static XMFLOAT3 RandSpread( const XMFLOAT3& s )

FILE: MiniEngine/Core/ParticleEffect.h
  function class (line 20) | class ParticleEffect

FILE: MiniEngine/Core/ParticleEffectManager.cpp
  type ParticleEffects (line 77) | namespace ParticleEffects
  type CBChangesPerView (line 99) | struct CBChangesPerView
  function SetFinalBuffers (line 162) | void SetFinalBuffers(ComputeContext& CompContext)
  function MaintainTextureList (line 176) | void MaintainTextureList(ParticleEffectProperties& effectProperties)
  function RenderTiles (line 201) | void RenderTiles(ComputeContext& CompContext, ColorBuffer& ColorTarget, ...
  function RenderSprites (line 340) | void RenderSprites(GraphicsContext& GrContext, ColorBuffer& ColorTarget,...
  function EffectHandle (line 581) | EffectHandle ParticleEffects::PreLoadEffectResources( ParticleEffectProp...
  function EffectHandle (line 598) | EffectHandle ParticleEffects::InstantiateEffect( EffectHandle effectHand...
  function EffectHandle (line 620) | EffectHandle ParticleEffects::InstantiateEffect( ParticleEffectPropertie...

FILE: MiniEngine/Core/ParticleEffectManager.h
  function namespace (line 22) | namespace Math
  function namespace (line 27) | namespace ParticleEffects

FILE: MiniEngine/Core/ParticleEffectProperties.h
  type ParticleEffectProperties (line 19) | struct ParticleEffectProperties

FILE: MiniEngine/Core/ParticleEmissionProperties.cpp
  function EmissionProperties (line 17) | EmissionProperties* CreateEmissionProperties()

FILE: MiniEngine/Core/ParticleShaderStructs.h
  type EmissionProperties (line 20) | struct EmissionProperties
  type ParticleSpawnData (line 41) | struct ParticleSpawnData
  type ParticleMotion (line 54) | struct ParticleMotion
  type ParticleVertex (line 64) | struct ParticleVertex
  type ParticleScreenData (line 72) | struct ParticleScreenData

FILE: MiniEngine/Core/PipelineState.h
  function class (line 27) | class PSO
  function class (line 55) | class GraphicsPSO : public PSO
  function class (line 99) | class ComputePSO : public PSO

FILE: MiniEngine/Core/PixelBuffer.cpp
  function DXGI_FORMAT (line 28) | DXGI_FORMAT PixelBuffer::GetBaseFormat( DXGI_FORMAT defaultFormat )
  function DXGI_FORMAT (line 75) | DXGI_FORMAT PixelBuffer::GetUAVFormat( DXGI_FORMAT defaultFormat )
  function DXGI_FORMAT (line 118) | DXGI_FORMAT PixelBuffer::GetDSVFormat( DXGI_FORMAT defaultFormat )
  function DXGI_FORMAT (line 153) | DXGI_FORMAT PixelBuffer::GetDepthFormat( DXGI_FORMAT defaultFormat )
  function DXGI_FORMAT (line 188) | DXGI_FORMAT PixelBuffer::GetStencilFormat( DXGI_FORMAT defaultFormat )
  function D3D12_RESOURCE_DESC (line 337) | D3D12_RESOURCE_DESC PixelBuffer::DescribeTex2D( uint32_t Width, uint32_t...
  function applySRGB (line 427) | float applySRGB(float x) {
  function D3D12_RESOURCE_DESC (line 496) | D3D12_RESOURCE_DESC PixelBuffer::CreateResourceDesc( uint32_t Width, uin...

FILE: MiniEngine/Core/PixelBuffer.h
  function class (line 21) | class PixelBuffer : public GpuResource

FILE: MiniEngine/Core/PostEffects.cpp
  type SSAO (line 52) | namespace SSAO
  type FXAA (line 57) | namespace FXAA
  type DepthOfField (line 62) | namespace DepthOfField
  type PostEffects (line 68) | namespace PostEffects

FILE: MiniEngine/Core/PostEffects.h
  function namespace (line 21) | namespace PostEffects

FILE: MiniEngine/Core/ReadbackBuffer.h
  function class (line 18) | class ReadbackBuffer : public GpuBuffer

FILE: MiniEngine/Core/RootSignature.h
  function class (line 20) | class RootParameter
  function D3D12_ROOT_PARAMETER (line 100) | const D3D12_ROOT_PARAMETER& operator() ( void ) const { return m_RootPar...
  function class (line 113) | class RootSignature
  function ID3D12RootSignature (line 163) | ID3D12RootSignature* GetSignature() const { return m_Signature; }

FILE: MiniEngine/Core/SSAO.cpp
  type SSAO (line 36) | namespace SSAO
    type QualityLevel (line 46) | enum QualityLevel { kSsaoQualityVeryLow, kSsaoQualityLow, kSsaoQuality...
    function ComputeAO (line 135) | void ComputeAO( ComputeContext& Context, ColorBuffer& Destination, Col...
    function BlurAndUpsample (line 234) | void BlurAndUpsample( ComputeContext& Context,
  type SSAO (line 133) | namespace SSAO
    type QualityLevel (line 46) | enum QualityLevel { kSsaoQualityVeryLow, kSsaoQualityLow, kSsaoQuality...
    function ComputeAO (line 135) | void ComputeAO( ComputeContext& Context, ColorBuffer& Destination, Col...
    function BlurAndUpsample (line 234) | void BlurAndUpsample( ComputeContext& Context,

FILE: MiniEngine/Core/SSAO.h
  function namespace (line 16) | namespace Math { class Camera;  }
  function namespace (line 18) | namespace SSAO

FILE: MiniEngine/Core/SamplerManager.cpp
  function D3D12_CPU_DESCRIPTOR_HANDLE (line 29) | D3D12_CPU_DESCRIPTOR_HANDLE SamplerDesc::CreateDescriptor()

FILE: MiniEngine/Core/SamplerManager.h
  function class (line 19) | class SamplerDesc : public D3D12_SAMPLER_DESC

FILE: MiniEngine/Core/ShadowBuffer.h
  function class (line 22) | class ShadowBuffer : public DepthBuffer

FILE: MiniEngine/Core/ShadowCamera.h
  function namespace (line 18) | namespace GameCore

FILE: MiniEngine/Core/SystemTime.h
  function class (line 18) | class SystemTime
  function class (line 52) | class CpuTimer

FILE: MiniEngine/Core/TemporalEffects.cpp
  type TemporalEffects (line 32) | namespace TemporalEffects
  type ConstantBuffer (line 383) | struct ConstantBuffer

FILE: MiniEngine/Core/TemporalEffects.h
  function namespace (line 21) | namespace TemporalEffects

FILE: MiniEngine/Core/TextRenderer.cpp
  type TextRenderer (line 38) | namespace TextRenderer
    class Font (line 40) | class Font
      method Font (line 43) | Font()
      method LoadFromBinary (line 60) | void LoadFromBinary( const wchar_t* fontName, const uint8_t* pBinary...
      method Load (line 104) | bool Load( const wstring& fileName )
      type Glyph (line 120) | struct Glyph
      method Glyph (line 127) | const Glyph* GetGlyph( wchar_t ch ) const
      method GetHeight (line 134) | uint16_t GetHeight( void ) const { return m_FontHeight; }
      method GetBorderSize (line 137) | uint16_t GetBorderSize( void ) const { return m_BorderSize; }
      method GetVerticalSpacing (line 140) | float GetVerticalSpacing( float size ) const { return size * m_FontL...
      method Texture (line 143) | const Texture& GetTexture( void ) const { return m_Texture; }
      method GetXNormalizationFactor (line 145) | float GetXNormalizationFactor() const { return m_NormalizeXCoord; }
      method GetYNormalizationFactor (line 146) | float GetYNormalizationFactor() const { return m_NormalizeYCoord; }
      method GetAntialiasRange (line 151) | float GetAntialiasRange( float size ) const { return Max( 1.0f, size...
    function Font (line 168) | const Font* GetOrLoadFont(const wstring& filename)
      method Font (line 43) | Font()
      method LoadFromBinary (line 60) | void LoadFromBinary( const wchar_t* fontName, const uint8_t* pBinary...
      method Load (line 104) | bool Load( const wstring& fileName )
      type Glyph (line 120) | struct Glyph
      method Glyph (line 127) | const Glyph* GetGlyph( wchar_t ch ) const
      method GetHeight (line 134) | uint16_t GetHeight( void ) const { return m_FontHeight; }
      method GetBorderSize (line 137) | uint16_t GetBorderSize( void ) const { return m_BorderSize; }
      method GetVerticalSpacing (line 140) | float GetVerticalSpacing( float size ) const { return size * m_FontL...
      method Texture (line 143) | const Texture& GetTexture( void ) const { return m_Texture; }
      method GetXNormalizationFactor (line 145) | float GetXNormalizationFactor() const { return m_NormalizeXCoord; }
      method GetYNormalizationFactor (line 146) | float GetYNormalizationFactor() const { return m_NormalizeYCoord; }
      method GetAntialiasRange (line 151) | float GetAntialiasRange( float size ) const { return Max( 1.0f, size...
  function UINT (line 437) | UINT TextContext::FillVertexBuffer( TextVert volatile* verts, const char...

FILE: MiniEngine/Core/TextRenderer.h
  function namespace (line 23) | namespace TextRenderer
  function class (line 36) | class TextContext

FILE: MiniEngine/Core/TextureManager.cpp
  function UINT (line 29) | static UINT BytesPerPixel( DXGI_FORMAT Format )
  type Header (line 139) | struct Header
  type TextureManager (line 154) | namespace TextureManager
    function Initialize (line 160) | void Initialize( const std::wstring& TextureLibRoot )
    function Shutdown (line 165) | void Shutdown( void )
    function ReportLoadErrors (line 170) | void ReportLoadErrors(bool enable) {
    function FindOrLoadTexture (line 174) | pair<ManagedTexture*, bool> FindOrLoadTexture( const wstring& fileName )
    function Texture (line 192) | const Texture& GetBlackTex2D(void)
    function Texture (line 210) | const Texture& GetWhiteTex2D(void)
    function Texture (line 228) | const Texture& GetMagentaTex2D(void)
  function ManagedTexture (line 262) | const ManagedTexture* TextureManager::LoadFromFile( const std::wstring& ...
  function ManagedTexture (line 276) | const ManagedTexture* TextureManager::LoadDDSFromFile( const std::wstrin...
  function ManagedTexture (line 298) | const ManagedTexture* TextureManager::LoadTGAFromFile( const std::wstrin...
  function ManagedTexture (line 327) | const ManagedTexture* TextureManager::LoadPIXImageFromFile( const std::w...

FILE: MiniEngine/Core/TextureManager.h
  function class (line 21) | class Texture : public GpuResource
  function ManagedTexture (line 100) | inline const ManagedTexture* LoadPIXImageFromFile( const std::string& fi...

FILE: MiniEngine/Core/Utility.cpp
  function SIMDMemCopy (line 19) | void SIMDMemCopy( void* __restrict _Dest, const void* __restrict _Source...
  function SIMDMemFill (line 98) | void SIMDMemFill( void* __restrict _Dest, __m128 FillVector, size_t NumQ...
  function MakeWStr (line 138) | std::wstring MakeWStr( const std::string& str )

FILE: MiniEngine/Core/Utility.h
  function namespace (line 18) | namespace Utility

FILE: MiniEngine/Core/d3dx12.h
  type CD3DX12_DEFAULT (line 20) | struct CD3DX12_DEFAULT {}
  function D3D12_RECT (line 35) | struct CD3DX12_RECT : public D3D12_RECT
  function D3D12_BOX (line 58) | struct CD3DX12_BOX : public D3D12_BOX
  function D3D12_DEPTH_STENCIL_DESC (line 116) | struct CD3DX12_DEPTH_STENCIL_DESC : public D3D12_DEPTH_STENCIL_DESC
  function D3D12_BLEND_DESC (line 172) | struct CD3DX12_BLEND_DESC : public D3D12_BLEND_DESC
  function D3D12_RASTERIZER_DESC (line 199) | struct CD3DX12_RASTERIZER_DESC : public D3D12_RASTERIZER_DESC
  function D3D12_RESOURCE_ALLOCATION_INFO (line 250) | struct CD3DX12_RESOURCE_ALLOCATION_INFO : public D3D12_RESOURCE_ALLOCATI...
  type CD3DX12_HEAP_PROPERTIES (line 268) | struct CD3DX12_HEAP_PROPERTIES
  function explicit (line 272) | explicit CD3DX12_HEAP_PROPERTIES(const D3D12_HEAP_PROPERTIES &o) :
  type CD3DX12_HEAP_DESC (line 316) | struct CD3DX12_HEAP_DESC
  function explicit (line 320) | explicit CD3DX12_HEAP_DESC(const D3D12_HEAP_DESC &o) :
  type CD3DX12_CLEAR_VALUE (line 403) | struct CD3DX12_CLEAR_VALUE
  function explicit (line 407) | explicit CD3DX12_CLEAR_VALUE(const D3D12_CLEAR_VALUE &o) :
  type CD3DX12_RANGE (line 431) | struct CD3DX12_RANGE
  function explicit (line 435) | explicit CD3DX12_RANGE(const D3D12_RANGE &o) :
  type CD3DX12_TILED_RESOURCE_COORDINATE (line 473) | struct CD3DX12_TILED_RESOURCE_COORDINATE
  function explicit (line 477) | explicit CD3DX12_TILED_RESOURCE_COORDINATE(const D3D12_TILED_RESOURCE_CO...
  function D3D12_TILE_REGION_SIZE (line 495) | struct CD3DX12_TILE_REGION_SIZE : public D3D12_TILE_REGION_SIZE
  type CD3DX12_SUBRESOURCE_TILING (line 519) | struct CD3DX12_SUBRESOURCE_TILING
  function explicit (line 523) | explicit CD3DX12_SUBRESOURCE_TILING(const D3D12_SUBRESOURCE_TILING &o) :
  function D3D12_TILE_SHAPE (line 541) | struct CD3DX12_TILE_SHAPE : public D3D12_TILE_SHAPE
  type CD3DX12_RESOURCE_BARRIER (line 561) | struct CD3DX12_RESOURCE_BARRIER
  function explicit (line 565) | explicit CD3DX12_RESOURCE_BARRIER(const D3D12_RESOURCE_BARRIER &o) :
  function CD3DX12_RESOURCE_BARRIER (line 568) | static inline CD3DX12_RESOURCE_BARRIER Transition(
  function CD3DX12_RESOURCE_BARRIER (line 586) | static inline CD3DX12_RESOURCE_BARRIER Aliasing(
  function CD3DX12_RESOURCE_BARRIER (line 598) | static inline CD3DX12_RESOURCE_BARRIER UAV(
  type CD3DX12_PACKED_MIP_INFO (line 612) | struct CD3DX12_PACKED_MIP_INFO
  function explicit (line 616) | explicit CD3DX12_PACKED_MIP_INFO(const D3D12_PACKED_MIP_INFO &o) :
  function explicit (line 638) | explicit CD3DX12_SUBRESOURCE_FOOTPRINT(const D3D12_SUBRESOURCE_FOOTPRINT...
  function explicit (line 654) | explicit CD3DX12_SUBRESOURCE_FOOTPRINT(
  type CD3DX12_TEXTURE_COPY_LOCATION (line 668) | struct CD3DX12_TEXTURE_COPY_LOCATION
  function explicit (line 672) | explicit CD3DX12_TEXTURE_COPY_LOCATION(const D3D12_TEXTURE_COPY_LOCATION...
  function D3D12_DESCRIPTOR_RANGE (line 691) | struct CD3DX12_DESCRIPTOR_RANGE : public D3D12_DESCRIPTOR_RANGE
  function D3D12_ROOT_DESCRIPTOR_TABLE (line 737) | struct CD3DX12_ROOT_DESCRIPTOR_TABLE : public D3D12_ROOT_DESCRIPTOR_TABLE
  function Init (line 750) | inline void Init(
  function Init (line 757) | static inline void Init(
  function D3D12_ROOT_CONSTANTS (line 768) | struct CD3DX12_ROOT_CONSTANTS : public D3D12_ROOT_CONSTANTS
  function D3D12_ROOT_DESCRIPTOR (line 803) | struct CD3DX12_ROOT_DESCRIPTOR : public D3D12_ROOT_DESCRIPTOR
  function D3D12_ROOT_PARAMETER (line 831) | struct CD3DX12_ROOT_PARAMETER : public D3D12_ROOT_PARAMETER
  function InitAsDescriptorTable (line 894) | inline void InitAsDescriptorTable(
  function D3D12_STATIC_SAMPLER_DESC (line 937) | struct CD3DX12_STATIC_SAMPLER_DESC : public D3D12_STATIC_SAMPLER_DESC
  function D3D12_ROOT_SIGNATURE_DESC (line 1039) | struct CD3DX12_ROOT_SIGNATURE_DESC : public D3D12_ROOT_SIGNATURE_DESC
  function CD3DX12_ROOT_SIGNATURE_DESC (line 1054) | CD3DX12_ROOT_SIGNATURE_DESC(CD3DX12_DEFAULT)
  function D3D12_DESCRIPTOR_RANGE1 (line 1086) | struct CD3DX12_DESCRIPTOR_RANGE1 : public D3D12_DESCRIPTOR_RANGE1
  function D3D12_ROOT_DESCRIPTOR_TABLE1 (line 1136) | struct CD3DX12_ROOT_DESCRIPTOR_TABLE1 : public D3D12_ROOT_DESCRIPTOR_TABLE1
  function Init (line 1149) | inline void Init(
  function Init (line 1156) | static inline void Init(
  function D3D12_ROOT_DESCRIPTOR1 (line 1167) | struct CD3DX12_ROOT_DESCRIPTOR1 : public D3D12_ROOT_DESCRIPTOR1
  function D3D12_ROOT_PARAMETER1 (line 1202) | struct CD3DX12_ROOT_PARAMETER1 : public D3D12_ROOT_PARAMETER1
  function InitAsDescriptorTable (line 1268) | inline void InitAsDescriptorTable(
  function D3D12_VERSIONED_ROOT_SIGNATURE_DESC (line 1314) | struct CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC : public D3D12_VERSIONED_RO...
  function CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC (line 1348) | CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(CD3DX12_DEFAULT)
  function D3D12_CPU_DESCRIPTOR_HANDLE (line 1407) | struct CD3DX12_CPU_DESCRIPTOR_HANDLE : public D3D12_CPU_DESCRIPTOR_HANDLE
  function D3D12_GPU_DESCRIPTOR_HANDLE (line 1468) | struct CD3DX12_GPU_DESCRIPTOR_HANDLE : public D3D12_GPU_DESCRIPTOR_HANDLE
  function UINT (line 1529) | inline UINT D3D12CalcSubresource( UINT MipSlice, UINT ArraySlice, UINT P...
  function D3D12DecomposeSubresource (line 1536) | void D3D12DecomposeSubresource( UINT Subresource, UINT MipLevels, UINT A...
  function UINT8 (line 1544) | inline UINT8 D3D12GetFormatPlaneCount(
  function D3D12_RESOURCE_DESC (line 1558) | struct CD3DX12_RESOURCE_DESC : public D3D12_RESOURCE_DESC
  function CD3DX12_RESOURCE_DESC (line 1590) | static inline CD3DX12_RESOURCE_DESC Buffer(
  function UINT8 (line 1649) | inline UINT8 PlaneCount(_In_ DX12_DEVICE* pDevice) const
  function UINT (line 1651) | inline UINT Subresources(_In_ DX12_DEVICE* pDevice) const
  function UINT (line 1653) | inline UINT CalcSubresource(UINT MipSlice, UINT ArraySlice, UINT PlaneSl...
  function D3D12IsLayoutOpaque (line 1837) | inline bool D3D12IsLayoutOpaque( D3D12_TEXTURE_LAYOUT Layout )
  function ID3D12CommandList (line 1841) | inline ID3D12CommandList * const * CommandListCast(DX12_GRAPHICSCOMMANDL...
  function HRESULT (line 1855) | inline HRESULT D3DX12SerializeVersionedRootSignature(

FILE: MiniEngine/Core/dds.h
  function namespace (line 32) | namespace DirectX

FILE: MiniEngine/Model/Model.h
  function class (line 23) | class Model

FILE: MiniEngine/ModelViewer/ForwardPlusLighting.cpp
  type LightData (line 33) | struct LightData
  type Lighting (line 48) | namespace Lighting
  type CSConstants (line 307) | struct CSConstants

FILE: MiniEngine/ModelViewer/ForwardPlusLighting.h
  function namespace (line 27) | namespace Math
  function namespace (line 34) | namespace Lighting

FILE: MiniEngine/ModelViewer/ModelViewer.cpp
  class ModelViewer (line 85) | class ModelViewer : public GameCore::IGameApp
    method ModelViewer (line 89) | ModelViewer(void) {}
    method IsDone (line 97) | virtual bool IsDone(void) override
    type eObjectFilter (line 109) | enum eObjectFilter { kOpaque = 0x1, kCutout = 0x2, kTransparent = 0x4,...
  function FindScene (line 222) | bool FindScene(std::wstring *pScenePath, const wchar_t *pExecutableFolde...
  type Graphics (line 522) | namespace Graphics
  type VSConstants (line 577) | struct VSConstants
  type CBData (line 1092) | struct __declspec(align(16)) CBData

FILE: MiniEngine/ModelViewer/Scene.h
  function class (line 26) | class Scene {

FILE: MiniEngine/rapidjson-master/include/rapidjson/allocators.h
  function RAPIDJSON_NAMESPACE_BEGIN (line 20) | RAPIDJSON_NAMESPACE_BEGIN
  function Clear (line 145) | void Clear() {
  function Capacity (line 158) | size_t Capacity() const {
  function Free (line 225) | static void Free(void *ptr) { (void)ptr; }
  function AddChunk (line 237) | bool AddChunk(size_t capacity) {
  type ChunkHeader (line 256) | struct ChunkHeader {

FILE: MiniEngine/rapidjson-master/include/rapidjson/cursorstreamwrapper.h
  function Ch (line 47) | Ch Take() {

FILE: MiniEngine/rapidjson-master/include/rapidjson/document.h
  type GenericMember (line 106) | typedef GenericMember<Encoding,Allocator> PlainType;
  type typename (line 107) | typedef typename internal::MaybeAddConst<Const,PlainType>::Type ValueType;
  type ValueType (line 119) | typedef ValueType      value_type;
  type ValueType (line 120) | typedef ValueType *    pointer;
  type ValueType (line 121) | typedef ValueType &    reference;
  type std (line 122) | typedef std::ptrdiff_t difference_type;
  type std (line 123) | typedef std::random_access_iterator_tag iterator_category;
  type pointer (line 127) | typedef pointer         Pointer;
  type reference (line 129) | typedef reference       Reference;
  type difference_type (line 131) | typedef difference_type DifferenceType;
  function ptr_ (line 155) | GenericMemberIterator(const NonConstIterator & it) : ptr_(it.ptr_) {}
  function ConstIterator (line 177) | bool operator==(ConstIterator that) const { return ptr_ == that.ptr_; }
  function ConstIterator (line 178) | bool operator!=(ConstIterator that) const { return ptr_ != that.ptr_; }
  function ConstIterator (line 179) | bool operator<=(ConstIterator that) const { return ptr_ <= that.ptr_; }
  function ConstIterator (line 180) | bool operator>=(ConstIterator that) const { return ptr_ >= that.ptr_; }
  function operator (line 181) | bool operator< (ConstIterator that) const { return ptr_ < that.ptr_; }
  function operator (line 182) | bool operator> (ConstIterator that) const { return ptr_ > that.ptr_; }
  function Reference (line 187) | Reference operator*() const { return *ptr_; }
  function Pointer (line 188) | Pointer   operator->() const { return ptr_; }
  function Reference (line 189) | Reference operator[](DifferenceType n) const { return ptr_[n]; }
  type CharType (line 256) | typedef CharType Ch;
  function explicit (line 308) | explicit GenericStringRef(const CharType* str)
  function operator (line 326) | operator const Ch *() const { return s; }
  function namespace (line 408) | namespace internal {
  function Is (line 432) | static bool Is(const ValueType& v) { return v.IsBool(); }
  function Get (line 433) | static bool Get(const ValueType& v) { return v.GetBool(); }
  function Is (line 440) | static bool Is(const ValueType& v) { return v.IsInt(); }
  function Get (line 441) | static int Get(const ValueType& v) { return v.GetInt(); }
  function Is (line 448) | static bool Is(const ValueType& v) { return v.IsUint(); }
  function Get (line 449) | static unsigned Get(const ValueType& v) { return v.GetUint(); }
  function Is (line 458) | static bool Is(const ValueType& v) { return v.IsInt(); }
  function Get (line 459) | static long Get(const ValueType& v) { return v.GetInt(); }
  function Is (line 467) | static bool Is(const ValueType& v) { return v.IsUint(); }
  function Get (line 468) | static unsigned long Get(const ValueType& v) { return v.GetUint(); }
  function Is (line 476) | static bool Is(const ValueType& v) { return v.IsInt64(); }
  function Get (line 477) | static int64_t Get(const ValueType& v) { return v.GetInt64(); }
  function Is (line 484) | static bool Is(const ValueType& v) { return v.IsUint64(); }
  function Get (line 485) | static uint64_t Get(const ValueType& v) { return v.GetUint64(); }
  function Is (line 492) | static bool Is(const ValueType& v) { return v.IsDouble(); }
  function Get (line 493) | static double Get(const ValueType& v) { return v.GetDouble(); }
  function Is (line 500) | static bool Is(const ValueType& v) { return v.IsFloat(); }
  function Get (line 501) | static float Get(const ValueType& v) { return v.GetFloat(); }
  type typename (line 508) | typedef const typename ValueType::Ch* StringType;
  function Is (line 509) | static bool Is(const ValueType& v) { return v.IsString(); }
  function StringType (line 510) | static StringType Get(const ValueType& v) { return v.GetString(); }
  function Is (line 519) | static bool Is(const ValueType& v) { return v.IsString(); }
  function StringType (line 520) | static StringType Get(const ValueType& v) { return StringType(v.GetStrin...
  type typename (line 527) | typedef typename ValueType::Array ArrayType;
  function Is (line 528) | static bool Is(const ValueType& v) { return v.IsArray(); }
  function ArrayType (line 529) | static ArrayType Get(ValueType& v) { return v.GetArray(); }
  type typename (line 536) | typedef typename ValueType::ConstArray ArrayType;
  function Is (line 537) | static bool Is(const ValueType& v) { return v.IsArray(); }
  function ArrayType (line 538) | static ArrayType Get(const ValueType& v) { return v.GetArray(); }
  type typename (line 543) | typedef typename ValueType::Object ObjectType;
  function Is (line 544) | static bool Is(const ValueType& v) { return v.IsObject(); }
  function ObjectType (line 545) | static ObjectType Get(ValueType& v) { return v.GetObject(); }
  type typename (line 552) | typedef typename ValueType::ConstObject ObjectType;
  function Is (line 553) | static bool Is(const ValueType& v) { return v.IsObject(); }
  function ObjectType (line 554) | static ObjectType Get(const ValueType& v) { return v.GetObject(); }
  type Encoding (line 581) | typedef Encoding EncodingType;
  type Allocator (line 582) | typedef Allocator AllocatorType;
  type typename (line 583) | typedef typename Encoding::Ch Ch;
  type GenericStringRef (line 584) | typedef GenericStringRef<Ch> StringRefType;
  type typename (line 585) | typedef typename GenericMemberIterator<false,Encoding,Allocator>::Iterat...
  type typename (line 586) | typedef typename GenericMemberIterator<true,Encoding,Allocator>::Iterato...
  type GenericValue (line 587) | typedef GenericValue* ValueIterator;
  type GenericValue (line 588) | typedef const GenericValue* ConstValueIterator;
  type GenericValue (line 589) | typedef GenericValue<Encoding, Allocator> ValueType;
  function explicit (line 702) | explicit GenericValue(bool b) RAPIDJSON_NOEXCEPT
  function explicit (line 711) | explicit GenericValue(int i) RAPIDJSON_NOEXCEPT : data_() {
  function explicit (line 717) | explicit GenericValue(unsigned u) RAPIDJSON_NOEXCEPT : data_() {
  function explicit (line 723) | explicit GenericValue(int64_t i64) RAPIDJSON_NOEXCEPT : data_() {
  function explicit (line 738) | explicit GenericValue(uint64_t u64) RAPIDJSON_NOEXCEPT : data_() {
  function explicit (line 750) | explicit GenericValue(double d) RAPIDJSON_NOEXCEPT : data_() { data_.n.d...
  function explicit (line 753) | explicit GenericValue(float f) RAPIDJSON_NOEXCEPT : data_() { data_.n.d ...
  function explicit (line 759) | explicit GenericValue(StringRefType s) RAPIDJSON_NOEXCEPT : data_() { Se...
  function data_ (line 780) | GenericValue(Array a) RAPIDJSON_NOEXCEPT : data_(a.value_.data_) {
  function data_ (line 791) | GenericValue(Object o) RAPIDJSON_NOEXCEPT : data_(o.value_.data_) {
  type GenericValue (line 934) | typedef GenericValue<Encoding, SourceAllocator> RhsType;
  function rhs (line 981) | bool operator==(const std::basic_string<Ch>& rhs) const { return *this =...
  function GetBool (line 1082) | bool GetBool() const { RAPIDJSON_ASSERT(IsBool()); return data_.f.flags ...
  function SizeType (line 1097) | SizeType MemberCount() const { RAPIDJSON_ASSERT(IsObject()); return data...
  function ObjectEmpty (line 1103) | bool ObjectEmpty() const { RAPIDJSON_ASSERT(IsObject()); return data_.o....
  function GenericValue (line 1154) | const GenericValue& operator[](const std::basic_string<Ch>& name) const ...
  function ConstMemberIterator (line 1159) | ConstMemberIterator MemberBegin() const { RAPIDJSON_ASSERT(IsObject()); ...
  function MemberIterator (line 1165) | MemberIterator MemberBegin()            { RAPIDJSON_ASSERT(IsObject()); ...
  function MemberIterator (line 1168) | MemberIterator MemberEnd()              { RAPIDJSON_ASSERT(IsObject()); ...
  function HasMember (line 1193) | bool HasMember(const Ch* name) const { return FindMember(name) != Member...
  function HasMember (line 1204) | bool HasMember(const std::basic_string<Ch>& name) const { return FindMem...
  function MemberIterator (line 1231) | MemberIterator FindMember(const Ch* name) {
  function ConstMemberIterator (line 1236) | ConstMemberIterator FindMember(const Ch* name) const { return const_cast...
  function MemberIterator (line 1271) | MemberIterator FindMember(const std::basic_string<Ch>& name) { return Fi...
  function ConstMemberIterator (line 1272) | ConstMemberIterator FindMember(const std::basic_string<Ch>& name) const ...
  function RemoveAllMembers (line 1427) | void RemoveAllMembers() {
  function RemoveMember (line 1442) | bool RemoveMember(const Ch* name) {
  function MemberIterator (line 1470) | MemberIterator RemoveMember(MemberIterator m) {
  function MemberIterator (line 1494) | MemberIterator EraseMember(ConstMemberIterator pos) {
  function MemberIterator (line 1507) | MemberIterator EraseMember(ConstMemberIterator first, ConstMemberIterato...
  function EraseMember (line 1528) | bool EraseMember(const Ch* name) {
  function Object (line 1548) | Object GetObject() { RAPIDJSON_ASSERT(IsObject()); return Object(*this); }
  function ConstObject (line 1549) | ConstObject GetObject() const { RAPIDJSON_ASSERT(IsObject()); return Con...
  function SizeType (line 1561) | SizeType Size() const { RAPIDJSON_ASSERT(IsArray()); return data_.a.size; }
  function Empty (line 1567) | bool Empty() const { RAPIDJSON_ASSERT(IsArray()); return data_.a.size ==...
  function GenericValue (line 1591) | const GenericValue& operator[](SizeType index) const { return const_cast...
  function ValueIterator (line 1595) | ValueIterator Begin() { RAPIDJSON_ASSERT(IsArray()); return GetElementsP...
  function ValueIterator (line 1598) | ValueIterator End() { RAPIDJSON_ASSERT(IsArray()); return GetElementsPoi...
  function ValueIterator (line 1700) | ValueIterator Erase(ConstValueIterator pos) {
  function ValueIterator (line 1712) | ValueIterator Erase(ConstValueIterator first, ConstValueIterator last) {
  function Array (line 1727) | Array GetArray() { RAPIDJSON_ASSERT(IsArray()); return Array(*this); }
  function ConstArray (line 1728) | ConstArray GetArray() const { RAPIDJSON_ASSERT(IsArray()); return ConstA...
  function GetDouble (line 1743) | double GetDouble() const {
  function Ch (line 1771) | const Ch* GetString() const { RAPIDJSON_ASSERT(IsString()); return (data...
  function SizeType (line 1776) | SizeType GetStringLength() const { RAPIDJSON_ASSERT(IsString()); return ...
  type Flag (line 1943) | struct Flag {
  type String (line 1954) | struct String {
  function SetLength (line 1968) | struct ShortString {
  type I (line 1980) | struct I {
  type U (line 1984) | struct U {
  type I (line 1989) | struct I {
  type U (line 1993) | struct U {
  type ObjectData (line 2003) | struct ObjectData {
  type ArrayData (line 2009) | struct ArrayData {
  function RAPIDJSON_FORCEINLINE (line 2024) | RAPIDJSON_FORCEINLINE const Ch* GetStringPointer() const { return RAPIDJ...
  function RAPIDJSON_FORCEINLINE (line 2025) | RAPIDJSON_FORCEINLINE const Ch* SetStringPointer(const Ch* str) { return...
  function RAPIDJSON_FORCEINLINE (line 2026) | RAPIDJSON_FORCEINLINE GenericValue* GetElementsPointer() const { return ...
  function RAPIDJSON_FORCEINLINE (line 2027) | RAPIDJSON_FORCEINLINE GenericValue* SetElementsPointer(GenericValue* ele...
  function RAPIDJSON_FORCEINLINE (line 2028) | RAPIDJSON_FORCEINLINE Member* GetMembersPointer() const { return RAPIDJS...
  function RAPIDJSON_FORCEINLINE (line 2029) | RAPIDJSON_FORCEINLINE Member* SetMembersPointer(Member* members) { retur...
  function SetArrayRaw (line 2032) | void SetArrayRaw(GenericValue* values, SizeType count, Allocator& alloca...
  function SetObjectRaw (line 2050) | void SetObjectRaw(Member* members, SizeType count, Allocator& allocator) {
  function SetStringRaw (line 2068) | void SetStringRaw(StringRefType s) RAPIDJSON_NOEXCEPT {
  function SetStringRaw (line 2075) | void SetStringRaw(StringRefType s, Allocator& allocator) {
  function RawAssign (line 2092) | void RawAssign(GenericValue& rhs) RAPIDJSON_NOEXCEPT {
  type GenericValue (line 2118) | typedef GenericValue<UTF8<> > Value;
  type GenericValue (line 2135) | typedef GenericValue<Encoding, Allocator> ValueType;
  type Allocator (line 2136) | typedef Allocator AllocatorType;
  type ClearStackOnExit (line 2430) | struct ClearStackOnExit {
  function Bool (line 2446) | bool Bool(bool b) { new (stack_.template Push<ValueType>()) ValueType(b)...
  function Int (line 2447) | bool Int(int i) { new (stack_.template Push<ValueType>()) ValueType(i); ...
  function Uint (line 2448) | bool Uint(unsigned i) { new (stack_.template Push<ValueType>()) ValueTyp...
  function Int64 (line 2449) | bool Int64(int64_t i) { new (stack_.template Push<ValueType>()) ValueTyp...
  function Uint64 (line 2450) | bool Uint64(uint64_t i) { new (stack_.template Push<ValueType>()) ValueT...
  function Double (line 2451) | bool Double(double d) { new (stack_.template Push<ValueType>()) ValueTyp...
  function RawNumber (line 2453) | bool RawNumber(const Ch* str, SizeType length, bool copy) {
  function String (line 2461) | bool String(const Ch* str, SizeType length, bool copy) {
  function StartObject (line 2469) | bool StartObject() { new (stack_.template Push<ValueType>()) ValueType(k...
  function Key (line 2471) | bool Key(const Ch* str, SizeType length, bool copy) { return String(str,...
  function EndObject (line 2473) | bool EndObject(SizeType memberCount) {
  function StartArray (line 2479) | bool StartArray() { new (stack_.template Push<ValueType>()) ValueType(kA...
  function EndArray (line 2481) | bool EndArray(SizeType elementCount) {
  function ClearStack (line 2493) | void ClearStack() {
  function Destroy (line 2502) | void Destroy() {
  type GenericDocument (line 2514) | typedef GenericDocument<UTF8<> > Document;
  type ValueT (line 2526) | typedef ValueT PlainType;
  type typename (line 2527) | typedef typename internal::MaybeAddConst<Const,PlainType>::Type ValueType;
  type ValueType (line 2528) | typedef ValueType* ValueIterator;
  type ValueT (line 2529) | typedef const ValueT* ConstValueIterator;
  type typename (line 2530) | typedef typename ValueType::AllocatorType AllocatorType;
  type typename (line 2531) | typedef typename ValueType::StringRefType StringRefType;
  function value_ (line 2536) | GenericArray(const GenericArray& rhs) : value_(rhs.value_) {}
  function GenericArray (line 2547) | GenericArray Reserve(SizeType newCapacity, AllocatorType &allocator) con...
  function GenericArray (line 2548) | GenericArray PushBack(ValueType& value, AllocatorType& allocator) const ...
  function GenericArray (line 2550) | GenericArray PushBack(ValueType&& value, AllocatorType& allocator) const...
  function GenericArray (line 2552) | GenericArray PushBack(StringRefType value, AllocatorType& allocator) con...
  function ValueIterator (line 2555) | ValueIterator Erase(ConstValueIterator pos) const { return value_.Erase(...
  function ValueIterator (line 2556) | ValueIterator Erase(ConstValueIterator first, ConstValueIterator last) c...
  function value_ (line 2565) | value_(
Condensed preview — 617 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (5,972K chars).
[
  {
    "path": ".gitattributes",
    "chars": 266,
    "preview": "# Auto detect text files and perform LF normalization\n* text=auto\n\n# Explicitly declare code/VS files as CRLF\n*.cpp eol="
  },
  {
    "path": ".gitignore",
    "chars": 118,
    "preview": "\n*.opendb\n.vs\nMiniEngine/ModelViewer/imgui.ini\n/teaser_panning1x.anim\n/teaser_panning2x.anim\n/testexe/ModelViewer.exe\n"
  },
  {
    "path": "LICENSE",
    "chars": 1077,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2015 Microsoft\n\nPermission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "Libraries/D3DX12/d3dx12.h",
    "chars": 110497,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12/readme.md",
    "chars": 557,
    "preview": "# The D3D12 Helper Library\n\nThis library provides helper functions and structs to make certain common operations less ve"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityCommandAllocator.cpp",
    "chars": 2045,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityCommandAllocator.h",
    "chars": 1063,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityCommandList.cpp",
    "chars": 3095,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityCommandList.h",
    "chars": 1410,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityCommandQueue.cpp",
    "chars": 9861,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityCommandQueue.h",
    "chars": 3853,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityCommandSignature.cpp",
    "chars": 1222,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityCommandSignature.h",
    "chars": 945,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityDescriptorHeap.cpp",
    "chars": 4788,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityDescriptorHeap.h",
    "chars": 1702,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityDevice.cpp",
    "chars": 56303,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityDevice.h",
    "chars": 15583,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityDeviceChild.cpp",
    "chars": 1310,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityDeviceChild.h",
    "chars": 1014,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityFence.cpp",
    "chars": 4170,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityFence.h",
    "chars": 1825,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityGraphicsCommandList.cpp",
    "chars": 34763,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityGraphicsCommandList.h",
    "chars": 10526,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityHeap.cpp",
    "chars": 1236,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityHeap.h",
    "chars": 935,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityObject.cpp",
    "chars": 4269,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityObject.h",
    "chars": 2597,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityPageable.cpp",
    "chars": 1008,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityPageable.h",
    "chars": 828,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityPipelineState.cpp",
    "chars": 1263,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityPipelineState.h",
    "chars": 976,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityQueryHeap.cpp",
    "chars": 1011,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityQueryHeap.h",
    "chars": 828,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityResource.cpp",
    "chars": 10049,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityResource.h",
    "chars": 2627,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityRootSignature.cpp",
    "chars": 1192,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/CD3DX12AffinityRootSignature.h",
    "chars": 920,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/CDXGIAffinitySwapChain.cpp",
    "chars": 33743,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/CDXGIAffinitySwapChain.h",
    "chars": 8234,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/D3DX12AffinityCreateMultiDevice.cpp",
    "chars": 1360,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/D3DX12AffinityLayer.vcxproj",
    "chars": 7207,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.micro"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/D3DX12AffinityLayer.vcxproj.filters",
    "chars": 5477,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbui"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/DXGIXAffinityCreateLDASwapChain.cpp",
    "chars": 3347,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/DXGIXAffinityCreateSingleWindowSwapChain.cpp",
    "chars": 6332,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/Utils.cpp",
    "chars": 810,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/Utils.h",
    "chars": 6011,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/d3dx12.h",
    "chars": 110497,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/d3dx12affinity.cpp",
    "chars": 477,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/d3dx12affinity.h",
    "chars": 3021,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/d3dx12affinity_d3dx12.h",
    "chars": 16959,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/Desktop/d3dx12affinity_structs.h",
    "chars": 6499,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityCommandAllocator.cpp",
    "chars": 2045,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityCommandAllocator.h",
    "chars": 1063,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityCommandList.cpp",
    "chars": 3095,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityCommandList.h",
    "chars": 1410,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityCommandQueue.cpp",
    "chars": 9861,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityCommandQueue.h",
    "chars": 3853,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityCommandSignature.cpp",
    "chars": 1222,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityCommandSignature.h",
    "chars": 945,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityDescriptorHeap.cpp",
    "chars": 4788,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityDescriptorHeap.h",
    "chars": 1702,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityDevice.cpp",
    "chars": 56303,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityDevice.h",
    "chars": 15583,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityDeviceChild.cpp",
    "chars": 1310,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityDeviceChild.h",
    "chars": 1014,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityFence.cpp",
    "chars": 4170,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityFence.h",
    "chars": 1825,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityGraphicsCommandList.cpp",
    "chars": 34763,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityGraphicsCommandList.h",
    "chars": 10526,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityHeap.cpp",
    "chars": 1236,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityHeap.h",
    "chars": 935,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityObject.cpp",
    "chars": 4269,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityObject.h",
    "chars": 2597,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityPageable.cpp",
    "chars": 1008,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityPageable.h",
    "chars": 828,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityPipelineState.cpp",
    "chars": 1263,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityPipelineState.h",
    "chars": 976,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityQueryHeap.cpp",
    "chars": 1011,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityQueryHeap.h",
    "chars": 828,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityResource.cpp",
    "chars": 10049,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityResource.h",
    "chars": 2627,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityRootSignature.cpp",
    "chars": 1192,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/CD3DX12AffinityRootSignature.h",
    "chars": 920,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/CDXGIAffinitySwapChain.cpp",
    "chars": 33743,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/CDXGIAffinitySwapChain.h",
    "chars": 8234,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/D3DX12AffinityCreateMultiDevice.cpp",
    "chars": 1360,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/D3DX12AffinityLayer.vcxproj",
    "chars": 14045,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.micro"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/D3DX12AffinityLayer.vcxproj.filters",
    "chars": 5478,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"14.0\" xmlns=\"http://schemas.microsoft.com/developer/msbu"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/DXGIXAffinityCreateLDASwapChain.cpp",
    "chars": 3347,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/DXGIXAffinityCreateSingleWindowSwapChain.cpp",
    "chars": 6332,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/Utils.cpp",
    "chars": 810,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/Utils.h",
    "chars": 6011,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/d3dx12.h",
    "chars": 110497,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/d3dx12affinity.cpp",
    "chars": 477,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/d3dx12affinity.h",
    "chars": 3021,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/d3dx12affinity_d3dx12.h",
    "chars": 16959,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/UWP/d3dx12affinity_structs.h",
    "chars": 6499,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12AffinityLayer/readme.md",
    "chars": 6998,
    "preview": "# The D3D12 MultiGPU Starter Library\n\nThis library is intended to help apps kick start their MultiGPU implementation.  T"
  },
  {
    "path": "Libraries/D3DX12Residency/d3dx12Residency.h",
    "chars": 44176,
    "preview": "//*********************************************************\r\n//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Th"
  },
  {
    "path": "Libraries/D3DX12Residency/readme.md",
    "chars": 7756,
    "preview": "# The D3D12 Residency Starter Library\n\n## What is this library?\nThis library is intended to be a low-integration-cost tu"
  },
  {
    "path": "MiniEngine/.gitignore",
    "chars": 222,
    "preview": "*.user\n*.suo\n*.VC.db*\n*.shader_inc\n*.vspscc\n*.opensdf\n*.sdf\n*.ipch\n*.cache\n*.tlog\n*.lastbuildstate\n*.ilk\n*.log\n* - Copy*"
  },
  {
    "path": "MiniEngine/Core/ART/Animation/AnimatedValue.cpp",
    "chars": 3208,
    "preview": "#pragma once\r\n\r\n#include \"pch.h\"\r\n\r\n#include \"AnimatedValue.inl\"\r\n\r\n#include <algorithm>\r\n\r\nnamespace ART {\r\n\r\n\t////////"
  },
  {
    "path": "MiniEngine/Core/ART/Animation/AnimatedValue.h",
    "chars": 6606,
    "preview": "#pragma once\r\n\r\n#include \"Math/Vector.h\"\r\n\r\n#include \"../CommonDefs.h\"\r\n\r\n#include \"document.h\"\r\n\r\n#include <vector>\r\n\r\n"
  },
  {
    "path": "MiniEngine/Core/ART/Animation/AnimatedValue.inl",
    "chars": 10143,
    "preview": "#pragma once\n\n#include \"AnimatedValue.h\"\n#include \"SerializationUtil.h\"\n\n#include \"VectorMath.h\"\n\nnamespace ART {\n\n\t////"
  },
  {
    "path": "MiniEngine/Core/ART/Animation/AnimationController.cpp",
    "chars": 9422,
    "preview": "#include \"pch.h\"\r\n\r\n#include \"AnimationController.h\"\r\n\r\n#include \"AnimatedValue.inl\"\r\n\r\n#include \"..\\..\\GameInput.h\"\r\n\r\n"
  },
  {
    "path": "MiniEngine/Core/ART/Animation/AnimationController.h",
    "chars": 3212,
    "preview": "#pragma once\r\n\r\n#include \"SceneAnimation.h\"\r\n\r\n#include \"Camera.h\"\r\n#include \"EngineTuning.h\"\r\n\r\n#include <map>\r\n\r\nnames"
  },
  {
    "path": "MiniEngine/Core/ART/Animation/CameraAnimation.cpp",
    "chars": 563,
    "preview": "\r\n#include \"pch.h\"\r\n\r\n#include \"CameraAnimation.h\"\r\n\r\nusing namespace Math;\r\n\r\n/////////////////////////////////////////"
  },
  {
    "path": "MiniEngine/Core/ART/Animation/CameraAnimation.h",
    "chars": 2511,
    "preview": "#pragma once\r\n\r\n#include \"AnimatedValue.h\"\r\n#include \"SerializationUtil.h\"\r\n\r\n#include \"document.h\"\r\n\r\n#include \"VectorM"
  },
  {
    "path": "MiniEngine/Core/ART/Animation/SceneAnimation.cpp",
    "chars": 8926,
    "preview": "#include \"pch.h\"\r\n\r\n\r\n#include \"SceneAnimation.h\"\r\n#include \"AnimatedValue.inl\"\r\n\r\n#include \"Utility.h\"\r\n\r\n#include \"doc"
  },
  {
    "path": "MiniEngine/Core/ART/Animation/SceneAnimation.h",
    "chars": 2369,
    "preview": "#pragma once\r\n\r\n#include \"CameraAnimation.h\"\r\n#include \"../CommonDefs.h\"\r\n\r\n#include <string>\r\n#include <vector>\r\n#inclu"
  },
  {
    "path": "MiniEngine/Core/ART/Animation/SerializationUtil.h",
    "chars": 3343,
    "preview": "#pragma once\r\n\r\n#include \"../CommonDefs.h\"\r\n#include \"Math/Vector.h\"\r\n\r\n#include <string>\r\n\r\nstruct SerializationExcepti"
  },
  {
    "path": "MiniEngine/Core/ART/CommonDefs.h",
    "chars": 1030,
    "preview": "#pragma once\r\n\r\n#include <memory>\r\n\r\n#define ART_ENABLE_GUI\r\n\r\n// Assertion that can be disabled using a compiled macro\r"
  },
  {
    "path": "MiniEngine/Core/ART/GUI/AnimationWidget.cpp",
    "chars": 7702,
    "preview": "\r\n#include \"pch.h\"\r\n\r\n#include \"AnimationWidget.h\"\r\n\r\n#include \"..\\CommonDefs.h\"\r\n\r\n#include \"imgui\\imgui.h\"\r\n#include \""
  },
  {
    "path": "MiniEngine/Core/ART/GUI/AnimationWidget.h",
    "chars": 1057,
    "preview": "#pragma once\r\n\r\n#include \"..\\CommonDefs.h\"\r\n#include \"..\\Animation\\AnimationController.h\"\r\n\r\n#include \"IGUIWidget.h\"\r\n\r\n"
  },
  {
    "path": "MiniEngine/Core/ART/GUI/GUICore.cpp",
    "chars": 11861,
    "preview": "\r\n#include \"pch.h\"\r\n\r\n#include \"GUICore.h\"\r\n\r\n#ifdef ART_ENABLE_GUI\r\n\r\n#include \"imgui\\imgui.h\"\r\n#include \"imgui\\imgui_i"
  },
  {
    "path": "MiniEngine/Core/ART/GUI/GUICore.h",
    "chars": 1503,
    "preview": "#pragma once\r\n\r\n#include \"..\\CommonDefs.h\"\r\n\r\n#ifdef ART_ENABLE_GUI\r\n\r\n#include \"AnimationWidget.h\"\r\n\r\n// to avoid re-in"
  },
  {
    "path": "MiniEngine/Core/ART/GUI/GUIUtil.h",
    "chars": 379,
    "preview": "#pragma once\r\n\r\n#pragma warning(disable: 4996)\r\n\r\n#include <sstream>\r\n\r\nnamespace ART {\r\n\r\n\tstruct GUIUtil {\r\n\t\t// helpe"
  },
  {
    "path": "MiniEngine/Core/ART/GUI/IGUIWidget.h",
    "chars": 494,
    "preview": "#pragma once\r\n\r\n#pragma once\r\n\r\n#include \"..\\CommonDefs.h\"\r\n\r\n#ifdef ART_ENABLE_GUI\r\n\r\nnamespace ARTGUI {\r\n\t\r\n\tstruct IG"
  },
  {
    "path": "MiniEngine/Core/ART/GUI/SequencerWidget.cpp",
    "chars": 4780,
    "preview": "\r\n#include \"pch.h\"\r\n\r\n#include \"SequencerWidget.h\"\r\n\r\n#include \"..\\CommonDefs.h\"\r\n\r\n#include \"imgui\\imgui.h\"\r\n#include \""
  },
  {
    "path": "MiniEngine/Core/ART/GUI/SequencerWidget.h",
    "chars": 1023,
    "preview": "#pragma once\r\n\r\n#include \"..\\CommonDefs.h\"\r\n#include \"..\\Sequencer\\FrameSequencer.h\"\r\n#include \"..\\Animation\\AnimationCo"
  },
  {
    "path": "MiniEngine/Core/ART/GUI/imgui/LICENSE.txt",
    "chars": 1106,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2014-2017 Omar Cornut and ImGui contributors\n\nPermission is hereby granted, free of"
  },
  {
    "path": "MiniEngine/Core/ART/GUI/imgui/README.md",
    "chars": 21362,
    "preview": "dear imgui,\n=====\n[![Build Status](https://travis-ci.org/ocornut/imgui.svg?branch=master)](https://travis-ci.org/ocornut"
  },
  {
    "path": "MiniEngine/Core/ART/GUI/imgui/imconfig.h",
    "chars": 2822,
    "preview": "//-----------------------------------------------------------------------------\r\n// USER IMPLEMENTATION\r\n// This file co"
  },
  {
    "path": "MiniEngine/Core/ART/GUI/imgui/imgui.cpp",
    "chars": 485165,
    "preview": "// dear imgui, v1.52 WIP\r\n// (main code and documentation)\r\n\r\n// See ImGui::ShowTestWindow() in imgui_demo.cpp for demo "
  },
  {
    "path": "MiniEngine/Core/ART/GUI/imgui/imgui.h",
    "chars": 137457,
    "preview": "// dear imgui, v1.52 WIP\r\n// (headers)\r\n\r\n// See imgui.cpp file for documentation.\r\n// See ImGui::ShowTestWindow() in im"
  },
  {
    "path": "MiniEngine/Core/ART/GUI/imgui/imgui_demo.cpp",
    "chars": 141443,
    "preview": "// dear imgui, v1.52 WIP\r\n// (demo code)\r\n\r\n// Message to the person tempted to delete this file when integrating ImGui "
  },
  {
    "path": "MiniEngine/Core/ART/GUI/imgui/imgui_draw.cpp",
    "chars": 121783,
    "preview": "// dear imgui, v1.52 WIP\r\n// (drawing and font code)\r\n\r\n// Contains implementation for\r\n// - ImDrawList\r\n// - ImDrawData"
  },
  {
    "path": "MiniEngine/Core/ART/GUI/imgui/imgui_impl_dx11.cpp",
    "chars": 26029,
    "preview": "// ImGui Win32 + DirectX11 binding\r\n// In this binding, ImTextureID is used to store a 'ID3D11ShaderResourceView*' textu"
  },
  {
    "path": "MiniEngine/Core/ART/GUI/imgui/imgui_impl_dx11.h",
    "chars": 1457,
    "preview": "// ImGui Win32 + DirectX11 binding\r\n// In this binding, ImTextureID is used to store a 'ID3D11ShaderResourceView*' textu"
  },
  {
    "path": "MiniEngine/Core/ART/GUI/imgui/imgui_internal.h",
    "chars": 53863,
    "preview": "// dear imgui, v1.52 WIP\r\n// (internals)\r\n\r\n// You may use this file to debug, understand or extend ImGui features but w"
  },
  {
    "path": "MiniEngine/Core/ART/GUI/imgui/stb_rect_pack.h",
    "chars": 17967,
    "preview": "// stb_rect_pack.h - v0.10 - public domain - rectangle packing\r\n// Sean Barrett 2014\r\n//\r\n// Useful for e.g. packing rec"
  },
  {
    "path": "MiniEngine/Core/ART/GUI/imgui/stb_textedit.h",
    "chars": 50483,
    "preview": "// [ImGui] this is a slightly modified version of stb_truetype.h 1.9. Those changes would need to be pushed into nothing"
  },
  {
    "path": "MiniEngine/Core/ART/GUI/imgui/stb_truetype.h",
    "chars": 156448,
    "preview": "// stb_truetype.h - v1.14 - public domain\r\n// authored from 2009-2016 by Sean Barrett / RAD Game Tools\r\n//\r\n//   This li"
  },
  {
    "path": "MiniEngine/Core/ART/PerfStat/PerfStat.cpp",
    "chars": 2438,
    "preview": "#include \"pch.h\"\r\n\r\n#include \"PerfStat.h\"\r\n\r\n#include <fstream>\r\n#include <iostream>\r\n\r\nusing namespace ART;\r\nusing name"
  },
  {
    "path": "MiniEngine/Core/ART/PerfStat/PerfStat.h",
    "chars": 700,
    "preview": "#pragma once\r\n\r\n#include \"../CommonDefs.h\"\r\n\r\n#include <vector>\r\n#include <map>\r\n#include <string>\r\n\r\nnamespace ART {\r\n\r"
  },
  {
    "path": "MiniEngine/Core/ART/Sequencer/FrameSequencer.cpp",
    "chars": 3982,
    "preview": "#include \"pch.h\"\r\n\r\n#include \"FrameSequencer.h\"\r\n\r\n#include \"PixelBuffer.h\"\r\n#include \"GraphicsCore.h\"\r\n#include \"Engine"
  },
  {
    "path": "MiniEngine/Core/ART/Sequencer/FrameSequencer.h",
    "chars": 2589,
    "preview": "#pragma once\r\n\r\n#include \"../CommonDefs.h\"\r\n\r\n#include \"../PerfStat/PerfStat.h\"\r\n\r\n#include <string>\r\n#include <filesyst"
  },
  {
    "path": "MiniEngine/Core/ART/Wddm22Defs.h",
    "chars": 343,
    "preview": "#pragma once\r\n//#define WDDM22\r\n\r\n// -- define different device and commandlist for systems with or without WDDM2.2 supp"
  },
  {
    "path": "MiniEngine/Core/BitonicSort.cpp",
    "chars": 9226,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/BitonicSort.h",
    "chars": 5017,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/BuddyAllocator.cpp",
    "chars": 7911,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/BuddyAllocator.h",
    "chars": 5061,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/BufferManager.cpp",
    "chars": 27474,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/BufferManager.h",
    "chars": 5105,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/Camera.cpp",
    "chars": 2596,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/Camera.h",
    "chars": 6432,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/CameraController.cpp",
    "chars": 5446,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/CameraController.h",
    "chars": 1846,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/Color.cpp",
    "chars": 5525,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/Color.h",
    "chars": 5624,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/ColorBuffer.cpp",
    "chars": 10481,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/ColorBuffer.h",
    "chars": 5321,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/CommandAllocatorPool.cpp",
    "chars": 2287,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/CommandAllocatorPool.h",
    "chars": 1174,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/CommandContext.cpp",
    "chars": 21753,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/CommandContext.h",
    "chars": 34543,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/CommandListManager.cpp",
    "chars": 6272,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/CommandListManager.h",
    "chars": 3606,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/CommandSignature.cpp",
    "chars": 2941,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/CommandSignature.h",
    "chars": 3802,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/Core_VS17.vcxproj",
    "chars": 25591,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.micro"
  },
  {
    "path": "MiniEngine/Core/Core_VS17.vcxproj.filters",
    "chars": 38472,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbu"
  },
  {
    "path": "MiniEngine/Core/DDSTextureLoader.cpp",
    "chars": 44419,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/DDSTextureLoader.h",
    "chars": 2656,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/DepthBuffer.cpp",
    "chars": 6081,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/DepthBuffer.h",
    "chars": 3593,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/DepthOfField.cpp",
    "chars": 17728,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/DepthOfField.h",
    "chars": 642,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/DescriptorHeap.cpp",
    "chars": 3514,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/DescriptorHeap.h",
    "chars": 4113,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/DynamicDescriptorHeap.cpp",
    "chars": 13362,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/DynamicDescriptorHeap.h",
    "chars": 6546,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/DynamicUploadBuffer.cpp",
    "chars": 3141,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/DynamicUploadBuffer.h",
    "chars": 1459,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/EngineProfiling.cpp",
    "chars": 23620,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/EngineProfiling.h",
    "chars": 2427,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/EngineTuning.cpp",
    "chars": 20643,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/EngineTuning.h",
    "chars": 5961,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/EsramAllocator.h",
    "chars": 825,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/FXAA.cpp",
    "chars": 9222,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/FXAA.h",
    "chars": 793,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/FileUtility.cpp",
    "chars": 3929,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/FileUtility.h",
    "chars": 1119,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/Fonts/consola24.h",
    "chars": 588348,
    "preview": "unsigned char g_pconsola24[113408] =\r\n{\r\n\t0x53,0x44,0x46,0x46,0x4f,0x4e,0x54,0x00,0x01,0x00,0x03,0x00,0x00,0x02,0xd9,0x0"
  },
  {
    "path": "MiniEngine/Core/GameCore.cpp",
    "chars": 14683,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/GameCore.h",
    "chars": 1938,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/GameInput.cpp",
    "chars": 25426,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/GameInput.h",
    "chars": 4837,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/GpuBuffer.cpp",
    "chars": 7971,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/GpuBuffer.h",
    "chars": 4887,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/GpuCounterManager.cpp",
    "chars": 7740,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/GpuCounterManager.h",
    "chars": 1564,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/GpuResource.h",
    "chars": 2259,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/GraphRenderer.cpp",
    "chars": 21586,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/GraphRenderer.h",
    "chars": 1023,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/GraphicsCommon.cpp",
    "chars": 8963,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/GraphicsCommon.h",
    "chars": 2685,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/GraphicsCore.cpp",
    "chars": 35071,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/GraphicsCore.h",
    "chars": 2822,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  },
  {
    "path": "MiniEngine/Core/Hash.h",
    "chars": 2231,
    "preview": "//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THIS COD"
  }
]

// ... and 417 more files (download for full content)

About this extraction

This page contains the full source code of the GameTechDev/DynamicCheckerboardRendering GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 617 files (21.3 MB), approximately 1.4M tokens, and a symbol index with 2689 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!