From f9356f9ba70687e2bc80243c0e9a0a8341181d96 Mon Sep 17 00:00:00 2001 From: Patedam Date: Fri, 16 Oct 2026 23:40:45 -0400 Subject: [PATCH] conversion to c by gemini 4 argon --- Game/Controller/ControllerUtils.h | 6 +- Game/Controller/DebugCameraController.c | 163 + Game/Controller/DebugCameraController.cpp | 170 - Game/Controller/DebugCameraController.h | 10 +- Game/Data/World.c | 140 + Game/Data/World.cpp | 322 - Game/Data/World.h | 29 +- Game/Debug/DebugTopBar.c | 63 + Game/Debug/DebugTopBar.cpp | 49 - Game/Debug/DebugTopBar.h | 4 +- Game/Entity/Entity.c | 115 + Game/Entity/Entity.cpp | 92 - Game/Entity/Entity.h | 99 +- Game/Entity/EntityManager.c | 190 + Game/Entity/EntityManager.cpp | 170 - Game/Entity/EntityManager.h | 36 +- .../{entity_common.cpp => entity_common.c} | 9 +- Game/Entity/entity_common.h | 50 +- Game/Entity/entity_types.c | 22 + Game/Entity/entity_types.cpp | 9 - Game/Entity/entity_types.h | 4 +- Game/UnitTest/WorldUnitTest.c | 171 + Game/UnitTest/WorldUnitTest.cpp | 173 - Game/UnitTest/WorldUnitTest.h | 5 +- Game/{game.cpp => game.c} | 90 +- Game/game.h | 24 +- Juliet/Juliet.vcxproj.filters | 658 - .../Core/Application/ApplicationManager.h | 9 - .../include/Core/Application/IApplication.h | 29 - Juliet/include/Core/Common/CRC32.h | 84 +- Juliet/include/Core/Common/CoreTypes.h | 95 +- Juliet/include/Core/Common/CoreUtils.h | 171 +- Juliet/include/Core/Common/EnumUtils.h | 86 - Juliet/include/Core/Common/NonNullPtr.h | 110 - Juliet/include/Core/Common/String.h | 162 +- Juliet/include/Core/Common/serialization.h | 163 +- Juliet/include/Core/Container/Vector.h | 429 +- Juliet/include/Core/HAL/Display/Display.h | 20 +- .../include/Core/HAL/DynLib/DynamicLibrary.h | 11 +- Juliet/include/Core/HAL/Event/SystemEvent.h | 89 +- .../include/Core/HAL/Filesystem/Filesystem.h | 34 +- Juliet/include/Core/HAL/IO/IOStream.h | 76 +- Juliet/include/Core/HAL/Keyboard/KeyCode.h | 357 +- Juliet/include/Core/HAL/Keyboard/Keyboard.h | 19 +- Juliet/include/Core/HAL/Keyboard/ScanCode.h | 319 +- Juliet/include/Core/HAL/Mouse/Mouse.h | 32 +- Juliet/include/Core/HAL/OS/OS.h | 55 +- Juliet/include/Core/HotReload/HotReload.h | 22 +- Juliet/include/Core/ImGui/ImGuiService.h | 31 +- Juliet/include/Core/ImGui/ImGuiTests.h | 11 +- Juliet/include/Core/JulietInit.h | 27 +- Juliet/include/Core/Logging/LogManager.h | 20 +- Juliet/include/Core/Logging/LogTypes.h | 30 +- Juliet/include/Core/Main.h | 9 +- Juliet/include/Core/Math/MathUtils.h | 51 +- Juliet/include/Core/Math/Matrix.h | 103 +- Juliet/include/Core/Math/Shape.h | 9 +- Juliet/include/Core/Math/Vector.h | 58 +- Juliet/include/Core/Memory/Allocator.h | 32 +- Juliet/include/Core/Memory/MemoryArena.h | 124 +- Juliet/include/Core/Memory/MemoryArenaDebug.h | 33 +- Juliet/include/Core/Memory/Utils.h | 102 +- Juliet/include/Core/Networking/IPAddress.h | 6 - .../include/Core/Networking/NetworkPacket.h | 32 - Juliet/include/Core/Networking/Socket.h | 53 - Juliet/include/Core/Networking/SocketHandle.h | 11 - Juliet/include/Core/Networking/TcpListener.h | 18 - Juliet/include/Core/Networking/TcpSocket.h | 21 - Juliet/include/Core/PCH.h | 43 +- Juliet/include/Core/Thread/Mutex.h | 4 - Juliet/include/Core/Thread/Thread.h | 8 +- Juliet/include/Core/Thread/ThreadContext.h | 11 +- Juliet/include/Engine/Asset.h | 2 +- Juliet/include/Engine/Class.h | 79 +- Juliet/include/Engine/Debug/MemoryDebugger.h | 7 +- Juliet/include/Engine/Engine.h | 45 +- Juliet/include/Engine/user.h | 10 +- Juliet/include/Graphics/Camera.h | 23 +- Juliet/include/Graphics/Colors.h | 26 +- Juliet/include/Graphics/DebugDisplay.h | 10 +- Juliet/include/Graphics/Graphics.h | 153 +- Juliet/include/Graphics/GraphicsBuffer.h | 30 +- Juliet/include/Graphics/GraphicsConfig.h | 14 +- Juliet/include/Graphics/GraphicsPipeline.h | 208 +- Juliet/include/Graphics/ImGuiRenderer.h | 6 +- Juliet/include/Graphics/Lighting.h | 5 +- Juliet/include/Graphics/Mesh.h | 20 +- Juliet/include/Graphics/MeshRenderer.h | 73 +- Juliet/include/Graphics/PushConstants.h | 11 +- Juliet/include/Graphics/RenderPass.h | 117 +- Juliet/include/Graphics/Shader.h | 15 +- Juliet/include/Graphics/SkyboxRenderer.h | 23 +- Juliet/include/Graphics/Texture.h | 268 +- Juliet/include/Graphics/VertexData.h | 7 +- Juliet/include/Juliet.h | 2 +- .../Core/Application/ApplicationManager.cpp | 17 - Juliet/src/Core/Common/CoreUtils.c | 39 + Juliet/src/Core/Common/CoreUtils.cpp | 35 - Juliet/src/Core/Common/String.c | 699 + Juliet/src/Core/Common/String.cpp | 641 - Juliet/src/Core/Common/serialization.c | 494 + Juliet/src/Core/Common/serialization.cpp | 382 - Juliet/src/Core/Container/Vector.c | 1 + Juliet/src/Core/Container/Vector.cpp | 2 - Juliet/src/Core/HAL/Display/Display.c | 154 + Juliet/src/Core/HAL/Display/Display.cpp | 158 - Juliet/src/Core/HAL/Display/DisplayDevice.h | 31 +- Juliet/src/Core/HAL/Display/Display_cpp.h | 6 +- .../HAL/Display/Win32/Win32DisplayDevice.c | 47 + .../HAL/Display/Win32/Win32DisplayDevice.cpp | 49 - .../HAL/Display/Win32/Win32DisplayEvent.c | 292 + .../HAL/Display/Win32/Win32DisplayEvent.cpp | 279 - .../HAL/Display/Win32/Win32DisplayEvent.h | 12 +- .../src/Core/HAL/Display/Win32/Win32Window.c | 112 + .../Core/HAL/Display/Win32/Win32Window.cpp | 104 - .../src/Core/HAL/Display/Win32/Win32Window.h | 33 +- Juliet/src/Core/HAL/Display/Window.h | 5 +- .../Core/HAL/DynLib/Win32/DynamicLibrary.c | 46 + .../Core/HAL/DynLib/Win32/DynamicLibrary.cpp | 41 - Juliet/src/Core/HAL/Event/Keyboard.c | 210 + Juliet/src/Core/HAL/Event/Keyboard.cpp | 162 - Juliet/src/Core/HAL/Event/KeyboardMapping.c | 207 + Juliet/src/Core/HAL/Event/KeyboardMapping.cpp | 201 - Juliet/src/Core/HAL/Event/KeyboardMapping.h | 2 +- Juliet/src/Core/HAL/Event/Keyboard_Private.h | 10 +- Juliet/src/Core/HAL/Event/Mouse.c | 149 + Juliet/src/Core/HAL/Event/Mouse.cpp | 155 - Juliet/src/Core/HAL/Event/Mouse_Private.h | 17 +- Juliet/src/Core/HAL/Event/SystemEvent.c | 106 + Juliet/src/Core/HAL/Event/SystemEvent.cpp | 97 - Juliet/src/Core/HAL/Event/Win32ScanCode.h | 530 +- .../Event/{WindowEvent.cpp => WindowEvent.c} | 11 +- Juliet/src/Core/HAL/Event/WindowEvent.h | 9 +- Juliet/src/Core/HAL/Filesystem/Filesystem.c | 186 + Juliet/src/Core/HAL/Filesystem/Filesystem.cpp | 183 - .../Core/HAL/Filesystem/Filesystem_Platform.h | 17 +- .../Core/HAL/Filesystem/Filesystem_Private.h | 8 +- .../HAL/Filesystem/Win32/Win32Filesystem.c | 210 + .../HAL/Filesystem/Win32/Win32Filesystem.cpp | 209 - Juliet/src/Core/HAL/IO/IOStream.c | 303 + Juliet/src/Core/HAL/IO/IOStream.cpp | 269 - Juliet/src/Core/HAL/IO/IOStream_cpp.h | 7 +- Juliet/src/Core/HAL/IO/Win32/Win32IOStream.c | 367 + .../src/Core/HAL/IO/Win32/Win32IOStream.cpp | 276 - Juliet/src/Core/HAL/OS/OS.c | 78 + Juliet/src/Core/HAL/OS/OS.cpp | 92 - Juliet/src/Core/HAL/OS/OS_Private.h | 38 +- Juliet/src/Core/HAL/OS/Win32/Win32OS.c | 134 + Juliet/src/Core/HAL/OS/Win32/Win32OS.cpp | 175 - Juliet/src/Core/HAL/Win32.h | 21 +- Juliet/src/Core/HotReload/HotReload.c | 69 + Juliet/src/Core/HotReload/HotReload.cpp | 65 - .../src/Core/HotReload/Win32/Win32HotReload.c | 139 + .../Core/HotReload/Win32/Win32HotReload.cpp | 147 - Juliet/src/Core/ImGui/ImGuiService.c | 133 + Juliet/src/Core/ImGui/ImGuiService.cpp | 140 - Juliet/src/Core/ImGui/ImGuiTests.c | 68 + Juliet/src/Core/ImGui/ImGuiTests.cpp | 74 - Juliet/src/Core/Juliet.c | 52 + Juliet/src/Core/Juliet.cpp | 58 - Juliet/src/Core/Logging/LogManager.c | 199 + Juliet/src/Core/Logging/LogManager.cpp | 210 - Juliet/src/Core/Math/MathRound.c | 65 + Juliet/src/Core/Math/MathRound.cpp | 66 - Juliet/src/Core/Math/Math_Private.h | 20 +- .../Memory/{Allocator.cpp => Allocator.c} | 14 +- Juliet/src/Core/Memory/MemoryArena.c | 230 + Juliet/src/Core/Memory/MemoryArena.cpp | 232 - ...emoryArenaDebug.cpp => MemoryArenaDebug.c} | 103 +- Juliet/src/Core/Memory/MemoryArenaTests.c | 109 + Juliet/src/Core/Memory/MemoryArenaTests.cpp | 122 - Juliet/src/Core/Networking/NetworkPacket.cpp | 65 - Juliet/src/Core/Networking/Socket.cpp | 82 - .../src/Core/Networking/SocketPlatformImpl.h | 23 - Juliet/src/Core/Networking/TcpListener.cpp | 66 - Juliet/src/Core/Networking/TcpSocket.cpp | 93 - .../Win32/Win32SocketPlatformImpl.cpp | 80 - Juliet/src/Core/PCH.c | 1 + Juliet/src/Core/PCH.cpp | 1 - .../{ThreadContext.cpp => ThreadContext.c} | 37 +- .../{win32_thread.cpp => win32_thread.c} | 26 +- Juliet/src/Engine/Asset.c | 7 + Juliet/src/Engine/Asset.cpp | 3 - Juliet/src/Engine/Debug/MemoryDebugger.c | 598 + Juliet/src/Engine/Debug/MemoryDebugger.cpp | 598 - Juliet/src/Engine/Engine.c | 227 + Juliet/src/Engine/Engine.cpp | 229 - Juliet/src/Engine/class.c | 40 + Juliet/src/Engine/class.cpp | 38 - Juliet/src/Engine/{user.cpp => user.c} | 62 +- Juliet/src/Graphics/Camera.c | 62 + Juliet/src/Graphics/Camera.cpp | 69 - .../D3D12TokenizedProgramFormat.hpp | 2630 -- .../src/Graphics/D3D12/AgilitySDK/VERSION.txt | 5 - Juliet/src/Graphics/D3D12/AgilitySDK/d3d12.h | 34333 ---------------- .../src/Graphics/D3D12/AgilitySDK/d3d12.idl | 6637 --- .../D3D12/AgilitySDK/d3d12compatibility.h | 809 - .../D3D12/AgilitySDK/d3d12compatibility.idl | 100 - .../D3D12/AgilitySDK/d3d12sdklayers.h | 4063 -- .../D3D12/AgilitySDK/d3d12sdklayers.idl | 1856 - .../Graphics/D3D12/AgilitySDK/d3d12shader.h | 489 - .../Graphics/D3D12/AgilitySDK/d3d12video.h | 8954 ---- .../Graphics/D3D12/AgilitySDK/d3d12video.idl | 3172 -- .../src/Graphics/D3D12/AgilitySDK/d3dcommon.h | 1105 - .../Graphics/D3D12/AgilitySDK/d3dcommon.idl | 991 - .../Graphics/D3D12/AgilitySDK/d3dx12/d3dx12.h | 35 - .../D3D12/AgilitySDK/d3dx12/d3dx12_barriers.h | 191 - .../d3dx12/d3dx12_check_feature_support.h | 1136 - .../D3D12/AgilitySDK/d3dx12/d3dx12_core.h | 1533 - .../D3D12/AgilitySDK/d3dx12/d3dx12_default.h | 12 - .../d3dx12/d3dx12_pipeline_state_stream.h | 1496 - .../d3dx12/d3dx12_property_format_table.cpp | 7606 ---- .../d3dx12/d3dx12_property_format_table.h | 126 - .../AgilitySDK/d3dx12/d3dx12_render_pass.h | 105 - .../d3dx12/d3dx12_resource_helpers.h | 602 - .../AgilitySDK/d3dx12/d3dx12_root_signature.h | 1227 - .../AgilitySDK/d3dx12/d3dx12_state_object.h | 2205 - .../Graphics/D3D12/AgilitySDK/dxgiformat.h | 142 - .../Graphics/D3D12/AgilitySDK/dxgiformat.idl | 139 - .../src/Graphics/D3D12/D3D12GraphicsDevice.c | 4709 +++ .../Graphics/D3D12/D3D12GraphicsDevice.cpp | 4664 --- Juliet/src/Graphics/D3D12/D3D12Includes.h | 16 +- Juliet/src/Graphics/DebugDisplayRenderer.c | 355 + Juliet/src/Graphics/DebugDisplayRenderer.cpp | 360 - Juliet/src/Graphics/Graphics.c | 524 + Juliet/src/Graphics/Graphics.cpp | 431 - Juliet/src/Graphics/GraphicsDevice.h | 142 +- Juliet/src/Graphics/ImGuiRenderer.c | 436 + Juliet/src/Graphics/ImGuiRenderer.cpp | 435 - Juliet/src/Graphics/{Mesh.cpp => Mesh.c} | 4 +- Juliet/src/Graphics/MeshRenderer.c | 583 + Juliet/src/Graphics/MeshRenderer.cpp | 574 - .../{SkyboxRenderer.cpp => SkyboxRenderer.c} | 101 +- .../src/UnitTest/Container/VectorUnitTest.c | 182 + .../src/UnitTest/Container/VectorUnitTest.cpp | 243 - Juliet/src/UnitTest/RunUnitTests.c | 27 + Juliet/src/UnitTest/RunUnitTests.cpp | 31 - Juliet/src/UnitTest/iostream_test.c | 478 + Juliet/src/UnitTest/iostream_test.cpp | 472 - Juliet/src/UnitTest/os_test.c | 31 + Juliet/src/UnitTest/os_test.cpp | 51 - Juliet/src/UnitTest/serialization_test.c | 281 + Juliet/src/UnitTest/serialization_test.cpp | 251 - JulietApp/main.c | 348 + JulietApp/main.cpp | 655 - JulietApp/main.h | 50 - .../DXShaderCompiler/DXCompiler.h | 296 +- JulietShaderCompiler/ShaderCompiler.c | 189 + JulietShaderCompiler/ShaderCompiler.cpp | 198 - JulietShaderCompiler/ShaderCompiler.h | 49 +- JulietShaderCompiler/main.c | 231 + JulietShaderCompiler/main.cpp | 224 - Romeo/Romeo.vcxproj.filters | 42 - ...ude_Core_Application_ApplicationManager.md | 19 - ...t_include_Core_Application_IApplication.md | 40 - .../docs/Juliet_include_Core_Common_CRC32.md | 15 - .../Juliet_include_Core_Common_CoreTypes.md | 40 - .../Juliet_include_Core_Common_CoreUtils.md | 55 - .../Juliet_include_Core_Common_EnumUtils.md | 15 - .../Juliet_include_Core_Common_NonCopyable.md | 20 - .../Juliet_include_Core_Common_NonMovable.md | 20 - .../Juliet_include_Core_Common_NonNullPtr.md | 15 - .../Juliet_include_Core_Common_Singleton.md | 34 - .../docs/Juliet_include_Core_Common_String.md | 108 - .../Juliet_include_Core_Container_Vector.md | 62 - ...Juliet_include_Core_HAL_Display_Display.md | 21 - ..._include_Core_HAL_DynLib_DynamicLibrary.md | 17 - ...liet_include_Core_HAL_Event_SystemEvent.md | 63 - ..._include_Core_HAL_Filesystem_Filesystem.md | 25 - .../Juliet_include_Core_HAL_IO_IOStream.md | 46 - ...uliet_include_Core_HAL_Keyboard_KeyCode.md | 16 - ...liet_include_Core_HAL_Keyboard_Keyboard.md | 27 - ...liet_include_Core_HAL_Keyboard_ScanCode.md | 15 - .../Juliet_include_Core_HAL_Mouse_Mouse.md | 23 - Romeo/docs/Juliet_include_Core_HAL_OS_OS.md | 28 - ...Juliet_include_Core_HotReload_HotReload.md | 30 - .../Juliet_include_Core_ImGui_ImGuiService.md | 54 - .../Juliet_include_Core_ImGui_ImGuiTests.md | 20 - Romeo/docs/Juliet_include_Core_JulietInit.md | 22 - .../Juliet_include_Core_Logging_LogManager.md | 29 - .../Juliet_include_Core_Logging_LogTypes.md | 16 - Romeo/docs/Juliet_include_Core_Main.md | 19 - .../Juliet_include_Core_Math_MathUtils.md | 15 - Romeo/docs/Juliet_include_Core_Math_Matrix.md | 15 - Romeo/docs/Juliet_include_Core_Math_Shape.md | 15 - Romeo/docs/Juliet_include_Core_Math_Vector.md | 16 - .../Juliet_include_Core_Memory_Allocator.md | 20 - .../Juliet_include_Core_Memory_MemoryArena.md | 37 - ...et_include_Core_Memory_MemoryArenaDebug.md | 38 - ...Juliet_include_Core_Memory_ScratchArena.md | 12 - .../docs/Juliet_include_Core_Memory_Utils.md | 17 - ...uliet_include_Core_Networking_IPAddress.md | 11 - ...t_include_Core_Networking_NetworkPacket.md | 26 - .../Juliet_include_Core_Networking_Socket.md | 31 - ...et_include_Core_Networking_SocketHandle.md | 17 - ...iet_include_Core_Networking_TcpListener.md | 27 - ...uliet_include_Core_Networking_TcpSocket.md | 23 - .../docs/Juliet_include_Core_Thread_Mutex.md | 11 - .../docs/Juliet_include_Core_Thread_Thread.md | 23 - Romeo/docs/Juliet_include_Engine_Class.md | 19 - ...iet_include_Engine_Debug_MemoryDebugger.md | 16 - Romeo/docs/Juliet_include_Engine_Engine.md | 26 - Romeo/docs/Juliet_include_Graphics_Camera.md | 15 - Romeo/docs/Juliet_include_Graphics_Colors.md | 15 - .../Juliet_include_Graphics_DebugDisplay.md | 20 - .../docs/Juliet_include_Graphics_Graphics.md | 126 - .../Juliet_include_Graphics_GraphicsBuffer.md | 53 - .../Juliet_include_Graphics_GraphicsConfig.md | 18 - ...uliet_include_Graphics_GraphicsPipeline.md | 37 - .../Juliet_include_Graphics_ImGuiRenderer.md | 19 - .../docs/Juliet_include_Graphics_Lighting.md | 22 - Romeo/docs/Juliet_include_Graphics_Mesh.md | 19 - .../Juliet_include_Graphics_MeshRenderer.md | 69 - .../Juliet_include_Graphics_PushConstants.md | 15 - .../Juliet_include_Graphics_RenderPass.md | 65 - Romeo/docs/Juliet_include_Graphics_Shader.md | 18 - .../Juliet_include_Graphics_SkyboxRenderer.md | 32 - Romeo/docs/Juliet_include_Graphics_Texture.md | 22 - .../Juliet_include_Graphics_VertexData.md | 15 - Romeo/docs/Juliet_include_Juliet.md | 11 - ...re_HAL_Display_Win32_Win32DisplayDevice.md | 11 - ...ore_HAL_Display_Win32_Win32DisplayEvent.md | 17 - ..._src_Core_HAL_Display_Win32_Win32Window.md | 23 - ...rc_Core_HAL_DynLib_Win32_DynamicLibrary.md | 11 - .../Juliet_src_Core_HAL_Event_Keyboard.md | 22 - ...liet_src_Core_HAL_Event_KeyboardMapping.md | 17 - Romeo/docs/Juliet_src_Core_HAL_Event_Mouse.md | 11 - .../Juliet_src_Core_HAL_Event_WindowEvent.md | 19 - ...re_HAL_Filesystem_Win32_Win32Filesystem.md | 11 - ...iet_src_Core_HAL_IO_Win32_Win32IOStream.md | 15 - .../Juliet_src_Core_HAL_OS_Win32_Win32OS.md | 11 - ...src_Core_HotReload_Win32_Win32HotReload.md | 11 - Romeo/docs/Juliet_src_Core_Juliet.md | 11 - Romeo/docs/Juliet_src_Core_Math_MathRound.md | 15 - ...Juliet_src_Core_Memory_MemoryArenaTests.md | 15 - ...etworking_Win32_Win32SocketPlatformImpl.md | 29 - ...SDK_d3dx12_d3dx12_property_format_table.md | 127 - .../Juliet_src_Graphics_D3D12_D3D12Buffer.md | 28 - ...iet_src_Graphics_D3D12_D3D12CommandList.md | 76 - .../Juliet_src_Graphics_D3D12_D3D12Common.md | 26 - ..._src_Graphics_D3D12_D3D12DescriptorHeap.md | 30 - ..._src_Graphics_D3D12_D3D12GraphicsDevice.md | 48 - ...rc_Graphics_D3D12_D3D12GraphicsPipeline.md | 50 - ...t_src_Graphics_D3D12_D3D12InternalTests.md | 12 - ...liet_src_Graphics_D3D12_D3D12RenderPass.md | 23 - .../Juliet_src_Graphics_D3D12_D3D12Shader.md | 20 - ...uliet_src_Graphics_D3D12_D3D12SwapChain.md | 80 - ...src_Graphics_D3D12_D3D12Synchronization.md | 32 - .../Juliet_src_Graphics_D3D12_D3D12Texture.md | 96 - .../Juliet_src_Graphics_D3D12_D3D12Utils.md | 16 - ...uliet_src_Graphics_DebugDisplayRenderer.md | 16 - ...t_src_UnitTest_Container_VectorUnitTest.md | 11 - .../docs/Juliet_src_UnitTest_RunUnitTests.md | 17 - Romeo/docs/overview.md | 106 - Romeo/docs/romeo.db | Bin 113970 -> 0 bytes Romeo/src/AiGenerator.cpp | 370 - Romeo/src/AiGenerator.h | 14 - Romeo/src/Database.cpp | 302 - Romeo/src/Database.h | 43 - Romeo/src/HttpClient.cpp | 196 - Romeo/src/HttpClient.h | 22 - Romeo/src/JsonParser.cpp | 477 - Romeo/src/JsonParser.h | 46 - Romeo/src/MarkdownGenerator.cpp | 1085 - Romeo/src/MarkdownGenerator.h | 7 - Romeo/src/main.cpp | 568 - misc/Generate.bat | 21 +- misc/build.bat | 84 +- tools/build_system.c | 42 +- 369 files changed, 18074 insertions(+), 107634 deletions(-) create mode 100644 Game/Controller/DebugCameraController.c delete mode 100644 Game/Controller/DebugCameraController.cpp create mode 100644 Game/Data/World.c delete mode 100644 Game/Data/World.cpp create mode 100644 Game/Debug/DebugTopBar.c delete mode 100644 Game/Debug/DebugTopBar.cpp create mode 100644 Game/Entity/Entity.c delete mode 100644 Game/Entity/Entity.cpp create mode 100644 Game/Entity/EntityManager.c delete mode 100644 Game/Entity/EntityManager.cpp rename Game/Entity/{entity_common.cpp => entity_common.c} (67%) create mode 100644 Game/Entity/entity_types.c delete mode 100644 Game/Entity/entity_types.cpp create mode 100644 Game/UnitTest/WorldUnitTest.c delete mode 100644 Game/UnitTest/WorldUnitTest.cpp rename Game/{game.cpp => game.c} (50%) delete mode 100644 Juliet/Juliet.vcxproj.filters delete mode 100644 Juliet/include/Core/Application/ApplicationManager.h delete mode 100644 Juliet/include/Core/Application/IApplication.h delete mode 100644 Juliet/include/Core/Common/EnumUtils.h delete mode 100644 Juliet/include/Core/Common/NonNullPtr.h delete mode 100644 Juliet/include/Core/Networking/IPAddress.h delete mode 100644 Juliet/include/Core/Networking/NetworkPacket.h delete mode 100644 Juliet/include/Core/Networking/Socket.h delete mode 100644 Juliet/include/Core/Networking/SocketHandle.h delete mode 100644 Juliet/include/Core/Networking/TcpListener.h delete mode 100644 Juliet/include/Core/Networking/TcpSocket.h delete mode 100644 Juliet/include/Core/Thread/Mutex.h delete mode 100644 Juliet/src/Core/Application/ApplicationManager.cpp create mode 100644 Juliet/src/Core/Common/CoreUtils.c delete mode 100644 Juliet/src/Core/Common/CoreUtils.cpp create mode 100644 Juliet/src/Core/Common/String.c delete mode 100644 Juliet/src/Core/Common/String.cpp create mode 100644 Juliet/src/Core/Common/serialization.c delete mode 100644 Juliet/src/Core/Common/serialization.cpp create mode 100644 Juliet/src/Core/Container/Vector.c delete mode 100644 Juliet/src/Core/Container/Vector.cpp create mode 100644 Juliet/src/Core/HAL/Display/Display.c delete mode 100644 Juliet/src/Core/HAL/Display/Display.cpp create mode 100644 Juliet/src/Core/HAL/Display/Win32/Win32DisplayDevice.c delete mode 100644 Juliet/src/Core/HAL/Display/Win32/Win32DisplayDevice.cpp create mode 100644 Juliet/src/Core/HAL/Display/Win32/Win32DisplayEvent.c delete mode 100644 Juliet/src/Core/HAL/Display/Win32/Win32DisplayEvent.cpp create mode 100644 Juliet/src/Core/HAL/Display/Win32/Win32Window.c delete mode 100644 Juliet/src/Core/HAL/Display/Win32/Win32Window.cpp create mode 100644 Juliet/src/Core/HAL/DynLib/Win32/DynamicLibrary.c delete mode 100644 Juliet/src/Core/HAL/DynLib/Win32/DynamicLibrary.cpp create mode 100644 Juliet/src/Core/HAL/Event/Keyboard.c delete mode 100644 Juliet/src/Core/HAL/Event/Keyboard.cpp create mode 100644 Juliet/src/Core/HAL/Event/KeyboardMapping.c delete mode 100644 Juliet/src/Core/HAL/Event/KeyboardMapping.cpp create mode 100644 Juliet/src/Core/HAL/Event/Mouse.c delete mode 100644 Juliet/src/Core/HAL/Event/Mouse.cpp create mode 100644 Juliet/src/Core/HAL/Event/SystemEvent.c delete mode 100644 Juliet/src/Core/HAL/Event/SystemEvent.cpp rename Juliet/src/Core/HAL/Event/{WindowEvent.cpp => WindowEvent.c} (55%) create mode 100644 Juliet/src/Core/HAL/Filesystem/Filesystem.c delete mode 100644 Juliet/src/Core/HAL/Filesystem/Filesystem.cpp create mode 100644 Juliet/src/Core/HAL/Filesystem/Win32/Win32Filesystem.c delete mode 100644 Juliet/src/Core/HAL/Filesystem/Win32/Win32Filesystem.cpp create mode 100644 Juliet/src/Core/HAL/IO/IOStream.c delete mode 100644 Juliet/src/Core/HAL/IO/IOStream.cpp create mode 100644 Juliet/src/Core/HAL/IO/Win32/Win32IOStream.c delete mode 100644 Juliet/src/Core/HAL/IO/Win32/Win32IOStream.cpp create mode 100644 Juliet/src/Core/HAL/OS/OS.c delete mode 100644 Juliet/src/Core/HAL/OS/OS.cpp create mode 100644 Juliet/src/Core/HAL/OS/Win32/Win32OS.c delete mode 100644 Juliet/src/Core/HAL/OS/Win32/Win32OS.cpp create mode 100644 Juliet/src/Core/HotReload/HotReload.c delete mode 100644 Juliet/src/Core/HotReload/HotReload.cpp create mode 100644 Juliet/src/Core/HotReload/Win32/Win32HotReload.c delete mode 100644 Juliet/src/Core/HotReload/Win32/Win32HotReload.cpp create mode 100644 Juliet/src/Core/ImGui/ImGuiService.c delete mode 100644 Juliet/src/Core/ImGui/ImGuiService.cpp create mode 100644 Juliet/src/Core/ImGui/ImGuiTests.c delete mode 100644 Juliet/src/Core/ImGui/ImGuiTests.cpp create mode 100644 Juliet/src/Core/Juliet.c delete mode 100644 Juliet/src/Core/Juliet.cpp create mode 100644 Juliet/src/Core/Logging/LogManager.c delete mode 100644 Juliet/src/Core/Logging/LogManager.cpp create mode 100644 Juliet/src/Core/Math/MathRound.c delete mode 100644 Juliet/src/Core/Math/MathRound.cpp rename Juliet/src/Core/Memory/{Allocator.cpp => Allocator.c} (66%) create mode 100644 Juliet/src/Core/Memory/MemoryArena.c delete mode 100644 Juliet/src/Core/Memory/MemoryArena.cpp rename Juliet/src/Core/Memory/{MemoryArenaDebug.cpp => MemoryArenaDebug.c} (52%) create mode 100644 Juliet/src/Core/Memory/MemoryArenaTests.c delete mode 100644 Juliet/src/Core/Memory/MemoryArenaTests.cpp delete mode 100644 Juliet/src/Core/Networking/NetworkPacket.cpp delete mode 100644 Juliet/src/Core/Networking/Socket.cpp delete mode 100644 Juliet/src/Core/Networking/SocketPlatformImpl.h delete mode 100644 Juliet/src/Core/Networking/TcpListener.cpp delete mode 100644 Juliet/src/Core/Networking/TcpSocket.cpp delete mode 100644 Juliet/src/Core/Networking/Win32/Win32SocketPlatformImpl.cpp create mode 100644 Juliet/src/Core/PCH.c delete mode 100644 Juliet/src/Core/PCH.cpp rename Juliet/src/Core/Thread/{ThreadContext.cpp => ThreadContext.c} (50%) rename Juliet/src/Core/Thread/{win32_thread.cpp => win32_thread.c} (54%) create mode 100644 Juliet/src/Engine/Asset.c delete mode 100644 Juliet/src/Engine/Asset.cpp create mode 100644 Juliet/src/Engine/Debug/MemoryDebugger.c delete mode 100644 Juliet/src/Engine/Debug/MemoryDebugger.cpp create mode 100644 Juliet/src/Engine/Engine.c delete mode 100644 Juliet/src/Engine/Engine.cpp create mode 100644 Juliet/src/Engine/class.c delete mode 100644 Juliet/src/Engine/class.cpp rename Juliet/src/Engine/{user.cpp => user.c} (54%) create mode 100644 Juliet/src/Graphics/Camera.c delete mode 100644 Juliet/src/Graphics/Camera.cpp delete mode 100644 Juliet/src/Graphics/D3D12/AgilitySDK/D3D12TokenizedProgramFormat.hpp delete mode 100644 Juliet/src/Graphics/D3D12/AgilitySDK/VERSION.txt delete mode 100644 Juliet/src/Graphics/D3D12/AgilitySDK/d3d12.h delete mode 100644 Juliet/src/Graphics/D3D12/AgilitySDK/d3d12.idl delete mode 100644 Juliet/src/Graphics/D3D12/AgilitySDK/d3d12compatibility.h delete mode 100644 Juliet/src/Graphics/D3D12/AgilitySDK/d3d12compatibility.idl delete mode 100644 Juliet/src/Graphics/D3D12/AgilitySDK/d3d12sdklayers.h delete mode 100644 Juliet/src/Graphics/D3D12/AgilitySDK/d3d12sdklayers.idl delete mode 100644 Juliet/src/Graphics/D3D12/AgilitySDK/d3d12shader.h delete mode 100644 Juliet/src/Graphics/D3D12/AgilitySDK/d3d12video.h delete mode 100644 Juliet/src/Graphics/D3D12/AgilitySDK/d3d12video.idl delete mode 100644 Juliet/src/Graphics/D3D12/AgilitySDK/d3dcommon.h delete mode 100644 Juliet/src/Graphics/D3D12/AgilitySDK/d3dcommon.idl delete mode 100644 Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12.h delete mode 100644 Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_barriers.h delete mode 100644 Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_check_feature_support.h delete mode 100644 Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_core.h delete mode 100644 Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_default.h delete mode 100644 Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_pipeline_state_stream.h delete mode 100644 Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_property_format_table.cpp delete mode 100644 Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_property_format_table.h delete mode 100644 Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_render_pass.h delete mode 100644 Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_resource_helpers.h delete mode 100644 Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_root_signature.h delete mode 100644 Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_state_object.h delete mode 100644 Juliet/src/Graphics/D3D12/AgilitySDK/dxgiformat.h delete mode 100644 Juliet/src/Graphics/D3D12/AgilitySDK/dxgiformat.idl create mode 100644 Juliet/src/Graphics/D3D12/D3D12GraphicsDevice.c delete mode 100644 Juliet/src/Graphics/D3D12/D3D12GraphicsDevice.cpp create mode 100644 Juliet/src/Graphics/DebugDisplayRenderer.c delete mode 100644 Juliet/src/Graphics/DebugDisplayRenderer.cpp create mode 100644 Juliet/src/Graphics/Graphics.c delete mode 100644 Juliet/src/Graphics/Graphics.cpp create mode 100644 Juliet/src/Graphics/ImGuiRenderer.c delete mode 100644 Juliet/src/Graphics/ImGuiRenderer.cpp rename Juliet/src/Graphics/{Mesh.cpp => Mesh.c} (68%) create mode 100644 Juliet/src/Graphics/MeshRenderer.c delete mode 100644 Juliet/src/Graphics/MeshRenderer.cpp rename Juliet/src/Graphics/{SkyboxRenderer.cpp => SkyboxRenderer.c} (51%) create mode 100644 Juliet/src/UnitTest/Container/VectorUnitTest.c delete mode 100644 Juliet/src/UnitTest/Container/VectorUnitTest.cpp create mode 100644 Juliet/src/UnitTest/RunUnitTests.c delete mode 100644 Juliet/src/UnitTest/RunUnitTests.cpp create mode 100644 Juliet/src/UnitTest/iostream_test.c delete mode 100644 Juliet/src/UnitTest/iostream_test.cpp create mode 100644 Juliet/src/UnitTest/os_test.c delete mode 100644 Juliet/src/UnitTest/os_test.cpp create mode 100644 Juliet/src/UnitTest/serialization_test.c delete mode 100644 Juliet/src/UnitTest/serialization_test.cpp create mode 100644 JulietApp/main.c delete mode 100644 JulietApp/main.cpp delete mode 100644 JulietApp/main.h create mode 100644 JulietShaderCompiler/ShaderCompiler.c delete mode 100644 JulietShaderCompiler/ShaderCompiler.cpp create mode 100644 JulietShaderCompiler/main.c delete mode 100644 JulietShaderCompiler/main.cpp delete mode 100644 Romeo/Romeo.vcxproj.filters delete mode 100644 Romeo/docs/Juliet_include_Core_Application_ApplicationManager.md delete mode 100644 Romeo/docs/Juliet_include_Core_Application_IApplication.md delete mode 100644 Romeo/docs/Juliet_include_Core_Common_CRC32.md delete mode 100644 Romeo/docs/Juliet_include_Core_Common_CoreTypes.md delete mode 100644 Romeo/docs/Juliet_include_Core_Common_CoreUtils.md delete mode 100644 Romeo/docs/Juliet_include_Core_Common_EnumUtils.md delete mode 100644 Romeo/docs/Juliet_include_Core_Common_NonCopyable.md delete mode 100644 Romeo/docs/Juliet_include_Core_Common_NonMovable.md delete mode 100644 Romeo/docs/Juliet_include_Core_Common_NonNullPtr.md delete mode 100644 Romeo/docs/Juliet_include_Core_Common_Singleton.md delete mode 100644 Romeo/docs/Juliet_include_Core_Common_String.md delete mode 100644 Romeo/docs/Juliet_include_Core_Container_Vector.md delete mode 100644 Romeo/docs/Juliet_include_Core_HAL_Display_Display.md delete mode 100644 Romeo/docs/Juliet_include_Core_HAL_DynLib_DynamicLibrary.md delete mode 100644 Romeo/docs/Juliet_include_Core_HAL_Event_SystemEvent.md delete mode 100644 Romeo/docs/Juliet_include_Core_HAL_Filesystem_Filesystem.md delete mode 100644 Romeo/docs/Juliet_include_Core_HAL_IO_IOStream.md delete mode 100644 Romeo/docs/Juliet_include_Core_HAL_Keyboard_KeyCode.md delete mode 100644 Romeo/docs/Juliet_include_Core_HAL_Keyboard_Keyboard.md delete mode 100644 Romeo/docs/Juliet_include_Core_HAL_Keyboard_ScanCode.md delete mode 100644 Romeo/docs/Juliet_include_Core_HAL_Mouse_Mouse.md delete mode 100644 Romeo/docs/Juliet_include_Core_HAL_OS_OS.md delete mode 100644 Romeo/docs/Juliet_include_Core_HotReload_HotReload.md delete mode 100644 Romeo/docs/Juliet_include_Core_ImGui_ImGuiService.md delete mode 100644 Romeo/docs/Juliet_include_Core_ImGui_ImGuiTests.md delete mode 100644 Romeo/docs/Juliet_include_Core_JulietInit.md delete mode 100644 Romeo/docs/Juliet_include_Core_Logging_LogManager.md delete mode 100644 Romeo/docs/Juliet_include_Core_Logging_LogTypes.md delete mode 100644 Romeo/docs/Juliet_include_Core_Main.md delete mode 100644 Romeo/docs/Juliet_include_Core_Math_MathUtils.md delete mode 100644 Romeo/docs/Juliet_include_Core_Math_Matrix.md delete mode 100644 Romeo/docs/Juliet_include_Core_Math_Shape.md delete mode 100644 Romeo/docs/Juliet_include_Core_Math_Vector.md delete mode 100644 Romeo/docs/Juliet_include_Core_Memory_Allocator.md delete mode 100644 Romeo/docs/Juliet_include_Core_Memory_MemoryArena.md delete mode 100644 Romeo/docs/Juliet_include_Core_Memory_MemoryArenaDebug.md delete mode 100644 Romeo/docs/Juliet_include_Core_Memory_ScratchArena.md delete mode 100644 Romeo/docs/Juliet_include_Core_Memory_Utils.md delete mode 100644 Romeo/docs/Juliet_include_Core_Networking_IPAddress.md delete mode 100644 Romeo/docs/Juliet_include_Core_Networking_NetworkPacket.md delete mode 100644 Romeo/docs/Juliet_include_Core_Networking_Socket.md delete mode 100644 Romeo/docs/Juliet_include_Core_Networking_SocketHandle.md delete mode 100644 Romeo/docs/Juliet_include_Core_Networking_TcpListener.md delete mode 100644 Romeo/docs/Juliet_include_Core_Networking_TcpSocket.md delete mode 100644 Romeo/docs/Juliet_include_Core_Thread_Mutex.md delete mode 100644 Romeo/docs/Juliet_include_Core_Thread_Thread.md delete mode 100644 Romeo/docs/Juliet_include_Engine_Class.md delete mode 100644 Romeo/docs/Juliet_include_Engine_Debug_MemoryDebugger.md delete mode 100644 Romeo/docs/Juliet_include_Engine_Engine.md delete mode 100644 Romeo/docs/Juliet_include_Graphics_Camera.md delete mode 100644 Romeo/docs/Juliet_include_Graphics_Colors.md delete mode 100644 Romeo/docs/Juliet_include_Graphics_DebugDisplay.md delete mode 100644 Romeo/docs/Juliet_include_Graphics_Graphics.md delete mode 100644 Romeo/docs/Juliet_include_Graphics_GraphicsBuffer.md delete mode 100644 Romeo/docs/Juliet_include_Graphics_GraphicsConfig.md delete mode 100644 Romeo/docs/Juliet_include_Graphics_GraphicsPipeline.md delete mode 100644 Romeo/docs/Juliet_include_Graphics_ImGuiRenderer.md delete mode 100644 Romeo/docs/Juliet_include_Graphics_Lighting.md delete mode 100644 Romeo/docs/Juliet_include_Graphics_Mesh.md delete mode 100644 Romeo/docs/Juliet_include_Graphics_MeshRenderer.md delete mode 100644 Romeo/docs/Juliet_include_Graphics_PushConstants.md delete mode 100644 Romeo/docs/Juliet_include_Graphics_RenderPass.md delete mode 100644 Romeo/docs/Juliet_include_Graphics_Shader.md delete mode 100644 Romeo/docs/Juliet_include_Graphics_SkyboxRenderer.md delete mode 100644 Romeo/docs/Juliet_include_Graphics_Texture.md delete mode 100644 Romeo/docs/Juliet_include_Graphics_VertexData.md delete mode 100644 Romeo/docs/Juliet_include_Juliet.md delete mode 100644 Romeo/docs/Juliet_src_Core_HAL_Display_Win32_Win32DisplayDevice.md delete mode 100644 Romeo/docs/Juliet_src_Core_HAL_Display_Win32_Win32DisplayEvent.md delete mode 100644 Romeo/docs/Juliet_src_Core_HAL_Display_Win32_Win32Window.md delete mode 100644 Romeo/docs/Juliet_src_Core_HAL_DynLib_Win32_DynamicLibrary.md delete mode 100644 Romeo/docs/Juliet_src_Core_HAL_Event_Keyboard.md delete mode 100644 Romeo/docs/Juliet_src_Core_HAL_Event_KeyboardMapping.md delete mode 100644 Romeo/docs/Juliet_src_Core_HAL_Event_Mouse.md delete mode 100644 Romeo/docs/Juliet_src_Core_HAL_Event_WindowEvent.md delete mode 100644 Romeo/docs/Juliet_src_Core_HAL_Filesystem_Win32_Win32Filesystem.md delete mode 100644 Romeo/docs/Juliet_src_Core_HAL_IO_Win32_Win32IOStream.md delete mode 100644 Romeo/docs/Juliet_src_Core_HAL_OS_Win32_Win32OS.md delete mode 100644 Romeo/docs/Juliet_src_Core_HotReload_Win32_Win32HotReload.md delete mode 100644 Romeo/docs/Juliet_src_Core_Juliet.md delete mode 100644 Romeo/docs/Juliet_src_Core_Math_MathRound.md delete mode 100644 Romeo/docs/Juliet_src_Core_Memory_MemoryArenaTests.md delete mode 100644 Romeo/docs/Juliet_src_Core_Networking_Win32_Win32SocketPlatformImpl.md delete mode 100644 Romeo/docs/Juliet_src_Graphics_D3D12_AgilitySDK_d3dx12_d3dx12_property_format_table.md delete mode 100644 Romeo/docs/Juliet_src_Graphics_D3D12_D3D12Buffer.md delete mode 100644 Romeo/docs/Juliet_src_Graphics_D3D12_D3D12CommandList.md delete mode 100644 Romeo/docs/Juliet_src_Graphics_D3D12_D3D12Common.md delete mode 100644 Romeo/docs/Juliet_src_Graphics_D3D12_D3D12DescriptorHeap.md delete mode 100644 Romeo/docs/Juliet_src_Graphics_D3D12_D3D12GraphicsDevice.md delete mode 100644 Romeo/docs/Juliet_src_Graphics_D3D12_D3D12GraphicsPipeline.md delete mode 100644 Romeo/docs/Juliet_src_Graphics_D3D12_D3D12InternalTests.md delete mode 100644 Romeo/docs/Juliet_src_Graphics_D3D12_D3D12RenderPass.md delete mode 100644 Romeo/docs/Juliet_src_Graphics_D3D12_D3D12Shader.md delete mode 100644 Romeo/docs/Juliet_src_Graphics_D3D12_D3D12SwapChain.md delete mode 100644 Romeo/docs/Juliet_src_Graphics_D3D12_D3D12Synchronization.md delete mode 100644 Romeo/docs/Juliet_src_Graphics_D3D12_D3D12Texture.md delete mode 100644 Romeo/docs/Juliet_src_Graphics_D3D12_D3D12Utils.md delete mode 100644 Romeo/docs/Juliet_src_Graphics_DebugDisplayRenderer.md delete mode 100644 Romeo/docs/Juliet_src_UnitTest_Container_VectorUnitTest.md delete mode 100644 Romeo/docs/Juliet_src_UnitTest_RunUnitTests.md delete mode 100644 Romeo/docs/overview.md delete mode 100644 Romeo/docs/romeo.db delete mode 100644 Romeo/src/AiGenerator.cpp delete mode 100644 Romeo/src/AiGenerator.h delete mode 100644 Romeo/src/Database.cpp delete mode 100644 Romeo/src/Database.h delete mode 100644 Romeo/src/HttpClient.cpp delete mode 100644 Romeo/src/HttpClient.h delete mode 100644 Romeo/src/JsonParser.cpp delete mode 100644 Romeo/src/JsonParser.h delete mode 100644 Romeo/src/MarkdownGenerator.cpp delete mode 100644 Romeo/src/MarkdownGenerator.h delete mode 100644 Romeo/src/main.cpp diff --git a/Game/Controller/ControllerUtils.h b/Game/Controller/ControllerUtils.h index 328efae..8db8ace 100644 --- a/Game/Controller/ControllerUtils.h +++ b/Game/Controller/ControllerUtils.h @@ -1,4 +1,6 @@ #pragma once -constexpr index_t kPlayCamera = 0; -constexpr index_t kDebugCamera = 1; +#include + +#define kPlayCamera ((index_t)0) +#define kDebugCamera ((index_t)1) diff --git a/Game/Controller/DebugCameraController.c b/Game/Controller/DebugCameraController.c new file mode 100644 index 0000000..80f6afa --- /dev/null +++ b/Game/Controller/DebugCameraController.c @@ -0,0 +1,163 @@ +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +global bool8 gIsDebugCameraActive = false; +global index_t gPreviousCameraIndex = 0; +global float gPitch = 0.0f; +global float gYaw = 0.0f; +global bool8 gFirstUpdate = true; +global bool8 gIsFpsModeActive = false; +global bool8 gWasRightMouseButtonDown = false; + +void ActivateDebugController(void) +{ + Assert(gIsDebugCameraActive == false); + + Camera* currentCam = GetCurrentCamera(); + gPreviousCameraIndex = currentCam->Index; + + SetCurrentCamera(kDebugCamera); + + gIsDebugCameraActive = true; + gFirstUpdate = true; + gIsFpsModeActive = false; + gWasRightMouseButtonDown = false; +} + +void DeactivateDebugController(void) +{ + Assert(gIsDebugCameraActive); + + gIsDebugCameraActive = false; + + SetCurrentCamera(gPreviousCameraIndex); +} + +bool8 IsDebugControllerActive(void) +{ + return gIsDebugCameraActive; +} + +void UpdateDebugController(float dt) +{ + Camera* currentCam = GetCurrentCamera(); + + if (gFirstUpdate) + { + Vector3 origin = { 0.0f, 0.0f, 0.0f }; + Vector3 dir = Vector3Sub(origin, currentCam->Position); + dir = Normalize(dir); + gPitch = asinf(dir.z); + gYaw = atan2f(dir.y, dir.x); + gFirstUpdate = false; + + Vector3 forward = { cosf(gPitch) * cosf(gYaw), cosf(gPitch) * sinf(gYaw), sinf(gPitch) }; + Vector3 worldUp = { 0.0f, 0.0f, 1.0f }; + Vector3 right = Normalize(Cross(worldUp, forward)); + currentCam->Target = Vector3Add(currentCam->Position, forward); + currentCam->Up = Cross(forward, right); + } + + bool8 isRightMouseButtonDown = IsMouseButtonDown(MouseButton_Right); + if (isRightMouseButtonDown && !gWasRightMouseButtonDown) + { + gIsFpsModeActive = !gIsFpsModeActive; + } + gWasRightMouseButtonDown = isRightMouseButtonDown; + + if (gIsFpsModeActive) + { + MousePosition mouseDelta = GetMouseDelta(); + + float sensitivity = 0.005f; + gYaw += (float)mouseDelta.X * sensitivity; + gPitch -= (float)mouseDelta.Y * sensitivity; + + gPitch = Min(gPitch, 1.5f); + gPitch = Max(gPitch, -1.5f); + + if (IsKeyDown(ScanCode_Q)) + { + gYaw -= 2.0f * dt; + } + if (IsKeyDown(ScanCode_E)) + { + gYaw += 2.0f * dt; + } + + Vector3 forward = { cosf(gPitch) * cosf(gYaw), cosf(gPitch) * sinf(gYaw), sinf(gPitch) }; + Vector3 worldUp = { 0.0f, 0.0f, 1.0f }; + Vector3 right = Normalize(Cross(worldUp, forward)); + Vector3 defaultUp = Cross(forward, right); + + const float kMovementPerFrame = 10.f; // 10m/s + + float speedPerFrame = kMovementPerFrame; + if (IsKeyDown(ScanCode_LeftShift)) + { + speedPerFrame *= 10.f; // 100m/s + } + + if (IsKeyDown(ScanCode_W)) + { + currentCam->Position = Vector3Add(currentCam->Position, Vector3Scale(forward, speedPerFrame * dt)); + } + if (IsKeyDown(ScanCode_S)) + { + currentCam->Position = Vector3Sub(currentCam->Position, Vector3Scale(forward, speedPerFrame * dt)); + } + if (IsKeyDown(ScanCode_D)) + { + currentCam->Position = Vector3Add(currentCam->Position, Vector3Scale(right, speedPerFrame * dt)); + } + if (IsKeyDown(ScanCode_A)) + { + currentCam->Position = Vector3Sub(currentCam->Position, Vector3Scale(right, speedPerFrame * dt)); + } + if (IsKeyDown(ScanCode_Space)) + { + currentCam->Position = Vector3Add(currentCam->Position, Vector3Scale(defaultUp, speedPerFrame * dt)); + } + if (IsKeyDown(ScanCode_LeftControl)) + { + currentCam->Position = Vector3Sub(currentCam->Position, Vector3Scale(defaultUp, speedPerFrame * dt)); + } + + currentCam->Target = Vector3Add(currentCam->Position, forward); + currentCam->Up = defaultUp; + } +} + +#if JULIET_DEBUG +void RenderImGuiDebugController(float dt) +{ + Camera* currentCam = GetCurrentCamera(); + + ImGui_Text("Delta time: %f", (double)dt); + + ImGui_Text("Camera:"); + ImGui_Indent(); + ImGui_BulletText("Index: %zu", (size_t)currentCam->Index); + ImGui_BulletText("Position: (%.3f, %.3f, %.3f)", (double)currentCam->Position.x, (double)currentCam->Position.y, + (double)currentCam->Position.z); + ImGui_BulletText("Target: (%.3f, %.3f, %.3f)", (double)currentCam->Target.x, (double)currentCam->Target.y, + (double)currentCam->Target.z); + ImGui_BulletText("Up: (%.3f, %.3f, %.3f)", (double)currentCam->Up.x, (double)currentCam->Up.y, + (double)currentCam->Up.z); + ImGui_BulletText("FOV: %.3f rad", (double)currentCam->FOV); + ImGui_BulletText("AspectRatio: %.3f", (double)currentCam->AspectRatio); + ImGui_BulletText("NearPlane: %.3f", (double)currentCam->NearPlane); + ImGui_BulletText("FarPlane: %.3f", (double)currentCam->FarPlane); + ImGui_BulletText("Pitch: %.3f, Yaw: %.3f", (double)gPitch, (double)gYaw); + ImGui_BulletText("FPS Mode: %s", gIsFpsModeActive ? "Active" : "Inactive"); + ImGui_Unindent(); +} +#endif diff --git a/Game/Controller/DebugCameraController.cpp b/Game/Controller/DebugCameraController.cpp deleted file mode 100644 index 853d3c4..0000000 --- a/Game/Controller/DebugCameraController.cpp +++ /dev/null @@ -1,170 +0,0 @@ -#include - -#include -#include -#include -#include -#include -#include - -namespace -{ - - bool gIsDebugCameraActive = false; - index_t gPreviousCameraIndex = 0; - - float gPitch = 0.0f; - float gYaw = 0.0f; - bool gFirstUpdate = true; - bool gIsFpsModeActive = false; - bool gWasRightMouseButtonDown = false; -} // namespace - -void ActivateDebugController() -{ - Assert(gIsDebugCameraActive == false); - - Camera* currentCam = GetCurrentCamera(); - gPreviousCameraIndex = currentCam->Index; - - SetCurrentCamera(kDebugCamera); - - gIsDebugCameraActive = true; - gFirstUpdate = true; - gIsFpsModeActive = false; - gWasRightMouseButtonDown = false; -} - -void DeactivateDebugController() -{ - Assert(gIsDebugCameraActive); - - gIsDebugCameraActive = false; - - SetCurrentCamera(gPreviousCameraIndex); -} - -bool IsDebugControllerActive() -{ - return gIsDebugCameraActive; -} - -void UpdateDebugController(float dt) -{ - Camera* currentCam = GetCurrentCamera(); - - if (gFirstUpdate) - { - Vector3 dir = Vector3{ 0.0f, 0.0f, 0.0f } - currentCam->Position; - dir = Normalize(dir); - gPitch = asinf(dir.z); - gYaw = atan2f(dir.y, dir.x); - gFirstUpdate = false; - - Vector3 forward; - forward.x = cosf(gPitch) * cosf(gYaw); - forward.y = cosf(gPitch) * sinf(gYaw); - forward.z = sinf(gPitch); - Vector3 right = Normalize(Cross(Vector3{ 0.0f, 0.0f, 1.0f }, forward)); - currentCam->Target = currentCam->Position + forward; - currentCam->Up = Cross(forward, right); - } - - bool isRightMouseButtonDown = IsMouseButtonDown(MouseButton::Right); - if (isRightMouseButtonDown && !gWasRightMouseButtonDown) - { - gIsFpsModeActive = !gIsFpsModeActive; - } - gWasRightMouseButtonDown = isRightMouseButtonDown; - - if (!gIsFpsModeActive) - { - return; - } - - MousePosition mouseDelta = GetMouseDelta(); - - float sensitivity = 0.005f; - gYaw += mouseDelta.X * sensitivity; - gPitch -= mouseDelta.Y * sensitivity; - - gPitch = std::min(gPitch, 1.5f); - gPitch = std::max(gPitch, -1.5f); - - if (IsKeyDown(ScanCode::Q)) - { - gYaw -= 2.0f * dt; - } - if (IsKeyDown(ScanCode::E)) - { - gYaw += 2.0f * dt; - } - - Vector3 forward; - forward.x = cosf(gPitch) * cosf(gYaw); - forward.y = cosf(gPitch) * sinf(gYaw); - forward.z = sinf(gPitch); - - Vector3 right = Normalize(Cross(Vector3{ 0.0f, 0.0f, 1.0f }, forward)); - Vector3 defaultUp = Cross(forward, right); - - static const float kMovementPerFrame = 10.f; // 10m/s - - float speedPerFrame = kMovementPerFrame; - if (IsKeyDown(ScanCode::LeftShift)) - { - speedPerFrame *= 10.f; // 100m/s - } - - if (IsKeyDown(ScanCode::W)) - { - currentCam->Position = currentCam->Position + forward * (speedPerFrame * dt); - } - if (IsKeyDown(ScanCode::S)) - { - currentCam->Position = currentCam->Position - forward * (speedPerFrame * dt); - } - if (IsKeyDown(ScanCode::D)) - { - currentCam->Position = currentCam->Position + right * (speedPerFrame * dt); - } - if (IsKeyDown(ScanCode::A)) - { - currentCam->Position = currentCam->Position - right * (speedPerFrame * dt); - } - if (IsKeyDown(ScanCode::Space)) - { - currentCam->Position = currentCam->Position + defaultUp * (speedPerFrame * dt); - } - if (IsKeyDown(ScanCode::LeftControl)) - { - currentCam->Position = currentCam->Position - defaultUp * (speedPerFrame * dt); - } - - currentCam->Target = currentCam->Position + forward; - currentCam->Up = defaultUp; -} - -#if JULIET_DEBUG -void RenderImGuiDebugController(float dt) -{ - Camera* currentCam = GetCurrentCamera(); - - ImGui::Text("Delta time: %f", dt); - - ImGui::Text("Camera:"); - ImGui::Indent(); - ImGui::BulletText("Index: %zu", (size_t)currentCam->Index); - ImGui::BulletText("Position: (%.3f, %.3f, %.3f)", currentCam->Position.x, currentCam->Position.y, - currentCam->Position.z); - ImGui::BulletText("Target: (%.3f, %.3f, %.3f)", currentCam->Target.x, currentCam->Target.y, currentCam->Target.z); - ImGui::BulletText("Up: (%.3f, %.3f, %.3f)", currentCam->Up.x, currentCam->Up.y, currentCam->Up.z); - ImGui::BulletText("FOV: %.3f rad", currentCam->FOV); - ImGui::BulletText("AspectRatio: %.3f", currentCam->AspectRatio); - ImGui::BulletText("NearPlane: %.3f", currentCam->NearPlane); - ImGui::BulletText("FarPlane: %.3f", currentCam->FarPlane); - ImGui::BulletText("Pitch: %.3f, Yaw: %.3f", gPitch, gYaw); - ImGui::BulletText("FPS Mode: %s", gIsFpsModeActive ? "Active" : "Inactive"); - ImGui::Unindent(); -} -#endif diff --git a/Game/Controller/DebugCameraController.h b/Game/Controller/DebugCameraController.h index de7d6b2..f660842 100644 --- a/Game/Controller/DebugCameraController.h +++ b/Game/Controller/DebugCameraController.h @@ -1,11 +1,13 @@ #pragma once +#include + // TODO : Should support Debug/Profile/Release properly. // I think debug profile should have this controller but not release -void ActivateDebugController(); -void DeactivateDebugController(); -bool IsDebugControllerActive(); -void UpdateDebugController(float dt); +void ActivateDebugController(void); +void DeactivateDebugController(void); +bool8 IsDebugControllerActive(void); +void UpdateDebugController(float dt); #if JULIET_DEBUG void RenderImGuiDebugController(float dt); diff --git a/Game/Data/World.c b/Game/Data/World.c new file mode 100644 index 0000000..703e808 --- /dev/null +++ b/Game/Data/World.c @@ -0,0 +1,140 @@ +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef JULIET_ENABLE_IMGUI +#include +#endif + +void InitWorld(World* world, Arena* arena) +{ + Assert(world != NULL); + Assert(arena != NULL); + world->WorldArena = arena; +} + +void ShutdownWorld(World* world) +{ + Assert(world != NULL); + world->WorldArena = NULL; +} + +void AddToWorld(World* world, Entity* entity) +{ + (void)world; + (void)entity; +} + +void RemoveWorldEntity(World* world, size_t index) +{ + (void)world; + (void)index; +} + +void SerializeWorld(Archive* ar, World* world, String filename) +{ + (void)world; + Assert(ar != NULL); + Assert(IsValidString(filename)); + + EntityManager* entityManager = GetEntityManager(); + + if (ar->loading) + { + // Load + ByteBuffer fileBuffer = LoadFile(ar->arena, filename); + + // TEST SERIALIZATION + ParsedArchive archive = tokenize_archive(ar->arena, fileBuffer); +#if JULIET_DEBUG + audit_unconsumed_properties(&archive, ConstString("World")); +#else + (void)archive; +#endif + } + else + { + // Save + IOStream* stream = IOFromFile(ar->arena, filename, WrapString("wb")); + + index_t beginPos = ArenaPos(ar->arena); + + // Headers + WorldFileHeader* header = ArenaPushStruct(ar->arena, WorldFileHeader); + header->Magic = kWorldMagic; + + // TODO : Move to a one file per entity model + for (uint8 i = 0; i < ENTITY(Count); ++i) + { + typed_entity_array* type = &entityManager->by_type[i]; + serialize_elem(ar, type->count); + if (type->count > 0 && type->array != NULL) + { + EntityTemplate* element = type->array; + uint8* rawElement = (uint8*)element; + size_t stride = element->base->derived_kind->size_of; + for (index_t idx = 0; idx < type->count; ++idx) + { + Entity* entity = ((EntityTemplate*)(rawElement + (idx * stride)))->base; + serialize_entity(ar, entity); + } + } + } + + // Write + index_t endPos = ArenaPos(ar->arena); + ByteBuffer writeBuffer = { .Data = (Byte*)header, .Size = endPos - beginPos }; + + size_t written = IOWrite(stream, writeBuffer); + + Assert(writeBuffer.Size == written); + + IOClose(stream); + } +} + +bool8 LoadWorld(World* world, String filename) +{ + (void)world; + Assert(IsValidString(filename)); + return true; +} + +#ifdef JULIET_EDITOR +void RenderWorldEditorUI(World* world) +{ + Assert(world != NULL); + + if (ImGui_Begin("World Editor", NULL, ImGuiWindowFlags_None)) + { + TempArena temp = scratch_begin(NULL, 0); + static char worldFilePath[256] = "/world.bin"; + ImGui_InputText("World File", worldFilePath, sizeof(worldFilePath)); + + Path path = GetAssetPath(temp.Arena, AssetType_JAsset, WrapString(worldFilePath)); + + if (ImGui_Button("Save World")) + { + Archive data = { .arena = temp.Arena, .loading = false }; + SerializeWorld(&data, world, path.FullPath); + } + ImGui_SameLine(0.0f, -1.0f); + if (ImGui_Button("Load World")) + { + Archive data = { .arena = temp.Arena, .loading = true }; + SerializeWorld(&data, world, path.FullPath); + } + + scratch_end(temp); + } + ImGui_End(); +} +#endif diff --git a/Game/Data/World.cpp b/Game/Data/World.cpp deleted file mode 100644 index 8167c4b..0000000 --- a/Game/Data/World.cpp +++ /dev/null @@ -1,322 +0,0 @@ -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef JULIET_ENABLE_IMGUI -#include -#endif - -void InitWorld(NonNullPtr world, NonNullPtr arena) -{ - world->WorldArena = arena.Get(); -} - -void ShutdownWorld(NonNullPtr world) -{ - world->WorldArena = nullptr; -} - -void AddToWorld(NonNullPtr /*world*/, NonNullPtr /*entity*/) -{ - // RegisterEntity(*world->EntityManager, entity.Get()); -} - -void RemoveWorldEntity(World& /*world*/, size_t /*index*/) {} - -void Serialize(Archive& ar, World& /*world*/, String filename) -{ - Assert(IsValid(filename)); - - auto& entityManager = GetEntityManager(); - - if (ar.loading) - { - // Load - ByteBuffer fileBuffer = LoadFile(ar.arena, filename); - - // TEST SERIALIZATION - ParsedArchive archive = tokenize_archive(ar.arena, fileBuffer); - // ArchivePropertyNode* property = find_property(&archive, "Position"_crc32); - audit_unconsumed_properties(&archive, ConstString("World")); - - // if (fileBuffer.Size >= sizeof(WorldFileHeader)) - // { - // ar.base_ptr = fileBuffer.Data; - // - // WorldFileHeader header; - // serialize_elem(ar, header); - // Assert(header.Magic == kWorldMagic); - // - // for (typed_entity_array& type : entityManager.by_type) - // { - // serialize_elem(ar, type.count); - // - // if (type.count > 0) - // { - // - // // Unserialize the base entity to get informations - // Entity entity; - // // serialize(ar, &entity); - // } - // } - // } - } - else - { - // Save - IOStream* stream = IOFromFile(ar.arena, filename, WrapString("wb")); - - index_t beginPos = ArenaPos(ar.arena); - - // Headers - auto* header = ArenaPushStruct(ar.arena); - header->Magic = kWorldMagic; - - ar.base_ptr = header; - - // TODO : Move to a one file per entity model - for (typed_entity_array& type : entityManager.by_type) - { - serialize_elem(ar, type.count); - auto* element = type.array; - uint8* rawElement = reinterpret_cast(element); - size_t stride = element->base->derived_kind->size_of; - for (index_t idx = 0; idx < type.count; ++idx) - { - // Todo : utils - // Get base entity from type - Entity* entity = reinterpret_cast(rawElement + (idx * stride))->base; - serialize(ar, entity); - } - } - - // Write - index_t endPos = ArenaPos(ar.arena); - ByteBuffer writeBuffer = { .Data = reinterpret_cast(header), .Size = endPos - beginPos }; - - size_t written = IOWrite(stream, writeBuffer); - - Assert(writeBuffer.Size == written); - - IOClose(stream); - } - - // - // uint32 entityCount = static_cast(world.Entities.Size()); - // size_t totalBytes = sizeof(WorldFileHeader) + static_cast(entityCount) * sizeof(WorldEntityDiskRecord); - // - // ArenaParams tempParams = { .ReserveSize = Megabytes(1), .Name = "WorldSaveArena" }; - // Arena* tempArena = ArenaAllocate(tempParams); - // if (!tempArena) - // { - // LogError(LogCategory::Game, "SaveWorld: Failed to allocate memory for saving world."); - // return false; - // } - // - // auto deferRelease = Defer([&]() { ArenaRelease(tempArena); }); - // - // uint8* bufferData = ArenaPushArray(tempArena, totalBytes); - // if (!bufferData) - // { - // LogError(LogCategory::Game, "SaveWorld: Failed to allocate buffer in arena."); - // return false; - // } - // - // auto* header = reinterpret_cast(bufferData); - // header->Magic = kWorldMagic; - // header->Version = kWorldVersion; - // header->EntityCount = entityCount; - // header->Reserved = 0; - // - // auto* records = reinterpret_cast(bufferData + sizeof(WorldFileHeader)); - // for (size_t i = 0; i < entityCount; ++i) - // { - // const Entity& ent = world.Entities[i]; - // records[i].X = ent.X; - // records[i].Y = ent.Y; - // records[i].Z = ent.Z; - // } - // - // IOStream* stream = IOFromFile(tempArena, filename, WrapString("wb")); - // if (!stream) - // { - // LogError(LogCategory::Game, "SaveWorld: Failed to open file for writing: %s", CStr(filename)); - // return false; - // } - // - // ByteBuffer writeBuffer = { .Data = reinterpret_cast(bufferData), .Size = totalBytes }; - // - // size_t written = IOWrite(stream, writeBuffer); - // IOClose(stream); - // - // if (written != totalBytes) - // { - // LogError(LogCategory::Game, "SaveWorld: Failed to write complete world data to %s (wrote %zu / %zu bytes)", - // CStr(filename), written, totalBytes); - // return false; - // } - // - // LogMessage(LogCategory::Game, "World successfully saved to %s (%u entities)", CStr(filename), entityCount); - // return true; -} - -[[nodiscard]] bool LoadWorld(World& /*world*/, String filename) -{ - Assert(IsValid(filename)); - // Assert(world.WorldArena != nullptr); - // - // TempArena loadArena = scratch_begin(nullptr, 0); - // - // ByteBuffer fileBuffer = LoadFile(loadArena.Arena, filename); - // if (fileBuffer.Data && fileBuffer.Size < sizeof(WorldFileHeader)) - // { - // const WorldFileHeader* header = reinterpret_cast(fileBuffer.Data); - // const bool invalidMagicNum = header->Magic != kWorldMagic; - // const bool invalidVersion = header->Version != kWorldVersion; - // if (invalidMagicNum) - // { - // LogError(LogCategory::Game, "LoadWorld: Invalid magic in world file: %s (expected 0x%08X, got 0x%08X)", - // CStr(filename), kWorldMagic, header->Magic); - // } - // - // if (invalidVersion) - // { - // LogError(LogCategory::Game, "LoadWorld: Unsupported world file version: %u in %s", header->Version, CStr(filename)); - // } - // - // size_t expectedSize = sizeof(WorldFileHeader) + static_cast(header->EntityCount) * sizeof(WorldEntityDiskRecord); - // const bool invalidSize = fileBuffer.Size < expectedSize; - // if (invalidSize) - // { - // LogError(LogCategory::Game, "LoadWorld: Corrupted file %s: size %zu < expected %zu for %u entities", - // CStr(filename), fileBuffer.Size, expectedSize, header->EntityCount); - // } - // - // if (!invalidMagicNum && !invalidVersion && !invalidSize) - // { - // - // // world.Entities.Clear(); - // // - // // const auto* records = reinterpret_cast( - // // reinterpret_cast(fileBuffer.Data) + sizeof(WorldFileHeader)); - // // - // // for (uint32 i = 0; i < header->EntityCount; ++i) - // // { - // // Entity ent; - // // (void)AddWorldEntity(world, records[i].X, records[i].Y, records[i].Z); - // // } - // - // LogMessage(LogCategory::Game, "World successfully loaded from %s (%u entities)", CStr(filename), header->EntityCount); - // } - // } - // else - // { - // LogError(LogCategory::Game, "LoadWorld: Failed to read world file or file is too small: %s", CStr(filename)); - // } - // - // scratch_end(loadArena); - - return true; -} - -#ifdef JULIET_EDITOR -void RenderWorldEditorUI(World& world) -{ - if (ImGui::Begin("World Editor")) - { - TempArena temp = scratch_begin(nullptr, 0); - static char worldFilePath[256] = "/world.bin"; - ImGui::InputText("World File", worldFilePath, sizeof(worldFilePath)); - - Path path = GetAssetPath(temp.Arena, AssetType::JAsset, ConstString(worldFilePath)); - - if (ImGui::Button("Save World")) - { - Archive data = { .arena = temp.Arena, .loading = false }; - Serialize(data, world, path.FullPath); - } - ImGui::SameLine(); - if (ImGui::Button("Load World")) - { - Archive data{ .arena = temp.Arena, .loading = true }; - Serialize(data, world, path.FullPath); - } - - scratch_end(temp); - - // ImGui::SameLine(); - // if (ImGui::Button("Clear All")) - // { - // ClearWorld(world); - // } - // - // ImGui::Separator(); - // - // if (ImGui::Button("Add Entity")) - // { - // (void)AddWorldEntity(world, 0.0f, 0.0f, 0.0f); - // } - // - // ImGui::Text("Entity Count: %zu", world.Entities.Size()); - // ImGui::Separator(); - // - // static int selectedEntity = -1; - // if (selectedEntity >= static_cast(world.Entities.Size())) - // { - // selectedEntity = -1; - // } - // - // ImGui::BeginChild("EntityList", ImVec2(180, 200), true); - // for (size_t i = 0; i < world.Entities.Size(); ++i) - // { - // char label[64]; - // snprintf(label, sizeof(label), "Entity #%zu (ID: %llu)", i, world.Entities[i].ID); - // if (ImGui::Selectable(label, selectedEntity == static_cast(i))) - // { - // selectedEntity = static_cast(i); - // } - // } - // ImGui::EndChild(); - // - // ImGui::SameLine(); - // - // ImGui::BeginChild("EntityInspector", ImVec2(0, 200), true); - // if (selectedEntity >= 0 && selectedEntity < static_cast(world.Entities.Size())) - // { - // Entity& ent = world.Entities[static_cast(selectedEntity)]; - // ImGui::Text("Selected: Entity #%d", selectedEntity); - // ImGui::Text("ID: %llu", ent.ID); - // - // float pos[3] = { ent.X, ent.Y, ent.Z }; - // if (ImGui::DragFloat3("Position", pos, 0.1f)) - // { - // ent.X = pos[0]; - // ent.Y = pos[1]; - // ent.Z = pos[2]; - // UpdateWorld(world); - // } - // - // if (ImGui::Button("Delete Entity")) - // { - // RemoveWorldEntity(world, static_cast(selectedEntity)); - // selectedEntity = -1; - // UpdateWorld(world); - // } - // } - // else - // { - // ImGui::Text("Select an entity to edit its properties."); - // } - // ImGui::EndChild(); - } - ImGui::End(); -} -#endif diff --git a/Game/Data/World.h b/Game/Data/World.h index 8f8ce1f..2ece0bd 100644 --- a/Game/Data/World.h +++ b/Game/Data/World.h @@ -1,38 +1,39 @@ #pragma once -#include #include #include #include #include -struct Archive; -struct EntityManager; +typedef struct Archive Archive; +typedef struct EntityManager EntityManager; #pragma pack(push, 1) +typedef struct WorldFileHeader WorldFileHeader; struct WorldFileHeader { - uint32 Magic = 0x444C574A; // 'JWLD' in little-endian + uint32 Magic; // 0x444C574A ('JWLD' in little-endian) }; #pragma pack(pop) -constexpr uint32 kWorldMagic = 0x444C574A; // 'JWLD' -constexpr uint32 kWorldVersion = 1; +#define kWorldMagic ((uint32)0x444C574A) // 'JWLD' +#define kWorldVersion ((uint32)1) +typedef struct World World; struct World { - Arena* WorldArena = nullptr; - EntityManager* EntityManager = nullptr; + Arena* WorldArena; + EntityManager* EntityManager; }; -void InitWorld(NonNullPtr world, NonNullPtr arena); -void ShutdownWorld(NonNullPtr world); +void InitWorld(World* world, Arena* arena); +void ShutdownWorld(World* world); -void AddToWorld(NonNullPtr world, NonNullPtr entity); -void RemoveWorldEntity(World& world, size_t index); +void AddToWorld(World* world, Entity* entity); +void RemoveWorldEntity(World* world, size_t index); -void Serialize(Archive& data, World& world, String filename); +void SerializeWorld(Archive* data, World* world, String filename); #if JULIET_EDITOR -void RenderWorldEditorUI(World& world); +void RenderWorldEditorUI(World* world); #endif diff --git a/Game/Debug/DebugTopBar.c b/Game/Debug/DebugTopBar.c new file mode 100644 index 0000000..2d469db --- /dev/null +++ b/Game/Debug/DebugTopBar.c @@ -0,0 +1,63 @@ +#include + +#if JULIET_DEBUG +#include +#include +#include + +internal String GetGameModeName(GameMode gameMode) +{ + String result = WrapString("Unknown ERROR"); + if (gameMode == GameMode_Editor) + { + result = WrapString("Editor"); + } + else if (gameMode == GameMode_Play) + { + result = WrapString("Play"); + } + else if (gameMode == GameMode_Debug) + { + result = WrapString("Debug"); + } + return result; +} + +void DrawTopBar(void) +{ + GameState* gameState = GetGameState(); + + ImVec2_c viewportPos = ImGui_GetMainViewportPos(); + ImVec2_c viewportSize = ImGui_GetMainViewportSize(); + ImGui_SetNextWindowPos(viewportPos); + ImVec2_c barSize = { viewportSize.x, 10.0f }; + ImGui_SetNextWindowSize(barSize); + + ImGuiWindowFlags_c flags = ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoMove | + ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoFocusOnAppearing | + ImGuiWindowFlags_NoNav; + + ImVec4_c bgCol = { 0.0f, 0.0f, 0.0f, 0.6f }; + ImVec2_c padding = { 10.0f, 5.0f }; + ImGui_PushStyleColor(ImGuiCol_WindowBg, bgCol); + ImGui_PushStyleVarVec2(ImGuiStyleVar_WindowPadding, padding); + + if (ImGui_Begin("TopBarOverlay", NULL, flags)) + { + ImGui_Text("Game Mode: %s", CStr(GetGameModeName(gameState->Mode))); + + float framerate = ImGuiIO_GetFramerate(); + char fps_text[32]; + snprintf(fps_text, sizeof(fps_text), "FPS: %.1f (%.2f ms)", (double)framerate, (double)(1000.0f / framerate)); + float text_width = ImGui_CalcTextSize(fps_text, NULL).x; + ImGui_SameLine(viewportSize.x - text_width - 15.0f, -1.0f); // 15px right padding + // Render FPS text + ImGui_Text("%s", fps_text); + } + ImGui_End(); + + ImGui_PopStyleVar(1); + ImGui_PopStyleColor(1); +} +#endif + diff --git a/Game/Debug/DebugTopBar.cpp b/Game/Debug/DebugTopBar.cpp deleted file mode 100644 index 23a1102..0000000 --- a/Game/Debug/DebugTopBar.cpp +++ /dev/null @@ -1,49 +0,0 @@ -#include - -#include -#include - -namespace -{ - String GetGameModeName(GameMode gameMode) - { - switch (gameMode) - { - case GameMode::Editor: return WrapString("Editor"); - case GameMode::Play: return WrapString("Play"); - case GameMode::Debug: return WrapString("Debug"); - default: return WrapString("Unknown ERROR"); - } - } -} // namespace - -void DrawTopBar() -{ - auto* gameState = GetGameState(); - - ImGuiViewport* viewport = ImGui::GetMainViewport(); - ImGui::SetNextWindowPos(viewport->Pos); - ImGui::SetNextWindowSize(ImVec2(viewport->Size.x, 10.0f)); - - ImGuiWindowFlags flags = ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoSavedSettings | - ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoNav; - - ImGui::PushStyleColor(ImGuiCol_WindowBg, ImVec4(0.0f, 0.0f, 0.0f, 0.6f)); - ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(10.0f, 5.0f)); - - if (ImGui::Begin("TopBarOverlay", nullptr, flags)) - { - ImGui::Text("Game Mode: %s", CStr(GetGameModeName(gameState->Mode))); - - char fps_text[32]; - snprintf(fps_text, sizeof(fps_text), "FPS: %.1f (%.2f ms)", ImGui::GetIO().Framerate, 1000.0f / ImGui::GetIO().Framerate); - float text_width = ImGui::CalcTextSize(fps_text).x; - ImGui::SameLine(viewport->Size.x - text_width - 15.0f); // 15px right padding - // Render FPS text - ImGui::Text("%s", fps_text); - } - ImGui::End(); - - ImGui::PopStyleVar(); - ImGui::PopStyleColor(); -} diff --git a/Game/Debug/DebugTopBar.h b/Game/Debug/DebugTopBar.h index 64085ac..cc7b7b9 100644 --- a/Game/Debug/DebugTopBar.h +++ b/Game/Debug/DebugTopBar.h @@ -1,5 +1,7 @@ #pragma once +#include + #if JULIET_DEBUG -void DrawTopBar(); +void DrawTopBar(void); #endif diff --git a/Game/Entity/Entity.c b/Game/Entity/Entity.c new file mode 100644 index 0000000..f4a2c21 --- /dev/null +++ b/Game/Entity/Entity.c @@ -0,0 +1,115 @@ +#include + +#include +#include +#include + +void serialize_entity(Archive* ar, Entity* entity) +{ + Assert(ar != NULL); + Assert(entity != NULL); + + // Entity fields + serialize_class(ar, ClassKind(Entity), entity); + + // Derived fields + if (entity->derived_kind != NULL && entity->derived != NULL) + { + serialize_class(ar, entity->derived_kind, entity->derived); + } +} + +internal void init_Entity(void* payload) +{ + Assert(payload != NULL); + Entity* entity = (Entity*)payload; + MemZeroStruct(entity); +} + +internal void serialize_Entity(Archive* ar, uint16 version, void* payload) +{ + (void)version; + Assert(ar != NULL); + Assert(payload != NULL); + Entity* entity = (Entity*)payload; + SERIALIZE_U64(ar, id, &entity->ID); + SERIALIZE_VEC4(ar, position, &entity->position); +} + +DEFINE_CLASS_VERSIONED(Entity, 1, NULL) + +String format_entity_id(Arena* arena, EntityID entity_id) +{ + Assert(arena != NULL); + + // Format: + // U = UserID + // LC = Local Entity Counter + // UU_LCLCLCLCLCLCLC + uint8 user_id = get_user_id(entity_id); + uint64 counter = get_local_counter(entity_id); + + const size_t kBufferSize = 18; + char* buffer = ArenaPushArray(arena, char, kBufferSize); + Assert(buffer != NULL); + + juliet_snprintf(buffer, kBufferSize, "%02X_%014llX", (unsigned int)user_id, (unsigned long long)counter); + String result = { .Str = buffer, .Size = kBufferSize - 1 }; + return result; +} + +bool8 parse_entity_id(String str, EntityID* out_id) +{ + Assert(out_id != NULL); + + bool8 result = false; + *out_id = kInvalid_entity_id; + + if (!(str.Size != 17 || str.Str == NULL || str.Str[2] != '_')) + { + char user_hex[3] = { str.Str[0], str.Str[1], '\0' }; + char* end = user_hex; + uint8 user_id = (uint8)strtoul(user_hex, &end, 16); + if (end != user_hex && user_id != kInvalid_user_id) + { + char* counter_hex = str.Str + 3; + end = counter_hex; + uint64 counter = strtoull(counter_hex, &end, 16); + if (end != counter_hex && counter < kEntityID_user_id_mask) + { + *out_id = make_entity_id(user_id, counter); + result = true; + } + } + } + return result; +} + +const Class* resolve_entity_class(uint8 kind, uint32 crc) +{ + Assert(kind <= ENTITY(Count)); + + const Class* class_ptr = kEntity_type_class_ptr[kind]; + Assert(class_ptr != NULL); + Assert(class_get_crc(class_ptr) == crc); + + return class_ptr; +} + +const Class* find_class_by_name(String name) +{ + Assert(IsValidString(name)); + + const Class* result = NULL; + const uint32 name_crc = crc32_bytes(name.Str, name.Size); + for (uint8 kind = 0; kind < ENTITY(Count); ++kind) + { + const Class* class_ptr = resolve_entity_class(kind, name_crc); + if (class_ptr != NULL) + { + result = class_ptr; + break; + } + } + return result; +} diff --git a/Game/Entity/Entity.cpp b/Game/Entity/Entity.cpp deleted file mode 100644 index 9bd0a1e..0000000 --- a/Game/Entity/Entity.cpp +++ /dev/null @@ -1,92 +0,0 @@ -#include - -#include - -void serialize(Archive& ar, NonNullPtr entity) -{ - // Entity fields - serialize(ar, Entity::kind, entity.Get()); - - // Derived fields - if (entity->derived_kind != nullptr && entity->derived != nullptr) - { - serialize(ar, entity->derived_kind, entity->derived); - } -} - -DEFINE_CLASS_VERSIONED(Entity, 1, nullptr) -internal void serialize(Archive& ar, uint16 /*version*/, Entity& entity) -{ - SERIALIZE(ar, id, entity.ID); - SERIALIZE(ar, position, entity.position); -} - -String format_entity_id(NonNullPtr arena, EntityID entity_id) -{ - // Format: - // U = UserID - // LC = Local Entity Counter - // UU_LCLCLCLCLCLCLC - uint8 user_id = get_user_id(entity_id); - uint64 counter = get_local_counter(entity_id); - - constexpr size_t kBufferSize = 18; - char* buffer = ArenaPushArray(arena, kBufferSize); - Assert(buffer); - - juliet_snprintf(buffer, kBufferSize, "%02X_%014llX", (unsigned int)user_id, counter); - return { buffer, kBufferSize - 1 }; -} - -bool parse_entity_id(String str, EntityID& out_id) -{ - bool result = false; - out_id = kInvalid_entity_id; - - if (!(str.Size != 17 || str.Str == nullptr || str.Str[2] != '_')) - { - char user_hex[3]{ str.Str[0], str.Str[1], '\0' }; - char* end = user_hex; - uint8 user_id = strtoul(user_hex, &end, 16); - if (end != user_hex && user_id != kInvalid_user_id) - { - char* counter_hex = str.Str + 3; - end = counter_hex; - uint64 counter = strtoull(counter_hex, &end, 16); - if (end != counter_hex && counter < kEntityID_user_id_mask) - { - out_id = make_entity_id(user_id, counter); - result = true; - } - } - } - return result; -} - -const Class* resolve_entity_class(uint8 kind, uint32 crc) -{ - Assert(kind <= ENTITY(Count)); - - NonNullPtr class_ptr = kEntity_type_class_ptr[kind]; - Assert(class_ptr->CRC == crc); - - return class_ptr.Get(); -} - -const Class* find_class_by_name(String name) -{ - Assert(IsValid(name)); - - const Class* result = nullptr; - const uint32 name_crc = crc32(name.Str, name.Size); - for (uint8 kind = 0; kind < ENTITY(Count); ++kind) - { - const Class* class_ptr = resolve_entity_class(kind, name_crc); - if (class_ptr != nullptr) - { - result = class_ptr; - break; - } - } - return result; -} diff --git a/Game/Entity/Entity.h b/Game/Entity/Entity.h index 5e1bb9a..4634b05 100644 --- a/Game/Entity/Entity.h +++ b/Game/Entity/Entity.h @@ -6,98 +6,95 @@ #include #include -struct Entity final +typedef struct Entity Entity; +struct Entity { - DECLARE_CLASS() - - EntityID ID = 0; - const Class* derived_kind = nullptr; - DerivedType derived = nullptr; - Vector4 position = {}; - bool is_dirty = false; + EntityID ID; + const Class* derived_kind; + DerivedType derived; + Vector4 position; + bool8 is_dirty; }; +DECLARE_CLASS(Entity) -// Can reinterpret cast to this to have the offset of Base and Kind for any entity +// Can cast to this to have the offset of base for any entity +typedef struct EntityTemplate EntityTemplate; struct EntityTemplate { - DECLARE_ENTITY(); + DECLARE_ENTITY() }; -// -template -concept EntityConcept = requires(EntityType entity) { - { EntityType::kind } -> std::convertible_to; - requires std::same_as; -}; - -inline constexpr EntityID make_entity_id(uint8 user_id, uint64 local_counter) +static inline EntityID make_entity_id(uint8 user_id, uint64 local_counter) { Assert(user_id != kInvalid_user_id); Assert((local_counter & kEntityID_user_id_mask) == kInvalid_entity_id); - EntityID result = kInvalid_user_id; - result = ((EntityID)user_id << kEntityID_user_id_shift) | (local_counter & kEntityID_user_id_mask); + EntityID result = ((EntityID)user_id << kEntityID_user_id_shift) | (local_counter & kEntityID_user_id_mask); return result; } -inline constexpr uint8 get_user_id(EntityID entity_id) +static inline uint8 get_user_id(EntityID entity_id) { - return (((uint8)entity_id & kEntityID_user_id_mask) << kEntityID_user_id_shift); + return (uint8)((entity_id & kEntityID_user_id_mask) >> kEntityID_user_id_shift); } -inline constexpr uint64 get_local_counter(EntityID entity_id) +static inline uint64 get_local_counter(EntityID entity_id) { - return (uint64)entity_id & kEntityID_user_id_mask; + return (uint64)entity_id & ~kEntityID_user_id_mask; } -inline constexpr bool is_entity_id_valid(EntityID entity_id) +static inline bool8 is_entity_id_valid(EntityID entity_id) { - bool result = entity_id != kInvalid_entity_id; + bool8 result = (entity_id != kInvalid_entity_id); return result; } -template - requires EntityConcept -[[nodiscard]] bool IsA(const Entity* entity) +static inline bool8 IsEntityA(const Entity* entity, const Class* kind) { - Assert(entity != nullptr); - return entity->derived_kind == EntityType::kind; + Assert(entity != NULL); + return entity->derived_kind == kind; } -template - requires EntityConcept -[[nodiscard]] EntityType* MakeEntity(EntityManager& manager, float x, float y, float z) -{ - Entity* base_ptr = allocate_entity(manager, EntityType::kind); - Assert(base_ptr); +#define IsEntityOfType(entity_ptr, EntityType) IsEntityA((entity_ptr), ClassKind(EntityType)) - base_ptr->ID = EntityManager::ID++; +static inline void* make_entity_by_class(EntityManager* manager, const Class* kind, float x, float y, float z) +{ + Assert(manager != NULL); + Assert(kind != NULL); + + Entity* base_ptr = allocate_entity(manager, kind); + Assert(base_ptr != NULL); + + base_ptr->ID = g_entity_manager_id++; base_ptr->position.x = x; base_ptr->position.y = y; base_ptr->position.z = z; base_ptr->position.w = 1.0f; - return (EntityType*)base_ptr->derived; + return base_ptr->derived; } -template - requires EntityConcept -[[nodiscard]] EntityType* DownCast(Entity* entity) +#define MakeEntity(EntityType, manager_ptr, x, y, z) \ + ((EntityType*)make_entity_by_class((manager_ptr), ClassKind(EntityType), (x), (y), (z))) + +static inline void* down_cast_entity(Entity* entity, const Class* kind) { - Assert(entity != nullptr); - Assert(IsA(entity)); - return static_cast(entity->derived); + Assert(entity != NULL); + Assert(IsEntityA(entity, kind)); + return entity->derived; } -void serialize(Archive& ar, NonNullPtr entity); +#define DownCastEntity(EntityType, entity_ptr) ((EntityType*)down_cast_entity((entity_ptr), ClassKind(EntityType))) -JULIET_API uint8 get_local_user_id(); +void serialize_entity(Archive* ar, Entity* entity); -JULIET_API String format_entity_id(NonNullPtr arena, EntityID id); +JULIET_API uint8 get_local_user_id(void); -JULIET_API bool parse_entity_id(String str, EntityID& outId); +JULIET_API String format_entity_id(Arena* arena, EntityID id); -[[nodiscard]] const Class* find_class_by_name(String name); +JULIET_API bool8 parse_entity_id(String str, EntityID* outId); -[[nodiscard]] const Class* resolve_entity_class(uint8 kind, uint32 crc); +const Class* find_class_by_name(String name); + +const Class* resolve_entity_class(uint8 kind, uint32 crc); diff --git a/Game/Entity/EntityManager.c b/Game/Entity/EntityManager.c new file mode 100644 index 0000000..a499af0 --- /dev/null +++ b/Game/Entity/EntityManager.c @@ -0,0 +1,190 @@ +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +EntityID g_entity_manager_id = 0; + +void InitEntityManager(World* world) +{ + Assert(world != NULL); + + EntityManager* newManager = ArenaPushStruct(world->WorldArena, EntityManager); + newManager->next_local_counter = 1ULL; + world->EntityManager = newManager; + + VectorArenaCreate(&newManager->Entities, Entity, world->WorldArena, 100000 JULIET_DEBUG_PARAM("Entities")); + + ArenaParams by_type_params = { .ReserveSize = Kilobytes(1), + .CommitSize = Kilobytes(1), + .Name = "" JULIET_DEBUG_ONLY(, .DoNotReserveMore = true) }; + for (uint8 i = 0; i < ENTITY(Count); ++i) + { + by_type_params.Name = kEntity_type_names[i]; + newManager->by_type[i].arena = ArenaAllocate(by_type_params); + newManager->by_type[i].array = NULL; + newManager->by_type[i].count = 0; + } +} + +void ShutdownEntityManager(void) +{ + EntityManager* manager = GetEntityManager(); + for (uint8 i = 0; i < ENTITY(Count); ++i) + { + ArenaRelease(manager->by_type[i].arena); + } + + vector_arena_destroy(&manager->Entities); +} + +EntityManager* GetEntityManager(void) +{ + EntityManager* entityManager = GetGameState()->World->EntityManager; + Assert(entityManager != NULL); + return entityManager; +} + +EntityID generate_next_entity_id(EntityManager* manager) +{ + Assert(manager != NULL); + + UserID user = get_local_user_id(); + Assert(user != kInvalid_user_id); + Assert(manager->next_local_counter != kEntityID_user_id_mask); + + EntityID new_id = make_entity_id(user, manager->next_local_counter); + manager->next_local_counter += 1ULL; + return new_id; +} + +EntityTemplate* RegisterEntity(EntityManager* manager, Entity* base, DerivedType entity) +{ + Assert(manager != NULL); + Assert(base != NULL); + + base->ID = g_entity_manager_id++; + base->derived = entity; + + VectorArenaPushPtr(Entity, &manager->Entities, base); + + EntityTemplate* ptr = (EntityTemplate*)ArenaPushSize( + manager->by_type[base->derived_kind->kind].arena, base->derived_kind->size_of, base->derived_kind->alignment, + false JULIET_DEBUG_PARAM(kEntity_type_names[base->derived_kind->kind])); + MemCopy(ptr, entity, base->derived_kind->size_of); + manager->by_type[base->derived_kind->kind].count += 1; + + ptr->base = VectorArenaBack(Entity, &manager->Entities); + + if (manager->by_type[base->derived_kind->kind].array == NULL) + { + manager->by_type[base->derived_kind->kind].array = ptr; + } + + return ptr; +} + +Entity* allocate_entity(EntityManager* manager, const Class* derived_type_class) +{ + Assert(manager != NULL); + Assert(derived_type_class != NULL); + Assert(derived_type_class->kind < ENTITY(Count)); + Assert(derived_type_class->size_of >= sizeof(EntityTemplate)); + Assert(derived_type_class->alignment > 0); + Assert(derived_type_class->initialize_fct != NULL); + + Entity base_template = { 0 }; + base_template.derived_kind = derived_type_class; + base_template.is_dirty = true; + + VectorArenaPushPtr(Entity, &manager->Entities, &base_template); + Entity* base_ptr = VectorArenaBack(Entity, &manager->Entities); + Assert(base_ptr != NULL); + + typed_entity_array* typed_array = &manager->by_type[derived_type_class->kind]; + Assert(typed_array->arena != NULL); + + void* derived = ArenaPushSize(typed_array->arena, derived_type_class->size_of, derived_type_class->alignment, + false JULIET_DEBUG_PARAM(kEntity_type_names[derived_type_class->kind])); + Assert(derived != NULL); + derived_type_class->initialize_fct(derived); + + EntityTemplate* derived_template = (EntityTemplate*)derived; + + base_ptr->derived = derived; + derived_template->base = base_ptr; + + if (typed_array->array == NULL) + { + typed_array->array = derived_template; + } + typed_array->count += 1; + + return base_ptr; +} + +void UpdateEntityManager(EntityManager* manager) +{ + Assert(manager != NULL); + + // Todo : inert by definition dont move, but this is for test + typed_entity_array* by_type = &manager->by_type[ENTITY(Inert)]; + for (index_t i = 0; i < by_type->count; ++i) + { + Inert* inert = ((Inert*)by_type->array) + i; + if (inert->MeshInstance != indexMax) + { + Matrix transform = + MatrixTranslation(inert->base->position.x, inert->base->position.y, inert->base->position.z); + SetMeshInstanceTransform(inert->MeshInstance, &transform); + } + } +} + +Entity* deserialize_entity(Archive* ar, EntityManager* manager) +{ + Assert(ar != NULL); + Assert(manager != NULL); + Assert(ar->loading); + + String class_name = { 0 }; + SERIALIZE_STR(ar, Class, &class_name); + + const Class* class_ptr = find_class_by_name(class_name); + Assert(class_ptr != NULL); + + Entity* entity_base = allocate_entity(manager, class_ptr); + Assert(entity_base != NULL); + + serialize_entity(ar, entity_base); + + if (entity_base->ID >= g_entity_manager_id) + { + g_entity_manager_id = entity_base->ID + 1; + } + + entity_base->is_dirty = false; + + return entity_base; +} + +void update_local_counter(EntityManager* manager, EntityID entity_id) +{ + Assert(manager != NULL); + + uint8 user_id = get_local_user_id(); + if (get_user_id(entity_id) == user_id) + { + uint64 counter = get_local_counter(entity_id); + if (counter >= manager->next_local_counter) + { + manager->next_local_counter = counter + 1ULL; + } + } +} diff --git a/Game/Entity/EntityManager.cpp b/Game/Entity/EntityManager.cpp deleted file mode 100644 index 290a417..0000000 --- a/Game/Entity/EntityManager.cpp +++ /dev/null @@ -1,170 +0,0 @@ -#include - -#include -#include -#include -#include -#include -#include -#include -#include "Engine/user.h" - -EntityID EntityManager::ID = 0; - -void InitEntityManager(NonNullPtr world) -{ - EntityManager* newManager = ArenaPushStruct(world->WorldArena); - world->EntityManager = newManager; - - newManager->Entities.Create(world->WorldArena JULIET_DEBUG_PARAM("Entities")); - - ArenaParams by_type_params{ .ReserveSize = Kilobytes(1), - .CommitSize = Kilobytes(1), - .Name = "" JULIET_DEBUG_ONLY(, .CanReserveMore = false) }; - for (uint8 i = 0; i < ENTITY(Count); ++i) - { - by_type_params.Name = kEntity_type_names[i]; - newManager->by_type[i].arena = ArenaAllocate(by_type_params); - newManager->by_type[i].array = nullptr; - } -} - -void ShutdownEntityManager() -{ - auto& manager = GetEntityManager(); - for (typed_entity_array& type : manager.by_type) - { - ArenaRelease(type.arena); - } - - manager.Entities.Destroy(); -} - -EntityManager& GetEntityManager() -{ - NonNullPtr entityManager = GetGameState()->World->EntityManager; - return *entityManager; -} - -EntityID generate_next_entity_id(EntityManager& manager) -{ - UserID user = get_local_user_id(); - Assert(user != kInvalid_user_id); - Assert(manager.next_local_counter != kEntityID_user_id_mask); - - EntityID new_id = make_entity_id(user, manager.next_local_counter); - manager.next_local_counter += 1ULL; - return new_id; -} - -EntityTemplate* RegisterEntity(EntityManager& manager, Entity* base, DerivedType entity) -{ - base->ID = EntityManager::ID++; - base->derived = entity; - - manager.Entities.PushBack(*base); - - auto* ptr = (EntityTemplate*)ArenaPushSize(manager.by_type[base->derived_kind->kind].arena, - base->derived_kind->size_of, base->derived_kind->alignment, - false JULIET_DEBUG_PARAM(kEntity_type_names[base->derived_kind->kind])); - MemCopy(ptr, entity, base->derived_kind->size_of); - manager.by_type[base->derived_kind->kind].count += 1; - - ptr->base = manager.Entities.Back(); - - if (manager.by_type[base->derived_kind->kind].array == nullptr) - { - manager.by_type[base->derived_kind->kind].array = ptr; - } - - return ptr; -} - -Entity* allocate_entity(EntityManager& manager, NonNullPtr derived_type_class) -{ - Assert(derived_type_class->kind < ENTITY(Count)); - Assert(derived_type_class->size_of >= sizeof(EntityTemplate)); - Assert(derived_type_class->alignment > 0); - Assert(derived_type_class->initialize_fct); - - Entity base_template = {}; - base_template.derived_kind = derived_type_class; - base_template.is_dirty = true; - - manager.Entities.PushBack(base_template); - Entity* base_ptr = manager.Entities.Back(); - Assert(base_ptr); - - typed_entity_array& typed_array = manager.by_type[derived_type_class->kind]; - Assert(typed_array.arena); - - void* derived = ArenaPushSize(typed_array.arena, derived_type_class->size_of, derived_type_class->alignment, - false JULIET_DEBUG_PARAM(kEntity_type_names[derived_type_class->kind])); - Assert(derived); - derived_type_class->initialize_fct(derived); - - auto* derived_template = (EntityTemplate*)derived; - - base_ptr->derived = derived; - derived_template->base = base_ptr; - - if (typed_array.array == nullptr) - { - typed_array.array = derived_template; - } - typed_array.count += 1; - - return base_ptr; -} - -void UpdateEntityManager(EntityManager& manager) -{ - // Todo : inert by definition dont move, but this is for test - auto& by_type = manager.by_type[ENTITY(Inert)]; - for (index_t i = 0; i < by_type.count; ++i) - { - Inert* inert = reinterpret_cast(by_type.array) + i; - if (inert->MeshInstance != indexMax) - { - SetMeshInstanceTransform(inert->MeshInstance, - MatrixTranslation(inert->base->position.x, inert->base->position.y, - inert->base->position.z)); - } - } -} - -Entity* deserialize_entity(Archive& ar, EntityManager& manager) -{ - Assert(ar.loading); - - String class_name; - SERIALIZE(ar, Class, class_name); - - NonNullPtr class_ptr = find_class_by_name(class_name); - - NonNullPtr entity_base = allocate_entity(manager, class_ptr); - - serialize(ar, entity_base); - - if (entity_base->ID >= EntityManager::ID) - { - EntityManager::ID = entity_base->ID + 1; - } - - entity_base->is_dirty = false; - - return entity_base; -} - -void update_local_counter(EntityManager& manager, EntityID entity_id) -{ - uint8 user_id = get_local_user_id(); - if (get_user_id(entity_id) == user_id) - { - uint64 counter = get_local_counter(entity_id); - if (counter >= manager.next_local_counter) - { - manager.next_local_counter = counter + 1ULL; - } - } -} diff --git a/Game/Entity/EntityManager.h b/Game/Entity/EntityManager.h index 8034b15..0226600 100644 --- a/Game/Entity/EntityManager.h +++ b/Game/Entity/EntityManager.h @@ -3,11 +3,13 @@ #include #include -struct World; -struct EntityTemplate; -struct Entity; -struct Class; +typedef struct World World; +typedef struct EntityTemplate EntityTemplate; +typedef struct Entity Entity; +typedef struct Class Class; +typedef struct Archive Archive; +typedef struct typed_entity_array typed_entity_array; struct typed_entity_array { Arena* arena; @@ -15,22 +17,24 @@ struct typed_entity_array size_t count; }; +typedef struct EntityManager EntityManager; struct EntityManager { - static EntityID ID; - uint64 next_local_counter = 1ULL; + uint64 next_local_counter; // TODO: Should be a pool - VectorArena Entities; + VectorArena Entities; - typed_entity_array by_type[ENTITY(Count)]; + typed_entity_array by_type[Entity_Type_Count]; }; -void InitEntityManager(NonNullPtr world); -void ShutdownEntityManager(); -EntityManager& GetEntityManager(); -EntityTemplate* RegisterEntity(EntityManager& manager, Entity* base, DerivedType entity); -[[nodiscard]] Entity* allocate_entity(EntityManager& manager, NonNullPtr derived_type_class); -void UpdateEntityManager(EntityManager& manager); -[[nodiscard]] Entity* deserialize_entity(Archive& archive, EntityManager& manager); -void update_local_counter(EntityManager& manager, EntityID entity_id); +extern EntityID g_entity_manager_id; + +void InitEntityManager(World* world); +void ShutdownEntityManager(void); +EntityManager* GetEntityManager(void); +EntityTemplate* RegisterEntity(EntityManager* manager, Entity* base, DerivedType entity); +Entity* allocate_entity(EntityManager* manager, const Class* derived_type_class); +void UpdateEntityManager(EntityManager* manager); +Entity* deserialize_entity(Archive* archive, EntityManager* manager); +void update_local_counter(EntityManager* manager, EntityID entity_id); diff --git a/Game/Entity/entity_common.cpp b/Game/Entity/entity_common.c similarity index 67% rename from Game/Entity/entity_common.cpp rename to Game/Entity/entity_common.c index 55a5c9c..685ac16 100644 --- a/Game/Entity/entity_common.cpp +++ b/Game/Entity/entity_common.c @@ -5,17 +5,16 @@ // clang-format off #define AS_STR(name) #name - const char* kEntity_type_names[] = { +const char* kEntity_type_names[] = { ENTITY_TYPE_LIST(AS_STR) "Count" }; #undef AS_STR -#define AS_CLASS(name) name::kind -const Class* kEntity_type_class_ptr[] -{ +#define AS_CLASS(name) &class_kind_##name +const Class* kEntity_type_class_ptr[] = { ENTITY_TYPE_LIST(AS_CLASS) - nullptr + NULL }; #undef AS_CLASS // clang-format on diff --git a/Game/Entity/entity_common.h b/Game/Entity/entity_common.h index f829cdd..96df640 100644 --- a/Game/Entity/entity_common.h +++ b/Game/Entity/entity_common.h @@ -1,46 +1,48 @@ #pragma once -#include #include -struct Class; -using DerivedType = void*; -using EntityID = uint64_t; +typedef void* DerivedType; +typedef uint64 EntityID; -constexpr uint8 kInvalid_user_id = 0U; -constexpr EntityID kInvalid_entity_id = 0ULL; - -constexpr EntityID kEntityID_user_id_shift = 56ULL; -constexpr EntityID kEntityID_user_id_mask = 0xFF00'0000'0000'0000ULL; +#define kInvalid_user_id ((uint8)0U) +#define kInvalid_entity_id ((EntityID)0ULL) +#define kEntityID_user_id_shift ((EntityID)56ULL) +#define kEntityID_user_id_mask ((EntityID)0xFF00000000000000ULL) // clang-format off #define ENTITY_TYPE_LIST(X) X(Inert), -#define AS_ENUM(name) name -enum class Entity_Type : uint8 +typedef uint8 Entity_Type; +#define AS_ENUM(name) Entity_Type_##name +enum { ENTITY_TYPE_LIST(AS_ENUM) - Count + Entity_Type_Count }; #undef AS_ENUM -extern const char* kEntity_type_names[]; +extern const char* kEntity_type_names[]; extern const Class* kEntity_type_class_ptr[]; -#define ENTITY(kind) ToUnderlying(Entity_Type::kind) +#define ENTITY(kind) ((uint8)Entity_Type_##kind) // clang-format on -struct Entity; +typedef struct Entity Entity; -#define DECLARE_ENTITY() \ - Entity* base; \ - DECLARE_CLASS() +#define DECLARE_ENTITY() Entity* base; -#define DEFINE_ENTITY_VERSIONED(entity, version) \ - constexpr Class entityKind##entity = \ - MakeClass(ConstString(#entity), (uint8)Entity_Type::entity, (version), &class_kind_Entity, sizeof(entity), \ - alignof(entity), (&initialize_thunk), (&serialize_thunk)); \ - Class* entity::kind = const_cast(&entityKind##entity); +#define DEFINE_ENTITY_VERSIONED(entity, version_num) \ + const Class class_kind_##entity = { \ + .Name = ConstString(#entity), \ + .kind = (uint8)Entity_Type_##entity, \ + .version = (version_num), \ + .base_class = &class_kind_Entity, \ + .initialize_fct = init_##entity, \ + .serialize_fct = serialize_##entity, \ + .size_of = sizeof(entity), \ + .alignment = AlignOf(entity) \ + }; -// Note: Needed by every classes see define above +// Note: Needed by every entity class (see define above) extern const Class class_kind_Entity; diff --git a/Game/Entity/entity_types.c b/Game/Entity/entity_types.c new file mode 100644 index 0000000..b109085 --- /dev/null +++ b/Game/Entity/entity_types.c @@ -0,0 +1,22 @@ +#include + +#include + +internal void init_Inert(void* payload) +{ + Assert(payload != NULL); + Inert* inert = (Inert*)payload; + inert->base = NULL; + inert->MeshInstance = indexMax; +} + +internal void serialize_Inert(Archive* ar, uint16 version, void* payload) +{ + (void)version; + Assert(ar != NULL); + Assert(payload != NULL); + Inert* inert = (Inert*)payload; + SERIALIZE_U64(ar, MeshInstance, &inert->MeshInstance); +} + +DEFINE_ENTITY_VERSIONED(Inert, 1) diff --git a/Game/Entity/entity_types.cpp b/Game/Entity/entity_types.cpp deleted file mode 100644 index bbf99e8..0000000 --- a/Game/Entity/entity_types.cpp +++ /dev/null @@ -1,9 +0,0 @@ -#include - -#include - -DEFINE_ENTITY_VERSIONED(Inert, 1) -internal void serialize(Archive& ar, uint16 /*version*/, Inert& inert) -{ - SERIALIZE(ar, MeshInstance, inert.MeshInstance); -} diff --git a/Game/Entity/entity_types.h b/Game/Entity/entity_types.h index 97bc225..5318ba3 100644 --- a/Game/Entity/entity_types.h +++ b/Game/Entity/entity_types.h @@ -2,9 +2,11 @@ #include +typedef struct Inert Inert; struct Inert { DECLARE_ENTITY() - index_t MeshInstance = indexMax; + index_t MeshInstance; }; +DECLARE_CLASS(Inert) diff --git a/Game/UnitTest/WorldUnitTest.c b/Game/UnitTest/WorldUnitTest.c new file mode 100644 index 0000000..4019e35 --- /dev/null +++ b/Game/UnitTest/WorldUnitTest.c @@ -0,0 +1,171 @@ +#include + +#if JULIET_DEBUG + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +internal void TestEntityAllocationAndWiring(void) +{ + Log(LogLevel_Message, LogCategory_Game, "[UnitTest] Running TestEntityAllocationAndWiring..."); + + TempArena tempArena = scratch_begin(NULL, 0); + + GameState* gameState = GetGameState(); + World testWorld = { 0 }; + gameState->World = &testWorld; + InitWorld(&testWorld, tempArena.Arena); + + InitEntityManager(&testWorld); + EntityManager* manager = testWorld.EntityManager; + + // 1. Allocate Inert Entity via allocate_entity + Entity* base_entity = allocate_entity(manager, ClassKind(Inert)); + Assert(base_entity != NULL); + Assert(base_entity->ID == 0); // Pure memory allocator leaves ID unassigned (0) until MakeEntity or deserialization + base_entity->ID = ++g_entity_manager_id; + Assert(base_entity->ID > 0); + Assert(base_entity->derived_kind == ClassKind(Inert)); + Assert(base_entity->derived != NULL); + Assert(base_entity->is_dirty == true); + + // 2. Validate mutual back-pointer wiring + EntityTemplate* derived = (EntityTemplate*)base_entity->derived; + Assert(derived->base == base_entity); + + // 3. DownCast verification + Inert* inert = DownCastEntity(Inert, base_entity); + Assert(inert != NULL); + Assert(inert->base == base_entity); + + // 4. Validate typed array tracking + typed_entity_array* inert_array = &manager->by_type[ENTITY(Inert)]; + Assert(inert_array->count == 1); + Assert(inert_array->array == derived); + + ShutdownEntityManager(); + ShutdownWorld(&testWorld); + + gameState->World = NULL; + + scratch_end(tempArena); + + Log(LogLevel_Message, LogCategory_Game, "[UnitTest] PASSED: TestEntityAllocationAndWiring"); +} + +internal void TestInPlaceDeserialization(void) +{ + Log(LogLevel_Message, LogCategory_Game, "[UnitTest] Running TestInPlaceDeserialization..."); + TempArena tempArena = scratch_begin(NULL, 0); + + GameState* gameState = GetGameState(); + World testWorld = { 0 }; + gameState->World = &testWorld; + InitWorld(&testWorld, tempArena.Arena); + + InitEntityManager(&testWorld); + EntityManager* manager = testWorld.EntityManager; + // 1. In-memory .jasset text fixture (no streams or files needed) + String asset_content = ConstString("; Class\n" + "Inert\n" + "; version\n" + "1\n" + "; class_version\n" + "1\n" + "; id\n" + "42\n" + "; position\n" + "12.5 -44.0 108.2 1.0\n" + "; MeshInstance\n" + "42\n"); + ByteBuffer buffer = { .Data = (Byte*)asset_content.Str, .Size = asset_content.Size }; + // 2. Tokenize into Archive + Archive load_ar = { 0 }; + load_ar.arena = tempArena.Arena; + load_ar.loading = true; + load_ar.base = tokenize_archive(tempArena.Arena, buffer); + // 3. Deserialize in-place + Entity* loaded_base = deserialize_entity(&load_ar, manager); + // 4. Verify in-place allocations and values + Assert(loaded_base != NULL); + Assert(loaded_base->ID == 42); + Assert(g_entity_manager_id > 42); // Generator counter advanced past loaded ID + Assert(loaded_base->position.x == 12.5f); + Assert(loaded_base->position.y == -44.0f); + Assert(loaded_base->position.z == 108.2f); + Assert(loaded_base->is_dirty == false); + Inert* loaded_inert = DownCastEntity(Inert, loaded_base); + Assert(loaded_inert != NULL); + Assert(loaded_inert->base == loaded_base); + Assert(loaded_inert->MeshInstance == 42); + ShutdownEntityManager(); + ShutdownWorld(&testWorld); + + gameState->World = NULL; + + scratch_end(tempArena); + Log(LogLevel_Message, LogCategory_Game, "[UnitTest] PASSED: TestInPlaceDeserialization"); +} + +internal void TestDirtyTrackingLifecycle(void) +{ + Log(LogLevel_Message, LogCategory_Game, "[UnitTest] Running TestDirtyTrackingLifecycle..."); + + TempArena tempArena = scratch_begin(NULL, 0); + + GameState* gameState = GetGameState(); + World testWorld = { 0 }; + gameState->World = &testWorld; + InitWorld(&testWorld, tempArena.Arena); + + InitEntityManager(&testWorld); + EntityManager* manager = testWorld.EntityManager; + + Entity* entity = allocate_entity(manager, ClassKind(Inert)); + Assert(entity->is_dirty == true); + + // TODO : proper save and mutation + // Simulate save + entity->is_dirty = false; + Assert(entity->is_dirty == false); + + // Simulate mutation + entity->position.x += 1.0f; + entity->is_dirty = true; + Assert(entity->is_dirty == true); + + ShutdownEntityManager(); + ShutdownWorld(&testWorld); + + gameState->World = NULL; + + scratch_end(tempArena); + Log(LogLevel_Message, LogCategory_Game, "[UnitTest] PASSED: TestDirtyTrackingLifecycle"); +} + +void UnitTest_WorldUnitTest(void) +{ + Log(LogLevel_Message, LogCategory_Game, "=================================================="); + Log(LogLevel_Message, LogCategory_Game, "Starting Entity Allocation & Lifecycle Unit Tests"); + Log(LogLevel_Message, LogCategory_Game, "=================================================="); + + TestEntityAllocationAndWiring(); + TestInPlaceDeserialization(); + // TestSwapAndPopPointerFixup(); // Deferred to Entity_Removal_Brainstorm.md + TestDirtyTrackingLifecycle(); + + Log(LogLevel_Message, LogCategory_Game, "=================================================="); + Log(LogLevel_Message, LogCategory_Game, "All Entity Lifecycle Unit Tests PASSED Successfully"); + Log(LogLevel_Message, LogCategory_Game, "=================================================="); +} + +#endif diff --git a/Game/UnitTest/WorldUnitTest.cpp b/Game/UnitTest/WorldUnitTest.cpp deleted file mode 100644 index 21d1cdc..0000000 --- a/Game/UnitTest/WorldUnitTest.cpp +++ /dev/null @@ -1,173 +0,0 @@ -#include - -#if JULIET_DEBUG - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace UnitTest -{ - internal void TestEntityAllocationAndWiring() - { - Log(LogLevel::Message, LogCategory::Game, "[UnitTest] Running TestEntityAllocationAndWiring..."); - - TempArena tempArena = scratch_begin(nullptr, 0); - - GameState* gameState = GetGameState(); - World testWorld{}; - gameState->World = &testWorld; - InitWorld(&testWorld, tempArena.Arena); - - InitEntityManager(&testWorld); - EntityManager& manager = *testWorld.EntityManager; - - // 1. Allocate Inert Entity via AllocateEntity - Entity* base_entity = allocate_entity(manager, Inert::kind); - Assert(base_entity != nullptr); - Assert(base_entity->ID == 0); // Pure memory allocator leaves ID unassigned (0) until MakeEntity or deserialization - base_entity->ID = ++EntityManager::ID; - Assert(base_entity->ID > 0); - Assert(base_entity->derived_kind == Inert::kind); - Assert(base_entity->derived != nullptr); - Assert(base_entity->is_dirty == true); - - // 2. Validate mutual back-pointer wiring - auto* derived = reinterpret_cast(base_entity->derived); - Assert(derived->base == base_entity); - - // 3. DownCast verification - Inert* inert = DownCast(base_entity); - Assert(inert != nullptr); - Assert(inert->base == base_entity); - - // 4. Validate typed array tracking - typed_entity_array& inert_array = manager.by_type[ENTITY(Inert)]; - Assert(inert_array.count == 1); - Assert(inert_array.array == derived); - - ShutdownEntityManager(); - ShutdownWorld(&testWorld); - - gameState->World = nullptr; - - scratch_end(tempArena); - - Log(LogLevel::Message, LogCategory::Game, "[UnitTest] PASSED: TestEntityAllocationAndWiring"); - } - - internal void TestInPlaceDeserialization() - { - Log(LogLevel::Message, LogCategory::Game, "[UnitTest] Running TestInPlaceDeserialization..."); - TempArena tempArena = scratch_begin(nullptr, 0); - - GameState* gameState = GetGameState(); - World testWorld{}; - gameState->World = &testWorld; - InitWorld(&testWorld, tempArena.Arena); - - InitEntityManager(&testWorld); - EntityManager& manager = *testWorld.EntityManager; - // 1. In-memory .jasset text fixture (no streams or files needed) - String asset_content = ConstString("; Class\n" - "Inert\n" - "; version\n" - "1\n" - "; class_version\n" - "1\n" - "; id\n" - "42\n" - "; position\n" - "12.5 -44.0 108.2 1.0\n" - "; MeshInstance\n" - "42\n"); - ByteBuffer buffer = { .Data = reinterpret_cast(asset_content.Str), .Size = asset_content.Size }; - // 2. Tokenize into Archive - Archive load_ar = {}; - load_ar.arena = tempArena.Arena; - load_ar.loading = true; - load_ar.base = tokenize_archive(tempArena.Arena, buffer); - // 3. Deserialize in-place - Entity* loaded_base = deserialize_entity(load_ar, manager); - // 4. Verify in-place allocations and values - Assert(loaded_base != nullptr); - Assert(loaded_base->ID == 42); - Assert(EntityManager::ID > 42); // Generator counter advanced past loaded ID - Assert(loaded_base->position.x == 12.5f); - Assert(loaded_base->position.y == -44.0f); - Assert(loaded_base->position.z == 108.2f); - Assert(loaded_base->is_dirty == false); - Inert* loaded_inert = DownCast(loaded_base); - Assert(loaded_inert != nullptr); - Assert(loaded_inert->base == loaded_base); - Assert(loaded_inert->MeshInstance == 42); - ShutdownEntityManager(); - ShutdownWorld(&testWorld); - - gameState->World = nullptr; - - scratch_end(tempArena); - Log(LogLevel::Message, LogCategory::Game, "[UnitTest] PASSED: TestInPlaceDeserialization"); - } - - internal void TestDirtyTrackingLifecycle() - { - Log(LogLevel::Message, LogCategory::Game, "[UnitTest] Running TestDirtyTrackingLifecycle..."); - - TempArena tempArena = scratch_begin(nullptr, 0); - - GameState* gameState = GetGameState(); - World testWorld{}; - gameState->World = &testWorld; - InitWorld(&testWorld, tempArena.Arena); - - InitEntityManager(&testWorld); - EntityManager& manager = *testWorld.EntityManager; - - Entity* entity = allocate_entity(manager, Inert::kind); - Assert(entity->is_dirty == true); - - // TODO : proper save and mutation - // Simulate save - entity->is_dirty = false; - Assert(entity->is_dirty == false); - - // Simulate mutation - entity->position.x += 1.0f; - entity->is_dirty = true; - Assert(entity->is_dirty == true); - - ShutdownEntityManager(); - ShutdownWorld(&testWorld); - - gameState->World = nullptr; - - scratch_end(tempArena); - Log(LogLevel::Message, LogCategory::Game, "[UnitTest] PASSED: TestDirtyTrackingLifecycle"); - } - - void WorldUnitTest() - { - Log(LogLevel::Message, LogCategory::Game, "=================================================="); - Log(LogLevel::Message, LogCategory::Game, "Starting Entity Allocation & Lifecycle Unit Tests"); - Log(LogLevel::Message, LogCategory::Game, "=================================================="); - - TestEntityAllocationAndWiring(); - TestInPlaceDeserialization(); - // TestSwapAndPopPointerFixup(); // Deferred to Entity_Removal_Brainstorm.md - TestDirtyTrackingLifecycle(); - - Log(LogLevel::Message, LogCategory::Game, "=================================================="); - Log(LogLevel::Message, LogCategory::Game, "All Entity Lifecycle Unit Tests PASSED Successfully"); - Log(LogLevel::Message, LogCategory::Game, "=================================================="); - } -} // namespace UnitTest - -#endif diff --git a/Game/UnitTest/WorldUnitTest.h b/Game/UnitTest/WorldUnitTest.h index 09129e5..16b9363 100644 --- a/Game/UnitTest/WorldUnitTest.h +++ b/Game/UnitTest/WorldUnitTest.h @@ -4,9 +4,6 @@ #if JULIET_DEBUG -namespace UnitTest -{ - void WorldUnitTest(); -} // namespace UnitTest +void UnitTest_WorldUnitTest(void); #endif diff --git a/Game/game.cpp b/Game/game.c similarity index 50% rename from Game/game.cpp rename to Game/game.c index f265a56..bdda561 100644 --- a/Game/game.cpp +++ b/Game/game.c @@ -13,28 +13,26 @@ #include #include #include -#include +#include +#include #if JULIET_DEBUG #include #include #endif -namespace -{ - GameState* gGameState = nullptr; -} +global GameState* gGameState = NULL; -GameState* GetGameState() +GameState* GetGameState(void) { return gGameState; } -extern "C" JULIET_API void __cdecl GameShutdown() +JULIET_API void __cdecl GameShutdown(void) { printf("Shutting down game...\n"); - if (gGameState && gGameState->World) + if (gGameState != NULL && gGameState->World != NULL) { ShutdownWorld(gGameState->World); } @@ -42,47 +40,55 @@ extern "C" JULIET_API void __cdecl GameShutdown() ShutdownEntityManager(); } -extern "C" JULIET_API void __cdecl GameUpdate(GameData* params, [[maybe_unused]] float deltaTime) +JULIET_API void __cdecl GameUpdate(GameData* params, float deltaTime) { + Assert(params != NULL); + gGameState = params->GameState; - if (!gGameState) + if (gGameState == NULL) { - Arena* gameStateArena = ArenaAllocate({ .ReserveSize = Megabytes(1), .Name = "Game Total Arena" }); - auto* gameState = ArenaPushStruct(gameStateArena); + ArenaParams gameStateParams = { .ReserveSize = Megabytes(1), .Name = "Game Total Arena" }; + Arena* gameStateArena = ArenaAllocate(gameStateParams); + GameState* gameState = ArenaPushStruct(gameStateArena, GameState); gGameState = params->GameState = gameState; gameState->TotalArena = gameStateArena; + gameState->Mode = GameMode_Editor; gameState->TotalTime = 0.0f; gameState->Score = 0; - printf("Game Arena Allocated: %p\n", static_cast(gameState)); + printf("Game Arena Allocated: %p\n", (void*)gameState); // Reserve cameras. Lets go with 4 for now ReserveCamera(4); #if JULIET_DEBUG - UnitTest::WorldUnitTest(); + UnitTest_WorldUnitTest(); #endif // Bootstrap world - auto* worldArena = ArenaAllocate({ .ReserveSize = Megabytes(1), .Name = "World Arena" }); - World* world = ArenaPushStruct(worldArena JULIET_DEBUG_PARAM("World")); - gameState->World = world; + ArenaParams worldParams = { .ReserveSize = Megabytes(1), .Name = "World Arena" }; + Arena* worldArena = ArenaAllocate(worldParams); + World* world = ArenaPushStructTag(worldArena, World, "World"); + gameState->World = world; InitWorld(gameState->World, worldArena); // Entity Use case InitEntityManager(gameState->World); - auto& manager = GetEntityManager(); + EntityManager* manager = GetEntityManager(); - NonNullPtr mesh = MakeEntity(manager, 1.f, 2.f, 0.f); + Inert* mesh = MakeEntity(Inert, manager, 1.f, 2.f, 0.f); + Assert(mesh != NULL); MeshAssetID cubeAsset = GetCubePrimitiveMeshAssetID(); - MeshInstanceID meshInst = CreateMeshInstance(cubeAsset, 0, MatrixIdentity()); + Matrix identity = MatrixIdentity(); + MeshInstanceID meshInst = CreateMeshInstance(cubeAsset, 0, &identity); mesh->MeshInstance = meshInst; - NonNullPtr mesh2 = MakeEntity(manager, 4.f, 0.f, 2.f); + Inert* mesh2 = MakeEntity(Inert, manager, 4.f, 0.f, 2.f); + Assert(mesh2 != NULL); - MeshInstanceID meshInst2 = CreateMeshInstance(cubeAsset, 0, MatrixIdentity()); + MeshInstanceID meshInst2 = CreateMeshInstance(cubeAsset, 0, &identity); mesh2->MeshInstance = meshInst2; // Summer at 2pm lighting @@ -97,64 +103,64 @@ extern "C" JULIET_API void __cdecl GameUpdate(GameData* params, [[maybe_unused]] #endif GameMode previousFrameMode = gGameState->Mode; - if (IsKeyPressed(ScanCode::F1)) + if (IsKeyPressed(ScanCode_F1)) { - if (previousFrameMode == GameMode::Play) + if (previousFrameMode == GameMode_Play) { - gGameState->Mode = GameMode::Debug; + gGameState->Mode = GameMode_Debug; } - else if (previousFrameMode == GameMode::Debug) + else if (previousFrameMode == GameMode_Debug) { - gGameState->Mode = GameMode::Play; + gGameState->Mode = GameMode_Play; } } - if (gGameState->Mode == GameMode::Editor) + if (gGameState->Mode == GameMode_Editor) { - if (IsKeyPressed(ScanCode::F5)) + if (IsKeyPressed(ScanCode_F5)) { - gGameState->Mode = GameMode::Play; + gGameState->Mode = GameMode_Play; } #if JULIET_EDITOR - RenderWorldEditorUI(*gGameState->World); + RenderWorldEditorUI(gGameState->World); #endif } - if (gGameState->Mode == GameMode::Play) + if (gGameState->Mode == GameMode_Play) { - if (IsKeyPressed(ScanCode::Escape)) + if (IsKeyPressed(ScanCode_Escape)) { - gGameState->Mode = GameMode::Editor; + gGameState->Mode = GameMode_Editor; } // update game } - auto& manager = GetEntityManager(); + EntityManager* manager = GetEntityManager(); UpdateEntityManager(manager); - if (gGameState->Mode == GameMode::Debug) + if (gGameState->Mode == GameMode_Debug) { - if (previousFrameMode == GameMode::Play) + if (previousFrameMode == GameMode_Play) { ActivateDebugController(); } - if (IsKeyPressed(ScanCode::Escape)) + if (IsKeyPressed(ScanCode_Escape)) { - gGameState->Mode = GameMode::Editor; + gGameState->Mode = GameMode_Editor; } UpdateDebugController(deltaTime); #if JULIET_DEBUG - ImGui::Begin("Debug"); + ImGui_Begin("Debug", NULL, ImGuiWindowFlags_None); RenderImGuiDebugController(deltaTime); - ImGui::End(); + ImGui_End(); #endif } - if (gGameState->Mode != GameMode::Debug && previousFrameMode == GameMode::Debug) + if (gGameState->Mode != GameMode_Debug && previousFrameMode == GameMode_Debug) { DeactivateDebugController(); } diff --git a/Game/game.h b/Game/game.h index 5c3584d..dc8a30e 100644 --- a/Game/game.h +++ b/Game/game.h @@ -3,25 +3,27 @@ #include #include -struct EntityManager; +typedef struct EntityManager EntityManager; -enum class GameMode +typedef uint32 GameMode; +enum { - Editor, - Play, - Debug + GameMode_Editor = 0, + GameMode_Play, + GameMode_Debug }; +typedef struct GameState GameState; struct GameState { - Arena* TotalArena = nullptr; + Arena* TotalArena; - World* World = nullptr; + World* World; - GameMode Mode = GameMode::Editor; + GameMode Mode; - float TotalTime = 0.0f; - int Score = 0; + float TotalTime; + int Score; }; -[[nodiscard]] extern GameState* GetGameState(); +extern GameState* GetGameState(void); diff --git a/Juliet/Juliet.vcxproj.filters b/Juliet/Juliet.vcxproj.filters deleted file mode 100644 index a85af6e..0000000 --- a/Juliet/Juliet.vcxproj.filters +++ /dev/null @@ -1,658 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - src\Core\Application - - - src\Core\Common - - - src\Core\Common - - - src\Core\Container - - - src\Core\HAL\Display - - - src\Core\HAL\Display\Win32 - - - src\Core\HAL\Display\Win32 - - - src\Core\HAL\Display\Win32 - - - src\Core\HAL\DynLib\Win32 - - - src\Core\HAL\Event - - - src\Core\HAL\Event - - - src\Core\HAL\Event - - - src\Core\HAL\Event - - - src\Core\HAL\Event - - - src\Core\HAL\Filesystem - - - src\Core\HAL\Filesystem\Win32 - - - src\Core\HAL\IO - - - src\Core\HAL\IO\Win32 - - - src\Core\HAL\OS - - - src\Core\HAL\OS\Win32 - - - src\Core\HotReload - - - src\Core\HotReload\Win32 - - - src\Core\ImGui - - - src\Core\ImGui - - - src\Core - - - src\Core\Logging - - - src\Core\Math - - - src\Core\Memory - - - src\Core\Memory - - - src\Core\Memory - - - src\Core\Memory - - - src\Core\Memory - - - src\Core\Networking - - - src\Core\Networking - - - src\Core\Networking - - - src\Core\Networking - - - src\Core\Networking\Win32 - - - src\Core - - - src\Engine\Debug - - - src\Engine - - - src\Graphics\D3D12\AgilitySDK\d3dx12 - - - src\Graphics\D3D12 - - - src\Graphics\D3D12 - - - src\Graphics\D3D12 - - - src\Graphics\D3D12 - - - src\Graphics\D3D12 - - - src\Graphics\D3D12 - - - src\Graphics\D3D12 - - - src\Graphics\D3D12 - - - src\Graphics\D3D12 - - - src\Graphics\D3D12 - - - src\Graphics\D3D12 - - - src\Graphics\D3D12 - - - src\Graphics\D3D12 - - - src\Graphics - - - src\Graphics - - - src\Graphics - - - src\Graphics - - - src\Graphics - - - src\Graphics - - - src\UnitTest\Container - - - src\UnitTest - - - include\Core\Application - - - include\Core\Application - - - include\Core\Common - - - include\Core\Common - - - include\Core\Common - - - include\Core\Common - - - include\Core\Common - - - include\Core\Common - - - include\Core\Container - - - include\Core\HAL\Display - - - include\Core\HAL\DynLib - - - include\Core\HAL\Event - - - include\Core\HAL\Filesystem - - - include\Core\HAL\IO - - - include\Core\HAL\Keyboard - - - include\Core\HAL\Keyboard - - - include\Core\HAL\Keyboard - - - include\Core\HAL\Mouse - - - include\Core\HAL\OS - - - include\Core\HotReload - - - include\Core\ImGui - - - include\Core\ImGui - - - include\Core - - - include\Core\Logging - - - include\Core\Logging - - - include\Core - - - include\Core\Math - - - include\Core\Math - - - include\Core\Math - - - include\Core\Math - - - include\Core\Memory - - - include\Core\Memory - - - include\Core\Memory - - - include\Core\Memory - - - include\Core\Memory - - - include\Core\Networking - - - include\Core\Networking - - - include\Core\Networking - - - include\Core\Networking - - - include\Core\Networking - - - include\Core\Networking - - - include\Core - - - include\Core\Thread - - - include\Core\Thread - - - include\Engine - - - include\Engine\Debug - - - include\Engine - - - include\Graphics - - - include\Graphics - - - include\Graphics - - - include\Graphics - - - include\Graphics - - - include\Graphics - - - include\Graphics - - - include\Graphics - - - include\Graphics - - - include\Graphics - - - include\Graphics - - - include\Graphics - - - include\Graphics - - - include\Graphics - - - include\Graphics - - - include\Graphics - - - include\Graphics - - - include - - - src\Core\HAL\Display - - - src\Core\HAL\Display - - - src\Core\HAL\Display\Win32 - - - src\Core\HAL\Display\Win32 - - - src\Core\HAL\Display - - - src\Core\HAL\Event - - - src\Core\HAL\Event - - - src\Core\HAL\Event - - - src\Core\HAL\Event - - - src\Core\HAL\Event - - - src\Core\HAL\Filesystem - - - src\Core\HAL\Filesystem - - - src\Core\HAL\IO - - - src\Core\HAL\OS - - - src\Core\HAL - - - src\Core\Math - - - src\Core\Networking - - - src\Graphics\D3D12\AgilitySDK - - - src\Graphics\D3D12\AgilitySDK - - - src\Graphics\D3D12\AgilitySDK - - - src\Graphics\D3D12\AgilitySDK - - - src\Graphics\D3D12\AgilitySDK - - - src\Graphics\D3D12\AgilitySDK - - - src\Graphics\D3D12\AgilitySDK\d3dx12 - - - src\Graphics\D3D12\AgilitySDK\d3dx12 - - - src\Graphics\D3D12\AgilitySDK\d3dx12 - - - src\Graphics\D3D12\AgilitySDK\d3dx12 - - - src\Graphics\D3D12\AgilitySDK\d3dx12 - - - src\Graphics\D3D12\AgilitySDK\d3dx12 - - - src\Graphics\D3D12\AgilitySDK\d3dx12 - - - src\Graphics\D3D12\AgilitySDK\d3dx12 - - - src\Graphics\D3D12\AgilitySDK\d3dx12 - - - src\Graphics\D3D12\AgilitySDK\d3dx12 - - - src\Graphics\D3D12\AgilitySDK\d3dx12 - - - src\Graphics\D3D12\AgilitySDK - - - src\Graphics\D3D12 - - - src\Graphics\D3D12 - - - src\Graphics\D3D12 - - - src\Graphics\D3D12 - - - src\Graphics\D3D12 - - - src\Graphics\D3D12 - - - src\Graphics\D3D12 - - - src\Graphics\D3D12 - - - src\Graphics\D3D12 - - - src\Graphics\D3D12 - - - src\Graphics\D3D12 - - - src\Graphics\D3D12 - - - src\Graphics\D3D12 - - - src\Graphics\D3D12 - - - src\Graphics - - - src\UnitTest - - - src\Graphics\D3D12\AgilitySDK - - - diff --git a/Juliet/include/Core/Application/ApplicationManager.h b/Juliet/include/Core/Application/ApplicationManager.h deleted file mode 100644 index e8c90f0..0000000 --- a/Juliet/include/Core/Application/ApplicationManager.h +++ /dev/null @@ -1,9 +0,0 @@ -#pragma once - -#include -#include - -enum class JulietInit_Flags : uint8; - -struct Arena; -extern JULIET_API void StartApplication(IApplication& app, JulietInit_Flags flags); diff --git a/Juliet/include/Core/Application/IApplication.h b/Juliet/include/Core/Application/IApplication.h deleted file mode 100644 index 595c4c4..0000000 --- a/Juliet/include/Core/Application/IApplication.h +++ /dev/null @@ -1,29 +0,0 @@ -#pragma once - -#include - -struct Camera; -struct RenderPass; -struct CommandList; -struct Texture; -struct ColorTargetInfo; -struct DepthStencilTargetInfo; -struct Arena; - -class IApplication -{ - public: - virtual ~IApplication() = default; - virtual void Init(NonNullPtr arena) = 0; - virtual void Shutdown() = 0; - virtual void Update(float deltaTime) = 0; - virtual bool IsRunning() = 0; - - // Accessors for Engine Systems - virtual struct Window* GetPlatformWindow() = 0; - virtual struct GraphicsDevice* GetGraphicsDevice() = 0; - - // Render Lifecycle (Engine-Managed Render Loop) - virtual ColorTargetInfo GetColorTargetInfo(Texture* swapchainTexture) = 0; - virtual DepthStencilTargetInfo* GetDepthTargetInfo() = 0; -}; diff --git a/Juliet/include/Core/Common/CRC32.h b/Juliet/include/Core/Common/CRC32.h index b462130..ddd828d 100644 --- a/Juliet/include/Core/Common/CRC32.h +++ b/Juliet/include/Core/Common/CRC32.h @@ -1,62 +1,60 @@ -#pragma once +#pragma once + #include #include // From https://web.mit.edu/freebsd/head/sys/libkern/crc32.c -namespace details -{ - constexpr uint32_t crc32_tab[] = { - 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, - 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, - 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 0x646ba8c0, 0xfd62f97a, - 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, - 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, - 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, - 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, - 0xb6662d3d, 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, - 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, 0x6b6b51f4, - 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, - 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, - 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, - 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, - 0x206f85b3, 0xb966d409, 0xce61e49f, 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, - 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, - 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, - 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, 0xfed41b76, - 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, - 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, - 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, - 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, - 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, - 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, - 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, - 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, - 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, - 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, 0xbdbdf21c, 0xcabac28a, 0x53b39330, - 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, - 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d - }; -} +global const uint32 g_crc32_tab[256] = { + 0x00000000u, 0x77073096u, 0xee0e612cu, 0x990951bau, 0x076dc419u, 0x706af48fu, 0xe963a535u, 0x9e6495a3u, 0x0edb8832u, + 0x79dcb8a4u, 0xe0d5e91eu, 0x97d2d988u, 0x09b64c2bu, 0x7eb17cbdu, 0xe7b82d07u, 0x90bf1d91u, 0x1db71064u, 0x6ab020f2u, + 0xf3b97148u, 0x84be41deu, 0x1adad47du, 0x6ddde4ebu, 0xf4d4b551u, 0x83d385c7u, 0x136c9856u, 0x646ba8c0u, 0xfd62f97au, + 0x8a65c9ecu, 0x14015c4fu, 0x63066cd9u, 0xfa0f3d63u, 0x8d080df5u, 0x3b6e20c8u, 0x4c69105eu, 0xd56041e4u, 0xa2677172u, + 0x3c03e4d1u, 0x4b04d447u, 0xd20d85fdu, 0xa50ab56bu, 0x35b5a8fau, 0x42b2986cu, 0xdbbbc9d6u, 0xacbcf940u, 0x32d86ce3u, + 0x45df5c75u, 0xdcd60dcfu, 0xabd13d59u, 0x26d930acu, 0x51de003au, 0xc8d75180u, 0xbfd06116u, 0x21b4f4b5u, 0x56b3c423u, + 0xcfba9599u, 0xb8bda50fu, 0x2802b89eu, 0x5f058808u, 0xc60cd9b2u, 0xb10be924u, 0x2f6f7c87u, 0x58684c11u, 0xc1611dabu, + 0xb6662d3du, 0x76dc4190u, 0x01db7106u, 0x98d220bcu, 0xefd5102au, 0x71b18589u, 0x06b6b51fu, 0x9fbfe4a5u, 0xe8b8d433u, + 0x7807c9a2u, 0x0f00f934u, 0x9609a88eu, 0xe10e9818u, 0x7f6a0dbbu, 0x086d3d2du, 0x91646c97u, 0xe6635c01u, 0x6b6b51f4u, + 0x1c6c6162u, 0x856530d8u, 0xf262004eu, 0x6c0695edu, 0x1b01a57bu, 0x8208f4c1u, 0xf50fc457u, 0x65b0d9c6u, 0x12b7e950u, + 0x8bbeb8eau, 0xfcb9887cu, 0x62dd1ddfu, 0x15da2d49u, 0x8cd37cf3u, 0xfbd44c65u, 0x4db26158u, 0x3ab551ceu, 0xa3bc0074u, + 0xd4bb30e2u, 0x4adfa541u, 0x3dd895d7u, 0xa4d1c46du, 0xd3d6f4fbu, 0x4369e96au, 0x346ed9fcu, 0xad678846u, 0xda60b8d0u, + 0x44042d73u, 0x33031de5u, 0xaa0a4c5fu, 0xdd0d7cc9u, 0x5005713cu, 0x270241aau, 0xbe0b1010u, 0xc90c2086u, 0x5768b525u, + 0x206f85b3u, 0xb966d409u, 0xce61e49fu, 0x5edef90eu, 0x29d9c998u, 0xb0d09822u, 0xc7d7a8b4u, 0x59b33d17u, 0x2eb40d81u, + 0xb7bd5c3bu, 0xc0ba6cadu, 0xedb88320u, 0x9abfb3b6u, 0x03b6e20cu, 0x74b1d29au, 0xead54739u, 0x9dd277afu, 0x04db2615u, + 0x73dc1683u, 0xe3630b12u, 0x94643b84u, 0x0d6d6a3eu, 0x7a6a5aa8u, 0xe40ecf0bu, 0x9309ff9du, 0x0a00ae27u, 0x7d079eb1u, + 0xf00f9344u, 0x8708a3d2u, 0x1e01f268u, 0x6906c2feu, 0xf762575du, 0x806567cbu, 0x196c3671u, 0x6e6b06e7u, 0xfed41b76u, + 0x89d32be0u, 0x10da7a5au, 0x67dd4accu, 0xf9b9df6fu, 0x8ebeeff9u, 0x17b7be43u, 0x60b08ed5u, 0xd6d6a3e8u, 0xa1d1937eu, + 0x38d8c2c4u, 0x4fdff252u, 0xd1bb67f1u, 0xa6bc5767u, 0x3fb506ddu, 0x48b2364bu, 0xd80d2bdau, 0xaf0a1b4cu, 0x36034af6u, + 0x41047a60u, 0xdf60efc3u, 0xa867df55u, 0x316e8eefu, 0x4669be79u, 0xcb61b38cu, 0xbc66831au, 0x256fd2a0u, 0x5268e236u, + 0xcc0c7795u, 0xbb0b4703u, 0x220216b9u, 0x5505262fu, 0xc5ba3bbeu, 0xb2bd0b28u, 0x2bb45a92u, 0x5cb36a04u, 0xc2d7ffa7u, + 0xb5d0cf31u, 0x2cd99e8bu, 0x5bdeae1du, 0x9b64c2b0u, 0xec63f226u, 0x756aa39cu, 0x026d930au, 0x9c0906a9u, 0xeb0e363fu, + 0x72076785u, 0x05005713u, 0x95bf4a82u, 0xe2b87a14u, 0x7bb12baeu, 0x0cb61b38u, 0x92d28e9bu, 0xe5d5be0du, 0x7cdcefb7u, + 0x0bdbdf21u, 0x86d3d2d4u, 0xf1d4e242u, 0x68ddb3f8u, 0x1fda836eu, 0x81be16cdu, 0xf6b9265bu, 0x6fb077e1u, 0x18b74777u, + 0x88085ae6u, 0xff0f6a70u, 0x66063bcau, 0x11010b5cu, 0x8f659effu, 0xf862ae69u, 0x616bffd3u, 0x166ccf45u, 0xa00ae278u, + 0xd70dd2eeu, 0x4e048354u, 0x3903b3c2u, 0xa7672661u, 0xd06016f7u, 0x4969474du, 0x3e6e77dbu, 0xaed16a4au, 0xd9d65adcu, + 0x40df0b66u, 0x37d83bf0u, 0xa9bcae53u, 0xdebb9ec5u, 0x47b2cf7fu, 0x30b5ffe9u, 0xbdbdf21cu, 0xcabac28au, 0x53b39330u, + 0x24b4a3a6u, 0xbad03605u, 0xcdd70693u, 0x54de5729u, 0x23d967bfu, 0xb3667a2eu, 0xc4614ab8u, 0x5d681b02u, 0x2a6f2b94u, + 0xb40bbe37u, 0xc30c8ea1u, 0x5a05df1bu, 0x2d02ef8du +}; -constexpr uint32 crc32(const char* str, size_t length) +static inline uint32 crc32_bytes(const char* str, size_t length) { - Assert(str && length > 0); + Assert(str != NULL && length > 0); const char* p = str; - uint32_t crc = ~0U; + uint32 crc = ~0U; while (length--) { - crc = details::crc32_tab[(crc ^ static_cast(*p++)) & 0xFF] ^ (crc >> 8); + crc = g_crc32_tab[(crc ^ (uint8)(*p++)) & 0xFFu] ^ (crc >> 8); } return crc ^ ~0U; } -constexpr uint32 crc32(String str) +static inline uint32 crc32_str(String str) { - return crc32(str.Str, str.Size); + return crc32_bytes(str.Str, str.Size); } -consteval uint32 operator""_crc32(const char* str, size_t length) +static inline uint32 crc32_cstr(const char* str) { - return crc32(str, length); + return crc32_bytes(str, StringLengthCStr(str)); } diff --git a/Juliet/include/Core/Common/CoreTypes.h b/Juliet/include/Core/Common/CoreTypes.h index 9a356eb..e9af694 100644 --- a/Juliet/include/Core/Common/CoreTypes.h +++ b/Juliet/include/Core/Common/CoreTypes.h @@ -1,65 +1,68 @@ #pragma once -using uint8 = uint8_t; -using uint16 = uint16_t; -using uint32 = uint32_t; -using uint64 = uint64_t; +#include +#include +#include -using int8 = int8_t; -using int16 = int16_t; -using int32 = int32_t; -using int64 = int64_t; +typedef uint8_t uint8; +typedef uint16_t uint16; +typedef uint32_t uint32; +typedef uint64_t uint64; -using Byte = std::byte; +typedef int8_t int8; +typedef int16_t int16; +typedef int32_t int32; +typedef int64_t int64; -using size_t = std::size_t; -using index_t = size_t; +typedef uint8 bool8; +typedef uint16 bool16; +typedef uint32 bool32; +typedef uint64 bool64; +#ifndef __cplusplus +#ifndef true +#define true 1 +#endif +#ifndef false +#define false 0 +#endif +#endif + +typedef uint8 Byte; +typedef size_t index_t; + +typedef struct ByteBuffer ByteBuffer; struct ByteBuffer { Byte* Data; size_t Size; }; -using ptrdiff_t = decltype(static_cast(nullptr) - static_cast(nullptr)); +typedef void (*FunctionPtr)(void); -using FunctionPtr = auto (*)(void) -> void; +#define uint8Max ((uint8)0xFFu) +#define uint16Max ((uint16)0xFFFFu) +#define uint32Max ((uint32)0xFFFFFFFFu) +#define uint64Max ((uint64)0xFFFFFFFFFFFFFFFFull) -// Limits -template -consteval Type MaxValueOf() -{ - return std::numeric_limits::max(); -} -constexpr uint8 uint8Max = MaxValueOf(); -constexpr uint16 uint16Max = MaxValueOf(); -constexpr uint32 uint32Max = MaxValueOf(); -constexpr uint64 uint64Max = MaxValueOf(); +#define int8Max ((int8)0x7F) +#define int16Max ((int16)0x7FFF) +#define int32Max ((int32)0x7FFFFFFF) +#define int64Max ((int64)0x7FFFFFFFFFFFFFFFll) -constexpr int8 int8Max = MaxValueOf(); -constexpr int16 int16Max = MaxValueOf(); -constexpr int32 int32Max = MaxValueOf(); -constexpr int64 int64Max = MaxValueOf(); +#define indexMax ((index_t)SIZE_MAX) -constexpr index_t indexMax = MaxValueOf(); +#define uint8Min ((uint8)0u) +#define uint16Min ((uint16)0u) +#define uint32Min ((uint32)0u) +#define uint64Min ((uint64)0ull) -template -consteval Type MinValueOf() -{ - return std::numeric_limits::lowest(); -} +#define int8Min ((int8)(-128)) +#define int16Min ((int16)(-32768)) +#define int32Min ((int32)(-2147483647 - 1)) +#define int64Min ((int64)(-9223372036854775807ll - 1ll)) -constexpr uint8 uint8Min = MinValueOf(); -constexpr uint16 uint16Min = MinValueOf(); -constexpr uint32 uint32Min = MinValueOf(); -constexpr uint64 uint64Min = MinValueOf(); +#define indexMin ((index_t)0u) -constexpr int8 int8Min = MinValueOf(); -constexpr int16 int16Min = MinValueOf(); -constexpr int32 int32Min = MinValueOf(); -constexpr int64 int64Min = MinValueOf(); - -constexpr index_t indexMin = MinValueOf(); - -#define Kilobytes(value) value * 1024 -#define Megabytes(value) Kilobytes(value) * 1024 +#define Kilobytes(value) ((uint64)(value) * 1024ull) +#define Megabytes(value) (Kilobytes(value) * 1024ull) diff --git a/Juliet/include/Core/Common/CoreUtils.h b/Juliet/include/Core/Common/CoreUtils.h index d0efea9..7b81ccf 100644 --- a/Juliet/include/Core/Common/CoreUtils.h +++ b/Juliet/include/Core/Common/CoreUtils.h @@ -1,22 +1,27 @@ -#pragma once +#pragma once #include +#include -#define global static +#define global static #define internal static +#define Glue_(A, B) A##B +#define Glue(A, B) Glue_(A, B) +#define StaticAssert(C, ID) global uint8 Glue(ID, __LINE__)[(C) ? 1 : -1] + // 1. Stringify helpers -#define JULIET_STR(x) #x +#define JULIET_STR(x) #x #define JULIET_TOSTRING(x) JULIET_STR(x) // 2. Define the pragma operator based on compiler #if defined(__clang__) || defined(__GNUC__) -#define JULIET_PRAGMA(x) _Pragma(#x) +#define JULIET_PRAGMA(x) _Pragma(#x) #define JULIET_SUPPRESS_MSVC(id) #define JULIET_SUPPRESS_CLANG(str) JULIET_PRAGMA(clang diagnostic ignored str) #elif defined(_MSC_VER) -#define JULIET_PRAGMA(x) __pragma(x) -#define JULIET_SUPPRESS_MSVC(id) JULIET_PRAGMA(warning(disable : id)) +#define JULIET_PRAGMA(x) __pragma(x) +#define JULIET_SUPPRESS_MSVC(id) JULIET_PRAGMA(warning(disable : id)) #define JULIET_SUPPRESS_CLANG(str) #else #define JULIET_PRAGMA(x) @@ -27,20 +32,18 @@ // 3. The Agnostic "Push/Pop" #if defined(__clang__) #define JULIET_WARNING_PUSH JULIET_PRAGMA(clang diagnostic push) -#define JULIET_WARNING_POP JULIET_PRAGMA(clang diagnostic pop) +#define JULIET_WARNING_POP JULIET_PRAGMA(clang diagnostic pop) #elif defined(_MSC_VER) #define JULIET_WARNING_PUSH JULIET_PRAGMA(warning(push)) -#define JULIET_WARNING_POP JULIET_PRAGMA(warning(pop)) +#define JULIET_WARNING_POP JULIET_PRAGMA(warning(pop)) #else #define JULIET_WARNING_PUSH #define JULIET_WARNING_POP #endif #if defined(_MSC_VER) -// MSVC specific intrinsic #define JULIET_PLATFORM_BREAK() (__nop(), __debugbreak()) #elif defined(__clang__) || defined(__GNUC__) -// Clang/GCC specific intrinsic #define JULIET_PLATFORM_BREAK() __builtin_trap() #else #include @@ -49,18 +52,14 @@ #if JULIET_DEBUG #define JULIET_ASSERT_INTERNAL(expression, message) \ - JULIET_WARNING_PUSH \ - JULIET_SUPPRESS_CLANG("-Wextra-semi-stmt") \ - JULIET_SUPPRESS_MSVC(4127) \ - JULIET_SUPPRESS_MSVC(4548) \ + do \ { \ - if (!(expression)) [[unlikely]] \ + if (!(expression)) \ { \ - JulietAssert(#expression, message); \ + JulietAssert(#expression, message, __FILE__, __func__, (uint32)__LINE__, 0); \ } \ } \ - JULIET_WARNING_POP \ - static_assert(true, "") + while (0) #define AssertHR(hr_expression, message) \ do \ @@ -68,7 +67,7 @@ long hr_val = (hr_expression); \ if (hr_val < 0) \ { \ - JulietAssert(#hr_expression, message, std::source_location::current(), hr_val); \ + JulietAssert(#hr_expression, message, __FILE__, __func__, (uint32)__LINE__, hr_val); \ } \ } \ while (0) @@ -80,95 +79,70 @@ #define Unimplemented() \ do \ { \ - JulietAssert("UNIMPLEMENTED", "This code path is not yet functional."); \ + JulietAssert("UNIMPLEMENTED", "This code path is not yet functional.", __FILE__, __func__, (uint32)__LINE__, 0); \ } \ while (0) #else -#define Assert(...) ((void)0) +#define Assert(...) ((void)0) #define AssertHR(hr_expression, message) ((void)(hr_expression)) -#define Unimplemented() ((void)0) +#define Unimplemented() ((void)0) #endif -JULIET_API extern void JulietAssert(const char* expression, const char* message, - std::source_location location = std::source_location::current(), long handleResult = 0); +JULIET_API extern void JulietAssert(const char* expression, const char* message, const char* file, const char* function, + uint32 line, long handle_result); -#define ZeroStruct(structInstance) ZeroSize(sizeof(structInstance), &(structInstance)) -#define ZeroArray(array) ZeroSize(sizeof((array)), (array)) -#define ZeroDynArray(Count, Pointer) ZeroSize((Count) * sizeof((Pointer)[0]), Pointer) -inline void ZeroSize(size_t size, void* ptr) +#define ZeroStruct(structInstance) ZeroSize(sizeof(structInstance), &(structInstance)) +#define ZeroArray(array) ZeroSize(sizeof((array)), (array)) +#define ZeroDynArray(Count, Pointer) ZeroSize((Count) * sizeof((Pointer)[0]), (Pointer)) + +static inline void ZeroSize(size_t size, void* ptr) { - auto Byte = (uint8*)ptr; + uint8* byte_ptr = (uint8*)ptr; while (size--) { - *Byte++ = 0; + *byte_ptr++ = 0; } } #define Restrict __restrict -template -class DeferredFunction +static inline bool8 IsValidByteBuffer(ByteBuffer buffer) { - public: - explicit DeferredFunction(const Function& otherFct) noexcept - : Callback(otherFct) - { - } - explicit DeferredFunction(Function&& otherFct) noexcept - : Callback(std::move(otherFct)) - { - } - - ~DeferredFunction() noexcept { Callback(); } - - DeferredFunction(const DeferredFunction&) = delete; - DeferredFunction(const DeferredFunction&&) = delete; - void operator=(const DeferredFunction&) = delete; - void operator=(DeferredFunction&&) = delete; - - private: - Function Callback; -}; - -template -auto Defer(Function&& fct) noexcept -{ - return DeferredFunction>{ std::forward(fct) }; + return (buffer.Size > 0 && buffer.Data != NULL); } -inline bool IsValid(ByteBuffer buffer) +extern JULIET_API void FreeByteBuffer(ByteBuffer* buffer); + +static inline bool8 IsPow2(uint64 x) { - return buffer.Size > 0 && buffer.Data; + return (x != 0) && ((x & (x - 1)) == 0); } -extern JULIET_API void Free(ByteBuffer& buffer); - -template -[[nodiscard]] constexpr T AlignPow2(T x, T alignment) +static inline uint64 AlignPow2(uint64 x, uint64 alignment) { - // Safety Check: - Assert(std::has_single_bit(static_cast(alignment))); - + Assert(IsPow2(alignment)); return (x + alignment - 1) & ~(alignment - 1); } -template -inline void Swap(T* Restrict a, T* Restrict b) +static inline void SwapMemory(void* Restrict a, void* Restrict b, size_t elem_size) { - T temp = std::move(*a); - *a = std::move(*b); - *b = std::move(temp); + uint8* pa = (uint8*)a; + uint8* pb = (uint8*)b; + for (size_t i = 0; i < elem_size; ++i) + { + uint8 tmp = pa[i]; + pa[i] = pb[i]; + pb[i] = tmp; + } } -// Move to another file dedicated to those #if defined(__clang__) #define COMPILER_CLANG 1 #elif defined(_MSC_VER) #define COMPILER_MSVC 1 #endif -// Undef anything not defined #if !defined(COMPILER_CLANG) #define COMPILER_CLANG 0 #endif @@ -186,42 +160,33 @@ inline void Swap(T* Restrict a, T* Restrict b) #error AlignOf not defined for this compiler. #endif -template -[[nodiscard]] constexpr const char* GetTypeName() -{ -#if COMPILER_CLANG - return __PRETTY_FUNCTION__; -#elif COMPILER_MSVC - return __FUNCSIG__; -#elif COMPILER_GCC - return __PRETTY_FUNCTION__; +#if COMPILER_MSVC || (COMPILER_CLANG && defined(_MSC_VER)) +#define ThreadLocal __declspec(thread) #else - return "UnknownType"; +#define ThreadLocal __thread #endif -} -inline uint16 safe_cast_uint16(uint32 value) +static inline uint16 safe_cast_uint16(uint32 value) { Assert(value <= uint16Max); uint16 result = (uint16)value; return result; } -const uint32 bitmask1 = 0b0000'0001; -const uint32 bitmask2 = 0b0000'0011; -const uint32 bitmask3 = 0b0000'0111; -const uint32 bitmask4 = 0b0000'1111; -const uint32 bitmask5 = 0b0001'1111; -const uint32 bitmask6 = 0b0011'1111; -const uint32 bitmask7 = 0b0111'1111; -const uint32 bitmask8 = 0b1111'1111; -const uint32 bitmask9 = 0x0000'01ff; -const uint32 bitmask10 = 0x0000'03ff; -const uint32 bitmask11 = 0x0000'07ff; -const uint32 bitmask12 = 0x0000'0fff; -const uint32 bitmask13 = 0x0000'1fff; -const uint32 bitmask14 = 0x0000'3fff; -const uint32 bitmask15 = 0x0000'7fff; -const uint32 bitmask16 = 0x0000'ffff; -// ... -const uint32 bitmask32 = 0xffff'ffff; +#define bitmask1 0x00000001u +#define bitmask2 0x00000003u +#define bitmask3 0x00000007u +#define bitmask4 0x0000000fu +#define bitmask5 0x0000001fu +#define bitmask6 0x0000003fu +#define bitmask7 0x0000007fu +#define bitmask8 0x000000ffu +#define bitmask9 0x000001ffu +#define bitmask10 0x000003ffu +#define bitmask11 0x000007ffu +#define bitmask12 0x00000fffu +#define bitmask13 0x00001fffu +#define bitmask14 0x00003fffu +#define bitmask15 0x00007fffu +#define bitmask16 0x0000ffffu +#define bitmask32 0xffffffffu diff --git a/Juliet/include/Core/Common/EnumUtils.h b/Juliet/include/Core/Common/EnumUtils.h deleted file mode 100644 index 80d2480..0000000 --- a/Juliet/include/Core/Common/EnumUtils.h +++ /dev/null @@ -1,86 +0,0 @@ -#pragma once - -template -concept IsEnum = std::is_enum_v; - -template -constexpr E operator~(E lhs) noexcept -{ - return static_cast(~static_cast>(lhs)); -} - -template -constexpr E operator|(E lhs, E rhs) noexcept -{ - return static_cast(static_cast>(lhs) | static_cast>(rhs)); -} - -template -constexpr E& operator|=(E& lhs, E rhs) noexcept -{ - return lhs = (lhs | rhs); -} - -template -constexpr E operator&(E lhs, E rhs) noexcept -{ - return static_cast(static_cast>(lhs) & static_cast>(rhs)); -} - -template -constexpr E& operator&=(E& lhs, E rhs) noexcept -{ - return lhs = (lhs & rhs); -} - -template -constexpr E operator^(E lhs, E rhs) noexcept -{ - return static_cast(static_cast>(lhs) ^ static_cast>(rhs)); -} - -template -constexpr E& operator^=(E& lhs, E rhs) noexcept -{ - return lhs = (lhs ^ rhs); -} - -template -constexpr std::underlying_type_t operator-(E lhs, E rhs) noexcept -{ - using T = std::underlying_type_t; - return static_cast(static_cast(lhs) - static_cast(rhs)); -} - -template -constexpr std::underlying_type_t operator+(E lhs, E rhs) noexcept -{ - using T = std::underlying_type_t; - return static_cast(static_cast(lhs) + static_cast(rhs)); -} - -template -constexpr E operator-(E lhs, std::underlying_type_t rhs) noexcept -{ - using T = std::underlying_type_t; - return static_cast(static_cast(static_cast(lhs) - rhs)); -} - -template -constexpr E operator+(E lhs, std::underlying_type_t rhs) noexcept -{ - using T = std::underlying_type_t; - return static_cast(static_cast(static_cast(lhs) + rhs)); -} - -template -constexpr std::underlying_type_t ToUnderlying(E enm) noexcept -{ - return static_cast>(enm); -} - -template -constexpr E ToEnum(std::underlying_type_t value) noexcept -{ - return static_cast(value); -} diff --git a/Juliet/include/Core/Common/NonNullPtr.h b/Juliet/include/Core/Common/NonNullPtr.h deleted file mode 100644 index 85ccaee..0000000 --- a/Juliet/include/Core/Common/NonNullPtr.h +++ /dev/null @@ -1,110 +0,0 @@ -#pragma once - -#include - -template -concept NonNullPtr_Convertible = std::is_convertible_v; - -template -concept NonNullPtr_SameType = std::is_same_v; - -template -class NonNullPtr -{ - public: - constexpr NonNullPtr(Type* ptr) - : InternalPtr(ptr) - { - Assert(ptr, "Tried to initialize a NonNullPtr with a null pointer"); - } - - template - requires NonNullPtr_Convertible - constexpr NonNullPtr(const NonNullPtr& otherPtr) - : InternalPtr(otherPtr.Get()) - { - Assert(InternalPtr, "Fatal Error: Assigned a non null ptr using another NonNullPtr but its was null."); - } - - // Assignment - [[nodiscard]] constexpr NonNullPtr& operator=(Type* ptr) - { - Assert(ptr, "Tried to assign a null pointer to a NonNullPtr!"); - InternalPtr = ptr; - return *this; - } - - template - requires NonNullPtr_Convertible - [[nodiscard]] constexpr NonNullPtr& operator=(const NonNullPtr& otherPtr) - { - InternalPtr = otherPtr.Get(); - return *this; - } - - // Accessors - [[nodiscard]] constexpr operator Type*() const - { - Assert(InternalPtr, "NonNullPtr: Internal Pointer is Null"); - return InternalPtr; - } - - [[nodiscard]] constexpr Type* Get() const - { - Assert(InternalPtr, "NonNullPtr: Internal Pointer is Null"); - return InternalPtr; - } - - [[nodiscard]] constexpr Type& operator*() const - { - Assert(InternalPtr, "NonNullPtr: Internal Pointer is Null"); - return *InternalPtr; - } - - [[nodiscard]] constexpr Type* operator->() const - { - Assert(InternalPtr, "NonNullPtr: Internal Pointer is Null"); - return InternalPtr; - } - - // Comparisons - [[nodiscard]] constexpr bool operator==(const NonNullPtr& otherPtr) const - { - return InternalPtr == otherPtr.InternalPtr; - } - - template - requires NonNullPtr_SameType - [[nodiscard]] constexpr bool operator==(OtherType* otherRawPtr) const - { - return InternalPtr == otherRawPtr; - } - - template - requires NonNullPtr_SameType - [[nodiscard]] constexpr friend bool operator==(OtherType* otherRawPtr, const NonNullPtr& nonNullPtr) - { - return otherRawPtr == nonNullPtr.InternalPtr; - } - - // Forbid assigning a nullptr at compile time - constexpr NonNullPtr(std::nullptr_t) - : InternalPtr(nullptr) - { - static_assert(sizeof(Type) == 0, "Trying to initialize a NonNullPtr with a nullptr value"); - } - - [[nodiscard]] constexpr NonNullPtr& operator=(std::nullptr_t) - { - static_assert(sizeof(Type) == 0, "Trying to assign a NonNullPtr with a nullptr value"); - return *this; - } - - [[nodiscard]] constexpr explicit operator bool() const { return InternalPtr != nullptr; } - - private: - Type* InternalPtr; -}; - -template -NonNullPtr(T*) -> NonNullPtr; diff --git a/Juliet/include/Core/Common/String.h b/Juliet/include/Core/Common/String.h index 4d92dba..f2dec65 100644 --- a/Juliet/include/Core/Common/String.h +++ b/Juliet/include/Core/Common/String.h @@ -1,78 +1,84 @@ -#pragma once +#pragma once -#include +#include +#include #include #include -#ifdef global -#undef global -#define RESTORE_GLOBAL -#endif +typedef struct Arena Arena; -#ifdef RESTORE_GLOBAL -#define global static -#undef RESTORE_GLOBAL -#endif - -struct Arena; - -#define ConstString(str) { const_cast((str)), sizeof(str) - 1 } -#define CStr(str) ((str).Str) +#define ConstString(str) ((String){ (char*)(str), sizeof(str) - 1 }) +#define ConstStringInit(str) { (char*)(str), sizeof(str) - 1 } +#define CStr(str) ((str).Str) #define InplaceString(name, size) \ char name##_[size]; \ MemSet(name##_, 0, sizeof(uint32)); \ String name = { name##_, 0 } // Everything is Little Endian -enum class StringEncoding : uint8 +typedef uint8 StringEncoding; +enum { - Unknown = 0, - ASCII, - LATIN1, - UTF8, - UTF16, - UTF32, - UCS2, - UCS4, + StringEncoding_Unknown = 0, + StringEncoding_ASCII, + StringEncoding_LATIN1, + StringEncoding_UTF8, + StringEncoding_UTF16, + StringEncoding_UTF32, + StringEncoding_UCS2, + StringEncoding_UCS4, }; // Represents a UTF-8 String. // Not null terminated. +typedef struct String8 String8; struct String8 { char* Str; size_t Size; }; -using String = String8; +typedef String8 String; +typedef struct String16 String16; struct String16 { uint16* Str; size_t Size; }; -struct StringBuffer : String +typedef struct StringBuffer StringBuffer; +struct StringBuffer { + union + { + String8 str8; + struct + { + char* Str; + size_t Size; + }; + }; size_t Capacity; }; +typedef struct UnicodeDecode UnicodeDecode; struct UnicodeDecode { uint32 Increment; uint32 Codepoint; }; -constexpr uint32 kInvalidUTF8 = 0xFFFD; +#define kInvalidUTF8 ((uint32)0xFFFDu) -inline size_t StringLength(String str) +static inline size_t StringLength(String str) { return str.Size; } -inline size_t StringLength(const char* str) +static inline size_t StringLengthCStr(const char* str) { size_t length = 0; - if (str) + if (str != NULL) { while (*str) { @@ -84,47 +90,46 @@ inline size_t StringLength(const char* str) return length; } -inline bool IsValid(String str) +static inline bool8 IsValidString(String str) { - return str.Size > 0 && str.Str != nullptr && *str.Str; + return (str.Size > 0 && str.Str != NULL && *str.Str != '\0'); } -inline String WrapString(const char* str) +static inline String WrapString(const char* str) { - String result = {}; - result.Str = const_cast(str); - result.Size = str ? strlen(str) : 0; + String result = { 0 }; + result.Str = (char*)str; + result.Size = (str != NULL) ? strlen(str) : 0; return result; } -inline String FindChar(String str, char c) +static inline String FindChar(String str, char c) { - String result = str; - while (result.Size) + String result = { 0 }; + String cursor = str; + while (cursor.Size > 0) { - if (*result.Str != c) + if (*cursor.Str == c) { - ++result.Str; - --result.Size; - } - else - { - return result; + result = cursor; + break; } + ++cursor.Str; + --cursor.Size; } - return {}; + return result; } -inline bool ContainsChar(String str, char c) +static inline bool8 ContainsChar(String str, char c) { - return IsValid(FindChar(str, c)); + return IsValidString(FindChar(str, c)); } // Return: // - < 0 if str1 < str2 // - = 0 : Both strings are equals // - > 0 if str1 > str2 -inline int32 StringCompare(String str1, String str2) +static inline int32 StringCompare(String str1, String str2) { size_t len1 = StringLength(str1); size_t len2 = StringLength(str2); @@ -134,62 +139,47 @@ inline int32 StringCompare(String str1, String str2) { if (len1 > len2) { - return 1; + result = 1; } - if (len1 < len2) + else if (len1 < len2) { - return -1; + result = -1; } - return 0; } return result; } -JULIET_API uint32 StepUTF8(String& inStr); +JULIET_API uint32 StepUTF8(String* inStr); JULIET_API String FindString(String strLeft, String strRight); // Case insensitive compare. Supports ASCII only -// TODO: Support UNICODE extern JULIET_API int8 StringCompareCaseInsensitive(String str1, String str2); -// Do not allocate anything, you must allocate your out buffer yourself -// TODO: Version taking arena that can allocate -// Do not take String type because we dont know the string encoding we are going from/to -// src and dst will be casted based on the encoding. -// size will correspond to the number of characters -// Will convert \0 character if present. -extern JULIET_API bool ConvertString(StringEncoding from, StringEncoding to, String src, StringBuffer& dst, bool nullTerminate); -extern JULIET_API bool ConvertString(String from, String to, String src, StringBuffer& dst, bool nullTerminate); +extern JULIET_API bool8 ConvertString(StringEncoding from, StringEncoding to, String src, StringBuffer* dst, bool8 nullTerminate); +extern JULIET_API bool8 ConvertStringByName(String from, String to, String src, StringBuffer* dst, bool8 nullTerminate); -JULIET_API String StringCopy(NonNullPtr arena, String str); -JULIET_API String16 str16_from_8(NonNullPtr arena, String8 str); +JULIET_API String StringCopy(Arena* arena, String str); +JULIET_API String16 str16_from_8(Arena* arena, String8 str); String trim_whitespace(String str); -template -String Format(NonNullPtr arena, const char* formatStr, Args&&... args) -{ - std::string result = std::vformat(formatStr, std::make_format_args(args...)); - return StringCopy(arena, WrapString(result.c_str())); -} +JULIET_API String StringFormatV(Arena* arena, const char* formatStr, va_list args); +JULIET_API String StringFormat(Arena* arena, const char* formatStr, ...); #define juliet_snprintf snprintf #ifdef UNIT_TEST -namespace UnitTest +static inline void UnitTest_TestFindChar(void) { - inline void TestFindChar() - { - String s1 = ConstString(""); - String s2 = ConstString("abcdefabcdef"); - String s3 = ConstString("11111111111111111111"); + String s1 = ConstString(""); + String s2 = ConstString("abcdefabcdef"); + String s3 = ConstString("11111111111111111111"); - Assert(FindChar(s1, 'x').Str == nullptr); - Assert(FindChar(s2, 'y').Str == nullptr); - Assert(FindChar(s2, 'a').Str - s2.Str == 0); - Assert(FindChar(s2, 'd').Str - s2.Str == 3); - Assert(FindChar(s2, 'f').Str - s2.Str == 5); - Assert(FindChar(s3, '1').Str - s3.Str == 0); - } -} // namespace UnitTest + Assert(FindChar(s1, 'x').Str == NULL); + Assert(FindChar(s2, 'y').Str == NULL); + Assert(FindChar(s2, 'a').Str - s2.Str == 0); + Assert(FindChar(s2, 'd').Str - s2.Str == 3); + Assert(FindChar(s2, 'f').Str - s2.Str == 5); + Assert(FindChar(s3, '1').Str - s3.Str == 0); +} #endif diff --git a/Juliet/include/Core/Common/serialization.h b/Juliet/include/Core/Common/serialization.h index 9f65b61..6660a7d 100644 --- a/Juliet/include/Core/Common/serialization.h +++ b/Juliet/include/Core/Common/serialization.h @@ -2,125 +2,102 @@ #include +#include #include #include +#include -// .jasset -// AssetFile ::= { CommentLine | EmptyLine | PropertyDeclaration } ; -// CommentLine ::= ( "#" | "//" ) { Character } LineEnding ; -// EmptyLine ::= { Whitespace } LineEnding ; -// PropertyDeclaration ::= KeyHeader LineEnding ValueBlock ; -// KeyHeader ::= ";" { Whitespace } Identifier ; -// ValueBlock ::= { ValueLine LineEnding } ; -// ValueLine ::= { Whitespace } ValueString { Whitespace } ; -// LineEnding ::= "\r\n" | "\n" ; -// Identifier ::= [a-zA-Z_][a-zA-Z0-9_]* ; - -struct Vector4; -struct IOStream; -struct Arena; +typedef struct IOStream IOStream; +typedef struct Arena Arena; +typedef struct ArchivePropertyNode ArchivePropertyNode; +typedef struct ParsedArchive ParsedArchive; +typedef struct Archive Archive; struct ArchivePropertyNode { String key; String value; uint32 key_crc; - bool consumed; + bool8 consumed; }; struct ParsedArchive { - ArchivePropertyNode* nodes = nullptr; - uint32 property_count = 0; + ArchivePropertyNode* nodes; + uint32 property_count; }; struct Archive { Arena* arena; - bool loading; - ParsedArchive base = {}; - IOStream* stream = nullptr; + bool8 loading; + ParsedArchive base; + IOStream* stream; - // to remove - void* base_ptr = nullptr; - index_t offset = 0; + void* base_ptr; + index_t offset; }; -JULIET_API void serialize(Archive& ar, void* data, size_t size); +JULIET_API void serialize_bytes(Archive* ar, void* data, size_t size); -#define serialize_elem(ar, val) serialize((ar), &(val), sizeof(val)) +#define serialize_elem(ar, val) serialize_bytes((ar), &(val), sizeof(val)) -JULIET_API ParsedArchive tokenize_archive(NonNullPtr arena, ByteBuffer file_buffer); -JULIET_API ArchivePropertyNode* find_property(NonNullPtr archive, uint32 property_crc); -JULIET_API void write_property_header(Archive& archive, String property_name); +JULIET_API ParsedArchive tokenize_archive(Arena* arena, ByteBuffer file_buffer); +JULIET_API ArchivePropertyNode* find_property(ParsedArchive* archive, uint32 property_crc); +JULIET_API void write_property_header(Archive* archive, String property_name); -JULIET_API bool read_prop(Archive& ar, String value_raw, String& value); -JULIET_API void write(NonNullPtr stream, String value); -JULIET_API bool read(const char* buffer, float& value, const char** end = nullptr); -JULIET_API void write(NonNullPtr stream, float value); -JULIET_API bool read(const char* buffer, int8& value); -JULIET_API void write(NonNullPtr stream, int8 value); -JULIET_API bool read(const char* buffer, int16& value); -JULIET_API void write(NonNullPtr stream, int16 value); -JULIET_API bool read(const char* buffer, int32& value); -JULIET_API void write(NonNullPtr stream, int32 value); -JULIET_API bool read(const char* buffer, int64& value); -JULIET_API void write(NonNullPtr stream, int64 value); -JULIET_API bool read(const char* buffer, uint8& value); -JULIET_API void write(NonNullPtr stream, uint8 value); -JULIET_API bool read(const char* buffer, uint16& value); -JULIET_API void write(NonNullPtr stream, uint16 value); -JULIET_API bool read(const char* buffer, uint32& value); -JULIET_API void write(NonNullPtr stream, uint32 value); -JULIET_API bool read(const char* buffer, uint64& value); -JULIET_API void write(NonNullPtr stream, uint64 value); -JULIET_API bool read(const char* buffer, bool& value); -JULIET_API void write(NonNullPtr stream, bool value); -JULIET_API bool read(const char* buffer, Vector4& value); -JULIET_API void write(NonNullPtr stream, Vector4 value); +JULIET_API bool8 read_prop_str(Archive* ar, String value_raw, String* value); +JULIET_API void write_str(IOStream* stream, String value); +JULIET_API bool8 read_f32(const char* buffer, float* value, const char** end); +JULIET_API void write_f32(IOStream* stream, float value); +JULIET_API bool8 read_i8(const char* buffer, int8* value); +JULIET_API void write_i8(IOStream* stream, int8 value); +JULIET_API bool8 read_i16(const char* buffer, int16* value); +JULIET_API void write_i16(IOStream* stream, int16 value); +JULIET_API bool8 read_i32(const char* buffer, int32* value); +JULIET_API void write_i32(IOStream* stream, int32 value); +JULIET_API bool8 read_i64(const char* buffer, int64* value); +JULIET_API void write_i64(IOStream* stream, int64 value); +JULIET_API bool8 read_u8(const char* buffer, uint8* value); +JULIET_API void write_u8(IOStream* stream, uint8 value); +JULIET_API bool8 read_u16(const char* buffer, uint16* value); +JULIET_API void write_u16(IOStream* stream, uint16 value); +JULIET_API bool8 read_u32(const char* buffer, uint32* value); +JULIET_API void write_u32(IOStream* stream, uint32 value); +JULIET_API bool8 read_u64(const char* buffer, uint64* value); +JULIET_API void write_u64(IOStream* stream, uint64 value); +JULIET_API bool8 read_b8(const char* buffer, bool8* value); +JULIET_API void write_b8(IOStream* stream, bool8 value); +JULIET_API bool8 read_vec4(const char* buffer, Vector4* value); +JULIET_API void write_vec4(IOStream* stream, Vector4 value); -// For primitives not needing archive nor allocation -template -bool read_prop(Archive& /*ar*/, String value_raw, Type& value) -{ - char buffer[64]; - size_t cpy_size = Min(value_raw.Size, sizeof(buffer) - 1); - MemCopy(buffer, value_raw.Str, cpy_size); - buffer[cpy_size] = '\0'; +JULIET_API bool8 serialize_str(Archive* ar, String property_name, String* value); +JULIET_API bool8 serialize_f32(Archive* ar, String property_name, float* value); +JULIET_API bool8 serialize_i8(Archive* ar, String property_name, int8* value); +JULIET_API bool8 serialize_i16(Archive* ar, String property_name, int16* value); +JULIET_API bool8 serialize_i32(Archive* ar, String property_name, int32* value); +JULIET_API bool8 serialize_i64(Archive* ar, String property_name, int64* value); +JULIET_API bool8 serialize_u8(Archive* ar, String property_name, uint8* value); +JULIET_API bool8 serialize_u16(Archive* ar, String property_name, uint16* value); +JULIET_API bool8 serialize_u32(Archive* ar, String property_name, uint32* value); +JULIET_API bool8 serialize_u64(Archive* ar, String property_name, uint64* value); +JULIET_API bool8 serialize_b8(Archive* ar, String property_name, bool8* value); +JULIET_API bool8 serialize_vec4(Archive* ar, String property_name, Vector4* value); - return read(buffer, value); -} - -#define SERIALIZE(ar, name, var) serialize((ar), ConstString(#name), #name##_crc32, (var)) -#define SERIALIZE_SIMPLE(ar, var) SERIALIZE(ar, var, var) - -template -bool serialize(Archive& ar, String property_name, uint32 property_crc, Type& value) -{ - Assert(IsValid(property_name)); - - bool result = false; - if (ar.loading) - { - if (auto* prop = find_property(&ar.base, property_crc)) - { - if (read_prop(ar, prop->value, value)) - { - result = true; - } - } - } - else - { - // Save - write_property_header(ar, property_name); - write(ar.stream, value); - result = true; - } - - return result; -} +#define SERIALIZE_STR(ar, name, var_ptr) serialize_str((ar), ConstString(#name), (var_ptr)) +#define SERIALIZE_F32(ar, name, var_ptr) serialize_f32((ar), ConstString(#name), (var_ptr)) +#define SERIALIZE_I8(ar, name, var_ptr) serialize_i8((ar), ConstString(#name), (var_ptr)) +#define SERIALIZE_I16(ar, name, var_ptr) serialize_i16((ar), ConstString(#name), (var_ptr)) +#define SERIALIZE_I32(ar, name, var_ptr) serialize_i32((ar), ConstString(#name), (var_ptr)) +#define SERIALIZE_I64(ar, name, var_ptr) serialize_i64((ar), ConstString(#name), (var_ptr)) +#define SERIALIZE_U8(ar, name, var_ptr) serialize_u8((ar), ConstString(#name), (var_ptr)) +#define SERIALIZE_U16(ar, name, var_ptr) serialize_u16((ar), ConstString(#name), (var_ptr)) +#define SERIALIZE_U32(ar, name, var_ptr) serialize_u32((ar), ConstString(#name), (var_ptr)) +#define SERIALIZE_U64(ar, name, var_ptr) serialize_u64((ar), ConstString(#name), (var_ptr)) +#define SERIALIZE_B8(ar, name, var_ptr) serialize_b8((ar), ConstString(#name), (var_ptr)) +#define SERIALIZE_BOOL(ar, name, var_ptr) serialize_b8((ar), ConstString(#name), (var_ptr)) +#define SERIALIZE_VEC4(ar, name, var_ptr) serialize_vec4((ar), ConstString(#name), (var_ptr)) #if JULIET_DEBUG -JULIET_API void audit_unconsumed_properties(NonNullPtr archive, String context_name); +JULIET_API void audit_unconsumed_properties(ParsedArchive* archive, String context_name); #endif diff --git a/Juliet/include/Core/Container/Vector.h b/Juliet/include/Core/Container/Vector.h index 5031ffe..9b3f855 100644 --- a/Juliet/include/Core/Container/Vector.h +++ b/Juliet/include/Core/Container/Vector.h @@ -1,211 +1,232 @@ -#pragma once +#pragma once -#include +#include #include +#include -template +typedef struct VectorArena VectorArena; struct VectorArena { - void Create(NonNullPtr arena JULIET_DEBUG_PARAM(const char* name = nullptr)) + Arena* Arena; + void* DataFirst; + void* DataLast; + void* Data; + union { - Assert(!Arena); - - JULIET_DEBUG_ONLY(Name = name ? name : Name;) - - DataFirst = DataLast = Data = nullptr; - Count = 0; - Capacity = 0; - Arena = arena; - - Reserve(ReserveSize); - } - - void Destroy() - { - DataFirst = DataLast = Data = nullptr; - Count = 0; - Capacity = 0; - Arena = nullptr; - } - - void Reserve(size_t newCapacity) - { - Assert(Arena); - Assert(newCapacity <= ReserveSize && "VectorArena capacity should be <= ReserveSize."); - - if (Data == nullptr) - { - Data = ArenaPushArray(Arena, newCapacity JULIET_DEBUG_PARAM(Name)); - Capacity = newCapacity; - } - else - { - Unimplemented(); - } - } - - void Resize(size_t newCount) - { - Assert(Arena); - if (newCount == Count) - { - return; - } - - if (Data == nullptr) - { - size_t initialCapacity = newCount > ReserveSize ? newCount : ReserveSize; - Reserve(initialCapacity); - } - - Assert(newCount <= Capacity && "VectorArena capacity exceeded!"); - Count = newCount; - - if (Count > 0) - { - DataFirst = Data; - DataLast = Data + Count - 1; - } - else - { - DataFirst = DataLast = nullptr; - } - } - - void PushBack(const Type* buffer, size_t amount) - { - Assert(Arena); - Assert(buffer || amount == 0); - - if (amount == 0) - { - return; - } - - if (Data == nullptr) - { - size_t initialCapacity = amount > ReserveSize ? amount : ReserveSize; - Reserve(initialCapacity); - } - - Assert(Count + amount <= Capacity && "VectorArena capacity exceeded!"); - - Type* dst = Data + Count; - MemCopy(dst, buffer, amount * sizeof(Type)); - - if (Count == 0) - { - DataFirst = dst; - } - DataLast = dst + amount - 1; - Count += amount; - } - - void PushBack(const Type& value) - { - Assert(Arena); - - if (Data == nullptr) - { - Reserve(ReserveSize); - } - - Assert(Count + 1 <= Capacity && "VectorArena capacity exceeded!"); - - Type* entry = Data + Count; - *entry = value; - - if (Count == 0) - { - DataFirst = entry; - } - DataLast = entry; - ++Count; - } - - void PushBack(Type&& value) - { - Assert(Arena); - - if (Data == nullptr) - { - Reserve(ReserveSize); - } - - Assert(Count + 1 <= Capacity && "VectorArena capacity exceeded!"); - - Type* entry = Data + Count; - *entry = std::move(value); - - if (Count == 0) - { - DataFirst = entry; - } - DataLast = entry; - ++Count; - } - - void RemoveAtFast(index_t index) - { - Assert(Arena); - Assert(index < Count); - Assert(Count > 0); - - Type* elementAdr = DataFirst + index; - - // Swap DataLast and element - if (DataLast != elementAdr) - { - Swap(DataLast, elementAdr); - } - - --DataLast; - --Count; - - if (Count == 0) - { - DataFirst = DataLast = nullptr; - } - } - - void Clear() - { - Assert(Arena); - - DataFirst = DataLast = nullptr; - Count = 0; - } - - [[nodiscard]] bool IsEmpty() const { return Count == 0; } - - // C++ Accessors for loop supports and Index based access - [[nodiscard]] Type& operator[](size_t index) { return DataFirst[index]; } - [[nodiscard]] const Type& operator[](size_t index) const { return DataFirst[index]; } - - [[nodiscard]] Type* begin() { return DataFirst; } - [[nodiscard]] Type* end() { return DataFirst + Count; } - - [[nodiscard]] const Type* begin() const { return DataFirst; } - [[nodiscard]] const Type* end() const { return DataFirst + Count; } - - [[nodiscard]] Type* First() { return DataFirst; } - [[nodiscard]] Type* Front() { return DataFirst; } - [[nodiscard]] Type* Last() { return DataLast; } - [[nodiscard]] Type* Back() { return DataLast; } - [[nodiscard]] Type* DataPtr() { return Data; } - [[nodiscard]] const Type* DataPtr() const { return Data; } - - [[nodiscard]] size_t Size() const { return Count; } - - Arena* Arena = nullptr; - Type* DataFirst = nullptr; - Type* DataLast = nullptr; - Type* Data = nullptr; - size_t Count = 0; - size_t Capacity = 0; - JULIET_DEBUG_ONLY(const char* Name = "VectorArena";) + size_t Count; + size_t Size; + }; + size_t Capacity; + size_t ElemSize; + size_t ElemAlign; + size_t ReserveSize; + JULIET_DEBUG_ONLY(const char* Name;) }; -static_assert(std::is_standard_layout_v>, - "VectorArena must have a standard layout to remain POD-like."); -static_assert(std::is_trivially_copyable_v>, - "VectorArena must be trivially copyable (no custom destructors/assignment)."); + +#define kDefaultVectorReserveSize ((size_t)16) +#define kVectorArenaDefaultReserveSize ((size_t)16) + +static inline void vector_arena_reserve(VectorArena* vec, size_t new_capacity) +{ + Assert(vec != NULL); + Assert(vec->Arena != NULL); + Assert(new_capacity <= vec->ReserveSize && "VectorArena capacity should be <= ReserveSize."); + + if (vec->Data == NULL) + { + vec->Data = ArenaPush(vec->Arena, new_capacity * vec->ElemSize, Max(8ull, (uint64)vec->ElemAlign), + true JULIET_DEBUG_PARAM(vec->Name)); + vec->Capacity = new_capacity; + } + else + { + Unimplemented(); + } +} + +static inline void vector_arena_create(VectorArena* vec, Arena* arena, size_t elem_size, size_t elem_align, + size_t reserve_size JULIET_DEBUG_PARAM(const char* name)) +{ + Assert(vec != NULL); + Assert(arena != NULL); + Assert(vec->Arena == NULL); + Assert(elem_size > 0); + + JULIET_DEBUG_ONLY(vec->Name = (name != NULL) ? name : "VectorArena";) + + vec->DataFirst = NULL; + vec->DataLast = NULL; + vec->Data = NULL; + vec->Count = 0; + vec->Capacity = 0; + vec->ElemSize = elem_size; + vec->ElemAlign = elem_align; + vec->ReserveSize = (reserve_size > 0) ? reserve_size : 16; + vec->Arena = arena; + + vector_arena_reserve(vec, vec->ReserveSize); +} + +static inline void vector_arena_destroy(VectorArena* vec) +{ + Assert(vec != NULL); + vec->DataFirst = NULL; + vec->DataLast = NULL; + vec->Data = NULL; + vec->Count = 0; + vec->Capacity = 0; + vec->Arena = NULL; +} + +static inline void* vector_arena_begin(VectorArena* vec) +{ + Assert(vec != NULL); + return vec->DataFirst; +} + +static inline const void* vector_arena_begin_const(const VectorArena* vec) +{ + Assert(vec != NULL); + return vec->DataFirst; +} + +static inline void* vector_arena_end(VectorArena* vec) +{ + Assert(vec != NULL); + void* result = NULL; + if (vec->DataFirst != NULL) + { + result = (Byte*)vec->DataFirst + (vec->Count * vec->ElemSize); + } + return result; +} + +static inline const void* vector_arena_end_const(const VectorArena* vec) +{ + Assert(vec != NULL); + const void* result = NULL; + if (vec->DataFirst != NULL) + { + result = (const Byte*)vec->DataFirst + (vec->Count * vec->ElemSize); + } + return result; +} + +static inline void vector_arena_resize(VectorArena* vec, size_t new_size) +{ + Assert(vec != NULL); + Assert(new_size <= vec->Capacity); + vec->Count = new_size; + if (vec->Count > 0) + { + vec->DataFirst = vec->Data; + vec->DataLast = (Byte*)vec->Data + ((vec->Count - 1) * vec->ElemSize); + } + else + { + vec->DataFirst = NULL; + vec->DataLast = NULL; + } +} + +static inline void vector_arena_push_buffer(VectorArena* vec, const void* buffer, size_t amount) +{ + Assert(vec != NULL); + Assert(buffer != NULL); + Assert(amount > 0); + Assert(vec->Count + amount <= vec->Capacity && "VectorArena capacity exceeded!"); + + Byte* dest = (Byte*)vec->Data + (vec->Count * vec->ElemSize); + MemCopy(dest, buffer, amount * vec->ElemSize); + + if (vec->DataFirst == NULL) + { + vec->DataFirst = vec->Data; + } + + vec->Count += amount; + vec->DataLast = (Byte*)vec->Data + ((vec->Count - 1) * vec->ElemSize); +} + +#define vector_arena_push_array vector_arena_push_buffer + +static inline void vector_arena_push_elem(VectorArena* vec, const void* value_ptr) +{ + Assert(vec != NULL); + Assert(value_ptr != NULL); + Assert(vec->Count + 1 <= vec->Capacity && "VectorArena capacity exceeded!"); + + Byte* dest = (Byte*)vec->Data + (vec->Count * vec->ElemSize); + MemCopy(dest, value_ptr, vec->ElemSize); + + if (vec->DataFirst == NULL) + { + vec->DataFirst = vec->Data; + } + + vec->Count += 1; + vec->DataLast = dest; +} + +static inline void vector_arena_remove_at_fast(VectorArena* vec, index_t index) +{ + Assert(vec != NULL); + Assert(index < vec->Count); + + size_t last_idx = vec->Count - 1; + if (index != last_idx) + { + Byte* dst = (Byte*)vec->DataFirst + (index * vec->ElemSize); + Byte* src = (Byte*)vec->DataFirst + (last_idx * vec->ElemSize); + MemCopy(dst, src, vec->ElemSize); + } + + vec->Count -= 1; + if (vec->Count == 0) + { + vec->DataFirst = NULL; + vec->DataLast = NULL; + } + else + { + vec->DataLast = (Byte*)vec->DataFirst + ((vec->Count - 1) * vec->ElemSize); + } +} + +static inline void vector_arena_clear(VectorArena* vec) +{ + Assert(vec != NULL); + vec->DataFirst = NULL; + vec->DataLast = NULL; + vec->Count = 0; +} + +static inline bool8 vector_arena_is_empty(const VectorArena* vec) +{ + Assert(vec != NULL); + return vec->Count == 0; +} + +static inline size_t vector_arena_size(const VectorArena* vec) +{ + Assert(vec != NULL); + return vec->Count; +} + +#define VectorArenaCreate(vec, Type, arena, ...) \ + vector_arena_create((vec), (arena), sizeof(Type), AlignOf(Type), __VA_ARGS__) + +#define VectorArenaAt(Type, vec, idx) (((Type*)((vec)->DataFirst))[idx]) +#define VectorArenaData(Type, vec) ((Type*)((vec)->Data)) +#define VectorArenaBegin(Type, vec) ((Type*)((vec)->DataFirst)) +#define VectorArenaEnd(Type, vec) (((vec)->DataFirst != NULL) ? (((Type*)((vec)->DataFirst)) + (vec)->Count) : NULL) +#define VectorArenaLast(Type, vec) ((Type*)((vec)->DataLast)) +#define VectorArenaBack(Type, vec) ((Type*)((vec)->DataLast)) +#define VectorArenaPushPtr(Type, vec, ptr) vector_arena_push_elem((vec), (ptr)) +#define VectorArenaPushVal(Type, vec, val) \ + do \ + { \ + Type _vec_tmp_val = (val); \ + vector_arena_push_elem((vec), &_vec_tmp_val); \ + } \ + while (0) diff --git a/Juliet/include/Core/HAL/Display/Display.h b/Juliet/include/Core/HAL/Display/Display.h index e7ebd21..53cfd7a 100644 --- a/Juliet/include/Core/HAL/Display/Display.h +++ b/Juliet/include/Core/HAL/Display/Display.h @@ -1,16 +1,16 @@ -#pragma once +#pragma once -#include #include -struct Window; +typedef struct Window Window; -using WindowID = uint8; -extern JULIET_API Window* CreatePlatformWindow(const char* title, uint16 width, uint16 height, int flags = 0 /* unused */); -extern JULIET_API void DestroyPlatformWindow(NonNullPtr window); +typedef uint8 WindowID; -extern JULIET_API void ShowWindow(NonNullPtr window); -extern JULIET_API void HideWindow(NonNullPtr window); +extern JULIET_API Window* CreatePlatformWindow(const char* title, uint16 width, uint16 height, int flags); +extern JULIET_API void DestroyPlatformWindow(Window* window); -extern JULIET_API WindowID GetWindowID(NonNullPtr window); -extern JULIET_API void SetWindowTitle(NonNullPtr window, String title); +extern JULIET_API void ShowPlatformWindow(Window* window); +extern JULIET_API void HidePlatformWindow(Window* window); + +extern JULIET_API WindowID GetWindowID(Window* window); +extern JULIET_API void SetWindowTitle(Window* window, String title); diff --git a/Juliet/include/Core/HAL/DynLib/DynamicLibrary.h b/Juliet/include/Core/HAL/DynLib/DynamicLibrary.h index 9d7535b..814e76f 100644 --- a/Juliet/include/Core/HAL/DynLib/DynamicLibrary.h +++ b/Juliet/include/Core/HAL/DynLib/DynamicLibrary.h @@ -1,9 +1,10 @@ -#pragma once +#pragma once -#include +#include +#include -struct DynamicLibrary; +typedef struct DynamicLibrary DynamicLibrary; extern JULIET_API DynamicLibrary* LoadDynamicLibrary(const char* filename); -extern JULIET_API FunctionPtr LoadFunction(NonNullPtr lib, const char* functionName); -extern JULIET_API void UnloadDynamicLibrary(NonNullPtr lib); +extern JULIET_API FunctionPtr LoadFunction(DynamicLibrary* lib, const char* functionName); +extern JULIET_API void UnloadDynamicLibrary(DynamicLibrary* lib); diff --git a/Juliet/include/Core/HAL/Event/SystemEvent.h b/Juliet/include/Core/HAL/Event/SystemEvent.h index f219471..09614e0 100644 --- a/Juliet/include/Core/HAL/Event/SystemEvent.h +++ b/Juliet/include/Core/HAL/Event/SystemEvent.h @@ -1,53 +1,57 @@ -#pragma once +#pragma once +#include #include #include #include #include #include -// Handles all events from systems handling the Hardware -// Very inspired by SDL3 - -enum class EventType : uint32 +typedef uint32 EventType; +enum { - None = 0, - First = None, + EventType_None = 0, + EventType_First = EventType_None, // Application Events - // User querying an exit - Application_Exit = 100, - // OS terminating the application - Application_OS_Terminate, - Application_Begin = Application_Exit, - Application_End = Application_OS_Terminate, + EventType_Application_Exit = 100, + EventType_Application_OS_Terminate = 101, + EventType_Application_Begin = EventType_Application_Exit, + EventType_Application_End = EventType_Application_OS_Terminate, // Window Events - Window_Close_Request = 200, - Window_Begin = Window_Close_Request, - Window_End = Window_Close_Request, + EventType_Window_Close_Request = 200, + EventType_Window_Begin = EventType_Window_Close_Request, + EventType_Window_End = EventType_Window_Close_Request, // Keyboard Event - Key_Down = 300, - Key_Up, - Keyboard_Begin = Key_Down, - Keyboard_End = Key_Up, + EventType_Key_Down = 300, + EventType_Key_Up = 301, + EventType_Keyboard_Begin = EventType_Key_Down, + EventType_Keyboard_End = EventType_Key_Up, // Mouse Event - Mouse_Move = 400, - Mouse_ButtonPressed, - Mouse_ButtonReleased, + EventType_Mouse_Move = 400, + EventType_Mouse_ButtonPressed = 401, + EventType_Mouse_ButtonReleased = 402, - Mouse_Begin = Mouse_Move, - Mouse_End = Mouse_ButtonReleased, + EventType_Mouse_Begin = EventType_Mouse_Move, + EventType_Mouse_End = EventType_Mouse_ButtonReleased, - Last // Get value from the previous one + EventType_Last }; +typedef struct WindowEvent WindowEvent; +typedef struct KeyboardEvent KeyboardEvent; +typedef struct MouseMovementEvent MouseMovementEvent; +typedef struct MouseButtonEvent MouseButtonEvent; +typedef union AllSystemEventUnion AllSystemEventUnion; +typedef struct SystemEvent SystemEvent; + struct WindowEvent { WindowID AssociatedWindowID; - uint32 DataPadding[2]; // TODO : define how much data param we need + uint32 DataPadding[2]; }; struct KeyboardEvent @@ -59,9 +63,6 @@ struct KeyboardEvent KeyMod KeyModeState; }; -// ===================================================== -// Mouse Events -// ===================================================== struct MouseMovementEvent { MouseID AssociatedMouseID; @@ -80,20 +81,18 @@ struct MouseButtonEvent float X; float Y; MouseButton ButtonState; - bool IsPressed : 1; + bool8 IsPressed; }; -// Tagged union representing ALL possible system events + a bit of data for custom event if needed union AllSystemEventUnion { WindowEvent Window; KeyboardEvent Keyboard; MouseMovementEvent MouseMovement; MouseButtonEvent MouseButton; - uint8 Padding[128]; // Make sure that the union is fixed in size and big enough on all platforms. + uint8 Padding[128]; }; -// Make sure we do not bust the union size -static_assert(sizeof(AllSystemEventUnion) == sizeof(((AllSystemEventUnion*)nullptr)->Padding)); +StaticAssert(sizeof(AllSystemEventUnion) == 128, SystemEventUnionSizeCheck); struct SystemEvent { @@ -102,19 +101,7 @@ struct SystemEvent AllSystemEventUnion Data; }; -// Poll for any event, return false if no event is available. -// Equivalent to WaitEvent(event, 0); -// Will not block -extern JULIET_API bool GetEvent(SystemEvent& event); - -// TODO : use chrono to tag the timeout correctly with nanosec -// timeout == -1 means wait for any event before pursuing -// timeout == 0 means checking once for the frame and getting out -// timeout > 0 means wait until time is out -extern JULIET_API bool WaitEvent(SystemEvent& event, int32 timeoutInNS = -1); - -// Add an event onto the event queue. -// TODO : support array of events -extern JULIET_API bool AddEvent(SystemEvent& event); - -extern void Events_NewFrame(float deltaTime); +extern JULIET_API bool8 GetEvent(SystemEvent* event); +extern JULIET_API bool8 WaitEvent(SystemEvent* event, int32 timeoutInNS); +extern JULIET_API bool8 AddEvent(SystemEvent* event); +extern void Events_NewFrame(float deltaTime); diff --git a/Juliet/include/Core/HAL/Filesystem/Filesystem.h b/Juliet/include/Core/HAL/Filesystem/Filesystem.h index 648ab6d..1d192ed 100644 --- a/Juliet/include/Core/HAL/Filesystem/Filesystem.h +++ b/Juliet/include/Core/HAL/Filesystem/Filesystem.h @@ -2,41 +2,43 @@ #include -enum class AssetType +typedef uint32 AssetType; +enum { - JAsset, - Shader, - Config, + AssetType_JAsset = 0, + AssetType_Shader = 1, + AssetType_Config = 2, }; +typedef struct Path Path; struct Path { String Directories; String FullPath; }; -JULIET_API bool IsValid(Path path); +JULIET_API bool8 IsValidPath(Path path); // Returns the path to the application directory -JULIET_API Path GetBasePath(); +JULIET_API Path GetBasePath(void); // Path to the /Assets/ folder -JULIET_API Path GetAssetBasePath(); +JULIET_API Path GetAssetBasePath(void); // Builds a full path to an asset file given its filename (e.g. "Triangle.vert.dxil"). -JULIET_API Path GetAssetPath(NonNullPtr arena, AssetType type, String filename); +JULIET_API Path GetAssetPath(Arena* arena, AssetType type, String filename); -JULIET_API bool IsAbsolutePath(String path); +JULIET_API bool8 IsAbsolutePath(String path); -JULIET_API Path fs_create_clean_path(NonNullPtr arena, String path); +JULIET_API Path fs_create_clean_path(Arena* arena, String path); -JULIET_API bool fs_create_directory(String path, bool recursive); +JULIET_API bool8 fs_create_directory(String path, bool8 recursive); -JULIET_API bool fs_path_exists(String path); +JULIET_API bool8 fs_path_exists(String path); -JULIET_API bool fs_move_file(Path old_path, Path new_path); +JULIET_API bool8 fs_move_file(Path old_path, Path new_path); -JULIET_API bool fs_delete_file(String path); +JULIET_API bool8 fs_delete_file(String path); -using fs_iterate_director_callback = void (*)(Path path, bool is_director, void* user_payload); -JULIET_API void fs_iterate_directory(Path directory_path, String extension, void* user_payload, fs_iterate_director_callback callback); +typedef void (*fs_iterate_director_callback)(Path path, bool8 is_director, void* user_payload); +JULIET_API void fs_iterate_directory(Path directory_path, String extension, void* user_payload, fs_iterate_director_callback callback); diff --git a/Juliet/include/Core/HAL/IO/IOStream.h b/Juliet/include/Core/HAL/IO/IOStream.h index f08a985..a3bc576 100644 --- a/Juliet/include/Core/HAL/IO/IOStream.h +++ b/Juliet/include/Core/HAL/IO/IOStream.h @@ -1,69 +1,69 @@ -#pragma once +#pragma once -#include #include +#include #include -#include "Core/HAL/Filesystem/Filesystem.h" // Opaque type -struct IOStream; +typedef struct IOStream IOStream; +typedef struct IOStreamDataPayload IOStreamDataPayload; struct IOStreamDataPayload { + uint8 unused; }; -enum class IOStreamStatus : uint8 +typedef uint8 IOStreamStatus; +enum { - Ready, - Error, - EndOfFile, - NotReady, - ReadOnly, - WriteOnly + IOStreamStatus_Ready = 0, + IOStreamStatus_Error, + IOStreamStatus_EndOfFile, + IOStreamStatus_NotReady, + IOStreamStatus_ReadOnly, + IOStreamStatus_WriteOnly }; -enum class IOStreamSeekPivot : uint8 +typedef uint8 IOStreamSeekPivot; +enum { - Begin, - Current, - End, - Count + IOStreamSeekPivot_Begin = 0, + IOStreamSeekPivot_Current, + IOStreamSeekPivot_End, + IOStreamSeekPivot_Count }; -// IOStream can be opened on a file or memory, or anything else. -// Use the interface to make it transparent to the user. +typedef struct IOStreamInterface IOStreamInterface; struct IOStreamInterface { uint32 Version; - int64 (*Size)(NonNullPtr data); + int64 (*Size)(IOStreamDataPayload* data); - int64 (*Seek)(NonNullPtr data, int64 offset, IOStreamSeekPivot pivot); - size_t (*Read)(NonNullPtr data, void* outBuffer, size_t size, NonNullPtr status); - size_t (*Write)(NonNullPtr data, ByteBuffer inBuffer, NonNullPtr status); - bool (*Flush)(NonNullPtr data, NonNullPtr status); + int64 (*Seek)(IOStreamDataPayload* data, int64 offset, IOStreamSeekPivot pivot); + size_t (*Read)(IOStreamDataPayload* data, void* outBuffer, size_t size, IOStreamStatus* status); + size_t (*Write)(IOStreamDataPayload* data, ByteBuffer inBuffer, IOStreamStatus* status); + bool8 (*Flush)(IOStreamDataPayload* data, IOStreamStatus* status); - bool (*Close)(NonNullPtr data); + bool8 (*Close)(IOStreamDataPayload* data); }; -extern JULIET_API IOStream* IOFromFile(NonNullPtr arena, String filename, String mode); +extern JULIET_API IOStream* IOFromFile(Arena* arena, String filename, String mode); -// Let you use an interface to open any io. Is used internally by IOFromFile -extern JULIET_API IOStream* IOFromInterface(NonNullPtr arena, NonNullPtr streamInterface, - NonNullPtr payload); +extern JULIET_API IOStream* IOFromInterface(Arena* arena, const IOStreamInterface* streamInterface, + IOStreamDataPayload* payload); -// Write formatted string into the stream. -JULIET_API size_t IOPrintf(NonNullPtr stream, _Printf_format_string_ const char* format, ...); -JULIET_API size_t IOWrite(NonNullPtr stream, ByteBuffer inBuffer); +JULIET_API size_t IOPrintf(IOStream* stream, const char* format, ...); +JULIET_API size_t IOWrite(IOStream* stream, ByteBuffer inBuffer); -JULIET_API size_t IORead(NonNullPtr stream, void* ptr, size_t size); -JULIET_API int64 IOSeek(NonNullPtr stream, int64 offset, IOStreamSeekPivot pivot); +JULIET_API size_t IORead(IOStream* stream, void* ptr, size_t size); +JULIET_API int64 IOSeek(IOStream* stream, int64 offset, IOStreamSeekPivot pivot); -JULIET_API int64 IOSize(NonNullPtr stream); +JULIET_API int64 IOSize(IOStream* stream); -JULIET_API ByteBuffer LoadFile(NonNullPtr arena, String filename); -JULIET_API ByteBuffer LoadFile(NonNullPtr arena, NonNullPtr stream, bool closeStreamWhenDone); +JULIET_API ByteBuffer LoadFile(Arena* arena, String filename); +JULIET_API ByteBuffer LoadFileFromStream(Arena* arena, IOStream* stream, bool8 closeStreamWhenDone); -JULIET_API size_t IO_atomic_file_write(Path filepath, ByteBuffer file_content); +JULIET_API size_t IO_atomic_file_write(Path filepath, ByteBuffer file_content); -JULIET_API bool IOClose(NonNullPtr stream); +JULIET_API bool8 IOClose(IOStream* stream); diff --git a/Juliet/include/Core/HAL/Keyboard/KeyCode.h b/Juliet/include/Core/HAL/Keyboard/KeyCode.h index 6d2924d..428e202 100644 --- a/Juliet/include/Core/HAL/Keyboard/KeyCode.h +++ b/Juliet/include/Core/HAL/Keyboard/KeyCode.h @@ -1,188 +1,183 @@ -#pragma once +#pragma once -// Represents a Virtual Key corresponding to the Physical key, but localized using the keyboard layout -// ScanCode reprensent US ASCII Keyboard -// WASD Scan codes are ZQSD in KeyCode for French keyboard -// We use the ASCII value of the generated character as value, when possible. -// Keys that do not produce a character are converted to an abritrary value high enough to not conflict -// Reference: https://www.asciitable.com/ -// Reference: https://learn.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-6.0/aa299374(v=vs.60) -enum class KeyCode : uint32 +#include + +typedef uint32 KeyCode; +enum { - Unknown = 0x0, // 0 - Unsupported = 0x0, // 0 - Return = 0X0Du, // '\r' - Escape = 0X1Bu, // '\X1B' - Backspace = 0X08u, // '\b' - Tab = 0X09u, // '\t' - Space = 0X20u, // ' ' - ExclamationPoint = 0X21u, // '!' - DoubleApostrophe = 0X22u, // '"' - Hash = 0X23u, // '#' - Dollar = 0X24u, // '$' - Percent = 0X25u, // '%' - Ampersand = 0X26u, // '&' - Apostrophe = 0X27u, // '\'' - LeftParenthesis = 0X28u, // '(' - RightParenthesis = 0X29u, // ')' - Asterisk = 0X2Au, // '*' - Plus = 0X2Bu, // '+' - Comma = 0X2Cu, // ',' - Minus = 0X2Du, // '-' - Period = 0X2Eu, // '.' - Slash = 0X2Fu, // '/' - Num0 = 0X30u, // '0' - Num1 = 0X31u, // '1' - Num2 = 0X32u, // '2' - Num3 = 0X33u, // '3' - Num4 = 0X34u, // '4' - Num5 = 0X35u, // '5' - Num6 = 0X36u, // '6' - Num7 = 0X37u, // '7' - Num8 = 0X38u, // '8' - Num9 = 0X39u, // '9' - Colon = 0X3Au, // ':' - Semicolon = 0X3Bu, // ';' - LessThan = 0X3Cu, // '<' - Equals = 0X3Du, // '=' - GreaterThan = 0X3Eu, // '>' - QuestionMark = 0X3Fu, // '?' - CommercialAt = 0x40u, // '@' - LeftBracket = 0X5Bu, // '[' - Backslash = 0X5Cu, // '\\' - RightBracket = 0X5DU, // ']' - Caret = 0X5Eu, // '^' - Underscore = 0X5Fu, // '_' - GraveAccent = 0X60u, // '`' - A = 0x61u, // 'a' - B = 0x62u, // 'b' - C = 0x63u, // 'c' - D = 0x64u, // 'd' - E = 0x65u, // 'e' - F = 0x66u, // 'f' - G = 0x67u, // 'g' - H = 0x68u, // 'h' - I = 0x69u, // 'i' - J = 0x6Au, // 'j' - K = 0x6Bu, // 'k' - L = 0x6CU, // 'l' - M = 0x6DU, // 'm' - N = 0x6Eu, // 'n' - O = 0x6Fu, // 'o' - P = 0x70u, // 'p' - Q = 0x71u, // 'q' - R = 0x72u, // 'r' - S = 0x73u, // 's' - T = 0x74u, // 't' - U = 0x75u, // 'y' - V = 0x76u, // 'v' - W = 0x77u, // 'w' - X = 0x78u, // 'x' - Y = 0x79u, // 'y' - Z = 0x7Au, // 'z' - LeftBrace = 0x7BU, // '{' - Pipe = 0x7CU, // '|' - RightBrace = 0x7DU, // '}' - Tilde = 0x7Eu, // '~' - Delete = 0x7Fu, // '\x7F' - PlusMinus = 0xb1u, // '\xB1' + KeyCode_Unknown = 0x0u, + KeyCode_Unsupported = 0x0u, + KeyCode_Return = 0x0Du, + KeyCode_Escape = 0x1Bu, + KeyCode_Backspace = 0x08u, + KeyCode_Tab = 0x09u, + KeyCode_Space = 0x20u, + KeyCode_ExclamationPoint = 0x21u, + KeyCode_DoubleApostrophe = 0x22u, + KeyCode_Hash = 0x23u, + KeyCode_Dollar = 0x24u, + KeyCode_Percent = 0x25u, + KeyCode_Ampersand = 0x26u, + KeyCode_Apostrophe = 0x27u, + KeyCode_LeftParenthesis = 0x28u, + KeyCode_RightParenthesis = 0x29u, + KeyCode_Asterisk = 0x2Au, + KeyCode_Plus = 0x2Bu, + KeyCode_Comma = 0x2Cu, + KeyCode_Minus = 0x2Du, + KeyCode_Period = 0x2Eu, + KeyCode_Slash = 0x2Fu, + KeyCode_Num0 = 0x30u, + KeyCode_Num1 = 0x31u, + KeyCode_Num2 = 0x32u, + KeyCode_Num3 = 0x33u, + KeyCode_Num4 = 0x34u, + KeyCode_Num5 = 0x35u, + KeyCode_Num6 = 0x36u, + KeyCode_Num7 = 0x37u, + KeyCode_Num8 = 0x38u, + KeyCode_Num9 = 0x39u, + KeyCode_Colon = 0x3Au, + KeyCode_Semicolon = 0x3Bu, + KeyCode_LessThan = 0x3Cu, + KeyCode_Equals = 0x3Du, + KeyCode_GreaterThan = 0x3Eu, + KeyCode_QuestionMark = 0x3Fu, + KeyCode_CommercialAt = 0x40u, + KeyCode_LeftBracket = 0x5Bu, + KeyCode_Backslash = 0x5Cu, + KeyCode_RightBracket = 0x5Du, + KeyCode_Caret = 0x5Eu, + KeyCode_Underscore = 0x5Fu, + KeyCode_GraveAccent = 0x60u, + KeyCode_A = 0x61u, + KeyCode_B = 0x62u, + KeyCode_C = 0x63u, + KeyCode_D = 0x64u, + KeyCode_E = 0x65u, + KeyCode_F = 0x66u, + KeyCode_G = 0x67u, + KeyCode_H = 0x68u, + KeyCode_I = 0x69u, + KeyCode_J = 0x6Au, + KeyCode_K = 0x6Bu, + KeyCode_L = 0x6Cu, + KeyCode_M = 0x6Du, + KeyCode_N = 0x6Eu, + KeyCode_O = 0x6Fu, + KeyCode_P = 0x70u, + KeyCode_Q = 0x71u, + KeyCode_R = 0x72u, + KeyCode_S = 0x73u, + KeyCode_T = 0x74u, + KeyCode_U = 0x75u, + KeyCode_V = 0x76u, + KeyCode_W = 0x77u, + KeyCode_X = 0x78u, + KeyCode_Y = 0x79u, + KeyCode_Z = 0x7Au, + KeyCode_LeftBrace = 0x7Bu, + KeyCode_Pipe = 0x7Cu, + KeyCode_RightBrace = 0x7Du, + KeyCode_Tilde = 0x7Eu, + KeyCode_Delete = 0x7Fu, + KeyCode_PlusMinus = 0xb1u, - // Keys not producing a character - // Based on SDL Algo: ScanCode | 0x40000000 - CapsLock = 0x40000039u, - F1 = 0x4000003Au, - F2 = 0x4000003Bu, - F3 = 0x4000003CU, - F4 = 0x4000003DU, - F5 = 0x4000003Eu, - F6 = 0x4000003Fu, - F7 = 0x40000040u, - F8 = 0x40000041u, - F9 = 0x40000042u, - F10 = 0x40000043u, - F11 = 0x40000044u, - F12 = 0x40000045u, - PrintScreen = 0x40000046u, - ScrollLock = 0x40000047u, - Pause = 0x40000048u, - Insert = 0x40000049u, - Home = 0x4000004Au, - PageUp = 0x4000004Bu, - End = 0x4000004DU, - PageDown = 0x4000004Eu, - RightArrow = 0x4000004Fu, - LeftArrow = 0x40000050u, - DownArrow = 0x40000051u, - UpArrow = 0x40000052u, - NumlockClear = 0x40000053u, - KeyPad_Divide = 0x40000054u, - KeyPad_Multiply = 0x40000055u, - KeyPad_Minus = 0x40000056u, - KeyPad_Plus = 0x40000057u, - KeyPad_Enter = 0x40000058u, - KeyPad_Num1 = 0x40000059u, - KeyPad_Num2 = 0x4000005Au, - KeyPad_Num3 = 0x4000005Bu, - KeyPad_Num4 = 0x4000005Cu, - KeyPad_Num5 = 0x4000005Du, - KeyPad_Num6 = 0x4000005Eu, - KeyPad_Num7 = 0x4000005Fu, - KeyPad_Num8 = 0x40000060u, - KeyPad_Num9 = 0x40000061u, - KeyPad_Num0 = 0x40000062u, - KeyPad_Period = 0x40000063u, - Power = 0x40000066u, - KeyPad_Equals = 0x40000067u, - F13 = 0x40000068u, - F14 = 0x40000069u, - F15 = 0x4000006Au, - F16 = 0x4000006Bu, - F17 = 0x4000006Cu, - F18 = 0x4000006Du, - F19 = 0x4000006Eu, - F20 = 0x4000006Fu, - F21 = 0x40000070u, - F22 = 0x40000071u, - F23 = 0x40000072u, - F24 = 0x40000073u, - Mute = 0x4000007Fu, - VolumeUp = 0x40000080u, - VolumeDown = 0x40000081u, - KeyPad_Comma = 0x40000085u, - LeftControl = 0x400000E0u, - LeftShift = 0x400000E1u, - LeftAlt = 0x400000E2u, - LeftOSCommand = 0x400000E3u, - RightControl = 0x400000E4u, - RightShift = 0x400000E5u, - RightAlt = 0x400000E6u, - RightOSCommand = 0x400000E7u, - Sleep = 0x40000102u, - WakeUp = 0x40000103u, - Media_NextTrack = 0x4000010Bu, - Media_PreviousTrack = 0x4000010Cu, - Media_Stop = 0x4000010Du, - Media_Eject = 0x4000010Eu, - Media_PlayPause = 0x4000010Fu, - Media_Select = 0x40000110u, + KeyCode_CapsLock = 0x40000039u, + KeyCode_F1 = 0x4000003Au, + KeyCode_F2 = 0x4000003Bu, + KeyCode_F3 = 0x4000003Cu, + KeyCode_F4 = 0x4000003Du, + KeyCode_F5 = 0x4000003Eu, + KeyCode_F6 = 0x4000003Fu, + KeyCode_F7 = 0x40000040u, + KeyCode_F8 = 0x40000041u, + KeyCode_F9 = 0x40000042u, + KeyCode_F10 = 0x40000043u, + KeyCode_F11 = 0x40000044u, + KeyCode_F12 = 0x40000045u, + KeyCode_PrintScreen = 0x40000046u, + KeyCode_ScrollLock = 0x40000047u, + KeyCode_Pause = 0x40000048u, + KeyCode_Insert = 0x40000049u, + KeyCode_Home = 0x4000004Au, + KeyCode_PageUp = 0x4000004Bu, + KeyCode_End = 0x4000004Du, + KeyCode_PageDown = 0x4000004Eu, + KeyCode_RightArrow = 0x4000004Fu, + KeyCode_LeftArrow = 0x40000050u, + KeyCode_DownArrow = 0x40000051u, + KeyCode_UpArrow = 0x40000052u, + KeyCode_NumlockClear = 0x40000053u, + KeyCode_KeyPad_Divide = 0x40000054u, + KeyCode_KeyPad_Multiply = 0x40000055u, + KeyCode_KeyPad_Minus = 0x40000056u, + KeyCode_KeyPad_Plus = 0x40000057u, + KeyCode_KeyPad_Enter = 0x40000058u, + KeyCode_KeyPad_Num1 = 0x40000059u, + KeyCode_KeyPad_Num2 = 0x4000005Au, + KeyCode_KeyPad_Num3 = 0x4000005Bu, + KeyCode_KeyPad_Num4 = 0x4000005Cu, + KeyCode_KeyPad_Num5 = 0x4000005Du, + KeyCode_KeyPad_Num6 = 0x4000005Eu, + KeyCode_KeyPad_Num7 = 0x4000005Fu, + KeyCode_KeyPad_Num8 = 0x40000060u, + KeyCode_KeyPad_Num9 = 0x40000061u, + KeyCode_KeyPad_Num0 = 0x40000062u, + KeyCode_KeyPad_Period = 0x40000063u, + KeyCode_Power = 0x40000066u, + KeyCode_KeyPad_Equals = 0x40000067u, + KeyCode_F13 = 0x40000068u, + KeyCode_F14 = 0x40000069u, + KeyCode_F15 = 0x4000006Au, + KeyCode_F16 = 0x4000006Bu, + KeyCode_F17 = 0x4000006Cu, + KeyCode_F18 = 0x4000006Du, + KeyCode_F19 = 0x4000006Eu, + KeyCode_F20 = 0x4000006Fu, + KeyCode_F21 = 0x40000070u, + KeyCode_F22 = 0x40000071u, + KeyCode_F23 = 0x40000072u, + KeyCode_F24 = 0x40000073u, + KeyCode_Mute = 0x4000007Fu, + KeyCode_VolumeUp = 0x40000080u, + KeyCode_VolumeDown = 0x40000081u, + KeyCode_KeyPad_Comma = 0x40000085u, + KeyCode_LeftControl = 0x400000E0u, + KeyCode_LeftShift = 0x400000E1u, + KeyCode_LeftAlt = 0x400000E2u, + KeyCode_LeftOSCommand = 0x400000E3u, + KeyCode_RightControl = 0x400000E4u, + KeyCode_RightShift = 0x400000E5u, + KeyCode_RightAlt = 0x400000E6u, + KeyCode_RightOSCommand = 0x400000E7u, + KeyCode_Sleep = 0x40000102u, + KeyCode_WakeUp = 0x40000103u, + KeyCode_Media_NextTrack = 0x4000010Bu, + KeyCode_Media_PreviousTrack = 0x4000010Cu, + KeyCode_Media_Stop = 0x4000010Du, + KeyCode_Media_Eject = 0x4000010Eu, + KeyCode_Media_PlayPause = 0x4000010Fu, + KeyCode_Media_Select = 0x40000110u, }; -enum class KeyMod : uint16 +typedef uint16 KeyMod; +enum { - None = 0b0, - LeftShift = 0b0000'0000'0001u, - RightShift = 0b0000'0000'0010u, - LeftControl = 0b0000'0000'0100u, - RightControl = 0b0000'0000'1000u, - LeftAlt = 0b0000'0001'000u, - RightAlt = 0b0000'0010'0000u, - LeftOSCommand = 0b0000'0100'0000u, - RightOSCommand = 0b0000'1000'0000u, - NumLock = 0b0001'0000'0000u, - CapsLock = 0b0010'0000'0000u, - ScrollLock = 0b0100'0000'0000u, - Control = LeftControl | RightControl, - Shift = LeftShift | RightShift, - Alt = LeftAlt | RightAlt, - OSCommand = LeftOSCommand | RightOSCommand, + KeyMod_None = 0x0000u, + KeyMod_LeftShift = 0x0001u, + KeyMod_RightShift = 0x0002u, + KeyMod_LeftControl = 0x0004u, + KeyMod_RightControl = 0x0008u, + KeyMod_LeftAlt = 0x0010u, + KeyMod_RightAlt = 0x0020u, + KeyMod_LeftOSCommand = 0x0040u, + KeyMod_RightOSCommand = 0x0080u, + KeyMod_NumLock = 0x0100u, + KeyMod_CapsLock = 0x0200u, + KeyMod_ScrollLock = 0x0400u, + KeyMod_Control = KeyMod_LeftControl | KeyMod_RightControl, + KeyMod_Shift = KeyMod_LeftShift | KeyMod_RightShift, + KeyMod_Alt = KeyMod_LeftAlt | KeyMod_RightAlt, + KeyMod_OSCommand = KeyMod_LeftOSCommand | KeyMod_RightOSCommand, }; diff --git a/Juliet/include/Core/HAL/Keyboard/Keyboard.h b/Juliet/include/Core/HAL/Keyboard/Keyboard.h index 405b1d8..41545d2 100644 --- a/Juliet/include/Core/HAL/Keyboard/Keyboard.h +++ b/Juliet/include/Core/HAL/Keyboard/Keyboard.h @@ -1,23 +1,26 @@ -#pragma once +#pragma once #include #include #include -using KeyboardID = uint8; +typedef uint8 KeyboardID; -enum class KeyPosition : bool +typedef bool8 KeyPosition; +enum { - Up = false, - Down = true + KeyPosition_Up = false, + KeyPosition_Down = true }; +typedef struct KeyState KeyState; struct KeyState { KeyPosition Position; float Time; }; +typedef struct Key Key; struct Key { ScanCode ScanCode; @@ -25,8 +28,8 @@ struct Key uint16 Raw; }; -extern JULIET_API bool IsKeyDown(ScanCode scanCode); -extern JULIET_API bool IsKeyPressed(ScanCode scanCode); +extern JULIET_API bool8 IsKeyDown(ScanCode scanCode); +extern JULIET_API bool8 IsKeyPressed(ScanCode scanCode); -extern JULIET_API KeyMod GetKeyModState(); +extern JULIET_API KeyMod GetKeyModState(void); extern JULIET_API KeyCode GetKeyCodeFromScanCode(ScanCode scanCode, KeyMod keyModState); diff --git a/Juliet/include/Core/HAL/Keyboard/ScanCode.h b/Juliet/include/Core/HAL/Keyboard/ScanCode.h index 8bf59fd..093971b 100644 --- a/Juliet/include/Core/HAL/Keyboard/ScanCode.h +++ b/Juliet/include/Core/HAL/Keyboard/ScanCode.h @@ -1,183 +1,180 @@ -#pragma once +#pragma once -// Follow the HID Usage page for USB -// https://usb.org/sites/default/files/hut1_5.pdf -// 0 to 256 Is dedicated to Keyboard Usage Page (0x07) -// 257 to 286 Is dedicated to Consumer Usage Page (0xC) -// 287 to 511 Is not implemented. Could be used for Mobile or Consoles -// ScanCode reprensent Physical Keys and Buttons -enum class ScanCode : uint16 +#include + +typedef uint16 ScanCode; +enum { - Unknown = 0, - Unsupported = 0, + ScanCode_Unknown = 0, + ScanCode_Unsupported = 0, - A = 4, - B = 5, - C = 6, - D = 7, - E = 8, - F = 9, - G = 10, - H = 11, - I = 12, - J = 13, - K = 14, - L = 15, - M = 16, - N = 17, - O = 18, - P = 19, - Q = 20, - R = 21, - S = 22, - T = 23, - U = 24, - V = 25, - W = 26, - X = 27, - Y = 28, - Z = 29, + ScanCode_A = 4, + ScanCode_B = 5, + ScanCode_C = 6, + ScanCode_D = 7, + ScanCode_E = 8, + ScanCode_F = 9, + ScanCode_G = 10, + ScanCode_H = 11, + ScanCode_I = 12, + ScanCode_J = 13, + ScanCode_K = 14, + ScanCode_L = 15, + ScanCode_M = 16, + ScanCode_N = 17, + ScanCode_O = 18, + ScanCode_P = 19, + ScanCode_Q = 20, + ScanCode_R = 21, + ScanCode_S = 22, + ScanCode_T = 23, + ScanCode_U = 24, + ScanCode_V = 25, + ScanCode_W = 26, + ScanCode_X = 27, + ScanCode_Y = 28, + ScanCode_Z = 29, - Num1 = 30, - Num2 = 31, - Num3 = 32, - Num4 = 33, - Num5 = 34, - Num6 = 35, - Num7 = 36, - Num8 = 37, - Num9 = 38, - Num0 = 39, + ScanCode_Num1 = 30, + ScanCode_Num2 = 31, + ScanCode_Num3 = 32, + ScanCode_Num4 = 33, + ScanCode_Num5 = 34, + ScanCode_Num6 = 35, + ScanCode_Num7 = 36, + ScanCode_Num8 = 37, + ScanCode_Num9 = 38, + ScanCode_Num0 = 39, - Return = 40, - Escape = 41, - Backspace = 42, - Tab = 43, - Space = 44, + ScanCode_Return = 40, + ScanCode_Escape = 41, + ScanCode_Backspace = 42, + ScanCode_Tab = 43, + ScanCode_Space = 44, - Minus = 45, - Equals = 46, - LeftBracket = 47, - RightBracket = 48, - Backslash = 49, - NonUSHash = 50, // Same as 49 but for ISO keyboards - Semicolon = 51, - Apostrophe = 52, - GraveAccent = 53, - Comma = 54, - Period = 55, - Slash = 56, - CapsLock = 57, + ScanCode_Minus = 45, + ScanCode_Equals = 46, + ScanCode_LeftBracket = 47, + ScanCode_RightBracket = 48, + ScanCode_Backslash = 49, + ScanCode_NonUSHash = 50, + ScanCode_Semicolon = 51, + ScanCode_Apostrophe = 52, + ScanCode_GraveAccent = 53, + ScanCode_Comma = 54, + ScanCode_Period = 55, + ScanCode_Slash = 56, + ScanCode_CapsLock = 57, - F1 = 58, - F2 = 59, - F3 = 60, - F4 = 61, - F5 = 62, - F6 = 63, - F7 = 64, - F8 = 65, - F9 = 66, - F10 = 67, - F11 = 68, - F12 = 69, + ScanCode_F1 = 58, + ScanCode_F2 = 59, + ScanCode_F3 = 60, + ScanCode_F4 = 61, + ScanCode_F5 = 62, + ScanCode_F6 = 63, + ScanCode_F7 = 64, + ScanCode_F8 = 65, + ScanCode_F9 = 66, + ScanCode_F10 = 67, + ScanCode_F11 = 68, + ScanCode_F12 = 69, - PrintScreen = 70, - ScrollLock = 71, - Pause = 72, - Insert = 73, + ScanCode_PrintScreen = 70, + ScanCode_ScrollLock = 71, + ScanCode_Pause = 72, + ScanCode_Insert = 73, - Home = 74, - PageUp = 75, - Delete = 76, - End = 77, - PageDown = 78, - RightArrow = 79, - LeftArrow = 80, - DownArrow = 81, - UpArrow = 82, + ScanCode_Home = 74, + ScanCode_PageUp = 75, + ScanCode_Delete = 76, + ScanCode_End = 77, + ScanCode_PageDown = 78, + ScanCode_RightArrow = 79, + ScanCode_LeftArrow = 80, + ScanCode_DownArrow = 81, + ScanCode_UpArrow = 82, - NumlockClear = 83, // Pc = Numlock / Mac = Clear + ScanCode_NumlockClear = 83, - KeyPad_Divide = 84, - KeyPad_Multiply = 85, - KeyPad_Minus = 86, - KeyPad_Plus = 87, - KeyPad_Enter = 88, - KeyPad_Num1 = 89, - KeyPad_Num2 = 90, - KeyPad_Num3 = 91, - KeyPad_Num4 = 92, - KeyPad_Num5 = 93, - KeyPad_Num6 = 94, - KeyPad_Num7 = 95, - KeyPad_Num8 = 96, - KeyPad_Num9 = 97, - KeyPad_Num0 = 98, - KeyPad_Period = 99, + ScanCode_KeyPad_Divide = 84, + ScanCode_KeyPad_Multiply = 85, + ScanCode_KeyPad_Minus = 86, + ScanCode_KeyPad_Plus = 87, + ScanCode_KeyPad_Enter = 88, + ScanCode_KeyPad_Num1 = 89, + ScanCode_KeyPad_Num2 = 90, + ScanCode_KeyPad_Num3 = 91, + ScanCode_KeyPad_Num4 = 92, + ScanCode_KeyPad_Num5 = 93, + ScanCode_KeyPad_Num6 = 94, + ScanCode_KeyPad_Num7 = 95, + ScanCode_KeyPad_Num8 = 96, + ScanCode_KeyPad_Num9 = 97, + ScanCode_KeyPad_Num0 = 98, + ScanCode_KeyPad_Period = 99, - NonUSBackslash = 100, // ISO keyboards only - Power = 102, // Some mac have a Power key + ScanCode_NonUSBackslash = 100, + ScanCode_Power = 102, - KeyPad_Equals = 103, - F13 = 104, - F14 = 105, - F15 = 106, - F16 = 107, - F17 = 108, - F18 = 109, - F19 = 110, - F20 = 111, - F21 = 112, - F22 = 113, - F23 = 114, - F24 = 115, + ScanCode_KeyPad_Equals = 103, + ScanCode_F13 = 104, + ScanCode_F14 = 105, + ScanCode_F15 = 106, + ScanCode_F16 = 107, + ScanCode_F17 = 108, + ScanCode_F18 = 109, + ScanCode_F19 = 110, + ScanCode_F20 = 111, + ScanCode_F21 = 112, + ScanCode_F22 = 113, + ScanCode_F23 = 114, + ScanCode_F24 = 115, - Mute = 127, - VolumeUp = 128, - VolumeDown = 129, + ScanCode_Mute = 127, + ScanCode_VolumeUp = 128, + ScanCode_VolumeDown = 129, - KeyPad_Comma = 133, + ScanCode_KeyPad_Comma = 133, - International1 = 135, // Mostly used on Asian keyboards - International2 = 136, - International3 = 137, // Yen Symbol - International4 = 138, - International5 = 139, - International6 = 140, - International7 = 141, - International8 = 142, - International9 = 143, - Lang1 = 144, // Hangul (Korean) - Lang2 = 145, // Hanja (Korean) - Lang3 = 146, // Katakana (Japanese) - Lang4 = 147, // Hiragana (Japanese) - Lang5 = 148, // Zenkaku/Hankaku (Japanese) - Lang6 = 149, // Unused - Lang7 = 150, // Unused - Lang8 = 151, // Unused - Lang9 = 152, // Unused + ScanCode_International1 = 135, + ScanCode_International2 = 136, + ScanCode_International3 = 137, + ScanCode_International4 = 138, + ScanCode_International5 = 139, + ScanCode_International6 = 140, + ScanCode_International7 = 141, + ScanCode_International8 = 142, + ScanCode_International9 = 143, + ScanCode_Lang1 = 144, + ScanCode_Lang2 = 145, + ScanCode_Lang3 = 146, + ScanCode_Lang4 = 147, + ScanCode_Lang5 = 148, + ScanCode_Lang6 = 149, + ScanCode_Lang7 = 150, + ScanCode_Lang8 = 151, + ScanCode_Lang9 = 152, - LeftControl = 224, - LeftShift = 225, - LeftAlt = 226, // Alt for PC, Option for Mac - LeftOSCommand = 227, // Window key for PC, Command for Mac - RightControl = 228, - RightShift = 229, - RightAlt = 230, // Alt Gr for PC, Option for Mac - RightOSCommand = 231, // Window key for PC, Command for Mac + ScanCode_LeftControl = 224, + ScanCode_LeftShift = 225, + ScanCode_LeftAlt = 226, + ScanCode_LeftOSCommand = 227, + ScanCode_RightControl = 228, + ScanCode_RightShift = 229, + ScanCode_RightAlt = 230, + ScanCode_RightOSCommand = 231, - Sleep = 258, - WakeUp = 259, + ScanCode_Sleep = 258, + ScanCode_WakeUp = 259, - Media_NextTrack = 267, - Media_PreviousTrack = 268, - Media_Stop = 269, - Media_Eject = 270, - Media_PlayPause = 271, - Media_Select = 272, + ScanCode_Media_NextTrack = 267, + ScanCode_Media_PreviousTrack = 268, + ScanCode_Media_Stop = 269, + ScanCode_Media_Eject = 270, + ScanCode_Media_PlayPause = 271, + ScanCode_Media_Select = 272, - Reserved = 287, + ScanCode_Reserved = 287, - Count = 512 + ScanCode_Count = 512 }; diff --git a/Juliet/include/Core/HAL/Mouse/Mouse.h b/Juliet/include/Core/HAL/Mouse/Mouse.h index 60438ff..65b8309 100644 --- a/Juliet/include/Core/HAL/Mouse/Mouse.h +++ b/Juliet/include/Core/HAL/Mouse/Mouse.h @@ -1,25 +1,29 @@ -#pragma once +#pragma once -using MouseID = uint8; +#include +#include -enum class MouseButton : uint8 +typedef uint8 MouseID; + +typedef uint8 MouseButton; +enum { - None = 0, - Left = 1 << 0, - Right = 1 << 1, - Middle = 1 << 2, - Button1 = 1 << 3, - Button2 = 1 << 4, + MouseButton_None = 0, + MouseButton_Left = 1 << 0, + MouseButton_Right = 1 << 1, + MouseButton_Middle = 1 << 2, + MouseButton_Button1 = 1 << 3, + MouseButton_Button2 = 1 << 4, }; -// TODO : Replace by Vector2f +typedef struct MousePosition MousePosition; struct MousePosition { float X; float Y; }; -JULIET_API extern bool IsMouseButtonDown(MouseButton button); -JULIET_API extern MousePosition GetMousePosition(); -JULIET_API extern MousePosition GetMouseDelta(); -JULIET_API extern MouseButton GetMouseButtonState(); +JULIET_API extern bool8 IsMouseButtonDown(MouseButton button); +JULIET_API extern MousePosition GetMousePosition(void); +JULIET_API extern MousePosition GetMouseDelta(void); +JULIET_API extern MouseButton GetMouseButtonState(void); diff --git a/Juliet/include/Core/HAL/OS/OS.h b/Juliet/include/Core/HAL/OS/OS.h index b0da8f8..aeeae69 100644 --- a/Juliet/include/Core/HAL/OS/OS.h +++ b/Juliet/include/Core/HAL/OS/OS.h @@ -1,52 +1,23 @@ -#pragma once +#pragma once -#include #include #include -namespace Memory -{ - Byte* OS_Reserve(size_t size); - bool OS_Commit(Byte* ptr, size_t size); - void OS_Release(Byte* ptr, size_t size); +Byte* OS_Reserve(size_t size); +bool8 OS_Commit(void* ptr, size_t size); +void OS_Release(void* ptr, size_t size); - template - Type* OS_Reserve(size_t size) - { - return reinterpret_cast(OS_Reserve(size)); - } +uint64 Time_Timestamp(void); +void Time_ComputeDeltaTime(void); +float Time_GetDeltaTime(void); +uint64 Time_GetFrameNumber(void); - template - bool OS_Commit(Type* ptr, size_t size) - { - return OS_Commit(reinterpret_cast(ptr), size); - } +JULIET_API bool8 Debug_IsDebuggerPresent(void); - template - void OS_Release(Type* ptr, size_t size) - { - OS_Release(reinterpret_cast(ptr), size); - } +String os_get_env_var(Arena* arena, String name); +void os_set_env_var(String name, String value); -} // namespace Memory +String os_get_username(Arena* arena); -namespace Time -{ - uint64 Timestamp(); - void ComputeDeltaTime(); - float GetDeltaTime(); - uint64 GetFrameNumber(); -} // namespace Time - -namespace Debug -{ - JULIET_API bool IsDebuggerPresent(); -} // namespace Debug - -String os_get_env_var(NonNullPtr arena, const String& name); -void os_set_env_var(const String& name, const String& value); - -String os_get_username(NonNullPtr arena); - -using EntryPointFunc = int (*)(int, wchar_t**); +typedef int (*EntryPointFunc)(int, wchar_t**); JULIET_API int Bootstrap(EntryPointFunc entryPointFunc, int argc, wchar_t** argv); diff --git a/Juliet/include/Core/HotReload/HotReload.h b/Juliet/include/Core/HotReload/HotReload.h index c5de9c5..23e1c56 100644 --- a/Juliet/include/Core/HotReload/HotReload.h +++ b/Juliet/include/Core/HotReload/HotReload.h @@ -1,9 +1,9 @@ -#pragma once +#pragma once #include -// Fwd Declare -struct DynamicLibrary; +typedef struct DynamicLibrary DynamicLibrary; +typedef struct HotReloadCode HotReloadCode; struct HotReloadCode { @@ -21,15 +21,15 @@ struct HotReloadCode uint32 UniqueID; - bool IsValid : 1; + bool8 IsValid; }; -extern JULIET_API void InitHotReloadCode(NonNullPtr arena, HotReloadCode& code, String dllName, - String transientDllName, String lockFilename); -extern JULIET_API void ShutdownHotReloadCode(HotReloadCode& code); +extern JULIET_API void InitHotReloadCode(Arena* arena, HotReloadCode* code, String dllName, + String transientDllName, String lockFilename); +extern JULIET_API void ShutdownHotReloadCode(HotReloadCode* code); -extern JULIET_API void LoadCode(HotReloadCode& code); -extern JULIET_API void UnloadCode(HotReloadCode& code); +extern JULIET_API void LoadCode(HotReloadCode* code); +extern JULIET_API void UnloadCode(HotReloadCode* code); -extern JULIET_API void ReloadCode(HotReloadCode& code); -extern JULIET_API bool ShouldReloadCode(const HotReloadCode& code); +extern JULIET_API void ReloadCode(HotReloadCode* code); +extern JULIET_API bool8 ShouldReloadCode(const HotReloadCode* code); diff --git a/Juliet/include/Core/ImGui/ImGuiService.h b/Juliet/include/Core/ImGui/ImGuiService.h index d5ac535..e80cefb 100644 --- a/Juliet/include/Core/ImGui/ImGuiService.h +++ b/Juliet/include/Core/ImGui/ImGuiService.h @@ -1,27 +1,24 @@ -#pragma once +#pragma once -#include +#include +#include #ifdef JULIET_ENABLE_IMGUI -struct ImGuiContext; +typedef struct ImGuiContext ImGuiContext; +typedef struct Window Window; +typedef struct GraphicsDevice GraphicsDevice; -struct Window; -struct GraphicsDevice; +JULIET_API void ImGuiService_Initialize(Window* window); +JULIET_API void ImGuiService_Shutdown(void); -namespace ImGuiService -{ - JULIET_API void Initialize(NonNullPtr window); - JULIET_API void Shutdown(); +JULIET_API void ImGuiService_NewFrame(void); +JULIET_API void ImGuiService_Render(void); - JULIET_API void NewFrame(); - JULIET_API void Render(); +JULIET_API bool8 ImGuiService_IsInitialized(void); +JULIET_API ImGuiContext* ImGuiService_GetContext(void); - JULIET_API bool IsInitialized(); - JULIET_API ImGuiContext* GetContext(); - - // Run internal unit tests - JULIET_API void RunTests(); -} // namespace ImGuiService +// Run internal unit tests +JULIET_API void ImGuiService_RunTests(void); #endif // JULIET_ENABLE_IMGUI diff --git a/Juliet/include/Core/ImGui/ImGuiTests.h b/Juliet/include/Core/ImGui/ImGuiTests.h index f926b08..12c93b4 100644 --- a/Juliet/include/Core/ImGui/ImGuiTests.h +++ b/Juliet/include/Core/ImGui/ImGuiTests.h @@ -1,12 +1,5 @@ -#pragma once - -#include -#include -#include +#pragma once #include -namespace UnitTest -{ - void TestImGui(); -} +void UnitTest_TestImGui(void); diff --git a/Juliet/include/Core/JulietInit.h b/Juliet/include/Core/JulietInit.h index 16748d5..5d1e4d1 100644 --- a/Juliet/include/Core/JulietInit.h +++ b/Juliet/include/Core/JulietInit.h @@ -1,21 +1,26 @@ -#pragma once +#pragma once -enum class JulietInit_Flags : uint8 +#include + +typedef uint8 JulietInit_Flags; +enum { - None = 0, - Display = 1 << 0, - Audio = 1 << 1, - Count = Audio, - All = 0xFb + JulietInit_Flags_None = 0, + JulietInit_Flags_Display = 1 << 0, + JulietInit_Flags_Audio = 1 << 1, + JulietInit_Flags_Count = JulietInit_Flags_Audio, + JulietInit_Flags_All = 0xFbu }; -struct Arena; +typedef struct Arena Arena; +typedef struct GameState GameState; +typedef struct GameData GameData; struct GameData { - struct GameState* GameState; - Arena* ScratchArena; + GameState* GameState; + Arena* ScratchArena; }; void JulietInit(JulietInit_Flags flags); -void JulietShutdown(); +void JulietShutdown(void); diff --git a/Juliet/include/Core/Logging/LogManager.h b/Juliet/include/Core/Logging/LogManager.h index e5e07bc..2a7d7dd 100644 --- a/Juliet/include/Core/Logging/LogManager.h +++ b/Juliet/include/Core/Logging/LogManager.h @@ -1,21 +1,13 @@ -#pragma once +#pragma once -#include +#include #include -// TODO : Juliet strings -// TODO Juliet Containers + Allocators... -// TODO: Juliet chrono, because it prevents me from doing #define global static +extern void JULIET_API InitializeLogManager(void); +extern void JULIET_API ShutdownLogManager(void); -enum class LogLevel : uint8; -enum class LogCategory : uint8; - -extern void JULIET_API InitializeLogManager(); -extern void JULIET_API ShutdownLogManager(); - -extern void JULIET_API LogScopeBegin(); -// TODO everything that happened in there to export them to file or something -extern void JULIET_API LogScopeEnd(); +extern void JULIET_API LogScopeBegin(void); +extern void JULIET_API LogScopeEnd(void); extern void JULIET_API Log(LogLevel level, LogCategory category, const char* fmt, ...); extern void JULIET_API LogDebug(LogCategory category, const char* fmt, ...); diff --git a/Juliet/include/Core/Logging/LogTypes.h b/Juliet/include/Core/Logging/LogTypes.h index 42eab4d..0dd33fc 100644 --- a/Juliet/include/Core/Logging/LogTypes.h +++ b/Juliet/include/Core/Logging/LogTypes.h @@ -1,19 +1,23 @@ -#pragma once +#pragma once -enum class LogLevel : uint8 +#include + +typedef uint8 LogLevel; +enum { - Debug = 0, - Message = 1, - Warning = 2, - Error = 3, + LogLevel_Debug = 0, + LogLevel_Message = 1, + LogLevel_Warning = 2, + LogLevel_Error = 3, }; -enum class LogCategory : uint8 +typedef uint8 LogCategory; +enum { - Core = 0, - Graphics = 1, - Networking = 2, - Engine = 3, - Tool = 4, - Game = 5, + LogCategory_Core = 0, + LogCategory_Graphics = 1, + LogCategory_Networking = 2, + LogCategory_Engine = 3, + LogCategory_Tool = 4, + LogCategory_Game = 5, }; diff --git a/Juliet/include/Core/Main.h b/Juliet/include/Core/Main.h index 174fc4b..48ef5ee 100644 --- a/Juliet/include/Core/Main.h +++ b/Juliet/include/Core/Main.h @@ -1,8 +1,8 @@ -#pragma once +#pragma once #include -extern int JulietMain(int, wchar_t**); +extern int JulietMain(int argc, wchar_t** argv); #if JULIET_WIN32 #ifndef WINAPI @@ -17,12 +17,10 @@ int wmain(int argc, wchar_t** argv) #else int main(int argc, char** argv) { - return Bootstrap(JulietMain, argc, argv); + return Bootstrap(JulietMain, argc, (wchar_t**)argv); } #endif -extern "C" { - typedef struct HINSTANCE__* HINSTANCE; typedef char* LPSTR; typedef wchar_t* PWSTR; @@ -40,7 +38,6 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine, int sw) return Bootstrap(JulietMain, __argc, __wargv); } -} #else #error "Only windows main is implemented" #endif diff --git a/Juliet/include/Core/Math/MathUtils.h b/Juliet/include/Core/Math/MathUtils.h index bde7374..1037966 100644 --- a/Juliet/include/Core/Math/MathUtils.h +++ b/Juliet/include/Core/Math/MathUtils.h @@ -1,46 +1,17 @@ -#pragma once +#pragma once + +#include +#include extern JULIET_API float RoundF(float value); -inline int32 LRoundF(float value) +static inline int32 LRoundF(float value) { - return static_cast(RoundF(value)); + return (int32)RoundF(value); } -template -constexpr Type Min(Type lhs, Type rhs) -{ - return rhs < lhs ? rhs : lhs; -} - -template -constexpr Type Max(Type lhs, Type rhs) -{ - return lhs < rhs ? rhs : lhs; -} - -template -constexpr Type ClampTop(Type value, Type X) -{ - return Min(value, X); -} - -template -constexpr Type ClampBottom(Type value, Type X) -{ - return Max(value, X); -} - -template -constexpr Type Clamp(Type val, Type min, Type max) -{ - if (val < min) - { - return min; - } - if (val > max) - { - return max; - } - return val; -} +#define Min(lhs, rhs) (((rhs) < (lhs)) ? (rhs) : (lhs)) +#define Max(lhs, rhs) (((lhs) < (rhs)) ? (rhs) : (lhs)) +#define ClampTop(value, X) Min((value), (X)) +#define ClampBottom(value, X) Max((value), (X)) +#define Clamp(val, min_v, max_v) (((val) < (min_v)) ? (min_v) : (((val) > (max_v)) ? (max_v) : (val))) diff --git a/Juliet/include/Core/Math/Matrix.h b/Juliet/include/Core/Math/Matrix.h index f824893..d10f0b3 100644 --- a/Juliet/include/Core/Math/Matrix.h +++ b/Juliet/include/Core/Math/Matrix.h @@ -1,16 +1,17 @@ -#pragma once +#pragma once #include #include +typedef struct Matrix Matrix; struct Matrix { float m[4][4]; }; -[[nodiscard]] inline Matrix MatrixIdentity() +static inline Matrix MatrixIdentity(void) { - Matrix result = {}; + Matrix result = { 0 }; result.m[0][0] = 1.0f; result.m[1][1] = 1.0f; result.m[2][2] = 1.0f; @@ -18,9 +19,9 @@ struct Matrix return result; } -[[nodiscard]] inline Matrix operator*(const Matrix& lhs, const Matrix& rhs) +static inline Matrix MatrixMultiply(Matrix lhs, Matrix rhs) { - Matrix result = {}; + Matrix result = { 0 }; for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) @@ -34,80 +35,80 @@ struct Matrix return result; } -[[nodiscard]] inline Matrix MatrixTranslation(float x, float y, float z) +static inline Matrix MatrixTranslation(float x, float y, float z) { - Matrix result = MatrixIdentity(); + Matrix result = MatrixIdentity(); result.m[0][3] = x; result.m[1][3] = y; result.m[2][3] = z; return result; } -[[nodiscard]] inline Matrix MatrixScale(float x, float y, float z) +static inline Matrix MatrixScale(float x, float y, float z) { - Matrix result = MatrixIdentity(); + Matrix result = MatrixIdentity(); result.m[0][0] = x; result.m[1][1] = y; result.m[2][2] = z; return result; } -[[nodiscard]] inline Matrix MatrixRotationX(float radians) +static inline Matrix MatrixRotationX(float radians) { - float c = cosf(radians); - float s = sinf(radians); - Matrix result = MatrixIdentity(); - result.m[1][1] = c; + float c = cosf(radians); + float s = sinf(radians); + Matrix result = MatrixIdentity(); + result.m[1][1] = c; result.m[1][2] = -s; - result.m[2][1] = s; - result.m[2][2] = c; + result.m[2][1] = s; + result.m[2][2] = c; return result; } -[[nodiscard]] inline Matrix MatrixRotationY(float radians) +static inline Matrix MatrixRotationY(float radians) { - float c = cosf(radians); - float s = sinf(radians); - Matrix result = MatrixIdentity(); - result.m[0][0] = c; - result.m[0][2] = s; + float c = cosf(radians); + float s = sinf(radians); + Matrix result = MatrixIdentity(); + result.m[0][0] = c; + result.m[0][2] = s; result.m[2][0] = -s; - result.m[2][2] = c; + result.m[2][2] = c; return result; } -[[nodiscard]] inline Matrix MatrixRotationZ(float radians) +static inline Matrix MatrixRotationZ(float radians) { - float c = cosf(radians); - float s = sinf(radians); - Matrix result = MatrixIdentity(); - result.m[0][0] = c; + float c = cosf(radians); + float s = sinf(radians); + Matrix result = MatrixIdentity(); + result.m[0][0] = c; result.m[0][1] = -s; - result.m[1][0] = s; - result.m[1][1] = c; + result.m[1][0] = s; + result.m[1][1] = c; return result; } -inline void MatrixTranslate(Matrix& m, const Vector3& v) +static inline void MatrixTranslate(Matrix* m, Vector3 v) { - m.m[0][3] += v.x; - m.m[1][3] += v.y; - m.m[2][3] += v.z; + m->m[0][3] += v.x; + m->m[1][3] += v.y; + m->m[2][3] += v.z; } -[[nodiscard]] inline Matrix MatrixRotation(float x, float y, float z) +static inline Matrix MatrixRotation(float x, float y, float z) { - return MatrixRotationX(x) * MatrixRotationY(y) * MatrixRotationZ(z); + return MatrixMultiply(MatrixMultiply(MatrixRotationX(x), MatrixRotationY(y)), MatrixRotationZ(z)); } -inline Matrix LookAt(const Vector3& eye, const Vector3& target, const Vector3& up) +static inline Matrix LookAt(Vector3 eye, Vector3 target, Vector3 up) { // Left-Handed convention - Vector3 zaxis = Normalize(target - eye); // Forward is +z + Vector3 zaxis = Normalize(Vector3Sub(target, eye)); // Forward is +z Vector3 xaxis = Normalize(Cross(up, zaxis)); Vector3 yaxis = Cross(zaxis, xaxis); - Matrix result = {}; + Matrix result = { 0 }; // Row 0 result.m[0][0] = xaxis.x; result.m[0][1] = xaxis.y; @@ -132,25 +133,25 @@ inline Matrix LookAt(const Vector3& eye, const Vector3& target, const Vector3& u return result; } -inline Matrix PerspectiveFov(float fovY, float aspectRatio, float nearZ, float farZ) +static inline Matrix PerspectiveFov(float fovY, float aspectRatio, float nearZ, float farZ) { // Left-Handed Perspective float yScale = 1.0f / tanf(fovY * 0.5f); float xScale = yScale / aspectRatio; - Matrix result = {}; - result.m[0][0] = xScale; - result.m[1][1] = yScale; - result.m[2][2] = farZ / (farZ - nearZ); - result.m[2][3] = (-nearZ * farZ) / (farZ - nearZ); - result.m[3][2] = 1.0f; - result.m[3][3] = 0.0f; + Matrix result = { 0 }; + result.m[0][0] = xScale; + result.m[1][1] = yScale; + result.m[2][2] = farZ / (farZ - nearZ); + result.m[2][3] = (-nearZ * farZ) / (farZ - nearZ); + result.m[3][2] = 1.0f; + result.m[3][3] = 0.0f; return result; } -[[nodiscard]] inline Matrix MatrixInverse(const Matrix& m) +static inline Matrix MatrixInverse(Matrix m) { - Matrix out = {}; + Matrix out = { 0 }; float m00 = m.m[0][0], m01 = m.m[0][1], m02 = m.m[0][2], m03 = m.m[0][3]; float m10 = m.m[1][0], m11 = m.m[1][1], m12 = m.m[1][2], m13 = m.m[1][3]; @@ -183,8 +184,12 @@ inline Matrix PerspectiveFov(float fovY, float aspectRatio, float nearZ, float f { float invDet = 1.0f / det; for (int r = 0; r < 4; ++r) + { for (int c = 0; c < 4; ++c) + { out.m[r][c] *= invDet; + } + } } return out; diff --git a/Juliet/include/Core/Math/Shape.h b/Juliet/include/Core/Math/Shape.h index f692383..68705c2 100644 --- a/Juliet/include/Core/Math/Shape.h +++ b/Juliet/include/Core/Math/Shape.h @@ -1,6 +1,11 @@ -#pragma once +#pragma once -struct Rectangle +#include + +#define Rectangle JulietRectangle + +typedef struct JulietRectangle JulietRectangle; +struct JulietRectangle { int32 X; int32 Y; diff --git a/Juliet/include/Core/Math/Vector.h b/Juliet/include/Core/Math/Vector.h index 434520a..fd07e45 100644 --- a/Juliet/include/Core/Math/Vector.h +++ b/Juliet/include/Core/Math/Vector.h @@ -1,38 +1,62 @@ -#pragma once +#pragma once +#include + +typedef struct Vector3 Vector3; struct Vector3 { - float x, y, z; - - Vector3 operator+(const Vector3& rhs) const { return { x + rhs.x, y + rhs.y, z + rhs.z }; } - Vector3 operator-(const Vector3& rhs) const { return { x - rhs.x, y - rhs.y, z - rhs.z }; } - Vector3 operator*(float s) const { return { x * s, y * s, z * s }; } + float x; + float y; + float z; }; +typedef struct Vector4 Vector4; struct Vector4 { - float x = 0.f; - float y = 0.f; - float z = 0.f; - float w = 0.f; + float x; + float y; + float z; + float w; }; -inline Vector3 Normalize(const Vector3& v) +static inline Vector3 Vector3Add(Vector3 lhs, Vector3 rhs) { - float len = sqrtf(v.x * v.x + v.y * v.y + v.z * v.z); + Vector3 res = { lhs.x + rhs.x, lhs.y + rhs.y, lhs.z + rhs.z }; + return res; +} + +static inline Vector3 Vector3Sub(Vector3 lhs, Vector3 rhs) +{ + Vector3 res = { lhs.x - rhs.x, lhs.y - rhs.y, lhs.z - rhs.z }; + return res; +} + +static inline Vector3 Vector3Scale(Vector3 v, float s) +{ + Vector3 res = { v.x * s, v.y * s, v.z * s }; + return res; +} + +static inline Vector3 Normalize(Vector3 v) +{ + Vector3 result = v; + float len = sqrtf(v.x * v.x + v.y * v.y + v.z * v.z); if (len > 0.0001f) { - return { v.x / len, v.y / len, v.z / len }; + result.x = v.x / len; + result.y = v.y / len; + result.z = v.z / len; } - return v; + return result; } -inline Vector3 Cross(const Vector3& a, const Vector3& b) +static inline Vector3 Cross(Vector3 a, Vector3 b) { - return { a.y * b.z - a.z * b.y, a.z * b.x - a.x * b.z, a.x * b.y - a.y * b.x }; + Vector3 res = { a.y * b.z - a.z * b.y, a.z * b.x - a.x * b.z, a.x * b.y - a.y * b.x }; + return res; } -inline float Dot(const Vector3& a, const Vector3& b) +static inline float Dot(Vector3 a, Vector3 b) { return a.x * b.x + a.y * b.y + a.z * b.z; } diff --git a/Juliet/include/Core/Memory/Allocator.h b/Juliet/include/Core/Memory/Allocator.h index e144783..659191e 100644 --- a/Juliet/include/Core/Memory/Allocator.h +++ b/Juliet/include/Core/Memory/Allocator.h @@ -1,7 +1,8 @@ -#pragma once +#pragma once #include #include +#include // Uninitialized allocation JULIET_API void* Malloc(size_t elem_size); @@ -9,20 +10,19 @@ JULIET_API void* Malloc(size_t elem_size); JULIET_API void* Calloc(size_t nb_elem, size_t elem_size); JULIET_API void* Realloc(void* memory, size_t newSize); -// Free -template -void Free(Type* memory) +static inline void FreeMemory(void* memory) { - Assert(memory); - ::free(memory); -} -// Free and Set the ptr to nullptr -template -void SafeFree(Type*& memory) -{ - if (memory) - { - ::free(memory); - memory = nullptr; - } + Assert(memory != NULL); + free(memory); } + +#define SafeFree(memory_ptr) \ + do \ + { \ + if ((memory_ptr) != NULL) \ + { \ + free((void*)(memory_ptr)); \ + (memory_ptr) = NULL; \ + } \ + } \ + while (0) diff --git a/Juliet/include/Core/Memory/MemoryArena.h b/Juliet/include/Core/Memory/MemoryArena.h index 855cff4..9c7fe32 100644 --- a/Juliet/include/Core/Memory/MemoryArena.h +++ b/Juliet/include/Core/Memory/MemoryArena.h @@ -1,21 +1,19 @@ -#pragma once +#pragma once #include -#include #include #if JULIET_DEBUG #include #endif -constexpr global uint64 g_Arena_Default_Reserve_Size = Megabytes(64); -constexpr global uint64 g_Arena_Default_Commit_Size = Kilobytes(64); -constexpr global uint64 k_ArenaHeaderSize = 128; +#define g_Arena_Default_Reserve_Size Megabytes(64) +#define g_Arena_Default_Commit_Size Kilobytes(64) +#define k_ArenaHeaderSize ((uint64)128) -#if JULIET_DEBUG -struct ArenaDebugInfo; -JULIET_API String FormatDebugTagV(const char* formatStr, std::format_args args); -#endif +typedef struct Arena Arena; +typedef struct TempArena TempArena; +typedef struct ArenaParams ArenaParams; struct Arena { @@ -35,14 +33,14 @@ struct Arena Arena* FreeBlockLast; JULIET_DEBUG_ONLY(uint16 LostNodeCount;) - JULIET_DEBUG_ONLY(bool CanReserveMore : 1;) + JULIET_DEBUG_ONLY(bool8 CanReserveMore;) JULIET_DEBUG_ONLY(Arena* GlobalNext;) JULIET_DEBUG_ONLY(Arena* GlobalPrev;) JULIET_DEBUG_ONLY(ArenaDebugInfo* FirstDebugInfo;) const char* Name; }; -static_assert(sizeof(Arena) <= k_ArenaHeaderSize); +StaticAssert(sizeof(Arena) <= k_ArenaHeaderSize, ArenaHeaderSizeCheck); struct TempArena { @@ -52,74 +50,54 @@ struct TempArena struct ArenaParams { - uint64 ReserveSize = g_Arena_Default_Reserve_Size; - uint64 CommitSize = g_Arena_Default_Commit_Size; - + uint64 ReserveSize; + uint64 CommitSize; const char* Name; - - // When false, will assert if a new block is reserved. - JULIET_DEBUG_ONLY(bool CanReserveMore : 1 = true;) + JULIET_DEBUG_ONLY(bool8 DoNotReserveMore;) }; -[[nodiscard]] JULIET_API Arena* ArenaAllocate(const ArenaParams& params, - const std::source_location& loc = std::source_location::current()); -JULIET_API void ArenaRelease(NonNullPtr arena); +JULIET_API Arena* ArenaAllocateImpl(ArenaParams params, const char* file, uint32 line); +#define ArenaAllocate(...) ArenaAllocateImpl(__VA_ARGS__, __FILE__, (uint32)__LINE__) -// Raw Push, can be used but templated helpers exists below -[[nodiscard]] JULIET_API void* ArenaPush(NonNullPtr arena, size_t size, size_t align, - bool shouldBeZeroed JULIET_DEBUG_PARAM(const char* tag)); -JULIET_API void ArenaPopTo(NonNullPtr arena, size_t position); -JULIET_API void ArenaPop(NonNullPtr arena, size_t amount); -JULIET_API void ArenaClear(NonNullPtr arena); -[[nodiscard]] JULIET_API size_t ArenaPos(NonNullPtr arena); +JULIET_API void ArenaRelease(Arena* arena); + +// Raw Push, can be used or macros below +JULIET_API void* ArenaPush(Arena* arena, size_t size, size_t align, + bool8 shouldBeZeroed JULIET_DEBUG_PARAM(const char* tag)); +JULIET_API void ArenaPopTo(Arena* arena, size_t position); +JULIET_API void ArenaPop(Arena* arena, size_t amount); +JULIET_API void ArenaClear(Arena* arena); +JULIET_API size_t ArenaPos(Arena* arena); #if JULIET_DEBUG -template +#define ArenaPushSize(...) ArenaPush(__VA_ARGS__) +#define ArenaPushStruct(arena, Type) \ + ((Type*)ArenaPush((arena), sizeof(Type), AlignOf(Type), true, #Type)) +#define ArenaPushStructTag(arena, Type, tag) \ + ((Type*)ArenaPush((arena), sizeof(Type), AlignOf(Type), true, (tag))) +#define ArenaPushArray(arena, Type, count) \ + ((Type*)ArenaPush((arena), sizeof(Type) * (size_t)(count), Max(8ull, (uint64)AlignOf(Type)), true, #Type)) +#define ArenaPushArrayTag(arena, Type, count, tag) \ + ((Type*)ArenaPush((arena), sizeof(Type) * (size_t)(count), Max(8ull, (uint64)AlignOf(Type)), true, (tag))) +#define ArenaPushArrayNoZero(arena, Type, count) \ + ((Type*)ArenaPush((arena), sizeof(Type) * (size_t)(count), Max(8ull, (uint64)AlignOf(Type)), false, #Type)) +#define ArenaPushArrayNoZeroTag(arena, Type, count, tag) \ + ((Type*)ArenaPush((arena), sizeof(Type) * (size_t)(count), Max(8ull, (uint64)AlignOf(Type)), false, (tag))) +#else +#define ArenaPushSize(...) ArenaPush(__VA_ARGS__) +#define ArenaPushStruct(arena, Type) \ + ((Type*)ArenaPush((arena), sizeof(Type), AlignOf(Type), true)) +#define ArenaPushStructTag(arena, Type, tag) \ + ((Type*)ArenaPush((arena), sizeof(Type), AlignOf(Type), true)) +#define ArenaPushArray(arena, Type, count) \ + ((Type*)ArenaPush((arena), sizeof(Type) * (size_t)(count), Max(8ull, (uint64)AlignOf(Type)), true)) +#define ArenaPushArrayTag(arena, Type, count, tag) \ + ((Type*)ArenaPush((arena), sizeof(Type) * (size_t)(count), Max(8ull, (uint64)AlignOf(Type)), true)) +#define ArenaPushArrayNoZero(arena, Type, count) \ + ((Type*)ArenaPush((arena), sizeof(Type) * (size_t)(count), Max(8ull, (uint64)AlignOf(Type)), false)) +#define ArenaPushArrayNoZeroTag(arena, Type, count, tag) \ + ((Type*)ArenaPush((arena), sizeof(Type) * (size_t)(count), Max(8ull, (uint64)AlignOf(Type)), false)) #endif -[[nodiscard]] inline void* ArenaPushSize(NonNullPtr arena, size_t size, size_t align, - bool shouldBeZeroed JULIET_DEBUG_PARAM(FirstDebugArg&& firstDebugArg, DebugArgs&&... debugArgs)) -{ - return ArenaPush(arena, size, align, - shouldBeZeroed JULIET_DEBUG_PARAM( - [&]() -> const char* - { - return Format(GetDebugInfoArena(), std::forward(firstDebugArg), - std::forward(debugArgs)...) - .Str; - }())); -} -template -[[nodiscard]] Type* ArenaPushStruct(NonNullPtr arena JULIET_DEBUG_PARAM(DebugArgs&&... debugArgs)) -{ - return static_cast( - ArenaPush(arena, sizeof(Type) * 1, AlignOf(Type), - true JULIET_DEBUG_PARAM( - [&]() -> const char* - { - if constexpr (sizeof...(DebugArgs) > 0) - { - return Format(GetDebugInfoArena(), std::forward(debugArgs)...).Str; - } - return GetTypeName(); - }()))); -} - -template -[[nodiscard]] Type* ArenaPushArray(NonNullPtr arena, size_t count JULIET_DEBUG_PARAM(DebugArgs&&... debugArgs)) -{ - return static_cast( - ArenaPush(arena, sizeof(Type) * count, Max(8ull, AlignOf(Type)), - shouldZero JULIET_DEBUG_PARAM( - [&]() -> const char* - { - if constexpr (sizeof...(DebugArgs) > 0) - { - return Format(GetDebugInfoArena(), std::forward(debugArgs)...).Str; - } - return GetTypeName(); - }()))); -} - -TempArena ArenaTempBegin(NonNullPtr arena); +TempArena ArenaTempBegin(Arena* arena); void ArenaTempEnd(TempArena temp); diff --git a/Juliet/include/Core/Memory/MemoryArenaDebug.h b/Juliet/include/Core/Memory/MemoryArenaDebug.h index 738d41d..c67589c 100644 --- a/Juliet/include/Core/Memory/MemoryArenaDebug.h +++ b/Juliet/include/Core/Memory/MemoryArenaDebug.h @@ -1,12 +1,13 @@ -#pragma once +#pragma once -#include #include #if JULIET_DEBUG -struct Arena; -struct MemoryBlock; +typedef struct Arena Arena; +typedef struct MemoryBlock MemoryBlock; +typedef struct ArenaDebugInfo ArenaDebugInfo; +typedef struct ArenaAllocation ArenaAllocation; // Arena (Struct) struct ArenaDebugInfo @@ -27,20 +28,16 @@ struct ArenaAllocation }; // Arena (Struct) -void DebugRegisterArena(NonNullPtr arena); -void DebugUnregisterArena(NonNullPtr arena); -void DebugArenaSetDebugName(NonNullPtr arena, const char* name); -bool IsDebugInfoArena(const Arena* arena); // To prevent recursion -void DebugArenaFreeBlock(Arena* block); // To clear all debug infos in a block -void DebugArenaRemoveAllocation(Arena* block, size_t oldOffset); -void DebugArenaPopTo(Arena* block, size_t newPosition); -void DebugArenaAddDebugInfo(Arena* block, size_t size, size_t offset, const char* tag); +void DebugRegisterArena(Arena* arena); +void DebugUnregisterArena(Arena* arena); +void DebugArenaSetDebugName(Arena* arena, const char* name); +bool8 IsDebugInfoArena(const Arena* arena); // To prevent recursion +void DebugArenaFreeBlock(Arena* block); // To clear all debug infos in a block +void DebugArenaRemoveAllocation(Arena* block, size_t oldOffset); +void DebugArenaPopTo(Arena* block, size_t newPosition); +void DebugArenaAddDebugInfo(Arena* block, size_t size, size_t offset, const char* tag); -// MemoryArena (Pool-based) -void DebugFreeArenaAllocations(MemoryBlock* blk); -void DebugArenaAddAllocation(MemoryBlock* blk, size_t size, size_t offset, String tag); -void DebugArenaRemoveLastAllocation(MemoryBlock* blk); - -JULIET_API Arena* GetDebugInfoArena(); +JULIET_API Arena* GetDebugInfoArena(void); +JULIET_API Arena* GetGlobalArenaListHead(void); #endif diff --git a/Juliet/include/Core/Memory/Utils.h b/Juliet/include/Core/Memory/Utils.h index f1dbfe8..df927b7 100644 --- a/Juliet/include/Core/Memory/Utils.h +++ b/Juliet/include/Core/Memory/Utils.h @@ -1,63 +1,68 @@ -#pragma once +#pragma once -#define ArraySize(array) (sizeof(array) / sizeof(array[0])) +#include +#include -inline int32 MemCompare(const void* leftValue, const void* rightValue, size_t size) +#define ArraySize(array) (sizeof(array) / sizeof((array)[0])) + +static inline int32 MemCompare(const void* left_value, const void* right_value, size_t size) { - auto left = static_cast(leftValue); - auto right = static_cast(rightValue); + const unsigned char* left = (const unsigned char*)left_value; + const unsigned char* right = (const unsigned char*)right_value; while (size && *left == *right) { ++left; ++right; --size; } - return size ? *left - *right : 0; + return size ? ((int32)(*left) - (int32)(*right)) : 0; } -// Single linked list -void SingleLinkedListPushNext(auto*& stackTop, auto* node) -{ - node->Next = stackTop; - stackTop = node; -} +// Single linked list macros +#define SingleLinkedListPushNext(stackTop, node) \ + do \ + { \ + (node)->Next = (stackTop); \ + (stackTop) = (node); \ + } \ + while (0) -void SingleLinkedListPushPrevious(auto*& stackTop, auto* node) -{ - node->Previous = stackTop; - stackTop = node; -} +#define SingleLinkedListPushPrevious(stackTop, node) \ + do \ + { \ + (node)->Previous = (stackTop); \ + (stackTop) = (node); \ + } \ + while (0) -void SingleLinkedListPopNext(auto*& stackTop) -{ - stackTop = stackTop->Next; -} +#define SingleLinkedListPopNext(stackTop) \ + do \ + { \ + (stackTop) = (stackTop)->Next; \ + } \ + while (0) -// Double linked list -template -void Enqueue(QueueType& queue, QueueTypeNode* node) -{ - if (queue.First == nullptr) - { - queue.First = queue.Last = node; - node->Next = nullptr; - } - else - { - queue.Last->Next = node, queue.Last = node; - node->Next = nullptr; - } - - queue.Nodecount += 1; -} - -template -struct QueueNode -{ - QueueType* Next; -}; +// Double linked list queue macro +#define Enqueue(queue, node) \ + do \ + { \ + if ((queue).First == NULL) \ + { \ + (queue).First = (queue).Last = (node); \ + (node)->Next = NULL; \ + } \ + else \ + { \ + (queue).Last->Next = (node); \ + (queue).Last = (node); \ + (node)->Next = NULL; \ + } \ + (queue).Nodecount += 1; \ + } \ + while (0) #define DECLARE_QUEUE(type) \ + typedef struct type##Queue type##Queue; \ struct type##Queue \ { \ type* First; \ @@ -66,8 +71,7 @@ struct QueueNode size_t Size; \ }; -// TODO: homemade versions -#define MemSet memset -#define MemCopy memcpy - -#define MemoryZero(dst, size) MemSet(dst, 0, size) +#define MemSet memset +#define MemCopy memcpy +#define MemoryZero(dst, size) MemSet((dst), 0, (size)) +#define MemZeroStruct(ptr) MemoryZero((ptr), sizeof(*(ptr))) diff --git a/Juliet/include/Core/Networking/IPAddress.h b/Juliet/include/Core/Networking/IPAddress.h deleted file mode 100644 index 8677b0d..0000000 --- a/Juliet/include/Core/Networking/IPAddress.h +++ /dev/null @@ -1,6 +0,0 @@ -#pragma once - -// TODO : Do something better. -constexpr uint32 kLocalhost = (127 << 3) | (0 << 2) | (0 << 1) | 1; -constexpr uint32 kAnyIp = 0; -constexpr uint32 kBroadcastIp = (255 << 3) | (255 << 2) | (255 << 1) | 255; diff --git a/Juliet/include/Core/Networking/NetworkPacket.h b/Juliet/include/Core/Networking/NetworkPacket.h deleted file mode 100644 index e5d4208..0000000 --- a/Juliet/include/Core/Networking/NetworkPacket.h +++ /dev/null @@ -1,32 +0,0 @@ -#pragma once - -#include - -class NetworkPacket -{ - public: - NetworkPacket(); - NetworkPacket(Arena& arena); - virtual ~NetworkPacket(); - NetworkPacket(NetworkPacket&); - NetworkPacket& operator=(const NetworkPacket&); - NetworkPacket(NetworkPacket&&) noexcept; - NetworkPacket& operator=(NetworkPacket&&) noexcept; - - void Create(Arena& arena); - - [[nodiscard]] ByteBuffer GetRawData(); - - // Pack - NetworkPacket& operator<<(uint32 value); - NetworkPacket& operator<<(char* data); - - protected: - void Append(ByteBuffer buffer); - - friend class TcpSocket; - - private: - VectorArena Data; - size_t PartialSendIndex = 0; -}; diff --git a/Juliet/include/Core/Networking/Socket.h b/Juliet/include/Core/Networking/Socket.h deleted file mode 100644 index 92a67b7..0000000 --- a/Juliet/include/Core/Networking/Socket.h +++ /dev/null @@ -1,53 +0,0 @@ -#pragma once - -#include - -class Socket -{ - public: - virtual ~Socket(); - - Socket(Socket&& other) noexcept; - Socket& operator=(Socket&& socket) noexcept; - - Socket(const Socket&) = delete; - Socket& operator=(const Socket&) = delete; - - bool IsValid() const; - - enum class Status : uint8 - { - Done, - Partial, - Ready, - NotReady, - Disconnected, - Error - }; - - protected: - enum class Protocol : uint8 - { - TCP, - UDP - }; - - // To store the result of a send/receive on the socket - struct RequestStatus - { - Status Status = Status::Done; - size_t Length = 0; - }; - - explicit Socket(Protocol protocol); - - SocketHandle GetHandle() const { return Handle; } - - void Create(); - void CreateFromHandle(SocketHandle handle); - void Close(); - - private: - SocketHandle Handle; - Protocol ProtocolType; -}; diff --git a/Juliet/include/Core/Networking/SocketHandle.h b/Juliet/include/Core/Networking/SocketHandle.h deleted file mode 100644 index bc5ff98..0000000 --- a/Juliet/include/Core/Networking/SocketHandle.h +++ /dev/null @@ -1,11 +0,0 @@ -#pragma once - -#if JULIET_WIN32 -#include -#endif - -#if JULIET_WIN32 -using SocketHandle = UINT_PTR; -#else -using SocketHandle = int; -#endif diff --git a/Juliet/include/Core/Networking/TcpListener.h b/Juliet/include/Core/Networking/TcpListener.h deleted file mode 100644 index ac5ce16..0000000 --- a/Juliet/include/Core/Networking/TcpListener.h +++ /dev/null @@ -1,18 +0,0 @@ -#pragma once - -#include -#include -#include - -class TcpListener : public Socket -{ - public: - TcpListener(); - - TcpListener(const TcpListener&) = delete; - TcpListener& operator=(const TcpListener&) = delete; - - Status Listen(uint16 port, uint32 address = kAnyIp); - Status Accept(TcpSocket& socket); - void Close(); -}; diff --git a/Juliet/include/Core/Networking/TcpSocket.h b/Juliet/include/Core/Networking/TcpSocket.h deleted file mode 100644 index 8c4bf1e..0000000 --- a/Juliet/include/Core/Networking/TcpSocket.h +++ /dev/null @@ -1,21 +0,0 @@ -#pragma once - -#include - -class NetworkPacket; - -class TcpSocket : public Socket -{ - public: - TcpSocket(); - - TcpSocket(const TcpSocket&) = delete; - TcpSocket& operator=(const TcpSocket&) = delete; - - RequestStatus Send(NetworkPacket& packet); - RequestStatus Send(ByteBuffer buffer); - Status Receive(NetworkPacket& outPacket); - - private: - friend class TcpListener; -}; diff --git a/Juliet/include/Core/PCH.h b/Juliet/include/Core/PCH.h index 1c12dbd..c8dbf29 100644 --- a/Juliet/include/Core/PCH.h +++ b/Juliet/include/Core/PCH.h @@ -1,33 +1,18 @@ -#pragma once +#pragma once -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include diff --git a/Juliet/include/Core/Thread/Mutex.h b/Juliet/include/Core/Thread/Mutex.h deleted file mode 100644 index 80a65c5..0000000 --- a/Juliet/include/Core/Thread/Mutex.h +++ /dev/null @@ -1,4 +0,0 @@ -#pragma once - -using Mutex = std::mutex; -using LockGuard = std::lock_guard; diff --git a/Juliet/include/Core/Thread/Thread.h b/Juliet/include/Core/Thread/Thread.h index 91be4bc..1e43ead 100644 --- a/Juliet/include/Core/Thread/Thread.h +++ b/Juliet/include/Core/Thread/Thread.h @@ -1,13 +1,13 @@ -#pragma once +#pragma once #include +#include -uint32 thread_id(); +uint32 thread_id(void); void set_thread_name(String name); -// TODO : Proper wait -inline void wait_ms(int milliseconds) +static inline void wait_ms(int milliseconds) { clock_t start_time = clock(); while (clock() < start_time + milliseconds) diff --git a/Juliet/include/Core/Thread/ThreadContext.h b/Juliet/include/Core/Thread/ThreadContext.h index 4c161db..198d321 100644 --- a/Juliet/include/Core/Thread/ThreadContext.h +++ b/Juliet/include/Core/Thread/ThreadContext.h @@ -1,7 +1,8 @@ -#pragma once +#pragma once #include +typedef struct thread_context thread_context; struct thread_context { Arena* ScratchArenas[2]; @@ -10,10 +11,10 @@ struct thread_context uint8 ThreadNameSize; }; -thread_context* thread_context_alloc(); -void thread_context_release(NonNullPtr ctx); -void thread_context_select(NonNullPtr ctx); -thread_context* thread_context_current(); +thread_context* thread_context_alloc(void); +void thread_context_release(thread_context* ctx); +void thread_context_select(thread_context* ctx); +thread_context* thread_context_current(void); Arena* thread_context_get_scratch(Arena** conflicts, size_t count); JULIET_API TempArena scratch_begin(Arena** conflicts, size_t count); diff --git a/Juliet/include/Engine/Asset.h b/Juliet/include/Engine/Asset.h index 903389e..4f8d206 100644 --- a/Juliet/include/Engine/Asset.h +++ b/Juliet/include/Engine/Asset.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once #include #include diff --git a/Juliet/include/Engine/Class.h b/Juliet/include/Engine/Class.h index e7ae7ba..7541f3e 100644 --- a/Juliet/include/Engine/Class.h +++ b/Juliet/include/Engine/Class.h @@ -5,31 +5,15 @@ #include #include -struct Archive; +typedef struct Archive Archive; +typedef struct Class Class; -using serialize_fct_type = void(Archive&, uint16 version, void* payload); -using serialize_fct_ptr = serialize_fct_type*; - -using initialize_fct_type = void(void* payload); -using initialize_fct_ptr = initialize_fct_type*; - -template -void serialize_thunk(Archive& ar, uint16 version, void* payload) -{ - Assert(payload); - serialize(ar, version, *((Type*)payload)); -} - -template -void initialize_thunk(void* payload) -{ - auto& typed_val = *(Type*)payload; - typed_val = {}; -} +typedef void (*serialize_fct_ptr)(Archive* ar, uint16 version, void* payload); +typedef void (*initialize_fct_ptr)(void* payload); struct Class { - uint32 CRC; + String Name; uint8 kind; uint16 version; const Class* base_class; @@ -37,45 +21,32 @@ struct Class serialize_fct_ptr serialize_fct; size_t size_of; size_t alignment; - -#if JULIET_DEBUG - String Name; -#endif }; -#define DECLARE_CLASS() static Class* kind; +#define DECLARE_CLASS(cls) extern const Class class_kind_##cls; -#define DEFINE_CLASS_VERSIONED(cls, version, base_class) \ - constexpr Class class_kind_##cls = MakeClass(ConstString(#cls), 0, (version), (base_class), sizeof(cls), \ - alignof(cls), (&initialize_thunk), (&serialize_thunk)); \ - Class* cls::kind = const_cast(&class_kind_##cls); +#define DEFINE_CLASS_VERSIONED(cls, version_num, base_class_ptr) \ + const Class class_kind_##cls = { \ + .Name = ConstString(#cls), \ + .kind = 0, \ + .version = (version_num), \ + .base_class = (base_class_ptr), \ + .initialize_fct = init_##cls, \ + .serialize_fct = serialize_##cls, \ + .size_of = sizeof(cls), \ + .alignment = AlignOf(cls) \ + }; -consteval Class MakeClass(String name, uint8 kind, uint16 version, const Class* base_class, size_t size, size_t align, - initialize_fct_ptr init_fct, serialize_fct_ptr serde_fct) +#define ClassKind(cls) (&class_kind_##cls) + +static inline uint32 class_get_crc(const Class* cls) { - Class cls = {}; - cls.CRC = crc32(name.Str, name.Size); - cls.kind = kind; - cls.version = version; - cls.base_class = base_class; - cls.size_of = size; - cls.alignment = align; - cls.initialize_fct = init_fct; - cls.serialize_fct = serde_fct; - -#if JULIET_DEBUG - cls.Name = name; -#endif - - return cls; + Assert(cls != NULL); + return crc32_str(cls->Name); } -bool IsA(const Class& query, const Class* target); +JULIET_API bool8 IsA(const Class* query, const Class* target); -template -bool IsA(const Class& cls) -{ - return IsA(cls, type::kind); -} +#define IsClassA(cls_ptr, target_type) IsA((cls_ptr), ClassKind(target_type)) -JULIET_API void serialize(Archive& ar, NonNullPtr cls, void* instance); +JULIET_API void serialize_class(Archive* ar, const Class* cls, void* instance); diff --git a/Juliet/include/Engine/Debug/MemoryDebugger.h b/Juliet/include/Engine/Debug/MemoryDebugger.h index 08285cf..b28e73e 100644 --- a/Juliet/include/Engine/Debug/MemoryDebugger.h +++ b/Juliet/include/Engine/Debug/MemoryDebugger.h @@ -1,12 +1,9 @@ -#pragma once +#pragma once #include #if JULIET_DEBUG -namespace Debug -{ - JULIET_API void DebugDrawMemoryArena(); -} // namespace Debug +JULIET_API void Debug_DebugDrawMemoryArena(void); #endif diff --git a/Juliet/include/Engine/Engine.h b/Juliet/include/Engine/Engine.h index e28d243..c5081d7 100644 --- a/Juliet/include/Engine/Engine.h +++ b/Juliet/include/Engine/Engine.h @@ -1,22 +1,35 @@ -#pragma once +#pragma once -#include +#include +#include +#include +#include -enum class JulietInit_Flags : uint8; - -struct Engine +typedef struct ApplicationCallbacks ApplicationCallbacks; +struct ApplicationCallbacks { - IApplication* Application = nullptr; - Arena* PlatformArena = nullptr; - Arena* AssetArena = nullptr; + void (*Init)(Arena* platformArena); + void (*Shutdown)(void); + void (*Update)(float deltaTime); + bool8 (*IsRunning)(void); + Window* (*GetPlatformWindow)(void); + GraphicsDevice* (*GetGraphicsDevice)(void); + ColorTargetInfo (*GetColorTargetInfo)(Texture* swapchainTexture); + DepthStencilTargetInfo* (*GetDepthTargetInfo)(void); }; -void InitializeEngine(JulietInit_Flags flags); -void ShutdownEngine(); +typedef struct Engine Engine; +struct Engine +{ + ApplicationCallbacks Application; + Arena* PlatformArena; + Arena* AssetArena; +}; -void LoadApplication(IApplication& app); -void UnloadApplication(); - -void RunEngine(); - -extern Arena* GetPlatformArena(); +JULIET_API void StartApplication(ApplicationCallbacks app, JulietInit_Flags flags); +JULIET_API void InitializeEngine(JulietInit_Flags flags); +JULIET_API void ShutdownEngine(void); +JULIET_API void LoadApplication(ApplicationCallbacks app); +JULIET_API void UnloadApplication(void); +JULIET_API void RunEngine(void); +JULIET_API Arena* GetPlatformArena(void); diff --git a/Juliet/include/Engine/user.h b/Juliet/include/Engine/user.h index 7a0b8ba..92cf3d1 100644 --- a/Juliet/include/Engine/user.h +++ b/Juliet/include/Engine/user.h @@ -1,8 +1,10 @@ #pragma once -using UserID = uint8; +#include -void initialize_user_system(); -void shutdown_user_system(); +typedef uint8 UserID; -JULIET_API uint8 get_local_user_id(); +void initialize_user_system(void); +void shutdown_user_system(void); + +JULIET_API uint8 get_local_user_id(void); diff --git a/Juliet/include/Graphics/Camera.h b/Juliet/include/Graphics/Camera.h index a028a52..8925de8 100644 --- a/Juliet/include/Graphics/Camera.h +++ b/Juliet/include/Graphics/Camera.h @@ -1,8 +1,10 @@ -#pragma once +#pragma once +#include #include #include +typedef struct Camera Camera; struct Camera { index_t Index; @@ -15,21 +17,26 @@ struct Camera float FarPlane; }; -inline Matrix Camera_GetViewMatrix(const Camera& cam) +static inline Matrix Camera_GetViewMatrix(const Camera* cam) { - return LookAt(cam.Position, cam.Target, cam.Up); + Assert(cam != NULL); + return LookAt(cam->Position, cam->Target, cam->Up); } -inline Matrix Camera_GetProjectionMatrix(const Camera& cam) +static inline Matrix Camera_GetProjectionMatrix(const Camera* cam) { - return PerspectiveFov(cam.FOV, cam.AspectRatio, cam.NearPlane, cam.FarPlane); + Assert(cam != NULL); + return PerspectiveFov(cam->FOV, cam->AspectRatio, cam->NearPlane, cam->FarPlane); } -inline Matrix Camera_GetViewProjectionMatrix(const Camera& cam) +static inline Matrix Camera_GetViewProjectionMatrix(const Camera* cam) { - return Camera_GetProjectionMatrix(cam) * Camera_GetViewMatrix(cam); + Assert(cam != NULL); + Matrix proj = Camera_GetProjectionMatrix(cam); + Matrix view = Camera_GetViewMatrix(cam); + return MatrixMultiply(proj, view); } JULIET_API extern void ReserveCamera(size_t amount); -JULIET_API extern Camera* GetCurrentCamera(); +JULIET_API extern Camera* GetCurrentCamera(void); JULIET_API extern void SetCurrentCamera(index_t index); diff --git a/Juliet/include/Graphics/Colors.h b/Juliet/include/Graphics/Colors.h index 7f22a63..6806b95 100644 --- a/Juliet/include/Graphics/Colors.h +++ b/Juliet/include/Graphics/Colors.h @@ -1,13 +1,21 @@ -#pragma once +#pragma once -template -struct ColorType +#include + +typedef struct FColor FColor; +struct FColor { - Type R; - Type G; - Type B; - Type A; + float R; + float G; + float B; + float A; }; -using FColor = ColorType; -using Color = ColorType; +typedef struct Color Color; +struct Color +{ + uint8 R; + uint8 G; + uint8 B; + uint8 A; +}; diff --git a/Juliet/include/Graphics/DebugDisplay.h b/Juliet/include/Graphics/DebugDisplay.h index 98b0fa9..9c82eae 100644 --- a/Juliet/include/Graphics/DebugDisplay.h +++ b/Juliet/include/Graphics/DebugDisplay.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once #include #include @@ -6,9 +6,9 @@ #include #include -extern JULIET_API void DebugDisplay_Initialize(NonNullPtr arena, GraphicsDevice* device); +extern JULIET_API void DebugDisplay_Initialize(Arena* arena, GraphicsDevice* device); extern JULIET_API void DebugDisplay_Shutdown(GraphicsDevice* device); -extern JULIET_API void DebugDisplay_DrawLine(const Vector3& start, const Vector3& end, const FColor& color, bool overlay); -extern JULIET_API void DebugDisplay_DrawSphere(const Vector3& center, float radius, const FColor& color, bool overlay); +extern JULIET_API void DebugDisplay_DrawLine(Vector3 start, Vector3 end, FColor color, bool8 overlay); +extern JULIET_API void DebugDisplay_DrawSphere(Vector3 center, float radius, FColor color, bool8 overlay); extern JULIET_API void DebugDisplay_Prepare(CommandList* cmdList); -extern JULIET_API void DebugDisplay_Flush(CommandList* cmdList, RenderPass* renderPass, const Camera& camera); +extern JULIET_API void DebugDisplay_Flush(CommandList* cmdList, RenderPass* renderPass, const Camera* camera); diff --git a/Juliet/include/Graphics/Graphics.h b/Juliet/include/Graphics/Graphics.h index 76e9378..3e3773e 100644 --- a/Juliet/include/Graphics/Graphics.h +++ b/Juliet/include/Graphics/Graphics.h @@ -1,6 +1,5 @@ #pragma once -#include #include #include #include @@ -13,11 +12,12 @@ // Graphics Interface // Opaque types -struct CommandList; -struct GraphicsDevice; -struct Fence; +typedef struct CommandList CommandList; +typedef struct GraphicsDevice GraphicsDevice; +typedef struct Fence Fence; // Parameters of an indirect draw command +typedef struct IndirectDrawCommand IndirectDrawCommand; struct IndirectDrawCommand { uint32 VertexCount; // Number of vertices to draw @@ -27,6 +27,7 @@ struct IndirectDrawCommand }; // Parameters of an INDEXED indirect draw command +typedef struct IndexedIndirectDrawCommand IndexedIndirectDrawCommand; struct IndexedIndirectDrawCommand { uint32 VertexCount; // Number of vertices to draw @@ -37,6 +38,7 @@ struct IndexedIndirectDrawCommand }; // Parameters of an INDEXED Indirect Dispatch Command +typedef struct IndirectDispatchCommand IndirectDispatchCommand; struct IndirectDispatchCommand { uint32 X_WorkGroupCount; // Number of Workgroup to dispatch on dimension X @@ -44,39 +46,44 @@ struct IndirectDispatchCommand uint32 Z_WorkGroupCount; // Number of Workgroup to dispatch on dimension Z }; -enum class QueueType : uint8 +typedef uint8 QueueType; +enum QueueType_Enum { - Graphics = 0, - Compute, - Copy, - Count + QueueType_Graphics = 0, + QueueType_Compute, + QueueType_Copy, + QueueType_Count }; -enum class IndexFormat : uint8 +typedef uint8 IndexFormat; +enum IndexFormat_Enum { - UInt16, - UInt32 + IndexFormat_UInt16, + IndexFormat_UInt32 }; -enum struct SwapChainComposition : uint8 +typedef uint8 SwapChainComposition; +enum SwapChainComposition_Enum { - SDR, - SDR_LINEAR, - HDR_EXTENDED_LINEAR, - HDR10_ST2084 + SwapChainComposition_SDR, + SwapChainComposition_SDR_LINEAR, + SwapChainComposition_HDR_EXTENDED_LINEAR, + SwapChainComposition_HDR10_ST2084 }; // PresentMode from highest to lowest latency // Vsync prevents tearing. Enqueue ready images. // Mailbox prevents tearing. When image is ready, replace any pending image // Immediate replace current image as soon as possible. Can cause tearing -enum struct PresentMode : uint8 +typedef uint8 PresentMode; +enum PresentMode_Enum { - VSync, - Mailbox, - Immediate + PresentMode_VSync, + PresentMode_Mailbox, + PresentMode_Immediate }; +typedef struct GraphicsViewPort GraphicsViewPort; struct GraphicsViewPort { float X; @@ -88,87 +95,85 @@ struct GraphicsViewPort }; extern JULIET_API GraphicsDevice* CreateGraphicsDevice(GraphicsConfig config); -extern JULIET_API void DestroyGraphicsDevice(NonNullPtr device); +extern JULIET_API void DestroyGraphicsDevice(GraphicsDevice* device); // Attach To Window -extern JULIET_API bool AttachToWindow(NonNullPtr device, NonNullPtr window); -extern JULIET_API void DetachFromWindow(NonNullPtr device, NonNullPtr window); +extern JULIET_API bool8 AttachToWindow(GraphicsDevice* device, Window* window); +extern JULIET_API void DetachFromWindow(GraphicsDevice* device, Window* window); // SwapChain -extern JULIET_API bool AcquireSwapChainTexture(NonNullPtr commandList, NonNullPtr window, - Texture** swapChainTexture); -extern JULIET_API bool WaitAndAcquireSwapChainTexture(NonNullPtr commandList, - NonNullPtr window, Texture** swapChainTexture); -extern JULIET_API bool WaitForSwapchain(NonNullPtr device, NonNullPtr window); -extern JULIET_API TextureFormat GetSwapChainTextureFormat(NonNullPtr device, NonNullPtr window); +extern JULIET_API bool8 AcquireSwapChainTexture(CommandList* commandList, Window* window, Texture** swapChainTexture); +extern JULIET_API bool8 WaitAndAcquireSwapChainTexture(CommandList* commandList, Window* window, Texture** swapChainTexture); +extern JULIET_API bool8 WaitForSwapchain(GraphicsDevice* device, Window* window); +extern JULIET_API TextureFormat GetSwapChainTextureFormat(GraphicsDevice* device, Window* window); // Textures -extern JULIET_API Texture* CreateTexture(NonNullPtr device, const TextureCreateInfo& createInfo); -extern JULIET_API void DestroyTexture(NonNullPtr device, NonNullPtr texture); +extern JULIET_API Texture* CreateTexture(GraphicsDevice* device, const TextureCreateInfo* createInfo); +extern JULIET_API void DestroyTexture(GraphicsDevice* device, Texture* texture); // Command List -extern JULIET_API CommandList* AcquireCommandList(NonNullPtr device, QueueType queueType = QueueType::Graphics); -extern JULIET_API void SubmitCommandLists(NonNullPtr commandList); +extern JULIET_API CommandList* AcquireCommandList(GraphicsDevice* device, QueueType queueType); +extern JULIET_API void SubmitCommandLists(CommandList* commandList); // RenderPass -extern JULIET_API RenderPass* BeginRenderPass(NonNullPtr commandList, ColorTargetInfo& colorTargetInfo, - DepthStencilTargetInfo* depthStencilTargetInfo = nullptr); -extern JULIET_API RenderPass* BeginRenderPass(NonNullPtr commandList, - NonNullPtr colorTargetInfos, uint32 colorTargetInfoCount, - DepthStencilTargetInfo* depthStencilTargetInfo = nullptr); -extern JULIET_API void EndRenderPass(NonNullPtr renderPass); +extern JULIET_API RenderPass* BeginRenderPass(CommandList* commandList, const ColorTargetInfo* colorTargetInfo, + DepthStencilTargetInfo* depthStencilTargetInfo); +extern JULIET_API RenderPass* BeginRenderPassTargets(CommandList* commandList, + const ColorTargetInfo* colorTargetInfos, uint32 colorTargetInfoCount, + DepthStencilTargetInfo* depthStencilTargetInfo); +extern JULIET_API void EndRenderPass(RenderPass* renderPass); -extern JULIET_API void SetGraphicsViewPort(NonNullPtr renderPass, const GraphicsViewPort& viewPort); -extern JULIET_API void SetScissorRect(NonNullPtr renderPass, const struct Rectangle& rectangle); -extern JULIET_API void SetBlendConstants(NonNullPtr renderPass, FColor blendConstants); -extern JULIET_API void SetStencilReference(NonNullPtr renderPass, uint8 reference); +extern JULIET_API void SetGraphicsViewPort(RenderPass* renderPass, const GraphicsViewPort* viewPort); +extern JULIET_API void SetScissorRect(RenderPass* renderPass, const struct Rectangle* rectangle); +extern JULIET_API void SetBlendConstants(RenderPass* renderPass, FColor blendConstants); +extern JULIET_API void SetStencilReference(RenderPass* renderPass, uint8 reference); -extern JULIET_API void BindGraphicsPipeline(NonNullPtr renderPass, NonNullPtr graphicsPipeline); -extern JULIET_API void DrawPrimitives(NonNullPtr renderPass, uint32 numVertices, uint32 numInstances, +extern JULIET_API void BindGraphicsPipeline(RenderPass* renderPass, GraphicsPipeline* graphicsPipeline); +extern JULIET_API void DrawPrimitives(RenderPass* renderPass, uint32 numVertices, uint32 numInstances, uint32 firstVertex, uint32 firstInstance); -extern JULIET_API void DrawIndexedPrimitives(NonNullPtr renderPass, uint32 numIndices, uint32 numInstances, +extern JULIET_API void DrawIndexedPrimitives(RenderPass* renderPass, uint32 numIndices, uint32 numInstances, uint32 firstIndex, uint32 vertexOffset, uint32 firstInstance); -extern JULIET_API void SetIndexBuffer(NonNullPtr commandList, NonNullPtr buffer, +extern JULIET_API void SetIndexBuffer(CommandList* commandList, GraphicsBuffer* buffer, IndexFormat format, size_t indexCount, index_t offset); -extern JULIET_API void SetPushConstants(NonNullPtr commandList, ShaderStage stage, +extern JULIET_API void SetPushConstants(CommandList* commandList, ShaderStage stage, uint32 rootParameterIndex, uint32 numConstants, const void* constants); // Fences -extern JULIET_API bool WaitUntilGPUIsIdle(NonNullPtr device); +extern JULIET_API bool8 WaitUntilGPUIsIdle(GraphicsDevice* device); // Shaders -extern JULIET_API Shader* CreateShader(NonNullPtr device, String filename, ShaderCreateInfo& shaderCreateInfo); -extern JULIET_API void DestroyShader(NonNullPtr device, NonNullPtr shader); +extern JULIET_API Shader* CreateShader(GraphicsDevice* device, String filename, ShaderCreateInfo* shaderCreateInfo); +extern JULIET_API void DestroyShader(GraphicsDevice* device, Shader* shader); // Pipelines -extern JULIET_API GraphicsPipeline* CreateGraphicsPipeline(NonNullPtr device, - const GraphicsPipelineCreateInfo& createInfo); -extern JULIET_API void DestroyGraphicsPipeline(NonNullPtr device, NonNullPtr graphicsPipeline); +extern JULIET_API GraphicsPipeline* CreateGraphicsPipeline(GraphicsDevice* device, + const GraphicsPipelineCreateInfo* createInfo); +extern JULIET_API void DestroyGraphicsPipeline(GraphicsDevice* device, GraphicsPipeline* graphicsPipeline); #if ALLOW_SHADER_HOT_RELOAD // Allows updating the graphics pipeline shaders. Can update either one or both shaders. -extern JULIET_API bool UpdateGraphicsPipelineShaders(NonNullPtr device, NonNullPtr graphicsPipeline, - Shader* optional_vertexShader, Shader* optional_fragmentShader); +extern JULIET_API bool8 UpdateGraphicsPipelineShaders(GraphicsDevice* device, GraphicsPipeline* graphicsPipeline, + Shader* optional_vertexShader, Shader* optional_fragmentShader); #endif // Buffers -extern JULIET_API GraphicsBuffer* CreateGraphicsBuffer(NonNullPtr device, const BufferCreateInfo& createInfo); -extern JULIET_API GraphicsTransferBuffer* CreateGraphicsTransferBuffer(NonNullPtr device, - const TransferBufferCreateInfo& createInfo); -extern JULIET_API void* MapGraphicsBuffer(NonNullPtr device, NonNullPtr buffer); -extern JULIET_API void UnmapGraphicsBuffer(NonNullPtr device, NonNullPtr buffer); -extern JULIET_API void* MapGraphicsTransferBuffer(NonNullPtr device, NonNullPtr buffer); -extern JULIET_API void UnmapGraphicsTransferBuffer(NonNullPtr device, NonNullPtr buffer); -extern JULIET_API void CopyBuffer(NonNullPtr commandList, NonNullPtr dst, - NonNullPtr src, size_t size, size_t dstOffset = 0, - size_t srcOffset = 0); -extern JULIET_API void CopyBufferToTexture(NonNullPtr commandList, NonNullPtr dst, - NonNullPtr src); +extern JULIET_API GraphicsBuffer* CreateGraphicsBuffer(GraphicsDevice* device, const BufferCreateInfo* createInfo); +extern JULIET_API GraphicsTransferBuffer* CreateGraphicsTransferBuffer(GraphicsDevice* device, + const TransferBufferCreateInfo* createInfo); +extern JULIET_API void* MapGraphicsBuffer(GraphicsDevice* device, GraphicsBuffer* buffer); +extern JULIET_API void UnmapGraphicsBuffer(GraphicsDevice* device, GraphicsBuffer* buffer); +extern JULIET_API void* MapGraphicsTransferBuffer(GraphicsDevice* device, GraphicsTransferBuffer* buffer); +extern JULIET_API void UnmapGraphicsTransferBuffer(GraphicsDevice* device, GraphicsTransferBuffer* buffer); +extern JULIET_API void CopyBuffer(CommandList* commandList, GraphicsBuffer* dst, + GraphicsTransferBuffer* src, size_t size, size_t dstOffset, + size_t srcOffset); +extern JULIET_API void CopyBufferToTexture(CommandList* commandList, Texture* dst, + GraphicsTransferBuffer* src); -extern JULIET_API void TransitionBufferToReadable(NonNullPtr commandList, NonNullPtr buffer); -extern JULIET_API uint32 GetDescriptorIndex(NonNullPtr device, NonNullPtr buffer); -extern JULIET_API uint32 GetDescriptorIndex(NonNullPtr device, NonNullPtr texture); +extern JULIET_API void TransitionBufferToReadable(CommandList* commandList, GraphicsBuffer* buffer); +extern JULIET_API uint32 GetBufferDescriptorIndex(GraphicsDevice* device, GraphicsBuffer* buffer); +extern JULIET_API uint32 GetTextureDescriptorIndex(GraphicsDevice* device, Texture* texture); -extern JULIET_API void DestroyGraphicsBuffer(NonNullPtr device, NonNullPtr buffer); -extern JULIET_API void DestroyGraphicsTransferBuffer(NonNullPtr device, NonNullPtr buffer); +extern JULIET_API void DestroyGraphicsBuffer(GraphicsDevice* device, GraphicsBuffer* buffer); +extern JULIET_API void DestroyGraphicsTransferBuffer(GraphicsDevice* device, GraphicsTransferBuffer* buffer); diff --git a/Juliet/include/Graphics/GraphicsBuffer.h b/Juliet/include/Graphics/GraphicsBuffer.h index e377c52..018ead0 100644 --- a/Juliet/include/Graphics/GraphicsBuffer.h +++ b/Juliet/include/Graphics/GraphicsBuffer.h @@ -1,27 +1,33 @@ -#pragma once +#pragma once -enum class BufferUsage : uint8 +#include + +typedef uint8 BufferUsage; +enum BufferUsage_Enum { - None = 0, - IndexBuffer = 1 << 0, - ConstantBuffer = 1 << 1, - StructuredBuffer = 1 << 2, + BufferUsage_None = 0, + BufferUsage_IndexBuffer = 1 << 0, + BufferUsage_ConstantBuffer = 1 << 1, + BufferUsage_StructuredBuffer = 1 << 2, }; -enum class TransferBufferUsage : uint8 +typedef uint8 TransferBufferUsage; +enum TransferBufferUsage_Enum { - Download, - Upload + TransferBufferUsage_Download, + TransferBufferUsage_Upload }; +typedef struct BufferCreateInfo BufferCreateInfo; struct BufferCreateInfo { size_t Size; size_t Stride; BufferUsage Usage; - bool IsDynamic; + bool8 IsDynamic; }; +typedef struct TransferBufferCreateInfo TransferBufferCreateInfo; struct TransferBufferCreateInfo { size_t Size; @@ -29,5 +35,5 @@ struct TransferBufferCreateInfo }; // Opaque -struct GraphicsBuffer; -struct GraphicsTransferBuffer; +typedef struct GraphicsBuffer GraphicsBuffer; +typedef struct GraphicsTransferBuffer GraphicsTransferBuffer; diff --git a/Juliet/include/Graphics/GraphicsConfig.h b/Juliet/include/Graphics/GraphicsConfig.h index 436ef00..7600b38 100644 --- a/Juliet/include/Graphics/GraphicsConfig.h +++ b/Juliet/include/Graphics/GraphicsConfig.h @@ -1,19 +1,23 @@ #pragma once +#include + #if JULIET_DEBUG #define ALLOW_SHADER_HOT_RELOAD 1 #else #define ALLOW_SHADER_HOT_RELOAD 0 #endif -enum class GraphicsDriverType : uint8 +typedef uint8 GraphicsDriverType; +enum GraphicsDriverType_Enum { - Any = 0, - DX12 = 1, + GraphicsDriverType_Any = 0, + GraphicsDriverType_DX12 = 1, }; +typedef struct GraphicsConfig GraphicsConfig; struct GraphicsConfig { - GraphicsDriverType PreferredDriver = GraphicsDriverType::DX12; - bool EnableDebug; + GraphicsDriverType PreferredDriver; + bool8 EnableDebug; }; diff --git a/Juliet/include/Graphics/GraphicsPipeline.h b/Juliet/include/Graphics/GraphicsPipeline.h index f2410dc..aa2fcc9 100644 --- a/Juliet/include/Graphics/GraphicsPipeline.h +++ b/Juliet/include/Graphics/GraphicsPipeline.h @@ -1,42 +1,47 @@ -#pragma once +#pragma once #include #include // Forward Declare -struct ColorTargetDescription; +typedef struct ColorTargetDescription ColorTargetDescription; -enum class FillMode : uint8 +typedef uint8 FillMode; +enum FillMode_Enum { - Solid, - Wireframe, - Count + FillMode_Solid, + FillMode_Wireframe, + FillMode_Count }; -enum class CullMode : uint8 +typedef uint8 CullMode; +enum CullMode_Enum { - None, - Front, - Back, - Count + CullMode_None, + CullMode_Front, + CullMode_Back, + CullMode_Count }; -enum class FrontFace : uint8 +typedef uint8 FrontFace; +enum FrontFace_Enum { - CounterClockwise, - Clockwise, - Count + FrontFace_CounterClockwise, + FrontFace_Clockwise, + FrontFace_Count }; -enum class PrimitiveType : uint8 +typedef uint8 PrimitiveType; +enum PrimitiveType_Enum { - TriangleList, - TriangleStrip, - LineList, - LineStrip, - PointList, - Count + PrimitiveType_TriangleList, + PrimitiveType_TriangleStrip, + PrimitiveType_LineList, + PrimitiveType_LineStrip, + PrimitiveType_PointList, + PrimitiveType_Count }; +typedef struct RasterizerState RasterizerState; struct RasterizerState { FillMode FillMode; @@ -46,87 +51,90 @@ struct RasterizerState float DepthBiasConstantFactor; // How much depth value is added to each fragment float DepthBiasClamp; // Maximum depth bias float DepthBiasSlopeFactor; // Scalar applied to Fragment's slope - bool EnableDepthBias; // Bias fragment depth values - bool EnableDepthClip; // True to clip, false to clamp + bool8 EnableDepthBias; // Bias fragment depth values + bool8 EnableDepthClip; // True to clip, false to clamp }; -enum class VertexInputRate : uint8 +typedef uint8 VertexInputRate; +enum VertexInputRate_Enum { - Vertex, // Use vertex index - Instance, // Use instance index - Count + VertexInputRate_Vertex, // Use vertex index + VertexInputRate_Instance, // Use instance index + VertexInputRate_Count }; +typedef struct VertexBufferDescription VertexBufferDescription; struct VertexBufferDescription { uint32 Slot; // Binding Slot uint32 PitchInBytes; // Pitch between two elements VertexInputRate InputRate; - uint32 InstanceStepRate; // Only used when input rate == Instance. Number of instances to draw before advancing in the instance buffer by 1 + uint32 InstanceStepRate; // Only used when input rate == Instance. Number of instances to draw before advancing in the instance buffer by 1 }; -enum class VertexElementFormat : uint8 +typedef uint8 VertexElementFormat; +enum VertexElementFormat_Enum { - Invalid, + VertexElementFormat_Invalid, /* 32-bit Signed Integers */ - Int, - Int2, - Int3, - Int4, + VertexElementFormat_Int, + VertexElementFormat_Int2, + VertexElementFormat_Int3, + VertexElementFormat_Int4, /* 32-bit Unsigned Integers */ - UInt, - UInt2, - UInt3, - UInt4, + VertexElementFormat_UInt, + VertexElementFormat_UInt2, + VertexElementFormat_UInt3, + VertexElementFormat_UInt4, /* 32-bit Floats */ - Float, - Float2, - Float3, - Float4, + VertexElementFormat_Float, + VertexElementFormat_Float2, + VertexElementFormat_Float3, + VertexElementFormat_Float4, /* 8-bit Signed Integers */ - Byte2, - Byte4, + VertexElementFormat_Byte2, + VertexElementFormat_Byte4, /* 8-bit Unsigned Integers */ - UByte2, - UByte4, + VertexElementFormat_UByte2, + VertexElementFormat_UByte4, /* 8-bit Signed Normalized */ - Byte2_Norm, - Byte4_Norm, + VertexElementFormat_Byte2_Norm, + VertexElementFormat_Byte4_Norm, /* 8-bit Unsigned Normalized */ - UByte2_Norm, - UByte4_Norm, + VertexElementFormat_UByte2_Norm, + VertexElementFormat_UByte4_Norm, /* 16-bit Signed Integers */ - Short2, - Short4, + VertexElementFormat_Short2, + VertexElementFormat_Short4, /* 16-bit Unsigned Integers */ - UShort2, - UShort4, + VertexElementFormat_UShort2, + VertexElementFormat_UShort4, /* 16-bit Signed Normalized */ - Short2_Norm, - Short4_Norm, + VertexElementFormat_Short2_Norm, + VertexElementFormat_Short4_Norm, /* 16-bit Unsigned Normalized */ - UShort2_Norm, - UShort4_Norm, + VertexElementFormat_UShort2_Norm, + VertexElementFormat_UShort4_Norm, /* 16-bit Floats */ - Half2, - Half4, + VertexElementFormat_Half2, + VertexElementFormat_Half4, - // - Count + VertexElementFormat_Count }; +typedef struct VertexAttribute VertexAttribute; struct VertexAttribute { uint32 Location; // Shader input location index @@ -135,6 +143,7 @@ struct VertexAttribute uint32 Offset; // Offset of this attribute relative to the start of the vertex element }; +typedef struct VertexInputState VertexInputState; struct VertexInputState { const VertexBufferDescription* VertexBufferDescriptions; @@ -143,69 +152,76 @@ struct VertexInputState uint32 NumVertexAttributes; }; +typedef struct GraphicsPipelineTargetInfo GraphicsPipelineTargetInfo; struct GraphicsPipelineTargetInfo { const ColorTargetDescription* ColorTargetDescriptions; size_t NumColorTargets; TextureFormat DepthStencilFormat; - bool HasDepthStencilTarget; + bool8 HasDepthStencilTarget; }; -enum class CompareOperation : uint8 +typedef uint8 CompareOperation; +enum CompareOperation_Enum { - Invalid, - Never, // The comparison always evaluates false. - Less, // The comparison evaluates reference < test. - Equal, // The comparison evaluates reference == test. - LessOrEqual, // The comparison evaluates reference <= test. - Greater, // The comparison evaluates reference > test. - NotEqual, // The comparison evaluates reference != test. - GreaterOrEqual, // The comparison evalutes reference >= test. - Always, // The comparison always evaluates true. - Count + CompareOperation_Invalid, + CompareOperation_Never, // The comparison always evaluates false. + CompareOperation_Less, // The comparison evaluates reference < test. + CompareOperation_Equal, // The comparison evaluates reference == test. + CompareOperation_LessOrEqual, // The comparison evaluates reference <= test. + CompareOperation_Greater, // The comparison evaluates reference > test. + CompareOperation_NotEqual, // The comparison evaluates reference != test. + CompareOperation_GreaterOrEqual, // The comparison evalutes reference >= test. + CompareOperation_Always, // The comparison always evaluates true. + CompareOperation_Count }; -enum class StencilOperation : uint8 +typedef uint8 StencilOperation; +enum StencilOperation_Enum { - Invalid, - Keep, // Keeps the current value. - Zero, // Sets the value to 0. - Replace, // Sets the value to reference. - IncrementAndClamp, // Increments the current value and clamps to the maximum value. - DecrementAndClamp, // Decrements the current value and clamps to 0. - Invert, // Bitwise-inverts the current value. - IncrementAndWrap, // Increments the current value and wraps back to 0. - DecrementAndWrap, // Decrements the current value and wraps to the maximum value. - Count + StencilOperation_Invalid, + StencilOperation_Keep, // Keeps the current value. + StencilOperation_Zero, // Sets the value to 0. + StencilOperation_Replace, // Sets the value to reference. + StencilOperation_IncrementAndClamp, // Increments the current value and clamps to the maximum value. + StencilOperation_DecrementAndClamp, // Decrements the current value and clamps to 0. + StencilOperation_Invert, // Bitwise-inverts the current value. + StencilOperation_IncrementAndWrap, // Increments the current value and wraps back to 0. + StencilOperation_DecrementAndWrap, // Decrements the current value and wraps to the maximum value. + StencilOperation_Count }; +typedef struct StencilOperationState StencilOperationState; struct StencilOperationState { - StencilOperation FailOperation; // The action performed on samples that fail the stencil test. - StencilOperation PassOperation; // The action performed on samples that pass the depth and stencil tests. + StencilOperation FailOperation; // The action performed on samples that fail the stencil test. + StencilOperation PassOperation; // The action performed on samples that pass the depth and stencil tests. StencilOperation DepthFailOperation; // The action performed on samples that pass the stencil test and fail the depth test. - StencilOperation CompareOperation; // The comparison operator used in the stencil test. + StencilOperation CompareOperation; // The comparison operator used in the stencil test. }; +typedef struct DepthStencilState DepthStencilState; struct DepthStencilState { CompareOperation CompareOperation; // The comparison operator used for depth testing. StencilOperationState BackStencilState; // The stencil op state for back-facing triangles. StencilOperationState FrontStencilState; // The stencil op state for front-facing triangles. - uint8 CompareMask; // Selects the bits of the stencil values participating in the stencil test. - uint8 WriteMask; // Selects the bits of the stencil values updated by the stencil test. - bool EnableDepthTest : 1; // true enables the depth test. - bool EnableDepthWrite : 1; // true enables depth writes. Depth writes are always disabled when enable_depth_test is false. - bool EnableStencilTest : 1; // true enables the stencil test. + uint8 CompareMask; // Selects the bits of the stencil values participating in the stencil test. + uint8 WriteMask; // Selects the bits of the stencil values updated by the stencil test. + bool8 EnableDepthTest : 1; // true enables the depth test. + bool8 EnableDepthWrite : 1; // true enables depth writes. Depth writes are always disabled when enable_depth_test is false. + bool8 EnableStencilTest : 1; // true enables the stencil test. }; +typedef struct MultisampleState MultisampleState; struct MultisampleState { TextureSampleCount SampleCount; uint32 SampleMask; // Which sample should be updated. If Enabled mask == false -> 0xFFFFFFFF - bool EnableMask; + bool8 EnableMask; }; +typedef struct GraphicsPipelineCreateInfo GraphicsPipelineCreateInfo; struct GraphicsPipelineCreateInfo { Shader* VertexShader; @@ -219,4 +235,4 @@ struct GraphicsPipelineCreateInfo }; // Opaque type -struct GraphicsPipeline; +typedef struct GraphicsPipeline GraphicsPipeline; diff --git a/Juliet/include/Graphics/ImGuiRenderer.h b/Juliet/include/Graphics/ImGuiRenderer.h index 6298a5e..c99188d 100644 --- a/Juliet/include/Graphics/ImGuiRenderer.h +++ b/Juliet/include/Graphics/ImGuiRenderer.h @@ -1,9 +1,9 @@ -#pragma once +#pragma once #include #include -extern bool ImGuiRenderer_Initialize(GraphicsDevice* device); +extern bool8 ImGuiRenderer_Initialize(GraphicsDevice* device); extern void ImGuiRenderer_Shutdown(GraphicsDevice* device); -extern void ImGuiRenderer_NewFrame(); +extern void ImGuiRenderer_NewFrame(void); extern JULIET_API void ImGuiRenderer_Render(CommandList* cmdList, RenderPass* renderPass); diff --git a/Juliet/include/Graphics/Lighting.h b/Juliet/include/Graphics/Lighting.h index cfd838b..b7df281 100644 --- a/Juliet/include/Graphics/Lighting.h +++ b/Juliet/include/Graphics/Lighting.h @@ -1,8 +1,9 @@ -#pragma once +#pragma once -#include #include +#include +typedef struct PointLight PointLight; struct PointLight { Vector3 Position; diff --git a/Juliet/include/Graphics/Mesh.h b/Juliet/include/Graphics/Mesh.h index 088dc7b..e865da7 100644 --- a/Juliet/include/Graphics/Mesh.h +++ b/Juliet/include/Graphics/Mesh.h @@ -1,17 +1,17 @@ -#pragma once +#pragma once -#include #include #include #include -struct Arena; -struct Vertex; +typedef struct Arena Arena; +typedef struct Vertex Vertex; -using MeshAssetID = index_t; -using MaterialAssetID = index_t; -using MeshInstanceID = index_t; +typedef index_t MeshAssetID; +typedef index_t MaterialAssetID; +typedef index_t MeshInstanceID; +typedef struct MeshAsset MeshAsset; struct MeshAsset { String Name; @@ -22,14 +22,16 @@ struct MeshAsset index_t IndexOffset; }; +typedef struct MaterialAsset MaterialAsset; struct MaterialAsset { - Vector4 AlbedoColor = { 1.0f, 1.0f, 1.0f, 1.0f }; + Vector4 AlbedoColor; }; +typedef struct MeshInstance MeshInstance; struct MeshInstance { MeshAssetID MeshAsset; MaterialAssetID MaterialAsset; - Matrix Transform = MatrixIdentity(); + Matrix Transform; }; diff --git a/Juliet/include/Graphics/MeshRenderer.h b/Juliet/include/Graphics/MeshRenderer.h index ddf8292..cbf5211 100644 --- a/Juliet/include/Graphics/MeshRenderer.h +++ b/Juliet/include/Graphics/MeshRenderer.h @@ -1,57 +1,56 @@ -#pragma once +#pragma once #include #include #include #include +#include #include #include -#include #include -struct GraphicsTransferBuffer; -struct RenderPass; -struct CommandList; -struct GraphicsBuffer; -struct Window; -struct GraphicsPipeline; -struct GraphicsDevice; -using LightID = index_t; +typedef struct GraphicsTransferBuffer GraphicsTransferBuffer; +typedef struct RenderPass RenderPass; +typedef struct CommandList CommandList; +typedef struct GraphicsBuffer GraphicsBuffer; +typedef struct Window Window; +typedef struct GraphicsPipeline GraphicsPipeline; +typedef struct GraphicsDevice GraphicsDevice; +typedef index_t LightID; -constexpr size_t kGeometryPage = Megabytes(64); -constexpr size_t kIndexPage = Megabytes(32); -constexpr size_t kDefaultMeshNumber = 500; -constexpr size_t kDefaultVertexCount = 2'000'000; // Fit less than one geometry page -constexpr size_t kDefaultIndexCount = 16'000'000; // Fit less than one index page -constexpr size_t kDefaultLightCount = 1024; +#define kGeometryPage Megabytes(64) +#define kIndexPage Megabytes(32) +#define kDefaultMeshNumber ((size_t)500) +#define kDefaultVertexCount ((size_t)2000000) +#define kDefaultIndexCount ((size_t)16000000) +#define kDefaultLightCount ((size_t)1024) -JULIET_API void InitializeMeshRenderer(NonNullPtr assetArena, NonNullPtr instanceArena); -[[nodiscard]] JULIET_API bool InitializeMeshRendererGraphics(NonNullPtr device, NonNullPtr window); -JULIET_API void ShutdownMeshRendererGraphics(); -JULIET_API void ShutdownMeshRenderer(); -JULIET_API void LoadMeshesOnGPU(NonNullPtr cmdList); -JULIET_API void RenderMeshes(NonNullPtr cmdList, NonNullPtr pass, const Matrix& viewProjection); +JULIET_API void InitializeMeshRenderer(Arena* assetArena, Arena* instanceArena); +JULIET_API bool8 InitializeMeshRendererGraphics(GraphicsDevice* device, Window* window); +JULIET_API void ShutdownMeshRendererGraphics(void); +JULIET_API void ShutdownMeshRenderer(void); +JULIET_API void LoadMeshesOnGPU(CommandList* cmdList); +JULIET_API void RenderMeshes(CommandList* cmdList, RenderPass* pass, const Matrix* viewProjection); // Lights -[[nodiscard]] JULIET_API LightID AddPointLight(const PointLight& light); -JULIET_API void SetPointLightPosition(LightID id, const Vector3& position); -JULIET_API void SetPointLightColor(LightID id, const Vector3& color); -JULIET_API void SetPointLightRadius(LightID id, float radius); -JULIET_API void SetPointLightIntensity(LightID id, float intensity); -JULIET_API void ClearPointLights(); -JULIET_API void SetGlobalLight(const Vector3& direction, const Vector3& color, float ambientIntensity); +JULIET_API LightID AddPointLight(const PointLight* light); +JULIET_API void SetPointLightPosition(LightID id, Vector3 position); +JULIET_API void SetPointLightColor(LightID id, Vector3 color); +JULIET_API void SetPointLightRadius(LightID id, float radius); +JULIET_API void SetPointLightIntensity(LightID id, float intensity); +JULIET_API void ClearPointLights(void); +JULIET_API void SetGlobalLight(Vector3 direction, Vector3 color, float ambientIntensity); // Assets & Instances -[[nodiscard]] JULIET_API MeshAssetID GetOrCreateMeshAsset(String name); -[[nodiscard]] JULIET_API MeshInstanceID CreateMeshInstance(MeshAssetID meshAsset, MaterialAssetID materialAsset, const Matrix& transform); -JULIET_API void SetMeshInstanceTransform(MeshInstanceID id, const Matrix& transform); +JULIET_API MeshAssetID GetOrCreateMeshAsset(String name); +JULIET_API MeshInstanceID CreateMeshInstance(MeshAssetID meshAsset, MaterialAssetID materialAsset, const Matrix* transform); +JULIET_API void SetMeshInstanceTransform(MeshInstanceID id, const Matrix* transform); // Primitives -JULIET_API MeshAssetID GetCubePrimitiveMeshAssetID(); -JULIET_API MeshAssetID GetQuadPrimitiveMeshAssetID(); -JULIET_API MeshAssetID GetSpherePrimitiveMeshAssetID(); +JULIET_API MeshAssetID GetCubePrimitiveMeshAssetID(void); +JULIET_API MeshAssetID GetQuadPrimitiveMeshAssetID(void); +JULIET_API MeshAssetID GetSpherePrimitiveMeshAssetID(void); #if ALLOW_SHADER_HOT_RELOAD -JULIET_API void ReloadMeshRendererShaders(); +JULIET_API void ReloadMeshRendererShaders(void); #endif - diff --git a/Juliet/include/Graphics/PushConstants.h b/Juliet/include/Graphics/PushConstants.h index beff445..ceb457c 100644 --- a/Juliet/include/Graphics/PushConstants.h +++ b/Juliet/include/Graphics/PushConstants.h @@ -1,9 +1,10 @@ -#pragma once +#pragma once #include #include #include +typedef struct PushData PushData; struct PushData { Matrix ViewProjection; @@ -21,9 +22,9 @@ struct PushData Vector3 GlobalLightColor; uint32 Pad2; - - float Scale[2]; - float Translate[2]; - + + float Scale[2]; + float Translate[2]; + Vector4 MeshAlbedo; }; diff --git a/Juliet/include/Graphics/RenderPass.h b/Juliet/include/Graphics/RenderPass.h index 90e3c46..7c673e0 100644 --- a/Juliet/include/Graphics/RenderPass.h +++ b/Juliet/include/Graphics/RenderPass.h @@ -1,23 +1,26 @@ -#pragma once +#pragma once #include #include -enum struct LoadOperation : uint8 +typedef uint8 LoadOperation; +enum LoadOperation_Enum { - Load, // Load the texture from memory (preserve) - Clear, // Clear the texture - Ignore // Ignore the content of the texture (undefined) + LoadOperation_Load, // Load the texture from memory (preserve) + LoadOperation_Clear, // Clear the texture + LoadOperation_Ignore // Ignore the content of the texture (undefined) }; -enum struct StoreOperation : uint8 +typedef uint8 StoreOperation; +enum StoreOperation_Enum { - Store, // Store the result of the render pass into memory - Ignore, // Whatever is generated is ignored (undefined) - Resolve, // Resolve MipMaps into non mip map texture. Discard MipMap content - ResolveAndStore // Same but store the MipMap content to memory + StoreOperation_Store, // Store the result of the render pass into memory + StoreOperation_Ignore, // Whatever is generated is ignored (undefined) + StoreOperation_Resolve, // Resolve MipMaps into non mip map texture. Discard MipMap content + StoreOperation_ResolveAndStore // Same but store the MipMap content to memory }; +typedef struct ColorTargetInfo ColorTargetInfo; struct ColorTargetInfo { Texture* TargetTexture; @@ -27,81 +30,87 @@ struct ColorTargetInfo uint32 DepthPlane; uint32 LayerIndex; }; - bool CycleTexture; // Whether the texture should be cycled if already bound (and load operation != LOAD) + bool8 CycleTexture; // Whether the texture should be cycled if already bound (and load operation != LOAD) Texture* ResolveTexture; uint32 ResolveMipLevel; uint32 ResolveLayerIndex; - bool CycleResolveTexture; + bool8 CycleResolveTexture; FColor ClearColor; LoadOperation LoadOperation; StoreOperation StoreOperation; }; +typedef struct DepthStencilTargetInfo DepthStencilTargetInfo; struct DepthStencilTargetInfo { Texture* TargetTexture; uint32 MipLevel; uint32 LayerIndex; - float ClearDepth; - uint8 ClearStencil; - LoadOperation LoadOperation; + float ClearDepth; + uint8 ClearStencil; + LoadOperation LoadOperation; StoreOperation StoreOperation; }; - - enum class BlendFactor : uint8 + +typedef uint8 BlendFactor; +enum BlendFactor_Enum { - Invalid, - Zero, - One, - Src_Color, - One_Minus_Src_Color, - Dst_Color, - One_Minus_Dst_Color, - Src_Alpha, - One_Minus_Src_Alpha, - Dst_Alpha, - One_Minus_Dst_Alpha, - Constant_Color, - One_MINUS_Constant_Color, - Src_Alpha_Saturate, // min(source alpha, 1 - destination alpha) - Count + BlendFactor_Invalid, + BlendFactor_Zero, + BlendFactor_One, + BlendFactor_Src_Color, + BlendFactor_One_Minus_Src_Color, + BlendFactor_Dst_Color, + BlendFactor_One_Minus_Dst_Color, + BlendFactor_Src_Alpha, + BlendFactor_One_Minus_Src_Alpha, + BlendFactor_Dst_Alpha, + BlendFactor_One_Minus_Dst_Alpha, + BlendFactor_Constant_Color, + BlendFactor_One_MINUS_Constant_Color, + BlendFactor_Src_Alpha_Saturate, // min(source alpha, 1 - destination alpha) + BlendFactor_Count }; -enum class BlendOperation : uint8 +typedef uint8 BlendOperation; +enum BlendOperation_Enum { - Invalid, - Add, // (source * source_factor) + (destination * destination_factor) - Subtract, // (source * source_factor) - (destination * destination_factor) - ReverseSubtract, // (destination * destination_factor) - (source * source_factor) - Min, // min(source, destination) - Max, // max(source, destination) - Count + BlendOperation_Invalid, + BlendOperation_Add, // (source * source_factor) + (destination * destination_factor) + BlendOperation_Subtract, // (source * source_factor) - (destination * destination_factor) + BlendOperation_ReverseSubtract, // (destination * destination_factor) - (source * source_factor) + BlendOperation_Min, // min(source, destination) + BlendOperation_Max, // max(source, destination) + BlendOperation_Count }; -enum class ColorComponentFlags : uint8 +typedef uint8 ColorComponentFlags; +enum ColorComponentFlags_Enum { - R = 1u << 0, - G = 1u << 1, - B = 1u << 2, - A = 1u << 3 + ColorComponentFlags_R = 1u << 0, + ColorComponentFlags_G = 1u << 1, + ColorComponentFlags_B = 1u << 2, + ColorComponentFlags_A = 1u << 3 }; +typedef struct ColorTargetBlendState ColorTargetBlendState; struct ColorTargetBlendState { - BlendFactor SourceColorBlendFactor; // The value to be multiplied by the source RGB value. - BlendFactor DestinationColorBlendFactor; // The value to be multiplied by the destination RGB value. - BlendOperation ColorBlendOperation; // The blend operation for the RGB components. - BlendFactor SourceAlphaBlendFactor; // The value to be multiplied by the source alpha. - BlendFactor DestinationAlphaBlendFactor; // The value to be multiplied by the destination alpha. - BlendOperation AlphaBlendOperation; // The blend operation for the alpha component. + BlendFactor SourceColorBlendFactor; // The value to be multiplied by the source RGB value. + BlendFactor DestinationColorBlendFactor; // The value to be multiplied by the destination RGB value. + BlendOperation ColorBlendOperation; // The blend operation for the RGB components. + BlendFactor SourceAlphaBlendFactor; // The value to be multiplied by the source alpha. + BlendFactor DestinationAlphaBlendFactor; // The value to be multiplied by the destination alpha. + BlendOperation AlphaBlendOperation; // The blend operation for the alpha component. ColorComponentFlags ColorWriteMask; // A bitmask specifying which of the RGBA components are enabled for writing. Writes to all channels if enable_color_write_mask is false. - bool EnableBlend : 1; // Whether blending is enabled for the color target. - bool EnableColorWriteMask : 1; // Whether the color write mask is enabled. + bool8 EnableBlend : 1; // Whether blending is enabled for the color target. + bool8 EnableColorWriteMask : 1; // Whether the color write mask is enabled. }; +typedef struct ColorTargetDescription ColorTargetDescription; struct ColorTargetDescription { TextureFormat Format; @@ -109,4 +118,4 @@ struct ColorTargetDescription }; // Opaque Type -struct RenderPass; +typedef struct RenderPass RenderPass; diff --git a/Juliet/include/Graphics/Shader.h b/Juliet/include/Graphics/Shader.h index a19f00f..6c011a1 100644 --- a/Juliet/include/Graphics/Shader.h +++ b/Juliet/include/Graphics/Shader.h @@ -1,20 +1,21 @@ -#pragma once +#pragma once #include // Opaque type -struct Shader; +typedef struct Shader Shader; -enum class ShaderStage : uint8 +typedef uint8 ShaderStage; +enum ShaderStage_Enum { - Vertex, - Fragment, - Compute + ShaderStage_Vertex, + ShaderStage_Fragment, + ShaderStage_Compute }; +typedef struct ShaderCreateInfo ShaderCreateInfo; struct ShaderCreateInfo { ShaderStage Stage; String EntryPoint; }; - diff --git a/Juliet/include/Graphics/SkyboxRenderer.h b/Juliet/include/Graphics/SkyboxRenderer.h index cd2040d..9f4c5e8 100644 --- a/Juliet/include/Graphics/SkyboxRenderer.h +++ b/Juliet/include/Graphics/SkyboxRenderer.h @@ -1,28 +1,27 @@ -#pragma once +#pragma once #include -#include #include #include -struct RenderPass; -struct CommandList; -struct Window; -struct GraphicsPipeline; -struct GraphicsDevice; +typedef struct RenderPass RenderPass; +typedef struct CommandList CommandList; +typedef struct Window Window; +typedef struct GraphicsPipeline GraphicsPipeline; +typedef struct GraphicsDevice GraphicsDevice; +typedef struct SkyboxRenderer SkyboxRenderer; struct SkyboxRenderer { GraphicsDevice* Device; GraphicsPipeline* Pipeline; }; -[[nodiscard]] JULIET_API bool InitializeSkyboxRenderer(NonNullPtr device, NonNullPtr window); -JULIET_API void ShutdownSkyboxRenderer(); -JULIET_API void RenderSkybox(NonNullPtr cmdList, NonNullPtr pass, const Matrix& viewProjection); +JULIET_API bool8 InitializeSkyboxRenderer(GraphicsDevice* device, Window* window); +JULIET_API void ShutdownSkyboxRenderer(void); +JULIET_API void RenderSkybox(CommandList* cmdList, RenderPass* pass, const Matrix* viewProjection); #if ALLOW_SHADER_HOT_RELOAD -JULIET_API void ReloadSkyboxShaders(); +JULIET_API void ReloadSkyboxShaders(void); #endif - diff --git a/Juliet/include/Graphics/Texture.h b/Juliet/include/Graphics/Texture.h index 4b67c6c..8502615 100644 --- a/Juliet/include/Graphics/Texture.h +++ b/Juliet/include/Graphics/Texture.h @@ -1,164 +1,170 @@ -#pragma once +#pragma once -enum struct TextureFormat : uint8 +#include + +typedef uint8 TextureFormat; +enum TextureFormat_Enum { - Invalid, + TextureFormat_Invalid, /* Unsigned Normalized Float Color Formats */ - A8_UNORM, - R8_UNORM, - R8G8_UNORM, - R8G8B8A8_UNORM, - R16_UNORM, - R16G16_UNORM, - R16G16B16A16_UNORM, - R10G10B10A2_UNORM, - B5G6R5_UNORM, - B5G5R5A1_UNORM, - B4G4R4A4_UNORM, - B8G8R8A8_UNORM, + TextureFormat_A8_UNORM, + TextureFormat_R8_UNORM, + TextureFormat_R8G8_UNORM, + TextureFormat_R8G8B8A8_UNORM, + TextureFormat_R16_UNORM, + TextureFormat_R16G16_UNORM, + TextureFormat_R16G16B16A16_UNORM, + TextureFormat_R10G10B10A2_UNORM, + TextureFormat_B5G6R5_UNORM, + TextureFormat_B5G5R5A1_UNORM, + TextureFormat_B4G4R4A4_UNORM, + TextureFormat_B8G8R8A8_UNORM, /* Compressed Unsigned Normalized Float Color Formats */ - BC1_RGBA_UNORM, - BC2_RGBA_UNORM, - BC3_RGBA_UNORM, - BC4_R_UNORM, - BC5_RG_UNORM, - BC7_RGBA_UNORM, + TextureFormat_BC1_RGBA_UNORM, + TextureFormat_BC2_RGBA_UNORM, + TextureFormat_BC3_RGBA_UNORM, + TextureFormat_BC4_R_UNORM, + TextureFormat_BC5_RG_UNORM, + TextureFormat_BC7_RGBA_UNORM, /* Compressed Signed Float Color Formats */ - BC6H_RGB_FLOAT, + TextureFormat_BC6H_RGB_FLOAT, /* Compressed Unsigned Float Color Formats */ - BC6H_RGB_UFLOAT, + TextureFormat_BC6H_RGB_UFLOAT, /* Signed Normalized Float Color Formats */ - R8_SNORM, - R8G8_SNORM, - R8G8B8A8_SNORM, - R16_SNORM, - R16G16_SNORM, - R16G16B16A16_SNORM, + TextureFormat_R8_SNORM, + TextureFormat_R8G8_SNORM, + TextureFormat_R8G8B8A8_SNORM, + TextureFormat_R16_SNORM, + TextureFormat_R16G16_SNORM, + TextureFormat_R16G16B16A16_SNORM, /* Signed Float Color Formats */ - R16_FLOAT, - R16G16_FLOAT, - R16G16B16A16_FLOAT, - R32_FLOAT, - R32G32_FLOAT, - R32G32B32A32_FLOAT, + TextureFormat_R16_FLOAT, + TextureFormat_R16G16_FLOAT, + TextureFormat_R16G16B16A16_FLOAT, + TextureFormat_R32_FLOAT, + TextureFormat_R32G32_FLOAT, + TextureFormat_R32G32B32A32_FLOAT, /* Unsigned Float Color Formats */ - R11G11B10_UFLOAT, + TextureFormat_R11G11B10_UFLOAT, /* Unsigned Integer Color Formats */ - R8_UINT, - R8G8_UINT, - R8G8B8A8_UINT, - R16_UINT, - R16G16_UINT, - R16G16B16A16_UINT, - R32_UINT, - R32G32_UINT, - R32G32B32A32_UINT, + TextureFormat_R8_UINT, + TextureFormat_R8G8_UINT, + TextureFormat_R8G8B8A8_UINT, + TextureFormat_R16_UINT, + TextureFormat_R16G16_UINT, + TextureFormat_R16G16B16A16_UINT, + TextureFormat_R32_UINT, + TextureFormat_R32G32_UINT, + TextureFormat_R32G32B32A32_UINT, /* Signed Integer Color Formats */ - R8_INT, - R8G8_INT, - R8G8B8A8_INT, - R16_INT, - R16G16_INT, - R16G16B16A16_INT, - R32_INT, - R32G32_INT, - R32G32B32A32_INT, + TextureFormat_R8_INT, + TextureFormat_R8G8_INT, + TextureFormat_R8G8B8A8_INT, + TextureFormat_R16_INT, + TextureFormat_R16G16_INT, + TextureFormat_R16G16B16A16_INT, + TextureFormat_R32_INT, + TextureFormat_R32G32_INT, + TextureFormat_R32G32B32A32_INT, /* SRGB Unsigned Normalized Color Formats */ - R8G8B8A8_UNORM_SRGB, - B8G8R8A8_UNORM_SRGB, + TextureFormat_R8G8B8A8_UNORM_SRGB, + TextureFormat_B8G8R8A8_UNORM_SRGB, /* Compressed SRGB Unsigned Normalized Color Formats */ - BC1_RGBA_UNORM_SRGB, - BC2_RGBA_UNORM_SRGB, - BC3_RGBA_UNORM_SRGB, - BC7_RGBA_UNORM_SRGB, + TextureFormat_BC1_RGBA_UNORM_SRGB, + TextureFormat_BC2_RGBA_UNORM_SRGB, + TextureFormat_BC3_RGBA_UNORM_SRGB, + TextureFormat_BC7_RGBA_UNORM_SRGB, /* Depth Formats */ - D16_UNORM, - D24_UNORM, - D32_FLOAT, - D24_UNORM_S8_UINT, - D32_FLOAT_S8_UINT, + TextureFormat_D16_UNORM, + TextureFormat_D24_UNORM, + TextureFormat_D32_FLOAT, + TextureFormat_D24_UNORM_S8_UINT, + TextureFormat_D32_FLOAT_S8_UINT, /* Compressed ASTC Normalized Float Color Formats*/ - ASTC_4x4_UNORM, - ASTC_5x4_UNORM, - ASTC_5x5_UNORM, - ASTC_6x5_UNORM, - ASTC_6x6_UNORM, - ASTC_8x5_UNORM, - ASTC_8x6_UNORM, - ASTC_8x8_UNORM, - ASTC_10x5_UNORM, - ASTC_10x6_UNORM, - ASTC_10x8_UNORM, - ASTC_10x10_UNORM, - ASTC_12x10_UNORM, - ASTC_12x12_UNORM, + TextureFormat_ASTC_4x4_UNORM, + TextureFormat_ASTC_5x4_UNORM, + TextureFormat_ASTC_5x5_UNORM, + TextureFormat_ASTC_6x5_UNORM, + TextureFormat_ASTC_6x6_UNORM, + TextureFormat_ASTC_8x5_UNORM, + TextureFormat_ASTC_8x6_UNORM, + TextureFormat_ASTC_8x8_UNORM, + TextureFormat_ASTC_10x5_UNORM, + TextureFormat_ASTC_10x6_UNORM, + TextureFormat_ASTC_10x8_UNORM, + TextureFormat_ASTC_10x10_UNORM, + TextureFormat_ASTC_12x10_UNORM, + TextureFormat_ASTC_12x12_UNORM, /* Compressed SRGB ASTC Normalized Float Color Formats*/ - ASTC_4x4_UNORM_SRGB, - ASTC_5x4_UNORM_SRGB, - ASTC_5x5_UNORM_SRGB, - ASTC_6x5_UNORM_SRGB, - ASTC_6x6_UNORM_SRGB, - ASTC_8x5_UNORM_SRGB, - ASTC_8x6_UNORM_SRGB, - ASTC_8x8_UNORM_SRGB, - ASTC_10x5_UNORM_SRGB, - ASTC_10x6_UNORM_SRGB, - ASTC_10x8_UNORM_SRGB, - ASTC_10x10_UNORM_SRGB, - ASTC_12x10_UNORM_SRGB, - ASTC_12x12_UNORM_SRGB, + TextureFormat_ASTC_4x4_UNORM_SRGB, + TextureFormat_ASTC_5x4_UNORM_SRGB, + TextureFormat_ASTC_5x5_UNORM_SRGB, + TextureFormat_ASTC_6x5_UNORM_SRGB, + TextureFormat_ASTC_6x6_UNORM_SRGB, + TextureFormat_ASTC_8x5_UNORM_SRGB, + TextureFormat_ASTC_8x6_UNORM_SRGB, + TextureFormat_ASTC_8x8_UNORM_SRGB, + TextureFormat_ASTC_10x5_UNORM_SRGB, + TextureFormat_ASTC_10x6_UNORM_SRGB, + TextureFormat_ASTC_10x8_UNORM_SRGB, + TextureFormat_ASTC_10x10_UNORM_SRGB, + TextureFormat_ASTC_12x10_UNORM_SRGB, + TextureFormat_ASTC_12x12_UNORM_SRGB, /* Compressed ASTC Signed Float Color Formats*/ - ASTC_4x4_FLOAT, - ASTC_5x4_FLOAT, - ASTC_5x5_FLOAT, - ASTC_6x5_FLOAT, - ASTC_6x6_FLOAT, - ASTC_8x5_FLOAT, - ASTC_8x6_FLOAT, - ASTC_8x8_FLOAT, - ASTC_10x5_FLOAT, - ASTC_10x6_FLOAT, - ASTC_10x8_FLOAT, - ASTC_10x10_FLOAT, - ASTC_12x10_FLOAT, - ASTC_12x12_FLOAT, + TextureFormat_ASTC_4x4_FLOAT, + TextureFormat_ASTC_5x4_FLOAT, + TextureFormat_ASTC_5x5_FLOAT, + TextureFormat_ASTC_6x5_FLOAT, + TextureFormat_ASTC_6x6_FLOAT, + TextureFormat_ASTC_8x5_FLOAT, + TextureFormat_ASTC_8x6_FLOAT, + TextureFormat_ASTC_8x8_FLOAT, + TextureFormat_ASTC_10x5_FLOAT, + TextureFormat_ASTC_10x6_FLOAT, + TextureFormat_ASTC_10x8_FLOAT, + TextureFormat_ASTC_10x10_FLOAT, + TextureFormat_ASTC_12x10_FLOAT, + TextureFormat_ASTC_12x12_FLOAT, - Count + TextureFormat_Count }; -enum struct TextureUsageFlag : uint8 +typedef uint8 TextureUsageFlag; +enum TextureUsageFlag_Enum { - None = 0, - Sampler = 1 << 0, // Textures supports sampling - ColorTarget = 1 << 1, // Texture is color render target - DepthStencilTarget = 1 << 2, // Texture is depth stencil target - GraphicsStorageRead = 1 << 3, // Support Storage read at graphics stage - ComputeStorageRead = 1 << 4, // Support Storage read at compute stage - ComputeStorageWrite = 1 << 5, // Support Storage Write at compute stage - ComputeStorageSimultaneousReadWrite = - 1 << 6, // Supports reads and writes in the same compute shader. Not equivalent to ComputeStorageRead | ComputeStorageWrite + TextureUsageFlag_None = 0, + TextureUsageFlag_Sampler = 1 << 0, + TextureUsageFlag_ColorTarget = 1 << 1, + TextureUsageFlag_DepthStencilTarget = 1 << 2, + TextureUsageFlag_GraphicsStorageRead = 1 << 3, + TextureUsageFlag_ComputeStorageRead = 1 << 4, + TextureUsageFlag_ComputeStorageWrite = 1 << 5, + TextureUsageFlag_ComputeStorageSimultaneousReadWrite = 1 << 6, }; -enum struct TextureType : uint8 +typedef uint8 TextureType; +enum TextureType_Enum { - Texture_2D, - Texture_2DArray, - Texture_3D, - Texture_3DArray, - Texture_Cube, - Texture_CubeArray, + TextureType_2D, + TextureType_2DArray, + TextureType_3D, + TextureType_3DArray, + TextureType_Cube, + TextureType_CubeArray, }; -enum struct TextureSampleCount : uint8 +typedef uint8 TextureSampleCount; +enum TextureSampleCount_Enum { - One, - Two, - Four, - Eight, + TextureSampleCount_One, + TextureSampleCount_Two, + TextureSampleCount_Four, + TextureSampleCount_Eight, }; // Create Information structs +typedef struct TextureCreateInfo TextureCreateInfo; struct TextureCreateInfo { TextureType Type; @@ -177,4 +183,4 @@ struct TextureCreateInfo }; // Opaque Type -struct Texture; +typedef struct Texture Texture; diff --git a/Juliet/include/Graphics/VertexData.h b/Juliet/include/Graphics/VertexData.h index 64bbcfc..14733b3 100644 --- a/Juliet/include/Graphics/VertexData.h +++ b/Juliet/include/Graphics/VertexData.h @@ -1,5 +1,8 @@ -#pragma once +#pragma once +#include + +typedef struct Vertex Vertex; struct Vertex { float Position[3]; @@ -7,4 +10,4 @@ struct Vertex float Color[4]; }; -using Index = uint16; +typedef uint16 Index; diff --git a/Juliet/include/Juliet.h b/Juliet/include/Juliet.h index 93236b2..474a64c 100644 --- a/Juliet/include/Juliet.h +++ b/Juliet/include/Juliet.h @@ -15,7 +15,7 @@ #define JULIET_API # endif # else -# define JULIET_API (void) // Only Win32 is supported for now +# define JULIET_API # endif #endif diff --git a/Juliet/src/Core/Application/ApplicationManager.cpp b/Juliet/src/Core/Application/ApplicationManager.cpp deleted file mode 100644 index ffbf20f..0000000 --- a/Juliet/src/Core/Application/ApplicationManager.cpp +++ /dev/null @@ -1,17 +0,0 @@ -#include -#include - -#include - -void StartApplication(IApplication& app, JulietInit_Flags flags) -{ - InitializeEngine(flags); - - LoadApplication(app); - - RunEngine(); - - UnloadApplication(); - - ShutdownEngine(); -} diff --git a/Juliet/src/Core/Common/CoreUtils.c b/Juliet/src/Core/Common/CoreUtils.c new file mode 100644 index 0000000..48c6495 --- /dev/null +++ b/Juliet/src/Core/Common/CoreUtils.c @@ -0,0 +1,39 @@ +#include +#include +#include +#include +#include + +#include + +void JulietAssert(const char* expression, const char* message, const char* file, const char* function, uint32 line, + long handle_result) +{ + Log(LogLevel_Error, LogCategory_Core, "--- ASSERTION FAILED ---"); + Log(LogLevel_Error, LogCategory_Core, "Expression: %s", expression); + Log(LogLevel_Error, LogCategory_Core, "Message: %s", message); + Log(LogLevel_Error, LogCategory_Core, "Location: %s(%u): %s", file, line, function); + + if (handle_result < 0) + { + char msg_buf[512] = { 0 }; + FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, (DWORD)handle_result, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), msg_buf, (DWORD)(sizeof(msg_buf) - 1), NULL); + Log(LogLevel_Error, LogCategory_Graphics, "HRESULT: 0x%08X (%s)", (uint32)handle_result, msg_buf); + } + + Log(LogLevel_Error, LogCategory_Core, "-------------------------"); + + JULIET_PLATFORM_BREAK(); +} + +void FreeByteBuffer(ByteBuffer* buffer) +{ + Assert(buffer != NULL); + if (buffer->Data != NULL) + { + FreeMemory(buffer->Data); + } + buffer->Data = NULL; + buffer->Size = 0; +} diff --git a/Juliet/src/Core/Common/CoreUtils.cpp b/Juliet/src/Core/Common/CoreUtils.cpp deleted file mode 100644 index 24ad249..0000000 --- a/Juliet/src/Core/Common/CoreUtils.cpp +++ /dev/null @@ -1,35 +0,0 @@ -#include -#include -#include - -#include // For _com_error to decode HRESULTs -#include // For __debugbreak - -void JulietAssert(const char* expression, const char* message, std::source_location location, long handleResult) -{ - Log(LogLevel::Error, LogCategory::Core, "--- ASSERTION FAILED ---"); - Log(LogLevel::Error, LogCategory::Core, "Expression: %s", expression); - Log(LogLevel::Error, LogCategory::Core, "Message: %s", message); - Log(LogLevel::Error, LogCategory::Core, "Location: %s(%u): %s", location.file_name(), location.line(), - location.function_name()); - - if (handleResult < 0) - { - _com_error err(handleResult); - // Using %ls because ErrorMessage() returns a wide string (wchar_t*) - Log(LogLevel::Error, LogCategory::Graphics, "HRESULT: 0x%08X (%ls)", handleResult, err.ErrorMessage()); - } - - Log(LogLevel::Error, LogCategory::Core, "-------------------------"); - - JULIET_PLATFORM_BREAK(); -} - -void Free(ByteBuffer& buffer) -{ - if (buffer.Data) - { - Free(buffer.Data); - } - buffer = {}; -} diff --git a/Juliet/src/Core/Common/String.c b/Juliet/src/Core/Common/String.c new file mode 100644 index 0000000..8c0d8ec --- /dev/null +++ b/Juliet/src/Core/Common/String.c @@ -0,0 +1,699 @@ +#include +#include +#include +#include +#include +#include + +#define kUnknown_UNICODE 0xFFFD + +typedef struct EncodingEntry EncodingEntry; +struct EncodingEntry +{ + String Name; + StringEncoding Format; +}; + +global const EncodingEntry g_encodings[] = { + { ConstStringInit("ASCII"), StringEncoding_ASCII }, + { ConstStringInit("US-ASCII"), StringEncoding_ASCII }, + { ConstStringInit("8859-1"), StringEncoding_LATIN1 }, + { ConstStringInit("ISO-8859-1"), StringEncoding_LATIN1 }, +#if defined(JULIET_WIN32) + { ConstStringInit("WCHAR_T"), StringEncoding_UTF16 }, +#else + { ConstStringInit("WCHAR_T"), StringEncoding_UCS4 }, +#endif + { ConstStringInit("UTF8"), StringEncoding_UTF8 }, + { ConstStringInit("UTF-8"), StringEncoding_UTF8 }, + { ConstStringInit("UTF16"), StringEncoding_UTF16 }, + { ConstStringInit("UTF-16"), StringEncoding_UTF16 }, + { ConstStringInit("UTF32"), StringEncoding_UTF32 }, + { ConstStringInit("UTF-32"), StringEncoding_UTF32 }, + { ConstStringInit("UCS2"), StringEncoding_UCS2 }, + { ConstStringInit("UCS-2"), StringEncoding_UCS2 }, + { ConstStringInit("UCS-2-INTERNAL"), StringEncoding_UCS2 }, + { ConstStringInit("UCS4"), StringEncoding_UCS4 }, + { ConstStringInit("UCS-4"), StringEncoding_UCS4 }, + { ConstStringInit("UCS-4-INTERNAL"), StringEncoding_UCS4 }, +}; + +internal int8 CaseFoldUnicode(uint32 from, uint32* to) +{ + Assert(to != NULL); + if (from < 128 && (from >= 'A') && (from <= 'Z')) + { + *to = 'a' + (from - 'A'); + } + else + { + *to = from; + } + return 1; +} + +uint32 StepUTF8(String* inStr) +{ + Assert(inStr != NULL); + + uint32 codepoint = 0; + + if (inStr->Size > 0) + { + const uint8* str = (const uint8*)CStr(*inStr); + const uint32 octet = *str; + bool8 isOverlong = false; + bool8 isInvalid = false; + bool8 isUTF16Surrogate = false; + bool8 decoded = false; + + if (octet == 0) + { + codepoint = 0; + decoded = true; + } + else if ((octet & 0x80u) == 0x0u) + { + inStr->Str += 1; + inStr->Size -= 1; + codepoint = octet; + decoded = true; + } + else if ((octet & 0xE0u) == 0xC0u) + { + const uint8 secondByte = str[1]; + if ((secondByte & 0xC0u) == 0x80u) + { + const uint32 result = ((octet & 0x1Fu) << 6) | (secondByte & 0x3Fu); + if (result >= 0x80u) + { + inStr->Str += 2; + inStr->Size -= 1; + codepoint = result; + decoded = true; + } + else + { + isOverlong = true; + } + } + else + { + isInvalid = true; + } + } + else if ((octet & 0xF0u) == 0xE0u) + { + const uint8 secondByte = str[1]; + const uint8 thirdByte = str[2]; + if (((secondByte & 0xC0u) == 0x80u) && ((thirdByte & 0xC0u) == 0x80u)) + { + const uint32 secondOctet = (uint32)(secondByte & 0x3Fu) << 6; + const uint32 thirdOctet = (uint32)(thirdByte & 0x3Fu); + const uint32 result = ((octet & 0x0Fu) << 12) | secondOctet | thirdOctet; + if (result >= 0x0800u) + { + if ((result < 0xD800u) || (result > 0xDFFFu)) + { + inStr->Str += 3; + inStr->Size -= 1; + codepoint = result; + decoded = true; + } + else + { + isUTF16Surrogate = true; + } + } + else + { + isOverlong = true; + } + } + else + { + isInvalid = true; + } + } + else if ((octet & 0xF8u) == 0xF0u) + { + const uint8 secondByte = str[1]; + const uint8 thirdByte = str[2]; + const uint8 fourthByte = str[3]; + if (((secondByte & 0xC0u) == 0x80u) && ((thirdByte & 0xC0u) == 0x80u) && ((fourthByte & 0xC0u) == 0x80u)) + { + const uint32 secondOctet = (uint32)(secondByte & 0x1Fu) << 12; + const uint32 thirdOctet = (uint32)(thirdByte & 0x3Fu) << 6; + const uint32 fourthOctet = (uint32)(fourthByte & 0x3Fu); + const uint32 result = ((octet & 0x07u) << 18) | secondOctet | thirdOctet | fourthOctet; + if (result >= 0x10000u) + { + inStr->Str += 4; + inStr->Size -= 1; + codepoint = result; + decoded = true; + } + else + { + isOverlong = true; + } + } + else + { + isInvalid = true; + } + } + + if (!decoded) + { + LogError(LogCategory_Core, + "StepUTF8: Non supported codepoint. IsOverlong: %s. IsInvalid %s. IsUTF16Surrogate %s", + isOverlong ? "true" : "false", isInvalid ? "true" : "false", isUTF16Surrogate ? "true" : "false"); + inStr->Str += 1; + codepoint = kInvalidUTF8; + } + } + + return codepoint; +} + +String FindString(String haystack, String needle) +{ + String result = { 0 }; + if (!IsValidString(needle)) + { + result = haystack; + } + else + { + for (; IsValidString(haystack); StepUTF8(&haystack)) + { + String tempHaystack = haystack; + String testNeedle = needle; + + while (IsValidString(tempHaystack) && IsValidString(testNeedle)) + { + uint32 codepointHaystack = StepUTF8(&tempHaystack); + uint32 codepointNeedle = StepUTF8(&testNeedle); + if (codepointHaystack != codepointNeedle) + { + break; + } + } + + if (!IsValidString(testNeedle)) + { + result = haystack; + break; + } + } + } + + return result; +} + +int8 StringCompareCaseInsensitive(String str1, String str2) +{ + int8 result = 0; + uint32 left = 0; + uint32 right = 0; + while (true) + { + { + uint32 leftFolded[3]; + int8 num_folded = CaseFoldUnicode(StepUTF8(&str1), leftFolded); + Assert(num_folded == 1); + (void)num_folded; + left = leftFolded[0]; + } + { + uint32 rightFolded[3]; + int8 num_folded = CaseFoldUnicode(StepUTF8(&str2), rightFolded); + Assert(num_folded == 1); + (void)num_folded; + right = rightFolded[0]; + } + if (left < right) + { + result = -1; + break; + } + if (left > right) + { + result = 1; + break; + } + if (left == 0) + { + break; + } + } + return result; +} + +bool8 ConvertString(StringEncoding from, StringEncoding to, String src, StringBuffer* dst, bool8 nullTerminate) +{ + Assert(IsValidString(src)); + Assert(dst != NULL); + + bool8 result = true; + const char* srcStr = src.Str; + char* dstStr = dst->Str; + size_t remainingCapacity = dst->Capacity; + + uint32 character = 0; + while (src.Size > 0 && result) + { + switch (from) + { + case StringEncoding_UTF8: + { + const uint8* p = (const uint8*)srcStr; + size_t left = 0; + bool8 overlong = false; + if (p[0] >= 0xF0u) + { + if ((p[0] & 0xF8u) != 0xF0u) + { + character = kUnknown_UNICODE; + } + else + { + if (p[0] == 0xF0u && src.Size > 1 && (p[1] & 0xF0u) == 0x80u) + { + overlong = true; + } + character = (uint32)(p[0] & 0x07u); + left = 3; + } + } + else if (p[0] >= 0xE0u) + { + if ((p[0] & 0xF0u) != 0xE0u) + { + character = kUnknown_UNICODE; + } + else + { + if (p[0] == 0xE0u && src.Size > 1 && (p[1] & 0xE0u) == 0x80u) + { + overlong = true; + } + character = (uint32)(p[0] & 0x0Fu); + left = 2; + } + } + else if (p[0] >= 0xC0u) + { + if ((p[0] & 0xE0u) != 0xC0u) + { + character = kUnknown_UNICODE; + } + else + { + if ((p[0] & 0xDEu) == 0xC0u) + { + overlong = true; + } + character = (uint32)(p[0] & 0x1Fu); + left = 1; + } + } + else + { + if (p[0] & 0x80u) + { + character = kUnknown_UNICODE; + } + else + { + character = (uint32)(p[0]); + } + } + ++srcStr; + --src.Size; + if (src.Size < left) + { + Log(LogLevel_Error, LogCategory_Core, + "ConvertString: Failed to convert string. Incomplete input sequence"); + result = false; + } + else + { + while (left--) + { + ++p; + if ((p[0] & 0xC0u) != 0x80u) + { + character = kUnknown_UNICODE; + break; + } + character <<= 6; + character |= (p[0] & 0x3Fu); + ++srcStr; + --src.Size; + } + if (overlong) + { + character = kUnknown_UNICODE; + } + if ((character >= 0xD800u && character <= 0xDFFFu) || + (character == 0xFFFEu || character == 0xFFFFu) || character > 0x10FFFFu) + { + character = kUnknown_UNICODE; + } + } + break; + } + case StringEncoding_Unknown: + { + Assert(false, "ConvertString: Invalid Source Format: Unknown"); + result = false; + break; + } + default: + { + Assert(false, "ConvertString: Unsupported Source Format"); + result = false; + break; + } + } + + if (result) + { + switch (to) + { + case StringEncoding_UTF16: + { + uint8* p = (uint8*)dstStr; + if (character > 0x10FFFFu) + { + character = kUnknown_UNICODE; + } + if (character < 0x10000u) + { + if (remainingCapacity < 2) + { + Log(LogLevel_Error, LogCategory_Core, + "ConvertString: Destination buffer too short to fit UTF16"); + result = false; + } + else + { + p[1] = (uint8)(character >> 8); + p[0] = (uint8)(character); + + dstStr += 2; + dst->Size += 1; + remainingCapacity -= 2; + } + } + else + { + if (remainingCapacity < 4) + { + Log(LogLevel_Error, LogCategory_Core, + "ConvertString: Destination buffer too short to fit UTF16"); + result = false; + } + else + { + character = character - 0x10000u; + uint16 word1 = 0xD800u | (uint16)((character >> 10) & 0x3FFu); + uint16 word2 = 0xDC00u | (uint16)(character & 0x3FFu); + p[1] = (uint8)(word1 >> 8); + p[0] = (uint8)(word1); + p[3] = (uint8)(word2 >> 8); + p[2] = (uint8)(word2); + + dstStr += 4; + dst->Size += 1; + remainingCapacity -= 4; + } + } + break; + } + case StringEncoding_Unknown: + { + Assert(false, "ConvertString: Invalid Source Format: Unknown"); + result = false; + break; + } + default: + { + Assert(false, "ConvertString: Unsupported Destination Format"); + result = false; + break; + } + } + } + } + + if (result && nullTerminate) + { + switch (to) + { + case StringEncoding_UTF16: + { + if (remainingCapacity < 2) + { + Log(LogLevel_Error, LogCategory_Core, + "ConvertString: Destination buffer too short to add null terminator into UTF16 buffer"); + result = false; + } + else + { + dstStr[0] = 0; + dstStr[1] = 0; + remainingCapacity -= 2; + } + break; + } + case StringEncoding_Unknown: + { + Assert(false, "ConvertString: Invalid Source Format: Unknown"); + result = false; + break; + } + default: + { + Assert(false, "ConvertString: Unsupported Destination Format"); + result = false; + break; + } + } + } + + return result; +} + +bool8 ConvertStringByName(String from, String to, String src, StringBuffer* dst, bool8 nullTerminate) +{ + Assert(IsValidString(from)); + Assert(IsValidString(to)); + Assert(dst != NULL); + + bool8 result = false; + StringEncoding sourceFormat = StringEncoding_Unknown; + StringEncoding destFormat = StringEncoding_Unknown; + + for (size_t i = 0; i < ArraySize(g_encodings); ++i) + { + if (StringCompareCaseInsensitive(from, g_encodings[i].Name) == 0) + { + sourceFormat = g_encodings[i].Format; + if (destFormat != StringEncoding_Unknown) + { + break; + } + } + if (StringCompareCaseInsensitive(to, g_encodings[i].Name) == 0) + { + destFormat = g_encodings[i].Format; + if (sourceFormat != StringEncoding_Unknown) + { + break; + } + } + } + + if (sourceFormat != StringEncoding_Unknown && destFormat != StringEncoding_Unknown) + { + result = ConvertString(sourceFormat, destFormat, src, dst, nullTerminate); + } + + return result; +} + +global const uint8 g_utf8_class[32] = { + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 3, 3, 4, 5, +}; + +internal UnicodeDecode utf8_decode(uint8* str, size_t max) +{ + UnicodeDecode result = { 1, uint32Max }; + uint8 byte = str[0]; + uint8 byte_class = g_utf8_class[byte >> 3]; + switch (byte_class) + { + case 1: + { + result.Codepoint = byte; + break; + } + case 2: + { + if (1 < max) + { + uint8 next_byte = str[1]; + if (g_utf8_class[next_byte >> 3] == 0) + { + result.Codepoint = (byte & bitmask5) << 6; + result.Codepoint |= (next_byte & bitmask6); + result.Increment = 2; + } + } + break; + } + case 3: + { + if (2 < max) + { + uint8 next_byte[2] = { str[1], str[2] }; + if (g_utf8_class[next_byte[0] >> 3] == 0 && g_utf8_class[next_byte[1] >> 3] == 0) + { + result.Codepoint = (byte & bitmask4) << 12; + result.Codepoint |= ((next_byte[0] & bitmask6) << 6); + result.Codepoint |= (next_byte[1] & bitmask6); + result.Increment = 3; + } + } + break; + } + case 4: + { + if (3 < max) + { + uint8 next_byte[3] = { str[1], str[2], str[3] }; + if (g_utf8_class[next_byte[0] >> 3] == 0 && g_utf8_class[next_byte[1] >> 3] == 0 && + g_utf8_class[next_byte[2] >> 3] == 0) + { + result.Codepoint = (byte & bitmask3) << 18; + result.Codepoint |= ((next_byte[0] & bitmask6) << 12); + result.Codepoint |= ((next_byte[1] & bitmask6) << 6); + result.Codepoint |= (next_byte[2] & bitmask6); + result.Increment = 4; + } + } + break; + } + default: break; + } + return result; +} + +internal uint32 utf16_encode(uint16* str, uint32 codepoint) +{ + Assert(str != NULL); + uint32 increment = 1; + if (codepoint == uint32Max) + { + str[0] = '?'; + } + else if (codepoint < 0x10000u) + { + str[0] = (uint16)codepoint; + } + else + { + uint32 var = codepoint - 0x10000u; + str[0] = safe_cast_uint16(0xD800u + (var >> 10)); + str[1] = safe_cast_uint16(0xDC00u + (var & bitmask10)); + increment = 2; + } + return increment; +} + +String StringCopy(Arena* arena, String str) +{ + Assert(arena != NULL); + String result = { 0 }; + result.Size = str.Size; + result.Str = (char*)ArenaPush(arena, str.Size + 1, AlignOf(char), true JULIET_DEBUG_PARAM("String")); + if (str.Size > 0 && str.Str != NULL) + { + MemCopy(result.Str, str.Str, str.Size); + } + result.Str[result.Size] = '\0'; + return result; +} + +String16 str16_from_8(Arena* arena, String8 in) +{ + Assert(arena != NULL); + String16 result = { 0 }; + if (in.Size > 0) + { + size_t neededCapacity = in.Size * 2; + uint16* str = ArenaPushArrayNoZero(arena, uint16, neededCapacity + 1); + uint8* inStr = (uint8*)in.Str; + uint8* inStrEnd = inStr + in.Size; + + UnicodeDecode consumed = { 0 }; + uint64 size = 0; + for (; inStr < inStrEnd; inStr += consumed.Increment) + { + consumed = utf8_decode(inStr, (size_t)(inStrEnd - inStr)); + size += utf16_encode(str + size, consumed.Codepoint); + } + str[size] = 0; + ArenaPop(arena, (neededCapacity - size) * 2); + result.Str = str; + result.Size = size; + } + return result; +} + +String trim_whitespace(String str) +{ + while (str.Size > 0 && (*str.Str == ' ' || *str.Str == '\t' || *str.Str == '\r' || *str.Str == '\n')) + { + str.Str++; + str.Size--; + } + while (str.Size > 0 && (str.Str[str.Size - 1] == ' ' || str.Str[str.Size - 1] == '\t' || + str.Str[str.Size - 1] == '\r' || str.Str[str.Size - 1] == '\n')) + { + str.Size--; + } + return str; +} + +String StringFormatV(Arena* arena, const char* formatStr, va_list args) +{ + Assert(arena != NULL); + Assert(formatStr != NULL); + + va_list args_copy; + va_copy(args_copy, args); + int needed = vsnprintf(NULL, 0, formatStr, args_copy); + va_end(args_copy); + + String result = { 0 }; + if (needed >= 0) + { + result.Size = (size_t)needed; + result.Str = (char*)ArenaPush(arena, result.Size + 1, AlignOf(char), true JULIET_DEBUG_PARAM("StringFormat")); + vsnprintf(result.Str, result.Size + 1, formatStr, args); + } + return result; +} + +String StringFormat(Arena* arena, const char* formatStr, ...) +{ + va_list args; + va_start(args, formatStr); + String result = StringFormatV(arena, formatStr, args); + va_end(args); + return result; +} diff --git a/Juliet/src/Core/Common/String.cpp b/Juliet/src/Core/Common/String.cpp deleted file mode 100644 index 88ba0b2..0000000 --- a/Juliet/src/Core/Common/String.cpp +++ /dev/null @@ -1,641 +0,0 @@ -#include -#include -#include -#include -#include -#include - -namespace -{ - constexpr int32 kUnknown_UNICODE = 0xFFFD; - - struct - { - String Name; - StringEncoding Format; - } Encodings[] = { - /* *INDENT-OFF* */ // clang-format off - { ConstString("ASCII"), StringEncoding::ASCII }, - { ConstString("US-ASCII"), StringEncoding::ASCII }, - { ConstString("8859-1"), StringEncoding::LATIN1 }, - { ConstString("ISO-8859-1"), StringEncoding::LATIN1 }, - #if defined(JULIET_WIN32) - { ConstString("WCHAR_T"), StringEncoding::UTF16 }, - #else - { ConstString("WCHAR_T"), StringEncoding::UCS4 }, - #endif - { ConstString("UTF8"), StringEncoding::UTF8 }, - { ConstString("UTF-8"), StringEncoding::UTF8 }, - { ConstString("UTF16"), StringEncoding::UTF16 }, - { ConstString("UTF-16"), StringEncoding::UTF16 }, - { ConstString("UTF32"), StringEncoding::UTF32 }, - { ConstString("UTF-32"), StringEncoding::UTF32 }, - { ConstString("UCS2"), StringEncoding::UCS2 }, - { ConstString("UCS-2"), StringEncoding::UCS2 }, - { ConstString("UCS-2-INTERNAL"), StringEncoding::UCS2 }, - { ConstString("UCS4"), StringEncoding::UCS4 }, - { ConstString("UCS-4"), StringEncoding::UCS4 }, - { ConstString("UCS-4-INTERNAL"), StringEncoding::UCS4 }, - /* *INDENT-ON* */ // clang-format on - }; - - // Returns the number of codepoint case folded (lowercase equivalent in the language) - // Takes an UTF-8 codepoint (uint32) and codefold it to up to 3 uint32 - // TODO Supports more than low ASCI :) - int8 CaseFoldUnicode(uint32 from, uint32* to) - { - if (from < 128) - { - // low-ASCII, easy! - if ((from >= 'A') && (from <= 'Z')) - { - *to = 'a' + (from - 'A'); - return 1; - } - } - *to = from; - return 1; - } -} // namespace - -// TODO: remove this as we convert to simple unicode decode / encode at the bottom -uint32 StepUTF8(String& inStr) -{ - // From rfc3629, the UTF-8 spec: - // https://www.ietf.org/rfc/rfc3629.txt - // - // Char. number range | UTF-8 octet sequence - // (hexadecimal) | (binary) - // --------------------+--------------------------------------------- - // 0000 0000-0000 007F | 0xxxxxxx - // 0000 0080-0000 07FF | 110xxxxx 10xxxxxx - // 0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx - // 0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx - // - // The function checks character validity and overlong (using too many bytes to encode the character) and return invalid utf8 char if detected. - - // If string is empty then it's done. - if (inStr.Size == 0) - { - return 0; - } - - auto str = reinterpret_cast(CStr(inStr)); - const uint32 octet = *str; - bool isOverlong = false; - bool isInvalid = false; - bool isUTF16Surrogate = false; - if (octet == 0) - { - return 0; - } - if ((octet & 0x80) == 0x0) // One byte code point: 0xxxxxxx - { - inStr.Str += 1; - inStr.Size -= 1; - return octet; - } - else if ((octet & 0xE0) == 0xC0) // Two bytes code point: 110xxxxx 10xxxxxx - { - const uint8 secondByte = str[1]; - if ((secondByte & 0xC0) == 0x80) // Make sure the trailing byte is correct - { - const uint32 result = ((octet & 0x1F) << 6) | (secondByte & 0x3F); - if (result >= 0x80) // If the result is smaller than 0x80 its an overlong! - { - inStr.Str += 2; - inStr.Size -= 1; - return result; - } - else - { - isOverlong = true; - } - } - else - { - isInvalid = true; - } - } - else if (((octet & 0xF0) == 0xE0)) // Three bytes code point: 1110xxxx 10xxxxxx 10xxxxxx - { - const uint8 secondByte = str[1]; - const uint8 thirdByte = str[2]; - if (((secondByte & 0xC0) == 0x80) && ((thirdByte & 0xC0) == 0x80)) // Make sure the trailing bytes are correct - { - const uint32 secondOctet = static_cast(secondByte & 0x3F) << 6; - const uint32 thirdOctet = static_cast(thirdByte & 0x3F); - const uint32 result = ((octet & 0x0F) << 12) | secondOctet | thirdOctet; - if (result >= 0x0800) // if the result is smaller its an overlong. - { - if ((result < 0xD800) || (result > 0xDFFF)) // If out of range its an UTF-16 surrogate - { - inStr.Str += 3; - inStr.Size -= 1; - return result; - } - else - { - isUTF16Surrogate = true; - } - } - else - { - isOverlong = true; - } - } - else - { - isInvalid = true; - } - } - else if (((octet & 0xF8) == 0xF0)) - { // Four bytes code point: 11110xxxx 10xxxxxx 10xxxxxx 10xxxxxx - const uint8 secondByte = str[1]; - const uint8 thirdByte = str[2]; - const uint8 fourthByte = str[3]; - if (((secondByte & 0xC0) == 0x80) && ((thirdByte & 0xC0) == 0x80) && - ((fourthByte & 0xC0) == 0x80)) // // Make sure the trailing bytes are correct - { - const uint32 secondOctet = static_cast(secondByte & 0x1F) << 12; - const uint32 thirdOctet = static_cast(thirdByte & 0x3F) << 6; - const uint32 fourthOctet = static_cast(fourthByte & 0x3F); - const uint32 result = ((octet & 0x07) << 18) | secondOctet | thirdOctet | fourthOctet; - if (result >= 0x10000) // If smaller its an overlong - { - inStr.Str += 4; - inStr.Size -= 1; - return result; - } - else - { - isOverlong = true; - } - } - else - { - isInvalid = true; - } - } - LogError(LogCategory::Core, "StepUTF8: Non supported codepoint. IsOverlong: %s. IsInvalid %s. IsUTF16Surrogate %s", - isOverlong ? "true" : "false", isInvalid ? "true" : "false", isUTF16Surrogate ? "true" : "false"); - inStr.Str += 1; - return kInvalidUTF8; -} - -String FindString(String haystack, String needle) -{ - if (!IsValid(needle)) - { - return haystack; - } - - for (; IsValid(haystack); StepUTF8(haystack)) - { - String tempHaystack = haystack; - String testNeedle = needle; - - while (IsValid(tempHaystack) && IsValid(testNeedle)) - { - uint32 codepointHaystack = StepUTF8(tempHaystack); - uint32 codepointNeedle = StepUTF8(testNeedle); - if (codepointHaystack != codepointNeedle) - { - break; - } - } - - if (!IsValid(testNeedle)) - { - return haystack; - } - } - - return {}; -} - -int8 StringCompareCaseInsensitive(String str1, String str2) -{ - // TODO: Support UTF8. For now ASCII only. - uint32 left = 0; - uint32 right = 0; - while (true) - { - { - uint32 leftFolded[3]; - [[maybe_unused]] int8 num_folded = CaseFoldUnicode(StepUTF8(str1), leftFolded); - Assert(num_folded == 1); // Only one uint32 codepoint supported for now (low ascii) - left = leftFolded[0]; - } - { - uint32 rightFolded[3]; - [[maybe_unused]] int8 num_folded = CaseFoldUnicode(StepUTF8(str2), rightFolded); - Assert(num_folded == 1); // Only one uint32 codepoint supported for now (low ascii) - right = rightFolded[0]; - } - if (left < right) - { - return -1; - } - if (left > right) - { - return 1; - } - if (left == 0) - { - break; - } - } - return 0; -} - -bool ConvertString(StringEncoding from, StringEncoding to, String src, StringBuffer& dst, bool nullTerminate) -{ - Assert(IsValid(src)); - - const char* srcStr = src.Str; - char* dstStr = dst.Str; - size_t remainingCapacity = dst.Capacity; - - uint32 character = 0; - while (src.Size > 0) - { - // Decode in character - switch (from) - { - case StringEncoding::UTF8: // Uses RFC 3629 - { - auto p = reinterpret_cast(srcStr); - size_t left = 0; - bool overlong = false; - if (p[0] >= 0xF0) - { - if ((p[0] & 0xF8) != 0xF0) - { - character = kUnknown_UNICODE; - } - else - { - if (p[0] == 0xF0 && src.Size > 1 && (p[1] & 0xF0) == 0x80) - { - overlong = true; - } - character = static_cast(p[0] & 0x07); - left = 3; - } - } - else if (p[0] >= 0xE0) - { - if ((p[0] & 0xF0) != 0xE0) - { - character = kUnknown_UNICODE; - } - else - { - if (p[0] == 0xE0 && src.Size > 1 && (p[1] & 0xE0) == 0x80) - { - overlong = true; - } - character = static_cast(p[0] & 0x0F); - left = 2; - } - } - else if (p[0] >= 0xC0) - { - if ((p[0] & 0xE0) != 0xC0) - { - character = kUnknown_UNICODE; - } - else - { - if ((p[0] & 0xDE) == 0xC0) - { - overlong = true; - } - character = static_cast(p[0] & 0x1F); - left = 1; - } - } - else - { - if (p[0] & 0x80) - { - character = kUnknown_UNICODE; - } - else - { - character = static_cast(p[0]); - } - } - ++srcStr; - --src.Size; - if (src.Size < left) - { - Log(LogLevel::Error, LogCategory::Core, "ConvertString: Failed to convert string. Incomplete input sequence"); - return false; - } - while (left--) - { - ++p; - if ((p[0] & 0xC0) != 0x80) - { - character = kUnknown_UNICODE; - break; - } - character <<= 6; - character |= (p[0] & 0x3F); - ++srcStr; - --src.Size; - } - if (overlong) - { - character = kUnknown_UNICODE; - } - if ((character >= 0xD800 && character <= 0xDFFF) || (character == 0xFFFE || character == 0xFFFF) || character > 0x10FFFF) - { - character = kUnknown_UNICODE; - } - break; - } - case StringEncoding::Unknown: Assert(false, "ConvertString: Invalid Source Format: Unknown"); break; - case StringEncoding::ASCII: - case StringEncoding::LATIN1: - case StringEncoding::UTF16: - case StringEncoding::UTF32: - case StringEncoding::UCS2: - case StringEncoding::UCS4: Assert(false, "ConvertString: Unsupported Source Format"); break; - } - - // Encode out character - switch (to) - { - case StringEncoding::UTF16: // RFC 2781 - { - auto p = reinterpret_cast(dstStr); - if (character > 0x10FFFF) - { - character = kUnknown_UNICODE; - } - if (character < 0x10000) - { - if (remainingCapacity < 2) - { - Log(LogLevel::Error, LogCategory::Core, "ConvertString: Destination buffer too short to fit UTF16"); - return false; - } - p[1] = static_cast(character >> 8); - p[0] = static_cast(character); - - dstStr += 2; - dst.Size += 1; - remainingCapacity -= 2; - } - else - { - if (remainingCapacity < 4) - { - Log(LogLevel::Error, LogCategory::Core, "ConvertString: Destination buffer too short to fit UTF16"); - return false; - } - character = character - 0x10000; - uint16 word1 = 0xD800U | static_cast((character >> 10) & 0x3FF); - uint16 word2 = 0xDC00U | static_cast(character & 0x3FF); - p[1] = static_cast(word1 >> 8); - p[0] = static_cast(word1); - p[3] = static_cast(word2 >> 8); - p[2] = static_cast(word2); - - dstStr += 4; - dst.Size += 1; - remainingCapacity -= 4; - } - break; - } - case StringEncoding::Unknown: Assert(false, "ConvertString: Invalid Source Format: Unknown"); break; - case StringEncoding::ASCII: - case StringEncoding::LATIN1: - case StringEncoding::UTF8: - case StringEncoding::UTF32: - case StringEncoding::UCS2: - case StringEncoding::UCS4: Assert(false, "ConvertString: Unsupported Destination Format"); break; - } - } - - if (nullTerminate) - { - switch (to) - { - case StringEncoding::UTF16: - { - if (remainingCapacity < 2) - { - Log(LogLevel::Error, LogCategory::Core, - "ConvertString: Destination buffer too short to add null terminator into UTF16 buffer"); - return false; - } - dstStr[0] = 0; - dstStr[1] = 0; - remainingCapacity -= 2; - break; - } - case StringEncoding::Unknown: Assert(false, "ConvertString: Invalid Source Format: Unknown"); break; - case StringEncoding::ASCII: - case StringEncoding::LATIN1: - case StringEncoding::UTF8: - case StringEncoding::UTF32: - case StringEncoding::UCS2: - case StringEncoding::UCS4: Assert(false, "ConvertString: Unsupported Destination Format"); break; - } - } - - return true; -} - -bool ConvertString(String from, String to, String src, StringBuffer& dst, bool nullTerminate) -{ - Assert(IsValid(from)); - Assert(IsValid(to)); - - // First find the encoding of the strings - auto sourceFormat = StringEncoding::Unknown; - auto destFormat = StringEncoding::Unknown; - for (auto& encoding : Encodings) - { - if (StringCompareCaseInsensitive(from, encoding.Name) == 0) - { - sourceFormat = encoding.Format; - if (destFormat != StringEncoding::Unknown) - { - break; - } - } - if (StringCompareCaseInsensitive(to, encoding.Name) == 0) - { - destFormat = encoding.Format; - if (sourceFormat != StringEncoding::Unknown) - { - break; - } - } - } - - if (sourceFormat == StringEncoding::Unknown || destFormat == StringEncoding::Unknown) - { - return false; - } - - return ConvertString(sourceFormat, destFormat, src, dst, nullTerminate); -} - -namespace -{ - uint8 utf8_class[32] = { - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 3, 3, 4, 5, - }; - - UnicodeDecode utf8_decode(uint8* str, size_t max) - { - // From rfc3629, the UTF-8 spec: - // https://www.ietf.org/rfc/rfc3629.txt - // - // Char. number range | UTF-8 octet sequence - // (hexadecimal) | (binary) - // --------------------+--------------------------------------------- - // 0000 0000-0000 007F | 0xxxxxxx - // 0000 0080-0000 07FF | 110xxxxx 10xxxxxx - // 0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx - // 0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx - UnicodeDecode result = { 1, uint32Max }; - uint8 byte = str[0]; - uint8 byte_class = utf8_class[byte >> 3]; - switch (byte_class) - { - case 1: - { - result.Codepoint = byte; - break; - } - case 2: - { - if (1 < max) - { - uint8 next_byte = str[1]; - if (utf8_class[next_byte >> 3] == 0) - { - result.Codepoint = (byte & bitmask5) << 6; - result.Codepoint |= (next_byte & bitmask6); - result.Increment = 2; - } - } - break; - } - case 3: - { - if (2 < max) - { - uint8 next_byte[2] = { str[1], str[2] }; - if (utf8_class[next_byte[0] >> 3] == 0 && utf8_class[next_byte[1] >> 3] == 0) - { - result.Codepoint = (byte & bitmask4) << 12; - result.Codepoint |= ((next_byte[0] & bitmask6) << 6); - result.Codepoint |= (next_byte[1] & bitmask6); - result.Increment = 3; - } - } - break; - } - case 4: - { - if (3 < max) - { - uint8 next_byte[3] = { str[1], str[2], str[3] }; - if (utf8_class[next_byte[0] >> 3] == 0 && utf8_class[next_byte[1] >> 3] == 0 && - utf8_class[next_byte[2] >> 3] == 0) - { - result.Codepoint = (byte & bitmask3) << 18; - result.Codepoint |= ((next_byte[0] & bitmask6) << 12); - result.Codepoint |= ((next_byte[1] & bitmask6) << 6); - result.Codepoint |= (next_byte[2] & bitmask6); - result.Increment = 4; - } - } - break; - } - } - return result; - } - - uint32 utf16_encode(uint16* str, uint32 codepoint) - { - Assert(str); - uint32 increment = 1; - if (codepoint == uint32Max) - { - str[0] = '?'; - } - else if (codepoint < 0x10000) - { - str[0] = (uint16)codepoint; - } - else - { - uint32 var = codepoint - 0x10000; - str[0] = safe_cast_uint16(0xD800 + (var >> 10)); - str[1] = safe_cast_uint16(0xDC00 + (var & bitmask10)); - increment = 2; - } - return increment; - } -} // namespace - -String StringCopy(NonNullPtr arena, String str) -{ - String result; - result.Size = str.Size; - result.Str = static_cast(ArenaPush(arena, str.Size + 1, alignof(char), true JULIET_DEBUG_PARAM("String"))); - MemCopy(result.Str, str.Str, str.Size); - result.Str[result.Size] = 0; - return result; -} - -String16 str16_from_8(NonNullPtr arena, String8 in) -{ - String16 result = {}; - if (in.Size > 0) - { - size_t neededCapacity = in.Size * 2; - uint16* str = ArenaPushArray(arena, neededCapacity + 1); - uint8* inStr = (uint8*)in.Str; - uint8* inStrEnd = inStr + in.Size; - - UnicodeDecode consumed; - uint64 size = 0; - for (; inStr < inStrEnd; inStr += consumed.Increment) - { - consumed = utf8_decode(inStr, inStrEnd - inStr); - size += utf16_encode(str + size, consumed.Codepoint); - } - str[size] = 0; - ArenaPop(arena, (neededCapacity - size) * 2); - result = { str, size }; - } - return result; -} - -String trim_whitespace(String str) -{ - // Handles windos and unix kind of whitespaces - // Remove any whitespace at the begin of the string - while (str.Size > 0 && (*str.Str == ' ' || *str.Str == '\t' || *str.Str == '\r' || *str.Str == '\n')) - { - str.Str++; - str.Size--; - } - // Remove any whitespace at the end of the string. - while (str.Size > 0 && (str.Str[str.Size - 1] == ' ' || str.Str[str.Size - 1] == '\t' || - str.Str[str.Size - 1] == '\r' || str.Str[str.Size - 1] == '\n')) - { - str.Size--; - } - return str; -} diff --git a/Juliet/src/Core/Common/serialization.c b/Juliet/src/Core/Common/serialization.c new file mode 100644 index 0000000..7d151b0 --- /dev/null +++ b/Juliet/src/Core/Common/serialization.c @@ -0,0 +1,494 @@ +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +void serialize_bytes(Archive* ar, void* data, size_t size) +{ + Assert(ar != NULL); + Assert(data != NULL); + if (ar->loading) + { + uint8* ptr = (uint8*)ar->base_ptr + ar->offset; + MemCopy(data, ptr, size); + ar->offset += size; + } + else + { + void* ptr = ArenaPushSize(ar->arena, size, 8, false JULIET_DEBUG_PARAM("serialized save field")); + MemCopy(ptr, data, size); + ar->offset += size; + } +} + +ParsedArchive tokenize_archive(Arena* arena, ByteBuffer file_buffer) +{ + Assert(arena != NULL); + Assert(file_buffer.Data != NULL); + + ParsedArchive archive = { 0 }; + + uint8* cursor = (uint8*)file_buffer.Data; + uint8* end = cursor + file_buffer.Size; + + // Pass 1: count properties + uint32 property_count = 0; + uint8* scan = cursor; + while (scan < end) + { + if (*scan == ';') + { + if (scan == cursor || *(scan - 1) == '\n') + { + property_count++; + } + } + scan++; + } + + if (property_count > 0) + { + // Pass 2: extract properties + ArchivePropertyNode* nodes = + ArenaPushArrayTag(arena, ArchivePropertyNode, property_count, "tokenizer nodes"); + + uint32 node_index = 0; + scan = cursor; + + while (scan < end && node_index < property_count) + { + // Skip comments + if (*scan == '#' || (*scan == '/' && scan + 1 < end && *(scan + 1) == '/')) + { + while (scan < end && *scan != '\n') + { + ++scan; + } + ++scan; + } + else if (*scan == ';') + { + ++scan; + + uint8* property_name_cursor = scan; + while (scan < end && *scan != '\r' && *scan != '\n') + { + ++scan; + } + + String raw_property_name = { .Str = (char*)property_name_cursor, .Size = (size_t)(scan - property_name_cursor) }; + String property_name = trim_whitespace(raw_property_name); + + Assert(property_name.Str != NULL && property_name.Size > 0); + + while (scan < end && (*scan == '\r' || *scan == '\n')) + { + ++scan; + } + + uint8* value_start = scan; + uint8* value_end = scan; + + while (scan < end) + { + if (*scan == '\r' || *scan == '\n') + { + break; + } + + if (*scan == '#' || (*scan == '/' && scan + 1 < end && *(scan + 1) == '/')) + { + break; + } + + ++scan; + value_end = scan; + } + + String raw_value = { .Str = (char*)value_start, .Size = (size_t)(value_end - value_start) }; + String value = trim_whitespace(raw_value); + + nodes[node_index].key_crc = crc32_str(property_name); + nodes[node_index].key = StringCopy(arena, property_name); + nodes[node_index].value = value; + nodes[node_index].consumed = false; + node_index++; + } + else + { + ++scan; + } + } + + archive.nodes = nodes; + archive.property_count = node_index; + } + + return archive; +} + +ArchivePropertyNode* find_property(ParsedArchive* archive, uint32 property_crc) +{ + Assert(archive != NULL); + Assert(archive->nodes != NULL && archive->property_count > 0); + + ArchivePropertyNode* result = NULL; + ArchivePropertyNode* nodes = archive->nodes; + for (index_t idx = 0; idx < archive->property_count; ++idx) + { + if (nodes[idx].key_crc == property_crc) + { + nodes[idx].consumed = true; + result = &nodes[idx]; + break; + } + } + + return result; +} + +void write_property_header(Archive* ar, String property_name) +{ + Assert(ar != NULL); + Assert(!ar->loading); + Assert(ar->stream != NULL); + Assert(IsValidString(property_name)); + IOPrintf(ar->stream, "; %s\n", CStr(property_name)); +} + +bool8 read_prop_str(Archive* ar, String value_raw, String* value) +{ + Assert(ar != NULL); + Assert(value != NULL); + String parsed = value_raw; + + if (parsed.Size >= 2 && parsed.Str[0] == '"' && parsed.Str[parsed.Size - 1] == '"') + { + parsed.Str++; + parsed.Size -= 2; + } + + Assert(ar->arena != NULL); + *value = StringCopy(ar->arena, parsed); + return true; +} + +void write_str(IOStream* stream, String value) +{ + Assert(stream != NULL); + if (ContainsChar(value, ' ')) + { + IOPrintf(stream, "\"%.*s\"\n", (int32)value.Size, value.Str); + } + else + { + IOPrintf(stream, "%.*s\n", (int32)value.Size, value.Str); + } +} + +bool8 read_f32(const char* buffer, float* value, const char** next) +{ + Assert(buffer != NULL); + Assert(value != NULL); + bool8 result = false; + char* end = NULL; + float parsed = strtof(buffer, &end); + if (end != buffer) + { + *value = parsed; + if (next != NULL) + { + *next = end; + } + result = true; + } + return result; +} + +void write_f32(IOStream* stream, float value) +{ + Assert(stream != NULL); + IOPrintf(stream, "%.9g\n", (double)value); +} + +bool8 read_i8(const char* buffer, int8* value) +{ + Assert(buffer != NULL); + Assert(value != NULL); + bool8 result = false; + char* end = NULL; + long parsed = strtol(buffer, &end, 10); + if (end != buffer && parsed >= int8Min && parsed <= int8Max) + { + *value = (int8)parsed; + result = true; + } + return result; +} + +void write_i8(IOStream* stream, int8 value) +{ + Assert(stream != NULL); + IOPrintf(stream, "%d\n", (int32)value); +} + +bool8 read_i16(const char* buffer, int16* value) +{ + Assert(buffer != NULL); + Assert(value != NULL); + bool8 result = false; + char* end = NULL; + long parsed = strtol(buffer, &end, 10); + if (end != buffer && parsed >= int16Min && parsed <= int16Max) + { + *value = (int16)parsed; + result = true; + } + return result; +} + +void write_i16(IOStream* stream, int16 value) +{ + Assert(stream != NULL); + IOPrintf(stream, "%d\n", (int32)value); +} + +bool8 read_i32(const char* buffer, int32* value) +{ + Assert(buffer != NULL); + Assert(value != NULL); + char* end = NULL; + *value = (int32)strtol(buffer, &end, 10); + return end != buffer; +} + +void write_i32(IOStream* stream, int32 value) +{ + Assert(stream != NULL); + IOPrintf(stream, "%d\n", value); +} + +bool8 read_i64(const char* buffer, int64* value) +{ + Assert(buffer != NULL); + Assert(value != NULL); + char* end = NULL; + *value = strtoll(buffer, &end, 0); + return end != buffer; +} + +void write_i64(IOStream* stream, int64 value) +{ + Assert(stream != NULL); + IOPrintf(stream, "%lld\n", value); +} + +bool8 read_u8(const char* buffer, uint8* value) +{ + Assert(buffer != NULL); + Assert(value != NULL); + bool8 result = false; + char* end = NULL; + unsigned long parsed = strtoul(buffer, &end, 10); + if (end != buffer && parsed <= uint8Max) + { + *value = (uint8)parsed; + result = true; + } + return result; +} + +void write_u8(IOStream* stream, uint8 value) +{ + Assert(stream != NULL); + IOPrintf(stream, "%u\n", (uint32)value); +} + +bool8 read_u16(const char* buffer, uint16* value) +{ + Assert(buffer != NULL); + Assert(value != NULL); + bool8 result = false; + char* end = NULL; + unsigned long parsed = strtoul(buffer, &end, 10); + if (end != buffer && parsed <= uint16Max) + { + *value = (uint16)parsed; + result = true; + } + return result; +} + +void write_u16(IOStream* stream, uint16 value) +{ + Assert(stream != NULL); + IOPrintf(stream, "%u\n", (uint32)value); +} + +bool8 read_u32(const char* buffer, uint32* value) +{ + Assert(buffer != NULL); + Assert(value != NULL); + char* end = NULL; + *value = (uint32)strtoul(buffer, &end, 10); + return end != buffer; +} + +void write_u32(IOStream* stream, uint32 value) +{ + Assert(stream != NULL); + IOPrintf(stream, "%u\n", value); +} + +bool8 read_u64(const char* buffer, uint64* value) +{ + Assert(buffer != NULL); + Assert(value != NULL); + char* end = NULL; + *value = strtoull(buffer, &end, 10); + return end != buffer; +} + +void write_u64(IOStream* stream, uint64 value) +{ + Assert(stream != NULL); + IOPrintf(stream, "%llu\n", value); +} + +bool8 read_b8(const char* buffer, bool8* value) +{ + Assert(buffer != NULL); + Assert(value != NULL); + bool8 result = false; + *value = (buffer[0] == '1') ? true : false; + if (*value || buffer[0] == '0') + { + result = true; + } + return result; +} + +void write_b8(IOStream* stream, bool8 value) +{ + Assert(stream != NULL); + IOPrintf(stream, "%u\n", (uint32)(value ? 1 : 0)); +} + +bool8 read_vec4(const char* buffer, Vector4* value) +{ + Assert(buffer != NULL); + Assert(value != NULL); + bool8 result = read_f32(buffer, &value->x, &buffer); + result &= read_f32(buffer, &value->y, &buffer); + result &= read_f32(buffer, &value->z, &buffer); + result &= read_f32(buffer, &value->w, &buffer); + return result; +} + +void write_vec4(IOStream* stream, Vector4 value) +{ + Assert(stream != NULL); + IOPrintf(stream, "%.9g %.9g %.9g %.9g\n", (double)value.x, (double)value.y, (double)value.z, (double)value.w); +} + +internal void CopyRawToNullTermBuffer(String value_raw, char* buffer, size_t buffer_cap) +{ + size_t cpy_size = Min(value_raw.Size, buffer_cap - 1); + if (cpy_size > 0 && value_raw.Str != NULL) + { + MemCopy(buffer, value_raw.Str, cpy_size); + } + buffer[cpy_size] = '\0'; +} + +bool8 serialize_str(Archive* ar, String property_name, String* value) +{ + Assert(ar != NULL); + Assert(IsValidString(property_name)); + Assert(value != NULL); + + bool8 result = false; + if (ar->loading) + { + ArchivePropertyNode* prop = find_property(&ar->base, crc32_str(property_name)); + if (prop != NULL) + { + result = read_prop_str(ar, prop->value, value); + } + } + else + { + write_property_header(ar, property_name); + write_str(ar->stream, *value); + result = true; + } + return result; +} + +#define DEFINE_SERIALIZE_PRIM(suffix, Type, read_fn, write_fn) \ + bool8 serialize_##suffix(Archive* ar, String property_name, Type* value) \ + { \ + Assert(ar != NULL); \ + Assert(IsValidString(property_name)); \ + Assert(value != NULL); \ + bool8 result = false; \ + if (ar->loading) \ + { \ + ArchivePropertyNode* prop = find_property(&ar->base, crc32_str(property_name)); \ + if (prop != NULL) \ + { \ + char buffer[64]; \ + CopyRawToNullTermBuffer(prop->value, buffer, sizeof(buffer)); \ + result = read_fn(buffer, value); \ + } \ + } \ + else \ + { \ + write_property_header(ar, property_name); \ + write_fn(ar->stream, *value); \ + result = true; \ + } \ + return result; \ + } + +internal bool8 read_f32_no_end(const char* buffer, float* value) +{ + return read_f32(buffer, value, NULL); +} + +DEFINE_SERIALIZE_PRIM(f32, float, read_f32_no_end, write_f32) +DEFINE_SERIALIZE_PRIM(i8, int8, read_i8, write_i8) +DEFINE_SERIALIZE_PRIM(i16, int16, read_i16, write_i16) +DEFINE_SERIALIZE_PRIM(i32, int32, read_i32, write_i32) +DEFINE_SERIALIZE_PRIM(i64, int64, read_i64, write_i64) +DEFINE_SERIALIZE_PRIM(u8, uint8, read_u8, write_u8) +DEFINE_SERIALIZE_PRIM(u16, uint16, read_u16, write_u16) +DEFINE_SERIALIZE_PRIM(u32, uint32, read_u32, write_u32) +DEFINE_SERIALIZE_PRIM(u64, uint64, read_u64, write_u64) +DEFINE_SERIALIZE_PRIM(b8, bool8, read_b8, write_b8) +DEFINE_SERIALIZE_PRIM(vec4, Vector4, read_vec4, write_vec4) + +#if JULIET_DEBUG +void audit_unconsumed_properties(ParsedArchive* archive, String context_name) +{ + Assert(archive != NULL); + Assert(archive->nodes != NULL && archive->property_count > 0); + ArchivePropertyNode* nodes = archive->nodes; + for (index_t idx = 0; idx < archive->property_count; ++idx) + { + if (!nodes[idx].consumed) + { + LogWarning(LogCategory_Core, + "[%s] Unconsumed or obsolete property detected: [%s] - CRC 0x%08X (Value: '%.*s')", + CStr(context_name), CStr(nodes[idx].key), nodes[idx].key_crc, (int)nodes[idx].value.Size, + nodes[idx].value.Str); + } + } +} +#endif diff --git a/Juliet/src/Core/Common/serialization.cpp b/Juliet/src/Core/Common/serialization.cpp deleted file mode 100644 index 55cd36b..0000000 --- a/Juliet/src/Core/Common/serialization.cpp +++ /dev/null @@ -1,382 +0,0 @@ -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -void serialize(Archive& ar, void* data, size_t size) -{ - if (ar.loading) - { - uint8* ptr = static_cast(ar.base_ptr) + ar.offset; - MemCopy(data, ptr, size); - ar.offset += size; - } - else - { - auto* ptr = ArenaPushSize(ar.arena, size, 8, false JULIET_DEBUG_PARAM("serialized save field")); - MemCopy(ptr, data, size); - ar.offset += size; - } -} - -ParsedArchive tokenize_archive(NonNullPtr arena, ByteBuffer file_buffer) -{ - Assert(file_buffer.Data); - - ParsedArchive archive = {}; - - uint8* cursor = (uint8*)file_buffer.Data; - uint8* end = cursor + file_buffer.Size; - - // Pass 1: count properties - uint32 property_count = 0; - uint8* scan = cursor; - while (scan < end) - { - if (*scan == ';') - { - if (scan == cursor || *(scan - 1) == '\n') - { - property_count++; - } - } - scan++; - } - - if (property_count > 0) - { - // Pass 2: extract properties - NonNullPtr nodes = - ArenaPushArray(arena, property_count JULIET_DEBUG_PARAM("tokenizer nodes")); - - uint32 node_index = 0; - scan = cursor; - - while (scan < end && node_index < property_count) - { - // Skip comments - if (*scan == '#' || (*scan == '/' && scan + 1 < end && *(scan + 1) == '/')) - { - while (scan < end && *scan != '\n') - { - ++scan; - } - ++scan; // skipping trailing \n - continue; - } - - if (*scan == ';') - { - ++scan; // skipping the ; - - // extract property name - uint8* property_name_cursor = scan; - while (scan < end && *scan != '\r' && *scan != '\n') - { - ++scan; - } - - String raw_property_name = { .Str = (char*)property_name_cursor, .Size = (size_t)(scan - property_name_cursor) }; - String property_name = trim_whitespace(raw_property_name); - - Assert(property_name.Str && property_name.Size > 0); - - // skip \r\n - while (scan < end && (*scan == '\r' || *scan == '\n')) - { - ++scan; - } - - // Value block is everything until comment or new line - - uint8* value_start = scan; - uint8* value_end = scan; - - while (scan < end) - { - if (*scan == '\r' || *scan == '\n') - { - break; - } - - if (*scan == '#' || (*scan == '/' && scan + 1 < end && *(scan + 1) == '/')) - { - break; - } - - ++scan; - value_end = scan; - } - - String raw_value = { .Str = (char*)value_start, .Size = static_cast(value_end - value_start) }; - String value = trim_whitespace(raw_value); - - nodes[node_index].key_crc = crc32(property_name); - nodes[node_index].key = StringCopy(arena, property_name); - nodes[node_index].value = value; - nodes[node_index].consumed = false; - node_index++; - } - else - { - ++scan; - } - } - - archive.nodes = nodes.Get(); - archive.property_count = node_index; - } - - return archive; -} - -ArchivePropertyNode* find_property(NonNullPtr archive, uint32 property_crc) -{ - Assert(archive->nodes && archive->property_count > 0); - - ArchivePropertyNode* result = nullptr; - ArchivePropertyNode* nodes = archive->nodes; - for (index_t idx = 0; idx < archive->property_count; ++idx) - { - if (nodes[idx].key_crc == property_crc) - { - nodes[idx].consumed = true; - result = &nodes[idx]; - break; - } - } - - return result; -} - -void write_property_header(Archive& ar, String property_name) -{ - Assert(!ar.loading); - Assert(ar.stream); - Assert(IsValid(property_name)); - IOPrintf(ar.stream, "; %s\n", CStr(property_name)); -} - -bool read_prop(Archive& ar, String value_raw, String& value) -{ - String parsed = value_raw; - - // Ignoring eventual " - if (parsed.Size >= 2 && parsed.Str[0] == '"' && parsed.Str[parsed.Size - 1] == '"') - { - parsed.Str++; - parsed.Size -= 2; - } - - Assert(ar.arena); - value = StringCopy(ar.arena, parsed); - return true; -} - -void write(NonNullPtr stream, String value) -{ - if (ContainsChar(value, ' ')) // Add " " around string with spaces - { - IOPrintf(stream, "\"%.*s\"\n", (int32)value.Size, value.Str); - } - else - { - IOPrintf(stream, "%.*s\n", (int32)value.Size, value.Str); - } -} - -bool read(const char* buffer, float& value, const char** next /* = nullptr */) -{ - bool result = false; - char* end = nullptr; - float parsed = strtof(buffer, &end); - if (end != buffer) - { - value = parsed; - if (next) - { - *next = end; - } - result = true; - } - return result; -} - -void write(NonNullPtr stream, float value) -{ - IOPrintf(stream, "%.9g\n", value); -} - -bool read(const char* buffer, int8& value) -{ - bool result = false; - char* end = nullptr; - int32 parsed = strtol(buffer, &end, 10); - if (end != buffer && parsed >= int8Min && parsed <= int8Max) - { - value = (int8)parsed; - result = true; - } - return result; -} - -void write(NonNullPtr stream, int8 value) -{ - IOPrintf(stream, "%d\n", (int32)value); -} - -bool read(const char* buffer, int16& value) -{ - bool result = false; - char* end = nullptr; - int32 parsed = strtol(buffer, &end, 10); - if (end != buffer && parsed >= int16Min && parsed <= int16Max) - { - value = (int16)parsed; - result = true; - } - return result; -} - -void write(NonNullPtr stream, int16 value) -{ - IOPrintf(stream, "%d\n", (int32)value); -} - -bool read(const char* buffer, int32& value) -{ - char* end = nullptr; - value = strtol(buffer, &end, 10); - return end != buffer; -} - -void write(NonNullPtr stream, int32 value) -{ - IOPrintf(stream, "%d\n", value); -} - -bool read(const char* buffer, int64& value) -{ - char* end = nullptr; - value = strtoll(buffer, &end, 0); - return end != buffer; -} - -void write(NonNullPtr stream, int64 value) -{ - IOPrintf(stream, "%lld\n", value); -} - -bool read(const char* buffer, uint8& value) -{ - bool result = false; - char* end = nullptr; - uint32 parsed = strtoul(buffer, &end, 10); - if (end != buffer && parsed >= uint8Min && parsed <= uint8Max) - { - value = (uint8)parsed; - result = true; - } - return result; -} - -void write(NonNullPtr stream, uint8 value) -{ - IOPrintf(stream, "%u\n", (uint32)value); -} - -bool read(const char* buffer, uint16& value) -{ - bool result = false; - char* end = nullptr; - uint32 parsed = strtoul(buffer, &end, 10); - if (end != buffer && parsed >= uint16Min && parsed <= uint16Max) - { - value = (uint16)parsed; - result = true; - } - return result; -} - -void write(NonNullPtr stream, uint16 value) -{ - IOPrintf(stream, "%u\n", (uint32)value); -} - -bool read(const char* buffer, uint32& value) -{ - char* end = nullptr; - value = strtoul(buffer, &end, 10); - return end != buffer; -} - -void write(NonNullPtr stream, uint32 value) -{ - IOPrintf(stream, "%u\n", value); -} - -bool read(const char* buffer, uint64& value) -{ - char* end = nullptr; - value = strtoull(buffer, &end, 10); - return end != buffer; -} - -void write(NonNullPtr stream, uint64 value) -{ - IOPrintf(stream, "%llu\n", value); -} - -bool read(const char* buffer, bool& value) -{ - bool result = false; - value = buffer[0] == '1'; - if (value || buffer[0] == '0') - { - result = true; - } - return result; -} - -void write(NonNullPtr stream, bool value) -{ - IOPrintf(stream, "%u\n", value); -} - -bool read(const char* buffer, Vector4& value) -{ - bool result = read(buffer, value.x, &buffer); - result &= read(buffer, value.y, &buffer); - result &= read(buffer, value.z, &buffer); - result &= read(buffer, value.w, &buffer); - - return result; -} - -void write(NonNullPtr stream, Vector4 value) -{ - IOPrintf(stream, "%.9g %.9g %.9g %.9g\n", value.x, value.y, value.z, value.w); -} - -#if JULIET_DEBUG -void audit_unconsumed_properties(NonNullPtr archive, String context_name) -{ - Assert(archive->nodes && archive->property_count > 0); - auto* nodes = archive->nodes; - for (index_t idx = 0; idx < archive->property_count; ++idx) - { - if (!nodes[idx].consumed) - { - LogWarning(LogCategory::Core, "[%s] Unconsumed or obsolete property detected: [%s] - CRC 0x%08X (Value: '%.*s')", - CStr(context_name), CStr(nodes[idx].key), nodes[idx].key_crc, - static_cast(nodes[idx].value.Size), nodes[idx].value.Str); - } - } -} -#endif diff --git a/Juliet/src/Core/Container/Vector.c b/Juliet/src/Core/Container/Vector.c new file mode 100644 index 0000000..82aaf8e --- /dev/null +++ b/Juliet/src/Core/Container/Vector.c @@ -0,0 +1 @@ +#include diff --git a/Juliet/src/Core/Container/Vector.cpp b/Juliet/src/Core/Container/Vector.cpp deleted file mode 100644 index da54ccf..0000000 --- a/Juliet/src/Core/Container/Vector.cpp +++ /dev/null @@ -1,2 +0,0 @@ -#include - diff --git a/Juliet/src/Core/HAL/Display/Display.c b/Juliet/src/Core/HAL/Display/Display.c new file mode 100644 index 0000000..dd17f57 --- /dev/null +++ b/Juliet/src/Core/HAL/Display/Display.c @@ -0,0 +1,154 @@ +#include +#include +#include +#include + +global DisplayDevice* g_CurrentDisplayDevice = NULL; + +internal void DestroyPlatformWindowAtIndex(index_t windowIndex) +{ + VectorArena* windows = &g_CurrentDisplayDevice->Windows; + Window* window = &VectorArenaAt(Window, windows, windowIndex); + + HidePlatformWindow(window); + + g_CurrentDisplayDevice->DestroyPlatformWindow(g_CurrentDisplayDevice, window); + + ArenaClear(window->Arena); + ArenaRelease(window->Arena); + + vector_arena_remove_at_fast(windows, windowIndex); +} + +global DisplayDeviceFactory* g_DisplayFactories[] = { &Win32DisplayDeviceFactory, NULL }; + +void InitializeDisplaySystem(void) +{ + Assert(g_CurrentDisplayDevice == NULL); + + Arena* arena = ArenaAllocate((ArenaParams){ .Name = "Display System" }); + + DisplayDevice* candidateDevice = NULL; + DisplayDeviceFactory* candidateFactory = NULL; + for (size_t i = 0; i < ArraySize(g_DisplayFactories); ++i) + { + DisplayDeviceFactory* factory = g_DisplayFactories[i]; + if (factory != NULL) + { + candidateDevice = factory->CreateDevice(arena); + if (candidateDevice != NULL) + { + candidateFactory = factory; + break; + } + } + } + + // TODO : handle error instead of crashing + Assert(candidateDevice != NULL); + + g_CurrentDisplayDevice = candidateDevice; + g_CurrentDisplayDevice->Arena = arena; + g_CurrentDisplayDevice->Name = candidateFactory->Name; + + if (!g_CurrentDisplayDevice->Initialize(g_CurrentDisplayDevice)) + { + ShutdownDisplaySystem(); + } +} + +void ShutdownDisplaySystem(void) +{ + if (g_CurrentDisplayDevice != NULL) + { + // Destroy all Windows that are still alive + for (index_t idx = g_CurrentDisplayDevice->Windows.Size; idx-- > 0;) + { + DestroyPlatformWindowAtIndex(idx); + } + + g_CurrentDisplayDevice->Shutdown(g_CurrentDisplayDevice); + // Free anything that was freed by the shutdown and then free the display + // no op for now + g_CurrentDisplayDevice->Free(g_CurrentDisplayDevice); + + ArenaRelease(g_CurrentDisplayDevice->Arena); + g_CurrentDisplayDevice = NULL; + } +} + +Window* CreatePlatformWindow(const char* title, uint16 width, uint16 height, int flags) +{ + (void)flags; + Assert(g_CurrentDisplayDevice != NULL); + Assert(g_CurrentDisplayDevice->CreatePlatformWindow != NULL); + + Window window = { 0 }; + window.Arena = ArenaAllocate((ArenaParams){ .Name = "Window" }); + window.Width = width; + window.Height = height; + + window.Title = StringCopy(window.Arena, WrapString(title)); + + vector_arena_push_elem(&g_CurrentDisplayDevice->Windows, &window); + + Window* pWindow = VectorArenaLast(Window, &g_CurrentDisplayDevice->Windows); + if (!g_CurrentDisplayDevice->CreatePlatformWindow(g_CurrentDisplayDevice, pWindow)) + { + ArenaRelease(window.Arena); + pWindow = NULL; + } + else + { + // TODO : make SHOW optional on creation with a flag + g_CurrentDisplayDevice->ShowWindow(g_CurrentDisplayDevice, pWindow); + } + + return pWindow; +} + +void DestroyPlatformWindow(Window* window) +{ + Assert(window != NULL); + // Find and destroy + VectorArena* windows = &g_CurrentDisplayDevice->Windows; + for (index_t idx = windows->Size; idx-- > 0;) + { + Window* windowRef = &VectorArenaAt(Window, windows, idx); + if (windowRef->ID == window->ID) + { + DestroyPlatformWindowAtIndex(idx); + break; + } + } +} + +void ShowPlatformWindow(Window* window) +{ + Assert(window != NULL); + g_CurrentDisplayDevice->ShowWindow(g_CurrentDisplayDevice, window); +} + +void HidePlatformWindow(Window* window) +{ + Assert(window != NULL); + g_CurrentDisplayDevice->HideWindow(g_CurrentDisplayDevice, window); +} + +WindowID GetWindowID(Window* window) +{ + Assert(window != NULL); + return window->ID; +} + +void SetWindowTitle(Window* window, String title) +{ + Assert(window != NULL); + g_CurrentDisplayDevice->SetWindowTitle(g_CurrentDisplayDevice, window, title); +} + +// Display Device Utils. Not exposed in the API +DisplayDevice* GetDisplayDevice(void) +{ + return g_CurrentDisplayDevice; +} diff --git a/Juliet/src/Core/HAL/Display/Display.cpp b/Juliet/src/Core/HAL/Display/Display.cpp deleted file mode 100644 index f781f44..0000000 --- a/Juliet/src/Core/HAL/Display/Display.cpp +++ /dev/null @@ -1,158 +0,0 @@ -#include -#include -#include -#include - -namespace -{ - DisplayDevice* g_CurrentDisplayDevice = nullptr; - - void DestroyPlatformWindow(index_t windowIndex); -} // namespace - -namespace Internal::Display -{ - // TODO : IfDef new factories that are not compatible - constexpr DisplayDeviceFactory* Factories[] = { &Win32DisplayDeviceFactory, nullptr }; -} // namespace Internal::Display - -void InitializeDisplaySystem() -{ - Assert(!g_CurrentDisplayDevice); - - Arena* arena = ArenaAllocate({ .Name = "Display System" }); - - DisplayDevice* candidateDevice = nullptr; - DisplayDeviceFactory* candidateFactory = nullptr; - for (DisplayDeviceFactory* factory : Internal::Display::Factories) - { - if (factory) - { - candidateDevice = factory->CreateDevice(arena); - if (candidateDevice) - { - candidateFactory = factory; - break; - } - } - } - - // TODO : handle error instead of crashing - Assert(candidateDevice); - - g_CurrentDisplayDevice = candidateDevice; - g_CurrentDisplayDevice->Arena = arena; - g_CurrentDisplayDevice->Name = candidateFactory->Name; - - if (!g_CurrentDisplayDevice->Initialize(g_CurrentDisplayDevice)) - { - ShutdownDisplaySystem(); - } -} - -void ShutdownDisplaySystem() -{ - if (!g_CurrentDisplayDevice) - { - return; - } - - // Destroy all Windows that are still alive - for (index_t idx = g_CurrentDisplayDevice->Windows.Size(); idx-- > 0;) - { - DestroyPlatformWindow(idx); - } - - g_CurrentDisplayDevice->Shutdown(g_CurrentDisplayDevice); - // Free anything that was freed by the shutdown and then free the display - // no op for now - g_CurrentDisplayDevice->Free(g_CurrentDisplayDevice); - - ArenaRelease(g_CurrentDisplayDevice->Arena); - g_CurrentDisplayDevice = nullptr; -} - -Window* CreatePlatformWindow(const char* title, uint16 width, uint16 height, int /*flags*/ /* = 0 unused */) -{ - Assert(g_CurrentDisplayDevice->CreatePlatformWindow); - - Window window = {}; - window.Arena = ArenaAllocate({ .Name = "Window" }); - window.Width = width; - window.Height = height; - - window.Title = StringCopy(window.Arena, WrapString(title)); - - g_CurrentDisplayDevice->Windows.PushBack(window); - - auto* pWindow = g_CurrentDisplayDevice->Windows.Last(); - if (!g_CurrentDisplayDevice->CreatePlatformWindow(g_CurrentDisplayDevice, pWindow)) - { - ArenaRelease(window.Arena); - return nullptr; - } - - // TODO : make SHOW optional on creation with a flag - g_CurrentDisplayDevice->ShowWindow(g_CurrentDisplayDevice, pWindow); - - return pWindow; -} - -namespace -{ - void DestroyPlatformWindow(index_t windowIndex) - { - VectorArena& windows = g_CurrentDisplayDevice->Windows; - Window* window = &windows[windowIndex]; - - HideWindow(window); - - g_CurrentDisplayDevice->DestroyPlatformWindow(g_CurrentDisplayDevice, window); - - ArenaClear(window->Arena); - ArenaRelease(window->Arena); - - windows.RemoveAtFast(windowIndex); - } -} // namespace - -void DestroyPlatformWindow(NonNullPtr window) -{ - // Find and destroy - VectorArena& windows = g_CurrentDisplayDevice->Windows; - for (index_t idx = windows.Size(); idx-- > 0;) - { - Window& windowRef = windows[idx]; - if (windowRef.ID == window->ID) - { - DestroyPlatformWindow(idx); - break; - } - } -} - -void ShowWindow(NonNullPtr window) -{ - g_CurrentDisplayDevice->ShowWindow(g_CurrentDisplayDevice, window); -} - -void HideWindow(NonNullPtr window) -{ - g_CurrentDisplayDevice->HideWindow(g_CurrentDisplayDevice, window); -} - -WindowID GetWindowID(NonNullPtr window) -{ - return window->ID; -} - -void SetWindowTitle(NonNullPtr window, String title) -{ - g_CurrentDisplayDevice->SetWindowTitle(g_CurrentDisplayDevice, window, title); -} - -// Display Device Utils. Not exposed in the API -DisplayDevice* GetDisplayDevice() -{ - return g_CurrentDisplayDevice; -} diff --git a/Juliet/src/Core/HAL/Display/DisplayDevice.h b/Juliet/src/Core/HAL/Display/DisplayDevice.h index 469d015..ffd1237 100644 --- a/Juliet/src/Core/HAL/Display/DisplayDevice.h +++ b/Juliet/src/Core/HAL/Display/DisplayDevice.h @@ -1,39 +1,40 @@ -#pragma once +#pragma once -#include #include #include // Driver to the display device. // Functions ptr will be set by the chosen factory // Acts as a singleton after Initialize has been called and is freed in Shutdown. +typedef struct DisplayDevice DisplayDevice; struct DisplayDevice { Arena* Arena; - const char* Name = "Unknown"; + const char* Name; // Initialize all subsystems needed for the device to works - bool (*Initialize)(NonNullPtr self); - void (*Shutdown)(NonNullPtr self); - void (*Free)(NonNullPtr self); + bool8 (*Initialize)(DisplayDevice* self); + void (*Shutdown)(DisplayDevice* self); + void (*Free)(DisplayDevice* self); // Window management - bool (*CreatePlatformWindow)(NonNullPtr self, NonNullPtr window); - void (*DestroyPlatformWindow)(NonNullPtr self, NonNullPtr window); - void (*ShowWindow)(NonNullPtr self, NonNullPtr window); - void (*HideWindow)(NonNullPtr self, NonNullPtr window); - void (*SetWindowTitle)(NonNullPtr self, NonNullPtr window, String title); + bool8 (*CreatePlatformWindow)(DisplayDevice* self, Window* window); + void (*DestroyPlatformWindow)(DisplayDevice* self, Window* window); + void (*ShowWindow)(DisplayDevice* self, Window* window); + void (*HideWindow)(DisplayDevice* self, Window* window); + void (*SetWindowTitle)(DisplayDevice* self, Window* window, String title); // Events - void (*PumpEvents)(NonNullPtr self); + void (*PumpEvents)(DisplayDevice* self); - VectorArena Windows; + VectorArena Windows; }; +typedef struct DisplayDeviceFactory DisplayDeviceFactory; struct DisplayDeviceFactory { - const char* Name = "Unknown"; + const char* Name; DisplayDevice* (*CreateDevice)(Arena* arena); }; @@ -41,4 +42,4 @@ struct DisplayDeviceFactory extern DisplayDeviceFactory Win32DisplayDeviceFactory; // Utils -extern DisplayDevice* GetDisplayDevice(); +extern DisplayDevice* GetDisplayDevice(void); diff --git a/Juliet/src/Core/HAL/Display/Display_cpp.h b/Juliet/src/Core/HAL/Display/Display_cpp.h index 98268fa..85fd454 100644 --- a/Juliet/src/Core/HAL/Display/Display_cpp.h +++ b/Juliet/src/Core/HAL/Display/Display_cpp.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once -void InitializeDisplaySystem(); -void ShutdownDisplaySystem(); +void InitializeDisplaySystem(void); +void ShutdownDisplaySystem(void); diff --git a/Juliet/src/Core/HAL/Display/Win32/Win32DisplayDevice.c b/Juliet/src/Core/HAL/Display/Win32/Win32DisplayDevice.c new file mode 100644 index 0000000..1dcc63c --- /dev/null +++ b/Juliet/src/Core/HAL/Display/Win32/Win32DisplayDevice.c @@ -0,0 +1,47 @@ +#include +#include +#include + +internal bool8 Win32_InitializeDisplay(DisplayDevice* self) +{ + (void)self; + return true; +} + +internal void Win32_ShutdownDisplay(DisplayDevice* self) +{ + (void)self; +} + +internal void Win32_FreeDisplay(DisplayDevice* device) +{ + Assert(device != NULL); + vector_arena_destroy(&device->Windows); +} + +internal DisplayDevice* Win32_CreateDisplayDevice(Arena* arena) +{ + DisplayDevice* device = ArenaPushStruct(arena, DisplayDevice); + + if (device != NULL) + { + device->Name = "Unknown"; + device->Initialize = Win32_InitializeDisplay; + device->Shutdown = Win32_ShutdownDisplay; + device->Free = Win32_FreeDisplay; + + device->CreatePlatformWindow = Win32_CreatePlatformWindow; + device->DestroyPlatformWindow = Win32_DestroyPlatformWindow; + device->ShowWindow = Win32_ShowWindow; + device->HideWindow = Win32_HideWindow; + device->SetWindowTitle = Win32_SetWindowTitle; + + device->PumpEvents = Win32_PumpEvents; + + VectorArenaCreate(&device->Windows, Window, arena, kDefaultVectorReserveSize JULIET_DEBUG_PARAM("Display Windows")); + } + + return device; +} + +DisplayDeviceFactory Win32DisplayDeviceFactory = { .Name = "Win32", .CreateDevice = Win32_CreateDisplayDevice }; diff --git a/Juliet/src/Core/HAL/Display/Win32/Win32DisplayDevice.cpp b/Juliet/src/Core/HAL/Display/Win32/Win32DisplayDevice.cpp deleted file mode 100644 index b29b2a4..0000000 --- a/Juliet/src/Core/HAL/Display/Win32/Win32DisplayDevice.cpp +++ /dev/null @@ -1,49 +0,0 @@ -#include -#include -#include - -namespace Win32 -{ - namespace - { - bool Initialize(NonNullPtr /*self*/) - { - return true; - } - void Shutdown(NonNullPtr /*self*/) {} - void Free(NonNullPtr device) - { - device->Windows.Destroy(); - } - - DisplayDevice* CreateDevice(Arena* arena) - { - auto device = ArenaPushStruct(arena); - - if (!device) - { - return nullptr; - } - - device->Initialize = Initialize; - device->Shutdown = Shutdown; - device->Free = Free; - - device->CreatePlatformWindow = CreatePlatformWindow; - device->DestroyPlatformWindow = DestroyPlatformWindow; - device->ShowWindow = ShowWindow; - device->HideWindow = HideWindow; - device->SetWindowTitle = SetWindowTitle; - - device->PumpEvents = PumpEvents; - - device->Windows.Create(arena JULIET_DEBUG_PARAM("Display Windows")); - - return device; - } - } // namespace - -} // namespace Win32 - -// Factory cannot be in an anonymous/unknown namespace -DisplayDeviceFactory Win32DisplayDeviceFactory = { .Name = "Win32", .CreateDevice = Win32::CreateDevice }; diff --git a/Juliet/src/Core/HAL/Display/Win32/Win32DisplayEvent.c b/Juliet/src/Core/HAL/Display/Win32/Win32DisplayEvent.c new file mode 100644 index 0000000..2ad04ff --- /dev/null +++ b/Juliet/src/Core/HAL/Display/Win32/Win32DisplayEvent.c @@ -0,0 +1,292 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// For GET_X_LPARAM, GET_Y_LPARAM. +#include +#include + +#ifdef JULIET_ENABLE_IMGUI +#include +#endif + +#define kPeekMessageLimit 3 + +// Win32 Display Utils +internal Window32State* Win32_GetWindowStateFromHandle(HWND handle) +{ + Window32State* result = NULL; + DisplayDevice* displayDevice = GetDisplayDevice(); + if (displayDevice != NULL) + { + for (index_t i = 0; i < displayDevice->Windows.Size; ++i) + { + Window* window = &VectorArenaAt(Window, &displayDevice->Windows, i); + Window32State* state = (Window32State*)window->State; + if (state != NULL && state->Handle == handle) + { + result = state; + break; + } + } + } + + return result; +} + +// Win32 Keyboard Utils +internal Key Win32_GetScanCodeFromWinScanCode(WPARAM wParam, LPARAM lParam) +{ + (void)wParam; + Key key = { 0 }; + + uint16 flags = HIWORD(lParam); + uint16 scanCode = LOBYTE(flags); + + if (scanCode != 0) + { + // Use extended keyboard + if ((flags & KF_EXTENDED) == KF_EXTENDED) + { + // Transforms into the range of our scancodes + scanCode = MAKEWORD(scanCode, 0xe0); + } + else if (scanCode == 0x45) + { + // Pause scancode in win32 is 0xE11D45 (for raw input) or 0x0045 for legacy KeyDown (which is the + // one we use) Break is 0x0046 (Ctrl + Pause). We merge it into one because nobody cares. + scanCode = 0x46; + } + } + else + { + Assert(false && "Virtual Key : Unimplemented"); + // uint16 virtualKey = LOWORD(wParam); + } + + // Pack the scancode to have everything within one byte. + // Because scancode low byte are never bigger than 0x7F + // We can use the most significant bit to store anything that is in the High Byte of the scancode + uint8 index = (uint8)(LOBYTE(scanCode) | (HIBYTE(scanCode) ? 0x80 : 0x00)); + key.ScanCode = Win32ToHIDUsagePageTable[index]; + key.Raw = scanCode; + + return key; +} + +StaticAssert(ArraySize(Win32ToHIDUsagePageTable) > sizeof(uint8), Win32ToHIDUsagePageTableSizeCheck); + +internal void Win32_ExtractMouseButtonState(uint64 timestamp, bool8 buttonPressed, MouseButton buttonFlag, bool8 swapButtons, + Window32State* windowState, MouseButton button, MouseID mouseID) +{ + Assert(windowState != NULL); + if (swapButtons) + { + if (button == MouseButton_Left) + { + button = MouseButton_Right; + } + else if (button == MouseButton_Right) + { + button = MouseButton_Left; + } + } + + if (buttonPressed && ((buttonFlag & button) == MouseButton_None)) + { + SendMouseButton(timestamp, windowState->Window, mouseID, button, true); + } + else if (!buttonPressed && ((buttonFlag & button) != MouseButton_None)) + { + SendMouseButton(timestamp, windowState->Window, mouseID, button, false); + } +} + +global WPARAM g_LastFrameButtonState = (WPARAM)(-1); + +internal void Win32_ExtractAllMouseButtonState(uint64 timestamp, WPARAM wParam, Window32State* windowState, MouseID mouseID) +{ + Assert(windowState != NULL); + if (wParam != g_LastFrameButtonState) + { + MouseButton buttonFlags = GetMouseButtonState(); + Win32_ExtractMouseButtonState(timestamp, (wParam & MK_LBUTTON) != 0, buttonFlags, false, windowState, MouseButton_Left, mouseID); + Win32_ExtractMouseButtonState(timestamp, (wParam & MK_MBUTTON) != 0, buttonFlags, false, windowState, + MouseButton_Middle, mouseID); + Win32_ExtractMouseButtonState(timestamp, (wParam & MK_RBUTTON) != 0, buttonFlags, false, windowState, MouseButton_Right, mouseID); + Win32_ExtractMouseButtonState(timestamp, (wParam & MK_XBUTTON1) != 0, buttonFlags, false, windowState, + MouseButton_Button1, mouseID); + Win32_ExtractMouseButtonState(timestamp, (wParam & MK_XBUTTON2) != 0, buttonFlags, false, windowState, + MouseButton_Button2, mouseID); + g_LastFrameButtonState = wParam; + } +} + +void Win32_PumpEvents(DisplayDevice* self) +{ + (void)self; + uint8 peekedMessageCount = 0; + MSG message = { 0 }; + while (PeekMessageA(&message, NULL, 0, 0, PM_REMOVE)) + { + TranslateMessage(&message); + DispatchMessageA(&message); + + // Since we peek at all messages of the program, it's possible that it stall here so we limit the number of peeked messages to an arbitrary limit + if (++peekedMessageCount > kPeekMessageLimit) + { + break; + } + } +} + +LRESULT CALLBACK Win32_MainWindowCallback(HWND handle, UINT message, WPARAM wParam, LPARAM lParam) +{ + LRESULT finalResult = 0; + bool8 handled = false; + +#ifdef JULIET_ENABLE_IMGUI + if (ImGui_C_ImplWin32_WndProcHandler(handle, message, wParam, lParam)) + { + finalResult = 1; + handled = true; + } +#endif + + if (!handled) + { + LRESULT returnCode = -1; + + // Wait until the window state is created before doing anything + Window32State* windowState = Win32_GetWindowStateFromHandle(handle); + if (windowState != NULL) + { + switch (message) + { + case WM_CLOSE: + { + SendWindowEvent(windowState->Window, EventType_Window_Close_Request); + returnCode = 0; + break; + } + case WM_DESTROY: + { + PostQuitMessage(0); + break; + } + + case WM_SYSKEYDOWN: + case WM_KEYDOWN: + { + Key key = Win32_GetScanCodeFromWinScanCode(wParam, lParam); + + // Catch Alt+F4 and close the window immediately + if (key.ScanCode == ScanCode_F4 && ((GetKeyModState() & KeyMod_Alt) != KeyMod_None)) + { + SendWindowEvent(windowState->Window, EventType_Window_Close_Request); + } + + SendKeyboardKey(Time_Timestamp(), kGlobalKeyboardID, key, KeyPosition_Down); + + returnCode = 0; + break; + } + case WM_SYSKEYUP: + case WM_KEYUP: + { + Key key = Win32_GetScanCodeFromWinScanCode(wParam, lParam); + SendKeyboardKey(Time_Timestamp(), kGlobalKeyboardID, key, KeyPosition_Up); + + returnCode = 0; + break; + } + + case WM_MOUSEMOVE: + { + if (!windowState->IsMouseTracked) + { + TRACKMOUSEEVENT MouseEvent; + MouseEvent.cbSize = sizeof(TRACKMOUSEEVENT); + MouseEvent.hwndTrack = windowState->Handle; + MouseEvent.dwFlags = TME_LEAVE; + TrackMouseEvent(&MouseEvent); + + windowState->IsMouseTracked = true; + } + + SendMouseMotion(1, windowState->Window, kGlobalMouseID, (float)GET_X_LPARAM(lParam), + (float)GET_Y_LPARAM(lParam)); + + break; + } + + case WM_LBUTTONUP: + case WM_RBUTTONUP: + case WM_MBUTTONUP: + case WM_XBUTTONUP: + case WM_LBUTTONDOWN: + case WM_LBUTTONDBLCLK: + case WM_RBUTTONDOWN: + case WM_RBUTTONDBLCLK: + case WM_MBUTTONDOWN: + case WM_MBUTTONDBLCLK: + case WM_XBUTTONDOWN: + case WM_XBUTTONDBLCLK: + { + Win32_ExtractAllMouseButtonState(1, wParam, windowState, kGlobalMouseID); + break; + } + + case WM_MOUSELEAVE: + { + // TODO : Check focus + const bool8 isNotMinimized = !IsIconic(handle); + if (isNotMinimized) + { + POINT cursorPos; + GetCursorPos(&cursorPos); + ScreenToClient(handle, &cursorPos); + SendMouseMotion(1, windowState->Window, kGlobalMouseID, (float)cursorPos.x, + (float)cursorPos.y); + } + + windowState->IsMouseTracked = false; + + returnCode = 0; + break; + } + + case WM_PAINT: + { + PAINTSTRUCT Paint; + BeginPaint(handle, &Paint); + EndPaint(handle, &Paint); + break; + } + default: + { + break; + } + } + } + + if (returnCode >= 0) + { + finalResult = returnCode; + } + else + { + finalResult = CallWindowProcA(DefWindowProcA, handle, message, wParam, lParam); + } + } + + return finalResult; +} diff --git a/Juliet/src/Core/HAL/Display/Win32/Win32DisplayEvent.cpp b/Juliet/src/Core/HAL/Display/Win32/Win32DisplayEvent.cpp deleted file mode 100644 index 77666c9..0000000 --- a/Juliet/src/Core/HAL/Display/Win32/Win32DisplayEvent.cpp +++ /dev/null @@ -1,279 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// For GET_X_LPARAM, GET_Y_LPARAM. -#include -#include - -#ifdef JULIET_ENABLE_IMGUI -#include // Need For IMGUI_IMPL_API -extern IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); -#endif - -namespace Win32 -{ - namespace - { - constexpr uint8 kPeekMessageLimit = 3; - - // Win32 Display Utils - Window32State* GetWindowStateFromHandle(HWND handle) - { - if (auto* displayDevice = GetDisplayDevice()) - { - for (auto& window : displayDevice->Windows) - { - auto state = static_cast(window.State); - if (state && state->Handle == handle) - { - return state; - } - } - } - - return nullptr; - } - - // Win32 Keyboard Utils - Key GetScanScodeFromWinScanCode(WPARAM /*wParam*/, LPARAM lParam) - { - Key key = {}; - - uint16 flags = HIWORD(lParam); - uint16 scanCode = LOBYTE(flags); - - if (scanCode != 0) - { - // Use extended keyboard - if ((flags & KF_EXTENDED) == KF_EXTENDED) - { - // Transforms into the range of our scancodes - scanCode = MAKEWORD(scanCode, 0xe0); - } - else if (scanCode == 0x45) - { - // Pause scancode in win32 is 0xE11D45 (for raw input) or 0x0045 for legacy KeyDown (which is the - // one we use) Break is 0x0046 (Ctrl + Pause). We merge it into one because nobody cares. - scanCode = 0x46; - } - } - else - { - Assert(false, "Virtual Key : Unimplemented"); - // uint16 virtualKey = LOWORD(wParam); - } - - // Pack the scancode to have everything within one byte. - // Because scancode low byte are never bigger than 0x7F - // We can use the most significant bit to store anything that is in the High Byte of the scancode - uint8 index = static_cast(LOBYTE(scanCode) | (HIBYTE(scanCode) ? 0x80 : 0x00)); - key.ScanCode = Win32ToHIDUsagePageTable[index]; - key.Raw = scanCode; - - return key; - } - - static_assert(ArraySize(Win32ToHIDUsagePageTable) > sizeof(uint8)); - - void ExtractMouseButtonState(uint64 timestamp, bool buttonPressed, MouseButton buttonFlag, bool swapButtons, - NonNullPtr windowState, MouseButton button, MouseID mouseID) - { - if (swapButtons) - { - if (button == MouseButton::Left) - { - button = MouseButton::Right; - } - else if (button == MouseButton::Right) - { - button = MouseButton::Left; - } - } - - if (buttonPressed && ((buttonFlag & button) == MouseButton::None)) - { - SendMouseButton(timestamp, windowState->Window, mouseID, button, true); - } - else if (!buttonPressed && ((buttonFlag & button) != MouseButton::None)) - { - SendMouseButton(timestamp, windowState->Window, mouseID, button, false); - } - } - - WPARAM LastFrameButtonState = static_cast(-1); - void ExtractAllMouseButtonState(uint64 timestamp, WPARAM wParam, NonNullPtr windowState, MouseID mouseID) - { - if (wParam != LastFrameButtonState) - { - MouseButton buttonFlags = GetMouseButtonState(); - ExtractMouseButtonState(timestamp, (wParam & MK_LBUTTON), buttonFlags, false, windowState, MouseButton::Left, mouseID); - ExtractMouseButtonState(timestamp, (wParam & MK_MBUTTON), buttonFlags, false, windowState, - MouseButton::Middle, mouseID); - ExtractMouseButtonState(timestamp, (wParam & MK_RBUTTON), buttonFlags, false, windowState, MouseButton::Right, mouseID); - ExtractMouseButtonState(timestamp, (wParam & MK_XBUTTON1), buttonFlags, false, windowState, - MouseButton::Button1, mouseID); - ExtractMouseButtonState(timestamp, (wParam & MK_XBUTTON2), buttonFlags, false, windowState, - MouseButton::Button2, mouseID); - LastFrameButtonState = wParam; - } - } - } // namespace - - void PumpEvents(NonNullPtr /*self*/) - { - uint8 peekedMessageCount = 0; - MSG message = {}; - while (PeekMessageA(&message, nullptr, 0, 0, PM_REMOVE)) - { - TranslateMessage(&message); - DispatchMessageA(&message); - - // Since we peek at all messages of the program, it's possible that it stall here so we limit the number of peeked messages to an arbitrary limit - if (++peekedMessageCount > kPeekMessageLimit) - { - break; - } - } - } - - LRESULT CALLBACK Win32MainWindowCallback(HWND handle, UINT message, WPARAM wParam, LPARAM lParam) - { -#ifdef JULIET_ENABLE_IMGUI - if (ImGui_ImplWin32_WndProcHandler(handle, message, wParam, lParam)) - { - return true; - } -#endif - - LRESULT returnCode = -1; - - // Wait until the window state is created before doing anything - Window32State* windowState = GetWindowStateFromHandle(handle); - if (!windowState) - { - return CallWindowProcA(DefWindowProcA, handle, message, wParam, lParam); - } - - switch (message) - { - case WM_CLOSE: - { - SendWindowEvent(windowState->Window, EventType::Window_Close_Request); - returnCode = 0; - break; - } - case WM_DESTROY: - { - PostQuitMessage(0); - break; - } - - case WM_SYSKEYDOWN: - case WM_KEYDOWN: - { - Key key = GetScanScodeFromWinScanCode(wParam, lParam); - - // Catch Alt+F4 and close the window immediately - if (key.ScanCode == ScanCode::F4 && ((GetKeyModState() & KeyMod::Alt) != KeyMod::None)) - { - SendWindowEvent(windowState->Window, EventType::Window_Close_Request); - } - - SendKeyboardKey(Time::Timestamp(), kGlobalKeyboardID, key, KeyPosition::Down); - - returnCode = 0; - break; - } - case WM_SYSKEYUP: - case WM_KEYUP: - { - Key key = GetScanScodeFromWinScanCode(wParam, lParam); - SendKeyboardKey(Time::Timestamp(), kGlobalKeyboardID, key, KeyPosition::Up); - - returnCode = 0; - break; - } - - case WM_MOUSEMOVE: - { - if (!windowState->IsMouseTracked) - { - TRACKMOUSEEVENT MouseEvent; - MouseEvent.cbSize = sizeof(TRACKMOUSEEVENT); - MouseEvent.hwndTrack = windowState->Handle; - MouseEvent.dwFlags = TME_LEAVE; - TrackMouseEvent(&MouseEvent); - - windowState->IsMouseTracked = true; - } - - SendMouseMotion(1, windowState->Window, kGlobalMouseID, static_cast(GET_X_LPARAM(lParam)), - static_cast(GET_Y_LPARAM(lParam))); - - break; - } - - case WM_LBUTTONUP: - case WM_RBUTTONUP: - case WM_MBUTTONUP: - case WM_XBUTTONUP: - case WM_LBUTTONDOWN: - case WM_LBUTTONDBLCLK: - case WM_RBUTTONDOWN: - case WM_RBUTTONDBLCLK: - case WM_MBUTTONDOWN: - case WM_MBUTTONDBLCLK: - case WM_XBUTTONDOWN: - case WM_XBUTTONDBLCLK: - { - ExtractAllMouseButtonState(1, wParam, windowState, kGlobalMouseID); - break; - } - - case WM_MOUSELEAVE: - { - // TODO : Check focus - const bool isNotMinimized = !IsIconic(handle); - if (isNotMinimized) - { - POINT cursorPos; - GetCursorPos(&cursorPos); - ScreenToClient(handle, &cursorPos); - SendMouseMotion(1, windowState->Window, kGlobalMouseID, static_cast(cursorPos.x), - static_cast(cursorPos.y)); - } - - windowState->IsMouseTracked = false; - - returnCode = 0; - break; - } - - case WM_PAINT: - { - PAINTSTRUCT Paint; - BeginPaint(handle, &Paint); - EndPaint(handle, &Paint); - break; - } - default: break; - } - - if (returnCode >= 0) - { - return returnCode; - } - - return CallWindowProcA(DefWindowProcA, handle, message, wParam, lParam); - } -} // namespace Win32 diff --git a/Juliet/src/Core/HAL/Display/Win32/Win32DisplayEvent.h b/Juliet/src/Core/HAL/Display/Win32/Win32DisplayEvent.h index 65b8af6..63c166b 100644 --- a/Juliet/src/Core/HAL/Display/Win32/Win32DisplayEvent.h +++ b/Juliet/src/Core/HAL/Display/Win32/Win32DisplayEvent.h @@ -1,12 +1,8 @@ -#pragma once +#pragma once -#include #include -struct DisplayDevice; +typedef struct DisplayDevice DisplayDevice; -namespace Win32 -{ - extern void PumpEvents(NonNullPtr self); - extern LRESULT CALLBACK Win32MainWindowCallback(HWND Handle, UINT Message, WPARAM WParam, LPARAM LParam); -} // namespace Win32 +extern void Win32_PumpEvents(DisplayDevice* self); +extern LRESULT CALLBACK Win32_MainWindowCallback(HWND Handle, UINT Message, WPARAM WParam, LPARAM LParam); diff --git a/Juliet/src/Core/HAL/Display/Win32/Win32Window.c b/Juliet/src/Core/HAL/Display/Win32/Win32Window.c new file mode 100644 index 0000000..6417cc3 --- /dev/null +++ b/Juliet/src/Core/HAL/Display/Win32/Win32Window.c @@ -0,0 +1,112 @@ +#include +#include +#include +#include +#include + +global const char* k_WindowClassName = "JulietWindowClass"; + +internal bool8 Win32_SetupWindowState(DisplayDevice* self, Window* window, HWND handle) +{ + (void)self; + Assert(window != NULL); + Window32State* state = ArenaPushStruct(window->Arena, Window32State); + + window->State = (WindowState*)state; + state->Handle = handle; + state->Window = window; + state->HDC = GetDC(handle); + + state->IsMouseTracked = false; + + return true; +} + +internal void Win32_CleanUpWindowState(DisplayDevice* self, Window* window) +{ + (void)self; + Assert(window != NULL); + Window32State* state = (Window32State*)window->State; + Assert(state != NULL); + ReleaseDC(state->Handle, state->HDC); + DestroyWindow(state->Handle); + window->State = NULL; +} + +bool8 Win32_CreatePlatformWindow(DisplayDevice* self, Window* window) +{ + Assert(self != NULL); + Assert(window != NULL); + + bool8 result = false; + + // TODO : save the instance in app state or something + HINSTANCE instance = GetModuleHandle(NULL); + + // TODO : Put outside, we should not create a new class for each new window + WNDCLASSEXA WindowClass = { 0 }; + WindowClass.cbSize = sizeof(WNDCLASSEX); + WindowClass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; + WindowClass.lpfnWndProc = Win32_MainWindowCallback; + WindowClass.hInstance = instance; + WindowClass.hCursor = LoadCursor(NULL, IDC_ARROW); + WindowClass.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH); + WindowClass.lpszClassName = k_WindowClassName; + if (RegisterClassExA(&WindowClass)) + { + DWORD style = WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_OVERLAPPEDWINDOW; + DWORD styleEx = 0; + + int x = CW_USEDEFAULT, y = CW_USEDEFAULT; + const int w = window->Width, h = window->Height; + HWND handle = CreateWindowExA(styleEx, k_WindowClassName, window->Title.Str, style, x, y, w, h, NULL, NULL, + instance, NULL); + + Win32_PumpEvents(self); + + if (Win32_SetupWindowState(self, window, handle)) + { + Assert(window->State != NULL); + result = true; + } + } + + return result; +} + +void Win32_DestroyPlatformWindow(DisplayDevice* self, Window* window) +{ + Assert(self != NULL); + Assert(window != NULL); + Win32_CleanUpWindowState(self, window); +} + +void Win32_ShowWindow(DisplayDevice* self, Window* window) +{ + (void)self; + Assert(window != NULL); + Assert(window->State != NULL); + + Window32State* win32State = (Window32State*)window->State; + ShowWindow(win32State->Handle, SW_SHOW); +} + +void Win32_HideWindow(DisplayDevice* self, Window* window) +{ + (void)self; + Assert(window != NULL); + Assert(window->State != NULL); + + Window32State* win32State = (Window32State*)window->State; + ShowWindow(win32State->Handle, SW_HIDE); +} + +void Win32_SetWindowTitle(DisplayDevice* self, Window* window, String title) +{ + (void)self; + Assert(window != NULL); + Assert(window->State != NULL); + + Window32State* win32State = (Window32State*)window->State; + SetWindowTextA(win32State->Handle, CStr(title)); +} diff --git a/Juliet/src/Core/HAL/Display/Win32/Win32Window.cpp b/Juliet/src/Core/HAL/Display/Win32/Win32Window.cpp deleted file mode 100644 index 80c9d92..0000000 --- a/Juliet/src/Core/HAL/Display/Win32/Win32Window.cpp +++ /dev/null @@ -1,104 +0,0 @@ -#include -#include -#include -#include -#include - -namespace Win32 -{ - namespace - { - constexpr auto WindowClassName = "JulietWindowClass"; - constexpr LPCSTR WindowClassPtr = WindowClassName; - - bool SetupWindowState(NonNullPtr /*self*/, NonNullPtr window, HWND handle) - { - auto* state = ArenaPushStruct(window->Arena); - - window->State = state; - state->Handle = handle; - state->Window = window; - state->HDC = GetDC(handle); - - state->IsMouseTracked = false; - - return true; - } - - void CleanUpWindowState(NonNullPtr /*self*/, NonNullPtr window) - { - auto* state = static_cast(window->State); - Assert(state); - ReleaseDC(state->Handle, state->HDC); - DestroyWindow(state->Handle); - window->State = nullptr; - } - } // namespace - - bool CreatePlatformWindow(NonNullPtr self, NonNullPtr window) - { - // TODO : save the instance in app state or something - HINSTANCE instance = GetModuleHandle(nullptr); - - // TODO : Put outside, we should not create a new class for each new window - WNDCLASSEXA WindowClass = {}; - WindowClass.cbSize = sizeof(WNDCLASSEX); - WindowClass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; - WindowClass.lpfnWndProc = Win32MainWindowCallback; - WindowClass.hInstance = instance; - WindowClass.hCursor = LoadCursor(nullptr, IDC_ARROW); - WindowClass.hbrBackground = static_cast(GetStockObject(LTGRAY_BRUSH)); - WindowClass.lpszClassName = WindowClassName; - if (!RegisterClassExA(&WindowClass)) - { - return false; - } - - DWORD style = WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_OVERLAPPEDWINDOW; - DWORD styleEx = 0; - - int x = CW_USEDEFAULT, y = CW_USEDEFAULT; - const int w = window->Width, h = window->Height; - HWND handle = CreateWindowExA(styleEx, WindowClassPtr, window->Title.Str, style, x, y, w, h, nullptr, nullptr, - instance, nullptr); - - PumpEvents(self); - - if (!SetupWindowState(self, window, handle)) - { - return false; - } - Assert(window->State); - - return true; - } - - void DestroyPlatformWindow(NonNullPtr self, NonNullPtr window) - { - CleanUpWindowState(self, window); - } - - void ShowWindow(NonNullPtr /*self*/, NonNullPtr window) - { - Assert(window); - Assert(window->State); - - auto& win32State = static_cast(*window->State); - ::ShowWindow(win32State.Handle, SW_SHOW); - } - - void HideWindow(NonNullPtr /*self*/, NonNullPtr window) - { - auto& win32State = static_cast(*window->State); - ::ShowWindow(win32State.Handle, SW_HIDE); - } - - void SetWindowTitle(NonNullPtr /*self*/, NonNullPtr window, String title) - { - Assert(window); - Assert(window->State); - - auto& win32State = static_cast(*window->State); - SetWindowTextA(win32State.Handle, CStr(title)); - } -} // namespace Win32 diff --git a/Juliet/src/Core/HAL/Display/Win32/Win32Window.h b/Juliet/src/Core/HAL/Display/Win32/Win32Window.h index 88d4d6b..767f092 100644 --- a/Juliet/src/Core/HAL/Display/Win32/Win32Window.h +++ b/Juliet/src/Core/HAL/Display/Win32/Win32Window.h @@ -1,26 +1,23 @@ -#pragma once +#pragma once -#include #include #include -struct DisplayDevice; -struct Window; +typedef struct DisplayDevice DisplayDevice; -namespace Win32 +// TODO : Evaluate if its worth the burden of casting to Window32State all the time +typedef struct Window32State Window32State; +struct Window32State { - // TODO : Evaluate if its worth the burden of casting to Window32State all the time - struct Window32State : WindowState - { - HWND Handle; - HDC HDC; + Window* Window; + HWND Handle; + HDC HDC; - bool IsMouseTracked : 1; - }; + bool8 IsMouseTracked : 1; +}; - extern bool CreatePlatformWindow(NonNullPtr self, NonNullPtr window); - extern void DestroyPlatformWindow(NonNullPtr self, NonNullPtr window); - extern void ShowWindow(NonNullPtr self, NonNullPtr window); - extern void HideWindow(NonNullPtr self, NonNullPtr window); - extern void SetWindowTitle(NonNullPtr self, NonNullPtr window, String title); -} // namespace Win32 +extern bool8 Win32_CreatePlatformWindow(DisplayDevice* self, Window* window); +extern void Win32_DestroyPlatformWindow(DisplayDevice* self, Window* window); +extern void Win32_ShowWindow(DisplayDevice* self, Window* window); +extern void Win32_HideWindow(DisplayDevice* self, Window* window); +extern void Win32_SetWindowTitle(DisplayDevice* self, Window* window, String title); diff --git a/Juliet/src/Core/HAL/Display/Window.h b/Juliet/src/Core/HAL/Display/Window.h index e7fe30d..77673cc 100644 --- a/Juliet/src/Core/HAL/Display/Window.h +++ b/Juliet/src/Core/HAL/Display/Window.h @@ -1,9 +1,10 @@ -#pragma once +#pragma once #include #include -struct Window; +typedef struct Window Window; +typedef struct WindowState WindowState; struct WindowState { Window* Window; diff --git a/Juliet/src/Core/HAL/DynLib/Win32/DynamicLibrary.c b/Juliet/src/Core/HAL/DynLib/Win32/DynamicLibrary.c new file mode 100644 index 0000000..21d8725 --- /dev/null +++ b/Juliet/src/Core/HAL/DynLib/Win32/DynamicLibrary.c @@ -0,0 +1,46 @@ +#include +#include +#include +#include + +DynamicLibrary* LoadDynamicLibrary(const char* filename) +{ + DynamicLibrary* result = NULL; + if (filename == NULL) + { + Log(LogLevel_Error, LogCategory_Core, "Library filename is invalid (empty)"); + } + else + { + HMODULE handle = LoadLibraryA(filename); + if (handle == NULL) + { + Log(LogLevel_Error, LogCategory_Core, "Failed loading %s", filename); + } + else + { + result = (DynamicLibrary*)handle; + } + } + return result; +} + +FunctionPtr LoadFunction(DynamicLibrary* lib, const char* functionName) +{ + Assert(lib != NULL); +#pragma warning(push) +#pragma warning(disable : 4191) + FunctionPtr function = (FunctionPtr)GetProcAddress((HMODULE)lib, functionName); + if (function == NULL) + { + Log(LogLevel_Error, LogCategory_Core, "Failed loading %s", functionName); + } + return function; +#pragma warning(pop) +} + +void UnloadDynamicLibrary(DynamicLibrary* lib) +{ + Assert(lib != NULL); + FreeLibrary((HMODULE)lib); +} diff --git a/Juliet/src/Core/HAL/DynLib/Win32/DynamicLibrary.cpp b/Juliet/src/Core/HAL/DynLib/Win32/DynamicLibrary.cpp deleted file mode 100644 index 6bd189e..0000000 --- a/Juliet/src/Core/HAL/DynLib/Win32/DynamicLibrary.cpp +++ /dev/null @@ -1,41 +0,0 @@ -#include -#include -#include -#include - -DynamicLibrary* LoadDynamicLibrary(const char* filename) -{ - if (!filename) - { - Log(LogLevel::Error, LogCategory::Core, "Library filename is invalid (empty)"); - return nullptr; - } - - HMODULE handle = LoadLibraryA(filename); - - // Generate an error message if all loads failed - if (!handle) - { - Log(LogLevel::Error, LogCategory::Core, "Failed loading %s", filename); - return nullptr; - } - return reinterpret_cast(handle); -} - -FunctionPtr LoadFunction(NonNullPtr lib, const char* functionName) -{ -#pragma warning(push) -#pragma warning(disable: 4191) // Disable "unsafe conversion from FARPROC" - auto function = reinterpret_cast(GetProcAddress(reinterpret_cast(lib.Get()), functionName)); - if (!function) - { - Log(LogLevel::Error, LogCategory::Core, "Failed loading %s", functionName); - } - return function; -#pragma warning(pop) -} - -void UnloadDynamicLibrary(NonNullPtr lib) -{ - FreeLibrary(reinterpret_cast(lib.Get())); -} diff --git a/Juliet/src/Core/HAL/Event/Keyboard.c b/Juliet/src/Core/HAL/Event/Keyboard.c new file mode 100644 index 0000000..32cf403 --- /dev/null +++ b/Juliet/src/Core/HAL/Event/Keyboard.c @@ -0,0 +1,210 @@ +#include +#include +#include + +typedef struct KeyboardState KeyboardState; +struct KeyboardState +{ + KeyState KeyState[ScanCode_Count]; + KeyMod KeyModState; +}; + +global KeyboardState g_KeyboardState = { 0 }; + +internal bool8 SendKeyboardKey_Internal(uint64 timestamp, KeyboardID ID, Key key, KeyPosition keyPosition) +{ + (void)ID; + Assert(key.KeyCode == KeyCode_Unknown); // At this point Keycode is not yet extracted + + bool8 result = false; + bool8 shouldSend = true; + EventType type = (keyPosition == KeyPosition_Down) ? EventType_Key_Down : EventType_Key_Up; + const bool8 isKeyDown = (keyPosition == KeyPosition_Down); + bool8 isKeyRepeat = false; + + if (key.ScanCode > ScanCode_Unknown && key.ScanCode < ScanCode_Count) + { + KeyState* currentKeyState = &g_KeyboardState.KeyState[key.ScanCode]; + + // If state didn't change, this is a key repeat + if (isKeyDown) + { + if (currentKeyState->Position == KeyPosition_Down) + { + isKeyRepeat = true; + } + } + else + { + if (currentKeyState->Position == KeyPosition_Up) + { + shouldSend = false; + } + } + + if (shouldSend) + { + currentKeyState->Position = keyPosition; + key.KeyCode = GetKeyCodeFromScanCode(key.ScanCode, g_KeyboardState.KeyModState); + } + } + else if (key.Raw == 0) + { + shouldSend = false; + } + + if (shouldSend) + { + if (!isKeyRepeat) + { + KeyMod newModifier = KeyMod_None; + + switch (key.KeyCode) + { + case KeyCode_LeftControl: + { + newModifier = KeyMod_LeftControl; + break; + } + case KeyCode_RightControl: + { + newModifier = KeyMod_RightControl; + break; + } + case KeyCode_LeftShift: + { + newModifier = KeyMod_LeftShift; + break; + } + case KeyCode_RightShift: + { + newModifier = KeyMod_RightShift; + break; + } + case KeyCode_LeftAlt: + { + newModifier = KeyMod_LeftAlt; + break; + } + case KeyCode_RightAlt: + { + newModifier = KeyMod_RightAlt; + break; + } + case KeyCode_LeftOSCommand: + { + newModifier = KeyMod_LeftOSCommand; + break; + } + case KeyCode_RightOSCommand: + { + newModifier = KeyMod_RightOSCommand; + break; + } + default: + { + newModifier = KeyMod_None; + break; + } + } + if (type == EventType_Key_Down) + { + switch (key.KeyCode) + { + case KeyCode_NumlockClear: + { + newModifier ^= KeyMod_NumLock; + break; + } + case KeyCode_CapsLock: + { + newModifier ^= KeyMod_CapsLock; + break; + } + case KeyCode_ScrollLock: + { + newModifier ^= KeyMod_ScrollLock; + break; + } + default: + { + g_KeyboardState.KeyModState |= newModifier; + break; + } + } + } + else + { + // Remove from any keymod not pressed from the modifier + g_KeyboardState.KeyModState &= ~newModifier; + } + } + + SystemEvent evt = { 0 }; + evt.Timestamp = timestamp; + evt.Type = type; + evt.Data.Keyboard.AssociatedKeyboardID = kGlobalKeyboardID; + evt.Data.Keyboard.Key = key; + evt.Data.Keyboard.KeyState = (KeyState){ keyPosition, 0.0f }; + evt.Data.Keyboard.KeyModeState = g_KeyboardState.KeyModState; + + result = AddEvent(&evt); + } + + return result; +} + +bool8 SendKeyboardKey(uint64 timestamp, KeyboardID ID, Key key, KeyPosition keyPosition) +{ + return SendKeyboardKey_Internal(timestamp, ID, key, keyPosition); +} + +void UpdateKeyboardstate(float deltaTime) +{ + for (size_t i = 0; i < ArraySize(g_KeyboardState.KeyState); ++i) + { + KeyState* state = &g_KeyboardState.KeyState[i]; + if (state->Position == KeyPosition_Down) + { + if (state->Time < 0.0f) + { + state->Time = 0.0f; + } + else + { + state->Time += deltaTime; + } + } + else + { + state->Time = -1.0f; + } + } +} + +bool8 IsKeyDown(ScanCode scanCode) +{ + return g_KeyboardState.KeyState[scanCode].Position == KeyPosition_Down; +} + +bool8 IsKeyPressed(ScanCode scanCode) +{ + KeyState* keyState = &g_KeyboardState.KeyState[scanCode]; + return keyState->Position == KeyPosition_Down && keyState->Time == 0.0f; +} + +KeyMod GetKeyModState(void) +{ + return g_KeyboardState.KeyModState; +} + +KeyCode GetKeyCodeFromScanCode(ScanCode scanCode, KeyMod keyModState) +{ + return GetKeyCodeFromDefaultMapping(scanCode, keyModState); +} + +StaticAssert(sizeof(KeyPosition) == sizeof(bool8), KeyPositionSizeCheck); +StaticAssert(KeyPosition_Down == true, KeyPositionDownCheck); +StaticAssert(KeyPosition_Up == false, KeyPositionUpCheck); +StaticAssert(sizeof(ScanCode) == sizeof(uint16), ScanCodeSizeCheck); +StaticAssert(ScanCode_Count == 512, ScanCodeCountCheck); diff --git a/Juliet/src/Core/HAL/Event/Keyboard.cpp b/Juliet/src/Core/HAL/Event/Keyboard.cpp deleted file mode 100644 index e2eb1fd..0000000 --- a/Juliet/src/Core/HAL/Event/Keyboard.cpp +++ /dev/null @@ -1,162 +0,0 @@ -#include -#include -#include -#include - -constexpr KeyboardID kGlobalKeyboardID = 0; - -namespace -{ - struct KeyboardState - { - KeyState KeyState[ToUnderlying(ScanCode::Count)]; - KeyMod KeyModState; - } KeyboardState; - - bool SendKeyboardKey_Internal(uint64 timestamp, KeyboardID /*ID*/, Key key, KeyPosition keyPosition) - { - Assert(key.KeyCode == KeyCode::Unknown); // At this point Keycode is not yet extracted - - auto& keyboardState = KeyboardState; // Needed because MSVC debugger ignores variable in anonymouse namespace - - auto type = EventType::None; - const bool isKeyDown = keyPosition == KeyPosition::Down; - if (isKeyDown) - { - type = EventType::Key_Down; - } - else - { - type = EventType::Key_Up; - } - - bool isKeyRepeat = false; - if (key.ScanCode > ScanCode::Unknown && key.ScanCode < ScanCode::Count) - { - auto& currentKeyState = keyboardState.KeyState[ToUnderlying(key.ScanCode)]; - - // If state didn't change, this is a key repeat - if (isKeyDown) - { - if (currentKeyState.Position == KeyPosition::Down) - { - isKeyRepeat = true; - } - } - else - { - if (currentKeyState.Position == KeyPosition::Up) - { - return false; - } - } - - currentKeyState.Position = keyPosition; - key.KeyCode = GetKeyCodeFromScanCode(key.ScanCode, keyboardState.KeyModState); - } - else if (key.Raw == 0) - { - return false; - } - - if (!isKeyRepeat) - { - KeyMod newModifier = {}; - - switch (key.KeyCode) - { - case KeyCode::LeftControl: newModifier = KeyMod::LeftControl; break; - case KeyCode::RightControl: newModifier = KeyMod::RightControl; break; - case KeyCode::LeftShift: newModifier = KeyMod::LeftShift; break; - case KeyCode::RightShift: newModifier = KeyMod::RightShift; break; - case KeyCode::LeftAlt: newModifier = KeyMod::LeftAlt; break; - case KeyCode::RightAlt: newModifier = KeyMod::RightAlt; break; - case KeyCode::LeftOSCommand: newModifier = KeyMod::LeftOSCommand; break; - case KeyCode::RightOSCommand: newModifier = KeyMod::RightOSCommand; break; - default: newModifier = KeyMod::None; break; - } - if (type == EventType::Key_Down) - { - switch (key.KeyCode) - { - case KeyCode::NumlockClear: newModifier ^= KeyMod::NumLock; break; - case KeyCode::CapsLock: newModifier ^= KeyMod::CapsLock; break; - case KeyCode::ScrollLock: newModifier ^= KeyMod::ScrollLock; break; - default: keyboardState.KeyModState |= newModifier; - } - } - else - { - // Remove from any keymod not pressed from the modifier - keyboardState.KeyModState &= ~newModifier; - } - } - - SystemEvent evt; - evt.Timestamp = timestamp; - evt.Type = type; - evt.Data.Keyboard.AssociatedKeyboardID = kGlobalKeyboardID; - evt.Data.Keyboard.Key = key; - evt.Data.Keyboard.KeyState = { keyPosition, 0.0f }; - evt.Data.Keyboard.KeyModeState = keyboardState.KeyModState; - - bool evtPosted = AddEvent(evt); - - return evtPosted; - } -} // namespace - -bool SendKeyboardKey(uint64 timestamp, KeyboardID ID, Key key, KeyPosition keyPosition) -{ - return SendKeyboardKey_Internal(timestamp, ID, key, keyPosition); -} - -void UpdateKeyboardstate(float deltaTime) -{ - for (KeyState& state : KeyboardState.KeyState) - { - if (state.Position == KeyPosition::Down) - { - if (state.Time < 0.0f) - { - state.Time = 0.0f; - } - else - { - state.Time += deltaTime; - } - } - else - { - state.Time = -1.0f; - } - } -} - -bool IsKeyDown(ScanCode scanCode) -{ - return KeyboardState.KeyState[ToUnderlying(scanCode)].Position == KeyPosition::Down; -} - -bool IsKeyPressed(ScanCode scanCode) -{ - auto& keyState = KeyboardState.KeyState[ToUnderlying(scanCode)]; - return keyState.Position == KeyPosition::Down && keyState.Time == 0.0f; -} - -KeyMod GetKeyModState() -{ - auto& keyboardState = KeyboardState; - return keyboardState.KeyModState; -} - -KeyCode GetKeyCodeFromScanCode(ScanCode scanCode, KeyMod keyModState) -{ - return GetKeyCodeFromDefaultMapping(scanCode, keyModState); -} - -static_assert(sizeof(KeyPosition) == sizeof(bool)); -static_assert(ToUnderlying(KeyPosition::Down) == true); -static_assert(ToUnderlying(KeyPosition::Up) == false); -static_assert(sizeof(ScanCode) == sizeof(uint16)); -static_assert(ToUnderlying(ScanCode::Count) == 512); diff --git a/Juliet/src/Core/HAL/Event/KeyboardMapping.c b/Juliet/src/Core/HAL/Event/KeyboardMapping.c new file mode 100644 index 0000000..f180172 --- /dev/null +++ b/Juliet/src/Core/HAL/Event/KeyboardMapping.c @@ -0,0 +1,207 @@ +#include +#include +#include +#include + +// clang-format off +global KeyCode g_UnshiftedDefaultSymbols[] = { + KeyCode_Num1, + KeyCode_Num2, + KeyCode_Num3, + KeyCode_Num4, + KeyCode_Num5, + KeyCode_Num6, + KeyCode_Num7, + KeyCode_Num8, + KeyCode_Num9, + KeyCode_Num0, + KeyCode_Return, + KeyCode_Escape, + KeyCode_Backspace, + KeyCode_Tab, + KeyCode_Space, + KeyCode_Minus, + KeyCode_Equals, + KeyCode_LeftBracket, + KeyCode_RightBracket, + KeyCode_Backslash, + KeyCode_Hash, + KeyCode_Semicolon, + KeyCode_Apostrophe, + KeyCode_GraveAccent, + KeyCode_Comma, + KeyCode_Period, + KeyCode_Slash, +}; + +global KeyCode g_ShiftedDefaultSymbols[] = { + KeyCode_ExclamationPoint, + KeyCode_CommercialAt, + KeyCode_Hash, + KeyCode_Dollar, + KeyCode_Percent, + KeyCode_Caret, + KeyCode_Ampersand, + KeyCode_Asterisk, + KeyCode_LeftParenthesis, + KeyCode_RightParenthesis, + KeyCode_Return, + KeyCode_Escape, + KeyCode_Backspace, + KeyCode_Tab, + KeyCode_Space, + KeyCode_Underscore, + KeyCode_Plus, + KeyCode_LeftBrace, + KeyCode_RightBrace, + KeyCode_Pipe, + KeyCode_Hash, + KeyCode_Colon, + KeyCode_DoubleApostrophe, + KeyCode_Tilde, + KeyCode_LessThan, + KeyCode_GreaterThan, + KeyCode_QuestionMark, +}; +// clang-format on + +internal KeyCode GetNonPrintableKeys(ScanCode scanCode) +{ + KeyCode result = KeyCode_Unknown; + switch (scanCode) + { + case ScanCode_Delete: result = KeyCode_Delete; break; + case ScanCode_CapsLock: result = KeyCode_CapsLock; break; + case ScanCode_F1: result = KeyCode_F1; break; + case ScanCode_F2: result = KeyCode_F2; break; + case ScanCode_F3: result = KeyCode_F3; break; + case ScanCode_F4: result = KeyCode_F4; break; + case ScanCode_F5: result = KeyCode_F5; break; + case ScanCode_F6: result = KeyCode_F6; break; + case ScanCode_F7: result = KeyCode_F7; break; + case ScanCode_F8: result = KeyCode_F8; break; + case ScanCode_F9: result = KeyCode_F9; break; + case ScanCode_F10: result = KeyCode_F10; break; + case ScanCode_F11: result = KeyCode_F11; break; + case ScanCode_F12: result = KeyCode_F12; break; + case ScanCode_PrintScreen: result = KeyCode_PrintScreen; break; + case ScanCode_ScrollLock: result = KeyCode_ScrollLock; break; + case ScanCode_Pause: result = KeyCode_Pause; break; + case ScanCode_Insert: result = KeyCode_Insert; break; + case ScanCode_Home: result = KeyCode_Home; break; + case ScanCode_PageUp: result = KeyCode_PageUp; break; + case ScanCode_End: result = KeyCode_End; break; + case ScanCode_PageDown: result = KeyCode_PageDown; break; + case ScanCode_RightArrow: result = KeyCode_RightArrow; break; + case ScanCode_LeftArrow: result = KeyCode_LeftArrow; break; + case ScanCode_DownArrow: result = KeyCode_DownArrow; break; + case ScanCode_UpArrow: result = KeyCode_UpArrow; break; + case ScanCode_NumlockClear: result = KeyCode_NumlockClear; break; + case ScanCode_KeyPad_Divide: result = KeyCode_KeyPad_Divide; break; + case ScanCode_KeyPad_Multiply: result = KeyCode_KeyPad_Multiply; break; + case ScanCode_KeyPad_Minus: result = KeyCode_KeyPad_Minus; break; + case ScanCode_KeyPad_Plus: result = KeyCode_KeyPad_Plus; break; + case ScanCode_KeyPad_Enter: result = KeyCode_KeyPad_Enter; break; + case ScanCode_KeyPad_Num1: result = KeyCode_KeyPad_Num1; break; + case ScanCode_KeyPad_Num2: result = KeyCode_KeyPad_Num2; break; + case ScanCode_KeyPad_Num3: result = KeyCode_KeyPad_Num3; break; + case ScanCode_KeyPad_Num4: result = KeyCode_KeyPad_Num4; break; + case ScanCode_KeyPad_Num5: result = KeyCode_KeyPad_Num5; break; + case ScanCode_KeyPad_Num6: result = KeyCode_KeyPad_Num6; break; + case ScanCode_KeyPad_Num7: result = KeyCode_KeyPad_Num7; break; + case ScanCode_KeyPad_Num8: result = KeyCode_KeyPad_Num8; break; + case ScanCode_KeyPad_Num9: result = KeyCode_KeyPad_Num9; break; + case ScanCode_KeyPad_Num0: result = KeyCode_KeyPad_Num0; break; + case ScanCode_KeyPad_Period: result = KeyCode_KeyPad_Period; break; + case ScanCode_Power: result = KeyCode_Power; break; + case ScanCode_KeyPad_Equals: result = KeyCode_KeyPad_Equals; break; + case ScanCode_F13: result = KeyCode_F13; break; + case ScanCode_F14: result = KeyCode_F14; break; + case ScanCode_F15: result = KeyCode_F15; break; + case ScanCode_F16: result = KeyCode_F16; break; + case ScanCode_F17: result = KeyCode_F17; break; + case ScanCode_F18: result = KeyCode_F18; break; + case ScanCode_F19: result = KeyCode_F19; break; + case ScanCode_F20: result = KeyCode_F20; break; + case ScanCode_F21: result = KeyCode_F21; break; + case ScanCode_F22: result = KeyCode_F22; break; + case ScanCode_F23: result = KeyCode_F23; break; + case ScanCode_F24: result = KeyCode_F24; break; + case ScanCode_Mute: result = KeyCode_Mute; break; + case ScanCode_VolumeUp: result = KeyCode_VolumeUp; break; + case ScanCode_VolumeDown: result = KeyCode_VolumeDown; break; + case ScanCode_KeyPad_Comma: result = KeyCode_KeyPad_Comma; break; + case ScanCode_LeftControl: result = KeyCode_LeftControl; break; + case ScanCode_LeftShift: result = KeyCode_LeftShift; break; + case ScanCode_LeftAlt: result = KeyCode_LeftAlt; break; + case ScanCode_LeftOSCommand: result = KeyCode_LeftOSCommand; break; + case ScanCode_RightControl: result = KeyCode_RightControl; break; + case ScanCode_RightShift: result = KeyCode_RightShift; break; + case ScanCode_RightAlt: result = KeyCode_RightAlt; break; + case ScanCode_RightOSCommand: result = KeyCode_RightOSCommand; break; + case ScanCode_Sleep: result = KeyCode_Sleep; break; + case ScanCode_WakeUp: result = KeyCode_WakeUp; break; + case ScanCode_Media_NextTrack: result = KeyCode_Media_NextTrack; break; + case ScanCode_Media_PreviousTrack: result = KeyCode_Media_PreviousTrack; break; + case ScanCode_Media_Stop: result = KeyCode_Media_Stop; break; + case ScanCode_Media_Eject: result = KeyCode_Media_Eject; break; + case ScanCode_Media_PlayPause: result = KeyCode_Media_PlayPause; break; + case ScanCode_Media_Select: result = KeyCode_Media_Select; break; + default: result = KeyCode_Unknown; break; + } + return result; +} + +KeyCode GetKeyCodeFromDefaultMapping(ScanCode scanCode, KeyMod keyModState) +{ + KeyCode result = KeyCode_Unknown; + + if (scanCode <= ScanCode_Unknown || scanCode > ScanCode_Count) + { + Assert(false && "Unsupported KeyCode (out of bounds)"); + } + else if (scanCode < ScanCode_A) + { + result = KeyCode_Unknown; + } + else if (scanCode <= ScanCode_Z) + { + // Handles A-Z characters + const uint32 index = (uint32)(scanCode - ScanCode_A); + bool8 isShiftPressed = (keyModState & KeyMod_Shift) != KeyMod_None; + if ((keyModState & KeyMod_CapsLock) != KeyMod_None) + { + isShiftPressed = !isShiftPressed; + } + + if (isShiftPressed) + { + result = (KeyCode)((uint32)'A' + index); + } + else + { + result = (KeyCode)((uint32)'a' + index); + } + } + else if (scanCode <= ScanCode_Num0) + { + // Handles Num1 to Num0 + const uint32 index = (uint32)(scanCode - ScanCode_Num1); + const bool8 isShiftPressed = (keyModState & KeyMod_Shift) != KeyMod_None; + if (isShiftPressed) + { + result = g_ShiftedDefaultSymbols[index]; + } + else + { + result = g_UnshiftedDefaultSymbols[index]; + } + } + else + { + // Handle everything else (characters that do not convert to ASCII code) + result = GetNonPrintableKeys(scanCode); + } + + return result; +} diff --git a/Juliet/src/Core/HAL/Event/KeyboardMapping.cpp b/Juliet/src/Core/HAL/Event/KeyboardMapping.cpp deleted file mode 100644 index d63e2fa..0000000 --- a/Juliet/src/Core/HAL/Event/KeyboardMapping.cpp +++ /dev/null @@ -1,201 +0,0 @@ -#include -#include -#include -#include -#include - -namespace -{ - // clang-format off - KeyCode UnshiftedDefaultSymbols[] = { - KeyCode::Num1, - KeyCode::Num2, - KeyCode::Num3, - KeyCode::Num4, - KeyCode::Num5, - KeyCode::Num6, - KeyCode::Num7, - KeyCode::Num8, - KeyCode::Num9, - KeyCode::Num0, - KeyCode::Return, - KeyCode::Escape, - KeyCode::Backspace, - KeyCode::Tab, - KeyCode::Space, - KeyCode::Minus, - KeyCode::Equals, - KeyCode::LeftBracket, - KeyCode::RightBracket, - KeyCode::Backslash, - KeyCode::Hash, - KeyCode::Semicolon, - KeyCode::Apostrophe, - KeyCode::GraveAccent, - KeyCode::Comma, - KeyCode::Period, - KeyCode::Slash, - }; - - KeyCode ShiftedDefaultSymbols[] = { - KeyCode::ExclamationPoint, - KeyCode::CommercialAt, - KeyCode::Hash, - KeyCode::Dollar, - KeyCode::Percent, - KeyCode::Caret, - KeyCode::Ampersand, - KeyCode::Asterisk, - KeyCode::LeftParenthesis, - KeyCode::RightParenthesis, - KeyCode::Return, - KeyCode::Escape, - KeyCode::Backspace, - KeyCode::Tab, - KeyCode::Space, - KeyCode::Underscore, - KeyCode::Plus, - KeyCode::LeftBrace, - KeyCode::RightBrace, - KeyCode::Pipe, - KeyCode::Hash, - KeyCode::Colon, - KeyCode::DoubleApostrophe, - KeyCode::Tilde, - KeyCode::LessThan, - KeyCode::GreaterThan, - KeyCode::QuestionMark, - }; - // clang-format on - - KeyCode GetNonPrintableKeys(ScanCode scanCode) - { - switch (scanCode) - { - case ScanCode::Delete: return KeyCode::Delete; - case ScanCode::CapsLock: return KeyCode::CapsLock; - case ScanCode::F1: return KeyCode::F1; - case ScanCode::F2: return KeyCode::F2; - case ScanCode::F3: return KeyCode::F3; - case ScanCode::F4: return KeyCode::F4; - case ScanCode::F5: return KeyCode::F5; - case ScanCode::F6: return KeyCode::F6; - case ScanCode::F7: return KeyCode::F7; - case ScanCode::F8: return KeyCode::F8; - case ScanCode::F9: return KeyCode::F9; - case ScanCode::F10: return KeyCode::F10; - case ScanCode::F11: return KeyCode::F11; - case ScanCode::F12: return KeyCode::F12; - case ScanCode::PrintScreen: return KeyCode::PrintScreen; - case ScanCode::ScrollLock: return KeyCode::ScrollLock; - case ScanCode::Pause: return KeyCode::Pause; - case ScanCode::Insert: return KeyCode::Insert; - case ScanCode::Home: return KeyCode::Home; - case ScanCode::PageUp: return KeyCode::PageUp; - case ScanCode::End: return KeyCode::End; - case ScanCode::PageDown: return KeyCode::PageDown; - case ScanCode::RightArrow: return KeyCode::RightArrow; - case ScanCode::LeftArrow: return KeyCode::LeftArrow; - case ScanCode::DownArrow: return KeyCode::DownArrow; - case ScanCode::UpArrow: return KeyCode::UpArrow; - case ScanCode::NumlockClear: return KeyCode::NumlockClear; - case ScanCode::KeyPad_Divide: return KeyCode::KeyPad_Divide; - case ScanCode::KeyPad_Multiply: return KeyCode::KeyPad_Multiply; - case ScanCode::KeyPad_Minus: return KeyCode::KeyPad_Minus; - case ScanCode::KeyPad_Plus: return KeyCode::KeyPad_Plus; - case ScanCode::KeyPad_Enter: return KeyCode::KeyPad_Enter; - case ScanCode::KeyPad_Num1: return KeyCode::KeyPad_Num1; - case ScanCode::KeyPad_Num2: return KeyCode::KeyPad_Num2; - case ScanCode::KeyPad_Num3: return KeyCode::KeyPad_Num3; - case ScanCode::KeyPad_Num4: return KeyCode::KeyPad_Num4; - case ScanCode::KeyPad_Num5: return KeyCode::KeyPad_Num5; - case ScanCode::KeyPad_Num6: return KeyCode::KeyPad_Num6; - case ScanCode::KeyPad_Num7: return KeyCode::KeyPad_Num7; - case ScanCode::KeyPad_Num8: return KeyCode::KeyPad_Num8; - case ScanCode::KeyPad_Num9: return KeyCode::KeyPad_Num9; - case ScanCode::KeyPad_Num0: return KeyCode::KeyPad_Num0; - case ScanCode::KeyPad_Period: return KeyCode::KeyPad_Period; - case ScanCode::Power: return KeyCode::Power; - case ScanCode::KeyPad_Equals: return KeyCode::KeyPad_Equals; - case ScanCode::F13: return KeyCode::F13; - case ScanCode::F14: return KeyCode::F14; - case ScanCode::F15: return KeyCode::F15; - case ScanCode::F16: return KeyCode::F16; - case ScanCode::F17: return KeyCode::F17; - case ScanCode::F18: return KeyCode::F18; - case ScanCode::F19: return KeyCode::F19; - case ScanCode::F20: return KeyCode::F20; - case ScanCode::F21: return KeyCode::F21; - case ScanCode::F22: return KeyCode::F22; - case ScanCode::F23: return KeyCode::F23; - case ScanCode::F24: return KeyCode::F24; - case ScanCode::Mute: return KeyCode::Mute; - case ScanCode::VolumeUp: return KeyCode::VolumeUp; - case ScanCode::VolumeDown: return KeyCode::VolumeDown; - case ScanCode::KeyPad_Comma: return KeyCode::KeyPad_Comma; - case ScanCode::LeftControl: return KeyCode::LeftControl; - case ScanCode::LeftShift: return KeyCode::LeftShift; - case ScanCode::LeftAlt: return KeyCode::LeftAlt; - case ScanCode::LeftOSCommand: return KeyCode::LeftOSCommand; - case ScanCode::RightControl: return KeyCode::RightControl; - case ScanCode::RightShift: return KeyCode::RightShift; - case ScanCode::RightAlt: return KeyCode::RightAlt; - case ScanCode::RightOSCommand: return KeyCode::RightOSCommand; - case ScanCode::Sleep: return KeyCode::Sleep; - case ScanCode::WakeUp: return KeyCode::WakeUp; - case ScanCode::Media_NextTrack: return KeyCode::Media_NextTrack; - case ScanCode::Media_PreviousTrack: return KeyCode::Media_PreviousTrack; - case ScanCode::Media_Stop: return KeyCode::Media_Stop; - case ScanCode::Media_Eject: return KeyCode::Media_Eject; - case ScanCode::Media_PlayPause: return KeyCode::Media_PlayPause; - case ScanCode::Media_Select: return KeyCode::Media_Select; - default: return KeyCode::Unknown; - } - } -} // namespace - -KeyCode GetKeyCodeFromDefaultMapping(ScanCode scanCode, KeyMod keyModState) -{ - if (scanCode <= ScanCode::Unknown || scanCode > ScanCode::Count) - { - Assert(false , "Unsupported KeyCode (out of bounds)"); - return KeyCode::Unknown; - } - - if (scanCode < ScanCode::A) - { - return KeyCode::Unknown; - } - - // Handles A-Z characters - if (scanCode <= ScanCode::Z) - { - const auto index = scanCode - ScanCode::A; - bool isShiftPressed = (keyModState & KeyMod::Shift) != KeyMod::None; - if ((keyModState & KeyMod::CapsLock) != KeyMod::None) - { - isShiftPressed = !isShiftPressed; - } - - if (isShiftPressed) - { - return ToEnum(static_cast('A') + index); - } - return ToEnum(static_cast('a') + index); - } - - // Handles Num1 to Num0 - if (scanCode <= ScanCode::Num0) - { - const auto index = scanCode - ScanCode::Num1; - const bool isShiftPressed = (keyModState & KeyMod::Shift) != KeyMod::None; - if (isShiftPressed) - { - return ShiftedDefaultSymbols[index]; - } - return UnshiftedDefaultSymbols[index]; - } - - // Handle everything else (characters that do not convert to ASCII code) - return GetNonPrintableKeys(scanCode); -} diff --git a/Juliet/src/Core/HAL/Event/KeyboardMapping.h b/Juliet/src/Core/HAL/Event/KeyboardMapping.h index 494d64a..2dbeb68 100644 --- a/Juliet/src/Core/HAL/Event/KeyboardMapping.h +++ b/Juliet/src/Core/HAL/Event/KeyboardMapping.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once #include #include diff --git a/Juliet/src/Core/HAL/Event/Keyboard_Private.h b/Juliet/src/Core/HAL/Event/Keyboard_Private.h index 42a7094..62f49dc 100644 --- a/Juliet/src/Core/HAL/Event/Keyboard_Private.h +++ b/Juliet/src/Core/HAL/Event/Keyboard_Private.h @@ -1,9 +1,9 @@ -#pragma once +#pragma once -#include #include +#include -extern bool SendKeyboardKey(uint64 timestamp, KeyboardID ID, Key key, KeyPosition keyPosition); -extern void UpdateKeyboardstate(float deltaTime); +extern bool8 SendKeyboardKey(uint64 timestamp, KeyboardID ID, Key key, KeyPosition keyPosition); +extern void UpdateKeyboardstate(float deltaTime); -extern const KeyboardID kGlobalKeyboardID; +#define kGlobalKeyboardID ((KeyboardID)0) diff --git a/Juliet/src/Core/HAL/Event/Mouse.c b/Juliet/src/Core/HAL/Event/Mouse.c new file mode 100644 index 0000000..1c3a7e4 --- /dev/null +++ b/Juliet/src/Core/HAL/Event/Mouse.c @@ -0,0 +1,149 @@ +#include +#include +#include +#include + +global Mouse g_MouseState = { 0 }; + +internal void ConstraintMousePositionToWindow(Mouse* mouseState, Window* window, float* x, float* y) +{ + Assert(mouseState != NULL); + Assert(window != NULL); + Assert(x != NULL); + Assert(y != NULL); + + float x_min = 0.f, x_max = (float)(window->Width - 1); + float y_min = 0.f, y_max = (float)(window->Height - 1); + + if (*x >= (x_max + 1)) + { + *x = Max(x_max, mouseState->X_Previous); + } + *x = Max(*x, x_min); + + if (*y >= (y_max + 1)) + { + *y = Max(y_max, mouseState->Y_Previous); + } + *y = Max(*y, y_min); +} + +internal void SendMouseMotion_Internal(uint64 timestamp, Window* window, MouseID mouseID, float x, float y) +{ + Assert(window != NULL); + Mouse* mouseState = GetMouseState(); + float xDisplacement = 0.0f; + float yDisplacement = 0.0f; + + ConstraintMousePositionToWindow(mouseState, window, &x, &y); + + if (mouseState->HasPosition) + { + xDisplacement = x - mouseState->X_Previous; + yDisplacement = y - mouseState->Y_Previous; + } + + if (!(mouseState->HasPosition && xDisplacement == 0.0f && yDisplacement == 0.0f)) + { + mouseState->X = x; + mouseState->Y = y; + mouseState->HasPosition = true; + + mouseState->X_Previous = x; + mouseState->Y_Previous = y; + + mouseState->DeltaX += xDisplacement; + mouseState->DeltaY += yDisplacement; + + SystemEvent evt = { 0 }; + evt.Type = EventType_Mouse_Move; + evt.Timestamp = timestamp; + evt.Data.MouseMovement.WindowID = window->ID; + evt.Data.MouseMovement.AssociatedMouseID = mouseID; + evt.Data.MouseMovement.X = x; + evt.Data.MouseMovement.Y = y; + evt.Data.MouseMovement.X_Displacement = xDisplacement; + evt.Data.MouseMovement.Y_Displacement = yDisplacement; + evt.Data.MouseMovement.ButtonState = mouseState->ButtonState; + AddEvent(&evt); + } +} + +Mouse* GetMouseState(void) +{ + return &g_MouseState; +} + +void SendMouseMotion(uint64 timestamp, Window* window, MouseID ID, float x, float y) +{ + Assert(window != NULL); + // TODO : Update Mouse focus and send Mouse Enter / Mouse Leave event + + SendMouseMotion_Internal(timestamp, window, ID, x, y); +} + +void SendMouseButton(uint64 timestamp, Window* window, MouseID mouseID, MouseButton button, bool8 pressed) +{ + Assert(window != NULL); + Mouse* mouseState = GetMouseState(); + MouseButton flags = mouseState->ButtonState; + + EventType type = EventType_None; + if (pressed) + { + type = EventType_Mouse_ButtonPressed; + flags |= button; + } + else + { + type = EventType_Mouse_ButtonReleased; + flags = flags & ~button; + } + + if (flags != mouseState->ButtonState) + { + mouseState->ButtonState = flags; + + SystemEvent evt = { 0 }; + evt.Timestamp = timestamp; + evt.Type = type; + evt.Data.MouseButton.AssociatedMouseID = mouseID; + evt.Data.MouseButton.WindowID = window->ID; + evt.Data.MouseButton.ButtonState = button; + evt.Data.MouseButton.X = mouseState->X; + evt.Data.MouseButton.Y = mouseState->Y; + evt.Data.MouseButton.IsPressed = pressed; + AddEvent(&evt); + } +} + +bool8 IsMouseButtonDown(MouseButton button) +{ + Mouse* mouseState = GetMouseState(); + return (mouseState->ButtonState & button) != MouseButton_None; +} + +MousePosition GetMousePosition(void) +{ + Mouse* mouseState = GetMouseState(); + return (MousePosition){ .X = mouseState->X, .Y = mouseState->Y }; +} + +MousePosition GetMouseDelta(void) +{ + Mouse* mouseState = GetMouseState(); + return (MousePosition){ .X = mouseState->DeltaX, .Y = mouseState->DeltaY }; +} + +MouseButton GetMouseButtonState(void) +{ + Mouse* mouseState = GetMouseState(); + return mouseState->ButtonState; +} + +void UpdateMouseState(void) +{ + Mouse* mouseState = GetMouseState(); + mouseState->DeltaX = 0.0f; + mouseState->DeltaY = 0.0f; +} diff --git a/Juliet/src/Core/HAL/Event/Mouse.cpp b/Juliet/src/Core/HAL/Event/Mouse.cpp deleted file mode 100644 index 28ca680..0000000 --- a/Juliet/src/Core/HAL/Event/Mouse.cpp +++ /dev/null @@ -1,155 +0,0 @@ -#include -#include -#include -#include -#include - -namespace -{ - Mouse MouseState; - - void ConstraintMousePositionToWindow(Mouse& mouseState, Window* window, float& x, float& y) - { - float x_min = 0.f, x_max = (float)(window->Width - 1); - float y_min = 0.f, y_max = (float)(window->Height - 1); - - if (x >= (x_max + 1)) - { - x = std::max(x_max, mouseState.X_Previous); - } - x = std::max(x, x_min); - - if (y >= (y_max + 1)) - { - y = std::max(y_max, mouseState.Y_Previous); - } - y = std::max(y, y_min); - } - - void SendMouseMotion_Internal(uint64 timestamp, Window* window, MouseID mouseID, float x, float y) - { - auto& mouseState = GetMouseState(); - float xDisplacement = 0.0f; - float yDisplacement = 0.0f; - - ConstraintMousePositionToWindow(mouseState, window, x, y); - - if (mouseState.HasPosition) - { - xDisplacement = x - mouseState.X_Previous; - yDisplacement = y - mouseState.Y_Previous; - } - - if (mouseState.HasPosition && xDisplacement == 0.0f && yDisplacement == 0.0f) - { - // Skip it because state didnt change - return; - } - - mouseState.X = x; - mouseState.Y = y; - mouseState.HasPosition = true; - - mouseState.X_Previous = x; - mouseState.Y_Previous = y; - - mouseState.DeltaX += xDisplacement; - mouseState.DeltaY += yDisplacement; - - SystemEvent evt; - evt.Type = EventType::Mouse_Move; - evt.Timestamp = timestamp; - evt.Data.MouseMovement.WindowID = window->ID; - evt.Data.MouseMovement.AssociatedMouseID = mouseID; - evt.Data.MouseMovement.X = x; - evt.Data.MouseMovement.Y = y; - evt.Data.MouseMovement.X_Displacement = xDisplacement; - evt.Data.MouseMovement.Y_Displacement = yDisplacement; - evt.Data.MouseMovement.ButtonState = mouseState.ButtonState; - AddEvent(evt); - } - -} // namespace - -constexpr MouseID kGlobalMouseID = 0; - -Mouse& GetMouseState() -{ - return MouseState; -} - -void SendMouseMotion(uint64 timestamp, NonNullPtr window, MouseID ID, float x, float y) -{ - // TODO : Update Mouse focus and send Mouse Enter / Mouse Leave event - - SendMouseMotion_Internal(timestamp, window, ID, x, y); -} - -void SendMouseButton(uint64 timestamp, NonNullPtr window, MouseID mouseID, MouseButton button, bool pressed) -{ - Mouse& mouseState = GetMouseState(); - MouseButton flags = mouseState.ButtonState; - - auto type = EventType::None; - if (pressed) - { - type = EventType::Mouse_ButtonPressed; - flags |= button; - } - else - { - type = EventType::Mouse_ButtonReleased; - flags = flags & ~button; - } - - if (flags == mouseState.ButtonState) - { - return; - } - - mouseState.ButtonState = flags; - - // TODO : Send Event! - SystemEvent evt; - evt.Timestamp = timestamp; - evt.Type = type; - evt.Data.MouseButton.AssociatedMouseID = mouseID; - evt.Data.MouseButton.WindowID = window->ID; - evt.Data.MouseButton.ButtonState = button; - evt.Data.MouseButton.X = mouseState.X; - evt.Data.MouseButton.Y = mouseState.Y; - evt.Data.MouseButton.IsPressed = pressed; - AddEvent(evt); -} - -bool IsMouseButtonDown(MouseButton button) -{ - auto& mouseState = GetMouseState(); - return (mouseState.ButtonState & button) != MouseButton::None; -} - -MousePosition GetMousePosition() -{ - auto& mouseState = GetMouseState(); - return { .X = mouseState.X, .Y = mouseState.Y }; -} - -MousePosition GetMouseDelta() -{ - auto& mouseState = GetMouseState(); - return { .X = mouseState.DeltaX, .Y = mouseState.DeltaY }; -} - -MouseButton GetMouseButtonState() -{ - const auto& mouseState = GetMouseState(); - return mouseState.ButtonState; -} - -void UpdateMouseState() -{ - auto& mouseState = GetMouseState(); - mouseState.DeltaX = 0.0f; - mouseState.DeltaY = 0.0f; -} - diff --git a/Juliet/src/Core/HAL/Event/Mouse_Private.h b/Juliet/src/Core/HAL/Event/Mouse_Private.h index ddb76bd..ca41af7 100644 --- a/Juliet/src/Core/HAL/Event/Mouse_Private.h +++ b/Juliet/src/Core/HAL/Event/Mouse_Private.h @@ -1,9 +1,10 @@ -#pragma once +#pragma once #include -struct Window; +typedef struct Window Window; +typedef struct Mouse Mouse; struct Mouse { float X; @@ -17,13 +18,13 @@ struct Mouse MouseButton ButtonState; - bool HasPosition : 1; + bool8 HasPosition : 1; }; -Mouse& GetMouseState(); +Mouse* GetMouseState(void); -extern void UpdateMouseState(); -extern void SendMouseMotion(uint64 timestamp, NonNullPtr window, MouseID ID, float x, float y); -extern void SendMouseButton(uint64 timestamp, NonNullPtr window, MouseID mouseID, MouseButton button, bool pressed); +extern void UpdateMouseState(void); +extern void SendMouseMotion(uint64 timestamp, Window* window, MouseID ID, float x, float y); +extern void SendMouseButton(uint64 timestamp, Window* window, MouseID mouseID, MouseButton button, bool8 pressed); -extern const MouseID kGlobalMouseID; +#define kGlobalMouseID ((MouseID)0) diff --git a/Juliet/src/Core/HAL/Event/SystemEvent.c b/Juliet/src/Core/HAL/Event/SystemEvent.c new file mode 100644 index 0000000..07faf83 --- /dev/null +++ b/Juliet/src/Core/HAL/Event/SystemEvent.c @@ -0,0 +1,106 @@ +#include +#include +#include +#include +#include + +#define kEventQueueCapacity 256 + +typedef struct SystemEventQueue SystemEventQueue; +struct SystemEventQueue +{ + SystemEvent Events[kEventQueueCapacity]; + uint32 Head; + uint32 Tail; + uint32 Count; +}; + +global SystemEventQueue g_EventQueue = { 0 }; + +// Update all systems event loops and gather events into the main queue +internal void PumpEvents(void) +{ + DisplayDevice* displayDevice = GetDisplayDevice(); + if (displayDevice != NULL) + { + displayDevice->PumpEvents(displayDevice); + } +} + +internal bool8 AddEvent_Internal(const SystemEvent* event) +{ + Assert(event != NULL); + bool8 result = false; + if (g_EventQueue.Count < kEventQueueCapacity) + { + g_EventQueue.Events[g_EventQueue.Tail] = *event; + g_EventQueue.Tail = (g_EventQueue.Tail + 1) % kEventQueueCapacity; + g_EventQueue.Count += 1; + result = true; + } + return result; +} + +bool8 GetEvent(SystemEvent* event) +{ + return WaitEvent(event, 0); +} + +bool8 WaitEvent(SystemEvent* event, int32 timeoutInNS) +{ + Assert(event != NULL); + bool8 result = false; + const bool8 isInfinite = (timeoutInNS < 0); + // Note: Time_Timestamp() is in microseconds + const uint64 timeoutUS = (timeoutInNS > 0) ? (uint64)(timeoutInNS / 1000) : 0; + const uint64 startTime = Time_Timestamp(); + + while (true) + { + PumpEvents(); + + if (g_EventQueue.Count > 0) + { + *event = g_EventQueue.Events[g_EventQueue.Head]; + g_EventQueue.Head = (g_EventQueue.Head + 1) % kEventQueueCapacity; + g_EventQueue.Count -= 1; + result = true; + break; + } + + // If timeout is 0, we only check once (PumpEvents already ran) + if (timeoutInNS == 0) + { + break; + } + + // Check if we have exceeded our time limit + if (!isInfinite) + { + uint64 elapsed = Time_Timestamp() - startTime; + if (elapsed >= timeoutUS) + { + break; + } + } + } + + return result; +} + +bool8 AddEvent(SystemEvent* event) +{ + Assert(event != NULL); + if (event->Timestamp == 0) + { + event->Timestamp = 1; // TODO : Clock::Now(); + } + + return AddEvent_Internal(event); +} + +void Events_NewFrame(float deltaTime) +{ + UpdateKeyboardstate(deltaTime); + UpdateMouseState(); +} diff --git a/Juliet/src/Core/HAL/Event/SystemEvent.cpp b/Juliet/src/Core/HAL/Event/SystemEvent.cpp deleted file mode 100644 index e37d5a3..0000000 --- a/Juliet/src/Core/HAL/Event/SystemEvent.cpp +++ /dev/null @@ -1,97 +0,0 @@ -#include -#include - -#include -#include - -#pragma push_macro("global") -#undef global - -#pragma pop_macro("global") - -namespace -{ - // TODO : make my own queue / using vector - std::queue eventQueue; - - // Update all systems event loops and gather events into the main queue - void PumpEvents() - { - if (DisplayDevice* displayDevice = GetDisplayDevice()) - { - displayDevice->PumpEvents(displayDevice); - } - } - - bool AddEvent_Internal(const SystemEvent& event) - { - auto& newEvent = eventQueue.emplace(); - newEvent = event; - - // TODO : Logs - - return true; - } -} // namespace - -bool GetEvent(SystemEvent& event) -{ - return WaitEvent(event, 0); -} - -bool WaitEvent(SystemEvent& event, int32 timeoutInNS /* = -1 */) -{ - using namespace std::chrono; - - // Handle the "Infinite Wait" and "Timed Wait" logic - const bool isInfinite = (timeoutInNS < 0); - const nanoseconds timeout(timeoutInNS); - const auto startTime = steady_clock::now(); - - while (true) - { - PumpEvents(); - - if (!eventQueue.empty()) - { - event = eventQueue.front(); - eventQueue.pop(); - return true; - } - - // If timeout is 0, we only check once (PumpEvents already ran) - if (timeoutInNS == 0) - { - break; - } - - // Check if we have exceeded our time limit - if (!isInfinite) - { - auto elapsed = steady_clock::now() - startTime; - if (elapsed >= timeout) - { - break; - } - } - } - - return false; -} - -bool AddEvent(SystemEvent& event) -{ - if (event.Timestamp == 0) - { - event.Timestamp = 1; // TODO : Clock::Now(); - } - - return AddEvent_Internal(event); -} - -void Events_NewFrame(float deltaTime) -{ - UpdateKeyboardstate(deltaTime); - UpdateMouseState(); -} - diff --git a/Juliet/src/Core/HAL/Event/Win32ScanCode.h b/Juliet/src/Core/HAL/Event/Win32ScanCode.h index 980ceba..18aab54 100644 --- a/Juliet/src/Core/HAL/Event/Win32ScanCode.h +++ b/Juliet/src/Core/HAL/Event/Win32ScanCode.h @@ -1,270 +1,266 @@ -#pragma once +#pragma once #include -namespace Win32 -{ - // Conversion table from Win32 scan code to HID Usage Page (see Keyboard.h) - // https://learn.microsoft.com/en-us/windows/win32/inputdev/about-keyboard-input#extended-key-flag - // clang-format off - static constexpr ScanCode Win32ToHIDUsagePageTable[] = { - ScanCode::Unknown, // 0x00 - ScanCode::Escape, // 0x01 - ScanCode::Num1, // 0x02 - ScanCode::Num2, // 0x03 - ScanCode::Num3, // 0x04 - ScanCode::Num4, // 0x05 - ScanCode::Num5, // 0x06 - ScanCode::Num6, // 0x07 - ScanCode::Num7, // 0x08 - ScanCode::Num8, // 0x09 - ScanCode::Num9, // 0x0A - ScanCode::Num0, // 0x0B - ScanCode::Minus, // 0x0C - ScanCode::Equals, // 0x0D - ScanCode::Backspace, // 0x0E - ScanCode::Tab, // 0x0F - ScanCode::Q, // 0x10 - ScanCode::W, // 0x11 - ScanCode::E, // 0x12 - ScanCode::R, // 0x13 - ScanCode::T, // 0x14 - ScanCode::Y, // 0x15 - ScanCode::U, // 0x16 - ScanCode::I, // 0x17 - ScanCode::O, // 0x18 - ScanCode::P, // 0x19 - ScanCode::LeftBracket, // 0x1A - ScanCode::RightBracket, // 0x1B - ScanCode::Return, // 0x1C - ScanCode::LeftControl, // 0x1D - ScanCode::A, // 0x1E - ScanCode::S, // 0x1F - ScanCode::D, // 0x20 - ScanCode::F, // 0x21 - ScanCode::G, // 0x22 - ScanCode::H, // 0x23 - ScanCode::J, // 0x24 - ScanCode::K, // 0x25 - ScanCode::L, // 0x26 - ScanCode::Semicolon, // 0x27 - ScanCode::Apostrophe, // 0x28 - ScanCode::GraveAccent, // 0x29 - ScanCode::LeftShift, // 0x2A - ScanCode::Backslash, // 0x2B - ScanCode::Z, // 0x2C - ScanCode::X, // 0x2D - ScanCode::C, // 0x2E - ScanCode::V, // 0x2F - ScanCode::B, // 0x30 - ScanCode::N, // 0x31 - ScanCode::M, // 0x32 - ScanCode::Comma, // 0x33 - ScanCode::Period, // 0x34 - ScanCode::Slash, // 0x35 - ScanCode::RightShift, // 0x36 - ScanCode::KeyPad_Multiply, // 0x37 - ScanCode::LeftAlt, // 0x38 - ScanCode::Space, // 0x39 - ScanCode::CapsLock, // 0x3A - ScanCode::F1, // 0x3B - ScanCode::F2, // 0x3C - ScanCode::F3, // 0x3D - ScanCode::F4, // 0x3E - ScanCode::F5, // 0x3F - ScanCode::F6, // 0x40 - ScanCode::F7, // 0x41 - ScanCode::F8, // 0x42 - ScanCode::F9, // 0x43 - ScanCode::F10, // 0x44 - ScanCode::NumlockClear, // 0x45 - ScanCode::ScrollLock, // 0x46 - ScanCode::KeyPad_Num7, // 0x47 - ScanCode::KeyPad_Num8, // 0x48 - ScanCode::KeyPad_Num9, // 0x49 - ScanCode::KeyPad_Minus, // 0x4A - ScanCode::KeyPad_Num4, // 0x4B - ScanCode::KeyPad_Num5, // 0x4C - ScanCode::KeyPad_Num6, // 0x4D - ScanCode::KeyPad_Plus, // 0x4E - ScanCode::KeyPad_Num1, // 0x4F - ScanCode::KeyPad_Num2, // 0x50 - ScanCode::KeyPad_Num3, // 0x51 - ScanCode::KeyPad_Num0, // 0x52 - ScanCode::KeyPad_Period, // 0x53 - ScanCode::Unknown, // 0x54 - ScanCode::Unknown, // 0x55 - ScanCode::NonUSBackslash, // 0x56 - ScanCode::F11, // 0x57 - ScanCode::F12, // 0x58 - ScanCode::KeyPad_Equals, // 0x59 - ScanCode::Unknown, // 0x5A - ScanCode::Unknown, // 0x5B - ScanCode::International6, // 0x5C - ScanCode::Unknown, // 0x5D - ScanCode::Unknown, // 0x5E - ScanCode::Unknown, // 0x5F - ScanCode::Unknown, // 0x60 - ScanCode::Unknown, // 0x61 - ScanCode::Unknown, // 0x62 - ScanCode::Unknown, // 0x63 - ScanCode::F13, // 0x64 - ScanCode::F14, // 0x65 - ScanCode::F15, // 0x66 - ScanCode::F16, // 0x67 - ScanCode::F17, // 0x68 - ScanCode::F18, // 0x69 - ScanCode::F19, // 0x6A - ScanCode::F20, // 0x6B - ScanCode::F21, // 0x6C - ScanCode::F22, // 0x6D - ScanCode::F23, // 0x6E - ScanCode::Unknown, // 0x6F - ScanCode::International2, // 0x70 - ScanCode::Lang2, // 0x71 - ScanCode::Lang1, // 0x72 - ScanCode::International1, // 0x73 - ScanCode::Unknown, // 0x74 - ScanCode::Unknown, // 0x75 - ScanCode::F24, // 0x76 - ScanCode::Lang4, // 0x77 - ScanCode::Lang3, // 0x78 - ScanCode::International4, // 0x79 - ScanCode::Unknown, // 0x7A - ScanCode::International5, // 0x7B - ScanCode::Unknown, // 0x7C - ScanCode::International3, // 0x7D - ScanCode::KeyPad_Comma, // 0x7E - ScanCode::Unknown, // 0x7F - ScanCode::Unknown, // 0xe000 - ScanCode::Unknown, // 0xe001 - ScanCode::Unknown, // 0xe002 - ScanCode::Unknown, // 0xe003 - ScanCode::Unknown, // 0xe004 - ScanCode::Unknown, // 0xe005 - ScanCode::Unknown, // 0xe006 - ScanCode::Unknown, // 0xe007 - ScanCode::Unknown, // 0xe008 - ScanCode::Unknown, // 0xe009 - ScanCode::Unsupported, // 0xe00A Unsupported Application Paste - ScanCode::Unknown, // 0xe00B - ScanCode::Unknown, // 0xe00C - ScanCode::Unknown, // 0xe00D - ScanCode::Unknown, // 0xe00E - ScanCode::Unknown, // 0xe00F - ScanCode::Media_PreviousTrack, // 0xe010 - ScanCode::Unknown, // 0xe011 - ScanCode::Unknown, // 0xe012 - ScanCode::Unknown, // 0xe013 - ScanCode::Unknown, // 0xe014 - ScanCode::Unknown, // 0xe015 - ScanCode::Unknown, // 0xe016 - ScanCode::Unsupported, // 0xe017 Unsupported Application Cut - ScanCode::Unsupported, // 0xe018 Unsupported Application Copy - ScanCode::Media_NextTrack, // 0xe019 - ScanCode::Unknown, // 0xe01A - ScanCode::Unknown, // 0xe01B - ScanCode::KeyPad_Enter, // 0xe01C - ScanCode::RightControl, // 0xe01D - ScanCode::Unknown, // 0xe01E - ScanCode::Unknown, // 0xe01F - ScanCode::Mute, // 0xe020 - ScanCode::Unsupported, // 0xe021 // Unsupported LaunchApp2 - ScanCode::Media_PlayPause, // 0xe022 - ScanCode::Unknown, // 0xe023 - ScanCode::Media_Stop, // 0xe024 - ScanCode::Unknown, // 0xe025 - ScanCode::Unknown, // 0xe026 - ScanCode::Unknown, // 0xe027 - ScanCode::Unknown, // 0xe028 - ScanCode::Unknown, // 0xe029 - ScanCode::Unknown, // 0xe02A - ScanCode::Unknown, // 0xe02B - ScanCode::Media_Eject, // 0xe02C - ScanCode::Unknown, // 0xe02D - ScanCode::VolumeDown, // 0xe02E - ScanCode::Unknown, // 0xe02F - ScanCode::VolumeUp, // 0xe030 - ScanCode::Unknown, // 0xe031 - ScanCode::Unsupported, // 0xe032 Unsupported Application Home - ScanCode::Unknown, // 0xe033 - ScanCode::Unknown, // 0xe034 - ScanCode::KeyPad_Divide, // 0xe035 - ScanCode::Unknown, // 0xe036 - ScanCode::PrintScreen, // 0xe037 - ScanCode::RightAlt, // 0xe038 - ScanCode::Unknown, // 0xe039 - ScanCode::Unknown, // 0xe03A - ScanCode::Unsupported, // 0xe03B Unsupported Application Help - ScanCode::Unknown, // 0xe03C - ScanCode::Unknown, // 0xe03D - ScanCode::Unknown, // 0xe03E - ScanCode::Unknown, // 0xe03F - ScanCode::Unknown, // 0xe040 - ScanCode::Unknown, // 0xe041 - ScanCode::Unknown, // 0xe042 - ScanCode::Unknown, // 0xe043 - ScanCode::Unknown, // 0xe044 - ScanCode::NumlockClear, // 0xe045 - ScanCode::Pause, // 0xe046 - ScanCode::Home, // 0xe047 - ScanCode::UpArrow, // 0xe048 - ScanCode::PageUp, // 0xe049 - ScanCode::Unknown, // 0xe04A - ScanCode::LeftArrow, // 0xe04B - ScanCode::Unknown, // 0xe04C - ScanCode::RightArrow, // 0xe04D - ScanCode::Unknown, // 0xe04E - ScanCode::End, // 0xe04F - ScanCode::DownArrow, // 0xe050 - ScanCode::PageDown, // 0xe051 - ScanCode::Insert, // 0xe052 - ScanCode::Delete, // 0xe053 - ScanCode::Unknown, // 0xe054 - ScanCode::Unknown, // 0xe055 - ScanCode::Unknown, // 0xe056 - ScanCode::Unknown, // 0xe057 - ScanCode::Unknown, // 0xe058 - ScanCode::Unknown, // 0xe059 - ScanCode::Unknown, // 0xe05A - ScanCode::LeftOSCommand, // 0xe05B - ScanCode::RightOSCommand, // 0xe05C - ScanCode::Unsupported, // 0xe05D Unsupported Application context - ScanCode::Power, // 0xe05E - ScanCode::Sleep, // 0xe05F - ScanCode::Unknown, // 0xe060 - ScanCode::Unknown, // 0xe061 - ScanCode::Unknown, // 0xe062 - ScanCode::Unknown, // 0xe063 - ScanCode::Unknown, // 0xe064 - ScanCode::Unsupported, // 0xe065 Unsupported:Application Search - ScanCode::Unsupported, // 0xe066 Unsupported:Application Bookmarks - ScanCode::Unsupported, // 0xe067 Unsupported:Application Refresh - ScanCode::Unsupported, // 0xe068 Unsupported:Application Stop - ScanCode::Unsupported, // 0xe069 Unsupported:Application Forward - ScanCode::Unsupported, // 0xe06A Unsupported:Application Back - ScanCode::Unsupported, // 0xe06B Unsupported:LaunchApp1 - ScanCode::Unsupported, // 0xe06C Unsupported:LaunchMail - ScanCode::Media_Select, // 0xe06D - ScanCode::Unknown, // 0xe06E - ScanCode::Unknown, // 0xe06F - ScanCode::Unknown, // 0xe070 - ScanCode::Unknown, // 0xe071 - ScanCode::Unknown, // 0xe072 - ScanCode::Unknown, // 0xe073 - ScanCode::Unknown, // 0xe074 - ScanCode::Unknown, // 0xe075 - ScanCode::Unknown, // 0xe076 - ScanCode::Unknown, // 0xe077 - ScanCode::Unknown, // 0xe078 - ScanCode::Unknown, // 0xe079 - ScanCode::Unknown, // 0xe07A - ScanCode::Unknown, // 0xe07B - ScanCode::Unknown, // 0xe07C - ScanCode::Unknown, // 0xe07D - ScanCode::Unknown, // 0xe07E - ScanCode::Unknown // 0xe07F - - }; - // clang-format on -} // namespace Win32 +// Conversion table from Win32 scan code to HID Usage Page (see Keyboard.h) +// https://learn.microsoft.com/en-us/windows/win32/inputdev/about-keyboard-input#extended-key-flag +// clang-format off +static const ScanCode Win32ToHIDUsagePageTable[] = { + ScanCode_Unknown, // 0x00 + ScanCode_Escape, // 0x01 + ScanCode_Num1, // 0x02 + ScanCode_Num2, // 0x03 + ScanCode_Num3, // 0x04 + ScanCode_Num4, // 0x05 + ScanCode_Num5, // 0x06 + ScanCode_Num6, // 0x07 + ScanCode_Num7, // 0x08 + ScanCode_Num8, // 0x09 + ScanCode_Num9, // 0x0A + ScanCode_Num0, // 0x0B + ScanCode_Minus, // 0x0C + ScanCode_Equals, // 0x0D + ScanCode_Backspace, // 0x0E + ScanCode_Tab, // 0x0F + ScanCode_Q, // 0x10 + ScanCode_W, // 0x11 + ScanCode_E, // 0x12 + ScanCode_R, // 0x13 + ScanCode_T, // 0x14 + ScanCode_Y, // 0x15 + ScanCode_U, // 0x16 + ScanCode_I, // 0x17 + ScanCode_O, // 0x18 + ScanCode_P, // 0x19 + ScanCode_LeftBracket, // 0x1A + ScanCode_RightBracket, // 0x1B + ScanCode_Return, // 0x1C + ScanCode_LeftControl, // 0x1D + ScanCode_A, // 0x1E + ScanCode_S, // 0x1F + ScanCode_D, // 0x20 + ScanCode_F, // 0x21 + ScanCode_G, // 0x22 + ScanCode_H, // 0x23 + ScanCode_J, // 0x24 + ScanCode_K, // 0x25 + ScanCode_L, // 0x26 + ScanCode_Semicolon, // 0x27 + ScanCode_Apostrophe, // 0x28 + ScanCode_GraveAccent, // 0x29 + ScanCode_LeftShift, // 0x2A + ScanCode_Backslash, // 0x2B + ScanCode_Z, // 0x2C + ScanCode_X, // 0x2D + ScanCode_C, // 0x2E + ScanCode_V, // 0x2F + ScanCode_B, // 0x30 + ScanCode_N, // 0x31 + ScanCode_M, // 0x32 + ScanCode_Comma, // 0x33 + ScanCode_Period, // 0x34 + ScanCode_Slash, // 0x35 + ScanCode_RightShift, // 0x36 + ScanCode_KeyPad_Multiply, // 0x37 + ScanCode_LeftAlt, // 0x38 + ScanCode_Space, // 0x39 + ScanCode_CapsLock, // 0x3A + ScanCode_F1, // 0x3B + ScanCode_F2, // 0x3C + ScanCode_F3, // 0x3D + ScanCode_F4, // 0x3E + ScanCode_F5, // 0x3F + ScanCode_F6, // 0x40 + ScanCode_F7, // 0x41 + ScanCode_F8, // 0x42 + ScanCode_F9, // 0x43 + ScanCode_F10, // 0x44 + ScanCode_NumlockClear, // 0x45 + ScanCode_ScrollLock, // 0x46 + ScanCode_KeyPad_Num7, // 0x47 + ScanCode_KeyPad_Num8, // 0x48 + ScanCode_KeyPad_Num9, // 0x49 + ScanCode_KeyPad_Minus, // 0x4A + ScanCode_KeyPad_Num4, // 0x4B + ScanCode_KeyPad_Num5, // 0x4C + ScanCode_KeyPad_Num6, // 0x4D + ScanCode_KeyPad_Plus, // 0x4E + ScanCode_KeyPad_Num1, // 0x4F + ScanCode_KeyPad_Num2, // 0x50 + ScanCode_KeyPad_Num3, // 0x51 + ScanCode_KeyPad_Num0, // 0x52 + ScanCode_KeyPad_Period, // 0x53 + ScanCode_Unknown, // 0x54 + ScanCode_Unknown, // 0x55 + ScanCode_NonUSBackslash, // 0x56 + ScanCode_F11, // 0x57 + ScanCode_F12, // 0x58 + ScanCode_KeyPad_Equals, // 0x59 + ScanCode_Unknown, // 0x5A + ScanCode_Unknown, // 0x5B + ScanCode_International6, // 0x5C + ScanCode_Unknown, // 0x5D + ScanCode_Unknown, // 0x5E + ScanCode_Unknown, // 0x5F + ScanCode_Unknown, // 0x60 + ScanCode_Unknown, // 0x61 + ScanCode_Unknown, // 0x62 + ScanCode_Unknown, // 0x63 + ScanCode_F13, // 0x64 + ScanCode_F14, // 0x65 + ScanCode_F15, // 0x66 + ScanCode_F16, // 0x67 + ScanCode_F17, // 0x68 + ScanCode_F18, // 0x69 + ScanCode_F19, // 0x6A + ScanCode_F20, // 0x6B + ScanCode_F21, // 0x6C + ScanCode_F22, // 0x6D + ScanCode_F23, // 0x6E + ScanCode_Unknown, // 0x6F + ScanCode_International2, // 0x70 + ScanCode_Lang2, // 0x71 + ScanCode_Lang1, // 0x72 + ScanCode_International1, // 0x73 + ScanCode_Unknown, // 0x74 + ScanCode_Unknown, // 0x75 + ScanCode_F24, // 0x76 + ScanCode_Lang4, // 0x77 + ScanCode_Lang3, // 0x78 + ScanCode_International4, // 0x79 + ScanCode_Unknown, // 0x7A + ScanCode_International5, // 0x7B + ScanCode_Unknown, // 0x7C + ScanCode_International3, // 0x7D + ScanCode_KeyPad_Comma, // 0x7E + ScanCode_Unknown, // 0x7F + ScanCode_Unknown, // 0xe000 + ScanCode_Unknown, // 0xe001 + ScanCode_Unknown, // 0xe002 + ScanCode_Unknown, // 0xe003 + ScanCode_Unknown, // 0xe004 + ScanCode_Unknown, // 0xe005 + ScanCode_Unknown, // 0xe006 + ScanCode_Unknown, // 0xe007 + ScanCode_Unknown, // 0xe008 + ScanCode_Unknown, // 0xe009 + ScanCode_Unsupported, // 0xe00A Unsupported Application Paste + ScanCode_Unknown, // 0xe00B + ScanCode_Unknown, // 0xe00C + ScanCode_Unknown, // 0xe00D + ScanCode_Unknown, // 0xe00E + ScanCode_Unknown, // 0xe00F + ScanCode_Media_PreviousTrack, // 0xe010 + ScanCode_Unknown, // 0xe011 + ScanCode_Unknown, // 0xe012 + ScanCode_Unknown, // 0xe013 + ScanCode_Unknown, // 0xe014 + ScanCode_Unknown, // 0xe015 + ScanCode_Unknown, // 0xe016 + ScanCode_Unsupported, // 0xe017 Unsupported Application Cut + ScanCode_Unsupported, // 0xe018 Unsupported Application Copy + ScanCode_Media_NextTrack, // 0xe019 + ScanCode_Unknown, // 0xe01A + ScanCode_Unknown, // 0xe01B + ScanCode_KeyPad_Enter, // 0xe01C + ScanCode_RightControl, // 0xe01D + ScanCode_Unknown, // 0xe01E + ScanCode_Unknown, // 0xe01F + ScanCode_Mute, // 0xe020 + ScanCode_Unsupported, // 0xe021 // Unsupported LaunchApp2 + ScanCode_Media_PlayPause, // 0xe022 + ScanCode_Unknown, // 0xe023 + ScanCode_Media_Stop, // 0xe024 + ScanCode_Unknown, // 0xe025 + ScanCode_Unknown, // 0xe026 + ScanCode_Unknown, // 0xe027 + ScanCode_Unknown, // 0xe028 + ScanCode_Unknown, // 0xe029 + ScanCode_Unknown, // 0xe02A + ScanCode_Unknown, // 0xe02B + ScanCode_Media_Eject, // 0xe02C + ScanCode_Unknown, // 0xe02D + ScanCode_VolumeDown, // 0xe02E + ScanCode_Unknown, // 0xe02F + ScanCode_VolumeUp, // 0xe030 + ScanCode_Unknown, // 0xe031 + ScanCode_Unsupported, // 0xe032 Unsupported Application Home + ScanCode_Unknown, // 0xe033 + ScanCode_Unknown, // 0xe034 + ScanCode_KeyPad_Divide, // 0xe035 + ScanCode_Unknown, // 0xe036 + ScanCode_PrintScreen, // 0xe037 + ScanCode_RightAlt, // 0xe038 + ScanCode_Unknown, // 0xe039 + ScanCode_Unknown, // 0xe03A + ScanCode_Unsupported, // 0xe03B Unsupported Application Help + ScanCode_Unknown, // 0xe03C + ScanCode_Unknown, // 0xe03D + ScanCode_Unknown, // 0xe03E + ScanCode_Unknown, // 0xe03F + ScanCode_Unknown, // 0xe040 + ScanCode_Unknown, // 0xe041 + ScanCode_Unknown, // 0xe042 + ScanCode_Unknown, // 0xe043 + ScanCode_Unknown, // 0xe044 + ScanCode_NumlockClear, // 0xe045 + ScanCode_Pause, // 0xe046 + ScanCode_Home, // 0xe047 + ScanCode_UpArrow, // 0xe048 + ScanCode_PageUp, // 0xe049 + ScanCode_Unknown, // 0xe04A + ScanCode_LeftArrow, // 0xe04B + ScanCode_Unknown, // 0xe04C + ScanCode_RightArrow, // 0xe04D + ScanCode_Unknown, // 0xe04E + ScanCode_End, // 0xe04F + ScanCode_DownArrow, // 0xe050 + ScanCode_PageDown, // 0xe051 + ScanCode_Insert, // 0xe052 + ScanCode_Delete, // 0xe053 + ScanCode_Unknown, // 0xe054 + ScanCode_Unknown, // 0xe055 + ScanCode_Unknown, // 0xe056 + ScanCode_Unknown, // 0xe057 + ScanCode_Unknown, // 0xe058 + ScanCode_Unknown, // 0xe059 + ScanCode_Unknown, // 0xe05A + ScanCode_LeftOSCommand, // 0xe05B + ScanCode_RightOSCommand, // 0xe05C + ScanCode_Unsupported, // 0xe05D Unsupported Application context + ScanCode_Power, // 0xe05E + ScanCode_Sleep, // 0xe05F + ScanCode_Unknown, // 0xe060 + ScanCode_Unknown, // 0xe061 + ScanCode_Unknown, // 0xe062 + ScanCode_Unknown, // 0xe063 + ScanCode_Unknown, // 0xe064 + ScanCode_Unsupported, // 0xe065 Unsupported:Application Search + ScanCode_Unsupported, // 0xe066 Unsupported:Application Bookmarks + ScanCode_Unsupported, // 0xe067 Unsupported:Application Refresh + ScanCode_Unsupported, // 0xe068 Unsupported:Application Stop + ScanCode_Unsupported, // 0xe069 Unsupported:Application Forward + ScanCode_Unsupported, // 0xe06A Unsupported:Application Back + ScanCode_Unsupported, // 0xe06B Unsupported:LaunchApp1 + ScanCode_Unsupported, // 0xe06C Unsupported:LaunchMail + ScanCode_Media_Select, // 0xe06D + ScanCode_Unknown, // 0xe06E + ScanCode_Unknown, // 0xe06F + ScanCode_Unknown, // 0xe070 + ScanCode_Unknown, // 0xe071 + ScanCode_Unknown, // 0xe072 + ScanCode_Unknown, // 0xe073 + ScanCode_Unknown, // 0xe074 + ScanCode_Unknown, // 0xe075 + ScanCode_Unknown, // 0xe076 + ScanCode_Unknown, // 0xe077 + ScanCode_Unknown, // 0xe078 + ScanCode_Unknown, // 0xe079 + ScanCode_Unknown, // 0xe07A + ScanCode_Unknown, // 0xe07B + ScanCode_Unknown, // 0xe07C + ScanCode_Unknown, // 0xe07D + ScanCode_Unknown, // 0xe07E + ScanCode_Unknown // 0xe07F +}; +// clang-format on diff --git a/Juliet/src/Core/HAL/Event/WindowEvent.cpp b/Juliet/src/Core/HAL/Event/WindowEvent.c similarity index 55% rename from Juliet/src/Core/HAL/Event/WindowEvent.cpp rename to Juliet/src/Core/HAL/Event/WindowEvent.c index 3852a48..c510ec3 100644 --- a/Juliet/src/Core/HAL/Event/WindowEvent.cpp +++ b/Juliet/src/Core/HAL/Event/WindowEvent.c @@ -1,18 +1,17 @@ -#include +#include #include #include -bool SendWindowEvent(Window* window, EventType type) +bool8 SendWindowEvent(Window* window, EventType type) { - Assert(window); + Assert(window != NULL); - SystemEvent evt; + SystemEvent evt = { 0 }; evt.Timestamp = 0; evt.Type = type; evt.Data.Window.AssociatedWindowID = window->ID; - bool evtPosted = AddEvent(evt); + bool8 evtPosted = AddEvent(&evt); return evtPosted; } - diff --git a/Juliet/src/Core/HAL/Event/WindowEvent.h b/Juliet/src/Core/HAL/Event/WindowEvent.h index 5f249cf..754ba03 100644 --- a/Juliet/src/Core/HAL/Event/WindowEvent.h +++ b/Juliet/src/Core/HAL/Event/WindowEvent.h @@ -1,6 +1,7 @@ -#pragma once +#pragma once -struct Window; -enum class EventType : uint32; +#include -extern bool SendWindowEvent(Window* window, EventType type); +typedef struct Window Window; + +extern bool8 SendWindowEvent(Window* window, EventType type); diff --git a/Juliet/src/Core/HAL/Filesystem/Filesystem.c b/Juliet/src/Core/HAL/Filesystem/Filesystem.c new file mode 100644 index 0000000..f1f97f1 --- /dev/null +++ b/Juliet/src/Core/HAL/Filesystem/Filesystem.c @@ -0,0 +1,186 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +global Path g_CachedBasePath = { 0 }; +global Path g_CachedAssetBasePath = { 0 }; +global Path g_CachedShaderBasePath = { 0 }; + +internal bool8 DirectoryExists(const char* path) +{ + Assert(path != NULL); + DWORD attributes = GetFileAttributesA(path); + return (attributes != INVALID_FILE_ATTRIBUTES) && ((attributes & FILE_ATTRIBUTE_DIRECTORY) != 0); +} + +bool8 IsValidPath(Path path) +{ + return IsValidString(path.Directories) && IsValidString(path.FullPath); +} + +Path GetBasePath(void) +{ + Assert(IsValidPath(g_CachedBasePath)); + return g_CachedBasePath; +} + +Path GetAssetBasePath(void) +{ + Assert(IsValidPath(g_CachedAssetBasePath)); + return g_CachedAssetBasePath; +} + +Path GetAssetPath(Arena* arena, AssetType type, String filename) +{ + Assert(arena != NULL); + Assert(IsValidString(filename)); + + char buffer[MAX_PATH]; + size_t totalSize = MAX_PATH; + + switch (type) + { + case AssetType_Shader: + { + totalSize = g_CachedShaderBasePath.Directories.Size + filename.Size + 1; + + juliet_snprintf(buffer, totalSize, "%s%s", CStr(g_CachedShaderBasePath.Directories), CStr(filename)); + break; + } + case AssetType_Config: + { + const char kConfig_str[] = "config/"; + const size_t kConfig_size = sizeof(kConfig_str) - 1; + + totalSize = g_CachedAssetBasePath.Directories.Size + kConfig_size + filename.Size + 1; + + juliet_snprintf(buffer, totalSize, "%s%s%s", CStr(g_CachedAssetBasePath.Directories), kConfig_str, CStr(filename)); + break; + } + case AssetType_JAsset: + default: + { + totalSize = g_CachedAssetBasePath.Directories.Size + filename.Size + 1; + + juliet_snprintf(buffer, totalSize, "%s%s", CStr(g_CachedAssetBasePath.Directories), CStr(filename)); + break; + } + } + + Path asset_path = fs_create_clean_path(arena, (String){ .Str = buffer, .Size = totalSize - 1 }); + return asset_path; +} + +bool8 IsAbsolutePath(String path) +{ + bool8 result = false; + if (IsValidString(path)) + { + result = Platform_IsAbsolutePath(path); + } + return result; +} + +Path fs_create_clean_path(Arena* arena, String path) +{ + Assert(arena != NULL); + return Platform_fs_create_clean_path(arena, path); +} + +bool8 fs_create_directory(String path, bool8 recursive) +{ + return Platform_fs_create_directory(path, recursive); +} + +bool8 fs_path_exists(String path) +{ + return Platform_fs_path_exists(path); +} + +bool8 fs_move_file(Path old_path, Path new_path) +{ + return Platform_fs_move_file(old_path, new_path); +} + +bool8 fs_delete_file(String path) +{ + Assert(IsValidString(path)); + return Platform_fs_delete_file(path); +} + +void fs_iterate_directory(Path directory_path, String extension, void* user_payload, fs_iterate_director_callback callback) +{ + (void)extension; + (void)user_payload; + Assert(IsValidPath(directory_path)); + Assert(callback != NULL); + + TempArena scratch = scratch_begin(NULL, 0); + + scratch_end(scratch); +} + +void InitFilesystem(Arena* arena) +{ + Assert(arena != NULL); + g_CachedBasePath = Platform_GetBasePath(arena); + + Path basePath = GetBasePath(); + Assert(IsValidPath(basePath)); + + // Probe candidate paths base asset folder + // 1. Shipping layout: Assets/ next to the exe + // 2. Dev layout: ../../Assets/ (exe is in bin/x64Clang-/) + const char* kCandidates[] = { "Assets/", "../../Assets/" }; + + for (size_t i = 0; i < ArraySize(kCandidates); ++i) + { + const char* candidate = kCandidates[i]; + char probePath[512]; + juliet_snprintf(probePath, sizeof(probePath), "%s%s", CStr(basePath.Directories), candidate); + + if (DirectoryExists(probePath)) + { + // Clean the path first to remove any relative parts + Path abs_path = fs_create_clean_path(arena, WrapString(probePath)); + g_CachedAssetBasePath = abs_path; + Log(LogLevel_Message, LogCategory_Core, "Asset base path: %s", CStr(abs_path.FullPath)); + break; + } + } + + // Probe candidate paths for compiled shader directory + // 1. Shipping layout: Assets/Shaders/ + // 2. Dev layout: Assets/compiled/ + const char* kCandidatesShader[] = { "Shaders/", "compiled/" }; + + for (size_t i = 0; i < ArraySize(kCandidatesShader); ++i) + { + const char* candidate = kCandidatesShader[i]; + char probePath[512]; + juliet_snprintf(probePath, sizeof(probePath), "%s%s", CStr(g_CachedAssetBasePath.Directories), candidate); + + if (DirectoryExists(probePath)) + { + // Clean the path first to remove any relative parts + Path abs_path = fs_create_clean_path(arena, WrapString(probePath)); + g_CachedShaderBasePath = abs_path; + Log(LogLevel_Message, LogCategory_Core, "Asset base path: %s", CStr(abs_path.FullPath)); + break; + } + } +} + +void ShutdownFilesystem(void) +{ + g_CachedBasePath = (Path){ 0 }; + g_CachedAssetBasePath = (Path){ 0 }; + g_CachedShaderBasePath = (Path){ 0 }; +} diff --git a/Juliet/src/Core/HAL/Filesystem/Filesystem.cpp b/Juliet/src/Core/HAL/Filesystem/Filesystem.cpp deleted file mode 100644 index d71018e..0000000 --- a/Juliet/src/Core/HAL/Filesystem/Filesystem.cpp +++ /dev/null @@ -1,183 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace -{ - Path CachedBasePath = {}; - Path CachedAssetBasePath = {}; - Path CachedShaderBasePath = {}; - - bool DirectoryExists(const char* path) - { - Assert(path); - DWORD attributes = GetFileAttributesA(path); - return (attributes != INVALID_FILE_ATTRIBUTES) && (attributes & FILE_ATTRIBUTE_DIRECTORY); - } -} // namespace - -bool IsValid(Path path) -{ - return IsValid(path.Directories) && IsValid(path.FullPath); -} - -Path GetBasePath() -{ - Assert(IsValid(CachedBasePath)); - return CachedBasePath; -} - -Path GetAssetBasePath() -{ - Assert(IsValid(CachedAssetBasePath)); - return { CachedAssetBasePath }; -} - -Path GetAssetPath(NonNullPtr arena, AssetType type, String filename) -{ - // ICI on va vouloir 1) avoir une fonction create file path a partir de base + file qui fait un string copy - // On va passer le path au clean path - Assert(IsValid(filename)); - - char buffer[MAX_PATH]; - size_t totalSize = MAX_PATH; - - switch (type) - { - case AssetType::Shader: - { - totalSize = CachedShaderBasePath.Directories.Size + filename.Size + 1; - - juliet_snprintf(buffer, totalSize, "%s%s", CStr(CachedShaderBasePath.Directories), CStr(filename)); - } - break; - case AssetType::Config: - { - constexpr char kConfig_str[] = "config/"; - constexpr size_t kConfig_size = sizeof(kConfig_str) - 1; - - totalSize = CachedAssetBasePath.Directories.Size + kConfig_size + filename.Size + 1; - - juliet_snprintf(buffer, totalSize, "%s%s%s", CStr(CachedAssetBasePath.Directories), kConfig_str, CStr(filename)); - } - break; - case AssetType::JAsset: [[fallthrough]]; - default: - { - totalSize = CachedAssetBasePath.Directories.Size + filename.Size + 1; - - juliet_snprintf(buffer, totalSize, "%s%s", CStr(CachedAssetBasePath.Directories), CStr(filename)); - } - break; - } - - Path asset_path = fs_create_clean_path(arena, { buffer, totalSize - 1 }); - return asset_path; -} - -bool IsAbsolutePath(String path) -{ - if (!IsValid(path)) - { - return false; - } - return Platform::IsAbsolutePath(path); -} - -Path fs_create_clean_path(NonNullPtr arena, String path) -{ - return Platform::fs_create_clean_path(arena, path); -} - -bool fs_create_directory(String path, bool recursive) -{ - return Platform::fs_create_directory(path, recursive); -} - -bool fs_path_exists(String path) -{ - return Platform::fs_path_exists(path); -} - -bool fs_move_file(Path old_path, Path new_path) -{ - return Platform::fs_move_file(old_path, new_path); -} - -bool fs_delete_file(String path) -{ - Assert(IsValid(path)); - return Platform::fs_delete_file(path); -} - -void fs_iterate_directory(Path directory_path, String extension, void* user_payload, fs_iterate_director_callback callback) -{ - Assert(IsValid(directory_path)); - Assert(callback); - - TempArena scratch = scratch_begin(nullptr, 0); - - scratch_end(scratch); -} - -void InitFilesystem(NonNullPtr arena) -{ - CachedBasePath = Platform::GetBasePath(arena); - - Path basePath = GetBasePath(); - Assert(IsValid(basePath)); - - // Probe candidate paths base asset folder - // 1. Shipping layout: Assets/ next to the exe - // 2. Dev layout: ../../Assets/ (exe is in bin/x64Clang-/) - constexpr const char* kCandidates[] = { "Assets/", "../../Assets/" }; - - for (const char* candidate : kCandidates) - { - char probePath[512]; - juliet_snprintf(probePath, sizeof(probePath), "%s%s", CStr(basePath.Directories), candidate); - - if (DirectoryExists(probePath)) - { - // Clean the path first to remove any relative parts - Path abs_path = fs_create_clean_path(arena, WrapString(probePath)); - CachedAssetBasePath = abs_path; - Log(LogLevel::Message, LogCategory::Core, "Asset base path: %s", CStr(abs_path.FullPath)); - break; - } - } - - // Probe candidate paths for compiled shader directory - // 1. Shipping layout: Assets/Shaders/ - // 2. Dev layout: Assets/compiled/ - constexpr const char* kCandidatesShader[] = { "Shaders/", "compiled/" }; - - for (const char* candidate : kCandidatesShader) - { - char probePath[512]; - juliet_snprintf(probePath, sizeof(probePath), "%s%s", CStr(CachedAssetBasePath.Directories), candidate); - - if (DirectoryExists(probePath)) - { - // Clean the path first to remove any relative parts - Path abs_path = fs_create_clean_path(arena, WrapString(probePath)); - CachedShaderBasePath = abs_path; - Log(LogLevel::Message, LogCategory::Core, "Asset base path: %s", CStr(abs_path.FullPath)); - break; - } - } -} - -void ShutdownFilesystem() -{ - CachedBasePath = {}; - CachedAssetBasePath = {}; - CachedShaderBasePath = {}; -} diff --git a/Juliet/src/Core/HAL/Filesystem/Filesystem_Platform.h b/Juliet/src/Core/HAL/Filesystem/Filesystem_Platform.h index ced6d50..b9c7ca9 100644 --- a/Juliet/src/Core/HAL/Filesystem/Filesystem_Platform.h +++ b/Juliet/src/Core/HAL/Filesystem/Filesystem_Platform.h @@ -2,13 +2,10 @@ #include -namespace Platform -{ - Path GetBasePath(NonNullPtr arena); - bool IsAbsolutePath(String path); - Path fs_create_clean_path(NonNullPtr arena, String path); - bool fs_create_directory(String path, bool recursive); - bool fs_path_exists(String path); - bool fs_move_file(Path old_path, Path new_path); - bool fs_delete_file(String path); -} // namespace Platform +Path Platform_GetBasePath(Arena* arena); +bool8 Platform_IsAbsolutePath(String path); +Path Platform_fs_create_clean_path(Arena* arena, String path); +bool8 Platform_fs_create_directory(String path, bool8 recursive); +bool8 Platform_fs_path_exists(String path); +bool8 Platform_fs_move_file(Path old_path, Path new_path); +bool8 Platform_fs_delete_file(String path); diff --git a/Juliet/src/Core/HAL/Filesystem/Filesystem_Private.h b/Juliet/src/Core/HAL/Filesystem/Filesystem_Private.h index 37c8e81..6a37db0 100644 --- a/Juliet/src/Core/HAL/Filesystem/Filesystem_Private.h +++ b/Juliet/src/Core/HAL/Filesystem/Filesystem_Private.h @@ -1,4 +1,6 @@ -#pragma once +#pragma once -extern void InitFilesystem(NonNullPtr arena); -extern void ShutdownFilesystem(); +#include + +extern void InitFilesystem(Arena* arena); +extern void ShutdownFilesystem(void); diff --git a/Juliet/src/Core/HAL/Filesystem/Win32/Win32Filesystem.c b/Juliet/src/Core/HAL/Filesystem/Win32/Win32Filesystem.c new file mode 100644 index 0000000..ad6605e --- /dev/null +++ b/Juliet/src/Core/HAL/Filesystem/Win32/Win32Filesystem.c @@ -0,0 +1,210 @@ +#include +#include +#include +#include +#include +#include +#include + +Path Platform_GetBasePath(Arena* arena) +{ + Assert(arena != NULL); + Path resultPath = { 0 }; + + // Allocate a buffer that could fit the module size. + // Max Path is a good start but could be bigger if the path include long path prefix + size_t bufferSize = MAX_PATH; + char* buffer = ArenaPushArrayTag(arena, char, MAX_PATH, "BasePath buffer"); + if (buffer != NULL) + { + size_t moduleFilenameLength = 0; + while (true) + { + moduleFilenameLength = GetModuleFileNameA(NULL, buffer, (uint32)bufferSize); + + // If the module filename length is bigger than the buffer size, we need to reallocate a bigger buffer + if (moduleFilenameLength >= bufferSize - 1) + { + char* addedBuffer = ArenaPushArrayTag(arena, char, bufferSize, "BasePath buffer"); + Assert(addedBuffer != NULL); + bufferSize *= 2; + } + else + { + break; + } + } + + if (moduleFilenameLength == 0) + { + Log(LogLevel_Error, LogCategory_Core, "Filesystem: Cannot locate executable path"); + } + + size_t idx = 0; + for (idx = moduleFilenameLength - 1; idx > 0; --idx) + { + if (buffer[idx] == '\\') + { + break; + } + } + + Assert(idx > 0 && "Path is not absolute!"); + buffer[idx + 1] = '\0'; // Chop chop + + String result = WrapString(buffer); + resultPath = (Path){ .Directories = result, .FullPath = result }; + } + + return resultPath; +} + +bool8 Platform_IsAbsolutePath(String path) +{ + bool8 result = false; + + if (path.Str != NULL && path.Size > 0) + { + // From https://learn.microsoft.com/en-ca/windows/win32/fileio/naming-a-file?redirectedfrom=MSDN#fully_qualified_vs._relative_paths + // Windows path starts with either: + // A UNC name of any format, which always start with two backslash characters ("\\"). For more information, see the next section. + // A disk designator with a backslash, for example "C:\" or "d:\". + // A single backslash, for example, "\directory" or "\file.txt". This is also referred to as an absolute path. + // We will only handle the first two. Single backslash is weird. + const char* pathStr = path.Str; + size_t pathLen = path.Size; + + if (pathLen > 1) + { + if (pathStr[0] == '\\' && pathStr[1] == '\\') + { + result = true; + } + else if (pathLen > 2) + { + char first = pathStr[0]; + char second = pathStr[1]; + char third = pathStr[2]; + result = ((first >= 'a' && first <= 'z') || (first >= 'A' && first <= 'Z')) && second == ':' && + (third == '\\' || third == '/'); + } + } + } + + return result; +} + +Path Platform_fs_create_clean_path(Arena* arena, String path) +{ + Assert(arena != NULL); + char clean_path_buffer[MAX_PATH]; + LPSTR file_part = NULL; + DWORD result = GetFullPathNameA(CStr(path), MAX_PATH, clean_path_buffer, &file_part); + if (result == 0) + { + LogError(LogCategory_Core, "Failed to resolve path. Error: %lu\n", GetLastError()); + } + + String full_path = StringCopy(arena, WrapString(clean_path_buffer)); + String temp_directories = full_path; + + if (file_part != NULL) + { + ptrdiff_t diff = (file_part - clean_path_buffer); + temp_directories.Size = (size_t)diff; + } + + String directories = StringCopy(arena, temp_directories); + + Path result_path = { .Directories = directories, .FullPath = full_path }; + + return result_path; +} + +bool8 Platform_fs_create_directory(String path, bool8 recursive) +{ + bool8 result = true; + TempArena temp = scratch_begin(NULL, 0); + + String temp_path = StringCopy(temp.Arena, path); + + if (recursive) + { + for (char* c = temp_path.Str; *c != '\0'; c++) + { + if (*c == '\\' || *c == '/') + { + // Found separator, need to skip it in case its "\\NetworkDrive" or "C:\" + if (c == temp_path.Str || *(c - 1) == ':') + { + continue; + } + + // Keep pointer to the separator and "end" the string using a \0 + char separator = *c; + *c = '\0'; + + const bool8 create_result_recursive = (bool8)CreateDirectoryA(CStr(temp_path), NULL); + if (!create_result_recursive) + { + const DWORD error = GetLastError(); + if (error != ERROR_ALREADY_EXISTS) + { + LogError(LogCategory_Core, "Create directory (parent) failed, error %d", error); + result = false; + } + } + + // Restore the string (remove \0) + *c = separator; + } + } + } + + // Final folder + if (result) + { + const bool8 create_result = (bool8)CreateDirectoryA(CStr(temp_path), NULL); + if (!create_result) + { + const DWORD error = GetLastError(); + if (error == ERROR_ALREADY_EXISTS) + { + LogDebug(LogCategory_Core, "Folder already exists"); + } + else + { + LogError(LogCategory_Core, "Create directory failed, error %d", error); + result = false; + } + } + } + + scratch_end(temp); + + return result; +} + +bool8 Platform_fs_path_exists(String path) +{ + const DWORD attribs = GetFileAttributesA(CStr(path)); + const bool8 result = (attribs != INVALID_FILE_ATTRIBUTES); + return result; +} + +bool8 Platform_fs_move_file(Path old_path, Path new_path) +{ + bool8 result = (bool8)MoveFileExA(CStr(old_path.FullPath), CStr(new_path.FullPath), MOVEFILE_REPLACE_EXISTING | MOVEFILE_WRITE_THROUGH); + return result; +} + +bool8 Platform_fs_delete_file(String path) +{ + bool8 result = true; + if (!DeleteFileA(CStr(path))) + { + LogError(LogCategory_Core, "Failed to delete file %s. Error: %lu", CStr(path), GetLastError()); + result = false; + } + return result; +} diff --git a/Juliet/src/Core/HAL/Filesystem/Win32/Win32Filesystem.cpp b/Juliet/src/Core/HAL/Filesystem/Win32/Win32Filesystem.cpp deleted file mode 100644 index 6d8a778..0000000 --- a/Juliet/src/Core/HAL/Filesystem/Win32/Win32Filesystem.cpp +++ /dev/null @@ -1,209 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include - -namespace Platform -{ - Path GetBasePath(NonNullPtr arena) - { - // Allocate a buffer that could fit the module size. - // Max Path is a good start but could be bigger if the path include long path prefix - size_t bufferSize = MAX_PATH; - auto buffer = ArenaPushArray(arena, MAX_PATH JULIET_DEBUG_PARAM("BasePath buffer")); - if (buffer == nullptr) - { - return {}; - } - - size_t moduleFilenameLength = 0; - while (true) - { - moduleFilenameLength = GetModuleFileNameA(nullptr, buffer, static_cast(bufferSize)); - - // If the module filename length is bigger than the buffer size, we need to reallocate a bigger buffer - if (moduleFilenameLength >= bufferSize - 1) - { - char* addedBuffer = ArenaPushArray(arena, bufferSize JULIET_DEBUG_PARAM("BasePath buffer")); - Assert(addedBuffer != nullptr); - bufferSize *= 2; - } - else - { - break; - } - } - - if (moduleFilenameLength == 0) - { - Log(LogLevel::Error, LogCategory::Core, "Filesystem: Cannot locate executable path"); - } - - size_t idx = 0; - for (idx = moduleFilenameLength - 1; idx > 0; --idx) - { - if (buffer[idx] == '\\') - { - break; - } - } - - Assert(idx > 0 && "Path is not absolute!"); - buffer[idx + 1] = '\0'; // Chop chop - - String result = WrapString(buffer); - return { result, result }; - } - - bool IsAbsolutePath(String path) - { - if (!path.Str || path.Size == 0) - { - return false; - } - - // From https://learn.microsoft.com/en-ca/windows/win32/fileio/naming-a-file?redirectedfrom=MSDN#fully_qualified_vs._relative_paths - // Windows path starts with either: - // A UNC name of any format, which always start with two backslash characters ("\\"). For more information, see the next section. - // A disk designator with a backslash, for example "C:\" or "d:\". - // A single backslash, for example, "\directory" or "\file.txt". This is also referred to as an absolute path. - // We will only handle the first two. Single backslash is weird. - const char* pathStr = path.Str; - size_t pathLen = path.Size; - - if (pathLen > 1) - { - if (pathStr[0] == '\\' && pathStr[1] == '\\') - { - return true; - } - - if (pathLen > 2) - { - char first = pathStr[0]; - char second = pathStr[1]; - char third = pathStr[2]; - return ((first >= 'a' && first <= 'z') || (first >= 'A' && first <= 'Z')) && second == ':' && - (third == '\\' || third == '/'); - } - } - - return false; - } - - Path fs_create_clean_path(NonNullPtr arena, String path) - { - char clean_path_buffer[MAX_PATH]; - LPSTR file_part = nullptr; - DWORD result = GetFullPathNameA(CStr(path), MAX_PATH, clean_path_buffer, &file_part); - if (result == 0) - { - LogError(LogCategory::Core, "Failed to resolve path. Error: %lu\n", GetLastError()); - } - - String full_path = StringCopy(arena, WrapString(clean_path_buffer)); - String temp_directories = full_path; - - if (file_part != nullptr) - { - ptrdiff_t diff = (file_part - clean_path_buffer); - temp_directories.Size = diff; - } - - String directories = StringCopy(arena, temp_directories); - - Path result_path = { directories, full_path }; - - return result_path; - } - - bool fs_create_directory(String path, bool recursive) - { - bool result = true; - TempArena temp = scratch_begin(nullptr, 0); - - String temp_path = StringCopy(temp.Arena, path); - - if (recursive) - { - for (char* c = temp_path.Str; *c != '\0'; c++) - { - if (*c == '\\' || *c == '/') - { - // Found separator, need to skip it in case its "\\NetworkDrive" or "C:\" - if (c == temp_path.Str || *(c - 1) == ':') - { - continue; - } - - // Keep pointer to the separator and "end" the string using a \0 - char separator = *c; - *c = '\0'; - - const bool create_result_recursive = CreateDirectoryA(CStr(temp_path), nullptr); - if (!create_result_recursive) - { - const DWORD error = GetLastError(); - if (error != ERROR_ALREADY_EXISTS) - { - LogError(LogCategory::Core, "Create directory (parent) failed, error %d", error); - result = false; - } - } - - // Restore the string (remove \0) - *c = separator; - } - } - } - - // Final folder - if (result) - { - const bool create_result = CreateDirectoryA(CStr(temp_path), nullptr); - if (!create_result) - { - const DWORD error = GetLastError(); - if (error == ERROR_ALREADY_EXISTS) - { - LogDebug(LogCategory::Core, "Folder already exists"); - } - else - { - LogError(LogCategory::Core, "Create directory failed, error %d", error); - result = false; - } - } - } - - scratch_end(temp); - - return result; - } - - bool fs_path_exists(String path) - { - const DWORD attribs = GetFileAttributesA(CStr(path)); - const bool result = (attribs != INVALID_FILE_ATTRIBUTES); - return result; - } - - bool fs_move_file(Path old_path, Path new_path) - { - bool result = MoveFileExA(CStr(old_path.FullPath), CStr(new_path.FullPath), MOVEFILE_REPLACE_EXISTING | MOVEFILE_WRITE_THROUGH); - return result; - } - - bool fs_delete_file(String path) - { - if (!DeleteFileA(CStr(path))) - { - LogError(LogCategory::Core, "Failed to delete file %s. Error: %lu", CStr(path), GetLastError()); - return false; - } - return true; - } -} // namespace Platform diff --git a/Juliet/src/Core/HAL/IO/IOStream.c b/Juliet/src/Core/HAL/IO/IOStream.c new file mode 100644 index 0000000..51e22a9 --- /dev/null +++ b/Juliet/src/Core/HAL/IO/IOStream.c @@ -0,0 +1,303 @@ +#include +#include +#include +#include +#include +#include +#include + +IOStream* IOFromFile(Arena* arena, String filename, String mode) +{ + Assert(arena != NULL); + IOStream* result = NULL; + + if (!IsValidString(filename)) + { + Log(LogLevel_Error, LogCategory_Core, "Trying to open IOStream on invalid filename"); + } + else if (!IsValidString(mode)) + { + Log(LogLevel_Error, LogCategory_Core, "Trying to open IOStream with invalid mode"); + } + else + { + result = Internal_IOFromFile(arena, filename, mode); + } + + return result; +} + +IOStream* IOFromInterface(Arena* arena, const IOStreamInterface* streamInterface, + IOStreamDataPayload* payload) +{ + Assert(arena != NULL); + Assert(streamInterface != NULL); + Assert(payload != NULL); + Assert(streamInterface->Version >= sizeof(*streamInterface)); + + IOStream* stream = ArenaPushStruct(arena, IOStream); + if (stream != NULL) + { + IOStreamInterface* dstInterface = &stream->Interface; + const IOStreamInterface* srcInterface = streamInterface; + StaticAssert(sizeof(*dstInterface) == sizeof(*srcInterface), SourceAndDestinationTypeMismatch); + MemCopy(dstInterface, srcInterface, sizeof(*srcInterface)); + stream->Data = payload; + } + return stream; +} + +size_t IOPrintf(IOStream* stream, _Printf_format_string_ const char* format, ...) +{ + Assert(stream != NULL); + Assert(format != NULL); + // TODO: Juliet format function should be able to allocate on scratch arena here. + // This buffer should be big enough until then + char formattedBuffer[4096]; + va_list args; + + va_start(args, format); + int writtenSize = vsnprintf(formattedBuffer, sizeof(formattedBuffer), format, args); + va_end(args); + + Assert(writtenSize >= 0); + + ByteBuffer buffer = { .Data = (Byte*)formattedBuffer, .Size = (size_t)writtenSize }; + return IOWrite(stream, buffer); +} + +size_t IOWrite(IOStream* stream, ByteBuffer inBuffer) +{ + Assert(stream != NULL); + size_t writtenBytes = 0; + + if (stream->Interface.Write == NULL) + { + stream->Status = IOStreamStatus_ReadOnly; + Log(LogLevel_Error, LogCategory_Core, "Trying to write to a readonly IOStream"); + } + else + { + stream->Status = IOStreamStatus_Ready; + + if (IsValidByteBuffer(inBuffer)) + { + writtenBytes = stream->Interface.Write(stream->Data, inBuffer, &stream->Status); + if ((writtenBytes == 0) && (stream->Status == IOStreamStatus_Ready)) + { + stream->Status = IOStreamStatus_Error; + } + } + } + + return writtenBytes; +} + +size_t IORead(IOStream* stream, void* ptr, size_t size) +{ + Assert(stream != NULL); + size_t bytes = 0; + + if (stream->Interface.Read == NULL) + { + Log(LogLevel_Error, LogCategory_Core, "Trying to read a writeonly IOStream"); + stream->Status = IOStreamStatus_WriteOnly; + } + else + { + stream->Status = IOStreamStatus_Ready; + if (size > 0) + { + bytes = stream->Interface.Read(stream->Data, ptr, size, &stream->Status); + if (bytes == 0 && stream->Status == IOStreamStatus_Ready) + { + // TODO: Detect error and do this stream->Status = IOStreamStatus_Error; + stream->Status = IOStreamStatus_EndOfFile; + } + } + } + + return bytes; +} + +int64 IOSeek(IOStream* stream, int64 offset, IOStreamSeekPivot pivot) +{ + Assert(stream != NULL); + int64 result = -1; + + if (stream->Interface.Seek == NULL) + { + Log(LogLevel_Error, LogCategory_Core, "IOSeek: Stream interface cannot Seek"); + } + else + { + result = stream->Interface.Seek(stream->Data, offset, pivot); + } + + return result; +} + +int64 IOSize(IOStream* stream) +{ + Assert(stream != NULL); + int64 result = -1; + + if (stream->Interface.Size == NULL) + { + int64 pos = IOSeek(stream, 0, IOStreamSeekPivot_Current); + if (pos >= 0) + { + result = IOSeek(stream, 0, IOStreamSeekPivot_End); + IOSeek(stream, pos, IOStreamSeekPivot_Begin); + } + } + else + { + result = stream->Interface.Size(stream->Data); + } + + return result; +} + +ByteBuffer LoadFile(Arena* arena, String filename) +{ + Assert(arena != NULL); + ByteBuffer result = { 0 }; + IOStream* stream = IOFromFile(arena, filename, WrapString("rb")); + if (stream != NULL) + { + result = LoadFileFromStream(arena, stream, true); + } + return result; +} + +ByteBuffer LoadFileFromStream(Arena* arena, IOStream* stream, bool8 closeStreamWhenDone) +{ + Assert(arena != NULL); + Assert(stream != NULL); + + const size_t kFileChunkSize = 1024; + ByteBuffer resultBuffer = { 0 }; + + // Try reading the size from the stream, if failing we'll try to read it chunk by chunk + bool8 loadChunks = false; + int64 ssize = IOSize(stream); + if (ssize < 0) + { + ssize = (int64)kFileChunkSize; + loadChunks = true; + } + size_t size = (size_t)ssize; + uint8* data = ArenaPushArrayNoZero(arena, uint8, size + 1); + if (data != NULL) + { + size_t totalSize = 0; + bool8 failed = false; + while (true) + { + if (loadChunks) + { + if ((totalSize + kFileChunkSize) > size) + { + size = totalSize + kFileChunkSize; + + // Not enough space, add some + uint8* newSpace = ArenaPushArrayNoZero(arena, uint8, kFileChunkSize); + if (newSpace == NULL) + { + failed = true; + break; + } + } + } + + size_t sizeRead = IORead(stream, data + totalSize, (size - totalSize)); + if (sizeRead > 0) + { + totalSize += sizeRead; + continue; + } + if (stream->Status == IOStreamStatus_NotReady) + { + // Wait for the stream to be ready + wait_ms(1); + continue; + } + + // The stream status will remain set for the caller to check + break; + } + + if (!failed) + { + // Adding null terminator + data[totalSize] = '\0'; + resultBuffer.Data = (Byte*)data; + resultBuffer.Size = totalSize; + } + } + + if (closeStreamWhenDone) + { + IOClose(stream); + } + + return resultBuffer; +} + +size_t IO_atomic_file_write(Path filepath, ByteBuffer file_content) +{ + size_t written_size = 0; + + TempArena temp_arena = scratch_begin(NULL, 0); + + size_t temp_size = filepath.FullPath.Size + sizeof(".tmp"); + char* tmp_str = (char*)ArenaPushSize(temp_arena.Arena, temp_size, 8, true JULIET_DEBUG_PARAM("Temp path")); + juliet_snprintf(tmp_str, temp_size, "%s.tmp", CStr(filepath.FullPath)); + Path temp_path = fs_create_clean_path(temp_arena.Arena, WrapString(tmp_str)); + + IOStream* temp_stream = IOFromFile(temp_arena.Arena, temp_path.FullPath, ConstString("w+")); + if (temp_stream != NULL) + { + written_size = IOWrite(temp_stream, file_content); + bool8 closed = IOClose(temp_stream); + if (closed && written_size == file_content.Size) + { + if (!fs_move_file(temp_path, filepath)) + { + LogError(LogCategory_Core, "IO_atomic_file_write [%s] failed to move from temp to final file. Aborting", + CStr(filepath.FullPath)); + written_size = 0; + } + } + else + { + LogError(LogCategory_Core, "IO_atomic_file_write [%s] failed to write into temporary file. Aborting", + CStr(filepath.FullPath)); + } + + if (written_size == 0) + { + fs_delete_file(temp_path.FullPath); + } + } + else + { + LogError(LogCategory_Core, "IO_atomic_file_write [%s] failed creating temporary file. Aborting", CStr(filepath.FullPath)); + } + + scratch_end(temp_arena); + + return written_size; +} + +bool8 IOClose(IOStream* stream) +{ + Assert(stream != NULL); + bool8 result = true; + if (stream->Interface.Close != NULL) + { + result = stream->Interface.Close(stream->Data); + } + return result; +} diff --git a/Juliet/src/Core/HAL/IO/IOStream.cpp b/Juliet/src/Core/HAL/IO/IOStream.cpp deleted file mode 100644 index d5661dc..0000000 --- a/Juliet/src/Core/HAL/IO/IOStream.cpp +++ /dev/null @@ -1,269 +0,0 @@ -#include - -#include -#include -#include -#include -#include -#include "Core/Thread/ThreadContext.h" - -IOStream* IOFromFile(NonNullPtr arena, String filename, String mode) -{ - if (!IsValid(filename)) - { - Log(LogLevel::Error, LogCategory::Core, "Trying to open IOStream on invalid filename"); - return nullptr; - } - - if (!IsValid(mode)) - { - Log(LogLevel::Error, LogCategory::Core, "Trying to open IOStream with invalid mode"); - return nullptr; - } - - return Internal::IOFromFile(arena, filename, mode); -} - -IOStream* IOFromInterface(NonNullPtr arena, NonNullPtr streamInterface, - NonNullPtr payload) -{ - Assert(streamInterface->Version >= sizeof(*streamInterface.Get())); - auto stream = ArenaPushStruct(arena); - if (stream) - { - IOStreamInterface* dstInterface = &stream->Interface; - const IOStreamInterface* srcInterface = streamInterface.Get(); - static_assert(sizeof(*(dstInterface)) == sizeof(*(srcInterface)), "Source and Destination type mismatch"); - MemCopy(dstInterface, srcInterface, sizeof(*srcInterface)); - stream->Data = payload.Get(); - } - return stream; -} - -size_t IOPrintf(NonNullPtr stream, _Printf_format_string_ const char* format, ...) -{ - // TODO: Juliet format function should be able to allocate on scratch arena here. - // This buffer should be big enough until then - char formattedBuffer[4096]; - va_list args; - - va_start(args, format); - int writtenSize = vsprintf_s(formattedBuffer, format, args); // Cast to void to ignore the return type. TODO : Juliet format function - va_end(args); - - Assert(writtenSize >= 0); - - ByteBuffer buffer = { .Data = reinterpret_cast(formattedBuffer), .Size = static_cast(writtenSize) }; - return IOWrite(stream, buffer); -} - -size_t IOWrite(NonNullPtr stream, ByteBuffer inBuffer) -{ - if (!stream->Interface.Write) - { - stream->Status = IOStreamStatus::ReadOnly; - Log(LogLevel::Error, LogCategory::Core, "Trying to write to a readonly IOStream"); - return 0; - } - - stream->Status = IOStreamStatus::Ready; - - if (!IsValid(inBuffer)) - { - return 0; - } - - size_t writtenBytes = stream->Interface.Write(stream->Data, inBuffer, &stream->Status); - if ((writtenBytes == 0) && (stream->Status == IOStreamStatus::Ready)) - { - stream->Status = IOStreamStatus::Error; - } - return writtenBytes; -} - -size_t IORead(NonNullPtr stream, void* ptr, size_t size) -{ - if (!stream->Interface.Read) - { - Log(LogLevel::Error, LogCategory::Core, "Trying to read a writeonly IOStream"); - stream->Status = IOStreamStatus::WriteOnly; - return 0; - } - - stream->Status = IOStreamStatus::Ready; - if (size == 0) - { - return 0; - } - size_t bytes = stream->Interface.Read(stream->Data, ptr, size, &stream->Status); - if (bytes == 0 && stream->Status == IOStreamStatus::Ready) - { - // TODO: Detect error and do this stream->Status = IOStreamStatus::Error; - stream->Status = IOStreamStatus::EndOfFile; - } - return bytes; -} - -int64 IOSeek(NonNullPtr stream, int64 offset, IOStreamSeekPivot pivot) -{ - if (!stream->Interface.Seek) - { - Log(LogLevel::Error, LogCategory::Core, "IOSeek: Stream interface cannot Seek"); - return -1; - } - return stream->Interface.Seek(stream->Data, offset, pivot); -} - -int64 IOSize(NonNullPtr stream) -{ - if (!stream->Interface.Size) - { - int64 pos = IOSeek(stream, 0, IOStreamSeekPivot::Current); - if (pos < 0) - { - return -1; - } - int64 size = IOSeek(stream, 0, IOStreamSeekPivot::End); - - IOSeek(stream, pos, IOStreamSeekPivot::Begin); - return size; - } - return stream->Interface.Size(stream->Data); -} - -ByteBuffer LoadFile(NonNullPtr arena, String filename) -{ - IOStream* stream = IOFromFile(arena, filename, WrapString("rb")); - if (!stream) - { - return {}; - } - return LoadFile(arena, stream, true); -} - -ByteBuffer LoadFile(NonNullPtr arena, NonNullPtr stream, bool closeStreamWhenDone) -{ - constexpr size_t kFileChunkSize = 1024; - - auto deferred = Defer( - [&]() - { - if (closeStreamWhenDone) - { - IOClose(stream); - } - }); - - // Try reading the size from the stream, if failing we'll try to read it chunk by chunk - bool loadChunks = false; - int64 ssize = IOSize(stream); - if (ssize < 0) - { - ssize = kFileChunkSize; - loadChunks = true; - } - size_t size = static_cast(ssize); - uint8* data = ArenaPushArray(arena, size + 1); - if (!data) - { - return {}; - } - - size_t totalSize = 0; - while (true) - { - if (loadChunks) - { - if ((totalSize + kFileChunkSize) > size) - { - size = totalSize + kFileChunkSize; - - // Not enough space, add some - uint8* newSpace = ArenaPushArray(arena, kFileChunkSize); - if (!newSpace) - { - return {}; - } - } - } - - size_t sizeRead = IORead(stream, data + totalSize, (size - totalSize)); - if (sizeRead > 0) - { - totalSize += sizeRead; - continue; - } - if (stream->Status == IOStreamStatus::NotReady) - { - // Wait for the stream to be ready - wait_ms(1); - continue; - } - - // The stream status will remain set for the caller to check - break; - } - - // Adding null terminator - data[totalSize] = '\0'; - - ByteBuffer resultBuffer = {}; - resultBuffer.Data = reinterpret_cast(data); - resultBuffer.Size = totalSize; - return resultBuffer; -} - -size_t IO_atomic_file_write(Path filepath, ByteBuffer file_content) -{ - size_t written_size = 0; - - TempArena temp_arena = scratch_begin(nullptr, 0); - - size_t temp_size = filepath.FullPath.Size + sizeof(".tmp"); - char* tmp_str = (char*)ArenaPushSize(temp_arena.Arena, temp_size, 8, true JULIET_DEBUG_PARAM("Temp path")); - juliet_snprintf(tmp_str, temp_size, "%s.tmp", CStr(filepath.FullPath)); - Path temp_path = fs_create_clean_path(temp_arena.Arena, WrapString(tmp_str)); - - if (IOStream* temp_stream = IOFromFile(temp_arena.Arena, temp_path.FullPath, ConstString("w+"))) - { - written_size = IOWrite(temp_stream, file_content); - bool closed = IOClose(temp_stream); - if (closed && written_size == file_content.Size) - { - if (!fs_move_file(temp_path, filepath)) - { - LogError(LogCategory::Core, "IO_atomic_file_write [%s] failed to move from temp to final file. Aborting", - CStr(filepath.FullPath)); - written_size = 0; - } - } - else - { - LogError(LogCategory::Core, "IO_atomic_file_write [%s] failed to write into temporary file. Aborting", - CStr(filepath.FullPath)); - } - - if (written_size == 0) - { - fs_delete_file(temp_path.FullPath); - } - } - else - { - LogError(LogCategory::Core, "IO_atomic_file_write [%s] failed creating temporary file. Aborting", CStr(filepath.FullPath)); - } - - scratch_end(temp_arena); - - return written_size; -} - -bool IOClose(NonNullPtr stream) -{ - bool result = true; - if (stream->Interface.Close) - { - result = stream->Interface.Close(stream->Data); - } - return result; -} diff --git a/Juliet/src/Core/HAL/IO/IOStream_cpp.h b/Juliet/src/Core/HAL/IO/IOStream_cpp.h index 49b8ffc..affcc6d 100644 --- a/Juliet/src/Core/HAL/IO/IOStream_cpp.h +++ b/Juliet/src/Core/HAL/IO/IOStream_cpp.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once #include #include @@ -10,7 +10,4 @@ struct IOStream IOStreamStatus Status; }; -namespace Internal -{ - IOStream* IOFromFile(NonNullPtr arena, String filename, String mode); -} // namespace Internal +IOStream* Internal_IOFromFile(Arena* arena, String filename, String mode); diff --git a/Juliet/src/Core/HAL/IO/Win32/Win32IOStream.c b/Juliet/src/Core/HAL/IO/Win32/Win32IOStream.c new file mode 100644 index 0000000..6a00c20 --- /dev/null +++ b/Juliet/src/Core/HAL/IO/Win32/Win32IOStream.c @@ -0,0 +1,367 @@ +#include +#include +#include +#include +#include +#include + +typedef struct Win32IOStreamDataPayload Win32IOStreamDataPayload; +struct Win32IOStreamDataPayload +{ + HANDLE Handle; + void* Data; + size_t Size; + size_t SizeLeft; + bool8 IsAppending; + bool8 ShouldAutoClose; +}; + +#define kFileReadBufferSize 1024 + +internal int64 Win32_FileSize(IOStreamDataPayload* payload) +{ + Assert(payload != NULL); + Win32IOStreamDataPayload* win32Payload = (Win32IOStreamDataPayload*)payload; + LARGE_INTEGER size = { 0 }; + int64 result = 0; + + if (!GetFileSizeEx(win32Payload->Handle, &size)) + { + Log(LogLevel_Error, LogCategory_Core, "IoStream:Size error: %d", GetLastError()); + } + else + { + result = size.QuadPart; + } + + return result; +} + +internal int64 Win32_FileSeek(IOStreamDataPayload* payload, int64 offset, IOStreamSeekPivot pivot) +{ + Assert(payload != NULL); + Win32IOStreamDataPayload* win32Payload = (Win32IOStreamDataPayload*)payload; + int64 result = 0; + bool8 validPivot = true; + + if ((pivot == IOStreamSeekPivot_Current) && (win32Payload->SizeLeft > 0)) + { + offset -= (int64)win32Payload->SizeLeft; + } + win32Payload->SizeLeft = 0; + + DWORD windowsPivot = 0; + switch (pivot) + { + case IOStreamSeekPivot_Begin: + { + windowsPivot = FILE_BEGIN; + break; + } + case IOStreamSeekPivot_Current: + { + windowsPivot = FILE_CURRENT; + break; + } + case IOStreamSeekPivot_End: + { + windowsPivot = FILE_END; + break; + } + case IOStreamSeekPivot_Count: + default: + { + Log(LogLevel_Error, LogCategory_Core, "IoStream:Seek: Invalid Pivot value"); + result = -1; + validPivot = false; + break; + } + } + StaticAssert(IOStreamSeekPivot_Count == 3, IOStreamSeekPivotCountMustBe3); + + if (validPivot) + { + LARGE_INTEGER windowsOffset; + windowsOffset.QuadPart = offset; + if (!SetFilePointerEx(win32Payload->Handle, windowsOffset, &windowsOffset, windowsPivot)) + { + Log(LogLevel_Error, LogCategory_Core, "IoStream:Seek:Error: %d", GetLastError()); + result = 0; + } + else + { + result = windowsOffset.QuadPart; + } + } + + return result; +} + +internal size_t Win32_FileRead(IOStreamDataPayload* payload, void* outBuffer, size_t size, IOStreamStatus* status) +{ + Assert(payload != NULL); + Assert(status != NULL); + + Win32IOStreamDataPayload* win32Payload = (Win32IOStreamDataPayload*)payload; + size_t totalNeed = size; + size_t totalRead = 0; + size_t sizeToReadAhead = 0; + bool8 done = false; + + if (win32Payload->SizeLeft > 0) + { + uint8* data = (uint8*)win32Payload->Data + win32Payload->Size - win32Payload->SizeLeft; + sizeToReadAhead = Min(totalNeed, win32Payload->SizeLeft); + MemCopy(outBuffer, data, sizeToReadAhead); + win32Payload->SizeLeft -= sizeToReadAhead; + + if (sizeToReadAhead == totalNeed) + { + totalRead = size; + done = true; + } + else + { + outBuffer = (uint8*)outBuffer + sizeToReadAhead; + totalNeed -= sizeToReadAhead; + totalRead += sizeToReadAhead; + } + } + + if (!done) + { + DWORD bytes = 0; + if (totalNeed < kFileReadBufferSize) + { + if (!ReadFile(win32Payload->Handle, win32Payload->Data, kFileReadBufferSize, &bytes, NULL)) + { + DWORD error = GetLastError(); + switch (error) + { + case ERROR_BROKEN_PIPE: + case ERROR_HANDLE_EOF: + { + break; + } + case ERROR_NO_DATA: + { + *status = IOStreamStatus_NotReady; + break; + } + default: + { + Log(LogLevel_Error, LogCategory_Core, "IoStream:Win32 Read: Error reading from data stream: %d", error); + break; + } + } + totalRead = 0; + } + else + { + sizeToReadAhead = Min(totalNeed, (size_t)bytes); + MemCopy(outBuffer, win32Payload->Data, sizeToReadAhead); + win32Payload->Size = bytes; + win32Payload->SizeLeft = bytes - sizeToReadAhead; + totalRead += sizeToReadAhead; + } + } + else + { + if (!ReadFile(win32Payload->Handle, outBuffer, (DWORD)totalNeed, &bytes, NULL)) + { + DWORD error = GetLastError(); + switch (error) + { + case ERROR_BROKEN_PIPE: + case ERROR_HANDLE_EOF: + { + break; + } + case ERROR_NO_DATA: + { + *status = IOStreamStatus_NotReady; + break; + } + default: + { + Log(LogLevel_Error, LogCategory_Core, "IoStream:Win32 Read: Error reading from data stream: %d", error); + break; + } + } + totalRead = 0; + } + else + { + totalRead += bytes; + } + } + } + + return totalRead; +} + +internal size_t Win32_FileWrite(IOStreamDataPayload* payload, ByteBuffer inBuffer, IOStreamStatus* status) +{ + Assert(payload != NULL); + Assert(status != NULL); + + Win32IOStreamDataPayload* win32Payload = (Win32IOStreamDataPayload*)payload; + DWORD bytes = 0; + size_t result = 0; + bool8 seekOk = true; + + if (win32Payload->SizeLeft > 0) + { + if (!SetFilePointer(win32Payload->Handle, -(LONG)win32Payload->SizeLeft, NULL, FILE_CURRENT)) + { + Log(LogLevel_Error, LogCategory_Core, "IoStream:FileWrite:Error seeking in datastream: %d", GetLastError()); + seekOk = false; + } + else + { + win32Payload->SizeLeft = 0; + } + } + + // if in append mode, we must go to the EOF before write + if (seekOk && win32Payload->IsAppending) + { + LARGE_INTEGER windowsOffset; + windowsOffset.QuadPart = 0; + if (!SetFilePointerEx(win32Payload->Handle, windowsOffset, &windowsOffset, FILE_END)) + { + Log(LogLevel_Error, LogCategory_Core, "IoStream:FileWrite:Error seeking in datastream: %d", GetLastError()); + seekOk = false; + } + } + + if (seekOk) + { + if (!WriteFile(win32Payload->Handle, inBuffer.Data, (DWORD)inBuffer.Size, &bytes, NULL)) + { + Log(LogLevel_Error, LogCategory_Core, "IoStream:FileWrite:Error writing to datastream: %d", GetLastError()); + } + else + { + if (bytes == 0 && inBuffer.Size > 0) + { + *status = IOStreamStatus_NotReady; + } + result = bytes; + } + } + + return result; +} + +internal bool8 Win32_FileClose(IOStreamDataPayload* payload) +{ + Assert(payload != NULL); + Win32IOStreamDataPayload* win32Payload = (Win32IOStreamDataPayload*)payload; + if (win32Payload->Handle != INVALID_HANDLE_VALUE) + { + if (win32Payload->ShouldAutoClose) + { + CloseHandle(win32Payload->Handle); + } + win32Payload->Handle = INVALID_HANDLE_VALUE; + } + return true; +} + +IOStream* Internal_IOFromFile(Arena* arena, String filename, String mode) +{ + Assert(arena != NULL); + IOStream* stream = NULL; + + // "r" = reading, file must exist + // "w" = writing, truncate existing, file may not exist + // "r+"= reading or writing, file must exist + // "a" = writing, append file may not exist + // "a+"= append + read, file may not exist + // "w+" = read, write, truncate. file may not exist + +#if JULIET_DEBUG + // Making sure the mode is valid + size_t modeLength = StringLength(mode); + Assert((modeLength <= 2) && + "Mode should have at most 2 characters, one being either r,w or a and the other can only be +"); + if (modeLength == 1) + { + Assert((mode.Str[0] == 'r' || mode.Str[0] == 'w' || mode.Str[0] == 'a') && + "Invalid Mode. First char is not r,w or a"); + } + else + { + Assert((mode.Str[1] == '+' || mode.Str[1] == 'b') && "Invalid Mode. Second char is not +"); + } +#endif + + DWORD openExisting = ContainsChar(mode, 'r') ? OPEN_EXISTING : 0; + DWORD createAlways = ContainsChar(mode, 'w') ? CREATE_ALWAYS : 0; + const bool8 isAppending = ContainsChar(mode, 'a'); + DWORD openAlways = isAppending ? OPEN_ALWAYS : 0; + + bool8 hasPlus = ContainsChar(mode, '+'); + DWORD canRead = (openExisting || hasPlus) ? GENERIC_READ : 0; + DWORD canWrite = (createAlways || openAlways || hasPlus) ? GENERIC_WRITE : 0; + + if (!canRead && !canWrite) + { + Log(LogLevel_Error, LogCategory_Core, "IOFromFile: Invalid Mode (cannot read nor write)"); + } + else + { + HANDLE hFile = CreateFileA(CStr(filename), (canWrite | canRead), (canWrite) ? 0 : FILE_SHARE_READ, NULL, + (openExisting | createAlways | openAlways), FILE_ATTRIBUTE_NORMAL, NULL); + if (hFile == INVALID_HANDLE_VALUE) + { + Log(LogLevel_Error, LogCategory_Core, "IOFromFile: couldn't open %s. Error: %d", CStr(filename), GetLastError()); + } + else + { + const bool8 autoClose = true; + Win32IOStreamDataPayload* payload = ArenaPushStruct(arena, Win32IOStreamDataPayload); + if (payload == NULL) + { + if (autoClose) + { + CloseHandle(hFile); + } + } + else + { + IOStreamInterface iface = { 0 }; + iface.Version = sizeof(iface); + if (GetFileType(hFile) == FILE_TYPE_DISK) + { + iface.Size = Win32_FileSize; + iface.Seek = Win32_FileSeek; + } + iface.Read = Win32_FileRead; + iface.Write = Win32_FileWrite; + iface.Close = Win32_FileClose; + + payload->Handle = hFile; + payload->IsAppending = isAppending; + payload->ShouldAutoClose = autoClose; + + payload->Data = ArenaPushArrayNoZero(arena, char, kFileReadBufferSize); + if (payload->Data == NULL) + { + iface.Close((IOStreamDataPayload*)payload); + } + else + { + stream = IOFromInterface(arena, &iface, (IOStreamDataPayload*)payload); + if (stream == NULL) + { + iface.Close((IOStreamDataPayload*)payload); + } + } + } + } + } + + return stream; +} diff --git a/Juliet/src/Core/HAL/IO/Win32/Win32IOStream.cpp b/Juliet/src/Core/HAL/IO/Win32/Win32IOStream.cpp deleted file mode 100644 index a3aca19..0000000 --- a/Juliet/src/Core/HAL/IO/Win32/Win32IOStream.cpp +++ /dev/null @@ -1,276 +0,0 @@ -#include -#include -#include -#include -#include -#include - -namespace Internal -{ - namespace - { - struct Win32IOStreamDataPayload : IOStreamDataPayload - { - HANDLE Handle; - void* Data; - size_t Size; - size_t SizeLeft; - bool IsAppending; - bool ShouldAutoClose; - }; - - constexpr size_t kFileReadBufferSize = 1024; - - int64 FileSize(NonNullPtr payload) - { - Win32IOStreamDataPayload* win32Payload = static_cast(payload.Get()); - LARGE_INTEGER size; - - if (!GetFileSizeEx(win32Payload->Handle, &size)) - { - Log(LogLevel::Error, LogCategory::Core, "IoStream:Size error: %d", GetLastError()); - return 0; - } - - return size.QuadPart; - } - - int64 FileSeek(NonNullPtr payload, int64 offset, IOStreamSeekPivot pivot) - { - Win32IOStreamDataPayload* win32Payload = static_cast(payload.Get()); - if ((pivot == IOStreamSeekPivot::Current) && (win32Payload->SizeLeft > 0)) - { - offset -= static_cast(win32Payload->SizeLeft); - } - win32Payload->SizeLeft = 0; - - DWORD windowsPivot = 0; - switch (pivot) - { - case IOStreamSeekPivot::Begin: windowsPivot = FILE_BEGIN; break; - case IOStreamSeekPivot::Current: windowsPivot = FILE_CURRENT; break; - case IOStreamSeekPivot::End: windowsPivot = FILE_END; break; - case IOStreamSeekPivot::Count: - Log(LogLevel::Error, LogCategory::Core, "IoStream:Seek: Invalid Pivot value"); - return -1; - } - static_assert(ToUnderlying(IOStreamSeekPivot::Count) == 3, "IOStreamSeekPivot::Count must be 3"); - - LARGE_INTEGER windowsOffset; - windowsOffset.QuadPart = offset; - if (!SetFilePointerEx(win32Payload->Handle, windowsOffset, &windowsOffset, windowsPivot)) - { - Log(LogLevel::Error, LogCategory::Core, "IoStream:Seek:Error: %d", GetLastError()); - return 0; - } - return windowsOffset.QuadPart; - } - - size_t FileRead(NonNullPtr payload, void* outBuffer, size_t size, NonNullPtr status) - { - Win32IOStreamDataPayload* win32Payload = static_cast(payload.Get()); - size_t totalNeed = size; - size_t totalRead = 0; - size_t sizeToReadAhead = 0; - if (win32Payload->SizeLeft > 0) - { - uint8* data = static_cast(win32Payload->Data) + win32Payload->Size - win32Payload->SizeLeft; - sizeToReadAhead = Min(totalNeed, win32Payload->SizeLeft); - MemCopy(outBuffer, data, sizeToReadAhead); - win32Payload->SizeLeft -= sizeToReadAhead; - - if (sizeToReadAhead == totalNeed) - { - return size; - } - outBuffer = static_cast(outBuffer) + sizeToReadAhead; - totalNeed -= sizeToReadAhead; - totalRead += sizeToReadAhead; - } - - DWORD bytes = 0; - if (totalNeed < kFileReadBufferSize) - { - if (!ReadFile(win32Payload->Handle, win32Payload->Data, kFileReadBufferSize, &bytes, nullptr)) - { - switch (DWORD error = GetLastError()) - { - case ERROR_BROKEN_PIPE: - case ERROR_HANDLE_EOF: break; - case ERROR_NO_DATA: *status = IOStreamStatus::NotReady; break; - default: - Log(LogLevel::Error, LogCategory::Core, "IoStream:Win32 Read: Error reading from data stream: %d", error); - break; - } - return 0; - } - sizeToReadAhead = Min(totalNeed, static_cast(bytes)); - MemCopy(outBuffer, win32Payload->Data, sizeToReadAhead); - win32Payload->Size = bytes; - win32Payload->SizeLeft = bytes - sizeToReadAhead; - totalRead += sizeToReadAhead; - } - else - { - if (!ReadFile(win32Payload->Handle, outBuffer, static_cast(totalNeed), &bytes, nullptr)) - { - switch (DWORD error = GetLastError()) - { - case ERROR_BROKEN_PIPE: - case ERROR_HANDLE_EOF: break; - case ERROR_NO_DATA: *status = IOStreamStatus::NotReady; break; - default: - Log(LogLevel::Error, LogCategory::Core, "IoStream:Win32 Read: Error reading from data stream: %d", error); - break; - } - return 0; - } - totalRead += bytes; - } - return totalRead; - } - - size_t FileWrite(NonNullPtr payload, ByteBuffer inBuffer, NonNullPtr status) - { - Win32IOStreamDataPayload* win32Payload = static_cast(payload.Get()); - DWORD bytes; - - if (win32Payload->SizeLeft) - { - if (!SetFilePointer(win32Payload->Handle, -static_cast(win32Payload->SizeLeft), nullptr, FILE_CURRENT)) - { - Log(LogLevel::Error, LogCategory::Core, "IoStream:FileWrite:Error seeking in datastream: %d", GetLastError()); - return 0; - } - win32Payload->SizeLeft = 0; - } - - // if in append mode, we must go to the EOF before write - if (win32Payload->IsAppending) - { - LARGE_INTEGER windowsOffset; - windowsOffset.QuadPart = 0; - if (!SetFilePointerEx(win32Payload->Handle, windowsOffset, &windowsOffset, FILE_END)) - { - Log(LogLevel::Error, LogCategory::Core, "IoStream:FileWrite:Error seeking in datastream: %d", GetLastError()); - return 0; - } - } - - if (!WriteFile(win32Payload->Handle, inBuffer.Data, static_cast(inBuffer.Size), &bytes, nullptr)) - { - Log(LogLevel::Error, LogCategory::Core, "IoStream:FileWrite:Error writing to datastream: %d", GetLastError()); - return 0; - } - if (bytes == 0 && inBuffer.Size > 0) - { - *status = IOStreamStatus::NotReady; - } - return bytes; - } - - bool FileClose(NonNullPtr payload) - { - auto win32Payload = static_cast(payload.Get()); - if (win32Payload->Handle != INVALID_HANDLE_VALUE) - { - if (win32Payload->ShouldAutoClose) - { - CloseHandle(win32Payload->Handle); - } - win32Payload->Handle = INVALID_HANDLE_VALUE; - } - return true; - } - - } // namespace - - IOStream* IOFromFile(NonNullPtr arena, String filename, String mode) - { - // "r" = reading, file must exist - // "w" = writing, truncate existing, file may not exist - // "r+"= reading or writing, file must exist - // "a" = writing, append file may not exist - // "a+"= append + read, file may not exist - // "w+" = read, write, truncate. file may not exist - -#if JULIET_DEBUG - // Making sure the mode is valid - size_t modeLength = StringLength(mode); - Assert((modeLength <= 2) && - "Mode should have at most 2 characters, one being either r,w or a and the other can only be +"); - if (modeLength == 1) - { - Assert((mode.Str[0] == 'r' || mode.Str[0] == 'w' || mode.Str[0] == 'a') && - "Invalid Mode. First char is not r,w or a"); - } - else - { - Assert((mode.Str[1] == '+' || mode.Str[1] == 'b') && "Invalid Mode. Second char is not +"); - } -#endif - - DWORD openExisting = ContainsChar(mode, 'r') ? OPEN_EXISTING : 0; - DWORD createAlways = ContainsChar(mode, 'w') ? CREATE_ALWAYS : 0; - const bool isAppending = ContainsChar(mode, 'a'); - DWORD openAlways = isAppending ? OPEN_ALWAYS : 0; - - bool hasPlus = ContainsChar(mode, '+'); - DWORD canRead = openExisting || hasPlus ? GENERIC_READ : 0; - DWORD canWrite = createAlways || openAlways || hasPlus ? GENERIC_WRITE : 0; - - if (!canRead && !canWrite) - { - Log(LogLevel::Error, LogCategory::Core, "IOFromFile: Invalid Mode (cannot read nor write)"); - return nullptr; - } - - HANDLE hFile = CreateFileA(CStr(filename), (canWrite | canRead), (canWrite) ? 0 : FILE_SHARE_READ, nullptr, - (openExisting | createAlways | openAlways), FILE_ATTRIBUTE_NORMAL, nullptr); - if (hFile == INVALID_HANDLE_VALUE) - { - Log(LogLevel::Error, LogCategory::Core, "IOFromFile: couldn't open %s. Error: %d", CStr(filename), GetLastError()); - return nullptr; - } - - constexpr bool autoClose = true; - Win32IOStreamDataPayload* payload = ArenaPushStruct(arena); - if (!payload) - { - if (autoClose) - { - CloseHandle(hFile); - } - return nullptr; - } - - IOStreamInterface iface = {}; - iface.Version = sizeof(iface); - if (GetFileType(hFile) == FILE_TYPE_DISK) - { - iface.Size = FileSize; - iface.Seek = FileSeek; - } - iface.Read = FileRead; - iface.Write = FileWrite; - iface.Close = FileClose; - - payload->Handle = hFile; - payload->IsAppending = isAppending; - payload->ShouldAutoClose = autoClose; - - payload->Data = ArenaPushArray(arena, kFileReadBufferSize); - if (!payload->Data) - { - iface.Close(payload); - return nullptr; - } - - IOStream* stream = IOFromInterface(arena, &iface, payload); - if (!stream) - { - iface.Close(payload); - } - return stream; - } -} // namespace Internal diff --git a/Juliet/src/Core/HAL/OS/OS.c b/Juliet/src/Core/HAL/OS/OS.c new file mode 100644 index 0000000..3a4f2f2 --- /dev/null +++ b/Juliet/src/Core/HAL/OS/OS.c @@ -0,0 +1,78 @@ +#include +#include +#include +#include + +global float g_delta_time = 0.0f; +global uint64 g_frame = 0; + +Byte* OS_Reserve(size_t size) +{ + return OS_Internal_Reserve(size); +} + +bool8 OS_Commit(void* ptr, size_t size) +{ + return OS_Internal_Commit((Byte*)ptr, size); +} + +void OS_Release(void* ptr, size_t size) +{ + OS_Internal_Release((Byte*)ptr, size); +} + +uint64 Time_Timestamp(void) +{ + return OS_Internal_Timestamp(); +} + +void Time_ComputeDeltaTime(void) +{ + g_delta_time = OS_Internal_ComputeDeltaTime(); + ++g_frame; +} + +float Time_GetDeltaTime(void) +{ + return g_delta_time; +} + +uint64 Time_GetFrameNumber(void) +{ + return g_frame; +} + +bool8 Debug_IsDebuggerPresent(void) +{ + return OS_Internal_IsDebuggerPresent(); +} + +String os_get_env_var(Arena* arena, String name) +{ + return OS_Internal_get_env_var(arena, name); +} + +void os_set_env_var(String name, String value) +{ + OS_Internal_set_env_var(name, value); +} + +String os_get_username(Arena* arena) +{ + return OS_Internal_get_username(arena); +} + +int Bootstrap(EntryPointFunc entryPointFunc, int argc, wchar_t** argv) +{ + int result = OS_Internal_Main(argc, argv); + if (result == 0) + { + set_thread_name(WrapString("main_thread")); + + result = entryPointFunc(argc, argv); + } + + OS_Internal_Main_Exit(); + + return result; +} diff --git a/Juliet/src/Core/HAL/OS/OS.cpp b/Juliet/src/Core/HAL/OS/OS.cpp deleted file mode 100644 index f7c1573..0000000 --- a/Juliet/src/Core/HAL/OS/OS.cpp +++ /dev/null @@ -1,92 +0,0 @@ -#include -#include -#include -#include -#include - -namespace Memory -{ - Byte* OS_Reserve(size_t size) - { - return Internal::OS_Reserve(size); - } - - bool OS_Commit(Byte* ptr, size_t size) - { - return Internal::OS_Commit(ptr, size); - } - - void OS_Release(Byte* ptr, size_t size) - { - Internal::OS_Release(ptr, size); - } -} // namespace Memory - -namespace Time -{ - namespace - { - float DeltaTime = 0.0f; - uint64 Frame = 0; - } // namespace - - uint64 Timestamp() - { - return Internal::OS_Timestamp(); - } - - void ComputeDeltaTime() - { - DeltaTime = Internal::OS_ComputeDeltaTime(); - ++Frame; - } - - float GetDeltaTime() - { - return DeltaTime; - } - - uint64 GetFrameNumber() - { - return Frame; - } -} // namespace Time - -namespace Debug -{ - bool IsDebuggerPresent() - { - return Internal::IsDebuggerPresent(); - } -} // namespace Debug - -String os_get_env_var(NonNullPtr arena, const String& name) -{ - String result = Internal::os_get_env_var(arena, name); - return result; -} - -void os_set_env_var(const String& name, const String& value) -{ - Internal::os_set_env_var(name, value); -} - -String os_get_username(NonNullPtr arena) -{ - return Internal::os_get_username(arena); -} - -int Bootstrap(EntryPointFunc entryPointFunc, int argc, wchar_t** argv) -{ - int result = Internal::OS_Main(argc, argv); - if (result == 0) - { - set_thread_name(WrapString("main_thread")); - - result = entryPointFunc(argc, argv); - } - - Internal::OS_Main_Exit(); - - return result; -} diff --git a/Juliet/src/Core/HAL/OS/OS_Private.h b/Juliet/src/Core/HAL/OS/OS_Private.h index 37e785e..778b9eb 100644 --- a/Juliet/src/Core/HAL/OS/OS_Private.h +++ b/Juliet/src/Core/HAL/OS/OS_Private.h @@ -1,30 +1,20 @@ -#pragma once +#pragma once -namespace Memory::Internal -{ - Byte* OS_Reserve(size_t size); - bool OS_Commit(Byte* ptr, size_t size); - void OS_Release(Byte* ptr, size_t size); -} // namespace Memory::Internal +#include +#include -namespace Debug::Internal -{ - bool IsDebuggerPresent(); -} // namespace Debug::Internal +Byte* OS_Internal_Reserve(size_t size); +bool8 OS_Internal_Commit(Byte* ptr, size_t size); +void OS_Internal_Release(Byte* ptr, size_t size); -namespace Time::Internal -{ - uint64 OS_Timestamp(); - float OS_ComputeDeltaTime(); -} // namespace Time::Internal +bool8 OS_Internal_IsDebuggerPresent(void); -namespace Internal -{ - String os_get_env_var(NonNullPtr arena, const String& name); - void os_set_env_var(const String& name, const String& value); +uint64 OS_Internal_Timestamp(void); +float OS_Internal_ComputeDeltaTime(void); - String os_get_username(NonNullPtr arena); +String OS_Internal_get_env_var(Arena* arena, String name); +void OS_Internal_set_env_var(String name, String value); +String OS_Internal_get_username(Arena* arena); - int OS_Main(int argc, wchar_t** argv); - void OS_Main_Exit(); -} // namespace Internal +int OS_Internal_Main(int argc, wchar_t** argv); +void OS_Internal_Main_Exit(void); diff --git a/Juliet/src/Core/HAL/OS/Win32/Win32OS.c b/Juliet/src/Core/HAL/OS/Win32/Win32OS.c new file mode 100644 index 0000000..ea795b1 --- /dev/null +++ b/Juliet/src/Core/HAL/OS/Win32/Win32OS.c @@ -0,0 +1,134 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +Win32_SetThreadDescription_FuncType Win32_SetThreadDescription_Func = NULL; + +Byte* OS_Internal_Reserve(size_t size) +{ + Byte* result = (Byte*)VirtualAlloc(NULL, size, MEM_RESERVE, PAGE_READWRITE); + return result; +} + +bool8 OS_Internal_Commit(Byte* ptr, size_t size) +{ + bool8 result = (VirtualAlloc(ptr, size, MEM_COMMIT, PAGE_READWRITE) != NULL); + return result; +} + +void OS_Internal_Release(Byte* ptr, size_t size) +{ + (void)size; + VirtualFree(ptr, 0, MEM_RELEASE); +} + +uint64 OS_Internal_Timestamp(void) +{ + FILETIME ft; + GetSystemTimeAsFileTime(&ft); + return ((uint64)ft.dwHighDateTime << 32) + ft.dwLowDateTime; +} + +float OS_Internal_ComputeDeltaTime(void) +{ + static LARGE_INTEGER frequency = { 0 }; + static LARGE_INTEGER lastTime = { 0 }; + if (frequency.QuadPart == 0) + { + QueryPerformanceFrequency(&frequency); + QueryPerformanceCounter(&lastTime); + } + + LARGE_INTEGER currentTime; + QueryPerformanceCounter(¤tTime); + const float deltaTime = (float)(currentTime.QuadPart - lastTime.QuadPart) / (float)frequency.QuadPart; + lastTime = currentTime; + + return deltaTime; +} + +bool8 OS_Internal_IsDebuggerPresent(void) +{ + return IsDebuggerPresent() != 0; +} + +internal LONG WINAPI ExceptionFilter(EXCEPTION_POINTERS* exceptionPtrs) +{ + (void)exceptionPtrs; + ExitProcess(1); +} + +ThreadLocal thread_context* g_main_thread = NULL; + +String OS_Internal_get_env_var(Arena* arena, String name) +{ + Assert(arena != NULL); + char buffer[256]; + String result = { 0 }; + + if (GetEnvironmentVariableA(CStr(name), buffer, sizeof(buffer)) != 0) + { + result = StringCopy(arena, WrapString(buffer)); + } + + return result; +} + +void OS_Internal_set_env_var(String name, String value) +{ + SetEnvironmentVariableA(CStr(name), CStr(value)); +} + +String OS_Internal_get_username(Arena* arena) +{ + Assert(arena != NULL); + char username[256]; + DWORD usernameLength = sizeof(username); + String result = { 0 }; + if (GetUserNameA(username, &usernameLength) && usernameLength > 1) + { + String temp = { username, (size_t)(usernameLength - 1) }; + result = StringCopy(arena, temp); + } + return result; +} + +int OS_Internal_Main(int argc, wchar_t** argv) +{ + (void)argc; + (void)argv; + int result = 0; + + SetUnhandledExceptionFilter(&ExceptionFilter); + + CreateMutexW(NULL, FALSE, L"Local\\Juliet.App"); + if (GetLastError() == ERROR_ALREADY_EXISTS) + { + MessageBoxW(NULL, L"An instance of Juliet is already running.", L"Juliet", MB_OK | MB_ICONEXCLAMATION); + result = EXIT_FAILURE; + } + else + { + DynamicLibrary* dynLib = LoadDynamicLibrary("kernel32.dll"); + Win32_SetThreadDescription_Func = (Win32_SetThreadDescription_FuncType)LoadFunction(dynLib, "SetThreadDescription"); + + g_main_thread = thread_context_alloc(); + thread_context_select(g_main_thread); + } + + return result; +} + +void OS_Internal_Main_Exit(void) +{ + if (g_main_thread != NULL) + { + thread_context_release(g_main_thread); + g_main_thread = NULL; + } +} diff --git a/Juliet/src/Core/HAL/OS/Win32/Win32OS.cpp b/Juliet/src/Core/HAL/OS/Win32/Win32OS.cpp deleted file mode 100644 index 55093c6..0000000 --- a/Juliet/src/Core/HAL/OS/Win32/Win32OS.cpp +++ /dev/null @@ -1,175 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include - -Win32_SetThreadDescription_FuncType* Win32_SetThreadDescription_Func = nullptr; - -namespace -{ - RIO_EXTENSION_FUNCTION_TABLE w32_rio_functions = {}; -} // namespace - -namespace Memory::Internal -{ - Byte* OS_Reserve(size_t size) - { - auto* result = static_cast(VirtualAlloc(nullptr, size, MEM_RESERVE, PAGE_READWRITE)); - return result; - } - - bool OS_Commit(Byte* ptr, size_t size) - { - bool result = (VirtualAlloc(ptr, size, MEM_COMMIT, PAGE_READWRITE) != nullptr); - - Assert(size <= static_cast(MaxValueOf())); - - if (w32_rio_functions.RIORegisterBuffer != nullptr && w32_rio_functions.RIODeregisterBuffer != nullptr) - { - w32_rio_functions.RIODeregisterBuffer( - w32_rio_functions.RIORegisterBuffer(reinterpret_cast(ptr), static_cast(size))); - } - - return result; - } - - void OS_Release(Byte* ptr, size_t size) - { - // size not used on windows - std::ignore = size; - - VirtualFree(ptr, 0, MEM_RELEASE); - } -} // namespace Memory::Internal - -namespace Time::Internal -{ - uint64 OS_Timestamp() - { - FILETIME ft; - GetSystemTimeAsFileTime(&ft); - - return (static_cast(ft.dwHighDateTime) << 32) + ft.dwLowDateTime; - } - - float OS_ComputeDeltaTime() - { - static LARGE_INTEGER frequency = {}; - static LARGE_INTEGER lastTime = {}; - if (frequency.QuadPart == 0) - { - QueryPerformanceFrequency(&frequency); - QueryPerformanceCounter(&lastTime); - } - - LARGE_INTEGER currentTime; - QueryPerformanceCounter(¤tTime); - const float deltaTime = - static_cast(currentTime.QuadPart - lastTime.QuadPart) / static_cast(frequency.QuadPart); - lastTime = currentTime; - - return deltaTime; - } - -} // namespace Time::Internal - -namespace Debug::Internal -{ - bool IsDebuggerPresent() - { - return ::IsDebuggerPresent(); - } -} // namespace Debug::Internal - -namespace -{ - // Used to handle a crash/exception - LONG WINAPI ExceptionFilter(EXCEPTION_POINTERS* exceptionPtrs) - { - (void)exceptionPtrs; - // See for more info https://github.com/EpicGamesExt/raddebugger/blob/master/src/os/core/win32/os_core_win32.c - ExitProcess(1); - } -} // namespace - -namespace Internal -{ - thread_local thread_context* mainThread = nullptr; - - String os_get_env_var(NonNullPtr arena, const String& name) - { - char buffer[256]; - String result = {}; - - if (GetEnvironmentVariableA(CStr(name), buffer, sizeof(buffer)) != 0) - { - result = StringCopy(arena, WrapString(buffer)); - } - - return result; - } - - void os_set_env_var(const String& name, const String& value) - { - SetEnvironmentVariableA(CStr(name), CStr(value)); - } - - String os_get_username(NonNullPtr arena) - { - char username[256]; - DWORD usernameLength = sizeof(username); - String result = {}; - if (GetUserNameA(username, &usernameLength) && usernameLength > 1) - { - // GetUserNameA returns the length including trailing \0 - result = StringCopy(arena, { username, usernameLength - 1 }); - } - return result; - } - - int OS_Main([[maybe_unused]] int argc, [[maybe_unused]] wchar_t** argv) - { - SetUnhandledExceptionFilter(&ExceptionFilter); - - // Allow only one instance to be launched. - CreateMutex(nullptr, false, L"Local\\Juliet.App"); - if (GetLastError() == ERROR_ALREADY_EXISTS) - { - MessageBox(nullptr, L"An instance of Juliet is already running.", L"Juliet", MB_OK | MB_ICONEXCLAMATION); - return EXIT_FAILURE; - } - - // Get some kernel32 functions - auto dynLib = LoadDynamicLibrary("kernel32.dll"); - Win32_SetThreadDescription_Func = - (Win32_SetThreadDescription_FuncType*)LoadFunction(dynLib, "SetThreadDescription"); - - // Create a dummy socket to access RIO functions. Those will be used to do fine memory management - { - WSADATA WinSockData; - WSAStartup(MAKEWORD(2, 2), &WinSockData); - GUID guid = WSAID_MULTIPLE_RIO; - DWORD rio_byte = 0; - SOCKET Sock = socket(AF_UNSPEC, SOCK_STREAM, IPPROTO_TCP); - WSAIoctl(Sock, SIO_GET_MULTIPLE_EXTENSION_FUNCTION_POINTER, &guid, sizeof(guid), - reinterpret_cast(&w32_rio_functions), sizeof(w32_rio_functions), &rio_byte, nullptr, nullptr); - closesocket(Sock); - } - - mainThread = thread_context_alloc(); - thread_context_select(mainThread); - - return 0; - } - - void OS_Main_Exit() - { - Assert(mainThread); - thread_context_release(mainThread); - mainThread = nullptr; - } -} // namespace Internal diff --git a/Juliet/src/Core/HAL/Win32.h b/Juliet/src/Core/HAL/Win32.h index e81b223..8286430 100644 --- a/Juliet/src/Core/HAL/Win32.h +++ b/Juliet/src/Core/HAL/Win32.h @@ -14,7 +14,15 @@ #define UNICODE #endif -// Only Supports Win10 and greater +#ifndef __cplusplus +#ifndef CINTERFACE +#define CINTERFACE +#endif +#ifndef COBJMACROS +#define COBJMACROS +#endif +#endif + #ifdef __clang__ #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wreserved-macro-identifier" @@ -23,7 +31,7 @@ #undef WINVER #undef _WIN32_WINNT #define _WIN32_WINNT _WIN32_WINNT_WIN10 -#define WINVER _WIN32_WINNT +#define WINVER _WIN32_WINNT #ifdef __clang__ #pragma clang diagnostic pop @@ -59,21 +67,14 @@ #define NOPROFILER #define NODEFERWINDOWPOS #define NOMCX -#define NOIME #define NOPROXYSTUB #define NOIMAGE -#define NO #define NOTAPE #define ANSI_ONLY -// Keep includes in that order -#include - -#include - #include #undef min #undef max -using Win32_SetThreadDescription_FuncType = HRESULT(HANDLE hThread, PCWSTR lpThreadDescription); +typedef HRESULT (*Win32_SetThreadDescription_FuncType)(HANDLE hThread, PCWSTR lpThreadDescription); diff --git a/Juliet/src/Core/HotReload/HotReload.c b/Juliet/src/Core/HotReload/HotReload.c new file mode 100644 index 0000000..adc81a3 --- /dev/null +++ b/Juliet/src/Core/HotReload/HotReload.c @@ -0,0 +1,69 @@ +#include +#include +#include +#include +#include +#include + +#define MAX_TRIES 100 + +void InitHotReloadCode(Arena* arena, HotReloadCode* code, String dllName, String transientDllName, String lockFilename) +{ + Assert(arena != NULL); + Assert(code != NULL); + + Path basePath = GetBasePath(); + size_t basePathLength = basePath.Directories.Size; + + code->TransientDLLName = transientDllName; + + const size_t dllFullPathLength = basePathLength + StringLength(dllName) + 1; + code->DLLFullPath.Str = + (char*)ArenaPush(arena, dllFullPathLength, AlignOf(char), true JULIET_DEBUG_PARAM("Hot Reload DLL Path")); + int writtenSize = + snprintf(CStr(code->DLLFullPath), dllFullPathLength, "%s%s", CStr(basePath.Directories), CStr(dllName)); + if (writtenSize < (int)(dllFullPathLength)-1) + { + Log(LogLevel_Error, LogCategory_Core, "Cannot create DLL Full Path"); + } + else + { + code->DLLFullPath.Size = (size_t)writtenSize; + + const size_t lockPathLength = basePathLength + StringLength(lockFilename) + 1; + code->LockFullPath.Str = (char*)ArenaPush(arena, lockPathLength, AlignOf(char), + true JULIET_DEBUG_PARAM("Hot Reload Lock File Path")); + writtenSize = + snprintf(CStr(code->LockFullPath), lockPathLength, "%s%s", CStr(basePath.Directories), CStr(lockFilename)); + if (writtenSize < (int)(lockPathLength)-1) + { + code->LockFullPath.Size = 0; + Log(LogLevel_Error, LogCategory_Core, "Cannot create lock file full path"); + } + else + { + code->LockFullPath.Size = (size_t)writtenSize; + LoadCode(code); + } + } +} + +void ShutdownHotReloadCode(HotReloadCode* code) +{ + Assert(code != NULL); + UnloadCode(code); + + code->DLLFullPath.Size = 0; + code->LockFullPath.Size = 0; +} + +void ReloadCode(HotReloadCode* code) +{ + Assert(code != NULL); + UnloadCode(code); + for (uint32 tryItr = 0; !code->IsValid && tryItr < MAX_TRIES; ++tryItr) + { + LoadCode(code); + wait_ms(100); + } +} diff --git a/Juliet/src/Core/HotReload/HotReload.cpp b/Juliet/src/Core/HotReload/HotReload.cpp deleted file mode 100644 index 98df5d5..0000000 --- a/Juliet/src/Core/HotReload/HotReload.cpp +++ /dev/null @@ -1,65 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#define MAX_TRIES 100 - -void InitHotReloadCode(NonNullPtr arena, HotReloadCode& code, String dllName, String transientDllName, String lockFilename) -{ - // Get the app base path and build the dll path from there. - Path basePath = GetBasePath(); - size_t basePathLength = basePath.Directories.Size; - - // Assign Transient dll path - code.TransientDLLName = transientDllName; - - // First allocate all the full path. - // TODO: Add path composition into filesystem + string format + string builder - const size_t dllFullPathLength = basePathLength + StringLength(dllName) + 1; // Need +1 because snprintf needs 0 terminated strings - - code.DLLFullPath.Str = - static_cast(ArenaPush(arena, dllFullPathLength, alignof(char), true JULIET_DEBUG_PARAM("Hot Reload DLL Path"))); - int writtenSize = snprintf(CStr(code.DLLFullPath), dllFullPathLength, "%s%s", CStr(basePath.Directories), CStr(dllName)); - if (writtenSize < static_cast(dllFullPathLength) - 1) - { - Log(LogLevel::Error, LogCategory::Core, "Cannot create DLL Full Path"); - return; - } - code.DLLFullPath.Size = static_cast(writtenSize); - - // Lock filename path - const size_t lockPathLength = basePathLength + StringLength(lockFilename) + 1; // Need +1 because snprintf needs 0 terminated strings - code.LockFullPath.Str = static_cast( - ArenaPush(arena, lockPathLength, alignof(char), true JULIET_DEBUG_PARAM("Hot Reload Lock File Path"))); - writtenSize = snprintf(CStr(code.LockFullPath), lockPathLength, "%s%s", CStr(basePath.Directories), CStr(lockFilename)); - if (writtenSize < static_cast(lockPathLength) - 1) - { - code.LockFullPath.Size = 0; - Log(LogLevel::Error, LogCategory::Core, "Cannot create lock file full path"); - return; - } - code.LockFullPath.Size = static_cast(writtenSize); - - LoadCode(code); -} - -void ShutdownHotReloadCode(HotReloadCode& code) -{ - UnloadCode(code); - - code.DLLFullPath.Size = 0; - code.LockFullPath.Size = 0; -} - -void ReloadCode(HotReloadCode& code) -{ - UnloadCode(code); - for (uint32 tryItr = 0; !code.IsValid && tryItr < MAX_TRIES; ++tryItr) - { - LoadCode(code); - wait_ms(100); - } -} diff --git a/Juliet/src/Core/HotReload/Win32/Win32HotReload.c b/Juliet/src/Core/HotReload/Win32/Win32HotReload.c new file mode 100644 index 0000000..16ddf13 --- /dev/null +++ b/Juliet/src/Core/HotReload/Win32/Win32HotReload.c @@ -0,0 +1,139 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define kMaxAttempts 256 +#define kMaxDLLID 256 +#define kTempDLLBufferSizeForID 5 + +internal FILETIME GetLastWriteTime(const char* filename) +{ + FILETIME lastWriteTime = { 0 }; + + WIN32_FILE_ATTRIBUTE_DATA Data; + if (GetFileAttributesExA(filename, GetFileExInfoStandard, &Data)) + { + lastWriteTime = Data.ftLastWriteTime; + } + + return lastWriteTime; +} + +void LoadCode(HotReloadCode* code) +{ + Assert(code != NULL); + char* lockFilename = code->LockFullPath.Str; + WIN32_FILE_ATTRIBUTE_DATA Ignored; + if (!GetFileAttributesExA(lockFilename, GetFileExInfoStandard, &Ignored)) + { + const char* dllName = code->DLLFullPath.Str; + + FILETIME lastWriteTime = GetLastWriteTime(dllName); + ULARGE_INTEGER result = { 0 }; + result.LowPart = lastWriteTime.dwLowDateTime; + result.HighPart = lastWriteTime.dwHighDateTime; + code->LastWriteTime = result.QuadPart; + + Path basePath = GetBasePath(); + size_t basePathLength = basePath.Directories.Size; + + const size_t tempDllMaxBufferSize = + basePathLength + StringLength(code->TransientDLLName) + 1 + kTempDLLBufferSizeForID + 1; + + TempArena temp = scratch_begin(0, 0); + char* tempDllPath = ArenaPushArray(temp.Arena, char, tempDllMaxBufferSize); + bool8 copiedOk = false; + + for (uint32 attempt = 0; attempt < kMaxAttempts; ++attempt) + { + char idToStr[kTempDLLBufferSizeForID + 1]; + int idLength = snprintf(idToStr, sizeof(idToStr), "%u", code->UniqueID); + if (idLength < 0) + { + Log(LogLevel_Error, LogCategory_Core, "Cannot create temp full path"); + break; + } + + int writtenSize = snprintf(tempDllPath, tempDllMaxBufferSize, "%s%s_%s", CStr(basePath.Directories), + idToStr, CStr(code->TransientDLLName)); + if (writtenSize < 0 || + (size_t)writtenSize + 1 < basePathLength + (size_t)idLength + code->TransientDLLName.Size) + { + Log(LogLevel_Error, LogCategory_Core, "Cannot create temp full path"); + break; + } + + if (++code->UniqueID >= kMaxDLLID) + { + code->UniqueID = 0; + } + if (CopyFileA(dllName, tempDllPath, FALSE)) + { + copiedOk = true; + break; + } + } + + if (copiedOk) + { + code->Dll = LoadDynamicLibrary(tempDllPath); + if (code->Dll != NULL) + { + code->IsValid = true; + for (size_t FunctionIndex = 0; FunctionIndex < code->FunctionCount; ++FunctionIndex) + { + void* function = (void*)LoadFunction(code->Dll, code->FunctionNames[FunctionIndex]); + if (function != NULL) + { + code->Functions[FunctionIndex] = function; + } + else + { + code->IsValid = false; + break; + } + } + } + } + scratch_end(temp); + } + + if (!code->IsValid) + { + UnloadCode(code); + } +} + +void UnloadCode(HotReloadCode* code) +{ + Assert(code != NULL); + code->IsValid = false; + if (code->Dll != NULL) + { + UnloadDynamicLibrary(code->Dll); + } + code->Dll = NULL; + + code->LastWriteTime = 0; + ZeroDynArray(code->FunctionCount, code->Functions); +} + +bool8 ShouldReloadCode(const HotReloadCode* code) +{ + Assert(code != NULL); + ULARGE_INTEGER largeInt = { 0 }; + FILETIME codeLastWriteTime = { 0 }; + largeInt.QuadPart = code->LastWriteTime; + codeLastWriteTime.dwHighDateTime = largeInt.HighPart; + codeLastWriteTime.dwLowDateTime = largeInt.LowPart; + + FILETIME lastWriteTime = GetLastWriteTime(code->DLLFullPath.Str); + int compare = CompareFileTime(&lastWriteTime, &codeLastWriteTime); + return compare != 0; +} diff --git a/Juliet/src/Core/HotReload/Win32/Win32HotReload.cpp b/Juliet/src/Core/HotReload/Win32/Win32HotReload.cpp deleted file mode 100644 index 5674b6e..0000000 --- a/Juliet/src/Core/HotReload/Win32/Win32HotReload.cpp +++ /dev/null @@ -1,147 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace -{ - FILETIME GetLastWriteTime(const char* filename) - { - FILETIME lastWriteTime = {}; - - WIN32_FILE_ATTRIBUTE_DATA Data; - if (GetFileAttributesExA(filename, GetFileExInfoStandard, &Data)) - { - lastWriteTime = Data.ftLastWriteTime; - } - - return lastWriteTime; - } - - constexpr size_t kMaxAttempts = 256; - constexpr size_t kMaxDLLID = 256; - constexpr size_t kTempDLLBufferSizeForID = 5; // Max ID numbers -} // namespace - -void LoadCode(HotReloadCode& code) -{ - char* lockFilename = code.LockFullPath.Str; - WIN32_FILE_ATTRIBUTE_DATA Ignored; - if (!GetFileAttributesExA(lockFilename, GetFileExInfoStandard, &Ignored)) - { - const char* dllName = code.DLLFullPath.Str; - - FILETIME lastWriteTime = GetLastWriteTime(dllName); - ULARGE_INTEGER result{ .LowPart = lastWriteTime.dwLowDateTime, .HighPart = lastWriteTime.dwHighDateTime }; - code.LastWriteTime = result.QuadPart; - - // Create filename for the temp dll until we find a valid id. - // This is not infinite, in a big session we could reach the 128 attempts and fail... - // We'll see for better later. - - // Get the app base path and build the dll path from there. - Path basePath = GetBasePath(); - size_t basePathLength = basePath.Directories.Size; - - const size_t tempDllMaxBufferSize = - basePathLength + StringLength(code.TransientDLLName) + /* _ */ 1 + kTempDLLBufferSizeForID + 1 /* \0 */; - - // Allocate from Scratch Arena (transient) - TempArena temp = scratch_begin(0, 0); - auto tempDllPath = ArenaPushArray(temp.Arena, tempDllMaxBufferSize); - - for (uint32 attempt = 0; attempt < kMaxAttempts; ++attempt) - { - // int to char - char idToStr[kTempDLLBufferSizeForID + 1]; - int idLength = snprintf(idToStr, sizeof(idToStr), "%u", code.UniqueID); - if (idLength < 0) - { - // Scratch memory, no free needed - Log(LogLevel::Error, LogCategory::Core, "Cannot create temp full path"); - return; - } - - int writtenSize = snprintf(tempDllPath, tempDllMaxBufferSize, "%s%s_%s", CStr(basePath.Directories), - idToStr, CStr(code.TransientDLLName)); - if (writtenSize < 0) - { - // Scratch memory, no free needed - Log(LogLevel::Error, LogCategory::Core, "Cannot create temp full path"); - return; - } - - if (static_cast(writtenSize) + 1 < - basePathLength + static_cast(idLength) + code.TransientDLLName.Size) - { - // Scratch memory, no free needed - Log(LogLevel::Error, LogCategory::Core, "Cannot create temp full path"); - return; - } - - if (++code.UniqueID >= kMaxDLLID) - { - code.UniqueID = 0; - } - if (CopyFileA(dllName, tempDllPath, false)) - { - break; - } - } - scratch_end(temp); - - code.Dll = LoadDynamicLibrary(tempDllPath); - if (code.Dll) - { - code.IsValid = true; - for (size_t FunctionIndex = 0; FunctionIndex < code.FunctionCount; ++FunctionIndex) - { - if (auto function = reinterpret_cast(LoadFunction(code.Dll, code.FunctionNames[FunctionIndex]))) - { - code.Functions[FunctionIndex] = function; - } - else - { - code.IsValid = false; - break; - } - } - } - } - - if (!code.IsValid) - { - UnloadCode(code); - } -} - -void UnloadCode(HotReloadCode& code) -{ - code.IsValid = false; - if (code.Dll) - { - UnloadDynamicLibrary(code.Dll); - } - code.Dll = nullptr; - - code.LastWriteTime = 0; - ZeroDynArray(code.FunctionCount, code.Functions); -} - -bool ShouldReloadCode(const HotReloadCode& code) -{ - ULARGE_INTEGER largeInt = {}; - FILETIME codeLastWriteTime = {}; - largeInt.QuadPart = code.LastWriteTime; - codeLastWriteTime.dwHighDateTime = largeInt.HighPart; - codeLastWriteTime.dwLowDateTime = largeInt.LowPart; - - FILETIME lastWriteTime = GetLastWriteTime(code.DLLFullPath.Str); - int compare = CompareFileTime(&lastWriteTime, &codeLastWriteTime); - return compare != 0; -} diff --git a/Juliet/src/Core/ImGui/ImGuiService.c b/Juliet/src/Core/ImGui/ImGuiService.c new file mode 100644 index 0000000..f12d87c --- /dev/null +++ b/Juliet/src/Core/ImGui/ImGuiService.c @@ -0,0 +1,133 @@ +#include +#include +#include +#include +#include +#include + +#ifdef JULIET_ENABLE_IMGUI + +#include + +typedef struct FreeNode FreeNode; +struct FreeNode +{ + size_t Size; + FreeNode* Next; +}; + +global ImGuiContext* g_ImGuiContext = NULL; +global bool8 g_Initialized = false; +global FreeNode* g_FirstFreeNode = NULL; +global Arena* g_ImGuiArena = NULL; + +internal void* ImGuiAllocWrapper(size_t size, void* user_data) +{ + (void)user_data; + Assert(size > 0); + + size_t sizeOfHeader = sizeof(FreeNode); + size_t totalSize = (size_t)AlignPow2(size + sizeOfHeader, 16); + FreeNode** previous = &g_FirstFreeNode; + FreeNode* current = g_FirstFreeNode; + void* result = NULL; + + while (current != NULL) + { + if (current->Size >= totalSize) + { + *previous = current->Next; + result = (void*)(current + 1); + break; + } + previous = ¤t->Next; + current = current->Next; + } + + if (result == NULL) + { + void* ptr = ArenaPushSize(g_ImGuiArena, totalSize, 8, false JULIET_DEBUG_PARAM("ImGuiAlloc")); + + FreeNode* node = (FreeNode*)ptr; + node->Size = totalSize; + node->Next = NULL; + + result = (void*)(node + 1); + } + + return result; +} + +internal void ImGuiFreeWrapper(void* ptr, void* user_data) +{ + (void)user_data; + Assert(ptr != NULL); + + FreeNode* node = (FreeNode*)((char*)ptr - sizeof(FreeNode)); + node->Next = g_FirstFreeNode; + g_FirstFreeNode = node; +} + +void ImGuiService_Initialize(Window* window) +{ + Assert(window != NULL); + Assert(!g_Initialized); + + g_ImGuiArena = ArenaAllocate((ArenaParams){ .Name = "Imgui Allocator Arena" }); + + ImGui_SetAllocatorFunctions(ImGuiAllocWrapper, ImGuiFreeWrapper, NULL); + + ImGui_CheckVersion(); + g_ImGuiContext = ImGui_CreateContext(); + ImGuiIO_AddConfigFlags(ImGuiConfigFlags_NavEnableKeyboard); + + ImGui_StyleColorsDark(); + + Window32State* win32State = (Window32State*)window->State; + ImGui_C_ImplWin32_Init(win32State->Handle); + + g_Initialized = true; +} + +void ImGuiService_Shutdown(void) +{ + Assert(g_Initialized); + + ImGui_C_ImplWin32_Shutdown(); + ImGui_DestroyContext(g_ImGuiContext); + g_ImGuiContext = NULL; + g_Initialized = false; +} + +void ImGuiService_NewFrame(void) +{ + Assert(g_Initialized); + + ImGui_C_ImplWin32_NewFrame(); + ImGui_NewFrame(); +} + +void ImGuiService_Render(void) +{ + Assert(g_Initialized); + + ImGui_Render(); +} + +bool8 ImGuiService_IsInitialized(void) +{ + return g_Initialized; +} + +ImGuiContext* ImGuiService_GetContext(void) +{ + return g_ImGuiContext; +} + +void ImGuiService_RunTests(void) +{ + printf("ImGuiService: Running Unit Tests...\n"); + UnitTest_TestImGui(); +} + +#endif // JULIET_ENABLE_IMGUI diff --git a/Juliet/src/Core/ImGui/ImGuiService.cpp b/Juliet/src/Core/ImGui/ImGuiService.cpp deleted file mode 100644 index b01703d..0000000 --- a/Juliet/src/Core/ImGui/ImGuiService.cpp +++ /dev/null @@ -1,140 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#ifdef JULIET_ENABLE_IMGUI - -#include -#include - -extern IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); - -namespace ImGuiService -{ - namespace - { - ImGuiContext* g_ImGuiContext = nullptr; - bool g_Initialized = false; - - struct FreeNode - { - size_t Size; - FreeNode* Next; - }* FirstFreeNode = nullptr; - - // Dedicated Paged Arena for ImGui - // Sharing the same underlying Engine Pool for blocks, but separate Arena chain. - Arena* g_ImGuiArena = {}; - - void* ImGuiAllocWrapper(size_t size, void* /*user_data*/) - { - Assert(size); // I trust Dear Imgui but just in case - - // Let's make FreeNode a part of each alloc. - size_t sizeOfHeader = sizeof(FreeNode); - size_t totalSize = AlignPow2(size + sizeOfHeader, 16); - FreeNode** previous = &FirstFreeNode; - FreeNode* current = FirstFreeNode; - - // Find a free node if there is one big enough - while (current != nullptr) - { - if (current->Size >= totalSize) - { - *previous = current->Next; - return current + 1; - } - previous = ¤t->Next; - current = current->Next; - } - - auto* ptr = ArenaPushSize(g_ImGuiArena, totalSize, 8, false JULIET_DEBUG_PARAM("ImGuiAlloc {}", totalSize)); - - FreeNode* node = static_cast(ptr); - node->Size = totalSize; - node->Next = nullptr; - - return node + 1; - } - - void ImGuiFreeWrapper(void* ptr, void* /*user_data*/) - { - Assert(ptr); // I trust Dear Imgui but just in case - - FreeNode* node = reinterpret_cast(static_cast(ptr) - sizeof(FreeNode)); - node->Next = FirstFreeNode; - FirstFreeNode = node; - } - } // namespace - - void Initialize(NonNullPtr window) - { - Assert(!g_Initialized); - - // Initialize ImGui Arena using Engine Pool - g_ImGuiArena = ArenaAllocate({ .Name = "Imgui Allocator Arena" }); - - // Setup Allocator - ImGui::SetAllocatorFunctions(ImGuiAllocWrapper, ImGuiFreeWrapper, nullptr); - - IMGUI_CHECKVERSION(); - g_ImGuiContext = ImGui::CreateContext(); - ImGuiIO& io = ImGui::GetIO(); - io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls - // io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad; // Enable Gamepad Controls - - ImGui::StyleColorsDark(); - - // Platform Init - auto* win32State = static_cast(window->State); - ImGui_ImplWin32_Init(win32State->Handle); - - g_Initialized = true; - } - - void Shutdown() - { - Assert(g_Initialized); - - ImGui_ImplWin32_Shutdown(); - ImGui::DestroyContext(g_ImGuiContext); - g_ImGuiContext = nullptr; - g_Initialized = false; - } - - void NewFrame() - { - Assert(g_Initialized); - - ImGui_ImplWin32_NewFrame(); - ImGui::NewFrame(); - } - - void Render() - { - Assert(g_Initialized); - - ImGui::Render(); - } - - bool IsInitialized() - { - return g_Initialized; - } - - ImGuiContext* GetContext() - { - return g_ImGuiContext; - } - - void RunTests() - { - printf("ImGuiService: Running Unit Tests...\n"); - UnitTest::TestImGui(); - } -} // namespace ImGuiService - -#endif // JULIET_ENABLE_IMGUI diff --git a/Juliet/src/Core/ImGui/ImGuiTests.c b/Juliet/src/Core/ImGui/ImGuiTests.c new file mode 100644 index 0000000..d9e8614 --- /dev/null +++ b/Juliet/src/Core/ImGui/ImGuiTests.c @@ -0,0 +1,68 @@ +#include +#include +#include +#include + +#include +#include +#include + +void UnitTest_TestImGui(void) +{ +#ifdef JULIET_ENABLE_IMGUI + ImGuiContext* ctx = ImGuiService_GetContext(); + + if (ImGui_GetCurrentContext() != ctx) + { + printf("WARN: Context Mismatch! Service=%p, Current=%p. Fixing...\n", (void*)ctx, (void*)ImGui_GetCurrentContext()); + ImGui_SetCurrentContext(ctx); + } + Assert(ImGui_GetCurrentContext() == ctx); + (void)ctx; + printf("TestImGui: Context Verified.\n"); + + const char* backend_name = ImGuiIO_GetBackendPlatformName(); + Assert(backend_name != NULL); + printf("TestImGui: IO Verified. Backend: %s\n", backend_name); + + Assert(ImGui_GetVersion() != NULL); + printf("TestImGui: Version Verified: %s\n", ImGui_GetVersion()); + + Assert(ImGuiIO_HasFonts()); + printf("TestImGui: Fonts Verified.\n"); + + bool8 built = ImGuiIO_FontsIsBuilt(); + Assert(built); + printf("TestImGui: Fonts Built Status: %d\n", (int)built); + + unsigned char* pixels = NULL; + int width = 0; + int height = 0; + ImGuiIO_FontsGetTexDataAsRGBA32(&pixels, &width, &height); + Assert(pixels != NULL); + Assert(width > 0 && height > 0); + (void)pixels; + (void)width; + (void)height; + printf("TestImGui: Font Atlas Verified.\n"); + + Assert(ImGuiStyle_GetAlpha() > 0.0f); + printf("TestImGui: Style Verified.\n"); + + Assert(ImGuiService_IsInitialized()); + + ImVec2 display_size = ImGuiIO_GetDisplaySize(); + if (display_size.x <= 0.0f || display_size.y <= 0.0f) + { + ImGuiIO_SetDisplaySize((ImVec2){ 1920.0f, 1080.0f }); + } + ImGuiIO_SetDeltaTime(1.0f / 60.0f); + printf("TestImGui: About to DrawList check.\n"); + + ImDrawList* drawList = ImGui_GetForegroundDrawList(); + Assert(drawList != NULL); + (void)drawList; + + printf("ImGui tests passed (Exhaustive).\n"); +#endif +} diff --git a/Juliet/src/Core/ImGui/ImGuiTests.cpp b/Juliet/src/Core/ImGui/ImGuiTests.cpp deleted file mode 100644 index 62ee771..0000000 --- a/Juliet/src/Core/ImGui/ImGuiTests.cpp +++ /dev/null @@ -1,74 +0,0 @@ -#include -#include -#include - -#include -#include -#include - -namespace UnitTest -{ - void TestImGui() - { -#ifdef JULIET_ENABLE_IMGUI - ImGuiContext* ctx = ImGuiService::GetContext(); - - if (ImGui::GetCurrentContext() != ctx) - { - printf("WARN: Context Mismatch! Service=%p, Current=%p. Fixing...\n", (void*)ctx, (void*)ImGui::GetCurrentContext()); - ImGui::SetCurrentContext(ctx); - } - Assert(ImGui::GetCurrentContext() == ctx); - (void)ctx; - printf("TestImGui: Context Verified.\n"); - - ImGuiIO& io = ImGui::GetIO(); - Assert(io.BackendPlatformName != nullptr); - printf("TestImGui: IO Verified. Backend: %s\n", io.BackendPlatformName); - - Assert(ImGui::GetVersion() != nullptr); - printf("TestImGui: Version Verified: %s\n", ImGui::GetVersion()); - - Assert(io.Fonts != nullptr); - printf("TestImGui: Fonts Verified.\n"); - - bool built = io.Fonts->IsBuilt(); - Assert(built); - printf("TestImGui: Fonts Built Status: %d\n", built); - - unsigned char* pixels; - int width, height; - io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height); - Assert(pixels != nullptr); - Assert(width > 0 && height > 0); - (void)pixels; - (void)width; - (void)height; - printf("TestImGui: Font Atlas Verified.\n"); - - // 6. Verify Style - ImGuiStyle& style = ImGui::GetStyle(); - Assert(style.Alpha > 0.0f); - (void)style; - printf("TestImGui: Style Verified.\n"); - - // 7. Test New Frame - Assert(ImGuiService::IsInitialized()); - - // Simulate a frame - if (io.DisplaySize.x <= 0.0f || io.DisplaySize.y <= 0.0f) - { - io.DisplaySize = ImVec2(1920, 1080); - } - io.DeltaTime = 1.0f / 60.0f; - printf("TestImGui: About to DrawList check.\n"); - - // 8. Check Draw List Access - ImDrawList* drawList = ImGui::GetForegroundDrawList(); - Assert(drawList != nullptr); - (void)drawList; - - printf("ImGui tests passed (Exhaustive).\n"); -#endif - } -} // namespace UnitTest diff --git a/Juliet/src/Core/Juliet.c b/Juliet/src/Core/Juliet.c new file mode 100644 index 0000000..82a72c2 --- /dev/null +++ b/Juliet/src/Core/Juliet.c @@ -0,0 +1,52 @@ +#include +#include +#include +#include + +global bool8 g_is_quitting = false; +global uint8 g_system_init_ref_count[JulietInit_Flags_Count + 1]; + +internal void IncrementSystemRefCount(JulietInit_Flags flag) +{ + Assert(flag != JulietInit_Flags_None); + ++g_system_init_ref_count[flag]; +} + +internal void DecrementSystemRefCount(JulietInit_Flags flag) +{ + Assert(flag != JulietInit_Flags_None); + Assert(g_system_init_ref_count[flag] != 0 && "Trying to decrement ref count but its already 0"); + + if (g_is_quitting) + { + g_system_init_ref_count[flag] = 0; + } + else + { + --g_system_init_ref_count[flag]; + } +} + +internal bool8 IsSystemInitialized(JulietInit_Flags flag) +{ + return g_system_init_ref_count[flag] != 0; +} + +void JulietInit(JulietInit_Flags flags) +{ + if ((flags & JulietInit_Flags_Display) != JulietInit_Flags_None) + { + InitializeDisplaySystem(); + IncrementSystemRefCount(JulietInit_Flags_Display); + } +} + +void JulietShutdown(void) +{ + g_is_quitting = true; + if (IsSystemInitialized(JulietInit_Flags_Display)) + { + DecrementSystemRefCount(JulietInit_Flags_Display); + ShutdownDisplaySystem(); + } +} diff --git a/Juliet/src/Core/Juliet.cpp b/Juliet/src/Core/Juliet.cpp deleted file mode 100644 index 6cc4b9a..0000000 --- a/Juliet/src/Core/Juliet.cpp +++ /dev/null @@ -1,58 +0,0 @@ -#include -#include -#include -#include -#include - -namespace -{ - bool IsQuitting = false; - uint8 SystemInitRefCount[ToUnderlying(JulietInit_Flags::Count)]; - - void IncrementSystemRefCount(JulietInit_Flags flag) - { - Assert(flag != JulietInit_Flags::None); - ++SystemInitRefCount[ToUnderlying(flag)]; - } - - void DecrementSystemRefCount(JulietInit_Flags flag) - { - Assert(flag != JulietInit_Flags::None); - Assert(SystemInitRefCount[ToUnderlying(flag)] != 0 && "Trying to decrement ref count but its already 0"); - - if (IsQuitting) - { - SystemInitRefCount[ToUnderlying(flag)] = 0; - } - else - { - --SystemInitRefCount[ToUnderlying(flag)]; - } - } - - bool IsInitialized(JulietInit_Flags flag) - { - return SystemInitRefCount[ToUnderlying(flag)] != 0; - } -} // namespace - -void JulietInit(JulietInit_Flags flags) -{ - // Optional systems - if ((flags & JulietInit_Flags::Display) != JulietInit_Flags::None) - { - InitializeDisplaySystem(); - IncrementSystemRefCount(JulietInit_Flags::Display); - } -} - -void JulietShutdown() -{ - IsQuitting = true; - if (IsInitialized(JulietInit_Flags::Display)) - { - DecrementSystemRefCount(JulietInit_Flags::Display); - ShutdownDisplaySystem(); - } -} - diff --git a/Juliet/src/Core/Logging/LogManager.c b/Juliet/src/Core/Logging/LogManager.c new file mode 100644 index 0000000..f4ce088 --- /dev/null +++ b/Juliet/src/Core/Logging/LogManager.c @@ -0,0 +1,199 @@ +#include +#include +#include + +#ifdef JULIET_WIN32 +#include +#include +#endif + +typedef struct LogsEntry LogsEntry; +struct LogsEntry +{ + LogsEntry* Next; + String Value; + uint64 Timestamp; + LogLevel Level; + LogCategory Category; +}; +DECLARE_QUEUE(LogsEntry) + +global const bool8 k_print_debug_log = false; + +typedef struct LogScope LogScope; +struct LogScope +{ + LogScope* Next; + size_t Position; + LogsEntryQueue Entries; +}; + +typedef struct Logs Logs; +struct Logs +{ + Arena* Arena; + LogScope* TopScope; +}; + +global Logs* g_active_log = NULL; + +internal Logs* LogAllocate(void) +{ + Arena* arena = ArenaAllocate((ArenaParams){ .Name = "Log Manager" }); + Logs* logs = ArenaPushStruct(arena, Logs); + logs->Arena = arena; + return logs; +} + +internal void LogRelease(Logs* logs) +{ + Assert(logs != NULL); + ArenaRelease(logs->Arena); +} + +internal void OutputLog(const LogsEntry* entry) +{ + Assert(entry != NULL); + + char full_message[4200]; +#ifdef JULIET_WIN32 + SYSTEMTIME st; + GetLocalTime(&st); + snprintf(full_message, sizeof(full_message), "[%04u-%02u-%02u %02u:%02u:%02u.%03u] %s\n", st.wYear, st.wMonth, + st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds, CStr(entry->Value)); + OutputDebugStringA(full_message); +#else + snprintf(full_message, sizeof(full_message), "%s\n", CStr(entry->Value)); +#endif + printf("%s", full_message); +} + +internal void PushLogEntry(Logs* logs, String value, LogLevel level, LogCategory category) +{ + Assert(logs != NULL); + Arena* arena = logs->Arena; + String str = StringCopy(arena, value); + + LogsEntry* newEntry = ArenaPushStruct(arena, LogsEntry); + newEntry->Timestamp = 0; + newEntry->Level = level; + newEntry->Category = category; + newEntry->Value = str; + + Enqueue(logs->TopScope->Entries, newEntry); + logs->TopScope->Entries.Size += sizeof(LogsEntry) + str.Size; + + OutputLog(newEntry); +} + +void InitializeLogManager(void) +{ +#ifdef JULIET_WIN32 + SetConsoleOutputCP(CP_UTF8); + SetConsoleCP(CP_UTF8); +#endif + + g_active_log = LogAllocate(); + LogScopeBegin(); +} + +void ShutdownLogManager(void) +{ + LogScopeEnd(); + LogRelease(g_active_log); + g_active_log = NULL; +} + +void LogScopeBegin(void) +{ + Assert(g_active_log != NULL); + + size_t position = ArenaPos(g_active_log->Arena); + LogScope* scope = ArenaPushStruct(g_active_log->Arena, LogScope); + scope->Position = position; + SingleLinkedListPushNext(g_active_log->TopScope, scope); +} + +void LogScopeEnd(void) +{ + Assert(g_active_log != NULL); + + LogScope* scope = g_active_log->TopScope; + Assert(scope != NULL); + + SingleLinkedListPopNext(g_active_log->TopScope); + + ArenaPopTo(g_active_log->Arena, scope->Position); +} + +internal void LogV(LogLevel level, LogCategory category, const char* fmt, va_list args) +{ + if (!(level == LogLevel_Debug && k_print_debug_log == false)) + { + char formattedBuffer[4096]; + vsnprintf(formattedBuffer, sizeof(formattedBuffer), fmt, args); + + if (g_active_log != NULL) + { + char* line_start = formattedBuffer; + while (*line_start != '\0') + { + char* newline = strchr(line_start, '\n'); + if (newline != NULL) + { + *newline = '\0'; + } + String julietstr = WrapString(line_start); + PushLogEntry(g_active_log, julietstr, level, category); + if (newline != NULL) + { + line_start = newline + 1; + } + else + { + break; + } + } + } + } +} + +void Log(LogLevel level, LogCategory category, const char* fmt, ...) +{ + va_list args; + va_start(args, fmt); + LogV(level, category, fmt, args); + va_end(args); +} + +void LogDebug(LogCategory category, const char* fmt, ...) +{ + va_list args; + va_start(args, fmt); + LogV(LogLevel_Debug, category, fmt, args); + va_end(args); +} + +void LogMessage(LogCategory category, const char* fmt, ...) +{ + va_list args; + va_start(args, fmt); + LogV(LogLevel_Message, category, fmt, args); + va_end(args); +} + +void LogWarning(LogCategory category, const char* fmt, ...) +{ + va_list args; + va_start(args, fmt); + LogV(LogLevel_Warning, category, fmt, args); + va_end(args); +} + +void LogError(LogCategory category, const char* fmt, ...) +{ + va_list args; + va_start(args, fmt); + LogV(LogLevel_Error, category, fmt, args); + va_end(args); +} diff --git a/Juliet/src/Core/Logging/LogManager.cpp b/Juliet/src/Core/Logging/LogManager.cpp deleted file mode 100644 index c827629..0000000 --- a/Juliet/src/Core/Logging/LogManager.cpp +++ /dev/null @@ -1,210 +0,0 @@ -#include -#include - -#ifdef global -#undef global -#define RESTORE_GLOBAL -#endif - -#ifdef RESTORE_GLOBAL -#define global static -#undef RESTORE_GLOBAL -#endif - -// Begin Todo JULIET debug output - -#include - -#ifdef JULIET_WIN32 -#include -#include -#endif -// End Todo - -// TODO Juliet chrono - -namespace -{ - struct LogsEntry : public QueueNode - { - String Value; - std::chrono::system_clock::time_point Time; - LogLevel Level; - LogCategory Category; - }; - DECLARE_QUEUE(LogsEntry); - - // TODO: Debug level per category - const bool kPrintDebugLog = false; - - // A log scope accumulates log until end of scope. - // Can be used to accumulate then write in a log file each frame. - struct LogScope - { - LogScope* Next; - size_t Position; - LogsEntryQueue Entries; - }; - - // Logs contains the current scopes and the arena - struct Logs - { - Arena* Arena = nullptr; - LogScope* TopScope = nullptr; - }; - - Logs* ActiveLog = nullptr; - - Logs* LogAllocate() - { - Arena* arena = ArenaAllocate({ .Name = "Log Manager" }); - Logs* logs = ArenaPushStruct(arena); - logs->Arena = arena; - return logs; - } - - void LogRelease(NonNullPtr logs) - { - ArenaRelease(logs->Arena); - } - - void OutputLog(LogsEntry& entry) - { - // TODO Juliet Output io for each platform - - // {:%F} is YYYY-MM-DD, {:%T} is HH:MM:SS.ffffff - std::string timestamp = std::format("[{:%F %T}] ", entry.Time); - std::string fullMessage = timestamp + CStr(entry.Value) + "\n"; - -#ifdef JULIET_WIN32 - OutputDebugStringA(fullMessage.c_str()); -#endif - printf("%s", fullMessage.c_str()); - } - - void PushLogEntry(NonNullPtr logs, String value, LogLevel level, LogCategory category) - { - Arena* arena = logs->Arena; - String str = StringCopy(arena, value); - - // Push onto the current scope - LogsEntry* newEntry = ArenaPushStruct(arena); - newEntry->Time = std::chrono::system_clock::now(); - newEntry->Level = level; - newEntry->Category = category; - newEntry->Value = str; - - Enqueue(logs->TopScope->Entries, newEntry); - logs->TopScope->Entries.Size += sizeof(LogsEntry) + str.Size; - - OutputLog(*newEntry); - } -} // namespace - -void InitializeLogManager() -{ -#ifdef JULIET_WIN32 - SetConsoleOutputCP(CP_UTF8); - SetConsoleCP(CP_UTF8); -#endif - - ActiveLog = LogAllocate(); - LogScopeBegin(); -} - -void ShutdownLogManager() -{ - LogScopeEnd(); - LogRelease(ActiveLog); -} - -void LogScopeBegin() -{ - Assert(ActiveLog != nullptr); - - size_t position = ArenaPos(ActiveLog->Arena); - LogScope* scope = ArenaPushStruct(ActiveLog->Arena); - scope->Position = position; - SingleLinkedListPushNext(ActiveLog->TopScope, scope); -} - -void LogScopeEnd() -{ - Assert(ActiveLog != nullptr); - - LogScope* scope = ActiveLog->TopScope; - Assert(scope != nullptr); - - SingleLinkedListPopNext(ActiveLog->TopScope); - - ArenaPopTo(ActiveLog->Arena, scope->Position); -} - -void Log(LogLevel level, LogCategory category, const char* fmt, va_list args) -{ - if (level == LogLevel::Debug && kPrintDebugLog == false) - { - return; - } - - // TODO : Revisit, copy from https://github.com/Eclmist/Ether/blob/develop/src/common/logging/loggingmanager.cpp - char formattedBuffer[4096]; - - (void)vsprintf_s(formattedBuffer, fmt, args); // Cast to void to ignore the return type. TODO : Juliet format function - - std::string formattedText(formattedBuffer); - - std::stringstream ss(formattedText); - std::string individualLine; - - while (std::getline(ss, individualLine, '\n')) - { - // Logs can happen before the active log is set, in that case, we can write to the console but not register the entry. - // One case is the Arena Allocate that calls logs and will happen before the logs are properly set because logs need to allocate an arena. - if (ActiveLog != nullptr) - { - String julietstr = WrapString(individualLine.c_str()); - PushLogEntry(ActiveLog, julietstr, level, category); - } - } -} - -void Log(LogLevel level, LogCategory category, const char* fmt, ...) -{ - va_list args; - va_start(args, fmt); - Log(level, category, fmt, args); - va_end(args); -} - -void LogDebug(LogCategory category, const char* fmt, ...) -{ - va_list args; - va_start(args, fmt); - Log(LogLevel::Debug, category, fmt, args); - va_end(args); -} - -void LogMessage(LogCategory category, const char* fmt, ...) -{ - va_list args; - va_start(args, fmt); - Log(LogLevel::Message, category, fmt, args); - va_end(args); -} - -void LogWarning(LogCategory category, const char* fmt, ...) -{ - va_list args; - va_start(args, fmt); - Log(LogLevel::Warning, category, fmt, args); - va_end(args); -} - -void LogError(LogCategory category, const char* fmt, ...) -{ - va_list args; - va_start(args, fmt); - Log(LogLevel::Error, category, fmt, args); - va_end(args); -} diff --git a/Juliet/src/Core/Math/MathRound.c b/Juliet/src/Core/Math/MathRound.c new file mode 100644 index 0000000..e6c78bf --- /dev/null +++ b/Juliet/src/Core/Math/MathRound.c @@ -0,0 +1,65 @@ +#include +#include +#include +#include + +// From MUSL lib https://github.com/rofl0r/musl +#if defined(__FLT_EVAL_METHOD__) && (__FLT_EVAL_METHOD__ == 1) +#define JULIET_ROUND_EPS ((float)DBL_EPSILON) +#elif defined(__FLT_EVAL_METHOD__) && (__FLT_EVAL_METHOD__ == 2) +#define JULIET_ROUND_EPS ((float)LDBL_EPSILON) +#else +#define JULIET_ROUND_EPS FLT_EPSILON +#endif + +#define JULIET_ROUND_TOINT (1.0f / JULIET_ROUND_EPS) + +float RoundF(float value) +{ + union + { + float f; + uint32 i; + } u = { value }; + uint32 e = (u.i >> 23) & 0xffu; + float result = 0.0f; + + if (e >= 0x7fu + 23u) + { + result = value; + } + else + { + if (u.i >> 31) + { + value = -value; + } + if (e < 0x7fu - 1u) + { + fp_force_evalf(value + JULIET_ROUND_TOINT); + result = 0.0f * u.f; + } + else + { + float y = value + JULIET_ROUND_TOINT - JULIET_ROUND_TOINT - value; + if (y > 0.5f) + { + y = y + value - 1.0f; + } + else if (y <= -0.5f) + { + y = y + value + 1.0f; + } + else + { + y = y + value; + } + if (u.i >> 31) + { + y = -y; + } + result = y; + } + } + return result; +} diff --git a/Juliet/src/Core/Math/MathRound.cpp b/Juliet/src/Core/Math/MathRound.cpp deleted file mode 100644 index 8b49adb..0000000 --- a/Juliet/src/Core/Math/MathRound.cpp +++ /dev/null @@ -1,66 +0,0 @@ -#include - -// From MUSL lib https://github.com/rofl0r/musl -namespace -{ - consteval float GetEps() - { -#if defined(__FLT_EVAL_METHOD__) - if constexpr (__FLT_EVAL_METHOD__ == 1) - { - return static_cast(DBL_EPSILON); - } - if constexpr (__FLT_EVAL_METHOD__ == 2) - { - return static_cast(LDBL_EPSILON); - } -#endif - return FLT_EPSILON; - } - - constexpr float EPS = GetEps(); - constexpr float toint = 1.0f / EPS; -} // namespace - -float RoundF(float value) -{ - union - { - float f; - uint32 i; - } u = { value }; - auto e = u.i >> 23 & 0xff; - float y = 0.0f; - - if (e >= 0x7f + 23) - { - return value; - } - if (u.i >> 31) - { - value = -value; - } - if (e < 0x7f - 1) - { - ForceEval(value + toint); - return 0 * u.f; - } - y = value + toint - toint - value; - if (y > 0.5f) - { - y = y + value - 1; - } - else if (y <= -0.5f) - { - y = y + value + 1; - } - else - { - y = y + value; - } - if (u.i >> 31) - { - y = -y; - } - return y; -} diff --git a/Juliet/src/Core/Math/Math_Private.h b/Juliet/src/Core/Math/Math_Private.h index d51b88c..837322a 100644 --- a/Juliet/src/Core/Math/Math_Private.h +++ b/Juliet/src/Core/Math/Math_Private.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once // From MUSL lib https://github.com/rofl0r/musl #ifndef fp_force_evalf @@ -30,21 +30,3 @@ static inline void fp_force_evall(long double x) (void)y; } #endif - -template -inline void ForceEval(T x) -{ - if constexpr (std::is_same_v) - { - fp_force_evalf(x); - } - else if constexpr (std::is_same_v) - { - fp_force_eval(x); - } - else - { - fp_force_evall(x); - } -} - diff --git a/Juliet/src/Core/Memory/Allocator.cpp b/Juliet/src/Core/Memory/Allocator.c similarity index 66% rename from Juliet/src/Core/Memory/Allocator.cpp rename to Juliet/src/Core/Memory/Allocator.c index d7ff5c1..4048ba6 100644 --- a/Juliet/src/Core/Memory/Allocator.cpp +++ b/Juliet/src/Core/Memory/Allocator.c @@ -1,24 +1,20 @@ -#include +#include -// Uninitialized allocation void* Malloc(size_t total_size) { - // Cant allocate 0 if (!total_size) { total_size = 1; } void* retMemory = malloc(total_size); - Assert(retMemory && "Out of memory"); + Assert(retMemory != NULL && "Out of memory"); return retMemory; } -// Initialized to 0 allocation void* Calloc(size_t nb_elem, size_t elem_size) { - // cant allocate 0 if (!nb_elem || !elem_size) { nb_elem = 1; @@ -26,11 +22,11 @@ void* Calloc(size_t nb_elem, size_t elem_size) } void* retMemory = calloc(nb_elem, elem_size); - Assert(retMemory && "Out of memory"); + Assert(retMemory != NULL && "Out of memory"); return retMemory; } -\ + void* Realloc(void* memory, size_t newSize) { if (!newSize) @@ -39,7 +35,7 @@ void* Realloc(void* memory, size_t newSize) } void* retMemory = realloc(memory, newSize); - Assert(retMemory && "Out of memory"); + Assert(retMemory != NULL && "Out of memory"); return retMemory; } diff --git a/Juliet/src/Core/Memory/MemoryArena.c b/Juliet/src/Core/Memory/MemoryArena.c new file mode 100644 index 0000000..2a54ed5 --- /dev/null +++ b/Juliet/src/Core/Memory/MemoryArena.c @@ -0,0 +1,230 @@ +#include +#include +#include +#include +#include + +#include +#include + +#define k_PageSize Kilobytes(4) + +Arena* ArenaAllocateImpl(ArenaParams params, const char* file, uint32 line) +{ + Log(LogLevel_Message, LogCategory_Core, "Allocating from %s : %u", file, line); + + uint64 req_reserve = (params.ReserveSize > 0) ? params.ReserveSize : g_Arena_Default_Reserve_Size; + uint64 req_commit = (params.CommitSize > 0) ? params.CommitSize : g_Arena_Default_Commit_Size; + + uint64 reserve_size = AlignPow2(req_reserve, k_PageSize); + uint64 commit_size = AlignPow2(req_commit, k_PageSize); + + Byte* baseMem = OS_Reserve((size_t)reserve_size); + OS_Commit(baseMem, (size_t)commit_size); + + Arena* arena = (Arena*)baseMem; + arena->Current = arena; + + arena->CommitSize = commit_size; + arena->ReserveSize = reserve_size; + + arena->Committed = commit_size; + arena->Reserved = reserve_size; + + arena->BasePosition = 0; + arena->Position = k_ArenaHeaderSize; + +#if JULIET_DEBUG + arena->CanReserveMore = !params.DoNotReserveMore; + arena->FirstDebugInfo = NULL; + + if (params.Name == NULL) + { + arena->Name = "NoName"; + } + else + { + arena->Name = params.Name; + } + + DebugArenaSetDebugName(arena, arena->Name); + DebugRegisterArena(arena); +#endif + + return arena; +} + +void ArenaRelease(Arena* arena) +{ + Assert(arena != NULL); + for (Arena *node = arena->Current, *previous = NULL; node != NULL; node = previous) + { + previous = node->Previous; + + JULIET_DEBUG_ONLY(DebugUnregisterArena(node);) + JULIET_DEBUG_ONLY(DebugArenaFreeBlock(node);) + + OS_Release(node, (size_t)node->Reserved); + } +} + +void* ArenaPush(Arena* arena, size_t size, size_t align, bool8 shouldBeZeroed JULIET_DEBUG_ONLY(, const char* tag)) +{ + Assert(arena != NULL); + Arena* current = arena->Current; + size_t positionPrePush = (size_t)AlignPow2(current->Position, align); + size_t positionPostPush = positionPrePush + size; + + if (current->Reserved < positionPostPush) + { + Assert(arena->CanReserveMore); + + Arena* newBlock = NULL; + { + Arena* prev_block; + for (newBlock = arena->FreeBlockLast, prev_block = NULL; newBlock != NULL; + prev_block = newBlock, newBlock = newBlock->Previous) + { + if (newBlock->Reserved >= AlignPow2(newBlock->Position, align) + size) + { + if (prev_block != NULL) + { + prev_block->Previous = newBlock->Previous; + } + else + { + arena->FreeBlockLast = newBlock->Previous; + } + break; + } + } + } + + if (newBlock == NULL) + { + size_t reserveSize = (size_t)current->ReserveSize; + size_t commitSize = (size_t)current->CommitSize; + + if (size + k_ArenaHeaderSize > reserveSize) + { + reserveSize = (size_t)AlignPow2(size + k_ArenaHeaderSize, align); + commitSize = (size_t)AlignPow2(size + k_ArenaHeaderSize, align); + } + + newBlock = ArenaAllocate((ArenaParams){ + .ReserveSize = reserveSize, .CommitSize = commitSize, .Name = arena->Name }); + } + + newBlock->BasePosition = current->BasePosition + current->Reserved; + SingleLinkedListPushPrevious(arena->Current, newBlock); + + current = newBlock; + positionPrePush = (size_t)AlignPow2(current->Position, align); + positionPostPush = positionPrePush + size; + } + + size_t sizeToZero = 0; + if (shouldBeZeroed) + { + sizeToZero = (size_t)Min(current->Committed, (uint64)positionPostPush) - positionPrePush; + } + + if (current->Committed < positionPostPush) + { + size_t commitPostAligned = positionPostPush + (size_t)current->CommitSize - 1; + commitPostAligned -= commitPostAligned % (size_t)current->CommitSize; + size_t commitPostClamped = (size_t)ClampTop((uint64)commitPostAligned, current->Reserved); + size_t commitSize = commitPostClamped - (size_t)current->Committed; + Byte* commitPtr = (Byte*)current + current->Committed; + + OS_Commit(commitPtr, commitSize); + + current->Committed = commitPostClamped; + } + + void* result = NULL; + if (current->Committed >= positionPostPush) + { + result = (Byte*)current + positionPrePush; + current->Position = positionPostPush; + + JULIET_DEBUG_ONLY( + if (!IsDebugInfoArena(arena)) { DebugArenaAddDebugInfo(current, size, positionPrePush, tag); }) + + if (sizeToZero != 0) + { + MemoryZero(result, sizeToZero); + } + } + + if (result == NULL) + { + Log(LogLevel_Error, LogCategory_Core, "Fatal Allocation Failure - Unexpected allocation failure"); + Assert(false, "Fatal Allocation Failure - Unexpected allocation failure"); + } + + return result; +} + +void ArenaPopTo(Arena* arena, size_t position) +{ + Assert(arena != NULL); + size_t clampedPosition = (size_t)ClampBottom(k_ArenaHeaderSize, (uint64)position); + Arena* current = arena->Current; + + for (Arena* previous = NULL; current->BasePosition >= clampedPosition; current = previous) + { + previous = current->Previous; + current->Position = k_ArenaHeaderSize; + + JULIET_DEBUG_ONLY(DebugArenaFreeBlock(current);) + + SingleLinkedListPushPrevious(arena->FreeBlockLast, current); + } + + arena->Current = current; + size_t newPosition = clampedPosition - (size_t)current->BasePosition; + Assert(newPosition <= current->Position); + current->Position = newPosition; + + JULIET_DEBUG_ONLY(DebugArenaPopTo(current, newPosition);) +} + +void ArenaPop(Arena* arena, size_t amount) +{ + Assert(arena != NULL); + size_t oldPosition = ArenaPos(arena); + size_t newPosition = oldPosition; + if (amount < oldPosition) + { + newPosition = oldPosition - amount; + } + ArenaPopTo(arena, newPosition); +} + +void ArenaClear(Arena* arena) +{ + Assert(arena != NULL); + ArenaPopTo(arena, 0); +} + +size_t ArenaPos(Arena* arena) +{ + Assert(arena != NULL); + Arena* current = arena->Current; + size_t position = (size_t)(current->BasePosition + current->Position); + return position; +} + +TempArena ArenaTempBegin(Arena* arena) +{ + Assert(arena != NULL); + index_t position = ArenaPos(arena); + TempArena temp = { arena, position }; + return temp; +} + +void ArenaTempEnd(TempArena temp) +{ + ArenaPopTo(temp.Arena, temp.Position); +} diff --git a/Juliet/src/Core/Memory/MemoryArena.cpp b/Juliet/src/Core/Memory/MemoryArena.cpp deleted file mode 100644 index a9abddf..0000000 --- a/Juliet/src/Core/Memory/MemoryArena.cpp +++ /dev/null @@ -1,232 +0,0 @@ -#include -#include -#include -#include -#include - -#include -#include -#include - -// TODO Get page size from os kernel call (dwPageSize) -namespace -{ - constexpr uint64 k_PageSize = Kilobytes(4); -} // namespace - -// https://github.com/EpicGamesExt/raddebugger/blob/master/src/base/base_arena.c - -Arena* ArenaAllocate(const ArenaParams& params, const std::source_location& loc) -{ - Log(LogLevel::Message, LogCategory::Core, "Allocating from %s : %ul", loc.file_name(), loc.line()); - - uint64 reserve_size = AlignPow2(params.ReserveSize, k_PageSize); - uint64 commit_size = AlignPow2(params.CommitSize, k_PageSize); - - // TODO: handle large pages - Byte* baseMem = Memory::OS_Reserve(reserve_size); - Memory::OS_Commit(baseMem, commit_size); - - Arena* arena = reinterpret_cast(baseMem); - arena->Current = arena; - - arena->CommitSize = commit_size; - arena->ReserveSize = reserve_size; - - arena->Committed = commit_size; - arena->Reserved = reserve_size; - - arena->BasePosition = 0; - arena->Position = k_ArenaHeaderSize; - -#if JULIET_DEBUG - arena->CanReserveMore = params.CanReserveMore; - arena->FirstDebugInfo = nullptr; - - if (params.Name == nullptr) - { - arena->Name = "NoName"; - } - else - { - arena->Name = params.Name; - } - - DebugArenaSetDebugName(arena, arena->Name); - DebugRegisterArena(arena); -#endif - - return arena; -} - -void ArenaRelease(NonNullPtr arena) -{ - // Release active blocks (Current chain) - for (Arena *node = arena->Current, *previous = nullptr; node != nullptr; node = previous) - { - previous = node->Previous; - - JULIET_DEBUG_ONLY(DebugUnregisterArena(node);) - JULIET_DEBUG_ONLY(DebugArenaFreeBlock(node);) - - Memory::OS_Release(node, node->Reserved); - } -} - -void* ArenaPush(NonNullPtr arena, size_t size, size_t align, bool shouldBeZeroed JULIET_DEBUG_ONLY(, const char* tag)) -{ - // Assert(IsPowerOfTwo(align)); - Arena* current = arena->Current; - size_t positionPrePush = AlignPow2(current->Position, align); - size_t positionPostPush = positionPrePush + size; - - // If allowed and needed, add a new block and chain it to the arena. - if (current->Reserved < positionPostPush /* flags : chaining allowed */) - { - Assert(arena->CanReserveMore); - - Arena* newBlock = nullptr; - { - Arena* prev_block; - for (newBlock = arena->FreeBlockLast, prev_block = nullptr; newBlock != nullptr; - prev_block = newBlock, newBlock = newBlock->Previous) - { - if (newBlock->Reserved >= AlignPow2(newBlock->Position, align) + size) - { - if (prev_block) - { - prev_block->Previous = newBlock->Previous; - } - else - { - arena->FreeBlockLast = newBlock->Previous; - } - break; - } - } - } - - if (newBlock == nullptr) - { - size_t reserveSize = current->ReserveSize; - size_t commitSize = current->CommitSize; - - if (size + k_ArenaHeaderSize > reserveSize) - { - reserveSize = AlignPow2(size + k_ArenaHeaderSize, align); - commitSize = AlignPow2(size + k_ArenaHeaderSize, align); - } - - newBlock = ArenaAllocate({ .ReserveSize = reserveSize, .CommitSize = commitSize, .Name = arena->Name }); - } - - newBlock->BasePosition = current->BasePosition + current->Reserved; - SingleLinkedListPushPrevious(arena->Current, newBlock); - - current = newBlock; - positionPrePush = AlignPow2(current->Position, align); - positionPostPush = positionPrePush + size; - } - - size_t sizeToZero = 0; - if (shouldBeZeroed) - { - sizeToZero = Min(current->Committed, positionPostPush) - positionPrePush; - } - - // If needed commit new pages - if (current->Committed < positionPostPush) - { - size_t commitPostAligned = positionPostPush + current->CommitSize - 1; - commitPostAligned -= commitPostAligned % current->CommitSize; - size_t commitPostClamped = ClampTop(commitPostAligned, current->Reserved); - size_t commitSize = commitPostClamped - current->Committed; - Byte* commitPtr = reinterpret_cast(current) + current->Committed; - - // TODO commit_large - Memory::OS_Commit(commitPtr, commitSize); - - current->Committed = commitPostClamped; - } - - // Push on the current block - void* result = nullptr; - if (current->Committed >= positionPostPush) - { - result = reinterpret_cast(current) + positionPrePush; - current->Position = positionPostPush; - - JULIET_DEBUG_ONLY( - if (!IsDebugInfoArena(arena)) { DebugArenaAddDebugInfo(current, size, positionPrePush, tag); }) - - if (sizeToZero != 0) - { - MemoryZero(result, sizeToZero); - } - } - - if (result == nullptr) [[unlikely]] - { - Log(LogLevel::Error, LogCategory::Core, "Fatal Allocation Failure - Unexpected allocation failure"); - Assert(false, "Fatal Allocation Failure - Unexpected allocation failure"); - } - - return result; -} - -void ArenaPopTo(NonNullPtr arena, size_t position) -{ - size_t clampedPosition = ClampBottom(k_ArenaHeaderSize, position); - Arena* current = arena->Current; - - for (Arena* previous = nullptr; current->BasePosition >= clampedPosition; current = previous) - { - previous = current->Previous; - current->Position = k_ArenaHeaderSize; - - JULIET_DEBUG_ONLY(DebugArenaFreeBlock(current);) - - SingleLinkedListPushPrevious(arena->FreeBlockLast, current); - } - - arena->Current = current; - size_t newPosition = clampedPosition - current->BasePosition; - Assert(newPosition <= current->Position); - current->Position = newPosition; - - JULIET_DEBUG_ONLY(DebugArenaPopTo(current, newPosition);) -} - -void ArenaPop(NonNullPtr arena, size_t amount) -{ - size_t oldPosition = ArenaPos(arena); - size_t newPosition = oldPosition; - if (amount < oldPosition) - { - newPosition = oldPosition - amount; - } - ArenaPopTo(arena, newPosition); -} - -void ArenaClear(NonNullPtr arena) -{ - ArenaPopTo(arena, 0); -} - -size_t ArenaPos(NonNullPtr arena) -{ - Arena* current = arena->Current; - size_t position = current->BasePosition + current->Position; - return position; -} - -TempArena ArenaTempBegin(NonNullPtr arena) -{ - index_t position = ArenaPos(arena); - return { arena.Get(), position }; -} - -void ArenaTempEnd(TempArena temp) -{ - ArenaPopTo(temp.Arena, temp.Position); -} diff --git a/Juliet/src/Core/Memory/MemoryArenaDebug.cpp b/Juliet/src/Core/Memory/MemoryArenaDebug.c similarity index 52% rename from Juliet/src/Core/Memory/MemoryArenaDebug.cpp rename to Juliet/src/Core/Memory/MemoryArenaDebug.c index 2e1c228..ad1bd76 100644 --- a/Juliet/src/Core/Memory/MemoryArenaDebug.cpp +++ b/Juliet/src/Core/Memory/MemoryArenaDebug.c @@ -1,69 +1,70 @@ -#include // For Arena definition +#include #include #if JULIET_DEBUG -Arena* g_ArenaGlobalHead = nullptr; -Arena* g_DebugInfoArena = nullptr; -ArenaDebugInfo* g_DebugInfoFreeList = nullptr; -ArenaAllocation* g_ArenaAllocationFreeList = nullptr; +Arena* g_ArenaGlobalHead = NULL; +Arena* g_DebugInfoArena = NULL; +ArenaDebugInfo* g_DebugInfoFreeList = NULL; +ArenaAllocation* g_ArenaAllocationFreeList = NULL; -// --- Internal Helpers --- -static ArenaDebugInfo* AllocDebugInfo() +internal ArenaDebugInfo* AllocDebugInfo(void) { - if (g_DebugInfoFreeList) + ArenaDebugInfo* info = NULL; + if (g_DebugInfoFreeList != NULL) { - ArenaDebugInfo* info = g_DebugInfoFreeList; - g_DebugInfoFreeList = info->Next; - info->Next = nullptr; - return info; + info = g_DebugInfoFreeList; + g_DebugInfoFreeList = info->Next; + info->Next = NULL; } - - if (!g_DebugInfoArena) + else { - // Create a dedicated arena for debug info - g_DebugInfoArena = - ArenaAllocate({ .ReserveSize = Megabytes(16), .CommitSize = Kilobytes(64), .Name = "Debug Info Arena" }); - } + if (g_DebugInfoArena == NULL) + { + g_DebugInfoArena = ArenaAllocate((ArenaParams){ + .ReserveSize = Megabytes(16), .CommitSize = Kilobytes(64), .Name = "Debug Info Arena" }); + } - return ArenaPushStruct(g_DebugInfoArena JULIET_DEBUG_PARAM("ArenaDebugInfo")); + info = ArenaPushStructTag(g_DebugInfoArena, ArenaDebugInfo, "ArenaDebugInfo"); + } + return info; } -Arena* GetDebugInfoArena() +Arena* GetDebugInfoArena(void) { - if (!g_DebugInfoArena) + if (g_DebugInfoArena == NULL) { - g_DebugInfoArena = - ArenaAllocate({ .ReserveSize = Megabytes(16), .CommitSize = Kilobytes(64), .Name = "Debug Info Arena" }); + g_DebugInfoArena = ArenaAllocate((ArenaParams){ + .ReserveSize = Megabytes(16), .CommitSize = Kilobytes(64), .Name = "Debug Info Arena" }); } return g_DebugInfoArena; } -static void FreeDebugInfo(ArenaDebugInfo* info) + +internal void FreeDebugInfo(ArenaDebugInfo* info) { - if (info) + if (info != NULL) { info->Next = g_DebugInfoFreeList; g_DebugInfoFreeList = info; } } -void DebugRegisterArena(NonNullPtr arena) +void DebugRegisterArena(Arena* arena) { - // Add to Global List - // Note: Not thread safe, assuming single thread for now as per context - if (g_ArenaGlobalHead) + Assert(arena != NULL); + if (g_ArenaGlobalHead != NULL) { g_ArenaGlobalHead->GlobalPrev = arena; } arena->GlobalNext = g_ArenaGlobalHead; - arena->GlobalPrev = nullptr; + arena->GlobalPrev = NULL; g_ArenaGlobalHead = arena; } -void DebugUnregisterArena(NonNullPtr arena) +void DebugUnregisterArena(Arena* arena) { - // Remove from Global List - if (arena->GlobalPrev) + Assert(arena != NULL); + if (arena->GlobalPrev != NULL) { arena->GlobalPrev->GlobalNext = arena->GlobalNext; } @@ -71,44 +72,47 @@ void DebugUnregisterArena(NonNullPtr arena) { g_ArenaGlobalHead = arena->GlobalNext; } - if (arena->GlobalNext) + if (arena->GlobalNext != NULL) { arena->GlobalNext->GlobalPrev = arena->GlobalPrev; } - arena->GlobalPrev = nullptr; - arena->GlobalNext = nullptr; + arena->GlobalPrev = NULL; + arena->GlobalNext = NULL; } -void DebugArenaSetDebugName(NonNullPtr arena, const char* name) +void DebugArenaSetDebugName(Arena* arena, const char* name) { + Assert(arena != NULL); arena->Name = name; } -bool IsDebugInfoArena(const Arena* arena) +bool8 IsDebugInfoArena(const Arena* arena) { return arena == g_DebugInfoArena; } void DebugArenaFreeBlock(Arena* block) { + Assert(block != NULL); ArenaDebugInfo* info = block->FirstDebugInfo; - while (info) + while (info != NULL) { ArenaDebugInfo* nextInfo = info->Next; FreeDebugInfo(info); info = nextInfo; } - block->FirstDebugInfo = nullptr; + block->FirstDebugInfo = NULL; } void DebugArenaRemoveAllocation(Arena* block, size_t oldOffset) { + Assert(block != NULL); ArenaDebugInfo** prevInfo = &block->FirstDebugInfo; ArenaDebugInfo* info = block->FirstDebugInfo; - while (info) + while (info != NULL) { - if (info->Offset == oldOffset) // Found it + if (info->Offset == oldOffset) { *prevInfo = info->Next; FreeDebugInfo(info); @@ -121,15 +125,16 @@ void DebugArenaRemoveAllocation(Arena* block, size_t oldOffset) void DebugArenaPopTo(Arena* block, size_t newPosition) { + Assert(block != NULL); ArenaDebugInfo** prevInfo = &block->FirstDebugInfo; ArenaDebugInfo* info = block->FirstDebugInfo; - while (info) + while (info != NULL) { if (info->Offset >= newPosition) { ArenaDebugInfo* toFree = info; - *prevInfo = info->Next; // Unlink - info = info->Next; // Advance + *prevInfo = info->Next; + info = info->Next; FreeDebugInfo(toFree); } else @@ -142,10 +147,11 @@ void DebugArenaPopTo(Arena* block, size_t newPosition) void DebugArenaAddDebugInfo(Arena* block, size_t size, size_t offset, const char* tag) { + Assert(block != NULL); ArenaDebugInfo* info = AllocDebugInfo(); - if (info) + if (info != NULL) { - if (tag) + if (tag != NULL) { String copiedTag = StringCopy(g_DebugInfoArena, WrapString(tag)); info->Tag = copiedTag.Str; @@ -161,10 +167,9 @@ void DebugArenaAddDebugInfo(Arena* block, size_t size, size_t offset, const char } } -Arena* GetGlobalArenaListHead() +Arena* GetGlobalArenaListHead(void) { return g_ArenaGlobalHead; } - #endif diff --git a/Juliet/src/Core/Memory/MemoryArenaTests.c b/Juliet/src/Core/Memory/MemoryArenaTests.c new file mode 100644 index 0000000..dc3d4a0 --- /dev/null +++ b/Juliet/src/Core/Memory/MemoryArenaTests.c @@ -0,0 +1,109 @@ +#include +#include +#include + +#if JULIET_DEBUG + +typedef struct TestStruct TestStruct; +struct TestStruct +{ + uint8 First; + uint16 Second; +}; + +void UnitTest_TestMemoryArena(void) +{ + printf("Running Paged Memory Arena Tests...\n"); + + ArenaParams param = { .ReserveSize = Megabytes(64ull), .CommitSize = Kilobytes(64ull), .Name = "Test Arena" }; + Arena* testArena = ArenaAllocate(param); + + size_t pos = ArenaPos(testArena); + Assert(pos == k_ArenaHeaderSize); + + TestStruct* myStruct = ArenaPushStruct(testArena, TestStruct); + Assert(myStruct->First == 0); + Assert(myStruct->Second == 0); + pos = ArenaPos(testArena); + Assert(pos == k_ArenaHeaderSize + sizeof(TestStruct)); + + TestStruct* myStruct2 = ArenaPushStruct(testArena, TestStruct); + Assert(myStruct2->First == 0); + Assert(myStruct2->Second == 0); + + myStruct->First = 5; + myStruct->Second = 125; + myStruct2->First = 5; + myStruct2->Second = 125; + + ArenaClear(testArena); + pos = ArenaPos(testArena); + Assert(pos == k_ArenaHeaderSize); + + myStruct = ArenaPushStruct(testArena, TestStruct); + Assert(myStruct->First == 0); + Assert(myStruct->Second == 0); + pos = ArenaPos(testArena); + Assert(pos == k_ArenaHeaderSize + sizeof(TestStruct)); + + TestStruct* myStruct3 = ArenaPushStruct(testArena, TestStruct); + Assert(myStruct3->First == 0); + Assert(myStruct3->Second == 0); + pos = ArenaPos(testArena); + Assert(pos == k_ArenaHeaderSize + sizeof(TestStruct) * 2); + + ArenaClear(testArena); + + // TEST COMMIT + uint8* myArray = ArenaPushArray(testArena, uint8, 100000); + *myArray = 5; + Assert(*myArray == 5); + bool8 isCommitSizeSame = (testArena->Committed == (2 * param.CommitSize)); + Assert(isCommitSizeSame); + ArenaClear(testArena); + + // Push again above default commit size + myArray = ArenaPushArray(testArena, uint8, 100000); + Assert(*myArray == 0); + isCommitSizeSame = (testArena->Current->Committed == (2 * param.CommitSize)); + Assert(isCommitSizeSame); + ArenaClear(testArena); + + // TEST RESERVE + size_t posPreBigArray = ArenaPos(testArena); + size_t reservedSizePreBigArray = (size_t)testArena->Current->Reserved; + + size_t arraySize = (size_t)Megabytes(100ull); + myArray = ArenaPushArray(testArena, uint8, arraySize); + + size_t reserve_size = (size_t)AlignPow2(arraySize + k_ArenaHeaderSize, AlignOf(uint8)); + Assert(reserve_size == testArena->Current->Position); + Assert(reservedSizePreBigArray == testArena->Current->BasePosition); + + uint64 k_PageSizeUnitTest = Kilobytes(4); + size_t reserve_sizeAlignToPage = (size_t)AlignPow2(reserve_size, k_PageSizeUnitTest); + + bool8 isReserveSizeSame = (testArena->Current->Reserved == reserve_sizeAlignToPage); + Assert(isReserveSizeSame); + Assert(testArena->Current->Reserved == testArena->Current->Committed); + + size_t basePos = ArenaPos(testArena); + Assert(basePos == reserve_size + testArena->Current->BasePosition); + + myStruct = ArenaPushStruct(testArena, TestStruct); + + ArenaPopTo(testArena, basePos); + Assert(testArena->Current->Previous != NULL); + + ArenaPop(testArena, arraySize); + Assert(testArena->Current->Previous != NULL); + Assert(testArena->Current->Position == k_ArenaHeaderSize); + + ArenaPopTo(testArena, posPreBigArray); + Assert(testArena->Current->Previous == NULL); + + ArenaRelease(testArena); + + printf("All Paged MemoryArena tests passed.\n"); +} +#endif diff --git a/Juliet/src/Core/Memory/MemoryArenaTests.cpp b/Juliet/src/Core/Memory/MemoryArenaTests.cpp deleted file mode 100644 index de970b0..0000000 --- a/Juliet/src/Core/Memory/MemoryArenaTests.cpp +++ /dev/null @@ -1,122 +0,0 @@ -#include -#include -#include - -#if JULIET_DEBUG - -namespace UnitTest -{ - struct TestStruct - { - uint8 First; - uint16 Second; - }; - // Need access to internal Pool functions? They are in the header now! - // MemoryPool is declared in header. - void TestMemoryArena() - { - printf("Running Paged Memory Arena Tests...\n"); - - // New Arena! - ArenaParams param{ .ReserveSize = Megabytes(64llu), .CommitSize = Kilobytes(64llu), .Name = "Test Arena" }; - Arena* testArena = ArenaAllocate(param); - - size_t pos = ArenaPos(testArena); - Assert(pos == k_ArenaHeaderSize); - - TestStruct* myStruct = ArenaPushStruct(testArena); - Assert(myStruct->First == 0); - Assert(myStruct->Second == 0); - pos = ArenaPos(testArena); - Assert(pos == k_ArenaHeaderSize + sizeof(TestStruct)); - - TestStruct* myStruct2 = ArenaPushStruct(testArena); - Assert(myStruct2->First == 0); - Assert(myStruct2->Second == 0); - - myStruct->First = 5; - myStruct->Second = 125; - myStruct2->First = 5; - myStruct2->Second = 125; - - ArenaClear(testArena); - pos = ArenaPos(testArena); - Assert(pos == k_ArenaHeaderSize); - - myStruct = ArenaPushStruct(testArena); - Assert(myStruct->First == 0); - Assert(myStruct->Second == 0); - pos = ArenaPos(testArena); - Assert(pos == k_ArenaHeaderSize + sizeof(TestStruct)); - - TestStruct* myStruct3 = ArenaPushStruct(testArena); - Assert(myStruct3->First == 0); - Assert(myStruct3->Second == 0); - pos = ArenaPos(testArena); - Assert(pos == k_ArenaHeaderSize + sizeof(TestStruct) * 2); - - ArenaClear(testArena); - - // TEST COMMIT - // Push more than the default commit size - uint8* myArray = ArenaPushArray(testArena, 100'000); - *myArray = 5; - Assert(*myArray == 5); - bool isCommitSizeSame = testArena->Committed == (2 * param.CommitSize); - Assert(isCommitSizeSame); - ArenaClear(testArena); - - // Push again above default commit size - myArray = ArenaPushArray(testArena, 100'000); - // Shoud be zero again - Assert(*myArray == 0); - // Should not have commited more - isCommitSizeSame = testArena->Current->Committed == (2 * param.CommitSize); - Assert(isCommitSizeSame); - ArenaClear(testArena); - - // TEST RESERVE - size_t posPreBigArray = ArenaPos(testArena); - size_t reservedSizePreBigArray = testArena->Current->Reserved; - - size_t arraySize = Megabytes(100llu); - myArray = ArenaPushArray(testArena, arraySize); - - // Align and support the header size because we need to allocate a new block + header - size_t reserve_size = AlignPow2(arraySize + k_ArenaHeaderSize, AlignOf(uint8)); - Assert(reserve_size == testArena->Current->Position); - Assert(reservedSizePreBigArray == testArena->Current->BasePosition); - - // TODO Get page size from os kernel call (dwPageSize) - constexpr uint64 k_PageSizeUnitTest = Kilobytes(4); - size_t reserve_sizeAlignToPage = AlignPow2(reserve_size, k_PageSizeUnitTest); - - bool isReserveSizeSame = testArena->Current->Reserved == reserve_sizeAlignToPage; - Assert(isReserveSizeSame); - Assert(testArena->Current->Reserved == testArena->Current->Committed); - - size_t basePos = ArenaPos(testArena); - Assert(basePos == reserve_size + testArena->Current->BasePosition); - - myStruct = ArenaPushStruct(testArena); - - // Should not delete the current block because we only delete the struct - ArenaPopTo(testArena, basePos); - Assert(testArena->Current->Previous != nullptr); - - // Should still not delete the current block. We only remove the array - ArenaPop(testArena, arraySize); - Assert(testArena->Current->Previous != nullptr); - // We should only have the header remaining - Assert(testArena->Current->Position == k_ArenaHeaderSize); - - // This one should delete the block - ArenaPopTo(testArena, posPreBigArray); - Assert(testArena->Current->Previous == nullptr); - - ArenaRelease(testArena); - - printf("All Paged MemoryArena tests passed.\n"); - } -} // namespace UnitTest -#endif diff --git a/Juliet/src/Core/Networking/NetworkPacket.cpp b/Juliet/src/Core/Networking/NetworkPacket.cpp deleted file mode 100644 index 5db4ffd..0000000 --- a/Juliet/src/Core/Networking/NetworkPacket.cpp +++ /dev/null @@ -1,65 +0,0 @@ -#include -#include -#include - -#define TO_BUFFER(ptr) reinterpret_cast(ptr) - -NetworkPacket::NetworkPacket() = default; -NetworkPacket::NetworkPacket(Arena& arena) -{ - Data.Create(&arena); -} -NetworkPacket::~NetworkPacket() = default; -NetworkPacket::NetworkPacket(NetworkPacket&) = default; -NetworkPacket& NetworkPacket::operator=(const NetworkPacket&) = default; -NetworkPacket::NetworkPacket(NetworkPacket&&) noexcept = default; -NetworkPacket& NetworkPacket::operator=(NetworkPacket&&) noexcept = default; - -void NetworkPacket::Create(Arena& arena) -{ - Data.Create(&arena); -} - -ByteBuffer NetworkPacket::GetRawData() -{ - ByteBuffer buffer{}; - buffer.Data = Data.DataPtr(); - buffer.Size = Data.Size(); - - return buffer; -} - -// Begin - Unpack - -// End - Unpack -// Begin - Pack -NetworkPacket& NetworkPacket::operator<<(uint32 value) -{ - uint32 toWrite = htonl(value); - Append({ TO_BUFFER(&toWrite), sizeof(toWrite) }); - return *this; -} - -NetworkPacket& NetworkPacket::operator<<(char* data) -{ - Assert(data && "NetworkPacket::operator<< Data must not be null"); - - // First insert string length in network byte order - const uint32 length = static_cast(std::strlen(data)); - *this << length; - - // Then insert the chars - Append({ TO_BUFFER(data), length * sizeof(char) }); - - return *this; -} -// End - Pack - -void NetworkPacket::Append(ByteBuffer buffer) -{ - if (buffer.Data && (buffer.Size > 0)) - { - Data.PushBack(TO_BUFFER(buffer.Data), buffer.Size); - } -} - diff --git a/Juliet/src/Core/Networking/Socket.cpp b/Juliet/src/Core/Networking/Socket.cpp deleted file mode 100644 index 9e6d070..0000000 --- a/Juliet/src/Core/Networking/Socket.cpp +++ /dev/null @@ -1,82 +0,0 @@ -#include -#include -#include -#include -#include - -Socket::Socket(Protocol protocol) - : Handle(SocketImpl::GetInvalidSocketHandle()) - , ProtocolType(protocol) -{ -} - -Socket::~Socket() -{ - Close(); -} - -Socket::Socket(Socket&& /*other*/) noexcept -{ - Unimplemented(); -} - -Socket& Socket::operator=(Socket&& /*socket*/) noexcept -{ - Unimplemented(); - return *this; -} - -bool Socket::IsValid() const -{ - return Handle != SocketImpl::GetInvalidSocketHandle(); -} - -void Socket::Create() -{ - if (Handle != SocketImpl::GetInvalidSocketHandle()) - { - Log(LogLevel::Message, LogCategory::Networking, "Socket already created"); - return; - } - - const SocketHandle handle = socket(PF_INET, ProtocolType == Protocol::TCP ? SOCK_STREAM : SOCK_DGRAM, 0); - if (handle == SocketImpl::GetInvalidSocketHandle()) - { - Log(LogLevel::Error, LogCategory::Networking, "Failed to create socket. Error [%s]", SocketImpl::GetErrorString()); - return; - } - - CreateFromHandle(handle); -} -void Socket::CreateFromHandle(SocketHandle handle) -{ - if (Handle != SocketImpl::GetInvalidSocketHandle()) - { - Log(LogLevel::Message, LogCategory::Networking, "Socket already created"); - return; - } - - Handle = handle; - - if (ProtocolType == Protocol::TCP) - { - int yes = 1; - if (setsockopt(Handle, IPPROTO_TCP, TCP_NODELAY, reinterpret_cast(&yes), sizeof(yes)) == -1) - { - Log(LogLevel::Error, LogCategory::Networking, "Cant set TCP_NODELAY."); - } - } - else - { - Assert(false); // Unimplemented - } -} - -void Socket::Close() -{ - if (Handle != SocketImpl::GetInvalidSocketHandle()) - { - SocketImpl::Close(Handle); - Handle = SocketImpl::GetInvalidSocketHandle(); - } -} diff --git a/Juliet/src/Core/Networking/SocketPlatformImpl.h b/Juliet/src/Core/Networking/SocketPlatformImpl.h deleted file mode 100644 index 3780176..0000000 --- a/Juliet/src/Core/Networking/SocketPlatformImpl.h +++ /dev/null @@ -1,23 +0,0 @@ -#pragma once - -#include - -// Windows uses a non standard header to define its socket types. -// Because of that we need to include those in this header. -// TODO : implement for other platforms -#if JULIET_WIN32 -#include -#else -// UNIMPLEMENT_SOCKETS -#endif - -namespace SocketImpl -{ - using MessageLenghtType = int; - - sockaddr_in CreateAddress(uint32 address, uint16 port); - SOCKET GetInvalidSocketHandle(); - void Close(SOCKET socketHandle); - const char* GetErrorString(); - Socket::Status GetErrorStatus(); -} // namespace SocketImpl diff --git a/Juliet/src/Core/Networking/TcpListener.cpp b/Juliet/src/Core/Networking/TcpListener.cpp deleted file mode 100644 index c0c0f6c..0000000 --- a/Juliet/src/Core/Networking/TcpListener.cpp +++ /dev/null @@ -1,66 +0,0 @@ -#include -#include -#include -#include - -TcpListener::TcpListener() - : Socket(Protocol::TCP) -{ -} - -Socket::Status TcpListener::Listen(uint16 port, uint32 address) -{ - // Unbind the internal socket. - // Allow reusing the same listener but switch port and addres - Close(); - - Create(); - - // Cant listen on broadcast - if (address == kBroadcastIp) - { - return Status::Error; - } - - sockaddr_in socketAddr = SocketImpl::CreateAddress(address, port); - if (bind(GetHandle(), reinterpret_cast(&socketAddr), sizeof(socketAddr)) == -1) - { - Log(LogLevel::Error, LogCategory::Networking, "Failed to bind TcpListener to port %d", port); - return Status::Error; - } - - if (listen(GetHandle(), SOMAXCONN) == -1) - { - Log(LogLevel::Error, LogCategory::Networking, "Failed to listen TcpListener to port %d", port); - return Status::Error; - } - - return Status::Ready; -} - -Socket::Status TcpListener::Accept(TcpSocket& socket) -{ - if (!IsValid()) - { - Log(LogLevel::Error, LogCategory::Networking, "Cannot accept connection because the socket is not listening"); - return Status::Error; - } - - SocketHandle client = ::accept(GetHandle(), nullptr, nullptr); - if (client == SocketImpl::GetInvalidSocketHandle()) - { - Log(LogLevel::Error, LogCategory::Networking, "Failed to accept a new connection. Error [%s]", - SocketImpl::GetErrorString()); - return Status::Error; - } - - socket.Close(); - socket.CreateFromHandle(client); - - return Status::Ready; -} - -void TcpListener::Close() -{ - Socket::Close(); -} diff --git a/Juliet/src/Core/Networking/TcpSocket.cpp b/Juliet/src/Core/Networking/TcpSocket.cpp deleted file mode 100644 index 418c32d..0000000 --- a/Juliet/src/Core/Networking/TcpSocket.cpp +++ /dev/null @@ -1,93 +0,0 @@ -#include -#include -#include -#include -#include - -TcpSocket::TcpSocket() - : Socket(Protocol::TCP) -{ -} - -Socket::RequestStatus TcpSocket::Send(NetworkPacket& packet) -{ - ByteBuffer buffer = packet.GetRawData(); - - if (buffer.Size == 0 || buffer.Data == nullptr) - { - Log(LogLevel::Error, LogCategory::Networking, "No data inside the network packet."); - return { Status::Error }; - } - - // Tcp socket opens a stream of data. - // Send function do not guarantee how the data will be sent and received. - // The receiver has no way to know the message stream has ended - // Because of that we will send the size of the packet first before sending the data. - - // TODO Use scratch allocator. - /* - Vector scratchVector; - scratchVector.resize(buffer.Size + sizeof(uint32)); - - // htonl converts uint32 from host byte order to network byte order - uint32 nlSize = htonl(static_cast(buffer.Size)); - - memcpy(scratchVector.data(), &nlSize, sizeof(nlSize)); - memcpy(scratchVector.data() + sizeof(nlSize), buffer.Data, buffer.Size); - - // TODO : Save within the packet the total size + make the ByteBuffer use the PartialSendIndex variable directly - // instead of memcopying the whole packet and ignoring part of it - ByteBuffer packetToSend{ .Data = scratchVector.data() + packet.PartialSendIndex, - .Size = scratchVector.size() - packet.PartialSendIndex }; - auto messageStatus = Send(packetToSend); - - if (messageStatus.Status == Status::Partial) - { - packet.PartialSendIndex += messageStatus.Length; - } - else if (messageStatus.Status == Status::Done) - { - packet.PartialSendIndex = 0; - } - - return messageStatus; - */ - return {}; -} - -Socket::RequestStatus TcpSocket::Send(ByteBuffer buffer) -{ - RequestStatus request = {}; - - constexpr int sendFlags = 0; - int result = 0; - for (request.Length = 0; request.Length < buffer.Size; request.Length += static_cast(result)) - { - result = ::send(GetHandle(), reinterpret_cast(buffer.Data + request.Length), - static_cast(buffer.Size) - - static_cast(request.Length), - sendFlags); - - // Results is -1 when an error occured. - // https://pubs.opengroup.org/onlinepubs/000095399/functions/send.html - if (result < 0) - { - request.Status = SocketImpl::GetErrorStatus(); - - if ((request.Status == Status::NotReady) && (request.Length > 0)) - { - request.Status = Status::Partial; - } - - break; - } - } - - return request; -} - -Socket::Status TcpSocket::Receive(NetworkPacket& /*outPacket*/) -{ - return Status::Done; -} - diff --git a/Juliet/src/Core/Networking/Win32/Win32SocketPlatformImpl.cpp b/Juliet/src/Core/Networking/Win32/Win32SocketPlatformImpl.cpp deleted file mode 100644 index 2274993..0000000 --- a/Juliet/src/Core/Networking/Win32/Win32SocketPlatformImpl.cpp +++ /dev/null @@ -1,80 +0,0 @@ -#include -#include -#include -#include -#include - -namespace SocketImpl -{ - sockaddr_in CreateAddress(uint32 address, uint16 port) - { - auto addr = sockaddr_in(); - addr.sin_addr.s_addr = htonl(address); - addr.sin_family = AF_INET; - addr.sin_port = htons(port); - - return addr; - } - - SOCKET GetInvalidSocketHandle() - { - return INVALID_SOCKET; - } - - void Close(SOCKET socketHandle) - { - ::closesocket(socketHandle); - } - - const char* GetErrorString() - { - switch (WSAGetLastError()) - { - case WSAEWOULDBLOCK: return "WSAEWOULDBLOCK"; - case WSAEALREADY: return "WSAEALREADY"; - case WSAECONNABORTED: return "WSAECONNABORTED"; - case WSAECONNRESET: return "WSAECONNRESET"; - case WSAETIMEDOUT: return "WSAETIMEDOUT"; - case WSAENETRESET: return "WSAENETRESET"; - case WSAENOTCONN: return "WSAENOTCONN"; - case WSAEISCONN: return "WSAEISCONN"; - default: return "Other"; // TODO: Include the error number inside the string - } - } - - Socket::Status GetErrorStatus() - { - switch (WSAGetLastError()) - { - case WSAEWOULDBLOCK: return Socket::Status::NotReady; - case WSAEALREADY: return Socket::Status::NotReady; - case WSAECONNABORTED: return Socket::Status::Disconnected; - case WSAECONNRESET: return Socket::Status::Disconnected; - case WSAETIMEDOUT: return Socket::Status::Disconnected; - case WSAENETRESET: return Socket::Status::Disconnected; - case WSAENOTCONN: return Socket::Status::Disconnected; - case WSAEISCONN: return Socket::Status::Done; // when connecting a non-blocking socket - default: return Socket::Status::Error; - } - } - -} // namespace SocketImpl - -// Windows needs its socket dll to be initialized for the whole process -struct WSAAutoRelease -{ - WSAAutoRelease() - { - WORD wVersionRequested = MAKEWORD(2, 2); - WSADATA wsaData; - if (WSAStartup(wVersionRequested, &wsaData) != 0) - { - Log(LogLevel::Error, LogCategory::Core, "Failed to startup WinSock2"); - return; - } - } - - ~WSAAutoRelease() { WSACleanup(); } -}; - -WSAAutoRelease gWSAautoRelease; diff --git a/Juliet/src/Core/PCH.c b/Juliet/src/Core/PCH.c new file mode 100644 index 0000000..799cec2 --- /dev/null +++ b/Juliet/src/Core/PCH.c @@ -0,0 +1 @@ +#include "Core/PCH.h" diff --git a/Juliet/src/Core/PCH.cpp b/Juliet/src/Core/PCH.cpp deleted file mode 100644 index 4140e3d..0000000 --- a/Juliet/src/Core/PCH.cpp +++ /dev/null @@ -1 +0,0 @@ -#include "Core/PCH.h" diff --git a/Juliet/src/Core/Thread/ThreadContext.cpp b/Juliet/src/Core/Thread/ThreadContext.c similarity index 50% rename from Juliet/src/Core/Thread/ThreadContext.cpp rename to Juliet/src/Core/Thread/ThreadContext.c index 18f4514..7a5ffad 100644 --- a/Juliet/src/Core/Thread/ThreadContext.cpp +++ b/Juliet/src/Core/Thread/ThreadContext.c @@ -1,49 +1,51 @@ -#include +#include #include -thread_local thread_context* local_thread_context; +ThreadLocal thread_context* g_local_thread_context = NULL; +ThreadLocal char g_thread_scratch_names[2][1024]; -thread_context* thread_context_alloc() +thread_context* thread_context_alloc(void) { - thread_local char name[2][1024]; - juliet_snprintf(name[0], sizeof(name[0]), "Scratch/0[TID:%u]", thread_id()); - juliet_snprintf(name[1], sizeof(name[1]), "Scratch/1[TID:%u]", thread_id()); - Arena* arena_0 = ArenaAllocate({ .Name = name[0] }); - Arena* arena_1 = ArenaAllocate({ .Name = name[1] }); + juliet_snprintf(g_thread_scratch_names[0], sizeof(g_thread_scratch_names[0]), "Scratch/0[TID:%u]", thread_id()); + juliet_snprintf(g_thread_scratch_names[1], sizeof(g_thread_scratch_names[1]), "Scratch/1[TID:%u]", thread_id()); + Arena* arena_0 = ArenaAllocate((ArenaParams){ .Name = g_thread_scratch_names[0] }); + Arena* arena_1 = ArenaAllocate((ArenaParams){ .Name = g_thread_scratch_names[1] }); - thread_context* ctx = ArenaPushStruct(arena_0); + thread_context* ctx = ArenaPushStruct(arena_0, thread_context); ctx->ScratchArenas[0] = arena_0; ctx->ScratchArenas[1] = arena_1; return ctx; } -void thread_context_release(NonNullPtr ctx) +void thread_context_release(thread_context* ctx) { + Assert(ctx != NULL); ArenaRelease(ctx->ScratchArenas[1]); ArenaRelease(ctx->ScratchArenas[0]); } -void thread_context_select(NonNullPtr ctx) +void thread_context_select(thread_context* ctx) { - local_thread_context = ctx.Get(); + Assert(ctx != NULL); + g_local_thread_context = ctx; } -thread_context* thread_context_current() +thread_context* thread_context_current(void) { - Assert(local_thread_context); - return local_thread_context; + Assert(g_local_thread_context != NULL); + return g_local_thread_context; } Arena* thread_context_get_scratch(Arena** conflicts, size_t count) { thread_context* ctx = thread_context_current(); - Arena* result = nullptr; + Arena* result = NULL; Arena** arena_ptr = ctx->ScratchArenas; for (size_t i = 0; i < ArraySize(ctx->ScratchArenas); i += 1, arena_ptr += 1) { Arena** conflict_ptr = conflicts; - bool has_conflict = false; + bool8 has_conflict = false; for (size_t j = 0; j < count; j += 1, conflict_ptr += 1) { if (*arena_ptr == *conflict_ptr) @@ -70,4 +72,3 @@ void scratch_end(TempArena scratch) { ArenaTempEnd(scratch); } - diff --git a/Juliet/src/Core/Thread/win32_thread.cpp b/Juliet/src/Core/Thread/win32_thread.c similarity index 54% rename from Juliet/src/Core/Thread/win32_thread.cpp rename to Juliet/src/Core/Thread/win32_thread.c index 02a0537..deb2e31 100644 --- a/Juliet/src/Core/Thread/win32_thread.cpp +++ b/Juliet/src/Core/Thread/win32_thread.c @@ -1,28 +1,23 @@ -#include +#include #include #include #include -uint32 thread_id() +uint32 thread_id(void) { uint32 id = GetCurrentThreadId(); return id; } -extern Win32_SetThreadDescription_FuncType* Win32_SetThreadDescription_Func; +extern Win32_SetThreadDescription_FuncType Win32_SetThreadDescription_Func; void set_thread_name(String name) { TempArena scratch = scratch_begin(0, 0); - // New way: - // https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-setthreaddescription - // Old way: - // https://learn.microsoft.com/fr-fr/previous-versions/visualstudio/visual-studio-2015/debugger/how-to-set-a-thread-name-in-native-code?view=vs-2015&redirectedfrom=MSDN - - if (Win32_SetThreadDescription_Func != nullptr) + if (Win32_SetThreadDescription_Func != NULL) { String16 name16 = str16_from_8(scratch.Arena, name); Win32_SetThreadDescription_Func(GetCurrentThread(), (WCHAR*)name16.Str); @@ -31,13 +26,13 @@ void set_thread_name(String name) String8 name_copy = StringCopy(scratch.Arena, name); #pragma pack(push, 8) - struct THREADNAME_INFO + typedef struct THREADNAME_INFO { - DWORD dwType; // Must be 0x1000. - LPCSTR szName; // Pointer to name (in user addr space). - DWORD dwThreadID; // Thread ID (-1=caller thread). - DWORD dwFlags; // Reserved for future use, must be zero. - }; + DWORD dwType; + LPCSTR szName; + DWORD dwThreadID; + DWORD dwFlags; + } THREADNAME_INFO; #pragma pack(pop) THREADNAME_INFO info; info.dwType = 0x1000; @@ -57,4 +52,3 @@ void set_thread_name(String name) scratch_end(scratch); } - diff --git a/Juliet/src/Engine/Asset.c b/Juliet/src/Engine/Asset.c new file mode 100644 index 0000000..a9d20b1 --- /dev/null +++ b/Juliet/src/Engine/Asset.c @@ -0,0 +1,7 @@ +#include + +MeshAssetID LoadMesh(String filename) +{ + (void)filename; + return 0; +} diff --git a/Juliet/src/Engine/Asset.cpp b/Juliet/src/Engine/Asset.cpp deleted file mode 100644 index 8b19439..0000000 --- a/Juliet/src/Engine/Asset.cpp +++ /dev/null @@ -1,3 +0,0 @@ -#include - -MeshAssetID LoadMesh([[maybe_unused]] String filename) { return 0; } diff --git a/Juliet/src/Engine/Debug/MemoryDebugger.c b/Juliet/src/Engine/Debug/MemoryDebugger.c new file mode 100644 index 0000000..94a252b --- /dev/null +++ b/Juliet/src/Engine/Debug/MemoryDebugger.c @@ -0,0 +1,598 @@ +#include + +#include +#include +#include +#include +#include +#include + +#if JULIET_DEBUG + +Arena* GetGlobalArenaListHead(void); + +typedef struct ArenaDebugState ArenaDebugState; +struct ArenaDebugState +{ + float Zoom; + ArenaAllocation* SelectedAlloc; + bool8 ScrollVisualToSelected; + bool8 ScrollListToSelected; +}; + +typedef struct PagedArenaDebugState PagedArenaDebugState; +struct PagedArenaDebugState +{ + float Zoom; + ArenaDebugInfo* SelectedAlloc; + bool8 ScrollVisualToSelected; + bool8 ScrollListToSelected; +}; + +typedef struct PagedArenaStateEntry PagedArenaStateEntry; +struct PagedArenaStateEntry +{ + const Arena* Arena; + PagedArenaDebugState State; +}; + +// Static Vector for lookup +global VectorArena s_PagedArenaStates = { 0 }; +global VectorArena s_DebugBlocks = { 0 }; + +internal PagedArenaDebugState* GetPagedArenaState(const Arena* arena) +{ + if (s_PagedArenaStates.Arena == NULL) + { + Arena* pagedArenaStates = ArenaAllocate((ArenaParams){ .Name = "DebugState States" }); + VectorArenaCreate(&s_PagedArenaStates, PagedArenaStateEntry, pagedArenaStates, Kilobytes(1024) JULIET_DEBUG_PARAM("DebugState States")); + } + + PagedArenaDebugState* result = NULL; + for (index_t i = 0; i < s_PagedArenaStates.Size; ++i) + { + PagedArenaStateEntry* entry = &VectorArenaAt(PagedArenaStateEntry, &s_PagedArenaStates, i); + if (entry->Arena == arena) + { + result = &entry->State; + break; + } + } + + if (result == NULL) + { + PagedArenaStateEntry newEntry = { 0 }; + newEntry.Arena = arena; + newEntry.State.Zoom = 1.0f; + + vector_arena_push_elem(&s_PagedArenaStates, &newEntry); + result = &VectorArenaLast(PagedArenaStateEntry, &s_PagedArenaStates)->State; + } + + return result; +} + +// Generate a unique color per allocation, using tag + offset + size +// so entries with same tag name get distinct colors +internal uint32 GetColorForAllocation(const char* tag, size_t offset, size_t size) +{ + uint32 hash = 2166136261u; + if (tag != NULL) + { + for (const char* s = tag; *s; ++s) + { + hash ^= (uint8)(*s); + hash *= 16777619u; + } + } + // Mix in offset and size to differentiate same-tag entries + hash ^= (uint32)offset; + hash *= 16777619u; + hash ^= (uint32)size; + hash *= 16777619u; + + float h = (float)(hash % 360) / 360.0f; + float s = 0.5f + (float)((hash >> 12) % 30) / 100.0f; + float v = 0.65f + (float)((hash >> 20) % 25) / 100.0f; + return ImGui_ColorConvertHSVtoU32(h, s, v); +} + +internal void DrawPagedArena(const Arena* arena) +{ + ImGui_PushIDPtr(arena); + const char* name = (arena->Name != NULL && arena->Name[0] != '\0') ? arena->Name : "Unnamed Arena"; + PagedArenaDebugState* state = GetPagedArenaState(arena); + + if (ImGui_CollapsingHeader(name)) + { + // Collect Blocks (Pages) in order (Oldest -> Newest) + // Arena->Previous chain goes Newest -> Oldest. + if (s_DebugBlocks.Arena == NULL) + { + Arena* pagedArenaStates = ArenaAllocate((ArenaParams){ .Name = "DebugState Blocks" }); + VectorArenaCreate(&s_DebugBlocks, const Arena*, pagedArenaStates, kDefaultVectorReserveSize JULIET_DEBUG_PARAM("DebugState Blocks")); + } + vector_arena_clear(&s_DebugBlocks); + + for (const Arena* curr = arena->Current; curr != NULL; curr = curr->Previous) + { + vector_arena_push_elem(&s_DebugBlocks, &curr); + } + + // Reverse manually + size_t count = s_DebugBlocks.Size; + for (size_t i = 0; i < count / 2; ++i) + { + const Arena* temp = VectorArenaAt(const Arena*, &s_DebugBlocks, i); + VectorArenaAt(const Arena*, &s_DebugBlocks, i) = VectorArenaAt(const Arena*, &s_DebugBlocks, count - 1 - i); + VectorArenaAt(const Arena*, &s_DebugBlocks, count - 1 - i) = temp; + } + + // Calculate Stats + size_t totalCapacity = 0; + size_t totalUsed = 0; + + for (index_t i = 0; i < s_DebugBlocks.Size; ++i) + { + const Arena* blk = VectorArenaAt(const Arena*, &s_DebugBlocks, i); + totalCapacity += blk->Reserved; + totalUsed += blk->Position; + } + + ImGui_Text("Used: %zu / %zu bytes (%zu pages)", totalUsed, totalCapacity, s_DebugBlocks.Size); + ImGui_SliderFloat("Zoom", &state->Zoom, 0.1f, 1000000.0f, "%.2f", ImGuiSliderFlags_Logarithmic); + + // --- Visual View --- + ImGui_Separator(); + ImGui_Text("Visual Map"); + + float blockHeight = 24.0f; + float blockSpacing = 4.0f; + float requiredVisHeight = (float)s_DebugBlocks.Size * (blockHeight + blockSpacing) + 30.0f; + // constrains + if (requiredVisHeight > 300.0f) + { + requiredVisHeight = 300.0f; + } + if (requiredVisHeight < 50.0f) + { + requiredVisHeight = 50.0f; + } + + if (ImGui_BeginChild("VisualMap", (ImVec2_c){ 0.0f, requiredVisHeight }, true, + ImGuiWindowFlags_HorizontalScrollbar | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoScrollbar)) + { + ImGui_SetScrollY(0.0f); + + ImDrawList* dl = ImGui_GetWindowDrawList(); + float availWidth = ImGui_GetContentRegionAvail().x; + ImVec2_c startPos = ImGui_GetCursorScreenPos(); + + float virtualWidth = availWidth * state->Zoom; + if (virtualWidth < availWidth) + { + virtualWidth = availWidth; + } + ImGui_Dummy((ImVec2_c){ virtualWidth, requiredVisHeight + 1.0f }); + + bool8 isMapHovered = ImGui_IsWindowHovered(); + + // Zoom with pivot + if (isMapHovered) + { + float wheel = ImGuiIO_GetMouseWheel(); + if (wheel != 0.0f) + { + float mouseXScreen = ImGui_GetMousePos().x; + float activeScrollX = ImGui_GetScrollX(); + float viewportLeft = ImGui_GetWindowPos().x; + float mouseRelViewport = mouseXScreen - viewportLeft; + + float virtualWidthOld = Max(availWidth * state->Zoom, availWidth); + float mouseContentPos = activeScrollX + mouseRelViewport; + float ratio = mouseContentPos / virtualWidthOld; + + state->Zoom += wheel * 0.2f * state->Zoom; + state->Zoom = Max(state->Zoom, 0.1f); + state->Zoom = Min(state->Zoom, 1000000.0f); + + float virtualWidthNew = Max(availWidth * state->Zoom, availWidth); + float desiredScrollX = (ratio * virtualWidthNew) - mouseRelViewport; + ImGui_SetScrollX(desiredScrollX); + } + } + + // Pan + if (isMapHovered && (ImGui_IsMouseDragging(ImGuiMouseButton_Left) || ImGui_IsMouseDragging(ImGuiMouseButton_Right) || + ImGui_IsMouseDragging(ImGuiMouseButton_Middle))) + { + ImGui_SetScrollX(ImGui_GetScrollX() - ImGuiIO_GetMouseDelta().x); + } + + // Jump to Selected (Sync from List) + if (state->ScrollVisualToSelected && state->SelectedAlloc != NULL) + { + for (index_t blkIdx = 0; blkIdx < s_DebugBlocks.Size; ++blkIdx) + { + const Arena* searchBlk = VectorArenaAt(const Arena*, &s_DebugBlocks, blkIdx); + ArenaDebugInfo* search = searchBlk->FirstDebugInfo; + bool8 found = false; + while (search != NULL) + { + if (search == state->SelectedAlloc) + { + found = true; + break; + } + search = search->Next; + } + + if (found) + { + float virtualWidthLocal = Max(availWidth * state->Zoom, availWidth); + if (searchBlk->Reserved > 0) + { + double scale = (double)virtualWidthLocal / (double)searchBlk->Reserved; + float xStart = (float)((double)state->SelectedAlloc->Offset * scale); + float centerOffset = availWidth * 0.5f; + ImGui_SetScrollX(xStart - centerOffset); + } + state->ScrollVisualToSelected = false; + break; + } + } + } + + ImVec2_c pos = startPos; + for (index_t blkIdx = 0; blkIdx < s_DebugBlocks.Size; ++blkIdx) + { + const Arena* blk = VectorArenaAt(const Arena*, &s_DebugBlocks, blkIdx); + ImGui_PushIDPtr(blk); + ImVec2_c rectMin = pos; + ImVec2_c rectMax = { pos.x + virtualWidth, pos.y + blockHeight }; + + ImDrawList_AddRect(dl, rectMin, rectMax, IM_COL32(100, 100, 100, 255)); + + size_t dataSize = blk->Reserved - k_ArenaHeaderSize; + if (dataSize > 0) + { + double scale = (double)virtualWidth / (double)blk->Reserved; + + // Draw Arena Header + { + float hdrWidth = (float)((double)k_ArenaHeaderSize * scale); + hdrWidth = Max(hdrWidth, 1.0f); + ImVec2_c hMin = { pos.x, pos.y + 1.0f }; + ImVec2_c hMax = { pos.x + hdrWidth, pos.y + blockHeight - 1.0f }; + ImDrawList_AddRectFilled(dl, hMin, hMax, IM_COL32(40, 60, 120, 255)); + + if (hdrWidth > 30.0f) + { + const char* hdrLabel = "Header"; + ImVec2_c textSize = ImGui_CalcTextSize(hdrLabel, NULL); + if (hdrWidth >= textSize.x + 4.0f) + { + float textX = hMin.x + (hdrWidth - textSize.x) * 0.5f; + float textY = hMin.y + (blockHeight - 2.0f - textSize.y) * 0.5f; + ImDrawList_AddText(dl, (ImVec2_c){ textX, textY }, IM_COL32(180, 200, 255, 255), hdrLabel, NULL); + } + } + + if (ImGui_IsMouseHoveringRect(hMin, hMax) && ImGui_IsWindowHovered()) + { + ImGui_BeginTooltip(); + ImGui_TextColored((ImVec4_c){ 0.5f, 0.6f, 0.9f, 1.0f }, "Arena Header"); + ImGui_Separator(); + ImGui_Text("Size: %zu bytes", k_ArenaHeaderSize); + ImGui_EndTooltip(); + } + } + + // Draw Allocations + ArenaDebugInfo* info = blk->FirstDebugInfo; + size_t expectedOffset = k_ArenaHeaderSize; + while (info != NULL) + { + // Draw alignment padding gap if present (only for small gaps that are actual alignment) + if (info->Offset > expectedOffset) + { + size_t padSize = info->Offset - expectedOffset; + const size_t k_MaxAlignmentPadding = 256; + float padXStart = pos.x + (float)((double)expectedOffset * scale); + float padWidth = (float)((double)padSize * scale); + + if (padSize <= k_MaxAlignmentPadding && padWidth >= 1.0f) + { + ImVec2_c pMin = { padXStart, pos.y + 1.0f }; + ImVec2_c pMax = { padXStart + padWidth, pos.y + blockHeight - 1.0f }; + + // Clip + if (pMin.x < rectMin.x) + { + pMin.x = rectMin.x; + } + if (pMax.x > rectMax.x) + { + pMax.x = rectMax.x; + } + + // Draw hatched pattern (diagonal lines) - clipped to visible area + float visLeft = ImGui_GetWindowPos().x; + float visRight = visLeft + ImGui_GetWindowSize().x; + float clippedLeft = Max(pMin.x, visLeft); + float clippedRight = Min(pMax.x, visRight); + + ImDrawList_AddRectFilled(dl, pMin, pMax, IM_COL32(30, 30, 30, 200)); + if (clippedLeft < clippedRight) + { + float step = 6.0f; + float startX = clippedLeft - (pMax.y - pMin.y); + startX = pMin.x + step * floorf((startX - pMin.x) / step); + if (startX < pMin.x) + { + startX = pMin.x; + } + + int lineCount = 0; + for (float lx = startX; lx < clippedRight && lineCount < 500; lx += step, ++lineCount) + { + float ly0 = pMin.y; + float lx1 = lx + (pMax.y - pMin.y); + float ly1 = pMax.y; + if (lx1 > pMax.x) + { + ly1 = pMin.y + (pMax.x - lx); + lx1 = pMax.x; + } + ImDrawList_AddLine(dl, (ImVec2_c){ lx, ly0 }, (ImVec2_c){ lx1, ly1 }, IM_COL32(80, 80, 80, 180)); + } + } + + // Label when zoomed + if (padWidth > 30.0f) + { + const char* padLabel = "Pad"; + ImVec2_c textSize = ImGui_CalcTextSize(padLabel, NULL); + if (padWidth >= textSize.x + 4.0f) + { + float textX = pMin.x + (padWidth - textSize.x) * 0.5f; + float textY = pMin.y + (blockHeight - 2.0f - textSize.y) * 0.5f; + ImDrawList_AddText(dl, (ImVec2_c){ textX, textY }, IM_COL32(120, 120, 120, 255), padLabel, NULL); + } + } + + if (ImGui_IsMouseHoveringRect(pMin, pMax) && ImGui_IsWindowHovered()) + { + ImGui_BeginTooltip(); + ImGui_TextColored((ImVec4_c){ 0.6f, 0.6f, 0.6f, 1.0f }, "Alignment Padding"); + ImGui_Separator(); + ImGui_Text("Size: %zu bytes", padSize); + ImGui_Text("Offset: %zu - %zu", expectedOffset, info->Offset); + ImGui_EndTooltip(); + } + } + } + expectedOffset = info->Offset + info->Size; + + ImGui_PushIDPtr(info); + float xStart = pos.x + (float)((double)info->Offset * scale); + float width = (float)((double)info->Size * scale); + width = Max(width, 1.0f); + + ImVec2_c aMin = { xStart, pos.y + 1.0f }; + ImVec2_c aMax = { xStart + width, pos.y + blockHeight - 1.0f }; + + // Clip to block bounds + if (aMin.x < rectMin.x) + { + aMin.x = rectMin.x; + } + if (aMax.x > rectMax.x) + { + aMax.x = rectMax.x; + } + + ImU32 color = GetColorForAllocation(info->Tag, info->Offset, info->Size); + bool8 isSelected = (state->SelectedAlloc == info); + + if (isSelected) + { + ImDrawList_AddRectFilled(dl, aMin, aMax, IM_COL32_WHITE); + ImDrawList_AddRect(dl, aMin, aMax, IM_COL32_BLACK); + } + else + { + ImDrawList_AddRectFilled(dl, aMin, aMax, color); + } + + // Draw text label when zoomed enough + if (width > 20.0f && info->Tag != NULL) + { + const char* tagStr = info->Tag; + size_t tagLen = 0; + while (tagStr[tagLen] != '\0') + { + ++tagLen; + } + ImVec2_c textSize = ImGui_CalcTextSize(tagStr, tagStr + tagLen); + if (width >= textSize.x + 4.0f) + { + float textX = aMin.x + (width - textSize.x) * 0.5f; + float textY = aMin.y + (blockHeight - 2.0f - textSize.y) * 0.5f; + ImU32 textColor = IM_COL32_BLACK; + ImDrawList_AddText(dl, (ImVec2_c){ textX, textY }, textColor, tagStr, tagStr + tagLen); + } + } + + if (ImGui_IsMouseHoveringRect(aMin, aMax) && ImGui_IsWindowHovered()) + { + ImGui_BeginTooltip(); + ImGui_TextColored((ImVec4_c){ 1.0f, 0.8f, 0.3f, 1.0f }, "%s", info->Tag); + ImGui_Separator(); + ImGui_Text("Size: %zu bytes", info->Size); + ImGui_Text("Offset: %zu", info->Offset); + + // Hex data dump (first 16 bytes) + ImGui_Separator(); + const uint8* dataPtr = (const uint8*)blk + info->Offset; + ImGui_Text("Data: "); + for (int i = 0; i < 16 && i < (int)info->Size; ++i) + { + ImGui_SameLine(0.0f, -1.0f); + ImGui_Text("%02X", dataPtr[i]); + } + + ImGui_EndTooltip(); + + if (ImGui_IsMouseClicked(ImGuiMouseButton_Left)) + { + state->SelectedAlloc = info; + state->ScrollListToSelected = true; + state->ScrollVisualToSelected = false; + } + } + + info = info->Next; + ImGui_PopID(); + } + } + + pos.y += blockHeight + blockSpacing; + ImGui_PopID(); + } + } + ImGui_EndChild(); + + // --- Tree View (Allocations List) --- + ImGui_Separator(); + if (ImGui_TreeNode("Allocations List")) + { + // Calculate item count for dynamic height + int totalAllocCount = 0; + for (index_t blkIdx = 0; blkIdx < s_DebugBlocks.Size; ++blkIdx) + { + const Arena* blk = VectorArenaAt(const Arena*, &s_DebugBlocks, blkIdx); + totalAllocCount++; + ArenaDebugInfo* countInfo = blk->FirstDebugInfo; + while (countInfo != NULL) + { + totalAllocCount++; + countInfo = countInfo->Next; + } + } + + float lineHeight = ImGui_GetTextLineHeightWithSpacing(); + float currentNeededHeight = (float)totalAllocCount * lineHeight; + float maxHeight = lineHeight * 25.0f; + + float listHeight = currentNeededHeight; + if (listHeight > maxHeight) + { + listHeight = maxHeight; + } + if (listHeight < lineHeight) + { + listHeight = lineHeight; + } + + if (ImGui_BeginChild("AllocList", (ImVec2_c){ 0.0f, listHeight }, true, 0)) + { + for (index_t blkIdx = 0; blkIdx < s_DebugBlocks.Size; ++blkIdx) + { + const Arena* blk = VectorArenaAt(const Arena*, &s_DebugBlocks, blkIdx); + if (ImGui_TreeNodePtr((const void*)blk, "Page %d (%zu bytes, pos %zu)", + (int)blkIdx, blk->Reserved, blk->Position)) + { + ArenaDebugInfo* info = blk->FirstDebugInfo; + if (info == NULL) + { + ImGui_TextDisabled("No allocations"); + } + while (info != NULL) + { + bool8 isSelected = (state->SelectedAlloc == info); + + ImGuiTreeNodeFlags flags = ImGuiTreeNodeFlags_Leaf | ImGuiTreeNodeFlags_NoTreePushOnOpen; + if (isSelected) + { + flags |= ImGuiTreeNodeFlags_Selected; + } + + if (isSelected && state->ScrollListToSelected) + { + ImGui_SetScrollHereY(0.5f); + state->ScrollListToSelected = false; + } + + // Color Square + ImU32 color = GetColorForAllocation(info->Tag, info->Offset, info->Size); + ImGui_ColorButton("##color", color, + ImGuiColorEditFlags_NoTooltip | ImGuiColorEditFlags_NoDragDrop, + (ImVec2_c){ 12.0f, 12.0f }); + ImGui_SameLine(0.0f, -1.0f); + + ImGui_TreeNodeExPtr(info, flags, "[%zu] %s (%zu bytes)", info->Offset, info->Tag, info->Size); + + if (ImGui_IsItemClicked()) + { + state->SelectedAlloc = info; + state->ScrollVisualToSelected = true; + state->ScrollListToSelected = false; + } + + info = info->Next; + } + ImGui_TreePop(); + } + } + } + ImGui_EndChild(); + + ImGui_TreePop(); + } + } + ImGui_PopID(); +} + +void Debug_DebugDrawMemoryArena(void) +{ + if (ImGui_Begin("Memory Debugger", NULL, ImGuiWindowFlags_None)) + { + if (ImGui_BeginTabBar("ArenaTabs")) + { + if (ImGui_BeginTabItem("Paged Arenas")) + { + Arena* head = GetGlobalArenaListHead(); + if (head == NULL) + { + ImGui_Text("No active paged arenas."); + } + else + { + for (Arena* a = head; a != NULL; a = a->GlobalNext) + { + // Skip test and internal debug arenas + if (a->Name != NULL) + { + bool8 isTest = (a->Name[0] == 'T' && a->Name[1] == 'e' && a->Name[2] == 's' && a->Name[3] == 't'); + bool8 isDebugInfo = + (a->Name[0] == 'D' && a->Name[1] == 'e' && a->Name[2] == 'b' && a->Name[3] == 'u' && + a->Name[4] == 'g' && a->Name[5] == ' ' && a->Name[6] == 'I'); + if (isTest || isDebugInfo) + { + continue; + } + } + DrawPagedArena(a); + } + } + ImGui_EndTabItem(); + } + + ImGui_EndTabBar(); + } + } + ImGui_End(); +} + +#endif diff --git a/Juliet/src/Engine/Debug/MemoryDebugger.cpp b/Juliet/src/Engine/Debug/MemoryDebugger.cpp deleted file mode 100644 index 65e5e9f..0000000 --- a/Juliet/src/Engine/Debug/MemoryDebugger.cpp +++ /dev/null @@ -1,598 +0,0 @@ -#include - -#include -#include -#include -#include -#include - -#if JULIET_DEBUG - -Arena* GetGlobalArenaListHead(); - -namespace Debug -{ - namespace - { - struct ArenaDebugState - { - float Zoom = 1.0f; - ArenaAllocation* SelectedAlloc = nullptr; - bool ScrollVisualToSelected = false; - bool ScrollListToSelected = false; - }; - - struct PagedArenaDebugState - { - float Zoom = 1.0f; - ArenaDebugInfo* SelectedAlloc = nullptr; - bool ScrollVisualToSelected = false; - bool ScrollListToSelected = false; - }; - - struct PagedArenaStateEntry - { - const Arena* Arena; - PagedArenaDebugState State; - }; - - // Static Vector for lookup - VectorArena s_PagedArenaStates; - - PagedArenaDebugState& GetPagedArenaState(const Arena* arena) - { - if (s_PagedArenaStates.Arena == nullptr) - { - Arena* pagedArenaStates = ArenaAllocate({ .Name = "DebugState States" }); - s_PagedArenaStates.Create(pagedArenaStates); - } - - for (auto& entry : s_PagedArenaStates) - { - if (entry.Arena == arena) - { - return entry.State; - } - } - - PagedArenaStateEntry newEntry; - newEntry.Arena = arena; - // Default construct state - newEntry.State = PagedArenaDebugState(); - - s_PagedArenaStates.PushBack(newEntry); - return s_PagedArenaStates.Last()->State; - } - - // Generate a unique color per allocation, using tag + offset + size - // so entries with same tag name get distinct colors - uint32 GetColorForAllocation(const char* tag, size_t offset, size_t size) - { - uint32 hash = 2166136261u; - if (tag) - { - for (const char* s = tag; *s; ++s) - { - hash ^= static_cast(*s); - hash *= 16777619u; - } - } - // Mix in offset and size to differentiate same-tag entries - hash ^= static_cast(offset); - hash *= 16777619u; - hash ^= static_cast(size); - hash *= 16777619u; - - float h = static_cast(hash % 360) / 360.0f; - float s = 0.5f + static_cast((hash >> 12) % 30) / 100.0f; - float v = 0.65f + static_cast((hash >> 20) % 25) / 100.0f; - return ImColor::HSV(h, s, v); - } - - void DrawPagedArena(const Arena* arena) - { - ImGui::PushID(arena); - const char* name = (arena->Name && arena->Name[0] != '\0') ? arena->Name : "Unnamed Arena"; - PagedArenaDebugState& state = GetPagedArenaState(arena); - - if (ImGui::CollapsingHeader(name)) - { - // Collect Blocks (Pages) in order (Oldest -> Newest) - // Arena->Previous chain goes Newest -> Oldest. - static VectorArena blocks; - if (blocks.Arena == nullptr) - { - Arena* pagedArenaStates = ArenaAllocate({ .Name = "DebugState Blocks" }); - blocks.Create(pagedArenaStates); - } - blocks.Clear(); - - for (const Arena* curr = arena->Current; curr != nullptr; curr = curr->Previous) - { - blocks.PushBack(curr); - } - - // Reverse manually - size_t count = blocks.Count; - for (size_t i = 0; i < count / 2; ++i) - { - const Arena* temp = blocks[i]; - blocks[i] = blocks[count - 1 - i]; - blocks[count - 1 - i] = temp; - } - - // Calculate Stats - size_t totalCapacity = 0; - size_t totalUsed = 0; - - for (const Arena* blk : blocks) - { - totalCapacity += blk->Reserved; - totalUsed += blk->Position; - } - - ImGui::Text("Used: %zu / %zu bytes (%zu pages)", totalUsed, totalCapacity, blocks.Size()); - ImGui::SliderFloat("Zoom", &state.Zoom, 0.1f, 1000000.0f, "%.2f", ImGuiSliderFlags_Logarithmic); - - // --- Visual View --- - ImGui::Separator(); - ImGui::Text("Visual Map"); - - float blockHeight = 24.0f; - float blockSpacing = 4.0f; - float requiredVisHeight = static_cast(blocks.Size()) * (blockHeight + blockSpacing) + 30.0f; - // constrains - if (requiredVisHeight > 300.0f) - { - requiredVisHeight = 300.0f; - } - if (requiredVisHeight < 50.0f) - { - requiredVisHeight = 50.0f; - } - - if (ImGui::BeginChild("VisualMap", ImVec2(0, requiredVisHeight), true, - ImGuiWindowFlags_HorizontalScrollbar | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoScrollbar)) - { - ImGui::SetScrollY(0.0f); - - ImDrawList* dl = ImGui::GetWindowDrawList(); - float availWidth = ImGui::GetContentRegionAvail().x; - ImVec2 startPos = ImGui::GetCursorScreenPos(); - - float virtualWidth = availWidth * state.Zoom; - if (virtualWidth < availWidth) - { - virtualWidth = availWidth; - } - ImGui::Dummy(ImVec2(virtualWidth, requiredVisHeight + 1.0f)); - - bool isMapHovered = ImGui::IsWindowHovered(); - - // Zoom with pivot - if (isMapHovered) - { - float wheel = ImGui::GetIO().MouseWheel; - if (wheel != 0.0f) - { - float mouseXScreen = ImGui::GetMousePos().x; - float activeScrollX = ImGui::GetScrollX(); - float viewportLeft = ImGui::GetWindowPos().x; - float mouseRelViewport = mouseXScreen - viewportLeft; - - float virtualWidthOld = std::max(availWidth * state.Zoom, availWidth); - float mouseContentPos = activeScrollX + mouseRelViewport; - float ratio = mouseContentPos / virtualWidthOld; - - state.Zoom += wheel * 0.2f * state.Zoom; - state.Zoom = std::max(state.Zoom, 0.1f); - state.Zoom = std::min(state.Zoom, 1000000.0f); - - float virtualWidthNew = std::max(availWidth * state.Zoom, availWidth); - float desiredScrollX = (ratio * virtualWidthNew) - mouseRelViewport; - ImGui::SetScrollX(desiredScrollX); - } - } - - // Pan - if (isMapHovered && (ImGui::IsMouseDragging(ImGuiMouseButton_Left) || ImGui::IsMouseDragging(ImGuiMouseButton_Right) || - ImGui::IsMouseDragging(ImGuiMouseButton_Middle))) - { - ImGui::SetScrollX(ImGui::GetScrollX() - ImGui::GetIO().MouseDelta.x); - } - - // Jump to Selected (Sync from List) - if (state.ScrollVisualToSelected && state.SelectedAlloc) - { - for (const Arena* searchBlk : blocks) - { - ArenaDebugInfo* search = searchBlk->FirstDebugInfo; - bool found = false; - while (search) - { - if (search == state.SelectedAlloc) - { - found = true; - break; - } - search = search->Next; - } - - if (found) - { - float virtualWidthLocal = std::max(availWidth * state.Zoom, availWidth); - if (searchBlk->Reserved > 0) - { - double scale = - static_cast(virtualWidthLocal) / static_cast(searchBlk->Reserved); - float xStart = static_cast(static_cast(state.SelectedAlloc->Offset) * scale); - float centerOffset = availWidth * 0.5f; - ImGui::SetScrollX(xStart - centerOffset); - } - state.ScrollVisualToSelected = false; - break; - } - } - } - - ImVec2 pos = startPos; - for (const Arena* blk : blocks) - { - ImGui::PushID(blk); - ImVec2 rectMin = pos; - ImVec2 rectMax = ImVec2(pos.x + virtualWidth, pos.y + blockHeight); - - dl->AddRect(rectMin, rectMax, IM_COL32(100, 100, 100, 255)); - - size_t dataSize = blk->Reserved - k_ArenaHeaderSize; - if (dataSize > 0) - { - double scale = static_cast(virtualWidth) / static_cast(blk->Reserved); - - // Draw Arena Header - { - float hdrWidth = static_cast(static_cast(k_ArenaHeaderSize) * scale); - hdrWidth = std::max(hdrWidth, 1.0f); - ImVec2 hMin(pos.x, pos.y + 1); - ImVec2 hMax(pos.x + hdrWidth, pos.y + blockHeight - 1); - dl->AddRectFilled(hMin, hMax, IM_COL32(40, 60, 120, 255)); - - if (hdrWidth > 30.0f) - { - const char* hdrLabel = "Header"; - ImVec2 textSize = ImGui::CalcTextSize(hdrLabel); - if (hdrWidth >= textSize.x + 4.0f) - { - float textX = hMin.x + (hdrWidth - textSize.x) * 0.5f; - float textY = hMin.y + (blockHeight - 2.0f - textSize.y) * 0.5f; - dl->AddText(ImVec2(textX, textY), IM_COL32(180, 200, 255, 255), hdrLabel); - } - } - - if (ImGui::IsMouseHoveringRect(hMin, hMax) && ImGui::IsWindowHovered()) - { - ImGui::BeginTooltip(); - ImGui::TextColored(ImVec4(0.5f, 0.6f, 0.9f, 1.0f), "Arena Header"); - ImGui::Separator(); - ImGui::Text("Size: %zu bytes", k_ArenaHeaderSize); - ImGui::EndTooltip(); - } - } - - // Draw Allocations - ArenaDebugInfo* info = blk->FirstDebugInfo; - size_t expectedOffset = k_ArenaHeaderSize; - while (info) - { - // Draw alignment padding gap if present (only for small gaps that are actual alignment) - if (info->Offset > expectedOffset) - { - size_t padSize = info->Offset - expectedOffset; - constexpr size_t k_MaxAlignmentPadding = 256; - float padXStart = pos.x + static_cast(static_cast(expectedOffset) * scale); - float padWidth = static_cast(static_cast(padSize) * scale); - - if (padSize <= k_MaxAlignmentPadding && padWidth >= 1.0f) - { - ImVec2 pMin(padXStart, pos.y + 1); - ImVec2 pMax(padXStart + padWidth, pos.y + blockHeight - 1); - - // Clip - if (pMin.x < rectMin.x) - { - pMin.x = rectMin.x; - } - if (pMax.x > rectMax.x) - { - pMax.x = rectMax.x; - } - - // Draw hatched pattern (diagonal lines) - clipped to visible area - float visLeft = ImGui::GetWindowPos().x; - float visRight = visLeft + ImGui::GetWindowSize().x; - float clippedLeft = std::max(pMin.x, visLeft); - float clippedRight = std::min(pMax.x, visRight); - - dl->AddRectFilled(pMin, pMax, IM_COL32(30, 30, 30, 200)); - if (clippedLeft < clippedRight) - { - float step = 6.0f; - float startX = clippedLeft - (pMax.y - pMin.y); - startX = pMin.x + step * std::floor((startX - pMin.x) / step); - if (startX < pMin.x) - { - startX = pMin.x; - } - - int lineCount = 0; - for (float lx = startX; lx < clippedRight && lineCount < 500; lx += step, ++lineCount) - { - float ly0 = pMin.y; - float lx1 = lx + (pMax.y - pMin.y); - float ly1 = pMax.y; - if (lx1 > pMax.x) - { - ly1 = pMin.y + (pMax.x - lx); - lx1 = pMax.x; - } - dl->AddLine(ImVec2(lx, ly0), ImVec2(lx1, ly1), IM_COL32(80, 80, 80, 180)); - } - } - - // Label when zoomed - if (padWidth > 30.0f) - { - const char* padLabel = "Pad"; - ImVec2 textSize = ImGui::CalcTextSize(padLabel); - if (padWidth >= textSize.x + 4.0f) - { - float textX = pMin.x + (padWidth - textSize.x) * 0.5f; - float textY = pMin.y + (blockHeight - 2.0f - textSize.y) * 0.5f; - dl->AddText(ImVec2(textX, textY), IM_COL32(120, 120, 120, 255), padLabel); - } - } - - if (ImGui::IsMouseHoveringRect(pMin, pMax) && ImGui::IsWindowHovered()) - { - ImGui::BeginTooltip(); - ImGui::TextColored(ImVec4(0.6f, 0.6f, 0.6f, 1.0f), "Alignment Padding"); - ImGui::Separator(); - ImGui::Text("Size: %zu bytes", padSize); - ImGui::Text("Offset: %zu - %zu", expectedOffset, info->Offset); - ImGui::EndTooltip(); - } - } - } - expectedOffset = info->Offset + info->Size; - - ImGui::PushID(info); - float xStart = pos.x + static_cast(static_cast(info->Offset) * scale); - float width = static_cast(static_cast(info->Size) * scale); - width = std::max(width, 1.0f); - - ImVec2 aMin(xStart, pos.y + 1); - ImVec2 aMax(xStart + width, pos.y + blockHeight - 1); - - // Clip to block bounds - if (aMin.x < rectMin.x) - { - aMin.x = rectMin.x; - } - if (aMax.x > rectMax.x) - { - aMax.x = rectMax.x; - } - - ImU32 color = GetColorForAllocation(info->Tag, info->Offset, info->Size); - bool isSelected = (state.SelectedAlloc == info); - - if (isSelected) - { - dl->AddRectFilled(aMin, aMax, IM_COL32_WHITE); - dl->AddRect(aMin, aMax, IM_COL32_BLACK); - } - else - { - dl->AddRectFilled(aMin, aMax, color); - } - - // Draw text label when zoomed enough - if (width > 20.0f && info->Tag) - { - const char* tagStr = info->Tag; - size_t tagLen = 0; - while (tagStr[tagLen] != '\0') - { - ++tagLen; - } - ImVec2 textSize = ImGui::CalcTextSize(tagStr, tagStr + tagLen); - if (width >= textSize.x + 4.0f) - { - float textX = aMin.x + (width - textSize.x) * 0.5f; - float textY = aMin.y + (blockHeight - 2.0f - textSize.y) * 0.5f; - ImU32 textColor = IM_COL32_BLACK; - dl->AddText(ImVec2(textX, textY), textColor, tagStr, tagStr + tagLen); - } - } - - if (ImGui::IsMouseHoveringRect(aMin, aMax) && ImGui::IsWindowHovered()) - { - ImGui::BeginTooltip(); - ImGui::TextColored(ImVec4(1.0f, 0.8f, 0.3f, 1.0f), "%s", info->Tag); - ImGui::Separator(); - ImGui::Text("Size: %zu bytes", info->Size); - ImGui::Text("Offset: %zu", info->Offset); - - // Hex data dump (first 16 bytes) - ImGui::Separator(); - uint8* dataPtr = reinterpret_cast(const_cast(blk)) + info->Offset; - ImGui::Text("Data: "); - for (int i = 0; i < 16 && i < static_cast(info->Size); ++i) - { - ImGui::SameLine(); - ImGui::Text("%02X", dataPtr[i]); - } - - ImGui::EndTooltip(); - - if (ImGui::IsMouseClicked(ImGuiMouseButton_Left)) - { - state.SelectedAlloc = info; - state.ScrollListToSelected = true; - state.ScrollVisualToSelected = false; - } - } - - info = info->Next; - ImGui::PopID(); - } - } - - pos.y += blockHeight + blockSpacing; - ImGui::PopID(); - } - } - ImGui::EndChild(); - - // --- Tree View (Allocations List) --- - ImGui::Separator(); - if (ImGui::TreeNode("Allocations List")) - { - // Calculate item count for dynamic height - int totalAllocCount = 0; - for (const Arena* blk : blocks) - { - totalAllocCount++; - ArenaDebugInfo* countInfo = blk->FirstDebugInfo; - while (countInfo) - { - totalAllocCount++; - countInfo = countInfo->Next; - } - } - - float lineHeight = ImGui::GetTextLineHeightWithSpacing(); - float currentNeededHeight = static_cast(totalAllocCount) * lineHeight; - float maxHeight = lineHeight * 25.0f; - - float listHeight = currentNeededHeight; - if (listHeight > maxHeight) - { - listHeight = maxHeight; - } - if (listHeight < lineHeight) - { - listHeight = lineHeight; - } - - if (ImGui::BeginChild("AllocList", ImVec2(0, listHeight), true)) - { - int blkIdx = 0; - for (const Arena* blk : blocks) - { - if (ImGui::TreeNode(reinterpret_cast(blk), "Page %d (%zu bytes, pos %zu)", - blkIdx, blk->Reserved, blk->Position)) - { - ArenaDebugInfo* info = blk->FirstDebugInfo; - if (!info) - { - ImGui::TextDisabled("No allocations"); - } - while (info) - { - bool isSelected = (state.SelectedAlloc == info); - - ImGuiTreeNodeFlags flags = ImGuiTreeNodeFlags_Leaf | ImGuiTreeNodeFlags_NoTreePushOnOpen; - if (isSelected) - { - flags |= ImGuiTreeNodeFlags_Selected; - } - - if (isSelected && state.ScrollListToSelected) - { - ImGui::SetScrollHereY(); - state.ScrollListToSelected = false; - } - - // Color Square - ImU32 color = GetColorForAllocation(info->Tag, info->Offset, info->Size); - ImGui::ColorButton("##color", ImColor(color), - ImGuiColorEditFlags_NoTooltip | ImGuiColorEditFlags_NoDragDrop, - ImVec2(12, 12)); - ImGui::SameLine(); - - ImGui::TreeNodeEx(info, flags, "[%zu] %s (%zu bytes)", info->Offset, info->Tag, info->Size); - - if (ImGui::IsItemClicked()) - { - state.SelectedAlloc = info; - state.ScrollVisualToSelected = true; - state.ScrollListToSelected = false; - } - - info = info->Next; - } - ImGui::TreePop(); - } - blkIdx++; - } - } - ImGui::EndChild(); - - ImGui::TreePop(); - } - } - ImGui::PopID(); - } - - ArenaAllocation* s_ConfirmedHovered = nullptr; - } // namespace - - void DebugDrawMemoryArena() - { - // Cross-frame hover state - ArenaAllocation* frameHovered = nullptr; - - if (ImGui::Begin("Memory Debugger")) - { - if (ImGui::BeginTabBar("ArenaTabs")) - { - if (ImGui::BeginTabItem("Paged Arenas")) - { - Arena* head = GetGlobalArenaListHead(); - if (!head) - { - ImGui::Text("No active paged arenas."); - } - else - { - for (Arena* a = head; a != nullptr; a = a->GlobalNext) - { - // Skip test and internal debug arenas - if (a->Name) - { - bool isTest = (a->Name[0] == 'T' && a->Name[1] == 'e' && a->Name[2] == 's' && a->Name[3] == 't'); - bool isDebugInfo = - (a->Name[0] == 'D' && a->Name[1] == 'e' && a->Name[2] == 'b' && a->Name[3] == 'u' && - a->Name[4] == 'g' && a->Name[5] == ' ' && a->Name[6] == 'I'); - if (isTest || isDebugInfo) - { - continue; - } - } - DrawPagedArena(a); - } - } - ImGui::EndTabItem(); - } - - ImGui::EndTabBar(); - } - } - ImGui::End(); - - s_ConfirmedHovered = frameHovered; - } -} // namespace Debug - -#endif diff --git a/Juliet/src/Engine/Engine.c b/Juliet/src/Engine/Engine.c new file mode 100644 index 0000000..1a10641 --- /dev/null +++ b/Juliet/src/Engine/Engine.c @@ -0,0 +1,227 @@ +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef JULIET_ENABLE_IMGUI +#include +#include +#include +#endif + +#if JULIET_DEBUG +extern void UnitTest_RunUnitTests(void); +#endif + +global Engine g_EngineInstance = { 0 }; + +// Initialize systems that depend on graphics/window (after App::Init) +internal void InitializeDependentSystems(void) +{ + GraphicsDevice* device = g_EngineInstance.Application.GetGraphicsDevice(); + + if (device != NULL) + { + DebugDisplay_Initialize(g_EngineInstance.PlatformArena, device); + Window* window = g_EngineInstance.Application.GetPlatformWindow(); + if (window != NULL) + { + bool8 success = InitializeMeshRendererGraphics(device, window); + Assert(success); + (void)success; + + success = InitializeSkyboxRenderer(device, window); + Assert(success); + (void)success; + } + } + +#ifdef JULIET_ENABLE_IMGUI + Window* window = g_EngineInstance.Application.GetPlatformWindow(); + if (window != NULL) + { + ImGuiService_Initialize(window); + ImGui_SetCurrentContext(ImGuiService_GetContext()); + + if (device != NULL) + { + ImGuiRenderer_Initialize(device); + + // Run Unit Tests automatically + ImGuiService_RunTests(); + } + } +#endif +} + +// Shutdown systems that were initialized in InitializeDependentSystems +internal void ShutdownDependentSystems(void) +{ + GraphicsDevice* device = g_EngineInstance.Application.GetGraphicsDevice(); + +#ifdef JULIET_ENABLE_IMGUI + if (device != NULL) + { + ImGuiRenderer_Shutdown(device); + } + ImGuiService_Shutdown(); +#endif + + // DebugDisplay system + if (device != NULL) + { + DebugDisplay_Shutdown(device); + ShutdownSkyboxRenderer(); + ShutdownMeshRendererGraphics(); + } +} + +// Render one frame +internal void RenderFrame(void) +{ + GraphicsDevice* device = g_EngineInstance.Application.GetGraphicsDevice(); + Window* window = g_EngineInstance.Application.GetPlatformWindow(); + + if (device != NULL && window != NULL) + { + CommandList* cmdList = AcquireCommandList(device, QueueType_Graphics); + if (cmdList != NULL) + { + Texture* swapChainTexture = NULL; + if (WaitAndAcquireSwapChainTexture(cmdList, window, &swapChainTexture)) + { + if (swapChainTexture != NULL) + { + // Prepare debug display data (before render pass) + DebugDisplay_Prepare(cmdList); + + // Get render targets from application + ColorTargetInfo colorInfo = g_EngineInstance.Application.GetColorTargetInfo(swapChainTexture); + DepthStencilTargetInfo* depthInfo = g_EngineInstance.Application.GetDepthTargetInfo(); + + RenderPass* pass = BeginRenderPass(cmdList, &colorInfo, depthInfo); + + Camera camera = *GetCurrentCamera(); + Matrix viewProjectionMat = Camera_GetViewProjectionMatrix(&camera); + + RenderSkybox(cmdList, pass, &viewProjectionMat); + RenderMeshes(cmdList, pass, &viewProjectionMat); + + // Debug display flush must happen after game rendering + DebugDisplay_Flush(cmdList, pass, &camera); + +#ifdef JULIET_ENABLE_IMGUI + // ImGui rendering (always last before EndRenderPass) + ImGuiRenderer_Render(cmdList, pass); +#endif + + EndRenderPass(pass); + } + } + + SubmitCommandLists(cmdList); + } + } +} + +void StartApplication(ApplicationCallbacks app, JulietInit_Flags flags) +{ + InitializeEngine(flags); + LoadApplication(app); + RunEngine(); + UnloadApplication(); + ShutdownEngine(); +} + +void InitializeEngine(JulietInit_Flags flags) +{ + g_EngineInstance.PlatformArena = ArenaAllocate((ArenaParams){ .ReserveSize = Megabytes(128), .Name = "Platform Arena" }); + g_EngineInstance.AssetArena = ArenaAllocate((ArenaParams){ .ReserveSize = Megabytes(256), .Name = "Asset Arena" }); + + InitializeLogManager(); + + InitFilesystem(g_EngineInstance.PlatformArena); + +#if JULIET_DEBUG + UnitTest_RunUnitTests(); +#endif + + initialize_user_system(); + + JulietInit(flags); +} + +void ShutdownEngine(void) +{ + JulietShutdown(); + + ShutdownFilesystem(); + ShutdownLogManager(); + + ArenaRelease(g_EngineInstance.AssetArena); + ArenaRelease(g_EngineInstance.PlatformArena); +} + +void LoadApplication(ApplicationCallbacks app) +{ + g_EngineInstance.Application = app; + + InitializeMeshRenderer(g_EngineInstance.AssetArena, g_EngineInstance.PlatformArena); + + g_EngineInstance.Application.Init(g_EngineInstance.PlatformArena); + + // Systems depending on Window/GraphicsDevice + InitializeDependentSystems(); +} + +void UnloadApplication(void) +{ + // Shutdown dependent systems before app shutdown + ShutdownDependentSystems(); + + g_EngineInstance.Application.Shutdown(); + + ShutdownMeshRenderer(); + + g_EngineInstance.Application = (ApplicationCallbacks){ 0 }; +} + +void RunEngine(void) +{ + while (g_EngineInstance.Application.IsRunning()) + { +#ifdef JULIET_ENABLE_IMGUI + ImGuiRenderer_NewFrame(); +#endif + + Time_ComputeDeltaTime(); + + const float deltaTime = Time_GetDeltaTime(); + + Events_NewFrame(deltaTime); + + // Logic tick + g_EngineInstance.Application.Update(deltaTime); + + // Render tick + RenderFrame(); + } +} + +Arena* GetPlatformArena(void) +{ + Assert(g_EngineInstance.PlatformArena != NULL); + return g_EngineInstance.PlatformArena; +} diff --git a/Juliet/src/Engine/Engine.cpp b/Juliet/src/Engine/Engine.cpp deleted file mode 100644 index e82dfc7..0000000 --- a/Juliet/src/Engine/Engine.cpp +++ /dev/null @@ -1,229 +0,0 @@ -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef JULIET_ENABLE_IMGUI -#include -#include -#include -#endif - -#if JULIET_DEBUG -namespace UnitTest -{ - extern void RunUnitTests(); -} -#endif - -namespace -{ - Engine EngineInstance; - - // Initialize systems that depend on graphics/window (after App::Init) - void InitializeDependentSystems() - { - GraphicsDevice* device = EngineInstance.Application->GetGraphicsDevice(); - - if (device) - { - DebugDisplay_Initialize(EngineInstance.PlatformArena, device); - if (Window* window = EngineInstance.Application->GetPlatformWindow()) - { - bool success = InitializeMeshRendererGraphics(device, window); - Assert(success); - (void)(success); - - success = InitializeSkyboxRenderer(device, window); - Assert(success); - (void)(success); - } - } - -#ifdef JULIET_ENABLE_IMGUI - if (NonNullPtr window = EngineInstance.Application->GetPlatformWindow()) - { - ImGuiService::Initialize(window); - ImGui::SetCurrentContext(ImGuiService::GetContext()); - - if (device) - { - ImGuiRenderer_Initialize(device); - - // Run Unit Tests automatically - ImGuiService::RunTests(); - } - } -#endif - } - - // Shutdown systems that were initialized in InitializeDependentSystems - void ShutdownDependentSystems() - { - GraphicsDevice* device = EngineInstance.Application->GetGraphicsDevice(); - -#ifdef JULIET_ENABLE_IMGUI - if (device) - { - ImGuiRenderer_Shutdown(device); - } - ImGuiService::Shutdown(); -#endif - - // DebugDisplay system - if (device) - { - DebugDisplay_Shutdown(device); - ShutdownSkyboxRenderer(); - ShutdownMeshRendererGraphics(); - } - } - - // Render one frame - void RenderFrame() - { - GraphicsDevice* device = EngineInstance.Application->GetGraphicsDevice(); - Window* window = EngineInstance.Application->GetPlatformWindow(); - - if (!device || !window) - { - return; - } - - CommandList* cmdList = AcquireCommandList(device, QueueType::Graphics); - if (!cmdList) - { - return; - } - - Texture* swapChainTexture = nullptr; - if (!WaitAndAcquireSwapChainTexture(cmdList, window, &swapChainTexture)) - { - // Swapchain might need resize, submit empty and try again next frame - SubmitCommandLists(cmdList); - return; - } - - if (swapChainTexture) - { - // Prepare debug display data (before render pass) - DebugDisplay_Prepare(cmdList); - - // Get render targets from application - ColorTargetInfo colorInfo = EngineInstance.Application->GetColorTargetInfo(swapChainTexture); - DepthStencilTargetInfo* depthInfo = EngineInstance.Application->GetDepthTargetInfo(); - - RenderPass* pass = BeginRenderPass(cmdList, colorInfo, depthInfo); - - Camera camera = *GetCurrentCamera(); - Matrix viewProjectionMat = Camera_GetViewProjectionMatrix(camera); - - RenderSkybox(cmdList, pass, viewProjectionMat); - RenderMeshes(cmdList, pass, viewProjectionMat); - - // Debug display flush must happen after game rendering - DebugDisplay_Flush(cmdList, pass, camera); - -#ifdef JULIET_ENABLE_IMGUI - // ImGui rendering (always last before EndRenderPass) - ImGuiRenderer_Render(cmdList, pass); -#endif - - EndRenderPass(pass); - } - - SubmitCommandLists(cmdList); - } -} // namespace - -void InitializeEngine(JulietInit_Flags flags) -{ - EngineInstance.PlatformArena = ArenaAllocate({ .ReserveSize = Megabytes(128), .Name = "Platform Arena" }); - EngineInstance.AssetArena = ArenaAllocate({ .ReserveSize = Megabytes(256), .Name = "Asset Arena" }); - - InitializeLogManager(); - - InitFilesystem(EngineInstance.PlatformArena); - -#if JULIET_DEBUG - UnitTest::RunUnitTests(); -#endif - - initialize_user_system(); - - JulietInit(flags); -} - -void ShutdownEngine() -{ - JulietShutdown(); - - ShutdownFilesystem(); - ShutdownLogManager(); - - ArenaRelease(EngineInstance.AssetArena); - ArenaRelease(EngineInstance.PlatformArena); -} - -void LoadApplication(IApplication& app) -{ - EngineInstance.Application = &app; - - InitializeMeshRenderer(EngineInstance.AssetArena, EngineInstance.PlatformArena); - - EngineInstance.Application->Init(EngineInstance.PlatformArena); - - // Systems depending on Window/GraphicsDevice - InitializeDependentSystems(); -} - -void UnloadApplication() -{ - // Shutdown dependent systems before app shutdown - ShutdownDependentSystems(); - - EngineInstance.Application->Shutdown(); - - ShutdownMeshRenderer(); - - EngineInstance.Application = nullptr; -} - -void RunEngine() -{ - while (EngineInstance.Application->IsRunning()) - { -#ifdef JULIET_ENABLE_IMGUI - ImGuiRenderer_NewFrame(); -#endif - - Time::ComputeDeltaTime(); - - const float deltaTime = Time::GetDeltaTime(); - - Events_NewFrame(deltaTime); - - // Logic tick - EngineInstance.Application->Update(deltaTime); - - // Render tick - RenderFrame(); - } -} - -Arena* GetPlatformArena() -{ - NonNullPtr arena = EngineInstance.PlatformArena; - return arena.Get(); -} diff --git a/Juliet/src/Engine/class.c b/Juliet/src/Engine/class.c new file mode 100644 index 0000000..0497ffc --- /dev/null +++ b/Juliet/src/Engine/class.c @@ -0,0 +1,40 @@ +#include +#include + +bool8 IsA(const Class* query, const Class* target) +{ + bool8 result = false; + const Class* current = query; + while (current != NULL) + { + if (current == target) + { + result = true; + break; + } + current = current->base_class; + } + return result; +} + +void serialize_class(Archive* ar, const Class* cls, void* instance) +{ + Assert(ar != NULL); + Assert(cls != NULL); + Assert(instance != NULL); + + uint16 version = cls->version; + if (cls->base_class != NULL) + { + serialize_u16(ar, ConstString("class_version"), &version); + } + else + { + serialize_u16(ar, ConstString("version"), &version); + } + + if (cls->serialize_fct != NULL) + { + cls->serialize_fct(ar, version, instance); + } +} diff --git a/Juliet/src/Engine/class.cpp b/Juliet/src/Engine/class.cpp deleted file mode 100644 index ba09268..0000000 --- a/Juliet/src/Engine/class.cpp +++ /dev/null @@ -1,38 +0,0 @@ -#include -#include - -bool IsA(const Class& query, const Class* target) -{ - bool result = false; - const Class* current = &query; - while (current != nullptr) - { - if (current == target) - { - result = true; - break; - } - current = current->base_class; - } - return result; -} - -void serialize(Archive& ar, NonNullPtr cls, void* instance) -{ - Assert(instance != nullptr); - - uint16 version = cls->version; - if (cls->base_class) - { - serialize(ar, ConstString("class_version"), "class_version"_crc32, version); - } - else - { - serialize(ar, ConstString("version"), "version"_crc32, version); - } - - if (cls->serialize_fct) - { - cls->serialize_fct(ar, version, instance); - } -} diff --git a/Juliet/src/Engine/user.cpp b/Juliet/src/Engine/user.c similarity index 54% rename from Juliet/src/Engine/user.cpp rename to Juliet/src/Engine/user.c index 37f1ae3..23fcd9d 100644 --- a/Juliet/src/Engine/user.cpp +++ b/Juliet/src/Engine/user.c @@ -8,20 +8,17 @@ #include #include -namespace -{ - UserID local_user_id = 0U; -} +global UserID g_local_user_id = 0U; -void initialize_user_system() +void initialize_user_system(void) { // Project needs a user.ini file with all users // When starting if none exists -> create it // User name is basically found in a env variable, if not, the local windows user will be used. - TempArena temp = scratch_begin(nullptr, 0); + TempArena temp = scratch_begin(NULL, 0); - Path user_system_path = GetAssetPath(temp.Arena, AssetType::Config, ConstString("users.ini")); - const bool file_exists = fs_path_exists(user_system_path.FullPath); + Path user_system_path = GetAssetPath(temp.Arena, AssetType_Config, ConstString("users.ini")); + const bool8 file_exists = fs_path_exists(user_system_path.FullPath); String username = os_get_username(temp.Arena); @@ -29,44 +26,44 @@ void initialize_user_system() { fs_create_directory(user_system_path.Directories, true); - Assert(fs_path_exists(user_system_path.Directories), "Couldn't create config folder"); + Assert(fs_path_exists(user_system_path.Directories) && "Couldn't create config folder"); IOStream* stream = IOFromFile(temp.Arena, user_system_path.FullPath, ConstString("w+")); Archive ar = { .arena = temp.Arena, .loading = false, .stream = stream }; UserID id = 1; - serialize(ar, username, crc32(username), id); - local_user_id = id; + serialize_u8(&ar, username, &id); + g_local_user_id = id; IOClose(stream); } else { - NonNullPtr stream = IOFromFile(temp.Arena, user_system_path.FullPath, ConstString("r+")); - size_t file_size = IOSize(stream); + IOStream* stream = IOFromFile(temp.Arena, user_system_path.FullPath, ConstString("r+")); + Assert(stream != NULL); + size_t file_size = (size_t)IOSize(stream); if (file_size == 0) { Archive ar = { .arena = temp.Arena, .loading = false, .stream = stream }; UserID id = 1; - serialize(ar, username, crc32(username), id); - local_user_id = id; + serialize_u8(&ar, username, &id); + g_local_user_id = id; } else { Byte* content = (Byte*)ArenaPushSize(temp.Arena, file_size, 8, true JULIET_DEBUG_PARAM("File Content")); IORead(stream, content, file_size); - ByteBuffer user_file = { content, file_size }; + ByteBuffer user_file = { .Data = content, .Size = file_size }; ParsedArchive parsed_archive = tokenize_archive(temp.Arena, user_file); - if (ArchivePropertyNode* prop = find_property(&parsed_archive, crc32(username))) + ArchivePropertyNode* prop = find_property(&parsed_archive, crc32_str(username)); + if (prop != NULL) { - Archive ar = { .arena = temp.Arena, .loading = true, .base = parsed_archive }; - // User exists lets read - read_prop(ar, prop->value, local_user_id); - Assert(local_user_id != 0); + read_u8(CStr(prop->value), &g_local_user_id); + Assert(g_local_user_id != 0); } else { @@ -74,17 +71,18 @@ void initialize_user_system() Archive ar = { .arena = temp.Arena, .loading = false, .stream = stream }; // Read all users and take biggest id + 1 - uint8 biggest_id = 0; - auto* nodes = parsed_archive.nodes; + uint8 biggest_id = 0; + ArchivePropertyNode* nodes = parsed_archive.nodes; for (index_t idx = 0; idx < parsed_archive.property_count; ++idx) { uint8 id = 0; - read_prop(ar, nodes[idx].value, id); - biggest_id = Max(biggest_id, id + 1); + read_u8(CStr(nodes[idx].value), &id); + uint8 next_id = (uint8)(id + 1); + biggest_id = Max(biggest_id, next_id); } - serialize(ar, username, crc32(username), biggest_id); - local_user_id = biggest_id; + serialize_u8(&ar, username, &biggest_id); + g_local_user_id = biggest_id; } } @@ -94,9 +92,11 @@ void initialize_user_system() scratch_end(temp); } -void shutdown_user_system() {} - -uint8 get_local_user_id() +void shutdown_user_system(void) { - return local_user_id; +} + +uint8 get_local_user_id(void) +{ + return g_local_user_id; } diff --git a/Juliet/src/Graphics/Camera.c b/Juliet/src/Graphics/Camera.c new file mode 100644 index 0000000..efb2e10 --- /dev/null +++ b/Juliet/src/Graphics/Camera.c @@ -0,0 +1,62 @@ +#include + +#include +#include +#include + +global Camera g_DefaultCameraTemplate = { + .Index = 0, + .Position = { .x = 25.0f, .y = 0.0f, .z = 12.5f }, + .Target = { .x = 1.0f, .y = 0.0f, .z = 0.0f }, + .Up = { .x = 0.0f, .y = 0.0f, .z = 1.0f }, + .FOV = 1.047f, + .AspectRatio = 1200.0f / 800.0f, + .NearPlane = 0.1f, + .FarPlane = 1000.0f, +}; + +global size_t g_CameraAmount = 0; +global Camera* g_CameraArray = NULL; +global Camera* g_CurrentCamera = NULL; + +void ReserveCamera(size_t amount) +{ + Assert(g_CameraAmount == 0); + Assert(amount > 0); + + g_CameraAmount = amount; + + g_CameraArray = ArenaPushArrayTag(GetPlatformArena(), Camera, g_CameraAmount, "Camera Array"); + + for (index_t index = 0; index < g_CameraAmount; ++index) + { + Camera* cam = g_CameraArray + index; + *cam = g_DefaultCameraTemplate; + cam->Index = index; + } + + g_CurrentCamera = &g_CameraArray[0]; +} + +Camera* GetCurrentCamera(void) +{ + if (g_CameraAmount == 0) + { + ReserveCamera(1); + } + + Assert(g_CurrentCamera != NULL); + return g_CurrentCamera; +} + +void SetCurrentCamera(index_t index) +{ + if (g_CameraAmount == 0) + { + ReserveCamera(1); + } + + Assert(index <= g_CameraAmount); + + g_CurrentCamera = g_CameraArray + index; +} diff --git a/Juliet/src/Graphics/Camera.cpp b/Juliet/src/Graphics/Camera.cpp deleted file mode 100644 index 9a30b63..0000000 --- a/Juliet/src/Graphics/Camera.cpp +++ /dev/null @@ -1,69 +0,0 @@ -#pragma once - -#include - -#include -#include -#include -#include - -namespace -{ - - Camera kDefaultCameraTemplate = { - .Index = 0, - .Position = { 25.0f, 0.0f, 12.5f }, - .Target = { cosf(0.f) * cosf(0.f), sinf(0.f) * cosf(0.f), sinf(0.f) }, - .Up = { 0.0f, 0.0f, 1.0f }, - .FOV = 1.047f, - .AspectRatio = 1200.0f / 800.0f, - .NearPlane = 0.1f, - .FarPlane = 1000.0f, - }; // namespace - - size_t CameraAmount = 0; - Camera* CameraArray = nullptr; - Camera* CurrentCamera = nullptr; -} // namespace - -void ReserveCamera(size_t amount) -{ - Assert(CameraAmount == 0); - Assert(amount > 0); - - CameraAmount = amount; - - CameraArray = ArenaPushArray(GetPlatformArena(), CameraAmount JULIET_DEBUG_PARAM("Camera Array")); - - for (index_t index = 0; index < CameraAmount; ++index) - { - Camera* cam = CameraArray + index; - *cam = kDefaultCameraTemplate; - cam->Index = index; - } - - CurrentCamera = &CameraArray[0]; -} - -Camera* GetCurrentCamera() -{ - if (CameraAmount == 0) - { - ReserveCamera(1); - } - - NonNullPtr cam = CurrentCamera; - return cam.Get(); -} - -void SetCurrentCamera(index_t index) -{ - if (CameraAmount == 0) - { - ReserveCamera(1); - } - - Assert(index <= CameraAmount); - - CurrentCamera = CameraArray + index; -} diff --git a/Juliet/src/Graphics/D3D12/AgilitySDK/D3D12TokenizedProgramFormat.hpp b/Juliet/src/Graphics/D3D12/AgilitySDK/D3D12TokenizedProgramFormat.hpp deleted file mode 100644 index 9240091..0000000 --- a/Juliet/src/Graphics/D3D12/AgilitySDK/D3D12TokenizedProgramFormat.hpp +++ /dev/null @@ -1,2630 +0,0 @@ -#pragma once -//********************************************************* -// -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License (MIT). -// -//********************************************************* -// -// High Level Goals -// -// - Serve as the runtime/DDI representation for all D3D11 tokenized code, -// for all classes of programs, including pixel program, vertex program, -// geometry program, etc. -// -// - Any information that HLSL needs to give to drivers is encoded in -// this token format in some form. -// -// - Enable common tools and source code for managing all tokenizable -// program formats. -// -// - Support extensible token definitions, allowing full customizations for -// specific program classes, while maintaining general conventions for all -// program models. -// -// - Binary backwards compatible with D3D10. Any token name that was originally -// defined with "D3D10" in it is unchanged; D3D11 only adds new tokens. -// -// ---------------------------------------------------------------------------- -// -// Low Level Feature Summary -// -// - DWORD based tokens always, for simplicity -// - Opcode token is generally a single DWORD, though there is a bit indicating -// if extended information (extra DWORD(s)) are present -// - Operand tokens are a completely self contained, extensible format, -// with scalar and 4-vector data types as first class citizens, but -// allowance for extension to n-component vectors. -// - Initial operand token identifies register type, register file -// structure/dimensionality and mode of indexing for each dimension, -// and choice of component selection mechanism (i.e. mask vs. swizzle etc). -// - Optional additional extended operand tokens can defined things like -// modifiers (which are not needed by default). -// - Operand's immediate index value(s), if needed, appear as subsequent DWORD -// values, and if relative addressing is specified, an additional completely -// self contained operand definition appears nested in the token sequence. -// -// ---------------------------------------------------------------------------- - -#include - -#pragma region Application Family -#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) - -// ---------------------------------------------------------------------------- -// Version Token (VerTok) -// -// [07:00] minor version number (0-255) -// [15:08] major version number (0-255) -// [31:16] D3D10_SB_TOKENIZED_PROGRAM_TYPE -// -// ---------------------------------------------------------------------------- - -typedef enum D3D10_SB_TOKENIZED_PROGRAM_TYPE -{ - D3D10_SB_PIXEL_SHADER = 0, - D3D10_SB_VERTEX_SHADER = 1, - D3D10_SB_GEOMETRY_SHADER = 2, - - // D3D11 Shaders - D3D11_SB_HULL_SHADER = 3, - D3D11_SB_DOMAIN_SHADER = 4, - D3D11_SB_COMPUTE_SHADER = 5, - - // Subset of D3D12 Shaders where this field is referenced by runtime - // Entries from 6-12 are unique to state objects - // (e.g. library, callable and raytracing shaders) - D3D12_SB_MESH_SHADER = 13, - D3D12_SB_AMPLIFICATION_SHADER = 14, - - D3D11_SB_RESERVED0 = 0xFFF0 -} D3D10_SB_TOKENIZED_PROGRAM_TYPE; - -#define D3D10_SB_TOKENIZED_PROGRAM_TYPE_MASK 0xffff0000 -#define D3D10_SB_TOKENIZED_PROGRAM_TYPE_SHIFT 16 - -// DECODER MACRO: Retrieve program type from version token -#define DECODE_D3D10_SB_TOKENIZED_PROGRAM_TYPE(VerTok) ((D3D10_SB_TOKENIZED_PROGRAM_TYPE)(((VerTok)&D3D10_SB_TOKENIZED_PROGRAM_TYPE_MASK)>>D3D10_SB_TOKENIZED_PROGRAM_TYPE_SHIFT)) - -#define D3D10_SB_TOKENIZED_PROGRAM_MAJOR_VERSION_MASK 0x000000f0 -#define D3D10_SB_TOKENIZED_PROGRAM_MAJOR_VERSION_SHIFT 4 -#define D3D10_SB_TOKENIZED_PROGRAM_MINOR_VERSION_MASK 0x0000000f - -// DECODER MACRO: Retrieve major version # from version token -#define DECODE_D3D10_SB_TOKENIZED_PROGRAM_MAJOR_VERSION(VerTok) (((VerTok)&D3D10_SB_TOKENIZED_PROGRAM_MAJOR_VERSION_MASK)>>D3D10_SB_TOKENIZED_PROGRAM_MAJOR_VERSION_SHIFT) -// DECODER MACRO: Retrieve minor version # from version token -#define DECODE_D3D10_SB_TOKENIZED_PROGRAM_MINOR_VERSION(VerTok) ((VerTok)&D3D10_SB_TOKENIZED_PROGRAM_MINOR_VERSION_MASK) - -// ENCODER MACRO: Create complete VerTok -#define ENCODE_D3D10_SB_TOKENIZED_PROGRAM_VERSION_TOKEN(ProgType,MajorVer,MinorVer) ((((ProgType)<> D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH_SHIFT) - -// ENCODER MACRO: Store instruction length -// portion of OpcodeToken0, in # of DWORDs -// including the opcode token(s). -// Valid range is 1-127. -#define ENCODE_D3D10_SB_TOKENIZED_INSTRUCTION_LENGTH(Length) (((Length)<>D3D10_SB_INSTRUCTION_TEST_BOOLEAN_SHIFT)) -// ENCODER MACRO: Store "zero" or "nonzero" in the opcode -// specific control range of OpcodeToken0 -#define ENCODE_D3D10_SB_INSTRUCTION_TEST_BOOLEAN(Boolean) (((Boolean)<>D3D11_SB_INSTRUCTION_PRECISE_VALUES_SHIFT)) -// ENCODER MACRO: Given a set of -// D3D10_SB_OPERAND_4_COMPONENT_[X|Y|Z|W] values -// or'd together, encode them in OpcodeToken0. -#define ENCODE_D3D11_SB_INSTRUCTION_PRECISE_VALUES(ComponentMask) (((ComponentMask)<>D3D10_SB_RESINFO_INSTRUCTION_RETURN_TYPE_SHIFT)) -// ENCODER MACRO: Encode the return type for the resinfo instruction -// in the opcode specific control range of OpcodeToken0 -#define ENCODE_D3D10_SB_RESINFO_INSTRUCTION_RETURN_TYPE(ReturnType) (((ReturnType)<> D3D10_SB_OPCODE_EXTENDED_SHIFT) -// ENCODER MACRO: Store in OpcodeToken0 whether the opcode is extended -// by an additional opcode token. -#define ENCODE_D3D10_SB_OPCODE_EXTENDED(bExtended) (((bExtended)!=0)?D3D10_SB_OPCODE_EXTENDED_MASK:0) - -// ---------------------------------------------------------------------------- -// Extended Opcode Format (OpcodeToken1) -// -// If bit31 of an opcode token is set, the -// opcode has an additional extended opcode token DWORD -// directly following OpcodeToken0. Other tokens -// expected for the opcode, such as the operand -// token(s) always follow -// OpcodeToken0 AND OpcodeToken1..n (extended -// opcode tokens, if present). -// -// [05:00] D3D10_SB_EXTENDED_OPCODE_TYPE -// [30:06] if([05:00] == D3D10_SB_EXTENDED_OPCODE_SAMPLE_CONTROLS) -// { -// This custom opcode contains controls for SAMPLE. -// [08:06] Ignored, 0. -// [12:09] U texel immediate offset (4 bit 2's comp) (0 default) -// [16:13] V texel immediate offset (4 bit 2's comp) (0 default) -// [20:17] W texel immediate offset (4 bit 2's comp) (0 default) -// [30:14] Ignored, 0. -// } -// else if( [05:00] == D3D11_SB_EXTENDED_OPCODE_RESOURCE_DIM ) -// { -// [10:06] D3D10_SB_RESOURCE_DIMENSION -// [22:11] When dimension is D3D11_SB_RESOURCE_DIMENSION_STRUCTURED_BUFFER this holds the buffer stride, otherwise 0 -// [30:23] Ignored, 0. -// } -// else if( [05:00] == D3D11_SB_EXTENDED_OPCODE_RESOURCE_RETURN_TYPE ) -// { -// [09:06] D3D10_SB_RESOURCE_RETURN_TYPE for component X -// [13:10] D3D10_SB_RESOURCE_RETURN_TYPE for component Y -// [17:14] D3D10_SB_RESOURCE_RETURN_TYPE for component Z -// [21:18] D3D10_SB_RESOURCE_RETURN_TYPE for component W -// [30:22] Ignored, 0. -// } -// else -// { -// [30:04] Ignored, 0. -// } -// [31] 0 normally. 1 there is another extended opcode. Any number -// of extended opcode tokens can be chained. It is possible that some extended -// opcode tokens could include multiple DWORDS - that is defined -// on a case by case basis. -// -// ---------------------------------------------------------------------------- -typedef enum D3D10_SB_EXTENDED_OPCODE_TYPE -{ - D3D10_SB_EXTENDED_OPCODE_EMPTY = 0, - D3D10_SB_EXTENDED_OPCODE_SAMPLE_CONTROLS = 1, - D3D11_SB_EXTENDED_OPCODE_RESOURCE_DIM = 2, - D3D11_SB_EXTENDED_OPCODE_RESOURCE_RETURN_TYPE = 3, -} D3D10_SB_EXTENDED_OPCODE_TYPE; -#define D3D11_SB_MAX_SIMULTANEOUS_EXTENDED_OPCODES 3 - -#define D3D10_SB_EXTENDED_OPCODE_TYPE_MASK 0x0000003f - -// DECODER MACRO: Given an extended opcode -// token (OpcodeToken1), figure out what type -// of token it is (from D3D10_SB_EXTENDED_OPCODE_TYPE enum) -// to be able to interpret the rest of the token's contents. -#define DECODE_D3D10_SB_EXTENDED_OPCODE_TYPE(OpcodeToken1) ((D3D10_SB_EXTENDED_OPCODE_TYPE)((OpcodeToken1)&D3D10_SB_EXTENDED_OPCODE_TYPE_MASK)) - -// ENCODER MACRO: Store extended opcode token -// type in OpcodeToken1. -#define ENCODE_D3D10_SB_EXTENDED_OPCODE_TYPE(ExtOpcodeType) ((ExtOpcodeType)&D3D10_SB_EXTENDED_OPCODE_TYPE_MASK) - -typedef enum D3D10_SB_IMMEDIATE_ADDRESS_OFFSET_COORD -{ - D3D10_SB_IMMEDIATE_ADDRESS_OFFSET_U = 0, - D3D10_SB_IMMEDIATE_ADDRESS_OFFSET_V = 1, - D3D10_SB_IMMEDIATE_ADDRESS_OFFSET_W = 2, -} D3D10_SB_IMMEDIATE_ADDRESS_OFFSET_COORD; -#define D3D10_SB_IMMEDIATE_ADDRESS_OFFSET_COORD_MASK (3) -#define D3D10_SB_IMMEDIATE_ADDRESS_OFFSET_SHIFT(Coord) (9+4*((Coord)&D3D10_SB_IMMEDIATE_ADDRESS_OFFSET_COORD_MASK)) -#define D3D10_SB_IMMEDIATE_ADDRESS_OFFSET_MASK(Coord) (0x0000000f<>(D3D10_SB_IMMEDIATE_ADDRESS_OFFSET_SHIFT(Coord)))) - -// ENCODER MACRO: Store the immediate texel address offset -// for U or V or W Coord (D3D10_SB_ADDRESS_OFFSET_COORD) in an extended -// opcode token (OpcodeToken1) that has extended opcode -// type == D3D10_SB_EXTENDED_OPCODE_SAMPLE_CONTROLS (opcode type encoded separately) -// A 2's complement number is expected as input, from which the LSB 4 bits are extracted. -#define ENCODE_IMMEDIATE_D3D10_SB_ADDRESS_OFFSET(Coord,ImmediateOffset) (((ImmediateOffset)<>D3D11_SB_EXTENDED_RESOURCE_DIMENSION_SHIFT)) - -// ENCODER MACRO: Store resource dimension -// (D3D10_SB_RESOURCE_DIMENSION enum) into a -// an extended resource declaration token (D3D11_SB_EXTENDED_OPCODE_RESOURCE_DIM) -#define ENCODE_D3D11_SB_EXTENDED_RESOURCE_DIMENSION(ResourceDim) (((ResourceDim)<>D3D11_SB_EXTENDED_RESOURCE_DIMENSION_STRUCTURE_STRIDE_SHIFT) - -// ENCODER MACRO: Store resource dimension structure stride -// (12-bit unsigned integer) into a -// an extended resource declaration token (D3D11_SB_EXTENDED_OPCODE_RESOURCE_DIM) -#define ENCODE_D3D11_SB_EXTENDED_RESOURCE_DIMENSION_STRUCTURE_STRIDE(Stride) (((Stride)<> \ - (Component * D3D10_SB_RESOURCE_RETURN_TYPE_NUMBITS + D3D11_SB_EXTENDED_RESOURCE_RETURN_TYPE_SHIFT))&D3D10_SB_RESOURCE_RETURN_TYPE_MASK)) - -// ENCODER MACRO: Generate a resource return type for a component in an extended -// resource delcaration token (D3D11_SB_EXTENDED_OPCODE_RESOURCE_RETURN_TYPE) -#define ENCODE_D3D11_SB_EXTENDED_RESOURCE_RETURN_TYPE(ReturnType, Component) \ - (((ReturnType)&D3D10_SB_RESOURCE_RETURN_TYPE_MASK) << (Component * D3D10_SB_RESOURCE_RETURN_TYPE_NUMBITS + D3D11_SB_EXTENDED_RESOURCE_RETURN_TYPE_SHIFT)) - -// ---------------------------------------------------------------------------- -// Custom-Data Block Format -// -// DWORD 0 (CustomDataDescTok): -// [10:00] == D3D10_SB_OPCODE_CUSTOMDATA -// [31:11] == D3D10_SB_CUSTOMDATA_CLASS -// -// DWORD 1: -// 32-bit unsigned integer count of number -// of DWORDs in custom-data block, -// including DWORD 0 and DWORD 1. -// So the minimum value is 0x00000002, -// meaning empty custom-data. -// -// Layout of custom-data contents, for the various meta-data classes, -// not defined in this file. -// -// ---------------------------------------------------------------------------- - -typedef enum D3D10_SB_CUSTOMDATA_CLASS -{ - D3D10_SB_CUSTOMDATA_COMMENT = 0, - D3D10_SB_CUSTOMDATA_DEBUGINFO, - D3D10_SB_CUSTOMDATA_OPAQUE, - D3D10_SB_CUSTOMDATA_DCL_IMMEDIATE_CONSTANT_BUFFER, - D3D11_SB_CUSTOMDATA_SHADER_MESSAGE, - D3D11_SB_CUSTOMDATA_SHADER_CLIP_PLANE_CONSTANT_MAPPINGS_FOR_DX9, -} D3D10_SB_CUSTOMDATA_CLASS; - -#define D3D10_SB_CUSTOMDATA_CLASS_MASK 0xfffff800 -#define D3D10_SB_CUSTOMDATA_CLASS_SHIFT 11 -// DECODER MACRO: Find out what class of custom-data is present. -// The contents of the custom-data block are defined -// for each class of custom-data. -#define DECODE_D3D10_SB_CUSTOMDATA_CLASS(CustomDataDescTok) ((D3D10_SB_CUSTOMDATA_CLASS)(((CustomDataDescTok)&D3D10_SB_CUSTOMDATA_CLASS_MASK)>>D3D10_SB_CUSTOMDATA_CLASS_SHIFT)) -// ENCODER MACRO: Create complete CustomDataDescTok -#define ENCODE_D3D10_SB_CUSTOMDATA_CLASS(CustomDataClass) (ENCODE_D3D10_SB_OPCODE_TYPE(D3D10_SB_OPCODE_CUSTOMDATA)|(((CustomDataClass)<= D3D10_SB_OPERAND_INDEX_1D ) -// D3D10_SB_OPERAND_INDEX_REPRESENTATION for first operand index -// else -// Ignored, 0 -// [27:25] if( [21:20] >= D3D10_SB_OPERAND_INDEX_2D ) -// D3D10_SB_OPERAND_INDEX_REPRESENTATION for second operand index -// else -// Ignored, 0 -// [30:28] if( [21:20] == D3D10_SB_OPERAND_INDEX_3D ) -// D3D10_SB_OPERAND_INDEX_REPRESENTATION for third operand index -// else -// Ignored, 0 -// [31] 0 normally. 1 if extended operand definition, meaning next DWORD -// contains extended operand description. -// -// ---------------------------------------------------------------------------- - -// Number of components in data vector referred to by operand. -typedef enum D3D10_SB_OPERAND_NUM_COMPONENTS -{ - D3D10_SB_OPERAND_0_COMPONENT = 0, - D3D10_SB_OPERAND_1_COMPONENT = 1, - D3D10_SB_OPERAND_4_COMPONENT = 2, - D3D10_SB_OPERAND_N_COMPONENT = 3 // unused for now -} D3D10_SB_OPERAND_NUM_COMPONENTS; -#define D3D10_SB_OPERAND_NUM_COMPONENTS_MASK 0x00000003 - -// DECODER MACRO: Extract from OperandToken0 how many components -// the data vector referred to by the operand contains. -// (D3D10_SB_OPERAND_NUM_COMPONENTS enum) -#define DECODE_D3D10_SB_OPERAND_NUM_COMPONENTS(OperandToken0) ((D3D10_SB_OPERAND_NUM_COMPONENTS)((OperandToken0)&D3D10_SB_OPERAND_NUM_COMPONENTS_MASK)) - -// ENCODER MACRO: Define in OperandToken0 how many components -// the data vector referred to by the operand contains. -// (D3D10_SB_OPERAND_NUM_COMPONENTS enum). -#define ENCODE_D3D10_SB_OPERAND_NUM_COMPONENTS(NumComp) ((NumComp)&D3D10_SB_OPERAND_NUM_COMPONENTS_MASK) - -typedef enum D3D10_SB_OPERAND_4_COMPONENT_SELECTION_MODE -{ - D3D10_SB_OPERAND_4_COMPONENT_MASK_MODE = 0, // mask 4 components - D3D10_SB_OPERAND_4_COMPONENT_SWIZZLE_MODE = 1, // swizzle 4 components - D3D10_SB_OPERAND_4_COMPONENT_SELECT_1_MODE = 2, // select 1 of 4 components -} D3D10_SB_OPERAND_4_COMPONENT_SELECTION_MODE; - -#define D3D10_SB_OPERAND_4_COMPONENT_SELECTION_MODE_MASK 0x0000000c -#define D3D10_SB_OPERAND_4_COMPONENT_SELECTION_MODE_SHIFT 2 - -// DECODER MACRO: For an operand representing 4component data, -// extract from OperandToken0 the method for selecting data from -// the 4 components (D3D10_SB_OPERAND_4_COMPONENT_SELECTION_MODE). -#define DECODE_D3D10_SB_OPERAND_4_COMPONENT_SELECTION_MODE(OperandToken0) ((D3D10_SB_OPERAND_4_COMPONENT_SELECTION_MODE)(((OperandToken0)&D3D10_SB_OPERAND_4_COMPONENT_SELECTION_MODE_MASK)>>D3D10_SB_OPERAND_4_COMPONENT_SELECTION_MODE_SHIFT)) - -// ENCODER MACRO: For an operand representing 4component data, -// encode in OperandToken0 a value from D3D10_SB_OPERAND_4_COMPONENT_SELECTION_MODE -#define ENCODE_D3D10_SB_OPERAND_4_COMPONENT_SELECTION_MODE(SelectionMode) (((SelectionMode)<>(D3D10_SB_OPERAND_4_COMPONENT_SWIZZLE_SHIFT+2*((DestComp)&D3D10_SB_4_COMPONENT_NAME_MASK)))&D3D10_SB_4_COMPONENT_NAME_MASK)) - -// ENCODER MACRO: Generate a 4 component swizzle given -// 4 D3D10_SB_4_COMPONENT_NAME source values for dest -// components x, y, z, w respectively. -#define ENCODE_D3D10_SB_OPERAND_4_COMPONENT_SWIZZLE(XSrc,YSrc,ZSrc,WSrc) ((((XSrc)&D3D10_SB_4_COMPONENT_NAME_MASK)| \ - (((YSrc)&D3D10_SB_4_COMPONENT_NAME_MASK)<<2)| \ - (((ZSrc)&D3D10_SB_4_COMPONENT_NAME_MASK)<<4)| \ - (((WSrc)&D3D10_SB_4_COMPONENT_NAME_MASK)<<6) \ - )<>D3D10_SB_OPERAND_4_COMPONENT_SELECT_1_SHIFT)) - -// ENCODER MACRO: Given a D3D10_SB_4_COMPONENT_NAME selecting -// a single component for D3D10_SB_OPERAND_4_COMPONENT_SELECT_1_MODE, -// encode it into OperandToken0 -#define ENCODE_D3D10_SB_OPERAND_4_COMPONENT_SELECT_1(SelectedComp) (((SelectedComp)<>D3D10_SB_OPERAND_TYPE_SHIFT)) - -// ENCODER MACRO: Store operand type in OperandToken0. -#define ENCODE_D3D10_SB_OPERAND_TYPE(OperandType) (((OperandType)<>D3D10_SB_OPERAND_INDEX_DIMENSION_SHIFT)) - -// ENCODER MACRO: Store operand index dimension -// (D3D10_SB_OPERAND_INDEX_DIMENSION enum) in OperandToken0. -#define ENCODE_D3D10_SB_OPERAND_INDEX_DIMENSION(OperandIndexDim) (((OperandIndexDim)<>D3D10_SB_OPERAND_INDEX_REPRESENTATION_SHIFT(Dim))) - -// ENCODER MACRO: Store in OperandToken0 what representation -// an operand index is provided as (D3D10_SB_OPERAND_INDEX_REPRESENTATION enum), -// for index dimension [0], [1] or [2], depending on D3D10_SB_OPERAND_INDEX_DIMENSION. -#define ENCODE_D3D10_SB_OPERAND_INDEX_REPRESENTATION(Dim,IndexRepresentation) (((IndexRepresentation)<>D3D10_SB_OPERAND_EXTENDED_SHIFT) - -// ENCODER MACRO: Store in OperandToken0 whether the operand is extended -// by an additional operand token. -#define ENCODE_D3D10_SB_OPERAND_EXTENDED(bExtended) (((bExtended)!=0)?D3D10_SB_OPERAND_EXTENDED_MASK:0) - -// ---------------------------------------------------------------------------- -// Extended Instruction Operand Format (OperandToken1) -// -// If bit31 of an operand token is set, the -// operand has additional data in a second DWORD -// directly following OperandToken0. Other tokens -// expected for the operand, such as immmediate -// values or relative address operands (full -// operands in themselves) always follow -// OperandToken0 AND OperandToken1..n (extended -// operand tokens, if present). -// -// [05:00] D3D10_SB_EXTENDED_OPERAND_TYPE -// [16:06] if([05:00] == D3D10_SB_EXTENDED_OPERAND_MODIFIER) -// { -// [13:06] D3D10_SB_OPERAND_MODIFIER -// [16:14] Min Precision: D3D11_SB_OPERAND_MIN_PRECISION -// [17:17] Non-uniform: D3D12_SB_OPERAND_NON_UNIFORM -// } -// else -// { -// [17:06] Ignored, 0. -// } -// [30:18] Ignored, 0. -// [31] 0 normally. 1 if second order extended operand definition, -// meaning next DWORD contains yet ANOTHER extended operand -// description. Currently no second order extensions defined. -// This would be useful if a particular extended operand does -// not have enough space to store the required information in -// a single token and so is extended further. -// -// ---------------------------------------------------------------------------- - -typedef enum D3D10_SB_EXTENDED_OPERAND_TYPE -{ - D3D10_SB_EXTENDED_OPERAND_EMPTY = 0, // Might be used if this - // enum is full and - // further extended opcode - // is needed. - D3D10_SB_EXTENDED_OPERAND_MODIFIER = 1, -} D3D10_SB_EXTENDED_OPERAND_TYPE; -#define D3D10_SB_EXTENDED_OPERAND_TYPE_MASK 0x0000003f - -// DECODER MACRO: Given an extended operand -// token (OperandToken1), figure out what type -// of token it is (from D3D10_SB_EXTENDED_OPERAND_TYPE enum) -// to be able to interpret the rest of the token's contents. -#define DECODE_D3D10_SB_EXTENDED_OPERAND_TYPE(OperandToken1) ((D3D10_SB_EXTENDED_OPERAND_TYPE)((OperandToken1)&D3D10_SB_EXTENDED_OPERAND_TYPE_MASK)) - -// ENCODER MACRO: Store extended operand token -// type in OperandToken1. -#define ENCODE_D3D10_SB_EXTENDED_OPERAND_TYPE(ExtOperandType) ((ExtOperandType)&D3D10_SB_EXTENDED_OPERAND_TYPE_MASK) - -typedef enum D3D10_SB_OPERAND_MODIFIER -{ - D3D10_SB_OPERAND_MODIFIER_NONE = 0, // Nop. This is the implied - // default if the extended - // operand is not present for - // an operand for which source - // modifiers are meaningful - D3D10_SB_OPERAND_MODIFIER_NEG = 1, // Negate - D3D10_SB_OPERAND_MODIFIER_ABS = 2, // Absolute value, abs() - D3D10_SB_OPERAND_MODIFIER_ABSNEG = 3, // -abs() -} D3D10_SB_OPERAND_MODIFIER; -#define D3D10_SB_OPERAND_MODIFIER_MASK 0x00003fc0 -#define D3D10_SB_OPERAND_MODIFIER_SHIFT 6 - -// DECODER MACRO: Given a D3D10_SB_EXTENDED_OPERAND_MODIFIER -// extended token (OperandToken1), determine the source modifier -// (D3D10_SB_OPERAND_MODIFIER enum) -#define DECODE_D3D10_SB_OPERAND_MODIFIER(OperandToken1) ((D3D10_SB_OPERAND_MODIFIER)(((OperandToken1)&D3D10_SB_OPERAND_MODIFIER_MASK)>>D3D10_SB_OPERAND_MODIFIER_SHIFT)) - -// ENCODER MACRO: Generate a complete source modifier extended token -// (OperandToken1), given D3D10_SB_OPERAND_MODIFIER enum (the -// ext. operand type is also set to D3D10_SB_EXTENDED_OPERAND_MODIFIER). -#define ENCODE_D3D10_SB_EXTENDED_OPERAND_MODIFIER(SourceMod) ((((SourceMod)<> D3D11_SB_OPERAND_MIN_PRECISION_SHIFT)) - -// ENCODER MACRO: Encode minimum precision for execution -// into the extended operand token, OperandToken1 -#define ENCODE_D3D11_SB_OPERAND_MIN_PRECISION(MinPrecision) (((MinPrecision)<< D3D11_SB_OPERAND_MIN_PRECISION_SHIFT)& D3D11_SB_OPERAND_MIN_PRECISION_MASK) - -// Non-uniform extended operand modifier. -#define D3D12_SB_OPERAND_NON_UNIFORM_MASK 0x00020000 -#define D3D12_SB_OPERAND_NON_UNIFORM_SHIFT 17 - -// DECODER MACRO: For an OperandToken1 that can specify a non-uniform operand -#define DECODE_D3D12_SB_OPERAND_NON_UNIFORM(OperandToken1) (((OperandToken1)& D3D12_SB_OPERAND_NON_UNIFORM_MASK)>> D3D12_SB_OPERAND_NON_UNIFORM_SHIFT) - -// ENCODER MACRO: Encode non-uniform state into the extended operand token, OperandToken1 -#define ENCODE_D3D12_SB_OPERAND_NON_UNIFORM(NonUniform) (((NonUniform)<< D3D12_SB_OPERAND_NON_UNIFORM_SHIFT)& D3D12_SB_OPERAND_NON_UNIFORM_MASK) - -#define D3D10_SB_OPERAND_DOUBLE_EXTENDED_MASK 0x80000000 -#define D3D10_SB_OPERAND_DOUBLE_EXTENDED_SHIFT 31 -// DECODER MACRO: Determine if an extended operand token -// (OperandToken1) is further extended by yet another token -// (OperandToken2). Currently there are no secondary -// extended operand tokens. -#define DECODE_IS_D3D10_SB_OPERAND_DOUBLE_EXTENDED(OperandToken1) (((OperandToken1)&D3D10_SB_OPERAND_DOUBLE_EXTENDED_MASK)>>D3D10_SB_OPERAND_DOUBLE_EXTENDED_SHIFT) - -// ENCODER MACRO: Store in OperandToken1 whether the operand is extended -// by an additional operand token. Currently there are no secondary -// extended operand tokens. -#define ENCODE_D3D10_SB_OPERAND_DOUBLE_EXTENDED(bExtended) (((bExtended)!=0)?D3D10_SB_OPERAND_DOUBLE_EXTENDED_MASK:0) - -// ---------------------------------------------------------------------------- -// Name Token (NameToken) (used in declaration statements) -// -// [15:00] D3D10_SB_NAME enumeration -// [31:16] Reserved, 0 -// -// ---------------------------------------------------------------------------- -#define D3D10_SB_NAME_MASK 0x0000ffff - -// DECODER MACRO: Get the name from NameToken -#define DECODE_D3D10_SB_NAME(NameToken) ((D3D10_SB_NAME)((NameToken)&D3D10_SB_NAME_MASK)) - -// ENCODER MACRO: Generate a complete NameToken given a D3D10_SB_NAME -#define ENCODE_D3D10_SB_NAME(Name) ((Name)&D3D10_SB_NAME_MASK) - -//--------------------------------------------------------------------- -// Declaration Statements -// -// Declarations start with a standard opcode token, -// having opcode type being D3D10_SB_OPCODE_DCL*. -// Each particular declaration type has custom -// operand token(s), described below. -//--------------------------------------------------------------------- - -// ---------------------------------------------------------------------------- -// Global Flags Declaration -// -// OpcodeToken0: -// -// [10:00] D3D10_SB_OPCODE_DCL_GLOBAL_FLAGS -// [11:11] Refactoring allowed if bit set. -// [12:12] Enable double precision float ops. -// [13:13] Force early depth-stencil test. -// [14:14] Enable RAW and structured buffers in non-CS 4.x shaders. -// [15:15] Skip optimizations of shader IL when translating to native code -// [16:16] Enable minimum-precision data types -// [17:17] Enable 11.1 double-precision floating-point instruction extensions -// [18:18] Enable 11.1 non-double instruction extensions -// [23:19] Reserved for future flags. -// [30:24] Instruction length in DWORDs including the opcode token. == 1 -// [31] 0 normally. 1 if extended operand definition, meaning next DWORD -// contains extended operand description. This dcl is currently not -// extended. -// -// OpcodeToken0 is followed by no operands. -// -// ---------------------------------------------------------------------------- -#define D3D10_SB_GLOBAL_FLAG_REFACTORING_ALLOWED (1<<11) -#define D3D11_SB_GLOBAL_FLAG_ENABLE_DOUBLE_PRECISION_FLOAT_OPS (1<<12) -#define D3D11_SB_GLOBAL_FLAG_FORCE_EARLY_DEPTH_STENCIL (1<<13) -#define D3D11_SB_GLOBAL_FLAG_ENABLE_RAW_AND_STRUCTURED_BUFFERS (1<<14) -#define D3D11_1_SB_GLOBAL_FLAG_SKIP_OPTIMIZATION (1<<15) -#define D3D11_1_SB_GLOBAL_FLAG_ENABLE_MINIMUM_PRECISION (1<<16) -#define D3D11_1_SB_GLOBAL_FLAG_ENABLE_DOUBLE_EXTENSIONS (1<<17) -#define D3D11_1_SB_GLOBAL_FLAG_ENABLE_SHADER_EXTENSIONS (1<<18) -#define D3D12_SB_GLOBAL_FLAG_ALL_RESOURCES_BOUND (1<<19) - -#define D3D10_SB_GLOBAL_FLAGS_MASK 0x00fff800 - -// DECODER MACRO: Get global flags -#define DECODE_D3D10_SB_GLOBAL_FLAGS(OpcodeToken0) ((OpcodeToken0)&D3D10_SB_GLOBAL_FLAGS_MASK) - -// ENCODER MACRO: Encode global flags -#define ENCODE_D3D10_SB_GLOBAL_FLAGS(Flags) ((Flags)&D3D10_SB_GLOBAL_FLAGS_MASK) - -// ---------------------------------------------------------------------------- -// Resource Declaration (non multisampled) -// -// OpcodeToken0: -// -// [10:00] D3D10_SB_OPCODE_DCL_RESOURCE -// [15:11] D3D10_SB_RESOURCE_DIMENSION -// [23:16] Ignored, 0 -// [30:24] Instruction length in DWORDs including the opcode token. -// [31] 0 normally. 1 if extended operand definition, meaning next DWORD -// contains extended operand description. This dcl is currently not -// extended. -// -// OpcodeToken0 is followed by 2 operands on Shader Models 4.0 through 5.0: -// (1) an operand, starting with OperandToken0, defining which -// t# register (D3D10_SB_OPERAND_TYPE_RESOURCE) is being declared. -// (2) a Resource Return Type token (ResourceReturnTypeToken) -// -// OpcodeToken0 is followed by 3 operands on Shader Model 5.1 and later: -// (1) an operand, starting with OperandToken0, defining which -// t# register (D3D10_SB_OPERAND_TYPE_RESOURCE) is being declared. -// The indexing dimension for the register must be D3D10_SB_OPERAND_INDEX_DIMENSION_3D, -// and the meaning of the index dimensions are as follows: (t[:]) -// 1 : variable ID being declared -// 2 : the lower bound of the range of resources in the space -// 3 : the upper bound (inclusive) of this range -// As opposed to when the t# is used in shader instructions, where the register -// must be D3D10_SB_OPERAND_INDEX_DIMENSION_2D, and the meaning of the index -// dimensions are as follows: (t[]): -// 1 : variable ID being used (matches dcl) -// 2 : absolute index of resource within space (may be dynamically indexed) -// (2) a Resource Return Type token (ResourceReturnTypeToken) -// (3) a DWORD indicating the space index. -// -// ---------------------------------------------------------------------------- -#define D3D10_SB_RESOURCE_DIMENSION_MASK 0x0000F800 -#define D3D10_SB_RESOURCE_DIMENSION_SHIFT 11 - -// DECODER MACRO: Given a resource declaration token, -// (OpcodeToken0), determine the resource dimension -// (D3D10_SB_RESOURCE_DIMENSION enum) -#define DECODE_D3D10_SB_RESOURCE_DIMENSION(OpcodeToken0) ((D3D10_SB_RESOURCE_DIMENSION)(((OpcodeToken0)&D3D10_SB_RESOURCE_DIMENSION_MASK)>>D3D10_SB_RESOURCE_DIMENSION_SHIFT)) - -// ENCODER MACRO: Store resource dimension -// (D3D10_SB_RESOURCE_DIMENSION enum) into a -// a resource declaration token (OpcodeToken0) -#define ENCODE_D3D10_SB_RESOURCE_DIMENSION(ResourceDim) (((ResourceDim)<[:]) -// 1 : variable ID being declared -// 2 : the lower bound of the range of resources in the space -// 3 : the upper bound (inclusive) of this range -// As opposed to when the t# is used in shader instructions, where the register -// must be D3D10_SB_OPERAND_INDEX_DIMENSION_2D, and the meaning of the index -// dimensions are as follows: (t[]): -// 1 : variable ID being used (matches dcl) -// 2 : absolute index of resource within space (may be dynamically indexed) -// (2) a Resource Return Type token (ResourceReturnTypeToken) -// (3) a DWORD indicating the space index. -// -// ---------------------------------------------------------------------------- - -// use same macro for encoding/decoding resource dimension aas the non-msaa declaration - -#define D3D10_SB_RESOURCE_SAMPLE_COUNT_MASK 0x07F0000 -#define D3D10_SB_RESOURCE_SAMPLE_COUNT_SHIFT 16 - -// DECODER MACRO: Given a resource declaration token, -// (OpcodeToken0), determine the resource sample count (1..127) -#define DECODE_D3D10_SB_RESOURCE_SAMPLE_COUNT(OpcodeToken0) ((UINT)(((OpcodeToken0)&D3D10_SB_RESOURCE_SAMPLE_COUNT_MASK)>>D3D10_SB_RESOURCE_SAMPLE_COUNT_SHIFT)) - -// ENCODER MACRO: Store resource sample count up to 127 into a -// a resource declaration token (OpcodeToken0) -#define ENCODE_D3D10_SB_RESOURCE_SAMPLE_COUNT(SampleCount) (((SampleCount > 127 ? 127 : SampleCount)<> \ - (Component * D3D10_SB_RESOURCE_RETURN_TYPE_NUMBITS))&D3D10_SB_RESOURCE_RETURN_TYPE_MASK)) - -// ENCODER MACRO: Generate a resource return type for a component -#define ENCODE_D3D10_SB_RESOURCE_RETURN_TYPE(ReturnType, Component) \ - (((ReturnType)&D3D10_SB_RESOURCE_RETURN_TYPE_MASK) << (Component * D3D10_SB_RESOURCE_RETURN_TYPE_NUMBITS)) - -// ---------------------------------------------------------------------------- -// Sampler Declaration -// -// OpcodeToken0: -// -// [10:00] D3D10_SB_OPCODE_DCL_SAMPLER -// [14:11] D3D10_SB_SAMPLER_MODE -// [23:15] Ignored, 0 -// [30:24] Instruction length in DWORDs including the opcode token. -// [31] 0 normally. 1 if extended operand definition, meaning next DWORD -// contains extended operand description. This dcl is currently not -// extended. -// -// OpcodeToken0 is followed by 1 operand on Shader Models 4.0 through 5.0: -// (1) Operand starting with OperandToken0, defining which sampler -// (D3D10_SB_OPERAND_TYPE_SAMPLER) register # is being declared. -// -// OpcodeToken0 is followed by 2 operands on Shader Model 5.1 and later: -// (1) an operand, starting with OperandToken0, defining which -// s# register (D3D10_SB_OPERAND_TYPE_SAMPLER) is being declared. -// The indexing dimension for the register must be D3D10_SB_OPERAND_INDEX_DIMENSION_3D, -// and the meaning of the index dimensions are as follows: (s[:]) -// 1 : variable ID being declared -// 2 : the lower bound of the range of samplers in the space -// 3 : the upper bound (inclusive) of this range -// As opposed to when the s# is used in shader instructions, where the register -// must be D3D10_SB_OPERAND_INDEX_DIMENSION_2D, and the meaning of the index -// dimensions are as follows: (s[]): -// 1 : variable ID being used (matches dcl) -// 2 : absolute index of sampler within space (may be dynamically indexed) -// (2) a DWORD indicating the space index. -// -// ---------------------------------------------------------------------------- -typedef enum D3D10_SB_SAMPLER_MODE -{ - D3D10_SB_SAMPLER_MODE_DEFAULT = 0, - D3D10_SB_SAMPLER_MODE_COMPARISON = 1, - D3D10_SB_SAMPLER_MODE_MONO = 2, -} D3D10_SB_SAMPLER_MODE; - -#define D3D10_SB_SAMPLER_MODE_MASK 0x00007800 -#define D3D10_SB_SAMPLER_MODE_SHIFT 11 - -// DECODER MACRO: Find out if a Constant Buffer is going to be indexed or not -#define DECODE_D3D10_SB_SAMPLER_MODE(OpcodeToken0) ((D3D10_SB_SAMPLER_MODE)(((OpcodeToken0)&D3D10_SB_SAMPLER_MODE_MASK)>>D3D10_SB_SAMPLER_MODE_SHIFT)) - -// ENCODER MACRO: Generate a resource return type for a component -#define ENCODE_D3D10_SB_SAMPLER_MODE(SamplerMode) (((SamplerMode)<>D3D10_SB_INPUT_INTERPOLATION_MODE_SHIFT)) - -// ENCODER MACRO: Encode interpolation mode for a register. -#define ENCODE_D3D10_SB_INPUT_INTERPOLATION_MODE(InterpolationMode) (((InterpolationMode)<[:]) -// 1 : variable ID being declared -// 2 : the lower bound of the range of constant buffers in the space -// 3 : the upper bound (inclusive) of this range -// As opposed to when the cb#[] is used in shader instructions: (cb[][]) -// 1 : variable ID being used (matches dcl) -// 2 : absolute index of constant buffer within space (may be dynamically indexed) -// 3 : location of vector within constant buffer being referenced, -// which may also be dynamically indexed, with no access pattern flag required. -// (2) a DWORD indicating the size of the constant buffer as a count of 16-byte vectors. -// Each vector is 32-bit*4 elements == 128-bits == 16 bytes. -// If the size is specified as 0, the CB size is not known (any size CB -// can be bound to the slot). -// (3) a DWORD indicating the space index. -// -// ---------------------------------------------------------------------------- - -typedef enum D3D10_SB_CONSTANT_BUFFER_ACCESS_PATTERN -{ - D3D10_SB_CONSTANT_BUFFER_IMMEDIATE_INDEXED = 0, - D3D10_SB_CONSTANT_BUFFER_DYNAMIC_INDEXED = 1 -} D3D10_SB_CONSTANT_BUFFER_ACCESS_PATTERN; - -#define D3D10_SB_CONSTANT_BUFFER_ACCESS_PATTERN_MASK 0x00000800 -#define D3D10_SB_CONSTANT_BUFFER_ACCESS_PATTERN_SHIFT 11 - -// DECODER MACRO: Find out if a Constant Buffer is going to be indexed or not -#define DECODE_D3D10_SB_CONSTANT_BUFFER_ACCESS_PATTERN(OpcodeToken0) ((D3D10_SB_CONSTANT_BUFFER_ACCESS_PATTERN)(((OpcodeToken0)&D3D10_SB_CONSTANT_BUFFER_ACCESS_PATTERN_MASK)>>D3D10_SB_CONSTANT_BUFFER_ACCESS_PATTERN_SHIFT)) - -// ENCODER MACRO: Encode the access pattern for the Constant Buffer -#define ENCODE_D3D10_SB_D3D10_SB_CONSTANT_BUFFER_ACCESS_PATTERN(AccessPattern) (((AccessPattern)<>D3D10_SB_GS_INPUT_PRIMITIVE_SHIFT)) - -// ENCODER MACRO: Store primitive topology -// (D3D10_SB_PRIMITIVE enum) into a -// a primitive topology declaration token (OpcodeToken0) -#define ENCODE_D3D10_SB_GS_INPUT_PRIMITIVE(Prim) (((Prim)<>D3D10_SB_GS_OUTPUT_PRIMITIVE_TOPOLOGY_SHIFT)) - -// ENCODER MACRO: Store primitive topology -// (D3D10_SB_PRIMITIVE_TOPOLOGY enum) into a -// a primitive topology declaration token (OpcodeToken0) -#define ENCODE_D3D10_SB_GS_OUTPUT_PRIMITIVE_TOPOLOGY(PrimTopology) (((PrimTopology)<>D3D11_SB_INPUT_CONTROL_POINT_COUNT_SHIFT)) - -// ENCODER MACRO: Store input control point count into a declaration token -#define ENCODE_D3D11_SB_INPUT_CONTROL_POINT_COUNT(Count) (((Count)<>D3D11_SB_OUTPUT_CONTROL_POINT_COUNT_SHIFT)) - -// ENCODER MACRO: Store output control point count into a declaration token -#define ENCODE_D3D11_SB_OUTPUT_CONTROL_POINT_COUNT(Count) (((Count)<>D3D11_SB_TESS_DOMAIN_SHIFT)) - -// ENCODER MACRO: Store tessellator domain -// (D3D11_SB_TESSELLATOR_DOMAIN enum) into a -// a tessellator domain declaration token (OpcodeToken0) -#define ENCODE_D3D11_SB_TESS_DOMAIN(Domain) (((Domain)<>D3D11_SB_TESS_PARTITIONING_SHIFT)) - -// ENCODER MACRO: Store tessellator partitioning -// (D3D11_SB_TESSELLATOR_PARTITIONING enum) into a -// a tessellator partitioning declaration token (OpcodeToken0) -#define ENCODE_D3D11_SB_TESS_PARTITIONING(Partitioning) (((Partitioning)<>D3D11_SB_TESS_OUTPUT_PRIMITIVE_SHIFT)) - -// ENCODER MACRO: Store tessellator output primitive -// (D3D11_SB_TESSELLATOR_OUTPUT_PRIMITIVE enum) into a -// a tessellator output primitive declaration token (OpcodeToken0) -#define ENCODE_D3D11_SB_TESS_OUTPUT_PRIMITIVE(OutputPrimitive) (((OutputPrimitive)<>D3D10_SB_INSTRUCTION_RETURN_TYPE_SHIFT)) -// ENCODER MACRO: Encode the return type for instructions -// in the opcode specific control range of OpcodeToken0 -#define ENCODE_D3D10_SB_INSTRUCTION_RETURN_TYPE(ReturnType) (((ReturnType)<>D3D11_SB_INTERFACE_INDEXED_BIT_SHIFT) ? true : false) -#define ENCODE_D3D11_SB_INTERFACE_INDEXED_BIT(IndexedBit) (((IndexedBit)<>D3D11_SB_INTERFACE_TABLE_LENGTH_SHIFT)) -#define ENCODE_D3D11_SB_INTERFACE_TABLE_LENGTH(TableLength) (((TableLength)<>D3D11_SB_INTERFACE_ARRAY_LENGTH_SHIFT)) -#define ENCODE_D3D11_SB_INTERFACE_ARRAY_LENGTH(ArrayLength) (((ArrayLength)<[:]) -// 1 : variable ID being declared -// 2 : the lower bound of the range of UAV's in the space -// 3 : the upper bound (inclusive) of this range -// As opposed to when the u# is used in shader instructions, where the register -// must be D3D10_SB_OPERAND_INDEX_DIMENSION_2D, and the meaning of the index -// dimensions are as follows: (u[]): -// 1 : variable ID being used (matches dcl) -// 2 : absolute index of uav within space (may be dynamically indexed) -// (2) a Resource Return Type token (ResourceReturnTypeToken) -// (3) a DWORD indicating the space index. -// -// ---------------------------------------------------------------------------- -// UAV access scope flags -#define D3D11_SB_GLOBALLY_COHERENT_ACCESS 0x00010000 -#define D3D11_SB_ACCESS_COHERENCY_MASK 0x00010000 - -// DECODER MACRO: Retrieve flags for sync instruction from OpcodeToken0. -#define DECODE_D3D11_SB_ACCESS_COHERENCY_FLAGS(OperandToken0) ((OperandToken0)&D3D11_SB_ACCESS_COHERENCY_MASK) - -// ENCODER MACRO: Given a set of sync instruciton flags, encode them in OpcodeToken0. -#define ENCODE_D3D11_SB_ACCESS_COHERENCY_FLAGS(Flags) ((Flags)&D3D11_SB_ACCESS_COHERENCY_MASK) - -// Additional UAV access flags -#define D3D11_SB_RASTERIZER_ORDERED_ACCESS 0x00020000 - -// Resource flags mask. Use to retrieve all resource flags, including the order preserving counter. -#define D3D11_SB_RESOURCE_FLAGS_MASK (D3D11_SB_GLOBALLY_COHERENT_ACCESS|D3D11_SB_RASTERIZER_ORDERED_ACCESS|D3D11_SB_UAV_HAS_ORDER_PRESERVING_COUNTER) - -// DECODER MACRO: Retrieve UAV access flags for from OpcodeToken0. -#define DECODE_D3D11_SB_RESOURCE_FLAGS(OperandToken0) ((OperandToken0)&D3D11_SB_RESOURCE_FLAGS_MASK) - -// ENCODER MACRO: Given UAV access flags, encode them in OpcodeToken0. -#define ENCODE_D3D11_SB_RESOURCE_FLAGS(Flags) ((Flags)&D3D11_SB_RESOURCE_FLAGS_MASK) - -// ---------------------------------------------------------------------------- -// Raw Unordered Access View Declaration -// -// OpcodeToken0: -// -// [10:00] D3D11_SB_OPCODE_DCL_UNORDERED_ACCESS_VIEW_RAW -// [15:11] Ignored, 0 -// [16:16] D3D11_SB_GLOBALLY_COHERENT_ACCESS or 0 (LOCALLY_COHERENT) -// [17:17] D3D11_SB_RASTERIZER_ORDERED_ACCESS or 0 -// [23:18] Ignored, 0 -// [30:24] Instruction length in DWORDs including the opcode token. -// [31] 0 normally. 1 if extended operand definition, meaning next DWORD -// contains extended operand description. This dcl is currently not -// extended. -// -// OpcodeToken0 is followed by 1 operand on Shader Models 4.0 through 5.0: -// (1) an operand, starting with OperandToken0, defining which -// u# register (D3D11_SB_OPERAND_TYPE_UNORDERED_ACCESS_VIEW) is being declared. -// -// OpcodeToken0 is followed by 2 operands on Shader Model 5.1 and later: -// (1) an operand, starting with OperandToken0, defining which -// u# register (D3D11_SB_OPERAND_TYPE_UNORDERED_ACCESS_VIEW) is being declared. -// The indexing dimension for the register must be D3D10_SB_OPERAND_INDEX_DIMENSION_3D, -// and the meaning of the index dimensions are as follows: (u[:]) -// 1 : variable ID being declared -// 2 : the lower bound of the range of UAV's in the space -// 3 : the upper bound (inclusive) of this range -// As opposed to when the u# is used in shader instructions, where the register -// must be D3D10_SB_OPERAND_INDEX_DIMENSION_2D, and the meaning of the index -// dimensions are as follows: (u[]): -// 1 : variable ID being used (matches dcl) -// 2 : absolute index of uav within space (may be dynamically indexed) -// (2) a DWORD indicating the space index. -// -// ---------------------------------------------------------------------------- - -// ---------------------------------------------------------------------------- -// Structured Unordered Access View Declaration -// -// OpcodeToken0: -// -// [10:00] D3D11_SB_OPCODE_DCL_UNORDERED_ACCESS_VIEW_STRUCTURED -// [15:11] Ignored, 0 -// [16:16] D3D11_SB_GLOBALLY_COHERENT_ACCESS or 0 (LOCALLY_COHERENT) -// [17:17] D3D11_SB_RASTERIZER_ORDERED_ACCESS or 0 -// [22:18] Ignored, 0 -// [23:23] D3D11_SB_UAV_HAS_ORDER_PRESERVING_COUNTER or 0 -// -// The presence of this flag means that if a UAV is bound to the -// corresponding slot, it must have been created with -// D3D11_BUFFER_UAV_FLAG_COUNTER at the API. Also, the shader -// can contain either imm_atomic_alloc or _consume instructions -// operating on the given UAV. -// -// If this flag is not present, the shader can still contain -// either imm_atomic_alloc or imm_atomic_consume instructions for -// this UAV. But if such instructions are present in this case, -// and a UAV is bound corresponding slot, it must have been created -// with the D3D11_BUFFER_UAV_FLAG_APPEND flag at the API. -// Append buffers have a counter as well, but values returned -// to the shader are only valid for the lifetime of the shader -// invocation. -// -// [30:24] Instruction length in DWORDs including the opcode token. -// [31] 0 normally. 1 if extended operand definition, meaning next DWORD -// contains extended operand description. This dcl is currently not -// extended. -// -// OpcodeToken0 is followed by 2 operands: -// (1) an operand, starting with OperandToken0, defining which -// u# register (D3D11_SB_OPERAND_TYPE_UNORDERED_ACCESS_VIEW) is -// being declared. -// (2) a DWORD indicating UINT32 byte stride -// -// OpcodeToken0 is followed by 3 operands on Shader Model 5.1 and later: -// (1) an operand, starting with OperandToken0, defining which -// u# register (D3D11_SB_OPERAND_TYPE_UNORDERED_ACCESS_VIEW) is being declared. -// The indexing dimension for the register must be D3D10_SB_OPERAND_INDEX_DIMENSION_3D, -// and the meaning of the index dimensions are as follows: (u[:]) -// 1 : variable ID being declared -// 2 : the lower bound of the range of UAV's in the space -// 3 : the upper bound (inclusive) of this range -// As opposed to when the u# is used in shader instructions, where the register -// must be D3D10_SB_OPERAND_INDEX_DIMENSION_2D, and the meaning of the index -// dimensions are as follows: (u[]): -// 1 : variable ID being used (matches dcl) -// 2 : absolute index of uav within space (may be dynamically indexed) -// (2) a DWORD indicating UINT32 byte stride -// (3) a DWORD indicating the space index. -// -// ---------------------------------------------------------------------------- -// UAV flags -#define D3D11_SB_UAV_HAS_ORDER_PRESERVING_COUNTER 0x00800000 -#define D3D11_SB_UAV_FLAGS_MASK 0x00800000 - -// DECODER MACRO: Retrieve flags about UAV from OpcodeToken0. -#define DECODE_D3D11_SB_UAV_FLAGS(OperandToken0) ((OperandToken0)&D3D11_SB_UAV_FLAGS_MASK) - -// ENCODER MACRO: Given a set of UAV flags, encode them in OpcodeToken0. -#define ENCODE_D3D11_SB_UAV_FLAGS(Flags) ((Flags)&D3D11_SB_UAV_FLAGS_MASK) - -// ---------------------------------------------------------------------------- -// Raw Thread Group Shared Memory Declaration -// -// OpcodeToken0: -// -// [10:00] D3D11_SB_OPCODE_DCL_THREAD_GROUP_SHARED_MEMORY_RAW -// [23:11] Ignored, 0 -// [30:24] Instruction length in DWORDs including the opcode token. -// [31] 0 normally. 1 if extended operand definition, meaning next DWORD -// contains extended operand description. This dcl is currently not -// extended. -// -// OpcodeToken0 is followed by 2 operands: -// (1) an operand, starting with OperandToken0, defining which -// g# register (D3D11_SB_OPERAND_TYPE_THREAD_GROUP_SHARED_MEMORY) is being declared. -// (2) a DWORD indicating the byte count, which must be a multiple of 4. -// -// ---------------------------------------------------------------------------- - -// ---------------------------------------------------------------------------- -// Structured Thread Group Shared Memory Declaration -// -// OpcodeToken0: -// -// [10:00] D3D11_SB_OPCODE_DCL_THREAD_GROUP_SHARED_MEMORY_STRUCTURED -// [23:11] Ignored, 0 -// [30:24] Instruction length in DWORDs including the opcode token. -// [31] 0 normally. 1 if extended operand definition, meaning next DWORD -// contains extended operand description. This dcl is currently not -// extended. -// -// OpcodeToken0 is followed by 3 operands: -// (1) an operand, starting with OperandToken0, defining which -// g# register (D3D11_SB_OPERAND_TYPE_THREAD_GROUP_SHARED_MEMORY) is -// being declared. -// (2) a DWORD indicating UINT32 struct byte stride -// (3) a DWORD indicating UINT32 struct count -// -// ---------------------------------------------------------------------------- - -// ---------------------------------------------------------------------------- -// Raw Shader Resource View Declaration -// -// OpcodeToken0: -// -// [10:00] D3D11_SB_OPCODE_DCL_RESOURCE_RAW -// [23:11] Ignored, 0 -// [30:24] Instruction length in DWORDs including the opcode token. -// [31] 0 normally. 1 if extended operand definition, meaning next DWORD -// contains extended operand description. This dcl is currently not -// extended. -// -// OpcodeToken0 is followed by 1 operand: -// (1) an operand, starting with OperandToken0, defining which -// t# register (D3D10_SB_OPERAND_TYPE_RESOURCE) is being declared. -// -// OpcodeToken0 is followed by 2 operands on Shader Model 5.1 and later: -// (1) an operand, starting with OperandToken0, defining which -// t# register (D3D10_SB_OPERAND_TYPE_RESOURCE) is being declared. -// The indexing dimension for the register must be D3D10_SB_OPERAND_INDEX_DIMENSION_3D, -// and the meaning of the index dimensions are as follows: (t[:]) -// 1 : variable ID being declared -// 2 : the lower bound of the range of resources in the space -// 3 : the upper bound (inclusive) of this range -// As opposed to when the t# is used in shader instructions, where the register -// must be D3D10_SB_OPERAND_INDEX_DIMENSION_2D, and the meaning of the index -// dimensions are as follows: (t[]): -// 1 : variable ID being used (matches dcl) -// 2 : absolute index of resource within space (may be dynamically indexed) -// (2) a DWORD indicating the space index. -// -// ---------------------------------------------------------------------------- - -// ---------------------------------------------------------------------------- -// Structured Shader Resource View Declaration -// -// OpcodeToken0: -// -// [10:00] D3D11_SB_OPCODE_DCL_RESOURCE_STRUCTURED -// [23:11] Ignored, 0 -// [30:24] Instruction length in DWORDs including the opcode token. -// [31] 0 normally. 1 if extended operand definition, meaning next DWORD -// contains extended operand description. This dcl is currently not -// extended. -// -// OpcodeToken0 is followed by 2 operands: -// (1) an operand, starting with OperandToken0, defining which -// g# register (D3D10_SB_OPERAND_TYPE_RESOURCE) is -// being declared. -// (2) a DWORD indicating UINT32 struct byte stride -// -// OpcodeToken0 is followed by 3 operands on Shader Model 5.1 and later: -// (1) an operand, starting with OperandToken0, defining which -// t# register (D3D10_SB_OPERAND_TYPE_RESOURCE) is being declared. -// The indexing dimension for the register must be D3D10_SB_OPERAND_INDEX_DIMENSION_3D, -// and the meaning of the index dimensions are as follows: (t[:]) -// 1 : variable ID being declared -// 2 : the lower bound of the range of resources in the space -// 3 : the upper bound (inclusive) of this range -// As opposed to when the t# is used in shader instructions, where the register -// must be D3D10_SB_OPERAND_INDEX_DIMENSION_2D, and the meaning of the index -// dimensions are as follows: (t[]): -// 1 : variable ID being used (matches dcl) -// 2 : absolute index of resource within space (may be dynamically indexed) -// (2) a DWORD indicating UINT32 struct byte stride -// (3) a DWORD indicating the space index. -// -// ---------------------------------------------------------------------------- - -#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) */ -#pragma endregion diff --git a/Juliet/src/Graphics/D3D12/AgilitySDK/VERSION.txt b/Juliet/src/Graphics/D3D12/AgilitySDK/VERSION.txt deleted file mode 100644 index 1412037..0000000 --- a/Juliet/src/Graphics/D3D12/AgilitySDK/VERSION.txt +++ /dev/null @@ -1,5 +0,0 @@ -https://www.nuget.org/packages/Microsoft.Direct3D.D3D12/1.615.1 -Version 615 - - -https://devblogs.microsoft.com/directx/directx12agility/ \ No newline at end of file diff --git a/Juliet/src/Graphics/D3D12/AgilitySDK/d3d12.h b/Juliet/src/Graphics/D3D12/AgilitySDK/d3d12.h deleted file mode 100644 index f76e8b6..0000000 --- a/Juliet/src/Graphics/D3D12/AgilitySDK/d3d12.h +++ /dev/null @@ -1,34333 +0,0 @@ -/*------------------------------------------------------------------------------------- - * - * Copyright (c) Microsoft Corporation - * Licensed under the MIT license - * - *-------------------------------------------------------------------------------------*/ - -/* this ALWAYS GENERATED file contains the definitions for the interfaces */ - - /* File created by MIDL compiler version 8.01.0628 */ - -/* verify that the version is high enough to compile this file*/ -#ifndef __REQUIRED_RPCNDR_H_VERSION__ -#define __REQUIRED_RPCNDR_H_VERSION__ 500 -#endif - -/* verify that the version is high enough to compile this file*/ -#ifndef __REQUIRED_RPCSAL_H_VERSION__ -#define __REQUIRED_RPCSAL_H_VERSION__ 100 -#endif - -#include "rpc.h" -#include "rpcndr.h" - -#ifndef __RPCNDR_H_VERSION__ -#error this stub requires an updated version of -#endif /* __RPCNDR_H_VERSION__ */ - -#ifndef COM_NO_WINDOWS_H -#include "windows.h" -#include "ole2.h" -#endif /*COM_NO_WINDOWS_H*/ - -#ifndef __d3d12_h__ -#define __d3d12_h__ - -#if defined(_MSC_VER) && (_MSC_VER >= 1020) -#pragma once -#endif - -#ifndef DECLSPEC_XFGVIRT -#if defined(_CONTROL_FLOW_GUARD_XFG) -#define DECLSPEC_XFGVIRT(base, func) __declspec(xfg_virtual(base, func)) -#else -#define DECLSPEC_XFGVIRT(base, func) -#endif -#endif - -/* Forward Declarations */ - -#ifndef __ID3D12Object_FWD_DEFINED__ -#define __ID3D12Object_FWD_DEFINED__ -typedef interface ID3D12Object ID3D12Object; - -#endif /* __ID3D12Object_FWD_DEFINED__ */ - -#ifndef __ID3D12DeviceChild_FWD_DEFINED__ -#define __ID3D12DeviceChild_FWD_DEFINED__ -typedef interface ID3D12DeviceChild ID3D12DeviceChild; - -#endif /* __ID3D12DeviceChild_FWD_DEFINED__ */ - -#ifndef __ID3D12RootSignature_FWD_DEFINED__ -#define __ID3D12RootSignature_FWD_DEFINED__ -typedef interface ID3D12RootSignature ID3D12RootSignature; - -#endif /* __ID3D12RootSignature_FWD_DEFINED__ */ - -#ifndef __ID3D12RootSignatureDeserializer_FWD_DEFINED__ -#define __ID3D12RootSignatureDeserializer_FWD_DEFINED__ -typedef interface ID3D12RootSignatureDeserializer ID3D12RootSignatureDeserializer; - -#endif /* __ID3D12RootSignatureDeserializer_FWD_DEFINED__ */ - -#ifndef __ID3D12VersionedRootSignatureDeserializer_FWD_DEFINED__ -#define __ID3D12VersionedRootSignatureDeserializer_FWD_DEFINED__ -typedef interface ID3D12VersionedRootSignatureDeserializer ID3D12VersionedRootSignatureDeserializer; - -#endif /* __ID3D12VersionedRootSignatureDeserializer_FWD_DEFINED__ */ - -#ifndef __ID3D12Pageable_FWD_DEFINED__ -#define __ID3D12Pageable_FWD_DEFINED__ -typedef interface ID3D12Pageable ID3D12Pageable; - -#endif /* __ID3D12Pageable_FWD_DEFINED__ */ - -#ifndef __ID3D12Heap_FWD_DEFINED__ -#define __ID3D12Heap_FWD_DEFINED__ -typedef interface ID3D12Heap ID3D12Heap; - -#endif /* __ID3D12Heap_FWD_DEFINED__ */ - -#ifndef __ID3D12Resource_FWD_DEFINED__ -#define __ID3D12Resource_FWD_DEFINED__ -typedef interface ID3D12Resource ID3D12Resource; - -#endif /* __ID3D12Resource_FWD_DEFINED__ */ - -#ifndef __ID3D12CommandAllocator_FWD_DEFINED__ -#define __ID3D12CommandAllocator_FWD_DEFINED__ -typedef interface ID3D12CommandAllocator ID3D12CommandAllocator; - -#endif /* __ID3D12CommandAllocator_FWD_DEFINED__ */ - -#ifndef __ID3D12Fence_FWD_DEFINED__ -#define __ID3D12Fence_FWD_DEFINED__ -typedef interface ID3D12Fence ID3D12Fence; - -#endif /* __ID3D12Fence_FWD_DEFINED__ */ - -#ifndef __ID3D12Fence1_FWD_DEFINED__ -#define __ID3D12Fence1_FWD_DEFINED__ -typedef interface ID3D12Fence1 ID3D12Fence1; - -#endif /* __ID3D12Fence1_FWD_DEFINED__ */ - -#ifndef __ID3D12PipelineState_FWD_DEFINED__ -#define __ID3D12PipelineState_FWD_DEFINED__ -typedef interface ID3D12PipelineState ID3D12PipelineState; - -#endif /* __ID3D12PipelineState_FWD_DEFINED__ */ - -#ifndef __ID3D12DescriptorHeap_FWD_DEFINED__ -#define __ID3D12DescriptorHeap_FWD_DEFINED__ -typedef interface ID3D12DescriptorHeap ID3D12DescriptorHeap; - -#endif /* __ID3D12DescriptorHeap_FWD_DEFINED__ */ - -#ifndef __ID3D12QueryHeap_FWD_DEFINED__ -#define __ID3D12QueryHeap_FWD_DEFINED__ -typedef interface ID3D12QueryHeap ID3D12QueryHeap; - -#endif /* __ID3D12QueryHeap_FWD_DEFINED__ */ - -#ifndef __ID3D12CommandSignature_FWD_DEFINED__ -#define __ID3D12CommandSignature_FWD_DEFINED__ -typedef interface ID3D12CommandSignature ID3D12CommandSignature; - -#endif /* __ID3D12CommandSignature_FWD_DEFINED__ */ - -#ifndef __ID3D12CommandList_FWD_DEFINED__ -#define __ID3D12CommandList_FWD_DEFINED__ -typedef interface ID3D12CommandList ID3D12CommandList; - -#endif /* __ID3D12CommandList_FWD_DEFINED__ */ - -#ifndef __ID3D12GraphicsCommandList_FWD_DEFINED__ -#define __ID3D12GraphicsCommandList_FWD_DEFINED__ -typedef interface ID3D12GraphicsCommandList ID3D12GraphicsCommandList; - -#endif /* __ID3D12GraphicsCommandList_FWD_DEFINED__ */ - -#ifndef __ID3D12GraphicsCommandList1_FWD_DEFINED__ -#define __ID3D12GraphicsCommandList1_FWD_DEFINED__ -typedef interface ID3D12GraphicsCommandList1 ID3D12GraphicsCommandList1; - -#endif /* __ID3D12GraphicsCommandList1_FWD_DEFINED__ */ - -#ifndef __ID3D12GraphicsCommandList2_FWD_DEFINED__ -#define __ID3D12GraphicsCommandList2_FWD_DEFINED__ -typedef interface ID3D12GraphicsCommandList2 ID3D12GraphicsCommandList2; - -#endif /* __ID3D12GraphicsCommandList2_FWD_DEFINED__ */ - -#ifndef __ID3D12CommandQueue_FWD_DEFINED__ -#define __ID3D12CommandQueue_FWD_DEFINED__ -typedef interface ID3D12CommandQueue ID3D12CommandQueue; - -#endif /* __ID3D12CommandQueue_FWD_DEFINED__ */ - -#ifndef __ID3D12Device_FWD_DEFINED__ -#define __ID3D12Device_FWD_DEFINED__ -typedef interface ID3D12Device ID3D12Device; - -#endif /* __ID3D12Device_FWD_DEFINED__ */ - -#ifndef __ID3D12PipelineLibrary_FWD_DEFINED__ -#define __ID3D12PipelineLibrary_FWD_DEFINED__ -typedef interface ID3D12PipelineLibrary ID3D12PipelineLibrary; - -#endif /* __ID3D12PipelineLibrary_FWD_DEFINED__ */ - -#ifndef __ID3D12PipelineLibrary1_FWD_DEFINED__ -#define __ID3D12PipelineLibrary1_FWD_DEFINED__ -typedef interface ID3D12PipelineLibrary1 ID3D12PipelineLibrary1; - -#endif /* __ID3D12PipelineLibrary1_FWD_DEFINED__ */ - -#ifndef __ID3D12Device1_FWD_DEFINED__ -#define __ID3D12Device1_FWD_DEFINED__ -typedef interface ID3D12Device1 ID3D12Device1; - -#endif /* __ID3D12Device1_FWD_DEFINED__ */ - -#ifndef __ID3D12Device2_FWD_DEFINED__ -#define __ID3D12Device2_FWD_DEFINED__ -typedef interface ID3D12Device2 ID3D12Device2; - -#endif /* __ID3D12Device2_FWD_DEFINED__ */ - -#ifndef __ID3D12Device3_FWD_DEFINED__ -#define __ID3D12Device3_FWD_DEFINED__ -typedef interface ID3D12Device3 ID3D12Device3; - -#endif /* __ID3D12Device3_FWD_DEFINED__ */ - -#ifndef __ID3D12ProtectedSession_FWD_DEFINED__ -#define __ID3D12ProtectedSession_FWD_DEFINED__ -typedef interface ID3D12ProtectedSession ID3D12ProtectedSession; - -#endif /* __ID3D12ProtectedSession_FWD_DEFINED__ */ - -#ifndef __ID3D12ProtectedResourceSession_FWD_DEFINED__ -#define __ID3D12ProtectedResourceSession_FWD_DEFINED__ -typedef interface ID3D12ProtectedResourceSession ID3D12ProtectedResourceSession; - -#endif /* __ID3D12ProtectedResourceSession_FWD_DEFINED__ */ - -#ifndef __ID3D12Device4_FWD_DEFINED__ -#define __ID3D12Device4_FWD_DEFINED__ -typedef interface ID3D12Device4 ID3D12Device4; - -#endif /* __ID3D12Device4_FWD_DEFINED__ */ - -#ifndef __ID3D12LifetimeOwner_FWD_DEFINED__ -#define __ID3D12LifetimeOwner_FWD_DEFINED__ -typedef interface ID3D12LifetimeOwner ID3D12LifetimeOwner; - -#endif /* __ID3D12LifetimeOwner_FWD_DEFINED__ */ - -#ifndef __ID3D12SwapChainAssistant_FWD_DEFINED__ -#define __ID3D12SwapChainAssistant_FWD_DEFINED__ -typedef interface ID3D12SwapChainAssistant ID3D12SwapChainAssistant; - -#endif /* __ID3D12SwapChainAssistant_FWD_DEFINED__ */ - -#ifndef __ID3D12LifetimeTracker_FWD_DEFINED__ -#define __ID3D12LifetimeTracker_FWD_DEFINED__ -typedef interface ID3D12LifetimeTracker ID3D12LifetimeTracker; - -#endif /* __ID3D12LifetimeTracker_FWD_DEFINED__ */ - -#ifndef __ID3D12StateObject_FWD_DEFINED__ -#define __ID3D12StateObject_FWD_DEFINED__ -typedef interface ID3D12StateObject ID3D12StateObject; - -#endif /* __ID3D12StateObject_FWD_DEFINED__ */ - -#ifndef __ID3D12StateObjectProperties_FWD_DEFINED__ -#define __ID3D12StateObjectProperties_FWD_DEFINED__ -typedef interface ID3D12StateObjectProperties ID3D12StateObjectProperties; - -#endif /* __ID3D12StateObjectProperties_FWD_DEFINED__ */ - -#ifndef __ID3D12StateObjectProperties1_FWD_DEFINED__ -#define __ID3D12StateObjectProperties1_FWD_DEFINED__ -typedef interface ID3D12StateObjectProperties1 ID3D12StateObjectProperties1; - -#endif /* __ID3D12StateObjectProperties1_FWD_DEFINED__ */ - -#ifndef __ID3D12WorkGraphProperties_FWD_DEFINED__ -#define __ID3D12WorkGraphProperties_FWD_DEFINED__ -typedef interface ID3D12WorkGraphProperties ID3D12WorkGraphProperties; - -#endif /* __ID3D12WorkGraphProperties_FWD_DEFINED__ */ - -#ifndef __ID3D12Device5_FWD_DEFINED__ -#define __ID3D12Device5_FWD_DEFINED__ -typedef interface ID3D12Device5 ID3D12Device5; - -#endif /* __ID3D12Device5_FWD_DEFINED__ */ - -#ifndef __ID3D12DeviceRemovedExtendedDataSettings_FWD_DEFINED__ -#define __ID3D12DeviceRemovedExtendedDataSettings_FWD_DEFINED__ -typedef interface ID3D12DeviceRemovedExtendedDataSettings ID3D12DeviceRemovedExtendedDataSettings; - -#endif /* __ID3D12DeviceRemovedExtendedDataSettings_FWD_DEFINED__ */ - -#ifndef __ID3D12DeviceRemovedExtendedDataSettings1_FWD_DEFINED__ -#define __ID3D12DeviceRemovedExtendedDataSettings1_FWD_DEFINED__ -typedef interface ID3D12DeviceRemovedExtendedDataSettings1 ID3D12DeviceRemovedExtendedDataSettings1; - -#endif /* __ID3D12DeviceRemovedExtendedDataSettings1_FWD_DEFINED__ */ - -#ifndef __ID3D12DeviceRemovedExtendedDataSettings2_FWD_DEFINED__ -#define __ID3D12DeviceRemovedExtendedDataSettings2_FWD_DEFINED__ -typedef interface ID3D12DeviceRemovedExtendedDataSettings2 ID3D12DeviceRemovedExtendedDataSettings2; - -#endif /* __ID3D12DeviceRemovedExtendedDataSettings2_FWD_DEFINED__ */ - -#ifndef __ID3D12DeviceRemovedExtendedData_FWD_DEFINED__ -#define __ID3D12DeviceRemovedExtendedData_FWD_DEFINED__ -typedef interface ID3D12DeviceRemovedExtendedData ID3D12DeviceRemovedExtendedData; - -#endif /* __ID3D12DeviceRemovedExtendedData_FWD_DEFINED__ */ - -#ifndef __ID3D12DeviceRemovedExtendedData1_FWD_DEFINED__ -#define __ID3D12DeviceRemovedExtendedData1_FWD_DEFINED__ -typedef interface ID3D12DeviceRemovedExtendedData1 ID3D12DeviceRemovedExtendedData1; - -#endif /* __ID3D12DeviceRemovedExtendedData1_FWD_DEFINED__ */ - -#ifndef __ID3D12DeviceRemovedExtendedData2_FWD_DEFINED__ -#define __ID3D12DeviceRemovedExtendedData2_FWD_DEFINED__ -typedef interface ID3D12DeviceRemovedExtendedData2 ID3D12DeviceRemovedExtendedData2; - -#endif /* __ID3D12DeviceRemovedExtendedData2_FWD_DEFINED__ */ - -#ifndef __ID3D12Device6_FWD_DEFINED__ -#define __ID3D12Device6_FWD_DEFINED__ -typedef interface ID3D12Device6 ID3D12Device6; - -#endif /* __ID3D12Device6_FWD_DEFINED__ */ - -#ifndef __ID3D12ProtectedResourceSession1_FWD_DEFINED__ -#define __ID3D12ProtectedResourceSession1_FWD_DEFINED__ -typedef interface ID3D12ProtectedResourceSession1 ID3D12ProtectedResourceSession1; - -#endif /* __ID3D12ProtectedResourceSession1_FWD_DEFINED__ */ - -#ifndef __ID3D12Device7_FWD_DEFINED__ -#define __ID3D12Device7_FWD_DEFINED__ -typedef interface ID3D12Device7 ID3D12Device7; - -#endif /* __ID3D12Device7_FWD_DEFINED__ */ - -#ifndef __ID3D12Device8_FWD_DEFINED__ -#define __ID3D12Device8_FWD_DEFINED__ -typedef interface ID3D12Device8 ID3D12Device8; - -#endif /* __ID3D12Device8_FWD_DEFINED__ */ - -#ifndef __ID3D12Resource1_FWD_DEFINED__ -#define __ID3D12Resource1_FWD_DEFINED__ -typedef interface ID3D12Resource1 ID3D12Resource1; - -#endif /* __ID3D12Resource1_FWD_DEFINED__ */ - -#ifndef __ID3D12Resource2_FWD_DEFINED__ -#define __ID3D12Resource2_FWD_DEFINED__ -typedef interface ID3D12Resource2 ID3D12Resource2; - -#endif /* __ID3D12Resource2_FWD_DEFINED__ */ - -#ifndef __ID3D12Heap1_FWD_DEFINED__ -#define __ID3D12Heap1_FWD_DEFINED__ -typedef interface ID3D12Heap1 ID3D12Heap1; - -#endif /* __ID3D12Heap1_FWD_DEFINED__ */ - -#ifndef __ID3D12GraphicsCommandList3_FWD_DEFINED__ -#define __ID3D12GraphicsCommandList3_FWD_DEFINED__ -typedef interface ID3D12GraphicsCommandList3 ID3D12GraphicsCommandList3; - -#endif /* __ID3D12GraphicsCommandList3_FWD_DEFINED__ */ - -#ifndef __ID3D12MetaCommand_FWD_DEFINED__ -#define __ID3D12MetaCommand_FWD_DEFINED__ -typedef interface ID3D12MetaCommand ID3D12MetaCommand; - -#endif /* __ID3D12MetaCommand_FWD_DEFINED__ */ - -#ifndef __ID3D12GraphicsCommandList4_FWD_DEFINED__ -#define __ID3D12GraphicsCommandList4_FWD_DEFINED__ -typedef interface ID3D12GraphicsCommandList4 ID3D12GraphicsCommandList4; - -#endif /* __ID3D12GraphicsCommandList4_FWD_DEFINED__ */ - -#ifndef __ID3D12ShaderCacheSession_FWD_DEFINED__ -#define __ID3D12ShaderCacheSession_FWD_DEFINED__ -typedef interface ID3D12ShaderCacheSession ID3D12ShaderCacheSession; - -#endif /* __ID3D12ShaderCacheSession_FWD_DEFINED__ */ - -#ifndef __ID3D12Device9_FWD_DEFINED__ -#define __ID3D12Device9_FWD_DEFINED__ -typedef interface ID3D12Device9 ID3D12Device9; - -#endif /* __ID3D12Device9_FWD_DEFINED__ */ - -#ifndef __ID3D12Device10_FWD_DEFINED__ -#define __ID3D12Device10_FWD_DEFINED__ -typedef interface ID3D12Device10 ID3D12Device10; - -#endif /* __ID3D12Device10_FWD_DEFINED__ */ - -#ifndef __ID3D12Device11_FWD_DEFINED__ -#define __ID3D12Device11_FWD_DEFINED__ -typedef interface ID3D12Device11 ID3D12Device11; - -#endif /* __ID3D12Device11_FWD_DEFINED__ */ - -#ifndef __ID3D12Device12_FWD_DEFINED__ -#define __ID3D12Device12_FWD_DEFINED__ -typedef interface ID3D12Device12 ID3D12Device12; - -#endif /* __ID3D12Device12_FWD_DEFINED__ */ - -#ifndef __ID3D12Device13_FWD_DEFINED__ -#define __ID3D12Device13_FWD_DEFINED__ -typedef interface ID3D12Device13 ID3D12Device13; - -#endif /* __ID3D12Device13_FWD_DEFINED__ */ - -#ifndef __ID3D12Device14_FWD_DEFINED__ -#define __ID3D12Device14_FWD_DEFINED__ -typedef interface ID3D12Device14 ID3D12Device14; - -#endif /* __ID3D12Device14_FWD_DEFINED__ */ - -#ifndef __ID3D12VirtualizationGuestDevice_FWD_DEFINED__ -#define __ID3D12VirtualizationGuestDevice_FWD_DEFINED__ -typedef interface ID3D12VirtualizationGuestDevice ID3D12VirtualizationGuestDevice; - -#endif /* __ID3D12VirtualizationGuestDevice_FWD_DEFINED__ */ - -#ifndef __ID3D12Tools_FWD_DEFINED__ -#define __ID3D12Tools_FWD_DEFINED__ -typedef interface ID3D12Tools ID3D12Tools; - -#endif /* __ID3D12Tools_FWD_DEFINED__ */ - -#ifndef __ID3D12Tools1_FWD_DEFINED__ -#define __ID3D12Tools1_FWD_DEFINED__ -typedef interface ID3D12Tools1 ID3D12Tools1; - -#endif /* __ID3D12Tools1_FWD_DEFINED__ */ - -#ifndef __ID3D12PageableTools_FWD_DEFINED__ -#define __ID3D12PageableTools_FWD_DEFINED__ -typedef interface ID3D12PageableTools ID3D12PageableTools; - -#endif /* __ID3D12PageableTools_FWD_DEFINED__ */ - -#ifndef __ID3D12DeviceTools_FWD_DEFINED__ -#define __ID3D12DeviceTools_FWD_DEFINED__ -typedef interface ID3D12DeviceTools ID3D12DeviceTools; - -#endif /* __ID3D12DeviceTools_FWD_DEFINED__ */ - -#ifndef __ID3D12SDKConfiguration_FWD_DEFINED__ -#define __ID3D12SDKConfiguration_FWD_DEFINED__ -typedef interface ID3D12SDKConfiguration ID3D12SDKConfiguration; - -#endif /* __ID3D12SDKConfiguration_FWD_DEFINED__ */ - -#ifndef __ID3D12SDKConfiguration1_FWD_DEFINED__ -#define __ID3D12SDKConfiguration1_FWD_DEFINED__ -typedef interface ID3D12SDKConfiguration1 ID3D12SDKConfiguration1; - -#endif /* __ID3D12SDKConfiguration1_FWD_DEFINED__ */ - -#ifndef __ID3D12DeviceFactory_FWD_DEFINED__ -#define __ID3D12DeviceFactory_FWD_DEFINED__ -typedef interface ID3D12DeviceFactory ID3D12DeviceFactory; - -#endif /* __ID3D12DeviceFactory_FWD_DEFINED__ */ - -#ifndef __ID3D12DeviceConfiguration_FWD_DEFINED__ -#define __ID3D12DeviceConfiguration_FWD_DEFINED__ -typedef interface ID3D12DeviceConfiguration ID3D12DeviceConfiguration; - -#endif /* __ID3D12DeviceConfiguration_FWD_DEFINED__ */ - -#ifndef __ID3D12DeviceConfiguration1_FWD_DEFINED__ -#define __ID3D12DeviceConfiguration1_FWD_DEFINED__ -typedef interface ID3D12DeviceConfiguration1 ID3D12DeviceConfiguration1; - -#endif /* __ID3D12DeviceConfiguration1_FWD_DEFINED__ */ - -#ifndef __ID3D12GraphicsCommandList5_FWD_DEFINED__ -#define __ID3D12GraphicsCommandList5_FWD_DEFINED__ -typedef interface ID3D12GraphicsCommandList5 ID3D12GraphicsCommandList5; - -#endif /* __ID3D12GraphicsCommandList5_FWD_DEFINED__ */ - -#ifndef __ID3D12GraphicsCommandList6_FWD_DEFINED__ -#define __ID3D12GraphicsCommandList6_FWD_DEFINED__ -typedef interface ID3D12GraphicsCommandList6 ID3D12GraphicsCommandList6; - -#endif /* __ID3D12GraphicsCommandList6_FWD_DEFINED__ */ - -#ifndef __ID3D12GraphicsCommandList7_FWD_DEFINED__ -#define __ID3D12GraphicsCommandList7_FWD_DEFINED__ -typedef interface ID3D12GraphicsCommandList7 ID3D12GraphicsCommandList7; - -#endif /* __ID3D12GraphicsCommandList7_FWD_DEFINED__ */ - -#ifndef __ID3D12GraphicsCommandList8_FWD_DEFINED__ -#define __ID3D12GraphicsCommandList8_FWD_DEFINED__ -typedef interface ID3D12GraphicsCommandList8 ID3D12GraphicsCommandList8; - -#endif /* __ID3D12GraphicsCommandList8_FWD_DEFINED__ */ - -#ifndef __ID3D12GraphicsCommandList9_FWD_DEFINED__ -#define __ID3D12GraphicsCommandList9_FWD_DEFINED__ -typedef interface ID3D12GraphicsCommandList9 ID3D12GraphicsCommandList9; - -#endif /* __ID3D12GraphicsCommandList9_FWD_DEFINED__ */ - -#ifndef __ID3D12GraphicsCommandList10_FWD_DEFINED__ -#define __ID3D12GraphicsCommandList10_FWD_DEFINED__ -typedef interface ID3D12GraphicsCommandList10 ID3D12GraphicsCommandList10; - -#endif /* __ID3D12GraphicsCommandList10_FWD_DEFINED__ */ - -#ifndef __ID3D12DSRDeviceFactory_FWD_DEFINED__ -#define __ID3D12DSRDeviceFactory_FWD_DEFINED__ -typedef interface ID3D12DSRDeviceFactory ID3D12DSRDeviceFactory; - -#endif /* __ID3D12DSRDeviceFactory_FWD_DEFINED__ */ - -#ifndef __ID3D12GBVDiagnostics_FWD_DEFINED__ -#define __ID3D12GBVDiagnostics_FWD_DEFINED__ -typedef interface ID3D12GBVDiagnostics ID3D12GBVDiagnostics; - -#endif /* __ID3D12GBVDiagnostics_FWD_DEFINED__ */ - -/* header files for imported files */ -#include "oaidl.h" -#include "ocidl.h" -#include "dxgicommon.h" -#include "dxgiformat.h" -#include "d3dcommon.h" - -#ifdef __cplusplus -extern "C"{ -#endif - -/* interface __MIDL_itf_d3d12_0000_0000 */ -/* [local] */ - -#include -#pragma region App Family -#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) -#ifndef _D3D12_CONSTANTS -#define _D3D12_CONSTANTS -#define D3D12_16BIT_INDEX_STRIP_CUT_VALUE ( 0xffff ) - -#define D3D12_32BIT_INDEX_STRIP_CUT_VALUE ( 0xffffffff ) - -#define D3D12_8BIT_INDEX_STRIP_CUT_VALUE ( 0xff ) - -#define D3D12_APPEND_ALIGNED_ELEMENT ( 0xffffffff ) - -#define D3D12_ARRAY_AXIS_ADDRESS_RANGE_BIT_COUNT ( 9 ) - -#define D3D12_CLIP_OR_CULL_DISTANCE_COUNT ( 8 ) - -#define D3D12_CLIP_OR_CULL_DISTANCE_ELEMENT_COUNT ( 2 ) - -#define D3D12_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT ( 14 ) - -#define D3D12_COMMONSHADER_CONSTANT_BUFFER_COMPONENTS ( 4 ) - -#define D3D12_COMMONSHADER_CONSTANT_BUFFER_COMPONENT_BIT_COUNT ( 32 ) - -#define D3D12_COMMONSHADER_CONSTANT_BUFFER_HW_SLOT_COUNT ( 15 ) - -#define D3D12_COMMONSHADER_CONSTANT_BUFFER_PARTIAL_UPDATE_EXTENTS_BYTE_ALIGNMENT ( 16 ) - -#define D3D12_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COMPONENTS ( 4 ) - -#define D3D12_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COUNT ( 15 ) - -#define D3D12_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READS_PER_INST ( 1 ) - -#define D3D12_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READ_PORTS ( 1 ) - -#define D3D12_COMMONSHADER_FLOWCONTROL_NESTING_LIMIT ( 64 ) - -#define D3D12_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COMPONENTS ( 4 ) - -#define D3D12_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COUNT ( 1 ) - -#define D3D12_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READS_PER_INST ( 1 ) - -#define D3D12_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READ_PORTS ( 1 ) - -#define D3D12_COMMONSHADER_IMMEDIATE_VALUE_COMPONENT_BIT_COUNT ( 32 ) - -#define D3D12_COMMONSHADER_INPUT_RESOURCE_REGISTER_COMPONENTS ( 1 ) - -#define D3D12_COMMONSHADER_INPUT_RESOURCE_REGISTER_COUNT ( 128 ) - -#define D3D12_COMMONSHADER_INPUT_RESOURCE_REGISTER_READS_PER_INST ( 1 ) - -#define D3D12_COMMONSHADER_INPUT_RESOURCE_REGISTER_READ_PORTS ( 1 ) - -#define D3D12_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT ( 128 ) - -#define D3D12_COMMONSHADER_SAMPLER_REGISTER_COMPONENTS ( 1 ) - -#define D3D12_COMMONSHADER_SAMPLER_REGISTER_COUNT ( 16 ) - -#define D3D12_COMMONSHADER_SAMPLER_REGISTER_READS_PER_INST ( 1 ) - -#define D3D12_COMMONSHADER_SAMPLER_REGISTER_READ_PORTS ( 1 ) - -#define D3D12_COMMONSHADER_SAMPLER_SLOT_COUNT ( 16 ) - -#define D3D12_COMMONSHADER_SUBROUTINE_NESTING_LIMIT ( 32 ) - -#define D3D12_COMMONSHADER_TEMP_REGISTER_COMPONENTS ( 4 ) - -#define D3D12_COMMONSHADER_TEMP_REGISTER_COMPONENT_BIT_COUNT ( 32 ) - -#define D3D12_COMMONSHADER_TEMP_REGISTER_COUNT ( 4096 ) - -#define D3D12_COMMONSHADER_TEMP_REGISTER_READS_PER_INST ( 3 ) - -#define D3D12_COMMONSHADER_TEMP_REGISTER_READ_PORTS ( 3 ) - -#define D3D12_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MAX ( 10 ) - -#define D3D12_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MIN ( -10 ) - -#define D3D12_COMMONSHADER_TEXEL_OFFSET_MAX_NEGATIVE ( -8 ) - -#define D3D12_COMMONSHADER_TEXEL_OFFSET_MAX_POSITIVE ( 7 ) - -#define D3D12_CONSTANT_BUFFER_DATA_PLACEMENT_ALIGNMENT ( 256 ) - -#define D3D12_CS_4_X_BUCKET00_MAX_BYTES_TGSM_WRITABLE_PER_THREAD ( 256 ) - -#define D3D12_CS_4_X_BUCKET00_MAX_NUM_THREADS_PER_GROUP ( 64 ) - -#define D3D12_CS_4_X_BUCKET01_MAX_BYTES_TGSM_WRITABLE_PER_THREAD ( 240 ) - -#define D3D12_CS_4_X_BUCKET01_MAX_NUM_THREADS_PER_GROUP ( 68 ) - -#define D3D12_CS_4_X_BUCKET02_MAX_BYTES_TGSM_WRITABLE_PER_THREAD ( 224 ) - -#define D3D12_CS_4_X_BUCKET02_MAX_NUM_THREADS_PER_GROUP ( 72 ) - -#define D3D12_CS_4_X_BUCKET03_MAX_BYTES_TGSM_WRITABLE_PER_THREAD ( 208 ) - -#define D3D12_CS_4_X_BUCKET03_MAX_NUM_THREADS_PER_GROUP ( 76 ) - -#define D3D12_CS_4_X_BUCKET04_MAX_BYTES_TGSM_WRITABLE_PER_THREAD ( 192 ) - -#define D3D12_CS_4_X_BUCKET04_MAX_NUM_THREADS_PER_GROUP ( 84 ) - -#define D3D12_CS_4_X_BUCKET05_MAX_BYTES_TGSM_WRITABLE_PER_THREAD ( 176 ) - -#define D3D12_CS_4_X_BUCKET05_MAX_NUM_THREADS_PER_GROUP ( 92 ) - -#define D3D12_CS_4_X_BUCKET06_MAX_BYTES_TGSM_WRITABLE_PER_THREAD ( 160 ) - -#define D3D12_CS_4_X_BUCKET06_MAX_NUM_THREADS_PER_GROUP ( 100 ) - -#define D3D12_CS_4_X_BUCKET07_MAX_BYTES_TGSM_WRITABLE_PER_THREAD ( 144 ) - -#define D3D12_CS_4_X_BUCKET07_MAX_NUM_THREADS_PER_GROUP ( 112 ) - -#define D3D12_CS_4_X_BUCKET08_MAX_BYTES_TGSM_WRITABLE_PER_THREAD ( 128 ) - -#define D3D12_CS_4_X_BUCKET08_MAX_NUM_THREADS_PER_GROUP ( 128 ) - -#define D3D12_CS_4_X_BUCKET09_MAX_BYTES_TGSM_WRITABLE_PER_THREAD ( 112 ) - -#define D3D12_CS_4_X_BUCKET09_MAX_NUM_THREADS_PER_GROUP ( 144 ) - -#define D3D12_CS_4_X_BUCKET10_MAX_BYTES_TGSM_WRITABLE_PER_THREAD ( 96 ) - -#define D3D12_CS_4_X_BUCKET10_MAX_NUM_THREADS_PER_GROUP ( 168 ) - -#define D3D12_CS_4_X_BUCKET11_MAX_BYTES_TGSM_WRITABLE_PER_THREAD ( 80 ) - -#define D3D12_CS_4_X_BUCKET11_MAX_NUM_THREADS_PER_GROUP ( 204 ) - -#define D3D12_CS_4_X_BUCKET12_MAX_BYTES_TGSM_WRITABLE_PER_THREAD ( 64 ) - -#define D3D12_CS_4_X_BUCKET12_MAX_NUM_THREADS_PER_GROUP ( 256 ) - -#define D3D12_CS_4_X_BUCKET13_MAX_BYTES_TGSM_WRITABLE_PER_THREAD ( 48 ) - -#define D3D12_CS_4_X_BUCKET13_MAX_NUM_THREADS_PER_GROUP ( 340 ) - -#define D3D12_CS_4_X_BUCKET14_MAX_BYTES_TGSM_WRITABLE_PER_THREAD ( 32 ) - -#define D3D12_CS_4_X_BUCKET14_MAX_NUM_THREADS_PER_GROUP ( 512 ) - -#define D3D12_CS_4_X_BUCKET15_MAX_BYTES_TGSM_WRITABLE_PER_THREAD ( 16 ) - -#define D3D12_CS_4_X_BUCKET15_MAX_NUM_THREADS_PER_GROUP ( 768 ) - -#define D3D12_CS_4_X_DISPATCH_MAX_THREAD_GROUPS_IN_Z_DIMENSION ( 1 ) - -#define D3D12_CS_4_X_RAW_UAV_BYTE_ALIGNMENT ( 256 ) - -#define D3D12_CS_4_X_THREAD_GROUP_MAX_THREADS_PER_GROUP ( 768 ) - -#define D3D12_CS_4_X_THREAD_GROUP_MAX_X ( 768 ) - -#define D3D12_CS_4_X_THREAD_GROUP_MAX_Y ( 768 ) - -#define D3D12_CS_4_X_UAV_REGISTER_COUNT ( 1 ) - -#define D3D12_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION ( 65535 ) - -#define D3D12_CS_TGSM_REGISTER_COUNT ( 8192 ) - -#define D3D12_CS_TGSM_REGISTER_READS_PER_INST ( 1 ) - -#define D3D12_CS_TGSM_RESOURCE_REGISTER_COMPONENTS ( 1 ) - -#define D3D12_CS_TGSM_RESOURCE_REGISTER_READ_PORTS ( 1 ) - -#define D3D12_CS_THREADGROUPID_REGISTER_COMPONENTS ( 3 ) - -#define D3D12_CS_THREADGROUPID_REGISTER_COUNT ( 1 ) - -#define D3D12_CS_THREADIDINGROUPFLATTENED_REGISTER_COMPONENTS ( 1 ) - -#define D3D12_CS_THREADIDINGROUPFLATTENED_REGISTER_COUNT ( 1 ) - -#define D3D12_CS_THREADIDINGROUP_REGISTER_COMPONENTS ( 3 ) - -#define D3D12_CS_THREADIDINGROUP_REGISTER_COUNT ( 1 ) - -#define D3D12_CS_THREADID_REGISTER_COMPONENTS ( 3 ) - -#define D3D12_CS_THREADID_REGISTER_COUNT ( 1 ) - -#define D3D12_CS_THREAD_GROUP_MAX_THREADS_PER_GROUP ( 1024 ) - -#define D3D12_CS_THREAD_GROUP_MAX_X ( 1024 ) - -#define D3D12_CS_THREAD_GROUP_MAX_Y ( 1024 ) - -#define D3D12_CS_THREAD_GROUP_MAX_Z ( 64 ) - -#define D3D12_CS_THREAD_GROUP_MIN_X ( 1 ) - -#define D3D12_CS_THREAD_GROUP_MIN_Y ( 1 ) - -#define D3D12_CS_THREAD_GROUP_MIN_Z ( 1 ) - -#define D3D12_CS_THREAD_LOCAL_TEMP_REGISTER_POOL ( 16384 ) - -#define D3D12_DEFAULT_BLEND_FACTOR_ALPHA ( 1.0f ) -#define D3D12_DEFAULT_BLEND_FACTOR_BLUE ( 1.0f ) -#define D3D12_DEFAULT_BLEND_FACTOR_GREEN ( 1.0f ) -#define D3D12_DEFAULT_BLEND_FACTOR_RED ( 1.0f ) -#define D3D12_DEFAULT_BORDER_COLOR_COMPONENT ( 0.0f ) -#define D3D12_DEFAULT_DEPTH_BIAS ( 0 ) - -#define D3D12_DEFAULT_DEPTH_BIAS_CLAMP ( 0.0f ) -#define D3D12_DEFAULT_MAX_ANISOTROPY ( 16 ) - -#define D3D12_DEFAULT_MIP_LOD_BIAS ( 0.0f ) -#define D3D12_DEFAULT_MSAA_RESOURCE_PLACEMENT_ALIGNMENT ( 4194304 ) - -#define D3D12_DEFAULT_RENDER_TARGET_ARRAY_INDEX ( 0 ) - -#define D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT ( 65536 ) - -#define D3D12_DEFAULT_SAMPLE_MASK ( 0xffffffff ) - -#define D3D12_DEFAULT_SCISSOR_ENDX ( 0 ) - -#define D3D12_DEFAULT_SCISSOR_ENDY ( 0 ) - -#define D3D12_DEFAULT_SCISSOR_STARTX ( 0 ) - -#define D3D12_DEFAULT_SCISSOR_STARTY ( 0 ) - -#define D3D12_DEFAULT_SLOPE_SCALED_DEPTH_BIAS ( 0.0f ) -#define D3D12_DEFAULT_STENCIL_READ_MASK ( 0xff ) - -#define D3D12_DEFAULT_STENCIL_REFERENCE ( 0 ) - -#define D3D12_DEFAULT_STENCIL_WRITE_MASK ( 0xff ) - -#define D3D12_DEFAULT_VIEWPORT_AND_SCISSORRECT_INDEX ( 0 ) - -#define D3D12_DEFAULT_VIEWPORT_HEIGHT ( 0 ) - -#define D3D12_DEFAULT_VIEWPORT_MAX_DEPTH ( 0.0f ) -#define D3D12_DEFAULT_VIEWPORT_MIN_DEPTH ( 0.0f ) -#define D3D12_DEFAULT_VIEWPORT_TOPLEFTX ( 0 ) - -#define D3D12_DEFAULT_VIEWPORT_TOPLEFTY ( 0 ) - -#define D3D12_DEFAULT_VIEWPORT_WIDTH ( 0 ) - -#define D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND ( 0xffffffff ) - -#define D3D12_DRIVER_RESERVED_REGISTER_SPACE_VALUES_END ( 0xfffffff7 ) - -#define D3D12_DRIVER_RESERVED_REGISTER_SPACE_VALUES_START ( 0xfffffff0 ) - -#define D3D12_DS_INPUT_CONTROL_POINTS_MAX_TOTAL_SCALARS ( 3968 ) - -#define D3D12_DS_INPUT_CONTROL_POINT_REGISTER_COMPONENTS ( 4 ) - -#define D3D12_DS_INPUT_CONTROL_POINT_REGISTER_COMPONENT_BIT_COUNT ( 32 ) - -#define D3D12_DS_INPUT_CONTROL_POINT_REGISTER_COUNT ( 32 ) - -#define D3D12_DS_INPUT_CONTROL_POINT_REGISTER_READS_PER_INST ( 2 ) - -#define D3D12_DS_INPUT_CONTROL_POINT_REGISTER_READ_PORTS ( 1 ) - -#define D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_COMPONENTS ( 3 ) - -#define D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_COMPONENT_BIT_COUNT ( 32 ) - -#define D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_COUNT ( 1 ) - -#define D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_READS_PER_INST ( 2 ) - -#define D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_READ_PORTS ( 1 ) - -#define D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_COMPONENTS ( 4 ) - -#define D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_COMPONENT_BIT_COUNT ( 32 ) - -#define D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_COUNT ( 32 ) - -#define D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_READS_PER_INST ( 2 ) - -#define D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_READ_PORTS ( 1 ) - -#define D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENTS ( 1 ) - -#define D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENT_BIT_COUNT ( 32 ) - -#define D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_COUNT ( 1 ) - -#define D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_READS_PER_INST ( 2 ) - -#define D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_READ_PORTS ( 1 ) - -#define D3D12_DS_OUTPUT_REGISTER_COMPONENTS ( 4 ) - -#define D3D12_DS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT ( 32 ) - -#define D3D12_DS_OUTPUT_REGISTER_COUNT ( 32 ) - -#define D3D12_FLOAT16_FUSED_TOLERANCE_IN_ULP ( 0.6 ) -#define D3D12_FLOAT32_MAX ( 3.402823466e+38f ) -#define D3D12_FLOAT32_TO_INTEGER_TOLERANCE_IN_ULP ( 0.6f ) -#define D3D12_FLOAT_TO_SRGB_EXPONENT_DENOMINATOR ( 2.4f ) -#define D3D12_FLOAT_TO_SRGB_EXPONENT_NUMERATOR ( 1.0f ) -#define D3D12_FLOAT_TO_SRGB_OFFSET ( 0.055f ) -#define D3D12_FLOAT_TO_SRGB_SCALE_1 ( 12.92f ) -#define D3D12_FLOAT_TO_SRGB_SCALE_2 ( 1.055f ) -#define D3D12_FLOAT_TO_SRGB_THRESHOLD ( 0.0031308f ) -#define D3D12_FTOI_INSTRUCTION_MAX_INPUT ( 2147483647.999f ) -#define D3D12_FTOI_INSTRUCTION_MIN_INPUT ( -2147483648.999f ) -#define D3D12_FTOU_INSTRUCTION_MAX_INPUT ( 4294967295.999f ) -#define D3D12_FTOU_INSTRUCTION_MIN_INPUT ( 0.0f ) -#define D3D12_GS_INPUT_INSTANCE_ID_READS_PER_INST ( 2 ) - -#define D3D12_GS_INPUT_INSTANCE_ID_READ_PORTS ( 1 ) - -#define D3D12_GS_INPUT_INSTANCE_ID_REGISTER_COMPONENTS ( 1 ) - -#define D3D12_GS_INPUT_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT ( 32 ) - -#define D3D12_GS_INPUT_INSTANCE_ID_REGISTER_COUNT ( 1 ) - -#define D3D12_GS_INPUT_PRIM_CONST_REGISTER_COMPONENTS ( 1 ) - -#define D3D12_GS_INPUT_PRIM_CONST_REGISTER_COMPONENT_BIT_COUNT ( 32 ) - -#define D3D12_GS_INPUT_PRIM_CONST_REGISTER_COUNT ( 1 ) - -#define D3D12_GS_INPUT_PRIM_CONST_REGISTER_READS_PER_INST ( 2 ) - -#define D3D12_GS_INPUT_PRIM_CONST_REGISTER_READ_PORTS ( 1 ) - -#define D3D12_GS_INPUT_REGISTER_COMPONENTS ( 4 ) - -#define D3D12_GS_INPUT_REGISTER_COMPONENT_BIT_COUNT ( 32 ) - -#define D3D12_GS_INPUT_REGISTER_COUNT ( 32 ) - -#define D3D12_GS_INPUT_REGISTER_READS_PER_INST ( 2 ) - -#define D3D12_GS_INPUT_REGISTER_READ_PORTS ( 1 ) - -#define D3D12_GS_INPUT_REGISTER_VERTICES ( 32 ) - -#define D3D12_GS_MAX_INSTANCE_COUNT ( 32 ) - -#define D3D12_GS_MAX_OUTPUT_VERTEX_COUNT_ACROSS_INSTANCES ( 1024 ) - -#define D3D12_GS_OUTPUT_ELEMENTS ( 32 ) - -#define D3D12_GS_OUTPUT_REGISTER_COMPONENTS ( 4 ) - -#define D3D12_GS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT ( 32 ) - -#define D3D12_GS_OUTPUT_REGISTER_COUNT ( 32 ) - -#define D3D12_HS_CONTROL_POINT_PHASE_INPUT_REGISTER_COUNT ( 32 ) - -#define D3D12_HS_CONTROL_POINT_PHASE_OUTPUT_REGISTER_COUNT ( 32 ) - -#define D3D12_HS_CONTROL_POINT_REGISTER_COMPONENTS ( 4 ) - -#define D3D12_HS_CONTROL_POINT_REGISTER_COMPONENT_BIT_COUNT ( 32 ) - -#define D3D12_HS_CONTROL_POINT_REGISTER_READS_PER_INST ( 2 ) - -#define D3D12_HS_CONTROL_POINT_REGISTER_READ_PORTS ( 1 ) - -#define D3D12_HS_FORK_PHASE_INSTANCE_COUNT_UPPER_BOUND ( 0xffffffff ) - -#define D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_COMPONENTS ( 1 ) - -#define D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT ( 32 ) - -#define D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_COUNT ( 1 ) - -#define D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_READS_PER_INST ( 2 ) - -#define D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_READ_PORTS ( 1 ) - -#define D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COMPONENTS ( 1 ) - -#define D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT ( 32 ) - -#define D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COUNT ( 1 ) - -#define D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_READS_PER_INST ( 2 ) - -#define D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_READ_PORTS ( 1 ) - -#define D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENTS ( 1 ) - -#define D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENT_BIT_COUNT ( 32 ) - -#define D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_COUNT ( 1 ) - -#define D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_READS_PER_INST ( 2 ) - -#define D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_READ_PORTS ( 1 ) - -#define D3D12_HS_JOIN_PHASE_INSTANCE_COUNT_UPPER_BOUND ( 0xffffffff ) - -#define D3D12_HS_MAXTESSFACTOR_LOWER_BOUND ( 1.0f ) -#define D3D12_HS_MAXTESSFACTOR_UPPER_BOUND ( 64.0f ) -#define D3D12_HS_OUTPUT_CONTROL_POINTS_MAX_TOTAL_SCALARS ( 3968 ) - -#define D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COMPONENTS ( 1 ) - -#define D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COMPONENT_BIT_COUNT ( 32 ) - -#define D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COUNT ( 1 ) - -#define D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_READS_PER_INST ( 2 ) - -#define D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_READ_PORTS ( 1 ) - -#define D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COMPONENTS ( 4 ) - -#define D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COMPONENT_BIT_COUNT ( 32 ) - -#define D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COUNT ( 32 ) - -#define D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_READS_PER_INST ( 2 ) - -#define D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_READ_PORTS ( 1 ) - -#define D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_SCALAR_COMPONENTS ( 128 ) - -#define D3D12_IA_DEFAULT_INDEX_BUFFER_OFFSET_IN_BYTES ( 0 ) - -#define D3D12_IA_DEFAULT_PRIMITIVE_TOPOLOGY ( 0 ) - -#define D3D12_IA_DEFAULT_VERTEX_BUFFER_OFFSET_IN_BYTES ( 0 ) - -#define D3D12_IA_INDEX_INPUT_RESOURCE_SLOT_COUNT ( 1 ) - -#define D3D12_IA_INSTANCE_ID_BIT_COUNT ( 32 ) - -#define D3D12_IA_INTEGER_ARITHMETIC_BIT_COUNT ( 32 ) - -#define D3D12_IA_PATCH_MAX_CONTROL_POINT_COUNT ( 32 ) - -#define D3D12_IA_PRIMITIVE_ID_BIT_COUNT ( 32 ) - -#define D3D12_IA_VERTEX_ID_BIT_COUNT ( 32 ) - -#define D3D12_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT ( 32 ) - -#define D3D12_IA_VERTEX_INPUT_STRUCTURE_ELEMENTS_COMPONENTS ( 128 ) - -#define D3D12_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT ( 32 ) - -#define D3D12_INTEGER_DIVIDE_BY_ZERO_QUOTIENT ( 0xffffffff ) - -#define D3D12_INTEGER_DIVIDE_BY_ZERO_REMAINDER ( 0xffffffff ) - -#define D3D12_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL ( 0xffffffff ) - -#define D3D12_KEEP_UNORDERED_ACCESS_VIEWS ( 0xffffffff ) - -#define D3D12_LINEAR_GAMMA ( 1.0f ) -#define D3D12_MAJOR_VERSION ( 12 ) - -#define D3D12_MAX_BORDER_COLOR_COMPONENT ( 1.0f ) -#define D3D12_MAX_DEPTH ( 1.0f ) -#define D3D12_MAX_LIVE_STATIC_SAMPLERS ( 2032 ) - -#define D3D12_MAX_MAXANISOTROPY ( 16 ) - -#define D3D12_MAX_MULTISAMPLE_SAMPLE_COUNT ( 32 ) - -#define D3D12_MAX_POSITION_VALUE ( 3.402823466e+34f ) -#define D3D12_MAX_ROOT_COST ( 64 ) - -#define D3D12_MAX_SHADER_VISIBLE_DESCRIPTOR_HEAP_SIZE_TIER_1 ( 1000000 ) - -#define D3D12_MAX_SHADER_VISIBLE_DESCRIPTOR_HEAP_SIZE_TIER_2 ( 1000000 ) - -#define D3D12_MAX_SHADER_VISIBLE_SAMPLER_HEAP_SIZE ( 2048 ) - -#define D3D12_MAX_TEXTURE_DIMENSION_2_TO_EXP ( 17 ) - -#define D3D12_MAX_VIEW_INSTANCE_COUNT ( 4 ) - -#define D3D12_MINOR_VERSION ( 0 ) - -#define D3D12_MIN_BORDER_COLOR_COMPONENT ( 0.0f ) -#define D3D12_MIN_DEPTH ( 0.0f ) -#define D3D12_MIN_MAXANISOTROPY ( 0 ) - -#define D3D12_MIP_LOD_BIAS_MAX ( 15.99f ) -#define D3D12_MIP_LOD_BIAS_MIN ( -16.0f ) -#define D3D12_MIP_LOD_FRACTIONAL_BIT_COUNT ( 8 ) - -#define D3D12_MIP_LOD_RANGE_BIT_COUNT ( 8 ) - -#define D3D12_MULTISAMPLE_ANTIALIAS_LINE_WIDTH ( 1.4f ) -#define D3D12_NONSAMPLE_FETCH_OUT_OF_RANGE_ACCESS_RESULT ( 0 ) - -#define D3D12_OS_RESERVED_REGISTER_SPACE_VALUES_END ( 0xffffffff ) - -#define D3D12_OS_RESERVED_REGISTER_SPACE_VALUES_START ( 0xfffffff8 ) - -#define D3D12_PACKED_TILE ( 0xffffffff ) - -#define D3D12_PIXEL_ADDRESS_RANGE_BIT_COUNT ( 15 ) - -#define D3D12_PREVIEW_SDK_VERSION ( 716 ) - -#define D3D12_PRE_SCISSOR_PIXEL_ADDRESS_RANGE_BIT_COUNT ( 16 ) - -#define D3D12_PS_CS_UAV_REGISTER_COMPONENTS ( 1 ) - -#define D3D12_PS_CS_UAV_REGISTER_COUNT ( 8 ) - -#define D3D12_PS_CS_UAV_REGISTER_READS_PER_INST ( 1 ) - -#define D3D12_PS_CS_UAV_REGISTER_READ_PORTS ( 1 ) - -#define D3D12_PS_FRONTFACING_DEFAULT_VALUE ( 0xffffffff ) - -#define D3D12_PS_FRONTFACING_FALSE_VALUE ( 0 ) - -#define D3D12_PS_FRONTFACING_TRUE_VALUE ( 0xffffffff ) - -#define D3D12_PS_INPUT_REGISTER_COMPONENTS ( 4 ) - -#define D3D12_PS_INPUT_REGISTER_COMPONENT_BIT_COUNT ( 32 ) - -#define D3D12_PS_INPUT_REGISTER_COUNT ( 32 ) - -#define D3D12_PS_INPUT_REGISTER_READS_PER_INST ( 2 ) - -#define D3D12_PS_INPUT_REGISTER_READ_PORTS ( 1 ) - -#define D3D12_PS_LEGACY_PIXEL_CENTER_FRACTIONAL_COMPONENT ( 0.0f ) -#define D3D12_PS_OUTPUT_DEPTH_REGISTER_COMPONENTS ( 1 ) - -#define D3D12_PS_OUTPUT_DEPTH_REGISTER_COMPONENT_BIT_COUNT ( 32 ) - -#define D3D12_PS_OUTPUT_DEPTH_REGISTER_COUNT ( 1 ) - -#define D3D12_PS_OUTPUT_MASK_REGISTER_COMPONENTS ( 1 ) - -#define D3D12_PS_OUTPUT_MASK_REGISTER_COMPONENT_BIT_COUNT ( 32 ) - -#define D3D12_PS_OUTPUT_MASK_REGISTER_COUNT ( 1 ) - -#define D3D12_PS_OUTPUT_REGISTER_COMPONENTS ( 4 ) - -#define D3D12_PS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT ( 32 ) - -#define D3D12_PS_OUTPUT_REGISTER_COUNT ( 8 ) - -#define D3D12_PS_PIXEL_CENTER_FRACTIONAL_COMPONENT ( 0.5f ) -#define D3D12_RAW_UAV_SRV_BYTE_ALIGNMENT ( 16 ) - -#define D3D12_RAYTRACING_AABB_BYTE_ALIGNMENT ( 8 ) - -#define D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BYTE_ALIGNMENT ( 256 ) - -#define D3D12_RAYTRACING_INSTANCE_DESCS_BYTE_ALIGNMENT ( 16 ) - -#define D3D12_RAYTRACING_MAX_ATTRIBUTE_SIZE_IN_BYTES ( 32 ) - -#define D3D12_RAYTRACING_MAX_DECLARABLE_TRACE_RECURSION_DEPTH ( 31 ) - -#define D3D12_RAYTRACING_MAX_GEOMETRIES_PER_BOTTOM_LEVEL_ACCELERATION_STRUCTURE ( 16777216 ) - -#define D3D12_RAYTRACING_MAX_INSTANCES_PER_TOP_LEVEL_ACCELERATION_STRUCTURE ( 16777216 ) - -#define D3D12_RAYTRACING_MAX_PRIMITIVES_PER_BOTTOM_LEVEL_ACCELERATION_STRUCTURE ( 536870912 ) - -#define D3D12_RAYTRACING_MAX_RAY_GENERATION_SHADER_THREADS ( 1073741824 ) - -#define D3D12_RAYTRACING_MAX_SHADER_RECORD_STRIDE ( 4096 ) - -#define D3D12_RAYTRACING_SHADER_RECORD_BYTE_ALIGNMENT ( 32 ) - -#define D3D12_RAYTRACING_SHADER_TABLE_BYTE_ALIGNMENT ( 64 ) - -#define D3D12_RAYTRACING_TRANSFORM3X4_BYTE_ALIGNMENT ( 16 ) - -#define D3D12_REQ_BLEND_OBJECT_COUNT_PER_DEVICE ( 4096 ) - -#define D3D12_REQ_BUFFER_RESOURCE_TEXEL_COUNT_2_TO_EXP ( 27 ) - -#define D3D12_REQ_CONSTANT_BUFFER_ELEMENT_COUNT ( 4096 ) - -#define D3D12_REQ_DEPTH_STENCIL_OBJECT_COUNT_PER_DEVICE ( 4096 ) - -#define D3D12_REQ_DRAWINDEXED_INDEX_COUNT_2_TO_EXP ( 32 ) - -#define D3D12_REQ_DRAW_VERTEX_COUNT_2_TO_EXP ( 32 ) - -#define D3D12_REQ_FILTERING_HW_ADDRESSABLE_RESOURCE_DIMENSION ( 16384 ) - -#define D3D12_REQ_GS_INVOCATION_32BIT_OUTPUT_COMPONENT_LIMIT ( 1024 ) - -#define D3D12_REQ_IMMEDIATE_CONSTANT_BUFFER_ELEMENT_COUNT ( 4096 ) - -#define D3D12_REQ_MAXANISOTROPY ( 16 ) - -#define D3D12_REQ_MIP_LEVELS ( 15 ) - -#define D3D12_REQ_MULTI_ELEMENT_STRUCTURE_SIZE_IN_BYTES ( 2048 ) - -#define D3D12_REQ_RASTERIZER_OBJECT_COUNT_PER_DEVICE ( 4096 ) - -#define D3D12_REQ_RENDER_TO_BUFFER_WINDOW_WIDTH ( 16384 ) - -#define D3D12_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_A_TERM ( 128 ) - -#define D3D12_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_B_TERM ( 0.25f ) -#define D3D12_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_C_TERM ( 2048 ) - -#define D3D12_REQ_RESOURCE_VIEW_COUNT_PER_DEVICE_2_TO_EXP ( 20 ) - -#define D3D12_REQ_SAMPLER_OBJECT_COUNT_PER_DEVICE ( 4096 ) - -#define D3D12_REQ_SUBRESOURCES ( 30720 ) - -#define D3D12_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION ( 2048 ) - -#define D3D12_REQ_TEXTURE1D_U_DIMENSION ( 16384 ) - -#define D3D12_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION ( 2048 ) - -#define D3D12_REQ_TEXTURE2D_U_OR_V_DIMENSION ( 16384 ) - -#define D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION ( 2048 ) - -#define D3D12_REQ_TEXTURECUBE_DIMENSION ( 16384 ) - -#define D3D12_RESINFO_INSTRUCTION_MISSING_COMPONENT_RETVAL ( 0 ) - -#define D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES ( 0xffffffff ) - -#define D3D12_RS_SET_SHADING_RATE_COMBINER_COUNT ( 2 ) - -#define D3D12_SDK_VERSION ( 615 ) - -#define D3D12_SHADER_IDENTIFIER_SIZE_IN_BYTES ( 32 ) - -#define D3D12_SHADER_MAJOR_VERSION ( 5 ) - -#define D3D12_SHADER_MAX_INSTANCES ( 65535 ) - -#define D3D12_SHADER_MAX_INTERFACES ( 253 ) - -#define D3D12_SHADER_MAX_INTERFACE_CALL_SITES ( 4096 ) - -#define D3D12_SHADER_MAX_TYPES ( 65535 ) - -#define D3D12_SHADER_MINOR_VERSION ( 1 ) - -#define D3D12_SHIFT_INSTRUCTION_PAD_VALUE ( 0 ) - -#define D3D12_SHIFT_INSTRUCTION_SHIFT_VALUE_BIT_COUNT ( 5 ) - -#define D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT ( 8 ) - -#define D3D12_SMALL_MSAA_RESOURCE_PLACEMENT_ALIGNMENT ( 65536 ) - -#define D3D12_SMALL_RESOURCE_PLACEMENT_ALIGNMENT ( 4096 ) - -#define D3D12_SO_BUFFER_MAX_STRIDE_IN_BYTES ( 2048 ) - -#define D3D12_SO_BUFFER_MAX_WRITE_WINDOW_IN_BYTES ( 512 ) - -#define D3D12_SO_BUFFER_SLOT_COUNT ( 4 ) - -#define D3D12_SO_DDI_REGISTER_INDEX_DENOTING_GAP ( 0xffffffff ) - -#define D3D12_SO_NO_RASTERIZED_STREAM ( 0xffffffff ) - -#define D3D12_SO_OUTPUT_COMPONENT_COUNT ( 128 ) - -#define D3D12_SO_STREAM_COUNT ( 4 ) - -#define D3D12_SPEC_DATE_DAY ( 14 ) - -#define D3D12_SPEC_DATE_MONTH ( 11 ) - -#define D3D12_SPEC_DATE_YEAR ( 2014 ) - -#define D3D12_SPEC_VERSION ( 1.16 ) -#define D3D12_SRGB_GAMMA ( 2.2f ) -#define D3D12_SRGB_TO_FLOAT_DENOMINATOR_1 ( 12.92f ) -#define D3D12_SRGB_TO_FLOAT_DENOMINATOR_2 ( 1.055f ) -#define D3D12_SRGB_TO_FLOAT_EXPONENT ( 2.4f ) -#define D3D12_SRGB_TO_FLOAT_OFFSET ( 0.055f ) -#define D3D12_SRGB_TO_FLOAT_THRESHOLD ( 0.04045f ) -#define D3D12_SRGB_TO_FLOAT_TOLERANCE_IN_ULP ( 0.5f ) -#define D3D12_STANDARD_COMPONENT_BIT_COUNT ( 32 ) - -#define D3D12_STANDARD_COMPONENT_BIT_COUNT_DOUBLED ( 64 ) - -#define D3D12_STANDARD_MAXIMUM_ELEMENT_ALIGNMENT_BYTE_MULTIPLE ( 4 ) - -#define D3D12_STANDARD_PIXEL_COMPONENT_COUNT ( 128 ) - -#define D3D12_STANDARD_PIXEL_ELEMENT_COUNT ( 32 ) - -#define D3D12_STANDARD_VECTOR_SIZE ( 4 ) - -#define D3D12_STANDARD_VERTEX_ELEMENT_COUNT ( 32 ) - -#define D3D12_STANDARD_VERTEX_TOTAL_COMPONENT_COUNT ( 64 ) - -#define D3D12_SUBPIXEL_FRACTIONAL_BIT_COUNT ( 8 ) - -#define D3D12_SUBTEXEL_FRACTIONAL_BIT_COUNT ( 8 ) - -#define D3D12_SYSTEM_RESERVED_REGISTER_SPACE_VALUES_END ( 0xffffffff ) - -#define D3D12_SYSTEM_RESERVED_REGISTER_SPACE_VALUES_START ( 0xfffffff0 ) - -#define D3D12_TESSELLATOR_MAX_EVEN_TESSELLATION_FACTOR ( 64 ) - -#define D3D12_TESSELLATOR_MAX_ISOLINE_DENSITY_TESSELLATION_FACTOR ( 64 ) - -#define D3D12_TESSELLATOR_MAX_ODD_TESSELLATION_FACTOR ( 63 ) - -#define D3D12_TESSELLATOR_MAX_TESSELLATION_FACTOR ( 64 ) - -#define D3D12_TESSELLATOR_MIN_EVEN_TESSELLATION_FACTOR ( 2 ) - -#define D3D12_TESSELLATOR_MIN_ISOLINE_DENSITY_TESSELLATION_FACTOR ( 1 ) - -#define D3D12_TESSELLATOR_MIN_ODD_TESSELLATION_FACTOR ( 1 ) - -#define D3D12_TEXEL_ADDRESS_RANGE_BIT_COUNT ( 16 ) - -#define D3D12_TEXTURE_DATA_PITCH_ALIGNMENT ( 256 ) - -#define D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT ( 512 ) - -#define D3D12_TILED_RESOURCE_TILE_SIZE_IN_BYTES ( 65536 ) - -#define D3D12_TRACKED_WORKLOAD_MAX_INSTANCES ( 32 ) - -#define D3D12_UAV_COUNTER_PLACEMENT_ALIGNMENT ( 4096 ) - -#define D3D12_UAV_SLOT_COUNT ( 64 ) - -#define D3D12_UNBOUND_MEMORY_ACCESS_RESULT ( 0 ) - -#define D3D12_VIDEO_DECODE_MAX_ARGUMENTS ( 10 ) - -#define D3D12_VIDEO_DECODE_MAX_HISTOGRAM_COMPONENTS ( 4 ) - -#define D3D12_VIDEO_DECODE_MIN_BITSTREAM_OFFSET_ALIGNMENT ( 256 ) - -#define D3D12_VIDEO_DECODE_MIN_HISTOGRAM_OFFSET_ALIGNMENT ( 256 ) - -#define D3D12_VIDEO_DECODE_STATUS_MACROBLOCKS_AFFECTED_UNKNOWN ( 0xffffffff ) - -#define D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX ( 0xff ) - -#define D3D12_VIDEO_ENCODER_AV1_MAX_TILE_COLS ( 64 ) - -#define D3D12_VIDEO_ENCODER_AV1_MAX_TILE_ROWS ( 64 ) - -#define D3D12_VIDEO_ENCODER_AV1_SUPERRES_DENOM_MIN ( 9 ) - -#define D3D12_VIDEO_ENCODER_AV1_SUPERRES_NUM ( 8 ) - -#define D3D12_VIDEO_PROCESS_MAX_FILTERS ( 32 ) - -#define D3D12_VIDEO_PROCESS_STEREO_VIEWS ( 2 ) - -#define D3D12_VIEWPORT_AND_SCISSORRECT_MAX_INDEX ( 15 ) - -#define D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE ( 16 ) - -#define D3D12_VIEWPORT_BOUNDS_MAX ( 32767 ) - -#define D3D12_VIEWPORT_BOUNDS_MIN ( -32768 ) - -#define D3D12_VS_INPUT_REGISTER_COMPONENTS ( 4 ) - -#define D3D12_VS_INPUT_REGISTER_COMPONENT_BIT_COUNT ( 32 ) - -#define D3D12_VS_INPUT_REGISTER_COUNT ( 32 ) - -#define D3D12_VS_INPUT_REGISTER_READS_PER_INST ( 2 ) - -#define D3D12_VS_INPUT_REGISTER_READ_PORTS ( 1 ) - -#define D3D12_VS_OUTPUT_REGISTER_COMPONENTS ( 4 ) - -#define D3D12_VS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT ( 32 ) - -#define D3D12_VS_OUTPUT_REGISTER_COUNT ( 32 ) - -#define D3D12_WHQL_CONTEXT_COUNT_FOR_RESOURCE_LIMIT ( 10 ) - -#define D3D12_WHQL_DRAWINDEXED_INDEX_COUNT_2_TO_EXP ( 25 ) - -#define D3D12_WHQL_DRAW_VERTEX_COUNT_2_TO_EXP ( 25 ) - -#define D3D12_WORK_GRAPHS_BACKING_MEMORY_ALIGNMENT_IN_BYTES ( 8 ) - -#define D3D12_WORK_GRAPHS_MAX_NODE_DEPTH ( 32 ) - -#endif - -typedef UINT64 D3D12_GPU_VIRTUAL_ADDRESS; - -typedef -enum D3D12_COMMAND_LIST_TYPE - { - D3D12_COMMAND_LIST_TYPE_DIRECT = 0, - D3D12_COMMAND_LIST_TYPE_BUNDLE = 1, - D3D12_COMMAND_LIST_TYPE_COMPUTE = 2, - D3D12_COMMAND_LIST_TYPE_COPY = 3, - D3D12_COMMAND_LIST_TYPE_VIDEO_DECODE = 4, - D3D12_COMMAND_LIST_TYPE_VIDEO_PROCESS = 5, - D3D12_COMMAND_LIST_TYPE_VIDEO_ENCODE = 6, - D3D12_COMMAND_LIST_TYPE_NONE = -1 - } D3D12_COMMAND_LIST_TYPE; - -typedef -enum D3D12_COMMAND_QUEUE_FLAGS - { - D3D12_COMMAND_QUEUE_FLAG_NONE = 0, - D3D12_COMMAND_QUEUE_FLAG_DISABLE_GPU_TIMEOUT = 0x1 - } D3D12_COMMAND_QUEUE_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_COMMAND_QUEUE_FLAGS ) -typedef -enum D3D12_COMMAND_QUEUE_PRIORITY - { - D3D12_COMMAND_QUEUE_PRIORITY_NORMAL = 0, - D3D12_COMMAND_QUEUE_PRIORITY_HIGH = 100, - D3D12_COMMAND_QUEUE_PRIORITY_GLOBAL_REALTIME = 10000 - } D3D12_COMMAND_QUEUE_PRIORITY; - -typedef struct D3D12_COMMAND_QUEUE_DESC - { - D3D12_COMMAND_LIST_TYPE Type; - INT Priority; - D3D12_COMMAND_QUEUE_FLAGS Flags; - UINT NodeMask; - } D3D12_COMMAND_QUEUE_DESC; - -typedef -enum D3D12_PRIMITIVE_TOPOLOGY_TYPE - { - D3D12_PRIMITIVE_TOPOLOGY_TYPE_UNDEFINED = 0, - D3D12_PRIMITIVE_TOPOLOGY_TYPE_POINT = 1, - D3D12_PRIMITIVE_TOPOLOGY_TYPE_LINE = 2, - D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE = 3, - D3D12_PRIMITIVE_TOPOLOGY_TYPE_PATCH = 4 - } D3D12_PRIMITIVE_TOPOLOGY_TYPE; - -typedef -enum D3D12_INPUT_CLASSIFICATION - { - D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA = 0, - D3D12_INPUT_CLASSIFICATION_PER_INSTANCE_DATA = 1 - } D3D12_INPUT_CLASSIFICATION; - -typedef struct D3D12_INPUT_ELEMENT_DESC - { - LPCSTR SemanticName; - UINT SemanticIndex; - DXGI_FORMAT Format; - UINT InputSlot; - UINT AlignedByteOffset; - D3D12_INPUT_CLASSIFICATION InputSlotClass; - UINT InstanceDataStepRate; - } D3D12_INPUT_ELEMENT_DESC; - -typedef -enum D3D12_FILL_MODE - { - D3D12_FILL_MODE_WIREFRAME = 2, - D3D12_FILL_MODE_SOLID = 3 - } D3D12_FILL_MODE; - -typedef D3D_PRIMITIVE_TOPOLOGY D3D12_PRIMITIVE_TOPOLOGY; - -typedef D3D_PRIMITIVE D3D12_PRIMITIVE; - -typedef -enum D3D12_CULL_MODE - { - D3D12_CULL_MODE_NONE = 1, - D3D12_CULL_MODE_FRONT = 2, - D3D12_CULL_MODE_BACK = 3 - } D3D12_CULL_MODE; - -typedef struct D3D12_SO_DECLARATION_ENTRY - { - UINT Stream; - LPCSTR SemanticName; - UINT SemanticIndex; - BYTE StartComponent; - BYTE ComponentCount; - BYTE OutputSlot; - } D3D12_SO_DECLARATION_ENTRY; - -typedef struct D3D12_VIEWPORT - { - FLOAT TopLeftX; - FLOAT TopLeftY; - FLOAT Width; - FLOAT Height; - FLOAT MinDepth; - FLOAT MaxDepth; - } D3D12_VIEWPORT; - -typedef RECT D3D12_RECT; - -typedef struct D3D12_BOX - { - UINT left; - UINT top; - UINT front; - UINT right; - UINT bottom; - UINT back; - } D3D12_BOX; - -#ifdef __midl -#ifndef LUID_DEFINED -#define LUID_DEFINED 1 -typedef struct __LUID - { - DWORD LowPart; - LONG HighPart; - } LUID; - -typedef struct __LUID *PLUID; - -#endif -#endif -typedef -enum D3D12_COMPARISON_FUNC - { - D3D12_COMPARISON_FUNC_NONE = 0, - D3D12_COMPARISON_FUNC_NEVER = 1, - D3D12_COMPARISON_FUNC_LESS = 2, - D3D12_COMPARISON_FUNC_EQUAL = 3, - D3D12_COMPARISON_FUNC_LESS_EQUAL = 4, - D3D12_COMPARISON_FUNC_GREATER = 5, - D3D12_COMPARISON_FUNC_NOT_EQUAL = 6, - D3D12_COMPARISON_FUNC_GREATER_EQUAL = 7, - D3D12_COMPARISON_FUNC_ALWAYS = 8 - } D3D12_COMPARISON_FUNC; - -typedef -enum D3D12_DEPTH_WRITE_MASK - { - D3D12_DEPTH_WRITE_MASK_ZERO = 0, - D3D12_DEPTH_WRITE_MASK_ALL = 1 - } D3D12_DEPTH_WRITE_MASK; - -typedef -enum D3D12_STENCIL_OP - { - D3D12_STENCIL_OP_KEEP = 1, - D3D12_STENCIL_OP_ZERO = 2, - D3D12_STENCIL_OP_REPLACE = 3, - D3D12_STENCIL_OP_INCR_SAT = 4, - D3D12_STENCIL_OP_DECR_SAT = 5, - D3D12_STENCIL_OP_INVERT = 6, - D3D12_STENCIL_OP_INCR = 7, - D3D12_STENCIL_OP_DECR = 8 - } D3D12_STENCIL_OP; - -typedef struct D3D12_DEPTH_STENCILOP_DESC - { - D3D12_STENCIL_OP StencilFailOp; - D3D12_STENCIL_OP StencilDepthFailOp; - D3D12_STENCIL_OP StencilPassOp; - D3D12_COMPARISON_FUNC StencilFunc; - } D3D12_DEPTH_STENCILOP_DESC; - -typedef struct D3D12_DEPTH_STENCIL_DESC - { - BOOL DepthEnable; - D3D12_DEPTH_WRITE_MASK DepthWriteMask; - D3D12_COMPARISON_FUNC DepthFunc; - BOOL StencilEnable; - UINT8 StencilReadMask; - UINT8 StencilWriteMask; - D3D12_DEPTH_STENCILOP_DESC FrontFace; - D3D12_DEPTH_STENCILOP_DESC BackFace; - } D3D12_DEPTH_STENCIL_DESC; - -typedef struct D3D12_DEPTH_STENCIL_DESC1 - { - BOOL DepthEnable; - D3D12_DEPTH_WRITE_MASK DepthWriteMask; - D3D12_COMPARISON_FUNC DepthFunc; - BOOL StencilEnable; - UINT8 StencilReadMask; - UINT8 StencilWriteMask; - D3D12_DEPTH_STENCILOP_DESC FrontFace; - D3D12_DEPTH_STENCILOP_DESC BackFace; - BOOL DepthBoundsTestEnable; - } D3D12_DEPTH_STENCIL_DESC1; - -typedef struct D3D12_DEPTH_STENCILOP_DESC1 - { - D3D12_STENCIL_OP StencilFailOp; - D3D12_STENCIL_OP StencilDepthFailOp; - D3D12_STENCIL_OP StencilPassOp; - D3D12_COMPARISON_FUNC StencilFunc; - UINT8 StencilReadMask; - UINT8 StencilWriteMask; - } D3D12_DEPTH_STENCILOP_DESC1; - -typedef struct D3D12_DEPTH_STENCIL_DESC2 - { - BOOL DepthEnable; - D3D12_DEPTH_WRITE_MASK DepthWriteMask; - D3D12_COMPARISON_FUNC DepthFunc; - BOOL StencilEnable; - D3D12_DEPTH_STENCILOP_DESC1 FrontFace; - D3D12_DEPTH_STENCILOP_DESC1 BackFace; - BOOL DepthBoundsTestEnable; - } D3D12_DEPTH_STENCIL_DESC2; - -typedef -enum D3D12_BLEND - { - D3D12_BLEND_ZERO = 1, - D3D12_BLEND_ONE = 2, - D3D12_BLEND_SRC_COLOR = 3, - D3D12_BLEND_INV_SRC_COLOR = 4, - D3D12_BLEND_SRC_ALPHA = 5, - D3D12_BLEND_INV_SRC_ALPHA = 6, - D3D12_BLEND_DEST_ALPHA = 7, - D3D12_BLEND_INV_DEST_ALPHA = 8, - D3D12_BLEND_DEST_COLOR = 9, - D3D12_BLEND_INV_DEST_COLOR = 10, - D3D12_BLEND_SRC_ALPHA_SAT = 11, - D3D12_BLEND_BLEND_FACTOR = 14, - D3D12_BLEND_INV_BLEND_FACTOR = 15, - D3D12_BLEND_SRC1_COLOR = 16, - D3D12_BLEND_INV_SRC1_COLOR = 17, - D3D12_BLEND_SRC1_ALPHA = 18, - D3D12_BLEND_INV_SRC1_ALPHA = 19, - D3D12_BLEND_ALPHA_FACTOR = 20, - D3D12_BLEND_INV_ALPHA_FACTOR = 21 - } D3D12_BLEND; - -typedef -enum D3D12_BLEND_OP - { - D3D12_BLEND_OP_ADD = 1, - D3D12_BLEND_OP_SUBTRACT = 2, - D3D12_BLEND_OP_REV_SUBTRACT = 3, - D3D12_BLEND_OP_MIN = 4, - D3D12_BLEND_OP_MAX = 5 - } D3D12_BLEND_OP; - -typedef -enum D3D12_COLOR_WRITE_ENABLE - { - D3D12_COLOR_WRITE_ENABLE_RED = 1, - D3D12_COLOR_WRITE_ENABLE_GREEN = 2, - D3D12_COLOR_WRITE_ENABLE_BLUE = 4, - D3D12_COLOR_WRITE_ENABLE_ALPHA = 8, - D3D12_COLOR_WRITE_ENABLE_ALL = ( ( ( D3D12_COLOR_WRITE_ENABLE_RED | D3D12_COLOR_WRITE_ENABLE_GREEN ) | D3D12_COLOR_WRITE_ENABLE_BLUE ) | D3D12_COLOR_WRITE_ENABLE_ALPHA ) - } D3D12_COLOR_WRITE_ENABLE; - -typedef -enum D3D12_LOGIC_OP - { - D3D12_LOGIC_OP_CLEAR = 0, - D3D12_LOGIC_OP_SET = ( D3D12_LOGIC_OP_CLEAR + 1 ) , - D3D12_LOGIC_OP_COPY = ( D3D12_LOGIC_OP_SET + 1 ) , - D3D12_LOGIC_OP_COPY_INVERTED = ( D3D12_LOGIC_OP_COPY + 1 ) , - D3D12_LOGIC_OP_NOOP = ( D3D12_LOGIC_OP_COPY_INVERTED + 1 ) , - D3D12_LOGIC_OP_INVERT = ( D3D12_LOGIC_OP_NOOP + 1 ) , - D3D12_LOGIC_OP_AND = ( D3D12_LOGIC_OP_INVERT + 1 ) , - D3D12_LOGIC_OP_NAND = ( D3D12_LOGIC_OP_AND + 1 ) , - D3D12_LOGIC_OP_OR = ( D3D12_LOGIC_OP_NAND + 1 ) , - D3D12_LOGIC_OP_NOR = ( D3D12_LOGIC_OP_OR + 1 ) , - D3D12_LOGIC_OP_XOR = ( D3D12_LOGIC_OP_NOR + 1 ) , - D3D12_LOGIC_OP_EQUIV = ( D3D12_LOGIC_OP_XOR + 1 ) , - D3D12_LOGIC_OP_AND_REVERSE = ( D3D12_LOGIC_OP_EQUIV + 1 ) , - D3D12_LOGIC_OP_AND_INVERTED = ( D3D12_LOGIC_OP_AND_REVERSE + 1 ) , - D3D12_LOGIC_OP_OR_REVERSE = ( D3D12_LOGIC_OP_AND_INVERTED + 1 ) , - D3D12_LOGIC_OP_OR_INVERTED = ( D3D12_LOGIC_OP_OR_REVERSE + 1 ) - } D3D12_LOGIC_OP; - -typedef struct D3D12_RENDER_TARGET_BLEND_DESC - { - BOOL BlendEnable; - BOOL LogicOpEnable; - D3D12_BLEND SrcBlend; - D3D12_BLEND DestBlend; - D3D12_BLEND_OP BlendOp; - D3D12_BLEND SrcBlendAlpha; - D3D12_BLEND DestBlendAlpha; - D3D12_BLEND_OP BlendOpAlpha; - D3D12_LOGIC_OP LogicOp; - UINT8 RenderTargetWriteMask; - } D3D12_RENDER_TARGET_BLEND_DESC; - -typedef struct D3D12_BLEND_DESC - { - BOOL AlphaToCoverageEnable; - BOOL IndependentBlendEnable; - D3D12_RENDER_TARGET_BLEND_DESC RenderTarget[ 8 ]; - } D3D12_BLEND_DESC; - -/* Note, the array size for RenderTarget[] above is D3D12_SIMULTANEOUS_RENDERTARGET_COUNT. - IDL processing/generation of this header replaces the define; this comment is merely explaining what happened. */ -typedef -enum D3D12_CONSERVATIVE_RASTERIZATION_MODE - { - D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF = 0, - D3D12_CONSERVATIVE_RASTERIZATION_MODE_ON = 1 - } D3D12_CONSERVATIVE_RASTERIZATION_MODE; - -typedef struct D3D12_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; - } D3D12_RASTERIZER_DESC; - -typedef struct D3D12_RASTERIZER_DESC1 - { - D3D12_FILL_MODE FillMode; - D3D12_CULL_MODE CullMode; - BOOL FrontCounterClockwise; - FLOAT DepthBias; - FLOAT DepthBiasClamp; - FLOAT SlopeScaledDepthBias; - BOOL DepthClipEnable; - BOOL MultisampleEnable; - BOOL AntialiasedLineEnable; - UINT ForcedSampleCount; - D3D12_CONSERVATIVE_RASTERIZATION_MODE ConservativeRaster; - } D3D12_RASTERIZER_DESC1; - -typedef -enum D3D12_LINE_RASTERIZATION_MODE - { - D3D12_LINE_RASTERIZATION_MODE_ALIASED = 0, - D3D12_LINE_RASTERIZATION_MODE_ALPHA_ANTIALIASED = ( D3D12_LINE_RASTERIZATION_MODE_ALIASED + 1 ) , - D3D12_LINE_RASTERIZATION_MODE_QUADRILATERAL_WIDE = ( D3D12_LINE_RASTERIZATION_MODE_ALPHA_ANTIALIASED + 1 ) , - D3D12_LINE_RASTERIZATION_MODE_QUADRILATERAL_NARROW = ( D3D12_LINE_RASTERIZATION_MODE_QUADRILATERAL_WIDE + 1 ) - } D3D12_LINE_RASTERIZATION_MODE; - -typedef struct D3D12_RASTERIZER_DESC2 - { - D3D12_FILL_MODE FillMode; - D3D12_CULL_MODE CullMode; - BOOL FrontCounterClockwise; - FLOAT DepthBias; - FLOAT DepthBiasClamp; - FLOAT SlopeScaledDepthBias; - BOOL DepthClipEnable; - D3D12_LINE_RASTERIZATION_MODE LineRasterizationMode; - UINT ForcedSampleCount; - D3D12_CONSERVATIVE_RASTERIZATION_MODE ConservativeRaster; - } D3D12_RASTERIZER_DESC2; - -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0000_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0000_v0_0_s_ifspec; - -#ifndef __ID3D12Object_INTERFACE_DEFINED__ -#define __ID3D12Object_INTERFACE_DEFINED__ - -/* interface ID3D12Object */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12Object; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("c4fec28f-7966-4e95-9f94-f431cb56c3b8") - ID3D12Object : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE GetPrivateData( - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetPrivateData( - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetPrivateDataInterface( - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetName( - _In_z_ LPCWSTR Name) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12ObjectVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12Object * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12Object * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12Object * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12Object * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12Object * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12Object * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12Object * This, - _In_z_ LPCWSTR Name); - - END_INTERFACE - } ID3D12ObjectVtbl; - - interface ID3D12Object - { - CONST_VTBL struct ID3D12ObjectVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12Object_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12Object_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12Object_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12Object_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12Object_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12Object_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12Object_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12Object_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12DeviceChild_INTERFACE_DEFINED__ -#define __ID3D12DeviceChild_INTERFACE_DEFINED__ - -/* interface ID3D12DeviceChild */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12DeviceChild; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("905db94b-a00c-4140-9df5-2b64ca9ea357") - ID3D12DeviceChild : public ID3D12Object - { - public: - virtual HRESULT STDMETHODCALLTYPE GetDevice( - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12DeviceChildVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12DeviceChild * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12DeviceChild * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12DeviceChild * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12DeviceChild * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12DeviceChild * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12DeviceChild * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12DeviceChild * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12DeviceChild * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - END_INTERFACE - } ID3D12DeviceChildVtbl; - - interface ID3D12DeviceChild - { - CONST_VTBL struct ID3D12DeviceChildVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12DeviceChild_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12DeviceChild_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12DeviceChild_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12DeviceChild_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12DeviceChild_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12DeviceChild_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12DeviceChild_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12DeviceChild_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12DeviceChild_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12RootSignature_INTERFACE_DEFINED__ -#define __ID3D12RootSignature_INTERFACE_DEFINED__ - -/* interface ID3D12RootSignature */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12RootSignature; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("c54a6b66-72df-4ee8-8be5-a946a1429214") - ID3D12RootSignature : public ID3D12DeviceChild - { - public: - }; - - -#else /* C style interface */ - - typedef struct ID3D12RootSignatureVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12RootSignature * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12RootSignature * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12RootSignature * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12RootSignature * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12RootSignature * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12RootSignature * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12RootSignature * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12RootSignature * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - END_INTERFACE - } ID3D12RootSignatureVtbl; - - interface ID3D12RootSignature - { - CONST_VTBL struct ID3D12RootSignatureVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12RootSignature_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12RootSignature_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12RootSignature_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12RootSignature_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12RootSignature_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12RootSignature_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12RootSignature_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12RootSignature_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12RootSignature_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12_0000_0001 */ -/* [local] */ - -typedef struct D3D12_SHADER_BYTECODE - { - _Field_size_bytes_full_(BytecodeLength) const void *pShaderBytecode; - SIZE_T BytecodeLength; - } D3D12_SHADER_BYTECODE; - -typedef struct D3D12_STREAM_OUTPUT_DESC - { - _Field_size_full_(NumEntries) const D3D12_SO_DECLARATION_ENTRY *pSODeclaration; - UINT NumEntries; - _Field_size_full_(NumStrides) const UINT *pBufferStrides; - UINT NumStrides; - UINT RasterizedStream; - } D3D12_STREAM_OUTPUT_DESC; - -typedef struct D3D12_INPUT_LAYOUT_DESC - { - _Field_size_full_(NumElements) const D3D12_INPUT_ELEMENT_DESC *pInputElementDescs; - UINT NumElements; - } D3D12_INPUT_LAYOUT_DESC; - -typedef -enum D3D12_INDEX_BUFFER_STRIP_CUT_VALUE - { - D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_DISABLED = 0, - D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_0xFFFF = 1, - D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_0xFFFFFFFF = 2 - } D3D12_INDEX_BUFFER_STRIP_CUT_VALUE; - -typedef -enum D3D12_STANDARD_MULTISAMPLE_QUALITY_LEVELS - { - D3D12_STANDARD_MULTISAMPLE_PATTERN = 0xffffffff, - D3D12_CENTER_MULTISAMPLE_PATTERN = 0xfffffffe - } D3D12_STANDARD_MULTISAMPLE_QUALITY_LEVELS; - -typedef struct D3D12_CACHED_PIPELINE_STATE - { - _Field_size_bytes_full_(CachedBlobSizeInBytes) const void *pCachedBlob; - SIZE_T CachedBlobSizeInBytes; - } D3D12_CACHED_PIPELINE_STATE; - -typedef -enum D3D12_PIPELINE_STATE_FLAGS - { - D3D12_PIPELINE_STATE_FLAG_NONE = 0, - D3D12_PIPELINE_STATE_FLAG_TOOL_DEBUG = 0x1, - D3D12_PIPELINE_STATE_FLAG_DYNAMIC_DEPTH_BIAS = 0x4, - D3D12_PIPELINE_STATE_FLAG_DYNAMIC_INDEX_BUFFER_STRIP_CUT = 0x8 - } D3D12_PIPELINE_STATE_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_PIPELINE_STATE_FLAGS ) -typedef struct D3D12_GRAPHICS_PIPELINE_STATE_DESC - { - ID3D12RootSignature *pRootSignature; - D3D12_SHADER_BYTECODE VS; - D3D12_SHADER_BYTECODE PS; - D3D12_SHADER_BYTECODE DS; - D3D12_SHADER_BYTECODE HS; - D3D12_SHADER_BYTECODE GS; - D3D12_STREAM_OUTPUT_DESC StreamOutput; - D3D12_BLEND_DESC BlendState; - UINT SampleMask; - D3D12_RASTERIZER_DESC RasterizerState; - D3D12_DEPTH_STENCIL_DESC DepthStencilState; - D3D12_INPUT_LAYOUT_DESC InputLayout; - D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue; - D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType; - UINT NumRenderTargets; - DXGI_FORMAT RTVFormats[ 8 ]; - DXGI_FORMAT DSVFormat; - DXGI_SAMPLE_DESC SampleDesc; - UINT NodeMask; - D3D12_CACHED_PIPELINE_STATE CachedPSO; - D3D12_PIPELINE_STATE_FLAGS Flags; - } D3D12_GRAPHICS_PIPELINE_STATE_DESC; - -typedef struct D3D12_COMPUTE_PIPELINE_STATE_DESC - { - ID3D12RootSignature *pRootSignature; - D3D12_SHADER_BYTECODE CS; - UINT NodeMask; - D3D12_CACHED_PIPELINE_STATE CachedPSO; - D3D12_PIPELINE_STATE_FLAGS Flags; - } D3D12_COMPUTE_PIPELINE_STATE_DESC; - -struct D3D12_RT_FORMAT_ARRAY - { - DXGI_FORMAT RTFormats[ 8 ]; - UINT NumRenderTargets; - } ; -typedef struct D3D12_PIPELINE_STATE_STREAM_DESC - { - _In_ SIZE_T SizeInBytes; - _In_reads_(_Inexpressible_("Dependent on size of subobjects")) void *pPipelineStateSubobjectStream; - } D3D12_PIPELINE_STATE_STREAM_DESC; - -typedef -enum D3D12_PIPELINE_STATE_SUBOBJECT_TYPE - { - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_ROOT_SIGNATURE = 0, - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VS = ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_ROOT_SIGNATURE + 1 ) , - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PS = ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VS + 1 ) , - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DS = ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PS + 1 ) , - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_HS = ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DS + 1 ) , - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_GS = ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_HS + 1 ) , - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CS = ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_GS + 1 ) , - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_STREAM_OUTPUT = ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CS + 1 ) , - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_BLEND = ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_STREAM_OUTPUT + 1 ) , - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_MASK = ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_BLEND + 1 ) , - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER = ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_MASK + 1 ) , - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL = ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER + 1 ) , - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_INPUT_LAYOUT = ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL + 1 ) , - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_IB_STRIP_CUT_VALUE = ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_INPUT_LAYOUT + 1 ) , - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY = ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_IB_STRIP_CUT_VALUE + 1 ) , - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RENDER_TARGET_FORMATS = ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY + 1 ) , - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL_FORMAT = ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RENDER_TARGET_FORMATS + 1 ) , - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_DESC = ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL_FORMAT + 1 ) , - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_NODE_MASK = ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_DESC + 1 ) , - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CACHED_PSO = ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_NODE_MASK + 1 ) , - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_FLAGS = ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CACHED_PSO + 1 ) , - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1 = ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_FLAGS + 1 ) , - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VIEW_INSTANCING = ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1 + 1 ) , - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_AS = 24, - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MS = 25, - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL2 = 26, - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER1 = 27, - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER2 = 28, - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MAX_VALID = ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER2 + 1 ) - } D3D12_PIPELINE_STATE_SUBOBJECT_TYPE; - -typedef -enum D3D12_FEATURE - { - D3D12_FEATURE_D3D12_OPTIONS = 0, - D3D12_FEATURE_ARCHITECTURE = 1, - D3D12_FEATURE_FEATURE_LEVELS = 2, - D3D12_FEATURE_FORMAT_SUPPORT = 3, - D3D12_FEATURE_MULTISAMPLE_QUALITY_LEVELS = 4, - D3D12_FEATURE_FORMAT_INFO = 5, - D3D12_FEATURE_GPU_VIRTUAL_ADDRESS_SUPPORT = 6, - D3D12_FEATURE_SHADER_MODEL = 7, - D3D12_FEATURE_D3D12_OPTIONS1 = 8, - D3D12_FEATURE_PROTECTED_RESOURCE_SESSION_SUPPORT = 10, - D3D12_FEATURE_ROOT_SIGNATURE = 12, - D3D12_FEATURE_ARCHITECTURE1 = 16, - D3D12_FEATURE_D3D12_OPTIONS2 = 18, - D3D12_FEATURE_SHADER_CACHE = 19, - D3D12_FEATURE_COMMAND_QUEUE_PRIORITY = 20, - D3D12_FEATURE_D3D12_OPTIONS3 = 21, - D3D12_FEATURE_EXISTING_HEAPS = 22, - D3D12_FEATURE_D3D12_OPTIONS4 = 23, - D3D12_FEATURE_SERIALIZATION = 24, - D3D12_FEATURE_CROSS_NODE = 25, - D3D12_FEATURE_D3D12_OPTIONS5 = 27, - D3D12_FEATURE_DISPLAYABLE = 28, - D3D12_FEATURE_D3D12_OPTIONS6 = 30, - D3D12_FEATURE_QUERY_META_COMMAND = 31, - D3D12_FEATURE_D3D12_OPTIONS7 = 32, - D3D12_FEATURE_PROTECTED_RESOURCE_SESSION_TYPE_COUNT = 33, - D3D12_FEATURE_PROTECTED_RESOURCE_SESSION_TYPES = 34, - D3D12_FEATURE_D3D12_OPTIONS8 = 36, - D3D12_FEATURE_D3D12_OPTIONS9 = 37, - D3D12_FEATURE_D3D12_OPTIONS10 = 39, - D3D12_FEATURE_D3D12_OPTIONS11 = 40, - D3D12_FEATURE_D3D12_OPTIONS12 = 41, - D3D12_FEATURE_D3D12_OPTIONS13 = 42, - D3D12_FEATURE_D3D12_OPTIONS14 = 43, - D3D12_FEATURE_D3D12_OPTIONS15 = 44, - D3D12_FEATURE_D3D12_OPTIONS16 = 45, - D3D12_FEATURE_D3D12_OPTIONS17 = 46, - D3D12_FEATURE_D3D12_OPTIONS18 = 47, - D3D12_FEATURE_D3D12_OPTIONS19 = 48, - D3D12_FEATURE_D3D12_OPTIONS20 = 49, - D3D12_FEATURE_PREDICATION = 50, - D3D12_FEATURE_PLACED_RESOURCE_SUPPORT_INFO = 51, - D3D12_FEATURE_HARDWARE_COPY = 52, - D3D12_FEATURE_D3D12_OPTIONS21 = 53, - D3D12_FEATURE_BYTECODE_BYPASS_HASH_SUPPORTED = 57 - } D3D12_FEATURE; - -typedef -enum D3D12_SHADER_MIN_PRECISION_SUPPORT - { - D3D12_SHADER_MIN_PRECISION_SUPPORT_NONE = 0, - D3D12_SHADER_MIN_PRECISION_SUPPORT_10_BIT = 0x1, - D3D12_SHADER_MIN_PRECISION_SUPPORT_16_BIT = 0x2 - } D3D12_SHADER_MIN_PRECISION_SUPPORT; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_SHADER_MIN_PRECISION_SUPPORT ) -typedef -enum D3D12_TILED_RESOURCES_TIER - { - D3D12_TILED_RESOURCES_TIER_NOT_SUPPORTED = 0, - D3D12_TILED_RESOURCES_TIER_1 = 1, - D3D12_TILED_RESOURCES_TIER_2 = 2, - D3D12_TILED_RESOURCES_TIER_3 = 3, - D3D12_TILED_RESOURCES_TIER_4 = 4 - } D3D12_TILED_RESOURCES_TIER; - -typedef -enum D3D12_RESOURCE_BINDING_TIER - { - D3D12_RESOURCE_BINDING_TIER_1 = 1, - D3D12_RESOURCE_BINDING_TIER_2 = 2, - D3D12_RESOURCE_BINDING_TIER_3 = 3 - } D3D12_RESOURCE_BINDING_TIER; - -typedef -enum D3D12_CONSERVATIVE_RASTERIZATION_TIER - { - D3D12_CONSERVATIVE_RASTERIZATION_TIER_NOT_SUPPORTED = 0, - D3D12_CONSERVATIVE_RASTERIZATION_TIER_1 = 1, - D3D12_CONSERVATIVE_RASTERIZATION_TIER_2 = 2, - D3D12_CONSERVATIVE_RASTERIZATION_TIER_3 = 3 - } D3D12_CONSERVATIVE_RASTERIZATION_TIER; - -typedef -enum D3D12_FORMAT_SUPPORT1 - { - D3D12_FORMAT_SUPPORT1_NONE = 0, - D3D12_FORMAT_SUPPORT1_BUFFER = 0x1, - D3D12_FORMAT_SUPPORT1_IA_VERTEX_BUFFER = 0x2, - D3D12_FORMAT_SUPPORT1_IA_INDEX_BUFFER = 0x4, - D3D12_FORMAT_SUPPORT1_SO_BUFFER = 0x8, - D3D12_FORMAT_SUPPORT1_TEXTURE1D = 0x10, - D3D12_FORMAT_SUPPORT1_TEXTURE2D = 0x20, - D3D12_FORMAT_SUPPORT1_TEXTURE3D = 0x40, - D3D12_FORMAT_SUPPORT1_TEXTURECUBE = 0x80, - D3D12_FORMAT_SUPPORT1_SHADER_LOAD = 0x100, - D3D12_FORMAT_SUPPORT1_SHADER_SAMPLE = 0x200, - D3D12_FORMAT_SUPPORT1_SHADER_SAMPLE_COMPARISON = 0x400, - D3D12_FORMAT_SUPPORT1_SHADER_SAMPLE_MONO_TEXT = 0x800, - D3D12_FORMAT_SUPPORT1_MIP = 0x1000, - D3D12_FORMAT_SUPPORT1_RENDER_TARGET = 0x4000, - D3D12_FORMAT_SUPPORT1_BLENDABLE = 0x8000, - D3D12_FORMAT_SUPPORT1_DEPTH_STENCIL = 0x10000, - D3D12_FORMAT_SUPPORT1_MULTISAMPLE_RESOLVE = 0x40000, - D3D12_FORMAT_SUPPORT1_DISPLAY = 0x80000, - D3D12_FORMAT_SUPPORT1_CAST_WITHIN_BIT_LAYOUT = 0x100000, - D3D12_FORMAT_SUPPORT1_MULTISAMPLE_RENDERTARGET = 0x200000, - D3D12_FORMAT_SUPPORT1_MULTISAMPLE_LOAD = 0x400000, - D3D12_FORMAT_SUPPORT1_SHADER_GATHER = 0x800000, - D3D12_FORMAT_SUPPORT1_BACK_BUFFER_CAST = 0x1000000, - D3D12_FORMAT_SUPPORT1_TYPED_UNORDERED_ACCESS_VIEW = 0x2000000, - D3D12_FORMAT_SUPPORT1_SHADER_GATHER_COMPARISON = 0x4000000, - D3D12_FORMAT_SUPPORT1_DECODER_OUTPUT = 0x8000000, - D3D12_FORMAT_SUPPORT1_VIDEO_PROCESSOR_OUTPUT = 0x10000000, - D3D12_FORMAT_SUPPORT1_VIDEO_PROCESSOR_INPUT = 0x20000000, - D3D12_FORMAT_SUPPORT1_VIDEO_ENCODER = 0x40000000 - } D3D12_FORMAT_SUPPORT1; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_FORMAT_SUPPORT1 ) -typedef -enum D3D12_FORMAT_SUPPORT2 - { - D3D12_FORMAT_SUPPORT2_NONE = 0, - D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_ADD = 0x1, - D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_BITWISE_OPS = 0x2, - D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_COMPARE_STORE_OR_COMPARE_EXCHANGE = 0x4, - D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_EXCHANGE = 0x8, - D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_SIGNED_MIN_OR_MAX = 0x10, - D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_UNSIGNED_MIN_OR_MAX = 0x20, - D3D12_FORMAT_SUPPORT2_UAV_TYPED_LOAD = 0x40, - D3D12_FORMAT_SUPPORT2_UAV_TYPED_STORE = 0x80, - D3D12_FORMAT_SUPPORT2_OUTPUT_MERGER_LOGIC_OP = 0x100, - D3D12_FORMAT_SUPPORT2_TILED = 0x200, - D3D12_FORMAT_SUPPORT2_MULTIPLANE_OVERLAY = 0x4000, - D3D12_FORMAT_SUPPORT2_SAMPLER_FEEDBACK = 0x8000 - } D3D12_FORMAT_SUPPORT2; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_FORMAT_SUPPORT2 ) -typedef -enum D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS - { - D3D12_MULTISAMPLE_QUALITY_LEVELS_FLAG_NONE = 0, - D3D12_MULTISAMPLE_QUALITY_LEVELS_FLAG_TILED_RESOURCE = 0x1 - } D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS ) -typedef -enum D3D12_CROSS_NODE_SHARING_TIER - { - D3D12_CROSS_NODE_SHARING_TIER_NOT_SUPPORTED = 0, - D3D12_CROSS_NODE_SHARING_TIER_1_EMULATED = 1, - D3D12_CROSS_NODE_SHARING_TIER_1 = 2, - D3D12_CROSS_NODE_SHARING_TIER_2 = 3, - D3D12_CROSS_NODE_SHARING_TIER_3 = 4 - } D3D12_CROSS_NODE_SHARING_TIER; - -typedef -enum D3D12_RESOURCE_HEAP_TIER - { - D3D12_RESOURCE_HEAP_TIER_1 = 1, - D3D12_RESOURCE_HEAP_TIER_2 = 2 - } D3D12_RESOURCE_HEAP_TIER; - -typedef -enum D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER - { - D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER_NOT_SUPPORTED = 0, - D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER_1 = 1, - D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER_2 = 2 - } D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER; - -typedef -enum D3D12_VIEW_INSTANCING_TIER - { - D3D12_VIEW_INSTANCING_TIER_NOT_SUPPORTED = 0, - D3D12_VIEW_INSTANCING_TIER_1 = 1, - D3D12_VIEW_INSTANCING_TIER_2 = 2, - D3D12_VIEW_INSTANCING_TIER_3 = 3 - } D3D12_VIEW_INSTANCING_TIER; - -typedef -enum D3D12_WORK_GRAPHS_TIER - { - D3D12_WORK_GRAPHS_TIER_NOT_SUPPORTED = 0, - D3D12_WORK_GRAPHS_TIER_1_0 = 10 - } D3D12_WORK_GRAPHS_TIER; - -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS - { - _Out_ BOOL DoublePrecisionFloatShaderOps; - _Out_ BOOL OutputMergerLogicOp; - _Out_ D3D12_SHADER_MIN_PRECISION_SUPPORT MinPrecisionSupport; - _Out_ D3D12_TILED_RESOURCES_TIER TiledResourcesTier; - _Out_ D3D12_RESOURCE_BINDING_TIER ResourceBindingTier; - _Out_ BOOL PSSpecifiedStencilRefSupported; - _Out_ BOOL TypedUAVLoadAdditionalFormats; - _Out_ BOOL ROVsSupported; - _Out_ D3D12_CONSERVATIVE_RASTERIZATION_TIER ConservativeRasterizationTier; - _Out_ UINT MaxGPUVirtualAddressBitsPerResource; - _Out_ BOOL StandardSwizzle64KBSupported; - _Out_ D3D12_CROSS_NODE_SHARING_TIER CrossNodeSharingTier; - _Out_ BOOL CrossAdapterRowMajorTextureSupported; - _Out_ BOOL VPAndRTArrayIndexFromAnyShaderFeedingRasterizerSupportedWithoutGSEmulation; - _Out_ D3D12_RESOURCE_HEAP_TIER ResourceHeapTier; - } D3D12_FEATURE_DATA_D3D12_OPTIONS; - -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS1 - { - _Out_ BOOL WaveOps; - _Out_ UINT WaveLaneCountMin; - _Out_ UINT WaveLaneCountMax; - _Out_ UINT TotalLaneCount; - _Out_ BOOL ExpandedComputeResourceStates; - _Out_ BOOL Int64ShaderOps; - } D3D12_FEATURE_DATA_D3D12_OPTIONS1; - -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS2 - { - _Out_ BOOL DepthBoundsTestSupported; - _Out_ D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER ProgrammableSamplePositionsTier; - } D3D12_FEATURE_DATA_D3D12_OPTIONS2; - -typedef -enum D3D_ROOT_SIGNATURE_VERSION - { - D3D_ROOT_SIGNATURE_VERSION_1 = 0x1, - D3D_ROOT_SIGNATURE_VERSION_1_0 = 0x1, - D3D_ROOT_SIGNATURE_VERSION_1_1 = 0x2, - D3D_ROOT_SIGNATURE_VERSION_1_2 = 0x3 - } D3D_ROOT_SIGNATURE_VERSION; - -typedef struct D3D12_FEATURE_DATA_ROOT_SIGNATURE - { - _Inout_ D3D_ROOT_SIGNATURE_VERSION HighestVersion; - } D3D12_FEATURE_DATA_ROOT_SIGNATURE; - -typedef struct D3D12_FEATURE_DATA_ARCHITECTURE - { - _In_ UINT NodeIndex; - _Out_ BOOL TileBasedRenderer; - _Out_ BOOL UMA; - _Out_ BOOL CacheCoherentUMA; - } D3D12_FEATURE_DATA_ARCHITECTURE; - -typedef struct D3D12_FEATURE_DATA_ARCHITECTURE1 - { - _In_ UINT NodeIndex; - _Out_ BOOL TileBasedRenderer; - _Out_ BOOL UMA; - _Out_ BOOL CacheCoherentUMA; - _Out_ BOOL IsolatedMMU; - } D3D12_FEATURE_DATA_ARCHITECTURE1; - -typedef struct D3D12_FEATURE_DATA_FEATURE_LEVELS - { - _In_ UINT NumFeatureLevels; - _In_reads_(NumFeatureLevels) const D3D_FEATURE_LEVEL *pFeatureLevelsRequested; - _Out_ D3D_FEATURE_LEVEL MaxSupportedFeatureLevel; - } D3D12_FEATURE_DATA_FEATURE_LEVELS; - -typedef -enum D3D_SHADER_MODEL - { - D3D_SHADER_MODEL_NONE = 0, - D3D_SHADER_MODEL_5_1 = 0x51, - D3D_SHADER_MODEL_6_0 = 0x60, - D3D_SHADER_MODEL_6_1 = 0x61, - D3D_SHADER_MODEL_6_2 = 0x62, - D3D_SHADER_MODEL_6_3 = 0x63, - D3D_SHADER_MODEL_6_4 = 0x64, - D3D_SHADER_MODEL_6_5 = 0x65, - D3D_SHADER_MODEL_6_6 = 0x66, - D3D_SHADER_MODEL_6_7 = 0x67, - D3D_SHADER_MODEL_6_8 = 0x68, - D3D_SHADER_MODEL_6_9 = 0x69, - D3D_HIGHEST_SHADER_MODEL = D3D_SHADER_MODEL_6_9 - } D3D_SHADER_MODEL; - -typedef struct D3D12_FEATURE_DATA_SHADER_MODEL - { - _Inout_ D3D_SHADER_MODEL HighestShaderModel; - } D3D12_FEATURE_DATA_SHADER_MODEL; - -typedef struct D3D12_FEATURE_DATA_FORMAT_SUPPORT - { - _In_ DXGI_FORMAT Format; - _Out_ D3D12_FORMAT_SUPPORT1 Support1; - _Out_ D3D12_FORMAT_SUPPORT2 Support2; - } D3D12_FEATURE_DATA_FORMAT_SUPPORT; - -typedef struct D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS - { - _In_ DXGI_FORMAT Format; - _In_ UINT SampleCount; - _In_ D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS Flags; - _Out_ UINT NumQualityLevels; - } D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS; - -typedef struct D3D12_FEATURE_DATA_FORMAT_INFO - { - DXGI_FORMAT Format; - UINT8 PlaneCount; - } D3D12_FEATURE_DATA_FORMAT_INFO; - -typedef struct D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT - { - UINT MaxGPUVirtualAddressBitsPerResource; - UINT MaxGPUVirtualAddressBitsPerProcess; - } D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT; - -typedef -enum D3D12_SHADER_CACHE_SUPPORT_FLAGS - { - D3D12_SHADER_CACHE_SUPPORT_NONE = 0, - D3D12_SHADER_CACHE_SUPPORT_SINGLE_PSO = 0x1, - D3D12_SHADER_CACHE_SUPPORT_LIBRARY = 0x2, - D3D12_SHADER_CACHE_SUPPORT_AUTOMATIC_INPROC_CACHE = 0x4, - D3D12_SHADER_CACHE_SUPPORT_AUTOMATIC_DISK_CACHE = 0x8, - D3D12_SHADER_CACHE_SUPPORT_DRIVER_MANAGED_CACHE = 0x10, - D3D12_SHADER_CACHE_SUPPORT_SHADER_CONTROL_CLEAR = 0x20, - D3D12_SHADER_CACHE_SUPPORT_SHADER_SESSION_DELETE = 0x40 - } D3D12_SHADER_CACHE_SUPPORT_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_SHADER_CACHE_SUPPORT_FLAGS ) -typedef struct D3D12_FEATURE_DATA_SHADER_CACHE - { - _Out_ D3D12_SHADER_CACHE_SUPPORT_FLAGS SupportFlags; - } D3D12_FEATURE_DATA_SHADER_CACHE; - -typedef struct D3D12_FEATURE_DATA_COMMAND_QUEUE_PRIORITY - { - _In_ D3D12_COMMAND_LIST_TYPE CommandListType; - _In_ UINT Priority; - _Out_ BOOL PriorityForTypeIsSupported; - } D3D12_FEATURE_DATA_COMMAND_QUEUE_PRIORITY; - -typedef -enum D3D12_COMMAND_LIST_SUPPORT_FLAGS - { - D3D12_COMMAND_LIST_SUPPORT_FLAG_NONE = 0, - D3D12_COMMAND_LIST_SUPPORT_FLAG_DIRECT = ( 1 << D3D12_COMMAND_LIST_TYPE_DIRECT ) , - D3D12_COMMAND_LIST_SUPPORT_FLAG_BUNDLE = ( 1 << D3D12_COMMAND_LIST_TYPE_BUNDLE ) , - D3D12_COMMAND_LIST_SUPPORT_FLAG_COMPUTE = ( 1 << D3D12_COMMAND_LIST_TYPE_COMPUTE ) , - D3D12_COMMAND_LIST_SUPPORT_FLAG_COPY = ( 1 << D3D12_COMMAND_LIST_TYPE_COPY ) , - D3D12_COMMAND_LIST_SUPPORT_FLAG_VIDEO_DECODE = ( 1 << D3D12_COMMAND_LIST_TYPE_VIDEO_DECODE ) , - D3D12_COMMAND_LIST_SUPPORT_FLAG_VIDEO_PROCESS = ( 1 << D3D12_COMMAND_LIST_TYPE_VIDEO_PROCESS ) , - D3D12_COMMAND_LIST_SUPPORT_FLAG_VIDEO_ENCODE = ( 1 << D3D12_COMMAND_LIST_TYPE_VIDEO_ENCODE ) - } D3D12_COMMAND_LIST_SUPPORT_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_COMMAND_LIST_SUPPORT_FLAGS ) -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS3 - { - _Out_ BOOL CopyQueueTimestampQueriesSupported; - _Out_ BOOL CastingFullyTypedFormatSupported; - _Out_ D3D12_COMMAND_LIST_SUPPORT_FLAGS WriteBufferImmediateSupportFlags; - _Out_ D3D12_VIEW_INSTANCING_TIER ViewInstancingTier; - _Out_ BOOL BarycentricsSupported; - } D3D12_FEATURE_DATA_D3D12_OPTIONS3; - -typedef struct D3D12_FEATURE_DATA_EXISTING_HEAPS - { - _Out_ BOOL Supported; - } D3D12_FEATURE_DATA_EXISTING_HEAPS; - -typedef -enum D3D12_SHARED_RESOURCE_COMPATIBILITY_TIER - { - D3D12_SHARED_RESOURCE_COMPATIBILITY_TIER_0 = 0, - D3D12_SHARED_RESOURCE_COMPATIBILITY_TIER_1 = ( D3D12_SHARED_RESOURCE_COMPATIBILITY_TIER_0 + 1 ) , - D3D12_SHARED_RESOURCE_COMPATIBILITY_TIER_2 = ( D3D12_SHARED_RESOURCE_COMPATIBILITY_TIER_1 + 1 ) - } D3D12_SHARED_RESOURCE_COMPATIBILITY_TIER; - -typedef struct D3D12_FEATURE_DATA_DISPLAYABLE - { - _Out_ BOOL DisplayableTexture; - _Out_ D3D12_SHARED_RESOURCE_COMPATIBILITY_TIER SharedResourceCompatibilityTier; - } D3D12_FEATURE_DATA_DISPLAYABLE; - -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS4 - { - _Out_ BOOL MSAA64KBAlignedTextureSupported; - _Out_ D3D12_SHARED_RESOURCE_COMPATIBILITY_TIER SharedResourceCompatibilityTier; - _Out_ BOOL Native16BitShaderOpsSupported; - } D3D12_FEATURE_DATA_D3D12_OPTIONS4; - -typedef -enum D3D12_HEAP_SERIALIZATION_TIER - { - D3D12_HEAP_SERIALIZATION_TIER_0 = 0, - D3D12_HEAP_SERIALIZATION_TIER_10 = 10 - } D3D12_HEAP_SERIALIZATION_TIER; - -typedef struct D3D12_FEATURE_DATA_SERIALIZATION - { - _In_ UINT NodeIndex; - _Out_ D3D12_HEAP_SERIALIZATION_TIER HeapSerializationTier; - } D3D12_FEATURE_DATA_SERIALIZATION; - -typedef struct D3D12_FEATURE_DATA_CROSS_NODE - { - D3D12_CROSS_NODE_SHARING_TIER SharingTier; - BOOL AtomicShaderInstructions; - } D3D12_FEATURE_DATA_CROSS_NODE; - -typedef -enum D3D12_RENDER_PASS_TIER - { - D3D12_RENDER_PASS_TIER_0 = 0, - D3D12_RENDER_PASS_TIER_1 = 1, - D3D12_RENDER_PASS_TIER_2 = 2 - } D3D12_RENDER_PASS_TIER; - -typedef -enum D3D12_RAYTRACING_TIER - { - D3D12_RAYTRACING_TIER_NOT_SUPPORTED = 0, - D3D12_RAYTRACING_TIER_1_0 = 10, - D3D12_RAYTRACING_TIER_1_1 = 11 - } D3D12_RAYTRACING_TIER; - -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS5 - { - _Out_ BOOL SRVOnlyTiledResourceTier3; - _Out_ D3D12_RENDER_PASS_TIER RenderPassesTier; - _Out_ D3D12_RAYTRACING_TIER RaytracingTier; - } D3D12_FEATURE_DATA_D3D12_OPTIONS5; - -typedef -enum D3D12_VARIABLE_SHADING_RATE_TIER - { - D3D12_VARIABLE_SHADING_RATE_TIER_NOT_SUPPORTED = 0, - D3D12_VARIABLE_SHADING_RATE_TIER_1 = 1, - D3D12_VARIABLE_SHADING_RATE_TIER_2 = 2 - } D3D12_VARIABLE_SHADING_RATE_TIER; - -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS6 - { - _Out_ BOOL AdditionalShadingRatesSupported; - _Out_ BOOL PerPrimitiveShadingRateSupportedWithViewportIndexing; - _Out_ D3D12_VARIABLE_SHADING_RATE_TIER VariableShadingRateTier; - _Out_ UINT ShadingRateImageTileSize; - _Out_ BOOL BackgroundProcessingSupported; - } D3D12_FEATURE_DATA_D3D12_OPTIONS6; - -typedef -enum D3D12_MESH_SHADER_TIER - { - D3D12_MESH_SHADER_TIER_NOT_SUPPORTED = 0, - D3D12_MESH_SHADER_TIER_1 = 10 - } D3D12_MESH_SHADER_TIER; - -typedef -enum D3D12_SAMPLER_FEEDBACK_TIER - { - D3D12_SAMPLER_FEEDBACK_TIER_NOT_SUPPORTED = 0, - D3D12_SAMPLER_FEEDBACK_TIER_0_9 = 90, - D3D12_SAMPLER_FEEDBACK_TIER_1_0 = 100 - } D3D12_SAMPLER_FEEDBACK_TIER; - -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS7 - { - _Out_ D3D12_MESH_SHADER_TIER MeshShaderTier; - _Out_ D3D12_SAMPLER_FEEDBACK_TIER SamplerFeedbackTier; - } D3D12_FEATURE_DATA_D3D12_OPTIONS7; - -typedef struct D3D12_FEATURE_DATA_QUERY_META_COMMAND - { - _In_ GUID CommandId; - _In_ UINT NodeMask; - _Field_size_bytes_full_opt_( QueryInputDataSizeInBytes ) const void *pQueryInputData; - _In_ SIZE_T QueryInputDataSizeInBytes; - _Field_size_bytes_full_( QueryOutputDataSizeInBytes ) void *pQueryOutputData; - _In_ SIZE_T QueryOutputDataSizeInBytes; - } D3D12_FEATURE_DATA_QUERY_META_COMMAND; - -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS8 - { - _Out_ BOOL UnalignedBlockTexturesSupported; - } D3D12_FEATURE_DATA_D3D12_OPTIONS8; - -typedef -enum D3D12_WAVE_MMA_TIER - { - D3D12_WAVE_MMA_TIER_NOT_SUPPORTED = 0, - D3D12_WAVE_MMA_TIER_1_0 = 10 - } D3D12_WAVE_MMA_TIER; - -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS9 - { - _Out_ BOOL MeshShaderPipelineStatsSupported; - _Out_ BOOL MeshShaderSupportsFullRangeRenderTargetArrayIndex; - _Out_ BOOL AtomicInt64OnTypedResourceSupported; - _Out_ BOOL AtomicInt64OnGroupSharedSupported; - _Out_ BOOL DerivativesInMeshAndAmplificationShadersSupported; - _Out_ D3D12_WAVE_MMA_TIER WaveMMATier; - } D3D12_FEATURE_DATA_D3D12_OPTIONS9; - -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS10 - { - _Out_ BOOL VariableRateShadingSumCombinerSupported; - _Out_ BOOL MeshShaderPerPrimitiveShadingRateSupported; - } D3D12_FEATURE_DATA_D3D12_OPTIONS10; - -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS11 - { - _Out_ BOOL AtomicInt64OnDescriptorHeapResourceSupported; - } D3D12_FEATURE_DATA_D3D12_OPTIONS11; - -typedef -enum D3D12_TRI_STATE - { - D3D12_TRI_STATE_UNKNOWN = -1, - D3D12_TRI_STATE_FALSE = 0, - D3D12_TRI_STATE_TRUE = 1 - } D3D12_TRI_STATE; - -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS12 - { - _Out_ D3D12_TRI_STATE MSPrimitivesPipelineStatisticIncludesCulledPrimitives; - _Out_ BOOL EnhancedBarriersSupported; - _Out_ BOOL RelaxedFormatCastingSupported; - } D3D12_FEATURE_DATA_D3D12_OPTIONS12; - -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS13 - { - _Out_ BOOL UnrestrictedBufferTextureCopyPitchSupported; - _Out_ BOOL UnrestrictedVertexElementAlignmentSupported; - _Out_ BOOL InvertedViewportHeightFlipsYSupported; - _Out_ BOOL InvertedViewportDepthFlipsZSupported; - _Out_ BOOL TextureCopyBetweenDimensionsSupported; - _Out_ BOOL AlphaBlendFactorSupported; - } D3D12_FEATURE_DATA_D3D12_OPTIONS13; - -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS14 - { - _Out_ BOOL AdvancedTextureOpsSupported; - _Out_ BOOL WriteableMSAATexturesSupported; - _Out_ BOOL IndependentFrontAndBackStencilRefMaskSupported; - } D3D12_FEATURE_DATA_D3D12_OPTIONS14; - -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS15 - { - _Out_ BOOL TriangleFanSupported; - _Out_ BOOL DynamicIndexBufferStripCutSupported; - } D3D12_FEATURE_DATA_D3D12_OPTIONS15; - -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS16 - { - _Out_ BOOL DynamicDepthBiasSupported; - _Out_ BOOL GPUUploadHeapSupported; - } D3D12_FEATURE_DATA_D3D12_OPTIONS16; - -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS17 - { - _Out_ BOOL NonNormalizedCoordinateSamplersSupported; - _Out_ BOOL ManualWriteTrackingResourceSupported; - } D3D12_FEATURE_DATA_D3D12_OPTIONS17; - -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS18 - { - _Out_ BOOL RenderPassesValid; - } D3D12_FEATURE_DATA_D3D12_OPTIONS18; - -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS19 - { - BOOL MismatchingOutputDimensionsSupported; - UINT SupportedSampleCountsWithNoOutputs; - BOOL PointSamplingAddressesNeverRoundUp; - BOOL RasterizerDesc2Supported; - BOOL NarrowQuadrilateralLinesSupported; - BOOL AnisoFilterWithPointMipSupported; - UINT MaxSamplerDescriptorHeapSize; - UINT MaxSamplerDescriptorHeapSizeWithStaticSamplers; - UINT MaxViewDescriptorHeapSize; - _Out_ BOOL ComputeOnlyCustomHeapSupported; - } D3D12_FEATURE_DATA_D3D12_OPTIONS19; - -typedef -enum D3D12_RECREATE_AT_TIER - { - D3D12_RECREATE_AT_TIER_NOT_SUPPORTED = 0, - D3D12_RECREATE_AT_TIER_1 = 1 - } D3D12_RECREATE_AT_TIER; - -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS20 - { - _Out_ BOOL ComputeOnlyWriteWatchSupported; - D3D12_RECREATE_AT_TIER RecreateAtTier; - } D3D12_FEATURE_DATA_D3D12_OPTIONS20; - -typedef -enum D3D12_EXECUTE_INDIRECT_TIER - { - D3D12_EXECUTE_INDIRECT_TIER_1_0 = 10, - D3D12_EXECUTE_INDIRECT_TIER_1_1 = 11 - } D3D12_EXECUTE_INDIRECT_TIER; - -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS21 - { - _Out_ D3D12_WORK_GRAPHS_TIER WorkGraphsTier; - _Out_ D3D12_EXECUTE_INDIRECT_TIER ExecuteIndirectTier; - _Out_ BOOL SampleCmpGradientAndBiasSupported; - _Out_ BOOL ExtendedCommandInfoSupported; - } D3D12_FEATURE_DATA_D3D12_OPTIONS21; - -typedef struct D3D12_FEATURE_DATA_PREDICATION - { - _Out_ BOOL Supported; - } D3D12_FEATURE_DATA_PREDICATION; - -typedef struct D3D12_FEATURE_DATA_HARDWARE_COPY - { - _Out_ BOOL Supported; - } D3D12_FEATURE_DATA_HARDWARE_COPY; - -typedef struct D3D12_FEATURE_DATA_BYTECODE_BYPASS_HASH_SUPPORTED - { - _Out_ BOOL Supported; - } D3D12_FEATURE_DATA_BYTECODE_BYPASS_HASH_SUPPORTED; - -typedef struct D3D12_RESOURCE_ALLOCATION_INFO - { - UINT64 SizeInBytes; - UINT64 Alignment; - } D3D12_RESOURCE_ALLOCATION_INFO; - -typedef struct D3D12_RESOURCE_ALLOCATION_INFO1 - { - UINT64 Offset; - UINT64 Alignment; - UINT64 SizeInBytes; - } D3D12_RESOURCE_ALLOCATION_INFO1; - -typedef -enum D3D12_HEAP_TYPE - { - D3D12_HEAP_TYPE_DEFAULT = 1, - D3D12_HEAP_TYPE_UPLOAD = 2, - D3D12_HEAP_TYPE_READBACK = 3, - D3D12_HEAP_TYPE_CUSTOM = 4, - D3D12_HEAP_TYPE_GPU_UPLOAD = 5 - } D3D12_HEAP_TYPE; - -typedef -enum D3D12_CPU_PAGE_PROPERTY - { - D3D12_CPU_PAGE_PROPERTY_UNKNOWN = 0, - D3D12_CPU_PAGE_PROPERTY_NOT_AVAILABLE = 1, - D3D12_CPU_PAGE_PROPERTY_WRITE_COMBINE = 2, - D3D12_CPU_PAGE_PROPERTY_WRITE_BACK = 3 - } D3D12_CPU_PAGE_PROPERTY; - -typedef -enum D3D12_MEMORY_POOL - { - D3D12_MEMORY_POOL_UNKNOWN = 0, - D3D12_MEMORY_POOL_L0 = 1, - D3D12_MEMORY_POOL_L1 = 2 - } D3D12_MEMORY_POOL; - -typedef struct D3D12_HEAP_PROPERTIES - { - D3D12_HEAP_TYPE Type; - D3D12_CPU_PAGE_PROPERTY CPUPageProperty; - D3D12_MEMORY_POOL MemoryPoolPreference; - UINT CreationNodeMask; - UINT VisibleNodeMask; - } D3D12_HEAP_PROPERTIES; - -typedef -enum D3D12_HEAP_FLAGS - { - D3D12_HEAP_FLAG_NONE = 0, - D3D12_HEAP_FLAG_SHARED = 0x1, - D3D12_HEAP_FLAG_DENY_BUFFERS = 0x4, - D3D12_HEAP_FLAG_ALLOW_DISPLAY = 0x8, - D3D12_HEAP_FLAG_SHARED_CROSS_ADAPTER = 0x20, - D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES = 0x40, - D3D12_HEAP_FLAG_DENY_NON_RT_DS_TEXTURES = 0x80, - D3D12_HEAP_FLAG_HARDWARE_PROTECTED = 0x100, - D3D12_HEAP_FLAG_ALLOW_WRITE_WATCH = 0x200, - D3D12_HEAP_FLAG_ALLOW_SHADER_ATOMICS = 0x400, - D3D12_HEAP_FLAG_CREATE_NOT_RESIDENT = 0x800, - D3D12_HEAP_FLAG_CREATE_NOT_ZEROED = 0x1000, - D3D12_HEAP_FLAG_TOOLS_USE_MANUAL_WRITE_TRACKING = 0x2000, - D3D12_HEAP_FLAG_ALLOW_ALL_BUFFERS_AND_TEXTURES = 0, - D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS = 0xc0, - D3D12_HEAP_FLAG_ALLOW_ONLY_NON_RT_DS_TEXTURES = 0x44, - D3D12_HEAP_FLAG_ALLOW_ONLY_RT_DS_TEXTURES = 0x84 - } D3D12_HEAP_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_HEAP_FLAGS ) -typedef struct D3D12_HEAP_DESC - { - UINT64 SizeInBytes; - D3D12_HEAP_PROPERTIES Properties; - UINT64 Alignment; - D3D12_HEAP_FLAGS Flags; - } D3D12_HEAP_DESC; - -typedef -enum D3D12_RESOURCE_DIMENSION - { - D3D12_RESOURCE_DIMENSION_UNKNOWN = 0, - D3D12_RESOURCE_DIMENSION_BUFFER = 1, - D3D12_RESOURCE_DIMENSION_TEXTURE1D = 2, - D3D12_RESOURCE_DIMENSION_TEXTURE2D = 3, - D3D12_RESOURCE_DIMENSION_TEXTURE3D = 4 - } D3D12_RESOURCE_DIMENSION; - -typedef struct D3D12_FEATURE_DATA_PLACED_RESOURCE_SUPPORT_INFO - { - _In_ DXGI_FORMAT Format; - _In_ D3D12_RESOURCE_DIMENSION Dimension; - _In_ D3D12_HEAP_PROPERTIES DestHeapProperties; - _Out_ BOOL Supported; - } D3D12_FEATURE_DATA_PLACED_RESOURCE_SUPPORT_INFO; - -typedef -enum D3D12_TEXTURE_LAYOUT - { - D3D12_TEXTURE_LAYOUT_UNKNOWN = 0, - D3D12_TEXTURE_LAYOUT_ROW_MAJOR = 1, - D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE = 2, - D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE = 3 - } D3D12_TEXTURE_LAYOUT; - -typedef -enum D3D12_RESOURCE_FLAGS - { - D3D12_RESOURCE_FLAG_NONE = 0, - D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET = 0x1, - D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL = 0x2, - D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS = 0x4, - D3D12_RESOURCE_FLAG_DENY_SHADER_RESOURCE = 0x8, - D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTER = 0x10, - D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS = 0x20, - D3D12_RESOURCE_FLAG_VIDEO_DECODE_REFERENCE_ONLY = 0x40, - D3D12_RESOURCE_FLAG_VIDEO_ENCODE_REFERENCE_ONLY = 0x80, - D3D12_RESOURCE_FLAG_RAYTRACING_ACCELERATION_STRUCTURE = 0x100 - } D3D12_RESOURCE_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_RESOURCE_FLAGS ) -typedef struct D3D12_MIP_REGION - { - UINT Width; - UINT Height; - UINT Depth; - } D3D12_MIP_REGION; - -typedef struct D3D12_RESOURCE_DESC - { - D3D12_RESOURCE_DIMENSION Dimension; - UINT64 Alignment; - UINT64 Width; - UINT Height; - UINT16 DepthOrArraySize; - UINT16 MipLevels; - DXGI_FORMAT Format; - DXGI_SAMPLE_DESC SampleDesc; - D3D12_TEXTURE_LAYOUT Layout; - D3D12_RESOURCE_FLAGS Flags; - } D3D12_RESOURCE_DESC; - -typedef struct D3D12_RESOURCE_DESC1 - { - D3D12_RESOURCE_DIMENSION Dimension; - UINT64 Alignment; - UINT64 Width; - UINT Height; - UINT16 DepthOrArraySize; - UINT16 MipLevels; - DXGI_FORMAT Format; - DXGI_SAMPLE_DESC SampleDesc; - D3D12_TEXTURE_LAYOUT Layout; - D3D12_RESOURCE_FLAGS Flags; - D3D12_MIP_REGION SamplerFeedbackMipRegion; - } D3D12_RESOURCE_DESC1; - -typedef struct D3D12_DEPTH_STENCIL_VALUE - { - FLOAT Depth; - UINT8 Stencil; - } D3D12_DEPTH_STENCIL_VALUE; - -typedef struct D3D12_CLEAR_VALUE - { - DXGI_FORMAT Format; - union - { - FLOAT Color[ 4 ]; - D3D12_DEPTH_STENCIL_VALUE DepthStencil; - } ; - } D3D12_CLEAR_VALUE; - -typedef struct D3D12_RANGE - { - SIZE_T Begin; - SIZE_T End; - } D3D12_RANGE; - -typedef struct D3D12_RANGE_UINT64 - { - UINT64 Begin; - UINT64 End; - } D3D12_RANGE_UINT64; - -typedef struct D3D12_SUBRESOURCE_RANGE_UINT64 - { - UINT Subresource; - D3D12_RANGE_UINT64 Range; - } D3D12_SUBRESOURCE_RANGE_UINT64; - -typedef struct D3D12_SUBRESOURCE_INFO - { - UINT64 Offset; - UINT RowPitch; - UINT DepthPitch; - } D3D12_SUBRESOURCE_INFO; - -typedef struct D3D12_TILED_RESOURCE_COORDINATE - { - UINT X; - UINT Y; - UINT Z; - UINT Subresource; - } D3D12_TILED_RESOURCE_COORDINATE; - -typedef struct D3D12_TILE_REGION_SIZE - { - UINT NumTiles; - BOOL UseBox; - UINT Width; - UINT16 Height; - UINT16 Depth; - } D3D12_TILE_REGION_SIZE; - -typedef -enum D3D12_TILE_RANGE_FLAGS - { - D3D12_TILE_RANGE_FLAG_NONE = 0, - D3D12_TILE_RANGE_FLAG_NULL = 1, - D3D12_TILE_RANGE_FLAG_SKIP = 2, - D3D12_TILE_RANGE_FLAG_REUSE_SINGLE_TILE = 4 - } D3D12_TILE_RANGE_FLAGS; - -typedef struct D3D12_SUBRESOURCE_TILING - { - UINT WidthInTiles; - UINT16 HeightInTiles; - UINT16 DepthInTiles; - UINT StartTileIndexInOverallResource; - } D3D12_SUBRESOURCE_TILING; - -typedef struct D3D12_TILE_SHAPE - { - UINT WidthInTexels; - UINT HeightInTexels; - UINT DepthInTexels; - } D3D12_TILE_SHAPE; - -typedef struct D3D12_PACKED_MIP_INFO - { - UINT8 NumStandardMips; - UINT8 NumPackedMips; - UINT NumTilesForPackedMips; - UINT StartTileIndexInOverallResource; - } D3D12_PACKED_MIP_INFO; - -typedef -enum D3D12_TILE_MAPPING_FLAGS - { - D3D12_TILE_MAPPING_FLAG_NONE = 0, - D3D12_TILE_MAPPING_FLAG_NO_HAZARD = 0x1 - } D3D12_TILE_MAPPING_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_TILE_MAPPING_FLAGS ) -typedef -enum D3D12_TILE_COPY_FLAGS - { - D3D12_TILE_COPY_FLAG_NONE = 0, - D3D12_TILE_COPY_FLAG_NO_HAZARD = 0x1, - D3D12_TILE_COPY_FLAG_LINEAR_BUFFER_TO_SWIZZLED_TILED_RESOURCE = 0x2, - D3D12_TILE_COPY_FLAG_SWIZZLED_TILED_RESOURCE_TO_LINEAR_BUFFER = 0x4 - } D3D12_TILE_COPY_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_TILE_COPY_FLAGS ) -typedef -enum D3D12_RESOURCE_STATES - { - D3D12_RESOURCE_STATE_COMMON = 0, - D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER = 0x1, - D3D12_RESOURCE_STATE_INDEX_BUFFER = 0x2, - D3D12_RESOURCE_STATE_RENDER_TARGET = 0x4, - D3D12_RESOURCE_STATE_UNORDERED_ACCESS = 0x8, - D3D12_RESOURCE_STATE_DEPTH_WRITE = 0x10, - D3D12_RESOURCE_STATE_DEPTH_READ = 0x20, - D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE = 0x40, - D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE = 0x80, - D3D12_RESOURCE_STATE_STREAM_OUT = 0x100, - D3D12_RESOURCE_STATE_INDIRECT_ARGUMENT = 0x200, - D3D12_RESOURCE_STATE_COPY_DEST = 0x400, - D3D12_RESOURCE_STATE_COPY_SOURCE = 0x800, - D3D12_RESOURCE_STATE_RESOLVE_DEST = 0x1000, - D3D12_RESOURCE_STATE_RESOLVE_SOURCE = 0x2000, - D3D12_RESOURCE_STATE_RAYTRACING_ACCELERATION_STRUCTURE = 0x400000, - D3D12_RESOURCE_STATE_SHADING_RATE_SOURCE = 0x1000000, - D3D12_RESOURCE_STATE_RESERVED_INTERNAL_8000 = 0x8000, - D3D12_RESOURCE_STATE_RESERVED_INTERNAL_4000 = 0x4000, - D3D12_RESOURCE_STATE_RESERVED_INTERNAL_100000 = 0x100000, - D3D12_RESOURCE_STATE_RESERVED_INTERNAL_40000000 = 0x40000000, - D3D12_RESOURCE_STATE_RESERVED_INTERNAL_80000000 = 0x80000000, - D3D12_RESOURCE_STATE_GENERIC_READ = ( ( ( ( ( 0x1 | 0x2 ) | 0x40 ) | 0x80 ) | 0x200 ) | 0x800 ) , - D3D12_RESOURCE_STATE_ALL_SHADER_RESOURCE = ( 0x40 | 0x80 ) , - D3D12_RESOURCE_STATE_PRESENT = 0, - D3D12_RESOURCE_STATE_PREDICATION = 0x200, - D3D12_RESOURCE_STATE_VIDEO_DECODE_READ = 0x10000, - D3D12_RESOURCE_STATE_VIDEO_DECODE_WRITE = 0x20000, - D3D12_RESOURCE_STATE_VIDEO_PROCESS_READ = 0x40000, - D3D12_RESOURCE_STATE_VIDEO_PROCESS_WRITE = 0x80000, - D3D12_RESOURCE_STATE_VIDEO_ENCODE_READ = 0x200000, - D3D12_RESOURCE_STATE_VIDEO_ENCODE_WRITE = 0x800000 - } D3D12_RESOURCE_STATES; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_RESOURCE_STATES ) -typedef -enum D3D12_RESOURCE_BARRIER_TYPE - { - D3D12_RESOURCE_BARRIER_TYPE_TRANSITION = 0, - D3D12_RESOURCE_BARRIER_TYPE_ALIASING = ( D3D12_RESOURCE_BARRIER_TYPE_TRANSITION + 1 ) , - D3D12_RESOURCE_BARRIER_TYPE_UAV = ( D3D12_RESOURCE_BARRIER_TYPE_ALIASING + 1 ) - } D3D12_RESOURCE_BARRIER_TYPE; - -typedef struct D3D12_RESOURCE_TRANSITION_BARRIER - { - ID3D12Resource *pResource; - UINT Subresource; - D3D12_RESOURCE_STATES StateBefore; - D3D12_RESOURCE_STATES StateAfter; - } D3D12_RESOURCE_TRANSITION_BARRIER; - -typedef struct D3D12_RESOURCE_ALIASING_BARRIER - { - ID3D12Resource *pResourceBefore; - ID3D12Resource *pResourceAfter; - } D3D12_RESOURCE_ALIASING_BARRIER; - -typedef struct D3D12_RESOURCE_UAV_BARRIER - { - ID3D12Resource *pResource; - } D3D12_RESOURCE_UAV_BARRIER; - -typedef -enum D3D12_RESOURCE_BARRIER_FLAGS - { - D3D12_RESOURCE_BARRIER_FLAG_NONE = 0, - D3D12_RESOURCE_BARRIER_FLAG_BEGIN_ONLY = 0x1, - D3D12_RESOURCE_BARRIER_FLAG_END_ONLY = 0x2 - } D3D12_RESOURCE_BARRIER_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_RESOURCE_BARRIER_FLAGS ) -typedef struct D3D12_RESOURCE_BARRIER - { - D3D12_RESOURCE_BARRIER_TYPE Type; - D3D12_RESOURCE_BARRIER_FLAGS Flags; - union - { - D3D12_RESOURCE_TRANSITION_BARRIER Transition; - D3D12_RESOURCE_ALIASING_BARRIER Aliasing; - D3D12_RESOURCE_UAV_BARRIER UAV; - } ; - } D3D12_RESOURCE_BARRIER; - -typedef struct D3D12_SUBRESOURCE_FOOTPRINT - { - DXGI_FORMAT Format; - UINT Width; - UINT Height; - UINT Depth; - UINT RowPitch; - } D3D12_SUBRESOURCE_FOOTPRINT; - -typedef struct D3D12_PLACED_SUBRESOURCE_FOOTPRINT - { - UINT64 Offset; - D3D12_SUBRESOURCE_FOOTPRINT Footprint; - } D3D12_PLACED_SUBRESOURCE_FOOTPRINT; - -typedef -enum D3D12_TEXTURE_COPY_TYPE - { - D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX = 0, - D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT = 1 - } D3D12_TEXTURE_COPY_TYPE; - -typedef struct D3D12_TEXTURE_COPY_LOCATION - { - ID3D12Resource *pResource; - D3D12_TEXTURE_COPY_TYPE Type; - union - { - D3D12_PLACED_SUBRESOURCE_FOOTPRINT PlacedFootprint; - UINT SubresourceIndex; - } ; - } D3D12_TEXTURE_COPY_LOCATION; - -typedef -enum D3D12_RESOLVE_MODE - { - D3D12_RESOLVE_MODE_DECOMPRESS = 0, - D3D12_RESOLVE_MODE_MIN = 1, - D3D12_RESOLVE_MODE_MAX = 2, - D3D12_RESOLVE_MODE_AVERAGE = 3, - D3D12_RESOLVE_MODE_ENCODE_SAMPLER_FEEDBACK = 4, - D3D12_RESOLVE_MODE_DECODE_SAMPLER_FEEDBACK = 5 - } D3D12_RESOLVE_MODE; - -typedef struct D3D12_SAMPLE_POSITION - { - INT8 X; - INT8 Y; - } D3D12_SAMPLE_POSITION; - -typedef struct D3D12_VIEW_INSTANCE_LOCATION - { - UINT ViewportArrayIndex; - UINT RenderTargetArrayIndex; - } D3D12_VIEW_INSTANCE_LOCATION; - -typedef -enum D3D12_VIEW_INSTANCING_FLAGS - { - D3D12_VIEW_INSTANCING_FLAG_NONE = 0, - D3D12_VIEW_INSTANCING_FLAG_ENABLE_VIEW_INSTANCE_MASKING = 0x1 - } D3D12_VIEW_INSTANCING_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_VIEW_INSTANCING_FLAGS ) -typedef struct D3D12_VIEW_INSTANCING_DESC - { - UINT ViewInstanceCount; - _Field_size_full_(ViewInstanceCount) const D3D12_VIEW_INSTANCE_LOCATION *pViewInstanceLocations; - D3D12_VIEW_INSTANCING_FLAGS Flags; - } D3D12_VIEW_INSTANCING_DESC; - -typedef -enum D3D12_SHADER_COMPONENT_MAPPING - { - D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_0 = 0, - D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_1 = 1, - D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_2 = 2, - D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_3 = 3, - D3D12_SHADER_COMPONENT_MAPPING_FORCE_VALUE_0 = 4, - D3D12_SHADER_COMPONENT_MAPPING_FORCE_VALUE_1 = 5 - } D3D12_SHADER_COMPONENT_MAPPING; - -#define D3D12_SHADER_COMPONENT_MAPPING_MASK 0x7 -#define D3D12_SHADER_COMPONENT_MAPPING_SHIFT 3 -#define D3D12_SHADER_COMPONENT_MAPPING_ALWAYS_SET_BIT_AVOIDING_ZEROMEM_MISTAKES (1<<(D3D12_SHADER_COMPONENT_MAPPING_SHIFT*4)) -#define D3D12_ENCODE_SHADER_4_COMPONENT_MAPPING(Src0,Src1,Src2,Src3) ((((Src0)&D3D12_SHADER_COMPONENT_MAPPING_MASK)| \ - (((Src1)&D3D12_SHADER_COMPONENT_MAPPING_MASK)<> (D3D12_SHADER_COMPONENT_MAPPING_SHIFT*ComponentToExtract) & D3D12_SHADER_COMPONENT_MAPPING_MASK)) -#define D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING D3D12_ENCODE_SHADER_4_COMPONENT_MAPPING(0,1,2,3) -typedef -enum D3D12_BUFFER_SRV_FLAGS - { - D3D12_BUFFER_SRV_FLAG_NONE = 0, - D3D12_BUFFER_SRV_FLAG_RAW = 0x1 - } D3D12_BUFFER_SRV_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_BUFFER_SRV_FLAGS ) -typedef struct D3D12_BUFFER_SRV - { - UINT64 FirstElement; - UINT NumElements; - UINT StructureByteStride; - D3D12_BUFFER_SRV_FLAGS Flags; - } D3D12_BUFFER_SRV; - -typedef struct D3D12_TEX1D_SRV - { - UINT MostDetailedMip; - UINT MipLevels; - FLOAT ResourceMinLODClamp; - } D3D12_TEX1D_SRV; - -typedef struct D3D12_TEX1D_ARRAY_SRV - { - UINT MostDetailedMip; - UINT MipLevels; - UINT FirstArraySlice; - UINT ArraySize; - FLOAT ResourceMinLODClamp; - } D3D12_TEX1D_ARRAY_SRV; - -typedef struct D3D12_TEX2D_SRV - { - UINT MostDetailedMip; - UINT MipLevels; - UINT PlaneSlice; - FLOAT ResourceMinLODClamp; - } D3D12_TEX2D_SRV; - -typedef struct D3D12_TEX2D_ARRAY_SRV - { - UINT MostDetailedMip; - UINT MipLevels; - UINT FirstArraySlice; - UINT ArraySize; - UINT PlaneSlice; - FLOAT ResourceMinLODClamp; - } D3D12_TEX2D_ARRAY_SRV; - -typedef struct D3D12_TEX3D_SRV - { - UINT MostDetailedMip; - UINT MipLevels; - FLOAT ResourceMinLODClamp; - } D3D12_TEX3D_SRV; - -typedef struct D3D12_TEXCUBE_SRV - { - UINT MostDetailedMip; - UINT MipLevels; - FLOAT ResourceMinLODClamp; - } D3D12_TEXCUBE_SRV; - -typedef struct D3D12_TEXCUBE_ARRAY_SRV - { - UINT MostDetailedMip; - UINT MipLevels; - UINT First2DArrayFace; - UINT NumCubes; - FLOAT ResourceMinLODClamp; - } D3D12_TEXCUBE_ARRAY_SRV; - -typedef struct D3D12_TEX2DMS_SRV - { - UINT UnusedField_NothingToDefine; - } D3D12_TEX2DMS_SRV; - -typedef struct D3D12_TEX2DMS_ARRAY_SRV - { - UINT FirstArraySlice; - UINT ArraySize; - } D3D12_TEX2DMS_ARRAY_SRV; - -typedef struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_SRV - { - D3D12_GPU_VIRTUAL_ADDRESS Location; - } D3D12_RAYTRACING_ACCELERATION_STRUCTURE_SRV; - -typedef -enum D3D12_SRV_DIMENSION - { - D3D12_SRV_DIMENSION_UNKNOWN = 0, - D3D12_SRV_DIMENSION_BUFFER = 1, - D3D12_SRV_DIMENSION_TEXTURE1D = 2, - D3D12_SRV_DIMENSION_TEXTURE1DARRAY = 3, - D3D12_SRV_DIMENSION_TEXTURE2D = 4, - D3D12_SRV_DIMENSION_TEXTURE2DARRAY = 5, - D3D12_SRV_DIMENSION_TEXTURE2DMS = 6, - D3D12_SRV_DIMENSION_TEXTURE2DMSARRAY = 7, - D3D12_SRV_DIMENSION_TEXTURE3D = 8, - D3D12_SRV_DIMENSION_TEXTURECUBE = 9, - D3D12_SRV_DIMENSION_TEXTURECUBEARRAY = 10, - D3D12_SRV_DIMENSION_RAYTRACING_ACCELERATION_STRUCTURE = 11 - } D3D12_SRV_DIMENSION; - -typedef struct D3D12_SHADER_RESOURCE_VIEW_DESC - { - DXGI_FORMAT Format; - D3D12_SRV_DIMENSION ViewDimension; - UINT Shader4ComponentMapping; - union - { - D3D12_BUFFER_SRV Buffer; - D3D12_TEX1D_SRV Texture1D; - D3D12_TEX1D_ARRAY_SRV Texture1DArray; - D3D12_TEX2D_SRV Texture2D; - D3D12_TEX2D_ARRAY_SRV Texture2DArray; - D3D12_TEX2DMS_SRV Texture2DMS; - D3D12_TEX2DMS_ARRAY_SRV Texture2DMSArray; - D3D12_TEX3D_SRV Texture3D; - D3D12_TEXCUBE_SRV TextureCube; - D3D12_TEXCUBE_ARRAY_SRV TextureCubeArray; - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_SRV RaytracingAccelerationStructure; - } ; - } D3D12_SHADER_RESOURCE_VIEW_DESC; - -typedef struct D3D12_CONSTANT_BUFFER_VIEW_DESC - { - D3D12_GPU_VIRTUAL_ADDRESS BufferLocation; - UINT SizeInBytes; - } D3D12_CONSTANT_BUFFER_VIEW_DESC; - -typedef -enum D3D12_FILTER - { - D3D12_FILTER_MIN_MAG_MIP_POINT = 0, - D3D12_FILTER_MIN_MAG_POINT_MIP_LINEAR = 0x1, - D3D12_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x4, - D3D12_FILTER_MIN_POINT_MAG_MIP_LINEAR = 0x5, - D3D12_FILTER_MIN_LINEAR_MAG_MIP_POINT = 0x10, - D3D12_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x11, - D3D12_FILTER_MIN_MAG_LINEAR_MIP_POINT = 0x14, - D3D12_FILTER_MIN_MAG_MIP_LINEAR = 0x15, - D3D12_FILTER_MIN_MAG_ANISOTROPIC_MIP_POINT = 0x54, - D3D12_FILTER_ANISOTROPIC = 0x55, - D3D12_FILTER_COMPARISON_MIN_MAG_MIP_POINT = 0x80, - D3D12_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR = 0x81, - D3D12_FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x84, - D3D12_FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR = 0x85, - D3D12_FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT = 0x90, - D3D12_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x91, - D3D12_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT = 0x94, - D3D12_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR = 0x95, - D3D12_FILTER_COMPARISON_MIN_MAG_ANISOTROPIC_MIP_POINT = 0xd4, - D3D12_FILTER_COMPARISON_ANISOTROPIC = 0xd5, - D3D12_FILTER_MINIMUM_MIN_MAG_MIP_POINT = 0x100, - D3D12_FILTER_MINIMUM_MIN_MAG_POINT_MIP_LINEAR = 0x101, - D3D12_FILTER_MINIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x104, - D3D12_FILTER_MINIMUM_MIN_POINT_MAG_MIP_LINEAR = 0x105, - D3D12_FILTER_MINIMUM_MIN_LINEAR_MAG_MIP_POINT = 0x110, - D3D12_FILTER_MINIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x111, - D3D12_FILTER_MINIMUM_MIN_MAG_LINEAR_MIP_POINT = 0x114, - D3D12_FILTER_MINIMUM_MIN_MAG_MIP_LINEAR = 0x115, - D3D12_FILTER_MINIMUM_MIN_MAG_ANISOTROPIC_MIP_POINT = 0x154, - D3D12_FILTER_MINIMUM_ANISOTROPIC = 0x155, - D3D12_FILTER_MAXIMUM_MIN_MAG_MIP_POINT = 0x180, - D3D12_FILTER_MAXIMUM_MIN_MAG_POINT_MIP_LINEAR = 0x181, - D3D12_FILTER_MAXIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x184, - D3D12_FILTER_MAXIMUM_MIN_POINT_MAG_MIP_LINEAR = 0x185, - D3D12_FILTER_MAXIMUM_MIN_LINEAR_MAG_MIP_POINT = 0x190, - D3D12_FILTER_MAXIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x191, - D3D12_FILTER_MAXIMUM_MIN_MAG_LINEAR_MIP_POINT = 0x194, - D3D12_FILTER_MAXIMUM_MIN_MAG_MIP_LINEAR = 0x195, - D3D12_FILTER_MAXIMUM_MIN_MAG_ANISOTROPIC_MIP_POINT = 0x1d4, - D3D12_FILTER_MAXIMUM_ANISOTROPIC = 0x1d5 - } D3D12_FILTER; - -typedef -enum D3D12_FILTER_TYPE - { - D3D12_FILTER_TYPE_POINT = 0, - D3D12_FILTER_TYPE_LINEAR = 1 - } D3D12_FILTER_TYPE; - -typedef -enum D3D12_FILTER_REDUCTION_TYPE - { - D3D12_FILTER_REDUCTION_TYPE_STANDARD = 0, - D3D12_FILTER_REDUCTION_TYPE_COMPARISON = 1, - D3D12_FILTER_REDUCTION_TYPE_MINIMUM = 2, - D3D12_FILTER_REDUCTION_TYPE_MAXIMUM = 3 - } D3D12_FILTER_REDUCTION_TYPE; - -#define D3D12_FILTER_REDUCTION_TYPE_MASK ( 0x3 ) - -#define D3D12_FILTER_REDUCTION_TYPE_SHIFT ( 7 ) - -#define D3D12_FILTER_TYPE_MASK ( 0x3 ) - -#define D3D12_MIN_FILTER_SHIFT ( 4 ) - -#define D3D12_MAG_FILTER_SHIFT ( 2 ) - -#define D3D12_MIP_FILTER_SHIFT ( 0 ) - -#define D3D12_ANISOTROPIC_FILTERING_BIT ( 0x40 ) - -#define D3D12_ENCODE_BASIC_FILTER( min, mag, mip, reduction ) \ - ( ( D3D12_FILTER ) ( \ - ( ( ( min ) & D3D12_FILTER_TYPE_MASK ) << D3D12_MIN_FILTER_SHIFT ) | \ - ( ( ( mag ) & D3D12_FILTER_TYPE_MASK ) << D3D12_MAG_FILTER_SHIFT ) | \ - ( ( ( mip ) & D3D12_FILTER_TYPE_MASK ) << D3D12_MIP_FILTER_SHIFT ) | \ - ( ( ( reduction ) & D3D12_FILTER_REDUCTION_TYPE_MASK ) << D3D12_FILTER_REDUCTION_TYPE_SHIFT ) ) ) -#define D3D12_ENCODE_ANISOTROPIC_FILTER( reduction ) \ - ( ( D3D12_FILTER ) ( \ - D3D12_ANISOTROPIC_FILTERING_BIT | \ - D3D12_ENCODE_BASIC_FILTER( D3D12_FILTER_TYPE_LINEAR, \ - D3D12_FILTER_TYPE_LINEAR, \ - D3D12_FILTER_TYPE_LINEAR, \ - reduction ) ) ) -#define D3D12_ENCODE_MIN_MAG_ANISOTROPIC_MIP_POINT_FILTER( reduction ) \ - ( ( D3D12_FILTER ) ( \ - D3D12_ANISOTROPIC_FILTERING_BIT | \ - D3D12_ENCODE_BASIC_FILTER( D3D12_FILTER_TYPE_LINEAR, \ - D3D12_FILTER_TYPE_LINEAR, \ - D3D12_FILTER_TYPE_POINT, \ - reduction ) ) ) -#define D3D12_DECODE_MIN_FILTER( D3D12Filter ) \ - ( ( D3D12_FILTER_TYPE ) \ - ( ( ( D3D12Filter ) >> D3D12_MIN_FILTER_SHIFT ) & D3D12_FILTER_TYPE_MASK ) ) -#define D3D12_DECODE_MAG_FILTER( D3D12Filter ) \ - ( ( D3D12_FILTER_TYPE ) \ - ( ( ( D3D12Filter ) >> D3D12_MAG_FILTER_SHIFT ) & D3D12_FILTER_TYPE_MASK ) ) -#define D3D12_DECODE_MIP_FILTER( D3D12Filter ) \ - ( ( D3D12_FILTER_TYPE ) \ - ( ( ( D3D12Filter ) >> D3D12_MIP_FILTER_SHIFT ) & D3D12_FILTER_TYPE_MASK ) ) -#define D3D12_DECODE_FILTER_REDUCTION( D3D12Filter ) \ - ( ( D3D12_FILTER_REDUCTION_TYPE ) \ - ( ( ( D3D12Filter ) >> D3D12_FILTER_REDUCTION_TYPE_SHIFT ) & D3D12_FILTER_REDUCTION_TYPE_MASK ) ) -#define D3D12_DECODE_IS_COMPARISON_FILTER( D3D12Filter ) \ - ( D3D12_DECODE_FILTER_REDUCTION( D3D12Filter ) == D3D12_FILTER_REDUCTION_TYPE_COMPARISON ) -#define D3D12_DECODE_IS_ANISOTROPIC_FILTER( D3D12Filter ) \ - ( ( ( D3D12Filter ) & D3D12_ANISOTROPIC_FILTERING_BIT ) && \ - ( D3D12_FILTER_TYPE_LINEAR == D3D12_DECODE_MIN_FILTER( D3D12Filter ) ) && \ - ( D3D12_FILTER_TYPE_LINEAR == D3D12_DECODE_MAG_FILTER( D3D12Filter ) ) ) -typedef -enum D3D12_TEXTURE_ADDRESS_MODE - { - D3D12_TEXTURE_ADDRESS_MODE_WRAP = 1, - D3D12_TEXTURE_ADDRESS_MODE_MIRROR = 2, - D3D12_TEXTURE_ADDRESS_MODE_CLAMP = 3, - D3D12_TEXTURE_ADDRESS_MODE_BORDER = 4, - D3D12_TEXTURE_ADDRESS_MODE_MIRROR_ONCE = 5 - } D3D12_TEXTURE_ADDRESS_MODE; - -typedef struct D3D12_SAMPLER_DESC - { - D3D12_FILTER Filter; - D3D12_TEXTURE_ADDRESS_MODE AddressU; - D3D12_TEXTURE_ADDRESS_MODE AddressV; - D3D12_TEXTURE_ADDRESS_MODE AddressW; - FLOAT MipLODBias; - UINT MaxAnisotropy; - D3D12_COMPARISON_FUNC ComparisonFunc; - FLOAT BorderColor[ 4 ]; - FLOAT MinLOD; - FLOAT MaxLOD; - } D3D12_SAMPLER_DESC; - -typedef -enum D3D12_SAMPLER_FLAGS - { - D3D12_SAMPLER_FLAG_NONE = 0, - D3D12_SAMPLER_FLAG_UINT_BORDER_COLOR = 0x1, - D3D12_SAMPLER_FLAG_NON_NORMALIZED_COORDINATES = 0x2 - } D3D12_SAMPLER_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_SAMPLER_FLAGS ) -typedef struct D3D12_SAMPLER_DESC2 - { - D3D12_FILTER Filter; - D3D12_TEXTURE_ADDRESS_MODE AddressU; - D3D12_TEXTURE_ADDRESS_MODE AddressV; - D3D12_TEXTURE_ADDRESS_MODE AddressW; - FLOAT MipLODBias; - UINT MaxAnisotropy; - D3D12_COMPARISON_FUNC ComparisonFunc; - union - { - FLOAT FloatBorderColor[ 4 ]; - UINT UintBorderColor[ 4 ]; - } ; - FLOAT MinLOD; - FLOAT MaxLOD; - D3D12_SAMPLER_FLAGS Flags; - } D3D12_SAMPLER_DESC2; - -typedef -enum D3D12_BUFFER_UAV_FLAGS - { - D3D12_BUFFER_UAV_FLAG_NONE = 0, - D3D12_BUFFER_UAV_FLAG_RAW = 0x1 - } D3D12_BUFFER_UAV_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_BUFFER_UAV_FLAGS ) -typedef struct D3D12_BUFFER_UAV - { - UINT64 FirstElement; - UINT NumElements; - UINT StructureByteStride; - UINT64 CounterOffsetInBytes; - D3D12_BUFFER_UAV_FLAGS Flags; - } D3D12_BUFFER_UAV; - -typedef struct D3D12_TEX1D_UAV - { - UINT MipSlice; - } D3D12_TEX1D_UAV; - -typedef struct D3D12_TEX1D_ARRAY_UAV - { - UINT MipSlice; - UINT FirstArraySlice; - UINT ArraySize; - } D3D12_TEX1D_ARRAY_UAV; - -typedef struct D3D12_TEX2D_UAV - { - UINT MipSlice; - UINT PlaneSlice; - } D3D12_TEX2D_UAV; - -typedef struct D3D12_TEX2D_ARRAY_UAV - { - UINT MipSlice; - UINT FirstArraySlice; - UINT ArraySize; - UINT PlaneSlice; - } D3D12_TEX2D_ARRAY_UAV; - -typedef struct D3D12_TEX2DMS_UAV - { - UINT UnusedField_NothingToDefine; - } D3D12_TEX2DMS_UAV; - -typedef struct D3D12_TEX2DMS_ARRAY_UAV - { - UINT FirstArraySlice; - UINT ArraySize; - } D3D12_TEX2DMS_ARRAY_UAV; - -typedef struct D3D12_TEX3D_UAV - { - UINT MipSlice; - UINT FirstWSlice; - UINT WSize; - } D3D12_TEX3D_UAV; - -typedef -enum D3D12_UAV_DIMENSION - { - D3D12_UAV_DIMENSION_UNKNOWN = 0, - D3D12_UAV_DIMENSION_BUFFER = 1, - D3D12_UAV_DIMENSION_TEXTURE1D = 2, - D3D12_UAV_DIMENSION_TEXTURE1DARRAY = 3, - D3D12_UAV_DIMENSION_TEXTURE2D = 4, - D3D12_UAV_DIMENSION_TEXTURE2DARRAY = 5, - D3D12_UAV_DIMENSION_TEXTURE2DMS = 6, - D3D12_UAV_DIMENSION_TEXTURE2DMSARRAY = 7, - D3D12_UAV_DIMENSION_TEXTURE3D = 8 - } D3D12_UAV_DIMENSION; - -typedef struct D3D12_UNORDERED_ACCESS_VIEW_DESC - { - DXGI_FORMAT Format; - D3D12_UAV_DIMENSION ViewDimension; - union - { - D3D12_BUFFER_UAV Buffer; - D3D12_TEX1D_UAV Texture1D; - D3D12_TEX1D_ARRAY_UAV Texture1DArray; - D3D12_TEX2D_UAV Texture2D; - D3D12_TEX2D_ARRAY_UAV Texture2DArray; - D3D12_TEX2DMS_UAV Texture2DMS; - D3D12_TEX2DMS_ARRAY_UAV Texture2DMSArray; - D3D12_TEX3D_UAV Texture3D; - } ; - } D3D12_UNORDERED_ACCESS_VIEW_DESC; - -typedef struct D3D12_BUFFER_RTV - { - UINT64 FirstElement; - UINT NumElements; - } D3D12_BUFFER_RTV; - -typedef struct D3D12_TEX1D_RTV - { - UINT MipSlice; - } D3D12_TEX1D_RTV; - -typedef struct D3D12_TEX1D_ARRAY_RTV - { - UINT MipSlice; - UINT FirstArraySlice; - UINT ArraySize; - } D3D12_TEX1D_ARRAY_RTV; - -typedef struct D3D12_TEX2D_RTV - { - UINT MipSlice; - UINT PlaneSlice; - } D3D12_TEX2D_RTV; - -typedef struct D3D12_TEX2DMS_RTV - { - UINT UnusedField_NothingToDefine; - } D3D12_TEX2DMS_RTV; - -typedef struct D3D12_TEX2D_ARRAY_RTV - { - UINT MipSlice; - UINT FirstArraySlice; - UINT ArraySize; - UINT PlaneSlice; - } D3D12_TEX2D_ARRAY_RTV; - -typedef struct D3D12_TEX2DMS_ARRAY_RTV - { - UINT FirstArraySlice; - UINT ArraySize; - } D3D12_TEX2DMS_ARRAY_RTV; - -typedef struct D3D12_TEX3D_RTV - { - UINT MipSlice; - UINT FirstWSlice; - UINT WSize; - } D3D12_TEX3D_RTV; - -typedef -enum D3D12_RTV_DIMENSION - { - D3D12_RTV_DIMENSION_UNKNOWN = 0, - D3D12_RTV_DIMENSION_BUFFER = 1, - D3D12_RTV_DIMENSION_TEXTURE1D = 2, - D3D12_RTV_DIMENSION_TEXTURE1DARRAY = 3, - D3D12_RTV_DIMENSION_TEXTURE2D = 4, - D3D12_RTV_DIMENSION_TEXTURE2DARRAY = 5, - D3D12_RTV_DIMENSION_TEXTURE2DMS = 6, - D3D12_RTV_DIMENSION_TEXTURE2DMSARRAY = 7, - D3D12_RTV_DIMENSION_TEXTURE3D = 8 - } D3D12_RTV_DIMENSION; - -typedef struct D3D12_RENDER_TARGET_VIEW_DESC - { - DXGI_FORMAT Format; - D3D12_RTV_DIMENSION ViewDimension; - union - { - D3D12_BUFFER_RTV Buffer; - D3D12_TEX1D_RTV Texture1D; - D3D12_TEX1D_ARRAY_RTV Texture1DArray; - D3D12_TEX2D_RTV Texture2D; - D3D12_TEX2D_ARRAY_RTV Texture2DArray; - D3D12_TEX2DMS_RTV Texture2DMS; - D3D12_TEX2DMS_ARRAY_RTV Texture2DMSArray; - D3D12_TEX3D_RTV Texture3D; - } ; - } D3D12_RENDER_TARGET_VIEW_DESC; - -typedef struct D3D12_TEX1D_DSV - { - UINT MipSlice; - } D3D12_TEX1D_DSV; - -typedef struct D3D12_TEX1D_ARRAY_DSV - { - UINT MipSlice; - UINT FirstArraySlice; - UINT ArraySize; - } D3D12_TEX1D_ARRAY_DSV; - -typedef struct D3D12_TEX2D_DSV - { - UINT MipSlice; - } D3D12_TEX2D_DSV; - -typedef struct D3D12_TEX2D_ARRAY_DSV - { - UINT MipSlice; - UINT FirstArraySlice; - UINT ArraySize; - } D3D12_TEX2D_ARRAY_DSV; - -typedef struct D3D12_TEX2DMS_DSV - { - UINT UnusedField_NothingToDefine; - } D3D12_TEX2DMS_DSV; - -typedef struct D3D12_TEX2DMS_ARRAY_DSV - { - UINT FirstArraySlice; - UINT ArraySize; - } D3D12_TEX2DMS_ARRAY_DSV; - -typedef -enum D3D12_DSV_FLAGS - { - D3D12_DSV_FLAG_NONE = 0, - D3D12_DSV_FLAG_READ_ONLY_DEPTH = 0x1, - D3D12_DSV_FLAG_READ_ONLY_STENCIL = 0x2 - } D3D12_DSV_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_DSV_FLAGS ) -typedef -enum D3D12_DSV_DIMENSION - { - D3D12_DSV_DIMENSION_UNKNOWN = 0, - D3D12_DSV_DIMENSION_TEXTURE1D = 1, - D3D12_DSV_DIMENSION_TEXTURE1DARRAY = 2, - D3D12_DSV_DIMENSION_TEXTURE2D = 3, - D3D12_DSV_DIMENSION_TEXTURE2DARRAY = 4, - D3D12_DSV_DIMENSION_TEXTURE2DMS = 5, - D3D12_DSV_DIMENSION_TEXTURE2DMSARRAY = 6 - } D3D12_DSV_DIMENSION; - -typedef struct D3D12_DEPTH_STENCIL_VIEW_DESC - { - DXGI_FORMAT Format; - D3D12_DSV_DIMENSION ViewDimension; - D3D12_DSV_FLAGS Flags; - union - { - D3D12_TEX1D_DSV Texture1D; - D3D12_TEX1D_ARRAY_DSV Texture1DArray; - D3D12_TEX2D_DSV Texture2D; - D3D12_TEX2D_ARRAY_DSV Texture2DArray; - D3D12_TEX2DMS_DSV Texture2DMS; - D3D12_TEX2DMS_ARRAY_DSV Texture2DMSArray; - } ; - } D3D12_DEPTH_STENCIL_VIEW_DESC; - -typedef -enum D3D12_CLEAR_FLAGS - { - D3D12_CLEAR_FLAG_DEPTH = 0x1, - D3D12_CLEAR_FLAG_STENCIL = 0x2 - } D3D12_CLEAR_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_CLEAR_FLAGS ) -typedef -enum D3D12_FENCE_FLAGS - { - D3D12_FENCE_FLAG_NONE = 0, - D3D12_FENCE_FLAG_SHARED = 0x1, - D3D12_FENCE_FLAG_SHARED_CROSS_ADAPTER = 0x2, - D3D12_FENCE_FLAG_NON_MONITORED = 0x4 - } D3D12_FENCE_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_FENCE_FLAGS ) -typedef -enum D3D12_DESCRIPTOR_HEAP_TYPE - { - D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV = 0, - D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER = ( D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV + 1 ) , - D3D12_DESCRIPTOR_HEAP_TYPE_RTV = ( D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER + 1 ) , - D3D12_DESCRIPTOR_HEAP_TYPE_DSV = ( D3D12_DESCRIPTOR_HEAP_TYPE_RTV + 1 ) , - D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES = ( D3D12_DESCRIPTOR_HEAP_TYPE_DSV + 1 ) - } D3D12_DESCRIPTOR_HEAP_TYPE; - -typedef -enum D3D12_DESCRIPTOR_HEAP_FLAGS - { - D3D12_DESCRIPTOR_HEAP_FLAG_NONE = 0, - D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE = 0x1 - } D3D12_DESCRIPTOR_HEAP_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_DESCRIPTOR_HEAP_FLAGS ) -typedef struct D3D12_DESCRIPTOR_HEAP_DESC - { - D3D12_DESCRIPTOR_HEAP_TYPE Type; - UINT NumDescriptors; - D3D12_DESCRIPTOR_HEAP_FLAGS Flags; - UINT NodeMask; - } D3D12_DESCRIPTOR_HEAP_DESC; - -typedef -enum D3D12_DESCRIPTOR_RANGE_TYPE - { - D3D12_DESCRIPTOR_RANGE_TYPE_SRV = 0, - D3D12_DESCRIPTOR_RANGE_TYPE_UAV = ( D3D12_DESCRIPTOR_RANGE_TYPE_SRV + 1 ) , - D3D12_DESCRIPTOR_RANGE_TYPE_CBV = ( D3D12_DESCRIPTOR_RANGE_TYPE_UAV + 1 ) , - D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER = ( D3D12_DESCRIPTOR_RANGE_TYPE_CBV + 1 ) - } D3D12_DESCRIPTOR_RANGE_TYPE; - -typedef struct D3D12_DESCRIPTOR_RANGE - { - D3D12_DESCRIPTOR_RANGE_TYPE RangeType; - UINT NumDescriptors; - UINT BaseShaderRegister; - UINT RegisterSpace; - UINT OffsetInDescriptorsFromTableStart; - } D3D12_DESCRIPTOR_RANGE; - -typedef struct D3D12_ROOT_DESCRIPTOR_TABLE - { - UINT NumDescriptorRanges; - _Field_size_full_(NumDescriptorRanges) const D3D12_DESCRIPTOR_RANGE *pDescriptorRanges; - } D3D12_ROOT_DESCRIPTOR_TABLE; - -typedef struct D3D12_ROOT_CONSTANTS - { - UINT ShaderRegister; - UINT RegisterSpace; - UINT Num32BitValues; - } D3D12_ROOT_CONSTANTS; - -typedef struct D3D12_ROOT_DESCRIPTOR - { - UINT ShaderRegister; - UINT RegisterSpace; - } D3D12_ROOT_DESCRIPTOR; - -typedef -enum D3D12_SHADER_VISIBILITY - { - D3D12_SHADER_VISIBILITY_ALL = 0, - D3D12_SHADER_VISIBILITY_VERTEX = 1, - D3D12_SHADER_VISIBILITY_HULL = 2, - D3D12_SHADER_VISIBILITY_DOMAIN = 3, - D3D12_SHADER_VISIBILITY_GEOMETRY = 4, - D3D12_SHADER_VISIBILITY_PIXEL = 5, - D3D12_SHADER_VISIBILITY_AMPLIFICATION = 6, - D3D12_SHADER_VISIBILITY_MESH = 7 - } D3D12_SHADER_VISIBILITY; - -typedef -enum D3D12_ROOT_PARAMETER_TYPE - { - D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE = 0, - D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS = ( D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE + 1 ) , - D3D12_ROOT_PARAMETER_TYPE_CBV = ( D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS + 1 ) , - D3D12_ROOT_PARAMETER_TYPE_SRV = ( D3D12_ROOT_PARAMETER_TYPE_CBV + 1 ) , - D3D12_ROOT_PARAMETER_TYPE_UAV = ( D3D12_ROOT_PARAMETER_TYPE_SRV + 1 ) - } D3D12_ROOT_PARAMETER_TYPE; - -typedef struct D3D12_ROOT_PARAMETER - { - D3D12_ROOT_PARAMETER_TYPE ParameterType; - union - { - D3D12_ROOT_DESCRIPTOR_TABLE DescriptorTable; - D3D12_ROOT_CONSTANTS Constants; - D3D12_ROOT_DESCRIPTOR Descriptor; - } ; - D3D12_SHADER_VISIBILITY ShaderVisibility; - } D3D12_ROOT_PARAMETER; - -typedef -enum D3D12_ROOT_SIGNATURE_FLAGS - { - D3D12_ROOT_SIGNATURE_FLAG_NONE = 0, - D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT = 0x1, - D3D12_ROOT_SIGNATURE_FLAG_DENY_VERTEX_SHADER_ROOT_ACCESS = 0x2, - D3D12_ROOT_SIGNATURE_FLAG_DENY_HULL_SHADER_ROOT_ACCESS = 0x4, - D3D12_ROOT_SIGNATURE_FLAG_DENY_DOMAIN_SHADER_ROOT_ACCESS = 0x8, - D3D12_ROOT_SIGNATURE_FLAG_DENY_GEOMETRY_SHADER_ROOT_ACCESS = 0x10, - D3D12_ROOT_SIGNATURE_FLAG_DENY_PIXEL_SHADER_ROOT_ACCESS = 0x20, - D3D12_ROOT_SIGNATURE_FLAG_ALLOW_STREAM_OUTPUT = 0x40, - D3D12_ROOT_SIGNATURE_FLAG_LOCAL_ROOT_SIGNATURE = 0x80, - D3D12_ROOT_SIGNATURE_FLAG_DENY_AMPLIFICATION_SHADER_ROOT_ACCESS = 0x100, - D3D12_ROOT_SIGNATURE_FLAG_DENY_MESH_SHADER_ROOT_ACCESS = 0x200, - D3D12_ROOT_SIGNATURE_FLAG_CBV_SRV_UAV_HEAP_DIRECTLY_INDEXED = 0x400, - D3D12_ROOT_SIGNATURE_FLAG_SAMPLER_HEAP_DIRECTLY_INDEXED = 0x800 - } D3D12_ROOT_SIGNATURE_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_ROOT_SIGNATURE_FLAGS ) -typedef -enum D3D12_STATIC_BORDER_COLOR - { - D3D12_STATIC_BORDER_COLOR_TRANSPARENT_BLACK = 0, - D3D12_STATIC_BORDER_COLOR_OPAQUE_BLACK = ( D3D12_STATIC_BORDER_COLOR_TRANSPARENT_BLACK + 1 ) , - D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE = ( D3D12_STATIC_BORDER_COLOR_OPAQUE_BLACK + 1 ) , - D3D12_STATIC_BORDER_COLOR_OPAQUE_BLACK_UINT = ( D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE + 1 ) , - D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE_UINT = ( D3D12_STATIC_BORDER_COLOR_OPAQUE_BLACK_UINT + 1 ) - } D3D12_STATIC_BORDER_COLOR; - -typedef struct D3D12_STATIC_SAMPLER_DESC - { - D3D12_FILTER Filter; - D3D12_TEXTURE_ADDRESS_MODE AddressU; - D3D12_TEXTURE_ADDRESS_MODE AddressV; - D3D12_TEXTURE_ADDRESS_MODE AddressW; - FLOAT MipLODBias; - UINT MaxAnisotropy; - D3D12_COMPARISON_FUNC ComparisonFunc; - D3D12_STATIC_BORDER_COLOR BorderColor; - FLOAT MinLOD; - FLOAT MaxLOD; - UINT ShaderRegister; - UINT RegisterSpace; - D3D12_SHADER_VISIBILITY ShaderVisibility; - } D3D12_STATIC_SAMPLER_DESC; - -typedef struct D3D12_STATIC_SAMPLER_DESC1 - { - D3D12_FILTER Filter; - D3D12_TEXTURE_ADDRESS_MODE AddressU; - D3D12_TEXTURE_ADDRESS_MODE AddressV; - D3D12_TEXTURE_ADDRESS_MODE AddressW; - FLOAT MipLODBias; - UINT MaxAnisotropy; - D3D12_COMPARISON_FUNC ComparisonFunc; - D3D12_STATIC_BORDER_COLOR BorderColor; - FLOAT MinLOD; - FLOAT MaxLOD; - UINT ShaderRegister; - UINT RegisterSpace; - D3D12_SHADER_VISIBILITY ShaderVisibility; - D3D12_SAMPLER_FLAGS Flags; - } D3D12_STATIC_SAMPLER_DESC1; - -typedef struct D3D12_ROOT_SIGNATURE_DESC - { - UINT NumParameters; - _Field_size_full_(NumParameters) const D3D12_ROOT_PARAMETER *pParameters; - UINT NumStaticSamplers; - _Field_size_full_(NumStaticSamplers) const D3D12_STATIC_SAMPLER_DESC *pStaticSamplers; - D3D12_ROOT_SIGNATURE_FLAGS Flags; - } D3D12_ROOT_SIGNATURE_DESC; - -typedef -enum D3D12_DESCRIPTOR_RANGE_FLAGS - { - D3D12_DESCRIPTOR_RANGE_FLAG_NONE = 0, - D3D12_DESCRIPTOR_RANGE_FLAG_DESCRIPTORS_VOLATILE = 0x1, - D3D12_DESCRIPTOR_RANGE_FLAG_DATA_VOLATILE = 0x2, - D3D12_DESCRIPTOR_RANGE_FLAG_DATA_STATIC_WHILE_SET_AT_EXECUTE = 0x4, - D3D12_DESCRIPTOR_RANGE_FLAG_DATA_STATIC = 0x8, - D3D12_DESCRIPTOR_RANGE_FLAG_DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS = 0x10000 - } D3D12_DESCRIPTOR_RANGE_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_DESCRIPTOR_RANGE_FLAGS ) -typedef struct D3D12_DESCRIPTOR_RANGE1 - { - D3D12_DESCRIPTOR_RANGE_TYPE RangeType; - UINT NumDescriptors; - UINT BaseShaderRegister; - UINT RegisterSpace; - D3D12_DESCRIPTOR_RANGE_FLAGS Flags; - UINT OffsetInDescriptorsFromTableStart; - } D3D12_DESCRIPTOR_RANGE1; - -typedef struct D3D12_ROOT_DESCRIPTOR_TABLE1 - { - UINT NumDescriptorRanges; - _Field_size_full_(NumDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1 *pDescriptorRanges; - } D3D12_ROOT_DESCRIPTOR_TABLE1; - -typedef -enum D3D12_ROOT_DESCRIPTOR_FLAGS - { - D3D12_ROOT_DESCRIPTOR_FLAG_NONE = 0, - D3D12_ROOT_DESCRIPTOR_FLAG_DATA_VOLATILE = 0x2, - D3D12_ROOT_DESCRIPTOR_FLAG_DATA_STATIC_WHILE_SET_AT_EXECUTE = 0x4, - D3D12_ROOT_DESCRIPTOR_FLAG_DATA_STATIC = 0x8 - } D3D12_ROOT_DESCRIPTOR_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_ROOT_DESCRIPTOR_FLAGS ) -typedef struct D3D12_ROOT_DESCRIPTOR1 - { - UINT ShaderRegister; - UINT RegisterSpace; - D3D12_ROOT_DESCRIPTOR_FLAGS Flags; - } D3D12_ROOT_DESCRIPTOR1; - -typedef struct D3D12_ROOT_PARAMETER1 - { - D3D12_ROOT_PARAMETER_TYPE ParameterType; - union - { - D3D12_ROOT_DESCRIPTOR_TABLE1 DescriptorTable; - D3D12_ROOT_CONSTANTS Constants; - D3D12_ROOT_DESCRIPTOR1 Descriptor; - } ; - D3D12_SHADER_VISIBILITY ShaderVisibility; - } D3D12_ROOT_PARAMETER1; - -typedef struct D3D12_ROOT_SIGNATURE_DESC1 - { - UINT NumParameters; - _Field_size_full_(NumParameters) const D3D12_ROOT_PARAMETER1 *pParameters; - UINT NumStaticSamplers; - _Field_size_full_(NumStaticSamplers) const D3D12_STATIC_SAMPLER_DESC *pStaticSamplers; - D3D12_ROOT_SIGNATURE_FLAGS Flags; - } D3D12_ROOT_SIGNATURE_DESC1; - -typedef struct D3D12_ROOT_SIGNATURE_DESC2 - { - UINT NumParameters; - _Field_size_full_(NumParameters) const D3D12_ROOT_PARAMETER1 *pParameters; - UINT NumStaticSamplers; - _Field_size_full_(NumStaticSamplers) const D3D12_STATIC_SAMPLER_DESC1 *pStaticSamplers; - D3D12_ROOT_SIGNATURE_FLAGS Flags; - } D3D12_ROOT_SIGNATURE_DESC2; - -typedef struct D3D12_VERSIONED_ROOT_SIGNATURE_DESC - { - D3D_ROOT_SIGNATURE_VERSION Version; - union - { - D3D12_ROOT_SIGNATURE_DESC Desc_1_0; - D3D12_ROOT_SIGNATURE_DESC1 Desc_1_1; - D3D12_ROOT_SIGNATURE_DESC2 Desc_1_2; - } ; - } D3D12_VERSIONED_ROOT_SIGNATURE_DESC; - -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0001_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0001_v0_0_s_ifspec; - -#ifndef __ID3D12RootSignatureDeserializer_INTERFACE_DEFINED__ -#define __ID3D12RootSignatureDeserializer_INTERFACE_DEFINED__ - -/* interface ID3D12RootSignatureDeserializer */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12RootSignatureDeserializer; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("34AB647B-3CC8-46AC-841B-C0965645C046") - ID3D12RootSignatureDeserializer : public IUnknown - { - public: - virtual const D3D12_ROOT_SIGNATURE_DESC *STDMETHODCALLTYPE GetRootSignatureDesc( void) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12RootSignatureDeserializerVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12RootSignatureDeserializer * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12RootSignatureDeserializer * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12RootSignatureDeserializer * This); - - DECLSPEC_XFGVIRT(ID3D12RootSignatureDeserializer, GetRootSignatureDesc) - const D3D12_ROOT_SIGNATURE_DESC *( STDMETHODCALLTYPE *GetRootSignatureDesc )( - ID3D12RootSignatureDeserializer * This); - - END_INTERFACE - } ID3D12RootSignatureDeserializerVtbl; - - interface ID3D12RootSignatureDeserializer - { - CONST_VTBL struct ID3D12RootSignatureDeserializerVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12RootSignatureDeserializer_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12RootSignatureDeserializer_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12RootSignatureDeserializer_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12RootSignatureDeserializer_GetRootSignatureDesc(This) \ - ( (This)->lpVtbl -> GetRootSignatureDesc(This) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12RootSignatureDeserializer_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12VersionedRootSignatureDeserializer_INTERFACE_DEFINED__ -#define __ID3D12VersionedRootSignatureDeserializer_INTERFACE_DEFINED__ - -/* interface ID3D12VersionedRootSignatureDeserializer */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12VersionedRootSignatureDeserializer; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("7F91CE67-090C-4BB7-B78E-ED8FF2E31DA0") - ID3D12VersionedRootSignatureDeserializer : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE GetRootSignatureDescAtVersion( - D3D_ROOT_SIGNATURE_VERSION convertToVersion, - _Out_ const D3D12_VERSIONED_ROOT_SIGNATURE_DESC **ppDesc) = 0; - - virtual const D3D12_VERSIONED_ROOT_SIGNATURE_DESC *STDMETHODCALLTYPE GetUnconvertedRootSignatureDesc( void) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12VersionedRootSignatureDeserializerVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12VersionedRootSignatureDeserializer * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12VersionedRootSignatureDeserializer * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12VersionedRootSignatureDeserializer * This); - - DECLSPEC_XFGVIRT(ID3D12VersionedRootSignatureDeserializer, GetRootSignatureDescAtVersion) - HRESULT ( STDMETHODCALLTYPE *GetRootSignatureDescAtVersion )( - ID3D12VersionedRootSignatureDeserializer * This, - D3D_ROOT_SIGNATURE_VERSION convertToVersion, - _Out_ const D3D12_VERSIONED_ROOT_SIGNATURE_DESC **ppDesc); - - DECLSPEC_XFGVIRT(ID3D12VersionedRootSignatureDeserializer, GetUnconvertedRootSignatureDesc) - const D3D12_VERSIONED_ROOT_SIGNATURE_DESC *( STDMETHODCALLTYPE *GetUnconvertedRootSignatureDesc )( - ID3D12VersionedRootSignatureDeserializer * This); - - END_INTERFACE - } ID3D12VersionedRootSignatureDeserializerVtbl; - - interface ID3D12VersionedRootSignatureDeserializer - { - CONST_VTBL struct ID3D12VersionedRootSignatureDeserializerVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12VersionedRootSignatureDeserializer_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12VersionedRootSignatureDeserializer_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12VersionedRootSignatureDeserializer_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12VersionedRootSignatureDeserializer_GetRootSignatureDescAtVersion(This,convertToVersion,ppDesc) \ - ( (This)->lpVtbl -> GetRootSignatureDescAtVersion(This,convertToVersion,ppDesc) ) - -#define ID3D12VersionedRootSignatureDeserializer_GetUnconvertedRootSignatureDesc(This) \ - ( (This)->lpVtbl -> GetUnconvertedRootSignatureDesc(This) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12VersionedRootSignatureDeserializer_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12_0000_0003 */ -/* [local] */ - -typedef HRESULT (WINAPI* PFN_D3D12_SERIALIZE_ROOT_SIGNATURE)( - _In_ const D3D12_ROOT_SIGNATURE_DESC* pRootSignature, - _In_ D3D_ROOT_SIGNATURE_VERSION Version, - _Out_ ID3DBlob** ppBlob, - _Always_(_Outptr_opt_result_maybenull_) ID3DBlob** ppErrorBlob); - -HRESULT WINAPI D3D12SerializeRootSignature( - _In_ const D3D12_ROOT_SIGNATURE_DESC* pRootSignature, - _In_ D3D_ROOT_SIGNATURE_VERSION Version, - _Out_ ID3DBlob** ppBlob, - _Always_(_Outptr_opt_result_maybenull_) ID3DBlob** ppErrorBlob); - -typedef HRESULT (WINAPI* PFN_D3D12_CREATE_ROOT_SIGNATURE_DESERIALIZER)( - _In_reads_bytes_(SrcDataSizeInBytes) LPCVOID pSrcData, - _In_ SIZE_T SrcDataSizeInBytes, - _In_ REFIID pRootSignatureDeserializerInterface, - _Out_ void** ppRootSignatureDeserializer); - -HRESULT WINAPI D3D12CreateRootSignatureDeserializer( - _In_reads_bytes_(SrcDataSizeInBytes) LPCVOID pSrcData, - _In_ SIZE_T SrcDataSizeInBytes, - _In_ REFIID pRootSignatureDeserializerInterface, - _Out_ void** ppRootSignatureDeserializer); - -typedef HRESULT (WINAPI* PFN_D3D12_SERIALIZE_VERSIONED_ROOT_SIGNATURE)( - _In_ const D3D12_VERSIONED_ROOT_SIGNATURE_DESC* pRootSignature, - _Out_ ID3DBlob** ppBlob, - _Always_(_Outptr_opt_result_maybenull_) ID3DBlob** ppErrorBlob); - -HRESULT WINAPI D3D12SerializeVersionedRootSignature( - _In_ const D3D12_VERSIONED_ROOT_SIGNATURE_DESC* pRootSignature, - _Out_ ID3DBlob** ppBlob, - _Always_(_Outptr_opt_result_maybenull_) ID3DBlob** ppErrorBlob); - -typedef HRESULT (WINAPI* PFN_D3D12_CREATE_VERSIONED_ROOT_SIGNATURE_DESERIALIZER)( - _In_reads_bytes_(SrcDataSizeInBytes) LPCVOID pSrcData, - _In_ SIZE_T SrcDataSizeInBytes, - _In_ REFIID pRootSignatureDeserializerInterface, - _Out_ void** ppRootSignatureDeserializer); - -HRESULT WINAPI D3D12CreateVersionedRootSignatureDeserializer( - _In_reads_bytes_(SrcDataSizeInBytes) LPCVOID pSrcData, - _In_ SIZE_T SrcDataSizeInBytes, - _In_ REFIID pRootSignatureDeserializerInterface, - _Out_ void** ppRootSignatureDeserializer); - -typedef HRESULT (WINAPI* PFN_D3D12_CREATE_VERSIONED_ROOT_SIGNATURE_DESERIALIZER_FROM_SUBOBJECT_IN_LIBRARY)( - _In_reads_bytes_(SrcDataSizeInBytes) LPCVOID pSrcData, - _In_ SIZE_T SrcDataSizeInBytes, - _In_ LPCWSTR RootSignatureSubobjectName, - _In_ REFIID pRootSignatureDeserializerInterface, - _Out_ void** ppRootSignatureDeserializer); - -HRESULT WINAPI D3D12CreateVersionedRootSignatureDeserializerFromSubobjectInLibrary( - _In_reads_bytes_(SrcDataSizeInBytes) LPCVOID pSrcData, - _In_ SIZE_T SrcDataSizeInBytes, - _In_opt_ LPCWSTR RootSignatureSubobjectName, - _In_ REFIID pRootSignatureDeserializerInterface, - _Out_ void** ppRootSignatureDeserializer); - -typedef struct D3D12_CPU_DESCRIPTOR_HANDLE - { - SIZE_T ptr; - } D3D12_CPU_DESCRIPTOR_HANDLE; - -typedef struct D3D12_GPU_DESCRIPTOR_HANDLE - { - UINT64 ptr; - } D3D12_GPU_DESCRIPTOR_HANDLE; - -// If rects are supplied in D3D12_DISCARD_REGION, below, the resource -// must have 2D subresources with all specified subresources the same dimension. -typedef struct D3D12_DISCARD_REGION - { - UINT NumRects; - _In_reads_(NumRects) const D3D12_RECT *pRects; - UINT FirstSubresource; - UINT NumSubresources; - } D3D12_DISCARD_REGION; - -typedef -enum D3D12_QUERY_HEAP_TYPE - { - D3D12_QUERY_HEAP_TYPE_OCCLUSION = 0, - D3D12_QUERY_HEAP_TYPE_TIMESTAMP = 1, - D3D12_QUERY_HEAP_TYPE_PIPELINE_STATISTICS = 2, - D3D12_QUERY_HEAP_TYPE_SO_STATISTICS = 3, - D3D12_QUERY_HEAP_TYPE_VIDEO_DECODE_STATISTICS = 4, - D3D12_QUERY_HEAP_TYPE_COPY_QUEUE_TIMESTAMP = 5, - D3D12_QUERY_HEAP_TYPE_PIPELINE_STATISTICS1 = 7 - } D3D12_QUERY_HEAP_TYPE; - -typedef struct D3D12_QUERY_HEAP_DESC - { - D3D12_QUERY_HEAP_TYPE Type; - UINT Count; - UINT NodeMask; - } D3D12_QUERY_HEAP_DESC; - -typedef -enum D3D12_QUERY_TYPE - { - D3D12_QUERY_TYPE_OCCLUSION = 0, - D3D12_QUERY_TYPE_BINARY_OCCLUSION = 1, - D3D12_QUERY_TYPE_TIMESTAMP = 2, - D3D12_QUERY_TYPE_PIPELINE_STATISTICS = 3, - D3D12_QUERY_TYPE_SO_STATISTICS_STREAM0 = 4, - D3D12_QUERY_TYPE_SO_STATISTICS_STREAM1 = 5, - D3D12_QUERY_TYPE_SO_STATISTICS_STREAM2 = 6, - D3D12_QUERY_TYPE_SO_STATISTICS_STREAM3 = 7, - D3D12_QUERY_TYPE_VIDEO_DECODE_STATISTICS = 8, - D3D12_QUERY_TYPE_PIPELINE_STATISTICS1 = 10 - } D3D12_QUERY_TYPE; - -typedef -enum D3D12_PREDICATION_OP - { - D3D12_PREDICATION_OP_EQUAL_ZERO = 0, - D3D12_PREDICATION_OP_NOT_EQUAL_ZERO = 1 - } D3D12_PREDICATION_OP; - -typedef struct D3D12_QUERY_DATA_PIPELINE_STATISTICS - { - UINT64 IAVertices; - UINT64 IAPrimitives; - UINT64 VSInvocations; - UINT64 GSInvocations; - UINT64 GSPrimitives; - UINT64 CInvocations; - UINT64 CPrimitives; - UINT64 PSInvocations; - UINT64 HSInvocations; - UINT64 DSInvocations; - UINT64 CSInvocations; - } D3D12_QUERY_DATA_PIPELINE_STATISTICS; - -typedef struct D3D12_QUERY_DATA_PIPELINE_STATISTICS1 - { - UINT64 IAVertices; - UINT64 IAPrimitives; - UINT64 VSInvocations; - UINT64 GSInvocations; - UINT64 GSPrimitives; - UINT64 CInvocations; - UINT64 CPrimitives; - UINT64 PSInvocations; - UINT64 HSInvocations; - UINT64 DSInvocations; - UINT64 CSInvocations; - UINT64 ASInvocations; - UINT64 MSInvocations; - UINT64 MSPrimitives; - } D3D12_QUERY_DATA_PIPELINE_STATISTICS1; - -typedef struct D3D12_QUERY_DATA_SO_STATISTICS - { - UINT64 NumPrimitivesWritten; - UINT64 PrimitivesStorageNeeded; - } D3D12_QUERY_DATA_SO_STATISTICS; - -typedef struct D3D12_STREAM_OUTPUT_BUFFER_VIEW - { - D3D12_GPU_VIRTUAL_ADDRESS BufferLocation; - UINT64 SizeInBytes; - D3D12_GPU_VIRTUAL_ADDRESS BufferFilledSizeLocation; - } D3D12_STREAM_OUTPUT_BUFFER_VIEW; - -typedef struct D3D12_DRAW_ARGUMENTS - { - UINT VertexCountPerInstance; - UINT InstanceCount; - UINT StartVertexLocation; - UINT StartInstanceLocation; - } D3D12_DRAW_ARGUMENTS; - -typedef struct D3D12_DRAW_INDEXED_ARGUMENTS - { - UINT IndexCountPerInstance; - UINT InstanceCount; - UINT StartIndexLocation; - INT BaseVertexLocation; - UINT StartInstanceLocation; - } D3D12_DRAW_INDEXED_ARGUMENTS; - -typedef struct D3D12_DISPATCH_ARGUMENTS - { - UINT ThreadGroupCountX; - UINT ThreadGroupCountY; - UINT ThreadGroupCountZ; - } D3D12_DISPATCH_ARGUMENTS; - -typedef struct D3D12_VERTEX_BUFFER_VIEW - { - D3D12_GPU_VIRTUAL_ADDRESS BufferLocation; - UINT SizeInBytes; - UINT StrideInBytes; - } D3D12_VERTEX_BUFFER_VIEW; - -typedef struct D3D12_INDEX_BUFFER_VIEW - { - D3D12_GPU_VIRTUAL_ADDRESS BufferLocation; - UINT SizeInBytes; - DXGI_FORMAT Format; - } D3D12_INDEX_BUFFER_VIEW; - -typedef -enum D3D12_INDIRECT_ARGUMENT_TYPE - { - D3D12_INDIRECT_ARGUMENT_TYPE_DRAW = 0, - D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED = ( D3D12_INDIRECT_ARGUMENT_TYPE_DRAW + 1 ) , - D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH = ( D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED + 1 ) , - D3D12_INDIRECT_ARGUMENT_TYPE_VERTEX_BUFFER_VIEW = ( D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH + 1 ) , - D3D12_INDIRECT_ARGUMENT_TYPE_INDEX_BUFFER_VIEW = ( D3D12_INDIRECT_ARGUMENT_TYPE_VERTEX_BUFFER_VIEW + 1 ) , - D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT = ( D3D12_INDIRECT_ARGUMENT_TYPE_INDEX_BUFFER_VIEW + 1 ) , - D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT_BUFFER_VIEW = ( D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT + 1 ) , - D3D12_INDIRECT_ARGUMENT_TYPE_SHADER_RESOURCE_VIEW = ( D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT_BUFFER_VIEW + 1 ) , - D3D12_INDIRECT_ARGUMENT_TYPE_UNORDERED_ACCESS_VIEW = ( D3D12_INDIRECT_ARGUMENT_TYPE_SHADER_RESOURCE_VIEW + 1 ) , - D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH_RAYS = ( D3D12_INDIRECT_ARGUMENT_TYPE_UNORDERED_ACCESS_VIEW + 1 ) , - D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH_MESH = ( D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH_RAYS + 1 ) , - D3D12_INDIRECT_ARGUMENT_TYPE_INCREMENTING_CONSTANT = ( D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH_MESH + 1 ) - } D3D12_INDIRECT_ARGUMENT_TYPE; - -typedef struct D3D12_INDIRECT_ARGUMENT_DESC - { - D3D12_INDIRECT_ARGUMENT_TYPE Type; - union - { - struct - { - UINT Slot; - } VertexBuffer; - struct - { - UINT RootParameterIndex; - UINT DestOffsetIn32BitValues; - UINT Num32BitValuesToSet; - } Constant; - struct - { - UINT RootParameterIndex; - } ConstantBufferView; - struct - { - UINT RootParameterIndex; - } ShaderResourceView; - struct - { - UINT RootParameterIndex; - } UnorderedAccessView; - struct - { - UINT RootParameterIndex; - UINT DestOffsetIn32BitValues; - } IncrementingConstant; - } ; - } D3D12_INDIRECT_ARGUMENT_DESC; - -typedef struct D3D12_COMMAND_SIGNATURE_DESC - { - UINT ByteStride; - UINT NumArgumentDescs; - _Field_size_full_(NumArgumentDescs) const D3D12_INDIRECT_ARGUMENT_DESC *pArgumentDescs; - UINT NodeMask; - } D3D12_COMMAND_SIGNATURE_DESC; - -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0003_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0003_v0_0_s_ifspec; - -#ifndef __ID3D12Pageable_INTERFACE_DEFINED__ -#define __ID3D12Pageable_INTERFACE_DEFINED__ - -/* interface ID3D12Pageable */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12Pageable; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("63ee58fb-1268-4835-86da-f008ce62f0d6") - ID3D12Pageable : public ID3D12DeviceChild - { - public: - }; - - -#else /* C style interface */ - - typedef struct ID3D12PageableVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12Pageable * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12Pageable * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12Pageable * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12Pageable * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12Pageable * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12Pageable * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12Pageable * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12Pageable * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - END_INTERFACE - } ID3D12PageableVtbl; - - interface ID3D12Pageable - { - CONST_VTBL struct ID3D12PageableVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12Pageable_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12Pageable_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12Pageable_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12Pageable_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12Pageable_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12Pageable_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12Pageable_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12Pageable_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12Pageable_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12Heap_INTERFACE_DEFINED__ -#define __ID3D12Heap_INTERFACE_DEFINED__ - -/* interface ID3D12Heap */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12Heap; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("6b3b2502-6e51-45b3-90ee-9884265e8df3") - ID3D12Heap : public ID3D12Pageable - { - public: -#if defined(_MSC_VER) || !defined(_WIN32) - virtual D3D12_HEAP_DESC STDMETHODCALLTYPE GetDesc( void) = 0; -#else - virtual D3D12_HEAP_DESC *STDMETHODCALLTYPE GetDesc( - D3D12_HEAP_DESC * RetVal) = 0; -#endif - - }; - - -#else /* C style interface */ - - typedef struct ID3D12HeapVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12Heap * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12Heap * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12Heap * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12Heap * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12Heap * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12Heap * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12Heap * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12Heap * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12Heap, GetDesc) -#if !defined(_WIN32) - D3D12_HEAP_DESC ( STDMETHODCALLTYPE *GetDesc )( - ID3D12Heap * This); - -#else - D3D12_HEAP_DESC *( STDMETHODCALLTYPE *GetDesc )( - ID3D12Heap * This, - D3D12_HEAP_DESC * RetVal); - -#endif - - END_INTERFACE - } ID3D12HeapVtbl; - - interface ID3D12Heap - { - CONST_VTBL struct ID3D12HeapVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12Heap_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12Heap_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12Heap_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12Heap_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12Heap_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12Heap_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12Heap_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12Heap_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#if !defined(_WIN32) - -#define ID3D12Heap_GetDesc(This) \ - ( (This)->lpVtbl -> GetDesc(This) ) -#else -#define ID3D12Heap_GetDesc(This,RetVal) \ - ( (This)->lpVtbl -> GetDesc(This,RetVal) ) -#endif - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12Heap_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12Resource_INTERFACE_DEFINED__ -#define __ID3D12Resource_INTERFACE_DEFINED__ - -/* interface ID3D12Resource */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12Resource; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("696442be-a72e-4059-bc79-5b5c98040fad") - ID3D12Resource : public ID3D12Pageable - { - public: - virtual HRESULT STDMETHODCALLTYPE Map( - UINT Subresource, - _In_opt_ const D3D12_RANGE *pReadRange, - _Outptr_opt_result_bytebuffer_(_Inexpressible_("Dependent on resource")) void **ppData) = 0; - - virtual void STDMETHODCALLTYPE Unmap( - UINT Subresource, - _In_opt_ const D3D12_RANGE *pWrittenRange) = 0; - -#if defined(_MSC_VER) || !defined(_WIN32) - virtual D3D12_RESOURCE_DESC STDMETHODCALLTYPE GetDesc( void) = 0; -#else - virtual D3D12_RESOURCE_DESC *STDMETHODCALLTYPE GetDesc( - D3D12_RESOURCE_DESC * RetVal) = 0; -#endif - - virtual D3D12_GPU_VIRTUAL_ADDRESS STDMETHODCALLTYPE GetGPUVirtualAddress( void) = 0; - - virtual HRESULT STDMETHODCALLTYPE WriteToSubresource( - UINT DstSubresource, - _In_opt_ const D3D12_BOX *pDstBox, - _In_ const void *pSrcData, - UINT SrcRowPitch, - UINT SrcDepthPitch) = 0; - - virtual HRESULT STDMETHODCALLTYPE ReadFromSubresource( - _Out_ void *pDstData, - UINT DstRowPitch, - UINT DstDepthPitch, - UINT SrcSubresource, - _In_opt_ const D3D12_BOX *pSrcBox) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetHeapProperties( - _Out_opt_ D3D12_HEAP_PROPERTIES *pHeapProperties, - _Out_opt_ D3D12_HEAP_FLAGS *pHeapFlags) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12ResourceVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12Resource * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12Resource * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12Resource * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12Resource * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12Resource * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12Resource * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12Resource * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12Resource * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12Resource, Map) - HRESULT ( STDMETHODCALLTYPE *Map )( - ID3D12Resource * This, - UINT Subresource, - _In_opt_ const D3D12_RANGE *pReadRange, - _Outptr_opt_result_bytebuffer_(_Inexpressible_("Dependent on resource")) void **ppData); - - DECLSPEC_XFGVIRT(ID3D12Resource, Unmap) - void ( STDMETHODCALLTYPE *Unmap )( - ID3D12Resource * This, - UINT Subresource, - _In_opt_ const D3D12_RANGE *pWrittenRange); - - DECLSPEC_XFGVIRT(ID3D12Resource, GetDesc) -#if !defined(_WIN32) - D3D12_RESOURCE_DESC ( STDMETHODCALLTYPE *GetDesc )( - ID3D12Resource * This); - -#else - D3D12_RESOURCE_DESC *( STDMETHODCALLTYPE *GetDesc )( - ID3D12Resource * This, - D3D12_RESOURCE_DESC * RetVal); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Resource, GetGPUVirtualAddress) - D3D12_GPU_VIRTUAL_ADDRESS ( STDMETHODCALLTYPE *GetGPUVirtualAddress )( - ID3D12Resource * This); - - DECLSPEC_XFGVIRT(ID3D12Resource, WriteToSubresource) - HRESULT ( STDMETHODCALLTYPE *WriteToSubresource )( - ID3D12Resource * This, - UINT DstSubresource, - _In_opt_ const D3D12_BOX *pDstBox, - _In_ const void *pSrcData, - UINT SrcRowPitch, - UINT SrcDepthPitch); - - DECLSPEC_XFGVIRT(ID3D12Resource, ReadFromSubresource) - HRESULT ( STDMETHODCALLTYPE *ReadFromSubresource )( - ID3D12Resource * This, - _Out_ void *pDstData, - UINT DstRowPitch, - UINT DstDepthPitch, - UINT SrcSubresource, - _In_opt_ const D3D12_BOX *pSrcBox); - - DECLSPEC_XFGVIRT(ID3D12Resource, GetHeapProperties) - HRESULT ( STDMETHODCALLTYPE *GetHeapProperties )( - ID3D12Resource * This, - _Out_opt_ D3D12_HEAP_PROPERTIES *pHeapProperties, - _Out_opt_ D3D12_HEAP_FLAGS *pHeapFlags); - - END_INTERFACE - } ID3D12ResourceVtbl; - - interface ID3D12Resource - { - CONST_VTBL struct ID3D12ResourceVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12Resource_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12Resource_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12Resource_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12Resource_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12Resource_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12Resource_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12Resource_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12Resource_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12Resource_Map(This,Subresource,pReadRange,ppData) \ - ( (This)->lpVtbl -> Map(This,Subresource,pReadRange,ppData) ) - -#define ID3D12Resource_Unmap(This,Subresource,pWrittenRange) \ - ( (This)->lpVtbl -> Unmap(This,Subresource,pWrittenRange) ) -#if !defined(_WIN32) - -#define ID3D12Resource_GetDesc(This) \ - ( (This)->lpVtbl -> GetDesc(This) ) -#else -#define ID3D12Resource_GetDesc(This,RetVal) \ - ( (This)->lpVtbl -> GetDesc(This,RetVal) ) -#endif - -#define ID3D12Resource_GetGPUVirtualAddress(This) \ - ( (This)->lpVtbl -> GetGPUVirtualAddress(This) ) - -#define ID3D12Resource_WriteToSubresource(This,DstSubresource,pDstBox,pSrcData,SrcRowPitch,SrcDepthPitch) \ - ( (This)->lpVtbl -> WriteToSubresource(This,DstSubresource,pDstBox,pSrcData,SrcRowPitch,SrcDepthPitch) ) - -#define ID3D12Resource_ReadFromSubresource(This,pDstData,DstRowPitch,DstDepthPitch,SrcSubresource,pSrcBox) \ - ( (This)->lpVtbl -> ReadFromSubresource(This,pDstData,DstRowPitch,DstDepthPitch,SrcSubresource,pSrcBox) ) - -#define ID3D12Resource_GetHeapProperties(This,pHeapProperties,pHeapFlags) \ - ( (This)->lpVtbl -> GetHeapProperties(This,pHeapProperties,pHeapFlags) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12Resource_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12CommandAllocator_INTERFACE_DEFINED__ -#define __ID3D12CommandAllocator_INTERFACE_DEFINED__ - -/* interface ID3D12CommandAllocator */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12CommandAllocator; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("6102dee4-af59-4b09-b999-b44d73f09b24") - ID3D12CommandAllocator : public ID3D12Pageable - { - public: - virtual HRESULT STDMETHODCALLTYPE Reset( void) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12CommandAllocatorVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12CommandAllocator * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12CommandAllocator * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12CommandAllocator * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12CommandAllocator * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12CommandAllocator * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12CommandAllocator * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12CommandAllocator * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12CommandAllocator * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12CommandAllocator, Reset) - HRESULT ( STDMETHODCALLTYPE *Reset )( - ID3D12CommandAllocator * This); - - END_INTERFACE - } ID3D12CommandAllocatorVtbl; - - interface ID3D12CommandAllocator - { - CONST_VTBL struct ID3D12CommandAllocatorVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12CommandAllocator_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12CommandAllocator_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12CommandAllocator_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12CommandAllocator_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12CommandAllocator_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12CommandAllocator_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12CommandAllocator_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12CommandAllocator_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12CommandAllocator_Reset(This) \ - ( (This)->lpVtbl -> Reset(This) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12CommandAllocator_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12Fence_INTERFACE_DEFINED__ -#define __ID3D12Fence_INTERFACE_DEFINED__ - -/* interface ID3D12Fence */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12Fence; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("0a753dcf-c4d8-4b91-adf6-be5a60d95a76") - ID3D12Fence : public ID3D12Pageable - { - public: - virtual UINT64 STDMETHODCALLTYPE GetCompletedValue( void) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetEventOnCompletion( - UINT64 Value, - HANDLE hEvent) = 0; - - virtual HRESULT STDMETHODCALLTYPE Signal( - UINT64 Value) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12FenceVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12Fence * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12Fence * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12Fence * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12Fence * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12Fence * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12Fence * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12Fence * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12Fence * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12Fence, GetCompletedValue) - UINT64 ( STDMETHODCALLTYPE *GetCompletedValue )( - ID3D12Fence * This); - - DECLSPEC_XFGVIRT(ID3D12Fence, SetEventOnCompletion) - HRESULT ( STDMETHODCALLTYPE *SetEventOnCompletion )( - ID3D12Fence * This, - UINT64 Value, - HANDLE hEvent); - - DECLSPEC_XFGVIRT(ID3D12Fence, Signal) - HRESULT ( STDMETHODCALLTYPE *Signal )( - ID3D12Fence * This, - UINT64 Value); - - END_INTERFACE - } ID3D12FenceVtbl; - - interface ID3D12Fence - { - CONST_VTBL struct ID3D12FenceVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12Fence_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12Fence_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12Fence_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12Fence_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12Fence_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12Fence_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12Fence_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12Fence_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12Fence_GetCompletedValue(This) \ - ( (This)->lpVtbl -> GetCompletedValue(This) ) - -#define ID3D12Fence_SetEventOnCompletion(This,Value,hEvent) \ - ( (This)->lpVtbl -> SetEventOnCompletion(This,Value,hEvent) ) - -#define ID3D12Fence_Signal(This,Value) \ - ( (This)->lpVtbl -> Signal(This,Value) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12Fence_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12Fence1_INTERFACE_DEFINED__ -#define __ID3D12Fence1_INTERFACE_DEFINED__ - -/* interface ID3D12Fence1 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12Fence1; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("433685fe-e22b-4ca0-a8db-b5b4f4dd0e4a") - ID3D12Fence1 : public ID3D12Fence - { - public: - virtual D3D12_FENCE_FLAGS STDMETHODCALLTYPE GetCreationFlags( void) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12Fence1Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12Fence1 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12Fence1 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12Fence1 * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12Fence1 * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12Fence1 * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12Fence1 * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12Fence1 * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12Fence1 * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12Fence, GetCompletedValue) - UINT64 ( STDMETHODCALLTYPE *GetCompletedValue )( - ID3D12Fence1 * This); - - DECLSPEC_XFGVIRT(ID3D12Fence, SetEventOnCompletion) - HRESULT ( STDMETHODCALLTYPE *SetEventOnCompletion )( - ID3D12Fence1 * This, - UINT64 Value, - HANDLE hEvent); - - DECLSPEC_XFGVIRT(ID3D12Fence, Signal) - HRESULT ( STDMETHODCALLTYPE *Signal )( - ID3D12Fence1 * This, - UINT64 Value); - - DECLSPEC_XFGVIRT(ID3D12Fence1, GetCreationFlags) - D3D12_FENCE_FLAGS ( STDMETHODCALLTYPE *GetCreationFlags )( - ID3D12Fence1 * This); - - END_INTERFACE - } ID3D12Fence1Vtbl; - - interface ID3D12Fence1 - { - CONST_VTBL struct ID3D12Fence1Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12Fence1_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12Fence1_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12Fence1_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12Fence1_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12Fence1_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12Fence1_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12Fence1_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12Fence1_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12Fence1_GetCompletedValue(This) \ - ( (This)->lpVtbl -> GetCompletedValue(This) ) - -#define ID3D12Fence1_SetEventOnCompletion(This,Value,hEvent) \ - ( (This)->lpVtbl -> SetEventOnCompletion(This,Value,hEvent) ) - -#define ID3D12Fence1_Signal(This,Value) \ - ( (This)->lpVtbl -> Signal(This,Value) ) - -#define ID3D12Fence1_GetCreationFlags(This) \ - ( (This)->lpVtbl -> GetCreationFlags(This) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12Fence1_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12PipelineState_INTERFACE_DEFINED__ -#define __ID3D12PipelineState_INTERFACE_DEFINED__ - -/* interface ID3D12PipelineState */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12PipelineState; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("765a30f3-f624-4c6f-a828-ace948622445") - ID3D12PipelineState : public ID3D12Pageable - { - public: - virtual HRESULT STDMETHODCALLTYPE GetCachedBlob( - _COM_Outptr_ ID3DBlob **ppBlob) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12PipelineStateVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12PipelineState * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12PipelineState * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12PipelineState * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12PipelineState * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12PipelineState * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12PipelineState * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12PipelineState * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12PipelineState * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12PipelineState, GetCachedBlob) - HRESULT ( STDMETHODCALLTYPE *GetCachedBlob )( - ID3D12PipelineState * This, - _COM_Outptr_ ID3DBlob **ppBlob); - - END_INTERFACE - } ID3D12PipelineStateVtbl; - - interface ID3D12PipelineState - { - CONST_VTBL struct ID3D12PipelineStateVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12PipelineState_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12PipelineState_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12PipelineState_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12PipelineState_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12PipelineState_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12PipelineState_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12PipelineState_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12PipelineState_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12PipelineState_GetCachedBlob(This,ppBlob) \ - ( (This)->lpVtbl -> GetCachedBlob(This,ppBlob) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12PipelineState_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12DescriptorHeap_INTERFACE_DEFINED__ -#define __ID3D12DescriptorHeap_INTERFACE_DEFINED__ - -/* interface ID3D12DescriptorHeap */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12DescriptorHeap; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("8efb471d-616c-4f49-90f7-127bb763fa51") - ID3D12DescriptorHeap : public ID3D12Pageable - { - public: -#if defined(_MSC_VER) || !defined(_WIN32) - virtual D3D12_DESCRIPTOR_HEAP_DESC STDMETHODCALLTYPE GetDesc( void) = 0; -#else - virtual D3D12_DESCRIPTOR_HEAP_DESC *STDMETHODCALLTYPE GetDesc( - D3D12_DESCRIPTOR_HEAP_DESC * RetVal) = 0; -#endif - -#if defined(_MSC_VER) || !defined(_WIN32) - virtual D3D12_CPU_DESCRIPTOR_HANDLE STDMETHODCALLTYPE GetCPUDescriptorHandleForHeapStart( void) = 0; -#else - virtual D3D12_CPU_DESCRIPTOR_HANDLE *STDMETHODCALLTYPE GetCPUDescriptorHandleForHeapStart( - D3D12_CPU_DESCRIPTOR_HANDLE * RetVal) = 0; -#endif - -#if defined(_MSC_VER) || !defined(_WIN32) - virtual D3D12_GPU_DESCRIPTOR_HANDLE STDMETHODCALLTYPE GetGPUDescriptorHandleForHeapStart( void) = 0; -#else - virtual D3D12_GPU_DESCRIPTOR_HANDLE *STDMETHODCALLTYPE GetGPUDescriptorHandleForHeapStart( - D3D12_GPU_DESCRIPTOR_HANDLE * RetVal) = 0; -#endif - - }; - - -#else /* C style interface */ - - typedef struct ID3D12DescriptorHeapVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12DescriptorHeap * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12DescriptorHeap * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12DescriptorHeap * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12DescriptorHeap * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12DescriptorHeap * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12DescriptorHeap * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12DescriptorHeap * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12DescriptorHeap * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12DescriptorHeap, GetDesc) -#if !defined(_WIN32) - D3D12_DESCRIPTOR_HEAP_DESC ( STDMETHODCALLTYPE *GetDesc )( - ID3D12DescriptorHeap * This); - -#else - D3D12_DESCRIPTOR_HEAP_DESC *( STDMETHODCALLTYPE *GetDesc )( - ID3D12DescriptorHeap * This, - D3D12_DESCRIPTOR_HEAP_DESC * RetVal); - -#endif - - DECLSPEC_XFGVIRT(ID3D12DescriptorHeap, GetCPUDescriptorHandleForHeapStart) -#if !defined(_WIN32) - D3D12_CPU_DESCRIPTOR_HANDLE ( STDMETHODCALLTYPE *GetCPUDescriptorHandleForHeapStart )( - ID3D12DescriptorHeap * This); - -#else - D3D12_CPU_DESCRIPTOR_HANDLE *( STDMETHODCALLTYPE *GetCPUDescriptorHandleForHeapStart )( - ID3D12DescriptorHeap * This, - D3D12_CPU_DESCRIPTOR_HANDLE * RetVal); - -#endif - - DECLSPEC_XFGVIRT(ID3D12DescriptorHeap, GetGPUDescriptorHandleForHeapStart) -#if !defined(_WIN32) - D3D12_GPU_DESCRIPTOR_HANDLE ( STDMETHODCALLTYPE *GetGPUDescriptorHandleForHeapStart )( - ID3D12DescriptorHeap * This); - -#else - D3D12_GPU_DESCRIPTOR_HANDLE *( STDMETHODCALLTYPE *GetGPUDescriptorHandleForHeapStart )( - ID3D12DescriptorHeap * This, - D3D12_GPU_DESCRIPTOR_HANDLE * RetVal); - -#endif - - END_INTERFACE - } ID3D12DescriptorHeapVtbl; - - interface ID3D12DescriptorHeap - { - CONST_VTBL struct ID3D12DescriptorHeapVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12DescriptorHeap_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12DescriptorHeap_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12DescriptorHeap_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12DescriptorHeap_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12DescriptorHeap_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12DescriptorHeap_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12DescriptorHeap_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12DescriptorHeap_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#if !defined(_WIN32) - -#define ID3D12DescriptorHeap_GetDesc(This) \ - ( (This)->lpVtbl -> GetDesc(This) ) -#else -#define ID3D12DescriptorHeap_GetDesc(This,RetVal) \ - ( (This)->lpVtbl -> GetDesc(This,RetVal) ) -#endif -#if !defined(_WIN32) - -#define ID3D12DescriptorHeap_GetCPUDescriptorHandleForHeapStart(This) \ - ( (This)->lpVtbl -> GetCPUDescriptorHandleForHeapStart(This) ) -#else -#define ID3D12DescriptorHeap_GetCPUDescriptorHandleForHeapStart(This,RetVal) \ - ( (This)->lpVtbl -> GetCPUDescriptorHandleForHeapStart(This,RetVal) ) -#endif -#if !defined(_WIN32) - -#define ID3D12DescriptorHeap_GetGPUDescriptorHandleForHeapStart(This) \ - ( (This)->lpVtbl -> GetGPUDescriptorHandleForHeapStart(This) ) -#else -#define ID3D12DescriptorHeap_GetGPUDescriptorHandleForHeapStart(This,RetVal) \ - ( (This)->lpVtbl -> GetGPUDescriptorHandleForHeapStart(This,RetVal) ) -#endif - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12DescriptorHeap_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12QueryHeap_INTERFACE_DEFINED__ -#define __ID3D12QueryHeap_INTERFACE_DEFINED__ - -/* interface ID3D12QueryHeap */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12QueryHeap; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("0d9658ae-ed45-469e-a61d-970ec583cab4") - ID3D12QueryHeap : public ID3D12Pageable - { - public: - }; - - -#else /* C style interface */ - - typedef struct ID3D12QueryHeapVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12QueryHeap * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12QueryHeap * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12QueryHeap * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12QueryHeap * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12QueryHeap * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12QueryHeap * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12QueryHeap * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12QueryHeap * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - END_INTERFACE - } ID3D12QueryHeapVtbl; - - interface ID3D12QueryHeap - { - CONST_VTBL struct ID3D12QueryHeapVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12QueryHeap_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12QueryHeap_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12QueryHeap_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12QueryHeap_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12QueryHeap_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12QueryHeap_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12QueryHeap_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12QueryHeap_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12QueryHeap_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12CommandSignature_INTERFACE_DEFINED__ -#define __ID3D12CommandSignature_INTERFACE_DEFINED__ - -/* interface ID3D12CommandSignature */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12CommandSignature; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("c36a797c-ec80-4f0a-8985-a7b2475082d1") - ID3D12CommandSignature : public ID3D12Pageable - { - public: - }; - - -#else /* C style interface */ - - typedef struct ID3D12CommandSignatureVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12CommandSignature * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12CommandSignature * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12CommandSignature * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12CommandSignature * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12CommandSignature * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12CommandSignature * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12CommandSignature * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12CommandSignature * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - END_INTERFACE - } ID3D12CommandSignatureVtbl; - - interface ID3D12CommandSignature - { - CONST_VTBL struct ID3D12CommandSignatureVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12CommandSignature_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12CommandSignature_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12CommandSignature_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12CommandSignature_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12CommandSignature_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12CommandSignature_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12CommandSignature_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12CommandSignature_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12CommandSignature_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12CommandList_INTERFACE_DEFINED__ -#define __ID3D12CommandList_INTERFACE_DEFINED__ - -/* interface ID3D12CommandList */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12CommandList; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("7116d91c-e7e4-47ce-b8c6-ec8168f437e5") - ID3D12CommandList : public ID3D12DeviceChild - { - public: - virtual D3D12_COMMAND_LIST_TYPE STDMETHODCALLTYPE GetType( void) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12CommandListVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12CommandList * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12CommandList * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12CommandList * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12CommandList * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12CommandList * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12CommandList * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12CommandList * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12CommandList * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12CommandList, GetType) - D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )( - ID3D12CommandList * This); - - END_INTERFACE - } ID3D12CommandListVtbl; - - interface ID3D12CommandList - { - CONST_VTBL struct ID3D12CommandListVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12CommandList_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12CommandList_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12CommandList_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12CommandList_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12CommandList_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12CommandList_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12CommandList_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12CommandList_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12CommandList_GetType(This) \ - ( (This)->lpVtbl -> GetType(This) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12CommandList_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12GraphicsCommandList_INTERFACE_DEFINED__ -#define __ID3D12GraphicsCommandList_INTERFACE_DEFINED__ - -/* interface ID3D12GraphicsCommandList */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12GraphicsCommandList; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("5b160d0f-ac1b-4185-8ba8-b3ae42a5a455") - ID3D12GraphicsCommandList : public ID3D12CommandList - { - public: - virtual HRESULT STDMETHODCALLTYPE Close( void) = 0; - - virtual HRESULT STDMETHODCALLTYPE Reset( - _In_ ID3D12CommandAllocator *pAllocator, - _In_opt_ ID3D12PipelineState *pInitialState) = 0; - - virtual void STDMETHODCALLTYPE ClearState( - _In_opt_ ID3D12PipelineState *pPipelineState) = 0; - - virtual void STDMETHODCALLTYPE DrawInstanced( - _In_ UINT VertexCountPerInstance, - _In_ UINT InstanceCount, - _In_ UINT StartVertexLocation, - _In_ UINT StartInstanceLocation) = 0; - - virtual void STDMETHODCALLTYPE DrawIndexedInstanced( - _In_ UINT IndexCountPerInstance, - _In_ UINT InstanceCount, - _In_ UINT StartIndexLocation, - _In_ INT BaseVertexLocation, - _In_ UINT StartInstanceLocation) = 0; - - virtual void STDMETHODCALLTYPE Dispatch( - _In_ UINT ThreadGroupCountX, - _In_ UINT ThreadGroupCountY, - _In_ UINT ThreadGroupCountZ) = 0; - - virtual void STDMETHODCALLTYPE CopyBufferRegion( - _In_ ID3D12Resource *pDstBuffer, - UINT64 DstOffset, - _In_ ID3D12Resource *pSrcBuffer, - UINT64 SrcOffset, - UINT64 NumBytes) = 0; - - virtual void STDMETHODCALLTYPE CopyTextureRegion( - _In_ const D3D12_TEXTURE_COPY_LOCATION *pDst, - UINT DstX, - UINT DstY, - UINT DstZ, - _In_ const D3D12_TEXTURE_COPY_LOCATION *pSrc, - _In_opt_ const D3D12_BOX *pSrcBox) = 0; - - virtual void STDMETHODCALLTYPE CopyResource( - _In_ ID3D12Resource *pDstResource, - _In_ ID3D12Resource *pSrcResource) = 0; - - virtual void STDMETHODCALLTYPE CopyTiles( - _In_ ID3D12Resource *pTiledResource, - _In_ const D3D12_TILED_RESOURCE_COORDINATE *pTileRegionStartCoordinate, - _In_ const D3D12_TILE_REGION_SIZE *pTileRegionSize, - _In_ ID3D12Resource *pBuffer, - UINT64 BufferStartOffsetInBytes, - D3D12_TILE_COPY_FLAGS Flags) = 0; - - virtual void STDMETHODCALLTYPE ResolveSubresource( - _In_ ID3D12Resource *pDstResource, - _In_ UINT DstSubresource, - _In_ ID3D12Resource *pSrcResource, - _In_ UINT SrcSubresource, - _In_ DXGI_FORMAT Format) = 0; - - virtual void STDMETHODCALLTYPE IASetPrimitiveTopology( - _In_ D3D12_PRIMITIVE_TOPOLOGY PrimitiveTopology) = 0; - - virtual void STDMETHODCALLTYPE RSSetViewports( - _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE) UINT NumViewports, - _In_reads_( NumViewports) const D3D12_VIEWPORT *pViewports) = 0; - - virtual void STDMETHODCALLTYPE RSSetScissorRects( - _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE) UINT NumRects, - _In_reads_( NumRects) const D3D12_RECT *pRects) = 0; - - virtual void STDMETHODCALLTYPE OMSetBlendFactor( - _In_reads_opt_(4) const FLOAT BlendFactor[ 4 ]) = 0; - - virtual void STDMETHODCALLTYPE OMSetStencilRef( - _In_ UINT StencilRef) = 0; - - virtual void STDMETHODCALLTYPE SetPipelineState( - _In_ ID3D12PipelineState *pPipelineState) = 0; - - virtual void STDMETHODCALLTYPE ResourceBarrier( - _In_ UINT NumBarriers, - _In_reads_(NumBarriers) const D3D12_RESOURCE_BARRIER *pBarriers) = 0; - - virtual void STDMETHODCALLTYPE ExecuteBundle( - _In_ ID3D12GraphicsCommandList *pCommandList) = 0; - - virtual void STDMETHODCALLTYPE SetDescriptorHeaps( - _In_ UINT NumDescriptorHeaps, - _In_reads_(NumDescriptorHeaps) ID3D12DescriptorHeap *const *ppDescriptorHeaps) = 0; - - virtual void STDMETHODCALLTYPE SetComputeRootSignature( - _In_opt_ ID3D12RootSignature *pRootSignature) = 0; - - virtual void STDMETHODCALLTYPE SetGraphicsRootSignature( - _In_opt_ ID3D12RootSignature *pRootSignature) = 0; - - virtual void STDMETHODCALLTYPE SetComputeRootDescriptorTable( - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor) = 0; - - virtual void STDMETHODCALLTYPE SetGraphicsRootDescriptorTable( - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor) = 0; - - virtual void STDMETHODCALLTYPE SetComputeRoot32BitConstant( - _In_ UINT RootParameterIndex, - _In_ UINT SrcData, - _In_ UINT DestOffsetIn32BitValues) = 0; - - virtual void STDMETHODCALLTYPE SetGraphicsRoot32BitConstant( - _In_ UINT RootParameterIndex, - _In_ UINT SrcData, - _In_ UINT DestOffsetIn32BitValues) = 0; - - virtual void STDMETHODCALLTYPE SetComputeRoot32BitConstants( - _In_ UINT RootParameterIndex, - _In_ UINT Num32BitValuesToSet, - _In_reads_(Num32BitValuesToSet*sizeof(UINT)) const void *pSrcData, - _In_ UINT DestOffsetIn32BitValues) = 0; - - virtual void STDMETHODCALLTYPE SetGraphicsRoot32BitConstants( - _In_ UINT RootParameterIndex, - _In_ UINT Num32BitValuesToSet, - _In_reads_(Num32BitValuesToSet*sizeof(UINT)) const void *pSrcData, - _In_ UINT DestOffsetIn32BitValues) = 0; - - virtual void STDMETHODCALLTYPE SetComputeRootConstantBufferView( - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation) = 0; - - virtual void STDMETHODCALLTYPE SetGraphicsRootConstantBufferView( - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation) = 0; - - virtual void STDMETHODCALLTYPE SetComputeRootShaderResourceView( - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation) = 0; - - virtual void STDMETHODCALLTYPE SetGraphicsRootShaderResourceView( - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation) = 0; - - virtual void STDMETHODCALLTYPE SetComputeRootUnorderedAccessView( - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation) = 0; - - virtual void STDMETHODCALLTYPE SetGraphicsRootUnorderedAccessView( - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation) = 0; - - virtual void STDMETHODCALLTYPE IASetIndexBuffer( - _In_opt_ const D3D12_INDEX_BUFFER_VIEW *pView) = 0; - - virtual void STDMETHODCALLTYPE IASetVertexBuffers( - _In_ UINT StartSlot, - _In_ UINT NumViews, - _In_reads_opt_(NumViews) const D3D12_VERTEX_BUFFER_VIEW *pViews) = 0; - - virtual void STDMETHODCALLTYPE SOSetTargets( - _In_ UINT StartSlot, - _In_ UINT NumViews, - _In_reads_opt_(NumViews) const D3D12_STREAM_OUTPUT_BUFFER_VIEW *pViews) = 0; - - virtual void STDMETHODCALLTYPE OMSetRenderTargets( - _In_ UINT NumRenderTargetDescriptors, - _In_opt_ const D3D12_CPU_DESCRIPTOR_HANDLE *pRenderTargetDescriptors, - _In_ BOOL RTsSingleHandleToDescriptorRange, - _In_opt_ const D3D12_CPU_DESCRIPTOR_HANDLE *pDepthStencilDescriptor) = 0; - - virtual void STDMETHODCALLTYPE ClearDepthStencilView( - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DepthStencilView, - _In_ D3D12_CLEAR_FLAGS ClearFlags, - _In_ FLOAT Depth, - _In_ UINT8 Stencil, - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects) = 0; - - virtual void STDMETHODCALLTYPE ClearRenderTargetView( - _In_ D3D12_CPU_DESCRIPTOR_HANDLE RenderTargetView, - _In_ const FLOAT ColorRGBA[ 4 ], - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects) = 0; - - virtual void STDMETHODCALLTYPE ClearUnorderedAccessViewUint( - _In_ D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle, - _In_ ID3D12Resource *pResource, - _In_ const UINT Values[ 4 ], - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects) = 0; - - virtual void STDMETHODCALLTYPE ClearUnorderedAccessViewFloat( - _In_ D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle, - _In_ ID3D12Resource *pResource, - _In_ const FLOAT Values[ 4 ], - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects) = 0; - - virtual void STDMETHODCALLTYPE DiscardResource( - _In_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DISCARD_REGION *pRegion) = 0; - - virtual void STDMETHODCALLTYPE BeginQuery( - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index) = 0; - - virtual void STDMETHODCALLTYPE EndQuery( - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index) = 0; - - virtual void STDMETHODCALLTYPE ResolveQueryData( - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT StartIndex, - _In_ UINT NumQueries, - _In_ ID3D12Resource *pDestinationBuffer, - _In_ UINT64 AlignedDestinationBufferOffset) = 0; - - virtual void STDMETHODCALLTYPE SetPredication( - _In_opt_ ID3D12Resource *pBuffer, - _In_ UINT64 AlignedBufferOffset, - _In_ D3D12_PREDICATION_OP Operation) = 0; - - virtual void STDMETHODCALLTYPE SetMarker( - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size) = 0; - - virtual void STDMETHODCALLTYPE BeginEvent( - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size) = 0; - - virtual void STDMETHODCALLTYPE EndEvent( void) = 0; - - virtual void STDMETHODCALLTYPE ExecuteIndirect( - _In_ ID3D12CommandSignature *pCommandSignature, - _In_ UINT MaxCommandCount, - _In_ ID3D12Resource *pArgumentBuffer, - _In_ UINT64 ArgumentBufferOffset, - _In_opt_ ID3D12Resource *pCountBuffer, - _In_ UINT64 CountBufferOffset) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12GraphicsCommandListVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12GraphicsCommandList * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12GraphicsCommandList * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12GraphicsCommandList * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12GraphicsCommandList * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12GraphicsCommandList * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12GraphicsCommandList * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12GraphicsCommandList * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12GraphicsCommandList * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12CommandList, GetType) - D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )( - ID3D12GraphicsCommandList * This); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Close) - HRESULT ( STDMETHODCALLTYPE *Close )( - ID3D12GraphicsCommandList * This); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Reset) - HRESULT ( STDMETHODCALLTYPE *Reset )( - ID3D12GraphicsCommandList * This, - _In_ ID3D12CommandAllocator *pAllocator, - _In_opt_ ID3D12PipelineState *pInitialState); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearState) - void ( STDMETHODCALLTYPE *ClearState )( - ID3D12GraphicsCommandList * This, - _In_opt_ ID3D12PipelineState *pPipelineState); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawInstanced) - void ( STDMETHODCALLTYPE *DrawInstanced )( - ID3D12GraphicsCommandList * This, - _In_ UINT VertexCountPerInstance, - _In_ UINT InstanceCount, - _In_ UINT StartVertexLocation, - _In_ UINT StartInstanceLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawIndexedInstanced) - void ( STDMETHODCALLTYPE *DrawIndexedInstanced )( - ID3D12GraphicsCommandList * This, - _In_ UINT IndexCountPerInstance, - _In_ UINT InstanceCount, - _In_ UINT StartIndexLocation, - _In_ INT BaseVertexLocation, - _In_ UINT StartInstanceLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Dispatch) - void ( STDMETHODCALLTYPE *Dispatch )( - ID3D12GraphicsCommandList * This, - _In_ UINT ThreadGroupCountX, - _In_ UINT ThreadGroupCountY, - _In_ UINT ThreadGroupCountZ); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyBufferRegion) - void ( STDMETHODCALLTYPE *CopyBufferRegion )( - ID3D12GraphicsCommandList * This, - _In_ ID3D12Resource *pDstBuffer, - UINT64 DstOffset, - _In_ ID3D12Resource *pSrcBuffer, - UINT64 SrcOffset, - UINT64 NumBytes); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTextureRegion) - void ( STDMETHODCALLTYPE *CopyTextureRegion )( - ID3D12GraphicsCommandList * This, - _In_ const D3D12_TEXTURE_COPY_LOCATION *pDst, - UINT DstX, - UINT DstY, - UINT DstZ, - _In_ const D3D12_TEXTURE_COPY_LOCATION *pSrc, - _In_opt_ const D3D12_BOX *pSrcBox); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyResource) - void ( STDMETHODCALLTYPE *CopyResource )( - ID3D12GraphicsCommandList * This, - _In_ ID3D12Resource *pDstResource, - _In_ ID3D12Resource *pSrcResource); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTiles) - void ( STDMETHODCALLTYPE *CopyTiles )( - ID3D12GraphicsCommandList * This, - _In_ ID3D12Resource *pTiledResource, - _In_ const D3D12_TILED_RESOURCE_COORDINATE *pTileRegionStartCoordinate, - _In_ const D3D12_TILE_REGION_SIZE *pTileRegionSize, - _In_ ID3D12Resource *pBuffer, - UINT64 BufferStartOffsetInBytes, - D3D12_TILE_COPY_FLAGS Flags); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveSubresource) - void ( STDMETHODCALLTYPE *ResolveSubresource )( - ID3D12GraphicsCommandList * This, - _In_ ID3D12Resource *pDstResource, - _In_ UINT DstSubresource, - _In_ ID3D12Resource *pSrcResource, - _In_ UINT SrcSubresource, - _In_ DXGI_FORMAT Format); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetPrimitiveTopology) - void ( STDMETHODCALLTYPE *IASetPrimitiveTopology )( - ID3D12GraphicsCommandList * This, - _In_ D3D12_PRIMITIVE_TOPOLOGY PrimitiveTopology); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetViewports) - void ( STDMETHODCALLTYPE *RSSetViewports )( - ID3D12GraphicsCommandList * This, - _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE) UINT NumViewports, - _In_reads_( NumViewports) const D3D12_VIEWPORT *pViewports); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetScissorRects) - void ( STDMETHODCALLTYPE *RSSetScissorRects )( - ID3D12GraphicsCommandList * This, - _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE) UINT NumRects, - _In_reads_( NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetBlendFactor) - void ( STDMETHODCALLTYPE *OMSetBlendFactor )( - ID3D12GraphicsCommandList * This, - _In_reads_opt_(4) const FLOAT BlendFactor[ 4 ]); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetStencilRef) - void ( STDMETHODCALLTYPE *OMSetStencilRef )( - ID3D12GraphicsCommandList * This, - _In_ UINT StencilRef); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPipelineState) - void ( STDMETHODCALLTYPE *SetPipelineState )( - ID3D12GraphicsCommandList * This, - _In_ ID3D12PipelineState *pPipelineState); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResourceBarrier) - void ( STDMETHODCALLTYPE *ResourceBarrier )( - ID3D12GraphicsCommandList * This, - _In_ UINT NumBarriers, - _In_reads_(NumBarriers) const D3D12_RESOURCE_BARRIER *pBarriers); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteBundle) - void ( STDMETHODCALLTYPE *ExecuteBundle )( - ID3D12GraphicsCommandList * This, - _In_ ID3D12GraphicsCommandList *pCommandList); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetDescriptorHeaps) - void ( STDMETHODCALLTYPE *SetDescriptorHeaps )( - ID3D12GraphicsCommandList * This, - _In_ UINT NumDescriptorHeaps, - _In_reads_(NumDescriptorHeaps) ID3D12DescriptorHeap *const *ppDescriptorHeaps); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootSignature) - void ( STDMETHODCALLTYPE *SetComputeRootSignature )( - ID3D12GraphicsCommandList * This, - _In_opt_ ID3D12RootSignature *pRootSignature); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootSignature) - void ( STDMETHODCALLTYPE *SetGraphicsRootSignature )( - ID3D12GraphicsCommandList * This, - _In_opt_ ID3D12RootSignature *pRootSignature); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootDescriptorTable) - void ( STDMETHODCALLTYPE *SetComputeRootDescriptorTable )( - ID3D12GraphicsCommandList * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootDescriptorTable) - void ( STDMETHODCALLTYPE *SetGraphicsRootDescriptorTable )( - ID3D12GraphicsCommandList * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstant) - void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstant )( - ID3D12GraphicsCommandList * This, - _In_ UINT RootParameterIndex, - _In_ UINT SrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstant) - void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstant )( - ID3D12GraphicsCommandList * This, - _In_ UINT RootParameterIndex, - _In_ UINT SrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstants) - void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstants )( - ID3D12GraphicsCommandList * This, - _In_ UINT RootParameterIndex, - _In_ UINT Num32BitValuesToSet, - _In_reads_(Num32BitValuesToSet*sizeof(UINT)) const void *pSrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstants) - void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstants )( - ID3D12GraphicsCommandList * This, - _In_ UINT RootParameterIndex, - _In_ UINT Num32BitValuesToSet, - _In_reads_(Num32BitValuesToSet*sizeof(UINT)) const void *pSrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootConstantBufferView) - void ( STDMETHODCALLTYPE *SetComputeRootConstantBufferView )( - ID3D12GraphicsCommandList * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootConstantBufferView) - void ( STDMETHODCALLTYPE *SetGraphicsRootConstantBufferView )( - ID3D12GraphicsCommandList * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootShaderResourceView) - void ( STDMETHODCALLTYPE *SetComputeRootShaderResourceView )( - ID3D12GraphicsCommandList * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootShaderResourceView) - void ( STDMETHODCALLTYPE *SetGraphicsRootShaderResourceView )( - ID3D12GraphicsCommandList * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootUnorderedAccessView) - void ( STDMETHODCALLTYPE *SetComputeRootUnorderedAccessView )( - ID3D12GraphicsCommandList * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootUnorderedAccessView) - void ( STDMETHODCALLTYPE *SetGraphicsRootUnorderedAccessView )( - ID3D12GraphicsCommandList * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetIndexBuffer) - void ( STDMETHODCALLTYPE *IASetIndexBuffer )( - ID3D12GraphicsCommandList * This, - _In_opt_ const D3D12_INDEX_BUFFER_VIEW *pView); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetVertexBuffers) - void ( STDMETHODCALLTYPE *IASetVertexBuffers )( - ID3D12GraphicsCommandList * This, - _In_ UINT StartSlot, - _In_ UINT NumViews, - _In_reads_opt_(NumViews) const D3D12_VERTEX_BUFFER_VIEW *pViews); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SOSetTargets) - void ( STDMETHODCALLTYPE *SOSetTargets )( - ID3D12GraphicsCommandList * This, - _In_ UINT StartSlot, - _In_ UINT NumViews, - _In_reads_opt_(NumViews) const D3D12_STREAM_OUTPUT_BUFFER_VIEW *pViews); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetRenderTargets) - void ( STDMETHODCALLTYPE *OMSetRenderTargets )( - ID3D12GraphicsCommandList * This, - _In_ UINT NumRenderTargetDescriptors, - _In_opt_ const D3D12_CPU_DESCRIPTOR_HANDLE *pRenderTargetDescriptors, - _In_ BOOL RTsSingleHandleToDescriptorRange, - _In_opt_ const D3D12_CPU_DESCRIPTOR_HANDLE *pDepthStencilDescriptor); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearDepthStencilView) - void ( STDMETHODCALLTYPE *ClearDepthStencilView )( - ID3D12GraphicsCommandList * This, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DepthStencilView, - _In_ D3D12_CLEAR_FLAGS ClearFlags, - _In_ FLOAT Depth, - _In_ UINT8 Stencil, - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearRenderTargetView) - void ( STDMETHODCALLTYPE *ClearRenderTargetView )( - ID3D12GraphicsCommandList * This, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE RenderTargetView, - _In_ const FLOAT ColorRGBA[ 4 ], - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewUint) - void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewUint )( - ID3D12GraphicsCommandList * This, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle, - _In_ ID3D12Resource *pResource, - _In_ const UINT Values[ 4 ], - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewFloat) - void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewFloat )( - ID3D12GraphicsCommandList * This, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle, - _In_ ID3D12Resource *pResource, - _In_ const FLOAT Values[ 4 ], - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DiscardResource) - void ( STDMETHODCALLTYPE *DiscardResource )( - ID3D12GraphicsCommandList * This, - _In_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DISCARD_REGION *pRegion); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginQuery) - void ( STDMETHODCALLTYPE *BeginQuery )( - ID3D12GraphicsCommandList * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndQuery) - void ( STDMETHODCALLTYPE *EndQuery )( - ID3D12GraphicsCommandList * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveQueryData) - void ( STDMETHODCALLTYPE *ResolveQueryData )( - ID3D12GraphicsCommandList * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT StartIndex, - _In_ UINT NumQueries, - _In_ ID3D12Resource *pDestinationBuffer, - _In_ UINT64 AlignedDestinationBufferOffset); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPredication) - void ( STDMETHODCALLTYPE *SetPredication )( - ID3D12GraphicsCommandList * This, - _In_opt_ ID3D12Resource *pBuffer, - _In_ UINT64 AlignedBufferOffset, - _In_ D3D12_PREDICATION_OP Operation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetMarker) - void ( STDMETHODCALLTYPE *SetMarker )( - ID3D12GraphicsCommandList * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginEvent) - void ( STDMETHODCALLTYPE *BeginEvent )( - ID3D12GraphicsCommandList * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndEvent) - void ( STDMETHODCALLTYPE *EndEvent )( - ID3D12GraphicsCommandList * This); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteIndirect) - void ( STDMETHODCALLTYPE *ExecuteIndirect )( - ID3D12GraphicsCommandList * This, - _In_ ID3D12CommandSignature *pCommandSignature, - _In_ UINT MaxCommandCount, - _In_ ID3D12Resource *pArgumentBuffer, - _In_ UINT64 ArgumentBufferOffset, - _In_opt_ ID3D12Resource *pCountBuffer, - _In_ UINT64 CountBufferOffset); - - END_INTERFACE - } ID3D12GraphicsCommandListVtbl; - - interface ID3D12GraphicsCommandList - { - CONST_VTBL struct ID3D12GraphicsCommandListVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12GraphicsCommandList_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12GraphicsCommandList_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12GraphicsCommandList_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12GraphicsCommandList_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12GraphicsCommandList_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12GraphicsCommandList_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12GraphicsCommandList_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12GraphicsCommandList_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12GraphicsCommandList_GetType(This) \ - ( (This)->lpVtbl -> GetType(This) ) - -#define ID3D12GraphicsCommandList_Close(This) \ - ( (This)->lpVtbl -> Close(This) ) - -#define ID3D12GraphicsCommandList_Reset(This,pAllocator,pInitialState) \ - ( (This)->lpVtbl -> Reset(This,pAllocator,pInitialState) ) - -#define ID3D12GraphicsCommandList_ClearState(This,pPipelineState) \ - ( (This)->lpVtbl -> ClearState(This,pPipelineState) ) - -#define ID3D12GraphicsCommandList_DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) \ - ( (This)->lpVtbl -> DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) ) - -#define ID3D12GraphicsCommandList_DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) \ - ( (This)->lpVtbl -> DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) ) - -#define ID3D12GraphicsCommandList_Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) \ - ( (This)->lpVtbl -> Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) ) - -#define ID3D12GraphicsCommandList_CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes) \ - ( (This)->lpVtbl -> CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes) ) - -#define ID3D12GraphicsCommandList_CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox) \ - ( (This)->lpVtbl -> CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox) ) - -#define ID3D12GraphicsCommandList_CopyResource(This,pDstResource,pSrcResource) \ - ( (This)->lpVtbl -> CopyResource(This,pDstResource,pSrcResource) ) - -#define ID3D12GraphicsCommandList_CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags) \ - ( (This)->lpVtbl -> CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags) ) - -#define ID3D12GraphicsCommandList_ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) \ - ( (This)->lpVtbl -> ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) ) - -#define ID3D12GraphicsCommandList_IASetPrimitiveTopology(This,PrimitiveTopology) \ - ( (This)->lpVtbl -> IASetPrimitiveTopology(This,PrimitiveTopology) ) - -#define ID3D12GraphicsCommandList_RSSetViewports(This,NumViewports,pViewports) \ - ( (This)->lpVtbl -> RSSetViewports(This,NumViewports,pViewports) ) - -#define ID3D12GraphicsCommandList_RSSetScissorRects(This,NumRects,pRects) \ - ( (This)->lpVtbl -> RSSetScissorRects(This,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList_OMSetBlendFactor(This,BlendFactor) \ - ( (This)->lpVtbl -> OMSetBlendFactor(This,BlendFactor) ) - -#define ID3D12GraphicsCommandList_OMSetStencilRef(This,StencilRef) \ - ( (This)->lpVtbl -> OMSetStencilRef(This,StencilRef) ) - -#define ID3D12GraphicsCommandList_SetPipelineState(This,pPipelineState) \ - ( (This)->lpVtbl -> SetPipelineState(This,pPipelineState) ) - -#define ID3D12GraphicsCommandList_ResourceBarrier(This,NumBarriers,pBarriers) \ - ( (This)->lpVtbl -> ResourceBarrier(This,NumBarriers,pBarriers) ) - -#define ID3D12GraphicsCommandList_ExecuteBundle(This,pCommandList) \ - ( (This)->lpVtbl -> ExecuteBundle(This,pCommandList) ) - -#define ID3D12GraphicsCommandList_SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps) \ - ( (This)->lpVtbl -> SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps) ) - -#define ID3D12GraphicsCommandList_SetComputeRootSignature(This,pRootSignature) \ - ( (This)->lpVtbl -> SetComputeRootSignature(This,pRootSignature) ) - -#define ID3D12GraphicsCommandList_SetGraphicsRootSignature(This,pRootSignature) \ - ( (This)->lpVtbl -> SetGraphicsRootSignature(This,pRootSignature) ) - -#define ID3D12GraphicsCommandList_SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) \ - ( (This)->lpVtbl -> SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) - -#define ID3D12GraphicsCommandList_SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) \ - ( (This)->lpVtbl -> SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) - -#define ID3D12GraphicsCommandList_SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList_SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList_SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList_SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList_SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList_SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList_SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList_SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList_SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList_SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList_IASetIndexBuffer(This,pView) \ - ( (This)->lpVtbl -> IASetIndexBuffer(This,pView) ) - -#define ID3D12GraphicsCommandList_IASetVertexBuffers(This,StartSlot,NumViews,pViews) \ - ( (This)->lpVtbl -> IASetVertexBuffers(This,StartSlot,NumViews,pViews) ) - -#define ID3D12GraphicsCommandList_SOSetTargets(This,StartSlot,NumViews,pViews) \ - ( (This)->lpVtbl -> SOSetTargets(This,StartSlot,NumViews,pViews) ) - -#define ID3D12GraphicsCommandList_OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor) \ - ( (This)->lpVtbl -> OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor) ) - -#define ID3D12GraphicsCommandList_ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList_ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList_ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList_ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList_DiscardResource(This,pResource,pRegion) \ - ( (This)->lpVtbl -> DiscardResource(This,pResource,pRegion) ) - -#define ID3D12GraphicsCommandList_BeginQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> BeginQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12GraphicsCommandList_EndQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> EndQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12GraphicsCommandList_ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) \ - ( (This)->lpVtbl -> ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) ) - -#define ID3D12GraphicsCommandList_SetPredication(This,pBuffer,AlignedBufferOffset,Operation) \ - ( (This)->lpVtbl -> SetPredication(This,pBuffer,AlignedBufferOffset,Operation) ) - -#define ID3D12GraphicsCommandList_SetMarker(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> SetMarker(This,Metadata,pData,Size) ) - -#define ID3D12GraphicsCommandList_BeginEvent(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> BeginEvent(This,Metadata,pData,Size) ) - -#define ID3D12GraphicsCommandList_EndEvent(This) \ - ( (This)->lpVtbl -> EndEvent(This) ) - -#define ID3D12GraphicsCommandList_ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset) \ - ( (This)->lpVtbl -> ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12GraphicsCommandList_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12GraphicsCommandList1_INTERFACE_DEFINED__ -#define __ID3D12GraphicsCommandList1_INTERFACE_DEFINED__ - -/* interface ID3D12GraphicsCommandList1 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12GraphicsCommandList1; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("553103fb-1fe7-4557-bb38-946d7d0e7ca7") - ID3D12GraphicsCommandList1 : public ID3D12GraphicsCommandList - { - public: - virtual void STDMETHODCALLTYPE AtomicCopyBufferUINT( - _In_ ID3D12Resource *pDstBuffer, - UINT64 DstOffset, - _In_ ID3D12Resource *pSrcBuffer, - UINT64 SrcOffset, - UINT Dependencies, - _In_reads_(Dependencies) ID3D12Resource *const *ppDependentResources, - _In_reads_(Dependencies) const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges) = 0; - - virtual void STDMETHODCALLTYPE AtomicCopyBufferUINT64( - _In_ ID3D12Resource *pDstBuffer, - UINT64 DstOffset, - _In_ ID3D12Resource *pSrcBuffer, - UINT64 SrcOffset, - UINT Dependencies, - _In_reads_(Dependencies) ID3D12Resource *const *ppDependentResources, - _In_reads_(Dependencies) const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges) = 0; - - virtual void STDMETHODCALLTYPE OMSetDepthBounds( - _In_ FLOAT Min, - _In_ FLOAT Max) = 0; - - virtual void STDMETHODCALLTYPE SetSamplePositions( - _In_ UINT NumSamplesPerPixel, - _In_ UINT NumPixels, - _In_reads_(NumSamplesPerPixel*NumPixels) D3D12_SAMPLE_POSITION *pSamplePositions) = 0; - - virtual void STDMETHODCALLTYPE ResolveSubresourceRegion( - _In_ ID3D12Resource *pDstResource, - _In_ UINT DstSubresource, - _In_ UINT DstX, - _In_ UINT DstY, - _In_ ID3D12Resource *pSrcResource, - _In_ UINT SrcSubresource, - _In_opt_ D3D12_RECT *pSrcRect, - _In_ DXGI_FORMAT Format, - _In_ D3D12_RESOLVE_MODE ResolveMode) = 0; - - virtual void STDMETHODCALLTYPE SetViewInstanceMask( - _In_ UINT Mask) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12GraphicsCommandList1Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12GraphicsCommandList1 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12GraphicsCommandList1 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12GraphicsCommandList1 * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12GraphicsCommandList1 * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12GraphicsCommandList1 * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12GraphicsCommandList1 * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12GraphicsCommandList1 * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12GraphicsCommandList1 * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12CommandList, GetType) - D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )( - ID3D12GraphicsCommandList1 * This); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Close) - HRESULT ( STDMETHODCALLTYPE *Close )( - ID3D12GraphicsCommandList1 * This); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Reset) - HRESULT ( STDMETHODCALLTYPE *Reset )( - ID3D12GraphicsCommandList1 * This, - _In_ ID3D12CommandAllocator *pAllocator, - _In_opt_ ID3D12PipelineState *pInitialState); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearState) - void ( STDMETHODCALLTYPE *ClearState )( - ID3D12GraphicsCommandList1 * This, - _In_opt_ ID3D12PipelineState *pPipelineState); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawInstanced) - void ( STDMETHODCALLTYPE *DrawInstanced )( - ID3D12GraphicsCommandList1 * This, - _In_ UINT VertexCountPerInstance, - _In_ UINT InstanceCount, - _In_ UINT StartVertexLocation, - _In_ UINT StartInstanceLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawIndexedInstanced) - void ( STDMETHODCALLTYPE *DrawIndexedInstanced )( - ID3D12GraphicsCommandList1 * This, - _In_ UINT IndexCountPerInstance, - _In_ UINT InstanceCount, - _In_ UINT StartIndexLocation, - _In_ INT BaseVertexLocation, - _In_ UINT StartInstanceLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Dispatch) - void ( STDMETHODCALLTYPE *Dispatch )( - ID3D12GraphicsCommandList1 * This, - _In_ UINT ThreadGroupCountX, - _In_ UINT ThreadGroupCountY, - _In_ UINT ThreadGroupCountZ); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyBufferRegion) - void ( STDMETHODCALLTYPE *CopyBufferRegion )( - ID3D12GraphicsCommandList1 * This, - _In_ ID3D12Resource *pDstBuffer, - UINT64 DstOffset, - _In_ ID3D12Resource *pSrcBuffer, - UINT64 SrcOffset, - UINT64 NumBytes); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTextureRegion) - void ( STDMETHODCALLTYPE *CopyTextureRegion )( - ID3D12GraphicsCommandList1 * This, - _In_ const D3D12_TEXTURE_COPY_LOCATION *pDst, - UINT DstX, - UINT DstY, - UINT DstZ, - _In_ const D3D12_TEXTURE_COPY_LOCATION *pSrc, - _In_opt_ const D3D12_BOX *pSrcBox); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyResource) - void ( STDMETHODCALLTYPE *CopyResource )( - ID3D12GraphicsCommandList1 * This, - _In_ ID3D12Resource *pDstResource, - _In_ ID3D12Resource *pSrcResource); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTiles) - void ( STDMETHODCALLTYPE *CopyTiles )( - ID3D12GraphicsCommandList1 * This, - _In_ ID3D12Resource *pTiledResource, - _In_ const D3D12_TILED_RESOURCE_COORDINATE *pTileRegionStartCoordinate, - _In_ const D3D12_TILE_REGION_SIZE *pTileRegionSize, - _In_ ID3D12Resource *pBuffer, - UINT64 BufferStartOffsetInBytes, - D3D12_TILE_COPY_FLAGS Flags); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveSubresource) - void ( STDMETHODCALLTYPE *ResolveSubresource )( - ID3D12GraphicsCommandList1 * This, - _In_ ID3D12Resource *pDstResource, - _In_ UINT DstSubresource, - _In_ ID3D12Resource *pSrcResource, - _In_ UINT SrcSubresource, - _In_ DXGI_FORMAT Format); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetPrimitiveTopology) - void ( STDMETHODCALLTYPE *IASetPrimitiveTopology )( - ID3D12GraphicsCommandList1 * This, - _In_ D3D12_PRIMITIVE_TOPOLOGY PrimitiveTopology); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetViewports) - void ( STDMETHODCALLTYPE *RSSetViewports )( - ID3D12GraphicsCommandList1 * This, - _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE) UINT NumViewports, - _In_reads_( NumViewports) const D3D12_VIEWPORT *pViewports); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetScissorRects) - void ( STDMETHODCALLTYPE *RSSetScissorRects )( - ID3D12GraphicsCommandList1 * This, - _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE) UINT NumRects, - _In_reads_( NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetBlendFactor) - void ( STDMETHODCALLTYPE *OMSetBlendFactor )( - ID3D12GraphicsCommandList1 * This, - _In_reads_opt_(4) const FLOAT BlendFactor[ 4 ]); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetStencilRef) - void ( STDMETHODCALLTYPE *OMSetStencilRef )( - ID3D12GraphicsCommandList1 * This, - _In_ UINT StencilRef); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPipelineState) - void ( STDMETHODCALLTYPE *SetPipelineState )( - ID3D12GraphicsCommandList1 * This, - _In_ ID3D12PipelineState *pPipelineState); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResourceBarrier) - void ( STDMETHODCALLTYPE *ResourceBarrier )( - ID3D12GraphicsCommandList1 * This, - _In_ UINT NumBarriers, - _In_reads_(NumBarriers) const D3D12_RESOURCE_BARRIER *pBarriers); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteBundle) - void ( STDMETHODCALLTYPE *ExecuteBundle )( - ID3D12GraphicsCommandList1 * This, - _In_ ID3D12GraphicsCommandList *pCommandList); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetDescriptorHeaps) - void ( STDMETHODCALLTYPE *SetDescriptorHeaps )( - ID3D12GraphicsCommandList1 * This, - _In_ UINT NumDescriptorHeaps, - _In_reads_(NumDescriptorHeaps) ID3D12DescriptorHeap *const *ppDescriptorHeaps); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootSignature) - void ( STDMETHODCALLTYPE *SetComputeRootSignature )( - ID3D12GraphicsCommandList1 * This, - _In_opt_ ID3D12RootSignature *pRootSignature); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootSignature) - void ( STDMETHODCALLTYPE *SetGraphicsRootSignature )( - ID3D12GraphicsCommandList1 * This, - _In_opt_ ID3D12RootSignature *pRootSignature); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootDescriptorTable) - void ( STDMETHODCALLTYPE *SetComputeRootDescriptorTable )( - ID3D12GraphicsCommandList1 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootDescriptorTable) - void ( STDMETHODCALLTYPE *SetGraphicsRootDescriptorTable )( - ID3D12GraphicsCommandList1 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstant) - void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstant )( - ID3D12GraphicsCommandList1 * This, - _In_ UINT RootParameterIndex, - _In_ UINT SrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstant) - void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstant )( - ID3D12GraphicsCommandList1 * This, - _In_ UINT RootParameterIndex, - _In_ UINT SrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstants) - void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstants )( - ID3D12GraphicsCommandList1 * This, - _In_ UINT RootParameterIndex, - _In_ UINT Num32BitValuesToSet, - _In_reads_(Num32BitValuesToSet*sizeof(UINT)) const void *pSrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstants) - void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstants )( - ID3D12GraphicsCommandList1 * This, - _In_ UINT RootParameterIndex, - _In_ UINT Num32BitValuesToSet, - _In_reads_(Num32BitValuesToSet*sizeof(UINT)) const void *pSrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootConstantBufferView) - void ( STDMETHODCALLTYPE *SetComputeRootConstantBufferView )( - ID3D12GraphicsCommandList1 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootConstantBufferView) - void ( STDMETHODCALLTYPE *SetGraphicsRootConstantBufferView )( - ID3D12GraphicsCommandList1 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootShaderResourceView) - void ( STDMETHODCALLTYPE *SetComputeRootShaderResourceView )( - ID3D12GraphicsCommandList1 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootShaderResourceView) - void ( STDMETHODCALLTYPE *SetGraphicsRootShaderResourceView )( - ID3D12GraphicsCommandList1 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootUnorderedAccessView) - void ( STDMETHODCALLTYPE *SetComputeRootUnorderedAccessView )( - ID3D12GraphicsCommandList1 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootUnorderedAccessView) - void ( STDMETHODCALLTYPE *SetGraphicsRootUnorderedAccessView )( - ID3D12GraphicsCommandList1 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetIndexBuffer) - void ( STDMETHODCALLTYPE *IASetIndexBuffer )( - ID3D12GraphicsCommandList1 * This, - _In_opt_ const D3D12_INDEX_BUFFER_VIEW *pView); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetVertexBuffers) - void ( STDMETHODCALLTYPE *IASetVertexBuffers )( - ID3D12GraphicsCommandList1 * This, - _In_ UINT StartSlot, - _In_ UINT NumViews, - _In_reads_opt_(NumViews) const D3D12_VERTEX_BUFFER_VIEW *pViews); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SOSetTargets) - void ( STDMETHODCALLTYPE *SOSetTargets )( - ID3D12GraphicsCommandList1 * This, - _In_ UINT StartSlot, - _In_ UINT NumViews, - _In_reads_opt_(NumViews) const D3D12_STREAM_OUTPUT_BUFFER_VIEW *pViews); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetRenderTargets) - void ( STDMETHODCALLTYPE *OMSetRenderTargets )( - ID3D12GraphicsCommandList1 * This, - _In_ UINT NumRenderTargetDescriptors, - _In_opt_ const D3D12_CPU_DESCRIPTOR_HANDLE *pRenderTargetDescriptors, - _In_ BOOL RTsSingleHandleToDescriptorRange, - _In_opt_ const D3D12_CPU_DESCRIPTOR_HANDLE *pDepthStencilDescriptor); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearDepthStencilView) - void ( STDMETHODCALLTYPE *ClearDepthStencilView )( - ID3D12GraphicsCommandList1 * This, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DepthStencilView, - _In_ D3D12_CLEAR_FLAGS ClearFlags, - _In_ FLOAT Depth, - _In_ UINT8 Stencil, - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearRenderTargetView) - void ( STDMETHODCALLTYPE *ClearRenderTargetView )( - ID3D12GraphicsCommandList1 * This, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE RenderTargetView, - _In_ const FLOAT ColorRGBA[ 4 ], - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewUint) - void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewUint )( - ID3D12GraphicsCommandList1 * This, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle, - _In_ ID3D12Resource *pResource, - _In_ const UINT Values[ 4 ], - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewFloat) - void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewFloat )( - ID3D12GraphicsCommandList1 * This, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle, - _In_ ID3D12Resource *pResource, - _In_ const FLOAT Values[ 4 ], - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DiscardResource) - void ( STDMETHODCALLTYPE *DiscardResource )( - ID3D12GraphicsCommandList1 * This, - _In_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DISCARD_REGION *pRegion); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginQuery) - void ( STDMETHODCALLTYPE *BeginQuery )( - ID3D12GraphicsCommandList1 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndQuery) - void ( STDMETHODCALLTYPE *EndQuery )( - ID3D12GraphicsCommandList1 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveQueryData) - void ( STDMETHODCALLTYPE *ResolveQueryData )( - ID3D12GraphicsCommandList1 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT StartIndex, - _In_ UINT NumQueries, - _In_ ID3D12Resource *pDestinationBuffer, - _In_ UINT64 AlignedDestinationBufferOffset); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPredication) - void ( STDMETHODCALLTYPE *SetPredication )( - ID3D12GraphicsCommandList1 * This, - _In_opt_ ID3D12Resource *pBuffer, - _In_ UINT64 AlignedBufferOffset, - _In_ D3D12_PREDICATION_OP Operation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetMarker) - void ( STDMETHODCALLTYPE *SetMarker )( - ID3D12GraphicsCommandList1 * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginEvent) - void ( STDMETHODCALLTYPE *BeginEvent )( - ID3D12GraphicsCommandList1 * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndEvent) - void ( STDMETHODCALLTYPE *EndEvent )( - ID3D12GraphicsCommandList1 * This); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteIndirect) - void ( STDMETHODCALLTYPE *ExecuteIndirect )( - ID3D12GraphicsCommandList1 * This, - _In_ ID3D12CommandSignature *pCommandSignature, - _In_ UINT MaxCommandCount, - _In_ ID3D12Resource *pArgumentBuffer, - _In_ UINT64 ArgumentBufferOffset, - _In_opt_ ID3D12Resource *pCountBuffer, - _In_ UINT64 CountBufferOffset); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, AtomicCopyBufferUINT) - void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT )( - ID3D12GraphicsCommandList1 * This, - _In_ ID3D12Resource *pDstBuffer, - UINT64 DstOffset, - _In_ ID3D12Resource *pSrcBuffer, - UINT64 SrcOffset, - UINT Dependencies, - _In_reads_(Dependencies) ID3D12Resource *const *ppDependentResources, - _In_reads_(Dependencies) const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, AtomicCopyBufferUINT64) - void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT64 )( - ID3D12GraphicsCommandList1 * This, - _In_ ID3D12Resource *pDstBuffer, - UINT64 DstOffset, - _In_ ID3D12Resource *pSrcBuffer, - UINT64 SrcOffset, - UINT Dependencies, - _In_reads_(Dependencies) ID3D12Resource *const *ppDependentResources, - _In_reads_(Dependencies) const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, OMSetDepthBounds) - void ( STDMETHODCALLTYPE *OMSetDepthBounds )( - ID3D12GraphicsCommandList1 * This, - _In_ FLOAT Min, - _In_ FLOAT Max); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, SetSamplePositions) - void ( STDMETHODCALLTYPE *SetSamplePositions )( - ID3D12GraphicsCommandList1 * This, - _In_ UINT NumSamplesPerPixel, - _In_ UINT NumPixels, - _In_reads_(NumSamplesPerPixel*NumPixels) D3D12_SAMPLE_POSITION *pSamplePositions); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, ResolveSubresourceRegion) - void ( STDMETHODCALLTYPE *ResolveSubresourceRegion )( - ID3D12GraphicsCommandList1 * This, - _In_ ID3D12Resource *pDstResource, - _In_ UINT DstSubresource, - _In_ UINT DstX, - _In_ UINT DstY, - _In_ ID3D12Resource *pSrcResource, - _In_ UINT SrcSubresource, - _In_opt_ D3D12_RECT *pSrcRect, - _In_ DXGI_FORMAT Format, - _In_ D3D12_RESOLVE_MODE ResolveMode); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, SetViewInstanceMask) - void ( STDMETHODCALLTYPE *SetViewInstanceMask )( - ID3D12GraphicsCommandList1 * This, - _In_ UINT Mask); - - END_INTERFACE - } ID3D12GraphicsCommandList1Vtbl; - - interface ID3D12GraphicsCommandList1 - { - CONST_VTBL struct ID3D12GraphicsCommandList1Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12GraphicsCommandList1_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12GraphicsCommandList1_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12GraphicsCommandList1_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12GraphicsCommandList1_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12GraphicsCommandList1_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12GraphicsCommandList1_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12GraphicsCommandList1_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12GraphicsCommandList1_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12GraphicsCommandList1_GetType(This) \ - ( (This)->lpVtbl -> GetType(This) ) - -#define ID3D12GraphicsCommandList1_Close(This) \ - ( (This)->lpVtbl -> Close(This) ) - -#define ID3D12GraphicsCommandList1_Reset(This,pAllocator,pInitialState) \ - ( (This)->lpVtbl -> Reset(This,pAllocator,pInitialState) ) - -#define ID3D12GraphicsCommandList1_ClearState(This,pPipelineState) \ - ( (This)->lpVtbl -> ClearState(This,pPipelineState) ) - -#define ID3D12GraphicsCommandList1_DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) \ - ( (This)->lpVtbl -> DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) ) - -#define ID3D12GraphicsCommandList1_DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) \ - ( (This)->lpVtbl -> DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) ) - -#define ID3D12GraphicsCommandList1_Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) \ - ( (This)->lpVtbl -> Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) ) - -#define ID3D12GraphicsCommandList1_CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes) \ - ( (This)->lpVtbl -> CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes) ) - -#define ID3D12GraphicsCommandList1_CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox) \ - ( (This)->lpVtbl -> CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox) ) - -#define ID3D12GraphicsCommandList1_CopyResource(This,pDstResource,pSrcResource) \ - ( (This)->lpVtbl -> CopyResource(This,pDstResource,pSrcResource) ) - -#define ID3D12GraphicsCommandList1_CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags) \ - ( (This)->lpVtbl -> CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags) ) - -#define ID3D12GraphicsCommandList1_ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) \ - ( (This)->lpVtbl -> ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) ) - -#define ID3D12GraphicsCommandList1_IASetPrimitiveTopology(This,PrimitiveTopology) \ - ( (This)->lpVtbl -> IASetPrimitiveTopology(This,PrimitiveTopology) ) - -#define ID3D12GraphicsCommandList1_RSSetViewports(This,NumViewports,pViewports) \ - ( (This)->lpVtbl -> RSSetViewports(This,NumViewports,pViewports) ) - -#define ID3D12GraphicsCommandList1_RSSetScissorRects(This,NumRects,pRects) \ - ( (This)->lpVtbl -> RSSetScissorRects(This,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList1_OMSetBlendFactor(This,BlendFactor) \ - ( (This)->lpVtbl -> OMSetBlendFactor(This,BlendFactor) ) - -#define ID3D12GraphicsCommandList1_OMSetStencilRef(This,StencilRef) \ - ( (This)->lpVtbl -> OMSetStencilRef(This,StencilRef) ) - -#define ID3D12GraphicsCommandList1_SetPipelineState(This,pPipelineState) \ - ( (This)->lpVtbl -> SetPipelineState(This,pPipelineState) ) - -#define ID3D12GraphicsCommandList1_ResourceBarrier(This,NumBarriers,pBarriers) \ - ( (This)->lpVtbl -> ResourceBarrier(This,NumBarriers,pBarriers) ) - -#define ID3D12GraphicsCommandList1_ExecuteBundle(This,pCommandList) \ - ( (This)->lpVtbl -> ExecuteBundle(This,pCommandList) ) - -#define ID3D12GraphicsCommandList1_SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps) \ - ( (This)->lpVtbl -> SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps) ) - -#define ID3D12GraphicsCommandList1_SetComputeRootSignature(This,pRootSignature) \ - ( (This)->lpVtbl -> SetComputeRootSignature(This,pRootSignature) ) - -#define ID3D12GraphicsCommandList1_SetGraphicsRootSignature(This,pRootSignature) \ - ( (This)->lpVtbl -> SetGraphicsRootSignature(This,pRootSignature) ) - -#define ID3D12GraphicsCommandList1_SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) \ - ( (This)->lpVtbl -> SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) - -#define ID3D12GraphicsCommandList1_SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) \ - ( (This)->lpVtbl -> SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) - -#define ID3D12GraphicsCommandList1_SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList1_SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList1_SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList1_SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList1_SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList1_SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList1_SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList1_SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList1_SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList1_SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList1_IASetIndexBuffer(This,pView) \ - ( (This)->lpVtbl -> IASetIndexBuffer(This,pView) ) - -#define ID3D12GraphicsCommandList1_IASetVertexBuffers(This,StartSlot,NumViews,pViews) \ - ( (This)->lpVtbl -> IASetVertexBuffers(This,StartSlot,NumViews,pViews) ) - -#define ID3D12GraphicsCommandList1_SOSetTargets(This,StartSlot,NumViews,pViews) \ - ( (This)->lpVtbl -> SOSetTargets(This,StartSlot,NumViews,pViews) ) - -#define ID3D12GraphicsCommandList1_OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor) \ - ( (This)->lpVtbl -> OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor) ) - -#define ID3D12GraphicsCommandList1_ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList1_ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList1_ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList1_ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList1_DiscardResource(This,pResource,pRegion) \ - ( (This)->lpVtbl -> DiscardResource(This,pResource,pRegion) ) - -#define ID3D12GraphicsCommandList1_BeginQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> BeginQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12GraphicsCommandList1_EndQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> EndQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12GraphicsCommandList1_ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) \ - ( (This)->lpVtbl -> ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) ) - -#define ID3D12GraphicsCommandList1_SetPredication(This,pBuffer,AlignedBufferOffset,Operation) \ - ( (This)->lpVtbl -> SetPredication(This,pBuffer,AlignedBufferOffset,Operation) ) - -#define ID3D12GraphicsCommandList1_SetMarker(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> SetMarker(This,Metadata,pData,Size) ) - -#define ID3D12GraphicsCommandList1_BeginEvent(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> BeginEvent(This,Metadata,pData,Size) ) - -#define ID3D12GraphicsCommandList1_EndEvent(This) \ - ( (This)->lpVtbl -> EndEvent(This) ) - -#define ID3D12GraphicsCommandList1_ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset) \ - ( (This)->lpVtbl -> ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset) ) - -#define ID3D12GraphicsCommandList1_AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) \ - ( (This)->lpVtbl -> AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) - -#define ID3D12GraphicsCommandList1_AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) \ - ( (This)->lpVtbl -> AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) - -#define ID3D12GraphicsCommandList1_OMSetDepthBounds(This,Min,Max) \ - ( (This)->lpVtbl -> OMSetDepthBounds(This,Min,Max) ) - -#define ID3D12GraphicsCommandList1_SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions) \ - ( (This)->lpVtbl -> SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions) ) - -#define ID3D12GraphicsCommandList1_ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode) \ - ( (This)->lpVtbl -> ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode) ) - -#define ID3D12GraphicsCommandList1_SetViewInstanceMask(This,Mask) \ - ( (This)->lpVtbl -> SetViewInstanceMask(This,Mask) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12GraphicsCommandList1_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12_0000_0018 */ -/* [local] */ - -typedef struct D3D12_WRITEBUFFERIMMEDIATE_PARAMETER - { - D3D12_GPU_VIRTUAL_ADDRESS Dest; - UINT32 Value; - } D3D12_WRITEBUFFERIMMEDIATE_PARAMETER; - -typedef -enum D3D12_WRITEBUFFERIMMEDIATE_MODE - { - D3D12_WRITEBUFFERIMMEDIATE_MODE_DEFAULT = 0, - D3D12_WRITEBUFFERIMMEDIATE_MODE_MARKER_IN = 0x1, - D3D12_WRITEBUFFERIMMEDIATE_MODE_MARKER_OUT = 0x2 - } D3D12_WRITEBUFFERIMMEDIATE_MODE; - -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0018_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0018_v0_0_s_ifspec; - -#ifndef __ID3D12GraphicsCommandList2_INTERFACE_DEFINED__ -#define __ID3D12GraphicsCommandList2_INTERFACE_DEFINED__ - -/* interface ID3D12GraphicsCommandList2 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12GraphicsCommandList2; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("38C3E585-FF17-412C-9150-4FC6F9D72A28") - ID3D12GraphicsCommandList2 : public ID3D12GraphicsCommandList1 - { - public: - virtual void STDMETHODCALLTYPE WriteBufferImmediate( - UINT Count, - _In_reads_(Count) const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams, - _In_reads_opt_(Count) const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12GraphicsCommandList2Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12GraphicsCommandList2 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12GraphicsCommandList2 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12GraphicsCommandList2 * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12GraphicsCommandList2 * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12GraphicsCommandList2 * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12GraphicsCommandList2 * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12GraphicsCommandList2 * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12GraphicsCommandList2 * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12CommandList, GetType) - D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )( - ID3D12GraphicsCommandList2 * This); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Close) - HRESULT ( STDMETHODCALLTYPE *Close )( - ID3D12GraphicsCommandList2 * This); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Reset) - HRESULT ( STDMETHODCALLTYPE *Reset )( - ID3D12GraphicsCommandList2 * This, - _In_ ID3D12CommandAllocator *pAllocator, - _In_opt_ ID3D12PipelineState *pInitialState); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearState) - void ( STDMETHODCALLTYPE *ClearState )( - ID3D12GraphicsCommandList2 * This, - _In_opt_ ID3D12PipelineState *pPipelineState); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawInstanced) - void ( STDMETHODCALLTYPE *DrawInstanced )( - ID3D12GraphicsCommandList2 * This, - _In_ UINT VertexCountPerInstance, - _In_ UINT InstanceCount, - _In_ UINT StartVertexLocation, - _In_ UINT StartInstanceLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawIndexedInstanced) - void ( STDMETHODCALLTYPE *DrawIndexedInstanced )( - ID3D12GraphicsCommandList2 * This, - _In_ UINT IndexCountPerInstance, - _In_ UINT InstanceCount, - _In_ UINT StartIndexLocation, - _In_ INT BaseVertexLocation, - _In_ UINT StartInstanceLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Dispatch) - void ( STDMETHODCALLTYPE *Dispatch )( - ID3D12GraphicsCommandList2 * This, - _In_ UINT ThreadGroupCountX, - _In_ UINT ThreadGroupCountY, - _In_ UINT ThreadGroupCountZ); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyBufferRegion) - void ( STDMETHODCALLTYPE *CopyBufferRegion )( - ID3D12GraphicsCommandList2 * This, - _In_ ID3D12Resource *pDstBuffer, - UINT64 DstOffset, - _In_ ID3D12Resource *pSrcBuffer, - UINT64 SrcOffset, - UINT64 NumBytes); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTextureRegion) - void ( STDMETHODCALLTYPE *CopyTextureRegion )( - ID3D12GraphicsCommandList2 * This, - _In_ const D3D12_TEXTURE_COPY_LOCATION *pDst, - UINT DstX, - UINT DstY, - UINT DstZ, - _In_ const D3D12_TEXTURE_COPY_LOCATION *pSrc, - _In_opt_ const D3D12_BOX *pSrcBox); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyResource) - void ( STDMETHODCALLTYPE *CopyResource )( - ID3D12GraphicsCommandList2 * This, - _In_ ID3D12Resource *pDstResource, - _In_ ID3D12Resource *pSrcResource); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTiles) - void ( STDMETHODCALLTYPE *CopyTiles )( - ID3D12GraphicsCommandList2 * This, - _In_ ID3D12Resource *pTiledResource, - _In_ const D3D12_TILED_RESOURCE_COORDINATE *pTileRegionStartCoordinate, - _In_ const D3D12_TILE_REGION_SIZE *pTileRegionSize, - _In_ ID3D12Resource *pBuffer, - UINT64 BufferStartOffsetInBytes, - D3D12_TILE_COPY_FLAGS Flags); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveSubresource) - void ( STDMETHODCALLTYPE *ResolveSubresource )( - ID3D12GraphicsCommandList2 * This, - _In_ ID3D12Resource *pDstResource, - _In_ UINT DstSubresource, - _In_ ID3D12Resource *pSrcResource, - _In_ UINT SrcSubresource, - _In_ DXGI_FORMAT Format); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetPrimitiveTopology) - void ( STDMETHODCALLTYPE *IASetPrimitiveTopology )( - ID3D12GraphicsCommandList2 * This, - _In_ D3D12_PRIMITIVE_TOPOLOGY PrimitiveTopology); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetViewports) - void ( STDMETHODCALLTYPE *RSSetViewports )( - ID3D12GraphicsCommandList2 * This, - _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE) UINT NumViewports, - _In_reads_( NumViewports) const D3D12_VIEWPORT *pViewports); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetScissorRects) - void ( STDMETHODCALLTYPE *RSSetScissorRects )( - ID3D12GraphicsCommandList2 * This, - _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE) UINT NumRects, - _In_reads_( NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetBlendFactor) - void ( STDMETHODCALLTYPE *OMSetBlendFactor )( - ID3D12GraphicsCommandList2 * This, - _In_reads_opt_(4) const FLOAT BlendFactor[ 4 ]); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetStencilRef) - void ( STDMETHODCALLTYPE *OMSetStencilRef )( - ID3D12GraphicsCommandList2 * This, - _In_ UINT StencilRef); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPipelineState) - void ( STDMETHODCALLTYPE *SetPipelineState )( - ID3D12GraphicsCommandList2 * This, - _In_ ID3D12PipelineState *pPipelineState); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResourceBarrier) - void ( STDMETHODCALLTYPE *ResourceBarrier )( - ID3D12GraphicsCommandList2 * This, - _In_ UINT NumBarriers, - _In_reads_(NumBarriers) const D3D12_RESOURCE_BARRIER *pBarriers); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteBundle) - void ( STDMETHODCALLTYPE *ExecuteBundle )( - ID3D12GraphicsCommandList2 * This, - _In_ ID3D12GraphicsCommandList *pCommandList); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetDescriptorHeaps) - void ( STDMETHODCALLTYPE *SetDescriptorHeaps )( - ID3D12GraphicsCommandList2 * This, - _In_ UINT NumDescriptorHeaps, - _In_reads_(NumDescriptorHeaps) ID3D12DescriptorHeap *const *ppDescriptorHeaps); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootSignature) - void ( STDMETHODCALLTYPE *SetComputeRootSignature )( - ID3D12GraphicsCommandList2 * This, - _In_opt_ ID3D12RootSignature *pRootSignature); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootSignature) - void ( STDMETHODCALLTYPE *SetGraphicsRootSignature )( - ID3D12GraphicsCommandList2 * This, - _In_opt_ ID3D12RootSignature *pRootSignature); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootDescriptorTable) - void ( STDMETHODCALLTYPE *SetComputeRootDescriptorTable )( - ID3D12GraphicsCommandList2 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootDescriptorTable) - void ( STDMETHODCALLTYPE *SetGraphicsRootDescriptorTable )( - ID3D12GraphicsCommandList2 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstant) - void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstant )( - ID3D12GraphicsCommandList2 * This, - _In_ UINT RootParameterIndex, - _In_ UINT SrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstant) - void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstant )( - ID3D12GraphicsCommandList2 * This, - _In_ UINT RootParameterIndex, - _In_ UINT SrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstants) - void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstants )( - ID3D12GraphicsCommandList2 * This, - _In_ UINT RootParameterIndex, - _In_ UINT Num32BitValuesToSet, - _In_reads_(Num32BitValuesToSet*sizeof(UINT)) const void *pSrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstants) - void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstants )( - ID3D12GraphicsCommandList2 * This, - _In_ UINT RootParameterIndex, - _In_ UINT Num32BitValuesToSet, - _In_reads_(Num32BitValuesToSet*sizeof(UINT)) const void *pSrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootConstantBufferView) - void ( STDMETHODCALLTYPE *SetComputeRootConstantBufferView )( - ID3D12GraphicsCommandList2 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootConstantBufferView) - void ( STDMETHODCALLTYPE *SetGraphicsRootConstantBufferView )( - ID3D12GraphicsCommandList2 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootShaderResourceView) - void ( STDMETHODCALLTYPE *SetComputeRootShaderResourceView )( - ID3D12GraphicsCommandList2 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootShaderResourceView) - void ( STDMETHODCALLTYPE *SetGraphicsRootShaderResourceView )( - ID3D12GraphicsCommandList2 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootUnorderedAccessView) - void ( STDMETHODCALLTYPE *SetComputeRootUnorderedAccessView )( - ID3D12GraphicsCommandList2 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootUnorderedAccessView) - void ( STDMETHODCALLTYPE *SetGraphicsRootUnorderedAccessView )( - ID3D12GraphicsCommandList2 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetIndexBuffer) - void ( STDMETHODCALLTYPE *IASetIndexBuffer )( - ID3D12GraphicsCommandList2 * This, - _In_opt_ const D3D12_INDEX_BUFFER_VIEW *pView); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetVertexBuffers) - void ( STDMETHODCALLTYPE *IASetVertexBuffers )( - ID3D12GraphicsCommandList2 * This, - _In_ UINT StartSlot, - _In_ UINT NumViews, - _In_reads_opt_(NumViews) const D3D12_VERTEX_BUFFER_VIEW *pViews); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SOSetTargets) - void ( STDMETHODCALLTYPE *SOSetTargets )( - ID3D12GraphicsCommandList2 * This, - _In_ UINT StartSlot, - _In_ UINT NumViews, - _In_reads_opt_(NumViews) const D3D12_STREAM_OUTPUT_BUFFER_VIEW *pViews); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetRenderTargets) - void ( STDMETHODCALLTYPE *OMSetRenderTargets )( - ID3D12GraphicsCommandList2 * This, - _In_ UINT NumRenderTargetDescriptors, - _In_opt_ const D3D12_CPU_DESCRIPTOR_HANDLE *pRenderTargetDescriptors, - _In_ BOOL RTsSingleHandleToDescriptorRange, - _In_opt_ const D3D12_CPU_DESCRIPTOR_HANDLE *pDepthStencilDescriptor); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearDepthStencilView) - void ( STDMETHODCALLTYPE *ClearDepthStencilView )( - ID3D12GraphicsCommandList2 * This, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DepthStencilView, - _In_ D3D12_CLEAR_FLAGS ClearFlags, - _In_ FLOAT Depth, - _In_ UINT8 Stencil, - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearRenderTargetView) - void ( STDMETHODCALLTYPE *ClearRenderTargetView )( - ID3D12GraphicsCommandList2 * This, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE RenderTargetView, - _In_ const FLOAT ColorRGBA[ 4 ], - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewUint) - void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewUint )( - ID3D12GraphicsCommandList2 * This, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle, - _In_ ID3D12Resource *pResource, - _In_ const UINT Values[ 4 ], - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewFloat) - void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewFloat )( - ID3D12GraphicsCommandList2 * This, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle, - _In_ ID3D12Resource *pResource, - _In_ const FLOAT Values[ 4 ], - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DiscardResource) - void ( STDMETHODCALLTYPE *DiscardResource )( - ID3D12GraphicsCommandList2 * This, - _In_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DISCARD_REGION *pRegion); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginQuery) - void ( STDMETHODCALLTYPE *BeginQuery )( - ID3D12GraphicsCommandList2 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndQuery) - void ( STDMETHODCALLTYPE *EndQuery )( - ID3D12GraphicsCommandList2 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveQueryData) - void ( STDMETHODCALLTYPE *ResolveQueryData )( - ID3D12GraphicsCommandList2 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT StartIndex, - _In_ UINT NumQueries, - _In_ ID3D12Resource *pDestinationBuffer, - _In_ UINT64 AlignedDestinationBufferOffset); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPredication) - void ( STDMETHODCALLTYPE *SetPredication )( - ID3D12GraphicsCommandList2 * This, - _In_opt_ ID3D12Resource *pBuffer, - _In_ UINT64 AlignedBufferOffset, - _In_ D3D12_PREDICATION_OP Operation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetMarker) - void ( STDMETHODCALLTYPE *SetMarker )( - ID3D12GraphicsCommandList2 * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginEvent) - void ( STDMETHODCALLTYPE *BeginEvent )( - ID3D12GraphicsCommandList2 * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndEvent) - void ( STDMETHODCALLTYPE *EndEvent )( - ID3D12GraphicsCommandList2 * This); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteIndirect) - void ( STDMETHODCALLTYPE *ExecuteIndirect )( - ID3D12GraphicsCommandList2 * This, - _In_ ID3D12CommandSignature *pCommandSignature, - _In_ UINT MaxCommandCount, - _In_ ID3D12Resource *pArgumentBuffer, - _In_ UINT64 ArgumentBufferOffset, - _In_opt_ ID3D12Resource *pCountBuffer, - _In_ UINT64 CountBufferOffset); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, AtomicCopyBufferUINT) - void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT )( - ID3D12GraphicsCommandList2 * This, - _In_ ID3D12Resource *pDstBuffer, - UINT64 DstOffset, - _In_ ID3D12Resource *pSrcBuffer, - UINT64 SrcOffset, - UINT Dependencies, - _In_reads_(Dependencies) ID3D12Resource *const *ppDependentResources, - _In_reads_(Dependencies) const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, AtomicCopyBufferUINT64) - void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT64 )( - ID3D12GraphicsCommandList2 * This, - _In_ ID3D12Resource *pDstBuffer, - UINT64 DstOffset, - _In_ ID3D12Resource *pSrcBuffer, - UINT64 SrcOffset, - UINT Dependencies, - _In_reads_(Dependencies) ID3D12Resource *const *ppDependentResources, - _In_reads_(Dependencies) const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, OMSetDepthBounds) - void ( STDMETHODCALLTYPE *OMSetDepthBounds )( - ID3D12GraphicsCommandList2 * This, - _In_ FLOAT Min, - _In_ FLOAT Max); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, SetSamplePositions) - void ( STDMETHODCALLTYPE *SetSamplePositions )( - ID3D12GraphicsCommandList2 * This, - _In_ UINT NumSamplesPerPixel, - _In_ UINT NumPixels, - _In_reads_(NumSamplesPerPixel*NumPixels) D3D12_SAMPLE_POSITION *pSamplePositions); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, ResolveSubresourceRegion) - void ( STDMETHODCALLTYPE *ResolveSubresourceRegion )( - ID3D12GraphicsCommandList2 * This, - _In_ ID3D12Resource *pDstResource, - _In_ UINT DstSubresource, - _In_ UINT DstX, - _In_ UINT DstY, - _In_ ID3D12Resource *pSrcResource, - _In_ UINT SrcSubresource, - _In_opt_ D3D12_RECT *pSrcRect, - _In_ DXGI_FORMAT Format, - _In_ D3D12_RESOLVE_MODE ResolveMode); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, SetViewInstanceMask) - void ( STDMETHODCALLTYPE *SetViewInstanceMask )( - ID3D12GraphicsCommandList2 * This, - _In_ UINT Mask); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList2, WriteBufferImmediate) - void ( STDMETHODCALLTYPE *WriteBufferImmediate )( - ID3D12GraphicsCommandList2 * This, - UINT Count, - _In_reads_(Count) const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams, - _In_reads_opt_(Count) const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes); - - END_INTERFACE - } ID3D12GraphicsCommandList2Vtbl; - - interface ID3D12GraphicsCommandList2 - { - CONST_VTBL struct ID3D12GraphicsCommandList2Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12GraphicsCommandList2_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12GraphicsCommandList2_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12GraphicsCommandList2_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12GraphicsCommandList2_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12GraphicsCommandList2_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12GraphicsCommandList2_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12GraphicsCommandList2_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12GraphicsCommandList2_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12GraphicsCommandList2_GetType(This) \ - ( (This)->lpVtbl -> GetType(This) ) - -#define ID3D12GraphicsCommandList2_Close(This) \ - ( (This)->lpVtbl -> Close(This) ) - -#define ID3D12GraphicsCommandList2_Reset(This,pAllocator,pInitialState) \ - ( (This)->lpVtbl -> Reset(This,pAllocator,pInitialState) ) - -#define ID3D12GraphicsCommandList2_ClearState(This,pPipelineState) \ - ( (This)->lpVtbl -> ClearState(This,pPipelineState) ) - -#define ID3D12GraphicsCommandList2_DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) \ - ( (This)->lpVtbl -> DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) ) - -#define ID3D12GraphicsCommandList2_DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) \ - ( (This)->lpVtbl -> DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) ) - -#define ID3D12GraphicsCommandList2_Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) \ - ( (This)->lpVtbl -> Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) ) - -#define ID3D12GraphicsCommandList2_CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes) \ - ( (This)->lpVtbl -> CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes) ) - -#define ID3D12GraphicsCommandList2_CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox) \ - ( (This)->lpVtbl -> CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox) ) - -#define ID3D12GraphicsCommandList2_CopyResource(This,pDstResource,pSrcResource) \ - ( (This)->lpVtbl -> CopyResource(This,pDstResource,pSrcResource) ) - -#define ID3D12GraphicsCommandList2_CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags) \ - ( (This)->lpVtbl -> CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags) ) - -#define ID3D12GraphicsCommandList2_ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) \ - ( (This)->lpVtbl -> ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) ) - -#define ID3D12GraphicsCommandList2_IASetPrimitiveTopology(This,PrimitiveTopology) \ - ( (This)->lpVtbl -> IASetPrimitiveTopology(This,PrimitiveTopology) ) - -#define ID3D12GraphicsCommandList2_RSSetViewports(This,NumViewports,pViewports) \ - ( (This)->lpVtbl -> RSSetViewports(This,NumViewports,pViewports) ) - -#define ID3D12GraphicsCommandList2_RSSetScissorRects(This,NumRects,pRects) \ - ( (This)->lpVtbl -> RSSetScissorRects(This,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList2_OMSetBlendFactor(This,BlendFactor) \ - ( (This)->lpVtbl -> OMSetBlendFactor(This,BlendFactor) ) - -#define ID3D12GraphicsCommandList2_OMSetStencilRef(This,StencilRef) \ - ( (This)->lpVtbl -> OMSetStencilRef(This,StencilRef) ) - -#define ID3D12GraphicsCommandList2_SetPipelineState(This,pPipelineState) \ - ( (This)->lpVtbl -> SetPipelineState(This,pPipelineState) ) - -#define ID3D12GraphicsCommandList2_ResourceBarrier(This,NumBarriers,pBarriers) \ - ( (This)->lpVtbl -> ResourceBarrier(This,NumBarriers,pBarriers) ) - -#define ID3D12GraphicsCommandList2_ExecuteBundle(This,pCommandList) \ - ( (This)->lpVtbl -> ExecuteBundle(This,pCommandList) ) - -#define ID3D12GraphicsCommandList2_SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps) \ - ( (This)->lpVtbl -> SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps) ) - -#define ID3D12GraphicsCommandList2_SetComputeRootSignature(This,pRootSignature) \ - ( (This)->lpVtbl -> SetComputeRootSignature(This,pRootSignature) ) - -#define ID3D12GraphicsCommandList2_SetGraphicsRootSignature(This,pRootSignature) \ - ( (This)->lpVtbl -> SetGraphicsRootSignature(This,pRootSignature) ) - -#define ID3D12GraphicsCommandList2_SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) \ - ( (This)->lpVtbl -> SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) - -#define ID3D12GraphicsCommandList2_SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) \ - ( (This)->lpVtbl -> SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) - -#define ID3D12GraphicsCommandList2_SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList2_SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList2_SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList2_SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList2_SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList2_SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList2_SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList2_SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList2_SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList2_SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList2_IASetIndexBuffer(This,pView) \ - ( (This)->lpVtbl -> IASetIndexBuffer(This,pView) ) - -#define ID3D12GraphicsCommandList2_IASetVertexBuffers(This,StartSlot,NumViews,pViews) \ - ( (This)->lpVtbl -> IASetVertexBuffers(This,StartSlot,NumViews,pViews) ) - -#define ID3D12GraphicsCommandList2_SOSetTargets(This,StartSlot,NumViews,pViews) \ - ( (This)->lpVtbl -> SOSetTargets(This,StartSlot,NumViews,pViews) ) - -#define ID3D12GraphicsCommandList2_OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor) \ - ( (This)->lpVtbl -> OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor) ) - -#define ID3D12GraphicsCommandList2_ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList2_ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList2_ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList2_ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList2_DiscardResource(This,pResource,pRegion) \ - ( (This)->lpVtbl -> DiscardResource(This,pResource,pRegion) ) - -#define ID3D12GraphicsCommandList2_BeginQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> BeginQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12GraphicsCommandList2_EndQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> EndQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12GraphicsCommandList2_ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) \ - ( (This)->lpVtbl -> ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) ) - -#define ID3D12GraphicsCommandList2_SetPredication(This,pBuffer,AlignedBufferOffset,Operation) \ - ( (This)->lpVtbl -> SetPredication(This,pBuffer,AlignedBufferOffset,Operation) ) - -#define ID3D12GraphicsCommandList2_SetMarker(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> SetMarker(This,Metadata,pData,Size) ) - -#define ID3D12GraphicsCommandList2_BeginEvent(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> BeginEvent(This,Metadata,pData,Size) ) - -#define ID3D12GraphicsCommandList2_EndEvent(This) \ - ( (This)->lpVtbl -> EndEvent(This) ) - -#define ID3D12GraphicsCommandList2_ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset) \ - ( (This)->lpVtbl -> ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset) ) - -#define ID3D12GraphicsCommandList2_AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) \ - ( (This)->lpVtbl -> AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) - -#define ID3D12GraphicsCommandList2_AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) \ - ( (This)->lpVtbl -> AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) - -#define ID3D12GraphicsCommandList2_OMSetDepthBounds(This,Min,Max) \ - ( (This)->lpVtbl -> OMSetDepthBounds(This,Min,Max) ) - -#define ID3D12GraphicsCommandList2_SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions) \ - ( (This)->lpVtbl -> SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions) ) - -#define ID3D12GraphicsCommandList2_ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode) \ - ( (This)->lpVtbl -> ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode) ) - -#define ID3D12GraphicsCommandList2_SetViewInstanceMask(This,Mask) \ - ( (This)->lpVtbl -> SetViewInstanceMask(This,Mask) ) - -#define ID3D12GraphicsCommandList2_WriteBufferImmediate(This,Count,pParams,pModes) \ - ( (This)->lpVtbl -> WriteBufferImmediate(This,Count,pParams,pModes) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12GraphicsCommandList2_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12CommandQueue_INTERFACE_DEFINED__ -#define __ID3D12CommandQueue_INTERFACE_DEFINED__ - -/* interface ID3D12CommandQueue */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12CommandQueue; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("0ec870a6-5d7e-4c22-8cfc-5baae07616ed") - ID3D12CommandQueue : public ID3D12Pageable - { - public: - virtual void STDMETHODCALLTYPE UpdateTileMappings( - _In_ ID3D12Resource *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_ ID3D12Heap *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) = 0; - - virtual void STDMETHODCALLTYPE CopyTileMappings( - _In_ ID3D12Resource *pDstResource, - _In_ const D3D12_TILED_RESOURCE_COORDINATE *pDstRegionStartCoordinate, - _In_ ID3D12Resource *pSrcResource, - _In_ const D3D12_TILED_RESOURCE_COORDINATE *pSrcRegionStartCoordinate, - _In_ const D3D12_TILE_REGION_SIZE *pRegionSize, - D3D12_TILE_MAPPING_FLAGS Flags) = 0; - - virtual void STDMETHODCALLTYPE ExecuteCommandLists( - _In_ UINT NumCommandLists, - _In_reads_(NumCommandLists) ID3D12CommandList *const *ppCommandLists) = 0; - - virtual void STDMETHODCALLTYPE SetMarker( - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size) = 0; - - virtual void STDMETHODCALLTYPE BeginEvent( - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size) = 0; - - virtual void STDMETHODCALLTYPE EndEvent( void) = 0; - - virtual HRESULT STDMETHODCALLTYPE Signal( - ID3D12Fence *pFence, - UINT64 Value) = 0; - - virtual HRESULT STDMETHODCALLTYPE Wait( - ID3D12Fence *pFence, - UINT64 Value) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetTimestampFrequency( - _Out_ UINT64 *pFrequency) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetClockCalibration( - _Out_ UINT64 *pGpuTimestamp, - _Out_ UINT64 *pCpuTimestamp) = 0; - -#if defined(_MSC_VER) || !defined(_WIN32) - virtual D3D12_COMMAND_QUEUE_DESC STDMETHODCALLTYPE GetDesc( void) = 0; -#else - virtual D3D12_COMMAND_QUEUE_DESC *STDMETHODCALLTYPE GetDesc( - D3D12_COMMAND_QUEUE_DESC * RetVal) = 0; -#endif - - }; - - -#else /* C style interface */ - - typedef struct ID3D12CommandQueueVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12CommandQueue * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12CommandQueue * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12CommandQueue * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12CommandQueue * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12CommandQueue * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12CommandQueue * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12CommandQueue * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12CommandQueue * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12CommandQueue, UpdateTileMappings) - void ( STDMETHODCALLTYPE *UpdateTileMappings )( - ID3D12CommandQueue * This, - _In_ ID3D12Resource *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_ ID3D12Heap *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); - - DECLSPEC_XFGVIRT(ID3D12CommandQueue, CopyTileMappings) - void ( STDMETHODCALLTYPE *CopyTileMappings )( - ID3D12CommandQueue * This, - _In_ ID3D12Resource *pDstResource, - _In_ const D3D12_TILED_RESOURCE_COORDINATE *pDstRegionStartCoordinate, - _In_ ID3D12Resource *pSrcResource, - _In_ const D3D12_TILED_RESOURCE_COORDINATE *pSrcRegionStartCoordinate, - _In_ const D3D12_TILE_REGION_SIZE *pRegionSize, - D3D12_TILE_MAPPING_FLAGS Flags); - - DECLSPEC_XFGVIRT(ID3D12CommandQueue, ExecuteCommandLists) - void ( STDMETHODCALLTYPE *ExecuteCommandLists )( - ID3D12CommandQueue * This, - _In_ UINT NumCommandLists, - _In_reads_(NumCommandLists) ID3D12CommandList *const *ppCommandLists); - - DECLSPEC_XFGVIRT(ID3D12CommandQueue, SetMarker) - void ( STDMETHODCALLTYPE *SetMarker )( - ID3D12CommandQueue * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12CommandQueue, BeginEvent) - void ( STDMETHODCALLTYPE *BeginEvent )( - ID3D12CommandQueue * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12CommandQueue, EndEvent) - void ( STDMETHODCALLTYPE *EndEvent )( - ID3D12CommandQueue * This); - - DECLSPEC_XFGVIRT(ID3D12CommandQueue, Signal) - HRESULT ( STDMETHODCALLTYPE *Signal )( - ID3D12CommandQueue * This, - ID3D12Fence *pFence, - UINT64 Value); - - DECLSPEC_XFGVIRT(ID3D12CommandQueue, Wait) - HRESULT ( STDMETHODCALLTYPE *Wait )( - ID3D12CommandQueue * This, - ID3D12Fence *pFence, - UINT64 Value); - - DECLSPEC_XFGVIRT(ID3D12CommandQueue, GetTimestampFrequency) - HRESULT ( STDMETHODCALLTYPE *GetTimestampFrequency )( - ID3D12CommandQueue * This, - _Out_ UINT64 *pFrequency); - - DECLSPEC_XFGVIRT(ID3D12CommandQueue, GetClockCalibration) - HRESULT ( STDMETHODCALLTYPE *GetClockCalibration )( - ID3D12CommandQueue * This, - _Out_ UINT64 *pGpuTimestamp, - _Out_ UINT64 *pCpuTimestamp); - - DECLSPEC_XFGVIRT(ID3D12CommandQueue, GetDesc) -#if !defined(_WIN32) - D3D12_COMMAND_QUEUE_DESC ( STDMETHODCALLTYPE *GetDesc )( - ID3D12CommandQueue * This); - -#else - D3D12_COMMAND_QUEUE_DESC *( STDMETHODCALLTYPE *GetDesc )( - ID3D12CommandQueue * This, - D3D12_COMMAND_QUEUE_DESC * RetVal); - -#endif - - END_INTERFACE - } ID3D12CommandQueueVtbl; - - interface ID3D12CommandQueue - { - CONST_VTBL struct ID3D12CommandQueueVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12CommandQueue_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12CommandQueue_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12CommandQueue_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12CommandQueue_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12CommandQueue_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12CommandQueue_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12CommandQueue_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12CommandQueue_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12CommandQueue_UpdateTileMappings(This,pResource,NumResourceRegions,pResourceRegionStartCoordinates,pResourceRegionSizes,pHeap,NumRanges,pRangeFlags,pHeapRangeStartOffsets,pRangeTileCounts,Flags) \ - ( (This)->lpVtbl -> UpdateTileMappings(This,pResource,NumResourceRegions,pResourceRegionStartCoordinates,pResourceRegionSizes,pHeap,NumRanges,pRangeFlags,pHeapRangeStartOffsets,pRangeTileCounts,Flags) ) - -#define ID3D12CommandQueue_CopyTileMappings(This,pDstResource,pDstRegionStartCoordinate,pSrcResource,pSrcRegionStartCoordinate,pRegionSize,Flags) \ - ( (This)->lpVtbl -> CopyTileMappings(This,pDstResource,pDstRegionStartCoordinate,pSrcResource,pSrcRegionStartCoordinate,pRegionSize,Flags) ) - -#define ID3D12CommandQueue_ExecuteCommandLists(This,NumCommandLists,ppCommandLists) \ - ( (This)->lpVtbl -> ExecuteCommandLists(This,NumCommandLists,ppCommandLists) ) - -#define ID3D12CommandQueue_SetMarker(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> SetMarker(This,Metadata,pData,Size) ) - -#define ID3D12CommandQueue_BeginEvent(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> BeginEvent(This,Metadata,pData,Size) ) - -#define ID3D12CommandQueue_EndEvent(This) \ - ( (This)->lpVtbl -> EndEvent(This) ) - -#define ID3D12CommandQueue_Signal(This,pFence,Value) \ - ( (This)->lpVtbl -> Signal(This,pFence,Value) ) - -#define ID3D12CommandQueue_Wait(This,pFence,Value) \ - ( (This)->lpVtbl -> Wait(This,pFence,Value) ) - -#define ID3D12CommandQueue_GetTimestampFrequency(This,pFrequency) \ - ( (This)->lpVtbl -> GetTimestampFrequency(This,pFrequency) ) - -#define ID3D12CommandQueue_GetClockCalibration(This,pGpuTimestamp,pCpuTimestamp) \ - ( (This)->lpVtbl -> GetClockCalibration(This,pGpuTimestamp,pCpuTimestamp) ) -#if !defined(_WIN32) - -#define ID3D12CommandQueue_GetDesc(This) \ - ( (This)->lpVtbl -> GetDesc(This) ) -#else -#define ID3D12CommandQueue_GetDesc(This,RetVal) \ - ( (This)->lpVtbl -> GetDesc(This,RetVal) ) -#endif - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12CommandQueue_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12Device_INTERFACE_DEFINED__ -#define __ID3D12Device_INTERFACE_DEFINED__ - -/* interface ID3D12Device */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12Device; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("189819f1-1db6-4b57-be54-1821339b85f7") - ID3D12Device : public ID3D12Object - { - public: - virtual UINT STDMETHODCALLTYPE GetNodeCount( void) = 0; - - virtual HRESULT STDMETHODCALLTYPE CreateCommandQueue( - _In_ const D3D12_COMMAND_QUEUE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppCommandQueue) = 0; - - virtual HRESULT STDMETHODCALLTYPE CreateCommandAllocator( - _In_ D3D12_COMMAND_LIST_TYPE type, - REFIID riid, - _COM_Outptr_ void **ppCommandAllocator) = 0; - - virtual HRESULT STDMETHODCALLTYPE CreateGraphicsPipelineState( - _In_ const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState) = 0; - - virtual HRESULT STDMETHODCALLTYPE CreateComputePipelineState( - _In_ const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState) = 0; - - virtual HRESULT STDMETHODCALLTYPE CreateCommandList( - _In_ UINT nodeMask, - _In_ D3D12_COMMAND_LIST_TYPE type, - _In_ ID3D12CommandAllocator *pCommandAllocator, - _In_opt_ ID3D12PipelineState *pInitialState, - REFIID riid, - _COM_Outptr_ void **ppCommandList) = 0; - - virtual HRESULT STDMETHODCALLTYPE CheckFeatureSupport( - D3D12_FEATURE Feature, - _Inout_updates_bytes_(FeatureSupportDataSize) void *pFeatureSupportData, - UINT FeatureSupportDataSize) = 0; - - virtual HRESULT STDMETHODCALLTYPE CreateDescriptorHeap( - _In_ const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc, - REFIID riid, - _COM_Outptr_ void **ppvHeap) = 0; - - virtual UINT STDMETHODCALLTYPE GetDescriptorHandleIncrementSize( - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType) = 0; - - virtual HRESULT STDMETHODCALLTYPE CreateRootSignature( - _In_ UINT nodeMask, - _In_reads_(blobLengthInBytes) const void *pBlobWithRootSignature, - _In_ SIZE_T blobLengthInBytes, - REFIID riid, - _COM_Outptr_ void **ppvRootSignature) = 0; - - virtual void STDMETHODCALLTYPE CreateConstantBufferView( - _In_opt_ const D3D12_CONSTANT_BUFFER_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor) = 0; - - virtual void STDMETHODCALLTYPE CreateShaderResourceView( - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor) = 0; - - virtual void STDMETHODCALLTYPE CreateUnorderedAccessView( - _In_opt_ ID3D12Resource *pResource, - _In_opt_ ID3D12Resource *pCounterResource, - _In_opt_ const D3D12_UNORDERED_ACCESS_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor) = 0; - - virtual void STDMETHODCALLTYPE CreateRenderTargetView( - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_RENDER_TARGET_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor) = 0; - - virtual void STDMETHODCALLTYPE CreateDepthStencilView( - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DEPTH_STENCIL_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor) = 0; - - virtual void STDMETHODCALLTYPE CreateSampler( - _In_ const D3D12_SAMPLER_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor) = 0; - - virtual void STDMETHODCALLTYPE CopyDescriptors( - _In_ UINT NumDestDescriptorRanges, - _In_reads_(NumDestDescriptorRanges) const D3D12_CPU_DESCRIPTOR_HANDLE *pDestDescriptorRangeStarts, - _In_reads_opt_(NumDestDescriptorRanges) const UINT *pDestDescriptorRangeSizes, - _In_ UINT NumSrcDescriptorRanges, - _In_reads_(NumSrcDescriptorRanges) const D3D12_CPU_DESCRIPTOR_HANDLE *pSrcDescriptorRangeStarts, - _In_reads_opt_(NumSrcDescriptorRanges) const UINT *pSrcDescriptorRangeSizes, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType) = 0; - - virtual void STDMETHODCALLTYPE CopyDescriptorsSimple( - _In_ UINT NumDescriptors, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType) = 0; - -#if defined(_MSC_VER) || !defined(_WIN32) - virtual D3D12_RESOURCE_ALLOCATION_INFO STDMETHODCALLTYPE GetResourceAllocationInfo( - _In_ UINT visibleMask, - _In_ UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs) = 0; -#else - virtual D3D12_RESOURCE_ALLOCATION_INFO *STDMETHODCALLTYPE GetResourceAllocationInfo( - D3D12_RESOURCE_ALLOCATION_INFO * RetVal, - _In_ UINT visibleMask, - _In_ UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs) = 0; -#endif - -#if defined(_MSC_VER) || !defined(_WIN32) - virtual D3D12_HEAP_PROPERTIES STDMETHODCALLTYPE GetCustomHeapProperties( - _In_ UINT nodeMask, - D3D12_HEAP_TYPE heapType) = 0; -#else - virtual D3D12_HEAP_PROPERTIES *STDMETHODCALLTYPE GetCustomHeapProperties( - D3D12_HEAP_PROPERTIES * RetVal, - _In_ UINT nodeMask, - D3D12_HEAP_TYPE heapType) = 0; -#endif - - virtual HRESULT STDMETHODCALLTYPE CreateCommittedResource( - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialResourceState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riidResource, - _COM_Outptr_opt_ void **ppvResource) = 0; - - virtual HRESULT STDMETHODCALLTYPE CreateHeap( - _In_ const D3D12_HEAP_DESC *pDesc, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap) = 0; - - virtual HRESULT STDMETHODCALLTYPE CreatePlacedResource( - _In_ ID3D12Heap *pHeap, - UINT64 HeapOffset, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource) = 0; - - virtual HRESULT STDMETHODCALLTYPE CreateReservedResource( - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource) = 0; - - virtual HRESULT STDMETHODCALLTYPE CreateSharedHandle( - _In_ ID3D12DeviceChild *pObject, - _In_opt_ const SECURITY_ATTRIBUTES *pAttributes, - DWORD Access, - _In_opt_ LPCWSTR Name, - _Out_ HANDLE *pHandle) = 0; - - virtual HRESULT STDMETHODCALLTYPE OpenSharedHandle( - _In_ HANDLE NTHandle, - REFIID riid, - _COM_Outptr_opt_ void **ppvObj) = 0; - - virtual HRESULT STDMETHODCALLTYPE OpenSharedHandleByName( - _In_ LPCWSTR Name, - DWORD Access, - /* [annotation][out] */ - _Out_ HANDLE *pNTHandle) = 0; - - virtual HRESULT STDMETHODCALLTYPE MakeResident( - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects) = 0; - - virtual HRESULT STDMETHODCALLTYPE Evict( - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects) = 0; - - virtual HRESULT STDMETHODCALLTYPE CreateFence( - UINT64 InitialValue, - D3D12_FENCE_FLAGS Flags, - REFIID riid, - _COM_Outptr_ void **ppFence) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetDeviceRemovedReason( void) = 0; - - virtual void STDMETHODCALLTYPE GetCopyableFootprints( - _In_ const D3D12_RESOURCE_DESC *pResourceDesc, - _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, - _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, - UINT64 BaseOffset, - _Out_writes_opt_(NumSubresources) D3D12_PLACED_SUBRESOURCE_FOOTPRINT *pLayouts, - _Out_writes_opt_(NumSubresources) UINT *pNumRows, - _Out_writes_opt_(NumSubresources) UINT64 *pRowSizeInBytes, - _Out_opt_ UINT64 *pTotalBytes) = 0; - - virtual HRESULT STDMETHODCALLTYPE CreateQueryHeap( - _In_ const D3D12_QUERY_HEAP_DESC *pDesc, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetStablePowerState( - BOOL Enable) = 0; - - virtual HRESULT STDMETHODCALLTYPE CreateCommandSignature( - _In_ const D3D12_COMMAND_SIGNATURE_DESC *pDesc, - _In_opt_ ID3D12RootSignature *pRootSignature, - REFIID riid, - _COM_Outptr_opt_ void **ppvCommandSignature) = 0; - - virtual void STDMETHODCALLTYPE GetResourceTiling( - _In_ ID3D12Resource *pTiledResource, - _Out_opt_ UINT *pNumTilesForEntireResource, - _Out_opt_ D3D12_PACKED_MIP_INFO *pPackedMipDesc, - _Out_opt_ D3D12_TILE_SHAPE *pStandardTileShapeForNonPackedMips, - _Inout_opt_ UINT *pNumSubresourceTilings, - _In_ UINT FirstSubresourceTilingToGet, - _Out_writes_(*pNumSubresourceTilings) D3D12_SUBRESOURCE_TILING *pSubresourceTilingsForNonPackedMips) = 0; - -#if defined(_MSC_VER) || !defined(_WIN32) - virtual LUID STDMETHODCALLTYPE GetAdapterLuid( void) = 0; -#else - virtual LUID *STDMETHODCALLTYPE GetAdapterLuid( - LUID * RetVal) = 0; -#endif - - }; - - -#else /* C style interface */ - - typedef struct ID3D12DeviceVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12Device * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12Device * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12Device * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12Device * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12Device * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12Device * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12Device * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12Device, GetNodeCount) - UINT ( STDMETHODCALLTYPE *GetNodeCount )( - ID3D12Device * This); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandQueue) - HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue )( - ID3D12Device * This, - _In_ const D3D12_COMMAND_QUEUE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppCommandQueue); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandAllocator) - HRESULT ( STDMETHODCALLTYPE *CreateCommandAllocator )( - ID3D12Device * This, - _In_ D3D12_COMMAND_LIST_TYPE type, - REFIID riid, - _COM_Outptr_ void **ppCommandAllocator); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateGraphicsPipelineState) - HRESULT ( STDMETHODCALLTYPE *CreateGraphicsPipelineState )( - ID3D12Device * This, - _In_ const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateComputePipelineState) - HRESULT ( STDMETHODCALLTYPE *CreateComputePipelineState )( - ID3D12Device * This, - _In_ const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandList) - HRESULT ( STDMETHODCALLTYPE *CreateCommandList )( - ID3D12Device * This, - _In_ UINT nodeMask, - _In_ D3D12_COMMAND_LIST_TYPE type, - _In_ ID3D12CommandAllocator *pCommandAllocator, - _In_opt_ ID3D12PipelineState *pInitialState, - REFIID riid, - _COM_Outptr_ void **ppCommandList); - - DECLSPEC_XFGVIRT(ID3D12Device, CheckFeatureSupport) - HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )( - ID3D12Device * This, - D3D12_FEATURE Feature, - _Inout_updates_bytes_(FeatureSupportDataSize) void *pFeatureSupportData, - UINT FeatureSupportDataSize); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateDescriptorHeap) - HRESULT ( STDMETHODCALLTYPE *CreateDescriptorHeap )( - ID3D12Device * This, - _In_ const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc, - REFIID riid, - _COM_Outptr_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, GetDescriptorHandleIncrementSize) - UINT ( STDMETHODCALLTYPE *GetDescriptorHandleIncrementSize )( - ID3D12Device * This, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateRootSignature) - HRESULT ( STDMETHODCALLTYPE *CreateRootSignature )( - ID3D12Device * This, - _In_ UINT nodeMask, - _In_reads_(blobLengthInBytes) const void *pBlobWithRootSignature, - _In_ SIZE_T blobLengthInBytes, - REFIID riid, - _COM_Outptr_ void **ppvRootSignature); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateConstantBufferView) - void ( STDMETHODCALLTYPE *CreateConstantBufferView )( - ID3D12Device * This, - _In_opt_ const D3D12_CONSTANT_BUFFER_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateShaderResourceView) - void ( STDMETHODCALLTYPE *CreateShaderResourceView )( - ID3D12Device * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateUnorderedAccessView) - void ( STDMETHODCALLTYPE *CreateUnorderedAccessView )( - ID3D12Device * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ ID3D12Resource *pCounterResource, - _In_opt_ const D3D12_UNORDERED_ACCESS_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateRenderTargetView) - void ( STDMETHODCALLTYPE *CreateRenderTargetView )( - ID3D12Device * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_RENDER_TARGET_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateDepthStencilView) - void ( STDMETHODCALLTYPE *CreateDepthStencilView )( - ID3D12Device * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DEPTH_STENCIL_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateSampler) - void ( STDMETHODCALLTYPE *CreateSampler )( - ID3D12Device * This, - _In_ const D3D12_SAMPLER_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptors) - void ( STDMETHODCALLTYPE *CopyDescriptors )( - ID3D12Device * This, - _In_ UINT NumDestDescriptorRanges, - _In_reads_(NumDestDescriptorRanges) const D3D12_CPU_DESCRIPTOR_HANDLE *pDestDescriptorRangeStarts, - _In_reads_opt_(NumDestDescriptorRanges) const UINT *pDestDescriptorRangeSizes, - _In_ UINT NumSrcDescriptorRanges, - _In_reads_(NumSrcDescriptorRanges) const D3D12_CPU_DESCRIPTOR_HANDLE *pSrcDescriptorRangeStarts, - _In_reads_opt_(NumSrcDescriptorRanges) const UINT *pSrcDescriptorRangeSizes, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType); - - DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptorsSimple) - void ( STDMETHODCALLTYPE *CopyDescriptorsSimple )( - ID3D12Device * This, - _In_ UINT NumDescriptors, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType); - - DECLSPEC_XFGVIRT(ID3D12Device, GetResourceAllocationInfo) -#if !defined(_WIN32) - D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo )( - ID3D12Device * This, - _In_ UINT visibleMask, - _In_ UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs); - -#else - D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo )( - ID3D12Device * This, - D3D12_RESOURCE_ALLOCATION_INFO * RetVal, - _In_ UINT visibleMask, - _In_ UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device, GetCustomHeapProperties) -#if !defined(_WIN32) - D3D12_HEAP_PROPERTIES ( STDMETHODCALLTYPE *GetCustomHeapProperties )( - ID3D12Device * This, - _In_ UINT nodeMask, - D3D12_HEAP_TYPE heapType); - -#else - D3D12_HEAP_PROPERTIES *( STDMETHODCALLTYPE *GetCustomHeapProperties )( - ID3D12Device * This, - D3D12_HEAP_PROPERTIES * RetVal, - _In_ UINT nodeMask, - D3D12_HEAP_TYPE heapType); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommittedResource) - HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource )( - ID3D12Device * This, - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialResourceState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riidResource, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateHeap) - HRESULT ( STDMETHODCALLTYPE *CreateHeap )( - ID3D12Device * This, - _In_ const D3D12_HEAP_DESC *pDesc, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, CreatePlacedResource) - HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource )( - ID3D12Device * This, - _In_ ID3D12Heap *pHeap, - UINT64 HeapOffset, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateReservedResource) - HRESULT ( STDMETHODCALLTYPE *CreateReservedResource )( - ID3D12Device * This, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateSharedHandle) - HRESULT ( STDMETHODCALLTYPE *CreateSharedHandle )( - ID3D12Device * This, - _In_ ID3D12DeviceChild *pObject, - _In_opt_ const SECURITY_ATTRIBUTES *pAttributes, - DWORD Access, - _In_opt_ LPCWSTR Name, - _Out_ HANDLE *pHandle); - - DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandle) - HRESULT ( STDMETHODCALLTYPE *OpenSharedHandle )( - ID3D12Device * This, - _In_ HANDLE NTHandle, - REFIID riid, - _COM_Outptr_opt_ void **ppvObj); - - DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandleByName) - HRESULT ( STDMETHODCALLTYPE *OpenSharedHandleByName )( - ID3D12Device * This, - _In_ LPCWSTR Name, - DWORD Access, - /* [annotation][out] */ - _Out_ HANDLE *pNTHandle); - - DECLSPEC_XFGVIRT(ID3D12Device, MakeResident) - HRESULT ( STDMETHODCALLTYPE *MakeResident )( - ID3D12Device * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects); - - DECLSPEC_XFGVIRT(ID3D12Device, Evict) - HRESULT ( STDMETHODCALLTYPE *Evict )( - ID3D12Device * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateFence) - HRESULT ( STDMETHODCALLTYPE *CreateFence )( - ID3D12Device * This, - UINT64 InitialValue, - D3D12_FENCE_FLAGS Flags, - REFIID riid, - _COM_Outptr_ void **ppFence); - - DECLSPEC_XFGVIRT(ID3D12Device, GetDeviceRemovedReason) - HRESULT ( STDMETHODCALLTYPE *GetDeviceRemovedReason )( - ID3D12Device * This); - - DECLSPEC_XFGVIRT(ID3D12Device, GetCopyableFootprints) - void ( STDMETHODCALLTYPE *GetCopyableFootprints )( - ID3D12Device * This, - _In_ const D3D12_RESOURCE_DESC *pResourceDesc, - _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, - _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, - UINT64 BaseOffset, - _Out_writes_opt_(NumSubresources) D3D12_PLACED_SUBRESOURCE_FOOTPRINT *pLayouts, - _Out_writes_opt_(NumSubresources) UINT *pNumRows, - _Out_writes_opt_(NumSubresources) UINT64 *pRowSizeInBytes, - _Out_opt_ UINT64 *pTotalBytes); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateQueryHeap) - HRESULT ( STDMETHODCALLTYPE *CreateQueryHeap )( - ID3D12Device * This, - _In_ const D3D12_QUERY_HEAP_DESC *pDesc, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, SetStablePowerState) - HRESULT ( STDMETHODCALLTYPE *SetStablePowerState )( - ID3D12Device * This, - BOOL Enable); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandSignature) - HRESULT ( STDMETHODCALLTYPE *CreateCommandSignature )( - ID3D12Device * This, - _In_ const D3D12_COMMAND_SIGNATURE_DESC *pDesc, - _In_opt_ ID3D12RootSignature *pRootSignature, - REFIID riid, - _COM_Outptr_opt_ void **ppvCommandSignature); - - DECLSPEC_XFGVIRT(ID3D12Device, GetResourceTiling) - void ( STDMETHODCALLTYPE *GetResourceTiling )( - ID3D12Device * This, - _In_ ID3D12Resource *pTiledResource, - _Out_opt_ UINT *pNumTilesForEntireResource, - _Out_opt_ D3D12_PACKED_MIP_INFO *pPackedMipDesc, - _Out_opt_ D3D12_TILE_SHAPE *pStandardTileShapeForNonPackedMips, - _Inout_opt_ UINT *pNumSubresourceTilings, - _In_ UINT FirstSubresourceTilingToGet, - _Out_writes_(*pNumSubresourceTilings) D3D12_SUBRESOURCE_TILING *pSubresourceTilingsForNonPackedMips); - - DECLSPEC_XFGVIRT(ID3D12Device, GetAdapterLuid) -#if !defined(_WIN32) - LUID ( STDMETHODCALLTYPE *GetAdapterLuid )( - ID3D12Device * This); - -#else - LUID *( STDMETHODCALLTYPE *GetAdapterLuid )( - ID3D12Device * This, - LUID * RetVal); - -#endif - - END_INTERFACE - } ID3D12DeviceVtbl; - - interface ID3D12Device - { - CONST_VTBL struct ID3D12DeviceVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12Device_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12Device_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12Device_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12Device_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12Device_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12Device_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12Device_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12Device_GetNodeCount(This) \ - ( (This)->lpVtbl -> GetNodeCount(This) ) - -#define ID3D12Device_CreateCommandQueue(This,pDesc,riid,ppCommandQueue) \ - ( (This)->lpVtbl -> CreateCommandQueue(This,pDesc,riid,ppCommandQueue) ) - -#define ID3D12Device_CreateCommandAllocator(This,type,riid,ppCommandAllocator) \ - ( (This)->lpVtbl -> CreateCommandAllocator(This,type,riid,ppCommandAllocator) ) - -#define ID3D12Device_CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) ) - -#define ID3D12Device_CreateComputePipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreateComputePipelineState(This,pDesc,riid,ppPipelineState) ) - -#define ID3D12Device_CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) \ - ( (This)->lpVtbl -> CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) ) - -#define ID3D12Device_CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) \ - ( (This)->lpVtbl -> CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) ) - -#define ID3D12Device_CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) ) - -#define ID3D12Device_GetDescriptorHandleIncrementSize(This,DescriptorHeapType) \ - ( (This)->lpVtbl -> GetDescriptorHandleIncrementSize(This,DescriptorHeapType) ) - -#define ID3D12Device_CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) \ - ( (This)->lpVtbl -> CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) ) - -#define ID3D12Device_CreateConstantBufferView(This,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateConstantBufferView(This,pDesc,DestDescriptor) ) - -#define ID3D12Device_CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device_CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) ) - -#define ID3D12Device_CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device_CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device_CreateSampler(This,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateSampler(This,pDesc,DestDescriptor) ) - -#define ID3D12Device_CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) \ - ( (This)->lpVtbl -> CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) ) - -#define ID3D12Device_CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) \ - ( (This)->lpVtbl -> CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) ) -#if !defined(_WIN32) - -#define ID3D12Device_GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) ) -#else -#define ID3D12Device_GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) ) -#endif -#if !defined(_WIN32) - -#define ID3D12Device_GetCustomHeapProperties(This,nodeMask,heapType) \ - ( (This)->lpVtbl -> GetCustomHeapProperties(This,nodeMask,heapType) ) -#else -#define ID3D12Device_GetCustomHeapProperties(This,RetVal,nodeMask,heapType) \ - ( (This)->lpVtbl -> GetCustomHeapProperties(This,RetVal,nodeMask,heapType) ) -#endif - -#define ID3D12Device_CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) \ - ( (This)->lpVtbl -> CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) ) - -#define ID3D12Device_CreateHeap(This,pDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateHeap(This,pDesc,riid,ppvHeap) ) - -#define ID3D12Device_CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) \ - ( (This)->lpVtbl -> CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) - -#define ID3D12Device_CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) \ - ( (This)->lpVtbl -> CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) - -#define ID3D12Device_CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) \ - ( (This)->lpVtbl -> CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) ) - -#define ID3D12Device_OpenSharedHandle(This,NTHandle,riid,ppvObj) \ - ( (This)->lpVtbl -> OpenSharedHandle(This,NTHandle,riid,ppvObj) ) - -#define ID3D12Device_OpenSharedHandleByName(This,Name,Access,pNTHandle) \ - ( (This)->lpVtbl -> OpenSharedHandleByName(This,Name,Access,pNTHandle) ) - -#define ID3D12Device_MakeResident(This,NumObjects,ppObjects) \ - ( (This)->lpVtbl -> MakeResident(This,NumObjects,ppObjects) ) - -#define ID3D12Device_Evict(This,NumObjects,ppObjects) \ - ( (This)->lpVtbl -> Evict(This,NumObjects,ppObjects) ) - -#define ID3D12Device_CreateFence(This,InitialValue,Flags,riid,ppFence) \ - ( (This)->lpVtbl -> CreateFence(This,InitialValue,Flags,riid,ppFence) ) - -#define ID3D12Device_GetDeviceRemovedReason(This) \ - ( (This)->lpVtbl -> GetDeviceRemovedReason(This) ) - -#define ID3D12Device_GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) \ - ( (This)->lpVtbl -> GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) - -#define ID3D12Device_CreateQueryHeap(This,pDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateQueryHeap(This,pDesc,riid,ppvHeap) ) - -#define ID3D12Device_SetStablePowerState(This,Enable) \ - ( (This)->lpVtbl -> SetStablePowerState(This,Enable) ) - -#define ID3D12Device_CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) \ - ( (This)->lpVtbl -> CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) ) - -#define ID3D12Device_GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) \ - ( (This)->lpVtbl -> GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) ) -#if !defined(_WIN32) - -#define ID3D12Device_GetAdapterLuid(This) \ - ( (This)->lpVtbl -> GetAdapterLuid(This) ) -#else -#define ID3D12Device_GetAdapterLuid(This,RetVal) \ - ( (This)->lpVtbl -> GetAdapterLuid(This,RetVal) ) -#endif - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12Device_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12PipelineLibrary_INTERFACE_DEFINED__ -#define __ID3D12PipelineLibrary_INTERFACE_DEFINED__ - -/* interface ID3D12PipelineLibrary */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12PipelineLibrary; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("c64226a8-9201-46af-b4cc-53fb9ff7414f") - ID3D12PipelineLibrary : public ID3D12DeviceChild - { - public: - virtual HRESULT STDMETHODCALLTYPE StorePipeline( - _In_opt_ LPCWSTR pName, - _In_ ID3D12PipelineState *pPipeline) = 0; - - virtual HRESULT STDMETHODCALLTYPE LoadGraphicsPipeline( - _In_ LPCWSTR pName, - _In_ const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState) = 0; - - virtual HRESULT STDMETHODCALLTYPE LoadComputePipeline( - _In_ LPCWSTR pName, - _In_ const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState) = 0; - - virtual SIZE_T STDMETHODCALLTYPE GetSerializedSize( void) = 0; - - virtual HRESULT STDMETHODCALLTYPE Serialize( - _Out_writes_(DataSizeInBytes) void *pData, - SIZE_T DataSizeInBytes) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12PipelineLibraryVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12PipelineLibrary * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12PipelineLibrary * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12PipelineLibrary * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12PipelineLibrary * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12PipelineLibrary * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12PipelineLibrary * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12PipelineLibrary * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12PipelineLibrary * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12PipelineLibrary, StorePipeline) - HRESULT ( STDMETHODCALLTYPE *StorePipeline )( - ID3D12PipelineLibrary * This, - _In_opt_ LPCWSTR pName, - _In_ ID3D12PipelineState *pPipeline); - - DECLSPEC_XFGVIRT(ID3D12PipelineLibrary, LoadGraphicsPipeline) - HRESULT ( STDMETHODCALLTYPE *LoadGraphicsPipeline )( - ID3D12PipelineLibrary * This, - _In_ LPCWSTR pName, - _In_ const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12PipelineLibrary, LoadComputePipeline) - HRESULT ( STDMETHODCALLTYPE *LoadComputePipeline )( - ID3D12PipelineLibrary * This, - _In_ LPCWSTR pName, - _In_ const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12PipelineLibrary, GetSerializedSize) - SIZE_T ( STDMETHODCALLTYPE *GetSerializedSize )( - ID3D12PipelineLibrary * This); - - DECLSPEC_XFGVIRT(ID3D12PipelineLibrary, Serialize) - HRESULT ( STDMETHODCALLTYPE *Serialize )( - ID3D12PipelineLibrary * This, - _Out_writes_(DataSizeInBytes) void *pData, - SIZE_T DataSizeInBytes); - - END_INTERFACE - } ID3D12PipelineLibraryVtbl; - - interface ID3D12PipelineLibrary - { - CONST_VTBL struct ID3D12PipelineLibraryVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12PipelineLibrary_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12PipelineLibrary_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12PipelineLibrary_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12PipelineLibrary_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12PipelineLibrary_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12PipelineLibrary_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12PipelineLibrary_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12PipelineLibrary_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12PipelineLibrary_StorePipeline(This,pName,pPipeline) \ - ( (This)->lpVtbl -> StorePipeline(This,pName,pPipeline) ) - -#define ID3D12PipelineLibrary_LoadGraphicsPipeline(This,pName,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> LoadGraphicsPipeline(This,pName,pDesc,riid,ppPipelineState) ) - -#define ID3D12PipelineLibrary_LoadComputePipeline(This,pName,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> LoadComputePipeline(This,pName,pDesc,riid,ppPipelineState) ) - -#define ID3D12PipelineLibrary_GetSerializedSize(This) \ - ( (This)->lpVtbl -> GetSerializedSize(This) ) - -#define ID3D12PipelineLibrary_Serialize(This,pData,DataSizeInBytes) \ - ( (This)->lpVtbl -> Serialize(This,pData,DataSizeInBytes) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12PipelineLibrary_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12PipelineLibrary1_INTERFACE_DEFINED__ -#define __ID3D12PipelineLibrary1_INTERFACE_DEFINED__ - -/* interface ID3D12PipelineLibrary1 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12PipelineLibrary1; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("80eabf42-2568-4e5e-bd82-c37f86961dc3") - ID3D12PipelineLibrary1 : public ID3D12PipelineLibrary - { - public: - virtual HRESULT STDMETHODCALLTYPE LoadPipeline( - _In_ LPCWSTR pName, - _In_ const D3D12_PIPELINE_STATE_STREAM_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12PipelineLibrary1Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12PipelineLibrary1 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12PipelineLibrary1 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12PipelineLibrary1 * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12PipelineLibrary1 * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12PipelineLibrary1 * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12PipelineLibrary1 * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12PipelineLibrary1 * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12PipelineLibrary1 * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12PipelineLibrary, StorePipeline) - HRESULT ( STDMETHODCALLTYPE *StorePipeline )( - ID3D12PipelineLibrary1 * This, - _In_opt_ LPCWSTR pName, - _In_ ID3D12PipelineState *pPipeline); - - DECLSPEC_XFGVIRT(ID3D12PipelineLibrary, LoadGraphicsPipeline) - HRESULT ( STDMETHODCALLTYPE *LoadGraphicsPipeline )( - ID3D12PipelineLibrary1 * This, - _In_ LPCWSTR pName, - _In_ const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12PipelineLibrary, LoadComputePipeline) - HRESULT ( STDMETHODCALLTYPE *LoadComputePipeline )( - ID3D12PipelineLibrary1 * This, - _In_ LPCWSTR pName, - _In_ const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12PipelineLibrary, GetSerializedSize) - SIZE_T ( STDMETHODCALLTYPE *GetSerializedSize )( - ID3D12PipelineLibrary1 * This); - - DECLSPEC_XFGVIRT(ID3D12PipelineLibrary, Serialize) - HRESULT ( STDMETHODCALLTYPE *Serialize )( - ID3D12PipelineLibrary1 * This, - _Out_writes_(DataSizeInBytes) void *pData, - SIZE_T DataSizeInBytes); - - DECLSPEC_XFGVIRT(ID3D12PipelineLibrary1, LoadPipeline) - HRESULT ( STDMETHODCALLTYPE *LoadPipeline )( - ID3D12PipelineLibrary1 * This, - _In_ LPCWSTR pName, - _In_ const D3D12_PIPELINE_STATE_STREAM_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - END_INTERFACE - } ID3D12PipelineLibrary1Vtbl; - - interface ID3D12PipelineLibrary1 - { - CONST_VTBL struct ID3D12PipelineLibrary1Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12PipelineLibrary1_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12PipelineLibrary1_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12PipelineLibrary1_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12PipelineLibrary1_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12PipelineLibrary1_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12PipelineLibrary1_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12PipelineLibrary1_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12PipelineLibrary1_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12PipelineLibrary1_StorePipeline(This,pName,pPipeline) \ - ( (This)->lpVtbl -> StorePipeline(This,pName,pPipeline) ) - -#define ID3D12PipelineLibrary1_LoadGraphicsPipeline(This,pName,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> LoadGraphicsPipeline(This,pName,pDesc,riid,ppPipelineState) ) - -#define ID3D12PipelineLibrary1_LoadComputePipeline(This,pName,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> LoadComputePipeline(This,pName,pDesc,riid,ppPipelineState) ) - -#define ID3D12PipelineLibrary1_GetSerializedSize(This) \ - ( (This)->lpVtbl -> GetSerializedSize(This) ) - -#define ID3D12PipelineLibrary1_Serialize(This,pData,DataSizeInBytes) \ - ( (This)->lpVtbl -> Serialize(This,pData,DataSizeInBytes) ) - -#define ID3D12PipelineLibrary1_LoadPipeline(This,pName,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> LoadPipeline(This,pName,pDesc,riid,ppPipelineState) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12PipelineLibrary1_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12_0000_0023 */ -/* [local] */ - -typedef -enum D3D12_MULTIPLE_FENCE_WAIT_FLAGS - { - D3D12_MULTIPLE_FENCE_WAIT_FLAG_NONE = 0, - D3D12_MULTIPLE_FENCE_WAIT_FLAG_ANY = 0x1, - D3D12_MULTIPLE_FENCE_WAIT_FLAG_ALL = 0 - } D3D12_MULTIPLE_FENCE_WAIT_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_MULTIPLE_FENCE_WAIT_FLAGS ) -typedef -enum D3D12_RESIDENCY_PRIORITY - { - D3D12_RESIDENCY_PRIORITY_MINIMUM = 0x28000000, - D3D12_RESIDENCY_PRIORITY_LOW = 0x50000000, - D3D12_RESIDENCY_PRIORITY_NORMAL = 0x78000000, - D3D12_RESIDENCY_PRIORITY_HIGH = 0xa0010000, - D3D12_RESIDENCY_PRIORITY_MAXIMUM = 0xc8000000 - } D3D12_RESIDENCY_PRIORITY; - -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0023_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0023_v0_0_s_ifspec; - -#ifndef __ID3D12Device1_INTERFACE_DEFINED__ -#define __ID3D12Device1_INTERFACE_DEFINED__ - -/* interface ID3D12Device1 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12Device1; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("77acce80-638e-4e65-8895-c1f23386863e") - ID3D12Device1 : public ID3D12Device - { - public: - virtual HRESULT STDMETHODCALLTYPE CreatePipelineLibrary( - _In_reads_(BlobLength) const void *pLibraryBlob, - SIZE_T BlobLength, - REFIID riid, - _COM_Outptr_ void **ppPipelineLibrary) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetEventOnMultipleFenceCompletion( - _In_reads_(NumFences) ID3D12Fence *const *ppFences, - _In_reads_(NumFences) const UINT64 *pFenceValues, - UINT NumFences, - D3D12_MULTIPLE_FENCE_WAIT_FLAGS Flags, - HANDLE hEvent) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetResidencyPriority( - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects, - _In_reads_(NumObjects) const D3D12_RESIDENCY_PRIORITY *pPriorities) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12Device1Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12Device1 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12Device1 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12Device1 * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12Device1 * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12Device1 * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12Device1 * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12Device1 * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12Device, GetNodeCount) - UINT ( STDMETHODCALLTYPE *GetNodeCount )( - ID3D12Device1 * This); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandQueue) - HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue )( - ID3D12Device1 * This, - _In_ const D3D12_COMMAND_QUEUE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppCommandQueue); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandAllocator) - HRESULT ( STDMETHODCALLTYPE *CreateCommandAllocator )( - ID3D12Device1 * This, - _In_ D3D12_COMMAND_LIST_TYPE type, - REFIID riid, - _COM_Outptr_ void **ppCommandAllocator); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateGraphicsPipelineState) - HRESULT ( STDMETHODCALLTYPE *CreateGraphicsPipelineState )( - ID3D12Device1 * This, - _In_ const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateComputePipelineState) - HRESULT ( STDMETHODCALLTYPE *CreateComputePipelineState )( - ID3D12Device1 * This, - _In_ const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandList) - HRESULT ( STDMETHODCALLTYPE *CreateCommandList )( - ID3D12Device1 * This, - _In_ UINT nodeMask, - _In_ D3D12_COMMAND_LIST_TYPE type, - _In_ ID3D12CommandAllocator *pCommandAllocator, - _In_opt_ ID3D12PipelineState *pInitialState, - REFIID riid, - _COM_Outptr_ void **ppCommandList); - - DECLSPEC_XFGVIRT(ID3D12Device, CheckFeatureSupport) - HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )( - ID3D12Device1 * This, - D3D12_FEATURE Feature, - _Inout_updates_bytes_(FeatureSupportDataSize) void *pFeatureSupportData, - UINT FeatureSupportDataSize); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateDescriptorHeap) - HRESULT ( STDMETHODCALLTYPE *CreateDescriptorHeap )( - ID3D12Device1 * This, - _In_ const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc, - REFIID riid, - _COM_Outptr_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, GetDescriptorHandleIncrementSize) - UINT ( STDMETHODCALLTYPE *GetDescriptorHandleIncrementSize )( - ID3D12Device1 * This, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateRootSignature) - HRESULT ( STDMETHODCALLTYPE *CreateRootSignature )( - ID3D12Device1 * This, - _In_ UINT nodeMask, - _In_reads_(blobLengthInBytes) const void *pBlobWithRootSignature, - _In_ SIZE_T blobLengthInBytes, - REFIID riid, - _COM_Outptr_ void **ppvRootSignature); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateConstantBufferView) - void ( STDMETHODCALLTYPE *CreateConstantBufferView )( - ID3D12Device1 * This, - _In_opt_ const D3D12_CONSTANT_BUFFER_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateShaderResourceView) - void ( STDMETHODCALLTYPE *CreateShaderResourceView )( - ID3D12Device1 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateUnorderedAccessView) - void ( STDMETHODCALLTYPE *CreateUnorderedAccessView )( - ID3D12Device1 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ ID3D12Resource *pCounterResource, - _In_opt_ const D3D12_UNORDERED_ACCESS_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateRenderTargetView) - void ( STDMETHODCALLTYPE *CreateRenderTargetView )( - ID3D12Device1 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_RENDER_TARGET_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateDepthStencilView) - void ( STDMETHODCALLTYPE *CreateDepthStencilView )( - ID3D12Device1 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DEPTH_STENCIL_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateSampler) - void ( STDMETHODCALLTYPE *CreateSampler )( - ID3D12Device1 * This, - _In_ const D3D12_SAMPLER_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptors) - void ( STDMETHODCALLTYPE *CopyDescriptors )( - ID3D12Device1 * This, - _In_ UINT NumDestDescriptorRanges, - _In_reads_(NumDestDescriptorRanges) const D3D12_CPU_DESCRIPTOR_HANDLE *pDestDescriptorRangeStarts, - _In_reads_opt_(NumDestDescriptorRanges) const UINT *pDestDescriptorRangeSizes, - _In_ UINT NumSrcDescriptorRanges, - _In_reads_(NumSrcDescriptorRanges) const D3D12_CPU_DESCRIPTOR_HANDLE *pSrcDescriptorRangeStarts, - _In_reads_opt_(NumSrcDescriptorRanges) const UINT *pSrcDescriptorRangeSizes, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType); - - DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptorsSimple) - void ( STDMETHODCALLTYPE *CopyDescriptorsSimple )( - ID3D12Device1 * This, - _In_ UINT NumDescriptors, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType); - - DECLSPEC_XFGVIRT(ID3D12Device, GetResourceAllocationInfo) -#if !defined(_WIN32) - D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo )( - ID3D12Device1 * This, - _In_ UINT visibleMask, - _In_ UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs); - -#else - D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo )( - ID3D12Device1 * This, - D3D12_RESOURCE_ALLOCATION_INFO * RetVal, - _In_ UINT visibleMask, - _In_ UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device, GetCustomHeapProperties) -#if !defined(_WIN32) - D3D12_HEAP_PROPERTIES ( STDMETHODCALLTYPE *GetCustomHeapProperties )( - ID3D12Device1 * This, - _In_ UINT nodeMask, - D3D12_HEAP_TYPE heapType); - -#else - D3D12_HEAP_PROPERTIES *( STDMETHODCALLTYPE *GetCustomHeapProperties )( - ID3D12Device1 * This, - D3D12_HEAP_PROPERTIES * RetVal, - _In_ UINT nodeMask, - D3D12_HEAP_TYPE heapType); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommittedResource) - HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource )( - ID3D12Device1 * This, - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialResourceState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riidResource, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateHeap) - HRESULT ( STDMETHODCALLTYPE *CreateHeap )( - ID3D12Device1 * This, - _In_ const D3D12_HEAP_DESC *pDesc, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, CreatePlacedResource) - HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource )( - ID3D12Device1 * This, - _In_ ID3D12Heap *pHeap, - UINT64 HeapOffset, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateReservedResource) - HRESULT ( STDMETHODCALLTYPE *CreateReservedResource )( - ID3D12Device1 * This, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateSharedHandle) - HRESULT ( STDMETHODCALLTYPE *CreateSharedHandle )( - ID3D12Device1 * This, - _In_ ID3D12DeviceChild *pObject, - _In_opt_ const SECURITY_ATTRIBUTES *pAttributes, - DWORD Access, - _In_opt_ LPCWSTR Name, - _Out_ HANDLE *pHandle); - - DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandle) - HRESULT ( STDMETHODCALLTYPE *OpenSharedHandle )( - ID3D12Device1 * This, - _In_ HANDLE NTHandle, - REFIID riid, - _COM_Outptr_opt_ void **ppvObj); - - DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandleByName) - HRESULT ( STDMETHODCALLTYPE *OpenSharedHandleByName )( - ID3D12Device1 * This, - _In_ LPCWSTR Name, - DWORD Access, - /* [annotation][out] */ - _Out_ HANDLE *pNTHandle); - - DECLSPEC_XFGVIRT(ID3D12Device, MakeResident) - HRESULT ( STDMETHODCALLTYPE *MakeResident )( - ID3D12Device1 * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects); - - DECLSPEC_XFGVIRT(ID3D12Device, Evict) - HRESULT ( STDMETHODCALLTYPE *Evict )( - ID3D12Device1 * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateFence) - HRESULT ( STDMETHODCALLTYPE *CreateFence )( - ID3D12Device1 * This, - UINT64 InitialValue, - D3D12_FENCE_FLAGS Flags, - REFIID riid, - _COM_Outptr_ void **ppFence); - - DECLSPEC_XFGVIRT(ID3D12Device, GetDeviceRemovedReason) - HRESULT ( STDMETHODCALLTYPE *GetDeviceRemovedReason )( - ID3D12Device1 * This); - - DECLSPEC_XFGVIRT(ID3D12Device, GetCopyableFootprints) - void ( STDMETHODCALLTYPE *GetCopyableFootprints )( - ID3D12Device1 * This, - _In_ const D3D12_RESOURCE_DESC *pResourceDesc, - _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, - _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, - UINT64 BaseOffset, - _Out_writes_opt_(NumSubresources) D3D12_PLACED_SUBRESOURCE_FOOTPRINT *pLayouts, - _Out_writes_opt_(NumSubresources) UINT *pNumRows, - _Out_writes_opt_(NumSubresources) UINT64 *pRowSizeInBytes, - _Out_opt_ UINT64 *pTotalBytes); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateQueryHeap) - HRESULT ( STDMETHODCALLTYPE *CreateQueryHeap )( - ID3D12Device1 * This, - _In_ const D3D12_QUERY_HEAP_DESC *pDesc, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, SetStablePowerState) - HRESULT ( STDMETHODCALLTYPE *SetStablePowerState )( - ID3D12Device1 * This, - BOOL Enable); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandSignature) - HRESULT ( STDMETHODCALLTYPE *CreateCommandSignature )( - ID3D12Device1 * This, - _In_ const D3D12_COMMAND_SIGNATURE_DESC *pDesc, - _In_opt_ ID3D12RootSignature *pRootSignature, - REFIID riid, - _COM_Outptr_opt_ void **ppvCommandSignature); - - DECLSPEC_XFGVIRT(ID3D12Device, GetResourceTiling) - void ( STDMETHODCALLTYPE *GetResourceTiling )( - ID3D12Device1 * This, - _In_ ID3D12Resource *pTiledResource, - _Out_opt_ UINT *pNumTilesForEntireResource, - _Out_opt_ D3D12_PACKED_MIP_INFO *pPackedMipDesc, - _Out_opt_ D3D12_TILE_SHAPE *pStandardTileShapeForNonPackedMips, - _Inout_opt_ UINT *pNumSubresourceTilings, - _In_ UINT FirstSubresourceTilingToGet, - _Out_writes_(*pNumSubresourceTilings) D3D12_SUBRESOURCE_TILING *pSubresourceTilingsForNonPackedMips); - - DECLSPEC_XFGVIRT(ID3D12Device, GetAdapterLuid) -#if !defined(_WIN32) - LUID ( STDMETHODCALLTYPE *GetAdapterLuid )( - ID3D12Device1 * This); - -#else - LUID *( STDMETHODCALLTYPE *GetAdapterLuid )( - ID3D12Device1 * This, - LUID * RetVal); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device1, CreatePipelineLibrary) - HRESULT ( STDMETHODCALLTYPE *CreatePipelineLibrary )( - ID3D12Device1 * This, - _In_reads_(BlobLength) const void *pLibraryBlob, - SIZE_T BlobLength, - REFIID riid, - _COM_Outptr_ void **ppPipelineLibrary); - - DECLSPEC_XFGVIRT(ID3D12Device1, SetEventOnMultipleFenceCompletion) - HRESULT ( STDMETHODCALLTYPE *SetEventOnMultipleFenceCompletion )( - ID3D12Device1 * This, - _In_reads_(NumFences) ID3D12Fence *const *ppFences, - _In_reads_(NumFences) const UINT64 *pFenceValues, - UINT NumFences, - D3D12_MULTIPLE_FENCE_WAIT_FLAGS Flags, - HANDLE hEvent); - - DECLSPEC_XFGVIRT(ID3D12Device1, SetResidencyPriority) - HRESULT ( STDMETHODCALLTYPE *SetResidencyPriority )( - ID3D12Device1 * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects, - _In_reads_(NumObjects) const D3D12_RESIDENCY_PRIORITY *pPriorities); - - END_INTERFACE - } ID3D12Device1Vtbl; - - interface ID3D12Device1 - { - CONST_VTBL struct ID3D12Device1Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12Device1_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12Device1_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12Device1_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12Device1_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12Device1_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12Device1_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12Device1_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12Device1_GetNodeCount(This) \ - ( (This)->lpVtbl -> GetNodeCount(This) ) - -#define ID3D12Device1_CreateCommandQueue(This,pDesc,riid,ppCommandQueue) \ - ( (This)->lpVtbl -> CreateCommandQueue(This,pDesc,riid,ppCommandQueue) ) - -#define ID3D12Device1_CreateCommandAllocator(This,type,riid,ppCommandAllocator) \ - ( (This)->lpVtbl -> CreateCommandAllocator(This,type,riid,ppCommandAllocator) ) - -#define ID3D12Device1_CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) ) - -#define ID3D12Device1_CreateComputePipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreateComputePipelineState(This,pDesc,riid,ppPipelineState) ) - -#define ID3D12Device1_CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) \ - ( (This)->lpVtbl -> CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) ) - -#define ID3D12Device1_CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) \ - ( (This)->lpVtbl -> CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) ) - -#define ID3D12Device1_CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) ) - -#define ID3D12Device1_GetDescriptorHandleIncrementSize(This,DescriptorHeapType) \ - ( (This)->lpVtbl -> GetDescriptorHandleIncrementSize(This,DescriptorHeapType) ) - -#define ID3D12Device1_CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) \ - ( (This)->lpVtbl -> CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) ) - -#define ID3D12Device1_CreateConstantBufferView(This,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateConstantBufferView(This,pDesc,DestDescriptor) ) - -#define ID3D12Device1_CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device1_CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) ) - -#define ID3D12Device1_CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device1_CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device1_CreateSampler(This,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateSampler(This,pDesc,DestDescriptor) ) - -#define ID3D12Device1_CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) \ - ( (This)->lpVtbl -> CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) ) - -#define ID3D12Device1_CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) \ - ( (This)->lpVtbl -> CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) ) -#if !defined(_WIN32) - -#define ID3D12Device1_GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) ) -#else -#define ID3D12Device1_GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) ) -#endif -#if !defined(_WIN32) - -#define ID3D12Device1_GetCustomHeapProperties(This,nodeMask,heapType) \ - ( (This)->lpVtbl -> GetCustomHeapProperties(This,nodeMask,heapType) ) -#else -#define ID3D12Device1_GetCustomHeapProperties(This,RetVal,nodeMask,heapType) \ - ( (This)->lpVtbl -> GetCustomHeapProperties(This,RetVal,nodeMask,heapType) ) -#endif - -#define ID3D12Device1_CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) \ - ( (This)->lpVtbl -> CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) ) - -#define ID3D12Device1_CreateHeap(This,pDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateHeap(This,pDesc,riid,ppvHeap) ) - -#define ID3D12Device1_CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) \ - ( (This)->lpVtbl -> CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) - -#define ID3D12Device1_CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) \ - ( (This)->lpVtbl -> CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) - -#define ID3D12Device1_CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) \ - ( (This)->lpVtbl -> CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) ) - -#define ID3D12Device1_OpenSharedHandle(This,NTHandle,riid,ppvObj) \ - ( (This)->lpVtbl -> OpenSharedHandle(This,NTHandle,riid,ppvObj) ) - -#define ID3D12Device1_OpenSharedHandleByName(This,Name,Access,pNTHandle) \ - ( (This)->lpVtbl -> OpenSharedHandleByName(This,Name,Access,pNTHandle) ) - -#define ID3D12Device1_MakeResident(This,NumObjects,ppObjects) \ - ( (This)->lpVtbl -> MakeResident(This,NumObjects,ppObjects) ) - -#define ID3D12Device1_Evict(This,NumObjects,ppObjects) \ - ( (This)->lpVtbl -> Evict(This,NumObjects,ppObjects) ) - -#define ID3D12Device1_CreateFence(This,InitialValue,Flags,riid,ppFence) \ - ( (This)->lpVtbl -> CreateFence(This,InitialValue,Flags,riid,ppFence) ) - -#define ID3D12Device1_GetDeviceRemovedReason(This) \ - ( (This)->lpVtbl -> GetDeviceRemovedReason(This) ) - -#define ID3D12Device1_GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) \ - ( (This)->lpVtbl -> GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) - -#define ID3D12Device1_CreateQueryHeap(This,pDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateQueryHeap(This,pDesc,riid,ppvHeap) ) - -#define ID3D12Device1_SetStablePowerState(This,Enable) \ - ( (This)->lpVtbl -> SetStablePowerState(This,Enable) ) - -#define ID3D12Device1_CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) \ - ( (This)->lpVtbl -> CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) ) - -#define ID3D12Device1_GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) \ - ( (This)->lpVtbl -> GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) ) -#if !defined(_WIN32) - -#define ID3D12Device1_GetAdapterLuid(This) \ - ( (This)->lpVtbl -> GetAdapterLuid(This) ) -#else -#define ID3D12Device1_GetAdapterLuid(This,RetVal) \ - ( (This)->lpVtbl -> GetAdapterLuid(This,RetVal) ) -#endif - -#define ID3D12Device1_CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) \ - ( (This)->lpVtbl -> CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) ) - -#define ID3D12Device1_SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) \ - ( (This)->lpVtbl -> SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) ) - -#define ID3D12Device1_SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) \ - ( (This)->lpVtbl -> SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12Device1_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12Device2_INTERFACE_DEFINED__ -#define __ID3D12Device2_INTERFACE_DEFINED__ - -/* interface ID3D12Device2 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12Device2; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("30baa41e-b15b-475c-a0bb-1af5c5b64328") - ID3D12Device2 : public ID3D12Device1 - { - public: - virtual HRESULT STDMETHODCALLTYPE CreatePipelineState( - const D3D12_PIPELINE_STATE_STREAM_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12Device2Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12Device2 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12Device2 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12Device2 * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12Device2 * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12Device2 * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12Device2 * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12Device2 * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12Device, GetNodeCount) - UINT ( STDMETHODCALLTYPE *GetNodeCount )( - ID3D12Device2 * This); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandQueue) - HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue )( - ID3D12Device2 * This, - _In_ const D3D12_COMMAND_QUEUE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppCommandQueue); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandAllocator) - HRESULT ( STDMETHODCALLTYPE *CreateCommandAllocator )( - ID3D12Device2 * This, - _In_ D3D12_COMMAND_LIST_TYPE type, - REFIID riid, - _COM_Outptr_ void **ppCommandAllocator); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateGraphicsPipelineState) - HRESULT ( STDMETHODCALLTYPE *CreateGraphicsPipelineState )( - ID3D12Device2 * This, - _In_ const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateComputePipelineState) - HRESULT ( STDMETHODCALLTYPE *CreateComputePipelineState )( - ID3D12Device2 * This, - _In_ const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandList) - HRESULT ( STDMETHODCALLTYPE *CreateCommandList )( - ID3D12Device2 * This, - _In_ UINT nodeMask, - _In_ D3D12_COMMAND_LIST_TYPE type, - _In_ ID3D12CommandAllocator *pCommandAllocator, - _In_opt_ ID3D12PipelineState *pInitialState, - REFIID riid, - _COM_Outptr_ void **ppCommandList); - - DECLSPEC_XFGVIRT(ID3D12Device, CheckFeatureSupport) - HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )( - ID3D12Device2 * This, - D3D12_FEATURE Feature, - _Inout_updates_bytes_(FeatureSupportDataSize) void *pFeatureSupportData, - UINT FeatureSupportDataSize); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateDescriptorHeap) - HRESULT ( STDMETHODCALLTYPE *CreateDescriptorHeap )( - ID3D12Device2 * This, - _In_ const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc, - REFIID riid, - _COM_Outptr_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, GetDescriptorHandleIncrementSize) - UINT ( STDMETHODCALLTYPE *GetDescriptorHandleIncrementSize )( - ID3D12Device2 * This, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateRootSignature) - HRESULT ( STDMETHODCALLTYPE *CreateRootSignature )( - ID3D12Device2 * This, - _In_ UINT nodeMask, - _In_reads_(blobLengthInBytes) const void *pBlobWithRootSignature, - _In_ SIZE_T blobLengthInBytes, - REFIID riid, - _COM_Outptr_ void **ppvRootSignature); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateConstantBufferView) - void ( STDMETHODCALLTYPE *CreateConstantBufferView )( - ID3D12Device2 * This, - _In_opt_ const D3D12_CONSTANT_BUFFER_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateShaderResourceView) - void ( STDMETHODCALLTYPE *CreateShaderResourceView )( - ID3D12Device2 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateUnorderedAccessView) - void ( STDMETHODCALLTYPE *CreateUnorderedAccessView )( - ID3D12Device2 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ ID3D12Resource *pCounterResource, - _In_opt_ const D3D12_UNORDERED_ACCESS_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateRenderTargetView) - void ( STDMETHODCALLTYPE *CreateRenderTargetView )( - ID3D12Device2 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_RENDER_TARGET_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateDepthStencilView) - void ( STDMETHODCALLTYPE *CreateDepthStencilView )( - ID3D12Device2 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DEPTH_STENCIL_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateSampler) - void ( STDMETHODCALLTYPE *CreateSampler )( - ID3D12Device2 * This, - _In_ const D3D12_SAMPLER_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptors) - void ( STDMETHODCALLTYPE *CopyDescriptors )( - ID3D12Device2 * This, - _In_ UINT NumDestDescriptorRanges, - _In_reads_(NumDestDescriptorRanges) const D3D12_CPU_DESCRIPTOR_HANDLE *pDestDescriptorRangeStarts, - _In_reads_opt_(NumDestDescriptorRanges) const UINT *pDestDescriptorRangeSizes, - _In_ UINT NumSrcDescriptorRanges, - _In_reads_(NumSrcDescriptorRanges) const D3D12_CPU_DESCRIPTOR_HANDLE *pSrcDescriptorRangeStarts, - _In_reads_opt_(NumSrcDescriptorRanges) const UINT *pSrcDescriptorRangeSizes, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType); - - DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptorsSimple) - void ( STDMETHODCALLTYPE *CopyDescriptorsSimple )( - ID3D12Device2 * This, - _In_ UINT NumDescriptors, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType); - - DECLSPEC_XFGVIRT(ID3D12Device, GetResourceAllocationInfo) -#if !defined(_WIN32) - D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo )( - ID3D12Device2 * This, - _In_ UINT visibleMask, - _In_ UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs); - -#else - D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo )( - ID3D12Device2 * This, - D3D12_RESOURCE_ALLOCATION_INFO * RetVal, - _In_ UINT visibleMask, - _In_ UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device, GetCustomHeapProperties) -#if !defined(_WIN32) - D3D12_HEAP_PROPERTIES ( STDMETHODCALLTYPE *GetCustomHeapProperties )( - ID3D12Device2 * This, - _In_ UINT nodeMask, - D3D12_HEAP_TYPE heapType); - -#else - D3D12_HEAP_PROPERTIES *( STDMETHODCALLTYPE *GetCustomHeapProperties )( - ID3D12Device2 * This, - D3D12_HEAP_PROPERTIES * RetVal, - _In_ UINT nodeMask, - D3D12_HEAP_TYPE heapType); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommittedResource) - HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource )( - ID3D12Device2 * This, - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialResourceState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riidResource, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateHeap) - HRESULT ( STDMETHODCALLTYPE *CreateHeap )( - ID3D12Device2 * This, - _In_ const D3D12_HEAP_DESC *pDesc, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, CreatePlacedResource) - HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource )( - ID3D12Device2 * This, - _In_ ID3D12Heap *pHeap, - UINT64 HeapOffset, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateReservedResource) - HRESULT ( STDMETHODCALLTYPE *CreateReservedResource )( - ID3D12Device2 * This, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateSharedHandle) - HRESULT ( STDMETHODCALLTYPE *CreateSharedHandle )( - ID3D12Device2 * This, - _In_ ID3D12DeviceChild *pObject, - _In_opt_ const SECURITY_ATTRIBUTES *pAttributes, - DWORD Access, - _In_opt_ LPCWSTR Name, - _Out_ HANDLE *pHandle); - - DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandle) - HRESULT ( STDMETHODCALLTYPE *OpenSharedHandle )( - ID3D12Device2 * This, - _In_ HANDLE NTHandle, - REFIID riid, - _COM_Outptr_opt_ void **ppvObj); - - DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandleByName) - HRESULT ( STDMETHODCALLTYPE *OpenSharedHandleByName )( - ID3D12Device2 * This, - _In_ LPCWSTR Name, - DWORD Access, - /* [annotation][out] */ - _Out_ HANDLE *pNTHandle); - - DECLSPEC_XFGVIRT(ID3D12Device, MakeResident) - HRESULT ( STDMETHODCALLTYPE *MakeResident )( - ID3D12Device2 * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects); - - DECLSPEC_XFGVIRT(ID3D12Device, Evict) - HRESULT ( STDMETHODCALLTYPE *Evict )( - ID3D12Device2 * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateFence) - HRESULT ( STDMETHODCALLTYPE *CreateFence )( - ID3D12Device2 * This, - UINT64 InitialValue, - D3D12_FENCE_FLAGS Flags, - REFIID riid, - _COM_Outptr_ void **ppFence); - - DECLSPEC_XFGVIRT(ID3D12Device, GetDeviceRemovedReason) - HRESULT ( STDMETHODCALLTYPE *GetDeviceRemovedReason )( - ID3D12Device2 * This); - - DECLSPEC_XFGVIRT(ID3D12Device, GetCopyableFootprints) - void ( STDMETHODCALLTYPE *GetCopyableFootprints )( - ID3D12Device2 * This, - _In_ const D3D12_RESOURCE_DESC *pResourceDesc, - _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, - _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, - UINT64 BaseOffset, - _Out_writes_opt_(NumSubresources) D3D12_PLACED_SUBRESOURCE_FOOTPRINT *pLayouts, - _Out_writes_opt_(NumSubresources) UINT *pNumRows, - _Out_writes_opt_(NumSubresources) UINT64 *pRowSizeInBytes, - _Out_opt_ UINT64 *pTotalBytes); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateQueryHeap) - HRESULT ( STDMETHODCALLTYPE *CreateQueryHeap )( - ID3D12Device2 * This, - _In_ const D3D12_QUERY_HEAP_DESC *pDesc, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, SetStablePowerState) - HRESULT ( STDMETHODCALLTYPE *SetStablePowerState )( - ID3D12Device2 * This, - BOOL Enable); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandSignature) - HRESULT ( STDMETHODCALLTYPE *CreateCommandSignature )( - ID3D12Device2 * This, - _In_ const D3D12_COMMAND_SIGNATURE_DESC *pDesc, - _In_opt_ ID3D12RootSignature *pRootSignature, - REFIID riid, - _COM_Outptr_opt_ void **ppvCommandSignature); - - DECLSPEC_XFGVIRT(ID3D12Device, GetResourceTiling) - void ( STDMETHODCALLTYPE *GetResourceTiling )( - ID3D12Device2 * This, - _In_ ID3D12Resource *pTiledResource, - _Out_opt_ UINT *pNumTilesForEntireResource, - _Out_opt_ D3D12_PACKED_MIP_INFO *pPackedMipDesc, - _Out_opt_ D3D12_TILE_SHAPE *pStandardTileShapeForNonPackedMips, - _Inout_opt_ UINT *pNumSubresourceTilings, - _In_ UINT FirstSubresourceTilingToGet, - _Out_writes_(*pNumSubresourceTilings) D3D12_SUBRESOURCE_TILING *pSubresourceTilingsForNonPackedMips); - - DECLSPEC_XFGVIRT(ID3D12Device, GetAdapterLuid) -#if !defined(_WIN32) - LUID ( STDMETHODCALLTYPE *GetAdapterLuid )( - ID3D12Device2 * This); - -#else - LUID *( STDMETHODCALLTYPE *GetAdapterLuid )( - ID3D12Device2 * This, - LUID * RetVal); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device1, CreatePipelineLibrary) - HRESULT ( STDMETHODCALLTYPE *CreatePipelineLibrary )( - ID3D12Device2 * This, - _In_reads_(BlobLength) const void *pLibraryBlob, - SIZE_T BlobLength, - REFIID riid, - _COM_Outptr_ void **ppPipelineLibrary); - - DECLSPEC_XFGVIRT(ID3D12Device1, SetEventOnMultipleFenceCompletion) - HRESULT ( STDMETHODCALLTYPE *SetEventOnMultipleFenceCompletion )( - ID3D12Device2 * This, - _In_reads_(NumFences) ID3D12Fence *const *ppFences, - _In_reads_(NumFences) const UINT64 *pFenceValues, - UINT NumFences, - D3D12_MULTIPLE_FENCE_WAIT_FLAGS Flags, - HANDLE hEvent); - - DECLSPEC_XFGVIRT(ID3D12Device1, SetResidencyPriority) - HRESULT ( STDMETHODCALLTYPE *SetResidencyPriority )( - ID3D12Device2 * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects, - _In_reads_(NumObjects) const D3D12_RESIDENCY_PRIORITY *pPriorities); - - DECLSPEC_XFGVIRT(ID3D12Device2, CreatePipelineState) - HRESULT ( STDMETHODCALLTYPE *CreatePipelineState )( - ID3D12Device2 * This, - const D3D12_PIPELINE_STATE_STREAM_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - END_INTERFACE - } ID3D12Device2Vtbl; - - interface ID3D12Device2 - { - CONST_VTBL struct ID3D12Device2Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12Device2_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12Device2_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12Device2_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12Device2_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12Device2_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12Device2_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12Device2_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12Device2_GetNodeCount(This) \ - ( (This)->lpVtbl -> GetNodeCount(This) ) - -#define ID3D12Device2_CreateCommandQueue(This,pDesc,riid,ppCommandQueue) \ - ( (This)->lpVtbl -> CreateCommandQueue(This,pDesc,riid,ppCommandQueue) ) - -#define ID3D12Device2_CreateCommandAllocator(This,type,riid,ppCommandAllocator) \ - ( (This)->lpVtbl -> CreateCommandAllocator(This,type,riid,ppCommandAllocator) ) - -#define ID3D12Device2_CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) ) - -#define ID3D12Device2_CreateComputePipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreateComputePipelineState(This,pDesc,riid,ppPipelineState) ) - -#define ID3D12Device2_CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) \ - ( (This)->lpVtbl -> CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) ) - -#define ID3D12Device2_CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) \ - ( (This)->lpVtbl -> CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) ) - -#define ID3D12Device2_CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) ) - -#define ID3D12Device2_GetDescriptorHandleIncrementSize(This,DescriptorHeapType) \ - ( (This)->lpVtbl -> GetDescriptorHandleIncrementSize(This,DescriptorHeapType) ) - -#define ID3D12Device2_CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) \ - ( (This)->lpVtbl -> CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) ) - -#define ID3D12Device2_CreateConstantBufferView(This,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateConstantBufferView(This,pDesc,DestDescriptor) ) - -#define ID3D12Device2_CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device2_CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) ) - -#define ID3D12Device2_CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device2_CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device2_CreateSampler(This,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateSampler(This,pDesc,DestDescriptor) ) - -#define ID3D12Device2_CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) \ - ( (This)->lpVtbl -> CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) ) - -#define ID3D12Device2_CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) \ - ( (This)->lpVtbl -> CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) ) -#if !defined(_WIN32) - -#define ID3D12Device2_GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) ) -#else -#define ID3D12Device2_GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) ) -#endif -#if !defined(_WIN32) - -#define ID3D12Device2_GetCustomHeapProperties(This,nodeMask,heapType) \ - ( (This)->lpVtbl -> GetCustomHeapProperties(This,nodeMask,heapType) ) -#else -#define ID3D12Device2_GetCustomHeapProperties(This,RetVal,nodeMask,heapType) \ - ( (This)->lpVtbl -> GetCustomHeapProperties(This,RetVal,nodeMask,heapType) ) -#endif - -#define ID3D12Device2_CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) \ - ( (This)->lpVtbl -> CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) ) - -#define ID3D12Device2_CreateHeap(This,pDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateHeap(This,pDesc,riid,ppvHeap) ) - -#define ID3D12Device2_CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) \ - ( (This)->lpVtbl -> CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) - -#define ID3D12Device2_CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) \ - ( (This)->lpVtbl -> CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) - -#define ID3D12Device2_CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) \ - ( (This)->lpVtbl -> CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) ) - -#define ID3D12Device2_OpenSharedHandle(This,NTHandle,riid,ppvObj) \ - ( (This)->lpVtbl -> OpenSharedHandle(This,NTHandle,riid,ppvObj) ) - -#define ID3D12Device2_OpenSharedHandleByName(This,Name,Access,pNTHandle) \ - ( (This)->lpVtbl -> OpenSharedHandleByName(This,Name,Access,pNTHandle) ) - -#define ID3D12Device2_MakeResident(This,NumObjects,ppObjects) \ - ( (This)->lpVtbl -> MakeResident(This,NumObjects,ppObjects) ) - -#define ID3D12Device2_Evict(This,NumObjects,ppObjects) \ - ( (This)->lpVtbl -> Evict(This,NumObjects,ppObjects) ) - -#define ID3D12Device2_CreateFence(This,InitialValue,Flags,riid,ppFence) \ - ( (This)->lpVtbl -> CreateFence(This,InitialValue,Flags,riid,ppFence) ) - -#define ID3D12Device2_GetDeviceRemovedReason(This) \ - ( (This)->lpVtbl -> GetDeviceRemovedReason(This) ) - -#define ID3D12Device2_GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) \ - ( (This)->lpVtbl -> GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) - -#define ID3D12Device2_CreateQueryHeap(This,pDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateQueryHeap(This,pDesc,riid,ppvHeap) ) - -#define ID3D12Device2_SetStablePowerState(This,Enable) \ - ( (This)->lpVtbl -> SetStablePowerState(This,Enable) ) - -#define ID3D12Device2_CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) \ - ( (This)->lpVtbl -> CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) ) - -#define ID3D12Device2_GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) \ - ( (This)->lpVtbl -> GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) ) -#if !defined(_WIN32) - -#define ID3D12Device2_GetAdapterLuid(This) \ - ( (This)->lpVtbl -> GetAdapterLuid(This) ) -#else -#define ID3D12Device2_GetAdapterLuid(This,RetVal) \ - ( (This)->lpVtbl -> GetAdapterLuid(This,RetVal) ) -#endif - -#define ID3D12Device2_CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) \ - ( (This)->lpVtbl -> CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) ) - -#define ID3D12Device2_SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) \ - ( (This)->lpVtbl -> SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) ) - -#define ID3D12Device2_SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) \ - ( (This)->lpVtbl -> SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) ) - -#define ID3D12Device2_CreatePipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreatePipelineState(This,pDesc,riid,ppPipelineState) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12Device2_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12_0000_0025 */ -/* [local] */ - -typedef -enum D3D12_RESIDENCY_FLAGS - { - D3D12_RESIDENCY_FLAG_NONE = 0, - D3D12_RESIDENCY_FLAG_DENY_OVERBUDGET = 0x1 - } D3D12_RESIDENCY_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_RESIDENCY_FLAGS ) - -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0025_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0025_v0_0_s_ifspec; - -#ifndef __ID3D12Device3_INTERFACE_DEFINED__ -#define __ID3D12Device3_INTERFACE_DEFINED__ - -/* interface ID3D12Device3 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12Device3; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("81dadc15-2bad-4392-93c5-101345c4aa98") - ID3D12Device3 : public ID3D12Device2 - { - public: - virtual HRESULT STDMETHODCALLTYPE OpenExistingHeapFromAddress( - _In_ const void *pAddress, - REFIID riid, - _COM_Outptr_ void **ppvHeap) = 0; - - virtual HRESULT STDMETHODCALLTYPE OpenExistingHeapFromFileMapping( - _In_ HANDLE hFileMapping, - REFIID riid, - _COM_Outptr_ void **ppvHeap) = 0; - - virtual HRESULT STDMETHODCALLTYPE EnqueueMakeResident( - D3D12_RESIDENCY_FLAGS Flags, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects, - _In_ ID3D12Fence *pFenceToSignal, - UINT64 FenceValueToSignal) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12Device3Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12Device3 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12Device3 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12Device3 * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12Device3 * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12Device3 * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12Device3 * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12Device3 * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12Device, GetNodeCount) - UINT ( STDMETHODCALLTYPE *GetNodeCount )( - ID3D12Device3 * This); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandQueue) - HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue )( - ID3D12Device3 * This, - _In_ const D3D12_COMMAND_QUEUE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppCommandQueue); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandAllocator) - HRESULT ( STDMETHODCALLTYPE *CreateCommandAllocator )( - ID3D12Device3 * This, - _In_ D3D12_COMMAND_LIST_TYPE type, - REFIID riid, - _COM_Outptr_ void **ppCommandAllocator); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateGraphicsPipelineState) - HRESULT ( STDMETHODCALLTYPE *CreateGraphicsPipelineState )( - ID3D12Device3 * This, - _In_ const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateComputePipelineState) - HRESULT ( STDMETHODCALLTYPE *CreateComputePipelineState )( - ID3D12Device3 * This, - _In_ const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandList) - HRESULT ( STDMETHODCALLTYPE *CreateCommandList )( - ID3D12Device3 * This, - _In_ UINT nodeMask, - _In_ D3D12_COMMAND_LIST_TYPE type, - _In_ ID3D12CommandAllocator *pCommandAllocator, - _In_opt_ ID3D12PipelineState *pInitialState, - REFIID riid, - _COM_Outptr_ void **ppCommandList); - - DECLSPEC_XFGVIRT(ID3D12Device, CheckFeatureSupport) - HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )( - ID3D12Device3 * This, - D3D12_FEATURE Feature, - _Inout_updates_bytes_(FeatureSupportDataSize) void *pFeatureSupportData, - UINT FeatureSupportDataSize); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateDescriptorHeap) - HRESULT ( STDMETHODCALLTYPE *CreateDescriptorHeap )( - ID3D12Device3 * This, - _In_ const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc, - REFIID riid, - _COM_Outptr_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, GetDescriptorHandleIncrementSize) - UINT ( STDMETHODCALLTYPE *GetDescriptorHandleIncrementSize )( - ID3D12Device3 * This, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateRootSignature) - HRESULT ( STDMETHODCALLTYPE *CreateRootSignature )( - ID3D12Device3 * This, - _In_ UINT nodeMask, - _In_reads_(blobLengthInBytes) const void *pBlobWithRootSignature, - _In_ SIZE_T blobLengthInBytes, - REFIID riid, - _COM_Outptr_ void **ppvRootSignature); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateConstantBufferView) - void ( STDMETHODCALLTYPE *CreateConstantBufferView )( - ID3D12Device3 * This, - _In_opt_ const D3D12_CONSTANT_BUFFER_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateShaderResourceView) - void ( STDMETHODCALLTYPE *CreateShaderResourceView )( - ID3D12Device3 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateUnorderedAccessView) - void ( STDMETHODCALLTYPE *CreateUnorderedAccessView )( - ID3D12Device3 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ ID3D12Resource *pCounterResource, - _In_opt_ const D3D12_UNORDERED_ACCESS_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateRenderTargetView) - void ( STDMETHODCALLTYPE *CreateRenderTargetView )( - ID3D12Device3 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_RENDER_TARGET_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateDepthStencilView) - void ( STDMETHODCALLTYPE *CreateDepthStencilView )( - ID3D12Device3 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DEPTH_STENCIL_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateSampler) - void ( STDMETHODCALLTYPE *CreateSampler )( - ID3D12Device3 * This, - _In_ const D3D12_SAMPLER_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptors) - void ( STDMETHODCALLTYPE *CopyDescriptors )( - ID3D12Device3 * This, - _In_ UINT NumDestDescriptorRanges, - _In_reads_(NumDestDescriptorRanges) const D3D12_CPU_DESCRIPTOR_HANDLE *pDestDescriptorRangeStarts, - _In_reads_opt_(NumDestDescriptorRanges) const UINT *pDestDescriptorRangeSizes, - _In_ UINT NumSrcDescriptorRanges, - _In_reads_(NumSrcDescriptorRanges) const D3D12_CPU_DESCRIPTOR_HANDLE *pSrcDescriptorRangeStarts, - _In_reads_opt_(NumSrcDescriptorRanges) const UINT *pSrcDescriptorRangeSizes, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType); - - DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptorsSimple) - void ( STDMETHODCALLTYPE *CopyDescriptorsSimple )( - ID3D12Device3 * This, - _In_ UINT NumDescriptors, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType); - - DECLSPEC_XFGVIRT(ID3D12Device, GetResourceAllocationInfo) -#if !defined(_WIN32) - D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo )( - ID3D12Device3 * This, - _In_ UINT visibleMask, - _In_ UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs); - -#else - D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo )( - ID3D12Device3 * This, - D3D12_RESOURCE_ALLOCATION_INFO * RetVal, - _In_ UINT visibleMask, - _In_ UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device, GetCustomHeapProperties) -#if !defined(_WIN32) - D3D12_HEAP_PROPERTIES ( STDMETHODCALLTYPE *GetCustomHeapProperties )( - ID3D12Device3 * This, - _In_ UINT nodeMask, - D3D12_HEAP_TYPE heapType); - -#else - D3D12_HEAP_PROPERTIES *( STDMETHODCALLTYPE *GetCustomHeapProperties )( - ID3D12Device3 * This, - D3D12_HEAP_PROPERTIES * RetVal, - _In_ UINT nodeMask, - D3D12_HEAP_TYPE heapType); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommittedResource) - HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource )( - ID3D12Device3 * This, - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialResourceState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riidResource, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateHeap) - HRESULT ( STDMETHODCALLTYPE *CreateHeap )( - ID3D12Device3 * This, - _In_ const D3D12_HEAP_DESC *pDesc, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, CreatePlacedResource) - HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource )( - ID3D12Device3 * This, - _In_ ID3D12Heap *pHeap, - UINT64 HeapOffset, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateReservedResource) - HRESULT ( STDMETHODCALLTYPE *CreateReservedResource )( - ID3D12Device3 * This, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateSharedHandle) - HRESULT ( STDMETHODCALLTYPE *CreateSharedHandle )( - ID3D12Device3 * This, - _In_ ID3D12DeviceChild *pObject, - _In_opt_ const SECURITY_ATTRIBUTES *pAttributes, - DWORD Access, - _In_opt_ LPCWSTR Name, - _Out_ HANDLE *pHandle); - - DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandle) - HRESULT ( STDMETHODCALLTYPE *OpenSharedHandle )( - ID3D12Device3 * This, - _In_ HANDLE NTHandle, - REFIID riid, - _COM_Outptr_opt_ void **ppvObj); - - DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandleByName) - HRESULT ( STDMETHODCALLTYPE *OpenSharedHandleByName )( - ID3D12Device3 * This, - _In_ LPCWSTR Name, - DWORD Access, - /* [annotation][out] */ - _Out_ HANDLE *pNTHandle); - - DECLSPEC_XFGVIRT(ID3D12Device, MakeResident) - HRESULT ( STDMETHODCALLTYPE *MakeResident )( - ID3D12Device3 * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects); - - DECLSPEC_XFGVIRT(ID3D12Device, Evict) - HRESULT ( STDMETHODCALLTYPE *Evict )( - ID3D12Device3 * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateFence) - HRESULT ( STDMETHODCALLTYPE *CreateFence )( - ID3D12Device3 * This, - UINT64 InitialValue, - D3D12_FENCE_FLAGS Flags, - REFIID riid, - _COM_Outptr_ void **ppFence); - - DECLSPEC_XFGVIRT(ID3D12Device, GetDeviceRemovedReason) - HRESULT ( STDMETHODCALLTYPE *GetDeviceRemovedReason )( - ID3D12Device3 * This); - - DECLSPEC_XFGVIRT(ID3D12Device, GetCopyableFootprints) - void ( STDMETHODCALLTYPE *GetCopyableFootprints )( - ID3D12Device3 * This, - _In_ const D3D12_RESOURCE_DESC *pResourceDesc, - _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, - _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, - UINT64 BaseOffset, - _Out_writes_opt_(NumSubresources) D3D12_PLACED_SUBRESOURCE_FOOTPRINT *pLayouts, - _Out_writes_opt_(NumSubresources) UINT *pNumRows, - _Out_writes_opt_(NumSubresources) UINT64 *pRowSizeInBytes, - _Out_opt_ UINT64 *pTotalBytes); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateQueryHeap) - HRESULT ( STDMETHODCALLTYPE *CreateQueryHeap )( - ID3D12Device3 * This, - _In_ const D3D12_QUERY_HEAP_DESC *pDesc, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, SetStablePowerState) - HRESULT ( STDMETHODCALLTYPE *SetStablePowerState )( - ID3D12Device3 * This, - BOOL Enable); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandSignature) - HRESULT ( STDMETHODCALLTYPE *CreateCommandSignature )( - ID3D12Device3 * This, - _In_ const D3D12_COMMAND_SIGNATURE_DESC *pDesc, - _In_opt_ ID3D12RootSignature *pRootSignature, - REFIID riid, - _COM_Outptr_opt_ void **ppvCommandSignature); - - DECLSPEC_XFGVIRT(ID3D12Device, GetResourceTiling) - void ( STDMETHODCALLTYPE *GetResourceTiling )( - ID3D12Device3 * This, - _In_ ID3D12Resource *pTiledResource, - _Out_opt_ UINT *pNumTilesForEntireResource, - _Out_opt_ D3D12_PACKED_MIP_INFO *pPackedMipDesc, - _Out_opt_ D3D12_TILE_SHAPE *pStandardTileShapeForNonPackedMips, - _Inout_opt_ UINT *pNumSubresourceTilings, - _In_ UINT FirstSubresourceTilingToGet, - _Out_writes_(*pNumSubresourceTilings) D3D12_SUBRESOURCE_TILING *pSubresourceTilingsForNonPackedMips); - - DECLSPEC_XFGVIRT(ID3D12Device, GetAdapterLuid) -#if !defined(_WIN32) - LUID ( STDMETHODCALLTYPE *GetAdapterLuid )( - ID3D12Device3 * This); - -#else - LUID *( STDMETHODCALLTYPE *GetAdapterLuid )( - ID3D12Device3 * This, - LUID * RetVal); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device1, CreatePipelineLibrary) - HRESULT ( STDMETHODCALLTYPE *CreatePipelineLibrary )( - ID3D12Device3 * This, - _In_reads_(BlobLength) const void *pLibraryBlob, - SIZE_T BlobLength, - REFIID riid, - _COM_Outptr_ void **ppPipelineLibrary); - - DECLSPEC_XFGVIRT(ID3D12Device1, SetEventOnMultipleFenceCompletion) - HRESULT ( STDMETHODCALLTYPE *SetEventOnMultipleFenceCompletion )( - ID3D12Device3 * This, - _In_reads_(NumFences) ID3D12Fence *const *ppFences, - _In_reads_(NumFences) const UINT64 *pFenceValues, - UINT NumFences, - D3D12_MULTIPLE_FENCE_WAIT_FLAGS Flags, - HANDLE hEvent); - - DECLSPEC_XFGVIRT(ID3D12Device1, SetResidencyPriority) - HRESULT ( STDMETHODCALLTYPE *SetResidencyPriority )( - ID3D12Device3 * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects, - _In_reads_(NumObjects) const D3D12_RESIDENCY_PRIORITY *pPriorities); - - DECLSPEC_XFGVIRT(ID3D12Device2, CreatePipelineState) - HRESULT ( STDMETHODCALLTYPE *CreatePipelineState )( - ID3D12Device3 * This, - const D3D12_PIPELINE_STATE_STREAM_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromAddress) - HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromAddress )( - ID3D12Device3 * This, - _In_ const void *pAddress, - REFIID riid, - _COM_Outptr_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromFileMapping) - HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromFileMapping )( - ID3D12Device3 * This, - _In_ HANDLE hFileMapping, - REFIID riid, - _COM_Outptr_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device3, EnqueueMakeResident) - HRESULT ( STDMETHODCALLTYPE *EnqueueMakeResident )( - ID3D12Device3 * This, - D3D12_RESIDENCY_FLAGS Flags, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects, - _In_ ID3D12Fence *pFenceToSignal, - UINT64 FenceValueToSignal); - - END_INTERFACE - } ID3D12Device3Vtbl; - - interface ID3D12Device3 - { - CONST_VTBL struct ID3D12Device3Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12Device3_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12Device3_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12Device3_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12Device3_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12Device3_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12Device3_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12Device3_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12Device3_GetNodeCount(This) \ - ( (This)->lpVtbl -> GetNodeCount(This) ) - -#define ID3D12Device3_CreateCommandQueue(This,pDesc,riid,ppCommandQueue) \ - ( (This)->lpVtbl -> CreateCommandQueue(This,pDesc,riid,ppCommandQueue) ) - -#define ID3D12Device3_CreateCommandAllocator(This,type,riid,ppCommandAllocator) \ - ( (This)->lpVtbl -> CreateCommandAllocator(This,type,riid,ppCommandAllocator) ) - -#define ID3D12Device3_CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) ) - -#define ID3D12Device3_CreateComputePipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreateComputePipelineState(This,pDesc,riid,ppPipelineState) ) - -#define ID3D12Device3_CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) \ - ( (This)->lpVtbl -> CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) ) - -#define ID3D12Device3_CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) \ - ( (This)->lpVtbl -> CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) ) - -#define ID3D12Device3_CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) ) - -#define ID3D12Device3_GetDescriptorHandleIncrementSize(This,DescriptorHeapType) \ - ( (This)->lpVtbl -> GetDescriptorHandleIncrementSize(This,DescriptorHeapType) ) - -#define ID3D12Device3_CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) \ - ( (This)->lpVtbl -> CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) ) - -#define ID3D12Device3_CreateConstantBufferView(This,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateConstantBufferView(This,pDesc,DestDescriptor) ) - -#define ID3D12Device3_CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device3_CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) ) - -#define ID3D12Device3_CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device3_CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device3_CreateSampler(This,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateSampler(This,pDesc,DestDescriptor) ) - -#define ID3D12Device3_CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) \ - ( (This)->lpVtbl -> CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) ) - -#define ID3D12Device3_CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) \ - ( (This)->lpVtbl -> CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) ) -#if !defined(_WIN32) - -#define ID3D12Device3_GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) ) -#else -#define ID3D12Device3_GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) ) -#endif -#if !defined(_WIN32) - -#define ID3D12Device3_GetCustomHeapProperties(This,nodeMask,heapType) \ - ( (This)->lpVtbl -> GetCustomHeapProperties(This,nodeMask,heapType) ) -#else -#define ID3D12Device3_GetCustomHeapProperties(This,RetVal,nodeMask,heapType) \ - ( (This)->lpVtbl -> GetCustomHeapProperties(This,RetVal,nodeMask,heapType) ) -#endif - -#define ID3D12Device3_CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) \ - ( (This)->lpVtbl -> CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) ) - -#define ID3D12Device3_CreateHeap(This,pDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateHeap(This,pDesc,riid,ppvHeap) ) - -#define ID3D12Device3_CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) \ - ( (This)->lpVtbl -> CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) - -#define ID3D12Device3_CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) \ - ( (This)->lpVtbl -> CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) - -#define ID3D12Device3_CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) \ - ( (This)->lpVtbl -> CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) ) - -#define ID3D12Device3_OpenSharedHandle(This,NTHandle,riid,ppvObj) \ - ( (This)->lpVtbl -> OpenSharedHandle(This,NTHandle,riid,ppvObj) ) - -#define ID3D12Device3_OpenSharedHandleByName(This,Name,Access,pNTHandle) \ - ( (This)->lpVtbl -> OpenSharedHandleByName(This,Name,Access,pNTHandle) ) - -#define ID3D12Device3_MakeResident(This,NumObjects,ppObjects) \ - ( (This)->lpVtbl -> MakeResident(This,NumObjects,ppObjects) ) - -#define ID3D12Device3_Evict(This,NumObjects,ppObjects) \ - ( (This)->lpVtbl -> Evict(This,NumObjects,ppObjects) ) - -#define ID3D12Device3_CreateFence(This,InitialValue,Flags,riid,ppFence) \ - ( (This)->lpVtbl -> CreateFence(This,InitialValue,Flags,riid,ppFence) ) - -#define ID3D12Device3_GetDeviceRemovedReason(This) \ - ( (This)->lpVtbl -> GetDeviceRemovedReason(This) ) - -#define ID3D12Device3_GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) \ - ( (This)->lpVtbl -> GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) - -#define ID3D12Device3_CreateQueryHeap(This,pDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateQueryHeap(This,pDesc,riid,ppvHeap) ) - -#define ID3D12Device3_SetStablePowerState(This,Enable) \ - ( (This)->lpVtbl -> SetStablePowerState(This,Enable) ) - -#define ID3D12Device3_CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) \ - ( (This)->lpVtbl -> CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) ) - -#define ID3D12Device3_GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) \ - ( (This)->lpVtbl -> GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) ) -#if !defined(_WIN32) - -#define ID3D12Device3_GetAdapterLuid(This) \ - ( (This)->lpVtbl -> GetAdapterLuid(This) ) -#else -#define ID3D12Device3_GetAdapterLuid(This,RetVal) \ - ( (This)->lpVtbl -> GetAdapterLuid(This,RetVal) ) -#endif - -#define ID3D12Device3_CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) \ - ( (This)->lpVtbl -> CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) ) - -#define ID3D12Device3_SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) \ - ( (This)->lpVtbl -> SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) ) - -#define ID3D12Device3_SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) \ - ( (This)->lpVtbl -> SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) ) - -#define ID3D12Device3_CreatePipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreatePipelineState(This,pDesc,riid,ppPipelineState) ) - -#define ID3D12Device3_OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap) \ - ( (This)->lpVtbl -> OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap) ) - -#define ID3D12Device3_OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap) \ - ( (This)->lpVtbl -> OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap) ) - -#define ID3D12Device3_EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal) \ - ( (This)->lpVtbl -> EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12Device3_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12_0000_0026 */ -/* [local] */ - -typedef -enum D3D12_COMMAND_LIST_FLAGS - { - D3D12_COMMAND_LIST_FLAG_NONE = 0 - } D3D12_COMMAND_LIST_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_COMMAND_LIST_FLAGS ) -typedef -enum D3D12_COMMAND_POOL_FLAGS - { - D3D12_COMMAND_POOL_FLAG_NONE = 0 - } D3D12_COMMAND_POOL_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_COMMAND_POOL_FLAGS ) -typedef -enum D3D12_COMMAND_RECORDER_FLAGS - { - D3D12_COMMAND_RECORDER_FLAG_NONE = 0 - } D3D12_COMMAND_RECORDER_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_COMMAND_RECORDER_FLAGS ) -typedef -enum D3D12_PROTECTED_SESSION_STATUS - { - D3D12_PROTECTED_SESSION_STATUS_OK = 0, - D3D12_PROTECTED_SESSION_STATUS_INVALID = 1 - } D3D12_PROTECTED_SESSION_STATUS; - -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0026_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0026_v0_0_s_ifspec; - -#ifndef __ID3D12ProtectedSession_INTERFACE_DEFINED__ -#define __ID3D12ProtectedSession_INTERFACE_DEFINED__ - -/* interface ID3D12ProtectedSession */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12ProtectedSession; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("A1533D18-0AC1-4084-85B9-89A96116806B") - ID3D12ProtectedSession : public ID3D12DeviceChild - { - public: - virtual HRESULT STDMETHODCALLTYPE GetStatusFence( - REFIID riid, - _COM_Outptr_opt_ void **ppFence) = 0; - - virtual D3D12_PROTECTED_SESSION_STATUS STDMETHODCALLTYPE GetSessionStatus( void) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12ProtectedSessionVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12ProtectedSession * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12ProtectedSession * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12ProtectedSession * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12ProtectedSession * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12ProtectedSession * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12ProtectedSession * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12ProtectedSession * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12ProtectedSession * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12ProtectedSession, GetStatusFence) - HRESULT ( STDMETHODCALLTYPE *GetStatusFence )( - ID3D12ProtectedSession * This, - REFIID riid, - _COM_Outptr_opt_ void **ppFence); - - DECLSPEC_XFGVIRT(ID3D12ProtectedSession, GetSessionStatus) - D3D12_PROTECTED_SESSION_STATUS ( STDMETHODCALLTYPE *GetSessionStatus )( - ID3D12ProtectedSession * This); - - END_INTERFACE - } ID3D12ProtectedSessionVtbl; - - interface ID3D12ProtectedSession - { - CONST_VTBL struct ID3D12ProtectedSessionVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12ProtectedSession_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12ProtectedSession_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12ProtectedSession_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12ProtectedSession_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12ProtectedSession_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12ProtectedSession_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12ProtectedSession_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12ProtectedSession_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12ProtectedSession_GetStatusFence(This,riid,ppFence) \ - ( (This)->lpVtbl -> GetStatusFence(This,riid,ppFence) ) - -#define ID3D12ProtectedSession_GetSessionStatus(This) \ - ( (This)->lpVtbl -> GetSessionStatus(This) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12ProtectedSession_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12_0000_0027 */ -/* [local] */ - -typedef -enum D3D12_PROTECTED_RESOURCE_SESSION_SUPPORT_FLAGS - { - D3D12_PROTECTED_RESOURCE_SESSION_SUPPORT_FLAG_NONE = 0, - D3D12_PROTECTED_RESOURCE_SESSION_SUPPORT_FLAG_SUPPORTED = 0x1 - } D3D12_PROTECTED_RESOURCE_SESSION_SUPPORT_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_PROTECTED_RESOURCE_SESSION_SUPPORT_FLAGS ) -typedef struct D3D12_FEATURE_DATA_PROTECTED_RESOURCE_SESSION_SUPPORT - { - UINT NodeIndex; - D3D12_PROTECTED_RESOURCE_SESSION_SUPPORT_FLAGS Support; - } D3D12_FEATURE_DATA_PROTECTED_RESOURCE_SESSION_SUPPORT; - -typedef -enum D3D12_PROTECTED_RESOURCE_SESSION_FLAGS - { - D3D12_PROTECTED_RESOURCE_SESSION_FLAG_NONE = 0 - } D3D12_PROTECTED_RESOURCE_SESSION_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_PROTECTED_RESOURCE_SESSION_FLAGS ) -typedef struct D3D12_PROTECTED_RESOURCE_SESSION_DESC - { - UINT NodeMask; - D3D12_PROTECTED_RESOURCE_SESSION_FLAGS Flags; - } D3D12_PROTECTED_RESOURCE_SESSION_DESC; - -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0027_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0027_v0_0_s_ifspec; - -#ifndef __ID3D12ProtectedResourceSession_INTERFACE_DEFINED__ -#define __ID3D12ProtectedResourceSession_INTERFACE_DEFINED__ - -/* interface ID3D12ProtectedResourceSession */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12ProtectedResourceSession; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("6CD696F4-F289-40CC-8091-5A6C0A099C3D") - ID3D12ProtectedResourceSession : public ID3D12ProtectedSession - { - public: -#if defined(_MSC_VER) || !defined(_WIN32) - virtual D3D12_PROTECTED_RESOURCE_SESSION_DESC STDMETHODCALLTYPE GetDesc( void) = 0; -#else - virtual D3D12_PROTECTED_RESOURCE_SESSION_DESC *STDMETHODCALLTYPE GetDesc( - D3D12_PROTECTED_RESOURCE_SESSION_DESC * RetVal) = 0; -#endif - - }; - - -#else /* C style interface */ - - typedef struct ID3D12ProtectedResourceSessionVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12ProtectedResourceSession * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12ProtectedResourceSession * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12ProtectedResourceSession * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12ProtectedResourceSession * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12ProtectedResourceSession * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12ProtectedResourceSession * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12ProtectedResourceSession * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12ProtectedResourceSession * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12ProtectedSession, GetStatusFence) - HRESULT ( STDMETHODCALLTYPE *GetStatusFence )( - ID3D12ProtectedResourceSession * This, - REFIID riid, - _COM_Outptr_opt_ void **ppFence); - - DECLSPEC_XFGVIRT(ID3D12ProtectedSession, GetSessionStatus) - D3D12_PROTECTED_SESSION_STATUS ( STDMETHODCALLTYPE *GetSessionStatus )( - ID3D12ProtectedResourceSession * This); - - DECLSPEC_XFGVIRT(ID3D12ProtectedResourceSession, GetDesc) -#if !defined(_WIN32) - D3D12_PROTECTED_RESOURCE_SESSION_DESC ( STDMETHODCALLTYPE *GetDesc )( - ID3D12ProtectedResourceSession * This); - -#else - D3D12_PROTECTED_RESOURCE_SESSION_DESC *( STDMETHODCALLTYPE *GetDesc )( - ID3D12ProtectedResourceSession * This, - D3D12_PROTECTED_RESOURCE_SESSION_DESC * RetVal); - -#endif - - END_INTERFACE - } ID3D12ProtectedResourceSessionVtbl; - - interface ID3D12ProtectedResourceSession - { - CONST_VTBL struct ID3D12ProtectedResourceSessionVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12ProtectedResourceSession_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12ProtectedResourceSession_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12ProtectedResourceSession_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12ProtectedResourceSession_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12ProtectedResourceSession_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12ProtectedResourceSession_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12ProtectedResourceSession_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12ProtectedResourceSession_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12ProtectedResourceSession_GetStatusFence(This,riid,ppFence) \ - ( (This)->lpVtbl -> GetStatusFence(This,riid,ppFence) ) - -#define ID3D12ProtectedResourceSession_GetSessionStatus(This) \ - ( (This)->lpVtbl -> GetSessionStatus(This) ) - -#if !defined(_WIN32) - -#define ID3D12ProtectedResourceSession_GetDesc(This) \ - ( (This)->lpVtbl -> GetDesc(This) ) -#else -#define ID3D12ProtectedResourceSession_GetDesc(This,RetVal) \ - ( (This)->lpVtbl -> GetDesc(This,RetVal) ) -#endif - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12ProtectedResourceSession_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12Device4_INTERFACE_DEFINED__ -#define __ID3D12Device4_INTERFACE_DEFINED__ - -/* interface ID3D12Device4 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12Device4; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("e865df17-a9ee-46f9-a463-3098315aa2e5") - ID3D12Device4 : public ID3D12Device3 - { - public: - virtual HRESULT STDMETHODCALLTYPE CreateCommandList1( - _In_ UINT nodeMask, - _In_ D3D12_COMMAND_LIST_TYPE type, - _In_ D3D12_COMMAND_LIST_FLAGS flags, - REFIID riid, - _COM_Outptr_ void **ppCommandList) = 0; - - virtual HRESULT STDMETHODCALLTYPE CreateProtectedResourceSession( - _In_ const D3D12_PROTECTED_RESOURCE_SESSION_DESC *pDesc, - _In_ REFIID riid, - _COM_Outptr_ void **ppSession) = 0; - - virtual HRESULT STDMETHODCALLTYPE CreateCommittedResource1( - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialResourceState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riidResource, - _COM_Outptr_opt_ void **ppvResource) = 0; - - virtual HRESULT STDMETHODCALLTYPE CreateHeap1( - _In_ const D3D12_HEAP_DESC *pDesc, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap) = 0; - - virtual HRESULT STDMETHODCALLTYPE CreateReservedResource1( - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource) = 0; - -#if defined(_MSC_VER) || !defined(_WIN32) - virtual D3D12_RESOURCE_ALLOCATION_INFO STDMETHODCALLTYPE GetResourceAllocationInfo1( - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1) = 0; -#else - virtual D3D12_RESOURCE_ALLOCATION_INFO *STDMETHODCALLTYPE GetResourceAllocationInfo1( - D3D12_RESOURCE_ALLOCATION_INFO * RetVal, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1) = 0; -#endif - - }; - - -#else /* C style interface */ - - typedef struct ID3D12Device4Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12Device4 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12Device4 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12Device4 * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12Device4 * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12Device4 * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12Device4 * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12Device4 * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12Device, GetNodeCount) - UINT ( STDMETHODCALLTYPE *GetNodeCount )( - ID3D12Device4 * This); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandQueue) - HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue )( - ID3D12Device4 * This, - _In_ const D3D12_COMMAND_QUEUE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppCommandQueue); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandAllocator) - HRESULT ( STDMETHODCALLTYPE *CreateCommandAllocator )( - ID3D12Device4 * This, - _In_ D3D12_COMMAND_LIST_TYPE type, - REFIID riid, - _COM_Outptr_ void **ppCommandAllocator); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateGraphicsPipelineState) - HRESULT ( STDMETHODCALLTYPE *CreateGraphicsPipelineState )( - ID3D12Device4 * This, - _In_ const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateComputePipelineState) - HRESULT ( STDMETHODCALLTYPE *CreateComputePipelineState )( - ID3D12Device4 * This, - _In_ const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandList) - HRESULT ( STDMETHODCALLTYPE *CreateCommandList )( - ID3D12Device4 * This, - _In_ UINT nodeMask, - _In_ D3D12_COMMAND_LIST_TYPE type, - _In_ ID3D12CommandAllocator *pCommandAllocator, - _In_opt_ ID3D12PipelineState *pInitialState, - REFIID riid, - _COM_Outptr_ void **ppCommandList); - - DECLSPEC_XFGVIRT(ID3D12Device, CheckFeatureSupport) - HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )( - ID3D12Device4 * This, - D3D12_FEATURE Feature, - _Inout_updates_bytes_(FeatureSupportDataSize) void *pFeatureSupportData, - UINT FeatureSupportDataSize); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateDescriptorHeap) - HRESULT ( STDMETHODCALLTYPE *CreateDescriptorHeap )( - ID3D12Device4 * This, - _In_ const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc, - REFIID riid, - _COM_Outptr_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, GetDescriptorHandleIncrementSize) - UINT ( STDMETHODCALLTYPE *GetDescriptorHandleIncrementSize )( - ID3D12Device4 * This, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateRootSignature) - HRESULT ( STDMETHODCALLTYPE *CreateRootSignature )( - ID3D12Device4 * This, - _In_ UINT nodeMask, - _In_reads_(blobLengthInBytes) const void *pBlobWithRootSignature, - _In_ SIZE_T blobLengthInBytes, - REFIID riid, - _COM_Outptr_ void **ppvRootSignature); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateConstantBufferView) - void ( STDMETHODCALLTYPE *CreateConstantBufferView )( - ID3D12Device4 * This, - _In_opt_ const D3D12_CONSTANT_BUFFER_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateShaderResourceView) - void ( STDMETHODCALLTYPE *CreateShaderResourceView )( - ID3D12Device4 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateUnorderedAccessView) - void ( STDMETHODCALLTYPE *CreateUnorderedAccessView )( - ID3D12Device4 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ ID3D12Resource *pCounterResource, - _In_opt_ const D3D12_UNORDERED_ACCESS_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateRenderTargetView) - void ( STDMETHODCALLTYPE *CreateRenderTargetView )( - ID3D12Device4 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_RENDER_TARGET_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateDepthStencilView) - void ( STDMETHODCALLTYPE *CreateDepthStencilView )( - ID3D12Device4 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DEPTH_STENCIL_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateSampler) - void ( STDMETHODCALLTYPE *CreateSampler )( - ID3D12Device4 * This, - _In_ const D3D12_SAMPLER_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptors) - void ( STDMETHODCALLTYPE *CopyDescriptors )( - ID3D12Device4 * This, - _In_ UINT NumDestDescriptorRanges, - _In_reads_(NumDestDescriptorRanges) const D3D12_CPU_DESCRIPTOR_HANDLE *pDestDescriptorRangeStarts, - _In_reads_opt_(NumDestDescriptorRanges) const UINT *pDestDescriptorRangeSizes, - _In_ UINT NumSrcDescriptorRanges, - _In_reads_(NumSrcDescriptorRanges) const D3D12_CPU_DESCRIPTOR_HANDLE *pSrcDescriptorRangeStarts, - _In_reads_opt_(NumSrcDescriptorRanges) const UINT *pSrcDescriptorRangeSizes, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType); - - DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptorsSimple) - void ( STDMETHODCALLTYPE *CopyDescriptorsSimple )( - ID3D12Device4 * This, - _In_ UINT NumDescriptors, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType); - - DECLSPEC_XFGVIRT(ID3D12Device, GetResourceAllocationInfo) -#if !defined(_WIN32) - D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo )( - ID3D12Device4 * This, - _In_ UINT visibleMask, - _In_ UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs); - -#else - D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo )( - ID3D12Device4 * This, - D3D12_RESOURCE_ALLOCATION_INFO * RetVal, - _In_ UINT visibleMask, - _In_ UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device, GetCustomHeapProperties) -#if !defined(_WIN32) - D3D12_HEAP_PROPERTIES ( STDMETHODCALLTYPE *GetCustomHeapProperties )( - ID3D12Device4 * This, - _In_ UINT nodeMask, - D3D12_HEAP_TYPE heapType); - -#else - D3D12_HEAP_PROPERTIES *( STDMETHODCALLTYPE *GetCustomHeapProperties )( - ID3D12Device4 * This, - D3D12_HEAP_PROPERTIES * RetVal, - _In_ UINT nodeMask, - D3D12_HEAP_TYPE heapType); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommittedResource) - HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource )( - ID3D12Device4 * This, - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialResourceState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riidResource, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateHeap) - HRESULT ( STDMETHODCALLTYPE *CreateHeap )( - ID3D12Device4 * This, - _In_ const D3D12_HEAP_DESC *pDesc, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, CreatePlacedResource) - HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource )( - ID3D12Device4 * This, - _In_ ID3D12Heap *pHeap, - UINT64 HeapOffset, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateReservedResource) - HRESULT ( STDMETHODCALLTYPE *CreateReservedResource )( - ID3D12Device4 * This, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateSharedHandle) - HRESULT ( STDMETHODCALLTYPE *CreateSharedHandle )( - ID3D12Device4 * This, - _In_ ID3D12DeviceChild *pObject, - _In_opt_ const SECURITY_ATTRIBUTES *pAttributes, - DWORD Access, - _In_opt_ LPCWSTR Name, - _Out_ HANDLE *pHandle); - - DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandle) - HRESULT ( STDMETHODCALLTYPE *OpenSharedHandle )( - ID3D12Device4 * This, - _In_ HANDLE NTHandle, - REFIID riid, - _COM_Outptr_opt_ void **ppvObj); - - DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandleByName) - HRESULT ( STDMETHODCALLTYPE *OpenSharedHandleByName )( - ID3D12Device4 * This, - _In_ LPCWSTR Name, - DWORD Access, - /* [annotation][out] */ - _Out_ HANDLE *pNTHandle); - - DECLSPEC_XFGVIRT(ID3D12Device, MakeResident) - HRESULT ( STDMETHODCALLTYPE *MakeResident )( - ID3D12Device4 * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects); - - DECLSPEC_XFGVIRT(ID3D12Device, Evict) - HRESULT ( STDMETHODCALLTYPE *Evict )( - ID3D12Device4 * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateFence) - HRESULT ( STDMETHODCALLTYPE *CreateFence )( - ID3D12Device4 * This, - UINT64 InitialValue, - D3D12_FENCE_FLAGS Flags, - REFIID riid, - _COM_Outptr_ void **ppFence); - - DECLSPEC_XFGVIRT(ID3D12Device, GetDeviceRemovedReason) - HRESULT ( STDMETHODCALLTYPE *GetDeviceRemovedReason )( - ID3D12Device4 * This); - - DECLSPEC_XFGVIRT(ID3D12Device, GetCopyableFootprints) - void ( STDMETHODCALLTYPE *GetCopyableFootprints )( - ID3D12Device4 * This, - _In_ const D3D12_RESOURCE_DESC *pResourceDesc, - _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, - _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, - UINT64 BaseOffset, - _Out_writes_opt_(NumSubresources) D3D12_PLACED_SUBRESOURCE_FOOTPRINT *pLayouts, - _Out_writes_opt_(NumSubresources) UINT *pNumRows, - _Out_writes_opt_(NumSubresources) UINT64 *pRowSizeInBytes, - _Out_opt_ UINT64 *pTotalBytes); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateQueryHeap) - HRESULT ( STDMETHODCALLTYPE *CreateQueryHeap )( - ID3D12Device4 * This, - _In_ const D3D12_QUERY_HEAP_DESC *pDesc, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, SetStablePowerState) - HRESULT ( STDMETHODCALLTYPE *SetStablePowerState )( - ID3D12Device4 * This, - BOOL Enable); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandSignature) - HRESULT ( STDMETHODCALLTYPE *CreateCommandSignature )( - ID3D12Device4 * This, - _In_ const D3D12_COMMAND_SIGNATURE_DESC *pDesc, - _In_opt_ ID3D12RootSignature *pRootSignature, - REFIID riid, - _COM_Outptr_opt_ void **ppvCommandSignature); - - DECLSPEC_XFGVIRT(ID3D12Device, GetResourceTiling) - void ( STDMETHODCALLTYPE *GetResourceTiling )( - ID3D12Device4 * This, - _In_ ID3D12Resource *pTiledResource, - _Out_opt_ UINT *pNumTilesForEntireResource, - _Out_opt_ D3D12_PACKED_MIP_INFO *pPackedMipDesc, - _Out_opt_ D3D12_TILE_SHAPE *pStandardTileShapeForNonPackedMips, - _Inout_opt_ UINT *pNumSubresourceTilings, - _In_ UINT FirstSubresourceTilingToGet, - _Out_writes_(*pNumSubresourceTilings) D3D12_SUBRESOURCE_TILING *pSubresourceTilingsForNonPackedMips); - - DECLSPEC_XFGVIRT(ID3D12Device, GetAdapterLuid) -#if !defined(_WIN32) - LUID ( STDMETHODCALLTYPE *GetAdapterLuid )( - ID3D12Device4 * This); - -#else - LUID *( STDMETHODCALLTYPE *GetAdapterLuid )( - ID3D12Device4 * This, - LUID * RetVal); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device1, CreatePipelineLibrary) - HRESULT ( STDMETHODCALLTYPE *CreatePipelineLibrary )( - ID3D12Device4 * This, - _In_reads_(BlobLength) const void *pLibraryBlob, - SIZE_T BlobLength, - REFIID riid, - _COM_Outptr_ void **ppPipelineLibrary); - - DECLSPEC_XFGVIRT(ID3D12Device1, SetEventOnMultipleFenceCompletion) - HRESULT ( STDMETHODCALLTYPE *SetEventOnMultipleFenceCompletion )( - ID3D12Device4 * This, - _In_reads_(NumFences) ID3D12Fence *const *ppFences, - _In_reads_(NumFences) const UINT64 *pFenceValues, - UINT NumFences, - D3D12_MULTIPLE_FENCE_WAIT_FLAGS Flags, - HANDLE hEvent); - - DECLSPEC_XFGVIRT(ID3D12Device1, SetResidencyPriority) - HRESULT ( STDMETHODCALLTYPE *SetResidencyPriority )( - ID3D12Device4 * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects, - _In_reads_(NumObjects) const D3D12_RESIDENCY_PRIORITY *pPriorities); - - DECLSPEC_XFGVIRT(ID3D12Device2, CreatePipelineState) - HRESULT ( STDMETHODCALLTYPE *CreatePipelineState )( - ID3D12Device4 * This, - const D3D12_PIPELINE_STATE_STREAM_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromAddress) - HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromAddress )( - ID3D12Device4 * This, - _In_ const void *pAddress, - REFIID riid, - _COM_Outptr_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromFileMapping) - HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromFileMapping )( - ID3D12Device4 * This, - _In_ HANDLE hFileMapping, - REFIID riid, - _COM_Outptr_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device3, EnqueueMakeResident) - HRESULT ( STDMETHODCALLTYPE *EnqueueMakeResident )( - ID3D12Device4 * This, - D3D12_RESIDENCY_FLAGS Flags, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects, - _In_ ID3D12Fence *pFenceToSignal, - UINT64 FenceValueToSignal); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommandList1) - HRESULT ( STDMETHODCALLTYPE *CreateCommandList1 )( - ID3D12Device4 * This, - _In_ UINT nodeMask, - _In_ D3D12_COMMAND_LIST_TYPE type, - _In_ D3D12_COMMAND_LIST_FLAGS flags, - REFIID riid, - _COM_Outptr_ void **ppCommandList); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateProtectedResourceSession) - HRESULT ( STDMETHODCALLTYPE *CreateProtectedResourceSession )( - ID3D12Device4 * This, - _In_ const D3D12_PROTECTED_RESOURCE_SESSION_DESC *pDesc, - _In_ REFIID riid, - _COM_Outptr_ void **ppSession); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommittedResource1) - HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource1 )( - ID3D12Device4 * This, - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialResourceState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riidResource, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateHeap1) - HRESULT ( STDMETHODCALLTYPE *CreateHeap1 )( - ID3D12Device4 * This, - _In_ const D3D12_HEAP_DESC *pDesc, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateReservedResource1) - HRESULT ( STDMETHODCALLTYPE *CreateReservedResource1 )( - ID3D12Device4 * This, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device4, GetResourceAllocationInfo1) -#if !defined(_WIN32) - D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( - ID3D12Device4 * This, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); - -#else - D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( - ID3D12Device4 * This, - D3D12_RESOURCE_ALLOCATION_INFO * RetVal, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); - -#endif - - END_INTERFACE - } ID3D12Device4Vtbl; - - interface ID3D12Device4 - { - CONST_VTBL struct ID3D12Device4Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12Device4_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12Device4_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12Device4_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12Device4_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12Device4_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12Device4_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12Device4_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12Device4_GetNodeCount(This) \ - ( (This)->lpVtbl -> GetNodeCount(This) ) - -#define ID3D12Device4_CreateCommandQueue(This,pDesc,riid,ppCommandQueue) \ - ( (This)->lpVtbl -> CreateCommandQueue(This,pDesc,riid,ppCommandQueue) ) - -#define ID3D12Device4_CreateCommandAllocator(This,type,riid,ppCommandAllocator) \ - ( (This)->lpVtbl -> CreateCommandAllocator(This,type,riid,ppCommandAllocator) ) - -#define ID3D12Device4_CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) ) - -#define ID3D12Device4_CreateComputePipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreateComputePipelineState(This,pDesc,riid,ppPipelineState) ) - -#define ID3D12Device4_CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) \ - ( (This)->lpVtbl -> CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) ) - -#define ID3D12Device4_CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) \ - ( (This)->lpVtbl -> CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) ) - -#define ID3D12Device4_CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) ) - -#define ID3D12Device4_GetDescriptorHandleIncrementSize(This,DescriptorHeapType) \ - ( (This)->lpVtbl -> GetDescriptorHandleIncrementSize(This,DescriptorHeapType) ) - -#define ID3D12Device4_CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) \ - ( (This)->lpVtbl -> CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) ) - -#define ID3D12Device4_CreateConstantBufferView(This,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateConstantBufferView(This,pDesc,DestDescriptor) ) - -#define ID3D12Device4_CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device4_CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) ) - -#define ID3D12Device4_CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device4_CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device4_CreateSampler(This,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateSampler(This,pDesc,DestDescriptor) ) - -#define ID3D12Device4_CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) \ - ( (This)->lpVtbl -> CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) ) - -#define ID3D12Device4_CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) \ - ( (This)->lpVtbl -> CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) ) -#if !defined(_WIN32) - -#define ID3D12Device4_GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) ) -#else -#define ID3D12Device4_GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) ) -#endif -#if !defined(_WIN32) - -#define ID3D12Device4_GetCustomHeapProperties(This,nodeMask,heapType) \ - ( (This)->lpVtbl -> GetCustomHeapProperties(This,nodeMask,heapType) ) -#else -#define ID3D12Device4_GetCustomHeapProperties(This,RetVal,nodeMask,heapType) \ - ( (This)->lpVtbl -> GetCustomHeapProperties(This,RetVal,nodeMask,heapType) ) -#endif - -#define ID3D12Device4_CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) \ - ( (This)->lpVtbl -> CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) ) - -#define ID3D12Device4_CreateHeap(This,pDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateHeap(This,pDesc,riid,ppvHeap) ) - -#define ID3D12Device4_CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) \ - ( (This)->lpVtbl -> CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) - -#define ID3D12Device4_CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) \ - ( (This)->lpVtbl -> CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) - -#define ID3D12Device4_CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) \ - ( (This)->lpVtbl -> CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) ) - -#define ID3D12Device4_OpenSharedHandle(This,NTHandle,riid,ppvObj) \ - ( (This)->lpVtbl -> OpenSharedHandle(This,NTHandle,riid,ppvObj) ) - -#define ID3D12Device4_OpenSharedHandleByName(This,Name,Access,pNTHandle) \ - ( (This)->lpVtbl -> OpenSharedHandleByName(This,Name,Access,pNTHandle) ) - -#define ID3D12Device4_MakeResident(This,NumObjects,ppObjects) \ - ( (This)->lpVtbl -> MakeResident(This,NumObjects,ppObjects) ) - -#define ID3D12Device4_Evict(This,NumObjects,ppObjects) \ - ( (This)->lpVtbl -> Evict(This,NumObjects,ppObjects) ) - -#define ID3D12Device4_CreateFence(This,InitialValue,Flags,riid,ppFence) \ - ( (This)->lpVtbl -> CreateFence(This,InitialValue,Flags,riid,ppFence) ) - -#define ID3D12Device4_GetDeviceRemovedReason(This) \ - ( (This)->lpVtbl -> GetDeviceRemovedReason(This) ) - -#define ID3D12Device4_GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) \ - ( (This)->lpVtbl -> GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) - -#define ID3D12Device4_CreateQueryHeap(This,pDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateQueryHeap(This,pDesc,riid,ppvHeap) ) - -#define ID3D12Device4_SetStablePowerState(This,Enable) \ - ( (This)->lpVtbl -> SetStablePowerState(This,Enable) ) - -#define ID3D12Device4_CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) \ - ( (This)->lpVtbl -> CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) ) - -#define ID3D12Device4_GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) \ - ( (This)->lpVtbl -> GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) ) -#if !defined(_WIN32) - -#define ID3D12Device4_GetAdapterLuid(This) \ - ( (This)->lpVtbl -> GetAdapterLuid(This) ) -#else -#define ID3D12Device4_GetAdapterLuid(This,RetVal) \ - ( (This)->lpVtbl -> GetAdapterLuid(This,RetVal) ) -#endif - -#define ID3D12Device4_CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) \ - ( (This)->lpVtbl -> CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) ) - -#define ID3D12Device4_SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) \ - ( (This)->lpVtbl -> SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) ) - -#define ID3D12Device4_SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) \ - ( (This)->lpVtbl -> SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) ) - -#define ID3D12Device4_CreatePipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreatePipelineState(This,pDesc,riid,ppPipelineState) ) - -#define ID3D12Device4_OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap) \ - ( (This)->lpVtbl -> OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap) ) - -#define ID3D12Device4_OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap) \ - ( (This)->lpVtbl -> OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap) ) - -#define ID3D12Device4_EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal) \ - ( (This)->lpVtbl -> EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal) ) - -#define ID3D12Device4_CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList) \ - ( (This)->lpVtbl -> CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList) ) - -#define ID3D12Device4_CreateProtectedResourceSession(This,pDesc,riid,ppSession) \ - ( (This)->lpVtbl -> CreateProtectedResourceSession(This,pDesc,riid,ppSession) ) - -#define ID3D12Device4_CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) \ - ( (This)->lpVtbl -> CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) ) - -#define ID3D12Device4_CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap) ) - -#define ID3D12Device4_CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource) \ - ( (This)->lpVtbl -> CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource) ) -#if !defined(_WIN32) - -#define ID3D12Device4_GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) -#else -#define ID3D12Device4_GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) -#endif - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12Device4_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12_0000_0029 */ -/* [local] */ - -typedef -enum D3D12_LIFETIME_STATE - { - D3D12_LIFETIME_STATE_IN_USE = 0, - D3D12_LIFETIME_STATE_NOT_IN_USE = ( D3D12_LIFETIME_STATE_IN_USE + 1 ) - } D3D12_LIFETIME_STATE; - -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0029_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0029_v0_0_s_ifspec; - -#ifndef __ID3D12LifetimeOwner_INTERFACE_DEFINED__ -#define __ID3D12LifetimeOwner_INTERFACE_DEFINED__ - -/* interface ID3D12LifetimeOwner */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12LifetimeOwner; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("e667af9f-cd56-4f46-83ce-032e595d70a8") - ID3D12LifetimeOwner : public IUnknown - { - public: - virtual void STDMETHODCALLTYPE LifetimeStateUpdated( - D3D12_LIFETIME_STATE NewState) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12LifetimeOwnerVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12LifetimeOwner * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12LifetimeOwner * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12LifetimeOwner * This); - - DECLSPEC_XFGVIRT(ID3D12LifetimeOwner, LifetimeStateUpdated) - void ( STDMETHODCALLTYPE *LifetimeStateUpdated )( - ID3D12LifetimeOwner * This, - D3D12_LIFETIME_STATE NewState); - - END_INTERFACE - } ID3D12LifetimeOwnerVtbl; - - interface ID3D12LifetimeOwner - { - CONST_VTBL struct ID3D12LifetimeOwnerVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12LifetimeOwner_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12LifetimeOwner_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12LifetimeOwner_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12LifetimeOwner_LifetimeStateUpdated(This,NewState) \ - ( (This)->lpVtbl -> LifetimeStateUpdated(This,NewState) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12LifetimeOwner_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12SwapChainAssistant_INTERFACE_DEFINED__ -#define __ID3D12SwapChainAssistant_INTERFACE_DEFINED__ - -/* interface ID3D12SwapChainAssistant */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12SwapChainAssistant; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("f1df64b6-57fd-49cd-8807-c0eb88b45c8f") - ID3D12SwapChainAssistant : public IUnknown - { - public: -#if defined(_MSC_VER) || !defined(_WIN32) - virtual LUID STDMETHODCALLTYPE GetLUID( void) = 0; -#else - virtual LUID *STDMETHODCALLTYPE GetLUID( - LUID * RetVal) = 0; -#endif - - virtual HRESULT STDMETHODCALLTYPE GetSwapChainObject( - REFIID riid, - _COM_Outptr_ void **ppv) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetCurrentResourceAndCommandQueue( - REFIID riidResource, - _COM_Outptr_ void **ppvResource, - REFIID riidQueue, - _COM_Outptr_ void **ppvQueue) = 0; - - virtual HRESULT STDMETHODCALLTYPE InsertImplicitSync( void) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12SwapChainAssistantVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12SwapChainAssistant * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12SwapChainAssistant * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12SwapChainAssistant * This); - - DECLSPEC_XFGVIRT(ID3D12SwapChainAssistant, GetLUID) -#if !defined(_WIN32) - LUID ( STDMETHODCALLTYPE *GetLUID )( - ID3D12SwapChainAssistant * This); - -#else - LUID *( STDMETHODCALLTYPE *GetLUID )( - ID3D12SwapChainAssistant * This, - LUID * RetVal); - -#endif - - DECLSPEC_XFGVIRT(ID3D12SwapChainAssistant, GetSwapChainObject) - HRESULT ( STDMETHODCALLTYPE *GetSwapChainObject )( - ID3D12SwapChainAssistant * This, - REFIID riid, - _COM_Outptr_ void **ppv); - - DECLSPEC_XFGVIRT(ID3D12SwapChainAssistant, GetCurrentResourceAndCommandQueue) - HRESULT ( STDMETHODCALLTYPE *GetCurrentResourceAndCommandQueue )( - ID3D12SwapChainAssistant * This, - REFIID riidResource, - _COM_Outptr_ void **ppvResource, - REFIID riidQueue, - _COM_Outptr_ void **ppvQueue); - - DECLSPEC_XFGVIRT(ID3D12SwapChainAssistant, InsertImplicitSync) - HRESULT ( STDMETHODCALLTYPE *InsertImplicitSync )( - ID3D12SwapChainAssistant * This); - - END_INTERFACE - } ID3D12SwapChainAssistantVtbl; - - interface ID3D12SwapChainAssistant - { - CONST_VTBL struct ID3D12SwapChainAssistantVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12SwapChainAssistant_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12SwapChainAssistant_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12SwapChainAssistant_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#if !defined(_WIN32) - -#define ID3D12SwapChainAssistant_GetLUID(This) \ - ( (This)->lpVtbl -> GetLUID(This) ) -#else -#define ID3D12SwapChainAssistant_GetLUID(This,RetVal) \ - ( (This)->lpVtbl -> GetLUID(This,RetVal) ) -#endif - -#define ID3D12SwapChainAssistant_GetSwapChainObject(This,riid,ppv) \ - ( (This)->lpVtbl -> GetSwapChainObject(This,riid,ppv) ) - -#define ID3D12SwapChainAssistant_GetCurrentResourceAndCommandQueue(This,riidResource,ppvResource,riidQueue,ppvQueue) \ - ( (This)->lpVtbl -> GetCurrentResourceAndCommandQueue(This,riidResource,ppvResource,riidQueue,ppvQueue) ) - -#define ID3D12SwapChainAssistant_InsertImplicitSync(This) \ - ( (This)->lpVtbl -> InsertImplicitSync(This) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12SwapChainAssistant_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12LifetimeTracker_INTERFACE_DEFINED__ -#define __ID3D12LifetimeTracker_INTERFACE_DEFINED__ - -/* interface ID3D12LifetimeTracker */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12LifetimeTracker; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("3fd03d36-4eb1-424a-a582-494ecb8ba813") - ID3D12LifetimeTracker : public ID3D12DeviceChild - { - public: - virtual HRESULT STDMETHODCALLTYPE DestroyOwnedObject( - _In_ ID3D12DeviceChild *pObject) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12LifetimeTrackerVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12LifetimeTracker * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12LifetimeTracker * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12LifetimeTracker * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12LifetimeTracker * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12LifetimeTracker * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12LifetimeTracker * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12LifetimeTracker * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12LifetimeTracker * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12LifetimeTracker, DestroyOwnedObject) - HRESULT ( STDMETHODCALLTYPE *DestroyOwnedObject )( - ID3D12LifetimeTracker * This, - _In_ ID3D12DeviceChild *pObject); - - END_INTERFACE - } ID3D12LifetimeTrackerVtbl; - - interface ID3D12LifetimeTracker - { - CONST_VTBL struct ID3D12LifetimeTrackerVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12LifetimeTracker_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12LifetimeTracker_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12LifetimeTracker_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12LifetimeTracker_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12LifetimeTracker_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12LifetimeTracker_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12LifetimeTracker_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12LifetimeTracker_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12LifetimeTracker_DestroyOwnedObject(This,pObject) \ - ( (This)->lpVtbl -> DestroyOwnedObject(This,pObject) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12LifetimeTracker_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12_0000_0032 */ -/* [local] */ - -typedef -enum D3D12_META_COMMAND_PARAMETER_TYPE - { - D3D12_META_COMMAND_PARAMETER_TYPE_FLOAT = 0, - D3D12_META_COMMAND_PARAMETER_TYPE_UINT64 = 1, - D3D12_META_COMMAND_PARAMETER_TYPE_GPU_VIRTUAL_ADDRESS = 2, - D3D12_META_COMMAND_PARAMETER_TYPE_CPU_DESCRIPTOR_HANDLE_HEAP_TYPE_CBV_SRV_UAV = 3, - D3D12_META_COMMAND_PARAMETER_TYPE_GPU_DESCRIPTOR_HANDLE_HEAP_TYPE_CBV_SRV_UAV = 4 - } D3D12_META_COMMAND_PARAMETER_TYPE; - -typedef -enum D3D12_META_COMMAND_PARAMETER_FLAGS - { - D3D12_META_COMMAND_PARAMETER_FLAG_INPUT = 0x1, - D3D12_META_COMMAND_PARAMETER_FLAG_OUTPUT = 0x2 - } D3D12_META_COMMAND_PARAMETER_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_META_COMMAND_PARAMETER_FLAGS ) -typedef -enum D3D12_META_COMMAND_PARAMETER_STAGE - { - D3D12_META_COMMAND_PARAMETER_STAGE_CREATION = 0, - D3D12_META_COMMAND_PARAMETER_STAGE_INITIALIZATION = 1, - D3D12_META_COMMAND_PARAMETER_STAGE_EXECUTION = 2 - } D3D12_META_COMMAND_PARAMETER_STAGE; - -typedef struct D3D12_META_COMMAND_PARAMETER_DESC - { - LPCWSTR Name; - D3D12_META_COMMAND_PARAMETER_TYPE Type; - D3D12_META_COMMAND_PARAMETER_FLAGS Flags; - D3D12_RESOURCE_STATES RequiredResourceState; - UINT StructureOffset; - } D3D12_META_COMMAND_PARAMETER_DESC; - -typedef -enum D3D12_GRAPHICS_STATES - { - D3D12_GRAPHICS_STATE_NONE = 0, - D3D12_GRAPHICS_STATE_IA_VERTEX_BUFFERS = ( 1 << 0 ) , - D3D12_GRAPHICS_STATE_IA_INDEX_BUFFER = ( 1 << 1 ) , - D3D12_GRAPHICS_STATE_IA_PRIMITIVE_TOPOLOGY = ( 1 << 2 ) , - D3D12_GRAPHICS_STATE_DESCRIPTOR_HEAP = ( 1 << 3 ) , - D3D12_GRAPHICS_STATE_GRAPHICS_ROOT_SIGNATURE = ( 1 << 4 ) , - D3D12_GRAPHICS_STATE_COMPUTE_ROOT_SIGNATURE = ( 1 << 5 ) , - D3D12_GRAPHICS_STATE_RS_VIEWPORTS = ( 1 << 6 ) , - D3D12_GRAPHICS_STATE_RS_SCISSOR_RECTS = ( 1 << 7 ) , - D3D12_GRAPHICS_STATE_PREDICATION = ( 1 << 8 ) , - D3D12_GRAPHICS_STATE_OM_RENDER_TARGETS = ( 1 << 9 ) , - D3D12_GRAPHICS_STATE_OM_STENCIL_REF = ( 1 << 10 ) , - D3D12_GRAPHICS_STATE_OM_BLEND_FACTOR = ( 1 << 11 ) , - D3D12_GRAPHICS_STATE_PIPELINE_STATE = ( 1 << 12 ) , - D3D12_GRAPHICS_STATE_SO_TARGETS = ( 1 << 13 ) , - D3D12_GRAPHICS_STATE_OM_DEPTH_BOUNDS = ( 1 << 14 ) , - D3D12_GRAPHICS_STATE_SAMPLE_POSITIONS = ( 1 << 15 ) , - D3D12_GRAPHICS_STATE_VIEW_INSTANCE_MASK = ( 1 << 16 ) - } D3D12_GRAPHICS_STATES; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_GRAPHICS_STATES ) -typedef struct D3D12_META_COMMAND_DESC - { - GUID Id; - LPCWSTR Name; - D3D12_GRAPHICS_STATES InitializationDirtyState; - D3D12_GRAPHICS_STATES ExecutionDirtyState; - } D3D12_META_COMMAND_DESC; - -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0032_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0032_v0_0_s_ifspec; - -#ifndef __ID3D12StateObject_INTERFACE_DEFINED__ -#define __ID3D12StateObject_INTERFACE_DEFINED__ - -/* interface ID3D12StateObject */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12StateObject; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("47016943-fca8-4594-93ea-af258b55346d") - ID3D12StateObject : public ID3D12Pageable - { - public: - }; - - -#else /* C style interface */ - - typedef struct ID3D12StateObjectVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12StateObject * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12StateObject * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12StateObject * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12StateObject * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12StateObject * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12StateObject * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12StateObject * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12StateObject * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - END_INTERFACE - } ID3D12StateObjectVtbl; - - interface ID3D12StateObject - { - CONST_VTBL struct ID3D12StateObjectVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12StateObject_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12StateObject_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12StateObject_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12StateObject_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12StateObject_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12StateObject_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12StateObject_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12StateObject_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12StateObject_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12StateObjectProperties_INTERFACE_DEFINED__ -#define __ID3D12StateObjectProperties_INTERFACE_DEFINED__ - -/* interface ID3D12StateObjectProperties */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12StateObjectProperties; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("de5fa827-9bf9-4f26-89ff-d7f56fde3860") - ID3D12StateObjectProperties : public IUnknown - { - public: - virtual void *STDMETHODCALLTYPE GetShaderIdentifier( - _In_ LPCWSTR pExportName) = 0; - - virtual UINT64 STDMETHODCALLTYPE GetShaderStackSize( - _In_ LPCWSTR pExportName) = 0; - - virtual UINT64 STDMETHODCALLTYPE GetPipelineStackSize( void) = 0; - - virtual void STDMETHODCALLTYPE SetPipelineStackSize( - UINT64 PipelineStackSizeInBytes) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12StateObjectPropertiesVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12StateObjectProperties * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12StateObjectProperties * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12StateObjectProperties * This); - - DECLSPEC_XFGVIRT(ID3D12StateObjectProperties, GetShaderIdentifier) - void *( STDMETHODCALLTYPE *GetShaderIdentifier )( - ID3D12StateObjectProperties * This, - _In_ LPCWSTR pExportName); - - DECLSPEC_XFGVIRT(ID3D12StateObjectProperties, GetShaderStackSize) - UINT64 ( STDMETHODCALLTYPE *GetShaderStackSize )( - ID3D12StateObjectProperties * This, - _In_ LPCWSTR pExportName); - - DECLSPEC_XFGVIRT(ID3D12StateObjectProperties, GetPipelineStackSize) - UINT64 ( STDMETHODCALLTYPE *GetPipelineStackSize )( - ID3D12StateObjectProperties * This); - - DECLSPEC_XFGVIRT(ID3D12StateObjectProperties, SetPipelineStackSize) - void ( STDMETHODCALLTYPE *SetPipelineStackSize )( - ID3D12StateObjectProperties * This, - UINT64 PipelineStackSizeInBytes); - - END_INTERFACE - } ID3D12StateObjectPropertiesVtbl; - - interface ID3D12StateObjectProperties - { - CONST_VTBL struct ID3D12StateObjectPropertiesVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12StateObjectProperties_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12StateObjectProperties_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12StateObjectProperties_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12StateObjectProperties_GetShaderIdentifier(This,pExportName) \ - ( (This)->lpVtbl -> GetShaderIdentifier(This,pExportName) ) - -#define ID3D12StateObjectProperties_GetShaderStackSize(This,pExportName) \ - ( (This)->lpVtbl -> GetShaderStackSize(This,pExportName) ) - -#define ID3D12StateObjectProperties_GetPipelineStackSize(This) \ - ( (This)->lpVtbl -> GetPipelineStackSize(This) ) - -#define ID3D12StateObjectProperties_SetPipelineStackSize(This,PipelineStackSizeInBytes) \ - ( (This)->lpVtbl -> SetPipelineStackSize(This,PipelineStackSizeInBytes) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12StateObjectProperties_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12_0000_0034 */ -/* [local] */ - -typedef struct D3D12_PROGRAM_IDENTIFIER - { - UINT64 OpaqueData[ 4 ]; - } D3D12_PROGRAM_IDENTIFIER; - -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0034_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0034_v0_0_s_ifspec; - -#ifndef __ID3D12StateObjectProperties1_INTERFACE_DEFINED__ -#define __ID3D12StateObjectProperties1_INTERFACE_DEFINED__ - -/* interface ID3D12StateObjectProperties1 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12StateObjectProperties1; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("460caac7-1d24-446a-a184-ca67db494138") - ID3D12StateObjectProperties1 : public ID3D12StateObjectProperties - { - public: -#if defined(_MSC_VER) || !defined(_WIN32) - virtual D3D12_PROGRAM_IDENTIFIER STDMETHODCALLTYPE GetProgramIdentifier( - LPCWSTR pProgramName) = 0; -#else - virtual D3D12_PROGRAM_IDENTIFIER *STDMETHODCALLTYPE GetProgramIdentifier( - D3D12_PROGRAM_IDENTIFIER * RetVal, - LPCWSTR pProgramName) = 0; -#endif - - }; - - -#else /* C style interface */ - - typedef struct ID3D12StateObjectProperties1Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12StateObjectProperties1 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12StateObjectProperties1 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12StateObjectProperties1 * This); - - DECLSPEC_XFGVIRT(ID3D12StateObjectProperties, GetShaderIdentifier) - void *( STDMETHODCALLTYPE *GetShaderIdentifier )( - ID3D12StateObjectProperties1 * This, - _In_ LPCWSTR pExportName); - - DECLSPEC_XFGVIRT(ID3D12StateObjectProperties, GetShaderStackSize) - UINT64 ( STDMETHODCALLTYPE *GetShaderStackSize )( - ID3D12StateObjectProperties1 * This, - _In_ LPCWSTR pExportName); - - DECLSPEC_XFGVIRT(ID3D12StateObjectProperties, GetPipelineStackSize) - UINT64 ( STDMETHODCALLTYPE *GetPipelineStackSize )( - ID3D12StateObjectProperties1 * This); - - DECLSPEC_XFGVIRT(ID3D12StateObjectProperties, SetPipelineStackSize) - void ( STDMETHODCALLTYPE *SetPipelineStackSize )( - ID3D12StateObjectProperties1 * This, - UINT64 PipelineStackSizeInBytes); - - DECLSPEC_XFGVIRT(ID3D12StateObjectProperties1, GetProgramIdentifier) -#if !defined(_WIN32) - D3D12_PROGRAM_IDENTIFIER ( STDMETHODCALLTYPE *GetProgramIdentifier )( - ID3D12StateObjectProperties1 * This, - LPCWSTR pProgramName); - -#else - D3D12_PROGRAM_IDENTIFIER *( STDMETHODCALLTYPE *GetProgramIdentifier )( - ID3D12StateObjectProperties1 * This, - D3D12_PROGRAM_IDENTIFIER * RetVal, - LPCWSTR pProgramName); - -#endif - - END_INTERFACE - } ID3D12StateObjectProperties1Vtbl; - - interface ID3D12StateObjectProperties1 - { - CONST_VTBL struct ID3D12StateObjectProperties1Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12StateObjectProperties1_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12StateObjectProperties1_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12StateObjectProperties1_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12StateObjectProperties1_GetShaderIdentifier(This,pExportName) \ - ( (This)->lpVtbl -> GetShaderIdentifier(This,pExportName) ) - -#define ID3D12StateObjectProperties1_GetShaderStackSize(This,pExportName) \ - ( (This)->lpVtbl -> GetShaderStackSize(This,pExportName) ) - -#define ID3D12StateObjectProperties1_GetPipelineStackSize(This) \ - ( (This)->lpVtbl -> GetPipelineStackSize(This) ) - -#define ID3D12StateObjectProperties1_SetPipelineStackSize(This,PipelineStackSizeInBytes) \ - ( (This)->lpVtbl -> SetPipelineStackSize(This,PipelineStackSizeInBytes) ) - -#if !defined(_WIN32) - -#define ID3D12StateObjectProperties1_GetProgramIdentifier(This,pProgramName) \ - ( (This)->lpVtbl -> GetProgramIdentifier(This,pProgramName) ) -#else -#define ID3D12StateObjectProperties1_GetProgramIdentifier(This,RetVal,pProgramName) \ - ( (This)->lpVtbl -> GetProgramIdentifier(This,RetVal,pProgramName) ) -#endif - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12StateObjectProperties1_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12_0000_0035 */ -/* [local] */ - -typedef struct D3D12_NODE_ID - { - LPCWSTR Name; - UINT ArrayIndex; - } D3D12_NODE_ID; - -typedef struct D3D12_WORK_GRAPH_MEMORY_REQUIREMENTS - { - UINT64 MinSizeInBytes; - UINT64 MaxSizeInBytes; - UINT SizeGranularityInBytes; - } D3D12_WORK_GRAPH_MEMORY_REQUIREMENTS; - -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0035_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0035_v0_0_s_ifspec; - -#ifndef __ID3D12WorkGraphProperties_INTERFACE_DEFINED__ -#define __ID3D12WorkGraphProperties_INTERFACE_DEFINED__ - -/* interface ID3D12WorkGraphProperties */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12WorkGraphProperties; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("065acf71-f863-4b89-82f4-02e4d5886757") - ID3D12WorkGraphProperties : public IUnknown - { - public: - virtual UINT STDMETHODCALLTYPE GetNumWorkGraphs( void) = 0; - - virtual LPCWSTR STDMETHODCALLTYPE GetProgramName( - UINT WorkGraphIndex) = 0; - - virtual UINT STDMETHODCALLTYPE GetWorkGraphIndex( - LPCWSTR pProgramName) = 0; - - virtual UINT STDMETHODCALLTYPE GetNumNodes( - UINT WorkGraphIndex) = 0; - -#if defined(_MSC_VER) || !defined(_WIN32) - virtual D3D12_NODE_ID STDMETHODCALLTYPE GetNodeID( - UINT WorkGraphIndex, - UINT NodeIndex) = 0; -#else - virtual D3D12_NODE_ID *STDMETHODCALLTYPE GetNodeID( - D3D12_NODE_ID * RetVal, - UINT WorkGraphIndex, - UINT NodeIndex) = 0; -#endif - - virtual UINT STDMETHODCALLTYPE GetNodeIndex( - UINT WorkGraphIndex, - D3D12_NODE_ID NodeID) = 0; - - virtual UINT STDMETHODCALLTYPE GetNodeLocalRootArgumentsTableIndex( - UINT WorkGraphIndex, - UINT NodeIndex) = 0; - - virtual UINT STDMETHODCALLTYPE GetNumEntrypoints( - UINT WorkGraphIndex) = 0; - -#if defined(_MSC_VER) || !defined(_WIN32) - virtual D3D12_NODE_ID STDMETHODCALLTYPE GetEntrypointID( - UINT WorkGraphIndex, - UINT EntrypointIndex) = 0; -#else - virtual D3D12_NODE_ID *STDMETHODCALLTYPE GetEntrypointID( - D3D12_NODE_ID * RetVal, - UINT WorkGraphIndex, - UINT EntrypointIndex) = 0; -#endif - - virtual UINT STDMETHODCALLTYPE GetEntrypointIndex( - UINT WorkGraphIndex, - D3D12_NODE_ID NodeID) = 0; - - virtual UINT STDMETHODCALLTYPE GetEntrypointRecordSizeInBytes( - UINT WorkGraphIndex, - UINT EntrypointIndex) = 0; - - virtual void STDMETHODCALLTYPE GetWorkGraphMemoryRequirements( - UINT WorkGraphIndex, - _Out_ D3D12_WORK_GRAPH_MEMORY_REQUIREMENTS *pWorkGraphMemoryRequirements) = 0; - - virtual UINT STDMETHODCALLTYPE GetEntrypointRecordAlignmentInBytes( - UINT WorkGraphIndex, - UINT EntrypointIndex) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12WorkGraphPropertiesVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12WorkGraphProperties * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12WorkGraphProperties * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12WorkGraphProperties * This); - - DECLSPEC_XFGVIRT(ID3D12WorkGraphProperties, GetNumWorkGraphs) - UINT ( STDMETHODCALLTYPE *GetNumWorkGraphs )( - ID3D12WorkGraphProperties * This); - - DECLSPEC_XFGVIRT(ID3D12WorkGraphProperties, GetProgramName) - LPCWSTR ( STDMETHODCALLTYPE *GetProgramName )( - ID3D12WorkGraphProperties * This, - UINT WorkGraphIndex); - - DECLSPEC_XFGVIRT(ID3D12WorkGraphProperties, GetWorkGraphIndex) - UINT ( STDMETHODCALLTYPE *GetWorkGraphIndex )( - ID3D12WorkGraphProperties * This, - LPCWSTR pProgramName); - - DECLSPEC_XFGVIRT(ID3D12WorkGraphProperties, GetNumNodes) - UINT ( STDMETHODCALLTYPE *GetNumNodes )( - ID3D12WorkGraphProperties * This, - UINT WorkGraphIndex); - - DECLSPEC_XFGVIRT(ID3D12WorkGraphProperties, GetNodeID) -#if !defined(_WIN32) - D3D12_NODE_ID ( STDMETHODCALLTYPE *GetNodeID )( - ID3D12WorkGraphProperties * This, - UINT WorkGraphIndex, - UINT NodeIndex); - -#else - D3D12_NODE_ID *( STDMETHODCALLTYPE *GetNodeID )( - ID3D12WorkGraphProperties * This, - D3D12_NODE_ID * RetVal, - UINT WorkGraphIndex, - UINT NodeIndex); - -#endif - - DECLSPEC_XFGVIRT(ID3D12WorkGraphProperties, GetNodeIndex) - UINT ( STDMETHODCALLTYPE *GetNodeIndex )( - ID3D12WorkGraphProperties * This, - UINT WorkGraphIndex, - D3D12_NODE_ID NodeID); - - DECLSPEC_XFGVIRT(ID3D12WorkGraphProperties, GetNodeLocalRootArgumentsTableIndex) - UINT ( STDMETHODCALLTYPE *GetNodeLocalRootArgumentsTableIndex )( - ID3D12WorkGraphProperties * This, - UINT WorkGraphIndex, - UINT NodeIndex); - - DECLSPEC_XFGVIRT(ID3D12WorkGraphProperties, GetNumEntrypoints) - UINT ( STDMETHODCALLTYPE *GetNumEntrypoints )( - ID3D12WorkGraphProperties * This, - UINT WorkGraphIndex); - - DECLSPEC_XFGVIRT(ID3D12WorkGraphProperties, GetEntrypointID) -#if !defined(_WIN32) - D3D12_NODE_ID ( STDMETHODCALLTYPE *GetEntrypointID )( - ID3D12WorkGraphProperties * This, - UINT WorkGraphIndex, - UINT EntrypointIndex); - -#else - D3D12_NODE_ID *( STDMETHODCALLTYPE *GetEntrypointID )( - ID3D12WorkGraphProperties * This, - D3D12_NODE_ID * RetVal, - UINT WorkGraphIndex, - UINT EntrypointIndex); - -#endif - - DECLSPEC_XFGVIRT(ID3D12WorkGraphProperties, GetEntrypointIndex) - UINT ( STDMETHODCALLTYPE *GetEntrypointIndex )( - ID3D12WorkGraphProperties * This, - UINT WorkGraphIndex, - D3D12_NODE_ID NodeID); - - DECLSPEC_XFGVIRT(ID3D12WorkGraphProperties, GetEntrypointRecordSizeInBytes) - UINT ( STDMETHODCALLTYPE *GetEntrypointRecordSizeInBytes )( - ID3D12WorkGraphProperties * This, - UINT WorkGraphIndex, - UINT EntrypointIndex); - - DECLSPEC_XFGVIRT(ID3D12WorkGraphProperties, GetWorkGraphMemoryRequirements) - void ( STDMETHODCALLTYPE *GetWorkGraphMemoryRequirements )( - ID3D12WorkGraphProperties * This, - UINT WorkGraphIndex, - _Out_ D3D12_WORK_GRAPH_MEMORY_REQUIREMENTS *pWorkGraphMemoryRequirements); - - DECLSPEC_XFGVIRT(ID3D12WorkGraphProperties, GetEntrypointRecordAlignmentInBytes) - UINT ( STDMETHODCALLTYPE *GetEntrypointRecordAlignmentInBytes )( - ID3D12WorkGraphProperties * This, - UINT WorkGraphIndex, - UINT EntrypointIndex); - - END_INTERFACE - } ID3D12WorkGraphPropertiesVtbl; - - interface ID3D12WorkGraphProperties - { - CONST_VTBL struct ID3D12WorkGraphPropertiesVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12WorkGraphProperties_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12WorkGraphProperties_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12WorkGraphProperties_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12WorkGraphProperties_GetNumWorkGraphs(This) \ - ( (This)->lpVtbl -> GetNumWorkGraphs(This) ) - -#define ID3D12WorkGraphProperties_GetProgramName(This,WorkGraphIndex) \ - ( (This)->lpVtbl -> GetProgramName(This,WorkGraphIndex) ) - -#define ID3D12WorkGraphProperties_GetWorkGraphIndex(This,pProgramName) \ - ( (This)->lpVtbl -> GetWorkGraphIndex(This,pProgramName) ) - -#define ID3D12WorkGraphProperties_GetNumNodes(This,WorkGraphIndex) \ - ( (This)->lpVtbl -> GetNumNodes(This,WorkGraphIndex) ) -#if !defined(_WIN32) - -#define ID3D12WorkGraphProperties_GetNodeID(This,WorkGraphIndex,NodeIndex) \ - ( (This)->lpVtbl -> GetNodeID(This,WorkGraphIndex,NodeIndex) ) -#else -#define ID3D12WorkGraphProperties_GetNodeID(This,RetVal,WorkGraphIndex,NodeIndex) \ - ( (This)->lpVtbl -> GetNodeID(This,RetVal,WorkGraphIndex,NodeIndex) ) -#endif - -#define ID3D12WorkGraphProperties_GetNodeIndex(This,WorkGraphIndex,NodeID) \ - ( (This)->lpVtbl -> GetNodeIndex(This,WorkGraphIndex,NodeID) ) - -#define ID3D12WorkGraphProperties_GetNodeLocalRootArgumentsTableIndex(This,WorkGraphIndex,NodeIndex) \ - ( (This)->lpVtbl -> GetNodeLocalRootArgumentsTableIndex(This,WorkGraphIndex,NodeIndex) ) - -#define ID3D12WorkGraphProperties_GetNumEntrypoints(This,WorkGraphIndex) \ - ( (This)->lpVtbl -> GetNumEntrypoints(This,WorkGraphIndex) ) -#if !defined(_WIN32) - -#define ID3D12WorkGraphProperties_GetEntrypointID(This,WorkGraphIndex,EntrypointIndex) \ - ( (This)->lpVtbl -> GetEntrypointID(This,WorkGraphIndex,EntrypointIndex) ) -#else -#define ID3D12WorkGraphProperties_GetEntrypointID(This,RetVal,WorkGraphIndex,EntrypointIndex) \ - ( (This)->lpVtbl -> GetEntrypointID(This,RetVal,WorkGraphIndex,EntrypointIndex) ) -#endif - -#define ID3D12WorkGraphProperties_GetEntrypointIndex(This,WorkGraphIndex,NodeID) \ - ( (This)->lpVtbl -> GetEntrypointIndex(This,WorkGraphIndex,NodeID) ) - -#define ID3D12WorkGraphProperties_GetEntrypointRecordSizeInBytes(This,WorkGraphIndex,EntrypointIndex) \ - ( (This)->lpVtbl -> GetEntrypointRecordSizeInBytes(This,WorkGraphIndex,EntrypointIndex) ) - -#define ID3D12WorkGraphProperties_GetWorkGraphMemoryRequirements(This,WorkGraphIndex,pWorkGraphMemoryRequirements) \ - ( (This)->lpVtbl -> GetWorkGraphMemoryRequirements(This,WorkGraphIndex,pWorkGraphMemoryRequirements) ) - -#define ID3D12WorkGraphProperties_GetEntrypointRecordAlignmentInBytes(This,WorkGraphIndex,EntrypointIndex) \ - ( (This)->lpVtbl -> GetEntrypointRecordAlignmentInBytes(This,WorkGraphIndex,EntrypointIndex) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12WorkGraphProperties_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12_0000_0036 */ -/* [local] */ - -typedef -enum D3D12_STATE_SUBOBJECT_TYPE - { - D3D12_STATE_SUBOBJECT_TYPE_STATE_OBJECT_CONFIG = 0, - D3D12_STATE_SUBOBJECT_TYPE_GLOBAL_ROOT_SIGNATURE = 1, - D3D12_STATE_SUBOBJECT_TYPE_LOCAL_ROOT_SIGNATURE = 2, - D3D12_STATE_SUBOBJECT_TYPE_NODE_MASK = 3, - D3D12_STATE_SUBOBJECT_TYPE_DXIL_LIBRARY = 5, - D3D12_STATE_SUBOBJECT_TYPE_EXISTING_COLLECTION = 6, - D3D12_STATE_SUBOBJECT_TYPE_SUBOBJECT_TO_EXPORTS_ASSOCIATION = 7, - D3D12_STATE_SUBOBJECT_TYPE_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION = 8, - D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_SHADER_CONFIG = 9, - D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_PIPELINE_CONFIG = 10, - D3D12_STATE_SUBOBJECT_TYPE_HIT_GROUP = 11, - D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_PIPELINE_CONFIG1 = 12, - D3D12_STATE_SUBOBJECT_TYPE_WORK_GRAPH = 13, - D3D12_STATE_SUBOBJECT_TYPE_STREAM_OUTPUT = 14, - D3D12_STATE_SUBOBJECT_TYPE_BLEND = 15, - D3D12_STATE_SUBOBJECT_TYPE_SAMPLE_MASK = 16, - D3D12_STATE_SUBOBJECT_TYPE_RASTERIZER = 17, - D3D12_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL = 18, - D3D12_STATE_SUBOBJECT_TYPE_INPUT_LAYOUT = 19, - D3D12_STATE_SUBOBJECT_TYPE_IB_STRIP_CUT_VALUE = 20, - D3D12_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY = 21, - D3D12_STATE_SUBOBJECT_TYPE_RENDER_TARGET_FORMATS = 22, - D3D12_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL_FORMAT = 23, - D3D12_STATE_SUBOBJECT_TYPE_SAMPLE_DESC = 24, - D3D12_STATE_SUBOBJECT_TYPE_FLAGS = 26, - D3D12_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1 = 27, - D3D12_STATE_SUBOBJECT_TYPE_VIEW_INSTANCING = 28, - D3D12_STATE_SUBOBJECT_TYPE_GENERIC_PROGRAM = 29, - D3D12_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL2 = 30, - D3D12_STATE_SUBOBJECT_TYPE_MAX_VALID = ( D3D12_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL2 + 1 ) - } D3D12_STATE_SUBOBJECT_TYPE; - -typedef struct D3D12_STATE_SUBOBJECT - { - D3D12_STATE_SUBOBJECT_TYPE Type; - const void *pDesc; - } D3D12_STATE_SUBOBJECT; - -typedef -enum D3D12_STATE_OBJECT_FLAGS - { - D3D12_STATE_OBJECT_FLAG_NONE = 0, - D3D12_STATE_OBJECT_FLAG_ALLOW_LOCAL_DEPENDENCIES_ON_EXTERNAL_DEFINITIONS = 0x1, - D3D12_STATE_OBJECT_FLAG_ALLOW_EXTERNAL_DEPENDENCIES_ON_LOCAL_DEFINITIONS = 0x2, - D3D12_STATE_OBJECT_FLAG_ALLOW_STATE_OBJECT_ADDITIONS = 0x4 - } D3D12_STATE_OBJECT_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_STATE_OBJECT_FLAGS ) -typedef struct D3D12_STATE_OBJECT_CONFIG - { - D3D12_STATE_OBJECT_FLAGS Flags; - } D3D12_STATE_OBJECT_CONFIG; - -typedef struct D3D12_GLOBAL_ROOT_SIGNATURE - { - ID3D12RootSignature *pGlobalRootSignature; - } D3D12_GLOBAL_ROOT_SIGNATURE; - -typedef struct D3D12_LOCAL_ROOT_SIGNATURE - { - ID3D12RootSignature *pLocalRootSignature; - } D3D12_LOCAL_ROOT_SIGNATURE; - -typedef struct D3D12_NODE_MASK - { - UINT NodeMask; - } D3D12_NODE_MASK; - -typedef struct D3D12_SAMPLE_MASK - { - UINT SampleMask; - } D3D12_SAMPLE_MASK; - -typedef struct D3D12_IB_STRIP_CUT_VALUE - { - D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IndexBufferStripCutValue; - } D3D12_IB_STRIP_CUT_VALUE; - -typedef struct D3D12_PRIMITIVE_TOPOLOGY_DESC - { - D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopology; - } D3D12_PRIMITIVE_TOPOLOGY_DESC; - -typedef struct D3D12_DEPTH_STENCIL_FORMAT - { - DXGI_FORMAT DepthStencilFormat; - } D3D12_DEPTH_STENCIL_FORMAT; - -typedef -enum D3D12_EXPORT_FLAGS - { - D3D12_EXPORT_FLAG_NONE = 0 - } D3D12_EXPORT_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_EXPORT_FLAGS ) -typedef struct D3D12_EXPORT_DESC - { - LPCWSTR Name; - _In_opt_ LPCWSTR ExportToRename; - D3D12_EXPORT_FLAGS Flags; - } D3D12_EXPORT_DESC; - -typedef struct D3D12_DXIL_LIBRARY_DESC - { - D3D12_SHADER_BYTECODE DXILLibrary; - UINT NumExports; - _In_reads_(NumExports) const D3D12_EXPORT_DESC *pExports; - } D3D12_DXIL_LIBRARY_DESC; - -typedef struct D3D12_EXISTING_COLLECTION_DESC - { - ID3D12StateObject *pExistingCollection; - UINT NumExports; - _In_reads_(NumExports) const D3D12_EXPORT_DESC *pExports; - } D3D12_EXISTING_COLLECTION_DESC; - -typedef struct D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION - { - const D3D12_STATE_SUBOBJECT *pSubobjectToAssociate; - UINT NumExports; - _In_reads_(NumExports) LPCWSTR *pExports; - } D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION; - -typedef struct D3D12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION - { - LPCWSTR SubobjectToAssociate; - UINT NumExports; - _In_reads_(NumExports) LPCWSTR *pExports; - } D3D12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION; - -typedef -enum D3D12_HIT_GROUP_TYPE - { - D3D12_HIT_GROUP_TYPE_TRIANGLES = 0, - D3D12_HIT_GROUP_TYPE_PROCEDURAL_PRIMITIVE = 0x1 - } D3D12_HIT_GROUP_TYPE; - -typedef struct D3D12_HIT_GROUP_DESC - { - LPCWSTR HitGroupExport; - D3D12_HIT_GROUP_TYPE Type; - _In_opt_ LPCWSTR AnyHitShaderImport; - _In_opt_ LPCWSTR ClosestHitShaderImport; - _In_opt_ LPCWSTR IntersectionShaderImport; - } D3D12_HIT_GROUP_DESC; - -typedef struct D3D12_RAYTRACING_SHADER_CONFIG - { - UINT MaxPayloadSizeInBytes; - UINT MaxAttributeSizeInBytes; - } D3D12_RAYTRACING_SHADER_CONFIG; - -typedef struct D3D12_RAYTRACING_PIPELINE_CONFIG - { - UINT MaxTraceRecursionDepth; - } D3D12_RAYTRACING_PIPELINE_CONFIG; - -typedef -enum D3D12_RAYTRACING_PIPELINE_FLAGS - { - D3D12_RAYTRACING_PIPELINE_FLAG_NONE = 0, - D3D12_RAYTRACING_PIPELINE_FLAG_SKIP_TRIANGLES = 0x100, - D3D12_RAYTRACING_PIPELINE_FLAG_SKIP_PROCEDURAL_PRIMITIVES = 0x200 - } D3D12_RAYTRACING_PIPELINE_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAYTRACING_PIPELINE_FLAGS ) -typedef struct D3D12_RAYTRACING_PIPELINE_CONFIG1 - { - UINT MaxTraceRecursionDepth; - D3D12_RAYTRACING_PIPELINE_FLAGS Flags; - } D3D12_RAYTRACING_PIPELINE_CONFIG1; - -typedef struct D3D12_NODE_OUTPUT_OVERRIDES - { - UINT OutputIndex; - _In_opt_ const D3D12_NODE_ID *pNewName; - _In_opt_ const BOOL *pAllowSparseNodes; - _In_opt_ const UINT *pMaxRecords; - _In_opt_ const UINT *pMaxRecordsSharedWithOutputIndex; - } D3D12_NODE_OUTPUT_OVERRIDES; - -typedef struct D3D12_BROADCASTING_LAUNCH_OVERRIDES - { - _In_opt_ const UINT *pLocalRootArgumentsTableIndex; - _In_opt_ const BOOL *pProgramEntry; - _In_opt_ const D3D12_NODE_ID *pNewName; - _In_opt_ const D3D12_NODE_ID *pShareInputOf; - _In_reads_opt_(3) const UINT *pDispatchGrid; - _In_reads_opt_(3) const UINT *pMaxDispatchGrid; - UINT NumOutputOverrides; - _In_reads_opt_(NumOutputOverrides) const D3D12_NODE_OUTPUT_OVERRIDES *pOutputOverrides; - } D3D12_BROADCASTING_LAUNCH_OVERRIDES; - -typedef struct D3D12_COALESCING_LAUNCH_OVERRIDES - { - _In_opt_ const UINT *pLocalRootArgumentsTableIndex; - _In_opt_ const BOOL *pProgramEntry; - _In_opt_ const D3D12_NODE_ID *pNewName; - _In_opt_ const D3D12_NODE_ID *pShareInputOf; - UINT NumOutputOverrides; - _In_reads_opt_(NumOutputOverrides) const D3D12_NODE_OUTPUT_OVERRIDES *pOutputOverrides; - } D3D12_COALESCING_LAUNCH_OVERRIDES; - -typedef struct D3D12_THREAD_LAUNCH_OVERRIDES - { - _In_opt_ const UINT *pLocalRootArgumentsTableIndex; - _In_opt_ const BOOL *pProgramEntry; - _In_opt_ const D3D12_NODE_ID *pNewName; - _In_opt_ const D3D12_NODE_ID *pShareInputOf; - UINT NumOutputOverrides; - _In_reads_opt_(NumOutputOverrides) const D3D12_NODE_OUTPUT_OVERRIDES *pOutputOverrides; - } D3D12_THREAD_LAUNCH_OVERRIDES; - -typedef struct D3D12_COMMON_COMPUTE_NODE_OVERRIDES - { - _In_opt_ const UINT *pLocalRootArgumentsTableIndex; - _In_opt_ const BOOL *pProgramEntry; - _In_opt_ const D3D12_NODE_ID *pNewName; - _In_opt_ const D3D12_NODE_ID *pShareInputOf; - UINT NumOutputOverrides; - _In_reads_opt_(NumOutputOverrides) const D3D12_NODE_OUTPUT_OVERRIDES *pOutputOverrides; - } D3D12_COMMON_COMPUTE_NODE_OVERRIDES; - -typedef -enum D3D12_NODE_OVERRIDES_TYPE - { - D3D12_NODE_OVERRIDES_TYPE_NONE = 0, - D3D12_NODE_OVERRIDES_TYPE_BROADCASTING_LAUNCH = 1, - D3D12_NODE_OVERRIDES_TYPE_COALESCING_LAUNCH = 2, - D3D12_NODE_OVERRIDES_TYPE_THREAD_LAUNCH = 3, - D3D12_NODE_OVERRIDES_TYPE_COMMON_COMPUTE = 4 - } D3D12_NODE_OVERRIDES_TYPE; - -typedef struct D3D12_SHADER_NODE - { - LPCWSTR Shader; - D3D12_NODE_OVERRIDES_TYPE OverridesType; - union - { - const D3D12_BROADCASTING_LAUNCH_OVERRIDES *pBroadcastingLaunchOverrides; - const D3D12_COALESCING_LAUNCH_OVERRIDES *pCoalescingLaunchOverrides; - const D3D12_THREAD_LAUNCH_OVERRIDES *pThreadLaunchOverrides; - const D3D12_COMMON_COMPUTE_NODE_OVERRIDES *pCommonComputeNodeOverrides; - } ; - } D3D12_SHADER_NODE; - -typedef -enum D3D12_NODE_TYPE - { - D3D12_NODE_TYPE_SHADER = 0 - } D3D12_NODE_TYPE; - -typedef struct D3D12_NODE - { - D3D12_NODE_TYPE NodeType; - union - { - D3D12_SHADER_NODE Shader; - } ; - } D3D12_NODE; - -typedef -enum D3D12_WORK_GRAPH_FLAGS - { - D3D12_WORK_GRAPH_FLAG_NONE = 0, - D3D12_WORK_GRAPH_FLAG_INCLUDE_ALL_AVAILABLE_NODES = 0x1 - } D3D12_WORK_GRAPH_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_WORK_GRAPH_FLAGS ) -typedef struct D3D12_WORK_GRAPH_DESC - { - LPCWSTR ProgramName; - D3D12_WORK_GRAPH_FLAGS Flags; - UINT NumEntrypoints; - _In_reads_opt_(NumEntrypoints) const D3D12_NODE_ID *pEntrypoints; - UINT NumExplicitlyDefinedNodes; - _In_reads_opt_(NumExplicitlyDefinedNodes) const D3D12_NODE *pExplicitlyDefinedNodes; - } D3D12_WORK_GRAPH_DESC; - -typedef struct D3D12_GENERIC_PROGRAM_DESC - { - LPCWSTR ProgramName; - UINT NumExports; - _In_reads_(NumExports) LPCWSTR *pExports; - UINT NumSubobjects; - _In_reads_opt_(NumSubobjects) const D3D12_STATE_SUBOBJECT *const *ppSubobjects; - } D3D12_GENERIC_PROGRAM_DESC; - -typedef -enum D3D12_STATE_OBJECT_TYPE - { - D3D12_STATE_OBJECT_TYPE_COLLECTION = 0, - D3D12_STATE_OBJECT_TYPE_RAYTRACING_PIPELINE = 3, - D3D12_STATE_OBJECT_TYPE_EXECUTABLE = 4 - } D3D12_STATE_OBJECT_TYPE; - -typedef struct D3D12_STATE_OBJECT_DESC - { - D3D12_STATE_OBJECT_TYPE Type; - UINT NumSubobjects; - _In_reads_(NumSubobjects) const D3D12_STATE_SUBOBJECT *pSubobjects; - } D3D12_STATE_OBJECT_DESC; - -typedef -enum D3D12_RAYTRACING_GEOMETRY_FLAGS - { - D3D12_RAYTRACING_GEOMETRY_FLAG_NONE = 0, - D3D12_RAYTRACING_GEOMETRY_FLAG_OPAQUE = 0x1, - D3D12_RAYTRACING_GEOMETRY_FLAG_NO_DUPLICATE_ANYHIT_INVOCATION = 0x2 - } D3D12_RAYTRACING_GEOMETRY_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAYTRACING_GEOMETRY_FLAGS ) -typedef -enum D3D12_RAYTRACING_GEOMETRY_TYPE - { - D3D12_RAYTRACING_GEOMETRY_TYPE_TRIANGLES = 0, - D3D12_RAYTRACING_GEOMETRY_TYPE_PROCEDURAL_PRIMITIVE_AABBS = ( D3D12_RAYTRACING_GEOMETRY_TYPE_TRIANGLES + 1 ) - } D3D12_RAYTRACING_GEOMETRY_TYPE; - -typedef -enum D3D12_RAYTRACING_INSTANCE_FLAGS - { - D3D12_RAYTRACING_INSTANCE_FLAG_NONE = 0, - D3D12_RAYTRACING_INSTANCE_FLAG_TRIANGLE_CULL_DISABLE = 0x1, - D3D12_RAYTRACING_INSTANCE_FLAG_TRIANGLE_FRONT_COUNTERCLOCKWISE = 0x2, - D3D12_RAYTRACING_INSTANCE_FLAG_FORCE_OPAQUE = 0x4, - D3D12_RAYTRACING_INSTANCE_FLAG_FORCE_NON_OPAQUE = 0x8 - } D3D12_RAYTRACING_INSTANCE_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAYTRACING_INSTANCE_FLAGS ) -typedef struct D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE - { - D3D12_GPU_VIRTUAL_ADDRESS StartAddress; - UINT64 StrideInBytes; - } D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE; - -typedef struct D3D12_GPU_VIRTUAL_ADDRESS_RANGE - { - D3D12_GPU_VIRTUAL_ADDRESS StartAddress; - UINT64 SizeInBytes; - } D3D12_GPU_VIRTUAL_ADDRESS_RANGE; - -typedef struct D3D12_GPU_VIRTUAL_ADDRESS_RANGE_AND_STRIDE - { - D3D12_GPU_VIRTUAL_ADDRESS StartAddress; - UINT64 SizeInBytes; - UINT64 StrideInBytes; - } D3D12_GPU_VIRTUAL_ADDRESS_RANGE_AND_STRIDE; - -typedef struct D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC - { - D3D12_GPU_VIRTUAL_ADDRESS Transform3x4; - DXGI_FORMAT IndexFormat; - DXGI_FORMAT VertexFormat; - UINT IndexCount; - UINT VertexCount; - D3D12_GPU_VIRTUAL_ADDRESS IndexBuffer; - D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE VertexBuffer; - } D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC; - -typedef struct D3D12_RAYTRACING_AABB - { - FLOAT MinX; - FLOAT MinY; - FLOAT MinZ; - FLOAT MaxX; - FLOAT MaxY; - FLOAT MaxZ; - } D3D12_RAYTRACING_AABB; - -typedef struct D3D12_RAYTRACING_GEOMETRY_AABBS_DESC - { - UINT64 AABBCount; - D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE AABBs; - } D3D12_RAYTRACING_GEOMETRY_AABBS_DESC; - -typedef -enum D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS - { - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_NONE = 0, - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_ALLOW_UPDATE = 0x1, - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_ALLOW_COMPACTION = 0x2, - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_PREFER_FAST_TRACE = 0x4, - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_PREFER_FAST_BUILD = 0x8, - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_MINIMIZE_MEMORY = 0x10, - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_PERFORM_UPDATE = 0x20 - } D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS ) -typedef -enum D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE - { - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE_CLONE = 0, - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE_COMPACT = 0x1, - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE_VISUALIZATION_DECODE_FOR_TOOLS = 0x2, - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE_SERIALIZE = 0x3, - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE_DESERIALIZE = 0x4 - } D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE; - -typedef -enum D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE - { - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL = 0, - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL = 0x1 - } D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE; - -typedef -enum D3D12_ELEMENTS_LAYOUT - { - D3D12_ELEMENTS_LAYOUT_ARRAY = 0, - D3D12_ELEMENTS_LAYOUT_ARRAY_OF_POINTERS = 0x1 - } D3D12_ELEMENTS_LAYOUT; - -typedef -enum D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_TYPE - { - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_COMPACTED_SIZE = 0, - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_TOOLS_VISUALIZATION = 0x1, - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION = 0x2, - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_CURRENT_SIZE = 0x3 - } D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_TYPE; - -typedef struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC - { - D3D12_GPU_VIRTUAL_ADDRESS DestBuffer; - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_TYPE InfoType; - } D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC; - -typedef struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_COMPACTED_SIZE_DESC - { - UINT64 CompactedSizeInBytes; - } D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_COMPACTED_SIZE_DESC; - -typedef struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_TOOLS_VISUALIZATION_DESC - { - UINT64 DecodedSizeInBytes; - } D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_TOOLS_VISUALIZATION_DESC; - -typedef struct D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_TOOLS_VISUALIZATION_HEADER - { - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE Type; - UINT NumDescs; - } D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_TOOLS_VISUALIZATION_HEADER; - -// Regarding D3D12_BUILD_RAY_TRACING_ACCELERATION_STRUCTURE_TOOLS_VISUALIZATION_HEADER above, -// depending on Type field, NumDescs above is followed by either: -// D3D12_RAY_TRACING_INSTANCE_DESC InstanceDescs[NumDescs] -// or D3D12_RAY_TRACING_GEOMETRY_DESC GeometryDescs[NumDescs]. -// There is 4 bytes of padding between GeometryDesc structs in the array so alignment is natural when viewed by CPU. - -typedef struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC - { - UINT64 SerializedSizeInBytes; - UINT64 NumBottomLevelAccelerationStructurePointers; - } D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC; - -typedef struct D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER - { - GUID DriverOpaqueGUID; - BYTE DriverOpaqueVersioningData[ 16 ]; - } D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER; - -typedef -enum D3D12_SERIALIZED_DATA_TYPE - { - D3D12_SERIALIZED_DATA_RAYTRACING_ACCELERATION_STRUCTURE = 0 - } D3D12_SERIALIZED_DATA_TYPE; - -typedef -enum D3D12_DRIVER_MATCHING_IDENTIFIER_STATUS - { - D3D12_DRIVER_MATCHING_IDENTIFIER_COMPATIBLE_WITH_DEVICE = 0, - D3D12_DRIVER_MATCHING_IDENTIFIER_UNSUPPORTED_TYPE = 0x1, - D3D12_DRIVER_MATCHING_IDENTIFIER_UNRECOGNIZED = 0x2, - D3D12_DRIVER_MATCHING_IDENTIFIER_INCOMPATIBLE_VERSION = 0x3, - D3D12_DRIVER_MATCHING_IDENTIFIER_INCOMPATIBLE_TYPE = 0x4 - } D3D12_DRIVER_MATCHING_IDENTIFIER_STATUS; - -typedef struct D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER - { - D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER DriverMatchingIdentifier; - UINT64 SerializedSizeInBytesIncludingHeader; - UINT64 DeserializedSizeInBytes; - UINT64 NumBottomLevelAccelerationStructurePointersAfterHeader; - } D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER; - -typedef struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_CURRENT_SIZE_DESC - { - UINT64 CurrentSizeInBytes; - } D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_CURRENT_SIZE_DESC; - -typedef struct D3D12_RAYTRACING_INSTANCE_DESC - { - FLOAT Transform[ 3 ][ 4 ]; - UINT InstanceID : 24; - UINT InstanceMask : 8; - UINT InstanceContributionToHitGroupIndex : 24; - UINT Flags : 8; - D3D12_GPU_VIRTUAL_ADDRESS AccelerationStructure; - } D3D12_RAYTRACING_INSTANCE_DESC; - -typedef struct D3D12_RAYTRACING_GEOMETRY_DESC - { - D3D12_RAYTRACING_GEOMETRY_TYPE Type; - D3D12_RAYTRACING_GEOMETRY_FLAGS Flags; - union - { - D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC Triangles; - D3D12_RAYTRACING_GEOMETRY_AABBS_DESC AABBs; - } ; - } D3D12_RAYTRACING_GEOMETRY_DESC; - -typedef struct D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS - { - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE Type; - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS Flags; - UINT NumDescs; - D3D12_ELEMENTS_LAYOUT DescsLayout; - union - { - D3D12_GPU_VIRTUAL_ADDRESS InstanceDescs; - const D3D12_RAYTRACING_GEOMETRY_DESC *pGeometryDescs; - const D3D12_RAYTRACING_GEOMETRY_DESC *const *ppGeometryDescs; - } ; - } D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS; - -typedef struct D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC - { - D3D12_GPU_VIRTUAL_ADDRESS DestAccelerationStructureData; - D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS Inputs; - _In_opt_ D3D12_GPU_VIRTUAL_ADDRESS SourceAccelerationStructureData; - D3D12_GPU_VIRTUAL_ADDRESS ScratchAccelerationStructureData; - } D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC; - -typedef struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO - { - UINT64 ResultDataMaxSizeInBytes; - UINT64 ScratchDataSizeInBytes; - UINT64 UpdateScratchDataSizeInBytes; - } D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO; - -typedef -enum D3D12_RAY_FLAGS - { - D3D12_RAY_FLAG_NONE = 0, - D3D12_RAY_FLAG_FORCE_OPAQUE = 0x1, - D3D12_RAY_FLAG_FORCE_NON_OPAQUE = 0x2, - D3D12_RAY_FLAG_ACCEPT_FIRST_HIT_AND_END_SEARCH = 0x4, - D3D12_RAY_FLAG_SKIP_CLOSEST_HIT_SHADER = 0x8, - D3D12_RAY_FLAG_CULL_BACK_FACING_TRIANGLES = 0x10, - D3D12_RAY_FLAG_CULL_FRONT_FACING_TRIANGLES = 0x20, - D3D12_RAY_FLAG_CULL_OPAQUE = 0x40, - D3D12_RAY_FLAG_CULL_NON_OPAQUE = 0x80, - D3D12_RAY_FLAG_SKIP_TRIANGLES = 0x100, - D3D12_RAY_FLAG_SKIP_PROCEDURAL_PRIMITIVES = 0x200 - } D3D12_RAY_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAY_FLAGS ) -typedef -enum D3D12_HIT_KIND - { - D3D12_HIT_KIND_TRIANGLE_FRONT_FACE = 0xfe, - D3D12_HIT_KIND_TRIANGLE_BACK_FACE = 0xff - } D3D12_HIT_KIND; - -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0036_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0036_v0_0_s_ifspec; - -#ifndef __ID3D12Device5_INTERFACE_DEFINED__ -#define __ID3D12Device5_INTERFACE_DEFINED__ - -/* interface ID3D12Device5 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12Device5; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("8b4f173b-2fea-4b80-8f58-4307191ab95d") - ID3D12Device5 : public ID3D12Device4 - { - public: - virtual HRESULT STDMETHODCALLTYPE CreateLifetimeTracker( - _In_ ID3D12LifetimeOwner *pOwner, - REFIID riid, - _COM_Outptr_ void **ppvTracker) = 0; - - virtual void STDMETHODCALLTYPE RemoveDevice( void) = 0; - - virtual HRESULT STDMETHODCALLTYPE EnumerateMetaCommands( - _Inout_ UINT *pNumMetaCommands, - _Out_writes_opt_(*pNumMetaCommands) D3D12_META_COMMAND_DESC *pDescs) = 0; - - virtual HRESULT STDMETHODCALLTYPE EnumerateMetaCommandParameters( - _In_ REFGUID CommandId, - _In_ D3D12_META_COMMAND_PARAMETER_STAGE Stage, - _Out_opt_ UINT *pTotalStructureSizeInBytes, - _Inout_ UINT *pParameterCount, - _Out_writes_opt_(*pParameterCount) D3D12_META_COMMAND_PARAMETER_DESC *pParameterDescs) = 0; - - virtual HRESULT STDMETHODCALLTYPE CreateMetaCommand( - _In_ REFGUID CommandId, - _In_ UINT NodeMask, - _In_reads_bytes_opt_(CreationParametersDataSizeInBytes) const void *pCreationParametersData, - _In_ SIZE_T CreationParametersDataSizeInBytes, - REFIID riid, - _COM_Outptr_ void **ppMetaCommand) = 0; - - virtual HRESULT STDMETHODCALLTYPE CreateStateObject( - const D3D12_STATE_OBJECT_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppStateObject) = 0; - - virtual void STDMETHODCALLTYPE GetRaytracingAccelerationStructurePrebuildInfo( - _In_ const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS *pDesc, - _Out_ D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO *pInfo) = 0; - - virtual D3D12_DRIVER_MATCHING_IDENTIFIER_STATUS STDMETHODCALLTYPE CheckDriverMatchingIdentifier( - _In_ D3D12_SERIALIZED_DATA_TYPE SerializedDataType, - _In_ const D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER *pIdentifierToCheck) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12Device5Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12Device5 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12Device5 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12Device5 * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12Device5 * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12Device5 * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12Device5 * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12Device5 * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12Device, GetNodeCount) - UINT ( STDMETHODCALLTYPE *GetNodeCount )( - ID3D12Device5 * This); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandQueue) - HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue )( - ID3D12Device5 * This, - _In_ const D3D12_COMMAND_QUEUE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppCommandQueue); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandAllocator) - HRESULT ( STDMETHODCALLTYPE *CreateCommandAllocator )( - ID3D12Device5 * This, - _In_ D3D12_COMMAND_LIST_TYPE type, - REFIID riid, - _COM_Outptr_ void **ppCommandAllocator); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateGraphicsPipelineState) - HRESULT ( STDMETHODCALLTYPE *CreateGraphicsPipelineState )( - ID3D12Device5 * This, - _In_ const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateComputePipelineState) - HRESULT ( STDMETHODCALLTYPE *CreateComputePipelineState )( - ID3D12Device5 * This, - _In_ const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandList) - HRESULT ( STDMETHODCALLTYPE *CreateCommandList )( - ID3D12Device5 * This, - _In_ UINT nodeMask, - _In_ D3D12_COMMAND_LIST_TYPE type, - _In_ ID3D12CommandAllocator *pCommandAllocator, - _In_opt_ ID3D12PipelineState *pInitialState, - REFIID riid, - _COM_Outptr_ void **ppCommandList); - - DECLSPEC_XFGVIRT(ID3D12Device, CheckFeatureSupport) - HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )( - ID3D12Device5 * This, - D3D12_FEATURE Feature, - _Inout_updates_bytes_(FeatureSupportDataSize) void *pFeatureSupportData, - UINT FeatureSupportDataSize); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateDescriptorHeap) - HRESULT ( STDMETHODCALLTYPE *CreateDescriptorHeap )( - ID3D12Device5 * This, - _In_ const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc, - REFIID riid, - _COM_Outptr_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, GetDescriptorHandleIncrementSize) - UINT ( STDMETHODCALLTYPE *GetDescriptorHandleIncrementSize )( - ID3D12Device5 * This, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateRootSignature) - HRESULT ( STDMETHODCALLTYPE *CreateRootSignature )( - ID3D12Device5 * This, - _In_ UINT nodeMask, - _In_reads_(blobLengthInBytes) const void *pBlobWithRootSignature, - _In_ SIZE_T blobLengthInBytes, - REFIID riid, - _COM_Outptr_ void **ppvRootSignature); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateConstantBufferView) - void ( STDMETHODCALLTYPE *CreateConstantBufferView )( - ID3D12Device5 * This, - _In_opt_ const D3D12_CONSTANT_BUFFER_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateShaderResourceView) - void ( STDMETHODCALLTYPE *CreateShaderResourceView )( - ID3D12Device5 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateUnorderedAccessView) - void ( STDMETHODCALLTYPE *CreateUnorderedAccessView )( - ID3D12Device5 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ ID3D12Resource *pCounterResource, - _In_opt_ const D3D12_UNORDERED_ACCESS_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateRenderTargetView) - void ( STDMETHODCALLTYPE *CreateRenderTargetView )( - ID3D12Device5 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_RENDER_TARGET_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateDepthStencilView) - void ( STDMETHODCALLTYPE *CreateDepthStencilView )( - ID3D12Device5 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DEPTH_STENCIL_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateSampler) - void ( STDMETHODCALLTYPE *CreateSampler )( - ID3D12Device5 * This, - _In_ const D3D12_SAMPLER_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptors) - void ( STDMETHODCALLTYPE *CopyDescriptors )( - ID3D12Device5 * This, - _In_ UINT NumDestDescriptorRanges, - _In_reads_(NumDestDescriptorRanges) const D3D12_CPU_DESCRIPTOR_HANDLE *pDestDescriptorRangeStarts, - _In_reads_opt_(NumDestDescriptorRanges) const UINT *pDestDescriptorRangeSizes, - _In_ UINT NumSrcDescriptorRanges, - _In_reads_(NumSrcDescriptorRanges) const D3D12_CPU_DESCRIPTOR_HANDLE *pSrcDescriptorRangeStarts, - _In_reads_opt_(NumSrcDescriptorRanges) const UINT *pSrcDescriptorRangeSizes, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType); - - DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptorsSimple) - void ( STDMETHODCALLTYPE *CopyDescriptorsSimple )( - ID3D12Device5 * This, - _In_ UINT NumDescriptors, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType); - - DECLSPEC_XFGVIRT(ID3D12Device, GetResourceAllocationInfo) -#if !defined(_WIN32) - D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo )( - ID3D12Device5 * This, - _In_ UINT visibleMask, - _In_ UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs); - -#else - D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo )( - ID3D12Device5 * This, - D3D12_RESOURCE_ALLOCATION_INFO * RetVal, - _In_ UINT visibleMask, - _In_ UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device, GetCustomHeapProperties) -#if !defined(_WIN32) - D3D12_HEAP_PROPERTIES ( STDMETHODCALLTYPE *GetCustomHeapProperties )( - ID3D12Device5 * This, - _In_ UINT nodeMask, - D3D12_HEAP_TYPE heapType); - -#else - D3D12_HEAP_PROPERTIES *( STDMETHODCALLTYPE *GetCustomHeapProperties )( - ID3D12Device5 * This, - D3D12_HEAP_PROPERTIES * RetVal, - _In_ UINT nodeMask, - D3D12_HEAP_TYPE heapType); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommittedResource) - HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource )( - ID3D12Device5 * This, - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialResourceState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riidResource, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateHeap) - HRESULT ( STDMETHODCALLTYPE *CreateHeap )( - ID3D12Device5 * This, - _In_ const D3D12_HEAP_DESC *pDesc, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, CreatePlacedResource) - HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource )( - ID3D12Device5 * This, - _In_ ID3D12Heap *pHeap, - UINT64 HeapOffset, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateReservedResource) - HRESULT ( STDMETHODCALLTYPE *CreateReservedResource )( - ID3D12Device5 * This, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateSharedHandle) - HRESULT ( STDMETHODCALLTYPE *CreateSharedHandle )( - ID3D12Device5 * This, - _In_ ID3D12DeviceChild *pObject, - _In_opt_ const SECURITY_ATTRIBUTES *pAttributes, - DWORD Access, - _In_opt_ LPCWSTR Name, - _Out_ HANDLE *pHandle); - - DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandle) - HRESULT ( STDMETHODCALLTYPE *OpenSharedHandle )( - ID3D12Device5 * This, - _In_ HANDLE NTHandle, - REFIID riid, - _COM_Outptr_opt_ void **ppvObj); - - DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandleByName) - HRESULT ( STDMETHODCALLTYPE *OpenSharedHandleByName )( - ID3D12Device5 * This, - _In_ LPCWSTR Name, - DWORD Access, - /* [annotation][out] */ - _Out_ HANDLE *pNTHandle); - - DECLSPEC_XFGVIRT(ID3D12Device, MakeResident) - HRESULT ( STDMETHODCALLTYPE *MakeResident )( - ID3D12Device5 * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects); - - DECLSPEC_XFGVIRT(ID3D12Device, Evict) - HRESULT ( STDMETHODCALLTYPE *Evict )( - ID3D12Device5 * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateFence) - HRESULT ( STDMETHODCALLTYPE *CreateFence )( - ID3D12Device5 * This, - UINT64 InitialValue, - D3D12_FENCE_FLAGS Flags, - REFIID riid, - _COM_Outptr_ void **ppFence); - - DECLSPEC_XFGVIRT(ID3D12Device, GetDeviceRemovedReason) - HRESULT ( STDMETHODCALLTYPE *GetDeviceRemovedReason )( - ID3D12Device5 * This); - - DECLSPEC_XFGVIRT(ID3D12Device, GetCopyableFootprints) - void ( STDMETHODCALLTYPE *GetCopyableFootprints )( - ID3D12Device5 * This, - _In_ const D3D12_RESOURCE_DESC *pResourceDesc, - _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, - _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, - UINT64 BaseOffset, - _Out_writes_opt_(NumSubresources) D3D12_PLACED_SUBRESOURCE_FOOTPRINT *pLayouts, - _Out_writes_opt_(NumSubresources) UINT *pNumRows, - _Out_writes_opt_(NumSubresources) UINT64 *pRowSizeInBytes, - _Out_opt_ UINT64 *pTotalBytes); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateQueryHeap) - HRESULT ( STDMETHODCALLTYPE *CreateQueryHeap )( - ID3D12Device5 * This, - _In_ const D3D12_QUERY_HEAP_DESC *pDesc, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, SetStablePowerState) - HRESULT ( STDMETHODCALLTYPE *SetStablePowerState )( - ID3D12Device5 * This, - BOOL Enable); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandSignature) - HRESULT ( STDMETHODCALLTYPE *CreateCommandSignature )( - ID3D12Device5 * This, - _In_ const D3D12_COMMAND_SIGNATURE_DESC *pDesc, - _In_opt_ ID3D12RootSignature *pRootSignature, - REFIID riid, - _COM_Outptr_opt_ void **ppvCommandSignature); - - DECLSPEC_XFGVIRT(ID3D12Device, GetResourceTiling) - void ( STDMETHODCALLTYPE *GetResourceTiling )( - ID3D12Device5 * This, - _In_ ID3D12Resource *pTiledResource, - _Out_opt_ UINT *pNumTilesForEntireResource, - _Out_opt_ D3D12_PACKED_MIP_INFO *pPackedMipDesc, - _Out_opt_ D3D12_TILE_SHAPE *pStandardTileShapeForNonPackedMips, - _Inout_opt_ UINT *pNumSubresourceTilings, - _In_ UINT FirstSubresourceTilingToGet, - _Out_writes_(*pNumSubresourceTilings) D3D12_SUBRESOURCE_TILING *pSubresourceTilingsForNonPackedMips); - - DECLSPEC_XFGVIRT(ID3D12Device, GetAdapterLuid) -#if !defined(_WIN32) - LUID ( STDMETHODCALLTYPE *GetAdapterLuid )( - ID3D12Device5 * This); - -#else - LUID *( STDMETHODCALLTYPE *GetAdapterLuid )( - ID3D12Device5 * This, - LUID * RetVal); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device1, CreatePipelineLibrary) - HRESULT ( STDMETHODCALLTYPE *CreatePipelineLibrary )( - ID3D12Device5 * This, - _In_reads_(BlobLength) const void *pLibraryBlob, - SIZE_T BlobLength, - REFIID riid, - _COM_Outptr_ void **ppPipelineLibrary); - - DECLSPEC_XFGVIRT(ID3D12Device1, SetEventOnMultipleFenceCompletion) - HRESULT ( STDMETHODCALLTYPE *SetEventOnMultipleFenceCompletion )( - ID3D12Device5 * This, - _In_reads_(NumFences) ID3D12Fence *const *ppFences, - _In_reads_(NumFences) const UINT64 *pFenceValues, - UINT NumFences, - D3D12_MULTIPLE_FENCE_WAIT_FLAGS Flags, - HANDLE hEvent); - - DECLSPEC_XFGVIRT(ID3D12Device1, SetResidencyPriority) - HRESULT ( STDMETHODCALLTYPE *SetResidencyPriority )( - ID3D12Device5 * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects, - _In_reads_(NumObjects) const D3D12_RESIDENCY_PRIORITY *pPriorities); - - DECLSPEC_XFGVIRT(ID3D12Device2, CreatePipelineState) - HRESULT ( STDMETHODCALLTYPE *CreatePipelineState )( - ID3D12Device5 * This, - const D3D12_PIPELINE_STATE_STREAM_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromAddress) - HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromAddress )( - ID3D12Device5 * This, - _In_ const void *pAddress, - REFIID riid, - _COM_Outptr_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromFileMapping) - HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromFileMapping )( - ID3D12Device5 * This, - _In_ HANDLE hFileMapping, - REFIID riid, - _COM_Outptr_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device3, EnqueueMakeResident) - HRESULT ( STDMETHODCALLTYPE *EnqueueMakeResident )( - ID3D12Device5 * This, - D3D12_RESIDENCY_FLAGS Flags, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects, - _In_ ID3D12Fence *pFenceToSignal, - UINT64 FenceValueToSignal); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommandList1) - HRESULT ( STDMETHODCALLTYPE *CreateCommandList1 )( - ID3D12Device5 * This, - _In_ UINT nodeMask, - _In_ D3D12_COMMAND_LIST_TYPE type, - _In_ D3D12_COMMAND_LIST_FLAGS flags, - REFIID riid, - _COM_Outptr_ void **ppCommandList); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateProtectedResourceSession) - HRESULT ( STDMETHODCALLTYPE *CreateProtectedResourceSession )( - ID3D12Device5 * This, - _In_ const D3D12_PROTECTED_RESOURCE_SESSION_DESC *pDesc, - _In_ REFIID riid, - _COM_Outptr_ void **ppSession); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommittedResource1) - HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource1 )( - ID3D12Device5 * This, - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialResourceState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riidResource, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateHeap1) - HRESULT ( STDMETHODCALLTYPE *CreateHeap1 )( - ID3D12Device5 * This, - _In_ const D3D12_HEAP_DESC *pDesc, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateReservedResource1) - HRESULT ( STDMETHODCALLTYPE *CreateReservedResource1 )( - ID3D12Device5 * This, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device4, GetResourceAllocationInfo1) -#if !defined(_WIN32) - D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( - ID3D12Device5 * This, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); - -#else - D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( - ID3D12Device5 * This, - D3D12_RESOURCE_ALLOCATION_INFO * RetVal, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device5, CreateLifetimeTracker) - HRESULT ( STDMETHODCALLTYPE *CreateLifetimeTracker )( - ID3D12Device5 * This, - _In_ ID3D12LifetimeOwner *pOwner, - REFIID riid, - _COM_Outptr_ void **ppvTracker); - - DECLSPEC_XFGVIRT(ID3D12Device5, RemoveDevice) - void ( STDMETHODCALLTYPE *RemoveDevice )( - ID3D12Device5 * This); - - DECLSPEC_XFGVIRT(ID3D12Device5, EnumerateMetaCommands) - HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommands )( - ID3D12Device5 * This, - _Inout_ UINT *pNumMetaCommands, - _Out_writes_opt_(*pNumMetaCommands) D3D12_META_COMMAND_DESC *pDescs); - - DECLSPEC_XFGVIRT(ID3D12Device5, EnumerateMetaCommandParameters) - HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommandParameters )( - ID3D12Device5 * This, - _In_ REFGUID CommandId, - _In_ D3D12_META_COMMAND_PARAMETER_STAGE Stage, - _Out_opt_ UINT *pTotalStructureSizeInBytes, - _Inout_ UINT *pParameterCount, - _Out_writes_opt_(*pParameterCount) D3D12_META_COMMAND_PARAMETER_DESC *pParameterDescs); - - DECLSPEC_XFGVIRT(ID3D12Device5, CreateMetaCommand) - HRESULT ( STDMETHODCALLTYPE *CreateMetaCommand )( - ID3D12Device5 * This, - _In_ REFGUID CommandId, - _In_ UINT NodeMask, - _In_reads_bytes_opt_(CreationParametersDataSizeInBytes) const void *pCreationParametersData, - _In_ SIZE_T CreationParametersDataSizeInBytes, - REFIID riid, - _COM_Outptr_ void **ppMetaCommand); - - DECLSPEC_XFGVIRT(ID3D12Device5, CreateStateObject) - HRESULT ( STDMETHODCALLTYPE *CreateStateObject )( - ID3D12Device5 * This, - const D3D12_STATE_OBJECT_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppStateObject); - - DECLSPEC_XFGVIRT(ID3D12Device5, GetRaytracingAccelerationStructurePrebuildInfo) - void ( STDMETHODCALLTYPE *GetRaytracingAccelerationStructurePrebuildInfo )( - ID3D12Device5 * This, - _In_ const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS *pDesc, - _Out_ D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO *pInfo); - - DECLSPEC_XFGVIRT(ID3D12Device5, CheckDriverMatchingIdentifier) - D3D12_DRIVER_MATCHING_IDENTIFIER_STATUS ( STDMETHODCALLTYPE *CheckDriverMatchingIdentifier )( - ID3D12Device5 * This, - _In_ D3D12_SERIALIZED_DATA_TYPE SerializedDataType, - _In_ const D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER *pIdentifierToCheck); - - END_INTERFACE - } ID3D12Device5Vtbl; - - interface ID3D12Device5 - { - CONST_VTBL struct ID3D12Device5Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12Device5_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12Device5_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12Device5_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12Device5_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12Device5_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12Device5_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12Device5_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12Device5_GetNodeCount(This) \ - ( (This)->lpVtbl -> GetNodeCount(This) ) - -#define ID3D12Device5_CreateCommandQueue(This,pDesc,riid,ppCommandQueue) \ - ( (This)->lpVtbl -> CreateCommandQueue(This,pDesc,riid,ppCommandQueue) ) - -#define ID3D12Device5_CreateCommandAllocator(This,type,riid,ppCommandAllocator) \ - ( (This)->lpVtbl -> CreateCommandAllocator(This,type,riid,ppCommandAllocator) ) - -#define ID3D12Device5_CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) ) - -#define ID3D12Device5_CreateComputePipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreateComputePipelineState(This,pDesc,riid,ppPipelineState) ) - -#define ID3D12Device5_CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) \ - ( (This)->lpVtbl -> CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) ) - -#define ID3D12Device5_CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) \ - ( (This)->lpVtbl -> CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) ) - -#define ID3D12Device5_CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) ) - -#define ID3D12Device5_GetDescriptorHandleIncrementSize(This,DescriptorHeapType) \ - ( (This)->lpVtbl -> GetDescriptorHandleIncrementSize(This,DescriptorHeapType) ) - -#define ID3D12Device5_CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) \ - ( (This)->lpVtbl -> CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) ) - -#define ID3D12Device5_CreateConstantBufferView(This,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateConstantBufferView(This,pDesc,DestDescriptor) ) - -#define ID3D12Device5_CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device5_CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) ) - -#define ID3D12Device5_CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device5_CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device5_CreateSampler(This,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateSampler(This,pDesc,DestDescriptor) ) - -#define ID3D12Device5_CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) \ - ( (This)->lpVtbl -> CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) ) - -#define ID3D12Device5_CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) \ - ( (This)->lpVtbl -> CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) ) -#if !defined(_WIN32) - -#define ID3D12Device5_GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) ) -#else -#define ID3D12Device5_GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) ) -#endif -#if !defined(_WIN32) - -#define ID3D12Device5_GetCustomHeapProperties(This,nodeMask,heapType) \ - ( (This)->lpVtbl -> GetCustomHeapProperties(This,nodeMask,heapType) ) -#else -#define ID3D12Device5_GetCustomHeapProperties(This,RetVal,nodeMask,heapType) \ - ( (This)->lpVtbl -> GetCustomHeapProperties(This,RetVal,nodeMask,heapType) ) -#endif - -#define ID3D12Device5_CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) \ - ( (This)->lpVtbl -> CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) ) - -#define ID3D12Device5_CreateHeap(This,pDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateHeap(This,pDesc,riid,ppvHeap) ) - -#define ID3D12Device5_CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) \ - ( (This)->lpVtbl -> CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) - -#define ID3D12Device5_CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) \ - ( (This)->lpVtbl -> CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) - -#define ID3D12Device5_CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) \ - ( (This)->lpVtbl -> CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) ) - -#define ID3D12Device5_OpenSharedHandle(This,NTHandle,riid,ppvObj) \ - ( (This)->lpVtbl -> OpenSharedHandle(This,NTHandle,riid,ppvObj) ) - -#define ID3D12Device5_OpenSharedHandleByName(This,Name,Access,pNTHandle) \ - ( (This)->lpVtbl -> OpenSharedHandleByName(This,Name,Access,pNTHandle) ) - -#define ID3D12Device5_MakeResident(This,NumObjects,ppObjects) \ - ( (This)->lpVtbl -> MakeResident(This,NumObjects,ppObjects) ) - -#define ID3D12Device5_Evict(This,NumObjects,ppObjects) \ - ( (This)->lpVtbl -> Evict(This,NumObjects,ppObjects) ) - -#define ID3D12Device5_CreateFence(This,InitialValue,Flags,riid,ppFence) \ - ( (This)->lpVtbl -> CreateFence(This,InitialValue,Flags,riid,ppFence) ) - -#define ID3D12Device5_GetDeviceRemovedReason(This) \ - ( (This)->lpVtbl -> GetDeviceRemovedReason(This) ) - -#define ID3D12Device5_GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) \ - ( (This)->lpVtbl -> GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) - -#define ID3D12Device5_CreateQueryHeap(This,pDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateQueryHeap(This,pDesc,riid,ppvHeap) ) - -#define ID3D12Device5_SetStablePowerState(This,Enable) \ - ( (This)->lpVtbl -> SetStablePowerState(This,Enable) ) - -#define ID3D12Device5_CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) \ - ( (This)->lpVtbl -> CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) ) - -#define ID3D12Device5_GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) \ - ( (This)->lpVtbl -> GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) ) -#if !defined(_WIN32) - -#define ID3D12Device5_GetAdapterLuid(This) \ - ( (This)->lpVtbl -> GetAdapterLuid(This) ) -#else -#define ID3D12Device5_GetAdapterLuid(This,RetVal) \ - ( (This)->lpVtbl -> GetAdapterLuid(This,RetVal) ) -#endif - -#define ID3D12Device5_CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) \ - ( (This)->lpVtbl -> CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) ) - -#define ID3D12Device5_SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) \ - ( (This)->lpVtbl -> SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) ) - -#define ID3D12Device5_SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) \ - ( (This)->lpVtbl -> SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) ) - -#define ID3D12Device5_CreatePipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreatePipelineState(This,pDesc,riid,ppPipelineState) ) - -#define ID3D12Device5_OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap) \ - ( (This)->lpVtbl -> OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap) ) - -#define ID3D12Device5_OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap) \ - ( (This)->lpVtbl -> OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap) ) - -#define ID3D12Device5_EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal) \ - ( (This)->lpVtbl -> EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal) ) - -#define ID3D12Device5_CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList) \ - ( (This)->lpVtbl -> CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList) ) - -#define ID3D12Device5_CreateProtectedResourceSession(This,pDesc,riid,ppSession) \ - ( (This)->lpVtbl -> CreateProtectedResourceSession(This,pDesc,riid,ppSession) ) - -#define ID3D12Device5_CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) \ - ( (This)->lpVtbl -> CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) ) - -#define ID3D12Device5_CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap) ) - -#define ID3D12Device5_CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource) \ - ( (This)->lpVtbl -> CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource) ) -#if !defined(_WIN32) - -#define ID3D12Device5_GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) -#else -#define ID3D12Device5_GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) -#endif - -#define ID3D12Device5_CreateLifetimeTracker(This,pOwner,riid,ppvTracker) \ - ( (This)->lpVtbl -> CreateLifetimeTracker(This,pOwner,riid,ppvTracker) ) - -#define ID3D12Device5_RemoveDevice(This) \ - ( (This)->lpVtbl -> RemoveDevice(This) ) - -#define ID3D12Device5_EnumerateMetaCommands(This,pNumMetaCommands,pDescs) \ - ( (This)->lpVtbl -> EnumerateMetaCommands(This,pNumMetaCommands,pDescs) ) - -#define ID3D12Device5_EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs) \ - ( (This)->lpVtbl -> EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs) ) - -#define ID3D12Device5_CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand) \ - ( (This)->lpVtbl -> CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand) ) - -#define ID3D12Device5_CreateStateObject(This,pDesc,riid,ppStateObject) \ - ( (This)->lpVtbl -> CreateStateObject(This,pDesc,riid,ppStateObject) ) - -#define ID3D12Device5_GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo) \ - ( (This)->lpVtbl -> GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo) ) - -#define ID3D12Device5_CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck) \ - ( (This)->lpVtbl -> CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12Device5_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12_0000_0037 */ -/* [local] */ - -typedef -enum D3D12_AUTO_BREADCRUMB_OP - { - D3D12_AUTO_BREADCRUMB_OP_SETMARKER = 0, - D3D12_AUTO_BREADCRUMB_OP_BEGINEVENT = 1, - D3D12_AUTO_BREADCRUMB_OP_ENDEVENT = 2, - D3D12_AUTO_BREADCRUMB_OP_DRAWINSTANCED = 3, - D3D12_AUTO_BREADCRUMB_OP_DRAWINDEXEDINSTANCED = 4, - D3D12_AUTO_BREADCRUMB_OP_EXECUTEINDIRECT = 5, - D3D12_AUTO_BREADCRUMB_OP_DISPATCH = 6, - D3D12_AUTO_BREADCRUMB_OP_COPYBUFFERREGION = 7, - D3D12_AUTO_BREADCRUMB_OP_COPYTEXTUREREGION = 8, - D3D12_AUTO_BREADCRUMB_OP_COPYRESOURCE = 9, - D3D12_AUTO_BREADCRUMB_OP_COPYTILES = 10, - D3D12_AUTO_BREADCRUMB_OP_RESOLVESUBRESOURCE = 11, - D3D12_AUTO_BREADCRUMB_OP_CLEARRENDERTARGETVIEW = 12, - D3D12_AUTO_BREADCRUMB_OP_CLEARUNORDEREDACCESSVIEW = 13, - D3D12_AUTO_BREADCRUMB_OP_CLEARDEPTHSTENCILVIEW = 14, - D3D12_AUTO_BREADCRUMB_OP_RESOURCEBARRIER = 15, - D3D12_AUTO_BREADCRUMB_OP_EXECUTEBUNDLE = 16, - D3D12_AUTO_BREADCRUMB_OP_PRESENT = 17, - D3D12_AUTO_BREADCRUMB_OP_RESOLVEQUERYDATA = 18, - D3D12_AUTO_BREADCRUMB_OP_BEGINSUBMISSION = 19, - D3D12_AUTO_BREADCRUMB_OP_ENDSUBMISSION = 20, - D3D12_AUTO_BREADCRUMB_OP_DECODEFRAME = 21, - D3D12_AUTO_BREADCRUMB_OP_PROCESSFRAMES = 22, - D3D12_AUTO_BREADCRUMB_OP_ATOMICCOPYBUFFERUINT = 23, - D3D12_AUTO_BREADCRUMB_OP_ATOMICCOPYBUFFERUINT64 = 24, - D3D12_AUTO_BREADCRUMB_OP_RESOLVESUBRESOURCEREGION = 25, - D3D12_AUTO_BREADCRUMB_OP_WRITEBUFFERIMMEDIATE = 26, - D3D12_AUTO_BREADCRUMB_OP_DECODEFRAME1 = 27, - D3D12_AUTO_BREADCRUMB_OP_SETPROTECTEDRESOURCESESSION = 28, - D3D12_AUTO_BREADCRUMB_OP_DECODEFRAME2 = 29, - D3D12_AUTO_BREADCRUMB_OP_PROCESSFRAMES1 = 30, - D3D12_AUTO_BREADCRUMB_OP_BUILDRAYTRACINGACCELERATIONSTRUCTURE = 31, - D3D12_AUTO_BREADCRUMB_OP_EMITRAYTRACINGACCELERATIONSTRUCTUREPOSTBUILDINFO = 32, - D3D12_AUTO_BREADCRUMB_OP_COPYRAYTRACINGACCELERATIONSTRUCTURE = 33, - D3D12_AUTO_BREADCRUMB_OP_DISPATCHRAYS = 34, - D3D12_AUTO_BREADCRUMB_OP_INITIALIZEMETACOMMAND = 35, - D3D12_AUTO_BREADCRUMB_OP_EXECUTEMETACOMMAND = 36, - D3D12_AUTO_BREADCRUMB_OP_ESTIMATEMOTION = 37, - D3D12_AUTO_BREADCRUMB_OP_RESOLVEMOTIONVECTORHEAP = 38, - D3D12_AUTO_BREADCRUMB_OP_SETPIPELINESTATE1 = 39, - D3D12_AUTO_BREADCRUMB_OP_INITIALIZEEXTENSIONCOMMAND = 40, - D3D12_AUTO_BREADCRUMB_OP_EXECUTEEXTENSIONCOMMAND = 41, - D3D12_AUTO_BREADCRUMB_OP_DISPATCHMESH = 42, - D3D12_AUTO_BREADCRUMB_OP_ENCODEFRAME = 43, - D3D12_AUTO_BREADCRUMB_OP_RESOLVEENCODEROUTPUTMETADATA = 44, - D3D12_AUTO_BREADCRUMB_OP_BARRIER = 45, - D3D12_AUTO_BREADCRUMB_OP_BEGIN_COMMAND_LIST = 46, - D3D12_AUTO_BREADCRUMB_OP_DISPATCHGRAPH = 47, - D3D12_AUTO_BREADCRUMB_OP_SETPROGRAM = 48, - D3D12_AUTO_BREADCRUMB_OP_PROCESSFRAMES2 = 52 - } D3D12_AUTO_BREADCRUMB_OP; - -typedef struct D3D12_AUTO_BREADCRUMB_NODE - { - const char *pCommandListDebugNameA; - const wchar_t *pCommandListDebugNameW; - const char *pCommandQueueDebugNameA; - const wchar_t *pCommandQueueDebugNameW; - ID3D12GraphicsCommandList *pCommandList; - ID3D12CommandQueue *pCommandQueue; - UINT32 BreadcrumbCount; - const UINT32 *pLastBreadcrumbValue; - const D3D12_AUTO_BREADCRUMB_OP *pCommandHistory; - const struct D3D12_AUTO_BREADCRUMB_NODE *pNext; - } D3D12_AUTO_BREADCRUMB_NODE; - -typedef struct D3D12_DRED_BREADCRUMB_CONTEXT - { - UINT BreadcrumbIndex; - const wchar_t *pContextString; - } D3D12_DRED_BREADCRUMB_CONTEXT; - -typedef struct D3D12_AUTO_BREADCRUMB_NODE1 - { - const char *pCommandListDebugNameA; - const wchar_t *pCommandListDebugNameW; - const char *pCommandQueueDebugNameA; - const wchar_t *pCommandQueueDebugNameW; - ID3D12GraphicsCommandList *pCommandList; - ID3D12CommandQueue *pCommandQueue; - UINT BreadcrumbCount; - const UINT *pLastBreadcrumbValue; - const D3D12_AUTO_BREADCRUMB_OP *pCommandHistory; - const struct D3D12_AUTO_BREADCRUMB_NODE1 *pNext; - UINT BreadcrumbContextsCount; - D3D12_DRED_BREADCRUMB_CONTEXT *pBreadcrumbContexts; - } D3D12_AUTO_BREADCRUMB_NODE1; - -typedef -enum D3D12_DRED_VERSION - { - D3D12_DRED_VERSION_1_0 = 0x1, - D3D12_DRED_VERSION_1_1 = 0x2, - D3D12_DRED_VERSION_1_2 = 0x3, - D3D12_DRED_VERSION_1_3 = 0x4 - } D3D12_DRED_VERSION; - -typedef -enum D3D12_DRED_FLAGS - { - D3D12_DRED_FLAG_NONE = 0, - D3D12_DRED_FLAG_FORCE_ENABLE = 1, - D3D12_DRED_FLAG_DISABLE_AUTOBREADCRUMBS = 2 - } D3D12_DRED_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_DRED_FLAGS ) -typedef -enum D3D12_DRED_ENABLEMENT - { - D3D12_DRED_ENABLEMENT_SYSTEM_CONTROLLED = 0, - D3D12_DRED_ENABLEMENT_FORCED_OFF = 1, - D3D12_DRED_ENABLEMENT_FORCED_ON = 2 - } D3D12_DRED_ENABLEMENT; - -typedef struct D3D12_DEVICE_REMOVED_EXTENDED_DATA - { - _In_ D3D12_DRED_FLAGS Flags; - _Out_ D3D12_AUTO_BREADCRUMB_NODE *pHeadAutoBreadcrumbNode; - } D3D12_DEVICE_REMOVED_EXTENDED_DATA; - -typedef -enum D3D12_DRED_ALLOCATION_TYPE - { - D3D12_DRED_ALLOCATION_TYPE_COMMAND_QUEUE = 19, - D3D12_DRED_ALLOCATION_TYPE_COMMAND_ALLOCATOR = 20, - D3D12_DRED_ALLOCATION_TYPE_PIPELINE_STATE = 21, - D3D12_DRED_ALLOCATION_TYPE_COMMAND_LIST = 22, - D3D12_DRED_ALLOCATION_TYPE_FENCE = 23, - D3D12_DRED_ALLOCATION_TYPE_DESCRIPTOR_HEAP = 24, - D3D12_DRED_ALLOCATION_TYPE_HEAP = 25, - D3D12_DRED_ALLOCATION_TYPE_QUERY_HEAP = 27, - D3D12_DRED_ALLOCATION_TYPE_COMMAND_SIGNATURE = 28, - D3D12_DRED_ALLOCATION_TYPE_PIPELINE_LIBRARY = 29, - D3D12_DRED_ALLOCATION_TYPE_VIDEO_DECODER = 30, - D3D12_DRED_ALLOCATION_TYPE_VIDEO_PROCESSOR = 32, - D3D12_DRED_ALLOCATION_TYPE_RESOURCE = 34, - D3D12_DRED_ALLOCATION_TYPE_PASS = 35, - D3D12_DRED_ALLOCATION_TYPE_CRYPTOSESSION = 36, - D3D12_DRED_ALLOCATION_TYPE_CRYPTOSESSIONPOLICY = 37, - D3D12_DRED_ALLOCATION_TYPE_PROTECTEDRESOURCESESSION = 38, - D3D12_DRED_ALLOCATION_TYPE_VIDEO_DECODER_HEAP = 39, - D3D12_DRED_ALLOCATION_TYPE_COMMAND_POOL = 40, - D3D12_DRED_ALLOCATION_TYPE_COMMAND_RECORDER = 41, - D3D12_DRED_ALLOCATION_TYPE_STATE_OBJECT = 42, - D3D12_DRED_ALLOCATION_TYPE_METACOMMAND = 43, - D3D12_DRED_ALLOCATION_TYPE_SCHEDULINGGROUP = 44, - D3D12_DRED_ALLOCATION_TYPE_VIDEO_MOTION_ESTIMATOR = 45, - D3D12_DRED_ALLOCATION_TYPE_VIDEO_MOTION_VECTOR_HEAP = 46, - D3D12_DRED_ALLOCATION_TYPE_VIDEO_EXTENSION_COMMAND = 47, - D3D12_DRED_ALLOCATION_TYPE_VIDEO_ENCODER = 48, - D3D12_DRED_ALLOCATION_TYPE_VIDEO_ENCODER_HEAP = 49, - D3D12_DRED_ALLOCATION_TYPE_INVALID = 0xffffffff - } D3D12_DRED_ALLOCATION_TYPE; - -typedef struct D3D12_DRED_ALLOCATION_NODE - { - const char *ObjectNameA; - const wchar_t *ObjectNameW; - D3D12_DRED_ALLOCATION_TYPE AllocationType; - const struct D3D12_DRED_ALLOCATION_NODE *pNext; - } D3D12_DRED_ALLOCATION_NODE; - -typedef struct D3D12_DRED_ALLOCATION_NODE1 - { - const char *ObjectNameA; - const wchar_t *ObjectNameW; - D3D12_DRED_ALLOCATION_TYPE AllocationType; - const struct D3D12_DRED_ALLOCATION_NODE1 *pNext; - const IUnknown *pObject; - } D3D12_DRED_ALLOCATION_NODE1; - -typedef struct D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT - { - _Out_ const D3D12_AUTO_BREADCRUMB_NODE *pHeadAutoBreadcrumbNode; - } D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT; - -typedef struct D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT1 - { - _Out_ const D3D12_AUTO_BREADCRUMB_NODE1 *pHeadAutoBreadcrumbNode; - } D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT1; - -typedef struct D3D12_DRED_PAGE_FAULT_OUTPUT - { - D3D12_GPU_VIRTUAL_ADDRESS PageFaultVA; - _Out_ const D3D12_DRED_ALLOCATION_NODE *pHeadExistingAllocationNode; - _Out_ const D3D12_DRED_ALLOCATION_NODE *pHeadRecentFreedAllocationNode; - } D3D12_DRED_PAGE_FAULT_OUTPUT; - -typedef struct D3D12_DRED_PAGE_FAULT_OUTPUT1 - { - D3D12_GPU_VIRTUAL_ADDRESS PageFaultVA; - _Out_ const D3D12_DRED_ALLOCATION_NODE1 *pHeadExistingAllocationNode; - _Out_ const D3D12_DRED_ALLOCATION_NODE1 *pHeadRecentFreedAllocationNode; - } D3D12_DRED_PAGE_FAULT_OUTPUT1; - -typedef -enum D3D12_DRED_PAGE_FAULT_FLAGS - { - D3D12_DRED_PAGE_FAULT_FLAGS_NONE = 0 - } D3D12_DRED_PAGE_FAULT_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_DRED_PAGE_FAULT_FLAGS ) -typedef -enum D3D12_DRED_DEVICE_STATE - { - D3D12_DRED_DEVICE_STATE_UNKNOWN = 0, - D3D12_DRED_DEVICE_STATE_HUNG = 3, - D3D12_DRED_DEVICE_STATE_FAULT = 6, - D3D12_DRED_DEVICE_STATE_PAGEFAULT = 7 - } D3D12_DRED_DEVICE_STATE; - -typedef struct D3D12_DRED_PAGE_FAULT_OUTPUT2 - { - D3D12_GPU_VIRTUAL_ADDRESS PageFaultVA; - _Out_ const D3D12_DRED_ALLOCATION_NODE1 *pHeadExistingAllocationNode; - _Out_ const D3D12_DRED_ALLOCATION_NODE1 *pHeadRecentFreedAllocationNode; - D3D12_DRED_PAGE_FAULT_FLAGS PageFaultFlags; - } D3D12_DRED_PAGE_FAULT_OUTPUT2; - -typedef struct D3D12_DEVICE_REMOVED_EXTENDED_DATA1 - { - HRESULT DeviceRemovedReason; - D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT AutoBreadcrumbsOutput; - D3D12_DRED_PAGE_FAULT_OUTPUT PageFaultOutput; - } D3D12_DEVICE_REMOVED_EXTENDED_DATA1; - -typedef struct D3D12_DEVICE_REMOVED_EXTENDED_DATA2 - { - HRESULT DeviceRemovedReason; - D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT1 AutoBreadcrumbsOutput; - D3D12_DRED_PAGE_FAULT_OUTPUT1 PageFaultOutput; - } D3D12_DEVICE_REMOVED_EXTENDED_DATA2; - -typedef struct D3D12_DEVICE_REMOVED_EXTENDED_DATA3 - { - HRESULT DeviceRemovedReason; - D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT1 AutoBreadcrumbsOutput; - D3D12_DRED_PAGE_FAULT_OUTPUT2 PageFaultOutput; - D3D12_DRED_DEVICE_STATE DeviceState; - } D3D12_DEVICE_REMOVED_EXTENDED_DATA3; - -typedef struct D3D12_VERSIONED_DEVICE_REMOVED_EXTENDED_DATA - { - D3D12_DRED_VERSION Version; - union - { - D3D12_DEVICE_REMOVED_EXTENDED_DATA Dred_1_0; - D3D12_DEVICE_REMOVED_EXTENDED_DATA1 Dred_1_1; - D3D12_DEVICE_REMOVED_EXTENDED_DATA2 Dred_1_2; - D3D12_DEVICE_REMOVED_EXTENDED_DATA3 Dred_1_3; - } ; - } D3D12_VERSIONED_DEVICE_REMOVED_EXTENDED_DATA; - -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0037_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0037_v0_0_s_ifspec; - -#ifndef __ID3D12DeviceRemovedExtendedDataSettings_INTERFACE_DEFINED__ -#define __ID3D12DeviceRemovedExtendedDataSettings_INTERFACE_DEFINED__ - -/* interface ID3D12DeviceRemovedExtendedDataSettings */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12DeviceRemovedExtendedDataSettings; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("82BC481C-6B9B-4030-AEDB-7EE3D1DF1E63") - ID3D12DeviceRemovedExtendedDataSettings : public IUnknown - { - public: - virtual void STDMETHODCALLTYPE SetAutoBreadcrumbsEnablement( - D3D12_DRED_ENABLEMENT Enablement) = 0; - - virtual void STDMETHODCALLTYPE SetPageFaultEnablement( - D3D12_DRED_ENABLEMENT Enablement) = 0; - - virtual void STDMETHODCALLTYPE SetWatsonDumpEnablement( - D3D12_DRED_ENABLEMENT Enablement) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12DeviceRemovedExtendedDataSettingsVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12DeviceRemovedExtendedDataSettings * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12DeviceRemovedExtendedDataSettings * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12DeviceRemovedExtendedDataSettings * This); - - DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedDataSettings, SetAutoBreadcrumbsEnablement) - void ( STDMETHODCALLTYPE *SetAutoBreadcrumbsEnablement )( - ID3D12DeviceRemovedExtendedDataSettings * This, - D3D12_DRED_ENABLEMENT Enablement); - - DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedDataSettings, SetPageFaultEnablement) - void ( STDMETHODCALLTYPE *SetPageFaultEnablement )( - ID3D12DeviceRemovedExtendedDataSettings * This, - D3D12_DRED_ENABLEMENT Enablement); - - DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedDataSettings, SetWatsonDumpEnablement) - void ( STDMETHODCALLTYPE *SetWatsonDumpEnablement )( - ID3D12DeviceRemovedExtendedDataSettings * This, - D3D12_DRED_ENABLEMENT Enablement); - - END_INTERFACE - } ID3D12DeviceRemovedExtendedDataSettingsVtbl; - - interface ID3D12DeviceRemovedExtendedDataSettings - { - CONST_VTBL struct ID3D12DeviceRemovedExtendedDataSettingsVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12DeviceRemovedExtendedDataSettings_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12DeviceRemovedExtendedDataSettings_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12DeviceRemovedExtendedDataSettings_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12DeviceRemovedExtendedDataSettings_SetAutoBreadcrumbsEnablement(This,Enablement) \ - ( (This)->lpVtbl -> SetAutoBreadcrumbsEnablement(This,Enablement) ) - -#define ID3D12DeviceRemovedExtendedDataSettings_SetPageFaultEnablement(This,Enablement) \ - ( (This)->lpVtbl -> SetPageFaultEnablement(This,Enablement) ) - -#define ID3D12DeviceRemovedExtendedDataSettings_SetWatsonDumpEnablement(This,Enablement) \ - ( (This)->lpVtbl -> SetWatsonDumpEnablement(This,Enablement) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12DeviceRemovedExtendedDataSettings_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12DeviceRemovedExtendedDataSettings1_INTERFACE_DEFINED__ -#define __ID3D12DeviceRemovedExtendedDataSettings1_INTERFACE_DEFINED__ - -/* interface ID3D12DeviceRemovedExtendedDataSettings1 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12DeviceRemovedExtendedDataSettings1; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("DBD5AE51-3317-4F0A-ADF9-1D7CEDCAAE0B") - ID3D12DeviceRemovedExtendedDataSettings1 : public ID3D12DeviceRemovedExtendedDataSettings - { - public: - virtual void STDMETHODCALLTYPE SetBreadcrumbContextEnablement( - D3D12_DRED_ENABLEMENT Enablement) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12DeviceRemovedExtendedDataSettings1Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12DeviceRemovedExtendedDataSettings1 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12DeviceRemovedExtendedDataSettings1 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12DeviceRemovedExtendedDataSettings1 * This); - - DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedDataSettings, SetAutoBreadcrumbsEnablement) - void ( STDMETHODCALLTYPE *SetAutoBreadcrumbsEnablement )( - ID3D12DeviceRemovedExtendedDataSettings1 * This, - D3D12_DRED_ENABLEMENT Enablement); - - DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedDataSettings, SetPageFaultEnablement) - void ( STDMETHODCALLTYPE *SetPageFaultEnablement )( - ID3D12DeviceRemovedExtendedDataSettings1 * This, - D3D12_DRED_ENABLEMENT Enablement); - - DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedDataSettings, SetWatsonDumpEnablement) - void ( STDMETHODCALLTYPE *SetWatsonDumpEnablement )( - ID3D12DeviceRemovedExtendedDataSettings1 * This, - D3D12_DRED_ENABLEMENT Enablement); - - DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedDataSettings1, SetBreadcrumbContextEnablement) - void ( STDMETHODCALLTYPE *SetBreadcrumbContextEnablement )( - ID3D12DeviceRemovedExtendedDataSettings1 * This, - D3D12_DRED_ENABLEMENT Enablement); - - END_INTERFACE - } ID3D12DeviceRemovedExtendedDataSettings1Vtbl; - - interface ID3D12DeviceRemovedExtendedDataSettings1 - { - CONST_VTBL struct ID3D12DeviceRemovedExtendedDataSettings1Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12DeviceRemovedExtendedDataSettings1_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12DeviceRemovedExtendedDataSettings1_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12DeviceRemovedExtendedDataSettings1_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12DeviceRemovedExtendedDataSettings1_SetAutoBreadcrumbsEnablement(This,Enablement) \ - ( (This)->lpVtbl -> SetAutoBreadcrumbsEnablement(This,Enablement) ) - -#define ID3D12DeviceRemovedExtendedDataSettings1_SetPageFaultEnablement(This,Enablement) \ - ( (This)->lpVtbl -> SetPageFaultEnablement(This,Enablement) ) - -#define ID3D12DeviceRemovedExtendedDataSettings1_SetWatsonDumpEnablement(This,Enablement) \ - ( (This)->lpVtbl -> SetWatsonDumpEnablement(This,Enablement) ) - -#define ID3D12DeviceRemovedExtendedDataSettings1_SetBreadcrumbContextEnablement(This,Enablement) \ - ( (This)->lpVtbl -> SetBreadcrumbContextEnablement(This,Enablement) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12DeviceRemovedExtendedDataSettings1_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12DeviceRemovedExtendedDataSettings2_INTERFACE_DEFINED__ -#define __ID3D12DeviceRemovedExtendedDataSettings2_INTERFACE_DEFINED__ - -/* interface ID3D12DeviceRemovedExtendedDataSettings2 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12DeviceRemovedExtendedDataSettings2; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("61552388-01ab-4008-a436-83db189566ea") - ID3D12DeviceRemovedExtendedDataSettings2 : public ID3D12DeviceRemovedExtendedDataSettings1 - { - public: - virtual void STDMETHODCALLTYPE UseMarkersOnlyAutoBreadcrumbs( - BOOL MarkersOnly) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12DeviceRemovedExtendedDataSettings2Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12DeviceRemovedExtendedDataSettings2 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12DeviceRemovedExtendedDataSettings2 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12DeviceRemovedExtendedDataSettings2 * This); - - DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedDataSettings, SetAutoBreadcrumbsEnablement) - void ( STDMETHODCALLTYPE *SetAutoBreadcrumbsEnablement )( - ID3D12DeviceRemovedExtendedDataSettings2 * This, - D3D12_DRED_ENABLEMENT Enablement); - - DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedDataSettings, SetPageFaultEnablement) - void ( STDMETHODCALLTYPE *SetPageFaultEnablement )( - ID3D12DeviceRemovedExtendedDataSettings2 * This, - D3D12_DRED_ENABLEMENT Enablement); - - DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedDataSettings, SetWatsonDumpEnablement) - void ( STDMETHODCALLTYPE *SetWatsonDumpEnablement )( - ID3D12DeviceRemovedExtendedDataSettings2 * This, - D3D12_DRED_ENABLEMENT Enablement); - - DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedDataSettings1, SetBreadcrumbContextEnablement) - void ( STDMETHODCALLTYPE *SetBreadcrumbContextEnablement )( - ID3D12DeviceRemovedExtendedDataSettings2 * This, - D3D12_DRED_ENABLEMENT Enablement); - - DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedDataSettings2, UseMarkersOnlyAutoBreadcrumbs) - void ( STDMETHODCALLTYPE *UseMarkersOnlyAutoBreadcrumbs )( - ID3D12DeviceRemovedExtendedDataSettings2 * This, - BOOL MarkersOnly); - - END_INTERFACE - } ID3D12DeviceRemovedExtendedDataSettings2Vtbl; - - interface ID3D12DeviceRemovedExtendedDataSettings2 - { - CONST_VTBL struct ID3D12DeviceRemovedExtendedDataSettings2Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12DeviceRemovedExtendedDataSettings2_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12DeviceRemovedExtendedDataSettings2_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12DeviceRemovedExtendedDataSettings2_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12DeviceRemovedExtendedDataSettings2_SetAutoBreadcrumbsEnablement(This,Enablement) \ - ( (This)->lpVtbl -> SetAutoBreadcrumbsEnablement(This,Enablement) ) - -#define ID3D12DeviceRemovedExtendedDataSettings2_SetPageFaultEnablement(This,Enablement) \ - ( (This)->lpVtbl -> SetPageFaultEnablement(This,Enablement) ) - -#define ID3D12DeviceRemovedExtendedDataSettings2_SetWatsonDumpEnablement(This,Enablement) \ - ( (This)->lpVtbl -> SetWatsonDumpEnablement(This,Enablement) ) - -#define ID3D12DeviceRemovedExtendedDataSettings2_SetBreadcrumbContextEnablement(This,Enablement) \ - ( (This)->lpVtbl -> SetBreadcrumbContextEnablement(This,Enablement) ) - -#define ID3D12DeviceRemovedExtendedDataSettings2_UseMarkersOnlyAutoBreadcrumbs(This,MarkersOnly) \ - ( (This)->lpVtbl -> UseMarkersOnlyAutoBreadcrumbs(This,MarkersOnly) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12DeviceRemovedExtendedDataSettings2_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12DeviceRemovedExtendedData_INTERFACE_DEFINED__ -#define __ID3D12DeviceRemovedExtendedData_INTERFACE_DEFINED__ - -/* interface ID3D12DeviceRemovedExtendedData */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12DeviceRemovedExtendedData; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("98931D33-5AE8-4791-AA3C-1A73A2934E71") - ID3D12DeviceRemovedExtendedData : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE GetAutoBreadcrumbsOutput( - _Out_ D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT *pOutput) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetPageFaultAllocationOutput( - _Out_ D3D12_DRED_PAGE_FAULT_OUTPUT *pOutput) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12DeviceRemovedExtendedDataVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12DeviceRemovedExtendedData * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12DeviceRemovedExtendedData * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12DeviceRemovedExtendedData * This); - - DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedData, GetAutoBreadcrumbsOutput) - HRESULT ( STDMETHODCALLTYPE *GetAutoBreadcrumbsOutput )( - ID3D12DeviceRemovedExtendedData * This, - _Out_ D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT *pOutput); - - DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedData, GetPageFaultAllocationOutput) - HRESULT ( STDMETHODCALLTYPE *GetPageFaultAllocationOutput )( - ID3D12DeviceRemovedExtendedData * This, - _Out_ D3D12_DRED_PAGE_FAULT_OUTPUT *pOutput); - - END_INTERFACE - } ID3D12DeviceRemovedExtendedDataVtbl; - - interface ID3D12DeviceRemovedExtendedData - { - CONST_VTBL struct ID3D12DeviceRemovedExtendedDataVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12DeviceRemovedExtendedData_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12DeviceRemovedExtendedData_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12DeviceRemovedExtendedData_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12DeviceRemovedExtendedData_GetAutoBreadcrumbsOutput(This,pOutput) \ - ( (This)->lpVtbl -> GetAutoBreadcrumbsOutput(This,pOutput) ) - -#define ID3D12DeviceRemovedExtendedData_GetPageFaultAllocationOutput(This,pOutput) \ - ( (This)->lpVtbl -> GetPageFaultAllocationOutput(This,pOutput) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12DeviceRemovedExtendedData_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12DeviceRemovedExtendedData1_INTERFACE_DEFINED__ -#define __ID3D12DeviceRemovedExtendedData1_INTERFACE_DEFINED__ - -/* interface ID3D12DeviceRemovedExtendedData1 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12DeviceRemovedExtendedData1; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("9727A022-CF1D-4DDA-9EBA-EFFA653FC506") - ID3D12DeviceRemovedExtendedData1 : public ID3D12DeviceRemovedExtendedData - { - public: - virtual HRESULT STDMETHODCALLTYPE GetAutoBreadcrumbsOutput1( - _Out_ D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT1 *pOutput) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetPageFaultAllocationOutput1( - _Out_ D3D12_DRED_PAGE_FAULT_OUTPUT1 *pOutput) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12DeviceRemovedExtendedData1Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12DeviceRemovedExtendedData1 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12DeviceRemovedExtendedData1 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12DeviceRemovedExtendedData1 * This); - - DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedData, GetAutoBreadcrumbsOutput) - HRESULT ( STDMETHODCALLTYPE *GetAutoBreadcrumbsOutput )( - ID3D12DeviceRemovedExtendedData1 * This, - _Out_ D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT *pOutput); - - DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedData, GetPageFaultAllocationOutput) - HRESULT ( STDMETHODCALLTYPE *GetPageFaultAllocationOutput )( - ID3D12DeviceRemovedExtendedData1 * This, - _Out_ D3D12_DRED_PAGE_FAULT_OUTPUT *pOutput); - - DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedData1, GetAutoBreadcrumbsOutput1) - HRESULT ( STDMETHODCALLTYPE *GetAutoBreadcrumbsOutput1 )( - ID3D12DeviceRemovedExtendedData1 * This, - _Out_ D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT1 *pOutput); - - DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedData1, GetPageFaultAllocationOutput1) - HRESULT ( STDMETHODCALLTYPE *GetPageFaultAllocationOutput1 )( - ID3D12DeviceRemovedExtendedData1 * This, - _Out_ D3D12_DRED_PAGE_FAULT_OUTPUT1 *pOutput); - - END_INTERFACE - } ID3D12DeviceRemovedExtendedData1Vtbl; - - interface ID3D12DeviceRemovedExtendedData1 - { - CONST_VTBL struct ID3D12DeviceRemovedExtendedData1Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12DeviceRemovedExtendedData1_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12DeviceRemovedExtendedData1_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12DeviceRemovedExtendedData1_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12DeviceRemovedExtendedData1_GetAutoBreadcrumbsOutput(This,pOutput) \ - ( (This)->lpVtbl -> GetAutoBreadcrumbsOutput(This,pOutput) ) - -#define ID3D12DeviceRemovedExtendedData1_GetPageFaultAllocationOutput(This,pOutput) \ - ( (This)->lpVtbl -> GetPageFaultAllocationOutput(This,pOutput) ) - -#define ID3D12DeviceRemovedExtendedData1_GetAutoBreadcrumbsOutput1(This,pOutput) \ - ( (This)->lpVtbl -> GetAutoBreadcrumbsOutput1(This,pOutput) ) - -#define ID3D12DeviceRemovedExtendedData1_GetPageFaultAllocationOutput1(This,pOutput) \ - ( (This)->lpVtbl -> GetPageFaultAllocationOutput1(This,pOutput) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12DeviceRemovedExtendedData1_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12DeviceRemovedExtendedData2_INTERFACE_DEFINED__ -#define __ID3D12DeviceRemovedExtendedData2_INTERFACE_DEFINED__ - -/* interface ID3D12DeviceRemovedExtendedData2 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12DeviceRemovedExtendedData2; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("67FC5816-E4CA-4915-BF18-42541272DA54") - ID3D12DeviceRemovedExtendedData2 : public ID3D12DeviceRemovedExtendedData1 - { - public: - virtual HRESULT STDMETHODCALLTYPE GetPageFaultAllocationOutput2( - _Out_ D3D12_DRED_PAGE_FAULT_OUTPUT2 *pOutput) = 0; - - virtual D3D12_DRED_DEVICE_STATE STDMETHODCALLTYPE GetDeviceState( void) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12DeviceRemovedExtendedData2Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12DeviceRemovedExtendedData2 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12DeviceRemovedExtendedData2 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12DeviceRemovedExtendedData2 * This); - - DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedData, GetAutoBreadcrumbsOutput) - HRESULT ( STDMETHODCALLTYPE *GetAutoBreadcrumbsOutput )( - ID3D12DeviceRemovedExtendedData2 * This, - _Out_ D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT *pOutput); - - DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedData, GetPageFaultAllocationOutput) - HRESULT ( STDMETHODCALLTYPE *GetPageFaultAllocationOutput )( - ID3D12DeviceRemovedExtendedData2 * This, - _Out_ D3D12_DRED_PAGE_FAULT_OUTPUT *pOutput); - - DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedData1, GetAutoBreadcrumbsOutput1) - HRESULT ( STDMETHODCALLTYPE *GetAutoBreadcrumbsOutput1 )( - ID3D12DeviceRemovedExtendedData2 * This, - _Out_ D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT1 *pOutput); - - DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedData1, GetPageFaultAllocationOutput1) - HRESULT ( STDMETHODCALLTYPE *GetPageFaultAllocationOutput1 )( - ID3D12DeviceRemovedExtendedData2 * This, - _Out_ D3D12_DRED_PAGE_FAULT_OUTPUT1 *pOutput); - - DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedData2, GetPageFaultAllocationOutput2) - HRESULT ( STDMETHODCALLTYPE *GetPageFaultAllocationOutput2 )( - ID3D12DeviceRemovedExtendedData2 * This, - _Out_ D3D12_DRED_PAGE_FAULT_OUTPUT2 *pOutput); - - DECLSPEC_XFGVIRT(ID3D12DeviceRemovedExtendedData2, GetDeviceState) - D3D12_DRED_DEVICE_STATE ( STDMETHODCALLTYPE *GetDeviceState )( - ID3D12DeviceRemovedExtendedData2 * This); - - END_INTERFACE - } ID3D12DeviceRemovedExtendedData2Vtbl; - - interface ID3D12DeviceRemovedExtendedData2 - { - CONST_VTBL struct ID3D12DeviceRemovedExtendedData2Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12DeviceRemovedExtendedData2_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12DeviceRemovedExtendedData2_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12DeviceRemovedExtendedData2_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12DeviceRemovedExtendedData2_GetAutoBreadcrumbsOutput(This,pOutput) \ - ( (This)->lpVtbl -> GetAutoBreadcrumbsOutput(This,pOutput) ) - -#define ID3D12DeviceRemovedExtendedData2_GetPageFaultAllocationOutput(This,pOutput) \ - ( (This)->lpVtbl -> GetPageFaultAllocationOutput(This,pOutput) ) - -#define ID3D12DeviceRemovedExtendedData2_GetAutoBreadcrumbsOutput1(This,pOutput) \ - ( (This)->lpVtbl -> GetAutoBreadcrumbsOutput1(This,pOutput) ) - -#define ID3D12DeviceRemovedExtendedData2_GetPageFaultAllocationOutput1(This,pOutput) \ - ( (This)->lpVtbl -> GetPageFaultAllocationOutput1(This,pOutput) ) - -#define ID3D12DeviceRemovedExtendedData2_GetPageFaultAllocationOutput2(This,pOutput) \ - ( (This)->lpVtbl -> GetPageFaultAllocationOutput2(This,pOutput) ) - -#define ID3D12DeviceRemovedExtendedData2_GetDeviceState(This) \ - ( (This)->lpVtbl -> GetDeviceState(This) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12DeviceRemovedExtendedData2_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12_0000_0043 */ -/* [local] */ - -typedef -enum D3D12_BACKGROUND_PROCESSING_MODE - { - D3D12_BACKGROUND_PROCESSING_MODE_ALLOWED = 0, - D3D12_BACKGROUND_PROCESSING_MODE_ALLOW_INTRUSIVE_MEASUREMENTS = ( D3D12_BACKGROUND_PROCESSING_MODE_ALLOWED + 1 ) , - D3D12_BACKGROUND_PROCESSING_MODE_DISABLE_BACKGROUND_WORK = ( D3D12_BACKGROUND_PROCESSING_MODE_ALLOW_INTRUSIVE_MEASUREMENTS + 1 ) , - D3D12_BACKGROUND_PROCESSING_MODE_DISABLE_PROFILING_BY_SYSTEM = ( D3D12_BACKGROUND_PROCESSING_MODE_DISABLE_BACKGROUND_WORK + 1 ) - } D3D12_BACKGROUND_PROCESSING_MODE; - -typedef -enum D3D12_MEASUREMENTS_ACTION - { - D3D12_MEASUREMENTS_ACTION_KEEP_ALL = 0, - D3D12_MEASUREMENTS_ACTION_COMMIT_RESULTS = ( D3D12_MEASUREMENTS_ACTION_KEEP_ALL + 1 ) , - D3D12_MEASUREMENTS_ACTION_COMMIT_RESULTS_HIGH_PRIORITY = ( D3D12_MEASUREMENTS_ACTION_COMMIT_RESULTS + 1 ) , - D3D12_MEASUREMENTS_ACTION_DISCARD_PREVIOUS = ( D3D12_MEASUREMENTS_ACTION_COMMIT_RESULTS_HIGH_PRIORITY + 1 ) - } D3D12_MEASUREMENTS_ACTION; - -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0043_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0043_v0_0_s_ifspec; - -#ifndef __ID3D12Device6_INTERFACE_DEFINED__ -#define __ID3D12Device6_INTERFACE_DEFINED__ - -/* interface ID3D12Device6 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12Device6; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("c70b221b-40e4-4a17-89af-025a0727a6dc") - ID3D12Device6 : public ID3D12Device5 - { - public: - virtual HRESULT STDMETHODCALLTYPE SetBackgroundProcessingMode( - D3D12_BACKGROUND_PROCESSING_MODE Mode, - D3D12_MEASUREMENTS_ACTION MeasurementsAction, - _In_opt_ HANDLE hEventToSignalUponCompletion, - _Out_opt_ BOOL *pbFurtherMeasurementsDesired) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12Device6Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12Device6 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12Device6 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12Device6 * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12Device6 * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12Device6 * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12Device6 * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12Device6 * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12Device, GetNodeCount) - UINT ( STDMETHODCALLTYPE *GetNodeCount )( - ID3D12Device6 * This); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandQueue) - HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue )( - ID3D12Device6 * This, - _In_ const D3D12_COMMAND_QUEUE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppCommandQueue); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandAllocator) - HRESULT ( STDMETHODCALLTYPE *CreateCommandAllocator )( - ID3D12Device6 * This, - _In_ D3D12_COMMAND_LIST_TYPE type, - REFIID riid, - _COM_Outptr_ void **ppCommandAllocator); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateGraphicsPipelineState) - HRESULT ( STDMETHODCALLTYPE *CreateGraphicsPipelineState )( - ID3D12Device6 * This, - _In_ const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateComputePipelineState) - HRESULT ( STDMETHODCALLTYPE *CreateComputePipelineState )( - ID3D12Device6 * This, - _In_ const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandList) - HRESULT ( STDMETHODCALLTYPE *CreateCommandList )( - ID3D12Device6 * This, - _In_ UINT nodeMask, - _In_ D3D12_COMMAND_LIST_TYPE type, - _In_ ID3D12CommandAllocator *pCommandAllocator, - _In_opt_ ID3D12PipelineState *pInitialState, - REFIID riid, - _COM_Outptr_ void **ppCommandList); - - DECLSPEC_XFGVIRT(ID3D12Device, CheckFeatureSupport) - HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )( - ID3D12Device6 * This, - D3D12_FEATURE Feature, - _Inout_updates_bytes_(FeatureSupportDataSize) void *pFeatureSupportData, - UINT FeatureSupportDataSize); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateDescriptorHeap) - HRESULT ( STDMETHODCALLTYPE *CreateDescriptorHeap )( - ID3D12Device6 * This, - _In_ const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc, - REFIID riid, - _COM_Outptr_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, GetDescriptorHandleIncrementSize) - UINT ( STDMETHODCALLTYPE *GetDescriptorHandleIncrementSize )( - ID3D12Device6 * This, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateRootSignature) - HRESULT ( STDMETHODCALLTYPE *CreateRootSignature )( - ID3D12Device6 * This, - _In_ UINT nodeMask, - _In_reads_(blobLengthInBytes) const void *pBlobWithRootSignature, - _In_ SIZE_T blobLengthInBytes, - REFIID riid, - _COM_Outptr_ void **ppvRootSignature); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateConstantBufferView) - void ( STDMETHODCALLTYPE *CreateConstantBufferView )( - ID3D12Device6 * This, - _In_opt_ const D3D12_CONSTANT_BUFFER_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateShaderResourceView) - void ( STDMETHODCALLTYPE *CreateShaderResourceView )( - ID3D12Device6 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateUnorderedAccessView) - void ( STDMETHODCALLTYPE *CreateUnorderedAccessView )( - ID3D12Device6 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ ID3D12Resource *pCounterResource, - _In_opt_ const D3D12_UNORDERED_ACCESS_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateRenderTargetView) - void ( STDMETHODCALLTYPE *CreateRenderTargetView )( - ID3D12Device6 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_RENDER_TARGET_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateDepthStencilView) - void ( STDMETHODCALLTYPE *CreateDepthStencilView )( - ID3D12Device6 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DEPTH_STENCIL_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateSampler) - void ( STDMETHODCALLTYPE *CreateSampler )( - ID3D12Device6 * This, - _In_ const D3D12_SAMPLER_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptors) - void ( STDMETHODCALLTYPE *CopyDescriptors )( - ID3D12Device6 * This, - _In_ UINT NumDestDescriptorRanges, - _In_reads_(NumDestDescriptorRanges) const D3D12_CPU_DESCRIPTOR_HANDLE *pDestDescriptorRangeStarts, - _In_reads_opt_(NumDestDescriptorRanges) const UINT *pDestDescriptorRangeSizes, - _In_ UINT NumSrcDescriptorRanges, - _In_reads_(NumSrcDescriptorRanges) const D3D12_CPU_DESCRIPTOR_HANDLE *pSrcDescriptorRangeStarts, - _In_reads_opt_(NumSrcDescriptorRanges) const UINT *pSrcDescriptorRangeSizes, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType); - - DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptorsSimple) - void ( STDMETHODCALLTYPE *CopyDescriptorsSimple )( - ID3D12Device6 * This, - _In_ UINT NumDescriptors, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType); - - DECLSPEC_XFGVIRT(ID3D12Device, GetResourceAllocationInfo) -#if !defined(_WIN32) - D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo )( - ID3D12Device6 * This, - _In_ UINT visibleMask, - _In_ UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs); - -#else - D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo )( - ID3D12Device6 * This, - D3D12_RESOURCE_ALLOCATION_INFO * RetVal, - _In_ UINT visibleMask, - _In_ UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device, GetCustomHeapProperties) -#if !defined(_WIN32) - D3D12_HEAP_PROPERTIES ( STDMETHODCALLTYPE *GetCustomHeapProperties )( - ID3D12Device6 * This, - _In_ UINT nodeMask, - D3D12_HEAP_TYPE heapType); - -#else - D3D12_HEAP_PROPERTIES *( STDMETHODCALLTYPE *GetCustomHeapProperties )( - ID3D12Device6 * This, - D3D12_HEAP_PROPERTIES * RetVal, - _In_ UINT nodeMask, - D3D12_HEAP_TYPE heapType); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommittedResource) - HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource )( - ID3D12Device6 * This, - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialResourceState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riidResource, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateHeap) - HRESULT ( STDMETHODCALLTYPE *CreateHeap )( - ID3D12Device6 * This, - _In_ const D3D12_HEAP_DESC *pDesc, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, CreatePlacedResource) - HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource )( - ID3D12Device6 * This, - _In_ ID3D12Heap *pHeap, - UINT64 HeapOffset, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateReservedResource) - HRESULT ( STDMETHODCALLTYPE *CreateReservedResource )( - ID3D12Device6 * This, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateSharedHandle) - HRESULT ( STDMETHODCALLTYPE *CreateSharedHandle )( - ID3D12Device6 * This, - _In_ ID3D12DeviceChild *pObject, - _In_opt_ const SECURITY_ATTRIBUTES *pAttributes, - DWORD Access, - _In_opt_ LPCWSTR Name, - _Out_ HANDLE *pHandle); - - DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandle) - HRESULT ( STDMETHODCALLTYPE *OpenSharedHandle )( - ID3D12Device6 * This, - _In_ HANDLE NTHandle, - REFIID riid, - _COM_Outptr_opt_ void **ppvObj); - - DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandleByName) - HRESULT ( STDMETHODCALLTYPE *OpenSharedHandleByName )( - ID3D12Device6 * This, - _In_ LPCWSTR Name, - DWORD Access, - /* [annotation][out] */ - _Out_ HANDLE *pNTHandle); - - DECLSPEC_XFGVIRT(ID3D12Device, MakeResident) - HRESULT ( STDMETHODCALLTYPE *MakeResident )( - ID3D12Device6 * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects); - - DECLSPEC_XFGVIRT(ID3D12Device, Evict) - HRESULT ( STDMETHODCALLTYPE *Evict )( - ID3D12Device6 * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateFence) - HRESULT ( STDMETHODCALLTYPE *CreateFence )( - ID3D12Device6 * This, - UINT64 InitialValue, - D3D12_FENCE_FLAGS Flags, - REFIID riid, - _COM_Outptr_ void **ppFence); - - DECLSPEC_XFGVIRT(ID3D12Device, GetDeviceRemovedReason) - HRESULT ( STDMETHODCALLTYPE *GetDeviceRemovedReason )( - ID3D12Device6 * This); - - DECLSPEC_XFGVIRT(ID3D12Device, GetCopyableFootprints) - void ( STDMETHODCALLTYPE *GetCopyableFootprints )( - ID3D12Device6 * This, - _In_ const D3D12_RESOURCE_DESC *pResourceDesc, - _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, - _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, - UINT64 BaseOffset, - _Out_writes_opt_(NumSubresources) D3D12_PLACED_SUBRESOURCE_FOOTPRINT *pLayouts, - _Out_writes_opt_(NumSubresources) UINT *pNumRows, - _Out_writes_opt_(NumSubresources) UINT64 *pRowSizeInBytes, - _Out_opt_ UINT64 *pTotalBytes); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateQueryHeap) - HRESULT ( STDMETHODCALLTYPE *CreateQueryHeap )( - ID3D12Device6 * This, - _In_ const D3D12_QUERY_HEAP_DESC *pDesc, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, SetStablePowerState) - HRESULT ( STDMETHODCALLTYPE *SetStablePowerState )( - ID3D12Device6 * This, - BOOL Enable); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandSignature) - HRESULT ( STDMETHODCALLTYPE *CreateCommandSignature )( - ID3D12Device6 * This, - _In_ const D3D12_COMMAND_SIGNATURE_DESC *pDesc, - _In_opt_ ID3D12RootSignature *pRootSignature, - REFIID riid, - _COM_Outptr_opt_ void **ppvCommandSignature); - - DECLSPEC_XFGVIRT(ID3D12Device, GetResourceTiling) - void ( STDMETHODCALLTYPE *GetResourceTiling )( - ID3D12Device6 * This, - _In_ ID3D12Resource *pTiledResource, - _Out_opt_ UINT *pNumTilesForEntireResource, - _Out_opt_ D3D12_PACKED_MIP_INFO *pPackedMipDesc, - _Out_opt_ D3D12_TILE_SHAPE *pStandardTileShapeForNonPackedMips, - _Inout_opt_ UINT *pNumSubresourceTilings, - _In_ UINT FirstSubresourceTilingToGet, - _Out_writes_(*pNumSubresourceTilings) D3D12_SUBRESOURCE_TILING *pSubresourceTilingsForNonPackedMips); - - DECLSPEC_XFGVIRT(ID3D12Device, GetAdapterLuid) -#if !defined(_WIN32) - LUID ( STDMETHODCALLTYPE *GetAdapterLuid )( - ID3D12Device6 * This); - -#else - LUID *( STDMETHODCALLTYPE *GetAdapterLuid )( - ID3D12Device6 * This, - LUID * RetVal); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device1, CreatePipelineLibrary) - HRESULT ( STDMETHODCALLTYPE *CreatePipelineLibrary )( - ID3D12Device6 * This, - _In_reads_(BlobLength) const void *pLibraryBlob, - SIZE_T BlobLength, - REFIID riid, - _COM_Outptr_ void **ppPipelineLibrary); - - DECLSPEC_XFGVIRT(ID3D12Device1, SetEventOnMultipleFenceCompletion) - HRESULT ( STDMETHODCALLTYPE *SetEventOnMultipleFenceCompletion )( - ID3D12Device6 * This, - _In_reads_(NumFences) ID3D12Fence *const *ppFences, - _In_reads_(NumFences) const UINT64 *pFenceValues, - UINT NumFences, - D3D12_MULTIPLE_FENCE_WAIT_FLAGS Flags, - HANDLE hEvent); - - DECLSPEC_XFGVIRT(ID3D12Device1, SetResidencyPriority) - HRESULT ( STDMETHODCALLTYPE *SetResidencyPriority )( - ID3D12Device6 * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects, - _In_reads_(NumObjects) const D3D12_RESIDENCY_PRIORITY *pPriorities); - - DECLSPEC_XFGVIRT(ID3D12Device2, CreatePipelineState) - HRESULT ( STDMETHODCALLTYPE *CreatePipelineState )( - ID3D12Device6 * This, - const D3D12_PIPELINE_STATE_STREAM_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromAddress) - HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromAddress )( - ID3D12Device6 * This, - _In_ const void *pAddress, - REFIID riid, - _COM_Outptr_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromFileMapping) - HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromFileMapping )( - ID3D12Device6 * This, - _In_ HANDLE hFileMapping, - REFIID riid, - _COM_Outptr_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device3, EnqueueMakeResident) - HRESULT ( STDMETHODCALLTYPE *EnqueueMakeResident )( - ID3D12Device6 * This, - D3D12_RESIDENCY_FLAGS Flags, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects, - _In_ ID3D12Fence *pFenceToSignal, - UINT64 FenceValueToSignal); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommandList1) - HRESULT ( STDMETHODCALLTYPE *CreateCommandList1 )( - ID3D12Device6 * This, - _In_ UINT nodeMask, - _In_ D3D12_COMMAND_LIST_TYPE type, - _In_ D3D12_COMMAND_LIST_FLAGS flags, - REFIID riid, - _COM_Outptr_ void **ppCommandList); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateProtectedResourceSession) - HRESULT ( STDMETHODCALLTYPE *CreateProtectedResourceSession )( - ID3D12Device6 * This, - _In_ const D3D12_PROTECTED_RESOURCE_SESSION_DESC *pDesc, - _In_ REFIID riid, - _COM_Outptr_ void **ppSession); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommittedResource1) - HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource1 )( - ID3D12Device6 * This, - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialResourceState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riidResource, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateHeap1) - HRESULT ( STDMETHODCALLTYPE *CreateHeap1 )( - ID3D12Device6 * This, - _In_ const D3D12_HEAP_DESC *pDesc, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateReservedResource1) - HRESULT ( STDMETHODCALLTYPE *CreateReservedResource1 )( - ID3D12Device6 * This, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device4, GetResourceAllocationInfo1) -#if !defined(_WIN32) - D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( - ID3D12Device6 * This, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); - -#else - D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( - ID3D12Device6 * This, - D3D12_RESOURCE_ALLOCATION_INFO * RetVal, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device5, CreateLifetimeTracker) - HRESULT ( STDMETHODCALLTYPE *CreateLifetimeTracker )( - ID3D12Device6 * This, - _In_ ID3D12LifetimeOwner *pOwner, - REFIID riid, - _COM_Outptr_ void **ppvTracker); - - DECLSPEC_XFGVIRT(ID3D12Device5, RemoveDevice) - void ( STDMETHODCALLTYPE *RemoveDevice )( - ID3D12Device6 * This); - - DECLSPEC_XFGVIRT(ID3D12Device5, EnumerateMetaCommands) - HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommands )( - ID3D12Device6 * This, - _Inout_ UINT *pNumMetaCommands, - _Out_writes_opt_(*pNumMetaCommands) D3D12_META_COMMAND_DESC *pDescs); - - DECLSPEC_XFGVIRT(ID3D12Device5, EnumerateMetaCommandParameters) - HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommandParameters )( - ID3D12Device6 * This, - _In_ REFGUID CommandId, - _In_ D3D12_META_COMMAND_PARAMETER_STAGE Stage, - _Out_opt_ UINT *pTotalStructureSizeInBytes, - _Inout_ UINT *pParameterCount, - _Out_writes_opt_(*pParameterCount) D3D12_META_COMMAND_PARAMETER_DESC *pParameterDescs); - - DECLSPEC_XFGVIRT(ID3D12Device5, CreateMetaCommand) - HRESULT ( STDMETHODCALLTYPE *CreateMetaCommand )( - ID3D12Device6 * This, - _In_ REFGUID CommandId, - _In_ UINT NodeMask, - _In_reads_bytes_opt_(CreationParametersDataSizeInBytes) const void *pCreationParametersData, - _In_ SIZE_T CreationParametersDataSizeInBytes, - REFIID riid, - _COM_Outptr_ void **ppMetaCommand); - - DECLSPEC_XFGVIRT(ID3D12Device5, CreateStateObject) - HRESULT ( STDMETHODCALLTYPE *CreateStateObject )( - ID3D12Device6 * This, - const D3D12_STATE_OBJECT_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppStateObject); - - DECLSPEC_XFGVIRT(ID3D12Device5, GetRaytracingAccelerationStructurePrebuildInfo) - void ( STDMETHODCALLTYPE *GetRaytracingAccelerationStructurePrebuildInfo )( - ID3D12Device6 * This, - _In_ const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS *pDesc, - _Out_ D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO *pInfo); - - DECLSPEC_XFGVIRT(ID3D12Device5, CheckDriverMatchingIdentifier) - D3D12_DRIVER_MATCHING_IDENTIFIER_STATUS ( STDMETHODCALLTYPE *CheckDriverMatchingIdentifier )( - ID3D12Device6 * This, - _In_ D3D12_SERIALIZED_DATA_TYPE SerializedDataType, - _In_ const D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER *pIdentifierToCheck); - - DECLSPEC_XFGVIRT(ID3D12Device6, SetBackgroundProcessingMode) - HRESULT ( STDMETHODCALLTYPE *SetBackgroundProcessingMode )( - ID3D12Device6 * This, - D3D12_BACKGROUND_PROCESSING_MODE Mode, - D3D12_MEASUREMENTS_ACTION MeasurementsAction, - _In_opt_ HANDLE hEventToSignalUponCompletion, - _Out_opt_ BOOL *pbFurtherMeasurementsDesired); - - END_INTERFACE - } ID3D12Device6Vtbl; - - interface ID3D12Device6 - { - CONST_VTBL struct ID3D12Device6Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12Device6_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12Device6_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12Device6_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12Device6_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12Device6_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12Device6_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12Device6_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12Device6_GetNodeCount(This) \ - ( (This)->lpVtbl -> GetNodeCount(This) ) - -#define ID3D12Device6_CreateCommandQueue(This,pDesc,riid,ppCommandQueue) \ - ( (This)->lpVtbl -> CreateCommandQueue(This,pDesc,riid,ppCommandQueue) ) - -#define ID3D12Device6_CreateCommandAllocator(This,type,riid,ppCommandAllocator) \ - ( (This)->lpVtbl -> CreateCommandAllocator(This,type,riid,ppCommandAllocator) ) - -#define ID3D12Device6_CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) ) - -#define ID3D12Device6_CreateComputePipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreateComputePipelineState(This,pDesc,riid,ppPipelineState) ) - -#define ID3D12Device6_CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) \ - ( (This)->lpVtbl -> CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) ) - -#define ID3D12Device6_CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) \ - ( (This)->lpVtbl -> CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) ) - -#define ID3D12Device6_CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) ) - -#define ID3D12Device6_GetDescriptorHandleIncrementSize(This,DescriptorHeapType) \ - ( (This)->lpVtbl -> GetDescriptorHandleIncrementSize(This,DescriptorHeapType) ) - -#define ID3D12Device6_CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) \ - ( (This)->lpVtbl -> CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) ) - -#define ID3D12Device6_CreateConstantBufferView(This,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateConstantBufferView(This,pDesc,DestDescriptor) ) - -#define ID3D12Device6_CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device6_CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) ) - -#define ID3D12Device6_CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device6_CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device6_CreateSampler(This,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateSampler(This,pDesc,DestDescriptor) ) - -#define ID3D12Device6_CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) \ - ( (This)->lpVtbl -> CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) ) - -#define ID3D12Device6_CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) \ - ( (This)->lpVtbl -> CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) ) -#if !defined(_WIN32) - -#define ID3D12Device6_GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) ) -#else -#define ID3D12Device6_GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) ) -#endif -#if !defined(_WIN32) - -#define ID3D12Device6_GetCustomHeapProperties(This,nodeMask,heapType) \ - ( (This)->lpVtbl -> GetCustomHeapProperties(This,nodeMask,heapType) ) -#else -#define ID3D12Device6_GetCustomHeapProperties(This,RetVal,nodeMask,heapType) \ - ( (This)->lpVtbl -> GetCustomHeapProperties(This,RetVal,nodeMask,heapType) ) -#endif - -#define ID3D12Device6_CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) \ - ( (This)->lpVtbl -> CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) ) - -#define ID3D12Device6_CreateHeap(This,pDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateHeap(This,pDesc,riid,ppvHeap) ) - -#define ID3D12Device6_CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) \ - ( (This)->lpVtbl -> CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) - -#define ID3D12Device6_CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) \ - ( (This)->lpVtbl -> CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) - -#define ID3D12Device6_CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) \ - ( (This)->lpVtbl -> CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) ) - -#define ID3D12Device6_OpenSharedHandle(This,NTHandle,riid,ppvObj) \ - ( (This)->lpVtbl -> OpenSharedHandle(This,NTHandle,riid,ppvObj) ) - -#define ID3D12Device6_OpenSharedHandleByName(This,Name,Access,pNTHandle) \ - ( (This)->lpVtbl -> OpenSharedHandleByName(This,Name,Access,pNTHandle) ) - -#define ID3D12Device6_MakeResident(This,NumObjects,ppObjects) \ - ( (This)->lpVtbl -> MakeResident(This,NumObjects,ppObjects) ) - -#define ID3D12Device6_Evict(This,NumObjects,ppObjects) \ - ( (This)->lpVtbl -> Evict(This,NumObjects,ppObjects) ) - -#define ID3D12Device6_CreateFence(This,InitialValue,Flags,riid,ppFence) \ - ( (This)->lpVtbl -> CreateFence(This,InitialValue,Flags,riid,ppFence) ) - -#define ID3D12Device6_GetDeviceRemovedReason(This) \ - ( (This)->lpVtbl -> GetDeviceRemovedReason(This) ) - -#define ID3D12Device6_GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) \ - ( (This)->lpVtbl -> GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) - -#define ID3D12Device6_CreateQueryHeap(This,pDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateQueryHeap(This,pDesc,riid,ppvHeap) ) - -#define ID3D12Device6_SetStablePowerState(This,Enable) \ - ( (This)->lpVtbl -> SetStablePowerState(This,Enable) ) - -#define ID3D12Device6_CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) \ - ( (This)->lpVtbl -> CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) ) - -#define ID3D12Device6_GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) \ - ( (This)->lpVtbl -> GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) ) -#if !defined(_WIN32) - -#define ID3D12Device6_GetAdapterLuid(This) \ - ( (This)->lpVtbl -> GetAdapterLuid(This) ) -#else -#define ID3D12Device6_GetAdapterLuid(This,RetVal) \ - ( (This)->lpVtbl -> GetAdapterLuid(This,RetVal) ) -#endif - -#define ID3D12Device6_CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) \ - ( (This)->lpVtbl -> CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) ) - -#define ID3D12Device6_SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) \ - ( (This)->lpVtbl -> SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) ) - -#define ID3D12Device6_SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) \ - ( (This)->lpVtbl -> SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) ) - -#define ID3D12Device6_CreatePipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreatePipelineState(This,pDesc,riid,ppPipelineState) ) - -#define ID3D12Device6_OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap) \ - ( (This)->lpVtbl -> OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap) ) - -#define ID3D12Device6_OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap) \ - ( (This)->lpVtbl -> OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap) ) - -#define ID3D12Device6_EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal) \ - ( (This)->lpVtbl -> EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal) ) - -#define ID3D12Device6_CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList) \ - ( (This)->lpVtbl -> CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList) ) - -#define ID3D12Device6_CreateProtectedResourceSession(This,pDesc,riid,ppSession) \ - ( (This)->lpVtbl -> CreateProtectedResourceSession(This,pDesc,riid,ppSession) ) - -#define ID3D12Device6_CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) \ - ( (This)->lpVtbl -> CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) ) - -#define ID3D12Device6_CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap) ) - -#define ID3D12Device6_CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource) \ - ( (This)->lpVtbl -> CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource) ) -#if !defined(_WIN32) - -#define ID3D12Device6_GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) -#else -#define ID3D12Device6_GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) -#endif - -#define ID3D12Device6_CreateLifetimeTracker(This,pOwner,riid,ppvTracker) \ - ( (This)->lpVtbl -> CreateLifetimeTracker(This,pOwner,riid,ppvTracker) ) - -#define ID3D12Device6_RemoveDevice(This) \ - ( (This)->lpVtbl -> RemoveDevice(This) ) - -#define ID3D12Device6_EnumerateMetaCommands(This,pNumMetaCommands,pDescs) \ - ( (This)->lpVtbl -> EnumerateMetaCommands(This,pNumMetaCommands,pDescs) ) - -#define ID3D12Device6_EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs) \ - ( (This)->lpVtbl -> EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs) ) - -#define ID3D12Device6_CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand) \ - ( (This)->lpVtbl -> CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand) ) - -#define ID3D12Device6_CreateStateObject(This,pDesc,riid,ppStateObject) \ - ( (This)->lpVtbl -> CreateStateObject(This,pDesc,riid,ppStateObject) ) - -#define ID3D12Device6_GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo) \ - ( (This)->lpVtbl -> GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo) ) - -#define ID3D12Device6_CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck) \ - ( (This)->lpVtbl -> CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck) ) - -#define ID3D12Device6_SetBackgroundProcessingMode(This,Mode,MeasurementsAction,hEventToSignalUponCompletion,pbFurtherMeasurementsDesired) \ - ( (This)->lpVtbl -> SetBackgroundProcessingMode(This,Mode,MeasurementsAction,hEventToSignalUponCompletion,pbFurtherMeasurementsDesired) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12Device6_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12_0000_0044 */ -/* [local] */ - -DEFINE_GUID(D3D12_PROTECTED_RESOURCES_SESSION_HARDWARE_PROTECTED, 0x62B0084E, 0xC70E, 0x4DAA, 0xA1, 0x09, 0x30, 0xFF, 0x8D, 0x5A, 0x04, 0x82); -typedef struct D3D12_FEATURE_DATA_PROTECTED_RESOURCE_SESSION_TYPE_COUNT - { - UINT NodeIndex; - UINT Count; - } D3D12_FEATURE_DATA_PROTECTED_RESOURCE_SESSION_TYPE_COUNT; - -typedef struct D3D12_FEATURE_DATA_PROTECTED_RESOURCE_SESSION_TYPES - { - UINT NodeIndex; - UINT Count; - GUID *pTypes; - } D3D12_FEATURE_DATA_PROTECTED_RESOURCE_SESSION_TYPES; - -typedef struct D3D12_PROTECTED_RESOURCE_SESSION_DESC1 - { - UINT NodeMask; - D3D12_PROTECTED_RESOURCE_SESSION_FLAGS Flags; - GUID ProtectionType; - } D3D12_PROTECTED_RESOURCE_SESSION_DESC1; - -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0044_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0044_v0_0_s_ifspec; - -#ifndef __ID3D12ProtectedResourceSession1_INTERFACE_DEFINED__ -#define __ID3D12ProtectedResourceSession1_INTERFACE_DEFINED__ - -/* interface ID3D12ProtectedResourceSession1 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12ProtectedResourceSession1; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("D6F12DD6-76FB-406E-8961-4296EEFC0409") - ID3D12ProtectedResourceSession1 : public ID3D12ProtectedResourceSession - { - public: -#if defined(_MSC_VER) || !defined(_WIN32) - virtual D3D12_PROTECTED_RESOURCE_SESSION_DESC1 STDMETHODCALLTYPE GetDesc1( void) = 0; -#else - virtual D3D12_PROTECTED_RESOURCE_SESSION_DESC1 *STDMETHODCALLTYPE GetDesc1( - D3D12_PROTECTED_RESOURCE_SESSION_DESC1 * RetVal) = 0; -#endif - - }; - - -#else /* C style interface */ - - typedef struct ID3D12ProtectedResourceSession1Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12ProtectedResourceSession1 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12ProtectedResourceSession1 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12ProtectedResourceSession1 * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12ProtectedResourceSession1 * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12ProtectedResourceSession1 * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12ProtectedResourceSession1 * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12ProtectedResourceSession1 * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12ProtectedResourceSession1 * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12ProtectedSession, GetStatusFence) - HRESULT ( STDMETHODCALLTYPE *GetStatusFence )( - ID3D12ProtectedResourceSession1 * This, - REFIID riid, - _COM_Outptr_opt_ void **ppFence); - - DECLSPEC_XFGVIRT(ID3D12ProtectedSession, GetSessionStatus) - D3D12_PROTECTED_SESSION_STATUS ( STDMETHODCALLTYPE *GetSessionStatus )( - ID3D12ProtectedResourceSession1 * This); - - DECLSPEC_XFGVIRT(ID3D12ProtectedResourceSession, GetDesc) -#if !defined(_WIN32) - D3D12_PROTECTED_RESOURCE_SESSION_DESC ( STDMETHODCALLTYPE *GetDesc )( - ID3D12ProtectedResourceSession1 * This); - -#else - D3D12_PROTECTED_RESOURCE_SESSION_DESC *( STDMETHODCALLTYPE *GetDesc )( - ID3D12ProtectedResourceSession1 * This, - D3D12_PROTECTED_RESOURCE_SESSION_DESC * RetVal); - -#endif - - DECLSPEC_XFGVIRT(ID3D12ProtectedResourceSession1, GetDesc1) -#if !defined(_WIN32) - D3D12_PROTECTED_RESOURCE_SESSION_DESC1 ( STDMETHODCALLTYPE *GetDesc1 )( - ID3D12ProtectedResourceSession1 * This); - -#else - D3D12_PROTECTED_RESOURCE_SESSION_DESC1 *( STDMETHODCALLTYPE *GetDesc1 )( - ID3D12ProtectedResourceSession1 * This, - D3D12_PROTECTED_RESOURCE_SESSION_DESC1 * RetVal); - -#endif - - END_INTERFACE - } ID3D12ProtectedResourceSession1Vtbl; - - interface ID3D12ProtectedResourceSession1 - { - CONST_VTBL struct ID3D12ProtectedResourceSession1Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12ProtectedResourceSession1_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12ProtectedResourceSession1_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12ProtectedResourceSession1_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12ProtectedResourceSession1_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12ProtectedResourceSession1_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12ProtectedResourceSession1_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12ProtectedResourceSession1_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12ProtectedResourceSession1_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12ProtectedResourceSession1_GetStatusFence(This,riid,ppFence) \ - ( (This)->lpVtbl -> GetStatusFence(This,riid,ppFence) ) - -#define ID3D12ProtectedResourceSession1_GetSessionStatus(This) \ - ( (This)->lpVtbl -> GetSessionStatus(This) ) - -#if !defined(_WIN32) - -#define ID3D12ProtectedResourceSession1_GetDesc(This) \ - ( (This)->lpVtbl -> GetDesc(This) ) -#else -#define ID3D12ProtectedResourceSession1_GetDesc(This,RetVal) \ - ( (This)->lpVtbl -> GetDesc(This,RetVal) ) -#endif - -#if !defined(_WIN32) - -#define ID3D12ProtectedResourceSession1_GetDesc1(This) \ - ( (This)->lpVtbl -> GetDesc1(This) ) -#else -#define ID3D12ProtectedResourceSession1_GetDesc1(This,RetVal) \ - ( (This)->lpVtbl -> GetDesc1(This,RetVal) ) -#endif - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12ProtectedResourceSession1_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12Device7_INTERFACE_DEFINED__ -#define __ID3D12Device7_INTERFACE_DEFINED__ - -/* interface ID3D12Device7 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12Device7; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("5c014b53-68a1-4b9b-8bd1-dd6046b9358b") - ID3D12Device7 : public ID3D12Device6 - { - public: - virtual HRESULT STDMETHODCALLTYPE AddToStateObject( - const D3D12_STATE_OBJECT_DESC *pAddition, - ID3D12StateObject *pStateObjectToGrowFrom, - REFIID riid, - _COM_Outptr_ void **ppNewStateObject) = 0; - - virtual HRESULT STDMETHODCALLTYPE CreateProtectedResourceSession1( - _In_ const D3D12_PROTECTED_RESOURCE_SESSION_DESC1 *pDesc, - _In_ REFIID riid, - _COM_Outptr_ void **ppSession) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12Device7Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12Device7 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12Device7 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12Device7 * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12Device7 * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12Device7 * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12Device7 * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12Device7 * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12Device, GetNodeCount) - UINT ( STDMETHODCALLTYPE *GetNodeCount )( - ID3D12Device7 * This); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandQueue) - HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue )( - ID3D12Device7 * This, - _In_ const D3D12_COMMAND_QUEUE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppCommandQueue); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandAllocator) - HRESULT ( STDMETHODCALLTYPE *CreateCommandAllocator )( - ID3D12Device7 * This, - _In_ D3D12_COMMAND_LIST_TYPE type, - REFIID riid, - _COM_Outptr_ void **ppCommandAllocator); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateGraphicsPipelineState) - HRESULT ( STDMETHODCALLTYPE *CreateGraphicsPipelineState )( - ID3D12Device7 * This, - _In_ const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateComputePipelineState) - HRESULT ( STDMETHODCALLTYPE *CreateComputePipelineState )( - ID3D12Device7 * This, - _In_ const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandList) - HRESULT ( STDMETHODCALLTYPE *CreateCommandList )( - ID3D12Device7 * This, - _In_ UINT nodeMask, - _In_ D3D12_COMMAND_LIST_TYPE type, - _In_ ID3D12CommandAllocator *pCommandAllocator, - _In_opt_ ID3D12PipelineState *pInitialState, - REFIID riid, - _COM_Outptr_ void **ppCommandList); - - DECLSPEC_XFGVIRT(ID3D12Device, CheckFeatureSupport) - HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )( - ID3D12Device7 * This, - D3D12_FEATURE Feature, - _Inout_updates_bytes_(FeatureSupportDataSize) void *pFeatureSupportData, - UINT FeatureSupportDataSize); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateDescriptorHeap) - HRESULT ( STDMETHODCALLTYPE *CreateDescriptorHeap )( - ID3D12Device7 * This, - _In_ const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc, - REFIID riid, - _COM_Outptr_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, GetDescriptorHandleIncrementSize) - UINT ( STDMETHODCALLTYPE *GetDescriptorHandleIncrementSize )( - ID3D12Device7 * This, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateRootSignature) - HRESULT ( STDMETHODCALLTYPE *CreateRootSignature )( - ID3D12Device7 * This, - _In_ UINT nodeMask, - _In_reads_(blobLengthInBytes) const void *pBlobWithRootSignature, - _In_ SIZE_T blobLengthInBytes, - REFIID riid, - _COM_Outptr_ void **ppvRootSignature); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateConstantBufferView) - void ( STDMETHODCALLTYPE *CreateConstantBufferView )( - ID3D12Device7 * This, - _In_opt_ const D3D12_CONSTANT_BUFFER_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateShaderResourceView) - void ( STDMETHODCALLTYPE *CreateShaderResourceView )( - ID3D12Device7 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateUnorderedAccessView) - void ( STDMETHODCALLTYPE *CreateUnorderedAccessView )( - ID3D12Device7 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ ID3D12Resource *pCounterResource, - _In_opt_ const D3D12_UNORDERED_ACCESS_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateRenderTargetView) - void ( STDMETHODCALLTYPE *CreateRenderTargetView )( - ID3D12Device7 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_RENDER_TARGET_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateDepthStencilView) - void ( STDMETHODCALLTYPE *CreateDepthStencilView )( - ID3D12Device7 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DEPTH_STENCIL_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateSampler) - void ( STDMETHODCALLTYPE *CreateSampler )( - ID3D12Device7 * This, - _In_ const D3D12_SAMPLER_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptors) - void ( STDMETHODCALLTYPE *CopyDescriptors )( - ID3D12Device7 * This, - _In_ UINT NumDestDescriptorRanges, - _In_reads_(NumDestDescriptorRanges) const D3D12_CPU_DESCRIPTOR_HANDLE *pDestDescriptorRangeStarts, - _In_reads_opt_(NumDestDescriptorRanges) const UINT *pDestDescriptorRangeSizes, - _In_ UINT NumSrcDescriptorRanges, - _In_reads_(NumSrcDescriptorRanges) const D3D12_CPU_DESCRIPTOR_HANDLE *pSrcDescriptorRangeStarts, - _In_reads_opt_(NumSrcDescriptorRanges) const UINT *pSrcDescriptorRangeSizes, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType); - - DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptorsSimple) - void ( STDMETHODCALLTYPE *CopyDescriptorsSimple )( - ID3D12Device7 * This, - _In_ UINT NumDescriptors, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType); - - DECLSPEC_XFGVIRT(ID3D12Device, GetResourceAllocationInfo) -#if !defined(_WIN32) - D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo )( - ID3D12Device7 * This, - _In_ UINT visibleMask, - _In_ UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs); - -#else - D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo )( - ID3D12Device7 * This, - D3D12_RESOURCE_ALLOCATION_INFO * RetVal, - _In_ UINT visibleMask, - _In_ UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device, GetCustomHeapProperties) -#if !defined(_WIN32) - D3D12_HEAP_PROPERTIES ( STDMETHODCALLTYPE *GetCustomHeapProperties )( - ID3D12Device7 * This, - _In_ UINT nodeMask, - D3D12_HEAP_TYPE heapType); - -#else - D3D12_HEAP_PROPERTIES *( STDMETHODCALLTYPE *GetCustomHeapProperties )( - ID3D12Device7 * This, - D3D12_HEAP_PROPERTIES * RetVal, - _In_ UINT nodeMask, - D3D12_HEAP_TYPE heapType); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommittedResource) - HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource )( - ID3D12Device7 * This, - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialResourceState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riidResource, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateHeap) - HRESULT ( STDMETHODCALLTYPE *CreateHeap )( - ID3D12Device7 * This, - _In_ const D3D12_HEAP_DESC *pDesc, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, CreatePlacedResource) - HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource )( - ID3D12Device7 * This, - _In_ ID3D12Heap *pHeap, - UINT64 HeapOffset, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateReservedResource) - HRESULT ( STDMETHODCALLTYPE *CreateReservedResource )( - ID3D12Device7 * This, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateSharedHandle) - HRESULT ( STDMETHODCALLTYPE *CreateSharedHandle )( - ID3D12Device7 * This, - _In_ ID3D12DeviceChild *pObject, - _In_opt_ const SECURITY_ATTRIBUTES *pAttributes, - DWORD Access, - _In_opt_ LPCWSTR Name, - _Out_ HANDLE *pHandle); - - DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandle) - HRESULT ( STDMETHODCALLTYPE *OpenSharedHandle )( - ID3D12Device7 * This, - _In_ HANDLE NTHandle, - REFIID riid, - _COM_Outptr_opt_ void **ppvObj); - - DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandleByName) - HRESULT ( STDMETHODCALLTYPE *OpenSharedHandleByName )( - ID3D12Device7 * This, - _In_ LPCWSTR Name, - DWORD Access, - /* [annotation][out] */ - _Out_ HANDLE *pNTHandle); - - DECLSPEC_XFGVIRT(ID3D12Device, MakeResident) - HRESULT ( STDMETHODCALLTYPE *MakeResident )( - ID3D12Device7 * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects); - - DECLSPEC_XFGVIRT(ID3D12Device, Evict) - HRESULT ( STDMETHODCALLTYPE *Evict )( - ID3D12Device7 * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateFence) - HRESULT ( STDMETHODCALLTYPE *CreateFence )( - ID3D12Device7 * This, - UINT64 InitialValue, - D3D12_FENCE_FLAGS Flags, - REFIID riid, - _COM_Outptr_ void **ppFence); - - DECLSPEC_XFGVIRT(ID3D12Device, GetDeviceRemovedReason) - HRESULT ( STDMETHODCALLTYPE *GetDeviceRemovedReason )( - ID3D12Device7 * This); - - DECLSPEC_XFGVIRT(ID3D12Device, GetCopyableFootprints) - void ( STDMETHODCALLTYPE *GetCopyableFootprints )( - ID3D12Device7 * This, - _In_ const D3D12_RESOURCE_DESC *pResourceDesc, - _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, - _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, - UINT64 BaseOffset, - _Out_writes_opt_(NumSubresources) D3D12_PLACED_SUBRESOURCE_FOOTPRINT *pLayouts, - _Out_writes_opt_(NumSubresources) UINT *pNumRows, - _Out_writes_opt_(NumSubresources) UINT64 *pRowSizeInBytes, - _Out_opt_ UINT64 *pTotalBytes); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateQueryHeap) - HRESULT ( STDMETHODCALLTYPE *CreateQueryHeap )( - ID3D12Device7 * This, - _In_ const D3D12_QUERY_HEAP_DESC *pDesc, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, SetStablePowerState) - HRESULT ( STDMETHODCALLTYPE *SetStablePowerState )( - ID3D12Device7 * This, - BOOL Enable); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandSignature) - HRESULT ( STDMETHODCALLTYPE *CreateCommandSignature )( - ID3D12Device7 * This, - _In_ const D3D12_COMMAND_SIGNATURE_DESC *pDesc, - _In_opt_ ID3D12RootSignature *pRootSignature, - REFIID riid, - _COM_Outptr_opt_ void **ppvCommandSignature); - - DECLSPEC_XFGVIRT(ID3D12Device, GetResourceTiling) - void ( STDMETHODCALLTYPE *GetResourceTiling )( - ID3D12Device7 * This, - _In_ ID3D12Resource *pTiledResource, - _Out_opt_ UINT *pNumTilesForEntireResource, - _Out_opt_ D3D12_PACKED_MIP_INFO *pPackedMipDesc, - _Out_opt_ D3D12_TILE_SHAPE *pStandardTileShapeForNonPackedMips, - _Inout_opt_ UINT *pNumSubresourceTilings, - _In_ UINT FirstSubresourceTilingToGet, - _Out_writes_(*pNumSubresourceTilings) D3D12_SUBRESOURCE_TILING *pSubresourceTilingsForNonPackedMips); - - DECLSPEC_XFGVIRT(ID3D12Device, GetAdapterLuid) -#if !defined(_WIN32) - LUID ( STDMETHODCALLTYPE *GetAdapterLuid )( - ID3D12Device7 * This); - -#else - LUID *( STDMETHODCALLTYPE *GetAdapterLuid )( - ID3D12Device7 * This, - LUID * RetVal); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device1, CreatePipelineLibrary) - HRESULT ( STDMETHODCALLTYPE *CreatePipelineLibrary )( - ID3D12Device7 * This, - _In_reads_(BlobLength) const void *pLibraryBlob, - SIZE_T BlobLength, - REFIID riid, - _COM_Outptr_ void **ppPipelineLibrary); - - DECLSPEC_XFGVIRT(ID3D12Device1, SetEventOnMultipleFenceCompletion) - HRESULT ( STDMETHODCALLTYPE *SetEventOnMultipleFenceCompletion )( - ID3D12Device7 * This, - _In_reads_(NumFences) ID3D12Fence *const *ppFences, - _In_reads_(NumFences) const UINT64 *pFenceValues, - UINT NumFences, - D3D12_MULTIPLE_FENCE_WAIT_FLAGS Flags, - HANDLE hEvent); - - DECLSPEC_XFGVIRT(ID3D12Device1, SetResidencyPriority) - HRESULT ( STDMETHODCALLTYPE *SetResidencyPriority )( - ID3D12Device7 * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects, - _In_reads_(NumObjects) const D3D12_RESIDENCY_PRIORITY *pPriorities); - - DECLSPEC_XFGVIRT(ID3D12Device2, CreatePipelineState) - HRESULT ( STDMETHODCALLTYPE *CreatePipelineState )( - ID3D12Device7 * This, - const D3D12_PIPELINE_STATE_STREAM_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromAddress) - HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromAddress )( - ID3D12Device7 * This, - _In_ const void *pAddress, - REFIID riid, - _COM_Outptr_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromFileMapping) - HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromFileMapping )( - ID3D12Device7 * This, - _In_ HANDLE hFileMapping, - REFIID riid, - _COM_Outptr_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device3, EnqueueMakeResident) - HRESULT ( STDMETHODCALLTYPE *EnqueueMakeResident )( - ID3D12Device7 * This, - D3D12_RESIDENCY_FLAGS Flags, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects, - _In_ ID3D12Fence *pFenceToSignal, - UINT64 FenceValueToSignal); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommandList1) - HRESULT ( STDMETHODCALLTYPE *CreateCommandList1 )( - ID3D12Device7 * This, - _In_ UINT nodeMask, - _In_ D3D12_COMMAND_LIST_TYPE type, - _In_ D3D12_COMMAND_LIST_FLAGS flags, - REFIID riid, - _COM_Outptr_ void **ppCommandList); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateProtectedResourceSession) - HRESULT ( STDMETHODCALLTYPE *CreateProtectedResourceSession )( - ID3D12Device7 * This, - _In_ const D3D12_PROTECTED_RESOURCE_SESSION_DESC *pDesc, - _In_ REFIID riid, - _COM_Outptr_ void **ppSession); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommittedResource1) - HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource1 )( - ID3D12Device7 * This, - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialResourceState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riidResource, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateHeap1) - HRESULT ( STDMETHODCALLTYPE *CreateHeap1 )( - ID3D12Device7 * This, - _In_ const D3D12_HEAP_DESC *pDesc, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateReservedResource1) - HRESULT ( STDMETHODCALLTYPE *CreateReservedResource1 )( - ID3D12Device7 * This, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device4, GetResourceAllocationInfo1) -#if !defined(_WIN32) - D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( - ID3D12Device7 * This, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); - -#else - D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( - ID3D12Device7 * This, - D3D12_RESOURCE_ALLOCATION_INFO * RetVal, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device5, CreateLifetimeTracker) - HRESULT ( STDMETHODCALLTYPE *CreateLifetimeTracker )( - ID3D12Device7 * This, - _In_ ID3D12LifetimeOwner *pOwner, - REFIID riid, - _COM_Outptr_ void **ppvTracker); - - DECLSPEC_XFGVIRT(ID3D12Device5, RemoveDevice) - void ( STDMETHODCALLTYPE *RemoveDevice )( - ID3D12Device7 * This); - - DECLSPEC_XFGVIRT(ID3D12Device5, EnumerateMetaCommands) - HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommands )( - ID3D12Device7 * This, - _Inout_ UINT *pNumMetaCommands, - _Out_writes_opt_(*pNumMetaCommands) D3D12_META_COMMAND_DESC *pDescs); - - DECLSPEC_XFGVIRT(ID3D12Device5, EnumerateMetaCommandParameters) - HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommandParameters )( - ID3D12Device7 * This, - _In_ REFGUID CommandId, - _In_ D3D12_META_COMMAND_PARAMETER_STAGE Stage, - _Out_opt_ UINT *pTotalStructureSizeInBytes, - _Inout_ UINT *pParameterCount, - _Out_writes_opt_(*pParameterCount) D3D12_META_COMMAND_PARAMETER_DESC *pParameterDescs); - - DECLSPEC_XFGVIRT(ID3D12Device5, CreateMetaCommand) - HRESULT ( STDMETHODCALLTYPE *CreateMetaCommand )( - ID3D12Device7 * This, - _In_ REFGUID CommandId, - _In_ UINT NodeMask, - _In_reads_bytes_opt_(CreationParametersDataSizeInBytes) const void *pCreationParametersData, - _In_ SIZE_T CreationParametersDataSizeInBytes, - REFIID riid, - _COM_Outptr_ void **ppMetaCommand); - - DECLSPEC_XFGVIRT(ID3D12Device5, CreateStateObject) - HRESULT ( STDMETHODCALLTYPE *CreateStateObject )( - ID3D12Device7 * This, - const D3D12_STATE_OBJECT_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppStateObject); - - DECLSPEC_XFGVIRT(ID3D12Device5, GetRaytracingAccelerationStructurePrebuildInfo) - void ( STDMETHODCALLTYPE *GetRaytracingAccelerationStructurePrebuildInfo )( - ID3D12Device7 * This, - _In_ const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS *pDesc, - _Out_ D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO *pInfo); - - DECLSPEC_XFGVIRT(ID3D12Device5, CheckDriverMatchingIdentifier) - D3D12_DRIVER_MATCHING_IDENTIFIER_STATUS ( STDMETHODCALLTYPE *CheckDriverMatchingIdentifier )( - ID3D12Device7 * This, - _In_ D3D12_SERIALIZED_DATA_TYPE SerializedDataType, - _In_ const D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER *pIdentifierToCheck); - - DECLSPEC_XFGVIRT(ID3D12Device6, SetBackgroundProcessingMode) - HRESULT ( STDMETHODCALLTYPE *SetBackgroundProcessingMode )( - ID3D12Device7 * This, - D3D12_BACKGROUND_PROCESSING_MODE Mode, - D3D12_MEASUREMENTS_ACTION MeasurementsAction, - _In_opt_ HANDLE hEventToSignalUponCompletion, - _Out_opt_ BOOL *pbFurtherMeasurementsDesired); - - DECLSPEC_XFGVIRT(ID3D12Device7, AddToStateObject) - HRESULT ( STDMETHODCALLTYPE *AddToStateObject )( - ID3D12Device7 * This, - const D3D12_STATE_OBJECT_DESC *pAddition, - ID3D12StateObject *pStateObjectToGrowFrom, - REFIID riid, - _COM_Outptr_ void **ppNewStateObject); - - DECLSPEC_XFGVIRT(ID3D12Device7, CreateProtectedResourceSession1) - HRESULT ( STDMETHODCALLTYPE *CreateProtectedResourceSession1 )( - ID3D12Device7 * This, - _In_ const D3D12_PROTECTED_RESOURCE_SESSION_DESC1 *pDesc, - _In_ REFIID riid, - _COM_Outptr_ void **ppSession); - - END_INTERFACE - } ID3D12Device7Vtbl; - - interface ID3D12Device7 - { - CONST_VTBL struct ID3D12Device7Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12Device7_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12Device7_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12Device7_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12Device7_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12Device7_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12Device7_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12Device7_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12Device7_GetNodeCount(This) \ - ( (This)->lpVtbl -> GetNodeCount(This) ) - -#define ID3D12Device7_CreateCommandQueue(This,pDesc,riid,ppCommandQueue) \ - ( (This)->lpVtbl -> CreateCommandQueue(This,pDesc,riid,ppCommandQueue) ) - -#define ID3D12Device7_CreateCommandAllocator(This,type,riid,ppCommandAllocator) \ - ( (This)->lpVtbl -> CreateCommandAllocator(This,type,riid,ppCommandAllocator) ) - -#define ID3D12Device7_CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) ) - -#define ID3D12Device7_CreateComputePipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreateComputePipelineState(This,pDesc,riid,ppPipelineState) ) - -#define ID3D12Device7_CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) \ - ( (This)->lpVtbl -> CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) ) - -#define ID3D12Device7_CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) \ - ( (This)->lpVtbl -> CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) ) - -#define ID3D12Device7_CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) ) - -#define ID3D12Device7_GetDescriptorHandleIncrementSize(This,DescriptorHeapType) \ - ( (This)->lpVtbl -> GetDescriptorHandleIncrementSize(This,DescriptorHeapType) ) - -#define ID3D12Device7_CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) \ - ( (This)->lpVtbl -> CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) ) - -#define ID3D12Device7_CreateConstantBufferView(This,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateConstantBufferView(This,pDesc,DestDescriptor) ) - -#define ID3D12Device7_CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device7_CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) ) - -#define ID3D12Device7_CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device7_CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device7_CreateSampler(This,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateSampler(This,pDesc,DestDescriptor) ) - -#define ID3D12Device7_CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) \ - ( (This)->lpVtbl -> CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) ) - -#define ID3D12Device7_CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) \ - ( (This)->lpVtbl -> CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) ) -#if !defined(_WIN32) - -#define ID3D12Device7_GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) ) -#else -#define ID3D12Device7_GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) ) -#endif -#if !defined(_WIN32) - -#define ID3D12Device7_GetCustomHeapProperties(This,nodeMask,heapType) \ - ( (This)->lpVtbl -> GetCustomHeapProperties(This,nodeMask,heapType) ) -#else -#define ID3D12Device7_GetCustomHeapProperties(This,RetVal,nodeMask,heapType) \ - ( (This)->lpVtbl -> GetCustomHeapProperties(This,RetVal,nodeMask,heapType) ) -#endif - -#define ID3D12Device7_CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) \ - ( (This)->lpVtbl -> CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) ) - -#define ID3D12Device7_CreateHeap(This,pDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateHeap(This,pDesc,riid,ppvHeap) ) - -#define ID3D12Device7_CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) \ - ( (This)->lpVtbl -> CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) - -#define ID3D12Device7_CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) \ - ( (This)->lpVtbl -> CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) - -#define ID3D12Device7_CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) \ - ( (This)->lpVtbl -> CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) ) - -#define ID3D12Device7_OpenSharedHandle(This,NTHandle,riid,ppvObj) \ - ( (This)->lpVtbl -> OpenSharedHandle(This,NTHandle,riid,ppvObj) ) - -#define ID3D12Device7_OpenSharedHandleByName(This,Name,Access,pNTHandle) \ - ( (This)->lpVtbl -> OpenSharedHandleByName(This,Name,Access,pNTHandle) ) - -#define ID3D12Device7_MakeResident(This,NumObjects,ppObjects) \ - ( (This)->lpVtbl -> MakeResident(This,NumObjects,ppObjects) ) - -#define ID3D12Device7_Evict(This,NumObjects,ppObjects) \ - ( (This)->lpVtbl -> Evict(This,NumObjects,ppObjects) ) - -#define ID3D12Device7_CreateFence(This,InitialValue,Flags,riid,ppFence) \ - ( (This)->lpVtbl -> CreateFence(This,InitialValue,Flags,riid,ppFence) ) - -#define ID3D12Device7_GetDeviceRemovedReason(This) \ - ( (This)->lpVtbl -> GetDeviceRemovedReason(This) ) - -#define ID3D12Device7_GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) \ - ( (This)->lpVtbl -> GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) - -#define ID3D12Device7_CreateQueryHeap(This,pDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateQueryHeap(This,pDesc,riid,ppvHeap) ) - -#define ID3D12Device7_SetStablePowerState(This,Enable) \ - ( (This)->lpVtbl -> SetStablePowerState(This,Enable) ) - -#define ID3D12Device7_CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) \ - ( (This)->lpVtbl -> CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) ) - -#define ID3D12Device7_GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) \ - ( (This)->lpVtbl -> GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) ) -#if !defined(_WIN32) - -#define ID3D12Device7_GetAdapterLuid(This) \ - ( (This)->lpVtbl -> GetAdapterLuid(This) ) -#else -#define ID3D12Device7_GetAdapterLuid(This,RetVal) \ - ( (This)->lpVtbl -> GetAdapterLuid(This,RetVal) ) -#endif - -#define ID3D12Device7_CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) \ - ( (This)->lpVtbl -> CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) ) - -#define ID3D12Device7_SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) \ - ( (This)->lpVtbl -> SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) ) - -#define ID3D12Device7_SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) \ - ( (This)->lpVtbl -> SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) ) - -#define ID3D12Device7_CreatePipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreatePipelineState(This,pDesc,riid,ppPipelineState) ) - -#define ID3D12Device7_OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap) \ - ( (This)->lpVtbl -> OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap) ) - -#define ID3D12Device7_OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap) \ - ( (This)->lpVtbl -> OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap) ) - -#define ID3D12Device7_EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal) \ - ( (This)->lpVtbl -> EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal) ) - -#define ID3D12Device7_CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList) \ - ( (This)->lpVtbl -> CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList) ) - -#define ID3D12Device7_CreateProtectedResourceSession(This,pDesc,riid,ppSession) \ - ( (This)->lpVtbl -> CreateProtectedResourceSession(This,pDesc,riid,ppSession) ) - -#define ID3D12Device7_CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) \ - ( (This)->lpVtbl -> CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) ) - -#define ID3D12Device7_CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap) ) - -#define ID3D12Device7_CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource) \ - ( (This)->lpVtbl -> CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource) ) -#if !defined(_WIN32) - -#define ID3D12Device7_GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) -#else -#define ID3D12Device7_GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) -#endif - -#define ID3D12Device7_CreateLifetimeTracker(This,pOwner,riid,ppvTracker) \ - ( (This)->lpVtbl -> CreateLifetimeTracker(This,pOwner,riid,ppvTracker) ) - -#define ID3D12Device7_RemoveDevice(This) \ - ( (This)->lpVtbl -> RemoveDevice(This) ) - -#define ID3D12Device7_EnumerateMetaCommands(This,pNumMetaCommands,pDescs) \ - ( (This)->lpVtbl -> EnumerateMetaCommands(This,pNumMetaCommands,pDescs) ) - -#define ID3D12Device7_EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs) \ - ( (This)->lpVtbl -> EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs) ) - -#define ID3D12Device7_CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand) \ - ( (This)->lpVtbl -> CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand) ) - -#define ID3D12Device7_CreateStateObject(This,pDesc,riid,ppStateObject) \ - ( (This)->lpVtbl -> CreateStateObject(This,pDesc,riid,ppStateObject) ) - -#define ID3D12Device7_GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo) \ - ( (This)->lpVtbl -> GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo) ) - -#define ID3D12Device7_CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck) \ - ( (This)->lpVtbl -> CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck) ) - -#define ID3D12Device7_SetBackgroundProcessingMode(This,Mode,MeasurementsAction,hEventToSignalUponCompletion,pbFurtherMeasurementsDesired) \ - ( (This)->lpVtbl -> SetBackgroundProcessingMode(This,Mode,MeasurementsAction,hEventToSignalUponCompletion,pbFurtherMeasurementsDesired) ) - -#define ID3D12Device7_AddToStateObject(This,pAddition,pStateObjectToGrowFrom,riid,ppNewStateObject) \ - ( (This)->lpVtbl -> AddToStateObject(This,pAddition,pStateObjectToGrowFrom,riid,ppNewStateObject) ) - -#define ID3D12Device7_CreateProtectedResourceSession1(This,pDesc,riid,ppSession) \ - ( (This)->lpVtbl -> CreateProtectedResourceSession1(This,pDesc,riid,ppSession) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12Device7_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12Device8_INTERFACE_DEFINED__ -#define __ID3D12Device8_INTERFACE_DEFINED__ - -/* interface ID3D12Device8 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12Device8; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("9218E6BB-F944-4F7E-A75C-B1B2C7B701F3") - ID3D12Device8 : public ID3D12Device7 - { - public: -#if defined(_MSC_VER) || !defined(_WIN32) - virtual D3D12_RESOURCE_ALLOCATION_INFO STDMETHODCALLTYPE GetResourceAllocationInfo2( - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC1 *pResourceDescs, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1) = 0; -#else - virtual D3D12_RESOURCE_ALLOCATION_INFO *STDMETHODCALLTYPE GetResourceAllocationInfo2( - D3D12_RESOURCE_ALLOCATION_INFO * RetVal, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC1 *pResourceDescs, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1) = 0; -#endif - - virtual HRESULT STDMETHODCALLTYPE CreateCommittedResource2( - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC1 *pDesc, - D3D12_RESOURCE_STATES InitialResourceState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riidResource, - _COM_Outptr_opt_ void **ppvResource) = 0; - - virtual HRESULT STDMETHODCALLTYPE CreatePlacedResource1( - _In_ ID3D12Heap *pHeap, - UINT64 HeapOffset, - _In_ const D3D12_RESOURCE_DESC1 *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource) = 0; - - virtual void STDMETHODCALLTYPE CreateSamplerFeedbackUnorderedAccessView( - _In_opt_ ID3D12Resource *pTargetedResource, - _In_opt_ ID3D12Resource *pFeedbackResource, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor) = 0; - - virtual void STDMETHODCALLTYPE GetCopyableFootprints1( - _In_ const D3D12_RESOURCE_DESC1 *pResourceDesc, - _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, - _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, - UINT64 BaseOffset, - _Out_writes_opt_(NumSubresources) D3D12_PLACED_SUBRESOURCE_FOOTPRINT *pLayouts, - _Out_writes_opt_(NumSubresources) UINT *pNumRows, - _Out_writes_opt_(NumSubresources) UINT64 *pRowSizeInBytes, - _Out_opt_ UINT64 *pTotalBytes) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12Device8Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12Device8 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12Device8 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12Device8 * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12Device8 * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12Device8 * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12Device8 * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12Device8 * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12Device, GetNodeCount) - UINT ( STDMETHODCALLTYPE *GetNodeCount )( - ID3D12Device8 * This); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandQueue) - HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue )( - ID3D12Device8 * This, - _In_ const D3D12_COMMAND_QUEUE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppCommandQueue); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandAllocator) - HRESULT ( STDMETHODCALLTYPE *CreateCommandAllocator )( - ID3D12Device8 * This, - _In_ D3D12_COMMAND_LIST_TYPE type, - REFIID riid, - _COM_Outptr_ void **ppCommandAllocator); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateGraphicsPipelineState) - HRESULT ( STDMETHODCALLTYPE *CreateGraphicsPipelineState )( - ID3D12Device8 * This, - _In_ const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateComputePipelineState) - HRESULT ( STDMETHODCALLTYPE *CreateComputePipelineState )( - ID3D12Device8 * This, - _In_ const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandList) - HRESULT ( STDMETHODCALLTYPE *CreateCommandList )( - ID3D12Device8 * This, - _In_ UINT nodeMask, - _In_ D3D12_COMMAND_LIST_TYPE type, - _In_ ID3D12CommandAllocator *pCommandAllocator, - _In_opt_ ID3D12PipelineState *pInitialState, - REFIID riid, - _COM_Outptr_ void **ppCommandList); - - DECLSPEC_XFGVIRT(ID3D12Device, CheckFeatureSupport) - HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )( - ID3D12Device8 * This, - D3D12_FEATURE Feature, - _Inout_updates_bytes_(FeatureSupportDataSize) void *pFeatureSupportData, - UINT FeatureSupportDataSize); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateDescriptorHeap) - HRESULT ( STDMETHODCALLTYPE *CreateDescriptorHeap )( - ID3D12Device8 * This, - _In_ const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc, - REFIID riid, - _COM_Outptr_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, GetDescriptorHandleIncrementSize) - UINT ( STDMETHODCALLTYPE *GetDescriptorHandleIncrementSize )( - ID3D12Device8 * This, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateRootSignature) - HRESULT ( STDMETHODCALLTYPE *CreateRootSignature )( - ID3D12Device8 * This, - _In_ UINT nodeMask, - _In_reads_(blobLengthInBytes) const void *pBlobWithRootSignature, - _In_ SIZE_T blobLengthInBytes, - REFIID riid, - _COM_Outptr_ void **ppvRootSignature); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateConstantBufferView) - void ( STDMETHODCALLTYPE *CreateConstantBufferView )( - ID3D12Device8 * This, - _In_opt_ const D3D12_CONSTANT_BUFFER_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateShaderResourceView) - void ( STDMETHODCALLTYPE *CreateShaderResourceView )( - ID3D12Device8 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateUnorderedAccessView) - void ( STDMETHODCALLTYPE *CreateUnorderedAccessView )( - ID3D12Device8 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ ID3D12Resource *pCounterResource, - _In_opt_ const D3D12_UNORDERED_ACCESS_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateRenderTargetView) - void ( STDMETHODCALLTYPE *CreateRenderTargetView )( - ID3D12Device8 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_RENDER_TARGET_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateDepthStencilView) - void ( STDMETHODCALLTYPE *CreateDepthStencilView )( - ID3D12Device8 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DEPTH_STENCIL_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateSampler) - void ( STDMETHODCALLTYPE *CreateSampler )( - ID3D12Device8 * This, - _In_ const D3D12_SAMPLER_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptors) - void ( STDMETHODCALLTYPE *CopyDescriptors )( - ID3D12Device8 * This, - _In_ UINT NumDestDescriptorRanges, - _In_reads_(NumDestDescriptorRanges) const D3D12_CPU_DESCRIPTOR_HANDLE *pDestDescriptorRangeStarts, - _In_reads_opt_(NumDestDescriptorRanges) const UINT *pDestDescriptorRangeSizes, - _In_ UINT NumSrcDescriptorRanges, - _In_reads_(NumSrcDescriptorRanges) const D3D12_CPU_DESCRIPTOR_HANDLE *pSrcDescriptorRangeStarts, - _In_reads_opt_(NumSrcDescriptorRanges) const UINT *pSrcDescriptorRangeSizes, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType); - - DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptorsSimple) - void ( STDMETHODCALLTYPE *CopyDescriptorsSimple )( - ID3D12Device8 * This, - _In_ UINT NumDescriptors, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType); - - DECLSPEC_XFGVIRT(ID3D12Device, GetResourceAllocationInfo) -#if !defined(_WIN32) - D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo )( - ID3D12Device8 * This, - _In_ UINT visibleMask, - _In_ UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs); - -#else - D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo )( - ID3D12Device8 * This, - D3D12_RESOURCE_ALLOCATION_INFO * RetVal, - _In_ UINT visibleMask, - _In_ UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device, GetCustomHeapProperties) -#if !defined(_WIN32) - D3D12_HEAP_PROPERTIES ( STDMETHODCALLTYPE *GetCustomHeapProperties )( - ID3D12Device8 * This, - _In_ UINT nodeMask, - D3D12_HEAP_TYPE heapType); - -#else - D3D12_HEAP_PROPERTIES *( STDMETHODCALLTYPE *GetCustomHeapProperties )( - ID3D12Device8 * This, - D3D12_HEAP_PROPERTIES * RetVal, - _In_ UINT nodeMask, - D3D12_HEAP_TYPE heapType); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommittedResource) - HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource )( - ID3D12Device8 * This, - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialResourceState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riidResource, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateHeap) - HRESULT ( STDMETHODCALLTYPE *CreateHeap )( - ID3D12Device8 * This, - _In_ const D3D12_HEAP_DESC *pDesc, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, CreatePlacedResource) - HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource )( - ID3D12Device8 * This, - _In_ ID3D12Heap *pHeap, - UINT64 HeapOffset, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateReservedResource) - HRESULT ( STDMETHODCALLTYPE *CreateReservedResource )( - ID3D12Device8 * This, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateSharedHandle) - HRESULT ( STDMETHODCALLTYPE *CreateSharedHandle )( - ID3D12Device8 * This, - _In_ ID3D12DeviceChild *pObject, - _In_opt_ const SECURITY_ATTRIBUTES *pAttributes, - DWORD Access, - _In_opt_ LPCWSTR Name, - _Out_ HANDLE *pHandle); - - DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandle) - HRESULT ( STDMETHODCALLTYPE *OpenSharedHandle )( - ID3D12Device8 * This, - _In_ HANDLE NTHandle, - REFIID riid, - _COM_Outptr_opt_ void **ppvObj); - - DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandleByName) - HRESULT ( STDMETHODCALLTYPE *OpenSharedHandleByName )( - ID3D12Device8 * This, - _In_ LPCWSTR Name, - DWORD Access, - /* [annotation][out] */ - _Out_ HANDLE *pNTHandle); - - DECLSPEC_XFGVIRT(ID3D12Device, MakeResident) - HRESULT ( STDMETHODCALLTYPE *MakeResident )( - ID3D12Device8 * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects); - - DECLSPEC_XFGVIRT(ID3D12Device, Evict) - HRESULT ( STDMETHODCALLTYPE *Evict )( - ID3D12Device8 * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateFence) - HRESULT ( STDMETHODCALLTYPE *CreateFence )( - ID3D12Device8 * This, - UINT64 InitialValue, - D3D12_FENCE_FLAGS Flags, - REFIID riid, - _COM_Outptr_ void **ppFence); - - DECLSPEC_XFGVIRT(ID3D12Device, GetDeviceRemovedReason) - HRESULT ( STDMETHODCALLTYPE *GetDeviceRemovedReason )( - ID3D12Device8 * This); - - DECLSPEC_XFGVIRT(ID3D12Device, GetCopyableFootprints) - void ( STDMETHODCALLTYPE *GetCopyableFootprints )( - ID3D12Device8 * This, - _In_ const D3D12_RESOURCE_DESC *pResourceDesc, - _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, - _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, - UINT64 BaseOffset, - _Out_writes_opt_(NumSubresources) D3D12_PLACED_SUBRESOURCE_FOOTPRINT *pLayouts, - _Out_writes_opt_(NumSubresources) UINT *pNumRows, - _Out_writes_opt_(NumSubresources) UINT64 *pRowSizeInBytes, - _Out_opt_ UINT64 *pTotalBytes); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateQueryHeap) - HRESULT ( STDMETHODCALLTYPE *CreateQueryHeap )( - ID3D12Device8 * This, - _In_ const D3D12_QUERY_HEAP_DESC *pDesc, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, SetStablePowerState) - HRESULT ( STDMETHODCALLTYPE *SetStablePowerState )( - ID3D12Device8 * This, - BOOL Enable); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandSignature) - HRESULT ( STDMETHODCALLTYPE *CreateCommandSignature )( - ID3D12Device8 * This, - _In_ const D3D12_COMMAND_SIGNATURE_DESC *pDesc, - _In_opt_ ID3D12RootSignature *pRootSignature, - REFIID riid, - _COM_Outptr_opt_ void **ppvCommandSignature); - - DECLSPEC_XFGVIRT(ID3D12Device, GetResourceTiling) - void ( STDMETHODCALLTYPE *GetResourceTiling )( - ID3D12Device8 * This, - _In_ ID3D12Resource *pTiledResource, - _Out_opt_ UINT *pNumTilesForEntireResource, - _Out_opt_ D3D12_PACKED_MIP_INFO *pPackedMipDesc, - _Out_opt_ D3D12_TILE_SHAPE *pStandardTileShapeForNonPackedMips, - _Inout_opt_ UINT *pNumSubresourceTilings, - _In_ UINT FirstSubresourceTilingToGet, - _Out_writes_(*pNumSubresourceTilings) D3D12_SUBRESOURCE_TILING *pSubresourceTilingsForNonPackedMips); - - DECLSPEC_XFGVIRT(ID3D12Device, GetAdapterLuid) -#if !defined(_WIN32) - LUID ( STDMETHODCALLTYPE *GetAdapterLuid )( - ID3D12Device8 * This); - -#else - LUID *( STDMETHODCALLTYPE *GetAdapterLuid )( - ID3D12Device8 * This, - LUID * RetVal); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device1, CreatePipelineLibrary) - HRESULT ( STDMETHODCALLTYPE *CreatePipelineLibrary )( - ID3D12Device8 * This, - _In_reads_(BlobLength) const void *pLibraryBlob, - SIZE_T BlobLength, - REFIID riid, - _COM_Outptr_ void **ppPipelineLibrary); - - DECLSPEC_XFGVIRT(ID3D12Device1, SetEventOnMultipleFenceCompletion) - HRESULT ( STDMETHODCALLTYPE *SetEventOnMultipleFenceCompletion )( - ID3D12Device8 * This, - _In_reads_(NumFences) ID3D12Fence *const *ppFences, - _In_reads_(NumFences) const UINT64 *pFenceValues, - UINT NumFences, - D3D12_MULTIPLE_FENCE_WAIT_FLAGS Flags, - HANDLE hEvent); - - DECLSPEC_XFGVIRT(ID3D12Device1, SetResidencyPriority) - HRESULT ( STDMETHODCALLTYPE *SetResidencyPriority )( - ID3D12Device8 * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects, - _In_reads_(NumObjects) const D3D12_RESIDENCY_PRIORITY *pPriorities); - - DECLSPEC_XFGVIRT(ID3D12Device2, CreatePipelineState) - HRESULT ( STDMETHODCALLTYPE *CreatePipelineState )( - ID3D12Device8 * This, - const D3D12_PIPELINE_STATE_STREAM_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromAddress) - HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromAddress )( - ID3D12Device8 * This, - _In_ const void *pAddress, - REFIID riid, - _COM_Outptr_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromFileMapping) - HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromFileMapping )( - ID3D12Device8 * This, - _In_ HANDLE hFileMapping, - REFIID riid, - _COM_Outptr_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device3, EnqueueMakeResident) - HRESULT ( STDMETHODCALLTYPE *EnqueueMakeResident )( - ID3D12Device8 * This, - D3D12_RESIDENCY_FLAGS Flags, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects, - _In_ ID3D12Fence *pFenceToSignal, - UINT64 FenceValueToSignal); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommandList1) - HRESULT ( STDMETHODCALLTYPE *CreateCommandList1 )( - ID3D12Device8 * This, - _In_ UINT nodeMask, - _In_ D3D12_COMMAND_LIST_TYPE type, - _In_ D3D12_COMMAND_LIST_FLAGS flags, - REFIID riid, - _COM_Outptr_ void **ppCommandList); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateProtectedResourceSession) - HRESULT ( STDMETHODCALLTYPE *CreateProtectedResourceSession )( - ID3D12Device8 * This, - _In_ const D3D12_PROTECTED_RESOURCE_SESSION_DESC *pDesc, - _In_ REFIID riid, - _COM_Outptr_ void **ppSession); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommittedResource1) - HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource1 )( - ID3D12Device8 * This, - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialResourceState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riidResource, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateHeap1) - HRESULT ( STDMETHODCALLTYPE *CreateHeap1 )( - ID3D12Device8 * This, - _In_ const D3D12_HEAP_DESC *pDesc, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateReservedResource1) - HRESULT ( STDMETHODCALLTYPE *CreateReservedResource1 )( - ID3D12Device8 * This, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device4, GetResourceAllocationInfo1) -#if !defined(_WIN32) - D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( - ID3D12Device8 * This, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); - -#else - D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( - ID3D12Device8 * This, - D3D12_RESOURCE_ALLOCATION_INFO * RetVal, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device5, CreateLifetimeTracker) - HRESULT ( STDMETHODCALLTYPE *CreateLifetimeTracker )( - ID3D12Device8 * This, - _In_ ID3D12LifetimeOwner *pOwner, - REFIID riid, - _COM_Outptr_ void **ppvTracker); - - DECLSPEC_XFGVIRT(ID3D12Device5, RemoveDevice) - void ( STDMETHODCALLTYPE *RemoveDevice )( - ID3D12Device8 * This); - - DECLSPEC_XFGVIRT(ID3D12Device5, EnumerateMetaCommands) - HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommands )( - ID3D12Device8 * This, - _Inout_ UINT *pNumMetaCommands, - _Out_writes_opt_(*pNumMetaCommands) D3D12_META_COMMAND_DESC *pDescs); - - DECLSPEC_XFGVIRT(ID3D12Device5, EnumerateMetaCommandParameters) - HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommandParameters )( - ID3D12Device8 * This, - _In_ REFGUID CommandId, - _In_ D3D12_META_COMMAND_PARAMETER_STAGE Stage, - _Out_opt_ UINT *pTotalStructureSizeInBytes, - _Inout_ UINT *pParameterCount, - _Out_writes_opt_(*pParameterCount) D3D12_META_COMMAND_PARAMETER_DESC *pParameterDescs); - - DECLSPEC_XFGVIRT(ID3D12Device5, CreateMetaCommand) - HRESULT ( STDMETHODCALLTYPE *CreateMetaCommand )( - ID3D12Device8 * This, - _In_ REFGUID CommandId, - _In_ UINT NodeMask, - _In_reads_bytes_opt_(CreationParametersDataSizeInBytes) const void *pCreationParametersData, - _In_ SIZE_T CreationParametersDataSizeInBytes, - REFIID riid, - _COM_Outptr_ void **ppMetaCommand); - - DECLSPEC_XFGVIRT(ID3D12Device5, CreateStateObject) - HRESULT ( STDMETHODCALLTYPE *CreateStateObject )( - ID3D12Device8 * This, - const D3D12_STATE_OBJECT_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppStateObject); - - DECLSPEC_XFGVIRT(ID3D12Device5, GetRaytracingAccelerationStructurePrebuildInfo) - void ( STDMETHODCALLTYPE *GetRaytracingAccelerationStructurePrebuildInfo )( - ID3D12Device8 * This, - _In_ const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS *pDesc, - _Out_ D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO *pInfo); - - DECLSPEC_XFGVIRT(ID3D12Device5, CheckDriverMatchingIdentifier) - D3D12_DRIVER_MATCHING_IDENTIFIER_STATUS ( STDMETHODCALLTYPE *CheckDriverMatchingIdentifier )( - ID3D12Device8 * This, - _In_ D3D12_SERIALIZED_DATA_TYPE SerializedDataType, - _In_ const D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER *pIdentifierToCheck); - - DECLSPEC_XFGVIRT(ID3D12Device6, SetBackgroundProcessingMode) - HRESULT ( STDMETHODCALLTYPE *SetBackgroundProcessingMode )( - ID3D12Device8 * This, - D3D12_BACKGROUND_PROCESSING_MODE Mode, - D3D12_MEASUREMENTS_ACTION MeasurementsAction, - _In_opt_ HANDLE hEventToSignalUponCompletion, - _Out_opt_ BOOL *pbFurtherMeasurementsDesired); - - DECLSPEC_XFGVIRT(ID3D12Device7, AddToStateObject) - HRESULT ( STDMETHODCALLTYPE *AddToStateObject )( - ID3D12Device8 * This, - const D3D12_STATE_OBJECT_DESC *pAddition, - ID3D12StateObject *pStateObjectToGrowFrom, - REFIID riid, - _COM_Outptr_ void **ppNewStateObject); - - DECLSPEC_XFGVIRT(ID3D12Device7, CreateProtectedResourceSession1) - HRESULT ( STDMETHODCALLTYPE *CreateProtectedResourceSession1 )( - ID3D12Device8 * This, - _In_ const D3D12_PROTECTED_RESOURCE_SESSION_DESC1 *pDesc, - _In_ REFIID riid, - _COM_Outptr_ void **ppSession); - - DECLSPEC_XFGVIRT(ID3D12Device8, GetResourceAllocationInfo2) -#if !defined(_WIN32) - D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo2 )( - ID3D12Device8 * This, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC1 *pResourceDescs, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); - -#else - D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo2 )( - ID3D12Device8 * This, - D3D12_RESOURCE_ALLOCATION_INFO * RetVal, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC1 *pResourceDescs, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device8, CreateCommittedResource2) - HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource2 )( - ID3D12Device8 * This, - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC1 *pDesc, - D3D12_RESOURCE_STATES InitialResourceState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riidResource, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device8, CreatePlacedResource1) - HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource1 )( - ID3D12Device8 * This, - _In_ ID3D12Heap *pHeap, - UINT64 HeapOffset, - _In_ const D3D12_RESOURCE_DESC1 *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device8, CreateSamplerFeedbackUnorderedAccessView) - void ( STDMETHODCALLTYPE *CreateSamplerFeedbackUnorderedAccessView )( - ID3D12Device8 * This, - _In_opt_ ID3D12Resource *pTargetedResource, - _In_opt_ ID3D12Resource *pFeedbackResource, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device8, GetCopyableFootprints1) - void ( STDMETHODCALLTYPE *GetCopyableFootprints1 )( - ID3D12Device8 * This, - _In_ const D3D12_RESOURCE_DESC1 *pResourceDesc, - _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, - _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, - UINT64 BaseOffset, - _Out_writes_opt_(NumSubresources) D3D12_PLACED_SUBRESOURCE_FOOTPRINT *pLayouts, - _Out_writes_opt_(NumSubresources) UINT *pNumRows, - _Out_writes_opt_(NumSubresources) UINT64 *pRowSizeInBytes, - _Out_opt_ UINT64 *pTotalBytes); - - END_INTERFACE - } ID3D12Device8Vtbl; - - interface ID3D12Device8 - { - CONST_VTBL struct ID3D12Device8Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12Device8_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12Device8_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12Device8_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12Device8_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12Device8_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12Device8_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12Device8_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12Device8_GetNodeCount(This) \ - ( (This)->lpVtbl -> GetNodeCount(This) ) - -#define ID3D12Device8_CreateCommandQueue(This,pDesc,riid,ppCommandQueue) \ - ( (This)->lpVtbl -> CreateCommandQueue(This,pDesc,riid,ppCommandQueue) ) - -#define ID3D12Device8_CreateCommandAllocator(This,type,riid,ppCommandAllocator) \ - ( (This)->lpVtbl -> CreateCommandAllocator(This,type,riid,ppCommandAllocator) ) - -#define ID3D12Device8_CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) ) - -#define ID3D12Device8_CreateComputePipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreateComputePipelineState(This,pDesc,riid,ppPipelineState) ) - -#define ID3D12Device8_CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) \ - ( (This)->lpVtbl -> CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) ) - -#define ID3D12Device8_CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) \ - ( (This)->lpVtbl -> CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) ) - -#define ID3D12Device8_CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) ) - -#define ID3D12Device8_GetDescriptorHandleIncrementSize(This,DescriptorHeapType) \ - ( (This)->lpVtbl -> GetDescriptorHandleIncrementSize(This,DescriptorHeapType) ) - -#define ID3D12Device8_CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) \ - ( (This)->lpVtbl -> CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) ) - -#define ID3D12Device8_CreateConstantBufferView(This,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateConstantBufferView(This,pDesc,DestDescriptor) ) - -#define ID3D12Device8_CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device8_CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) ) - -#define ID3D12Device8_CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device8_CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device8_CreateSampler(This,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateSampler(This,pDesc,DestDescriptor) ) - -#define ID3D12Device8_CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) \ - ( (This)->lpVtbl -> CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) ) - -#define ID3D12Device8_CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) \ - ( (This)->lpVtbl -> CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) ) -#if !defined(_WIN32) - -#define ID3D12Device8_GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) ) -#else -#define ID3D12Device8_GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) ) -#endif -#if !defined(_WIN32) - -#define ID3D12Device8_GetCustomHeapProperties(This,nodeMask,heapType) \ - ( (This)->lpVtbl -> GetCustomHeapProperties(This,nodeMask,heapType) ) -#else -#define ID3D12Device8_GetCustomHeapProperties(This,RetVal,nodeMask,heapType) \ - ( (This)->lpVtbl -> GetCustomHeapProperties(This,RetVal,nodeMask,heapType) ) -#endif - -#define ID3D12Device8_CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) \ - ( (This)->lpVtbl -> CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) ) - -#define ID3D12Device8_CreateHeap(This,pDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateHeap(This,pDesc,riid,ppvHeap) ) - -#define ID3D12Device8_CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) \ - ( (This)->lpVtbl -> CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) - -#define ID3D12Device8_CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) \ - ( (This)->lpVtbl -> CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) - -#define ID3D12Device8_CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) \ - ( (This)->lpVtbl -> CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) ) - -#define ID3D12Device8_OpenSharedHandle(This,NTHandle,riid,ppvObj) \ - ( (This)->lpVtbl -> OpenSharedHandle(This,NTHandle,riid,ppvObj) ) - -#define ID3D12Device8_OpenSharedHandleByName(This,Name,Access,pNTHandle) \ - ( (This)->lpVtbl -> OpenSharedHandleByName(This,Name,Access,pNTHandle) ) - -#define ID3D12Device8_MakeResident(This,NumObjects,ppObjects) \ - ( (This)->lpVtbl -> MakeResident(This,NumObjects,ppObjects) ) - -#define ID3D12Device8_Evict(This,NumObjects,ppObjects) \ - ( (This)->lpVtbl -> Evict(This,NumObjects,ppObjects) ) - -#define ID3D12Device8_CreateFence(This,InitialValue,Flags,riid,ppFence) \ - ( (This)->lpVtbl -> CreateFence(This,InitialValue,Flags,riid,ppFence) ) - -#define ID3D12Device8_GetDeviceRemovedReason(This) \ - ( (This)->lpVtbl -> GetDeviceRemovedReason(This) ) - -#define ID3D12Device8_GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) \ - ( (This)->lpVtbl -> GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) - -#define ID3D12Device8_CreateQueryHeap(This,pDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateQueryHeap(This,pDesc,riid,ppvHeap) ) - -#define ID3D12Device8_SetStablePowerState(This,Enable) \ - ( (This)->lpVtbl -> SetStablePowerState(This,Enable) ) - -#define ID3D12Device8_CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) \ - ( (This)->lpVtbl -> CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) ) - -#define ID3D12Device8_GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) \ - ( (This)->lpVtbl -> GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) ) -#if !defined(_WIN32) - -#define ID3D12Device8_GetAdapterLuid(This) \ - ( (This)->lpVtbl -> GetAdapterLuid(This) ) -#else -#define ID3D12Device8_GetAdapterLuid(This,RetVal) \ - ( (This)->lpVtbl -> GetAdapterLuid(This,RetVal) ) -#endif - -#define ID3D12Device8_CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) \ - ( (This)->lpVtbl -> CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) ) - -#define ID3D12Device8_SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) \ - ( (This)->lpVtbl -> SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) ) - -#define ID3D12Device8_SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) \ - ( (This)->lpVtbl -> SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) ) - -#define ID3D12Device8_CreatePipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreatePipelineState(This,pDesc,riid,ppPipelineState) ) - -#define ID3D12Device8_OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap) \ - ( (This)->lpVtbl -> OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap) ) - -#define ID3D12Device8_OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap) \ - ( (This)->lpVtbl -> OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap) ) - -#define ID3D12Device8_EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal) \ - ( (This)->lpVtbl -> EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal) ) - -#define ID3D12Device8_CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList) \ - ( (This)->lpVtbl -> CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList) ) - -#define ID3D12Device8_CreateProtectedResourceSession(This,pDesc,riid,ppSession) \ - ( (This)->lpVtbl -> CreateProtectedResourceSession(This,pDesc,riid,ppSession) ) - -#define ID3D12Device8_CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) \ - ( (This)->lpVtbl -> CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) ) - -#define ID3D12Device8_CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap) ) - -#define ID3D12Device8_CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource) \ - ( (This)->lpVtbl -> CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource) ) -#if !defined(_WIN32) - -#define ID3D12Device8_GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) -#else -#define ID3D12Device8_GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) -#endif - -#define ID3D12Device8_CreateLifetimeTracker(This,pOwner,riid,ppvTracker) \ - ( (This)->lpVtbl -> CreateLifetimeTracker(This,pOwner,riid,ppvTracker) ) - -#define ID3D12Device8_RemoveDevice(This) \ - ( (This)->lpVtbl -> RemoveDevice(This) ) - -#define ID3D12Device8_EnumerateMetaCommands(This,pNumMetaCommands,pDescs) \ - ( (This)->lpVtbl -> EnumerateMetaCommands(This,pNumMetaCommands,pDescs) ) - -#define ID3D12Device8_EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs) \ - ( (This)->lpVtbl -> EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs) ) - -#define ID3D12Device8_CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand) \ - ( (This)->lpVtbl -> CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand) ) - -#define ID3D12Device8_CreateStateObject(This,pDesc,riid,ppStateObject) \ - ( (This)->lpVtbl -> CreateStateObject(This,pDesc,riid,ppStateObject) ) - -#define ID3D12Device8_GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo) \ - ( (This)->lpVtbl -> GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo) ) - -#define ID3D12Device8_CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck) \ - ( (This)->lpVtbl -> CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck) ) - -#define ID3D12Device8_SetBackgroundProcessingMode(This,Mode,MeasurementsAction,hEventToSignalUponCompletion,pbFurtherMeasurementsDesired) \ - ( (This)->lpVtbl -> SetBackgroundProcessingMode(This,Mode,MeasurementsAction,hEventToSignalUponCompletion,pbFurtherMeasurementsDesired) ) - -#define ID3D12Device8_AddToStateObject(This,pAddition,pStateObjectToGrowFrom,riid,ppNewStateObject) \ - ( (This)->lpVtbl -> AddToStateObject(This,pAddition,pStateObjectToGrowFrom,riid,ppNewStateObject) ) - -#define ID3D12Device8_CreateProtectedResourceSession1(This,pDesc,riid,ppSession) \ - ( (This)->lpVtbl -> CreateProtectedResourceSession1(This,pDesc,riid,ppSession) ) - -#if !defined(_WIN32) - -#define ID3D12Device8_GetResourceAllocationInfo2(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo2(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) -#else -#define ID3D12Device8_GetResourceAllocationInfo2(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo2(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) -#endif - -#define ID3D12Device8_CreateCommittedResource2(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) \ - ( (This)->lpVtbl -> CreateCommittedResource2(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) ) - -#define ID3D12Device8_CreatePlacedResource1(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) \ - ( (This)->lpVtbl -> CreatePlacedResource1(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) - -#define ID3D12Device8_CreateSamplerFeedbackUnorderedAccessView(This,pTargetedResource,pFeedbackResource,DestDescriptor) \ - ( (This)->lpVtbl -> CreateSamplerFeedbackUnorderedAccessView(This,pTargetedResource,pFeedbackResource,DestDescriptor) ) - -#define ID3D12Device8_GetCopyableFootprints1(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) \ - ( (This)->lpVtbl -> GetCopyableFootprints1(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12Device8_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12Resource1_INTERFACE_DEFINED__ -#define __ID3D12Resource1_INTERFACE_DEFINED__ - -/* interface ID3D12Resource1 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12Resource1; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("9D5E227A-4430-4161-88B3-3ECA6BB16E19") - ID3D12Resource1 : public ID3D12Resource - { - public: - virtual HRESULT STDMETHODCALLTYPE GetProtectedResourceSession( - REFIID riid, - _COM_Outptr_opt_ void **ppProtectedSession) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12Resource1Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12Resource1 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12Resource1 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12Resource1 * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12Resource1 * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12Resource1 * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12Resource1 * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12Resource1 * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12Resource1 * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12Resource, Map) - HRESULT ( STDMETHODCALLTYPE *Map )( - ID3D12Resource1 * This, - UINT Subresource, - _In_opt_ const D3D12_RANGE *pReadRange, - _Outptr_opt_result_bytebuffer_(_Inexpressible_("Dependent on resource")) void **ppData); - - DECLSPEC_XFGVIRT(ID3D12Resource, Unmap) - void ( STDMETHODCALLTYPE *Unmap )( - ID3D12Resource1 * This, - UINT Subresource, - _In_opt_ const D3D12_RANGE *pWrittenRange); - - DECLSPEC_XFGVIRT(ID3D12Resource, GetDesc) -#if !defined(_WIN32) - D3D12_RESOURCE_DESC ( STDMETHODCALLTYPE *GetDesc )( - ID3D12Resource1 * This); - -#else - D3D12_RESOURCE_DESC *( STDMETHODCALLTYPE *GetDesc )( - ID3D12Resource1 * This, - D3D12_RESOURCE_DESC * RetVal); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Resource, GetGPUVirtualAddress) - D3D12_GPU_VIRTUAL_ADDRESS ( STDMETHODCALLTYPE *GetGPUVirtualAddress )( - ID3D12Resource1 * This); - - DECLSPEC_XFGVIRT(ID3D12Resource, WriteToSubresource) - HRESULT ( STDMETHODCALLTYPE *WriteToSubresource )( - ID3D12Resource1 * This, - UINT DstSubresource, - _In_opt_ const D3D12_BOX *pDstBox, - _In_ const void *pSrcData, - UINT SrcRowPitch, - UINT SrcDepthPitch); - - DECLSPEC_XFGVIRT(ID3D12Resource, ReadFromSubresource) - HRESULT ( STDMETHODCALLTYPE *ReadFromSubresource )( - ID3D12Resource1 * This, - _Out_ void *pDstData, - UINT DstRowPitch, - UINT DstDepthPitch, - UINT SrcSubresource, - _In_opt_ const D3D12_BOX *pSrcBox); - - DECLSPEC_XFGVIRT(ID3D12Resource, GetHeapProperties) - HRESULT ( STDMETHODCALLTYPE *GetHeapProperties )( - ID3D12Resource1 * This, - _Out_opt_ D3D12_HEAP_PROPERTIES *pHeapProperties, - _Out_opt_ D3D12_HEAP_FLAGS *pHeapFlags); - - DECLSPEC_XFGVIRT(ID3D12Resource1, GetProtectedResourceSession) - HRESULT ( STDMETHODCALLTYPE *GetProtectedResourceSession )( - ID3D12Resource1 * This, - REFIID riid, - _COM_Outptr_opt_ void **ppProtectedSession); - - END_INTERFACE - } ID3D12Resource1Vtbl; - - interface ID3D12Resource1 - { - CONST_VTBL struct ID3D12Resource1Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12Resource1_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12Resource1_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12Resource1_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12Resource1_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12Resource1_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12Resource1_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12Resource1_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12Resource1_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12Resource1_Map(This,Subresource,pReadRange,ppData) \ - ( (This)->lpVtbl -> Map(This,Subresource,pReadRange,ppData) ) - -#define ID3D12Resource1_Unmap(This,Subresource,pWrittenRange) \ - ( (This)->lpVtbl -> Unmap(This,Subresource,pWrittenRange) ) -#if !defined(_WIN32) - -#define ID3D12Resource1_GetDesc(This) \ - ( (This)->lpVtbl -> GetDesc(This) ) -#else -#define ID3D12Resource1_GetDesc(This,RetVal) \ - ( (This)->lpVtbl -> GetDesc(This,RetVal) ) -#endif - -#define ID3D12Resource1_GetGPUVirtualAddress(This) \ - ( (This)->lpVtbl -> GetGPUVirtualAddress(This) ) - -#define ID3D12Resource1_WriteToSubresource(This,DstSubresource,pDstBox,pSrcData,SrcRowPitch,SrcDepthPitch) \ - ( (This)->lpVtbl -> WriteToSubresource(This,DstSubresource,pDstBox,pSrcData,SrcRowPitch,SrcDepthPitch) ) - -#define ID3D12Resource1_ReadFromSubresource(This,pDstData,DstRowPitch,DstDepthPitch,SrcSubresource,pSrcBox) \ - ( (This)->lpVtbl -> ReadFromSubresource(This,pDstData,DstRowPitch,DstDepthPitch,SrcSubresource,pSrcBox) ) - -#define ID3D12Resource1_GetHeapProperties(This,pHeapProperties,pHeapFlags) \ - ( (This)->lpVtbl -> GetHeapProperties(This,pHeapProperties,pHeapFlags) ) - -#define ID3D12Resource1_GetProtectedResourceSession(This,riid,ppProtectedSession) \ - ( (This)->lpVtbl -> GetProtectedResourceSession(This,riid,ppProtectedSession) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12Resource1_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12Resource2_INTERFACE_DEFINED__ -#define __ID3D12Resource2_INTERFACE_DEFINED__ - -/* interface ID3D12Resource2 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12Resource2; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("BE36EC3B-EA85-4AEB-A45A-E9D76404A495") - ID3D12Resource2 : public ID3D12Resource1 - { - public: -#if defined(_MSC_VER) || !defined(_WIN32) - virtual D3D12_RESOURCE_DESC1 STDMETHODCALLTYPE GetDesc1( void) = 0; -#else - virtual D3D12_RESOURCE_DESC1 *STDMETHODCALLTYPE GetDesc1( - D3D12_RESOURCE_DESC1 * RetVal) = 0; -#endif - - }; - - -#else /* C style interface */ - - typedef struct ID3D12Resource2Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12Resource2 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12Resource2 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12Resource2 * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12Resource2 * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12Resource2 * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12Resource2 * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12Resource2 * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12Resource2 * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12Resource, Map) - HRESULT ( STDMETHODCALLTYPE *Map )( - ID3D12Resource2 * This, - UINT Subresource, - _In_opt_ const D3D12_RANGE *pReadRange, - _Outptr_opt_result_bytebuffer_(_Inexpressible_("Dependent on resource")) void **ppData); - - DECLSPEC_XFGVIRT(ID3D12Resource, Unmap) - void ( STDMETHODCALLTYPE *Unmap )( - ID3D12Resource2 * This, - UINT Subresource, - _In_opt_ const D3D12_RANGE *pWrittenRange); - - DECLSPEC_XFGVIRT(ID3D12Resource, GetDesc) -#if !defined(_WIN32) - D3D12_RESOURCE_DESC ( STDMETHODCALLTYPE *GetDesc )( - ID3D12Resource2 * This); - -#else - D3D12_RESOURCE_DESC *( STDMETHODCALLTYPE *GetDesc )( - ID3D12Resource2 * This, - D3D12_RESOURCE_DESC * RetVal); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Resource, GetGPUVirtualAddress) - D3D12_GPU_VIRTUAL_ADDRESS ( STDMETHODCALLTYPE *GetGPUVirtualAddress )( - ID3D12Resource2 * This); - - DECLSPEC_XFGVIRT(ID3D12Resource, WriteToSubresource) - HRESULT ( STDMETHODCALLTYPE *WriteToSubresource )( - ID3D12Resource2 * This, - UINT DstSubresource, - _In_opt_ const D3D12_BOX *pDstBox, - _In_ const void *pSrcData, - UINT SrcRowPitch, - UINT SrcDepthPitch); - - DECLSPEC_XFGVIRT(ID3D12Resource, ReadFromSubresource) - HRESULT ( STDMETHODCALLTYPE *ReadFromSubresource )( - ID3D12Resource2 * This, - _Out_ void *pDstData, - UINT DstRowPitch, - UINT DstDepthPitch, - UINT SrcSubresource, - _In_opt_ const D3D12_BOX *pSrcBox); - - DECLSPEC_XFGVIRT(ID3D12Resource, GetHeapProperties) - HRESULT ( STDMETHODCALLTYPE *GetHeapProperties )( - ID3D12Resource2 * This, - _Out_opt_ D3D12_HEAP_PROPERTIES *pHeapProperties, - _Out_opt_ D3D12_HEAP_FLAGS *pHeapFlags); - - DECLSPEC_XFGVIRT(ID3D12Resource1, GetProtectedResourceSession) - HRESULT ( STDMETHODCALLTYPE *GetProtectedResourceSession )( - ID3D12Resource2 * This, - REFIID riid, - _COM_Outptr_opt_ void **ppProtectedSession); - - DECLSPEC_XFGVIRT(ID3D12Resource2, GetDesc1) -#if !defined(_WIN32) - D3D12_RESOURCE_DESC1 ( STDMETHODCALLTYPE *GetDesc1 )( - ID3D12Resource2 * This); - -#else - D3D12_RESOURCE_DESC1 *( STDMETHODCALLTYPE *GetDesc1 )( - ID3D12Resource2 * This, - D3D12_RESOURCE_DESC1 * RetVal); - -#endif - - END_INTERFACE - } ID3D12Resource2Vtbl; - - interface ID3D12Resource2 - { - CONST_VTBL struct ID3D12Resource2Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12Resource2_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12Resource2_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12Resource2_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12Resource2_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12Resource2_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12Resource2_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12Resource2_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12Resource2_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12Resource2_Map(This,Subresource,pReadRange,ppData) \ - ( (This)->lpVtbl -> Map(This,Subresource,pReadRange,ppData) ) - -#define ID3D12Resource2_Unmap(This,Subresource,pWrittenRange) \ - ( (This)->lpVtbl -> Unmap(This,Subresource,pWrittenRange) ) -#if !defined(_WIN32) - -#define ID3D12Resource2_GetDesc(This) \ - ( (This)->lpVtbl -> GetDesc(This) ) -#else -#define ID3D12Resource2_GetDesc(This,RetVal) \ - ( (This)->lpVtbl -> GetDesc(This,RetVal) ) -#endif - -#define ID3D12Resource2_GetGPUVirtualAddress(This) \ - ( (This)->lpVtbl -> GetGPUVirtualAddress(This) ) - -#define ID3D12Resource2_WriteToSubresource(This,DstSubresource,pDstBox,pSrcData,SrcRowPitch,SrcDepthPitch) \ - ( (This)->lpVtbl -> WriteToSubresource(This,DstSubresource,pDstBox,pSrcData,SrcRowPitch,SrcDepthPitch) ) - -#define ID3D12Resource2_ReadFromSubresource(This,pDstData,DstRowPitch,DstDepthPitch,SrcSubresource,pSrcBox) \ - ( (This)->lpVtbl -> ReadFromSubresource(This,pDstData,DstRowPitch,DstDepthPitch,SrcSubresource,pSrcBox) ) - -#define ID3D12Resource2_GetHeapProperties(This,pHeapProperties,pHeapFlags) \ - ( (This)->lpVtbl -> GetHeapProperties(This,pHeapProperties,pHeapFlags) ) - -#define ID3D12Resource2_GetProtectedResourceSession(This,riid,ppProtectedSession) \ - ( (This)->lpVtbl -> GetProtectedResourceSession(This,riid,ppProtectedSession) ) - -#if !defined(_WIN32) - -#define ID3D12Resource2_GetDesc1(This) \ - ( (This)->lpVtbl -> GetDesc1(This) ) -#else -#define ID3D12Resource2_GetDesc1(This,RetVal) \ - ( (This)->lpVtbl -> GetDesc1(This,RetVal) ) -#endif - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12Resource2_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12Heap1_INTERFACE_DEFINED__ -#define __ID3D12Heap1_INTERFACE_DEFINED__ - -/* interface ID3D12Heap1 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12Heap1; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("572F7389-2168-49E3-9693-D6DF5871BF6D") - ID3D12Heap1 : public ID3D12Heap - { - public: - virtual HRESULT STDMETHODCALLTYPE GetProtectedResourceSession( - REFIID riid, - _COM_Outptr_opt_ void **ppProtectedSession) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12Heap1Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12Heap1 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12Heap1 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12Heap1 * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12Heap1 * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12Heap1 * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12Heap1 * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12Heap1 * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12Heap1 * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12Heap, GetDesc) -#if !defined(_WIN32) - D3D12_HEAP_DESC ( STDMETHODCALLTYPE *GetDesc )( - ID3D12Heap1 * This); - -#else - D3D12_HEAP_DESC *( STDMETHODCALLTYPE *GetDesc )( - ID3D12Heap1 * This, - D3D12_HEAP_DESC * RetVal); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Heap1, GetProtectedResourceSession) - HRESULT ( STDMETHODCALLTYPE *GetProtectedResourceSession )( - ID3D12Heap1 * This, - REFIID riid, - _COM_Outptr_opt_ void **ppProtectedSession); - - END_INTERFACE - } ID3D12Heap1Vtbl; - - interface ID3D12Heap1 - { - CONST_VTBL struct ID3D12Heap1Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12Heap1_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12Heap1_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12Heap1_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12Heap1_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12Heap1_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12Heap1_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12Heap1_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12Heap1_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#if !defined(_WIN32) - -#define ID3D12Heap1_GetDesc(This) \ - ( (This)->lpVtbl -> GetDesc(This) ) -#else -#define ID3D12Heap1_GetDesc(This,RetVal) \ - ( (This)->lpVtbl -> GetDesc(This,RetVal) ) -#endif - -#define ID3D12Heap1_GetProtectedResourceSession(This,riid,ppProtectedSession) \ - ( (This)->lpVtbl -> GetProtectedResourceSession(This,riid,ppProtectedSession) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12Heap1_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12GraphicsCommandList3_INTERFACE_DEFINED__ -#define __ID3D12GraphicsCommandList3_INTERFACE_DEFINED__ - -/* interface ID3D12GraphicsCommandList3 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12GraphicsCommandList3; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("6FDA83A7-B84C-4E38-9AC8-C7BD22016B3D") - ID3D12GraphicsCommandList3 : public ID3D12GraphicsCommandList2 - { - public: - virtual void STDMETHODCALLTYPE SetProtectedResourceSession( - _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12GraphicsCommandList3Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12GraphicsCommandList3 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12GraphicsCommandList3 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12GraphicsCommandList3 * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12GraphicsCommandList3 * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12GraphicsCommandList3 * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12GraphicsCommandList3 * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12GraphicsCommandList3 * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12GraphicsCommandList3 * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12CommandList, GetType) - D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )( - ID3D12GraphicsCommandList3 * This); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Close) - HRESULT ( STDMETHODCALLTYPE *Close )( - ID3D12GraphicsCommandList3 * This); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Reset) - HRESULT ( STDMETHODCALLTYPE *Reset )( - ID3D12GraphicsCommandList3 * This, - _In_ ID3D12CommandAllocator *pAllocator, - _In_opt_ ID3D12PipelineState *pInitialState); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearState) - void ( STDMETHODCALLTYPE *ClearState )( - ID3D12GraphicsCommandList3 * This, - _In_opt_ ID3D12PipelineState *pPipelineState); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawInstanced) - void ( STDMETHODCALLTYPE *DrawInstanced )( - ID3D12GraphicsCommandList3 * This, - _In_ UINT VertexCountPerInstance, - _In_ UINT InstanceCount, - _In_ UINT StartVertexLocation, - _In_ UINT StartInstanceLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawIndexedInstanced) - void ( STDMETHODCALLTYPE *DrawIndexedInstanced )( - ID3D12GraphicsCommandList3 * This, - _In_ UINT IndexCountPerInstance, - _In_ UINT InstanceCount, - _In_ UINT StartIndexLocation, - _In_ INT BaseVertexLocation, - _In_ UINT StartInstanceLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Dispatch) - void ( STDMETHODCALLTYPE *Dispatch )( - ID3D12GraphicsCommandList3 * This, - _In_ UINT ThreadGroupCountX, - _In_ UINT ThreadGroupCountY, - _In_ UINT ThreadGroupCountZ); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyBufferRegion) - void ( STDMETHODCALLTYPE *CopyBufferRegion )( - ID3D12GraphicsCommandList3 * This, - _In_ ID3D12Resource *pDstBuffer, - UINT64 DstOffset, - _In_ ID3D12Resource *pSrcBuffer, - UINT64 SrcOffset, - UINT64 NumBytes); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTextureRegion) - void ( STDMETHODCALLTYPE *CopyTextureRegion )( - ID3D12GraphicsCommandList3 * This, - _In_ const D3D12_TEXTURE_COPY_LOCATION *pDst, - UINT DstX, - UINT DstY, - UINT DstZ, - _In_ const D3D12_TEXTURE_COPY_LOCATION *pSrc, - _In_opt_ const D3D12_BOX *pSrcBox); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyResource) - void ( STDMETHODCALLTYPE *CopyResource )( - ID3D12GraphicsCommandList3 * This, - _In_ ID3D12Resource *pDstResource, - _In_ ID3D12Resource *pSrcResource); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTiles) - void ( STDMETHODCALLTYPE *CopyTiles )( - ID3D12GraphicsCommandList3 * This, - _In_ ID3D12Resource *pTiledResource, - _In_ const D3D12_TILED_RESOURCE_COORDINATE *pTileRegionStartCoordinate, - _In_ const D3D12_TILE_REGION_SIZE *pTileRegionSize, - _In_ ID3D12Resource *pBuffer, - UINT64 BufferStartOffsetInBytes, - D3D12_TILE_COPY_FLAGS Flags); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveSubresource) - void ( STDMETHODCALLTYPE *ResolveSubresource )( - ID3D12GraphicsCommandList3 * This, - _In_ ID3D12Resource *pDstResource, - _In_ UINT DstSubresource, - _In_ ID3D12Resource *pSrcResource, - _In_ UINT SrcSubresource, - _In_ DXGI_FORMAT Format); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetPrimitiveTopology) - void ( STDMETHODCALLTYPE *IASetPrimitiveTopology )( - ID3D12GraphicsCommandList3 * This, - _In_ D3D12_PRIMITIVE_TOPOLOGY PrimitiveTopology); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetViewports) - void ( STDMETHODCALLTYPE *RSSetViewports )( - ID3D12GraphicsCommandList3 * This, - _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE) UINT NumViewports, - _In_reads_( NumViewports) const D3D12_VIEWPORT *pViewports); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetScissorRects) - void ( STDMETHODCALLTYPE *RSSetScissorRects )( - ID3D12GraphicsCommandList3 * This, - _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE) UINT NumRects, - _In_reads_( NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetBlendFactor) - void ( STDMETHODCALLTYPE *OMSetBlendFactor )( - ID3D12GraphicsCommandList3 * This, - _In_reads_opt_(4) const FLOAT BlendFactor[ 4 ]); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetStencilRef) - void ( STDMETHODCALLTYPE *OMSetStencilRef )( - ID3D12GraphicsCommandList3 * This, - _In_ UINT StencilRef); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPipelineState) - void ( STDMETHODCALLTYPE *SetPipelineState )( - ID3D12GraphicsCommandList3 * This, - _In_ ID3D12PipelineState *pPipelineState); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResourceBarrier) - void ( STDMETHODCALLTYPE *ResourceBarrier )( - ID3D12GraphicsCommandList3 * This, - _In_ UINT NumBarriers, - _In_reads_(NumBarriers) const D3D12_RESOURCE_BARRIER *pBarriers); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteBundle) - void ( STDMETHODCALLTYPE *ExecuteBundle )( - ID3D12GraphicsCommandList3 * This, - _In_ ID3D12GraphicsCommandList *pCommandList); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetDescriptorHeaps) - void ( STDMETHODCALLTYPE *SetDescriptorHeaps )( - ID3D12GraphicsCommandList3 * This, - _In_ UINT NumDescriptorHeaps, - _In_reads_(NumDescriptorHeaps) ID3D12DescriptorHeap *const *ppDescriptorHeaps); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootSignature) - void ( STDMETHODCALLTYPE *SetComputeRootSignature )( - ID3D12GraphicsCommandList3 * This, - _In_opt_ ID3D12RootSignature *pRootSignature); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootSignature) - void ( STDMETHODCALLTYPE *SetGraphicsRootSignature )( - ID3D12GraphicsCommandList3 * This, - _In_opt_ ID3D12RootSignature *pRootSignature); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootDescriptorTable) - void ( STDMETHODCALLTYPE *SetComputeRootDescriptorTable )( - ID3D12GraphicsCommandList3 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootDescriptorTable) - void ( STDMETHODCALLTYPE *SetGraphicsRootDescriptorTable )( - ID3D12GraphicsCommandList3 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstant) - void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstant )( - ID3D12GraphicsCommandList3 * This, - _In_ UINT RootParameterIndex, - _In_ UINT SrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstant) - void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstant )( - ID3D12GraphicsCommandList3 * This, - _In_ UINT RootParameterIndex, - _In_ UINT SrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstants) - void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstants )( - ID3D12GraphicsCommandList3 * This, - _In_ UINT RootParameterIndex, - _In_ UINT Num32BitValuesToSet, - _In_reads_(Num32BitValuesToSet*sizeof(UINT)) const void *pSrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstants) - void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstants )( - ID3D12GraphicsCommandList3 * This, - _In_ UINT RootParameterIndex, - _In_ UINT Num32BitValuesToSet, - _In_reads_(Num32BitValuesToSet*sizeof(UINT)) const void *pSrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootConstantBufferView) - void ( STDMETHODCALLTYPE *SetComputeRootConstantBufferView )( - ID3D12GraphicsCommandList3 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootConstantBufferView) - void ( STDMETHODCALLTYPE *SetGraphicsRootConstantBufferView )( - ID3D12GraphicsCommandList3 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootShaderResourceView) - void ( STDMETHODCALLTYPE *SetComputeRootShaderResourceView )( - ID3D12GraphicsCommandList3 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootShaderResourceView) - void ( STDMETHODCALLTYPE *SetGraphicsRootShaderResourceView )( - ID3D12GraphicsCommandList3 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootUnorderedAccessView) - void ( STDMETHODCALLTYPE *SetComputeRootUnorderedAccessView )( - ID3D12GraphicsCommandList3 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootUnorderedAccessView) - void ( STDMETHODCALLTYPE *SetGraphicsRootUnorderedAccessView )( - ID3D12GraphicsCommandList3 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetIndexBuffer) - void ( STDMETHODCALLTYPE *IASetIndexBuffer )( - ID3D12GraphicsCommandList3 * This, - _In_opt_ const D3D12_INDEX_BUFFER_VIEW *pView); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetVertexBuffers) - void ( STDMETHODCALLTYPE *IASetVertexBuffers )( - ID3D12GraphicsCommandList3 * This, - _In_ UINT StartSlot, - _In_ UINT NumViews, - _In_reads_opt_(NumViews) const D3D12_VERTEX_BUFFER_VIEW *pViews); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SOSetTargets) - void ( STDMETHODCALLTYPE *SOSetTargets )( - ID3D12GraphicsCommandList3 * This, - _In_ UINT StartSlot, - _In_ UINT NumViews, - _In_reads_opt_(NumViews) const D3D12_STREAM_OUTPUT_BUFFER_VIEW *pViews); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetRenderTargets) - void ( STDMETHODCALLTYPE *OMSetRenderTargets )( - ID3D12GraphicsCommandList3 * This, - _In_ UINT NumRenderTargetDescriptors, - _In_opt_ const D3D12_CPU_DESCRIPTOR_HANDLE *pRenderTargetDescriptors, - _In_ BOOL RTsSingleHandleToDescriptorRange, - _In_opt_ const D3D12_CPU_DESCRIPTOR_HANDLE *pDepthStencilDescriptor); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearDepthStencilView) - void ( STDMETHODCALLTYPE *ClearDepthStencilView )( - ID3D12GraphicsCommandList3 * This, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DepthStencilView, - _In_ D3D12_CLEAR_FLAGS ClearFlags, - _In_ FLOAT Depth, - _In_ UINT8 Stencil, - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearRenderTargetView) - void ( STDMETHODCALLTYPE *ClearRenderTargetView )( - ID3D12GraphicsCommandList3 * This, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE RenderTargetView, - _In_ const FLOAT ColorRGBA[ 4 ], - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewUint) - void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewUint )( - ID3D12GraphicsCommandList3 * This, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle, - _In_ ID3D12Resource *pResource, - _In_ const UINT Values[ 4 ], - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewFloat) - void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewFloat )( - ID3D12GraphicsCommandList3 * This, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle, - _In_ ID3D12Resource *pResource, - _In_ const FLOAT Values[ 4 ], - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DiscardResource) - void ( STDMETHODCALLTYPE *DiscardResource )( - ID3D12GraphicsCommandList3 * This, - _In_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DISCARD_REGION *pRegion); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginQuery) - void ( STDMETHODCALLTYPE *BeginQuery )( - ID3D12GraphicsCommandList3 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndQuery) - void ( STDMETHODCALLTYPE *EndQuery )( - ID3D12GraphicsCommandList3 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveQueryData) - void ( STDMETHODCALLTYPE *ResolveQueryData )( - ID3D12GraphicsCommandList3 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT StartIndex, - _In_ UINT NumQueries, - _In_ ID3D12Resource *pDestinationBuffer, - _In_ UINT64 AlignedDestinationBufferOffset); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPredication) - void ( STDMETHODCALLTYPE *SetPredication )( - ID3D12GraphicsCommandList3 * This, - _In_opt_ ID3D12Resource *pBuffer, - _In_ UINT64 AlignedBufferOffset, - _In_ D3D12_PREDICATION_OP Operation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetMarker) - void ( STDMETHODCALLTYPE *SetMarker )( - ID3D12GraphicsCommandList3 * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginEvent) - void ( STDMETHODCALLTYPE *BeginEvent )( - ID3D12GraphicsCommandList3 * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndEvent) - void ( STDMETHODCALLTYPE *EndEvent )( - ID3D12GraphicsCommandList3 * This); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteIndirect) - void ( STDMETHODCALLTYPE *ExecuteIndirect )( - ID3D12GraphicsCommandList3 * This, - _In_ ID3D12CommandSignature *pCommandSignature, - _In_ UINT MaxCommandCount, - _In_ ID3D12Resource *pArgumentBuffer, - _In_ UINT64 ArgumentBufferOffset, - _In_opt_ ID3D12Resource *pCountBuffer, - _In_ UINT64 CountBufferOffset); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, AtomicCopyBufferUINT) - void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT )( - ID3D12GraphicsCommandList3 * This, - _In_ ID3D12Resource *pDstBuffer, - UINT64 DstOffset, - _In_ ID3D12Resource *pSrcBuffer, - UINT64 SrcOffset, - UINT Dependencies, - _In_reads_(Dependencies) ID3D12Resource *const *ppDependentResources, - _In_reads_(Dependencies) const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, AtomicCopyBufferUINT64) - void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT64 )( - ID3D12GraphicsCommandList3 * This, - _In_ ID3D12Resource *pDstBuffer, - UINT64 DstOffset, - _In_ ID3D12Resource *pSrcBuffer, - UINT64 SrcOffset, - UINT Dependencies, - _In_reads_(Dependencies) ID3D12Resource *const *ppDependentResources, - _In_reads_(Dependencies) const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, OMSetDepthBounds) - void ( STDMETHODCALLTYPE *OMSetDepthBounds )( - ID3D12GraphicsCommandList3 * This, - _In_ FLOAT Min, - _In_ FLOAT Max); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, SetSamplePositions) - void ( STDMETHODCALLTYPE *SetSamplePositions )( - ID3D12GraphicsCommandList3 * This, - _In_ UINT NumSamplesPerPixel, - _In_ UINT NumPixels, - _In_reads_(NumSamplesPerPixel*NumPixels) D3D12_SAMPLE_POSITION *pSamplePositions); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, ResolveSubresourceRegion) - void ( STDMETHODCALLTYPE *ResolveSubresourceRegion )( - ID3D12GraphicsCommandList3 * This, - _In_ ID3D12Resource *pDstResource, - _In_ UINT DstSubresource, - _In_ UINT DstX, - _In_ UINT DstY, - _In_ ID3D12Resource *pSrcResource, - _In_ UINT SrcSubresource, - _In_opt_ D3D12_RECT *pSrcRect, - _In_ DXGI_FORMAT Format, - _In_ D3D12_RESOLVE_MODE ResolveMode); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, SetViewInstanceMask) - void ( STDMETHODCALLTYPE *SetViewInstanceMask )( - ID3D12GraphicsCommandList3 * This, - _In_ UINT Mask); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList2, WriteBufferImmediate) - void ( STDMETHODCALLTYPE *WriteBufferImmediate )( - ID3D12GraphicsCommandList3 * This, - UINT Count, - _In_reads_(Count) const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams, - _In_reads_opt_(Count) const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList3, SetProtectedResourceSession) - void ( STDMETHODCALLTYPE *SetProtectedResourceSession )( - ID3D12GraphicsCommandList3 * This, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession); - - END_INTERFACE - } ID3D12GraphicsCommandList3Vtbl; - - interface ID3D12GraphicsCommandList3 - { - CONST_VTBL struct ID3D12GraphicsCommandList3Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12GraphicsCommandList3_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12GraphicsCommandList3_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12GraphicsCommandList3_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12GraphicsCommandList3_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12GraphicsCommandList3_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12GraphicsCommandList3_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12GraphicsCommandList3_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12GraphicsCommandList3_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12GraphicsCommandList3_GetType(This) \ - ( (This)->lpVtbl -> GetType(This) ) - -#define ID3D12GraphicsCommandList3_Close(This) \ - ( (This)->lpVtbl -> Close(This) ) - -#define ID3D12GraphicsCommandList3_Reset(This,pAllocator,pInitialState) \ - ( (This)->lpVtbl -> Reset(This,pAllocator,pInitialState) ) - -#define ID3D12GraphicsCommandList3_ClearState(This,pPipelineState) \ - ( (This)->lpVtbl -> ClearState(This,pPipelineState) ) - -#define ID3D12GraphicsCommandList3_DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) \ - ( (This)->lpVtbl -> DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) ) - -#define ID3D12GraphicsCommandList3_DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) \ - ( (This)->lpVtbl -> DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) ) - -#define ID3D12GraphicsCommandList3_Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) \ - ( (This)->lpVtbl -> Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) ) - -#define ID3D12GraphicsCommandList3_CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes) \ - ( (This)->lpVtbl -> CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes) ) - -#define ID3D12GraphicsCommandList3_CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox) \ - ( (This)->lpVtbl -> CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox) ) - -#define ID3D12GraphicsCommandList3_CopyResource(This,pDstResource,pSrcResource) \ - ( (This)->lpVtbl -> CopyResource(This,pDstResource,pSrcResource) ) - -#define ID3D12GraphicsCommandList3_CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags) \ - ( (This)->lpVtbl -> CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags) ) - -#define ID3D12GraphicsCommandList3_ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) \ - ( (This)->lpVtbl -> ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) ) - -#define ID3D12GraphicsCommandList3_IASetPrimitiveTopology(This,PrimitiveTopology) \ - ( (This)->lpVtbl -> IASetPrimitiveTopology(This,PrimitiveTopology) ) - -#define ID3D12GraphicsCommandList3_RSSetViewports(This,NumViewports,pViewports) \ - ( (This)->lpVtbl -> RSSetViewports(This,NumViewports,pViewports) ) - -#define ID3D12GraphicsCommandList3_RSSetScissorRects(This,NumRects,pRects) \ - ( (This)->lpVtbl -> RSSetScissorRects(This,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList3_OMSetBlendFactor(This,BlendFactor) \ - ( (This)->lpVtbl -> OMSetBlendFactor(This,BlendFactor) ) - -#define ID3D12GraphicsCommandList3_OMSetStencilRef(This,StencilRef) \ - ( (This)->lpVtbl -> OMSetStencilRef(This,StencilRef) ) - -#define ID3D12GraphicsCommandList3_SetPipelineState(This,pPipelineState) \ - ( (This)->lpVtbl -> SetPipelineState(This,pPipelineState) ) - -#define ID3D12GraphicsCommandList3_ResourceBarrier(This,NumBarriers,pBarriers) \ - ( (This)->lpVtbl -> ResourceBarrier(This,NumBarriers,pBarriers) ) - -#define ID3D12GraphicsCommandList3_ExecuteBundle(This,pCommandList) \ - ( (This)->lpVtbl -> ExecuteBundle(This,pCommandList) ) - -#define ID3D12GraphicsCommandList3_SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps) \ - ( (This)->lpVtbl -> SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps) ) - -#define ID3D12GraphicsCommandList3_SetComputeRootSignature(This,pRootSignature) \ - ( (This)->lpVtbl -> SetComputeRootSignature(This,pRootSignature) ) - -#define ID3D12GraphicsCommandList3_SetGraphicsRootSignature(This,pRootSignature) \ - ( (This)->lpVtbl -> SetGraphicsRootSignature(This,pRootSignature) ) - -#define ID3D12GraphicsCommandList3_SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) \ - ( (This)->lpVtbl -> SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) - -#define ID3D12GraphicsCommandList3_SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) \ - ( (This)->lpVtbl -> SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) - -#define ID3D12GraphicsCommandList3_SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList3_SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList3_SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList3_SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList3_SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList3_SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList3_SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList3_SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList3_SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList3_SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList3_IASetIndexBuffer(This,pView) \ - ( (This)->lpVtbl -> IASetIndexBuffer(This,pView) ) - -#define ID3D12GraphicsCommandList3_IASetVertexBuffers(This,StartSlot,NumViews,pViews) \ - ( (This)->lpVtbl -> IASetVertexBuffers(This,StartSlot,NumViews,pViews) ) - -#define ID3D12GraphicsCommandList3_SOSetTargets(This,StartSlot,NumViews,pViews) \ - ( (This)->lpVtbl -> SOSetTargets(This,StartSlot,NumViews,pViews) ) - -#define ID3D12GraphicsCommandList3_OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor) \ - ( (This)->lpVtbl -> OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor) ) - -#define ID3D12GraphicsCommandList3_ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList3_ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList3_ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList3_ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList3_DiscardResource(This,pResource,pRegion) \ - ( (This)->lpVtbl -> DiscardResource(This,pResource,pRegion) ) - -#define ID3D12GraphicsCommandList3_BeginQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> BeginQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12GraphicsCommandList3_EndQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> EndQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12GraphicsCommandList3_ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) \ - ( (This)->lpVtbl -> ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) ) - -#define ID3D12GraphicsCommandList3_SetPredication(This,pBuffer,AlignedBufferOffset,Operation) \ - ( (This)->lpVtbl -> SetPredication(This,pBuffer,AlignedBufferOffset,Operation) ) - -#define ID3D12GraphicsCommandList3_SetMarker(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> SetMarker(This,Metadata,pData,Size) ) - -#define ID3D12GraphicsCommandList3_BeginEvent(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> BeginEvent(This,Metadata,pData,Size) ) - -#define ID3D12GraphicsCommandList3_EndEvent(This) \ - ( (This)->lpVtbl -> EndEvent(This) ) - -#define ID3D12GraphicsCommandList3_ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset) \ - ( (This)->lpVtbl -> ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset) ) - -#define ID3D12GraphicsCommandList3_AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) \ - ( (This)->lpVtbl -> AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) - -#define ID3D12GraphicsCommandList3_AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) \ - ( (This)->lpVtbl -> AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) - -#define ID3D12GraphicsCommandList3_OMSetDepthBounds(This,Min,Max) \ - ( (This)->lpVtbl -> OMSetDepthBounds(This,Min,Max) ) - -#define ID3D12GraphicsCommandList3_SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions) \ - ( (This)->lpVtbl -> SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions) ) - -#define ID3D12GraphicsCommandList3_ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode) \ - ( (This)->lpVtbl -> ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode) ) - -#define ID3D12GraphicsCommandList3_SetViewInstanceMask(This,Mask) \ - ( (This)->lpVtbl -> SetViewInstanceMask(This,Mask) ) - -#define ID3D12GraphicsCommandList3_WriteBufferImmediate(This,Count,pParams,pModes) \ - ( (This)->lpVtbl -> WriteBufferImmediate(This,Count,pParams,pModes) ) - -#define ID3D12GraphicsCommandList3_SetProtectedResourceSession(This,pProtectedResourceSession) \ - ( (This)->lpVtbl -> SetProtectedResourceSession(This,pProtectedResourceSession) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12GraphicsCommandList3_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12_0000_0051 */ -/* [local] */ - -typedef -enum D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE - { - D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_DISCARD = 0, - D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_PRESERVE = ( D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_DISCARD + 1 ) , - D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_CLEAR = ( D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_PRESERVE + 1 ) , - D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_NO_ACCESS = ( D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_CLEAR + 1 ) , - D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_PRESERVE_LOCAL_RENDER = ( D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_NO_ACCESS + 1 ) , - D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_PRESERVE_LOCAL_SRV = ( D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_PRESERVE_LOCAL_RENDER + 1 ) , - D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_PRESERVE_LOCAL_UAV = ( D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_PRESERVE_LOCAL_SRV + 1 ) - } D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE; - -typedef struct D3D12_RENDER_PASS_BEGINNING_ACCESS_CLEAR_PARAMETERS - { - D3D12_CLEAR_VALUE ClearValue; - } D3D12_RENDER_PASS_BEGINNING_ACCESS_CLEAR_PARAMETERS; - -typedef struct D3D12_RENDER_PASS_BEGINNING_ACCESS_PRESERVE_LOCAL_PARAMETERS - { - UINT AdditionalWidth; - UINT AdditionalHeight; - } D3D12_RENDER_PASS_BEGINNING_ACCESS_PRESERVE_LOCAL_PARAMETERS; - -typedef struct D3D12_RENDER_PASS_BEGINNING_ACCESS - { - D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE Type; - union - { - D3D12_RENDER_PASS_BEGINNING_ACCESS_CLEAR_PARAMETERS Clear; - D3D12_RENDER_PASS_BEGINNING_ACCESS_PRESERVE_LOCAL_PARAMETERS PreserveLocal; - } ; - } D3D12_RENDER_PASS_BEGINNING_ACCESS; - -typedef -enum D3D12_RENDER_PASS_ENDING_ACCESS_TYPE - { - D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_DISCARD = 0, - D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_PRESERVE = ( D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_DISCARD + 1 ) , - D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_RESOLVE = ( D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_PRESERVE + 1 ) , - D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_NO_ACCESS = ( D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_RESOLVE + 1 ) , - D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_PRESERVE_LOCAL_RENDER = ( D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_NO_ACCESS + 1 ) , - D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_PRESERVE_LOCAL_SRV = ( D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_PRESERVE_LOCAL_RENDER + 1 ) , - D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_PRESERVE_LOCAL_UAV = ( D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_PRESERVE_LOCAL_SRV + 1 ) - } D3D12_RENDER_PASS_ENDING_ACCESS_TYPE; - -typedef struct D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_SUBRESOURCE_PARAMETERS - { - UINT SrcSubresource; - UINT DstSubresource; - UINT DstX; - UINT DstY; - D3D12_RECT SrcRect; - } D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_SUBRESOURCE_PARAMETERS; - -typedef struct D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_PARAMETERS - { - ID3D12Resource *pSrcResource; - ID3D12Resource *pDstResource; - UINT SubresourceCount; - _Field_size_full_(SubresourceCount) const D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_SUBRESOURCE_PARAMETERS *pSubresourceParameters; - DXGI_FORMAT Format; - D3D12_RESOLVE_MODE ResolveMode; - BOOL PreserveResolveSource; - } D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_PARAMETERS; - -typedef struct D3D12_RENDER_PASS_ENDING_ACCESS_PRESERVE_LOCAL_PARAMETERS - { - UINT AdditionalWidth; - UINT AdditionalHeight; - } D3D12_RENDER_PASS_ENDING_ACCESS_PRESERVE_LOCAL_PARAMETERS; - -typedef struct D3D12_RENDER_PASS_ENDING_ACCESS - { - D3D12_RENDER_PASS_ENDING_ACCESS_TYPE Type; - union - { - D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_PARAMETERS Resolve; - D3D12_RENDER_PASS_ENDING_ACCESS_PRESERVE_LOCAL_PARAMETERS PreserveLocal; - } ; - } D3D12_RENDER_PASS_ENDING_ACCESS; - -typedef struct D3D12_RENDER_PASS_RENDER_TARGET_DESC - { - D3D12_CPU_DESCRIPTOR_HANDLE cpuDescriptor; - D3D12_RENDER_PASS_BEGINNING_ACCESS BeginningAccess; - D3D12_RENDER_PASS_ENDING_ACCESS EndingAccess; - } D3D12_RENDER_PASS_RENDER_TARGET_DESC; - -typedef struct D3D12_RENDER_PASS_DEPTH_STENCIL_DESC - { - D3D12_CPU_DESCRIPTOR_HANDLE cpuDescriptor; - D3D12_RENDER_PASS_BEGINNING_ACCESS DepthBeginningAccess; - D3D12_RENDER_PASS_BEGINNING_ACCESS StencilBeginningAccess; - D3D12_RENDER_PASS_ENDING_ACCESS DepthEndingAccess; - D3D12_RENDER_PASS_ENDING_ACCESS StencilEndingAccess; - } D3D12_RENDER_PASS_DEPTH_STENCIL_DESC; - -typedef -enum D3D12_RENDER_PASS_FLAGS - { - D3D12_RENDER_PASS_FLAG_NONE = 0, - D3D12_RENDER_PASS_FLAG_ALLOW_UAV_WRITES = 0x1, - D3D12_RENDER_PASS_FLAG_SUSPENDING_PASS = 0x2, - D3D12_RENDER_PASS_FLAG_RESUMING_PASS = 0x4, - D3D12_RENDER_PASS_FLAG_BIND_READ_ONLY_DEPTH = 0x8, - D3D12_RENDER_PASS_FLAG_BIND_READ_ONLY_STENCIL = 0x10 - } D3D12_RENDER_PASS_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_RENDER_PASS_FLAGS ) - -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0051_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0051_v0_0_s_ifspec; - -#ifndef __ID3D12MetaCommand_INTERFACE_DEFINED__ -#define __ID3D12MetaCommand_INTERFACE_DEFINED__ - -/* interface ID3D12MetaCommand */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12MetaCommand; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("DBB84C27-36CE-4FC9-B801-F048C46AC570") - ID3D12MetaCommand : public ID3D12Pageable - { - public: - virtual UINT64 STDMETHODCALLTYPE GetRequiredParameterResourceSize( - _In_ D3D12_META_COMMAND_PARAMETER_STAGE Stage, - _In_ UINT ParameterIndex) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12MetaCommandVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12MetaCommand * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12MetaCommand * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12MetaCommand * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12MetaCommand * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12MetaCommand * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12MetaCommand * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12MetaCommand * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12MetaCommand * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12MetaCommand, GetRequiredParameterResourceSize) - UINT64 ( STDMETHODCALLTYPE *GetRequiredParameterResourceSize )( - ID3D12MetaCommand * This, - _In_ D3D12_META_COMMAND_PARAMETER_STAGE Stage, - _In_ UINT ParameterIndex); - - END_INTERFACE - } ID3D12MetaCommandVtbl; - - interface ID3D12MetaCommand - { - CONST_VTBL struct ID3D12MetaCommandVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12MetaCommand_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12MetaCommand_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12MetaCommand_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12MetaCommand_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12MetaCommand_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12MetaCommand_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12MetaCommand_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12MetaCommand_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12MetaCommand_GetRequiredParameterResourceSize(This,Stage,ParameterIndex) \ - ( (This)->lpVtbl -> GetRequiredParameterResourceSize(This,Stage,ParameterIndex) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12MetaCommand_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12_0000_0052 */ -/* [local] */ - -typedef struct D3D12_DISPATCH_RAYS_DESC - { - D3D12_GPU_VIRTUAL_ADDRESS_RANGE RayGenerationShaderRecord; - D3D12_GPU_VIRTUAL_ADDRESS_RANGE_AND_STRIDE MissShaderTable; - D3D12_GPU_VIRTUAL_ADDRESS_RANGE_AND_STRIDE HitGroupTable; - D3D12_GPU_VIRTUAL_ADDRESS_RANGE_AND_STRIDE CallableShaderTable; - UINT Width; - UINT Height; - UINT Depth; - } D3D12_DISPATCH_RAYS_DESC; - -typedef -enum D3D12_SET_WORK_GRAPH_FLAGS - { - D3D12_SET_WORK_GRAPH_FLAG_NONE = 0, - D3D12_SET_WORK_GRAPH_FLAG_INITIALIZE = 0x1 - } D3D12_SET_WORK_GRAPH_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_SET_WORK_GRAPH_FLAGS ) -typedef struct D3D12_SET_WORK_GRAPH_DESC - { - D3D12_PROGRAM_IDENTIFIER ProgramIdentifier; - D3D12_SET_WORK_GRAPH_FLAGS Flags; - D3D12_GPU_VIRTUAL_ADDRESS_RANGE BackingMemory; - D3D12_GPU_VIRTUAL_ADDRESS_RANGE_AND_STRIDE NodeLocalRootArgumentsTable; - } D3D12_SET_WORK_GRAPH_DESC; - -typedef struct D3D12_SET_RAYTRACING_PIPELINE_DESC - { - D3D12_PROGRAM_IDENTIFIER ProgramIdentifier; - } D3D12_SET_RAYTRACING_PIPELINE_DESC; - -typedef struct D3D12_SET_GENERIC_PIPELINE_DESC - { - D3D12_PROGRAM_IDENTIFIER ProgramIdentifier; - } D3D12_SET_GENERIC_PIPELINE_DESC; - -typedef -enum D3D12_PROGRAM_TYPE - { - D3D12_PROGRAM_TYPE_GENERIC_PIPELINE = 1, - D3D12_PROGRAM_TYPE_RAYTRACING_PIPELINE = 4, - D3D12_PROGRAM_TYPE_WORK_GRAPH = 5 - } D3D12_PROGRAM_TYPE; - -typedef struct D3D12_SET_PROGRAM_DESC - { - D3D12_PROGRAM_TYPE Type; - union - { - D3D12_SET_GENERIC_PIPELINE_DESC GenericPipeline; - D3D12_SET_RAYTRACING_PIPELINE_DESC RaytracingPipeline; - D3D12_SET_WORK_GRAPH_DESC WorkGraph; - } ; - } D3D12_SET_PROGRAM_DESC; - -typedef -enum D3D12_DISPATCH_MODE - { - D3D12_DISPATCH_MODE_NODE_CPU_INPUT = 0, - D3D12_DISPATCH_MODE_NODE_GPU_INPUT = 1, - D3D12_DISPATCH_MODE_MULTI_NODE_CPU_INPUT = 2, - D3D12_DISPATCH_MODE_MULTI_NODE_GPU_INPUT = 3 - } D3D12_DISPATCH_MODE; - -typedef struct D3D12_NODE_CPU_INPUT - { - UINT EntrypointIndex; - UINT NumRecords; - const void *pRecords; - UINT64 RecordStrideInBytes; - } D3D12_NODE_CPU_INPUT; - -typedef struct D3D12_NODE_GPU_INPUT - { - UINT EntrypointIndex; - UINT NumRecords; - D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE Records; - } D3D12_NODE_GPU_INPUT; - -typedef struct D3D12_MULTI_NODE_CPU_INPUT - { - UINT NumNodeInputs; - const D3D12_NODE_CPU_INPUT *pNodeInputs; - UINT64 NodeInputStrideInBytes; - } D3D12_MULTI_NODE_CPU_INPUT; - -typedef struct D3D12_MULTI_NODE_GPU_INPUT - { - UINT NumNodeInputs; - D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE NodeInputs; - } D3D12_MULTI_NODE_GPU_INPUT; - -typedef struct D3D12_DISPATCH_GRAPH_DESC - { - D3D12_DISPATCH_MODE Mode; - union - { - D3D12_NODE_CPU_INPUT NodeCPUInput; - D3D12_GPU_VIRTUAL_ADDRESS NodeGPUInput; - D3D12_MULTI_NODE_CPU_INPUT MultiNodeCPUInput; - D3D12_GPU_VIRTUAL_ADDRESS MultiNodeGPUInput; - } ; - } D3D12_DISPATCH_GRAPH_DESC; - -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0052_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0052_v0_0_s_ifspec; - -#ifndef __ID3D12GraphicsCommandList4_INTERFACE_DEFINED__ -#define __ID3D12GraphicsCommandList4_INTERFACE_DEFINED__ - -/* interface ID3D12GraphicsCommandList4 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12GraphicsCommandList4; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("8754318e-d3a9-4541-98cf-645b50dc4874") - ID3D12GraphicsCommandList4 : public ID3D12GraphicsCommandList3 - { - public: - virtual void STDMETHODCALLTYPE BeginRenderPass( - _In_ UINT NumRenderTargets, - _In_reads_opt_(NumRenderTargets) const D3D12_RENDER_PASS_RENDER_TARGET_DESC *pRenderTargets, - _In_opt_ const D3D12_RENDER_PASS_DEPTH_STENCIL_DESC *pDepthStencil, - D3D12_RENDER_PASS_FLAGS Flags) = 0; - - virtual void STDMETHODCALLTYPE EndRenderPass( void) = 0; - - virtual void STDMETHODCALLTYPE InitializeMetaCommand( - _In_ ID3D12MetaCommand *pMetaCommand, - _In_reads_bytes_opt_(InitializationParametersDataSizeInBytes) const void *pInitializationParametersData, - _In_ SIZE_T InitializationParametersDataSizeInBytes) = 0; - - virtual void STDMETHODCALLTYPE ExecuteMetaCommand( - _In_ ID3D12MetaCommand *pMetaCommand, - _In_reads_bytes_opt_(ExecutionParametersDataSizeInBytes) const void *pExecutionParametersData, - _In_ SIZE_T ExecutionParametersDataSizeInBytes) = 0; - - virtual void STDMETHODCALLTYPE BuildRaytracingAccelerationStructure( - _In_ const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC *pDesc, - _In_ UINT NumPostbuildInfoDescs, - _In_reads_opt_(NumPostbuildInfoDescs) const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC *pPostbuildInfoDescs) = 0; - - virtual void STDMETHODCALLTYPE EmitRaytracingAccelerationStructurePostbuildInfo( - _In_ const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC *pDesc, - _In_ UINT NumSourceAccelerationStructures, - _In_reads_( NumSourceAccelerationStructures ) const D3D12_GPU_VIRTUAL_ADDRESS *pSourceAccelerationStructureData) = 0; - - virtual void STDMETHODCALLTYPE CopyRaytracingAccelerationStructure( - _In_ D3D12_GPU_VIRTUAL_ADDRESS DestAccelerationStructureData, - _In_ D3D12_GPU_VIRTUAL_ADDRESS SourceAccelerationStructureData, - _In_ D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE Mode) = 0; - - virtual void STDMETHODCALLTYPE SetPipelineState1( - _In_ ID3D12StateObject *pStateObject) = 0; - - virtual void STDMETHODCALLTYPE DispatchRays( - _In_ const D3D12_DISPATCH_RAYS_DESC *pDesc) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12GraphicsCommandList4Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12GraphicsCommandList4 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12GraphicsCommandList4 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12GraphicsCommandList4 * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12GraphicsCommandList4 * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12GraphicsCommandList4 * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12GraphicsCommandList4 * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12GraphicsCommandList4 * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12GraphicsCommandList4 * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12CommandList, GetType) - D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )( - ID3D12GraphicsCommandList4 * This); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Close) - HRESULT ( STDMETHODCALLTYPE *Close )( - ID3D12GraphicsCommandList4 * This); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Reset) - HRESULT ( STDMETHODCALLTYPE *Reset )( - ID3D12GraphicsCommandList4 * This, - _In_ ID3D12CommandAllocator *pAllocator, - _In_opt_ ID3D12PipelineState *pInitialState); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearState) - void ( STDMETHODCALLTYPE *ClearState )( - ID3D12GraphicsCommandList4 * This, - _In_opt_ ID3D12PipelineState *pPipelineState); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawInstanced) - void ( STDMETHODCALLTYPE *DrawInstanced )( - ID3D12GraphicsCommandList4 * This, - _In_ UINT VertexCountPerInstance, - _In_ UINT InstanceCount, - _In_ UINT StartVertexLocation, - _In_ UINT StartInstanceLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawIndexedInstanced) - void ( STDMETHODCALLTYPE *DrawIndexedInstanced )( - ID3D12GraphicsCommandList4 * This, - _In_ UINT IndexCountPerInstance, - _In_ UINT InstanceCount, - _In_ UINT StartIndexLocation, - _In_ INT BaseVertexLocation, - _In_ UINT StartInstanceLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Dispatch) - void ( STDMETHODCALLTYPE *Dispatch )( - ID3D12GraphicsCommandList4 * This, - _In_ UINT ThreadGroupCountX, - _In_ UINT ThreadGroupCountY, - _In_ UINT ThreadGroupCountZ); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyBufferRegion) - void ( STDMETHODCALLTYPE *CopyBufferRegion )( - ID3D12GraphicsCommandList4 * This, - _In_ ID3D12Resource *pDstBuffer, - UINT64 DstOffset, - _In_ ID3D12Resource *pSrcBuffer, - UINT64 SrcOffset, - UINT64 NumBytes); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTextureRegion) - void ( STDMETHODCALLTYPE *CopyTextureRegion )( - ID3D12GraphicsCommandList4 * This, - _In_ const D3D12_TEXTURE_COPY_LOCATION *pDst, - UINT DstX, - UINT DstY, - UINT DstZ, - _In_ const D3D12_TEXTURE_COPY_LOCATION *pSrc, - _In_opt_ const D3D12_BOX *pSrcBox); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyResource) - void ( STDMETHODCALLTYPE *CopyResource )( - ID3D12GraphicsCommandList4 * This, - _In_ ID3D12Resource *pDstResource, - _In_ ID3D12Resource *pSrcResource); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTiles) - void ( STDMETHODCALLTYPE *CopyTiles )( - ID3D12GraphicsCommandList4 * This, - _In_ ID3D12Resource *pTiledResource, - _In_ const D3D12_TILED_RESOURCE_COORDINATE *pTileRegionStartCoordinate, - _In_ const D3D12_TILE_REGION_SIZE *pTileRegionSize, - _In_ ID3D12Resource *pBuffer, - UINT64 BufferStartOffsetInBytes, - D3D12_TILE_COPY_FLAGS Flags); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveSubresource) - void ( STDMETHODCALLTYPE *ResolveSubresource )( - ID3D12GraphicsCommandList4 * This, - _In_ ID3D12Resource *pDstResource, - _In_ UINT DstSubresource, - _In_ ID3D12Resource *pSrcResource, - _In_ UINT SrcSubresource, - _In_ DXGI_FORMAT Format); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetPrimitiveTopology) - void ( STDMETHODCALLTYPE *IASetPrimitiveTopology )( - ID3D12GraphicsCommandList4 * This, - _In_ D3D12_PRIMITIVE_TOPOLOGY PrimitiveTopology); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetViewports) - void ( STDMETHODCALLTYPE *RSSetViewports )( - ID3D12GraphicsCommandList4 * This, - _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE) UINT NumViewports, - _In_reads_( NumViewports) const D3D12_VIEWPORT *pViewports); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetScissorRects) - void ( STDMETHODCALLTYPE *RSSetScissorRects )( - ID3D12GraphicsCommandList4 * This, - _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE) UINT NumRects, - _In_reads_( NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetBlendFactor) - void ( STDMETHODCALLTYPE *OMSetBlendFactor )( - ID3D12GraphicsCommandList4 * This, - _In_reads_opt_(4) const FLOAT BlendFactor[ 4 ]); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetStencilRef) - void ( STDMETHODCALLTYPE *OMSetStencilRef )( - ID3D12GraphicsCommandList4 * This, - _In_ UINT StencilRef); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPipelineState) - void ( STDMETHODCALLTYPE *SetPipelineState )( - ID3D12GraphicsCommandList4 * This, - _In_ ID3D12PipelineState *pPipelineState); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResourceBarrier) - void ( STDMETHODCALLTYPE *ResourceBarrier )( - ID3D12GraphicsCommandList4 * This, - _In_ UINT NumBarriers, - _In_reads_(NumBarriers) const D3D12_RESOURCE_BARRIER *pBarriers); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteBundle) - void ( STDMETHODCALLTYPE *ExecuteBundle )( - ID3D12GraphicsCommandList4 * This, - _In_ ID3D12GraphicsCommandList *pCommandList); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetDescriptorHeaps) - void ( STDMETHODCALLTYPE *SetDescriptorHeaps )( - ID3D12GraphicsCommandList4 * This, - _In_ UINT NumDescriptorHeaps, - _In_reads_(NumDescriptorHeaps) ID3D12DescriptorHeap *const *ppDescriptorHeaps); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootSignature) - void ( STDMETHODCALLTYPE *SetComputeRootSignature )( - ID3D12GraphicsCommandList4 * This, - _In_opt_ ID3D12RootSignature *pRootSignature); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootSignature) - void ( STDMETHODCALLTYPE *SetGraphicsRootSignature )( - ID3D12GraphicsCommandList4 * This, - _In_opt_ ID3D12RootSignature *pRootSignature); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootDescriptorTable) - void ( STDMETHODCALLTYPE *SetComputeRootDescriptorTable )( - ID3D12GraphicsCommandList4 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootDescriptorTable) - void ( STDMETHODCALLTYPE *SetGraphicsRootDescriptorTable )( - ID3D12GraphicsCommandList4 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstant) - void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstant )( - ID3D12GraphicsCommandList4 * This, - _In_ UINT RootParameterIndex, - _In_ UINT SrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstant) - void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstant )( - ID3D12GraphicsCommandList4 * This, - _In_ UINT RootParameterIndex, - _In_ UINT SrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstants) - void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstants )( - ID3D12GraphicsCommandList4 * This, - _In_ UINT RootParameterIndex, - _In_ UINT Num32BitValuesToSet, - _In_reads_(Num32BitValuesToSet*sizeof(UINT)) const void *pSrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstants) - void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstants )( - ID3D12GraphicsCommandList4 * This, - _In_ UINT RootParameterIndex, - _In_ UINT Num32BitValuesToSet, - _In_reads_(Num32BitValuesToSet*sizeof(UINT)) const void *pSrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootConstantBufferView) - void ( STDMETHODCALLTYPE *SetComputeRootConstantBufferView )( - ID3D12GraphicsCommandList4 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootConstantBufferView) - void ( STDMETHODCALLTYPE *SetGraphicsRootConstantBufferView )( - ID3D12GraphicsCommandList4 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootShaderResourceView) - void ( STDMETHODCALLTYPE *SetComputeRootShaderResourceView )( - ID3D12GraphicsCommandList4 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootShaderResourceView) - void ( STDMETHODCALLTYPE *SetGraphicsRootShaderResourceView )( - ID3D12GraphicsCommandList4 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootUnorderedAccessView) - void ( STDMETHODCALLTYPE *SetComputeRootUnorderedAccessView )( - ID3D12GraphicsCommandList4 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootUnorderedAccessView) - void ( STDMETHODCALLTYPE *SetGraphicsRootUnorderedAccessView )( - ID3D12GraphicsCommandList4 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetIndexBuffer) - void ( STDMETHODCALLTYPE *IASetIndexBuffer )( - ID3D12GraphicsCommandList4 * This, - _In_opt_ const D3D12_INDEX_BUFFER_VIEW *pView); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetVertexBuffers) - void ( STDMETHODCALLTYPE *IASetVertexBuffers )( - ID3D12GraphicsCommandList4 * This, - _In_ UINT StartSlot, - _In_ UINT NumViews, - _In_reads_opt_(NumViews) const D3D12_VERTEX_BUFFER_VIEW *pViews); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SOSetTargets) - void ( STDMETHODCALLTYPE *SOSetTargets )( - ID3D12GraphicsCommandList4 * This, - _In_ UINT StartSlot, - _In_ UINT NumViews, - _In_reads_opt_(NumViews) const D3D12_STREAM_OUTPUT_BUFFER_VIEW *pViews); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetRenderTargets) - void ( STDMETHODCALLTYPE *OMSetRenderTargets )( - ID3D12GraphicsCommandList4 * This, - _In_ UINT NumRenderTargetDescriptors, - _In_opt_ const D3D12_CPU_DESCRIPTOR_HANDLE *pRenderTargetDescriptors, - _In_ BOOL RTsSingleHandleToDescriptorRange, - _In_opt_ const D3D12_CPU_DESCRIPTOR_HANDLE *pDepthStencilDescriptor); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearDepthStencilView) - void ( STDMETHODCALLTYPE *ClearDepthStencilView )( - ID3D12GraphicsCommandList4 * This, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DepthStencilView, - _In_ D3D12_CLEAR_FLAGS ClearFlags, - _In_ FLOAT Depth, - _In_ UINT8 Stencil, - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearRenderTargetView) - void ( STDMETHODCALLTYPE *ClearRenderTargetView )( - ID3D12GraphicsCommandList4 * This, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE RenderTargetView, - _In_ const FLOAT ColorRGBA[ 4 ], - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewUint) - void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewUint )( - ID3D12GraphicsCommandList4 * This, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle, - _In_ ID3D12Resource *pResource, - _In_ const UINT Values[ 4 ], - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewFloat) - void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewFloat )( - ID3D12GraphicsCommandList4 * This, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle, - _In_ ID3D12Resource *pResource, - _In_ const FLOAT Values[ 4 ], - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DiscardResource) - void ( STDMETHODCALLTYPE *DiscardResource )( - ID3D12GraphicsCommandList4 * This, - _In_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DISCARD_REGION *pRegion); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginQuery) - void ( STDMETHODCALLTYPE *BeginQuery )( - ID3D12GraphicsCommandList4 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndQuery) - void ( STDMETHODCALLTYPE *EndQuery )( - ID3D12GraphicsCommandList4 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveQueryData) - void ( STDMETHODCALLTYPE *ResolveQueryData )( - ID3D12GraphicsCommandList4 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT StartIndex, - _In_ UINT NumQueries, - _In_ ID3D12Resource *pDestinationBuffer, - _In_ UINT64 AlignedDestinationBufferOffset); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPredication) - void ( STDMETHODCALLTYPE *SetPredication )( - ID3D12GraphicsCommandList4 * This, - _In_opt_ ID3D12Resource *pBuffer, - _In_ UINT64 AlignedBufferOffset, - _In_ D3D12_PREDICATION_OP Operation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetMarker) - void ( STDMETHODCALLTYPE *SetMarker )( - ID3D12GraphicsCommandList4 * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginEvent) - void ( STDMETHODCALLTYPE *BeginEvent )( - ID3D12GraphicsCommandList4 * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndEvent) - void ( STDMETHODCALLTYPE *EndEvent )( - ID3D12GraphicsCommandList4 * This); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteIndirect) - void ( STDMETHODCALLTYPE *ExecuteIndirect )( - ID3D12GraphicsCommandList4 * This, - _In_ ID3D12CommandSignature *pCommandSignature, - _In_ UINT MaxCommandCount, - _In_ ID3D12Resource *pArgumentBuffer, - _In_ UINT64 ArgumentBufferOffset, - _In_opt_ ID3D12Resource *pCountBuffer, - _In_ UINT64 CountBufferOffset); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, AtomicCopyBufferUINT) - void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT )( - ID3D12GraphicsCommandList4 * This, - _In_ ID3D12Resource *pDstBuffer, - UINT64 DstOffset, - _In_ ID3D12Resource *pSrcBuffer, - UINT64 SrcOffset, - UINT Dependencies, - _In_reads_(Dependencies) ID3D12Resource *const *ppDependentResources, - _In_reads_(Dependencies) const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, AtomicCopyBufferUINT64) - void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT64 )( - ID3D12GraphicsCommandList4 * This, - _In_ ID3D12Resource *pDstBuffer, - UINT64 DstOffset, - _In_ ID3D12Resource *pSrcBuffer, - UINT64 SrcOffset, - UINT Dependencies, - _In_reads_(Dependencies) ID3D12Resource *const *ppDependentResources, - _In_reads_(Dependencies) const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, OMSetDepthBounds) - void ( STDMETHODCALLTYPE *OMSetDepthBounds )( - ID3D12GraphicsCommandList4 * This, - _In_ FLOAT Min, - _In_ FLOAT Max); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, SetSamplePositions) - void ( STDMETHODCALLTYPE *SetSamplePositions )( - ID3D12GraphicsCommandList4 * This, - _In_ UINT NumSamplesPerPixel, - _In_ UINT NumPixels, - _In_reads_(NumSamplesPerPixel*NumPixels) D3D12_SAMPLE_POSITION *pSamplePositions); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, ResolveSubresourceRegion) - void ( STDMETHODCALLTYPE *ResolveSubresourceRegion )( - ID3D12GraphicsCommandList4 * This, - _In_ ID3D12Resource *pDstResource, - _In_ UINT DstSubresource, - _In_ UINT DstX, - _In_ UINT DstY, - _In_ ID3D12Resource *pSrcResource, - _In_ UINT SrcSubresource, - _In_opt_ D3D12_RECT *pSrcRect, - _In_ DXGI_FORMAT Format, - _In_ D3D12_RESOLVE_MODE ResolveMode); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, SetViewInstanceMask) - void ( STDMETHODCALLTYPE *SetViewInstanceMask )( - ID3D12GraphicsCommandList4 * This, - _In_ UINT Mask); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList2, WriteBufferImmediate) - void ( STDMETHODCALLTYPE *WriteBufferImmediate )( - ID3D12GraphicsCommandList4 * This, - UINT Count, - _In_reads_(Count) const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams, - _In_reads_opt_(Count) const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList3, SetProtectedResourceSession) - void ( STDMETHODCALLTYPE *SetProtectedResourceSession )( - ID3D12GraphicsCommandList4 * This, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, BeginRenderPass) - void ( STDMETHODCALLTYPE *BeginRenderPass )( - ID3D12GraphicsCommandList4 * This, - _In_ UINT NumRenderTargets, - _In_reads_opt_(NumRenderTargets) const D3D12_RENDER_PASS_RENDER_TARGET_DESC *pRenderTargets, - _In_opt_ const D3D12_RENDER_PASS_DEPTH_STENCIL_DESC *pDepthStencil, - D3D12_RENDER_PASS_FLAGS Flags); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, EndRenderPass) - void ( STDMETHODCALLTYPE *EndRenderPass )( - ID3D12GraphicsCommandList4 * This); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, InitializeMetaCommand) - void ( STDMETHODCALLTYPE *InitializeMetaCommand )( - ID3D12GraphicsCommandList4 * This, - _In_ ID3D12MetaCommand *pMetaCommand, - _In_reads_bytes_opt_(InitializationParametersDataSizeInBytes) const void *pInitializationParametersData, - _In_ SIZE_T InitializationParametersDataSizeInBytes); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, ExecuteMetaCommand) - void ( STDMETHODCALLTYPE *ExecuteMetaCommand )( - ID3D12GraphicsCommandList4 * This, - _In_ ID3D12MetaCommand *pMetaCommand, - _In_reads_bytes_opt_(ExecutionParametersDataSizeInBytes) const void *pExecutionParametersData, - _In_ SIZE_T ExecutionParametersDataSizeInBytes); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, BuildRaytracingAccelerationStructure) - void ( STDMETHODCALLTYPE *BuildRaytracingAccelerationStructure )( - ID3D12GraphicsCommandList4 * This, - _In_ const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC *pDesc, - _In_ UINT NumPostbuildInfoDescs, - _In_reads_opt_(NumPostbuildInfoDescs) const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC *pPostbuildInfoDescs); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, EmitRaytracingAccelerationStructurePostbuildInfo) - void ( STDMETHODCALLTYPE *EmitRaytracingAccelerationStructurePostbuildInfo )( - ID3D12GraphicsCommandList4 * This, - _In_ const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC *pDesc, - _In_ UINT NumSourceAccelerationStructures, - _In_reads_( NumSourceAccelerationStructures ) const D3D12_GPU_VIRTUAL_ADDRESS *pSourceAccelerationStructureData); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, CopyRaytracingAccelerationStructure) - void ( STDMETHODCALLTYPE *CopyRaytracingAccelerationStructure )( - ID3D12GraphicsCommandList4 * This, - _In_ D3D12_GPU_VIRTUAL_ADDRESS DestAccelerationStructureData, - _In_ D3D12_GPU_VIRTUAL_ADDRESS SourceAccelerationStructureData, - _In_ D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE Mode); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, SetPipelineState1) - void ( STDMETHODCALLTYPE *SetPipelineState1 )( - ID3D12GraphicsCommandList4 * This, - _In_ ID3D12StateObject *pStateObject); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, DispatchRays) - void ( STDMETHODCALLTYPE *DispatchRays )( - ID3D12GraphicsCommandList4 * This, - _In_ const D3D12_DISPATCH_RAYS_DESC *pDesc); - - END_INTERFACE - } ID3D12GraphicsCommandList4Vtbl; - - interface ID3D12GraphicsCommandList4 - { - CONST_VTBL struct ID3D12GraphicsCommandList4Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12GraphicsCommandList4_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12GraphicsCommandList4_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12GraphicsCommandList4_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12GraphicsCommandList4_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12GraphicsCommandList4_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12GraphicsCommandList4_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12GraphicsCommandList4_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12GraphicsCommandList4_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12GraphicsCommandList4_GetType(This) \ - ( (This)->lpVtbl -> GetType(This) ) - -#define ID3D12GraphicsCommandList4_Close(This) \ - ( (This)->lpVtbl -> Close(This) ) - -#define ID3D12GraphicsCommandList4_Reset(This,pAllocator,pInitialState) \ - ( (This)->lpVtbl -> Reset(This,pAllocator,pInitialState) ) - -#define ID3D12GraphicsCommandList4_ClearState(This,pPipelineState) \ - ( (This)->lpVtbl -> ClearState(This,pPipelineState) ) - -#define ID3D12GraphicsCommandList4_DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) \ - ( (This)->lpVtbl -> DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) ) - -#define ID3D12GraphicsCommandList4_DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) \ - ( (This)->lpVtbl -> DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) ) - -#define ID3D12GraphicsCommandList4_Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) \ - ( (This)->lpVtbl -> Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) ) - -#define ID3D12GraphicsCommandList4_CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes) \ - ( (This)->lpVtbl -> CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes) ) - -#define ID3D12GraphicsCommandList4_CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox) \ - ( (This)->lpVtbl -> CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox) ) - -#define ID3D12GraphicsCommandList4_CopyResource(This,pDstResource,pSrcResource) \ - ( (This)->lpVtbl -> CopyResource(This,pDstResource,pSrcResource) ) - -#define ID3D12GraphicsCommandList4_CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags) \ - ( (This)->lpVtbl -> CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags) ) - -#define ID3D12GraphicsCommandList4_ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) \ - ( (This)->lpVtbl -> ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) ) - -#define ID3D12GraphicsCommandList4_IASetPrimitiveTopology(This,PrimitiveTopology) \ - ( (This)->lpVtbl -> IASetPrimitiveTopology(This,PrimitiveTopology) ) - -#define ID3D12GraphicsCommandList4_RSSetViewports(This,NumViewports,pViewports) \ - ( (This)->lpVtbl -> RSSetViewports(This,NumViewports,pViewports) ) - -#define ID3D12GraphicsCommandList4_RSSetScissorRects(This,NumRects,pRects) \ - ( (This)->lpVtbl -> RSSetScissorRects(This,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList4_OMSetBlendFactor(This,BlendFactor) \ - ( (This)->lpVtbl -> OMSetBlendFactor(This,BlendFactor) ) - -#define ID3D12GraphicsCommandList4_OMSetStencilRef(This,StencilRef) \ - ( (This)->lpVtbl -> OMSetStencilRef(This,StencilRef) ) - -#define ID3D12GraphicsCommandList4_SetPipelineState(This,pPipelineState) \ - ( (This)->lpVtbl -> SetPipelineState(This,pPipelineState) ) - -#define ID3D12GraphicsCommandList4_ResourceBarrier(This,NumBarriers,pBarriers) \ - ( (This)->lpVtbl -> ResourceBarrier(This,NumBarriers,pBarriers) ) - -#define ID3D12GraphicsCommandList4_ExecuteBundle(This,pCommandList) \ - ( (This)->lpVtbl -> ExecuteBundle(This,pCommandList) ) - -#define ID3D12GraphicsCommandList4_SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps) \ - ( (This)->lpVtbl -> SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps) ) - -#define ID3D12GraphicsCommandList4_SetComputeRootSignature(This,pRootSignature) \ - ( (This)->lpVtbl -> SetComputeRootSignature(This,pRootSignature) ) - -#define ID3D12GraphicsCommandList4_SetGraphicsRootSignature(This,pRootSignature) \ - ( (This)->lpVtbl -> SetGraphicsRootSignature(This,pRootSignature) ) - -#define ID3D12GraphicsCommandList4_SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) \ - ( (This)->lpVtbl -> SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) - -#define ID3D12GraphicsCommandList4_SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) \ - ( (This)->lpVtbl -> SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) - -#define ID3D12GraphicsCommandList4_SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList4_SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList4_SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList4_SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList4_SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList4_SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList4_SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList4_SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList4_SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList4_SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList4_IASetIndexBuffer(This,pView) \ - ( (This)->lpVtbl -> IASetIndexBuffer(This,pView) ) - -#define ID3D12GraphicsCommandList4_IASetVertexBuffers(This,StartSlot,NumViews,pViews) \ - ( (This)->lpVtbl -> IASetVertexBuffers(This,StartSlot,NumViews,pViews) ) - -#define ID3D12GraphicsCommandList4_SOSetTargets(This,StartSlot,NumViews,pViews) \ - ( (This)->lpVtbl -> SOSetTargets(This,StartSlot,NumViews,pViews) ) - -#define ID3D12GraphicsCommandList4_OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor) \ - ( (This)->lpVtbl -> OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor) ) - -#define ID3D12GraphicsCommandList4_ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList4_ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList4_ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList4_ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList4_DiscardResource(This,pResource,pRegion) \ - ( (This)->lpVtbl -> DiscardResource(This,pResource,pRegion) ) - -#define ID3D12GraphicsCommandList4_BeginQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> BeginQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12GraphicsCommandList4_EndQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> EndQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12GraphicsCommandList4_ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) \ - ( (This)->lpVtbl -> ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) ) - -#define ID3D12GraphicsCommandList4_SetPredication(This,pBuffer,AlignedBufferOffset,Operation) \ - ( (This)->lpVtbl -> SetPredication(This,pBuffer,AlignedBufferOffset,Operation) ) - -#define ID3D12GraphicsCommandList4_SetMarker(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> SetMarker(This,Metadata,pData,Size) ) - -#define ID3D12GraphicsCommandList4_BeginEvent(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> BeginEvent(This,Metadata,pData,Size) ) - -#define ID3D12GraphicsCommandList4_EndEvent(This) \ - ( (This)->lpVtbl -> EndEvent(This) ) - -#define ID3D12GraphicsCommandList4_ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset) \ - ( (This)->lpVtbl -> ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset) ) - -#define ID3D12GraphicsCommandList4_AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) \ - ( (This)->lpVtbl -> AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) - -#define ID3D12GraphicsCommandList4_AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) \ - ( (This)->lpVtbl -> AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) - -#define ID3D12GraphicsCommandList4_OMSetDepthBounds(This,Min,Max) \ - ( (This)->lpVtbl -> OMSetDepthBounds(This,Min,Max) ) - -#define ID3D12GraphicsCommandList4_SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions) \ - ( (This)->lpVtbl -> SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions) ) - -#define ID3D12GraphicsCommandList4_ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode) \ - ( (This)->lpVtbl -> ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode) ) - -#define ID3D12GraphicsCommandList4_SetViewInstanceMask(This,Mask) \ - ( (This)->lpVtbl -> SetViewInstanceMask(This,Mask) ) - -#define ID3D12GraphicsCommandList4_WriteBufferImmediate(This,Count,pParams,pModes) \ - ( (This)->lpVtbl -> WriteBufferImmediate(This,Count,pParams,pModes) ) - -#define ID3D12GraphicsCommandList4_SetProtectedResourceSession(This,pProtectedResourceSession) \ - ( (This)->lpVtbl -> SetProtectedResourceSession(This,pProtectedResourceSession) ) - -#define ID3D12GraphicsCommandList4_BeginRenderPass(This,NumRenderTargets,pRenderTargets,pDepthStencil,Flags) \ - ( (This)->lpVtbl -> BeginRenderPass(This,NumRenderTargets,pRenderTargets,pDepthStencil,Flags) ) - -#define ID3D12GraphicsCommandList4_EndRenderPass(This) \ - ( (This)->lpVtbl -> EndRenderPass(This) ) - -#define ID3D12GraphicsCommandList4_InitializeMetaCommand(This,pMetaCommand,pInitializationParametersData,InitializationParametersDataSizeInBytes) \ - ( (This)->lpVtbl -> InitializeMetaCommand(This,pMetaCommand,pInitializationParametersData,InitializationParametersDataSizeInBytes) ) - -#define ID3D12GraphicsCommandList4_ExecuteMetaCommand(This,pMetaCommand,pExecutionParametersData,ExecutionParametersDataSizeInBytes) \ - ( (This)->lpVtbl -> ExecuteMetaCommand(This,pMetaCommand,pExecutionParametersData,ExecutionParametersDataSizeInBytes) ) - -#define ID3D12GraphicsCommandList4_BuildRaytracingAccelerationStructure(This,pDesc,NumPostbuildInfoDescs,pPostbuildInfoDescs) \ - ( (This)->lpVtbl -> BuildRaytracingAccelerationStructure(This,pDesc,NumPostbuildInfoDescs,pPostbuildInfoDescs) ) - -#define ID3D12GraphicsCommandList4_EmitRaytracingAccelerationStructurePostbuildInfo(This,pDesc,NumSourceAccelerationStructures,pSourceAccelerationStructureData) \ - ( (This)->lpVtbl -> EmitRaytracingAccelerationStructurePostbuildInfo(This,pDesc,NumSourceAccelerationStructures,pSourceAccelerationStructureData) ) - -#define ID3D12GraphicsCommandList4_CopyRaytracingAccelerationStructure(This,DestAccelerationStructureData,SourceAccelerationStructureData,Mode) \ - ( (This)->lpVtbl -> CopyRaytracingAccelerationStructure(This,DestAccelerationStructureData,SourceAccelerationStructureData,Mode) ) - -#define ID3D12GraphicsCommandList4_SetPipelineState1(This,pStateObject) \ - ( (This)->lpVtbl -> SetPipelineState1(This,pStateObject) ) - -#define ID3D12GraphicsCommandList4_DispatchRays(This,pDesc) \ - ( (This)->lpVtbl -> DispatchRays(This,pDesc) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12GraphicsCommandList4_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12_0000_0053 */ -/* [local] */ - -typedef -enum D3D12_SHADER_CACHE_MODE - { - D3D12_SHADER_CACHE_MODE_MEMORY = 0, - D3D12_SHADER_CACHE_MODE_DISK = ( D3D12_SHADER_CACHE_MODE_MEMORY + 1 ) - } D3D12_SHADER_CACHE_MODE; - -typedef -enum D3D12_SHADER_CACHE_FLAGS - { - D3D12_SHADER_CACHE_FLAG_NONE = 0, - D3D12_SHADER_CACHE_FLAG_DRIVER_VERSIONED = 0x1, - D3D12_SHADER_CACHE_FLAG_USE_WORKING_DIR = 0x2 - } D3D12_SHADER_CACHE_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_SHADER_CACHE_FLAGS ) -typedef struct D3D12_SHADER_CACHE_SESSION_DESC - { - GUID Identifier; - D3D12_SHADER_CACHE_MODE Mode; - D3D12_SHADER_CACHE_FLAGS Flags; - UINT MaximumInMemoryCacheSizeBytes; - UINT MaximumInMemoryCacheEntries; - UINT MaximumValueFileSizeBytes; - UINT64 Version; - } D3D12_SHADER_CACHE_SESSION_DESC; - -typedef -enum D3D12_BARRIER_LAYOUT - { - D3D12_BARRIER_LAYOUT_UNDEFINED = 0xffffffff, - D3D12_BARRIER_LAYOUT_COMMON = 0, - D3D12_BARRIER_LAYOUT_PRESENT = 0, - D3D12_BARRIER_LAYOUT_GENERIC_READ = ( D3D12_BARRIER_LAYOUT_PRESENT + 1 ) , - D3D12_BARRIER_LAYOUT_RENDER_TARGET = ( D3D12_BARRIER_LAYOUT_GENERIC_READ + 1 ) , - D3D12_BARRIER_LAYOUT_UNORDERED_ACCESS = ( D3D12_BARRIER_LAYOUT_RENDER_TARGET + 1 ) , - D3D12_BARRIER_LAYOUT_DEPTH_STENCIL_WRITE = ( D3D12_BARRIER_LAYOUT_UNORDERED_ACCESS + 1 ) , - D3D12_BARRIER_LAYOUT_DEPTH_STENCIL_READ = ( D3D12_BARRIER_LAYOUT_DEPTH_STENCIL_WRITE + 1 ) , - D3D12_BARRIER_LAYOUT_SHADER_RESOURCE = ( D3D12_BARRIER_LAYOUT_DEPTH_STENCIL_READ + 1 ) , - D3D12_BARRIER_LAYOUT_COPY_SOURCE = ( D3D12_BARRIER_LAYOUT_SHADER_RESOURCE + 1 ) , - D3D12_BARRIER_LAYOUT_COPY_DEST = ( D3D12_BARRIER_LAYOUT_COPY_SOURCE + 1 ) , - D3D12_BARRIER_LAYOUT_RESOLVE_SOURCE = ( D3D12_BARRIER_LAYOUT_COPY_DEST + 1 ) , - D3D12_BARRIER_LAYOUT_RESOLVE_DEST = ( D3D12_BARRIER_LAYOUT_RESOLVE_SOURCE + 1 ) , - D3D12_BARRIER_LAYOUT_SHADING_RATE_SOURCE = ( D3D12_BARRIER_LAYOUT_RESOLVE_DEST + 1 ) , - D3D12_BARRIER_LAYOUT_VIDEO_DECODE_READ = ( D3D12_BARRIER_LAYOUT_SHADING_RATE_SOURCE + 1 ) , - D3D12_BARRIER_LAYOUT_VIDEO_DECODE_WRITE = ( D3D12_BARRIER_LAYOUT_VIDEO_DECODE_READ + 1 ) , - D3D12_BARRIER_LAYOUT_VIDEO_PROCESS_READ = ( D3D12_BARRIER_LAYOUT_VIDEO_DECODE_WRITE + 1 ) , - D3D12_BARRIER_LAYOUT_VIDEO_PROCESS_WRITE = ( D3D12_BARRIER_LAYOUT_VIDEO_PROCESS_READ + 1 ) , - D3D12_BARRIER_LAYOUT_VIDEO_ENCODE_READ = ( D3D12_BARRIER_LAYOUT_VIDEO_PROCESS_WRITE + 1 ) , - D3D12_BARRIER_LAYOUT_VIDEO_ENCODE_WRITE = ( D3D12_BARRIER_LAYOUT_VIDEO_ENCODE_READ + 1 ) , - D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_COMMON = ( D3D12_BARRIER_LAYOUT_VIDEO_ENCODE_WRITE + 1 ) , - D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_GENERIC_READ = ( D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_COMMON + 1 ) , - D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_UNORDERED_ACCESS = ( D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_GENERIC_READ + 1 ) , - D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_SHADER_RESOURCE = ( D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_UNORDERED_ACCESS + 1 ) , - D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_COPY_SOURCE = ( D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_SHADER_RESOURCE + 1 ) , - D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_COPY_DEST = ( D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_COPY_SOURCE + 1 ) , - D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_COMMON = ( D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_COPY_DEST + 1 ) , - D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_GENERIC_READ = ( D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_COMMON + 1 ) , - D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_UNORDERED_ACCESS = ( D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_GENERIC_READ + 1 ) , - D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_SHADER_RESOURCE = ( D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_UNORDERED_ACCESS + 1 ) , - D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_COPY_SOURCE = ( D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_SHADER_RESOURCE + 1 ) , - D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_COPY_DEST = ( D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_COPY_SOURCE + 1 ) , - D3D12_BARRIER_LAYOUT_VIDEO_QUEUE_COMMON = ( D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_COPY_DEST + 1 ) - } D3D12_BARRIER_LAYOUT; - -typedef -enum D3D12_BARRIER_SYNC - { - D3D12_BARRIER_SYNC_NONE = 0, - D3D12_BARRIER_SYNC_ALL = 0x1, - D3D12_BARRIER_SYNC_DRAW = 0x2, - D3D12_BARRIER_SYNC_INDEX_INPUT = 0x4, - D3D12_BARRIER_SYNC_VERTEX_SHADING = 0x8, - D3D12_BARRIER_SYNC_PIXEL_SHADING = 0x10, - D3D12_BARRIER_SYNC_DEPTH_STENCIL = 0x20, - D3D12_BARRIER_SYNC_RENDER_TARGET = 0x40, - D3D12_BARRIER_SYNC_COMPUTE_SHADING = 0x80, - D3D12_BARRIER_SYNC_RAYTRACING = 0x100, - D3D12_BARRIER_SYNC_COPY = 0x200, - D3D12_BARRIER_SYNC_RESOLVE = 0x400, - D3D12_BARRIER_SYNC_EXECUTE_INDIRECT = 0x800, - D3D12_BARRIER_SYNC_PREDICATION = 0x800, - D3D12_BARRIER_SYNC_ALL_SHADING = 0x1000, - D3D12_BARRIER_SYNC_NON_PIXEL_SHADING = 0x2000, - D3D12_BARRIER_SYNC_EMIT_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO = 0x4000, - D3D12_BARRIER_SYNC_CLEAR_UNORDERED_ACCESS_VIEW = 0x8000, - D3D12_BARRIER_SYNC_VIDEO_DECODE = 0x100000, - D3D12_BARRIER_SYNC_VIDEO_PROCESS = 0x200000, - D3D12_BARRIER_SYNC_VIDEO_ENCODE = 0x400000, - D3D12_BARRIER_SYNC_BUILD_RAYTRACING_ACCELERATION_STRUCTURE = 0x800000, - D3D12_BARRIER_SYNC_COPY_RAYTRACING_ACCELERATION_STRUCTURE = 0x1000000, - D3D12_BARRIER_SYNC_SPLIT = 0x80000000 - } D3D12_BARRIER_SYNC; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_BARRIER_SYNC ) -typedef -enum D3D12_BARRIER_ACCESS - { - D3D12_BARRIER_ACCESS_COMMON = 0, - D3D12_BARRIER_ACCESS_VERTEX_BUFFER = 0x1, - D3D12_BARRIER_ACCESS_CONSTANT_BUFFER = 0x2, - D3D12_BARRIER_ACCESS_INDEX_BUFFER = 0x4, - D3D12_BARRIER_ACCESS_RENDER_TARGET = 0x8, - D3D12_BARRIER_ACCESS_UNORDERED_ACCESS = 0x10, - D3D12_BARRIER_ACCESS_DEPTH_STENCIL_WRITE = 0x20, - D3D12_BARRIER_ACCESS_DEPTH_STENCIL_READ = 0x40, - D3D12_BARRIER_ACCESS_SHADER_RESOURCE = 0x80, - D3D12_BARRIER_ACCESS_STREAM_OUTPUT = 0x100, - D3D12_BARRIER_ACCESS_INDIRECT_ARGUMENT = 0x200, - D3D12_BARRIER_ACCESS_PREDICATION = 0x200, - D3D12_BARRIER_ACCESS_COPY_DEST = 0x400, - D3D12_BARRIER_ACCESS_COPY_SOURCE = 0x800, - D3D12_BARRIER_ACCESS_RESOLVE_DEST = 0x1000, - D3D12_BARRIER_ACCESS_RESOLVE_SOURCE = 0x2000, - D3D12_BARRIER_ACCESS_RAYTRACING_ACCELERATION_STRUCTURE_READ = 0x4000, - D3D12_BARRIER_ACCESS_RAYTRACING_ACCELERATION_STRUCTURE_WRITE = 0x8000, - D3D12_BARRIER_ACCESS_SHADING_RATE_SOURCE = 0x10000, - D3D12_BARRIER_ACCESS_VIDEO_DECODE_READ = 0x20000, - D3D12_BARRIER_ACCESS_VIDEO_DECODE_WRITE = 0x40000, - D3D12_BARRIER_ACCESS_VIDEO_PROCESS_READ = 0x80000, - D3D12_BARRIER_ACCESS_VIDEO_PROCESS_WRITE = 0x100000, - D3D12_BARRIER_ACCESS_VIDEO_ENCODE_READ = 0x200000, - D3D12_BARRIER_ACCESS_VIDEO_ENCODE_WRITE = 0x400000, - D3D12_BARRIER_ACCESS_NO_ACCESS = 0x80000000 - } D3D12_BARRIER_ACCESS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_BARRIER_ACCESS ) -typedef -enum D3D12_BARRIER_TYPE - { - D3D12_BARRIER_TYPE_GLOBAL = 0, - D3D12_BARRIER_TYPE_TEXTURE = ( D3D12_BARRIER_TYPE_GLOBAL + 1 ) , - D3D12_BARRIER_TYPE_BUFFER = ( D3D12_BARRIER_TYPE_TEXTURE + 1 ) - } D3D12_BARRIER_TYPE; - -typedef -enum D3D12_TEXTURE_BARRIER_FLAGS - { - D3D12_TEXTURE_BARRIER_FLAG_NONE = 0, - D3D12_TEXTURE_BARRIER_FLAG_DISCARD = 0x1 - } D3D12_TEXTURE_BARRIER_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_TEXTURE_BARRIER_FLAGS ) -typedef struct D3D12_BARRIER_SUBRESOURCE_RANGE - { - UINT IndexOrFirstMipLevel; - UINT NumMipLevels; - UINT FirstArraySlice; - UINT NumArraySlices; - UINT FirstPlane; - UINT NumPlanes; - } D3D12_BARRIER_SUBRESOURCE_RANGE; - -typedef struct D3D12_GLOBAL_BARRIER - { - D3D12_BARRIER_SYNC SyncBefore; - D3D12_BARRIER_SYNC SyncAfter; - D3D12_BARRIER_ACCESS AccessBefore; - D3D12_BARRIER_ACCESS AccessAfter; - } D3D12_GLOBAL_BARRIER; - -typedef struct D3D12_TEXTURE_BARRIER - { - D3D12_BARRIER_SYNC SyncBefore; - D3D12_BARRIER_SYNC SyncAfter; - D3D12_BARRIER_ACCESS AccessBefore; - D3D12_BARRIER_ACCESS AccessAfter; - D3D12_BARRIER_LAYOUT LayoutBefore; - D3D12_BARRIER_LAYOUT LayoutAfter; - _In_ ID3D12Resource *pResource; - D3D12_BARRIER_SUBRESOURCE_RANGE Subresources; - D3D12_TEXTURE_BARRIER_FLAGS Flags; - } D3D12_TEXTURE_BARRIER; - -typedef struct D3D12_BUFFER_BARRIER - { - D3D12_BARRIER_SYNC SyncBefore; - D3D12_BARRIER_SYNC SyncAfter; - D3D12_BARRIER_ACCESS AccessBefore; - D3D12_BARRIER_ACCESS AccessAfter; - _In_ ID3D12Resource *pResource; - UINT64 Offset; - UINT64 Size; - } D3D12_BUFFER_BARRIER; - -typedef struct D3D12_BARRIER_GROUP - { - D3D12_BARRIER_TYPE Type; - UINT32 NumBarriers; - union - { - _In_reads_(NumBarriers) const D3D12_GLOBAL_BARRIER *pGlobalBarriers; - _In_reads_(NumBarriers) const D3D12_TEXTURE_BARRIER *pTextureBarriers; - _In_reads_(NumBarriers) const D3D12_BUFFER_BARRIER *pBufferBarriers; - } ; - } D3D12_BARRIER_GROUP; - -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0053_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0053_v0_0_s_ifspec; - -#ifndef __ID3D12ShaderCacheSession_INTERFACE_DEFINED__ -#define __ID3D12ShaderCacheSession_INTERFACE_DEFINED__ - -/* interface ID3D12ShaderCacheSession */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12ShaderCacheSession; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("28e2495d-0f64-4ae4-a6ec-129255dc49a8") - ID3D12ShaderCacheSession : public ID3D12DeviceChild - { - public: - virtual HRESULT STDMETHODCALLTYPE FindValue( - /* [annotation][in] */ - _In_reads_bytes_(KeySize) const void *pKey, - UINT KeySize, - /* [annotation][out] */ - _Out_writes_bytes_(*pValueSize) void *pValue, - _Inout_ UINT *pValueSize) = 0; - - virtual HRESULT STDMETHODCALLTYPE StoreValue( - /* [annotation][in] */ - _In_reads_bytes_(KeySize) const void *pKey, - UINT KeySize, - /* [annotation][in] */ - _In_reads_bytes_(ValueSize) const void *pValue, - UINT ValueSize) = 0; - - virtual void STDMETHODCALLTYPE SetDeleteOnDestroy( void) = 0; - -#if defined(_MSC_VER) || !defined(_WIN32) - virtual D3D12_SHADER_CACHE_SESSION_DESC STDMETHODCALLTYPE GetDesc( void) = 0; -#else - virtual D3D12_SHADER_CACHE_SESSION_DESC *STDMETHODCALLTYPE GetDesc( - D3D12_SHADER_CACHE_SESSION_DESC * RetVal) = 0; -#endif - - }; - - -#else /* C style interface */ - - typedef struct ID3D12ShaderCacheSessionVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12ShaderCacheSession * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12ShaderCacheSession * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12ShaderCacheSession * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12ShaderCacheSession * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12ShaderCacheSession * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12ShaderCacheSession * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12ShaderCacheSession * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12ShaderCacheSession * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12ShaderCacheSession, FindValue) - HRESULT ( STDMETHODCALLTYPE *FindValue )( - ID3D12ShaderCacheSession * This, - /* [annotation][in] */ - _In_reads_bytes_(KeySize) const void *pKey, - UINT KeySize, - /* [annotation][out] */ - _Out_writes_bytes_(*pValueSize) void *pValue, - _Inout_ UINT *pValueSize); - - DECLSPEC_XFGVIRT(ID3D12ShaderCacheSession, StoreValue) - HRESULT ( STDMETHODCALLTYPE *StoreValue )( - ID3D12ShaderCacheSession * This, - /* [annotation][in] */ - _In_reads_bytes_(KeySize) const void *pKey, - UINT KeySize, - /* [annotation][in] */ - _In_reads_bytes_(ValueSize) const void *pValue, - UINT ValueSize); - - DECLSPEC_XFGVIRT(ID3D12ShaderCacheSession, SetDeleteOnDestroy) - void ( STDMETHODCALLTYPE *SetDeleteOnDestroy )( - ID3D12ShaderCacheSession * This); - - DECLSPEC_XFGVIRT(ID3D12ShaderCacheSession, GetDesc) -#if !defined(_WIN32) - D3D12_SHADER_CACHE_SESSION_DESC ( STDMETHODCALLTYPE *GetDesc )( - ID3D12ShaderCacheSession * This); - -#else - D3D12_SHADER_CACHE_SESSION_DESC *( STDMETHODCALLTYPE *GetDesc )( - ID3D12ShaderCacheSession * This, - D3D12_SHADER_CACHE_SESSION_DESC * RetVal); - -#endif - - END_INTERFACE - } ID3D12ShaderCacheSessionVtbl; - - interface ID3D12ShaderCacheSession - { - CONST_VTBL struct ID3D12ShaderCacheSessionVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12ShaderCacheSession_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12ShaderCacheSession_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12ShaderCacheSession_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12ShaderCacheSession_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12ShaderCacheSession_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12ShaderCacheSession_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12ShaderCacheSession_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12ShaderCacheSession_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12ShaderCacheSession_FindValue(This,pKey,KeySize,pValue,pValueSize) \ - ( (This)->lpVtbl -> FindValue(This,pKey,KeySize,pValue,pValueSize) ) - -#define ID3D12ShaderCacheSession_StoreValue(This,pKey,KeySize,pValue,ValueSize) \ - ( (This)->lpVtbl -> StoreValue(This,pKey,KeySize,pValue,ValueSize) ) - -#define ID3D12ShaderCacheSession_SetDeleteOnDestroy(This) \ - ( (This)->lpVtbl -> SetDeleteOnDestroy(This) ) -#if !defined(_WIN32) - -#define ID3D12ShaderCacheSession_GetDesc(This) \ - ( (This)->lpVtbl -> GetDesc(This) ) -#else -#define ID3D12ShaderCacheSession_GetDesc(This,RetVal) \ - ( (This)->lpVtbl -> GetDesc(This,RetVal) ) -#endif - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12ShaderCacheSession_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12_0000_0054 */ -/* [local] */ - -typedef -enum D3D12_SHADER_CACHE_KIND_FLAGS - { - D3D12_SHADER_CACHE_KIND_FLAG_IMPLICIT_D3D_CACHE_FOR_DRIVER = 0x1, - D3D12_SHADER_CACHE_KIND_FLAG_IMPLICIT_D3D_CONVERSIONS = 0x2, - D3D12_SHADER_CACHE_KIND_FLAG_IMPLICIT_DRIVER_MANAGED = 0x4, - D3D12_SHADER_CACHE_KIND_FLAG_APPLICATION_MANAGED = 0x8 - } D3D12_SHADER_CACHE_KIND_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_SHADER_CACHE_KIND_FLAGS ) -typedef -enum D3D12_SHADER_CACHE_CONTROL_FLAGS - { - D3D12_SHADER_CACHE_CONTROL_FLAG_DISABLE = 0x1, - D3D12_SHADER_CACHE_CONTROL_FLAG_ENABLE = 0x2, - D3D12_SHADER_CACHE_CONTROL_FLAG_CLEAR = 0x4 - } D3D12_SHADER_CACHE_CONTROL_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_SHADER_CACHE_CONTROL_FLAGS ) - -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0054_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0054_v0_0_s_ifspec; - -#ifndef __ID3D12Device9_INTERFACE_DEFINED__ -#define __ID3D12Device9_INTERFACE_DEFINED__ - -/* interface ID3D12Device9 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12Device9; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("4c80e962-f032-4f60-bc9e-ebc2cfa1d83c") - ID3D12Device9 : public ID3D12Device8 - { - public: - virtual HRESULT STDMETHODCALLTYPE CreateShaderCacheSession( - _In_ const D3D12_SHADER_CACHE_SESSION_DESC *pDesc, - REFIID riid, - _COM_Outptr_opt_ void **ppvSession) = 0; - - virtual HRESULT STDMETHODCALLTYPE ShaderCacheControl( - D3D12_SHADER_CACHE_KIND_FLAGS Kinds, - D3D12_SHADER_CACHE_CONTROL_FLAGS Control) = 0; - - virtual HRESULT STDMETHODCALLTYPE CreateCommandQueue1( - _In_ const D3D12_COMMAND_QUEUE_DESC *pDesc, - REFIID CreatorID, - REFIID riid, - _COM_Outptr_ void **ppCommandQueue) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12Device9Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12Device9 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12Device9 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12Device9 * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12Device9 * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12Device9 * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12Device9 * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12Device9 * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12Device, GetNodeCount) - UINT ( STDMETHODCALLTYPE *GetNodeCount )( - ID3D12Device9 * This); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandQueue) - HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue )( - ID3D12Device9 * This, - _In_ const D3D12_COMMAND_QUEUE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppCommandQueue); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandAllocator) - HRESULT ( STDMETHODCALLTYPE *CreateCommandAllocator )( - ID3D12Device9 * This, - _In_ D3D12_COMMAND_LIST_TYPE type, - REFIID riid, - _COM_Outptr_ void **ppCommandAllocator); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateGraphicsPipelineState) - HRESULT ( STDMETHODCALLTYPE *CreateGraphicsPipelineState )( - ID3D12Device9 * This, - _In_ const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateComputePipelineState) - HRESULT ( STDMETHODCALLTYPE *CreateComputePipelineState )( - ID3D12Device9 * This, - _In_ const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandList) - HRESULT ( STDMETHODCALLTYPE *CreateCommandList )( - ID3D12Device9 * This, - _In_ UINT nodeMask, - _In_ D3D12_COMMAND_LIST_TYPE type, - _In_ ID3D12CommandAllocator *pCommandAllocator, - _In_opt_ ID3D12PipelineState *pInitialState, - REFIID riid, - _COM_Outptr_ void **ppCommandList); - - DECLSPEC_XFGVIRT(ID3D12Device, CheckFeatureSupport) - HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )( - ID3D12Device9 * This, - D3D12_FEATURE Feature, - _Inout_updates_bytes_(FeatureSupportDataSize) void *pFeatureSupportData, - UINT FeatureSupportDataSize); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateDescriptorHeap) - HRESULT ( STDMETHODCALLTYPE *CreateDescriptorHeap )( - ID3D12Device9 * This, - _In_ const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc, - REFIID riid, - _COM_Outptr_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, GetDescriptorHandleIncrementSize) - UINT ( STDMETHODCALLTYPE *GetDescriptorHandleIncrementSize )( - ID3D12Device9 * This, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateRootSignature) - HRESULT ( STDMETHODCALLTYPE *CreateRootSignature )( - ID3D12Device9 * This, - _In_ UINT nodeMask, - _In_reads_(blobLengthInBytes) const void *pBlobWithRootSignature, - _In_ SIZE_T blobLengthInBytes, - REFIID riid, - _COM_Outptr_ void **ppvRootSignature); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateConstantBufferView) - void ( STDMETHODCALLTYPE *CreateConstantBufferView )( - ID3D12Device9 * This, - _In_opt_ const D3D12_CONSTANT_BUFFER_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateShaderResourceView) - void ( STDMETHODCALLTYPE *CreateShaderResourceView )( - ID3D12Device9 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateUnorderedAccessView) - void ( STDMETHODCALLTYPE *CreateUnorderedAccessView )( - ID3D12Device9 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ ID3D12Resource *pCounterResource, - _In_opt_ const D3D12_UNORDERED_ACCESS_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateRenderTargetView) - void ( STDMETHODCALLTYPE *CreateRenderTargetView )( - ID3D12Device9 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_RENDER_TARGET_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateDepthStencilView) - void ( STDMETHODCALLTYPE *CreateDepthStencilView )( - ID3D12Device9 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DEPTH_STENCIL_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateSampler) - void ( STDMETHODCALLTYPE *CreateSampler )( - ID3D12Device9 * This, - _In_ const D3D12_SAMPLER_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptors) - void ( STDMETHODCALLTYPE *CopyDescriptors )( - ID3D12Device9 * This, - _In_ UINT NumDestDescriptorRanges, - _In_reads_(NumDestDescriptorRanges) const D3D12_CPU_DESCRIPTOR_HANDLE *pDestDescriptorRangeStarts, - _In_reads_opt_(NumDestDescriptorRanges) const UINT *pDestDescriptorRangeSizes, - _In_ UINT NumSrcDescriptorRanges, - _In_reads_(NumSrcDescriptorRanges) const D3D12_CPU_DESCRIPTOR_HANDLE *pSrcDescriptorRangeStarts, - _In_reads_opt_(NumSrcDescriptorRanges) const UINT *pSrcDescriptorRangeSizes, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType); - - DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptorsSimple) - void ( STDMETHODCALLTYPE *CopyDescriptorsSimple )( - ID3D12Device9 * This, - _In_ UINT NumDescriptors, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType); - - DECLSPEC_XFGVIRT(ID3D12Device, GetResourceAllocationInfo) -#if !defined(_WIN32) - D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo )( - ID3D12Device9 * This, - _In_ UINT visibleMask, - _In_ UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs); - -#else - D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo )( - ID3D12Device9 * This, - D3D12_RESOURCE_ALLOCATION_INFO * RetVal, - _In_ UINT visibleMask, - _In_ UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device, GetCustomHeapProperties) -#if !defined(_WIN32) - D3D12_HEAP_PROPERTIES ( STDMETHODCALLTYPE *GetCustomHeapProperties )( - ID3D12Device9 * This, - _In_ UINT nodeMask, - D3D12_HEAP_TYPE heapType); - -#else - D3D12_HEAP_PROPERTIES *( STDMETHODCALLTYPE *GetCustomHeapProperties )( - ID3D12Device9 * This, - D3D12_HEAP_PROPERTIES * RetVal, - _In_ UINT nodeMask, - D3D12_HEAP_TYPE heapType); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommittedResource) - HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource )( - ID3D12Device9 * This, - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialResourceState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riidResource, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateHeap) - HRESULT ( STDMETHODCALLTYPE *CreateHeap )( - ID3D12Device9 * This, - _In_ const D3D12_HEAP_DESC *pDesc, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, CreatePlacedResource) - HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource )( - ID3D12Device9 * This, - _In_ ID3D12Heap *pHeap, - UINT64 HeapOffset, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateReservedResource) - HRESULT ( STDMETHODCALLTYPE *CreateReservedResource )( - ID3D12Device9 * This, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateSharedHandle) - HRESULT ( STDMETHODCALLTYPE *CreateSharedHandle )( - ID3D12Device9 * This, - _In_ ID3D12DeviceChild *pObject, - _In_opt_ const SECURITY_ATTRIBUTES *pAttributes, - DWORD Access, - _In_opt_ LPCWSTR Name, - _Out_ HANDLE *pHandle); - - DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandle) - HRESULT ( STDMETHODCALLTYPE *OpenSharedHandle )( - ID3D12Device9 * This, - _In_ HANDLE NTHandle, - REFIID riid, - _COM_Outptr_opt_ void **ppvObj); - - DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandleByName) - HRESULT ( STDMETHODCALLTYPE *OpenSharedHandleByName )( - ID3D12Device9 * This, - _In_ LPCWSTR Name, - DWORD Access, - /* [annotation][out] */ - _Out_ HANDLE *pNTHandle); - - DECLSPEC_XFGVIRT(ID3D12Device, MakeResident) - HRESULT ( STDMETHODCALLTYPE *MakeResident )( - ID3D12Device9 * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects); - - DECLSPEC_XFGVIRT(ID3D12Device, Evict) - HRESULT ( STDMETHODCALLTYPE *Evict )( - ID3D12Device9 * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateFence) - HRESULT ( STDMETHODCALLTYPE *CreateFence )( - ID3D12Device9 * This, - UINT64 InitialValue, - D3D12_FENCE_FLAGS Flags, - REFIID riid, - _COM_Outptr_ void **ppFence); - - DECLSPEC_XFGVIRT(ID3D12Device, GetDeviceRemovedReason) - HRESULT ( STDMETHODCALLTYPE *GetDeviceRemovedReason )( - ID3D12Device9 * This); - - DECLSPEC_XFGVIRT(ID3D12Device, GetCopyableFootprints) - void ( STDMETHODCALLTYPE *GetCopyableFootprints )( - ID3D12Device9 * This, - _In_ const D3D12_RESOURCE_DESC *pResourceDesc, - _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, - _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, - UINT64 BaseOffset, - _Out_writes_opt_(NumSubresources) D3D12_PLACED_SUBRESOURCE_FOOTPRINT *pLayouts, - _Out_writes_opt_(NumSubresources) UINT *pNumRows, - _Out_writes_opt_(NumSubresources) UINT64 *pRowSizeInBytes, - _Out_opt_ UINT64 *pTotalBytes); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateQueryHeap) - HRESULT ( STDMETHODCALLTYPE *CreateQueryHeap )( - ID3D12Device9 * This, - _In_ const D3D12_QUERY_HEAP_DESC *pDesc, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, SetStablePowerState) - HRESULT ( STDMETHODCALLTYPE *SetStablePowerState )( - ID3D12Device9 * This, - BOOL Enable); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandSignature) - HRESULT ( STDMETHODCALLTYPE *CreateCommandSignature )( - ID3D12Device9 * This, - _In_ const D3D12_COMMAND_SIGNATURE_DESC *pDesc, - _In_opt_ ID3D12RootSignature *pRootSignature, - REFIID riid, - _COM_Outptr_opt_ void **ppvCommandSignature); - - DECLSPEC_XFGVIRT(ID3D12Device, GetResourceTiling) - void ( STDMETHODCALLTYPE *GetResourceTiling )( - ID3D12Device9 * This, - _In_ ID3D12Resource *pTiledResource, - _Out_opt_ UINT *pNumTilesForEntireResource, - _Out_opt_ D3D12_PACKED_MIP_INFO *pPackedMipDesc, - _Out_opt_ D3D12_TILE_SHAPE *pStandardTileShapeForNonPackedMips, - _Inout_opt_ UINT *pNumSubresourceTilings, - _In_ UINT FirstSubresourceTilingToGet, - _Out_writes_(*pNumSubresourceTilings) D3D12_SUBRESOURCE_TILING *pSubresourceTilingsForNonPackedMips); - - DECLSPEC_XFGVIRT(ID3D12Device, GetAdapterLuid) -#if !defined(_WIN32) - LUID ( STDMETHODCALLTYPE *GetAdapterLuid )( - ID3D12Device9 * This); - -#else - LUID *( STDMETHODCALLTYPE *GetAdapterLuid )( - ID3D12Device9 * This, - LUID * RetVal); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device1, CreatePipelineLibrary) - HRESULT ( STDMETHODCALLTYPE *CreatePipelineLibrary )( - ID3D12Device9 * This, - _In_reads_(BlobLength) const void *pLibraryBlob, - SIZE_T BlobLength, - REFIID riid, - _COM_Outptr_ void **ppPipelineLibrary); - - DECLSPEC_XFGVIRT(ID3D12Device1, SetEventOnMultipleFenceCompletion) - HRESULT ( STDMETHODCALLTYPE *SetEventOnMultipleFenceCompletion )( - ID3D12Device9 * This, - _In_reads_(NumFences) ID3D12Fence *const *ppFences, - _In_reads_(NumFences) const UINT64 *pFenceValues, - UINT NumFences, - D3D12_MULTIPLE_FENCE_WAIT_FLAGS Flags, - HANDLE hEvent); - - DECLSPEC_XFGVIRT(ID3D12Device1, SetResidencyPriority) - HRESULT ( STDMETHODCALLTYPE *SetResidencyPriority )( - ID3D12Device9 * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects, - _In_reads_(NumObjects) const D3D12_RESIDENCY_PRIORITY *pPriorities); - - DECLSPEC_XFGVIRT(ID3D12Device2, CreatePipelineState) - HRESULT ( STDMETHODCALLTYPE *CreatePipelineState )( - ID3D12Device9 * This, - const D3D12_PIPELINE_STATE_STREAM_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromAddress) - HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromAddress )( - ID3D12Device9 * This, - _In_ const void *pAddress, - REFIID riid, - _COM_Outptr_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromFileMapping) - HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromFileMapping )( - ID3D12Device9 * This, - _In_ HANDLE hFileMapping, - REFIID riid, - _COM_Outptr_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device3, EnqueueMakeResident) - HRESULT ( STDMETHODCALLTYPE *EnqueueMakeResident )( - ID3D12Device9 * This, - D3D12_RESIDENCY_FLAGS Flags, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects, - _In_ ID3D12Fence *pFenceToSignal, - UINT64 FenceValueToSignal); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommandList1) - HRESULT ( STDMETHODCALLTYPE *CreateCommandList1 )( - ID3D12Device9 * This, - _In_ UINT nodeMask, - _In_ D3D12_COMMAND_LIST_TYPE type, - _In_ D3D12_COMMAND_LIST_FLAGS flags, - REFIID riid, - _COM_Outptr_ void **ppCommandList); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateProtectedResourceSession) - HRESULT ( STDMETHODCALLTYPE *CreateProtectedResourceSession )( - ID3D12Device9 * This, - _In_ const D3D12_PROTECTED_RESOURCE_SESSION_DESC *pDesc, - _In_ REFIID riid, - _COM_Outptr_ void **ppSession); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommittedResource1) - HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource1 )( - ID3D12Device9 * This, - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialResourceState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riidResource, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateHeap1) - HRESULT ( STDMETHODCALLTYPE *CreateHeap1 )( - ID3D12Device9 * This, - _In_ const D3D12_HEAP_DESC *pDesc, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateReservedResource1) - HRESULT ( STDMETHODCALLTYPE *CreateReservedResource1 )( - ID3D12Device9 * This, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device4, GetResourceAllocationInfo1) -#if !defined(_WIN32) - D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( - ID3D12Device9 * This, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); - -#else - D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( - ID3D12Device9 * This, - D3D12_RESOURCE_ALLOCATION_INFO * RetVal, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device5, CreateLifetimeTracker) - HRESULT ( STDMETHODCALLTYPE *CreateLifetimeTracker )( - ID3D12Device9 * This, - _In_ ID3D12LifetimeOwner *pOwner, - REFIID riid, - _COM_Outptr_ void **ppvTracker); - - DECLSPEC_XFGVIRT(ID3D12Device5, RemoveDevice) - void ( STDMETHODCALLTYPE *RemoveDevice )( - ID3D12Device9 * This); - - DECLSPEC_XFGVIRT(ID3D12Device5, EnumerateMetaCommands) - HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommands )( - ID3D12Device9 * This, - _Inout_ UINT *pNumMetaCommands, - _Out_writes_opt_(*pNumMetaCommands) D3D12_META_COMMAND_DESC *pDescs); - - DECLSPEC_XFGVIRT(ID3D12Device5, EnumerateMetaCommandParameters) - HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommandParameters )( - ID3D12Device9 * This, - _In_ REFGUID CommandId, - _In_ D3D12_META_COMMAND_PARAMETER_STAGE Stage, - _Out_opt_ UINT *pTotalStructureSizeInBytes, - _Inout_ UINT *pParameterCount, - _Out_writes_opt_(*pParameterCount) D3D12_META_COMMAND_PARAMETER_DESC *pParameterDescs); - - DECLSPEC_XFGVIRT(ID3D12Device5, CreateMetaCommand) - HRESULT ( STDMETHODCALLTYPE *CreateMetaCommand )( - ID3D12Device9 * This, - _In_ REFGUID CommandId, - _In_ UINT NodeMask, - _In_reads_bytes_opt_(CreationParametersDataSizeInBytes) const void *pCreationParametersData, - _In_ SIZE_T CreationParametersDataSizeInBytes, - REFIID riid, - _COM_Outptr_ void **ppMetaCommand); - - DECLSPEC_XFGVIRT(ID3D12Device5, CreateStateObject) - HRESULT ( STDMETHODCALLTYPE *CreateStateObject )( - ID3D12Device9 * This, - const D3D12_STATE_OBJECT_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppStateObject); - - DECLSPEC_XFGVIRT(ID3D12Device5, GetRaytracingAccelerationStructurePrebuildInfo) - void ( STDMETHODCALLTYPE *GetRaytracingAccelerationStructurePrebuildInfo )( - ID3D12Device9 * This, - _In_ const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS *pDesc, - _Out_ D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO *pInfo); - - DECLSPEC_XFGVIRT(ID3D12Device5, CheckDriverMatchingIdentifier) - D3D12_DRIVER_MATCHING_IDENTIFIER_STATUS ( STDMETHODCALLTYPE *CheckDriverMatchingIdentifier )( - ID3D12Device9 * This, - _In_ D3D12_SERIALIZED_DATA_TYPE SerializedDataType, - _In_ const D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER *pIdentifierToCheck); - - DECLSPEC_XFGVIRT(ID3D12Device6, SetBackgroundProcessingMode) - HRESULT ( STDMETHODCALLTYPE *SetBackgroundProcessingMode )( - ID3D12Device9 * This, - D3D12_BACKGROUND_PROCESSING_MODE Mode, - D3D12_MEASUREMENTS_ACTION MeasurementsAction, - _In_opt_ HANDLE hEventToSignalUponCompletion, - _Out_opt_ BOOL *pbFurtherMeasurementsDesired); - - DECLSPEC_XFGVIRT(ID3D12Device7, AddToStateObject) - HRESULT ( STDMETHODCALLTYPE *AddToStateObject )( - ID3D12Device9 * This, - const D3D12_STATE_OBJECT_DESC *pAddition, - ID3D12StateObject *pStateObjectToGrowFrom, - REFIID riid, - _COM_Outptr_ void **ppNewStateObject); - - DECLSPEC_XFGVIRT(ID3D12Device7, CreateProtectedResourceSession1) - HRESULT ( STDMETHODCALLTYPE *CreateProtectedResourceSession1 )( - ID3D12Device9 * This, - _In_ const D3D12_PROTECTED_RESOURCE_SESSION_DESC1 *pDesc, - _In_ REFIID riid, - _COM_Outptr_ void **ppSession); - - DECLSPEC_XFGVIRT(ID3D12Device8, GetResourceAllocationInfo2) -#if !defined(_WIN32) - D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo2 )( - ID3D12Device9 * This, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC1 *pResourceDescs, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); - -#else - D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo2 )( - ID3D12Device9 * This, - D3D12_RESOURCE_ALLOCATION_INFO * RetVal, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC1 *pResourceDescs, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device8, CreateCommittedResource2) - HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource2 )( - ID3D12Device9 * This, - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC1 *pDesc, - D3D12_RESOURCE_STATES InitialResourceState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riidResource, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device8, CreatePlacedResource1) - HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource1 )( - ID3D12Device9 * This, - _In_ ID3D12Heap *pHeap, - UINT64 HeapOffset, - _In_ const D3D12_RESOURCE_DESC1 *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device8, CreateSamplerFeedbackUnorderedAccessView) - void ( STDMETHODCALLTYPE *CreateSamplerFeedbackUnorderedAccessView )( - ID3D12Device9 * This, - _In_opt_ ID3D12Resource *pTargetedResource, - _In_opt_ ID3D12Resource *pFeedbackResource, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device8, GetCopyableFootprints1) - void ( STDMETHODCALLTYPE *GetCopyableFootprints1 )( - ID3D12Device9 * This, - _In_ const D3D12_RESOURCE_DESC1 *pResourceDesc, - _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, - _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, - UINT64 BaseOffset, - _Out_writes_opt_(NumSubresources) D3D12_PLACED_SUBRESOURCE_FOOTPRINT *pLayouts, - _Out_writes_opt_(NumSubresources) UINT *pNumRows, - _Out_writes_opt_(NumSubresources) UINT64 *pRowSizeInBytes, - _Out_opt_ UINT64 *pTotalBytes); - - DECLSPEC_XFGVIRT(ID3D12Device9, CreateShaderCacheSession) - HRESULT ( STDMETHODCALLTYPE *CreateShaderCacheSession )( - ID3D12Device9 * This, - _In_ const D3D12_SHADER_CACHE_SESSION_DESC *pDesc, - REFIID riid, - _COM_Outptr_opt_ void **ppvSession); - - DECLSPEC_XFGVIRT(ID3D12Device9, ShaderCacheControl) - HRESULT ( STDMETHODCALLTYPE *ShaderCacheControl )( - ID3D12Device9 * This, - D3D12_SHADER_CACHE_KIND_FLAGS Kinds, - D3D12_SHADER_CACHE_CONTROL_FLAGS Control); - - DECLSPEC_XFGVIRT(ID3D12Device9, CreateCommandQueue1) - HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue1 )( - ID3D12Device9 * This, - _In_ const D3D12_COMMAND_QUEUE_DESC *pDesc, - REFIID CreatorID, - REFIID riid, - _COM_Outptr_ void **ppCommandQueue); - - END_INTERFACE - } ID3D12Device9Vtbl; - - interface ID3D12Device9 - { - CONST_VTBL struct ID3D12Device9Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12Device9_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12Device9_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12Device9_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12Device9_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12Device9_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12Device9_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12Device9_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12Device9_GetNodeCount(This) \ - ( (This)->lpVtbl -> GetNodeCount(This) ) - -#define ID3D12Device9_CreateCommandQueue(This,pDesc,riid,ppCommandQueue) \ - ( (This)->lpVtbl -> CreateCommandQueue(This,pDesc,riid,ppCommandQueue) ) - -#define ID3D12Device9_CreateCommandAllocator(This,type,riid,ppCommandAllocator) \ - ( (This)->lpVtbl -> CreateCommandAllocator(This,type,riid,ppCommandAllocator) ) - -#define ID3D12Device9_CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) ) - -#define ID3D12Device9_CreateComputePipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreateComputePipelineState(This,pDesc,riid,ppPipelineState) ) - -#define ID3D12Device9_CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) \ - ( (This)->lpVtbl -> CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) ) - -#define ID3D12Device9_CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) \ - ( (This)->lpVtbl -> CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) ) - -#define ID3D12Device9_CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) ) - -#define ID3D12Device9_GetDescriptorHandleIncrementSize(This,DescriptorHeapType) \ - ( (This)->lpVtbl -> GetDescriptorHandleIncrementSize(This,DescriptorHeapType) ) - -#define ID3D12Device9_CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) \ - ( (This)->lpVtbl -> CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) ) - -#define ID3D12Device9_CreateConstantBufferView(This,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateConstantBufferView(This,pDesc,DestDescriptor) ) - -#define ID3D12Device9_CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device9_CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) ) - -#define ID3D12Device9_CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device9_CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device9_CreateSampler(This,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateSampler(This,pDesc,DestDescriptor) ) - -#define ID3D12Device9_CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) \ - ( (This)->lpVtbl -> CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) ) - -#define ID3D12Device9_CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) \ - ( (This)->lpVtbl -> CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) ) -#if !defined(_WIN32) - -#define ID3D12Device9_GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) ) -#else -#define ID3D12Device9_GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) ) -#endif -#if !defined(_WIN32) - -#define ID3D12Device9_GetCustomHeapProperties(This,nodeMask,heapType) \ - ( (This)->lpVtbl -> GetCustomHeapProperties(This,nodeMask,heapType) ) -#else -#define ID3D12Device9_GetCustomHeapProperties(This,RetVal,nodeMask,heapType) \ - ( (This)->lpVtbl -> GetCustomHeapProperties(This,RetVal,nodeMask,heapType) ) -#endif - -#define ID3D12Device9_CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) \ - ( (This)->lpVtbl -> CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) ) - -#define ID3D12Device9_CreateHeap(This,pDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateHeap(This,pDesc,riid,ppvHeap) ) - -#define ID3D12Device9_CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) \ - ( (This)->lpVtbl -> CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) - -#define ID3D12Device9_CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) \ - ( (This)->lpVtbl -> CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) - -#define ID3D12Device9_CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) \ - ( (This)->lpVtbl -> CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) ) - -#define ID3D12Device9_OpenSharedHandle(This,NTHandle,riid,ppvObj) \ - ( (This)->lpVtbl -> OpenSharedHandle(This,NTHandle,riid,ppvObj) ) - -#define ID3D12Device9_OpenSharedHandleByName(This,Name,Access,pNTHandle) \ - ( (This)->lpVtbl -> OpenSharedHandleByName(This,Name,Access,pNTHandle) ) - -#define ID3D12Device9_MakeResident(This,NumObjects,ppObjects) \ - ( (This)->lpVtbl -> MakeResident(This,NumObjects,ppObjects) ) - -#define ID3D12Device9_Evict(This,NumObjects,ppObjects) \ - ( (This)->lpVtbl -> Evict(This,NumObjects,ppObjects) ) - -#define ID3D12Device9_CreateFence(This,InitialValue,Flags,riid,ppFence) \ - ( (This)->lpVtbl -> CreateFence(This,InitialValue,Flags,riid,ppFence) ) - -#define ID3D12Device9_GetDeviceRemovedReason(This) \ - ( (This)->lpVtbl -> GetDeviceRemovedReason(This) ) - -#define ID3D12Device9_GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) \ - ( (This)->lpVtbl -> GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) - -#define ID3D12Device9_CreateQueryHeap(This,pDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateQueryHeap(This,pDesc,riid,ppvHeap) ) - -#define ID3D12Device9_SetStablePowerState(This,Enable) \ - ( (This)->lpVtbl -> SetStablePowerState(This,Enable) ) - -#define ID3D12Device9_CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) \ - ( (This)->lpVtbl -> CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) ) - -#define ID3D12Device9_GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) \ - ( (This)->lpVtbl -> GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) ) -#if !defined(_WIN32) - -#define ID3D12Device9_GetAdapterLuid(This) \ - ( (This)->lpVtbl -> GetAdapterLuid(This) ) -#else -#define ID3D12Device9_GetAdapterLuid(This,RetVal) \ - ( (This)->lpVtbl -> GetAdapterLuid(This,RetVal) ) -#endif - -#define ID3D12Device9_CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) \ - ( (This)->lpVtbl -> CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) ) - -#define ID3D12Device9_SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) \ - ( (This)->lpVtbl -> SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) ) - -#define ID3D12Device9_SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) \ - ( (This)->lpVtbl -> SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) ) - -#define ID3D12Device9_CreatePipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreatePipelineState(This,pDesc,riid,ppPipelineState) ) - -#define ID3D12Device9_OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap) \ - ( (This)->lpVtbl -> OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap) ) - -#define ID3D12Device9_OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap) \ - ( (This)->lpVtbl -> OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap) ) - -#define ID3D12Device9_EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal) \ - ( (This)->lpVtbl -> EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal) ) - -#define ID3D12Device9_CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList) \ - ( (This)->lpVtbl -> CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList) ) - -#define ID3D12Device9_CreateProtectedResourceSession(This,pDesc,riid,ppSession) \ - ( (This)->lpVtbl -> CreateProtectedResourceSession(This,pDesc,riid,ppSession) ) - -#define ID3D12Device9_CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) \ - ( (This)->lpVtbl -> CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) ) - -#define ID3D12Device9_CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap) ) - -#define ID3D12Device9_CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource) \ - ( (This)->lpVtbl -> CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource) ) -#if !defined(_WIN32) - -#define ID3D12Device9_GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) -#else -#define ID3D12Device9_GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) -#endif - -#define ID3D12Device9_CreateLifetimeTracker(This,pOwner,riid,ppvTracker) \ - ( (This)->lpVtbl -> CreateLifetimeTracker(This,pOwner,riid,ppvTracker) ) - -#define ID3D12Device9_RemoveDevice(This) \ - ( (This)->lpVtbl -> RemoveDevice(This) ) - -#define ID3D12Device9_EnumerateMetaCommands(This,pNumMetaCommands,pDescs) \ - ( (This)->lpVtbl -> EnumerateMetaCommands(This,pNumMetaCommands,pDescs) ) - -#define ID3D12Device9_EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs) \ - ( (This)->lpVtbl -> EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs) ) - -#define ID3D12Device9_CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand) \ - ( (This)->lpVtbl -> CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand) ) - -#define ID3D12Device9_CreateStateObject(This,pDesc,riid,ppStateObject) \ - ( (This)->lpVtbl -> CreateStateObject(This,pDesc,riid,ppStateObject) ) - -#define ID3D12Device9_GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo) \ - ( (This)->lpVtbl -> GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo) ) - -#define ID3D12Device9_CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck) \ - ( (This)->lpVtbl -> CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck) ) - -#define ID3D12Device9_SetBackgroundProcessingMode(This,Mode,MeasurementsAction,hEventToSignalUponCompletion,pbFurtherMeasurementsDesired) \ - ( (This)->lpVtbl -> SetBackgroundProcessingMode(This,Mode,MeasurementsAction,hEventToSignalUponCompletion,pbFurtherMeasurementsDesired) ) - -#define ID3D12Device9_AddToStateObject(This,pAddition,pStateObjectToGrowFrom,riid,ppNewStateObject) \ - ( (This)->lpVtbl -> AddToStateObject(This,pAddition,pStateObjectToGrowFrom,riid,ppNewStateObject) ) - -#define ID3D12Device9_CreateProtectedResourceSession1(This,pDesc,riid,ppSession) \ - ( (This)->lpVtbl -> CreateProtectedResourceSession1(This,pDesc,riid,ppSession) ) - -#if !defined(_WIN32) - -#define ID3D12Device9_GetResourceAllocationInfo2(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo2(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) -#else -#define ID3D12Device9_GetResourceAllocationInfo2(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo2(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) -#endif - -#define ID3D12Device9_CreateCommittedResource2(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) \ - ( (This)->lpVtbl -> CreateCommittedResource2(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) ) - -#define ID3D12Device9_CreatePlacedResource1(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) \ - ( (This)->lpVtbl -> CreatePlacedResource1(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) - -#define ID3D12Device9_CreateSamplerFeedbackUnorderedAccessView(This,pTargetedResource,pFeedbackResource,DestDescriptor) \ - ( (This)->lpVtbl -> CreateSamplerFeedbackUnorderedAccessView(This,pTargetedResource,pFeedbackResource,DestDescriptor) ) - -#define ID3D12Device9_GetCopyableFootprints1(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) \ - ( (This)->lpVtbl -> GetCopyableFootprints1(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) - -#define ID3D12Device9_CreateShaderCacheSession(This,pDesc,riid,ppvSession) \ - ( (This)->lpVtbl -> CreateShaderCacheSession(This,pDesc,riid,ppvSession) ) - -#define ID3D12Device9_ShaderCacheControl(This,Kinds,Control) \ - ( (This)->lpVtbl -> ShaderCacheControl(This,Kinds,Control) ) - -#define ID3D12Device9_CreateCommandQueue1(This,pDesc,CreatorID,riid,ppCommandQueue) \ - ( (This)->lpVtbl -> CreateCommandQueue1(This,pDesc,CreatorID,riid,ppCommandQueue) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12Device9_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12Device10_INTERFACE_DEFINED__ -#define __ID3D12Device10_INTERFACE_DEFINED__ - -/* interface ID3D12Device10 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12Device10; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("517f8718-aa66-49f9-b02b-a7ab89c06031") - ID3D12Device10 : public ID3D12Device9 - { - public: - virtual HRESULT STDMETHODCALLTYPE CreateCommittedResource3( - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC1 *pDesc, - D3D12_BARRIER_LAYOUT InitialLayout, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - UINT32 NumCastableFormats, - _In_opt_count_(NumCastableFormats) const DXGI_FORMAT *pCastableFormats, - REFIID riidResource, - _COM_Outptr_opt_ void **ppvResource) = 0; - - virtual HRESULT STDMETHODCALLTYPE CreatePlacedResource2( - _In_ ID3D12Heap *pHeap, - UINT64 HeapOffset, - _In_ const D3D12_RESOURCE_DESC1 *pDesc, - D3D12_BARRIER_LAYOUT InitialLayout, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - UINT32 NumCastableFormats, - _In_opt_count_(NumCastableFormats) const DXGI_FORMAT *pCastableFormats, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource) = 0; - - virtual HRESULT STDMETHODCALLTYPE CreateReservedResource2( - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_BARRIER_LAYOUT InitialLayout, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - UINT32 NumCastableFormats, - _In_opt_count_(NumCastableFormats) const DXGI_FORMAT *pCastableFormats, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12Device10Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12Device10 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12Device10 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12Device10 * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12Device10 * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12Device10 * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12Device10 * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12Device10 * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12Device, GetNodeCount) - UINT ( STDMETHODCALLTYPE *GetNodeCount )( - ID3D12Device10 * This); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandQueue) - HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue )( - ID3D12Device10 * This, - _In_ const D3D12_COMMAND_QUEUE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppCommandQueue); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandAllocator) - HRESULT ( STDMETHODCALLTYPE *CreateCommandAllocator )( - ID3D12Device10 * This, - _In_ D3D12_COMMAND_LIST_TYPE type, - REFIID riid, - _COM_Outptr_ void **ppCommandAllocator); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateGraphicsPipelineState) - HRESULT ( STDMETHODCALLTYPE *CreateGraphicsPipelineState )( - ID3D12Device10 * This, - _In_ const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateComputePipelineState) - HRESULT ( STDMETHODCALLTYPE *CreateComputePipelineState )( - ID3D12Device10 * This, - _In_ const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandList) - HRESULT ( STDMETHODCALLTYPE *CreateCommandList )( - ID3D12Device10 * This, - _In_ UINT nodeMask, - _In_ D3D12_COMMAND_LIST_TYPE type, - _In_ ID3D12CommandAllocator *pCommandAllocator, - _In_opt_ ID3D12PipelineState *pInitialState, - REFIID riid, - _COM_Outptr_ void **ppCommandList); - - DECLSPEC_XFGVIRT(ID3D12Device, CheckFeatureSupport) - HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )( - ID3D12Device10 * This, - D3D12_FEATURE Feature, - _Inout_updates_bytes_(FeatureSupportDataSize) void *pFeatureSupportData, - UINT FeatureSupportDataSize); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateDescriptorHeap) - HRESULT ( STDMETHODCALLTYPE *CreateDescriptorHeap )( - ID3D12Device10 * This, - _In_ const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc, - REFIID riid, - _COM_Outptr_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, GetDescriptorHandleIncrementSize) - UINT ( STDMETHODCALLTYPE *GetDescriptorHandleIncrementSize )( - ID3D12Device10 * This, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateRootSignature) - HRESULT ( STDMETHODCALLTYPE *CreateRootSignature )( - ID3D12Device10 * This, - _In_ UINT nodeMask, - _In_reads_(blobLengthInBytes) const void *pBlobWithRootSignature, - _In_ SIZE_T blobLengthInBytes, - REFIID riid, - _COM_Outptr_ void **ppvRootSignature); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateConstantBufferView) - void ( STDMETHODCALLTYPE *CreateConstantBufferView )( - ID3D12Device10 * This, - _In_opt_ const D3D12_CONSTANT_BUFFER_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateShaderResourceView) - void ( STDMETHODCALLTYPE *CreateShaderResourceView )( - ID3D12Device10 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateUnorderedAccessView) - void ( STDMETHODCALLTYPE *CreateUnorderedAccessView )( - ID3D12Device10 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ ID3D12Resource *pCounterResource, - _In_opt_ const D3D12_UNORDERED_ACCESS_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateRenderTargetView) - void ( STDMETHODCALLTYPE *CreateRenderTargetView )( - ID3D12Device10 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_RENDER_TARGET_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateDepthStencilView) - void ( STDMETHODCALLTYPE *CreateDepthStencilView )( - ID3D12Device10 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DEPTH_STENCIL_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateSampler) - void ( STDMETHODCALLTYPE *CreateSampler )( - ID3D12Device10 * This, - _In_ const D3D12_SAMPLER_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptors) - void ( STDMETHODCALLTYPE *CopyDescriptors )( - ID3D12Device10 * This, - _In_ UINT NumDestDescriptorRanges, - _In_reads_(NumDestDescriptorRanges) const D3D12_CPU_DESCRIPTOR_HANDLE *pDestDescriptorRangeStarts, - _In_reads_opt_(NumDestDescriptorRanges) const UINT *pDestDescriptorRangeSizes, - _In_ UINT NumSrcDescriptorRanges, - _In_reads_(NumSrcDescriptorRanges) const D3D12_CPU_DESCRIPTOR_HANDLE *pSrcDescriptorRangeStarts, - _In_reads_opt_(NumSrcDescriptorRanges) const UINT *pSrcDescriptorRangeSizes, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType); - - DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptorsSimple) - void ( STDMETHODCALLTYPE *CopyDescriptorsSimple )( - ID3D12Device10 * This, - _In_ UINT NumDescriptors, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType); - - DECLSPEC_XFGVIRT(ID3D12Device, GetResourceAllocationInfo) -#if !defined(_WIN32) - D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo )( - ID3D12Device10 * This, - _In_ UINT visibleMask, - _In_ UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs); - -#else - D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo )( - ID3D12Device10 * This, - D3D12_RESOURCE_ALLOCATION_INFO * RetVal, - _In_ UINT visibleMask, - _In_ UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device, GetCustomHeapProperties) -#if !defined(_WIN32) - D3D12_HEAP_PROPERTIES ( STDMETHODCALLTYPE *GetCustomHeapProperties )( - ID3D12Device10 * This, - _In_ UINT nodeMask, - D3D12_HEAP_TYPE heapType); - -#else - D3D12_HEAP_PROPERTIES *( STDMETHODCALLTYPE *GetCustomHeapProperties )( - ID3D12Device10 * This, - D3D12_HEAP_PROPERTIES * RetVal, - _In_ UINT nodeMask, - D3D12_HEAP_TYPE heapType); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommittedResource) - HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource )( - ID3D12Device10 * This, - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialResourceState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riidResource, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateHeap) - HRESULT ( STDMETHODCALLTYPE *CreateHeap )( - ID3D12Device10 * This, - _In_ const D3D12_HEAP_DESC *pDesc, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, CreatePlacedResource) - HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource )( - ID3D12Device10 * This, - _In_ ID3D12Heap *pHeap, - UINT64 HeapOffset, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateReservedResource) - HRESULT ( STDMETHODCALLTYPE *CreateReservedResource )( - ID3D12Device10 * This, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateSharedHandle) - HRESULT ( STDMETHODCALLTYPE *CreateSharedHandle )( - ID3D12Device10 * This, - _In_ ID3D12DeviceChild *pObject, - _In_opt_ const SECURITY_ATTRIBUTES *pAttributes, - DWORD Access, - _In_opt_ LPCWSTR Name, - _Out_ HANDLE *pHandle); - - DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandle) - HRESULT ( STDMETHODCALLTYPE *OpenSharedHandle )( - ID3D12Device10 * This, - _In_ HANDLE NTHandle, - REFIID riid, - _COM_Outptr_opt_ void **ppvObj); - - DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandleByName) - HRESULT ( STDMETHODCALLTYPE *OpenSharedHandleByName )( - ID3D12Device10 * This, - _In_ LPCWSTR Name, - DWORD Access, - /* [annotation][out] */ - _Out_ HANDLE *pNTHandle); - - DECLSPEC_XFGVIRT(ID3D12Device, MakeResident) - HRESULT ( STDMETHODCALLTYPE *MakeResident )( - ID3D12Device10 * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects); - - DECLSPEC_XFGVIRT(ID3D12Device, Evict) - HRESULT ( STDMETHODCALLTYPE *Evict )( - ID3D12Device10 * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateFence) - HRESULT ( STDMETHODCALLTYPE *CreateFence )( - ID3D12Device10 * This, - UINT64 InitialValue, - D3D12_FENCE_FLAGS Flags, - REFIID riid, - _COM_Outptr_ void **ppFence); - - DECLSPEC_XFGVIRT(ID3D12Device, GetDeviceRemovedReason) - HRESULT ( STDMETHODCALLTYPE *GetDeviceRemovedReason )( - ID3D12Device10 * This); - - DECLSPEC_XFGVIRT(ID3D12Device, GetCopyableFootprints) - void ( STDMETHODCALLTYPE *GetCopyableFootprints )( - ID3D12Device10 * This, - _In_ const D3D12_RESOURCE_DESC *pResourceDesc, - _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, - _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, - UINT64 BaseOffset, - _Out_writes_opt_(NumSubresources) D3D12_PLACED_SUBRESOURCE_FOOTPRINT *pLayouts, - _Out_writes_opt_(NumSubresources) UINT *pNumRows, - _Out_writes_opt_(NumSubresources) UINT64 *pRowSizeInBytes, - _Out_opt_ UINT64 *pTotalBytes); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateQueryHeap) - HRESULT ( STDMETHODCALLTYPE *CreateQueryHeap )( - ID3D12Device10 * This, - _In_ const D3D12_QUERY_HEAP_DESC *pDesc, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, SetStablePowerState) - HRESULT ( STDMETHODCALLTYPE *SetStablePowerState )( - ID3D12Device10 * This, - BOOL Enable); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandSignature) - HRESULT ( STDMETHODCALLTYPE *CreateCommandSignature )( - ID3D12Device10 * This, - _In_ const D3D12_COMMAND_SIGNATURE_DESC *pDesc, - _In_opt_ ID3D12RootSignature *pRootSignature, - REFIID riid, - _COM_Outptr_opt_ void **ppvCommandSignature); - - DECLSPEC_XFGVIRT(ID3D12Device, GetResourceTiling) - void ( STDMETHODCALLTYPE *GetResourceTiling )( - ID3D12Device10 * This, - _In_ ID3D12Resource *pTiledResource, - _Out_opt_ UINT *pNumTilesForEntireResource, - _Out_opt_ D3D12_PACKED_MIP_INFO *pPackedMipDesc, - _Out_opt_ D3D12_TILE_SHAPE *pStandardTileShapeForNonPackedMips, - _Inout_opt_ UINT *pNumSubresourceTilings, - _In_ UINT FirstSubresourceTilingToGet, - _Out_writes_(*pNumSubresourceTilings) D3D12_SUBRESOURCE_TILING *pSubresourceTilingsForNonPackedMips); - - DECLSPEC_XFGVIRT(ID3D12Device, GetAdapterLuid) -#if !defined(_WIN32) - LUID ( STDMETHODCALLTYPE *GetAdapterLuid )( - ID3D12Device10 * This); - -#else - LUID *( STDMETHODCALLTYPE *GetAdapterLuid )( - ID3D12Device10 * This, - LUID * RetVal); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device1, CreatePipelineLibrary) - HRESULT ( STDMETHODCALLTYPE *CreatePipelineLibrary )( - ID3D12Device10 * This, - _In_reads_(BlobLength) const void *pLibraryBlob, - SIZE_T BlobLength, - REFIID riid, - _COM_Outptr_ void **ppPipelineLibrary); - - DECLSPEC_XFGVIRT(ID3D12Device1, SetEventOnMultipleFenceCompletion) - HRESULT ( STDMETHODCALLTYPE *SetEventOnMultipleFenceCompletion )( - ID3D12Device10 * This, - _In_reads_(NumFences) ID3D12Fence *const *ppFences, - _In_reads_(NumFences) const UINT64 *pFenceValues, - UINT NumFences, - D3D12_MULTIPLE_FENCE_WAIT_FLAGS Flags, - HANDLE hEvent); - - DECLSPEC_XFGVIRT(ID3D12Device1, SetResidencyPriority) - HRESULT ( STDMETHODCALLTYPE *SetResidencyPriority )( - ID3D12Device10 * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects, - _In_reads_(NumObjects) const D3D12_RESIDENCY_PRIORITY *pPriorities); - - DECLSPEC_XFGVIRT(ID3D12Device2, CreatePipelineState) - HRESULT ( STDMETHODCALLTYPE *CreatePipelineState )( - ID3D12Device10 * This, - const D3D12_PIPELINE_STATE_STREAM_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromAddress) - HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromAddress )( - ID3D12Device10 * This, - _In_ const void *pAddress, - REFIID riid, - _COM_Outptr_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromFileMapping) - HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromFileMapping )( - ID3D12Device10 * This, - _In_ HANDLE hFileMapping, - REFIID riid, - _COM_Outptr_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device3, EnqueueMakeResident) - HRESULT ( STDMETHODCALLTYPE *EnqueueMakeResident )( - ID3D12Device10 * This, - D3D12_RESIDENCY_FLAGS Flags, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects, - _In_ ID3D12Fence *pFenceToSignal, - UINT64 FenceValueToSignal); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommandList1) - HRESULT ( STDMETHODCALLTYPE *CreateCommandList1 )( - ID3D12Device10 * This, - _In_ UINT nodeMask, - _In_ D3D12_COMMAND_LIST_TYPE type, - _In_ D3D12_COMMAND_LIST_FLAGS flags, - REFIID riid, - _COM_Outptr_ void **ppCommandList); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateProtectedResourceSession) - HRESULT ( STDMETHODCALLTYPE *CreateProtectedResourceSession )( - ID3D12Device10 * This, - _In_ const D3D12_PROTECTED_RESOURCE_SESSION_DESC *pDesc, - _In_ REFIID riid, - _COM_Outptr_ void **ppSession); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommittedResource1) - HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource1 )( - ID3D12Device10 * This, - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialResourceState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riidResource, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateHeap1) - HRESULT ( STDMETHODCALLTYPE *CreateHeap1 )( - ID3D12Device10 * This, - _In_ const D3D12_HEAP_DESC *pDesc, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateReservedResource1) - HRESULT ( STDMETHODCALLTYPE *CreateReservedResource1 )( - ID3D12Device10 * This, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device4, GetResourceAllocationInfo1) -#if !defined(_WIN32) - D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( - ID3D12Device10 * This, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); - -#else - D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( - ID3D12Device10 * This, - D3D12_RESOURCE_ALLOCATION_INFO * RetVal, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device5, CreateLifetimeTracker) - HRESULT ( STDMETHODCALLTYPE *CreateLifetimeTracker )( - ID3D12Device10 * This, - _In_ ID3D12LifetimeOwner *pOwner, - REFIID riid, - _COM_Outptr_ void **ppvTracker); - - DECLSPEC_XFGVIRT(ID3D12Device5, RemoveDevice) - void ( STDMETHODCALLTYPE *RemoveDevice )( - ID3D12Device10 * This); - - DECLSPEC_XFGVIRT(ID3D12Device5, EnumerateMetaCommands) - HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommands )( - ID3D12Device10 * This, - _Inout_ UINT *pNumMetaCommands, - _Out_writes_opt_(*pNumMetaCommands) D3D12_META_COMMAND_DESC *pDescs); - - DECLSPEC_XFGVIRT(ID3D12Device5, EnumerateMetaCommandParameters) - HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommandParameters )( - ID3D12Device10 * This, - _In_ REFGUID CommandId, - _In_ D3D12_META_COMMAND_PARAMETER_STAGE Stage, - _Out_opt_ UINT *pTotalStructureSizeInBytes, - _Inout_ UINT *pParameterCount, - _Out_writes_opt_(*pParameterCount) D3D12_META_COMMAND_PARAMETER_DESC *pParameterDescs); - - DECLSPEC_XFGVIRT(ID3D12Device5, CreateMetaCommand) - HRESULT ( STDMETHODCALLTYPE *CreateMetaCommand )( - ID3D12Device10 * This, - _In_ REFGUID CommandId, - _In_ UINT NodeMask, - _In_reads_bytes_opt_(CreationParametersDataSizeInBytes) const void *pCreationParametersData, - _In_ SIZE_T CreationParametersDataSizeInBytes, - REFIID riid, - _COM_Outptr_ void **ppMetaCommand); - - DECLSPEC_XFGVIRT(ID3D12Device5, CreateStateObject) - HRESULT ( STDMETHODCALLTYPE *CreateStateObject )( - ID3D12Device10 * This, - const D3D12_STATE_OBJECT_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppStateObject); - - DECLSPEC_XFGVIRT(ID3D12Device5, GetRaytracingAccelerationStructurePrebuildInfo) - void ( STDMETHODCALLTYPE *GetRaytracingAccelerationStructurePrebuildInfo )( - ID3D12Device10 * This, - _In_ const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS *pDesc, - _Out_ D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO *pInfo); - - DECLSPEC_XFGVIRT(ID3D12Device5, CheckDriverMatchingIdentifier) - D3D12_DRIVER_MATCHING_IDENTIFIER_STATUS ( STDMETHODCALLTYPE *CheckDriverMatchingIdentifier )( - ID3D12Device10 * This, - _In_ D3D12_SERIALIZED_DATA_TYPE SerializedDataType, - _In_ const D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER *pIdentifierToCheck); - - DECLSPEC_XFGVIRT(ID3D12Device6, SetBackgroundProcessingMode) - HRESULT ( STDMETHODCALLTYPE *SetBackgroundProcessingMode )( - ID3D12Device10 * This, - D3D12_BACKGROUND_PROCESSING_MODE Mode, - D3D12_MEASUREMENTS_ACTION MeasurementsAction, - _In_opt_ HANDLE hEventToSignalUponCompletion, - _Out_opt_ BOOL *pbFurtherMeasurementsDesired); - - DECLSPEC_XFGVIRT(ID3D12Device7, AddToStateObject) - HRESULT ( STDMETHODCALLTYPE *AddToStateObject )( - ID3D12Device10 * This, - const D3D12_STATE_OBJECT_DESC *pAddition, - ID3D12StateObject *pStateObjectToGrowFrom, - REFIID riid, - _COM_Outptr_ void **ppNewStateObject); - - DECLSPEC_XFGVIRT(ID3D12Device7, CreateProtectedResourceSession1) - HRESULT ( STDMETHODCALLTYPE *CreateProtectedResourceSession1 )( - ID3D12Device10 * This, - _In_ const D3D12_PROTECTED_RESOURCE_SESSION_DESC1 *pDesc, - _In_ REFIID riid, - _COM_Outptr_ void **ppSession); - - DECLSPEC_XFGVIRT(ID3D12Device8, GetResourceAllocationInfo2) -#if !defined(_WIN32) - D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo2 )( - ID3D12Device10 * This, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC1 *pResourceDescs, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); - -#else - D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo2 )( - ID3D12Device10 * This, - D3D12_RESOURCE_ALLOCATION_INFO * RetVal, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC1 *pResourceDescs, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device8, CreateCommittedResource2) - HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource2 )( - ID3D12Device10 * This, - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC1 *pDesc, - D3D12_RESOURCE_STATES InitialResourceState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riidResource, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device8, CreatePlacedResource1) - HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource1 )( - ID3D12Device10 * This, - _In_ ID3D12Heap *pHeap, - UINT64 HeapOffset, - _In_ const D3D12_RESOURCE_DESC1 *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device8, CreateSamplerFeedbackUnorderedAccessView) - void ( STDMETHODCALLTYPE *CreateSamplerFeedbackUnorderedAccessView )( - ID3D12Device10 * This, - _In_opt_ ID3D12Resource *pTargetedResource, - _In_opt_ ID3D12Resource *pFeedbackResource, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device8, GetCopyableFootprints1) - void ( STDMETHODCALLTYPE *GetCopyableFootprints1 )( - ID3D12Device10 * This, - _In_ const D3D12_RESOURCE_DESC1 *pResourceDesc, - _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, - _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, - UINT64 BaseOffset, - _Out_writes_opt_(NumSubresources) D3D12_PLACED_SUBRESOURCE_FOOTPRINT *pLayouts, - _Out_writes_opt_(NumSubresources) UINT *pNumRows, - _Out_writes_opt_(NumSubresources) UINT64 *pRowSizeInBytes, - _Out_opt_ UINT64 *pTotalBytes); - - DECLSPEC_XFGVIRT(ID3D12Device9, CreateShaderCacheSession) - HRESULT ( STDMETHODCALLTYPE *CreateShaderCacheSession )( - ID3D12Device10 * This, - _In_ const D3D12_SHADER_CACHE_SESSION_DESC *pDesc, - REFIID riid, - _COM_Outptr_opt_ void **ppvSession); - - DECLSPEC_XFGVIRT(ID3D12Device9, ShaderCacheControl) - HRESULT ( STDMETHODCALLTYPE *ShaderCacheControl )( - ID3D12Device10 * This, - D3D12_SHADER_CACHE_KIND_FLAGS Kinds, - D3D12_SHADER_CACHE_CONTROL_FLAGS Control); - - DECLSPEC_XFGVIRT(ID3D12Device9, CreateCommandQueue1) - HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue1 )( - ID3D12Device10 * This, - _In_ const D3D12_COMMAND_QUEUE_DESC *pDesc, - REFIID CreatorID, - REFIID riid, - _COM_Outptr_ void **ppCommandQueue); - - DECLSPEC_XFGVIRT(ID3D12Device10, CreateCommittedResource3) - HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource3 )( - ID3D12Device10 * This, - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC1 *pDesc, - D3D12_BARRIER_LAYOUT InitialLayout, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - UINT32 NumCastableFormats, - _In_opt_count_(NumCastableFormats) const DXGI_FORMAT *pCastableFormats, - REFIID riidResource, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device10, CreatePlacedResource2) - HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource2 )( - ID3D12Device10 * This, - _In_ ID3D12Heap *pHeap, - UINT64 HeapOffset, - _In_ const D3D12_RESOURCE_DESC1 *pDesc, - D3D12_BARRIER_LAYOUT InitialLayout, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - UINT32 NumCastableFormats, - _In_opt_count_(NumCastableFormats) const DXGI_FORMAT *pCastableFormats, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device10, CreateReservedResource2) - HRESULT ( STDMETHODCALLTYPE *CreateReservedResource2 )( - ID3D12Device10 * This, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_BARRIER_LAYOUT InitialLayout, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - UINT32 NumCastableFormats, - _In_opt_count_(NumCastableFormats) const DXGI_FORMAT *pCastableFormats, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - END_INTERFACE - } ID3D12Device10Vtbl; - - interface ID3D12Device10 - { - CONST_VTBL struct ID3D12Device10Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12Device10_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12Device10_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12Device10_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12Device10_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12Device10_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12Device10_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12Device10_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12Device10_GetNodeCount(This) \ - ( (This)->lpVtbl -> GetNodeCount(This) ) - -#define ID3D12Device10_CreateCommandQueue(This,pDesc,riid,ppCommandQueue) \ - ( (This)->lpVtbl -> CreateCommandQueue(This,pDesc,riid,ppCommandQueue) ) - -#define ID3D12Device10_CreateCommandAllocator(This,type,riid,ppCommandAllocator) \ - ( (This)->lpVtbl -> CreateCommandAllocator(This,type,riid,ppCommandAllocator) ) - -#define ID3D12Device10_CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) ) - -#define ID3D12Device10_CreateComputePipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreateComputePipelineState(This,pDesc,riid,ppPipelineState) ) - -#define ID3D12Device10_CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) \ - ( (This)->lpVtbl -> CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) ) - -#define ID3D12Device10_CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) \ - ( (This)->lpVtbl -> CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) ) - -#define ID3D12Device10_CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) ) - -#define ID3D12Device10_GetDescriptorHandleIncrementSize(This,DescriptorHeapType) \ - ( (This)->lpVtbl -> GetDescriptorHandleIncrementSize(This,DescriptorHeapType) ) - -#define ID3D12Device10_CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) \ - ( (This)->lpVtbl -> CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) ) - -#define ID3D12Device10_CreateConstantBufferView(This,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateConstantBufferView(This,pDesc,DestDescriptor) ) - -#define ID3D12Device10_CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device10_CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) ) - -#define ID3D12Device10_CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device10_CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device10_CreateSampler(This,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateSampler(This,pDesc,DestDescriptor) ) - -#define ID3D12Device10_CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) \ - ( (This)->lpVtbl -> CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) ) - -#define ID3D12Device10_CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) \ - ( (This)->lpVtbl -> CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) ) -#if !defined(_WIN32) - -#define ID3D12Device10_GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) ) -#else -#define ID3D12Device10_GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) ) -#endif -#if !defined(_WIN32) - -#define ID3D12Device10_GetCustomHeapProperties(This,nodeMask,heapType) \ - ( (This)->lpVtbl -> GetCustomHeapProperties(This,nodeMask,heapType) ) -#else -#define ID3D12Device10_GetCustomHeapProperties(This,RetVal,nodeMask,heapType) \ - ( (This)->lpVtbl -> GetCustomHeapProperties(This,RetVal,nodeMask,heapType) ) -#endif - -#define ID3D12Device10_CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) \ - ( (This)->lpVtbl -> CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) ) - -#define ID3D12Device10_CreateHeap(This,pDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateHeap(This,pDesc,riid,ppvHeap) ) - -#define ID3D12Device10_CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) \ - ( (This)->lpVtbl -> CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) - -#define ID3D12Device10_CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) \ - ( (This)->lpVtbl -> CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) - -#define ID3D12Device10_CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) \ - ( (This)->lpVtbl -> CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) ) - -#define ID3D12Device10_OpenSharedHandle(This,NTHandle,riid,ppvObj) \ - ( (This)->lpVtbl -> OpenSharedHandle(This,NTHandle,riid,ppvObj) ) - -#define ID3D12Device10_OpenSharedHandleByName(This,Name,Access,pNTHandle) \ - ( (This)->lpVtbl -> OpenSharedHandleByName(This,Name,Access,pNTHandle) ) - -#define ID3D12Device10_MakeResident(This,NumObjects,ppObjects) \ - ( (This)->lpVtbl -> MakeResident(This,NumObjects,ppObjects) ) - -#define ID3D12Device10_Evict(This,NumObjects,ppObjects) \ - ( (This)->lpVtbl -> Evict(This,NumObjects,ppObjects) ) - -#define ID3D12Device10_CreateFence(This,InitialValue,Flags,riid,ppFence) \ - ( (This)->lpVtbl -> CreateFence(This,InitialValue,Flags,riid,ppFence) ) - -#define ID3D12Device10_GetDeviceRemovedReason(This) \ - ( (This)->lpVtbl -> GetDeviceRemovedReason(This) ) - -#define ID3D12Device10_GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) \ - ( (This)->lpVtbl -> GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) - -#define ID3D12Device10_CreateQueryHeap(This,pDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateQueryHeap(This,pDesc,riid,ppvHeap) ) - -#define ID3D12Device10_SetStablePowerState(This,Enable) \ - ( (This)->lpVtbl -> SetStablePowerState(This,Enable) ) - -#define ID3D12Device10_CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) \ - ( (This)->lpVtbl -> CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) ) - -#define ID3D12Device10_GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) \ - ( (This)->lpVtbl -> GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) ) -#if !defined(_WIN32) - -#define ID3D12Device10_GetAdapterLuid(This) \ - ( (This)->lpVtbl -> GetAdapterLuid(This) ) -#else -#define ID3D12Device10_GetAdapterLuid(This,RetVal) \ - ( (This)->lpVtbl -> GetAdapterLuid(This,RetVal) ) -#endif - -#define ID3D12Device10_CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) \ - ( (This)->lpVtbl -> CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) ) - -#define ID3D12Device10_SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) \ - ( (This)->lpVtbl -> SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) ) - -#define ID3D12Device10_SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) \ - ( (This)->lpVtbl -> SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) ) - -#define ID3D12Device10_CreatePipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreatePipelineState(This,pDesc,riid,ppPipelineState) ) - -#define ID3D12Device10_OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap) \ - ( (This)->lpVtbl -> OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap) ) - -#define ID3D12Device10_OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap) \ - ( (This)->lpVtbl -> OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap) ) - -#define ID3D12Device10_EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal) \ - ( (This)->lpVtbl -> EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal) ) - -#define ID3D12Device10_CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList) \ - ( (This)->lpVtbl -> CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList) ) - -#define ID3D12Device10_CreateProtectedResourceSession(This,pDesc,riid,ppSession) \ - ( (This)->lpVtbl -> CreateProtectedResourceSession(This,pDesc,riid,ppSession) ) - -#define ID3D12Device10_CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) \ - ( (This)->lpVtbl -> CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) ) - -#define ID3D12Device10_CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap) ) - -#define ID3D12Device10_CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource) \ - ( (This)->lpVtbl -> CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource) ) -#if !defined(_WIN32) - -#define ID3D12Device10_GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) -#else -#define ID3D12Device10_GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) -#endif - -#define ID3D12Device10_CreateLifetimeTracker(This,pOwner,riid,ppvTracker) \ - ( (This)->lpVtbl -> CreateLifetimeTracker(This,pOwner,riid,ppvTracker) ) - -#define ID3D12Device10_RemoveDevice(This) \ - ( (This)->lpVtbl -> RemoveDevice(This) ) - -#define ID3D12Device10_EnumerateMetaCommands(This,pNumMetaCommands,pDescs) \ - ( (This)->lpVtbl -> EnumerateMetaCommands(This,pNumMetaCommands,pDescs) ) - -#define ID3D12Device10_EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs) \ - ( (This)->lpVtbl -> EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs) ) - -#define ID3D12Device10_CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand) \ - ( (This)->lpVtbl -> CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand) ) - -#define ID3D12Device10_CreateStateObject(This,pDesc,riid,ppStateObject) \ - ( (This)->lpVtbl -> CreateStateObject(This,pDesc,riid,ppStateObject) ) - -#define ID3D12Device10_GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo) \ - ( (This)->lpVtbl -> GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo) ) - -#define ID3D12Device10_CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck) \ - ( (This)->lpVtbl -> CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck) ) - -#define ID3D12Device10_SetBackgroundProcessingMode(This,Mode,MeasurementsAction,hEventToSignalUponCompletion,pbFurtherMeasurementsDesired) \ - ( (This)->lpVtbl -> SetBackgroundProcessingMode(This,Mode,MeasurementsAction,hEventToSignalUponCompletion,pbFurtherMeasurementsDesired) ) - -#define ID3D12Device10_AddToStateObject(This,pAddition,pStateObjectToGrowFrom,riid,ppNewStateObject) \ - ( (This)->lpVtbl -> AddToStateObject(This,pAddition,pStateObjectToGrowFrom,riid,ppNewStateObject) ) - -#define ID3D12Device10_CreateProtectedResourceSession1(This,pDesc,riid,ppSession) \ - ( (This)->lpVtbl -> CreateProtectedResourceSession1(This,pDesc,riid,ppSession) ) - -#if !defined(_WIN32) - -#define ID3D12Device10_GetResourceAllocationInfo2(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo2(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) -#else -#define ID3D12Device10_GetResourceAllocationInfo2(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo2(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) -#endif - -#define ID3D12Device10_CreateCommittedResource2(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) \ - ( (This)->lpVtbl -> CreateCommittedResource2(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) ) - -#define ID3D12Device10_CreatePlacedResource1(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) \ - ( (This)->lpVtbl -> CreatePlacedResource1(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) - -#define ID3D12Device10_CreateSamplerFeedbackUnorderedAccessView(This,pTargetedResource,pFeedbackResource,DestDescriptor) \ - ( (This)->lpVtbl -> CreateSamplerFeedbackUnorderedAccessView(This,pTargetedResource,pFeedbackResource,DestDescriptor) ) - -#define ID3D12Device10_GetCopyableFootprints1(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) \ - ( (This)->lpVtbl -> GetCopyableFootprints1(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) - -#define ID3D12Device10_CreateShaderCacheSession(This,pDesc,riid,ppvSession) \ - ( (This)->lpVtbl -> CreateShaderCacheSession(This,pDesc,riid,ppvSession) ) - -#define ID3D12Device10_ShaderCacheControl(This,Kinds,Control) \ - ( (This)->lpVtbl -> ShaderCacheControl(This,Kinds,Control) ) - -#define ID3D12Device10_CreateCommandQueue1(This,pDesc,CreatorID,riid,ppCommandQueue) \ - ( (This)->lpVtbl -> CreateCommandQueue1(This,pDesc,CreatorID,riid,ppCommandQueue) ) - -#define ID3D12Device10_CreateCommittedResource3(This,pHeapProperties,HeapFlags,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riidResource,ppvResource) \ - ( (This)->lpVtbl -> CreateCommittedResource3(This,pHeapProperties,HeapFlags,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riidResource,ppvResource) ) - -#define ID3D12Device10_CreatePlacedResource2(This,pHeap,HeapOffset,pDesc,InitialLayout,pOptimizedClearValue,NumCastableFormats,pCastableFormats,riid,ppvResource) \ - ( (This)->lpVtbl -> CreatePlacedResource2(This,pHeap,HeapOffset,pDesc,InitialLayout,pOptimizedClearValue,NumCastableFormats,pCastableFormats,riid,ppvResource) ) - -#define ID3D12Device10_CreateReservedResource2(This,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riid,ppvResource) \ - ( (This)->lpVtbl -> CreateReservedResource2(This,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riid,ppvResource) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12Device10_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12Device11_INTERFACE_DEFINED__ -#define __ID3D12Device11_INTERFACE_DEFINED__ - -/* interface ID3D12Device11 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12Device11; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("5405c344-d457-444e-b4dd-2366e45aee39") - ID3D12Device11 : public ID3D12Device10 - { - public: - virtual void STDMETHODCALLTYPE CreateSampler2( - _In_ const D3D12_SAMPLER_DESC2 *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12Device11Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12Device11 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12Device11 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12Device11 * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12Device11 * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12Device11 * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12Device11 * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12Device11 * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12Device, GetNodeCount) - UINT ( STDMETHODCALLTYPE *GetNodeCount )( - ID3D12Device11 * This); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandQueue) - HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue )( - ID3D12Device11 * This, - _In_ const D3D12_COMMAND_QUEUE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppCommandQueue); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandAllocator) - HRESULT ( STDMETHODCALLTYPE *CreateCommandAllocator )( - ID3D12Device11 * This, - _In_ D3D12_COMMAND_LIST_TYPE type, - REFIID riid, - _COM_Outptr_ void **ppCommandAllocator); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateGraphicsPipelineState) - HRESULT ( STDMETHODCALLTYPE *CreateGraphicsPipelineState )( - ID3D12Device11 * This, - _In_ const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateComputePipelineState) - HRESULT ( STDMETHODCALLTYPE *CreateComputePipelineState )( - ID3D12Device11 * This, - _In_ const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandList) - HRESULT ( STDMETHODCALLTYPE *CreateCommandList )( - ID3D12Device11 * This, - _In_ UINT nodeMask, - _In_ D3D12_COMMAND_LIST_TYPE type, - _In_ ID3D12CommandAllocator *pCommandAllocator, - _In_opt_ ID3D12PipelineState *pInitialState, - REFIID riid, - _COM_Outptr_ void **ppCommandList); - - DECLSPEC_XFGVIRT(ID3D12Device, CheckFeatureSupport) - HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )( - ID3D12Device11 * This, - D3D12_FEATURE Feature, - _Inout_updates_bytes_(FeatureSupportDataSize) void *pFeatureSupportData, - UINT FeatureSupportDataSize); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateDescriptorHeap) - HRESULT ( STDMETHODCALLTYPE *CreateDescriptorHeap )( - ID3D12Device11 * This, - _In_ const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc, - REFIID riid, - _COM_Outptr_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, GetDescriptorHandleIncrementSize) - UINT ( STDMETHODCALLTYPE *GetDescriptorHandleIncrementSize )( - ID3D12Device11 * This, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateRootSignature) - HRESULT ( STDMETHODCALLTYPE *CreateRootSignature )( - ID3D12Device11 * This, - _In_ UINT nodeMask, - _In_reads_(blobLengthInBytes) const void *pBlobWithRootSignature, - _In_ SIZE_T blobLengthInBytes, - REFIID riid, - _COM_Outptr_ void **ppvRootSignature); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateConstantBufferView) - void ( STDMETHODCALLTYPE *CreateConstantBufferView )( - ID3D12Device11 * This, - _In_opt_ const D3D12_CONSTANT_BUFFER_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateShaderResourceView) - void ( STDMETHODCALLTYPE *CreateShaderResourceView )( - ID3D12Device11 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateUnorderedAccessView) - void ( STDMETHODCALLTYPE *CreateUnorderedAccessView )( - ID3D12Device11 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ ID3D12Resource *pCounterResource, - _In_opt_ const D3D12_UNORDERED_ACCESS_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateRenderTargetView) - void ( STDMETHODCALLTYPE *CreateRenderTargetView )( - ID3D12Device11 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_RENDER_TARGET_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateDepthStencilView) - void ( STDMETHODCALLTYPE *CreateDepthStencilView )( - ID3D12Device11 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DEPTH_STENCIL_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateSampler) - void ( STDMETHODCALLTYPE *CreateSampler )( - ID3D12Device11 * This, - _In_ const D3D12_SAMPLER_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptors) - void ( STDMETHODCALLTYPE *CopyDescriptors )( - ID3D12Device11 * This, - _In_ UINT NumDestDescriptorRanges, - _In_reads_(NumDestDescriptorRanges) const D3D12_CPU_DESCRIPTOR_HANDLE *pDestDescriptorRangeStarts, - _In_reads_opt_(NumDestDescriptorRanges) const UINT *pDestDescriptorRangeSizes, - _In_ UINT NumSrcDescriptorRanges, - _In_reads_(NumSrcDescriptorRanges) const D3D12_CPU_DESCRIPTOR_HANDLE *pSrcDescriptorRangeStarts, - _In_reads_opt_(NumSrcDescriptorRanges) const UINT *pSrcDescriptorRangeSizes, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType); - - DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptorsSimple) - void ( STDMETHODCALLTYPE *CopyDescriptorsSimple )( - ID3D12Device11 * This, - _In_ UINT NumDescriptors, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType); - - DECLSPEC_XFGVIRT(ID3D12Device, GetResourceAllocationInfo) -#if !defined(_WIN32) - D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo )( - ID3D12Device11 * This, - _In_ UINT visibleMask, - _In_ UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs); - -#else - D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo )( - ID3D12Device11 * This, - D3D12_RESOURCE_ALLOCATION_INFO * RetVal, - _In_ UINT visibleMask, - _In_ UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device, GetCustomHeapProperties) -#if !defined(_WIN32) - D3D12_HEAP_PROPERTIES ( STDMETHODCALLTYPE *GetCustomHeapProperties )( - ID3D12Device11 * This, - _In_ UINT nodeMask, - D3D12_HEAP_TYPE heapType); - -#else - D3D12_HEAP_PROPERTIES *( STDMETHODCALLTYPE *GetCustomHeapProperties )( - ID3D12Device11 * This, - D3D12_HEAP_PROPERTIES * RetVal, - _In_ UINT nodeMask, - D3D12_HEAP_TYPE heapType); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommittedResource) - HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource )( - ID3D12Device11 * This, - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialResourceState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riidResource, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateHeap) - HRESULT ( STDMETHODCALLTYPE *CreateHeap )( - ID3D12Device11 * This, - _In_ const D3D12_HEAP_DESC *pDesc, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, CreatePlacedResource) - HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource )( - ID3D12Device11 * This, - _In_ ID3D12Heap *pHeap, - UINT64 HeapOffset, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateReservedResource) - HRESULT ( STDMETHODCALLTYPE *CreateReservedResource )( - ID3D12Device11 * This, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateSharedHandle) - HRESULT ( STDMETHODCALLTYPE *CreateSharedHandle )( - ID3D12Device11 * This, - _In_ ID3D12DeviceChild *pObject, - _In_opt_ const SECURITY_ATTRIBUTES *pAttributes, - DWORD Access, - _In_opt_ LPCWSTR Name, - _Out_ HANDLE *pHandle); - - DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandle) - HRESULT ( STDMETHODCALLTYPE *OpenSharedHandle )( - ID3D12Device11 * This, - _In_ HANDLE NTHandle, - REFIID riid, - _COM_Outptr_opt_ void **ppvObj); - - DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandleByName) - HRESULT ( STDMETHODCALLTYPE *OpenSharedHandleByName )( - ID3D12Device11 * This, - _In_ LPCWSTR Name, - DWORD Access, - /* [annotation][out] */ - _Out_ HANDLE *pNTHandle); - - DECLSPEC_XFGVIRT(ID3D12Device, MakeResident) - HRESULT ( STDMETHODCALLTYPE *MakeResident )( - ID3D12Device11 * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects); - - DECLSPEC_XFGVIRT(ID3D12Device, Evict) - HRESULT ( STDMETHODCALLTYPE *Evict )( - ID3D12Device11 * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateFence) - HRESULT ( STDMETHODCALLTYPE *CreateFence )( - ID3D12Device11 * This, - UINT64 InitialValue, - D3D12_FENCE_FLAGS Flags, - REFIID riid, - _COM_Outptr_ void **ppFence); - - DECLSPEC_XFGVIRT(ID3D12Device, GetDeviceRemovedReason) - HRESULT ( STDMETHODCALLTYPE *GetDeviceRemovedReason )( - ID3D12Device11 * This); - - DECLSPEC_XFGVIRT(ID3D12Device, GetCopyableFootprints) - void ( STDMETHODCALLTYPE *GetCopyableFootprints )( - ID3D12Device11 * This, - _In_ const D3D12_RESOURCE_DESC *pResourceDesc, - _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, - _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, - UINT64 BaseOffset, - _Out_writes_opt_(NumSubresources) D3D12_PLACED_SUBRESOURCE_FOOTPRINT *pLayouts, - _Out_writes_opt_(NumSubresources) UINT *pNumRows, - _Out_writes_opt_(NumSubresources) UINT64 *pRowSizeInBytes, - _Out_opt_ UINT64 *pTotalBytes); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateQueryHeap) - HRESULT ( STDMETHODCALLTYPE *CreateQueryHeap )( - ID3D12Device11 * This, - _In_ const D3D12_QUERY_HEAP_DESC *pDesc, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, SetStablePowerState) - HRESULT ( STDMETHODCALLTYPE *SetStablePowerState )( - ID3D12Device11 * This, - BOOL Enable); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandSignature) - HRESULT ( STDMETHODCALLTYPE *CreateCommandSignature )( - ID3D12Device11 * This, - _In_ const D3D12_COMMAND_SIGNATURE_DESC *pDesc, - _In_opt_ ID3D12RootSignature *pRootSignature, - REFIID riid, - _COM_Outptr_opt_ void **ppvCommandSignature); - - DECLSPEC_XFGVIRT(ID3D12Device, GetResourceTiling) - void ( STDMETHODCALLTYPE *GetResourceTiling )( - ID3D12Device11 * This, - _In_ ID3D12Resource *pTiledResource, - _Out_opt_ UINT *pNumTilesForEntireResource, - _Out_opt_ D3D12_PACKED_MIP_INFO *pPackedMipDesc, - _Out_opt_ D3D12_TILE_SHAPE *pStandardTileShapeForNonPackedMips, - _Inout_opt_ UINT *pNumSubresourceTilings, - _In_ UINT FirstSubresourceTilingToGet, - _Out_writes_(*pNumSubresourceTilings) D3D12_SUBRESOURCE_TILING *pSubresourceTilingsForNonPackedMips); - - DECLSPEC_XFGVIRT(ID3D12Device, GetAdapterLuid) -#if !defined(_WIN32) - LUID ( STDMETHODCALLTYPE *GetAdapterLuid )( - ID3D12Device11 * This); - -#else - LUID *( STDMETHODCALLTYPE *GetAdapterLuid )( - ID3D12Device11 * This, - LUID * RetVal); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device1, CreatePipelineLibrary) - HRESULT ( STDMETHODCALLTYPE *CreatePipelineLibrary )( - ID3D12Device11 * This, - _In_reads_(BlobLength) const void *pLibraryBlob, - SIZE_T BlobLength, - REFIID riid, - _COM_Outptr_ void **ppPipelineLibrary); - - DECLSPEC_XFGVIRT(ID3D12Device1, SetEventOnMultipleFenceCompletion) - HRESULT ( STDMETHODCALLTYPE *SetEventOnMultipleFenceCompletion )( - ID3D12Device11 * This, - _In_reads_(NumFences) ID3D12Fence *const *ppFences, - _In_reads_(NumFences) const UINT64 *pFenceValues, - UINT NumFences, - D3D12_MULTIPLE_FENCE_WAIT_FLAGS Flags, - HANDLE hEvent); - - DECLSPEC_XFGVIRT(ID3D12Device1, SetResidencyPriority) - HRESULT ( STDMETHODCALLTYPE *SetResidencyPriority )( - ID3D12Device11 * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects, - _In_reads_(NumObjects) const D3D12_RESIDENCY_PRIORITY *pPriorities); - - DECLSPEC_XFGVIRT(ID3D12Device2, CreatePipelineState) - HRESULT ( STDMETHODCALLTYPE *CreatePipelineState )( - ID3D12Device11 * This, - const D3D12_PIPELINE_STATE_STREAM_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromAddress) - HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromAddress )( - ID3D12Device11 * This, - _In_ const void *pAddress, - REFIID riid, - _COM_Outptr_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromFileMapping) - HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromFileMapping )( - ID3D12Device11 * This, - _In_ HANDLE hFileMapping, - REFIID riid, - _COM_Outptr_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device3, EnqueueMakeResident) - HRESULT ( STDMETHODCALLTYPE *EnqueueMakeResident )( - ID3D12Device11 * This, - D3D12_RESIDENCY_FLAGS Flags, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects, - _In_ ID3D12Fence *pFenceToSignal, - UINT64 FenceValueToSignal); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommandList1) - HRESULT ( STDMETHODCALLTYPE *CreateCommandList1 )( - ID3D12Device11 * This, - _In_ UINT nodeMask, - _In_ D3D12_COMMAND_LIST_TYPE type, - _In_ D3D12_COMMAND_LIST_FLAGS flags, - REFIID riid, - _COM_Outptr_ void **ppCommandList); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateProtectedResourceSession) - HRESULT ( STDMETHODCALLTYPE *CreateProtectedResourceSession )( - ID3D12Device11 * This, - _In_ const D3D12_PROTECTED_RESOURCE_SESSION_DESC *pDesc, - _In_ REFIID riid, - _COM_Outptr_ void **ppSession); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommittedResource1) - HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource1 )( - ID3D12Device11 * This, - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialResourceState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riidResource, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateHeap1) - HRESULT ( STDMETHODCALLTYPE *CreateHeap1 )( - ID3D12Device11 * This, - _In_ const D3D12_HEAP_DESC *pDesc, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateReservedResource1) - HRESULT ( STDMETHODCALLTYPE *CreateReservedResource1 )( - ID3D12Device11 * This, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device4, GetResourceAllocationInfo1) -#if !defined(_WIN32) - D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( - ID3D12Device11 * This, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); - -#else - D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( - ID3D12Device11 * This, - D3D12_RESOURCE_ALLOCATION_INFO * RetVal, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device5, CreateLifetimeTracker) - HRESULT ( STDMETHODCALLTYPE *CreateLifetimeTracker )( - ID3D12Device11 * This, - _In_ ID3D12LifetimeOwner *pOwner, - REFIID riid, - _COM_Outptr_ void **ppvTracker); - - DECLSPEC_XFGVIRT(ID3D12Device5, RemoveDevice) - void ( STDMETHODCALLTYPE *RemoveDevice )( - ID3D12Device11 * This); - - DECLSPEC_XFGVIRT(ID3D12Device5, EnumerateMetaCommands) - HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommands )( - ID3D12Device11 * This, - _Inout_ UINT *pNumMetaCommands, - _Out_writes_opt_(*pNumMetaCommands) D3D12_META_COMMAND_DESC *pDescs); - - DECLSPEC_XFGVIRT(ID3D12Device5, EnumerateMetaCommandParameters) - HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommandParameters )( - ID3D12Device11 * This, - _In_ REFGUID CommandId, - _In_ D3D12_META_COMMAND_PARAMETER_STAGE Stage, - _Out_opt_ UINT *pTotalStructureSizeInBytes, - _Inout_ UINT *pParameterCount, - _Out_writes_opt_(*pParameterCount) D3D12_META_COMMAND_PARAMETER_DESC *pParameterDescs); - - DECLSPEC_XFGVIRT(ID3D12Device5, CreateMetaCommand) - HRESULT ( STDMETHODCALLTYPE *CreateMetaCommand )( - ID3D12Device11 * This, - _In_ REFGUID CommandId, - _In_ UINT NodeMask, - _In_reads_bytes_opt_(CreationParametersDataSizeInBytes) const void *pCreationParametersData, - _In_ SIZE_T CreationParametersDataSizeInBytes, - REFIID riid, - _COM_Outptr_ void **ppMetaCommand); - - DECLSPEC_XFGVIRT(ID3D12Device5, CreateStateObject) - HRESULT ( STDMETHODCALLTYPE *CreateStateObject )( - ID3D12Device11 * This, - const D3D12_STATE_OBJECT_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppStateObject); - - DECLSPEC_XFGVIRT(ID3D12Device5, GetRaytracingAccelerationStructurePrebuildInfo) - void ( STDMETHODCALLTYPE *GetRaytracingAccelerationStructurePrebuildInfo )( - ID3D12Device11 * This, - _In_ const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS *pDesc, - _Out_ D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO *pInfo); - - DECLSPEC_XFGVIRT(ID3D12Device5, CheckDriverMatchingIdentifier) - D3D12_DRIVER_MATCHING_IDENTIFIER_STATUS ( STDMETHODCALLTYPE *CheckDriverMatchingIdentifier )( - ID3D12Device11 * This, - _In_ D3D12_SERIALIZED_DATA_TYPE SerializedDataType, - _In_ const D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER *pIdentifierToCheck); - - DECLSPEC_XFGVIRT(ID3D12Device6, SetBackgroundProcessingMode) - HRESULT ( STDMETHODCALLTYPE *SetBackgroundProcessingMode )( - ID3D12Device11 * This, - D3D12_BACKGROUND_PROCESSING_MODE Mode, - D3D12_MEASUREMENTS_ACTION MeasurementsAction, - _In_opt_ HANDLE hEventToSignalUponCompletion, - _Out_opt_ BOOL *pbFurtherMeasurementsDesired); - - DECLSPEC_XFGVIRT(ID3D12Device7, AddToStateObject) - HRESULT ( STDMETHODCALLTYPE *AddToStateObject )( - ID3D12Device11 * This, - const D3D12_STATE_OBJECT_DESC *pAddition, - ID3D12StateObject *pStateObjectToGrowFrom, - REFIID riid, - _COM_Outptr_ void **ppNewStateObject); - - DECLSPEC_XFGVIRT(ID3D12Device7, CreateProtectedResourceSession1) - HRESULT ( STDMETHODCALLTYPE *CreateProtectedResourceSession1 )( - ID3D12Device11 * This, - _In_ const D3D12_PROTECTED_RESOURCE_SESSION_DESC1 *pDesc, - _In_ REFIID riid, - _COM_Outptr_ void **ppSession); - - DECLSPEC_XFGVIRT(ID3D12Device8, GetResourceAllocationInfo2) -#if !defined(_WIN32) - D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo2 )( - ID3D12Device11 * This, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC1 *pResourceDescs, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); - -#else - D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo2 )( - ID3D12Device11 * This, - D3D12_RESOURCE_ALLOCATION_INFO * RetVal, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC1 *pResourceDescs, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device8, CreateCommittedResource2) - HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource2 )( - ID3D12Device11 * This, - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC1 *pDesc, - D3D12_RESOURCE_STATES InitialResourceState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riidResource, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device8, CreatePlacedResource1) - HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource1 )( - ID3D12Device11 * This, - _In_ ID3D12Heap *pHeap, - UINT64 HeapOffset, - _In_ const D3D12_RESOURCE_DESC1 *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device8, CreateSamplerFeedbackUnorderedAccessView) - void ( STDMETHODCALLTYPE *CreateSamplerFeedbackUnorderedAccessView )( - ID3D12Device11 * This, - _In_opt_ ID3D12Resource *pTargetedResource, - _In_opt_ ID3D12Resource *pFeedbackResource, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device8, GetCopyableFootprints1) - void ( STDMETHODCALLTYPE *GetCopyableFootprints1 )( - ID3D12Device11 * This, - _In_ const D3D12_RESOURCE_DESC1 *pResourceDesc, - _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, - _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, - UINT64 BaseOffset, - _Out_writes_opt_(NumSubresources) D3D12_PLACED_SUBRESOURCE_FOOTPRINT *pLayouts, - _Out_writes_opt_(NumSubresources) UINT *pNumRows, - _Out_writes_opt_(NumSubresources) UINT64 *pRowSizeInBytes, - _Out_opt_ UINT64 *pTotalBytes); - - DECLSPEC_XFGVIRT(ID3D12Device9, CreateShaderCacheSession) - HRESULT ( STDMETHODCALLTYPE *CreateShaderCacheSession )( - ID3D12Device11 * This, - _In_ const D3D12_SHADER_CACHE_SESSION_DESC *pDesc, - REFIID riid, - _COM_Outptr_opt_ void **ppvSession); - - DECLSPEC_XFGVIRT(ID3D12Device9, ShaderCacheControl) - HRESULT ( STDMETHODCALLTYPE *ShaderCacheControl )( - ID3D12Device11 * This, - D3D12_SHADER_CACHE_KIND_FLAGS Kinds, - D3D12_SHADER_CACHE_CONTROL_FLAGS Control); - - DECLSPEC_XFGVIRT(ID3D12Device9, CreateCommandQueue1) - HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue1 )( - ID3D12Device11 * This, - _In_ const D3D12_COMMAND_QUEUE_DESC *pDesc, - REFIID CreatorID, - REFIID riid, - _COM_Outptr_ void **ppCommandQueue); - - DECLSPEC_XFGVIRT(ID3D12Device10, CreateCommittedResource3) - HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource3 )( - ID3D12Device11 * This, - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC1 *pDesc, - D3D12_BARRIER_LAYOUT InitialLayout, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - UINT32 NumCastableFormats, - _In_opt_count_(NumCastableFormats) const DXGI_FORMAT *pCastableFormats, - REFIID riidResource, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device10, CreatePlacedResource2) - HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource2 )( - ID3D12Device11 * This, - _In_ ID3D12Heap *pHeap, - UINT64 HeapOffset, - _In_ const D3D12_RESOURCE_DESC1 *pDesc, - D3D12_BARRIER_LAYOUT InitialLayout, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - UINT32 NumCastableFormats, - _In_opt_count_(NumCastableFormats) const DXGI_FORMAT *pCastableFormats, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device10, CreateReservedResource2) - HRESULT ( STDMETHODCALLTYPE *CreateReservedResource2 )( - ID3D12Device11 * This, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_BARRIER_LAYOUT InitialLayout, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - UINT32 NumCastableFormats, - _In_opt_count_(NumCastableFormats) const DXGI_FORMAT *pCastableFormats, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device11, CreateSampler2) - void ( STDMETHODCALLTYPE *CreateSampler2 )( - ID3D12Device11 * This, - _In_ const D3D12_SAMPLER_DESC2 *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - END_INTERFACE - } ID3D12Device11Vtbl; - - interface ID3D12Device11 - { - CONST_VTBL struct ID3D12Device11Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12Device11_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12Device11_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12Device11_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12Device11_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12Device11_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12Device11_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12Device11_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12Device11_GetNodeCount(This) \ - ( (This)->lpVtbl -> GetNodeCount(This) ) - -#define ID3D12Device11_CreateCommandQueue(This,pDesc,riid,ppCommandQueue) \ - ( (This)->lpVtbl -> CreateCommandQueue(This,pDesc,riid,ppCommandQueue) ) - -#define ID3D12Device11_CreateCommandAllocator(This,type,riid,ppCommandAllocator) \ - ( (This)->lpVtbl -> CreateCommandAllocator(This,type,riid,ppCommandAllocator) ) - -#define ID3D12Device11_CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) ) - -#define ID3D12Device11_CreateComputePipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreateComputePipelineState(This,pDesc,riid,ppPipelineState) ) - -#define ID3D12Device11_CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) \ - ( (This)->lpVtbl -> CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) ) - -#define ID3D12Device11_CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) \ - ( (This)->lpVtbl -> CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) ) - -#define ID3D12Device11_CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) ) - -#define ID3D12Device11_GetDescriptorHandleIncrementSize(This,DescriptorHeapType) \ - ( (This)->lpVtbl -> GetDescriptorHandleIncrementSize(This,DescriptorHeapType) ) - -#define ID3D12Device11_CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) \ - ( (This)->lpVtbl -> CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) ) - -#define ID3D12Device11_CreateConstantBufferView(This,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateConstantBufferView(This,pDesc,DestDescriptor) ) - -#define ID3D12Device11_CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device11_CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) ) - -#define ID3D12Device11_CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device11_CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device11_CreateSampler(This,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateSampler(This,pDesc,DestDescriptor) ) - -#define ID3D12Device11_CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) \ - ( (This)->lpVtbl -> CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) ) - -#define ID3D12Device11_CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) \ - ( (This)->lpVtbl -> CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) ) -#if !defined(_WIN32) - -#define ID3D12Device11_GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) ) -#else -#define ID3D12Device11_GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) ) -#endif -#if !defined(_WIN32) - -#define ID3D12Device11_GetCustomHeapProperties(This,nodeMask,heapType) \ - ( (This)->lpVtbl -> GetCustomHeapProperties(This,nodeMask,heapType) ) -#else -#define ID3D12Device11_GetCustomHeapProperties(This,RetVal,nodeMask,heapType) \ - ( (This)->lpVtbl -> GetCustomHeapProperties(This,RetVal,nodeMask,heapType) ) -#endif - -#define ID3D12Device11_CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) \ - ( (This)->lpVtbl -> CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) ) - -#define ID3D12Device11_CreateHeap(This,pDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateHeap(This,pDesc,riid,ppvHeap) ) - -#define ID3D12Device11_CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) \ - ( (This)->lpVtbl -> CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) - -#define ID3D12Device11_CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) \ - ( (This)->lpVtbl -> CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) - -#define ID3D12Device11_CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) \ - ( (This)->lpVtbl -> CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) ) - -#define ID3D12Device11_OpenSharedHandle(This,NTHandle,riid,ppvObj) \ - ( (This)->lpVtbl -> OpenSharedHandle(This,NTHandle,riid,ppvObj) ) - -#define ID3D12Device11_OpenSharedHandleByName(This,Name,Access,pNTHandle) \ - ( (This)->lpVtbl -> OpenSharedHandleByName(This,Name,Access,pNTHandle) ) - -#define ID3D12Device11_MakeResident(This,NumObjects,ppObjects) \ - ( (This)->lpVtbl -> MakeResident(This,NumObjects,ppObjects) ) - -#define ID3D12Device11_Evict(This,NumObjects,ppObjects) \ - ( (This)->lpVtbl -> Evict(This,NumObjects,ppObjects) ) - -#define ID3D12Device11_CreateFence(This,InitialValue,Flags,riid,ppFence) \ - ( (This)->lpVtbl -> CreateFence(This,InitialValue,Flags,riid,ppFence) ) - -#define ID3D12Device11_GetDeviceRemovedReason(This) \ - ( (This)->lpVtbl -> GetDeviceRemovedReason(This) ) - -#define ID3D12Device11_GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) \ - ( (This)->lpVtbl -> GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) - -#define ID3D12Device11_CreateQueryHeap(This,pDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateQueryHeap(This,pDesc,riid,ppvHeap) ) - -#define ID3D12Device11_SetStablePowerState(This,Enable) \ - ( (This)->lpVtbl -> SetStablePowerState(This,Enable) ) - -#define ID3D12Device11_CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) \ - ( (This)->lpVtbl -> CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) ) - -#define ID3D12Device11_GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) \ - ( (This)->lpVtbl -> GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) ) -#if !defined(_WIN32) - -#define ID3D12Device11_GetAdapterLuid(This) \ - ( (This)->lpVtbl -> GetAdapterLuid(This) ) -#else -#define ID3D12Device11_GetAdapterLuid(This,RetVal) \ - ( (This)->lpVtbl -> GetAdapterLuid(This,RetVal) ) -#endif - -#define ID3D12Device11_CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) \ - ( (This)->lpVtbl -> CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) ) - -#define ID3D12Device11_SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) \ - ( (This)->lpVtbl -> SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) ) - -#define ID3D12Device11_SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) \ - ( (This)->lpVtbl -> SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) ) - -#define ID3D12Device11_CreatePipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreatePipelineState(This,pDesc,riid,ppPipelineState) ) - -#define ID3D12Device11_OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap) \ - ( (This)->lpVtbl -> OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap) ) - -#define ID3D12Device11_OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap) \ - ( (This)->lpVtbl -> OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap) ) - -#define ID3D12Device11_EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal) \ - ( (This)->lpVtbl -> EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal) ) - -#define ID3D12Device11_CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList) \ - ( (This)->lpVtbl -> CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList) ) - -#define ID3D12Device11_CreateProtectedResourceSession(This,pDesc,riid,ppSession) \ - ( (This)->lpVtbl -> CreateProtectedResourceSession(This,pDesc,riid,ppSession) ) - -#define ID3D12Device11_CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) \ - ( (This)->lpVtbl -> CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) ) - -#define ID3D12Device11_CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap) ) - -#define ID3D12Device11_CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource) \ - ( (This)->lpVtbl -> CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource) ) -#if !defined(_WIN32) - -#define ID3D12Device11_GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) -#else -#define ID3D12Device11_GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) -#endif - -#define ID3D12Device11_CreateLifetimeTracker(This,pOwner,riid,ppvTracker) \ - ( (This)->lpVtbl -> CreateLifetimeTracker(This,pOwner,riid,ppvTracker) ) - -#define ID3D12Device11_RemoveDevice(This) \ - ( (This)->lpVtbl -> RemoveDevice(This) ) - -#define ID3D12Device11_EnumerateMetaCommands(This,pNumMetaCommands,pDescs) \ - ( (This)->lpVtbl -> EnumerateMetaCommands(This,pNumMetaCommands,pDescs) ) - -#define ID3D12Device11_EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs) \ - ( (This)->lpVtbl -> EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs) ) - -#define ID3D12Device11_CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand) \ - ( (This)->lpVtbl -> CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand) ) - -#define ID3D12Device11_CreateStateObject(This,pDesc,riid,ppStateObject) \ - ( (This)->lpVtbl -> CreateStateObject(This,pDesc,riid,ppStateObject) ) - -#define ID3D12Device11_GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo) \ - ( (This)->lpVtbl -> GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo) ) - -#define ID3D12Device11_CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck) \ - ( (This)->lpVtbl -> CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck) ) - -#define ID3D12Device11_SetBackgroundProcessingMode(This,Mode,MeasurementsAction,hEventToSignalUponCompletion,pbFurtherMeasurementsDesired) \ - ( (This)->lpVtbl -> SetBackgroundProcessingMode(This,Mode,MeasurementsAction,hEventToSignalUponCompletion,pbFurtherMeasurementsDesired) ) - -#define ID3D12Device11_AddToStateObject(This,pAddition,pStateObjectToGrowFrom,riid,ppNewStateObject) \ - ( (This)->lpVtbl -> AddToStateObject(This,pAddition,pStateObjectToGrowFrom,riid,ppNewStateObject) ) - -#define ID3D12Device11_CreateProtectedResourceSession1(This,pDesc,riid,ppSession) \ - ( (This)->lpVtbl -> CreateProtectedResourceSession1(This,pDesc,riid,ppSession) ) - -#if !defined(_WIN32) - -#define ID3D12Device11_GetResourceAllocationInfo2(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo2(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) -#else -#define ID3D12Device11_GetResourceAllocationInfo2(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo2(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) -#endif - -#define ID3D12Device11_CreateCommittedResource2(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) \ - ( (This)->lpVtbl -> CreateCommittedResource2(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) ) - -#define ID3D12Device11_CreatePlacedResource1(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) \ - ( (This)->lpVtbl -> CreatePlacedResource1(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) - -#define ID3D12Device11_CreateSamplerFeedbackUnorderedAccessView(This,pTargetedResource,pFeedbackResource,DestDescriptor) \ - ( (This)->lpVtbl -> CreateSamplerFeedbackUnorderedAccessView(This,pTargetedResource,pFeedbackResource,DestDescriptor) ) - -#define ID3D12Device11_GetCopyableFootprints1(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) \ - ( (This)->lpVtbl -> GetCopyableFootprints1(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) - -#define ID3D12Device11_CreateShaderCacheSession(This,pDesc,riid,ppvSession) \ - ( (This)->lpVtbl -> CreateShaderCacheSession(This,pDesc,riid,ppvSession) ) - -#define ID3D12Device11_ShaderCacheControl(This,Kinds,Control) \ - ( (This)->lpVtbl -> ShaderCacheControl(This,Kinds,Control) ) - -#define ID3D12Device11_CreateCommandQueue1(This,pDesc,CreatorID,riid,ppCommandQueue) \ - ( (This)->lpVtbl -> CreateCommandQueue1(This,pDesc,CreatorID,riid,ppCommandQueue) ) - -#define ID3D12Device11_CreateCommittedResource3(This,pHeapProperties,HeapFlags,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riidResource,ppvResource) \ - ( (This)->lpVtbl -> CreateCommittedResource3(This,pHeapProperties,HeapFlags,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riidResource,ppvResource) ) - -#define ID3D12Device11_CreatePlacedResource2(This,pHeap,HeapOffset,pDesc,InitialLayout,pOptimizedClearValue,NumCastableFormats,pCastableFormats,riid,ppvResource) \ - ( (This)->lpVtbl -> CreatePlacedResource2(This,pHeap,HeapOffset,pDesc,InitialLayout,pOptimizedClearValue,NumCastableFormats,pCastableFormats,riid,ppvResource) ) - -#define ID3D12Device11_CreateReservedResource2(This,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riid,ppvResource) \ - ( (This)->lpVtbl -> CreateReservedResource2(This,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riid,ppvResource) ) - -#define ID3D12Device11_CreateSampler2(This,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateSampler2(This,pDesc,DestDescriptor) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12Device11_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12Device12_INTERFACE_DEFINED__ -#define __ID3D12Device12_INTERFACE_DEFINED__ - -/* interface ID3D12Device12 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12Device12; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("5af5c532-4c91-4cd0-b541-15a405395fc5") - ID3D12Device12 : public ID3D12Device11 - { - public: -#if defined(_MSC_VER) || !defined(_WIN32) - virtual D3D12_RESOURCE_ALLOCATION_INFO STDMETHODCALLTYPE GetResourceAllocationInfo3( - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC1 *pResourceDescs, - _In_opt_count_(numResourceDescs) const UINT32 *pNumCastableFormats, - _In_opt_count_(numResourceDescs) const DXGI_FORMAT *const *ppCastableFormats, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1) = 0; -#else - virtual D3D12_RESOURCE_ALLOCATION_INFO *STDMETHODCALLTYPE GetResourceAllocationInfo3( - D3D12_RESOURCE_ALLOCATION_INFO * RetVal, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC1 *pResourceDescs, - _In_opt_count_(numResourceDescs) const UINT32 *pNumCastableFormats, - _In_opt_count_(numResourceDescs) const DXGI_FORMAT *const *ppCastableFormats, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1) = 0; -#endif - - }; - - -#else /* C style interface */ - - typedef struct ID3D12Device12Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12Device12 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12Device12 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12Device12 * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12Device12 * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12Device12 * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12Device12 * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12Device12 * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12Device, GetNodeCount) - UINT ( STDMETHODCALLTYPE *GetNodeCount )( - ID3D12Device12 * This); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandQueue) - HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue )( - ID3D12Device12 * This, - _In_ const D3D12_COMMAND_QUEUE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppCommandQueue); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandAllocator) - HRESULT ( STDMETHODCALLTYPE *CreateCommandAllocator )( - ID3D12Device12 * This, - _In_ D3D12_COMMAND_LIST_TYPE type, - REFIID riid, - _COM_Outptr_ void **ppCommandAllocator); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateGraphicsPipelineState) - HRESULT ( STDMETHODCALLTYPE *CreateGraphicsPipelineState )( - ID3D12Device12 * This, - _In_ const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateComputePipelineState) - HRESULT ( STDMETHODCALLTYPE *CreateComputePipelineState )( - ID3D12Device12 * This, - _In_ const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandList) - HRESULT ( STDMETHODCALLTYPE *CreateCommandList )( - ID3D12Device12 * This, - _In_ UINT nodeMask, - _In_ D3D12_COMMAND_LIST_TYPE type, - _In_ ID3D12CommandAllocator *pCommandAllocator, - _In_opt_ ID3D12PipelineState *pInitialState, - REFIID riid, - _COM_Outptr_ void **ppCommandList); - - DECLSPEC_XFGVIRT(ID3D12Device, CheckFeatureSupport) - HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )( - ID3D12Device12 * This, - D3D12_FEATURE Feature, - _Inout_updates_bytes_(FeatureSupportDataSize) void *pFeatureSupportData, - UINT FeatureSupportDataSize); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateDescriptorHeap) - HRESULT ( STDMETHODCALLTYPE *CreateDescriptorHeap )( - ID3D12Device12 * This, - _In_ const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc, - REFIID riid, - _COM_Outptr_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, GetDescriptorHandleIncrementSize) - UINT ( STDMETHODCALLTYPE *GetDescriptorHandleIncrementSize )( - ID3D12Device12 * This, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateRootSignature) - HRESULT ( STDMETHODCALLTYPE *CreateRootSignature )( - ID3D12Device12 * This, - _In_ UINT nodeMask, - _In_reads_(blobLengthInBytes) const void *pBlobWithRootSignature, - _In_ SIZE_T blobLengthInBytes, - REFIID riid, - _COM_Outptr_ void **ppvRootSignature); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateConstantBufferView) - void ( STDMETHODCALLTYPE *CreateConstantBufferView )( - ID3D12Device12 * This, - _In_opt_ const D3D12_CONSTANT_BUFFER_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateShaderResourceView) - void ( STDMETHODCALLTYPE *CreateShaderResourceView )( - ID3D12Device12 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateUnorderedAccessView) - void ( STDMETHODCALLTYPE *CreateUnorderedAccessView )( - ID3D12Device12 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ ID3D12Resource *pCounterResource, - _In_opt_ const D3D12_UNORDERED_ACCESS_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateRenderTargetView) - void ( STDMETHODCALLTYPE *CreateRenderTargetView )( - ID3D12Device12 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_RENDER_TARGET_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateDepthStencilView) - void ( STDMETHODCALLTYPE *CreateDepthStencilView )( - ID3D12Device12 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DEPTH_STENCIL_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateSampler) - void ( STDMETHODCALLTYPE *CreateSampler )( - ID3D12Device12 * This, - _In_ const D3D12_SAMPLER_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptors) - void ( STDMETHODCALLTYPE *CopyDescriptors )( - ID3D12Device12 * This, - _In_ UINT NumDestDescriptorRanges, - _In_reads_(NumDestDescriptorRanges) const D3D12_CPU_DESCRIPTOR_HANDLE *pDestDescriptorRangeStarts, - _In_reads_opt_(NumDestDescriptorRanges) const UINT *pDestDescriptorRangeSizes, - _In_ UINT NumSrcDescriptorRanges, - _In_reads_(NumSrcDescriptorRanges) const D3D12_CPU_DESCRIPTOR_HANDLE *pSrcDescriptorRangeStarts, - _In_reads_opt_(NumSrcDescriptorRanges) const UINT *pSrcDescriptorRangeSizes, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType); - - DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptorsSimple) - void ( STDMETHODCALLTYPE *CopyDescriptorsSimple )( - ID3D12Device12 * This, - _In_ UINT NumDescriptors, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType); - - DECLSPEC_XFGVIRT(ID3D12Device, GetResourceAllocationInfo) -#if !defined(_WIN32) - D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo )( - ID3D12Device12 * This, - _In_ UINT visibleMask, - _In_ UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs); - -#else - D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo )( - ID3D12Device12 * This, - D3D12_RESOURCE_ALLOCATION_INFO * RetVal, - _In_ UINT visibleMask, - _In_ UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device, GetCustomHeapProperties) -#if !defined(_WIN32) - D3D12_HEAP_PROPERTIES ( STDMETHODCALLTYPE *GetCustomHeapProperties )( - ID3D12Device12 * This, - _In_ UINT nodeMask, - D3D12_HEAP_TYPE heapType); - -#else - D3D12_HEAP_PROPERTIES *( STDMETHODCALLTYPE *GetCustomHeapProperties )( - ID3D12Device12 * This, - D3D12_HEAP_PROPERTIES * RetVal, - _In_ UINT nodeMask, - D3D12_HEAP_TYPE heapType); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommittedResource) - HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource )( - ID3D12Device12 * This, - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialResourceState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riidResource, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateHeap) - HRESULT ( STDMETHODCALLTYPE *CreateHeap )( - ID3D12Device12 * This, - _In_ const D3D12_HEAP_DESC *pDesc, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, CreatePlacedResource) - HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource )( - ID3D12Device12 * This, - _In_ ID3D12Heap *pHeap, - UINT64 HeapOffset, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateReservedResource) - HRESULT ( STDMETHODCALLTYPE *CreateReservedResource )( - ID3D12Device12 * This, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateSharedHandle) - HRESULT ( STDMETHODCALLTYPE *CreateSharedHandle )( - ID3D12Device12 * This, - _In_ ID3D12DeviceChild *pObject, - _In_opt_ const SECURITY_ATTRIBUTES *pAttributes, - DWORD Access, - _In_opt_ LPCWSTR Name, - _Out_ HANDLE *pHandle); - - DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandle) - HRESULT ( STDMETHODCALLTYPE *OpenSharedHandle )( - ID3D12Device12 * This, - _In_ HANDLE NTHandle, - REFIID riid, - _COM_Outptr_opt_ void **ppvObj); - - DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandleByName) - HRESULT ( STDMETHODCALLTYPE *OpenSharedHandleByName )( - ID3D12Device12 * This, - _In_ LPCWSTR Name, - DWORD Access, - /* [annotation][out] */ - _Out_ HANDLE *pNTHandle); - - DECLSPEC_XFGVIRT(ID3D12Device, MakeResident) - HRESULT ( STDMETHODCALLTYPE *MakeResident )( - ID3D12Device12 * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects); - - DECLSPEC_XFGVIRT(ID3D12Device, Evict) - HRESULT ( STDMETHODCALLTYPE *Evict )( - ID3D12Device12 * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateFence) - HRESULT ( STDMETHODCALLTYPE *CreateFence )( - ID3D12Device12 * This, - UINT64 InitialValue, - D3D12_FENCE_FLAGS Flags, - REFIID riid, - _COM_Outptr_ void **ppFence); - - DECLSPEC_XFGVIRT(ID3D12Device, GetDeviceRemovedReason) - HRESULT ( STDMETHODCALLTYPE *GetDeviceRemovedReason )( - ID3D12Device12 * This); - - DECLSPEC_XFGVIRT(ID3D12Device, GetCopyableFootprints) - void ( STDMETHODCALLTYPE *GetCopyableFootprints )( - ID3D12Device12 * This, - _In_ const D3D12_RESOURCE_DESC *pResourceDesc, - _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, - _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, - UINT64 BaseOffset, - _Out_writes_opt_(NumSubresources) D3D12_PLACED_SUBRESOURCE_FOOTPRINT *pLayouts, - _Out_writes_opt_(NumSubresources) UINT *pNumRows, - _Out_writes_opt_(NumSubresources) UINT64 *pRowSizeInBytes, - _Out_opt_ UINT64 *pTotalBytes); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateQueryHeap) - HRESULT ( STDMETHODCALLTYPE *CreateQueryHeap )( - ID3D12Device12 * This, - _In_ const D3D12_QUERY_HEAP_DESC *pDesc, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, SetStablePowerState) - HRESULT ( STDMETHODCALLTYPE *SetStablePowerState )( - ID3D12Device12 * This, - BOOL Enable); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandSignature) - HRESULT ( STDMETHODCALLTYPE *CreateCommandSignature )( - ID3D12Device12 * This, - _In_ const D3D12_COMMAND_SIGNATURE_DESC *pDesc, - _In_opt_ ID3D12RootSignature *pRootSignature, - REFIID riid, - _COM_Outptr_opt_ void **ppvCommandSignature); - - DECLSPEC_XFGVIRT(ID3D12Device, GetResourceTiling) - void ( STDMETHODCALLTYPE *GetResourceTiling )( - ID3D12Device12 * This, - _In_ ID3D12Resource *pTiledResource, - _Out_opt_ UINT *pNumTilesForEntireResource, - _Out_opt_ D3D12_PACKED_MIP_INFO *pPackedMipDesc, - _Out_opt_ D3D12_TILE_SHAPE *pStandardTileShapeForNonPackedMips, - _Inout_opt_ UINT *pNumSubresourceTilings, - _In_ UINT FirstSubresourceTilingToGet, - _Out_writes_(*pNumSubresourceTilings) D3D12_SUBRESOURCE_TILING *pSubresourceTilingsForNonPackedMips); - - DECLSPEC_XFGVIRT(ID3D12Device, GetAdapterLuid) -#if !defined(_WIN32) - LUID ( STDMETHODCALLTYPE *GetAdapterLuid )( - ID3D12Device12 * This); - -#else - LUID *( STDMETHODCALLTYPE *GetAdapterLuid )( - ID3D12Device12 * This, - LUID * RetVal); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device1, CreatePipelineLibrary) - HRESULT ( STDMETHODCALLTYPE *CreatePipelineLibrary )( - ID3D12Device12 * This, - _In_reads_(BlobLength) const void *pLibraryBlob, - SIZE_T BlobLength, - REFIID riid, - _COM_Outptr_ void **ppPipelineLibrary); - - DECLSPEC_XFGVIRT(ID3D12Device1, SetEventOnMultipleFenceCompletion) - HRESULT ( STDMETHODCALLTYPE *SetEventOnMultipleFenceCompletion )( - ID3D12Device12 * This, - _In_reads_(NumFences) ID3D12Fence *const *ppFences, - _In_reads_(NumFences) const UINT64 *pFenceValues, - UINT NumFences, - D3D12_MULTIPLE_FENCE_WAIT_FLAGS Flags, - HANDLE hEvent); - - DECLSPEC_XFGVIRT(ID3D12Device1, SetResidencyPriority) - HRESULT ( STDMETHODCALLTYPE *SetResidencyPriority )( - ID3D12Device12 * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects, - _In_reads_(NumObjects) const D3D12_RESIDENCY_PRIORITY *pPriorities); - - DECLSPEC_XFGVIRT(ID3D12Device2, CreatePipelineState) - HRESULT ( STDMETHODCALLTYPE *CreatePipelineState )( - ID3D12Device12 * This, - const D3D12_PIPELINE_STATE_STREAM_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromAddress) - HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromAddress )( - ID3D12Device12 * This, - _In_ const void *pAddress, - REFIID riid, - _COM_Outptr_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromFileMapping) - HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromFileMapping )( - ID3D12Device12 * This, - _In_ HANDLE hFileMapping, - REFIID riid, - _COM_Outptr_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device3, EnqueueMakeResident) - HRESULT ( STDMETHODCALLTYPE *EnqueueMakeResident )( - ID3D12Device12 * This, - D3D12_RESIDENCY_FLAGS Flags, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects, - _In_ ID3D12Fence *pFenceToSignal, - UINT64 FenceValueToSignal); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommandList1) - HRESULT ( STDMETHODCALLTYPE *CreateCommandList1 )( - ID3D12Device12 * This, - _In_ UINT nodeMask, - _In_ D3D12_COMMAND_LIST_TYPE type, - _In_ D3D12_COMMAND_LIST_FLAGS flags, - REFIID riid, - _COM_Outptr_ void **ppCommandList); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateProtectedResourceSession) - HRESULT ( STDMETHODCALLTYPE *CreateProtectedResourceSession )( - ID3D12Device12 * This, - _In_ const D3D12_PROTECTED_RESOURCE_SESSION_DESC *pDesc, - _In_ REFIID riid, - _COM_Outptr_ void **ppSession); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommittedResource1) - HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource1 )( - ID3D12Device12 * This, - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialResourceState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riidResource, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateHeap1) - HRESULT ( STDMETHODCALLTYPE *CreateHeap1 )( - ID3D12Device12 * This, - _In_ const D3D12_HEAP_DESC *pDesc, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateReservedResource1) - HRESULT ( STDMETHODCALLTYPE *CreateReservedResource1 )( - ID3D12Device12 * This, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device4, GetResourceAllocationInfo1) -#if !defined(_WIN32) - D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( - ID3D12Device12 * This, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); - -#else - D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( - ID3D12Device12 * This, - D3D12_RESOURCE_ALLOCATION_INFO * RetVal, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device5, CreateLifetimeTracker) - HRESULT ( STDMETHODCALLTYPE *CreateLifetimeTracker )( - ID3D12Device12 * This, - _In_ ID3D12LifetimeOwner *pOwner, - REFIID riid, - _COM_Outptr_ void **ppvTracker); - - DECLSPEC_XFGVIRT(ID3D12Device5, RemoveDevice) - void ( STDMETHODCALLTYPE *RemoveDevice )( - ID3D12Device12 * This); - - DECLSPEC_XFGVIRT(ID3D12Device5, EnumerateMetaCommands) - HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommands )( - ID3D12Device12 * This, - _Inout_ UINT *pNumMetaCommands, - _Out_writes_opt_(*pNumMetaCommands) D3D12_META_COMMAND_DESC *pDescs); - - DECLSPEC_XFGVIRT(ID3D12Device5, EnumerateMetaCommandParameters) - HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommandParameters )( - ID3D12Device12 * This, - _In_ REFGUID CommandId, - _In_ D3D12_META_COMMAND_PARAMETER_STAGE Stage, - _Out_opt_ UINT *pTotalStructureSizeInBytes, - _Inout_ UINT *pParameterCount, - _Out_writes_opt_(*pParameterCount) D3D12_META_COMMAND_PARAMETER_DESC *pParameterDescs); - - DECLSPEC_XFGVIRT(ID3D12Device5, CreateMetaCommand) - HRESULT ( STDMETHODCALLTYPE *CreateMetaCommand )( - ID3D12Device12 * This, - _In_ REFGUID CommandId, - _In_ UINT NodeMask, - _In_reads_bytes_opt_(CreationParametersDataSizeInBytes) const void *pCreationParametersData, - _In_ SIZE_T CreationParametersDataSizeInBytes, - REFIID riid, - _COM_Outptr_ void **ppMetaCommand); - - DECLSPEC_XFGVIRT(ID3D12Device5, CreateStateObject) - HRESULT ( STDMETHODCALLTYPE *CreateStateObject )( - ID3D12Device12 * This, - const D3D12_STATE_OBJECT_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppStateObject); - - DECLSPEC_XFGVIRT(ID3D12Device5, GetRaytracingAccelerationStructurePrebuildInfo) - void ( STDMETHODCALLTYPE *GetRaytracingAccelerationStructurePrebuildInfo )( - ID3D12Device12 * This, - _In_ const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS *pDesc, - _Out_ D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO *pInfo); - - DECLSPEC_XFGVIRT(ID3D12Device5, CheckDriverMatchingIdentifier) - D3D12_DRIVER_MATCHING_IDENTIFIER_STATUS ( STDMETHODCALLTYPE *CheckDriverMatchingIdentifier )( - ID3D12Device12 * This, - _In_ D3D12_SERIALIZED_DATA_TYPE SerializedDataType, - _In_ const D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER *pIdentifierToCheck); - - DECLSPEC_XFGVIRT(ID3D12Device6, SetBackgroundProcessingMode) - HRESULT ( STDMETHODCALLTYPE *SetBackgroundProcessingMode )( - ID3D12Device12 * This, - D3D12_BACKGROUND_PROCESSING_MODE Mode, - D3D12_MEASUREMENTS_ACTION MeasurementsAction, - _In_opt_ HANDLE hEventToSignalUponCompletion, - _Out_opt_ BOOL *pbFurtherMeasurementsDesired); - - DECLSPEC_XFGVIRT(ID3D12Device7, AddToStateObject) - HRESULT ( STDMETHODCALLTYPE *AddToStateObject )( - ID3D12Device12 * This, - const D3D12_STATE_OBJECT_DESC *pAddition, - ID3D12StateObject *pStateObjectToGrowFrom, - REFIID riid, - _COM_Outptr_ void **ppNewStateObject); - - DECLSPEC_XFGVIRT(ID3D12Device7, CreateProtectedResourceSession1) - HRESULT ( STDMETHODCALLTYPE *CreateProtectedResourceSession1 )( - ID3D12Device12 * This, - _In_ const D3D12_PROTECTED_RESOURCE_SESSION_DESC1 *pDesc, - _In_ REFIID riid, - _COM_Outptr_ void **ppSession); - - DECLSPEC_XFGVIRT(ID3D12Device8, GetResourceAllocationInfo2) -#if !defined(_WIN32) - D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo2 )( - ID3D12Device12 * This, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC1 *pResourceDescs, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); - -#else - D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo2 )( - ID3D12Device12 * This, - D3D12_RESOURCE_ALLOCATION_INFO * RetVal, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC1 *pResourceDescs, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device8, CreateCommittedResource2) - HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource2 )( - ID3D12Device12 * This, - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC1 *pDesc, - D3D12_RESOURCE_STATES InitialResourceState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riidResource, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device8, CreatePlacedResource1) - HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource1 )( - ID3D12Device12 * This, - _In_ ID3D12Heap *pHeap, - UINT64 HeapOffset, - _In_ const D3D12_RESOURCE_DESC1 *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device8, CreateSamplerFeedbackUnorderedAccessView) - void ( STDMETHODCALLTYPE *CreateSamplerFeedbackUnorderedAccessView )( - ID3D12Device12 * This, - _In_opt_ ID3D12Resource *pTargetedResource, - _In_opt_ ID3D12Resource *pFeedbackResource, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device8, GetCopyableFootprints1) - void ( STDMETHODCALLTYPE *GetCopyableFootprints1 )( - ID3D12Device12 * This, - _In_ const D3D12_RESOURCE_DESC1 *pResourceDesc, - _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, - _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, - UINT64 BaseOffset, - _Out_writes_opt_(NumSubresources) D3D12_PLACED_SUBRESOURCE_FOOTPRINT *pLayouts, - _Out_writes_opt_(NumSubresources) UINT *pNumRows, - _Out_writes_opt_(NumSubresources) UINT64 *pRowSizeInBytes, - _Out_opt_ UINT64 *pTotalBytes); - - DECLSPEC_XFGVIRT(ID3D12Device9, CreateShaderCacheSession) - HRESULT ( STDMETHODCALLTYPE *CreateShaderCacheSession )( - ID3D12Device12 * This, - _In_ const D3D12_SHADER_CACHE_SESSION_DESC *pDesc, - REFIID riid, - _COM_Outptr_opt_ void **ppvSession); - - DECLSPEC_XFGVIRT(ID3D12Device9, ShaderCacheControl) - HRESULT ( STDMETHODCALLTYPE *ShaderCacheControl )( - ID3D12Device12 * This, - D3D12_SHADER_CACHE_KIND_FLAGS Kinds, - D3D12_SHADER_CACHE_CONTROL_FLAGS Control); - - DECLSPEC_XFGVIRT(ID3D12Device9, CreateCommandQueue1) - HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue1 )( - ID3D12Device12 * This, - _In_ const D3D12_COMMAND_QUEUE_DESC *pDesc, - REFIID CreatorID, - REFIID riid, - _COM_Outptr_ void **ppCommandQueue); - - DECLSPEC_XFGVIRT(ID3D12Device10, CreateCommittedResource3) - HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource3 )( - ID3D12Device12 * This, - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC1 *pDesc, - D3D12_BARRIER_LAYOUT InitialLayout, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - UINT32 NumCastableFormats, - _In_opt_count_(NumCastableFormats) const DXGI_FORMAT *pCastableFormats, - REFIID riidResource, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device10, CreatePlacedResource2) - HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource2 )( - ID3D12Device12 * This, - _In_ ID3D12Heap *pHeap, - UINT64 HeapOffset, - _In_ const D3D12_RESOURCE_DESC1 *pDesc, - D3D12_BARRIER_LAYOUT InitialLayout, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - UINT32 NumCastableFormats, - _In_opt_count_(NumCastableFormats) const DXGI_FORMAT *pCastableFormats, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device10, CreateReservedResource2) - HRESULT ( STDMETHODCALLTYPE *CreateReservedResource2 )( - ID3D12Device12 * This, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_BARRIER_LAYOUT InitialLayout, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - UINT32 NumCastableFormats, - _In_opt_count_(NumCastableFormats) const DXGI_FORMAT *pCastableFormats, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device11, CreateSampler2) - void ( STDMETHODCALLTYPE *CreateSampler2 )( - ID3D12Device12 * This, - _In_ const D3D12_SAMPLER_DESC2 *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device12, GetResourceAllocationInfo3) -#if !defined(_WIN32) - D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo3 )( - ID3D12Device12 * This, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC1 *pResourceDescs, - _In_opt_count_(numResourceDescs) const UINT32 *pNumCastableFormats, - _In_opt_count_(numResourceDescs) const DXGI_FORMAT *const *ppCastableFormats, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); - -#else - D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo3 )( - ID3D12Device12 * This, - D3D12_RESOURCE_ALLOCATION_INFO * RetVal, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC1 *pResourceDescs, - _In_opt_count_(numResourceDescs) const UINT32 *pNumCastableFormats, - _In_opt_count_(numResourceDescs) const DXGI_FORMAT *const *ppCastableFormats, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); - -#endif - - END_INTERFACE - } ID3D12Device12Vtbl; - - interface ID3D12Device12 - { - CONST_VTBL struct ID3D12Device12Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12Device12_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12Device12_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12Device12_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12Device12_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12Device12_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12Device12_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12Device12_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12Device12_GetNodeCount(This) \ - ( (This)->lpVtbl -> GetNodeCount(This) ) - -#define ID3D12Device12_CreateCommandQueue(This,pDesc,riid,ppCommandQueue) \ - ( (This)->lpVtbl -> CreateCommandQueue(This,pDesc,riid,ppCommandQueue) ) - -#define ID3D12Device12_CreateCommandAllocator(This,type,riid,ppCommandAllocator) \ - ( (This)->lpVtbl -> CreateCommandAllocator(This,type,riid,ppCommandAllocator) ) - -#define ID3D12Device12_CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) ) - -#define ID3D12Device12_CreateComputePipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreateComputePipelineState(This,pDesc,riid,ppPipelineState) ) - -#define ID3D12Device12_CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) \ - ( (This)->lpVtbl -> CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) ) - -#define ID3D12Device12_CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) \ - ( (This)->lpVtbl -> CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) ) - -#define ID3D12Device12_CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) ) - -#define ID3D12Device12_GetDescriptorHandleIncrementSize(This,DescriptorHeapType) \ - ( (This)->lpVtbl -> GetDescriptorHandleIncrementSize(This,DescriptorHeapType) ) - -#define ID3D12Device12_CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) \ - ( (This)->lpVtbl -> CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) ) - -#define ID3D12Device12_CreateConstantBufferView(This,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateConstantBufferView(This,pDesc,DestDescriptor) ) - -#define ID3D12Device12_CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device12_CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) ) - -#define ID3D12Device12_CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device12_CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device12_CreateSampler(This,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateSampler(This,pDesc,DestDescriptor) ) - -#define ID3D12Device12_CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) \ - ( (This)->lpVtbl -> CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) ) - -#define ID3D12Device12_CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) \ - ( (This)->lpVtbl -> CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) ) -#if !defined(_WIN32) - -#define ID3D12Device12_GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) ) -#else -#define ID3D12Device12_GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) ) -#endif -#if !defined(_WIN32) - -#define ID3D12Device12_GetCustomHeapProperties(This,nodeMask,heapType) \ - ( (This)->lpVtbl -> GetCustomHeapProperties(This,nodeMask,heapType) ) -#else -#define ID3D12Device12_GetCustomHeapProperties(This,RetVal,nodeMask,heapType) \ - ( (This)->lpVtbl -> GetCustomHeapProperties(This,RetVal,nodeMask,heapType) ) -#endif - -#define ID3D12Device12_CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) \ - ( (This)->lpVtbl -> CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) ) - -#define ID3D12Device12_CreateHeap(This,pDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateHeap(This,pDesc,riid,ppvHeap) ) - -#define ID3D12Device12_CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) \ - ( (This)->lpVtbl -> CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) - -#define ID3D12Device12_CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) \ - ( (This)->lpVtbl -> CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) - -#define ID3D12Device12_CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) \ - ( (This)->lpVtbl -> CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) ) - -#define ID3D12Device12_OpenSharedHandle(This,NTHandle,riid,ppvObj) \ - ( (This)->lpVtbl -> OpenSharedHandle(This,NTHandle,riid,ppvObj) ) - -#define ID3D12Device12_OpenSharedHandleByName(This,Name,Access,pNTHandle) \ - ( (This)->lpVtbl -> OpenSharedHandleByName(This,Name,Access,pNTHandle) ) - -#define ID3D12Device12_MakeResident(This,NumObjects,ppObjects) \ - ( (This)->lpVtbl -> MakeResident(This,NumObjects,ppObjects) ) - -#define ID3D12Device12_Evict(This,NumObjects,ppObjects) \ - ( (This)->lpVtbl -> Evict(This,NumObjects,ppObjects) ) - -#define ID3D12Device12_CreateFence(This,InitialValue,Flags,riid,ppFence) \ - ( (This)->lpVtbl -> CreateFence(This,InitialValue,Flags,riid,ppFence) ) - -#define ID3D12Device12_GetDeviceRemovedReason(This) \ - ( (This)->lpVtbl -> GetDeviceRemovedReason(This) ) - -#define ID3D12Device12_GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) \ - ( (This)->lpVtbl -> GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) - -#define ID3D12Device12_CreateQueryHeap(This,pDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateQueryHeap(This,pDesc,riid,ppvHeap) ) - -#define ID3D12Device12_SetStablePowerState(This,Enable) \ - ( (This)->lpVtbl -> SetStablePowerState(This,Enable) ) - -#define ID3D12Device12_CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) \ - ( (This)->lpVtbl -> CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) ) - -#define ID3D12Device12_GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) \ - ( (This)->lpVtbl -> GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) ) -#if !defined(_WIN32) - -#define ID3D12Device12_GetAdapterLuid(This) \ - ( (This)->lpVtbl -> GetAdapterLuid(This) ) -#else -#define ID3D12Device12_GetAdapterLuid(This,RetVal) \ - ( (This)->lpVtbl -> GetAdapterLuid(This,RetVal) ) -#endif - -#define ID3D12Device12_CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) \ - ( (This)->lpVtbl -> CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) ) - -#define ID3D12Device12_SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) \ - ( (This)->lpVtbl -> SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) ) - -#define ID3D12Device12_SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) \ - ( (This)->lpVtbl -> SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) ) - -#define ID3D12Device12_CreatePipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreatePipelineState(This,pDesc,riid,ppPipelineState) ) - -#define ID3D12Device12_OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap) \ - ( (This)->lpVtbl -> OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap) ) - -#define ID3D12Device12_OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap) \ - ( (This)->lpVtbl -> OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap) ) - -#define ID3D12Device12_EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal) \ - ( (This)->lpVtbl -> EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal) ) - -#define ID3D12Device12_CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList) \ - ( (This)->lpVtbl -> CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList) ) - -#define ID3D12Device12_CreateProtectedResourceSession(This,pDesc,riid,ppSession) \ - ( (This)->lpVtbl -> CreateProtectedResourceSession(This,pDesc,riid,ppSession) ) - -#define ID3D12Device12_CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) \ - ( (This)->lpVtbl -> CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) ) - -#define ID3D12Device12_CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap) ) - -#define ID3D12Device12_CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource) \ - ( (This)->lpVtbl -> CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource) ) -#if !defined(_WIN32) - -#define ID3D12Device12_GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) -#else -#define ID3D12Device12_GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) -#endif - -#define ID3D12Device12_CreateLifetimeTracker(This,pOwner,riid,ppvTracker) \ - ( (This)->lpVtbl -> CreateLifetimeTracker(This,pOwner,riid,ppvTracker) ) - -#define ID3D12Device12_RemoveDevice(This) \ - ( (This)->lpVtbl -> RemoveDevice(This) ) - -#define ID3D12Device12_EnumerateMetaCommands(This,pNumMetaCommands,pDescs) \ - ( (This)->lpVtbl -> EnumerateMetaCommands(This,pNumMetaCommands,pDescs) ) - -#define ID3D12Device12_EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs) \ - ( (This)->lpVtbl -> EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs) ) - -#define ID3D12Device12_CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand) \ - ( (This)->lpVtbl -> CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand) ) - -#define ID3D12Device12_CreateStateObject(This,pDesc,riid,ppStateObject) \ - ( (This)->lpVtbl -> CreateStateObject(This,pDesc,riid,ppStateObject) ) - -#define ID3D12Device12_GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo) \ - ( (This)->lpVtbl -> GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo) ) - -#define ID3D12Device12_CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck) \ - ( (This)->lpVtbl -> CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck) ) - -#define ID3D12Device12_SetBackgroundProcessingMode(This,Mode,MeasurementsAction,hEventToSignalUponCompletion,pbFurtherMeasurementsDesired) \ - ( (This)->lpVtbl -> SetBackgroundProcessingMode(This,Mode,MeasurementsAction,hEventToSignalUponCompletion,pbFurtherMeasurementsDesired) ) - -#define ID3D12Device12_AddToStateObject(This,pAddition,pStateObjectToGrowFrom,riid,ppNewStateObject) \ - ( (This)->lpVtbl -> AddToStateObject(This,pAddition,pStateObjectToGrowFrom,riid,ppNewStateObject) ) - -#define ID3D12Device12_CreateProtectedResourceSession1(This,pDesc,riid,ppSession) \ - ( (This)->lpVtbl -> CreateProtectedResourceSession1(This,pDesc,riid,ppSession) ) - -#if !defined(_WIN32) - -#define ID3D12Device12_GetResourceAllocationInfo2(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo2(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) -#else -#define ID3D12Device12_GetResourceAllocationInfo2(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo2(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) -#endif - -#define ID3D12Device12_CreateCommittedResource2(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) \ - ( (This)->lpVtbl -> CreateCommittedResource2(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) ) - -#define ID3D12Device12_CreatePlacedResource1(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) \ - ( (This)->lpVtbl -> CreatePlacedResource1(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) - -#define ID3D12Device12_CreateSamplerFeedbackUnorderedAccessView(This,pTargetedResource,pFeedbackResource,DestDescriptor) \ - ( (This)->lpVtbl -> CreateSamplerFeedbackUnorderedAccessView(This,pTargetedResource,pFeedbackResource,DestDescriptor) ) - -#define ID3D12Device12_GetCopyableFootprints1(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) \ - ( (This)->lpVtbl -> GetCopyableFootprints1(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) - -#define ID3D12Device12_CreateShaderCacheSession(This,pDesc,riid,ppvSession) \ - ( (This)->lpVtbl -> CreateShaderCacheSession(This,pDesc,riid,ppvSession) ) - -#define ID3D12Device12_ShaderCacheControl(This,Kinds,Control) \ - ( (This)->lpVtbl -> ShaderCacheControl(This,Kinds,Control) ) - -#define ID3D12Device12_CreateCommandQueue1(This,pDesc,CreatorID,riid,ppCommandQueue) \ - ( (This)->lpVtbl -> CreateCommandQueue1(This,pDesc,CreatorID,riid,ppCommandQueue) ) - -#define ID3D12Device12_CreateCommittedResource3(This,pHeapProperties,HeapFlags,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riidResource,ppvResource) \ - ( (This)->lpVtbl -> CreateCommittedResource3(This,pHeapProperties,HeapFlags,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riidResource,ppvResource) ) - -#define ID3D12Device12_CreatePlacedResource2(This,pHeap,HeapOffset,pDesc,InitialLayout,pOptimizedClearValue,NumCastableFormats,pCastableFormats,riid,ppvResource) \ - ( (This)->lpVtbl -> CreatePlacedResource2(This,pHeap,HeapOffset,pDesc,InitialLayout,pOptimizedClearValue,NumCastableFormats,pCastableFormats,riid,ppvResource) ) - -#define ID3D12Device12_CreateReservedResource2(This,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riid,ppvResource) \ - ( (This)->lpVtbl -> CreateReservedResource2(This,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riid,ppvResource) ) - -#define ID3D12Device12_CreateSampler2(This,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateSampler2(This,pDesc,DestDescriptor) ) - -#if !defined(_WIN32) - -#define ID3D12Device12_GetResourceAllocationInfo3(This,visibleMask,numResourceDescs,pResourceDescs,pNumCastableFormats,ppCastableFormats,pResourceAllocationInfo1) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo3(This,visibleMask,numResourceDescs,pResourceDescs,pNumCastableFormats,ppCastableFormats,pResourceAllocationInfo1) ) -#else -#define ID3D12Device12_GetResourceAllocationInfo3(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pNumCastableFormats,ppCastableFormats,pResourceAllocationInfo1) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo3(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pNumCastableFormats,ppCastableFormats,pResourceAllocationInfo1) ) -#endif - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12Device12_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12Device13_INTERFACE_DEFINED__ -#define __ID3D12Device13_INTERFACE_DEFINED__ - -/* interface ID3D12Device13 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12Device13; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("14eecffc-4df8-40f7-a118-5c816f45695e") - ID3D12Device13 : public ID3D12Device12 - { - public: - virtual HRESULT STDMETHODCALLTYPE OpenExistingHeapFromAddress1( - _In_ const void *pAddress, - SIZE_T size, - REFIID riid, - _COM_Outptr_ void **ppvHeap) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12Device13Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12Device13 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12Device13 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12Device13 * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12Device13 * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12Device13 * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12Device13 * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12Device13 * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12Device, GetNodeCount) - UINT ( STDMETHODCALLTYPE *GetNodeCount )( - ID3D12Device13 * This); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandQueue) - HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue )( - ID3D12Device13 * This, - _In_ const D3D12_COMMAND_QUEUE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppCommandQueue); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandAllocator) - HRESULT ( STDMETHODCALLTYPE *CreateCommandAllocator )( - ID3D12Device13 * This, - _In_ D3D12_COMMAND_LIST_TYPE type, - REFIID riid, - _COM_Outptr_ void **ppCommandAllocator); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateGraphicsPipelineState) - HRESULT ( STDMETHODCALLTYPE *CreateGraphicsPipelineState )( - ID3D12Device13 * This, - _In_ const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateComputePipelineState) - HRESULT ( STDMETHODCALLTYPE *CreateComputePipelineState )( - ID3D12Device13 * This, - _In_ const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandList) - HRESULT ( STDMETHODCALLTYPE *CreateCommandList )( - ID3D12Device13 * This, - _In_ UINT nodeMask, - _In_ D3D12_COMMAND_LIST_TYPE type, - _In_ ID3D12CommandAllocator *pCommandAllocator, - _In_opt_ ID3D12PipelineState *pInitialState, - REFIID riid, - _COM_Outptr_ void **ppCommandList); - - DECLSPEC_XFGVIRT(ID3D12Device, CheckFeatureSupport) - HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )( - ID3D12Device13 * This, - D3D12_FEATURE Feature, - _Inout_updates_bytes_(FeatureSupportDataSize) void *pFeatureSupportData, - UINT FeatureSupportDataSize); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateDescriptorHeap) - HRESULT ( STDMETHODCALLTYPE *CreateDescriptorHeap )( - ID3D12Device13 * This, - _In_ const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc, - REFIID riid, - _COM_Outptr_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, GetDescriptorHandleIncrementSize) - UINT ( STDMETHODCALLTYPE *GetDescriptorHandleIncrementSize )( - ID3D12Device13 * This, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateRootSignature) - HRESULT ( STDMETHODCALLTYPE *CreateRootSignature )( - ID3D12Device13 * This, - _In_ UINT nodeMask, - _In_reads_(blobLengthInBytes) const void *pBlobWithRootSignature, - _In_ SIZE_T blobLengthInBytes, - REFIID riid, - _COM_Outptr_ void **ppvRootSignature); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateConstantBufferView) - void ( STDMETHODCALLTYPE *CreateConstantBufferView )( - ID3D12Device13 * This, - _In_opt_ const D3D12_CONSTANT_BUFFER_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateShaderResourceView) - void ( STDMETHODCALLTYPE *CreateShaderResourceView )( - ID3D12Device13 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateUnorderedAccessView) - void ( STDMETHODCALLTYPE *CreateUnorderedAccessView )( - ID3D12Device13 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ ID3D12Resource *pCounterResource, - _In_opt_ const D3D12_UNORDERED_ACCESS_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateRenderTargetView) - void ( STDMETHODCALLTYPE *CreateRenderTargetView )( - ID3D12Device13 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_RENDER_TARGET_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateDepthStencilView) - void ( STDMETHODCALLTYPE *CreateDepthStencilView )( - ID3D12Device13 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DEPTH_STENCIL_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateSampler) - void ( STDMETHODCALLTYPE *CreateSampler )( - ID3D12Device13 * This, - _In_ const D3D12_SAMPLER_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptors) - void ( STDMETHODCALLTYPE *CopyDescriptors )( - ID3D12Device13 * This, - _In_ UINT NumDestDescriptorRanges, - _In_reads_(NumDestDescriptorRanges) const D3D12_CPU_DESCRIPTOR_HANDLE *pDestDescriptorRangeStarts, - _In_reads_opt_(NumDestDescriptorRanges) const UINT *pDestDescriptorRangeSizes, - _In_ UINT NumSrcDescriptorRanges, - _In_reads_(NumSrcDescriptorRanges) const D3D12_CPU_DESCRIPTOR_HANDLE *pSrcDescriptorRangeStarts, - _In_reads_opt_(NumSrcDescriptorRanges) const UINT *pSrcDescriptorRangeSizes, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType); - - DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptorsSimple) - void ( STDMETHODCALLTYPE *CopyDescriptorsSimple )( - ID3D12Device13 * This, - _In_ UINT NumDescriptors, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType); - - DECLSPEC_XFGVIRT(ID3D12Device, GetResourceAllocationInfo) -#if !defined(_WIN32) - D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo )( - ID3D12Device13 * This, - _In_ UINT visibleMask, - _In_ UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs); - -#else - D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo )( - ID3D12Device13 * This, - D3D12_RESOURCE_ALLOCATION_INFO * RetVal, - _In_ UINT visibleMask, - _In_ UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device, GetCustomHeapProperties) -#if !defined(_WIN32) - D3D12_HEAP_PROPERTIES ( STDMETHODCALLTYPE *GetCustomHeapProperties )( - ID3D12Device13 * This, - _In_ UINT nodeMask, - D3D12_HEAP_TYPE heapType); - -#else - D3D12_HEAP_PROPERTIES *( STDMETHODCALLTYPE *GetCustomHeapProperties )( - ID3D12Device13 * This, - D3D12_HEAP_PROPERTIES * RetVal, - _In_ UINT nodeMask, - D3D12_HEAP_TYPE heapType); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommittedResource) - HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource )( - ID3D12Device13 * This, - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialResourceState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riidResource, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateHeap) - HRESULT ( STDMETHODCALLTYPE *CreateHeap )( - ID3D12Device13 * This, - _In_ const D3D12_HEAP_DESC *pDesc, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, CreatePlacedResource) - HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource )( - ID3D12Device13 * This, - _In_ ID3D12Heap *pHeap, - UINT64 HeapOffset, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateReservedResource) - HRESULT ( STDMETHODCALLTYPE *CreateReservedResource )( - ID3D12Device13 * This, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateSharedHandle) - HRESULT ( STDMETHODCALLTYPE *CreateSharedHandle )( - ID3D12Device13 * This, - _In_ ID3D12DeviceChild *pObject, - _In_opt_ const SECURITY_ATTRIBUTES *pAttributes, - DWORD Access, - _In_opt_ LPCWSTR Name, - _Out_ HANDLE *pHandle); - - DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandle) - HRESULT ( STDMETHODCALLTYPE *OpenSharedHandle )( - ID3D12Device13 * This, - _In_ HANDLE NTHandle, - REFIID riid, - _COM_Outptr_opt_ void **ppvObj); - - DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandleByName) - HRESULT ( STDMETHODCALLTYPE *OpenSharedHandleByName )( - ID3D12Device13 * This, - _In_ LPCWSTR Name, - DWORD Access, - /* [annotation][out] */ - _Out_ HANDLE *pNTHandle); - - DECLSPEC_XFGVIRT(ID3D12Device, MakeResident) - HRESULT ( STDMETHODCALLTYPE *MakeResident )( - ID3D12Device13 * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects); - - DECLSPEC_XFGVIRT(ID3D12Device, Evict) - HRESULT ( STDMETHODCALLTYPE *Evict )( - ID3D12Device13 * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateFence) - HRESULT ( STDMETHODCALLTYPE *CreateFence )( - ID3D12Device13 * This, - UINT64 InitialValue, - D3D12_FENCE_FLAGS Flags, - REFIID riid, - _COM_Outptr_ void **ppFence); - - DECLSPEC_XFGVIRT(ID3D12Device, GetDeviceRemovedReason) - HRESULT ( STDMETHODCALLTYPE *GetDeviceRemovedReason )( - ID3D12Device13 * This); - - DECLSPEC_XFGVIRT(ID3D12Device, GetCopyableFootprints) - void ( STDMETHODCALLTYPE *GetCopyableFootprints )( - ID3D12Device13 * This, - _In_ const D3D12_RESOURCE_DESC *pResourceDesc, - _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, - _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, - UINT64 BaseOffset, - _Out_writes_opt_(NumSubresources) D3D12_PLACED_SUBRESOURCE_FOOTPRINT *pLayouts, - _Out_writes_opt_(NumSubresources) UINT *pNumRows, - _Out_writes_opt_(NumSubresources) UINT64 *pRowSizeInBytes, - _Out_opt_ UINT64 *pTotalBytes); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateQueryHeap) - HRESULT ( STDMETHODCALLTYPE *CreateQueryHeap )( - ID3D12Device13 * This, - _In_ const D3D12_QUERY_HEAP_DESC *pDesc, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, SetStablePowerState) - HRESULT ( STDMETHODCALLTYPE *SetStablePowerState )( - ID3D12Device13 * This, - BOOL Enable); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandSignature) - HRESULT ( STDMETHODCALLTYPE *CreateCommandSignature )( - ID3D12Device13 * This, - _In_ const D3D12_COMMAND_SIGNATURE_DESC *pDesc, - _In_opt_ ID3D12RootSignature *pRootSignature, - REFIID riid, - _COM_Outptr_opt_ void **ppvCommandSignature); - - DECLSPEC_XFGVIRT(ID3D12Device, GetResourceTiling) - void ( STDMETHODCALLTYPE *GetResourceTiling )( - ID3D12Device13 * This, - _In_ ID3D12Resource *pTiledResource, - _Out_opt_ UINT *pNumTilesForEntireResource, - _Out_opt_ D3D12_PACKED_MIP_INFO *pPackedMipDesc, - _Out_opt_ D3D12_TILE_SHAPE *pStandardTileShapeForNonPackedMips, - _Inout_opt_ UINT *pNumSubresourceTilings, - _In_ UINT FirstSubresourceTilingToGet, - _Out_writes_(*pNumSubresourceTilings) D3D12_SUBRESOURCE_TILING *pSubresourceTilingsForNonPackedMips); - - DECLSPEC_XFGVIRT(ID3D12Device, GetAdapterLuid) -#if !defined(_WIN32) - LUID ( STDMETHODCALLTYPE *GetAdapterLuid )( - ID3D12Device13 * This); - -#else - LUID *( STDMETHODCALLTYPE *GetAdapterLuid )( - ID3D12Device13 * This, - LUID * RetVal); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device1, CreatePipelineLibrary) - HRESULT ( STDMETHODCALLTYPE *CreatePipelineLibrary )( - ID3D12Device13 * This, - _In_reads_(BlobLength) const void *pLibraryBlob, - SIZE_T BlobLength, - REFIID riid, - _COM_Outptr_ void **ppPipelineLibrary); - - DECLSPEC_XFGVIRT(ID3D12Device1, SetEventOnMultipleFenceCompletion) - HRESULT ( STDMETHODCALLTYPE *SetEventOnMultipleFenceCompletion )( - ID3D12Device13 * This, - _In_reads_(NumFences) ID3D12Fence *const *ppFences, - _In_reads_(NumFences) const UINT64 *pFenceValues, - UINT NumFences, - D3D12_MULTIPLE_FENCE_WAIT_FLAGS Flags, - HANDLE hEvent); - - DECLSPEC_XFGVIRT(ID3D12Device1, SetResidencyPriority) - HRESULT ( STDMETHODCALLTYPE *SetResidencyPriority )( - ID3D12Device13 * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects, - _In_reads_(NumObjects) const D3D12_RESIDENCY_PRIORITY *pPriorities); - - DECLSPEC_XFGVIRT(ID3D12Device2, CreatePipelineState) - HRESULT ( STDMETHODCALLTYPE *CreatePipelineState )( - ID3D12Device13 * This, - const D3D12_PIPELINE_STATE_STREAM_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromAddress) - HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromAddress )( - ID3D12Device13 * This, - _In_ const void *pAddress, - REFIID riid, - _COM_Outptr_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromFileMapping) - HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromFileMapping )( - ID3D12Device13 * This, - _In_ HANDLE hFileMapping, - REFIID riid, - _COM_Outptr_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device3, EnqueueMakeResident) - HRESULT ( STDMETHODCALLTYPE *EnqueueMakeResident )( - ID3D12Device13 * This, - D3D12_RESIDENCY_FLAGS Flags, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects, - _In_ ID3D12Fence *pFenceToSignal, - UINT64 FenceValueToSignal); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommandList1) - HRESULT ( STDMETHODCALLTYPE *CreateCommandList1 )( - ID3D12Device13 * This, - _In_ UINT nodeMask, - _In_ D3D12_COMMAND_LIST_TYPE type, - _In_ D3D12_COMMAND_LIST_FLAGS flags, - REFIID riid, - _COM_Outptr_ void **ppCommandList); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateProtectedResourceSession) - HRESULT ( STDMETHODCALLTYPE *CreateProtectedResourceSession )( - ID3D12Device13 * This, - _In_ const D3D12_PROTECTED_RESOURCE_SESSION_DESC *pDesc, - _In_ REFIID riid, - _COM_Outptr_ void **ppSession); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommittedResource1) - HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource1 )( - ID3D12Device13 * This, - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialResourceState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riidResource, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateHeap1) - HRESULT ( STDMETHODCALLTYPE *CreateHeap1 )( - ID3D12Device13 * This, - _In_ const D3D12_HEAP_DESC *pDesc, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateReservedResource1) - HRESULT ( STDMETHODCALLTYPE *CreateReservedResource1 )( - ID3D12Device13 * This, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device4, GetResourceAllocationInfo1) -#if !defined(_WIN32) - D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( - ID3D12Device13 * This, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); - -#else - D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( - ID3D12Device13 * This, - D3D12_RESOURCE_ALLOCATION_INFO * RetVal, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device5, CreateLifetimeTracker) - HRESULT ( STDMETHODCALLTYPE *CreateLifetimeTracker )( - ID3D12Device13 * This, - _In_ ID3D12LifetimeOwner *pOwner, - REFIID riid, - _COM_Outptr_ void **ppvTracker); - - DECLSPEC_XFGVIRT(ID3D12Device5, RemoveDevice) - void ( STDMETHODCALLTYPE *RemoveDevice )( - ID3D12Device13 * This); - - DECLSPEC_XFGVIRT(ID3D12Device5, EnumerateMetaCommands) - HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommands )( - ID3D12Device13 * This, - _Inout_ UINT *pNumMetaCommands, - _Out_writes_opt_(*pNumMetaCommands) D3D12_META_COMMAND_DESC *pDescs); - - DECLSPEC_XFGVIRT(ID3D12Device5, EnumerateMetaCommandParameters) - HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommandParameters )( - ID3D12Device13 * This, - _In_ REFGUID CommandId, - _In_ D3D12_META_COMMAND_PARAMETER_STAGE Stage, - _Out_opt_ UINT *pTotalStructureSizeInBytes, - _Inout_ UINT *pParameterCount, - _Out_writes_opt_(*pParameterCount) D3D12_META_COMMAND_PARAMETER_DESC *pParameterDescs); - - DECLSPEC_XFGVIRT(ID3D12Device5, CreateMetaCommand) - HRESULT ( STDMETHODCALLTYPE *CreateMetaCommand )( - ID3D12Device13 * This, - _In_ REFGUID CommandId, - _In_ UINT NodeMask, - _In_reads_bytes_opt_(CreationParametersDataSizeInBytes) const void *pCreationParametersData, - _In_ SIZE_T CreationParametersDataSizeInBytes, - REFIID riid, - _COM_Outptr_ void **ppMetaCommand); - - DECLSPEC_XFGVIRT(ID3D12Device5, CreateStateObject) - HRESULT ( STDMETHODCALLTYPE *CreateStateObject )( - ID3D12Device13 * This, - const D3D12_STATE_OBJECT_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppStateObject); - - DECLSPEC_XFGVIRT(ID3D12Device5, GetRaytracingAccelerationStructurePrebuildInfo) - void ( STDMETHODCALLTYPE *GetRaytracingAccelerationStructurePrebuildInfo )( - ID3D12Device13 * This, - _In_ const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS *pDesc, - _Out_ D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO *pInfo); - - DECLSPEC_XFGVIRT(ID3D12Device5, CheckDriverMatchingIdentifier) - D3D12_DRIVER_MATCHING_IDENTIFIER_STATUS ( STDMETHODCALLTYPE *CheckDriverMatchingIdentifier )( - ID3D12Device13 * This, - _In_ D3D12_SERIALIZED_DATA_TYPE SerializedDataType, - _In_ const D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER *pIdentifierToCheck); - - DECLSPEC_XFGVIRT(ID3D12Device6, SetBackgroundProcessingMode) - HRESULT ( STDMETHODCALLTYPE *SetBackgroundProcessingMode )( - ID3D12Device13 * This, - D3D12_BACKGROUND_PROCESSING_MODE Mode, - D3D12_MEASUREMENTS_ACTION MeasurementsAction, - _In_opt_ HANDLE hEventToSignalUponCompletion, - _Out_opt_ BOOL *pbFurtherMeasurementsDesired); - - DECLSPEC_XFGVIRT(ID3D12Device7, AddToStateObject) - HRESULT ( STDMETHODCALLTYPE *AddToStateObject )( - ID3D12Device13 * This, - const D3D12_STATE_OBJECT_DESC *pAddition, - ID3D12StateObject *pStateObjectToGrowFrom, - REFIID riid, - _COM_Outptr_ void **ppNewStateObject); - - DECLSPEC_XFGVIRT(ID3D12Device7, CreateProtectedResourceSession1) - HRESULT ( STDMETHODCALLTYPE *CreateProtectedResourceSession1 )( - ID3D12Device13 * This, - _In_ const D3D12_PROTECTED_RESOURCE_SESSION_DESC1 *pDesc, - _In_ REFIID riid, - _COM_Outptr_ void **ppSession); - - DECLSPEC_XFGVIRT(ID3D12Device8, GetResourceAllocationInfo2) -#if !defined(_WIN32) - D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo2 )( - ID3D12Device13 * This, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC1 *pResourceDescs, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); - -#else - D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo2 )( - ID3D12Device13 * This, - D3D12_RESOURCE_ALLOCATION_INFO * RetVal, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC1 *pResourceDescs, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device8, CreateCommittedResource2) - HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource2 )( - ID3D12Device13 * This, - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC1 *pDesc, - D3D12_RESOURCE_STATES InitialResourceState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riidResource, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device8, CreatePlacedResource1) - HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource1 )( - ID3D12Device13 * This, - _In_ ID3D12Heap *pHeap, - UINT64 HeapOffset, - _In_ const D3D12_RESOURCE_DESC1 *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device8, CreateSamplerFeedbackUnorderedAccessView) - void ( STDMETHODCALLTYPE *CreateSamplerFeedbackUnorderedAccessView )( - ID3D12Device13 * This, - _In_opt_ ID3D12Resource *pTargetedResource, - _In_opt_ ID3D12Resource *pFeedbackResource, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device8, GetCopyableFootprints1) - void ( STDMETHODCALLTYPE *GetCopyableFootprints1 )( - ID3D12Device13 * This, - _In_ const D3D12_RESOURCE_DESC1 *pResourceDesc, - _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, - _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, - UINT64 BaseOffset, - _Out_writes_opt_(NumSubresources) D3D12_PLACED_SUBRESOURCE_FOOTPRINT *pLayouts, - _Out_writes_opt_(NumSubresources) UINT *pNumRows, - _Out_writes_opt_(NumSubresources) UINT64 *pRowSizeInBytes, - _Out_opt_ UINT64 *pTotalBytes); - - DECLSPEC_XFGVIRT(ID3D12Device9, CreateShaderCacheSession) - HRESULT ( STDMETHODCALLTYPE *CreateShaderCacheSession )( - ID3D12Device13 * This, - _In_ const D3D12_SHADER_CACHE_SESSION_DESC *pDesc, - REFIID riid, - _COM_Outptr_opt_ void **ppvSession); - - DECLSPEC_XFGVIRT(ID3D12Device9, ShaderCacheControl) - HRESULT ( STDMETHODCALLTYPE *ShaderCacheControl )( - ID3D12Device13 * This, - D3D12_SHADER_CACHE_KIND_FLAGS Kinds, - D3D12_SHADER_CACHE_CONTROL_FLAGS Control); - - DECLSPEC_XFGVIRT(ID3D12Device9, CreateCommandQueue1) - HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue1 )( - ID3D12Device13 * This, - _In_ const D3D12_COMMAND_QUEUE_DESC *pDesc, - REFIID CreatorID, - REFIID riid, - _COM_Outptr_ void **ppCommandQueue); - - DECLSPEC_XFGVIRT(ID3D12Device10, CreateCommittedResource3) - HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource3 )( - ID3D12Device13 * This, - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC1 *pDesc, - D3D12_BARRIER_LAYOUT InitialLayout, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - UINT32 NumCastableFormats, - _In_opt_count_(NumCastableFormats) const DXGI_FORMAT *pCastableFormats, - REFIID riidResource, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device10, CreatePlacedResource2) - HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource2 )( - ID3D12Device13 * This, - _In_ ID3D12Heap *pHeap, - UINT64 HeapOffset, - _In_ const D3D12_RESOURCE_DESC1 *pDesc, - D3D12_BARRIER_LAYOUT InitialLayout, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - UINT32 NumCastableFormats, - _In_opt_count_(NumCastableFormats) const DXGI_FORMAT *pCastableFormats, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device10, CreateReservedResource2) - HRESULT ( STDMETHODCALLTYPE *CreateReservedResource2 )( - ID3D12Device13 * This, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_BARRIER_LAYOUT InitialLayout, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - UINT32 NumCastableFormats, - _In_opt_count_(NumCastableFormats) const DXGI_FORMAT *pCastableFormats, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device11, CreateSampler2) - void ( STDMETHODCALLTYPE *CreateSampler2 )( - ID3D12Device13 * This, - _In_ const D3D12_SAMPLER_DESC2 *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device12, GetResourceAllocationInfo3) -#if !defined(_WIN32) - D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo3 )( - ID3D12Device13 * This, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC1 *pResourceDescs, - _In_opt_count_(numResourceDescs) const UINT32 *pNumCastableFormats, - _In_opt_count_(numResourceDescs) const DXGI_FORMAT *const *ppCastableFormats, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); - -#else - D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo3 )( - ID3D12Device13 * This, - D3D12_RESOURCE_ALLOCATION_INFO * RetVal, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC1 *pResourceDescs, - _In_opt_count_(numResourceDescs) const UINT32 *pNumCastableFormats, - _In_opt_count_(numResourceDescs) const DXGI_FORMAT *const *ppCastableFormats, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device13, OpenExistingHeapFromAddress1) - HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromAddress1 )( - ID3D12Device13 * This, - _In_ const void *pAddress, - SIZE_T size, - REFIID riid, - _COM_Outptr_ void **ppvHeap); - - END_INTERFACE - } ID3D12Device13Vtbl; - - interface ID3D12Device13 - { - CONST_VTBL struct ID3D12Device13Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12Device13_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12Device13_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12Device13_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12Device13_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12Device13_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12Device13_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12Device13_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12Device13_GetNodeCount(This) \ - ( (This)->lpVtbl -> GetNodeCount(This) ) - -#define ID3D12Device13_CreateCommandQueue(This,pDesc,riid,ppCommandQueue) \ - ( (This)->lpVtbl -> CreateCommandQueue(This,pDesc,riid,ppCommandQueue) ) - -#define ID3D12Device13_CreateCommandAllocator(This,type,riid,ppCommandAllocator) \ - ( (This)->lpVtbl -> CreateCommandAllocator(This,type,riid,ppCommandAllocator) ) - -#define ID3D12Device13_CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) ) - -#define ID3D12Device13_CreateComputePipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreateComputePipelineState(This,pDesc,riid,ppPipelineState) ) - -#define ID3D12Device13_CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) \ - ( (This)->lpVtbl -> CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) ) - -#define ID3D12Device13_CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) \ - ( (This)->lpVtbl -> CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) ) - -#define ID3D12Device13_CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) ) - -#define ID3D12Device13_GetDescriptorHandleIncrementSize(This,DescriptorHeapType) \ - ( (This)->lpVtbl -> GetDescriptorHandleIncrementSize(This,DescriptorHeapType) ) - -#define ID3D12Device13_CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) \ - ( (This)->lpVtbl -> CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) ) - -#define ID3D12Device13_CreateConstantBufferView(This,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateConstantBufferView(This,pDesc,DestDescriptor) ) - -#define ID3D12Device13_CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device13_CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) ) - -#define ID3D12Device13_CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device13_CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device13_CreateSampler(This,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateSampler(This,pDesc,DestDescriptor) ) - -#define ID3D12Device13_CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) \ - ( (This)->lpVtbl -> CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) ) - -#define ID3D12Device13_CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) \ - ( (This)->lpVtbl -> CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) ) -#if !defined(_WIN32) - -#define ID3D12Device13_GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) ) -#else -#define ID3D12Device13_GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) ) -#endif -#if !defined(_WIN32) - -#define ID3D12Device13_GetCustomHeapProperties(This,nodeMask,heapType) \ - ( (This)->lpVtbl -> GetCustomHeapProperties(This,nodeMask,heapType) ) -#else -#define ID3D12Device13_GetCustomHeapProperties(This,RetVal,nodeMask,heapType) \ - ( (This)->lpVtbl -> GetCustomHeapProperties(This,RetVal,nodeMask,heapType) ) -#endif - -#define ID3D12Device13_CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) \ - ( (This)->lpVtbl -> CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) ) - -#define ID3D12Device13_CreateHeap(This,pDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateHeap(This,pDesc,riid,ppvHeap) ) - -#define ID3D12Device13_CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) \ - ( (This)->lpVtbl -> CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) - -#define ID3D12Device13_CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) \ - ( (This)->lpVtbl -> CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) - -#define ID3D12Device13_CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) \ - ( (This)->lpVtbl -> CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) ) - -#define ID3D12Device13_OpenSharedHandle(This,NTHandle,riid,ppvObj) \ - ( (This)->lpVtbl -> OpenSharedHandle(This,NTHandle,riid,ppvObj) ) - -#define ID3D12Device13_OpenSharedHandleByName(This,Name,Access,pNTHandle) \ - ( (This)->lpVtbl -> OpenSharedHandleByName(This,Name,Access,pNTHandle) ) - -#define ID3D12Device13_MakeResident(This,NumObjects,ppObjects) \ - ( (This)->lpVtbl -> MakeResident(This,NumObjects,ppObjects) ) - -#define ID3D12Device13_Evict(This,NumObjects,ppObjects) \ - ( (This)->lpVtbl -> Evict(This,NumObjects,ppObjects) ) - -#define ID3D12Device13_CreateFence(This,InitialValue,Flags,riid,ppFence) \ - ( (This)->lpVtbl -> CreateFence(This,InitialValue,Flags,riid,ppFence) ) - -#define ID3D12Device13_GetDeviceRemovedReason(This) \ - ( (This)->lpVtbl -> GetDeviceRemovedReason(This) ) - -#define ID3D12Device13_GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) \ - ( (This)->lpVtbl -> GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) - -#define ID3D12Device13_CreateQueryHeap(This,pDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateQueryHeap(This,pDesc,riid,ppvHeap) ) - -#define ID3D12Device13_SetStablePowerState(This,Enable) \ - ( (This)->lpVtbl -> SetStablePowerState(This,Enable) ) - -#define ID3D12Device13_CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) \ - ( (This)->lpVtbl -> CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) ) - -#define ID3D12Device13_GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) \ - ( (This)->lpVtbl -> GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) ) -#if !defined(_WIN32) - -#define ID3D12Device13_GetAdapterLuid(This) \ - ( (This)->lpVtbl -> GetAdapterLuid(This) ) -#else -#define ID3D12Device13_GetAdapterLuid(This,RetVal) \ - ( (This)->lpVtbl -> GetAdapterLuid(This,RetVal) ) -#endif - -#define ID3D12Device13_CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) \ - ( (This)->lpVtbl -> CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) ) - -#define ID3D12Device13_SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) \ - ( (This)->lpVtbl -> SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) ) - -#define ID3D12Device13_SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) \ - ( (This)->lpVtbl -> SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) ) - -#define ID3D12Device13_CreatePipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreatePipelineState(This,pDesc,riid,ppPipelineState) ) - -#define ID3D12Device13_OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap) \ - ( (This)->lpVtbl -> OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap) ) - -#define ID3D12Device13_OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap) \ - ( (This)->lpVtbl -> OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap) ) - -#define ID3D12Device13_EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal) \ - ( (This)->lpVtbl -> EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal) ) - -#define ID3D12Device13_CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList) \ - ( (This)->lpVtbl -> CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList) ) - -#define ID3D12Device13_CreateProtectedResourceSession(This,pDesc,riid,ppSession) \ - ( (This)->lpVtbl -> CreateProtectedResourceSession(This,pDesc,riid,ppSession) ) - -#define ID3D12Device13_CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) \ - ( (This)->lpVtbl -> CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) ) - -#define ID3D12Device13_CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap) ) - -#define ID3D12Device13_CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource) \ - ( (This)->lpVtbl -> CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource) ) -#if !defined(_WIN32) - -#define ID3D12Device13_GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) -#else -#define ID3D12Device13_GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) -#endif - -#define ID3D12Device13_CreateLifetimeTracker(This,pOwner,riid,ppvTracker) \ - ( (This)->lpVtbl -> CreateLifetimeTracker(This,pOwner,riid,ppvTracker) ) - -#define ID3D12Device13_RemoveDevice(This) \ - ( (This)->lpVtbl -> RemoveDevice(This) ) - -#define ID3D12Device13_EnumerateMetaCommands(This,pNumMetaCommands,pDescs) \ - ( (This)->lpVtbl -> EnumerateMetaCommands(This,pNumMetaCommands,pDescs) ) - -#define ID3D12Device13_EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs) \ - ( (This)->lpVtbl -> EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs) ) - -#define ID3D12Device13_CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand) \ - ( (This)->lpVtbl -> CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand) ) - -#define ID3D12Device13_CreateStateObject(This,pDesc,riid,ppStateObject) \ - ( (This)->lpVtbl -> CreateStateObject(This,pDesc,riid,ppStateObject) ) - -#define ID3D12Device13_GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo) \ - ( (This)->lpVtbl -> GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo) ) - -#define ID3D12Device13_CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck) \ - ( (This)->lpVtbl -> CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck) ) - -#define ID3D12Device13_SetBackgroundProcessingMode(This,Mode,MeasurementsAction,hEventToSignalUponCompletion,pbFurtherMeasurementsDesired) \ - ( (This)->lpVtbl -> SetBackgroundProcessingMode(This,Mode,MeasurementsAction,hEventToSignalUponCompletion,pbFurtherMeasurementsDesired) ) - -#define ID3D12Device13_AddToStateObject(This,pAddition,pStateObjectToGrowFrom,riid,ppNewStateObject) \ - ( (This)->lpVtbl -> AddToStateObject(This,pAddition,pStateObjectToGrowFrom,riid,ppNewStateObject) ) - -#define ID3D12Device13_CreateProtectedResourceSession1(This,pDesc,riid,ppSession) \ - ( (This)->lpVtbl -> CreateProtectedResourceSession1(This,pDesc,riid,ppSession) ) - -#if !defined(_WIN32) - -#define ID3D12Device13_GetResourceAllocationInfo2(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo2(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) -#else -#define ID3D12Device13_GetResourceAllocationInfo2(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo2(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) -#endif - -#define ID3D12Device13_CreateCommittedResource2(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) \ - ( (This)->lpVtbl -> CreateCommittedResource2(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) ) - -#define ID3D12Device13_CreatePlacedResource1(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) \ - ( (This)->lpVtbl -> CreatePlacedResource1(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) - -#define ID3D12Device13_CreateSamplerFeedbackUnorderedAccessView(This,pTargetedResource,pFeedbackResource,DestDescriptor) \ - ( (This)->lpVtbl -> CreateSamplerFeedbackUnorderedAccessView(This,pTargetedResource,pFeedbackResource,DestDescriptor) ) - -#define ID3D12Device13_GetCopyableFootprints1(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) \ - ( (This)->lpVtbl -> GetCopyableFootprints1(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) - -#define ID3D12Device13_CreateShaderCacheSession(This,pDesc,riid,ppvSession) \ - ( (This)->lpVtbl -> CreateShaderCacheSession(This,pDesc,riid,ppvSession) ) - -#define ID3D12Device13_ShaderCacheControl(This,Kinds,Control) \ - ( (This)->lpVtbl -> ShaderCacheControl(This,Kinds,Control) ) - -#define ID3D12Device13_CreateCommandQueue1(This,pDesc,CreatorID,riid,ppCommandQueue) \ - ( (This)->lpVtbl -> CreateCommandQueue1(This,pDesc,CreatorID,riid,ppCommandQueue) ) - -#define ID3D12Device13_CreateCommittedResource3(This,pHeapProperties,HeapFlags,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riidResource,ppvResource) \ - ( (This)->lpVtbl -> CreateCommittedResource3(This,pHeapProperties,HeapFlags,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riidResource,ppvResource) ) - -#define ID3D12Device13_CreatePlacedResource2(This,pHeap,HeapOffset,pDesc,InitialLayout,pOptimizedClearValue,NumCastableFormats,pCastableFormats,riid,ppvResource) \ - ( (This)->lpVtbl -> CreatePlacedResource2(This,pHeap,HeapOffset,pDesc,InitialLayout,pOptimizedClearValue,NumCastableFormats,pCastableFormats,riid,ppvResource) ) - -#define ID3D12Device13_CreateReservedResource2(This,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riid,ppvResource) \ - ( (This)->lpVtbl -> CreateReservedResource2(This,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riid,ppvResource) ) - -#define ID3D12Device13_CreateSampler2(This,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateSampler2(This,pDesc,DestDescriptor) ) - -#if !defined(_WIN32) - -#define ID3D12Device13_GetResourceAllocationInfo3(This,visibleMask,numResourceDescs,pResourceDescs,pNumCastableFormats,ppCastableFormats,pResourceAllocationInfo1) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo3(This,visibleMask,numResourceDescs,pResourceDescs,pNumCastableFormats,ppCastableFormats,pResourceAllocationInfo1) ) -#else -#define ID3D12Device13_GetResourceAllocationInfo3(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pNumCastableFormats,ppCastableFormats,pResourceAllocationInfo1) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo3(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pNumCastableFormats,ppCastableFormats,pResourceAllocationInfo1) ) -#endif - -#define ID3D12Device13_OpenExistingHeapFromAddress1(This,pAddress,size,riid,ppvHeap) \ - ( (This)->lpVtbl -> OpenExistingHeapFromAddress1(This,pAddress,size,riid,ppvHeap) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12Device13_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12Device14_INTERFACE_DEFINED__ -#define __ID3D12Device14_INTERFACE_DEFINED__ - -/* interface ID3D12Device14 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12Device14; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("5f6e592d-d895-44c2-8e4a-88ad4926d323") - ID3D12Device14 : public ID3D12Device13 - { - public: - virtual HRESULT STDMETHODCALLTYPE CreateRootSignatureFromSubobjectInLibrary( - _In_ UINT nodeMask, - _In_reads_(blobLengthInBytes) const void *pLibraryBlob, - _In_ SIZE_T blobLengthInBytes, - _In_opt_ LPCWSTR subobjectName, - REFIID riid, - _COM_Outptr_ void **ppvRootSignature) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12Device14Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12Device14 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12Device14 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12Device14 * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12Device14 * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12Device14 * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12Device14 * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12Device14 * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12Device, GetNodeCount) - UINT ( STDMETHODCALLTYPE *GetNodeCount )( - ID3D12Device14 * This); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandQueue) - HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue )( - ID3D12Device14 * This, - _In_ const D3D12_COMMAND_QUEUE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppCommandQueue); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandAllocator) - HRESULT ( STDMETHODCALLTYPE *CreateCommandAllocator )( - ID3D12Device14 * This, - _In_ D3D12_COMMAND_LIST_TYPE type, - REFIID riid, - _COM_Outptr_ void **ppCommandAllocator); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateGraphicsPipelineState) - HRESULT ( STDMETHODCALLTYPE *CreateGraphicsPipelineState )( - ID3D12Device14 * This, - _In_ const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateComputePipelineState) - HRESULT ( STDMETHODCALLTYPE *CreateComputePipelineState )( - ID3D12Device14 * This, - _In_ const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandList) - HRESULT ( STDMETHODCALLTYPE *CreateCommandList )( - ID3D12Device14 * This, - _In_ UINT nodeMask, - _In_ D3D12_COMMAND_LIST_TYPE type, - _In_ ID3D12CommandAllocator *pCommandAllocator, - _In_opt_ ID3D12PipelineState *pInitialState, - REFIID riid, - _COM_Outptr_ void **ppCommandList); - - DECLSPEC_XFGVIRT(ID3D12Device, CheckFeatureSupport) - HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )( - ID3D12Device14 * This, - D3D12_FEATURE Feature, - _Inout_updates_bytes_(FeatureSupportDataSize) void *pFeatureSupportData, - UINT FeatureSupportDataSize); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateDescriptorHeap) - HRESULT ( STDMETHODCALLTYPE *CreateDescriptorHeap )( - ID3D12Device14 * This, - _In_ const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc, - REFIID riid, - _COM_Outptr_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, GetDescriptorHandleIncrementSize) - UINT ( STDMETHODCALLTYPE *GetDescriptorHandleIncrementSize )( - ID3D12Device14 * This, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateRootSignature) - HRESULT ( STDMETHODCALLTYPE *CreateRootSignature )( - ID3D12Device14 * This, - _In_ UINT nodeMask, - _In_reads_(blobLengthInBytes) const void *pBlobWithRootSignature, - _In_ SIZE_T blobLengthInBytes, - REFIID riid, - _COM_Outptr_ void **ppvRootSignature); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateConstantBufferView) - void ( STDMETHODCALLTYPE *CreateConstantBufferView )( - ID3D12Device14 * This, - _In_opt_ const D3D12_CONSTANT_BUFFER_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateShaderResourceView) - void ( STDMETHODCALLTYPE *CreateShaderResourceView )( - ID3D12Device14 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateUnorderedAccessView) - void ( STDMETHODCALLTYPE *CreateUnorderedAccessView )( - ID3D12Device14 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ ID3D12Resource *pCounterResource, - _In_opt_ const D3D12_UNORDERED_ACCESS_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateRenderTargetView) - void ( STDMETHODCALLTYPE *CreateRenderTargetView )( - ID3D12Device14 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_RENDER_TARGET_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateDepthStencilView) - void ( STDMETHODCALLTYPE *CreateDepthStencilView )( - ID3D12Device14 * This, - _In_opt_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DEPTH_STENCIL_VIEW_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateSampler) - void ( STDMETHODCALLTYPE *CreateSampler )( - ID3D12Device14 * This, - _In_ const D3D12_SAMPLER_DESC *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptors) - void ( STDMETHODCALLTYPE *CopyDescriptors )( - ID3D12Device14 * This, - _In_ UINT NumDestDescriptorRanges, - _In_reads_(NumDestDescriptorRanges) const D3D12_CPU_DESCRIPTOR_HANDLE *pDestDescriptorRangeStarts, - _In_reads_opt_(NumDestDescriptorRanges) const UINT *pDestDescriptorRangeSizes, - _In_ UINT NumSrcDescriptorRanges, - _In_reads_(NumSrcDescriptorRanges) const D3D12_CPU_DESCRIPTOR_HANDLE *pSrcDescriptorRangeStarts, - _In_reads_opt_(NumSrcDescriptorRanges) const UINT *pSrcDescriptorRangeSizes, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType); - - DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptorsSimple) - void ( STDMETHODCALLTYPE *CopyDescriptorsSimple )( - ID3D12Device14 * This, - _In_ UINT NumDescriptors, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart, - _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType); - - DECLSPEC_XFGVIRT(ID3D12Device, GetResourceAllocationInfo) -#if !defined(_WIN32) - D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo )( - ID3D12Device14 * This, - _In_ UINT visibleMask, - _In_ UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs); - -#else - D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo )( - ID3D12Device14 * This, - D3D12_RESOURCE_ALLOCATION_INFO * RetVal, - _In_ UINT visibleMask, - _In_ UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device, GetCustomHeapProperties) -#if !defined(_WIN32) - D3D12_HEAP_PROPERTIES ( STDMETHODCALLTYPE *GetCustomHeapProperties )( - ID3D12Device14 * This, - _In_ UINT nodeMask, - D3D12_HEAP_TYPE heapType); - -#else - D3D12_HEAP_PROPERTIES *( STDMETHODCALLTYPE *GetCustomHeapProperties )( - ID3D12Device14 * This, - D3D12_HEAP_PROPERTIES * RetVal, - _In_ UINT nodeMask, - D3D12_HEAP_TYPE heapType); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommittedResource) - HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource )( - ID3D12Device14 * This, - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialResourceState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riidResource, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateHeap) - HRESULT ( STDMETHODCALLTYPE *CreateHeap )( - ID3D12Device14 * This, - _In_ const D3D12_HEAP_DESC *pDesc, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, CreatePlacedResource) - HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource )( - ID3D12Device14 * This, - _In_ ID3D12Heap *pHeap, - UINT64 HeapOffset, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateReservedResource) - HRESULT ( STDMETHODCALLTYPE *CreateReservedResource )( - ID3D12Device14 * This, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateSharedHandle) - HRESULT ( STDMETHODCALLTYPE *CreateSharedHandle )( - ID3D12Device14 * This, - _In_ ID3D12DeviceChild *pObject, - _In_opt_ const SECURITY_ATTRIBUTES *pAttributes, - DWORD Access, - _In_opt_ LPCWSTR Name, - _Out_ HANDLE *pHandle); - - DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandle) - HRESULT ( STDMETHODCALLTYPE *OpenSharedHandle )( - ID3D12Device14 * This, - _In_ HANDLE NTHandle, - REFIID riid, - _COM_Outptr_opt_ void **ppvObj); - - DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandleByName) - HRESULT ( STDMETHODCALLTYPE *OpenSharedHandleByName )( - ID3D12Device14 * This, - _In_ LPCWSTR Name, - DWORD Access, - /* [annotation][out] */ - _Out_ HANDLE *pNTHandle); - - DECLSPEC_XFGVIRT(ID3D12Device, MakeResident) - HRESULT ( STDMETHODCALLTYPE *MakeResident )( - ID3D12Device14 * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects); - - DECLSPEC_XFGVIRT(ID3D12Device, Evict) - HRESULT ( STDMETHODCALLTYPE *Evict )( - ID3D12Device14 * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateFence) - HRESULT ( STDMETHODCALLTYPE *CreateFence )( - ID3D12Device14 * This, - UINT64 InitialValue, - D3D12_FENCE_FLAGS Flags, - REFIID riid, - _COM_Outptr_ void **ppFence); - - DECLSPEC_XFGVIRT(ID3D12Device, GetDeviceRemovedReason) - HRESULT ( STDMETHODCALLTYPE *GetDeviceRemovedReason )( - ID3D12Device14 * This); - - DECLSPEC_XFGVIRT(ID3D12Device, GetCopyableFootprints) - void ( STDMETHODCALLTYPE *GetCopyableFootprints )( - ID3D12Device14 * This, - _In_ const D3D12_RESOURCE_DESC *pResourceDesc, - _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, - _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, - UINT64 BaseOffset, - _Out_writes_opt_(NumSubresources) D3D12_PLACED_SUBRESOURCE_FOOTPRINT *pLayouts, - _Out_writes_opt_(NumSubresources) UINT *pNumRows, - _Out_writes_opt_(NumSubresources) UINT64 *pRowSizeInBytes, - _Out_opt_ UINT64 *pTotalBytes); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateQueryHeap) - HRESULT ( STDMETHODCALLTYPE *CreateQueryHeap )( - ID3D12Device14 * This, - _In_ const D3D12_QUERY_HEAP_DESC *pDesc, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device, SetStablePowerState) - HRESULT ( STDMETHODCALLTYPE *SetStablePowerState )( - ID3D12Device14 * This, - BOOL Enable); - - DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandSignature) - HRESULT ( STDMETHODCALLTYPE *CreateCommandSignature )( - ID3D12Device14 * This, - _In_ const D3D12_COMMAND_SIGNATURE_DESC *pDesc, - _In_opt_ ID3D12RootSignature *pRootSignature, - REFIID riid, - _COM_Outptr_opt_ void **ppvCommandSignature); - - DECLSPEC_XFGVIRT(ID3D12Device, GetResourceTiling) - void ( STDMETHODCALLTYPE *GetResourceTiling )( - ID3D12Device14 * This, - _In_ ID3D12Resource *pTiledResource, - _Out_opt_ UINT *pNumTilesForEntireResource, - _Out_opt_ D3D12_PACKED_MIP_INFO *pPackedMipDesc, - _Out_opt_ D3D12_TILE_SHAPE *pStandardTileShapeForNonPackedMips, - _Inout_opt_ UINT *pNumSubresourceTilings, - _In_ UINT FirstSubresourceTilingToGet, - _Out_writes_(*pNumSubresourceTilings) D3D12_SUBRESOURCE_TILING *pSubresourceTilingsForNonPackedMips); - - DECLSPEC_XFGVIRT(ID3D12Device, GetAdapterLuid) -#if !defined(_WIN32) - LUID ( STDMETHODCALLTYPE *GetAdapterLuid )( - ID3D12Device14 * This); - -#else - LUID *( STDMETHODCALLTYPE *GetAdapterLuid )( - ID3D12Device14 * This, - LUID * RetVal); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device1, CreatePipelineLibrary) - HRESULT ( STDMETHODCALLTYPE *CreatePipelineLibrary )( - ID3D12Device14 * This, - _In_reads_(BlobLength) const void *pLibraryBlob, - SIZE_T BlobLength, - REFIID riid, - _COM_Outptr_ void **ppPipelineLibrary); - - DECLSPEC_XFGVIRT(ID3D12Device1, SetEventOnMultipleFenceCompletion) - HRESULT ( STDMETHODCALLTYPE *SetEventOnMultipleFenceCompletion )( - ID3D12Device14 * This, - _In_reads_(NumFences) ID3D12Fence *const *ppFences, - _In_reads_(NumFences) const UINT64 *pFenceValues, - UINT NumFences, - D3D12_MULTIPLE_FENCE_WAIT_FLAGS Flags, - HANDLE hEvent); - - DECLSPEC_XFGVIRT(ID3D12Device1, SetResidencyPriority) - HRESULT ( STDMETHODCALLTYPE *SetResidencyPriority )( - ID3D12Device14 * This, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects, - _In_reads_(NumObjects) const D3D12_RESIDENCY_PRIORITY *pPriorities); - - DECLSPEC_XFGVIRT(ID3D12Device2, CreatePipelineState) - HRESULT ( STDMETHODCALLTYPE *CreatePipelineState )( - ID3D12Device14 * This, - const D3D12_PIPELINE_STATE_STREAM_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppPipelineState); - - DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromAddress) - HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromAddress )( - ID3D12Device14 * This, - _In_ const void *pAddress, - REFIID riid, - _COM_Outptr_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromFileMapping) - HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromFileMapping )( - ID3D12Device14 * This, - _In_ HANDLE hFileMapping, - REFIID riid, - _COM_Outptr_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device3, EnqueueMakeResident) - HRESULT ( STDMETHODCALLTYPE *EnqueueMakeResident )( - ID3D12Device14 * This, - D3D12_RESIDENCY_FLAGS Flags, - UINT NumObjects, - _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects, - _In_ ID3D12Fence *pFenceToSignal, - UINT64 FenceValueToSignal); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommandList1) - HRESULT ( STDMETHODCALLTYPE *CreateCommandList1 )( - ID3D12Device14 * This, - _In_ UINT nodeMask, - _In_ D3D12_COMMAND_LIST_TYPE type, - _In_ D3D12_COMMAND_LIST_FLAGS flags, - REFIID riid, - _COM_Outptr_ void **ppCommandList); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateProtectedResourceSession) - HRESULT ( STDMETHODCALLTYPE *CreateProtectedResourceSession )( - ID3D12Device14 * This, - _In_ const D3D12_PROTECTED_RESOURCE_SESSION_DESC *pDesc, - _In_ REFIID riid, - _COM_Outptr_ void **ppSession); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommittedResource1) - HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource1 )( - ID3D12Device14 * This, - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialResourceState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riidResource, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateHeap1) - HRESULT ( STDMETHODCALLTYPE *CreateHeap1 )( - ID3D12Device14 * This, - _In_ const D3D12_HEAP_DESC *pDesc, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riid, - _COM_Outptr_opt_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device4, CreateReservedResource1) - HRESULT ( STDMETHODCALLTYPE *CreateReservedResource1 )( - ID3D12Device14 * This, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device4, GetResourceAllocationInfo1) -#if !defined(_WIN32) - D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( - ID3D12Device14 * This, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); - -#else - D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( - ID3D12Device14 * This, - D3D12_RESOURCE_ALLOCATION_INFO * RetVal, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device5, CreateLifetimeTracker) - HRESULT ( STDMETHODCALLTYPE *CreateLifetimeTracker )( - ID3D12Device14 * This, - _In_ ID3D12LifetimeOwner *pOwner, - REFIID riid, - _COM_Outptr_ void **ppvTracker); - - DECLSPEC_XFGVIRT(ID3D12Device5, RemoveDevice) - void ( STDMETHODCALLTYPE *RemoveDevice )( - ID3D12Device14 * This); - - DECLSPEC_XFGVIRT(ID3D12Device5, EnumerateMetaCommands) - HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommands )( - ID3D12Device14 * This, - _Inout_ UINT *pNumMetaCommands, - _Out_writes_opt_(*pNumMetaCommands) D3D12_META_COMMAND_DESC *pDescs); - - DECLSPEC_XFGVIRT(ID3D12Device5, EnumerateMetaCommandParameters) - HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommandParameters )( - ID3D12Device14 * This, - _In_ REFGUID CommandId, - _In_ D3D12_META_COMMAND_PARAMETER_STAGE Stage, - _Out_opt_ UINT *pTotalStructureSizeInBytes, - _Inout_ UINT *pParameterCount, - _Out_writes_opt_(*pParameterCount) D3D12_META_COMMAND_PARAMETER_DESC *pParameterDescs); - - DECLSPEC_XFGVIRT(ID3D12Device5, CreateMetaCommand) - HRESULT ( STDMETHODCALLTYPE *CreateMetaCommand )( - ID3D12Device14 * This, - _In_ REFGUID CommandId, - _In_ UINT NodeMask, - _In_reads_bytes_opt_(CreationParametersDataSizeInBytes) const void *pCreationParametersData, - _In_ SIZE_T CreationParametersDataSizeInBytes, - REFIID riid, - _COM_Outptr_ void **ppMetaCommand); - - DECLSPEC_XFGVIRT(ID3D12Device5, CreateStateObject) - HRESULT ( STDMETHODCALLTYPE *CreateStateObject )( - ID3D12Device14 * This, - const D3D12_STATE_OBJECT_DESC *pDesc, - REFIID riid, - _COM_Outptr_ void **ppStateObject); - - DECLSPEC_XFGVIRT(ID3D12Device5, GetRaytracingAccelerationStructurePrebuildInfo) - void ( STDMETHODCALLTYPE *GetRaytracingAccelerationStructurePrebuildInfo )( - ID3D12Device14 * This, - _In_ const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS *pDesc, - _Out_ D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO *pInfo); - - DECLSPEC_XFGVIRT(ID3D12Device5, CheckDriverMatchingIdentifier) - D3D12_DRIVER_MATCHING_IDENTIFIER_STATUS ( STDMETHODCALLTYPE *CheckDriverMatchingIdentifier )( - ID3D12Device14 * This, - _In_ D3D12_SERIALIZED_DATA_TYPE SerializedDataType, - _In_ const D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER *pIdentifierToCheck); - - DECLSPEC_XFGVIRT(ID3D12Device6, SetBackgroundProcessingMode) - HRESULT ( STDMETHODCALLTYPE *SetBackgroundProcessingMode )( - ID3D12Device14 * This, - D3D12_BACKGROUND_PROCESSING_MODE Mode, - D3D12_MEASUREMENTS_ACTION MeasurementsAction, - _In_opt_ HANDLE hEventToSignalUponCompletion, - _Out_opt_ BOOL *pbFurtherMeasurementsDesired); - - DECLSPEC_XFGVIRT(ID3D12Device7, AddToStateObject) - HRESULT ( STDMETHODCALLTYPE *AddToStateObject )( - ID3D12Device14 * This, - const D3D12_STATE_OBJECT_DESC *pAddition, - ID3D12StateObject *pStateObjectToGrowFrom, - REFIID riid, - _COM_Outptr_ void **ppNewStateObject); - - DECLSPEC_XFGVIRT(ID3D12Device7, CreateProtectedResourceSession1) - HRESULT ( STDMETHODCALLTYPE *CreateProtectedResourceSession1 )( - ID3D12Device14 * This, - _In_ const D3D12_PROTECTED_RESOURCE_SESSION_DESC1 *pDesc, - _In_ REFIID riid, - _COM_Outptr_ void **ppSession); - - DECLSPEC_XFGVIRT(ID3D12Device8, GetResourceAllocationInfo2) -#if !defined(_WIN32) - D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo2 )( - ID3D12Device14 * This, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC1 *pResourceDescs, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); - -#else - D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo2 )( - ID3D12Device14 * This, - D3D12_RESOURCE_ALLOCATION_INFO * RetVal, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC1 *pResourceDescs, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device8, CreateCommittedResource2) - HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource2 )( - ID3D12Device14 * This, - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC1 *pDesc, - D3D12_RESOURCE_STATES InitialResourceState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - REFIID riidResource, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device8, CreatePlacedResource1) - HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource1 )( - ID3D12Device14 * This, - _In_ ID3D12Heap *pHeap, - UINT64 HeapOffset, - _In_ const D3D12_RESOURCE_DESC1 *pDesc, - D3D12_RESOURCE_STATES InitialState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device8, CreateSamplerFeedbackUnorderedAccessView) - void ( STDMETHODCALLTYPE *CreateSamplerFeedbackUnorderedAccessView )( - ID3D12Device14 * This, - _In_opt_ ID3D12Resource *pTargetedResource, - _In_opt_ ID3D12Resource *pFeedbackResource, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device8, GetCopyableFootprints1) - void ( STDMETHODCALLTYPE *GetCopyableFootprints1 )( - ID3D12Device14 * This, - _In_ const D3D12_RESOURCE_DESC1 *pResourceDesc, - _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, - _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, - UINT64 BaseOffset, - _Out_writes_opt_(NumSubresources) D3D12_PLACED_SUBRESOURCE_FOOTPRINT *pLayouts, - _Out_writes_opt_(NumSubresources) UINT *pNumRows, - _Out_writes_opt_(NumSubresources) UINT64 *pRowSizeInBytes, - _Out_opt_ UINT64 *pTotalBytes); - - DECLSPEC_XFGVIRT(ID3D12Device9, CreateShaderCacheSession) - HRESULT ( STDMETHODCALLTYPE *CreateShaderCacheSession )( - ID3D12Device14 * This, - _In_ const D3D12_SHADER_CACHE_SESSION_DESC *pDesc, - REFIID riid, - _COM_Outptr_opt_ void **ppvSession); - - DECLSPEC_XFGVIRT(ID3D12Device9, ShaderCacheControl) - HRESULT ( STDMETHODCALLTYPE *ShaderCacheControl )( - ID3D12Device14 * This, - D3D12_SHADER_CACHE_KIND_FLAGS Kinds, - D3D12_SHADER_CACHE_CONTROL_FLAGS Control); - - DECLSPEC_XFGVIRT(ID3D12Device9, CreateCommandQueue1) - HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue1 )( - ID3D12Device14 * This, - _In_ const D3D12_COMMAND_QUEUE_DESC *pDesc, - REFIID CreatorID, - REFIID riid, - _COM_Outptr_ void **ppCommandQueue); - - DECLSPEC_XFGVIRT(ID3D12Device10, CreateCommittedResource3) - HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource3 )( - ID3D12Device14 * This, - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC1 *pDesc, - D3D12_BARRIER_LAYOUT InitialLayout, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - UINT32 NumCastableFormats, - _In_opt_count_(NumCastableFormats) const DXGI_FORMAT *pCastableFormats, - REFIID riidResource, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device10, CreatePlacedResource2) - HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource2 )( - ID3D12Device14 * This, - _In_ ID3D12Heap *pHeap, - UINT64 HeapOffset, - _In_ const D3D12_RESOURCE_DESC1 *pDesc, - D3D12_BARRIER_LAYOUT InitialLayout, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - UINT32 NumCastableFormats, - _In_opt_count_(NumCastableFormats) const DXGI_FORMAT *pCastableFormats, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device10, CreateReservedResource2) - HRESULT ( STDMETHODCALLTYPE *CreateReservedResource2 )( - ID3D12Device14 * This, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_BARRIER_LAYOUT InitialLayout, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, - UINT32 NumCastableFormats, - _In_opt_count_(NumCastableFormats) const DXGI_FORMAT *pCastableFormats, - REFIID riid, - _COM_Outptr_opt_ void **ppvResource); - - DECLSPEC_XFGVIRT(ID3D12Device11, CreateSampler2) - void ( STDMETHODCALLTYPE *CreateSampler2 )( - ID3D12Device14 * This, - _In_ const D3D12_SAMPLER_DESC2 *pDesc, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - DECLSPEC_XFGVIRT(ID3D12Device12, GetResourceAllocationInfo3) -#if !defined(_WIN32) - D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo3 )( - ID3D12Device14 * This, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC1 *pResourceDescs, - _In_opt_count_(numResourceDescs) const UINT32 *pNumCastableFormats, - _In_opt_count_(numResourceDescs) const DXGI_FORMAT *const *ppCastableFormats, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); - -#else - D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo3 )( - ID3D12Device14 * This, - D3D12_RESOURCE_ALLOCATION_INFO * RetVal, - UINT visibleMask, - UINT numResourceDescs, - _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC1 *pResourceDescs, - _In_opt_count_(numResourceDescs) const UINT32 *pNumCastableFormats, - _In_opt_count_(numResourceDescs) const DXGI_FORMAT *const *ppCastableFormats, - _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); - -#endif - - DECLSPEC_XFGVIRT(ID3D12Device13, OpenExistingHeapFromAddress1) - HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromAddress1 )( - ID3D12Device14 * This, - _In_ const void *pAddress, - SIZE_T size, - REFIID riid, - _COM_Outptr_ void **ppvHeap); - - DECLSPEC_XFGVIRT(ID3D12Device14, CreateRootSignatureFromSubobjectInLibrary) - HRESULT ( STDMETHODCALLTYPE *CreateRootSignatureFromSubobjectInLibrary )( - ID3D12Device14 * This, - _In_ UINT nodeMask, - _In_reads_(blobLengthInBytes) const void *pLibraryBlob, - _In_ SIZE_T blobLengthInBytes, - _In_opt_ LPCWSTR subobjectName, - REFIID riid, - _COM_Outptr_ void **ppvRootSignature); - - END_INTERFACE - } ID3D12Device14Vtbl; - - interface ID3D12Device14 - { - CONST_VTBL struct ID3D12Device14Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12Device14_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12Device14_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12Device14_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12Device14_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12Device14_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12Device14_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12Device14_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12Device14_GetNodeCount(This) \ - ( (This)->lpVtbl -> GetNodeCount(This) ) - -#define ID3D12Device14_CreateCommandQueue(This,pDesc,riid,ppCommandQueue) \ - ( (This)->lpVtbl -> CreateCommandQueue(This,pDesc,riid,ppCommandQueue) ) - -#define ID3D12Device14_CreateCommandAllocator(This,type,riid,ppCommandAllocator) \ - ( (This)->lpVtbl -> CreateCommandAllocator(This,type,riid,ppCommandAllocator) ) - -#define ID3D12Device14_CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) ) - -#define ID3D12Device14_CreateComputePipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreateComputePipelineState(This,pDesc,riid,ppPipelineState) ) - -#define ID3D12Device14_CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) \ - ( (This)->lpVtbl -> CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) ) - -#define ID3D12Device14_CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) \ - ( (This)->lpVtbl -> CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) ) - -#define ID3D12Device14_CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) ) - -#define ID3D12Device14_GetDescriptorHandleIncrementSize(This,DescriptorHeapType) \ - ( (This)->lpVtbl -> GetDescriptorHandleIncrementSize(This,DescriptorHeapType) ) - -#define ID3D12Device14_CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) \ - ( (This)->lpVtbl -> CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) ) - -#define ID3D12Device14_CreateConstantBufferView(This,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateConstantBufferView(This,pDesc,DestDescriptor) ) - -#define ID3D12Device14_CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device14_CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) ) - -#define ID3D12Device14_CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device14_CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) ) - -#define ID3D12Device14_CreateSampler(This,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateSampler(This,pDesc,DestDescriptor) ) - -#define ID3D12Device14_CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) \ - ( (This)->lpVtbl -> CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) ) - -#define ID3D12Device14_CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) \ - ( (This)->lpVtbl -> CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) ) -#if !defined(_WIN32) - -#define ID3D12Device14_GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) ) -#else -#define ID3D12Device14_GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) ) -#endif -#if !defined(_WIN32) - -#define ID3D12Device14_GetCustomHeapProperties(This,nodeMask,heapType) \ - ( (This)->lpVtbl -> GetCustomHeapProperties(This,nodeMask,heapType) ) -#else -#define ID3D12Device14_GetCustomHeapProperties(This,RetVal,nodeMask,heapType) \ - ( (This)->lpVtbl -> GetCustomHeapProperties(This,RetVal,nodeMask,heapType) ) -#endif - -#define ID3D12Device14_CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) \ - ( (This)->lpVtbl -> CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) ) - -#define ID3D12Device14_CreateHeap(This,pDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateHeap(This,pDesc,riid,ppvHeap) ) - -#define ID3D12Device14_CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) \ - ( (This)->lpVtbl -> CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) - -#define ID3D12Device14_CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) \ - ( (This)->lpVtbl -> CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) - -#define ID3D12Device14_CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) \ - ( (This)->lpVtbl -> CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) ) - -#define ID3D12Device14_OpenSharedHandle(This,NTHandle,riid,ppvObj) \ - ( (This)->lpVtbl -> OpenSharedHandle(This,NTHandle,riid,ppvObj) ) - -#define ID3D12Device14_OpenSharedHandleByName(This,Name,Access,pNTHandle) \ - ( (This)->lpVtbl -> OpenSharedHandleByName(This,Name,Access,pNTHandle) ) - -#define ID3D12Device14_MakeResident(This,NumObjects,ppObjects) \ - ( (This)->lpVtbl -> MakeResident(This,NumObjects,ppObjects) ) - -#define ID3D12Device14_Evict(This,NumObjects,ppObjects) \ - ( (This)->lpVtbl -> Evict(This,NumObjects,ppObjects) ) - -#define ID3D12Device14_CreateFence(This,InitialValue,Flags,riid,ppFence) \ - ( (This)->lpVtbl -> CreateFence(This,InitialValue,Flags,riid,ppFence) ) - -#define ID3D12Device14_GetDeviceRemovedReason(This) \ - ( (This)->lpVtbl -> GetDeviceRemovedReason(This) ) - -#define ID3D12Device14_GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) \ - ( (This)->lpVtbl -> GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) - -#define ID3D12Device14_CreateQueryHeap(This,pDesc,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateQueryHeap(This,pDesc,riid,ppvHeap) ) - -#define ID3D12Device14_SetStablePowerState(This,Enable) \ - ( (This)->lpVtbl -> SetStablePowerState(This,Enable) ) - -#define ID3D12Device14_CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) \ - ( (This)->lpVtbl -> CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) ) - -#define ID3D12Device14_GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) \ - ( (This)->lpVtbl -> GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) ) -#if !defined(_WIN32) - -#define ID3D12Device14_GetAdapterLuid(This) \ - ( (This)->lpVtbl -> GetAdapterLuid(This) ) -#else -#define ID3D12Device14_GetAdapterLuid(This,RetVal) \ - ( (This)->lpVtbl -> GetAdapterLuid(This,RetVal) ) -#endif - -#define ID3D12Device14_CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) \ - ( (This)->lpVtbl -> CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) ) - -#define ID3D12Device14_SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) \ - ( (This)->lpVtbl -> SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) ) - -#define ID3D12Device14_SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) \ - ( (This)->lpVtbl -> SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) ) - -#define ID3D12Device14_CreatePipelineState(This,pDesc,riid,ppPipelineState) \ - ( (This)->lpVtbl -> CreatePipelineState(This,pDesc,riid,ppPipelineState) ) - -#define ID3D12Device14_OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap) \ - ( (This)->lpVtbl -> OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap) ) - -#define ID3D12Device14_OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap) \ - ( (This)->lpVtbl -> OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap) ) - -#define ID3D12Device14_EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal) \ - ( (This)->lpVtbl -> EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal) ) - -#define ID3D12Device14_CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList) \ - ( (This)->lpVtbl -> CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList) ) - -#define ID3D12Device14_CreateProtectedResourceSession(This,pDesc,riid,ppSession) \ - ( (This)->lpVtbl -> CreateProtectedResourceSession(This,pDesc,riid,ppSession) ) - -#define ID3D12Device14_CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) \ - ( (This)->lpVtbl -> CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) ) - -#define ID3D12Device14_CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap) \ - ( (This)->lpVtbl -> CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap) ) - -#define ID3D12Device14_CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource) \ - ( (This)->lpVtbl -> CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource) ) -#if !defined(_WIN32) - -#define ID3D12Device14_GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) -#else -#define ID3D12Device14_GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) -#endif - -#define ID3D12Device14_CreateLifetimeTracker(This,pOwner,riid,ppvTracker) \ - ( (This)->lpVtbl -> CreateLifetimeTracker(This,pOwner,riid,ppvTracker) ) - -#define ID3D12Device14_RemoveDevice(This) \ - ( (This)->lpVtbl -> RemoveDevice(This) ) - -#define ID3D12Device14_EnumerateMetaCommands(This,pNumMetaCommands,pDescs) \ - ( (This)->lpVtbl -> EnumerateMetaCommands(This,pNumMetaCommands,pDescs) ) - -#define ID3D12Device14_EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs) \ - ( (This)->lpVtbl -> EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs) ) - -#define ID3D12Device14_CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand) \ - ( (This)->lpVtbl -> CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand) ) - -#define ID3D12Device14_CreateStateObject(This,pDesc,riid,ppStateObject) \ - ( (This)->lpVtbl -> CreateStateObject(This,pDesc,riid,ppStateObject) ) - -#define ID3D12Device14_GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo) \ - ( (This)->lpVtbl -> GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo) ) - -#define ID3D12Device14_CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck) \ - ( (This)->lpVtbl -> CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck) ) - -#define ID3D12Device14_SetBackgroundProcessingMode(This,Mode,MeasurementsAction,hEventToSignalUponCompletion,pbFurtherMeasurementsDesired) \ - ( (This)->lpVtbl -> SetBackgroundProcessingMode(This,Mode,MeasurementsAction,hEventToSignalUponCompletion,pbFurtherMeasurementsDesired) ) - -#define ID3D12Device14_AddToStateObject(This,pAddition,pStateObjectToGrowFrom,riid,ppNewStateObject) \ - ( (This)->lpVtbl -> AddToStateObject(This,pAddition,pStateObjectToGrowFrom,riid,ppNewStateObject) ) - -#define ID3D12Device14_CreateProtectedResourceSession1(This,pDesc,riid,ppSession) \ - ( (This)->lpVtbl -> CreateProtectedResourceSession1(This,pDesc,riid,ppSession) ) - -#if !defined(_WIN32) - -#define ID3D12Device14_GetResourceAllocationInfo2(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo2(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) -#else -#define ID3D12Device14_GetResourceAllocationInfo2(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo2(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) -#endif - -#define ID3D12Device14_CreateCommittedResource2(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) \ - ( (This)->lpVtbl -> CreateCommittedResource2(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) ) - -#define ID3D12Device14_CreatePlacedResource1(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) \ - ( (This)->lpVtbl -> CreatePlacedResource1(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) - -#define ID3D12Device14_CreateSamplerFeedbackUnorderedAccessView(This,pTargetedResource,pFeedbackResource,DestDescriptor) \ - ( (This)->lpVtbl -> CreateSamplerFeedbackUnorderedAccessView(This,pTargetedResource,pFeedbackResource,DestDescriptor) ) - -#define ID3D12Device14_GetCopyableFootprints1(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) \ - ( (This)->lpVtbl -> GetCopyableFootprints1(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) - -#define ID3D12Device14_CreateShaderCacheSession(This,pDesc,riid,ppvSession) \ - ( (This)->lpVtbl -> CreateShaderCacheSession(This,pDesc,riid,ppvSession) ) - -#define ID3D12Device14_ShaderCacheControl(This,Kinds,Control) \ - ( (This)->lpVtbl -> ShaderCacheControl(This,Kinds,Control) ) - -#define ID3D12Device14_CreateCommandQueue1(This,pDesc,CreatorID,riid,ppCommandQueue) \ - ( (This)->lpVtbl -> CreateCommandQueue1(This,pDesc,CreatorID,riid,ppCommandQueue) ) - -#define ID3D12Device14_CreateCommittedResource3(This,pHeapProperties,HeapFlags,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riidResource,ppvResource) \ - ( (This)->lpVtbl -> CreateCommittedResource3(This,pHeapProperties,HeapFlags,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riidResource,ppvResource) ) - -#define ID3D12Device14_CreatePlacedResource2(This,pHeap,HeapOffset,pDesc,InitialLayout,pOptimizedClearValue,NumCastableFormats,pCastableFormats,riid,ppvResource) \ - ( (This)->lpVtbl -> CreatePlacedResource2(This,pHeap,HeapOffset,pDesc,InitialLayout,pOptimizedClearValue,NumCastableFormats,pCastableFormats,riid,ppvResource) ) - -#define ID3D12Device14_CreateReservedResource2(This,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riid,ppvResource) \ - ( (This)->lpVtbl -> CreateReservedResource2(This,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riid,ppvResource) ) - -#define ID3D12Device14_CreateSampler2(This,pDesc,DestDescriptor) \ - ( (This)->lpVtbl -> CreateSampler2(This,pDesc,DestDescriptor) ) - -#if !defined(_WIN32) - -#define ID3D12Device14_GetResourceAllocationInfo3(This,visibleMask,numResourceDescs,pResourceDescs,pNumCastableFormats,ppCastableFormats,pResourceAllocationInfo1) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo3(This,visibleMask,numResourceDescs,pResourceDescs,pNumCastableFormats,ppCastableFormats,pResourceAllocationInfo1) ) -#else -#define ID3D12Device14_GetResourceAllocationInfo3(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pNumCastableFormats,ppCastableFormats,pResourceAllocationInfo1) \ - ( (This)->lpVtbl -> GetResourceAllocationInfo3(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pNumCastableFormats,ppCastableFormats,pResourceAllocationInfo1) ) -#endif - -#define ID3D12Device14_OpenExistingHeapFromAddress1(This,pAddress,size,riid,ppvHeap) \ - ( (This)->lpVtbl -> OpenExistingHeapFromAddress1(This,pAddress,size,riid,ppvHeap) ) - -#define ID3D12Device14_CreateRootSignatureFromSubobjectInLibrary(This,nodeMask,pLibraryBlob,blobLengthInBytes,subobjectName,riid,ppvRootSignature) \ - ( (This)->lpVtbl -> CreateRootSignatureFromSubobjectInLibrary(This,nodeMask,pLibraryBlob,blobLengthInBytes,subobjectName,riid,ppvRootSignature) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12Device14_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12VirtualizationGuestDevice_INTERFACE_DEFINED__ -#define __ID3D12VirtualizationGuestDevice_INTERFACE_DEFINED__ - -/* interface ID3D12VirtualizationGuestDevice */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12VirtualizationGuestDevice; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("bc66d368-7373-4943-8757-fc87dc79e476") - ID3D12VirtualizationGuestDevice : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE ShareWithHost( - _In_ ID3D12DeviceChild *pObject, - _Out_ HANDLE *pHandle) = 0; - - virtual HRESULT STDMETHODCALLTYPE CreateFenceFd( - _In_ ID3D12Fence *pFence, - UINT64 FenceValue, - _Out_ int *pFenceFd) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12VirtualizationGuestDeviceVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12VirtualizationGuestDevice * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12VirtualizationGuestDevice * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12VirtualizationGuestDevice * This); - - DECLSPEC_XFGVIRT(ID3D12VirtualizationGuestDevice, ShareWithHost) - HRESULT ( STDMETHODCALLTYPE *ShareWithHost )( - ID3D12VirtualizationGuestDevice * This, - _In_ ID3D12DeviceChild *pObject, - _Out_ HANDLE *pHandle); - - DECLSPEC_XFGVIRT(ID3D12VirtualizationGuestDevice, CreateFenceFd) - HRESULT ( STDMETHODCALLTYPE *CreateFenceFd )( - ID3D12VirtualizationGuestDevice * This, - _In_ ID3D12Fence *pFence, - UINT64 FenceValue, - _Out_ int *pFenceFd); - - END_INTERFACE - } ID3D12VirtualizationGuestDeviceVtbl; - - interface ID3D12VirtualizationGuestDevice - { - CONST_VTBL struct ID3D12VirtualizationGuestDeviceVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12VirtualizationGuestDevice_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12VirtualizationGuestDevice_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12VirtualizationGuestDevice_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12VirtualizationGuestDevice_ShareWithHost(This,pObject,pHandle) \ - ( (This)->lpVtbl -> ShareWithHost(This,pObject,pHandle) ) - -#define ID3D12VirtualizationGuestDevice_CreateFenceFd(This,pFence,FenceValue,pFenceFd) \ - ( (This)->lpVtbl -> CreateFenceFd(This,pFence,FenceValue,pFenceFd) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12VirtualizationGuestDevice_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12Tools_INTERFACE_DEFINED__ -#define __ID3D12Tools_INTERFACE_DEFINED__ - -/* interface ID3D12Tools */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12Tools; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("7071e1f0-e84b-4b33-974f-12fa49de65c5") - ID3D12Tools : public IUnknown - { - public: - virtual void STDMETHODCALLTYPE EnableShaderInstrumentation( - BOOL bEnable) = 0; - - virtual BOOL STDMETHODCALLTYPE ShaderInstrumentationEnabled( void) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12ToolsVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12Tools * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12Tools * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12Tools * This); - - DECLSPEC_XFGVIRT(ID3D12Tools, EnableShaderInstrumentation) - void ( STDMETHODCALLTYPE *EnableShaderInstrumentation )( - ID3D12Tools * This, - BOOL bEnable); - - DECLSPEC_XFGVIRT(ID3D12Tools, ShaderInstrumentationEnabled) - BOOL ( STDMETHODCALLTYPE *ShaderInstrumentationEnabled )( - ID3D12Tools * This); - - END_INTERFACE - } ID3D12ToolsVtbl; - - interface ID3D12Tools - { - CONST_VTBL struct ID3D12ToolsVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12Tools_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12Tools_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12Tools_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12Tools_EnableShaderInstrumentation(This,bEnable) \ - ( (This)->lpVtbl -> EnableShaderInstrumentation(This,bEnable) ) - -#define ID3D12Tools_ShaderInstrumentationEnabled(This) \ - ( (This)->lpVtbl -> ShaderInstrumentationEnabled(This) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12Tools_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12Tools1_INTERFACE_DEFINED__ -#define __ID3D12Tools1_INTERFACE_DEFINED__ - -/* interface ID3D12Tools1 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12Tools1; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("e4fbc019-dd3c-43e1-8f32-7f649575f0a0") - ID3D12Tools1 : public ID3D12Tools - { - public: - virtual HRESULT STDMETHODCALLTYPE ReserveGPUVARangesAtCreate( - _In_reads_(uiNumRanges) D3D12_GPU_VIRTUAL_ADDRESS_RANGE *pRanges, - _In_ UINT uiNumRanges) = 0; - - virtual void STDMETHODCALLTYPE ClearReservedGPUVARangesList( void) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12Tools1Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12Tools1 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12Tools1 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12Tools1 * This); - - DECLSPEC_XFGVIRT(ID3D12Tools, EnableShaderInstrumentation) - void ( STDMETHODCALLTYPE *EnableShaderInstrumentation )( - ID3D12Tools1 * This, - BOOL bEnable); - - DECLSPEC_XFGVIRT(ID3D12Tools, ShaderInstrumentationEnabled) - BOOL ( STDMETHODCALLTYPE *ShaderInstrumentationEnabled )( - ID3D12Tools1 * This); - - DECLSPEC_XFGVIRT(ID3D12Tools1, ReserveGPUVARangesAtCreate) - HRESULT ( STDMETHODCALLTYPE *ReserveGPUVARangesAtCreate )( - ID3D12Tools1 * This, - _In_reads_(uiNumRanges) D3D12_GPU_VIRTUAL_ADDRESS_RANGE *pRanges, - _In_ UINT uiNumRanges); - - DECLSPEC_XFGVIRT(ID3D12Tools1, ClearReservedGPUVARangesList) - void ( STDMETHODCALLTYPE *ClearReservedGPUVARangesList )( - ID3D12Tools1 * This); - - END_INTERFACE - } ID3D12Tools1Vtbl; - - interface ID3D12Tools1 - { - CONST_VTBL struct ID3D12Tools1Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12Tools1_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12Tools1_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12Tools1_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12Tools1_EnableShaderInstrumentation(This,bEnable) \ - ( (This)->lpVtbl -> EnableShaderInstrumentation(This,bEnable) ) - -#define ID3D12Tools1_ShaderInstrumentationEnabled(This) \ - ( (This)->lpVtbl -> ShaderInstrumentationEnabled(This) ) - -#define ID3D12Tools1_ReserveGPUVARangesAtCreate(This,pRanges,uiNumRanges) \ - ( (This)->lpVtbl -> ReserveGPUVARangesAtCreate(This,pRanges,uiNumRanges) ) - -#define ID3D12Tools1_ClearReservedGPUVARangesList(This) \ - ( (This)->lpVtbl -> ClearReservedGPUVARangesList(This) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12Tools1_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12PageableTools_INTERFACE_DEFINED__ -#define __ID3D12PageableTools_INTERFACE_DEFINED__ - -/* interface ID3D12PageableTools */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12PageableTools; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("8f1359db-d8d1-42f9-b5cf-79f4cbad0d3d") - ID3D12PageableTools : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE GetAllocation( - _Inout_ D3D12_GPU_VIRTUAL_ADDRESS_RANGE *pAllocation) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12PageableToolsVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12PageableTools * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12PageableTools * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12PageableTools * This); - - DECLSPEC_XFGVIRT(ID3D12PageableTools, GetAllocation) - HRESULT ( STDMETHODCALLTYPE *GetAllocation )( - ID3D12PageableTools * This, - _Inout_ D3D12_GPU_VIRTUAL_ADDRESS_RANGE *pAllocation); - - END_INTERFACE - } ID3D12PageableToolsVtbl; - - interface ID3D12PageableTools - { - CONST_VTBL struct ID3D12PageableToolsVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12PageableTools_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12PageableTools_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12PageableTools_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12PageableTools_GetAllocation(This,pAllocation) \ - ( (This)->lpVtbl -> GetAllocation(This,pAllocation) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12PageableTools_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12DeviceTools_INTERFACE_DEFINED__ -#define __ID3D12DeviceTools_INTERFACE_DEFINED__ - -/* interface ID3D12DeviceTools */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12DeviceTools; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("2ea68e9c-19c3-4e47-a109-6cdadff0aca9") - ID3D12DeviceTools : public IUnknown - { - public: - virtual void STDMETHODCALLTYPE SetNextAllocationAddress( - _In_ D3D12_GPU_VIRTUAL_ADDRESS nextAllocationVirtualAddress) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12DeviceToolsVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12DeviceTools * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12DeviceTools * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12DeviceTools * This); - - DECLSPEC_XFGVIRT(ID3D12DeviceTools, SetNextAllocationAddress) - void ( STDMETHODCALLTYPE *SetNextAllocationAddress )( - ID3D12DeviceTools * This, - _In_ D3D12_GPU_VIRTUAL_ADDRESS nextAllocationVirtualAddress); - - END_INTERFACE - } ID3D12DeviceToolsVtbl; - - interface ID3D12DeviceTools - { - CONST_VTBL struct ID3D12DeviceToolsVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12DeviceTools_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12DeviceTools_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12DeviceTools_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12DeviceTools_SetNextAllocationAddress(This,nextAllocationVirtualAddress) \ - ( (This)->lpVtbl -> SetNextAllocationAddress(This,nextAllocationVirtualAddress) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12DeviceTools_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12_0000_0065 */ -/* [local] */ - -typedef struct D3D12_SUBRESOURCE_DATA - { - const void *pData; - LONG_PTR RowPitch; - LONG_PTR SlicePitch; - } D3D12_SUBRESOURCE_DATA; - -typedef struct D3D12_MEMCPY_DEST - { - void *pData; - SIZE_T RowPitch; - SIZE_T SlicePitch; - } D3D12_MEMCPY_DEST; - -#if !defined( D3D12_IGNORE_SDK_LAYERS ) -#include "d3d12sdklayers.h" -#endif - -/////////////////////////////////////////////////////////////////////////// -// D3D12CreateDevice -// ------------------ -// -// pAdapter -// If NULL, D3D12CreateDevice will choose the primary adapter. -// If non-NULL, D3D12CreateDevice will use the provided adapter. -// MinimumFeatureLevel -// The minimum feature level required for successful device creation. -// riid -// The interface IID of the device to be returned. Expected: ID3D12Device. -// ppDevice -// Pointer to returned interface. May be NULL. -// -// Return Values -// Any of those documented for -// CreateDXGIFactory1 -// IDXGIFactory::EnumAdapters -// D3D12CreateDevice -// -/////////////////////////////////////////////////////////////////////////// -typedef HRESULT (WINAPI* PFN_D3D12_CREATE_DEVICE)( _In_opt_ IUnknown*, - D3D_FEATURE_LEVEL, - _In_ REFIID, _COM_Outptr_opt_ void** ); - -HRESULT WINAPI D3D12CreateDevice( - _In_opt_ IUnknown* pAdapter, - D3D_FEATURE_LEVEL MinimumFeatureLevel, - _In_ REFIID riid, // Expected: ID3D12Device - _COM_Outptr_opt_ void** ppDevice ); - -typedef HRESULT (WINAPI* PFN_D3D12_GET_DEBUG_INTERFACE)( _In_ REFIID, _COM_Outptr_opt_ void** ); - -HRESULT WINAPI D3D12GetDebugInterface( _In_ REFIID riid, _COM_Outptr_opt_ void** ppvDebug ); - -// -------------------------------------------------------------------------------------------------------------------------------- -// D3D12EnableExperimentalFeatures -// -// Pass in a list of feature GUIDs to be enabled together. -// -// If a particular feature requires some configuration information on enablement, it will have -// a configuration struct that can be passed alongside the GUID. -// -// Some features might use an interface IID as the GUID. For these, once the feature is enabled via -// D3D12EnableExperimentalFeatures, D3D12GetDebugInterface can then be called with the IID to retrieve the interface -// for manipulating the feature. This allows for control that might not cleanly be expressed by just -// the configuration struct that D3D12EnableExperimentalFeatures provides. -// -// If this method is called and a change to existing feature enablement is made, -// all current D3D12 devices are set to DEVICE_REMOVED state, since under the covers there is really only one -// singleton device for a process. Removing the devices when configuration changes prevents -// mismatched expectations of how a device is supposed to work after it has been created from the app's point of view. -// -// The call returns E_NOINTERFACE if an unrecognized feature is passed in or Windows Developer mode is not on. -// The call returns E_INVALIDARG if the configuration of a feature is incorrect, the set of features passed -// in are known to be incompatible with each other, or other errors. -// Returns S_OK otherwise. -// -// -------------------------------------------------------------------------------------------------------------------------------- -HRESULT WINAPI D3D12EnableExperimentalFeatures( - UINT NumFeatures, - _In_count_(NumFeatures) const IID* pIIDs, - _In_opt_count_(NumFeatures) void* pConfigurationStructs, - _In_opt_count_(NumFeatures) UINT* pConfigurationStructSizes); - -// -------------------------------------------------------------------------------------------------------------------------------- -// Experimental Feature: D3D12ExperimentalShaderModels -// -// Use with D3D12EnableExperimentalFeatures to enable experimental shader model support, -// meaning shader models that haven't been finalized for use in retail. -// -// Enabling D3D12ExperimentalShaderModels needs no configuration struct, pass NULL in the pConfigurationStructs array. -// -// -------------------------------------------------------------------------------------------------------------------------------- -static const UUID D3D12ExperimentalShaderModels = { /* 76f5573e-f13a-40f5-b297-81ce9e18933f */ - 0x76f5573e, - 0xf13a, - 0x40f5, - { 0xb2, 0x97, 0x81, 0xce, 0x9e, 0x18, 0x93, 0x3f } -}; -// -------------------------------------------------------------------------------------------------------------------------------- -// Experimental Feature: D3D12TiledResourceTier4 -// -// Use with D3D12EnableExperimentalFeatures to enable tiled resource tier 4 support, -// meaning texture tile data-inheritance is allowed. -// -// Enabling D3D12TiledResourceTier4 needs no configuration struct, pass NULL in the pConfigurationStructs array. -// -// -------------------------------------------------------------------------------------------------------------------------------- -static const UUID D3D12TiledResourceTier4 = { /* c9c4725f-a81a-4f56-8c5b-c51039d694fb */ - 0xc9c4725f, - 0xa81a, - 0x4f56, - { 0x8c, 0x5b, 0xc5, 0x10, 0x39, 0xd6, 0x94, 0xfb } -}; -// -------------------------------------------------------------------------------------------------------------------------------- -// Experimental Feature: D3D12GPUUploadHeapsOnUnsupportedOS -// -// Use with D3D12EnableExperimentalFeatures to enable GPU upload heaps support on an unsupported OS, -// driver support is still required for this feature. -// -// Enabling D3D12GPUUploadHeapsOnUnsupportedOS needs no configuration struct, pass NULL in the pConfigurationStructs array. -// -// -------------------------------------------------------------------------------------------------------------------------------- -static const UUID D3D12GPUUploadHeapsOnUnsupportedOS = { /* 45dc51f3-767f-4588-b206-0baa2b16fbae */ - 0x45dc51f3, - 0x767f, - 0x4588, - { 0xb2, 0x06, 0x0b, 0xaa, 0x2b, 0x16, 0xfb, 0xae } -}; -// -------------------------------------------------------------------------------------------------------------------------------- -// D3D12GetInterface -// -// Retrieve Global D3D12 Interface. -// - -DEFINE_GUID(CLSID_D3D12Debug, 0xf2352aeb, 0xdd84, 0x49fe, 0xb9, 0x7b, 0xa9, 0xdc, 0xfd, 0xcc, 0x1b, 0x4f); -DEFINE_GUID(CLSID_D3D12Tools, 0xe38216b1, 0x3c8c, 0x4833, 0xaa, 0x09, 0x0a, 0x06, 0xb6, 0x5d, 0x96, 0xc8); -DEFINE_GUID(CLSID_D3D12DeviceRemovedExtendedData, 0x4a75bbc4, 0x9ff4, 0x4ad8, 0x9f, 0x18, 0xab, 0xae, 0x84, 0xdc, 0x5f, 0xf2); -DEFINE_GUID(CLSID_D3D12SDKConfiguration, 0x7cda6aca, 0xa03e, 0x49c8, 0x94, 0x58, 0x03, 0x34, 0xd2, 0x0e, 0x07, 0xce); -DEFINE_GUID(CLSID_D3D12DeviceFactory, 0x114863bf, 0xc386, 0x4aee, 0xb3, 0x9d, 0x8f, 0x0b, 0xbb, 0x06, 0x29, 0x55); -DEFINE_GUID(CLSID_D3D12DSRDeviceFactory, 0xbb6dd27e, 0x94a9, 0x41a6, 0x9f, 0x1b, 0x13, 0x37, 0x72, 0x17, 0x24, 0x28); - -typedef HRESULT (WINAPI* PFN_D3D12_GET_INTERFACE)( _In_ REFCLSID, _In_ REFIID, _COM_Outptr_opt_ void** ); - -HRESULT WINAPI D3D12GetInterface( _In_ REFCLSID rclsid, _In_ REFIID riid, _COM_Outptr_opt_ void** ppvDebug ); - -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0065_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0065_v0_0_s_ifspec; - -#ifndef __ID3D12SDKConfiguration_INTERFACE_DEFINED__ -#define __ID3D12SDKConfiguration_INTERFACE_DEFINED__ - -/* interface ID3D12SDKConfiguration */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12SDKConfiguration; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("e9eb5314-33aa-42b2-a718-d77f58b1f1c7") - ID3D12SDKConfiguration : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE SetSDKVersion( - UINT SDKVersion, - _In_z_ LPCSTR SDKPath) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12SDKConfigurationVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12SDKConfiguration * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12SDKConfiguration * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12SDKConfiguration * This); - - DECLSPEC_XFGVIRT(ID3D12SDKConfiguration, SetSDKVersion) - HRESULT ( STDMETHODCALLTYPE *SetSDKVersion )( - ID3D12SDKConfiguration * This, - UINT SDKVersion, - _In_z_ LPCSTR SDKPath); - - END_INTERFACE - } ID3D12SDKConfigurationVtbl; - - interface ID3D12SDKConfiguration - { - CONST_VTBL struct ID3D12SDKConfigurationVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12SDKConfiguration_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12SDKConfiguration_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12SDKConfiguration_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12SDKConfiguration_SetSDKVersion(This,SDKVersion,SDKPath) \ - ( (This)->lpVtbl -> SetSDKVersion(This,SDKVersion,SDKPath) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12SDKConfiguration_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12SDKConfiguration1_INTERFACE_DEFINED__ -#define __ID3D12SDKConfiguration1_INTERFACE_DEFINED__ - -/* interface ID3D12SDKConfiguration1 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12SDKConfiguration1; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("8aaf9303-ad25-48b9-9a57-d9c37e009d9f") - ID3D12SDKConfiguration1 : public ID3D12SDKConfiguration - { - public: - virtual HRESULT STDMETHODCALLTYPE CreateDeviceFactory( - UINT SDKVersion, - _In_ LPCSTR SDKPath, - REFIID riid, - _COM_Outptr_ void **ppvFactory) = 0; - - virtual void STDMETHODCALLTYPE FreeUnusedSDKs( void) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12SDKConfiguration1Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12SDKConfiguration1 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12SDKConfiguration1 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12SDKConfiguration1 * This); - - DECLSPEC_XFGVIRT(ID3D12SDKConfiguration, SetSDKVersion) - HRESULT ( STDMETHODCALLTYPE *SetSDKVersion )( - ID3D12SDKConfiguration1 * This, - UINT SDKVersion, - _In_z_ LPCSTR SDKPath); - - DECLSPEC_XFGVIRT(ID3D12SDKConfiguration1, CreateDeviceFactory) - HRESULT ( STDMETHODCALLTYPE *CreateDeviceFactory )( - ID3D12SDKConfiguration1 * This, - UINT SDKVersion, - _In_ LPCSTR SDKPath, - REFIID riid, - _COM_Outptr_ void **ppvFactory); - - DECLSPEC_XFGVIRT(ID3D12SDKConfiguration1, FreeUnusedSDKs) - void ( STDMETHODCALLTYPE *FreeUnusedSDKs )( - ID3D12SDKConfiguration1 * This); - - END_INTERFACE - } ID3D12SDKConfiguration1Vtbl; - - interface ID3D12SDKConfiguration1 - { - CONST_VTBL struct ID3D12SDKConfiguration1Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12SDKConfiguration1_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12SDKConfiguration1_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12SDKConfiguration1_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12SDKConfiguration1_SetSDKVersion(This,SDKVersion,SDKPath) \ - ( (This)->lpVtbl -> SetSDKVersion(This,SDKVersion,SDKPath) ) - -#define ID3D12SDKConfiguration1_CreateDeviceFactory(This,SDKVersion,SDKPath,riid,ppvFactory) \ - ( (This)->lpVtbl -> CreateDeviceFactory(This,SDKVersion,SDKPath,riid,ppvFactory) ) - -#define ID3D12SDKConfiguration1_FreeUnusedSDKs(This) \ - ( (This)->lpVtbl -> FreeUnusedSDKs(This) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12SDKConfiguration1_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12_0000_0067 */ -/* [local] */ - -typedef -enum D3D12_DEVICE_FACTORY_FLAGS - { - D3D12_DEVICE_FACTORY_FLAG_NONE = 0, - D3D12_DEVICE_FACTORY_FLAG_ALLOW_RETURNING_EXISTING_DEVICE = 0x1, - D3D12_DEVICE_FACTORY_FLAG_ALLOW_RETURNING_INCOMPATIBLE_EXISTING_DEVICE = 0x2, - D3D12_DEVICE_FACTORY_FLAG_DISALLOW_STORING_NEW_DEVICE_AS_SINGLETON = 0x4 - } D3D12_DEVICE_FACTORY_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_DEVICE_FACTORY_FLAGS ) - -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0067_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0067_v0_0_s_ifspec; - -#ifndef __ID3D12DeviceFactory_INTERFACE_DEFINED__ -#define __ID3D12DeviceFactory_INTERFACE_DEFINED__ - -/* interface ID3D12DeviceFactory */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12DeviceFactory; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("61f307d3-d34e-4e7c-8374-3ba4de23cccb") - ID3D12DeviceFactory : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE InitializeFromGlobalState( void) = 0; - - virtual HRESULT STDMETHODCALLTYPE ApplyToGlobalState( void) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetFlags( - D3D12_DEVICE_FACTORY_FLAGS flags) = 0; - - virtual D3D12_DEVICE_FACTORY_FLAGS STDMETHODCALLTYPE GetFlags( void) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetConfigurationInterface( - REFCLSID clsid, - REFIID iid, - _COM_Outptr_ void **ppv) = 0; - - virtual HRESULT STDMETHODCALLTYPE EnableExperimentalFeatures( - UINT NumFeatures, - _In_reads_(NumFeatures) const IID *pIIDs, - _In_reads_opt_(NumFeatures) void *pConfigurationStructs, - _In_reads_opt_(NumFeatures) UINT *pConfigurationStructSizes) = 0; - - virtual HRESULT STDMETHODCALLTYPE CreateDevice( - _In_opt_ IUnknown *adapter, - D3D_FEATURE_LEVEL FeatureLevel, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12DeviceFactoryVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12DeviceFactory * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12DeviceFactory * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12DeviceFactory * This); - - DECLSPEC_XFGVIRT(ID3D12DeviceFactory, InitializeFromGlobalState) - HRESULT ( STDMETHODCALLTYPE *InitializeFromGlobalState )( - ID3D12DeviceFactory * This); - - DECLSPEC_XFGVIRT(ID3D12DeviceFactory, ApplyToGlobalState) - HRESULT ( STDMETHODCALLTYPE *ApplyToGlobalState )( - ID3D12DeviceFactory * This); - - DECLSPEC_XFGVIRT(ID3D12DeviceFactory, SetFlags) - HRESULT ( STDMETHODCALLTYPE *SetFlags )( - ID3D12DeviceFactory * This, - D3D12_DEVICE_FACTORY_FLAGS flags); - - DECLSPEC_XFGVIRT(ID3D12DeviceFactory, GetFlags) - D3D12_DEVICE_FACTORY_FLAGS ( STDMETHODCALLTYPE *GetFlags )( - ID3D12DeviceFactory * This); - - DECLSPEC_XFGVIRT(ID3D12DeviceFactory, GetConfigurationInterface) - HRESULT ( STDMETHODCALLTYPE *GetConfigurationInterface )( - ID3D12DeviceFactory * This, - REFCLSID clsid, - REFIID iid, - _COM_Outptr_ void **ppv); - - DECLSPEC_XFGVIRT(ID3D12DeviceFactory, EnableExperimentalFeatures) - HRESULT ( STDMETHODCALLTYPE *EnableExperimentalFeatures )( - ID3D12DeviceFactory * This, - UINT NumFeatures, - _In_reads_(NumFeatures) const IID *pIIDs, - _In_reads_opt_(NumFeatures) void *pConfigurationStructs, - _In_reads_opt_(NumFeatures) UINT *pConfigurationStructSizes); - - DECLSPEC_XFGVIRT(ID3D12DeviceFactory, CreateDevice) - HRESULT ( STDMETHODCALLTYPE *CreateDevice )( - ID3D12DeviceFactory * This, - _In_opt_ IUnknown *adapter, - D3D_FEATURE_LEVEL FeatureLevel, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - END_INTERFACE - } ID3D12DeviceFactoryVtbl; - - interface ID3D12DeviceFactory - { - CONST_VTBL struct ID3D12DeviceFactoryVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12DeviceFactory_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12DeviceFactory_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12DeviceFactory_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12DeviceFactory_InitializeFromGlobalState(This) \ - ( (This)->lpVtbl -> InitializeFromGlobalState(This) ) - -#define ID3D12DeviceFactory_ApplyToGlobalState(This) \ - ( (This)->lpVtbl -> ApplyToGlobalState(This) ) - -#define ID3D12DeviceFactory_SetFlags(This,flags) \ - ( (This)->lpVtbl -> SetFlags(This,flags) ) - -#define ID3D12DeviceFactory_GetFlags(This) \ - ( (This)->lpVtbl -> GetFlags(This) ) - -#define ID3D12DeviceFactory_GetConfigurationInterface(This,clsid,iid,ppv) \ - ( (This)->lpVtbl -> GetConfigurationInterface(This,clsid,iid,ppv) ) - -#define ID3D12DeviceFactory_EnableExperimentalFeatures(This,NumFeatures,pIIDs,pConfigurationStructs,pConfigurationStructSizes) \ - ( (This)->lpVtbl -> EnableExperimentalFeatures(This,NumFeatures,pIIDs,pConfigurationStructs,pConfigurationStructSizes) ) - -#define ID3D12DeviceFactory_CreateDevice(This,adapter,FeatureLevel,riid,ppvDevice) \ - ( (This)->lpVtbl -> CreateDevice(This,adapter,FeatureLevel,riid,ppvDevice) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12DeviceFactory_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12_0000_0068 */ -/* [local] */ - -typedef -enum D3D12_DEVICE_FLAGS - { - D3D12_DEVICE_FLAG_NONE = 0, - D3D12_DEVICE_FLAG_DEBUG_LAYER_ENABLED = 0x1, - D3D12_DEVICE_FLAG_GPU_BASED_VALIDATION_ENABLED = 0x2, - D3D12_DEVICE_FLAG_SYNCHRONIZED_COMMAND_QUEUE_VALIDATION_DISABLED = 0x4, - D3D12_DEVICE_FLAG_DRED_AUTO_BREADCRUMBS_ENABLED = 0x8, - D3D12_DEVICE_FLAG_DRED_PAGE_FAULT_REPORTING_ENABLED = 0x10, - D3D12_DEVICE_FLAG_DRED_WATSON_REPORTING_ENABLED = 0x20, - D3D12_DEVICE_FLAG_DRED_BREADCRUMB_CONTEXT_ENABLED = 0x40, - D3D12_DEVICE_FLAG_DRED_USE_MARKERS_ONLY_BREADCRUMBS = 0x80, - D3D12_DEVICE_FLAG_SHADER_INSTRUMENTATION_ENABLED = 0x100, - D3D12_DEVICE_FLAG_AUTO_DEBUG_NAME_ENABLED = 0x200, - D3D12_DEVICE_FLAG_FORCE_LEGACY_STATE_VALIDATION = 0x400 - } D3D12_DEVICE_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_DEVICE_FLAGS ) -typedef struct D3D12_DEVICE_CONFIGURATION_DESC - { - D3D12_DEVICE_FLAGS Flags; - UINT GpuBasedValidationFlags; - UINT SDKVersion; - UINT NumEnabledExperimentalFeatures; - } D3D12_DEVICE_CONFIGURATION_DESC; - -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0068_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0068_v0_0_s_ifspec; - -#ifndef __ID3D12DeviceConfiguration_INTERFACE_DEFINED__ -#define __ID3D12DeviceConfiguration_INTERFACE_DEFINED__ - -/* interface ID3D12DeviceConfiguration */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12DeviceConfiguration; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("78dbf87b-f766-422b-a61c-c8c446bdb9ad") - ID3D12DeviceConfiguration : public IUnknown - { - public: -#if defined(_MSC_VER) || !defined(_WIN32) - virtual D3D12_DEVICE_CONFIGURATION_DESC STDMETHODCALLTYPE GetDesc( void) = 0; -#else - virtual D3D12_DEVICE_CONFIGURATION_DESC *STDMETHODCALLTYPE GetDesc( - D3D12_DEVICE_CONFIGURATION_DESC * RetVal) = 0; -#endif - - virtual HRESULT STDMETHODCALLTYPE GetEnabledExperimentalFeatures( - _Out_writes_(NumGuids) GUID *pGuids, - UINT NumGuids) = 0; - - virtual HRESULT STDMETHODCALLTYPE SerializeVersionedRootSignature( - _In_ const D3D12_VERSIONED_ROOT_SIGNATURE_DESC *pDesc, - _COM_Outptr_ ID3DBlob **ppResult, - _Always_(_Outptr_opt_result_maybenull_) ID3DBlob **ppError) = 0; - - virtual HRESULT STDMETHODCALLTYPE CreateVersionedRootSignatureDeserializer( - _In_reads_bytes_(Size) const void *pBlob, - SIZE_T Size, - REFIID riid, - _COM_Outptr_ void **ppvDeserializer) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12DeviceConfigurationVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12DeviceConfiguration * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12DeviceConfiguration * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12DeviceConfiguration * This); - - DECLSPEC_XFGVIRT(ID3D12DeviceConfiguration, GetDesc) -#if !defined(_WIN32) - D3D12_DEVICE_CONFIGURATION_DESC ( STDMETHODCALLTYPE *GetDesc )( - ID3D12DeviceConfiguration * This); - -#else - D3D12_DEVICE_CONFIGURATION_DESC *( STDMETHODCALLTYPE *GetDesc )( - ID3D12DeviceConfiguration * This, - D3D12_DEVICE_CONFIGURATION_DESC * RetVal); - -#endif - - DECLSPEC_XFGVIRT(ID3D12DeviceConfiguration, GetEnabledExperimentalFeatures) - HRESULT ( STDMETHODCALLTYPE *GetEnabledExperimentalFeatures )( - ID3D12DeviceConfiguration * This, - _Out_writes_(NumGuids) GUID *pGuids, - UINT NumGuids); - - DECLSPEC_XFGVIRT(ID3D12DeviceConfiguration, SerializeVersionedRootSignature) - HRESULT ( STDMETHODCALLTYPE *SerializeVersionedRootSignature )( - ID3D12DeviceConfiguration * This, - _In_ const D3D12_VERSIONED_ROOT_SIGNATURE_DESC *pDesc, - _COM_Outptr_ ID3DBlob **ppResult, - _Always_(_Outptr_opt_result_maybenull_) ID3DBlob **ppError); - - DECLSPEC_XFGVIRT(ID3D12DeviceConfiguration, CreateVersionedRootSignatureDeserializer) - HRESULT ( STDMETHODCALLTYPE *CreateVersionedRootSignatureDeserializer )( - ID3D12DeviceConfiguration * This, - _In_reads_bytes_(Size) const void *pBlob, - SIZE_T Size, - REFIID riid, - _COM_Outptr_ void **ppvDeserializer); - - END_INTERFACE - } ID3D12DeviceConfigurationVtbl; - - interface ID3D12DeviceConfiguration - { - CONST_VTBL struct ID3D12DeviceConfigurationVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12DeviceConfiguration_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12DeviceConfiguration_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12DeviceConfiguration_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#if !defined(_WIN32) - -#define ID3D12DeviceConfiguration_GetDesc(This) \ - ( (This)->lpVtbl -> GetDesc(This) ) -#else -#define ID3D12DeviceConfiguration_GetDesc(This,RetVal) \ - ( (This)->lpVtbl -> GetDesc(This,RetVal) ) -#endif - -#define ID3D12DeviceConfiguration_GetEnabledExperimentalFeatures(This,pGuids,NumGuids) \ - ( (This)->lpVtbl -> GetEnabledExperimentalFeatures(This,pGuids,NumGuids) ) - -#define ID3D12DeviceConfiguration_SerializeVersionedRootSignature(This,pDesc,ppResult,ppError) \ - ( (This)->lpVtbl -> SerializeVersionedRootSignature(This,pDesc,ppResult,ppError) ) - -#define ID3D12DeviceConfiguration_CreateVersionedRootSignatureDeserializer(This,pBlob,Size,riid,ppvDeserializer) \ - ( (This)->lpVtbl -> CreateVersionedRootSignatureDeserializer(This,pBlob,Size,riid,ppvDeserializer) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12DeviceConfiguration_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12DeviceConfiguration1_INTERFACE_DEFINED__ -#define __ID3D12DeviceConfiguration1_INTERFACE_DEFINED__ - -/* interface ID3D12DeviceConfiguration1 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12DeviceConfiguration1; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("ed342442-6343-4e16-bb82-a3a577874e56") - ID3D12DeviceConfiguration1 : public ID3D12DeviceConfiguration - { - public: - virtual HRESULT STDMETHODCALLTYPE CreateVersionedRootSignatureDeserializerFromSubobjectInLibrary( - _In_reads_bytes_(Size) const void *pLibraryBlob, - SIZE_T Size, - LPCWSTR RootSignatureSubobjectName, - REFIID riid, - _COM_Outptr_ void **ppvDeserializer) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12DeviceConfiguration1Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12DeviceConfiguration1 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12DeviceConfiguration1 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12DeviceConfiguration1 * This); - - DECLSPEC_XFGVIRT(ID3D12DeviceConfiguration, GetDesc) -#if !defined(_WIN32) - D3D12_DEVICE_CONFIGURATION_DESC ( STDMETHODCALLTYPE *GetDesc )( - ID3D12DeviceConfiguration1 * This); - -#else - D3D12_DEVICE_CONFIGURATION_DESC *( STDMETHODCALLTYPE *GetDesc )( - ID3D12DeviceConfiguration1 * This, - D3D12_DEVICE_CONFIGURATION_DESC * RetVal); - -#endif - - DECLSPEC_XFGVIRT(ID3D12DeviceConfiguration, GetEnabledExperimentalFeatures) - HRESULT ( STDMETHODCALLTYPE *GetEnabledExperimentalFeatures )( - ID3D12DeviceConfiguration1 * This, - _Out_writes_(NumGuids) GUID *pGuids, - UINT NumGuids); - - DECLSPEC_XFGVIRT(ID3D12DeviceConfiguration, SerializeVersionedRootSignature) - HRESULT ( STDMETHODCALLTYPE *SerializeVersionedRootSignature )( - ID3D12DeviceConfiguration1 * This, - _In_ const D3D12_VERSIONED_ROOT_SIGNATURE_DESC *pDesc, - _COM_Outptr_ ID3DBlob **ppResult, - _Always_(_Outptr_opt_result_maybenull_) ID3DBlob **ppError); - - DECLSPEC_XFGVIRT(ID3D12DeviceConfiguration, CreateVersionedRootSignatureDeserializer) - HRESULT ( STDMETHODCALLTYPE *CreateVersionedRootSignatureDeserializer )( - ID3D12DeviceConfiguration1 * This, - _In_reads_bytes_(Size) const void *pBlob, - SIZE_T Size, - REFIID riid, - _COM_Outptr_ void **ppvDeserializer); - - DECLSPEC_XFGVIRT(ID3D12DeviceConfiguration1, CreateVersionedRootSignatureDeserializerFromSubobjectInLibrary) - HRESULT ( STDMETHODCALLTYPE *CreateVersionedRootSignatureDeserializerFromSubobjectInLibrary )( - ID3D12DeviceConfiguration1 * This, - _In_reads_bytes_(Size) const void *pLibraryBlob, - SIZE_T Size, - LPCWSTR RootSignatureSubobjectName, - REFIID riid, - _COM_Outptr_ void **ppvDeserializer); - - END_INTERFACE - } ID3D12DeviceConfiguration1Vtbl; - - interface ID3D12DeviceConfiguration1 - { - CONST_VTBL struct ID3D12DeviceConfiguration1Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12DeviceConfiguration1_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12DeviceConfiguration1_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12DeviceConfiguration1_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#if !defined(_WIN32) - -#define ID3D12DeviceConfiguration1_GetDesc(This) \ - ( (This)->lpVtbl -> GetDesc(This) ) -#else -#define ID3D12DeviceConfiguration1_GetDesc(This,RetVal) \ - ( (This)->lpVtbl -> GetDesc(This,RetVal) ) -#endif - -#define ID3D12DeviceConfiguration1_GetEnabledExperimentalFeatures(This,pGuids,NumGuids) \ - ( (This)->lpVtbl -> GetEnabledExperimentalFeatures(This,pGuids,NumGuids) ) - -#define ID3D12DeviceConfiguration1_SerializeVersionedRootSignature(This,pDesc,ppResult,ppError) \ - ( (This)->lpVtbl -> SerializeVersionedRootSignature(This,pDesc,ppResult,ppError) ) - -#define ID3D12DeviceConfiguration1_CreateVersionedRootSignatureDeserializer(This,pBlob,Size,riid,ppvDeserializer) \ - ( (This)->lpVtbl -> CreateVersionedRootSignatureDeserializer(This,pBlob,Size,riid,ppvDeserializer) ) - -#define ID3D12DeviceConfiguration1_CreateVersionedRootSignatureDeserializerFromSubobjectInLibrary(This,pLibraryBlob,Size,RootSignatureSubobjectName,riid,ppvDeserializer) \ - ( (This)->lpVtbl -> CreateVersionedRootSignatureDeserializerFromSubobjectInLibrary(This,pLibraryBlob,Size,RootSignatureSubobjectName,riid,ppvDeserializer) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12DeviceConfiguration1_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12_0000_0070 */ -/* [local] */ - -typedef -enum D3D12_AXIS_SHADING_RATE - { - D3D12_AXIS_SHADING_RATE_1X = 0, - D3D12_AXIS_SHADING_RATE_2X = 0x1, - D3D12_AXIS_SHADING_RATE_4X = 0x2 - } D3D12_AXIS_SHADING_RATE; - -#define D3D12_SHADING_RATE_X_AXIS_SHIFT 2 -#define D3D12_SHADING_RATE_VALID_MASK 3 -#define D3D12_MAKE_COARSE_SHADING_RATE(x,y) ((x) << D3D12_SHADING_RATE_X_AXIS_SHIFT | (y)) -#define D3D12_GET_COARSE_SHADING_RATE_X_AXIS(x) (((x) >> D3D12_SHADING_RATE_X_AXIS_SHIFT) & D3D12_SHADING_RATE_VALID_MASK) -#define D3D12_GET_COARSE_SHADING_RATE_Y_AXIS(y) ((y) & D3D12_SHADING_RATE_VALID_MASK) -typedef -enum D3D12_SHADING_RATE - { - D3D12_SHADING_RATE_1X1 = 0, - D3D12_SHADING_RATE_1X2 = 0x1, - D3D12_SHADING_RATE_2X1 = 0x4, - D3D12_SHADING_RATE_2X2 = 0x5, - D3D12_SHADING_RATE_2X4 = 0x6, - D3D12_SHADING_RATE_4X2 = 0x9, - D3D12_SHADING_RATE_4X4 = 0xa - } D3D12_SHADING_RATE; - -typedef -enum D3D12_SHADING_RATE_COMBINER - { - D3D12_SHADING_RATE_COMBINER_PASSTHROUGH = 0, - D3D12_SHADING_RATE_COMBINER_OVERRIDE = 1, - D3D12_SHADING_RATE_COMBINER_MIN = 2, - D3D12_SHADING_RATE_COMBINER_MAX = 3, - D3D12_SHADING_RATE_COMBINER_SUM = 4 - } D3D12_SHADING_RATE_COMBINER; - -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0070_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0070_v0_0_s_ifspec; - -#ifndef __ID3D12GraphicsCommandList5_INTERFACE_DEFINED__ -#define __ID3D12GraphicsCommandList5_INTERFACE_DEFINED__ - -/* interface ID3D12GraphicsCommandList5 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12GraphicsCommandList5; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("55050859-4024-474c-87f5-6472eaee44ea") - ID3D12GraphicsCommandList5 : public ID3D12GraphicsCommandList4 - { - public: - virtual void STDMETHODCALLTYPE RSSetShadingRate( - _In_ D3D12_SHADING_RATE baseShadingRate, - _In_reads_opt_(D3D12_RS_SET_SHADING_RATE_COMBINER_COUNT) const D3D12_SHADING_RATE_COMBINER *combiners) = 0; - - virtual void STDMETHODCALLTYPE RSSetShadingRateImage( - _In_opt_ ID3D12Resource *shadingRateImage) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12GraphicsCommandList5Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12GraphicsCommandList5 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12GraphicsCommandList5 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12GraphicsCommandList5 * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12GraphicsCommandList5 * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12GraphicsCommandList5 * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12GraphicsCommandList5 * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12GraphicsCommandList5 * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12GraphicsCommandList5 * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12CommandList, GetType) - D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )( - ID3D12GraphicsCommandList5 * This); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Close) - HRESULT ( STDMETHODCALLTYPE *Close )( - ID3D12GraphicsCommandList5 * This); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Reset) - HRESULT ( STDMETHODCALLTYPE *Reset )( - ID3D12GraphicsCommandList5 * This, - _In_ ID3D12CommandAllocator *pAllocator, - _In_opt_ ID3D12PipelineState *pInitialState); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearState) - void ( STDMETHODCALLTYPE *ClearState )( - ID3D12GraphicsCommandList5 * This, - _In_opt_ ID3D12PipelineState *pPipelineState); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawInstanced) - void ( STDMETHODCALLTYPE *DrawInstanced )( - ID3D12GraphicsCommandList5 * This, - _In_ UINT VertexCountPerInstance, - _In_ UINT InstanceCount, - _In_ UINT StartVertexLocation, - _In_ UINT StartInstanceLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawIndexedInstanced) - void ( STDMETHODCALLTYPE *DrawIndexedInstanced )( - ID3D12GraphicsCommandList5 * This, - _In_ UINT IndexCountPerInstance, - _In_ UINT InstanceCount, - _In_ UINT StartIndexLocation, - _In_ INT BaseVertexLocation, - _In_ UINT StartInstanceLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Dispatch) - void ( STDMETHODCALLTYPE *Dispatch )( - ID3D12GraphicsCommandList5 * This, - _In_ UINT ThreadGroupCountX, - _In_ UINT ThreadGroupCountY, - _In_ UINT ThreadGroupCountZ); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyBufferRegion) - void ( STDMETHODCALLTYPE *CopyBufferRegion )( - ID3D12GraphicsCommandList5 * This, - _In_ ID3D12Resource *pDstBuffer, - UINT64 DstOffset, - _In_ ID3D12Resource *pSrcBuffer, - UINT64 SrcOffset, - UINT64 NumBytes); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTextureRegion) - void ( STDMETHODCALLTYPE *CopyTextureRegion )( - ID3D12GraphicsCommandList5 * This, - _In_ const D3D12_TEXTURE_COPY_LOCATION *pDst, - UINT DstX, - UINT DstY, - UINT DstZ, - _In_ const D3D12_TEXTURE_COPY_LOCATION *pSrc, - _In_opt_ const D3D12_BOX *pSrcBox); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyResource) - void ( STDMETHODCALLTYPE *CopyResource )( - ID3D12GraphicsCommandList5 * This, - _In_ ID3D12Resource *pDstResource, - _In_ ID3D12Resource *pSrcResource); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTiles) - void ( STDMETHODCALLTYPE *CopyTiles )( - ID3D12GraphicsCommandList5 * This, - _In_ ID3D12Resource *pTiledResource, - _In_ const D3D12_TILED_RESOURCE_COORDINATE *pTileRegionStartCoordinate, - _In_ const D3D12_TILE_REGION_SIZE *pTileRegionSize, - _In_ ID3D12Resource *pBuffer, - UINT64 BufferStartOffsetInBytes, - D3D12_TILE_COPY_FLAGS Flags); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveSubresource) - void ( STDMETHODCALLTYPE *ResolveSubresource )( - ID3D12GraphicsCommandList5 * This, - _In_ ID3D12Resource *pDstResource, - _In_ UINT DstSubresource, - _In_ ID3D12Resource *pSrcResource, - _In_ UINT SrcSubresource, - _In_ DXGI_FORMAT Format); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetPrimitiveTopology) - void ( STDMETHODCALLTYPE *IASetPrimitiveTopology )( - ID3D12GraphicsCommandList5 * This, - _In_ D3D12_PRIMITIVE_TOPOLOGY PrimitiveTopology); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetViewports) - void ( STDMETHODCALLTYPE *RSSetViewports )( - ID3D12GraphicsCommandList5 * This, - _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE) UINT NumViewports, - _In_reads_( NumViewports) const D3D12_VIEWPORT *pViewports); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetScissorRects) - void ( STDMETHODCALLTYPE *RSSetScissorRects )( - ID3D12GraphicsCommandList5 * This, - _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE) UINT NumRects, - _In_reads_( NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetBlendFactor) - void ( STDMETHODCALLTYPE *OMSetBlendFactor )( - ID3D12GraphicsCommandList5 * This, - _In_reads_opt_(4) const FLOAT BlendFactor[ 4 ]); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetStencilRef) - void ( STDMETHODCALLTYPE *OMSetStencilRef )( - ID3D12GraphicsCommandList5 * This, - _In_ UINT StencilRef); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPipelineState) - void ( STDMETHODCALLTYPE *SetPipelineState )( - ID3D12GraphicsCommandList5 * This, - _In_ ID3D12PipelineState *pPipelineState); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResourceBarrier) - void ( STDMETHODCALLTYPE *ResourceBarrier )( - ID3D12GraphicsCommandList5 * This, - _In_ UINT NumBarriers, - _In_reads_(NumBarriers) const D3D12_RESOURCE_BARRIER *pBarriers); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteBundle) - void ( STDMETHODCALLTYPE *ExecuteBundle )( - ID3D12GraphicsCommandList5 * This, - _In_ ID3D12GraphicsCommandList *pCommandList); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetDescriptorHeaps) - void ( STDMETHODCALLTYPE *SetDescriptorHeaps )( - ID3D12GraphicsCommandList5 * This, - _In_ UINT NumDescriptorHeaps, - _In_reads_(NumDescriptorHeaps) ID3D12DescriptorHeap *const *ppDescriptorHeaps); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootSignature) - void ( STDMETHODCALLTYPE *SetComputeRootSignature )( - ID3D12GraphicsCommandList5 * This, - _In_opt_ ID3D12RootSignature *pRootSignature); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootSignature) - void ( STDMETHODCALLTYPE *SetGraphicsRootSignature )( - ID3D12GraphicsCommandList5 * This, - _In_opt_ ID3D12RootSignature *pRootSignature); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootDescriptorTable) - void ( STDMETHODCALLTYPE *SetComputeRootDescriptorTable )( - ID3D12GraphicsCommandList5 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootDescriptorTable) - void ( STDMETHODCALLTYPE *SetGraphicsRootDescriptorTable )( - ID3D12GraphicsCommandList5 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstant) - void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstant )( - ID3D12GraphicsCommandList5 * This, - _In_ UINT RootParameterIndex, - _In_ UINT SrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstant) - void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstant )( - ID3D12GraphicsCommandList5 * This, - _In_ UINT RootParameterIndex, - _In_ UINT SrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstants) - void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstants )( - ID3D12GraphicsCommandList5 * This, - _In_ UINT RootParameterIndex, - _In_ UINT Num32BitValuesToSet, - _In_reads_(Num32BitValuesToSet*sizeof(UINT)) const void *pSrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstants) - void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstants )( - ID3D12GraphicsCommandList5 * This, - _In_ UINT RootParameterIndex, - _In_ UINT Num32BitValuesToSet, - _In_reads_(Num32BitValuesToSet*sizeof(UINT)) const void *pSrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootConstantBufferView) - void ( STDMETHODCALLTYPE *SetComputeRootConstantBufferView )( - ID3D12GraphicsCommandList5 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootConstantBufferView) - void ( STDMETHODCALLTYPE *SetGraphicsRootConstantBufferView )( - ID3D12GraphicsCommandList5 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootShaderResourceView) - void ( STDMETHODCALLTYPE *SetComputeRootShaderResourceView )( - ID3D12GraphicsCommandList5 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootShaderResourceView) - void ( STDMETHODCALLTYPE *SetGraphicsRootShaderResourceView )( - ID3D12GraphicsCommandList5 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootUnorderedAccessView) - void ( STDMETHODCALLTYPE *SetComputeRootUnorderedAccessView )( - ID3D12GraphicsCommandList5 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootUnorderedAccessView) - void ( STDMETHODCALLTYPE *SetGraphicsRootUnorderedAccessView )( - ID3D12GraphicsCommandList5 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetIndexBuffer) - void ( STDMETHODCALLTYPE *IASetIndexBuffer )( - ID3D12GraphicsCommandList5 * This, - _In_opt_ const D3D12_INDEX_BUFFER_VIEW *pView); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetVertexBuffers) - void ( STDMETHODCALLTYPE *IASetVertexBuffers )( - ID3D12GraphicsCommandList5 * This, - _In_ UINT StartSlot, - _In_ UINT NumViews, - _In_reads_opt_(NumViews) const D3D12_VERTEX_BUFFER_VIEW *pViews); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SOSetTargets) - void ( STDMETHODCALLTYPE *SOSetTargets )( - ID3D12GraphicsCommandList5 * This, - _In_ UINT StartSlot, - _In_ UINT NumViews, - _In_reads_opt_(NumViews) const D3D12_STREAM_OUTPUT_BUFFER_VIEW *pViews); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetRenderTargets) - void ( STDMETHODCALLTYPE *OMSetRenderTargets )( - ID3D12GraphicsCommandList5 * This, - _In_ UINT NumRenderTargetDescriptors, - _In_opt_ const D3D12_CPU_DESCRIPTOR_HANDLE *pRenderTargetDescriptors, - _In_ BOOL RTsSingleHandleToDescriptorRange, - _In_opt_ const D3D12_CPU_DESCRIPTOR_HANDLE *pDepthStencilDescriptor); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearDepthStencilView) - void ( STDMETHODCALLTYPE *ClearDepthStencilView )( - ID3D12GraphicsCommandList5 * This, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DepthStencilView, - _In_ D3D12_CLEAR_FLAGS ClearFlags, - _In_ FLOAT Depth, - _In_ UINT8 Stencil, - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearRenderTargetView) - void ( STDMETHODCALLTYPE *ClearRenderTargetView )( - ID3D12GraphicsCommandList5 * This, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE RenderTargetView, - _In_ const FLOAT ColorRGBA[ 4 ], - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewUint) - void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewUint )( - ID3D12GraphicsCommandList5 * This, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle, - _In_ ID3D12Resource *pResource, - _In_ const UINT Values[ 4 ], - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewFloat) - void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewFloat )( - ID3D12GraphicsCommandList5 * This, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle, - _In_ ID3D12Resource *pResource, - _In_ const FLOAT Values[ 4 ], - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DiscardResource) - void ( STDMETHODCALLTYPE *DiscardResource )( - ID3D12GraphicsCommandList5 * This, - _In_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DISCARD_REGION *pRegion); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginQuery) - void ( STDMETHODCALLTYPE *BeginQuery )( - ID3D12GraphicsCommandList5 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndQuery) - void ( STDMETHODCALLTYPE *EndQuery )( - ID3D12GraphicsCommandList5 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveQueryData) - void ( STDMETHODCALLTYPE *ResolveQueryData )( - ID3D12GraphicsCommandList5 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT StartIndex, - _In_ UINT NumQueries, - _In_ ID3D12Resource *pDestinationBuffer, - _In_ UINT64 AlignedDestinationBufferOffset); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPredication) - void ( STDMETHODCALLTYPE *SetPredication )( - ID3D12GraphicsCommandList5 * This, - _In_opt_ ID3D12Resource *pBuffer, - _In_ UINT64 AlignedBufferOffset, - _In_ D3D12_PREDICATION_OP Operation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetMarker) - void ( STDMETHODCALLTYPE *SetMarker )( - ID3D12GraphicsCommandList5 * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginEvent) - void ( STDMETHODCALLTYPE *BeginEvent )( - ID3D12GraphicsCommandList5 * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndEvent) - void ( STDMETHODCALLTYPE *EndEvent )( - ID3D12GraphicsCommandList5 * This); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteIndirect) - void ( STDMETHODCALLTYPE *ExecuteIndirect )( - ID3D12GraphicsCommandList5 * This, - _In_ ID3D12CommandSignature *pCommandSignature, - _In_ UINT MaxCommandCount, - _In_ ID3D12Resource *pArgumentBuffer, - _In_ UINT64 ArgumentBufferOffset, - _In_opt_ ID3D12Resource *pCountBuffer, - _In_ UINT64 CountBufferOffset); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, AtomicCopyBufferUINT) - void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT )( - ID3D12GraphicsCommandList5 * This, - _In_ ID3D12Resource *pDstBuffer, - UINT64 DstOffset, - _In_ ID3D12Resource *pSrcBuffer, - UINT64 SrcOffset, - UINT Dependencies, - _In_reads_(Dependencies) ID3D12Resource *const *ppDependentResources, - _In_reads_(Dependencies) const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, AtomicCopyBufferUINT64) - void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT64 )( - ID3D12GraphicsCommandList5 * This, - _In_ ID3D12Resource *pDstBuffer, - UINT64 DstOffset, - _In_ ID3D12Resource *pSrcBuffer, - UINT64 SrcOffset, - UINT Dependencies, - _In_reads_(Dependencies) ID3D12Resource *const *ppDependentResources, - _In_reads_(Dependencies) const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, OMSetDepthBounds) - void ( STDMETHODCALLTYPE *OMSetDepthBounds )( - ID3D12GraphicsCommandList5 * This, - _In_ FLOAT Min, - _In_ FLOAT Max); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, SetSamplePositions) - void ( STDMETHODCALLTYPE *SetSamplePositions )( - ID3D12GraphicsCommandList5 * This, - _In_ UINT NumSamplesPerPixel, - _In_ UINT NumPixels, - _In_reads_(NumSamplesPerPixel*NumPixels) D3D12_SAMPLE_POSITION *pSamplePositions); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, ResolveSubresourceRegion) - void ( STDMETHODCALLTYPE *ResolveSubresourceRegion )( - ID3D12GraphicsCommandList5 * This, - _In_ ID3D12Resource *pDstResource, - _In_ UINT DstSubresource, - _In_ UINT DstX, - _In_ UINT DstY, - _In_ ID3D12Resource *pSrcResource, - _In_ UINT SrcSubresource, - _In_opt_ D3D12_RECT *pSrcRect, - _In_ DXGI_FORMAT Format, - _In_ D3D12_RESOLVE_MODE ResolveMode); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, SetViewInstanceMask) - void ( STDMETHODCALLTYPE *SetViewInstanceMask )( - ID3D12GraphicsCommandList5 * This, - _In_ UINT Mask); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList2, WriteBufferImmediate) - void ( STDMETHODCALLTYPE *WriteBufferImmediate )( - ID3D12GraphicsCommandList5 * This, - UINT Count, - _In_reads_(Count) const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams, - _In_reads_opt_(Count) const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList3, SetProtectedResourceSession) - void ( STDMETHODCALLTYPE *SetProtectedResourceSession )( - ID3D12GraphicsCommandList5 * This, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, BeginRenderPass) - void ( STDMETHODCALLTYPE *BeginRenderPass )( - ID3D12GraphicsCommandList5 * This, - _In_ UINT NumRenderTargets, - _In_reads_opt_(NumRenderTargets) const D3D12_RENDER_PASS_RENDER_TARGET_DESC *pRenderTargets, - _In_opt_ const D3D12_RENDER_PASS_DEPTH_STENCIL_DESC *pDepthStencil, - D3D12_RENDER_PASS_FLAGS Flags); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, EndRenderPass) - void ( STDMETHODCALLTYPE *EndRenderPass )( - ID3D12GraphicsCommandList5 * This); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, InitializeMetaCommand) - void ( STDMETHODCALLTYPE *InitializeMetaCommand )( - ID3D12GraphicsCommandList5 * This, - _In_ ID3D12MetaCommand *pMetaCommand, - _In_reads_bytes_opt_(InitializationParametersDataSizeInBytes) const void *pInitializationParametersData, - _In_ SIZE_T InitializationParametersDataSizeInBytes); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, ExecuteMetaCommand) - void ( STDMETHODCALLTYPE *ExecuteMetaCommand )( - ID3D12GraphicsCommandList5 * This, - _In_ ID3D12MetaCommand *pMetaCommand, - _In_reads_bytes_opt_(ExecutionParametersDataSizeInBytes) const void *pExecutionParametersData, - _In_ SIZE_T ExecutionParametersDataSizeInBytes); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, BuildRaytracingAccelerationStructure) - void ( STDMETHODCALLTYPE *BuildRaytracingAccelerationStructure )( - ID3D12GraphicsCommandList5 * This, - _In_ const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC *pDesc, - _In_ UINT NumPostbuildInfoDescs, - _In_reads_opt_(NumPostbuildInfoDescs) const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC *pPostbuildInfoDescs); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, EmitRaytracingAccelerationStructurePostbuildInfo) - void ( STDMETHODCALLTYPE *EmitRaytracingAccelerationStructurePostbuildInfo )( - ID3D12GraphicsCommandList5 * This, - _In_ const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC *pDesc, - _In_ UINT NumSourceAccelerationStructures, - _In_reads_( NumSourceAccelerationStructures ) const D3D12_GPU_VIRTUAL_ADDRESS *pSourceAccelerationStructureData); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, CopyRaytracingAccelerationStructure) - void ( STDMETHODCALLTYPE *CopyRaytracingAccelerationStructure )( - ID3D12GraphicsCommandList5 * This, - _In_ D3D12_GPU_VIRTUAL_ADDRESS DestAccelerationStructureData, - _In_ D3D12_GPU_VIRTUAL_ADDRESS SourceAccelerationStructureData, - _In_ D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE Mode); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, SetPipelineState1) - void ( STDMETHODCALLTYPE *SetPipelineState1 )( - ID3D12GraphicsCommandList5 * This, - _In_ ID3D12StateObject *pStateObject); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, DispatchRays) - void ( STDMETHODCALLTYPE *DispatchRays )( - ID3D12GraphicsCommandList5 * This, - _In_ const D3D12_DISPATCH_RAYS_DESC *pDesc); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList5, RSSetShadingRate) - void ( STDMETHODCALLTYPE *RSSetShadingRate )( - ID3D12GraphicsCommandList5 * This, - _In_ D3D12_SHADING_RATE baseShadingRate, - _In_reads_opt_(D3D12_RS_SET_SHADING_RATE_COMBINER_COUNT) const D3D12_SHADING_RATE_COMBINER *combiners); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList5, RSSetShadingRateImage) - void ( STDMETHODCALLTYPE *RSSetShadingRateImage )( - ID3D12GraphicsCommandList5 * This, - _In_opt_ ID3D12Resource *shadingRateImage); - - END_INTERFACE - } ID3D12GraphicsCommandList5Vtbl; - - interface ID3D12GraphicsCommandList5 - { - CONST_VTBL struct ID3D12GraphicsCommandList5Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12GraphicsCommandList5_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12GraphicsCommandList5_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12GraphicsCommandList5_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12GraphicsCommandList5_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12GraphicsCommandList5_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12GraphicsCommandList5_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12GraphicsCommandList5_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12GraphicsCommandList5_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12GraphicsCommandList5_GetType(This) \ - ( (This)->lpVtbl -> GetType(This) ) - -#define ID3D12GraphicsCommandList5_Close(This) \ - ( (This)->lpVtbl -> Close(This) ) - -#define ID3D12GraphicsCommandList5_Reset(This,pAllocator,pInitialState) \ - ( (This)->lpVtbl -> Reset(This,pAllocator,pInitialState) ) - -#define ID3D12GraphicsCommandList5_ClearState(This,pPipelineState) \ - ( (This)->lpVtbl -> ClearState(This,pPipelineState) ) - -#define ID3D12GraphicsCommandList5_DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) \ - ( (This)->lpVtbl -> DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) ) - -#define ID3D12GraphicsCommandList5_DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) \ - ( (This)->lpVtbl -> DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) ) - -#define ID3D12GraphicsCommandList5_Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) \ - ( (This)->lpVtbl -> Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) ) - -#define ID3D12GraphicsCommandList5_CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes) \ - ( (This)->lpVtbl -> CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes) ) - -#define ID3D12GraphicsCommandList5_CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox) \ - ( (This)->lpVtbl -> CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox) ) - -#define ID3D12GraphicsCommandList5_CopyResource(This,pDstResource,pSrcResource) \ - ( (This)->lpVtbl -> CopyResource(This,pDstResource,pSrcResource) ) - -#define ID3D12GraphicsCommandList5_CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags) \ - ( (This)->lpVtbl -> CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags) ) - -#define ID3D12GraphicsCommandList5_ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) \ - ( (This)->lpVtbl -> ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) ) - -#define ID3D12GraphicsCommandList5_IASetPrimitiveTopology(This,PrimitiveTopology) \ - ( (This)->lpVtbl -> IASetPrimitiveTopology(This,PrimitiveTopology) ) - -#define ID3D12GraphicsCommandList5_RSSetViewports(This,NumViewports,pViewports) \ - ( (This)->lpVtbl -> RSSetViewports(This,NumViewports,pViewports) ) - -#define ID3D12GraphicsCommandList5_RSSetScissorRects(This,NumRects,pRects) \ - ( (This)->lpVtbl -> RSSetScissorRects(This,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList5_OMSetBlendFactor(This,BlendFactor) \ - ( (This)->lpVtbl -> OMSetBlendFactor(This,BlendFactor) ) - -#define ID3D12GraphicsCommandList5_OMSetStencilRef(This,StencilRef) \ - ( (This)->lpVtbl -> OMSetStencilRef(This,StencilRef) ) - -#define ID3D12GraphicsCommandList5_SetPipelineState(This,pPipelineState) \ - ( (This)->lpVtbl -> SetPipelineState(This,pPipelineState) ) - -#define ID3D12GraphicsCommandList5_ResourceBarrier(This,NumBarriers,pBarriers) \ - ( (This)->lpVtbl -> ResourceBarrier(This,NumBarriers,pBarriers) ) - -#define ID3D12GraphicsCommandList5_ExecuteBundle(This,pCommandList) \ - ( (This)->lpVtbl -> ExecuteBundle(This,pCommandList) ) - -#define ID3D12GraphicsCommandList5_SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps) \ - ( (This)->lpVtbl -> SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps) ) - -#define ID3D12GraphicsCommandList5_SetComputeRootSignature(This,pRootSignature) \ - ( (This)->lpVtbl -> SetComputeRootSignature(This,pRootSignature) ) - -#define ID3D12GraphicsCommandList5_SetGraphicsRootSignature(This,pRootSignature) \ - ( (This)->lpVtbl -> SetGraphicsRootSignature(This,pRootSignature) ) - -#define ID3D12GraphicsCommandList5_SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) \ - ( (This)->lpVtbl -> SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) - -#define ID3D12GraphicsCommandList5_SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) \ - ( (This)->lpVtbl -> SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) - -#define ID3D12GraphicsCommandList5_SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList5_SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList5_SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList5_SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList5_SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList5_SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList5_SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList5_SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList5_SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList5_SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList5_IASetIndexBuffer(This,pView) \ - ( (This)->lpVtbl -> IASetIndexBuffer(This,pView) ) - -#define ID3D12GraphicsCommandList5_IASetVertexBuffers(This,StartSlot,NumViews,pViews) \ - ( (This)->lpVtbl -> IASetVertexBuffers(This,StartSlot,NumViews,pViews) ) - -#define ID3D12GraphicsCommandList5_SOSetTargets(This,StartSlot,NumViews,pViews) \ - ( (This)->lpVtbl -> SOSetTargets(This,StartSlot,NumViews,pViews) ) - -#define ID3D12GraphicsCommandList5_OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor) \ - ( (This)->lpVtbl -> OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor) ) - -#define ID3D12GraphicsCommandList5_ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList5_ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList5_ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList5_ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList5_DiscardResource(This,pResource,pRegion) \ - ( (This)->lpVtbl -> DiscardResource(This,pResource,pRegion) ) - -#define ID3D12GraphicsCommandList5_BeginQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> BeginQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12GraphicsCommandList5_EndQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> EndQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12GraphicsCommandList5_ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) \ - ( (This)->lpVtbl -> ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) ) - -#define ID3D12GraphicsCommandList5_SetPredication(This,pBuffer,AlignedBufferOffset,Operation) \ - ( (This)->lpVtbl -> SetPredication(This,pBuffer,AlignedBufferOffset,Operation) ) - -#define ID3D12GraphicsCommandList5_SetMarker(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> SetMarker(This,Metadata,pData,Size) ) - -#define ID3D12GraphicsCommandList5_BeginEvent(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> BeginEvent(This,Metadata,pData,Size) ) - -#define ID3D12GraphicsCommandList5_EndEvent(This) \ - ( (This)->lpVtbl -> EndEvent(This) ) - -#define ID3D12GraphicsCommandList5_ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset) \ - ( (This)->lpVtbl -> ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset) ) - -#define ID3D12GraphicsCommandList5_AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) \ - ( (This)->lpVtbl -> AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) - -#define ID3D12GraphicsCommandList5_AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) \ - ( (This)->lpVtbl -> AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) - -#define ID3D12GraphicsCommandList5_OMSetDepthBounds(This,Min,Max) \ - ( (This)->lpVtbl -> OMSetDepthBounds(This,Min,Max) ) - -#define ID3D12GraphicsCommandList5_SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions) \ - ( (This)->lpVtbl -> SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions) ) - -#define ID3D12GraphicsCommandList5_ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode) \ - ( (This)->lpVtbl -> ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode) ) - -#define ID3D12GraphicsCommandList5_SetViewInstanceMask(This,Mask) \ - ( (This)->lpVtbl -> SetViewInstanceMask(This,Mask) ) - -#define ID3D12GraphicsCommandList5_WriteBufferImmediate(This,Count,pParams,pModes) \ - ( (This)->lpVtbl -> WriteBufferImmediate(This,Count,pParams,pModes) ) - -#define ID3D12GraphicsCommandList5_SetProtectedResourceSession(This,pProtectedResourceSession) \ - ( (This)->lpVtbl -> SetProtectedResourceSession(This,pProtectedResourceSession) ) - -#define ID3D12GraphicsCommandList5_BeginRenderPass(This,NumRenderTargets,pRenderTargets,pDepthStencil,Flags) \ - ( (This)->lpVtbl -> BeginRenderPass(This,NumRenderTargets,pRenderTargets,pDepthStencil,Flags) ) - -#define ID3D12GraphicsCommandList5_EndRenderPass(This) \ - ( (This)->lpVtbl -> EndRenderPass(This) ) - -#define ID3D12GraphicsCommandList5_InitializeMetaCommand(This,pMetaCommand,pInitializationParametersData,InitializationParametersDataSizeInBytes) \ - ( (This)->lpVtbl -> InitializeMetaCommand(This,pMetaCommand,pInitializationParametersData,InitializationParametersDataSizeInBytes) ) - -#define ID3D12GraphicsCommandList5_ExecuteMetaCommand(This,pMetaCommand,pExecutionParametersData,ExecutionParametersDataSizeInBytes) \ - ( (This)->lpVtbl -> ExecuteMetaCommand(This,pMetaCommand,pExecutionParametersData,ExecutionParametersDataSizeInBytes) ) - -#define ID3D12GraphicsCommandList5_BuildRaytracingAccelerationStructure(This,pDesc,NumPostbuildInfoDescs,pPostbuildInfoDescs) \ - ( (This)->lpVtbl -> BuildRaytracingAccelerationStructure(This,pDesc,NumPostbuildInfoDescs,pPostbuildInfoDescs) ) - -#define ID3D12GraphicsCommandList5_EmitRaytracingAccelerationStructurePostbuildInfo(This,pDesc,NumSourceAccelerationStructures,pSourceAccelerationStructureData) \ - ( (This)->lpVtbl -> EmitRaytracingAccelerationStructurePostbuildInfo(This,pDesc,NumSourceAccelerationStructures,pSourceAccelerationStructureData) ) - -#define ID3D12GraphicsCommandList5_CopyRaytracingAccelerationStructure(This,DestAccelerationStructureData,SourceAccelerationStructureData,Mode) \ - ( (This)->lpVtbl -> CopyRaytracingAccelerationStructure(This,DestAccelerationStructureData,SourceAccelerationStructureData,Mode) ) - -#define ID3D12GraphicsCommandList5_SetPipelineState1(This,pStateObject) \ - ( (This)->lpVtbl -> SetPipelineState1(This,pStateObject) ) - -#define ID3D12GraphicsCommandList5_DispatchRays(This,pDesc) \ - ( (This)->lpVtbl -> DispatchRays(This,pDesc) ) - -#define ID3D12GraphicsCommandList5_RSSetShadingRate(This,baseShadingRate,combiners) \ - ( (This)->lpVtbl -> RSSetShadingRate(This,baseShadingRate,combiners) ) - -#define ID3D12GraphicsCommandList5_RSSetShadingRateImage(This,shadingRateImage) \ - ( (This)->lpVtbl -> RSSetShadingRateImage(This,shadingRateImage) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12GraphicsCommandList5_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12_0000_0071 */ -/* [local] */ - -typedef struct D3D12_DISPATCH_MESH_ARGUMENTS - { - UINT ThreadGroupCountX; - UINT ThreadGroupCountY; - UINT ThreadGroupCountZ; - } D3D12_DISPATCH_MESH_ARGUMENTS; - -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0071_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0071_v0_0_s_ifspec; - -#ifndef __ID3D12GraphicsCommandList6_INTERFACE_DEFINED__ -#define __ID3D12GraphicsCommandList6_INTERFACE_DEFINED__ - -/* interface ID3D12GraphicsCommandList6 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12GraphicsCommandList6; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("c3827890-e548-4cfa-96cf-5689a9370f80") - ID3D12GraphicsCommandList6 : public ID3D12GraphicsCommandList5 - { - public: - virtual void STDMETHODCALLTYPE DispatchMesh( - _In_ UINT ThreadGroupCountX, - _In_ UINT ThreadGroupCountY, - _In_ UINT ThreadGroupCountZ) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12GraphicsCommandList6Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12GraphicsCommandList6 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12GraphicsCommandList6 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12GraphicsCommandList6 * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12GraphicsCommandList6 * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12GraphicsCommandList6 * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12GraphicsCommandList6 * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12GraphicsCommandList6 * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12GraphicsCommandList6 * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12CommandList, GetType) - D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )( - ID3D12GraphicsCommandList6 * This); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Close) - HRESULT ( STDMETHODCALLTYPE *Close )( - ID3D12GraphicsCommandList6 * This); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Reset) - HRESULT ( STDMETHODCALLTYPE *Reset )( - ID3D12GraphicsCommandList6 * This, - _In_ ID3D12CommandAllocator *pAllocator, - _In_opt_ ID3D12PipelineState *pInitialState); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearState) - void ( STDMETHODCALLTYPE *ClearState )( - ID3D12GraphicsCommandList6 * This, - _In_opt_ ID3D12PipelineState *pPipelineState); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawInstanced) - void ( STDMETHODCALLTYPE *DrawInstanced )( - ID3D12GraphicsCommandList6 * This, - _In_ UINT VertexCountPerInstance, - _In_ UINT InstanceCount, - _In_ UINT StartVertexLocation, - _In_ UINT StartInstanceLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawIndexedInstanced) - void ( STDMETHODCALLTYPE *DrawIndexedInstanced )( - ID3D12GraphicsCommandList6 * This, - _In_ UINT IndexCountPerInstance, - _In_ UINT InstanceCount, - _In_ UINT StartIndexLocation, - _In_ INT BaseVertexLocation, - _In_ UINT StartInstanceLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Dispatch) - void ( STDMETHODCALLTYPE *Dispatch )( - ID3D12GraphicsCommandList6 * This, - _In_ UINT ThreadGroupCountX, - _In_ UINT ThreadGroupCountY, - _In_ UINT ThreadGroupCountZ); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyBufferRegion) - void ( STDMETHODCALLTYPE *CopyBufferRegion )( - ID3D12GraphicsCommandList6 * This, - _In_ ID3D12Resource *pDstBuffer, - UINT64 DstOffset, - _In_ ID3D12Resource *pSrcBuffer, - UINT64 SrcOffset, - UINT64 NumBytes); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTextureRegion) - void ( STDMETHODCALLTYPE *CopyTextureRegion )( - ID3D12GraphicsCommandList6 * This, - _In_ const D3D12_TEXTURE_COPY_LOCATION *pDst, - UINT DstX, - UINT DstY, - UINT DstZ, - _In_ const D3D12_TEXTURE_COPY_LOCATION *pSrc, - _In_opt_ const D3D12_BOX *pSrcBox); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyResource) - void ( STDMETHODCALLTYPE *CopyResource )( - ID3D12GraphicsCommandList6 * This, - _In_ ID3D12Resource *pDstResource, - _In_ ID3D12Resource *pSrcResource); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTiles) - void ( STDMETHODCALLTYPE *CopyTiles )( - ID3D12GraphicsCommandList6 * This, - _In_ ID3D12Resource *pTiledResource, - _In_ const D3D12_TILED_RESOURCE_COORDINATE *pTileRegionStartCoordinate, - _In_ const D3D12_TILE_REGION_SIZE *pTileRegionSize, - _In_ ID3D12Resource *pBuffer, - UINT64 BufferStartOffsetInBytes, - D3D12_TILE_COPY_FLAGS Flags); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveSubresource) - void ( STDMETHODCALLTYPE *ResolveSubresource )( - ID3D12GraphicsCommandList6 * This, - _In_ ID3D12Resource *pDstResource, - _In_ UINT DstSubresource, - _In_ ID3D12Resource *pSrcResource, - _In_ UINT SrcSubresource, - _In_ DXGI_FORMAT Format); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetPrimitiveTopology) - void ( STDMETHODCALLTYPE *IASetPrimitiveTopology )( - ID3D12GraphicsCommandList6 * This, - _In_ D3D12_PRIMITIVE_TOPOLOGY PrimitiveTopology); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetViewports) - void ( STDMETHODCALLTYPE *RSSetViewports )( - ID3D12GraphicsCommandList6 * This, - _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE) UINT NumViewports, - _In_reads_( NumViewports) const D3D12_VIEWPORT *pViewports); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetScissorRects) - void ( STDMETHODCALLTYPE *RSSetScissorRects )( - ID3D12GraphicsCommandList6 * This, - _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE) UINT NumRects, - _In_reads_( NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetBlendFactor) - void ( STDMETHODCALLTYPE *OMSetBlendFactor )( - ID3D12GraphicsCommandList6 * This, - _In_reads_opt_(4) const FLOAT BlendFactor[ 4 ]); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetStencilRef) - void ( STDMETHODCALLTYPE *OMSetStencilRef )( - ID3D12GraphicsCommandList6 * This, - _In_ UINT StencilRef); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPipelineState) - void ( STDMETHODCALLTYPE *SetPipelineState )( - ID3D12GraphicsCommandList6 * This, - _In_ ID3D12PipelineState *pPipelineState); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResourceBarrier) - void ( STDMETHODCALLTYPE *ResourceBarrier )( - ID3D12GraphicsCommandList6 * This, - _In_ UINT NumBarriers, - _In_reads_(NumBarriers) const D3D12_RESOURCE_BARRIER *pBarriers); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteBundle) - void ( STDMETHODCALLTYPE *ExecuteBundle )( - ID3D12GraphicsCommandList6 * This, - _In_ ID3D12GraphicsCommandList *pCommandList); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetDescriptorHeaps) - void ( STDMETHODCALLTYPE *SetDescriptorHeaps )( - ID3D12GraphicsCommandList6 * This, - _In_ UINT NumDescriptorHeaps, - _In_reads_(NumDescriptorHeaps) ID3D12DescriptorHeap *const *ppDescriptorHeaps); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootSignature) - void ( STDMETHODCALLTYPE *SetComputeRootSignature )( - ID3D12GraphicsCommandList6 * This, - _In_opt_ ID3D12RootSignature *pRootSignature); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootSignature) - void ( STDMETHODCALLTYPE *SetGraphicsRootSignature )( - ID3D12GraphicsCommandList6 * This, - _In_opt_ ID3D12RootSignature *pRootSignature); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootDescriptorTable) - void ( STDMETHODCALLTYPE *SetComputeRootDescriptorTable )( - ID3D12GraphicsCommandList6 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootDescriptorTable) - void ( STDMETHODCALLTYPE *SetGraphicsRootDescriptorTable )( - ID3D12GraphicsCommandList6 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstant) - void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstant )( - ID3D12GraphicsCommandList6 * This, - _In_ UINT RootParameterIndex, - _In_ UINT SrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstant) - void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstant )( - ID3D12GraphicsCommandList6 * This, - _In_ UINT RootParameterIndex, - _In_ UINT SrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstants) - void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstants )( - ID3D12GraphicsCommandList6 * This, - _In_ UINT RootParameterIndex, - _In_ UINT Num32BitValuesToSet, - _In_reads_(Num32BitValuesToSet*sizeof(UINT)) const void *pSrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstants) - void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstants )( - ID3D12GraphicsCommandList6 * This, - _In_ UINT RootParameterIndex, - _In_ UINT Num32BitValuesToSet, - _In_reads_(Num32BitValuesToSet*sizeof(UINT)) const void *pSrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootConstantBufferView) - void ( STDMETHODCALLTYPE *SetComputeRootConstantBufferView )( - ID3D12GraphicsCommandList6 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootConstantBufferView) - void ( STDMETHODCALLTYPE *SetGraphicsRootConstantBufferView )( - ID3D12GraphicsCommandList6 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootShaderResourceView) - void ( STDMETHODCALLTYPE *SetComputeRootShaderResourceView )( - ID3D12GraphicsCommandList6 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootShaderResourceView) - void ( STDMETHODCALLTYPE *SetGraphicsRootShaderResourceView )( - ID3D12GraphicsCommandList6 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootUnorderedAccessView) - void ( STDMETHODCALLTYPE *SetComputeRootUnorderedAccessView )( - ID3D12GraphicsCommandList6 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootUnorderedAccessView) - void ( STDMETHODCALLTYPE *SetGraphicsRootUnorderedAccessView )( - ID3D12GraphicsCommandList6 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetIndexBuffer) - void ( STDMETHODCALLTYPE *IASetIndexBuffer )( - ID3D12GraphicsCommandList6 * This, - _In_opt_ const D3D12_INDEX_BUFFER_VIEW *pView); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetVertexBuffers) - void ( STDMETHODCALLTYPE *IASetVertexBuffers )( - ID3D12GraphicsCommandList6 * This, - _In_ UINT StartSlot, - _In_ UINT NumViews, - _In_reads_opt_(NumViews) const D3D12_VERTEX_BUFFER_VIEW *pViews); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SOSetTargets) - void ( STDMETHODCALLTYPE *SOSetTargets )( - ID3D12GraphicsCommandList6 * This, - _In_ UINT StartSlot, - _In_ UINT NumViews, - _In_reads_opt_(NumViews) const D3D12_STREAM_OUTPUT_BUFFER_VIEW *pViews); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetRenderTargets) - void ( STDMETHODCALLTYPE *OMSetRenderTargets )( - ID3D12GraphicsCommandList6 * This, - _In_ UINT NumRenderTargetDescriptors, - _In_opt_ const D3D12_CPU_DESCRIPTOR_HANDLE *pRenderTargetDescriptors, - _In_ BOOL RTsSingleHandleToDescriptorRange, - _In_opt_ const D3D12_CPU_DESCRIPTOR_HANDLE *pDepthStencilDescriptor); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearDepthStencilView) - void ( STDMETHODCALLTYPE *ClearDepthStencilView )( - ID3D12GraphicsCommandList6 * This, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DepthStencilView, - _In_ D3D12_CLEAR_FLAGS ClearFlags, - _In_ FLOAT Depth, - _In_ UINT8 Stencil, - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearRenderTargetView) - void ( STDMETHODCALLTYPE *ClearRenderTargetView )( - ID3D12GraphicsCommandList6 * This, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE RenderTargetView, - _In_ const FLOAT ColorRGBA[ 4 ], - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewUint) - void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewUint )( - ID3D12GraphicsCommandList6 * This, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle, - _In_ ID3D12Resource *pResource, - _In_ const UINT Values[ 4 ], - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewFloat) - void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewFloat )( - ID3D12GraphicsCommandList6 * This, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle, - _In_ ID3D12Resource *pResource, - _In_ const FLOAT Values[ 4 ], - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DiscardResource) - void ( STDMETHODCALLTYPE *DiscardResource )( - ID3D12GraphicsCommandList6 * This, - _In_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DISCARD_REGION *pRegion); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginQuery) - void ( STDMETHODCALLTYPE *BeginQuery )( - ID3D12GraphicsCommandList6 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndQuery) - void ( STDMETHODCALLTYPE *EndQuery )( - ID3D12GraphicsCommandList6 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveQueryData) - void ( STDMETHODCALLTYPE *ResolveQueryData )( - ID3D12GraphicsCommandList6 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT StartIndex, - _In_ UINT NumQueries, - _In_ ID3D12Resource *pDestinationBuffer, - _In_ UINT64 AlignedDestinationBufferOffset); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPredication) - void ( STDMETHODCALLTYPE *SetPredication )( - ID3D12GraphicsCommandList6 * This, - _In_opt_ ID3D12Resource *pBuffer, - _In_ UINT64 AlignedBufferOffset, - _In_ D3D12_PREDICATION_OP Operation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetMarker) - void ( STDMETHODCALLTYPE *SetMarker )( - ID3D12GraphicsCommandList6 * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginEvent) - void ( STDMETHODCALLTYPE *BeginEvent )( - ID3D12GraphicsCommandList6 * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndEvent) - void ( STDMETHODCALLTYPE *EndEvent )( - ID3D12GraphicsCommandList6 * This); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteIndirect) - void ( STDMETHODCALLTYPE *ExecuteIndirect )( - ID3D12GraphicsCommandList6 * This, - _In_ ID3D12CommandSignature *pCommandSignature, - _In_ UINT MaxCommandCount, - _In_ ID3D12Resource *pArgumentBuffer, - _In_ UINT64 ArgumentBufferOffset, - _In_opt_ ID3D12Resource *pCountBuffer, - _In_ UINT64 CountBufferOffset); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, AtomicCopyBufferUINT) - void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT )( - ID3D12GraphicsCommandList6 * This, - _In_ ID3D12Resource *pDstBuffer, - UINT64 DstOffset, - _In_ ID3D12Resource *pSrcBuffer, - UINT64 SrcOffset, - UINT Dependencies, - _In_reads_(Dependencies) ID3D12Resource *const *ppDependentResources, - _In_reads_(Dependencies) const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, AtomicCopyBufferUINT64) - void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT64 )( - ID3D12GraphicsCommandList6 * This, - _In_ ID3D12Resource *pDstBuffer, - UINT64 DstOffset, - _In_ ID3D12Resource *pSrcBuffer, - UINT64 SrcOffset, - UINT Dependencies, - _In_reads_(Dependencies) ID3D12Resource *const *ppDependentResources, - _In_reads_(Dependencies) const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, OMSetDepthBounds) - void ( STDMETHODCALLTYPE *OMSetDepthBounds )( - ID3D12GraphicsCommandList6 * This, - _In_ FLOAT Min, - _In_ FLOAT Max); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, SetSamplePositions) - void ( STDMETHODCALLTYPE *SetSamplePositions )( - ID3D12GraphicsCommandList6 * This, - _In_ UINT NumSamplesPerPixel, - _In_ UINT NumPixels, - _In_reads_(NumSamplesPerPixel*NumPixels) D3D12_SAMPLE_POSITION *pSamplePositions); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, ResolveSubresourceRegion) - void ( STDMETHODCALLTYPE *ResolveSubresourceRegion )( - ID3D12GraphicsCommandList6 * This, - _In_ ID3D12Resource *pDstResource, - _In_ UINT DstSubresource, - _In_ UINT DstX, - _In_ UINT DstY, - _In_ ID3D12Resource *pSrcResource, - _In_ UINT SrcSubresource, - _In_opt_ D3D12_RECT *pSrcRect, - _In_ DXGI_FORMAT Format, - _In_ D3D12_RESOLVE_MODE ResolveMode); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, SetViewInstanceMask) - void ( STDMETHODCALLTYPE *SetViewInstanceMask )( - ID3D12GraphicsCommandList6 * This, - _In_ UINT Mask); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList2, WriteBufferImmediate) - void ( STDMETHODCALLTYPE *WriteBufferImmediate )( - ID3D12GraphicsCommandList6 * This, - UINT Count, - _In_reads_(Count) const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams, - _In_reads_opt_(Count) const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList3, SetProtectedResourceSession) - void ( STDMETHODCALLTYPE *SetProtectedResourceSession )( - ID3D12GraphicsCommandList6 * This, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, BeginRenderPass) - void ( STDMETHODCALLTYPE *BeginRenderPass )( - ID3D12GraphicsCommandList6 * This, - _In_ UINT NumRenderTargets, - _In_reads_opt_(NumRenderTargets) const D3D12_RENDER_PASS_RENDER_TARGET_DESC *pRenderTargets, - _In_opt_ const D3D12_RENDER_PASS_DEPTH_STENCIL_DESC *pDepthStencil, - D3D12_RENDER_PASS_FLAGS Flags); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, EndRenderPass) - void ( STDMETHODCALLTYPE *EndRenderPass )( - ID3D12GraphicsCommandList6 * This); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, InitializeMetaCommand) - void ( STDMETHODCALLTYPE *InitializeMetaCommand )( - ID3D12GraphicsCommandList6 * This, - _In_ ID3D12MetaCommand *pMetaCommand, - _In_reads_bytes_opt_(InitializationParametersDataSizeInBytes) const void *pInitializationParametersData, - _In_ SIZE_T InitializationParametersDataSizeInBytes); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, ExecuteMetaCommand) - void ( STDMETHODCALLTYPE *ExecuteMetaCommand )( - ID3D12GraphicsCommandList6 * This, - _In_ ID3D12MetaCommand *pMetaCommand, - _In_reads_bytes_opt_(ExecutionParametersDataSizeInBytes) const void *pExecutionParametersData, - _In_ SIZE_T ExecutionParametersDataSizeInBytes); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, BuildRaytracingAccelerationStructure) - void ( STDMETHODCALLTYPE *BuildRaytracingAccelerationStructure )( - ID3D12GraphicsCommandList6 * This, - _In_ const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC *pDesc, - _In_ UINT NumPostbuildInfoDescs, - _In_reads_opt_(NumPostbuildInfoDescs) const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC *pPostbuildInfoDescs); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, EmitRaytracingAccelerationStructurePostbuildInfo) - void ( STDMETHODCALLTYPE *EmitRaytracingAccelerationStructurePostbuildInfo )( - ID3D12GraphicsCommandList6 * This, - _In_ const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC *pDesc, - _In_ UINT NumSourceAccelerationStructures, - _In_reads_( NumSourceAccelerationStructures ) const D3D12_GPU_VIRTUAL_ADDRESS *pSourceAccelerationStructureData); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, CopyRaytracingAccelerationStructure) - void ( STDMETHODCALLTYPE *CopyRaytracingAccelerationStructure )( - ID3D12GraphicsCommandList6 * This, - _In_ D3D12_GPU_VIRTUAL_ADDRESS DestAccelerationStructureData, - _In_ D3D12_GPU_VIRTUAL_ADDRESS SourceAccelerationStructureData, - _In_ D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE Mode); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, SetPipelineState1) - void ( STDMETHODCALLTYPE *SetPipelineState1 )( - ID3D12GraphicsCommandList6 * This, - _In_ ID3D12StateObject *pStateObject); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, DispatchRays) - void ( STDMETHODCALLTYPE *DispatchRays )( - ID3D12GraphicsCommandList6 * This, - _In_ const D3D12_DISPATCH_RAYS_DESC *pDesc); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList5, RSSetShadingRate) - void ( STDMETHODCALLTYPE *RSSetShadingRate )( - ID3D12GraphicsCommandList6 * This, - _In_ D3D12_SHADING_RATE baseShadingRate, - _In_reads_opt_(D3D12_RS_SET_SHADING_RATE_COMBINER_COUNT) const D3D12_SHADING_RATE_COMBINER *combiners); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList5, RSSetShadingRateImage) - void ( STDMETHODCALLTYPE *RSSetShadingRateImage )( - ID3D12GraphicsCommandList6 * This, - _In_opt_ ID3D12Resource *shadingRateImage); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList6, DispatchMesh) - void ( STDMETHODCALLTYPE *DispatchMesh )( - ID3D12GraphicsCommandList6 * This, - _In_ UINT ThreadGroupCountX, - _In_ UINT ThreadGroupCountY, - _In_ UINT ThreadGroupCountZ); - - END_INTERFACE - } ID3D12GraphicsCommandList6Vtbl; - - interface ID3D12GraphicsCommandList6 - { - CONST_VTBL struct ID3D12GraphicsCommandList6Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12GraphicsCommandList6_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12GraphicsCommandList6_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12GraphicsCommandList6_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12GraphicsCommandList6_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12GraphicsCommandList6_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12GraphicsCommandList6_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12GraphicsCommandList6_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12GraphicsCommandList6_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12GraphicsCommandList6_GetType(This) \ - ( (This)->lpVtbl -> GetType(This) ) - -#define ID3D12GraphicsCommandList6_Close(This) \ - ( (This)->lpVtbl -> Close(This) ) - -#define ID3D12GraphicsCommandList6_Reset(This,pAllocator,pInitialState) \ - ( (This)->lpVtbl -> Reset(This,pAllocator,pInitialState) ) - -#define ID3D12GraphicsCommandList6_ClearState(This,pPipelineState) \ - ( (This)->lpVtbl -> ClearState(This,pPipelineState) ) - -#define ID3D12GraphicsCommandList6_DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) \ - ( (This)->lpVtbl -> DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) ) - -#define ID3D12GraphicsCommandList6_DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) \ - ( (This)->lpVtbl -> DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) ) - -#define ID3D12GraphicsCommandList6_Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) \ - ( (This)->lpVtbl -> Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) ) - -#define ID3D12GraphicsCommandList6_CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes) \ - ( (This)->lpVtbl -> CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes) ) - -#define ID3D12GraphicsCommandList6_CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox) \ - ( (This)->lpVtbl -> CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox) ) - -#define ID3D12GraphicsCommandList6_CopyResource(This,pDstResource,pSrcResource) \ - ( (This)->lpVtbl -> CopyResource(This,pDstResource,pSrcResource) ) - -#define ID3D12GraphicsCommandList6_CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags) \ - ( (This)->lpVtbl -> CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags) ) - -#define ID3D12GraphicsCommandList6_ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) \ - ( (This)->lpVtbl -> ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) ) - -#define ID3D12GraphicsCommandList6_IASetPrimitiveTopology(This,PrimitiveTopology) \ - ( (This)->lpVtbl -> IASetPrimitiveTopology(This,PrimitiveTopology) ) - -#define ID3D12GraphicsCommandList6_RSSetViewports(This,NumViewports,pViewports) \ - ( (This)->lpVtbl -> RSSetViewports(This,NumViewports,pViewports) ) - -#define ID3D12GraphicsCommandList6_RSSetScissorRects(This,NumRects,pRects) \ - ( (This)->lpVtbl -> RSSetScissorRects(This,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList6_OMSetBlendFactor(This,BlendFactor) \ - ( (This)->lpVtbl -> OMSetBlendFactor(This,BlendFactor) ) - -#define ID3D12GraphicsCommandList6_OMSetStencilRef(This,StencilRef) \ - ( (This)->lpVtbl -> OMSetStencilRef(This,StencilRef) ) - -#define ID3D12GraphicsCommandList6_SetPipelineState(This,pPipelineState) \ - ( (This)->lpVtbl -> SetPipelineState(This,pPipelineState) ) - -#define ID3D12GraphicsCommandList6_ResourceBarrier(This,NumBarriers,pBarriers) \ - ( (This)->lpVtbl -> ResourceBarrier(This,NumBarriers,pBarriers) ) - -#define ID3D12GraphicsCommandList6_ExecuteBundle(This,pCommandList) \ - ( (This)->lpVtbl -> ExecuteBundle(This,pCommandList) ) - -#define ID3D12GraphicsCommandList6_SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps) \ - ( (This)->lpVtbl -> SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps) ) - -#define ID3D12GraphicsCommandList6_SetComputeRootSignature(This,pRootSignature) \ - ( (This)->lpVtbl -> SetComputeRootSignature(This,pRootSignature) ) - -#define ID3D12GraphicsCommandList6_SetGraphicsRootSignature(This,pRootSignature) \ - ( (This)->lpVtbl -> SetGraphicsRootSignature(This,pRootSignature) ) - -#define ID3D12GraphicsCommandList6_SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) \ - ( (This)->lpVtbl -> SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) - -#define ID3D12GraphicsCommandList6_SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) \ - ( (This)->lpVtbl -> SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) - -#define ID3D12GraphicsCommandList6_SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList6_SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList6_SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList6_SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList6_SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList6_SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList6_SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList6_SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList6_SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList6_SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList6_IASetIndexBuffer(This,pView) \ - ( (This)->lpVtbl -> IASetIndexBuffer(This,pView) ) - -#define ID3D12GraphicsCommandList6_IASetVertexBuffers(This,StartSlot,NumViews,pViews) \ - ( (This)->lpVtbl -> IASetVertexBuffers(This,StartSlot,NumViews,pViews) ) - -#define ID3D12GraphicsCommandList6_SOSetTargets(This,StartSlot,NumViews,pViews) \ - ( (This)->lpVtbl -> SOSetTargets(This,StartSlot,NumViews,pViews) ) - -#define ID3D12GraphicsCommandList6_OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor) \ - ( (This)->lpVtbl -> OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor) ) - -#define ID3D12GraphicsCommandList6_ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList6_ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList6_ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList6_ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList6_DiscardResource(This,pResource,pRegion) \ - ( (This)->lpVtbl -> DiscardResource(This,pResource,pRegion) ) - -#define ID3D12GraphicsCommandList6_BeginQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> BeginQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12GraphicsCommandList6_EndQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> EndQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12GraphicsCommandList6_ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) \ - ( (This)->lpVtbl -> ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) ) - -#define ID3D12GraphicsCommandList6_SetPredication(This,pBuffer,AlignedBufferOffset,Operation) \ - ( (This)->lpVtbl -> SetPredication(This,pBuffer,AlignedBufferOffset,Operation) ) - -#define ID3D12GraphicsCommandList6_SetMarker(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> SetMarker(This,Metadata,pData,Size) ) - -#define ID3D12GraphicsCommandList6_BeginEvent(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> BeginEvent(This,Metadata,pData,Size) ) - -#define ID3D12GraphicsCommandList6_EndEvent(This) \ - ( (This)->lpVtbl -> EndEvent(This) ) - -#define ID3D12GraphicsCommandList6_ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset) \ - ( (This)->lpVtbl -> ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset) ) - -#define ID3D12GraphicsCommandList6_AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) \ - ( (This)->lpVtbl -> AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) - -#define ID3D12GraphicsCommandList6_AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) \ - ( (This)->lpVtbl -> AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) - -#define ID3D12GraphicsCommandList6_OMSetDepthBounds(This,Min,Max) \ - ( (This)->lpVtbl -> OMSetDepthBounds(This,Min,Max) ) - -#define ID3D12GraphicsCommandList6_SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions) \ - ( (This)->lpVtbl -> SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions) ) - -#define ID3D12GraphicsCommandList6_ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode) \ - ( (This)->lpVtbl -> ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode) ) - -#define ID3D12GraphicsCommandList6_SetViewInstanceMask(This,Mask) \ - ( (This)->lpVtbl -> SetViewInstanceMask(This,Mask) ) - -#define ID3D12GraphicsCommandList6_WriteBufferImmediate(This,Count,pParams,pModes) \ - ( (This)->lpVtbl -> WriteBufferImmediate(This,Count,pParams,pModes) ) - -#define ID3D12GraphicsCommandList6_SetProtectedResourceSession(This,pProtectedResourceSession) \ - ( (This)->lpVtbl -> SetProtectedResourceSession(This,pProtectedResourceSession) ) - -#define ID3D12GraphicsCommandList6_BeginRenderPass(This,NumRenderTargets,pRenderTargets,pDepthStencil,Flags) \ - ( (This)->lpVtbl -> BeginRenderPass(This,NumRenderTargets,pRenderTargets,pDepthStencil,Flags) ) - -#define ID3D12GraphicsCommandList6_EndRenderPass(This) \ - ( (This)->lpVtbl -> EndRenderPass(This) ) - -#define ID3D12GraphicsCommandList6_InitializeMetaCommand(This,pMetaCommand,pInitializationParametersData,InitializationParametersDataSizeInBytes) \ - ( (This)->lpVtbl -> InitializeMetaCommand(This,pMetaCommand,pInitializationParametersData,InitializationParametersDataSizeInBytes) ) - -#define ID3D12GraphicsCommandList6_ExecuteMetaCommand(This,pMetaCommand,pExecutionParametersData,ExecutionParametersDataSizeInBytes) \ - ( (This)->lpVtbl -> ExecuteMetaCommand(This,pMetaCommand,pExecutionParametersData,ExecutionParametersDataSizeInBytes) ) - -#define ID3D12GraphicsCommandList6_BuildRaytracingAccelerationStructure(This,pDesc,NumPostbuildInfoDescs,pPostbuildInfoDescs) \ - ( (This)->lpVtbl -> BuildRaytracingAccelerationStructure(This,pDesc,NumPostbuildInfoDescs,pPostbuildInfoDescs) ) - -#define ID3D12GraphicsCommandList6_EmitRaytracingAccelerationStructurePostbuildInfo(This,pDesc,NumSourceAccelerationStructures,pSourceAccelerationStructureData) \ - ( (This)->lpVtbl -> EmitRaytracingAccelerationStructurePostbuildInfo(This,pDesc,NumSourceAccelerationStructures,pSourceAccelerationStructureData) ) - -#define ID3D12GraphicsCommandList6_CopyRaytracingAccelerationStructure(This,DestAccelerationStructureData,SourceAccelerationStructureData,Mode) \ - ( (This)->lpVtbl -> CopyRaytracingAccelerationStructure(This,DestAccelerationStructureData,SourceAccelerationStructureData,Mode) ) - -#define ID3D12GraphicsCommandList6_SetPipelineState1(This,pStateObject) \ - ( (This)->lpVtbl -> SetPipelineState1(This,pStateObject) ) - -#define ID3D12GraphicsCommandList6_DispatchRays(This,pDesc) \ - ( (This)->lpVtbl -> DispatchRays(This,pDesc) ) - -#define ID3D12GraphicsCommandList6_RSSetShadingRate(This,baseShadingRate,combiners) \ - ( (This)->lpVtbl -> RSSetShadingRate(This,baseShadingRate,combiners) ) - -#define ID3D12GraphicsCommandList6_RSSetShadingRateImage(This,shadingRateImage) \ - ( (This)->lpVtbl -> RSSetShadingRateImage(This,shadingRateImage) ) - -#define ID3D12GraphicsCommandList6_DispatchMesh(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) \ - ( (This)->lpVtbl -> DispatchMesh(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12GraphicsCommandList6_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12GraphicsCommandList7_INTERFACE_DEFINED__ -#define __ID3D12GraphicsCommandList7_INTERFACE_DEFINED__ - -/* interface ID3D12GraphicsCommandList7 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12GraphicsCommandList7; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("dd171223-8b61-4769-90e3-160ccde4e2c1") - ID3D12GraphicsCommandList7 : public ID3D12GraphicsCommandList6 - { - public: - virtual void STDMETHODCALLTYPE Barrier( - UINT32 NumBarrierGroups, - _In_reads_(NumBarrierGroups) const D3D12_BARRIER_GROUP *pBarrierGroups) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12GraphicsCommandList7Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12GraphicsCommandList7 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12GraphicsCommandList7 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12GraphicsCommandList7 * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12GraphicsCommandList7 * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12GraphicsCommandList7 * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12GraphicsCommandList7 * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12GraphicsCommandList7 * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12GraphicsCommandList7 * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12CommandList, GetType) - D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )( - ID3D12GraphicsCommandList7 * This); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Close) - HRESULT ( STDMETHODCALLTYPE *Close )( - ID3D12GraphicsCommandList7 * This); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Reset) - HRESULT ( STDMETHODCALLTYPE *Reset )( - ID3D12GraphicsCommandList7 * This, - _In_ ID3D12CommandAllocator *pAllocator, - _In_opt_ ID3D12PipelineState *pInitialState); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearState) - void ( STDMETHODCALLTYPE *ClearState )( - ID3D12GraphicsCommandList7 * This, - _In_opt_ ID3D12PipelineState *pPipelineState); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawInstanced) - void ( STDMETHODCALLTYPE *DrawInstanced )( - ID3D12GraphicsCommandList7 * This, - _In_ UINT VertexCountPerInstance, - _In_ UINT InstanceCount, - _In_ UINT StartVertexLocation, - _In_ UINT StartInstanceLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawIndexedInstanced) - void ( STDMETHODCALLTYPE *DrawIndexedInstanced )( - ID3D12GraphicsCommandList7 * This, - _In_ UINT IndexCountPerInstance, - _In_ UINT InstanceCount, - _In_ UINT StartIndexLocation, - _In_ INT BaseVertexLocation, - _In_ UINT StartInstanceLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Dispatch) - void ( STDMETHODCALLTYPE *Dispatch )( - ID3D12GraphicsCommandList7 * This, - _In_ UINT ThreadGroupCountX, - _In_ UINT ThreadGroupCountY, - _In_ UINT ThreadGroupCountZ); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyBufferRegion) - void ( STDMETHODCALLTYPE *CopyBufferRegion )( - ID3D12GraphicsCommandList7 * This, - _In_ ID3D12Resource *pDstBuffer, - UINT64 DstOffset, - _In_ ID3D12Resource *pSrcBuffer, - UINT64 SrcOffset, - UINT64 NumBytes); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTextureRegion) - void ( STDMETHODCALLTYPE *CopyTextureRegion )( - ID3D12GraphicsCommandList7 * This, - _In_ const D3D12_TEXTURE_COPY_LOCATION *pDst, - UINT DstX, - UINT DstY, - UINT DstZ, - _In_ const D3D12_TEXTURE_COPY_LOCATION *pSrc, - _In_opt_ const D3D12_BOX *pSrcBox); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyResource) - void ( STDMETHODCALLTYPE *CopyResource )( - ID3D12GraphicsCommandList7 * This, - _In_ ID3D12Resource *pDstResource, - _In_ ID3D12Resource *pSrcResource); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTiles) - void ( STDMETHODCALLTYPE *CopyTiles )( - ID3D12GraphicsCommandList7 * This, - _In_ ID3D12Resource *pTiledResource, - _In_ const D3D12_TILED_RESOURCE_COORDINATE *pTileRegionStartCoordinate, - _In_ const D3D12_TILE_REGION_SIZE *pTileRegionSize, - _In_ ID3D12Resource *pBuffer, - UINT64 BufferStartOffsetInBytes, - D3D12_TILE_COPY_FLAGS Flags); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveSubresource) - void ( STDMETHODCALLTYPE *ResolveSubresource )( - ID3D12GraphicsCommandList7 * This, - _In_ ID3D12Resource *pDstResource, - _In_ UINT DstSubresource, - _In_ ID3D12Resource *pSrcResource, - _In_ UINT SrcSubresource, - _In_ DXGI_FORMAT Format); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetPrimitiveTopology) - void ( STDMETHODCALLTYPE *IASetPrimitiveTopology )( - ID3D12GraphicsCommandList7 * This, - _In_ D3D12_PRIMITIVE_TOPOLOGY PrimitiveTopology); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetViewports) - void ( STDMETHODCALLTYPE *RSSetViewports )( - ID3D12GraphicsCommandList7 * This, - _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE) UINT NumViewports, - _In_reads_( NumViewports) const D3D12_VIEWPORT *pViewports); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetScissorRects) - void ( STDMETHODCALLTYPE *RSSetScissorRects )( - ID3D12GraphicsCommandList7 * This, - _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE) UINT NumRects, - _In_reads_( NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetBlendFactor) - void ( STDMETHODCALLTYPE *OMSetBlendFactor )( - ID3D12GraphicsCommandList7 * This, - _In_reads_opt_(4) const FLOAT BlendFactor[ 4 ]); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetStencilRef) - void ( STDMETHODCALLTYPE *OMSetStencilRef )( - ID3D12GraphicsCommandList7 * This, - _In_ UINT StencilRef); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPipelineState) - void ( STDMETHODCALLTYPE *SetPipelineState )( - ID3D12GraphicsCommandList7 * This, - _In_ ID3D12PipelineState *pPipelineState); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResourceBarrier) - void ( STDMETHODCALLTYPE *ResourceBarrier )( - ID3D12GraphicsCommandList7 * This, - _In_ UINT NumBarriers, - _In_reads_(NumBarriers) const D3D12_RESOURCE_BARRIER *pBarriers); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteBundle) - void ( STDMETHODCALLTYPE *ExecuteBundle )( - ID3D12GraphicsCommandList7 * This, - _In_ ID3D12GraphicsCommandList *pCommandList); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetDescriptorHeaps) - void ( STDMETHODCALLTYPE *SetDescriptorHeaps )( - ID3D12GraphicsCommandList7 * This, - _In_ UINT NumDescriptorHeaps, - _In_reads_(NumDescriptorHeaps) ID3D12DescriptorHeap *const *ppDescriptorHeaps); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootSignature) - void ( STDMETHODCALLTYPE *SetComputeRootSignature )( - ID3D12GraphicsCommandList7 * This, - _In_opt_ ID3D12RootSignature *pRootSignature); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootSignature) - void ( STDMETHODCALLTYPE *SetGraphicsRootSignature )( - ID3D12GraphicsCommandList7 * This, - _In_opt_ ID3D12RootSignature *pRootSignature); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootDescriptorTable) - void ( STDMETHODCALLTYPE *SetComputeRootDescriptorTable )( - ID3D12GraphicsCommandList7 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootDescriptorTable) - void ( STDMETHODCALLTYPE *SetGraphicsRootDescriptorTable )( - ID3D12GraphicsCommandList7 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstant) - void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstant )( - ID3D12GraphicsCommandList7 * This, - _In_ UINT RootParameterIndex, - _In_ UINT SrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstant) - void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstant )( - ID3D12GraphicsCommandList7 * This, - _In_ UINT RootParameterIndex, - _In_ UINT SrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstants) - void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstants )( - ID3D12GraphicsCommandList7 * This, - _In_ UINT RootParameterIndex, - _In_ UINT Num32BitValuesToSet, - _In_reads_(Num32BitValuesToSet*sizeof(UINT)) const void *pSrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstants) - void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstants )( - ID3D12GraphicsCommandList7 * This, - _In_ UINT RootParameterIndex, - _In_ UINT Num32BitValuesToSet, - _In_reads_(Num32BitValuesToSet*sizeof(UINT)) const void *pSrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootConstantBufferView) - void ( STDMETHODCALLTYPE *SetComputeRootConstantBufferView )( - ID3D12GraphicsCommandList7 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootConstantBufferView) - void ( STDMETHODCALLTYPE *SetGraphicsRootConstantBufferView )( - ID3D12GraphicsCommandList7 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootShaderResourceView) - void ( STDMETHODCALLTYPE *SetComputeRootShaderResourceView )( - ID3D12GraphicsCommandList7 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootShaderResourceView) - void ( STDMETHODCALLTYPE *SetGraphicsRootShaderResourceView )( - ID3D12GraphicsCommandList7 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootUnorderedAccessView) - void ( STDMETHODCALLTYPE *SetComputeRootUnorderedAccessView )( - ID3D12GraphicsCommandList7 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootUnorderedAccessView) - void ( STDMETHODCALLTYPE *SetGraphicsRootUnorderedAccessView )( - ID3D12GraphicsCommandList7 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetIndexBuffer) - void ( STDMETHODCALLTYPE *IASetIndexBuffer )( - ID3D12GraphicsCommandList7 * This, - _In_opt_ const D3D12_INDEX_BUFFER_VIEW *pView); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetVertexBuffers) - void ( STDMETHODCALLTYPE *IASetVertexBuffers )( - ID3D12GraphicsCommandList7 * This, - _In_ UINT StartSlot, - _In_ UINT NumViews, - _In_reads_opt_(NumViews) const D3D12_VERTEX_BUFFER_VIEW *pViews); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SOSetTargets) - void ( STDMETHODCALLTYPE *SOSetTargets )( - ID3D12GraphicsCommandList7 * This, - _In_ UINT StartSlot, - _In_ UINT NumViews, - _In_reads_opt_(NumViews) const D3D12_STREAM_OUTPUT_BUFFER_VIEW *pViews); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetRenderTargets) - void ( STDMETHODCALLTYPE *OMSetRenderTargets )( - ID3D12GraphicsCommandList7 * This, - _In_ UINT NumRenderTargetDescriptors, - _In_opt_ const D3D12_CPU_DESCRIPTOR_HANDLE *pRenderTargetDescriptors, - _In_ BOOL RTsSingleHandleToDescriptorRange, - _In_opt_ const D3D12_CPU_DESCRIPTOR_HANDLE *pDepthStencilDescriptor); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearDepthStencilView) - void ( STDMETHODCALLTYPE *ClearDepthStencilView )( - ID3D12GraphicsCommandList7 * This, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DepthStencilView, - _In_ D3D12_CLEAR_FLAGS ClearFlags, - _In_ FLOAT Depth, - _In_ UINT8 Stencil, - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearRenderTargetView) - void ( STDMETHODCALLTYPE *ClearRenderTargetView )( - ID3D12GraphicsCommandList7 * This, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE RenderTargetView, - _In_ const FLOAT ColorRGBA[ 4 ], - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewUint) - void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewUint )( - ID3D12GraphicsCommandList7 * This, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle, - _In_ ID3D12Resource *pResource, - _In_ const UINT Values[ 4 ], - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewFloat) - void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewFloat )( - ID3D12GraphicsCommandList7 * This, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle, - _In_ ID3D12Resource *pResource, - _In_ const FLOAT Values[ 4 ], - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DiscardResource) - void ( STDMETHODCALLTYPE *DiscardResource )( - ID3D12GraphicsCommandList7 * This, - _In_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DISCARD_REGION *pRegion); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginQuery) - void ( STDMETHODCALLTYPE *BeginQuery )( - ID3D12GraphicsCommandList7 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndQuery) - void ( STDMETHODCALLTYPE *EndQuery )( - ID3D12GraphicsCommandList7 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveQueryData) - void ( STDMETHODCALLTYPE *ResolveQueryData )( - ID3D12GraphicsCommandList7 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT StartIndex, - _In_ UINT NumQueries, - _In_ ID3D12Resource *pDestinationBuffer, - _In_ UINT64 AlignedDestinationBufferOffset); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPredication) - void ( STDMETHODCALLTYPE *SetPredication )( - ID3D12GraphicsCommandList7 * This, - _In_opt_ ID3D12Resource *pBuffer, - _In_ UINT64 AlignedBufferOffset, - _In_ D3D12_PREDICATION_OP Operation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetMarker) - void ( STDMETHODCALLTYPE *SetMarker )( - ID3D12GraphicsCommandList7 * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginEvent) - void ( STDMETHODCALLTYPE *BeginEvent )( - ID3D12GraphicsCommandList7 * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndEvent) - void ( STDMETHODCALLTYPE *EndEvent )( - ID3D12GraphicsCommandList7 * This); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteIndirect) - void ( STDMETHODCALLTYPE *ExecuteIndirect )( - ID3D12GraphicsCommandList7 * This, - _In_ ID3D12CommandSignature *pCommandSignature, - _In_ UINT MaxCommandCount, - _In_ ID3D12Resource *pArgumentBuffer, - _In_ UINT64 ArgumentBufferOffset, - _In_opt_ ID3D12Resource *pCountBuffer, - _In_ UINT64 CountBufferOffset); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, AtomicCopyBufferUINT) - void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT )( - ID3D12GraphicsCommandList7 * This, - _In_ ID3D12Resource *pDstBuffer, - UINT64 DstOffset, - _In_ ID3D12Resource *pSrcBuffer, - UINT64 SrcOffset, - UINT Dependencies, - _In_reads_(Dependencies) ID3D12Resource *const *ppDependentResources, - _In_reads_(Dependencies) const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, AtomicCopyBufferUINT64) - void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT64 )( - ID3D12GraphicsCommandList7 * This, - _In_ ID3D12Resource *pDstBuffer, - UINT64 DstOffset, - _In_ ID3D12Resource *pSrcBuffer, - UINT64 SrcOffset, - UINT Dependencies, - _In_reads_(Dependencies) ID3D12Resource *const *ppDependentResources, - _In_reads_(Dependencies) const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, OMSetDepthBounds) - void ( STDMETHODCALLTYPE *OMSetDepthBounds )( - ID3D12GraphicsCommandList7 * This, - _In_ FLOAT Min, - _In_ FLOAT Max); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, SetSamplePositions) - void ( STDMETHODCALLTYPE *SetSamplePositions )( - ID3D12GraphicsCommandList7 * This, - _In_ UINT NumSamplesPerPixel, - _In_ UINT NumPixels, - _In_reads_(NumSamplesPerPixel*NumPixels) D3D12_SAMPLE_POSITION *pSamplePositions); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, ResolveSubresourceRegion) - void ( STDMETHODCALLTYPE *ResolveSubresourceRegion )( - ID3D12GraphicsCommandList7 * This, - _In_ ID3D12Resource *pDstResource, - _In_ UINT DstSubresource, - _In_ UINT DstX, - _In_ UINT DstY, - _In_ ID3D12Resource *pSrcResource, - _In_ UINT SrcSubresource, - _In_opt_ D3D12_RECT *pSrcRect, - _In_ DXGI_FORMAT Format, - _In_ D3D12_RESOLVE_MODE ResolveMode); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, SetViewInstanceMask) - void ( STDMETHODCALLTYPE *SetViewInstanceMask )( - ID3D12GraphicsCommandList7 * This, - _In_ UINT Mask); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList2, WriteBufferImmediate) - void ( STDMETHODCALLTYPE *WriteBufferImmediate )( - ID3D12GraphicsCommandList7 * This, - UINT Count, - _In_reads_(Count) const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams, - _In_reads_opt_(Count) const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList3, SetProtectedResourceSession) - void ( STDMETHODCALLTYPE *SetProtectedResourceSession )( - ID3D12GraphicsCommandList7 * This, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, BeginRenderPass) - void ( STDMETHODCALLTYPE *BeginRenderPass )( - ID3D12GraphicsCommandList7 * This, - _In_ UINT NumRenderTargets, - _In_reads_opt_(NumRenderTargets) const D3D12_RENDER_PASS_RENDER_TARGET_DESC *pRenderTargets, - _In_opt_ const D3D12_RENDER_PASS_DEPTH_STENCIL_DESC *pDepthStencil, - D3D12_RENDER_PASS_FLAGS Flags); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, EndRenderPass) - void ( STDMETHODCALLTYPE *EndRenderPass )( - ID3D12GraphicsCommandList7 * This); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, InitializeMetaCommand) - void ( STDMETHODCALLTYPE *InitializeMetaCommand )( - ID3D12GraphicsCommandList7 * This, - _In_ ID3D12MetaCommand *pMetaCommand, - _In_reads_bytes_opt_(InitializationParametersDataSizeInBytes) const void *pInitializationParametersData, - _In_ SIZE_T InitializationParametersDataSizeInBytes); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, ExecuteMetaCommand) - void ( STDMETHODCALLTYPE *ExecuteMetaCommand )( - ID3D12GraphicsCommandList7 * This, - _In_ ID3D12MetaCommand *pMetaCommand, - _In_reads_bytes_opt_(ExecutionParametersDataSizeInBytes) const void *pExecutionParametersData, - _In_ SIZE_T ExecutionParametersDataSizeInBytes); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, BuildRaytracingAccelerationStructure) - void ( STDMETHODCALLTYPE *BuildRaytracingAccelerationStructure )( - ID3D12GraphicsCommandList7 * This, - _In_ const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC *pDesc, - _In_ UINT NumPostbuildInfoDescs, - _In_reads_opt_(NumPostbuildInfoDescs) const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC *pPostbuildInfoDescs); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, EmitRaytracingAccelerationStructurePostbuildInfo) - void ( STDMETHODCALLTYPE *EmitRaytracingAccelerationStructurePostbuildInfo )( - ID3D12GraphicsCommandList7 * This, - _In_ const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC *pDesc, - _In_ UINT NumSourceAccelerationStructures, - _In_reads_( NumSourceAccelerationStructures ) const D3D12_GPU_VIRTUAL_ADDRESS *pSourceAccelerationStructureData); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, CopyRaytracingAccelerationStructure) - void ( STDMETHODCALLTYPE *CopyRaytracingAccelerationStructure )( - ID3D12GraphicsCommandList7 * This, - _In_ D3D12_GPU_VIRTUAL_ADDRESS DestAccelerationStructureData, - _In_ D3D12_GPU_VIRTUAL_ADDRESS SourceAccelerationStructureData, - _In_ D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE Mode); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, SetPipelineState1) - void ( STDMETHODCALLTYPE *SetPipelineState1 )( - ID3D12GraphicsCommandList7 * This, - _In_ ID3D12StateObject *pStateObject); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, DispatchRays) - void ( STDMETHODCALLTYPE *DispatchRays )( - ID3D12GraphicsCommandList7 * This, - _In_ const D3D12_DISPATCH_RAYS_DESC *pDesc); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList5, RSSetShadingRate) - void ( STDMETHODCALLTYPE *RSSetShadingRate )( - ID3D12GraphicsCommandList7 * This, - _In_ D3D12_SHADING_RATE baseShadingRate, - _In_reads_opt_(D3D12_RS_SET_SHADING_RATE_COMBINER_COUNT) const D3D12_SHADING_RATE_COMBINER *combiners); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList5, RSSetShadingRateImage) - void ( STDMETHODCALLTYPE *RSSetShadingRateImage )( - ID3D12GraphicsCommandList7 * This, - _In_opt_ ID3D12Resource *shadingRateImage); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList6, DispatchMesh) - void ( STDMETHODCALLTYPE *DispatchMesh )( - ID3D12GraphicsCommandList7 * This, - _In_ UINT ThreadGroupCountX, - _In_ UINT ThreadGroupCountY, - _In_ UINT ThreadGroupCountZ); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList7, Barrier) - void ( STDMETHODCALLTYPE *Barrier )( - ID3D12GraphicsCommandList7 * This, - UINT32 NumBarrierGroups, - _In_reads_(NumBarrierGroups) const D3D12_BARRIER_GROUP *pBarrierGroups); - - END_INTERFACE - } ID3D12GraphicsCommandList7Vtbl; - - interface ID3D12GraphicsCommandList7 - { - CONST_VTBL struct ID3D12GraphicsCommandList7Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12GraphicsCommandList7_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12GraphicsCommandList7_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12GraphicsCommandList7_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12GraphicsCommandList7_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12GraphicsCommandList7_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12GraphicsCommandList7_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12GraphicsCommandList7_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12GraphicsCommandList7_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12GraphicsCommandList7_GetType(This) \ - ( (This)->lpVtbl -> GetType(This) ) - -#define ID3D12GraphicsCommandList7_Close(This) \ - ( (This)->lpVtbl -> Close(This) ) - -#define ID3D12GraphicsCommandList7_Reset(This,pAllocator,pInitialState) \ - ( (This)->lpVtbl -> Reset(This,pAllocator,pInitialState) ) - -#define ID3D12GraphicsCommandList7_ClearState(This,pPipelineState) \ - ( (This)->lpVtbl -> ClearState(This,pPipelineState) ) - -#define ID3D12GraphicsCommandList7_DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) \ - ( (This)->lpVtbl -> DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) ) - -#define ID3D12GraphicsCommandList7_DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) \ - ( (This)->lpVtbl -> DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) ) - -#define ID3D12GraphicsCommandList7_Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) \ - ( (This)->lpVtbl -> Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) ) - -#define ID3D12GraphicsCommandList7_CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes) \ - ( (This)->lpVtbl -> CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes) ) - -#define ID3D12GraphicsCommandList7_CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox) \ - ( (This)->lpVtbl -> CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox) ) - -#define ID3D12GraphicsCommandList7_CopyResource(This,pDstResource,pSrcResource) \ - ( (This)->lpVtbl -> CopyResource(This,pDstResource,pSrcResource) ) - -#define ID3D12GraphicsCommandList7_CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags) \ - ( (This)->lpVtbl -> CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags) ) - -#define ID3D12GraphicsCommandList7_ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) \ - ( (This)->lpVtbl -> ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) ) - -#define ID3D12GraphicsCommandList7_IASetPrimitiveTopology(This,PrimitiveTopology) \ - ( (This)->lpVtbl -> IASetPrimitiveTopology(This,PrimitiveTopology) ) - -#define ID3D12GraphicsCommandList7_RSSetViewports(This,NumViewports,pViewports) \ - ( (This)->lpVtbl -> RSSetViewports(This,NumViewports,pViewports) ) - -#define ID3D12GraphicsCommandList7_RSSetScissorRects(This,NumRects,pRects) \ - ( (This)->lpVtbl -> RSSetScissorRects(This,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList7_OMSetBlendFactor(This,BlendFactor) \ - ( (This)->lpVtbl -> OMSetBlendFactor(This,BlendFactor) ) - -#define ID3D12GraphicsCommandList7_OMSetStencilRef(This,StencilRef) \ - ( (This)->lpVtbl -> OMSetStencilRef(This,StencilRef) ) - -#define ID3D12GraphicsCommandList7_SetPipelineState(This,pPipelineState) \ - ( (This)->lpVtbl -> SetPipelineState(This,pPipelineState) ) - -#define ID3D12GraphicsCommandList7_ResourceBarrier(This,NumBarriers,pBarriers) \ - ( (This)->lpVtbl -> ResourceBarrier(This,NumBarriers,pBarriers) ) - -#define ID3D12GraphicsCommandList7_ExecuteBundle(This,pCommandList) \ - ( (This)->lpVtbl -> ExecuteBundle(This,pCommandList) ) - -#define ID3D12GraphicsCommandList7_SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps) \ - ( (This)->lpVtbl -> SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps) ) - -#define ID3D12GraphicsCommandList7_SetComputeRootSignature(This,pRootSignature) \ - ( (This)->lpVtbl -> SetComputeRootSignature(This,pRootSignature) ) - -#define ID3D12GraphicsCommandList7_SetGraphicsRootSignature(This,pRootSignature) \ - ( (This)->lpVtbl -> SetGraphicsRootSignature(This,pRootSignature) ) - -#define ID3D12GraphicsCommandList7_SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) \ - ( (This)->lpVtbl -> SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) - -#define ID3D12GraphicsCommandList7_SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) \ - ( (This)->lpVtbl -> SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) - -#define ID3D12GraphicsCommandList7_SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList7_SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList7_SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList7_SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList7_SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList7_SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList7_SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList7_SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList7_SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList7_SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList7_IASetIndexBuffer(This,pView) \ - ( (This)->lpVtbl -> IASetIndexBuffer(This,pView) ) - -#define ID3D12GraphicsCommandList7_IASetVertexBuffers(This,StartSlot,NumViews,pViews) \ - ( (This)->lpVtbl -> IASetVertexBuffers(This,StartSlot,NumViews,pViews) ) - -#define ID3D12GraphicsCommandList7_SOSetTargets(This,StartSlot,NumViews,pViews) \ - ( (This)->lpVtbl -> SOSetTargets(This,StartSlot,NumViews,pViews) ) - -#define ID3D12GraphicsCommandList7_OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor) \ - ( (This)->lpVtbl -> OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor) ) - -#define ID3D12GraphicsCommandList7_ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList7_ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList7_ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList7_ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList7_DiscardResource(This,pResource,pRegion) \ - ( (This)->lpVtbl -> DiscardResource(This,pResource,pRegion) ) - -#define ID3D12GraphicsCommandList7_BeginQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> BeginQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12GraphicsCommandList7_EndQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> EndQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12GraphicsCommandList7_ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) \ - ( (This)->lpVtbl -> ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) ) - -#define ID3D12GraphicsCommandList7_SetPredication(This,pBuffer,AlignedBufferOffset,Operation) \ - ( (This)->lpVtbl -> SetPredication(This,pBuffer,AlignedBufferOffset,Operation) ) - -#define ID3D12GraphicsCommandList7_SetMarker(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> SetMarker(This,Metadata,pData,Size) ) - -#define ID3D12GraphicsCommandList7_BeginEvent(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> BeginEvent(This,Metadata,pData,Size) ) - -#define ID3D12GraphicsCommandList7_EndEvent(This) \ - ( (This)->lpVtbl -> EndEvent(This) ) - -#define ID3D12GraphicsCommandList7_ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset) \ - ( (This)->lpVtbl -> ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset) ) - -#define ID3D12GraphicsCommandList7_AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) \ - ( (This)->lpVtbl -> AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) - -#define ID3D12GraphicsCommandList7_AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) \ - ( (This)->lpVtbl -> AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) - -#define ID3D12GraphicsCommandList7_OMSetDepthBounds(This,Min,Max) \ - ( (This)->lpVtbl -> OMSetDepthBounds(This,Min,Max) ) - -#define ID3D12GraphicsCommandList7_SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions) \ - ( (This)->lpVtbl -> SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions) ) - -#define ID3D12GraphicsCommandList7_ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode) \ - ( (This)->lpVtbl -> ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode) ) - -#define ID3D12GraphicsCommandList7_SetViewInstanceMask(This,Mask) \ - ( (This)->lpVtbl -> SetViewInstanceMask(This,Mask) ) - -#define ID3D12GraphicsCommandList7_WriteBufferImmediate(This,Count,pParams,pModes) \ - ( (This)->lpVtbl -> WriteBufferImmediate(This,Count,pParams,pModes) ) - -#define ID3D12GraphicsCommandList7_SetProtectedResourceSession(This,pProtectedResourceSession) \ - ( (This)->lpVtbl -> SetProtectedResourceSession(This,pProtectedResourceSession) ) - -#define ID3D12GraphicsCommandList7_BeginRenderPass(This,NumRenderTargets,pRenderTargets,pDepthStencil,Flags) \ - ( (This)->lpVtbl -> BeginRenderPass(This,NumRenderTargets,pRenderTargets,pDepthStencil,Flags) ) - -#define ID3D12GraphicsCommandList7_EndRenderPass(This) \ - ( (This)->lpVtbl -> EndRenderPass(This) ) - -#define ID3D12GraphicsCommandList7_InitializeMetaCommand(This,pMetaCommand,pInitializationParametersData,InitializationParametersDataSizeInBytes) \ - ( (This)->lpVtbl -> InitializeMetaCommand(This,pMetaCommand,pInitializationParametersData,InitializationParametersDataSizeInBytes) ) - -#define ID3D12GraphicsCommandList7_ExecuteMetaCommand(This,pMetaCommand,pExecutionParametersData,ExecutionParametersDataSizeInBytes) \ - ( (This)->lpVtbl -> ExecuteMetaCommand(This,pMetaCommand,pExecutionParametersData,ExecutionParametersDataSizeInBytes) ) - -#define ID3D12GraphicsCommandList7_BuildRaytracingAccelerationStructure(This,pDesc,NumPostbuildInfoDescs,pPostbuildInfoDescs) \ - ( (This)->lpVtbl -> BuildRaytracingAccelerationStructure(This,pDesc,NumPostbuildInfoDescs,pPostbuildInfoDescs) ) - -#define ID3D12GraphicsCommandList7_EmitRaytracingAccelerationStructurePostbuildInfo(This,pDesc,NumSourceAccelerationStructures,pSourceAccelerationStructureData) \ - ( (This)->lpVtbl -> EmitRaytracingAccelerationStructurePostbuildInfo(This,pDesc,NumSourceAccelerationStructures,pSourceAccelerationStructureData) ) - -#define ID3D12GraphicsCommandList7_CopyRaytracingAccelerationStructure(This,DestAccelerationStructureData,SourceAccelerationStructureData,Mode) \ - ( (This)->lpVtbl -> CopyRaytracingAccelerationStructure(This,DestAccelerationStructureData,SourceAccelerationStructureData,Mode) ) - -#define ID3D12GraphicsCommandList7_SetPipelineState1(This,pStateObject) \ - ( (This)->lpVtbl -> SetPipelineState1(This,pStateObject) ) - -#define ID3D12GraphicsCommandList7_DispatchRays(This,pDesc) \ - ( (This)->lpVtbl -> DispatchRays(This,pDesc) ) - -#define ID3D12GraphicsCommandList7_RSSetShadingRate(This,baseShadingRate,combiners) \ - ( (This)->lpVtbl -> RSSetShadingRate(This,baseShadingRate,combiners) ) - -#define ID3D12GraphicsCommandList7_RSSetShadingRateImage(This,shadingRateImage) \ - ( (This)->lpVtbl -> RSSetShadingRateImage(This,shadingRateImage) ) - -#define ID3D12GraphicsCommandList7_DispatchMesh(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) \ - ( (This)->lpVtbl -> DispatchMesh(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) ) - -#define ID3D12GraphicsCommandList7_Barrier(This,NumBarrierGroups,pBarrierGroups) \ - ( (This)->lpVtbl -> Barrier(This,NumBarrierGroups,pBarrierGroups) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12GraphicsCommandList7_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12GraphicsCommandList8_INTERFACE_DEFINED__ -#define __ID3D12GraphicsCommandList8_INTERFACE_DEFINED__ - -/* interface ID3D12GraphicsCommandList8 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12GraphicsCommandList8; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("ee936ef9-599d-4d28-938e-23c4ad05ce51") - ID3D12GraphicsCommandList8 : public ID3D12GraphicsCommandList7 - { - public: - virtual void STDMETHODCALLTYPE OMSetFrontAndBackStencilRef( - _In_ UINT FrontStencilRef, - _In_ UINT BackStencilRef) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12GraphicsCommandList8Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12GraphicsCommandList8 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12GraphicsCommandList8 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12GraphicsCommandList8 * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12GraphicsCommandList8 * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12GraphicsCommandList8 * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12GraphicsCommandList8 * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12GraphicsCommandList8 * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12GraphicsCommandList8 * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12CommandList, GetType) - D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )( - ID3D12GraphicsCommandList8 * This); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Close) - HRESULT ( STDMETHODCALLTYPE *Close )( - ID3D12GraphicsCommandList8 * This); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Reset) - HRESULT ( STDMETHODCALLTYPE *Reset )( - ID3D12GraphicsCommandList8 * This, - _In_ ID3D12CommandAllocator *pAllocator, - _In_opt_ ID3D12PipelineState *pInitialState); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearState) - void ( STDMETHODCALLTYPE *ClearState )( - ID3D12GraphicsCommandList8 * This, - _In_opt_ ID3D12PipelineState *pPipelineState); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawInstanced) - void ( STDMETHODCALLTYPE *DrawInstanced )( - ID3D12GraphicsCommandList8 * This, - _In_ UINT VertexCountPerInstance, - _In_ UINT InstanceCount, - _In_ UINT StartVertexLocation, - _In_ UINT StartInstanceLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawIndexedInstanced) - void ( STDMETHODCALLTYPE *DrawIndexedInstanced )( - ID3D12GraphicsCommandList8 * This, - _In_ UINT IndexCountPerInstance, - _In_ UINT InstanceCount, - _In_ UINT StartIndexLocation, - _In_ INT BaseVertexLocation, - _In_ UINT StartInstanceLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Dispatch) - void ( STDMETHODCALLTYPE *Dispatch )( - ID3D12GraphicsCommandList8 * This, - _In_ UINT ThreadGroupCountX, - _In_ UINT ThreadGroupCountY, - _In_ UINT ThreadGroupCountZ); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyBufferRegion) - void ( STDMETHODCALLTYPE *CopyBufferRegion )( - ID3D12GraphicsCommandList8 * This, - _In_ ID3D12Resource *pDstBuffer, - UINT64 DstOffset, - _In_ ID3D12Resource *pSrcBuffer, - UINT64 SrcOffset, - UINT64 NumBytes); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTextureRegion) - void ( STDMETHODCALLTYPE *CopyTextureRegion )( - ID3D12GraphicsCommandList8 * This, - _In_ const D3D12_TEXTURE_COPY_LOCATION *pDst, - UINT DstX, - UINT DstY, - UINT DstZ, - _In_ const D3D12_TEXTURE_COPY_LOCATION *pSrc, - _In_opt_ const D3D12_BOX *pSrcBox); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyResource) - void ( STDMETHODCALLTYPE *CopyResource )( - ID3D12GraphicsCommandList8 * This, - _In_ ID3D12Resource *pDstResource, - _In_ ID3D12Resource *pSrcResource); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTiles) - void ( STDMETHODCALLTYPE *CopyTiles )( - ID3D12GraphicsCommandList8 * This, - _In_ ID3D12Resource *pTiledResource, - _In_ const D3D12_TILED_RESOURCE_COORDINATE *pTileRegionStartCoordinate, - _In_ const D3D12_TILE_REGION_SIZE *pTileRegionSize, - _In_ ID3D12Resource *pBuffer, - UINT64 BufferStartOffsetInBytes, - D3D12_TILE_COPY_FLAGS Flags); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveSubresource) - void ( STDMETHODCALLTYPE *ResolveSubresource )( - ID3D12GraphicsCommandList8 * This, - _In_ ID3D12Resource *pDstResource, - _In_ UINT DstSubresource, - _In_ ID3D12Resource *pSrcResource, - _In_ UINT SrcSubresource, - _In_ DXGI_FORMAT Format); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetPrimitiveTopology) - void ( STDMETHODCALLTYPE *IASetPrimitiveTopology )( - ID3D12GraphicsCommandList8 * This, - _In_ D3D12_PRIMITIVE_TOPOLOGY PrimitiveTopology); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetViewports) - void ( STDMETHODCALLTYPE *RSSetViewports )( - ID3D12GraphicsCommandList8 * This, - _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE) UINT NumViewports, - _In_reads_( NumViewports) const D3D12_VIEWPORT *pViewports); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetScissorRects) - void ( STDMETHODCALLTYPE *RSSetScissorRects )( - ID3D12GraphicsCommandList8 * This, - _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE) UINT NumRects, - _In_reads_( NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetBlendFactor) - void ( STDMETHODCALLTYPE *OMSetBlendFactor )( - ID3D12GraphicsCommandList8 * This, - _In_reads_opt_(4) const FLOAT BlendFactor[ 4 ]); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetStencilRef) - void ( STDMETHODCALLTYPE *OMSetStencilRef )( - ID3D12GraphicsCommandList8 * This, - _In_ UINT StencilRef); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPipelineState) - void ( STDMETHODCALLTYPE *SetPipelineState )( - ID3D12GraphicsCommandList8 * This, - _In_ ID3D12PipelineState *pPipelineState); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResourceBarrier) - void ( STDMETHODCALLTYPE *ResourceBarrier )( - ID3D12GraphicsCommandList8 * This, - _In_ UINT NumBarriers, - _In_reads_(NumBarriers) const D3D12_RESOURCE_BARRIER *pBarriers); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteBundle) - void ( STDMETHODCALLTYPE *ExecuteBundle )( - ID3D12GraphicsCommandList8 * This, - _In_ ID3D12GraphicsCommandList *pCommandList); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetDescriptorHeaps) - void ( STDMETHODCALLTYPE *SetDescriptorHeaps )( - ID3D12GraphicsCommandList8 * This, - _In_ UINT NumDescriptorHeaps, - _In_reads_(NumDescriptorHeaps) ID3D12DescriptorHeap *const *ppDescriptorHeaps); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootSignature) - void ( STDMETHODCALLTYPE *SetComputeRootSignature )( - ID3D12GraphicsCommandList8 * This, - _In_opt_ ID3D12RootSignature *pRootSignature); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootSignature) - void ( STDMETHODCALLTYPE *SetGraphicsRootSignature )( - ID3D12GraphicsCommandList8 * This, - _In_opt_ ID3D12RootSignature *pRootSignature); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootDescriptorTable) - void ( STDMETHODCALLTYPE *SetComputeRootDescriptorTable )( - ID3D12GraphicsCommandList8 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootDescriptorTable) - void ( STDMETHODCALLTYPE *SetGraphicsRootDescriptorTable )( - ID3D12GraphicsCommandList8 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstant) - void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstant )( - ID3D12GraphicsCommandList8 * This, - _In_ UINT RootParameterIndex, - _In_ UINT SrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstant) - void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstant )( - ID3D12GraphicsCommandList8 * This, - _In_ UINT RootParameterIndex, - _In_ UINT SrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstants) - void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstants )( - ID3D12GraphicsCommandList8 * This, - _In_ UINT RootParameterIndex, - _In_ UINT Num32BitValuesToSet, - _In_reads_(Num32BitValuesToSet*sizeof(UINT)) const void *pSrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstants) - void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstants )( - ID3D12GraphicsCommandList8 * This, - _In_ UINT RootParameterIndex, - _In_ UINT Num32BitValuesToSet, - _In_reads_(Num32BitValuesToSet*sizeof(UINT)) const void *pSrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootConstantBufferView) - void ( STDMETHODCALLTYPE *SetComputeRootConstantBufferView )( - ID3D12GraphicsCommandList8 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootConstantBufferView) - void ( STDMETHODCALLTYPE *SetGraphicsRootConstantBufferView )( - ID3D12GraphicsCommandList8 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootShaderResourceView) - void ( STDMETHODCALLTYPE *SetComputeRootShaderResourceView )( - ID3D12GraphicsCommandList8 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootShaderResourceView) - void ( STDMETHODCALLTYPE *SetGraphicsRootShaderResourceView )( - ID3D12GraphicsCommandList8 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootUnorderedAccessView) - void ( STDMETHODCALLTYPE *SetComputeRootUnorderedAccessView )( - ID3D12GraphicsCommandList8 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootUnorderedAccessView) - void ( STDMETHODCALLTYPE *SetGraphicsRootUnorderedAccessView )( - ID3D12GraphicsCommandList8 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetIndexBuffer) - void ( STDMETHODCALLTYPE *IASetIndexBuffer )( - ID3D12GraphicsCommandList8 * This, - _In_opt_ const D3D12_INDEX_BUFFER_VIEW *pView); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetVertexBuffers) - void ( STDMETHODCALLTYPE *IASetVertexBuffers )( - ID3D12GraphicsCommandList8 * This, - _In_ UINT StartSlot, - _In_ UINT NumViews, - _In_reads_opt_(NumViews) const D3D12_VERTEX_BUFFER_VIEW *pViews); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SOSetTargets) - void ( STDMETHODCALLTYPE *SOSetTargets )( - ID3D12GraphicsCommandList8 * This, - _In_ UINT StartSlot, - _In_ UINT NumViews, - _In_reads_opt_(NumViews) const D3D12_STREAM_OUTPUT_BUFFER_VIEW *pViews); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetRenderTargets) - void ( STDMETHODCALLTYPE *OMSetRenderTargets )( - ID3D12GraphicsCommandList8 * This, - _In_ UINT NumRenderTargetDescriptors, - _In_opt_ const D3D12_CPU_DESCRIPTOR_HANDLE *pRenderTargetDescriptors, - _In_ BOOL RTsSingleHandleToDescriptorRange, - _In_opt_ const D3D12_CPU_DESCRIPTOR_HANDLE *pDepthStencilDescriptor); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearDepthStencilView) - void ( STDMETHODCALLTYPE *ClearDepthStencilView )( - ID3D12GraphicsCommandList8 * This, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DepthStencilView, - _In_ D3D12_CLEAR_FLAGS ClearFlags, - _In_ FLOAT Depth, - _In_ UINT8 Stencil, - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearRenderTargetView) - void ( STDMETHODCALLTYPE *ClearRenderTargetView )( - ID3D12GraphicsCommandList8 * This, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE RenderTargetView, - _In_ const FLOAT ColorRGBA[ 4 ], - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewUint) - void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewUint )( - ID3D12GraphicsCommandList8 * This, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle, - _In_ ID3D12Resource *pResource, - _In_ const UINT Values[ 4 ], - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewFloat) - void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewFloat )( - ID3D12GraphicsCommandList8 * This, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle, - _In_ ID3D12Resource *pResource, - _In_ const FLOAT Values[ 4 ], - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DiscardResource) - void ( STDMETHODCALLTYPE *DiscardResource )( - ID3D12GraphicsCommandList8 * This, - _In_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DISCARD_REGION *pRegion); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginQuery) - void ( STDMETHODCALLTYPE *BeginQuery )( - ID3D12GraphicsCommandList8 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndQuery) - void ( STDMETHODCALLTYPE *EndQuery )( - ID3D12GraphicsCommandList8 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveQueryData) - void ( STDMETHODCALLTYPE *ResolveQueryData )( - ID3D12GraphicsCommandList8 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT StartIndex, - _In_ UINT NumQueries, - _In_ ID3D12Resource *pDestinationBuffer, - _In_ UINT64 AlignedDestinationBufferOffset); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPredication) - void ( STDMETHODCALLTYPE *SetPredication )( - ID3D12GraphicsCommandList8 * This, - _In_opt_ ID3D12Resource *pBuffer, - _In_ UINT64 AlignedBufferOffset, - _In_ D3D12_PREDICATION_OP Operation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetMarker) - void ( STDMETHODCALLTYPE *SetMarker )( - ID3D12GraphicsCommandList8 * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginEvent) - void ( STDMETHODCALLTYPE *BeginEvent )( - ID3D12GraphicsCommandList8 * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndEvent) - void ( STDMETHODCALLTYPE *EndEvent )( - ID3D12GraphicsCommandList8 * This); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteIndirect) - void ( STDMETHODCALLTYPE *ExecuteIndirect )( - ID3D12GraphicsCommandList8 * This, - _In_ ID3D12CommandSignature *pCommandSignature, - _In_ UINT MaxCommandCount, - _In_ ID3D12Resource *pArgumentBuffer, - _In_ UINT64 ArgumentBufferOffset, - _In_opt_ ID3D12Resource *pCountBuffer, - _In_ UINT64 CountBufferOffset); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, AtomicCopyBufferUINT) - void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT )( - ID3D12GraphicsCommandList8 * This, - _In_ ID3D12Resource *pDstBuffer, - UINT64 DstOffset, - _In_ ID3D12Resource *pSrcBuffer, - UINT64 SrcOffset, - UINT Dependencies, - _In_reads_(Dependencies) ID3D12Resource *const *ppDependentResources, - _In_reads_(Dependencies) const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, AtomicCopyBufferUINT64) - void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT64 )( - ID3D12GraphicsCommandList8 * This, - _In_ ID3D12Resource *pDstBuffer, - UINT64 DstOffset, - _In_ ID3D12Resource *pSrcBuffer, - UINT64 SrcOffset, - UINT Dependencies, - _In_reads_(Dependencies) ID3D12Resource *const *ppDependentResources, - _In_reads_(Dependencies) const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, OMSetDepthBounds) - void ( STDMETHODCALLTYPE *OMSetDepthBounds )( - ID3D12GraphicsCommandList8 * This, - _In_ FLOAT Min, - _In_ FLOAT Max); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, SetSamplePositions) - void ( STDMETHODCALLTYPE *SetSamplePositions )( - ID3D12GraphicsCommandList8 * This, - _In_ UINT NumSamplesPerPixel, - _In_ UINT NumPixels, - _In_reads_(NumSamplesPerPixel*NumPixels) D3D12_SAMPLE_POSITION *pSamplePositions); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, ResolveSubresourceRegion) - void ( STDMETHODCALLTYPE *ResolveSubresourceRegion )( - ID3D12GraphicsCommandList8 * This, - _In_ ID3D12Resource *pDstResource, - _In_ UINT DstSubresource, - _In_ UINT DstX, - _In_ UINT DstY, - _In_ ID3D12Resource *pSrcResource, - _In_ UINT SrcSubresource, - _In_opt_ D3D12_RECT *pSrcRect, - _In_ DXGI_FORMAT Format, - _In_ D3D12_RESOLVE_MODE ResolveMode); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, SetViewInstanceMask) - void ( STDMETHODCALLTYPE *SetViewInstanceMask )( - ID3D12GraphicsCommandList8 * This, - _In_ UINT Mask); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList2, WriteBufferImmediate) - void ( STDMETHODCALLTYPE *WriteBufferImmediate )( - ID3D12GraphicsCommandList8 * This, - UINT Count, - _In_reads_(Count) const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams, - _In_reads_opt_(Count) const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList3, SetProtectedResourceSession) - void ( STDMETHODCALLTYPE *SetProtectedResourceSession )( - ID3D12GraphicsCommandList8 * This, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, BeginRenderPass) - void ( STDMETHODCALLTYPE *BeginRenderPass )( - ID3D12GraphicsCommandList8 * This, - _In_ UINT NumRenderTargets, - _In_reads_opt_(NumRenderTargets) const D3D12_RENDER_PASS_RENDER_TARGET_DESC *pRenderTargets, - _In_opt_ const D3D12_RENDER_PASS_DEPTH_STENCIL_DESC *pDepthStencil, - D3D12_RENDER_PASS_FLAGS Flags); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, EndRenderPass) - void ( STDMETHODCALLTYPE *EndRenderPass )( - ID3D12GraphicsCommandList8 * This); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, InitializeMetaCommand) - void ( STDMETHODCALLTYPE *InitializeMetaCommand )( - ID3D12GraphicsCommandList8 * This, - _In_ ID3D12MetaCommand *pMetaCommand, - _In_reads_bytes_opt_(InitializationParametersDataSizeInBytes) const void *pInitializationParametersData, - _In_ SIZE_T InitializationParametersDataSizeInBytes); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, ExecuteMetaCommand) - void ( STDMETHODCALLTYPE *ExecuteMetaCommand )( - ID3D12GraphicsCommandList8 * This, - _In_ ID3D12MetaCommand *pMetaCommand, - _In_reads_bytes_opt_(ExecutionParametersDataSizeInBytes) const void *pExecutionParametersData, - _In_ SIZE_T ExecutionParametersDataSizeInBytes); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, BuildRaytracingAccelerationStructure) - void ( STDMETHODCALLTYPE *BuildRaytracingAccelerationStructure )( - ID3D12GraphicsCommandList8 * This, - _In_ const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC *pDesc, - _In_ UINT NumPostbuildInfoDescs, - _In_reads_opt_(NumPostbuildInfoDescs) const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC *pPostbuildInfoDescs); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, EmitRaytracingAccelerationStructurePostbuildInfo) - void ( STDMETHODCALLTYPE *EmitRaytracingAccelerationStructurePostbuildInfo )( - ID3D12GraphicsCommandList8 * This, - _In_ const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC *pDesc, - _In_ UINT NumSourceAccelerationStructures, - _In_reads_( NumSourceAccelerationStructures ) const D3D12_GPU_VIRTUAL_ADDRESS *pSourceAccelerationStructureData); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, CopyRaytracingAccelerationStructure) - void ( STDMETHODCALLTYPE *CopyRaytracingAccelerationStructure )( - ID3D12GraphicsCommandList8 * This, - _In_ D3D12_GPU_VIRTUAL_ADDRESS DestAccelerationStructureData, - _In_ D3D12_GPU_VIRTUAL_ADDRESS SourceAccelerationStructureData, - _In_ D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE Mode); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, SetPipelineState1) - void ( STDMETHODCALLTYPE *SetPipelineState1 )( - ID3D12GraphicsCommandList8 * This, - _In_ ID3D12StateObject *pStateObject); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, DispatchRays) - void ( STDMETHODCALLTYPE *DispatchRays )( - ID3D12GraphicsCommandList8 * This, - _In_ const D3D12_DISPATCH_RAYS_DESC *pDesc); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList5, RSSetShadingRate) - void ( STDMETHODCALLTYPE *RSSetShadingRate )( - ID3D12GraphicsCommandList8 * This, - _In_ D3D12_SHADING_RATE baseShadingRate, - _In_reads_opt_(D3D12_RS_SET_SHADING_RATE_COMBINER_COUNT) const D3D12_SHADING_RATE_COMBINER *combiners); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList5, RSSetShadingRateImage) - void ( STDMETHODCALLTYPE *RSSetShadingRateImage )( - ID3D12GraphicsCommandList8 * This, - _In_opt_ ID3D12Resource *shadingRateImage); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList6, DispatchMesh) - void ( STDMETHODCALLTYPE *DispatchMesh )( - ID3D12GraphicsCommandList8 * This, - _In_ UINT ThreadGroupCountX, - _In_ UINT ThreadGroupCountY, - _In_ UINT ThreadGroupCountZ); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList7, Barrier) - void ( STDMETHODCALLTYPE *Barrier )( - ID3D12GraphicsCommandList8 * This, - UINT32 NumBarrierGroups, - _In_reads_(NumBarrierGroups) const D3D12_BARRIER_GROUP *pBarrierGroups); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList8, OMSetFrontAndBackStencilRef) - void ( STDMETHODCALLTYPE *OMSetFrontAndBackStencilRef )( - ID3D12GraphicsCommandList8 * This, - _In_ UINT FrontStencilRef, - _In_ UINT BackStencilRef); - - END_INTERFACE - } ID3D12GraphicsCommandList8Vtbl; - - interface ID3D12GraphicsCommandList8 - { - CONST_VTBL struct ID3D12GraphicsCommandList8Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12GraphicsCommandList8_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12GraphicsCommandList8_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12GraphicsCommandList8_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12GraphicsCommandList8_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12GraphicsCommandList8_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12GraphicsCommandList8_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12GraphicsCommandList8_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12GraphicsCommandList8_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12GraphicsCommandList8_GetType(This) \ - ( (This)->lpVtbl -> GetType(This) ) - -#define ID3D12GraphicsCommandList8_Close(This) \ - ( (This)->lpVtbl -> Close(This) ) - -#define ID3D12GraphicsCommandList8_Reset(This,pAllocator,pInitialState) \ - ( (This)->lpVtbl -> Reset(This,pAllocator,pInitialState) ) - -#define ID3D12GraphicsCommandList8_ClearState(This,pPipelineState) \ - ( (This)->lpVtbl -> ClearState(This,pPipelineState) ) - -#define ID3D12GraphicsCommandList8_DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) \ - ( (This)->lpVtbl -> DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) ) - -#define ID3D12GraphicsCommandList8_DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) \ - ( (This)->lpVtbl -> DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) ) - -#define ID3D12GraphicsCommandList8_Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) \ - ( (This)->lpVtbl -> Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) ) - -#define ID3D12GraphicsCommandList8_CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes) \ - ( (This)->lpVtbl -> CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes) ) - -#define ID3D12GraphicsCommandList8_CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox) \ - ( (This)->lpVtbl -> CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox) ) - -#define ID3D12GraphicsCommandList8_CopyResource(This,pDstResource,pSrcResource) \ - ( (This)->lpVtbl -> CopyResource(This,pDstResource,pSrcResource) ) - -#define ID3D12GraphicsCommandList8_CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags) \ - ( (This)->lpVtbl -> CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags) ) - -#define ID3D12GraphicsCommandList8_ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) \ - ( (This)->lpVtbl -> ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) ) - -#define ID3D12GraphicsCommandList8_IASetPrimitiveTopology(This,PrimitiveTopology) \ - ( (This)->lpVtbl -> IASetPrimitiveTopology(This,PrimitiveTopology) ) - -#define ID3D12GraphicsCommandList8_RSSetViewports(This,NumViewports,pViewports) \ - ( (This)->lpVtbl -> RSSetViewports(This,NumViewports,pViewports) ) - -#define ID3D12GraphicsCommandList8_RSSetScissorRects(This,NumRects,pRects) \ - ( (This)->lpVtbl -> RSSetScissorRects(This,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList8_OMSetBlendFactor(This,BlendFactor) \ - ( (This)->lpVtbl -> OMSetBlendFactor(This,BlendFactor) ) - -#define ID3D12GraphicsCommandList8_OMSetStencilRef(This,StencilRef) \ - ( (This)->lpVtbl -> OMSetStencilRef(This,StencilRef) ) - -#define ID3D12GraphicsCommandList8_SetPipelineState(This,pPipelineState) \ - ( (This)->lpVtbl -> SetPipelineState(This,pPipelineState) ) - -#define ID3D12GraphicsCommandList8_ResourceBarrier(This,NumBarriers,pBarriers) \ - ( (This)->lpVtbl -> ResourceBarrier(This,NumBarriers,pBarriers) ) - -#define ID3D12GraphicsCommandList8_ExecuteBundle(This,pCommandList) \ - ( (This)->lpVtbl -> ExecuteBundle(This,pCommandList) ) - -#define ID3D12GraphicsCommandList8_SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps) \ - ( (This)->lpVtbl -> SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps) ) - -#define ID3D12GraphicsCommandList8_SetComputeRootSignature(This,pRootSignature) \ - ( (This)->lpVtbl -> SetComputeRootSignature(This,pRootSignature) ) - -#define ID3D12GraphicsCommandList8_SetGraphicsRootSignature(This,pRootSignature) \ - ( (This)->lpVtbl -> SetGraphicsRootSignature(This,pRootSignature) ) - -#define ID3D12GraphicsCommandList8_SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) \ - ( (This)->lpVtbl -> SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) - -#define ID3D12GraphicsCommandList8_SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) \ - ( (This)->lpVtbl -> SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) - -#define ID3D12GraphicsCommandList8_SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList8_SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList8_SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList8_SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList8_SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList8_SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList8_SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList8_SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList8_SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList8_SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList8_IASetIndexBuffer(This,pView) \ - ( (This)->lpVtbl -> IASetIndexBuffer(This,pView) ) - -#define ID3D12GraphicsCommandList8_IASetVertexBuffers(This,StartSlot,NumViews,pViews) \ - ( (This)->lpVtbl -> IASetVertexBuffers(This,StartSlot,NumViews,pViews) ) - -#define ID3D12GraphicsCommandList8_SOSetTargets(This,StartSlot,NumViews,pViews) \ - ( (This)->lpVtbl -> SOSetTargets(This,StartSlot,NumViews,pViews) ) - -#define ID3D12GraphicsCommandList8_OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor) \ - ( (This)->lpVtbl -> OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor) ) - -#define ID3D12GraphicsCommandList8_ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList8_ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList8_ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList8_ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList8_DiscardResource(This,pResource,pRegion) \ - ( (This)->lpVtbl -> DiscardResource(This,pResource,pRegion) ) - -#define ID3D12GraphicsCommandList8_BeginQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> BeginQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12GraphicsCommandList8_EndQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> EndQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12GraphicsCommandList8_ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) \ - ( (This)->lpVtbl -> ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) ) - -#define ID3D12GraphicsCommandList8_SetPredication(This,pBuffer,AlignedBufferOffset,Operation) \ - ( (This)->lpVtbl -> SetPredication(This,pBuffer,AlignedBufferOffset,Operation) ) - -#define ID3D12GraphicsCommandList8_SetMarker(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> SetMarker(This,Metadata,pData,Size) ) - -#define ID3D12GraphicsCommandList8_BeginEvent(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> BeginEvent(This,Metadata,pData,Size) ) - -#define ID3D12GraphicsCommandList8_EndEvent(This) \ - ( (This)->lpVtbl -> EndEvent(This) ) - -#define ID3D12GraphicsCommandList8_ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset) \ - ( (This)->lpVtbl -> ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset) ) - -#define ID3D12GraphicsCommandList8_AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) \ - ( (This)->lpVtbl -> AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) - -#define ID3D12GraphicsCommandList8_AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) \ - ( (This)->lpVtbl -> AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) - -#define ID3D12GraphicsCommandList8_OMSetDepthBounds(This,Min,Max) \ - ( (This)->lpVtbl -> OMSetDepthBounds(This,Min,Max) ) - -#define ID3D12GraphicsCommandList8_SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions) \ - ( (This)->lpVtbl -> SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions) ) - -#define ID3D12GraphicsCommandList8_ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode) \ - ( (This)->lpVtbl -> ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode) ) - -#define ID3D12GraphicsCommandList8_SetViewInstanceMask(This,Mask) \ - ( (This)->lpVtbl -> SetViewInstanceMask(This,Mask) ) - -#define ID3D12GraphicsCommandList8_WriteBufferImmediate(This,Count,pParams,pModes) \ - ( (This)->lpVtbl -> WriteBufferImmediate(This,Count,pParams,pModes) ) - -#define ID3D12GraphicsCommandList8_SetProtectedResourceSession(This,pProtectedResourceSession) \ - ( (This)->lpVtbl -> SetProtectedResourceSession(This,pProtectedResourceSession) ) - -#define ID3D12GraphicsCommandList8_BeginRenderPass(This,NumRenderTargets,pRenderTargets,pDepthStencil,Flags) \ - ( (This)->lpVtbl -> BeginRenderPass(This,NumRenderTargets,pRenderTargets,pDepthStencil,Flags) ) - -#define ID3D12GraphicsCommandList8_EndRenderPass(This) \ - ( (This)->lpVtbl -> EndRenderPass(This) ) - -#define ID3D12GraphicsCommandList8_InitializeMetaCommand(This,pMetaCommand,pInitializationParametersData,InitializationParametersDataSizeInBytes) \ - ( (This)->lpVtbl -> InitializeMetaCommand(This,pMetaCommand,pInitializationParametersData,InitializationParametersDataSizeInBytes) ) - -#define ID3D12GraphicsCommandList8_ExecuteMetaCommand(This,pMetaCommand,pExecutionParametersData,ExecutionParametersDataSizeInBytes) \ - ( (This)->lpVtbl -> ExecuteMetaCommand(This,pMetaCommand,pExecutionParametersData,ExecutionParametersDataSizeInBytes) ) - -#define ID3D12GraphicsCommandList8_BuildRaytracingAccelerationStructure(This,pDesc,NumPostbuildInfoDescs,pPostbuildInfoDescs) \ - ( (This)->lpVtbl -> BuildRaytracingAccelerationStructure(This,pDesc,NumPostbuildInfoDescs,pPostbuildInfoDescs) ) - -#define ID3D12GraphicsCommandList8_EmitRaytracingAccelerationStructurePostbuildInfo(This,pDesc,NumSourceAccelerationStructures,pSourceAccelerationStructureData) \ - ( (This)->lpVtbl -> EmitRaytracingAccelerationStructurePostbuildInfo(This,pDesc,NumSourceAccelerationStructures,pSourceAccelerationStructureData) ) - -#define ID3D12GraphicsCommandList8_CopyRaytracingAccelerationStructure(This,DestAccelerationStructureData,SourceAccelerationStructureData,Mode) \ - ( (This)->lpVtbl -> CopyRaytracingAccelerationStructure(This,DestAccelerationStructureData,SourceAccelerationStructureData,Mode) ) - -#define ID3D12GraphicsCommandList8_SetPipelineState1(This,pStateObject) \ - ( (This)->lpVtbl -> SetPipelineState1(This,pStateObject) ) - -#define ID3D12GraphicsCommandList8_DispatchRays(This,pDesc) \ - ( (This)->lpVtbl -> DispatchRays(This,pDesc) ) - -#define ID3D12GraphicsCommandList8_RSSetShadingRate(This,baseShadingRate,combiners) \ - ( (This)->lpVtbl -> RSSetShadingRate(This,baseShadingRate,combiners) ) - -#define ID3D12GraphicsCommandList8_RSSetShadingRateImage(This,shadingRateImage) \ - ( (This)->lpVtbl -> RSSetShadingRateImage(This,shadingRateImage) ) - -#define ID3D12GraphicsCommandList8_DispatchMesh(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) \ - ( (This)->lpVtbl -> DispatchMesh(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) ) - -#define ID3D12GraphicsCommandList8_Barrier(This,NumBarrierGroups,pBarrierGroups) \ - ( (This)->lpVtbl -> Barrier(This,NumBarrierGroups,pBarrierGroups) ) - -#define ID3D12GraphicsCommandList8_OMSetFrontAndBackStencilRef(This,FrontStencilRef,BackStencilRef) \ - ( (This)->lpVtbl -> OMSetFrontAndBackStencilRef(This,FrontStencilRef,BackStencilRef) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12GraphicsCommandList8_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12GraphicsCommandList9_INTERFACE_DEFINED__ -#define __ID3D12GraphicsCommandList9_INTERFACE_DEFINED__ - -/* interface ID3D12GraphicsCommandList9 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12GraphicsCommandList9; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("34ed2808-ffe6-4c2b-b11a-cabd2b0c59e1") - ID3D12GraphicsCommandList9 : public ID3D12GraphicsCommandList8 - { - public: - virtual void STDMETHODCALLTYPE RSSetDepthBias( - _In_ FLOAT DepthBias, - _In_ FLOAT DepthBiasClamp, - _In_ FLOAT SlopeScaledDepthBias) = 0; - - virtual void STDMETHODCALLTYPE IASetIndexBufferStripCutValue( - _In_ D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12GraphicsCommandList9Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12GraphicsCommandList9 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12GraphicsCommandList9 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12GraphicsCommandList9 * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12GraphicsCommandList9 * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12GraphicsCommandList9 * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12GraphicsCommandList9 * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12GraphicsCommandList9 * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12GraphicsCommandList9 * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12CommandList, GetType) - D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )( - ID3D12GraphicsCommandList9 * This); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Close) - HRESULT ( STDMETHODCALLTYPE *Close )( - ID3D12GraphicsCommandList9 * This); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Reset) - HRESULT ( STDMETHODCALLTYPE *Reset )( - ID3D12GraphicsCommandList9 * This, - _In_ ID3D12CommandAllocator *pAllocator, - _In_opt_ ID3D12PipelineState *pInitialState); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearState) - void ( STDMETHODCALLTYPE *ClearState )( - ID3D12GraphicsCommandList9 * This, - _In_opt_ ID3D12PipelineState *pPipelineState); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawInstanced) - void ( STDMETHODCALLTYPE *DrawInstanced )( - ID3D12GraphicsCommandList9 * This, - _In_ UINT VertexCountPerInstance, - _In_ UINT InstanceCount, - _In_ UINT StartVertexLocation, - _In_ UINT StartInstanceLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawIndexedInstanced) - void ( STDMETHODCALLTYPE *DrawIndexedInstanced )( - ID3D12GraphicsCommandList9 * This, - _In_ UINT IndexCountPerInstance, - _In_ UINT InstanceCount, - _In_ UINT StartIndexLocation, - _In_ INT BaseVertexLocation, - _In_ UINT StartInstanceLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Dispatch) - void ( STDMETHODCALLTYPE *Dispatch )( - ID3D12GraphicsCommandList9 * This, - _In_ UINT ThreadGroupCountX, - _In_ UINT ThreadGroupCountY, - _In_ UINT ThreadGroupCountZ); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyBufferRegion) - void ( STDMETHODCALLTYPE *CopyBufferRegion )( - ID3D12GraphicsCommandList9 * This, - _In_ ID3D12Resource *pDstBuffer, - UINT64 DstOffset, - _In_ ID3D12Resource *pSrcBuffer, - UINT64 SrcOffset, - UINT64 NumBytes); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTextureRegion) - void ( STDMETHODCALLTYPE *CopyTextureRegion )( - ID3D12GraphicsCommandList9 * This, - _In_ const D3D12_TEXTURE_COPY_LOCATION *pDst, - UINT DstX, - UINT DstY, - UINT DstZ, - _In_ const D3D12_TEXTURE_COPY_LOCATION *pSrc, - _In_opt_ const D3D12_BOX *pSrcBox); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyResource) - void ( STDMETHODCALLTYPE *CopyResource )( - ID3D12GraphicsCommandList9 * This, - _In_ ID3D12Resource *pDstResource, - _In_ ID3D12Resource *pSrcResource); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTiles) - void ( STDMETHODCALLTYPE *CopyTiles )( - ID3D12GraphicsCommandList9 * This, - _In_ ID3D12Resource *pTiledResource, - _In_ const D3D12_TILED_RESOURCE_COORDINATE *pTileRegionStartCoordinate, - _In_ const D3D12_TILE_REGION_SIZE *pTileRegionSize, - _In_ ID3D12Resource *pBuffer, - UINT64 BufferStartOffsetInBytes, - D3D12_TILE_COPY_FLAGS Flags); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveSubresource) - void ( STDMETHODCALLTYPE *ResolveSubresource )( - ID3D12GraphicsCommandList9 * This, - _In_ ID3D12Resource *pDstResource, - _In_ UINT DstSubresource, - _In_ ID3D12Resource *pSrcResource, - _In_ UINT SrcSubresource, - _In_ DXGI_FORMAT Format); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetPrimitiveTopology) - void ( STDMETHODCALLTYPE *IASetPrimitiveTopology )( - ID3D12GraphicsCommandList9 * This, - _In_ D3D12_PRIMITIVE_TOPOLOGY PrimitiveTopology); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetViewports) - void ( STDMETHODCALLTYPE *RSSetViewports )( - ID3D12GraphicsCommandList9 * This, - _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE) UINT NumViewports, - _In_reads_( NumViewports) const D3D12_VIEWPORT *pViewports); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetScissorRects) - void ( STDMETHODCALLTYPE *RSSetScissorRects )( - ID3D12GraphicsCommandList9 * This, - _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE) UINT NumRects, - _In_reads_( NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetBlendFactor) - void ( STDMETHODCALLTYPE *OMSetBlendFactor )( - ID3D12GraphicsCommandList9 * This, - _In_reads_opt_(4) const FLOAT BlendFactor[ 4 ]); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetStencilRef) - void ( STDMETHODCALLTYPE *OMSetStencilRef )( - ID3D12GraphicsCommandList9 * This, - _In_ UINT StencilRef); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPipelineState) - void ( STDMETHODCALLTYPE *SetPipelineState )( - ID3D12GraphicsCommandList9 * This, - _In_ ID3D12PipelineState *pPipelineState); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResourceBarrier) - void ( STDMETHODCALLTYPE *ResourceBarrier )( - ID3D12GraphicsCommandList9 * This, - _In_ UINT NumBarriers, - _In_reads_(NumBarriers) const D3D12_RESOURCE_BARRIER *pBarriers); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteBundle) - void ( STDMETHODCALLTYPE *ExecuteBundle )( - ID3D12GraphicsCommandList9 * This, - _In_ ID3D12GraphicsCommandList *pCommandList); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetDescriptorHeaps) - void ( STDMETHODCALLTYPE *SetDescriptorHeaps )( - ID3D12GraphicsCommandList9 * This, - _In_ UINT NumDescriptorHeaps, - _In_reads_(NumDescriptorHeaps) ID3D12DescriptorHeap *const *ppDescriptorHeaps); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootSignature) - void ( STDMETHODCALLTYPE *SetComputeRootSignature )( - ID3D12GraphicsCommandList9 * This, - _In_opt_ ID3D12RootSignature *pRootSignature); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootSignature) - void ( STDMETHODCALLTYPE *SetGraphicsRootSignature )( - ID3D12GraphicsCommandList9 * This, - _In_opt_ ID3D12RootSignature *pRootSignature); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootDescriptorTable) - void ( STDMETHODCALLTYPE *SetComputeRootDescriptorTable )( - ID3D12GraphicsCommandList9 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootDescriptorTable) - void ( STDMETHODCALLTYPE *SetGraphicsRootDescriptorTable )( - ID3D12GraphicsCommandList9 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstant) - void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstant )( - ID3D12GraphicsCommandList9 * This, - _In_ UINT RootParameterIndex, - _In_ UINT SrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstant) - void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstant )( - ID3D12GraphicsCommandList9 * This, - _In_ UINT RootParameterIndex, - _In_ UINT SrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstants) - void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstants )( - ID3D12GraphicsCommandList9 * This, - _In_ UINT RootParameterIndex, - _In_ UINT Num32BitValuesToSet, - _In_reads_(Num32BitValuesToSet*sizeof(UINT)) const void *pSrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstants) - void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstants )( - ID3D12GraphicsCommandList9 * This, - _In_ UINT RootParameterIndex, - _In_ UINT Num32BitValuesToSet, - _In_reads_(Num32BitValuesToSet*sizeof(UINT)) const void *pSrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootConstantBufferView) - void ( STDMETHODCALLTYPE *SetComputeRootConstantBufferView )( - ID3D12GraphicsCommandList9 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootConstantBufferView) - void ( STDMETHODCALLTYPE *SetGraphicsRootConstantBufferView )( - ID3D12GraphicsCommandList9 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootShaderResourceView) - void ( STDMETHODCALLTYPE *SetComputeRootShaderResourceView )( - ID3D12GraphicsCommandList9 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootShaderResourceView) - void ( STDMETHODCALLTYPE *SetGraphicsRootShaderResourceView )( - ID3D12GraphicsCommandList9 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootUnorderedAccessView) - void ( STDMETHODCALLTYPE *SetComputeRootUnorderedAccessView )( - ID3D12GraphicsCommandList9 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootUnorderedAccessView) - void ( STDMETHODCALLTYPE *SetGraphicsRootUnorderedAccessView )( - ID3D12GraphicsCommandList9 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetIndexBuffer) - void ( STDMETHODCALLTYPE *IASetIndexBuffer )( - ID3D12GraphicsCommandList9 * This, - _In_opt_ const D3D12_INDEX_BUFFER_VIEW *pView); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetVertexBuffers) - void ( STDMETHODCALLTYPE *IASetVertexBuffers )( - ID3D12GraphicsCommandList9 * This, - _In_ UINT StartSlot, - _In_ UINT NumViews, - _In_reads_opt_(NumViews) const D3D12_VERTEX_BUFFER_VIEW *pViews); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SOSetTargets) - void ( STDMETHODCALLTYPE *SOSetTargets )( - ID3D12GraphicsCommandList9 * This, - _In_ UINT StartSlot, - _In_ UINT NumViews, - _In_reads_opt_(NumViews) const D3D12_STREAM_OUTPUT_BUFFER_VIEW *pViews); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetRenderTargets) - void ( STDMETHODCALLTYPE *OMSetRenderTargets )( - ID3D12GraphicsCommandList9 * This, - _In_ UINT NumRenderTargetDescriptors, - _In_opt_ const D3D12_CPU_DESCRIPTOR_HANDLE *pRenderTargetDescriptors, - _In_ BOOL RTsSingleHandleToDescriptorRange, - _In_opt_ const D3D12_CPU_DESCRIPTOR_HANDLE *pDepthStencilDescriptor); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearDepthStencilView) - void ( STDMETHODCALLTYPE *ClearDepthStencilView )( - ID3D12GraphicsCommandList9 * This, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DepthStencilView, - _In_ D3D12_CLEAR_FLAGS ClearFlags, - _In_ FLOAT Depth, - _In_ UINT8 Stencil, - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearRenderTargetView) - void ( STDMETHODCALLTYPE *ClearRenderTargetView )( - ID3D12GraphicsCommandList9 * This, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE RenderTargetView, - _In_ const FLOAT ColorRGBA[ 4 ], - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewUint) - void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewUint )( - ID3D12GraphicsCommandList9 * This, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle, - _In_ ID3D12Resource *pResource, - _In_ const UINT Values[ 4 ], - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewFloat) - void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewFloat )( - ID3D12GraphicsCommandList9 * This, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle, - _In_ ID3D12Resource *pResource, - _In_ const FLOAT Values[ 4 ], - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DiscardResource) - void ( STDMETHODCALLTYPE *DiscardResource )( - ID3D12GraphicsCommandList9 * This, - _In_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DISCARD_REGION *pRegion); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginQuery) - void ( STDMETHODCALLTYPE *BeginQuery )( - ID3D12GraphicsCommandList9 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndQuery) - void ( STDMETHODCALLTYPE *EndQuery )( - ID3D12GraphicsCommandList9 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveQueryData) - void ( STDMETHODCALLTYPE *ResolveQueryData )( - ID3D12GraphicsCommandList9 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT StartIndex, - _In_ UINT NumQueries, - _In_ ID3D12Resource *pDestinationBuffer, - _In_ UINT64 AlignedDestinationBufferOffset); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPredication) - void ( STDMETHODCALLTYPE *SetPredication )( - ID3D12GraphicsCommandList9 * This, - _In_opt_ ID3D12Resource *pBuffer, - _In_ UINT64 AlignedBufferOffset, - _In_ D3D12_PREDICATION_OP Operation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetMarker) - void ( STDMETHODCALLTYPE *SetMarker )( - ID3D12GraphicsCommandList9 * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginEvent) - void ( STDMETHODCALLTYPE *BeginEvent )( - ID3D12GraphicsCommandList9 * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndEvent) - void ( STDMETHODCALLTYPE *EndEvent )( - ID3D12GraphicsCommandList9 * This); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteIndirect) - void ( STDMETHODCALLTYPE *ExecuteIndirect )( - ID3D12GraphicsCommandList9 * This, - _In_ ID3D12CommandSignature *pCommandSignature, - _In_ UINT MaxCommandCount, - _In_ ID3D12Resource *pArgumentBuffer, - _In_ UINT64 ArgumentBufferOffset, - _In_opt_ ID3D12Resource *pCountBuffer, - _In_ UINT64 CountBufferOffset); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, AtomicCopyBufferUINT) - void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT )( - ID3D12GraphicsCommandList9 * This, - _In_ ID3D12Resource *pDstBuffer, - UINT64 DstOffset, - _In_ ID3D12Resource *pSrcBuffer, - UINT64 SrcOffset, - UINT Dependencies, - _In_reads_(Dependencies) ID3D12Resource *const *ppDependentResources, - _In_reads_(Dependencies) const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, AtomicCopyBufferUINT64) - void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT64 )( - ID3D12GraphicsCommandList9 * This, - _In_ ID3D12Resource *pDstBuffer, - UINT64 DstOffset, - _In_ ID3D12Resource *pSrcBuffer, - UINT64 SrcOffset, - UINT Dependencies, - _In_reads_(Dependencies) ID3D12Resource *const *ppDependentResources, - _In_reads_(Dependencies) const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, OMSetDepthBounds) - void ( STDMETHODCALLTYPE *OMSetDepthBounds )( - ID3D12GraphicsCommandList9 * This, - _In_ FLOAT Min, - _In_ FLOAT Max); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, SetSamplePositions) - void ( STDMETHODCALLTYPE *SetSamplePositions )( - ID3D12GraphicsCommandList9 * This, - _In_ UINT NumSamplesPerPixel, - _In_ UINT NumPixels, - _In_reads_(NumSamplesPerPixel*NumPixels) D3D12_SAMPLE_POSITION *pSamplePositions); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, ResolveSubresourceRegion) - void ( STDMETHODCALLTYPE *ResolveSubresourceRegion )( - ID3D12GraphicsCommandList9 * This, - _In_ ID3D12Resource *pDstResource, - _In_ UINT DstSubresource, - _In_ UINT DstX, - _In_ UINT DstY, - _In_ ID3D12Resource *pSrcResource, - _In_ UINT SrcSubresource, - _In_opt_ D3D12_RECT *pSrcRect, - _In_ DXGI_FORMAT Format, - _In_ D3D12_RESOLVE_MODE ResolveMode); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, SetViewInstanceMask) - void ( STDMETHODCALLTYPE *SetViewInstanceMask )( - ID3D12GraphicsCommandList9 * This, - _In_ UINT Mask); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList2, WriteBufferImmediate) - void ( STDMETHODCALLTYPE *WriteBufferImmediate )( - ID3D12GraphicsCommandList9 * This, - UINT Count, - _In_reads_(Count) const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams, - _In_reads_opt_(Count) const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList3, SetProtectedResourceSession) - void ( STDMETHODCALLTYPE *SetProtectedResourceSession )( - ID3D12GraphicsCommandList9 * This, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, BeginRenderPass) - void ( STDMETHODCALLTYPE *BeginRenderPass )( - ID3D12GraphicsCommandList9 * This, - _In_ UINT NumRenderTargets, - _In_reads_opt_(NumRenderTargets) const D3D12_RENDER_PASS_RENDER_TARGET_DESC *pRenderTargets, - _In_opt_ const D3D12_RENDER_PASS_DEPTH_STENCIL_DESC *pDepthStencil, - D3D12_RENDER_PASS_FLAGS Flags); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, EndRenderPass) - void ( STDMETHODCALLTYPE *EndRenderPass )( - ID3D12GraphicsCommandList9 * This); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, InitializeMetaCommand) - void ( STDMETHODCALLTYPE *InitializeMetaCommand )( - ID3D12GraphicsCommandList9 * This, - _In_ ID3D12MetaCommand *pMetaCommand, - _In_reads_bytes_opt_(InitializationParametersDataSizeInBytes) const void *pInitializationParametersData, - _In_ SIZE_T InitializationParametersDataSizeInBytes); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, ExecuteMetaCommand) - void ( STDMETHODCALLTYPE *ExecuteMetaCommand )( - ID3D12GraphicsCommandList9 * This, - _In_ ID3D12MetaCommand *pMetaCommand, - _In_reads_bytes_opt_(ExecutionParametersDataSizeInBytes) const void *pExecutionParametersData, - _In_ SIZE_T ExecutionParametersDataSizeInBytes); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, BuildRaytracingAccelerationStructure) - void ( STDMETHODCALLTYPE *BuildRaytracingAccelerationStructure )( - ID3D12GraphicsCommandList9 * This, - _In_ const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC *pDesc, - _In_ UINT NumPostbuildInfoDescs, - _In_reads_opt_(NumPostbuildInfoDescs) const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC *pPostbuildInfoDescs); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, EmitRaytracingAccelerationStructurePostbuildInfo) - void ( STDMETHODCALLTYPE *EmitRaytracingAccelerationStructurePostbuildInfo )( - ID3D12GraphicsCommandList9 * This, - _In_ const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC *pDesc, - _In_ UINT NumSourceAccelerationStructures, - _In_reads_( NumSourceAccelerationStructures ) const D3D12_GPU_VIRTUAL_ADDRESS *pSourceAccelerationStructureData); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, CopyRaytracingAccelerationStructure) - void ( STDMETHODCALLTYPE *CopyRaytracingAccelerationStructure )( - ID3D12GraphicsCommandList9 * This, - _In_ D3D12_GPU_VIRTUAL_ADDRESS DestAccelerationStructureData, - _In_ D3D12_GPU_VIRTUAL_ADDRESS SourceAccelerationStructureData, - _In_ D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE Mode); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, SetPipelineState1) - void ( STDMETHODCALLTYPE *SetPipelineState1 )( - ID3D12GraphicsCommandList9 * This, - _In_ ID3D12StateObject *pStateObject); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, DispatchRays) - void ( STDMETHODCALLTYPE *DispatchRays )( - ID3D12GraphicsCommandList9 * This, - _In_ const D3D12_DISPATCH_RAYS_DESC *pDesc); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList5, RSSetShadingRate) - void ( STDMETHODCALLTYPE *RSSetShadingRate )( - ID3D12GraphicsCommandList9 * This, - _In_ D3D12_SHADING_RATE baseShadingRate, - _In_reads_opt_(D3D12_RS_SET_SHADING_RATE_COMBINER_COUNT) const D3D12_SHADING_RATE_COMBINER *combiners); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList5, RSSetShadingRateImage) - void ( STDMETHODCALLTYPE *RSSetShadingRateImage )( - ID3D12GraphicsCommandList9 * This, - _In_opt_ ID3D12Resource *shadingRateImage); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList6, DispatchMesh) - void ( STDMETHODCALLTYPE *DispatchMesh )( - ID3D12GraphicsCommandList9 * This, - _In_ UINT ThreadGroupCountX, - _In_ UINT ThreadGroupCountY, - _In_ UINT ThreadGroupCountZ); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList7, Barrier) - void ( STDMETHODCALLTYPE *Barrier )( - ID3D12GraphicsCommandList9 * This, - UINT32 NumBarrierGroups, - _In_reads_(NumBarrierGroups) const D3D12_BARRIER_GROUP *pBarrierGroups); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList8, OMSetFrontAndBackStencilRef) - void ( STDMETHODCALLTYPE *OMSetFrontAndBackStencilRef )( - ID3D12GraphicsCommandList9 * This, - _In_ UINT FrontStencilRef, - _In_ UINT BackStencilRef); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList9, RSSetDepthBias) - void ( STDMETHODCALLTYPE *RSSetDepthBias )( - ID3D12GraphicsCommandList9 * This, - _In_ FLOAT DepthBias, - _In_ FLOAT DepthBiasClamp, - _In_ FLOAT SlopeScaledDepthBias); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList9, IASetIndexBufferStripCutValue) - void ( STDMETHODCALLTYPE *IASetIndexBufferStripCutValue )( - ID3D12GraphicsCommandList9 * This, - _In_ D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue); - - END_INTERFACE - } ID3D12GraphicsCommandList9Vtbl; - - interface ID3D12GraphicsCommandList9 - { - CONST_VTBL struct ID3D12GraphicsCommandList9Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12GraphicsCommandList9_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12GraphicsCommandList9_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12GraphicsCommandList9_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12GraphicsCommandList9_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12GraphicsCommandList9_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12GraphicsCommandList9_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12GraphicsCommandList9_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12GraphicsCommandList9_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12GraphicsCommandList9_GetType(This) \ - ( (This)->lpVtbl -> GetType(This) ) - -#define ID3D12GraphicsCommandList9_Close(This) \ - ( (This)->lpVtbl -> Close(This) ) - -#define ID3D12GraphicsCommandList9_Reset(This,pAllocator,pInitialState) \ - ( (This)->lpVtbl -> Reset(This,pAllocator,pInitialState) ) - -#define ID3D12GraphicsCommandList9_ClearState(This,pPipelineState) \ - ( (This)->lpVtbl -> ClearState(This,pPipelineState) ) - -#define ID3D12GraphicsCommandList9_DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) \ - ( (This)->lpVtbl -> DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) ) - -#define ID3D12GraphicsCommandList9_DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) \ - ( (This)->lpVtbl -> DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) ) - -#define ID3D12GraphicsCommandList9_Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) \ - ( (This)->lpVtbl -> Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) ) - -#define ID3D12GraphicsCommandList9_CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes) \ - ( (This)->lpVtbl -> CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes) ) - -#define ID3D12GraphicsCommandList9_CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox) \ - ( (This)->lpVtbl -> CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox) ) - -#define ID3D12GraphicsCommandList9_CopyResource(This,pDstResource,pSrcResource) \ - ( (This)->lpVtbl -> CopyResource(This,pDstResource,pSrcResource) ) - -#define ID3D12GraphicsCommandList9_CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags) \ - ( (This)->lpVtbl -> CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags) ) - -#define ID3D12GraphicsCommandList9_ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) \ - ( (This)->lpVtbl -> ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) ) - -#define ID3D12GraphicsCommandList9_IASetPrimitiveTopology(This,PrimitiveTopology) \ - ( (This)->lpVtbl -> IASetPrimitiveTopology(This,PrimitiveTopology) ) - -#define ID3D12GraphicsCommandList9_RSSetViewports(This,NumViewports,pViewports) \ - ( (This)->lpVtbl -> RSSetViewports(This,NumViewports,pViewports) ) - -#define ID3D12GraphicsCommandList9_RSSetScissorRects(This,NumRects,pRects) \ - ( (This)->lpVtbl -> RSSetScissorRects(This,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList9_OMSetBlendFactor(This,BlendFactor) \ - ( (This)->lpVtbl -> OMSetBlendFactor(This,BlendFactor) ) - -#define ID3D12GraphicsCommandList9_OMSetStencilRef(This,StencilRef) \ - ( (This)->lpVtbl -> OMSetStencilRef(This,StencilRef) ) - -#define ID3D12GraphicsCommandList9_SetPipelineState(This,pPipelineState) \ - ( (This)->lpVtbl -> SetPipelineState(This,pPipelineState) ) - -#define ID3D12GraphicsCommandList9_ResourceBarrier(This,NumBarriers,pBarriers) \ - ( (This)->lpVtbl -> ResourceBarrier(This,NumBarriers,pBarriers) ) - -#define ID3D12GraphicsCommandList9_ExecuteBundle(This,pCommandList) \ - ( (This)->lpVtbl -> ExecuteBundle(This,pCommandList) ) - -#define ID3D12GraphicsCommandList9_SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps) \ - ( (This)->lpVtbl -> SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps) ) - -#define ID3D12GraphicsCommandList9_SetComputeRootSignature(This,pRootSignature) \ - ( (This)->lpVtbl -> SetComputeRootSignature(This,pRootSignature) ) - -#define ID3D12GraphicsCommandList9_SetGraphicsRootSignature(This,pRootSignature) \ - ( (This)->lpVtbl -> SetGraphicsRootSignature(This,pRootSignature) ) - -#define ID3D12GraphicsCommandList9_SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) \ - ( (This)->lpVtbl -> SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) - -#define ID3D12GraphicsCommandList9_SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) \ - ( (This)->lpVtbl -> SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) - -#define ID3D12GraphicsCommandList9_SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList9_SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList9_SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList9_SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList9_SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList9_SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList9_SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList9_SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList9_SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList9_SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList9_IASetIndexBuffer(This,pView) \ - ( (This)->lpVtbl -> IASetIndexBuffer(This,pView) ) - -#define ID3D12GraphicsCommandList9_IASetVertexBuffers(This,StartSlot,NumViews,pViews) \ - ( (This)->lpVtbl -> IASetVertexBuffers(This,StartSlot,NumViews,pViews) ) - -#define ID3D12GraphicsCommandList9_SOSetTargets(This,StartSlot,NumViews,pViews) \ - ( (This)->lpVtbl -> SOSetTargets(This,StartSlot,NumViews,pViews) ) - -#define ID3D12GraphicsCommandList9_OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor) \ - ( (This)->lpVtbl -> OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor) ) - -#define ID3D12GraphicsCommandList9_ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList9_ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList9_ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList9_ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList9_DiscardResource(This,pResource,pRegion) \ - ( (This)->lpVtbl -> DiscardResource(This,pResource,pRegion) ) - -#define ID3D12GraphicsCommandList9_BeginQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> BeginQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12GraphicsCommandList9_EndQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> EndQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12GraphicsCommandList9_ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) \ - ( (This)->lpVtbl -> ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) ) - -#define ID3D12GraphicsCommandList9_SetPredication(This,pBuffer,AlignedBufferOffset,Operation) \ - ( (This)->lpVtbl -> SetPredication(This,pBuffer,AlignedBufferOffset,Operation) ) - -#define ID3D12GraphicsCommandList9_SetMarker(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> SetMarker(This,Metadata,pData,Size) ) - -#define ID3D12GraphicsCommandList9_BeginEvent(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> BeginEvent(This,Metadata,pData,Size) ) - -#define ID3D12GraphicsCommandList9_EndEvent(This) \ - ( (This)->lpVtbl -> EndEvent(This) ) - -#define ID3D12GraphicsCommandList9_ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset) \ - ( (This)->lpVtbl -> ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset) ) - -#define ID3D12GraphicsCommandList9_AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) \ - ( (This)->lpVtbl -> AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) - -#define ID3D12GraphicsCommandList9_AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) \ - ( (This)->lpVtbl -> AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) - -#define ID3D12GraphicsCommandList9_OMSetDepthBounds(This,Min,Max) \ - ( (This)->lpVtbl -> OMSetDepthBounds(This,Min,Max) ) - -#define ID3D12GraphicsCommandList9_SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions) \ - ( (This)->lpVtbl -> SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions) ) - -#define ID3D12GraphicsCommandList9_ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode) \ - ( (This)->lpVtbl -> ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode) ) - -#define ID3D12GraphicsCommandList9_SetViewInstanceMask(This,Mask) \ - ( (This)->lpVtbl -> SetViewInstanceMask(This,Mask) ) - -#define ID3D12GraphicsCommandList9_WriteBufferImmediate(This,Count,pParams,pModes) \ - ( (This)->lpVtbl -> WriteBufferImmediate(This,Count,pParams,pModes) ) - -#define ID3D12GraphicsCommandList9_SetProtectedResourceSession(This,pProtectedResourceSession) \ - ( (This)->lpVtbl -> SetProtectedResourceSession(This,pProtectedResourceSession) ) - -#define ID3D12GraphicsCommandList9_BeginRenderPass(This,NumRenderTargets,pRenderTargets,pDepthStencil,Flags) \ - ( (This)->lpVtbl -> BeginRenderPass(This,NumRenderTargets,pRenderTargets,pDepthStencil,Flags) ) - -#define ID3D12GraphicsCommandList9_EndRenderPass(This) \ - ( (This)->lpVtbl -> EndRenderPass(This) ) - -#define ID3D12GraphicsCommandList9_InitializeMetaCommand(This,pMetaCommand,pInitializationParametersData,InitializationParametersDataSizeInBytes) \ - ( (This)->lpVtbl -> InitializeMetaCommand(This,pMetaCommand,pInitializationParametersData,InitializationParametersDataSizeInBytes) ) - -#define ID3D12GraphicsCommandList9_ExecuteMetaCommand(This,pMetaCommand,pExecutionParametersData,ExecutionParametersDataSizeInBytes) \ - ( (This)->lpVtbl -> ExecuteMetaCommand(This,pMetaCommand,pExecutionParametersData,ExecutionParametersDataSizeInBytes) ) - -#define ID3D12GraphicsCommandList9_BuildRaytracingAccelerationStructure(This,pDesc,NumPostbuildInfoDescs,pPostbuildInfoDescs) \ - ( (This)->lpVtbl -> BuildRaytracingAccelerationStructure(This,pDesc,NumPostbuildInfoDescs,pPostbuildInfoDescs) ) - -#define ID3D12GraphicsCommandList9_EmitRaytracingAccelerationStructurePostbuildInfo(This,pDesc,NumSourceAccelerationStructures,pSourceAccelerationStructureData) \ - ( (This)->lpVtbl -> EmitRaytracingAccelerationStructurePostbuildInfo(This,pDesc,NumSourceAccelerationStructures,pSourceAccelerationStructureData) ) - -#define ID3D12GraphicsCommandList9_CopyRaytracingAccelerationStructure(This,DestAccelerationStructureData,SourceAccelerationStructureData,Mode) \ - ( (This)->lpVtbl -> CopyRaytracingAccelerationStructure(This,DestAccelerationStructureData,SourceAccelerationStructureData,Mode) ) - -#define ID3D12GraphicsCommandList9_SetPipelineState1(This,pStateObject) \ - ( (This)->lpVtbl -> SetPipelineState1(This,pStateObject) ) - -#define ID3D12GraphicsCommandList9_DispatchRays(This,pDesc) \ - ( (This)->lpVtbl -> DispatchRays(This,pDesc) ) - -#define ID3D12GraphicsCommandList9_RSSetShadingRate(This,baseShadingRate,combiners) \ - ( (This)->lpVtbl -> RSSetShadingRate(This,baseShadingRate,combiners) ) - -#define ID3D12GraphicsCommandList9_RSSetShadingRateImage(This,shadingRateImage) \ - ( (This)->lpVtbl -> RSSetShadingRateImage(This,shadingRateImage) ) - -#define ID3D12GraphicsCommandList9_DispatchMesh(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) \ - ( (This)->lpVtbl -> DispatchMesh(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) ) - -#define ID3D12GraphicsCommandList9_Barrier(This,NumBarrierGroups,pBarrierGroups) \ - ( (This)->lpVtbl -> Barrier(This,NumBarrierGroups,pBarrierGroups) ) - -#define ID3D12GraphicsCommandList9_OMSetFrontAndBackStencilRef(This,FrontStencilRef,BackStencilRef) \ - ( (This)->lpVtbl -> OMSetFrontAndBackStencilRef(This,FrontStencilRef,BackStencilRef) ) - -#define ID3D12GraphicsCommandList9_RSSetDepthBias(This,DepthBias,DepthBiasClamp,SlopeScaledDepthBias) \ - ( (This)->lpVtbl -> RSSetDepthBias(This,DepthBias,DepthBiasClamp,SlopeScaledDepthBias) ) - -#define ID3D12GraphicsCommandList9_IASetIndexBufferStripCutValue(This,IBStripCutValue) \ - ( (This)->lpVtbl -> IASetIndexBufferStripCutValue(This,IBStripCutValue) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12GraphicsCommandList9_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12GraphicsCommandList10_INTERFACE_DEFINED__ -#define __ID3D12GraphicsCommandList10_INTERFACE_DEFINED__ - -/* interface ID3D12GraphicsCommandList10 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12GraphicsCommandList10; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("7013c015-d161-4b63-a08c-238552dd8acc") - ID3D12GraphicsCommandList10 : public ID3D12GraphicsCommandList9 - { - public: - virtual void STDMETHODCALLTYPE SetProgram( - _In_ const D3D12_SET_PROGRAM_DESC *pDesc) = 0; - - virtual void STDMETHODCALLTYPE DispatchGraph( - _In_ const D3D12_DISPATCH_GRAPH_DESC *pDesc) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12GraphicsCommandList10Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12GraphicsCommandList10 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12GraphicsCommandList10 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12GraphicsCommandList10 * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12GraphicsCommandList10 * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12GraphicsCommandList10 * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12GraphicsCommandList10 * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12GraphicsCommandList10 * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12GraphicsCommandList10 * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12CommandList, GetType) - D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )( - ID3D12GraphicsCommandList10 * This); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Close) - HRESULT ( STDMETHODCALLTYPE *Close )( - ID3D12GraphicsCommandList10 * This); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Reset) - HRESULT ( STDMETHODCALLTYPE *Reset )( - ID3D12GraphicsCommandList10 * This, - _In_ ID3D12CommandAllocator *pAllocator, - _In_opt_ ID3D12PipelineState *pInitialState); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearState) - void ( STDMETHODCALLTYPE *ClearState )( - ID3D12GraphicsCommandList10 * This, - _In_opt_ ID3D12PipelineState *pPipelineState); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawInstanced) - void ( STDMETHODCALLTYPE *DrawInstanced )( - ID3D12GraphicsCommandList10 * This, - _In_ UINT VertexCountPerInstance, - _In_ UINT InstanceCount, - _In_ UINT StartVertexLocation, - _In_ UINT StartInstanceLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawIndexedInstanced) - void ( STDMETHODCALLTYPE *DrawIndexedInstanced )( - ID3D12GraphicsCommandList10 * This, - _In_ UINT IndexCountPerInstance, - _In_ UINT InstanceCount, - _In_ UINT StartIndexLocation, - _In_ INT BaseVertexLocation, - _In_ UINT StartInstanceLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Dispatch) - void ( STDMETHODCALLTYPE *Dispatch )( - ID3D12GraphicsCommandList10 * This, - _In_ UINT ThreadGroupCountX, - _In_ UINT ThreadGroupCountY, - _In_ UINT ThreadGroupCountZ); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyBufferRegion) - void ( STDMETHODCALLTYPE *CopyBufferRegion )( - ID3D12GraphicsCommandList10 * This, - _In_ ID3D12Resource *pDstBuffer, - UINT64 DstOffset, - _In_ ID3D12Resource *pSrcBuffer, - UINT64 SrcOffset, - UINT64 NumBytes); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTextureRegion) - void ( STDMETHODCALLTYPE *CopyTextureRegion )( - ID3D12GraphicsCommandList10 * This, - _In_ const D3D12_TEXTURE_COPY_LOCATION *pDst, - UINT DstX, - UINT DstY, - UINT DstZ, - _In_ const D3D12_TEXTURE_COPY_LOCATION *pSrc, - _In_opt_ const D3D12_BOX *pSrcBox); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyResource) - void ( STDMETHODCALLTYPE *CopyResource )( - ID3D12GraphicsCommandList10 * This, - _In_ ID3D12Resource *pDstResource, - _In_ ID3D12Resource *pSrcResource); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTiles) - void ( STDMETHODCALLTYPE *CopyTiles )( - ID3D12GraphicsCommandList10 * This, - _In_ ID3D12Resource *pTiledResource, - _In_ const D3D12_TILED_RESOURCE_COORDINATE *pTileRegionStartCoordinate, - _In_ const D3D12_TILE_REGION_SIZE *pTileRegionSize, - _In_ ID3D12Resource *pBuffer, - UINT64 BufferStartOffsetInBytes, - D3D12_TILE_COPY_FLAGS Flags); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveSubresource) - void ( STDMETHODCALLTYPE *ResolveSubresource )( - ID3D12GraphicsCommandList10 * This, - _In_ ID3D12Resource *pDstResource, - _In_ UINT DstSubresource, - _In_ ID3D12Resource *pSrcResource, - _In_ UINT SrcSubresource, - _In_ DXGI_FORMAT Format); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetPrimitiveTopology) - void ( STDMETHODCALLTYPE *IASetPrimitiveTopology )( - ID3D12GraphicsCommandList10 * This, - _In_ D3D12_PRIMITIVE_TOPOLOGY PrimitiveTopology); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetViewports) - void ( STDMETHODCALLTYPE *RSSetViewports )( - ID3D12GraphicsCommandList10 * This, - _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE) UINT NumViewports, - _In_reads_( NumViewports) const D3D12_VIEWPORT *pViewports); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetScissorRects) - void ( STDMETHODCALLTYPE *RSSetScissorRects )( - ID3D12GraphicsCommandList10 * This, - _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE) UINT NumRects, - _In_reads_( NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetBlendFactor) - void ( STDMETHODCALLTYPE *OMSetBlendFactor )( - ID3D12GraphicsCommandList10 * This, - _In_reads_opt_(4) const FLOAT BlendFactor[ 4 ]); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetStencilRef) - void ( STDMETHODCALLTYPE *OMSetStencilRef )( - ID3D12GraphicsCommandList10 * This, - _In_ UINT StencilRef); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPipelineState) - void ( STDMETHODCALLTYPE *SetPipelineState )( - ID3D12GraphicsCommandList10 * This, - _In_ ID3D12PipelineState *pPipelineState); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResourceBarrier) - void ( STDMETHODCALLTYPE *ResourceBarrier )( - ID3D12GraphicsCommandList10 * This, - _In_ UINT NumBarriers, - _In_reads_(NumBarriers) const D3D12_RESOURCE_BARRIER *pBarriers); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteBundle) - void ( STDMETHODCALLTYPE *ExecuteBundle )( - ID3D12GraphicsCommandList10 * This, - _In_ ID3D12GraphicsCommandList *pCommandList); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetDescriptorHeaps) - void ( STDMETHODCALLTYPE *SetDescriptorHeaps )( - ID3D12GraphicsCommandList10 * This, - _In_ UINT NumDescriptorHeaps, - _In_reads_(NumDescriptorHeaps) ID3D12DescriptorHeap *const *ppDescriptorHeaps); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootSignature) - void ( STDMETHODCALLTYPE *SetComputeRootSignature )( - ID3D12GraphicsCommandList10 * This, - _In_opt_ ID3D12RootSignature *pRootSignature); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootSignature) - void ( STDMETHODCALLTYPE *SetGraphicsRootSignature )( - ID3D12GraphicsCommandList10 * This, - _In_opt_ ID3D12RootSignature *pRootSignature); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootDescriptorTable) - void ( STDMETHODCALLTYPE *SetComputeRootDescriptorTable )( - ID3D12GraphicsCommandList10 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootDescriptorTable) - void ( STDMETHODCALLTYPE *SetGraphicsRootDescriptorTable )( - ID3D12GraphicsCommandList10 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstant) - void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstant )( - ID3D12GraphicsCommandList10 * This, - _In_ UINT RootParameterIndex, - _In_ UINT SrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstant) - void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstant )( - ID3D12GraphicsCommandList10 * This, - _In_ UINT RootParameterIndex, - _In_ UINT SrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstants) - void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstants )( - ID3D12GraphicsCommandList10 * This, - _In_ UINT RootParameterIndex, - _In_ UINT Num32BitValuesToSet, - _In_reads_(Num32BitValuesToSet*sizeof(UINT)) const void *pSrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstants) - void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstants )( - ID3D12GraphicsCommandList10 * This, - _In_ UINT RootParameterIndex, - _In_ UINT Num32BitValuesToSet, - _In_reads_(Num32BitValuesToSet*sizeof(UINT)) const void *pSrcData, - _In_ UINT DestOffsetIn32BitValues); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootConstantBufferView) - void ( STDMETHODCALLTYPE *SetComputeRootConstantBufferView )( - ID3D12GraphicsCommandList10 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootConstantBufferView) - void ( STDMETHODCALLTYPE *SetGraphicsRootConstantBufferView )( - ID3D12GraphicsCommandList10 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootShaderResourceView) - void ( STDMETHODCALLTYPE *SetComputeRootShaderResourceView )( - ID3D12GraphicsCommandList10 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootShaderResourceView) - void ( STDMETHODCALLTYPE *SetGraphicsRootShaderResourceView )( - ID3D12GraphicsCommandList10 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootUnorderedAccessView) - void ( STDMETHODCALLTYPE *SetComputeRootUnorderedAccessView )( - ID3D12GraphicsCommandList10 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootUnorderedAccessView) - void ( STDMETHODCALLTYPE *SetGraphicsRootUnorderedAccessView )( - ID3D12GraphicsCommandList10 * This, - _In_ UINT RootParameterIndex, - _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetIndexBuffer) - void ( STDMETHODCALLTYPE *IASetIndexBuffer )( - ID3D12GraphicsCommandList10 * This, - _In_opt_ const D3D12_INDEX_BUFFER_VIEW *pView); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetVertexBuffers) - void ( STDMETHODCALLTYPE *IASetVertexBuffers )( - ID3D12GraphicsCommandList10 * This, - _In_ UINT StartSlot, - _In_ UINT NumViews, - _In_reads_opt_(NumViews) const D3D12_VERTEX_BUFFER_VIEW *pViews); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SOSetTargets) - void ( STDMETHODCALLTYPE *SOSetTargets )( - ID3D12GraphicsCommandList10 * This, - _In_ UINT StartSlot, - _In_ UINT NumViews, - _In_reads_opt_(NumViews) const D3D12_STREAM_OUTPUT_BUFFER_VIEW *pViews); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetRenderTargets) - void ( STDMETHODCALLTYPE *OMSetRenderTargets )( - ID3D12GraphicsCommandList10 * This, - _In_ UINT NumRenderTargetDescriptors, - _In_opt_ const D3D12_CPU_DESCRIPTOR_HANDLE *pRenderTargetDescriptors, - _In_ BOOL RTsSingleHandleToDescriptorRange, - _In_opt_ const D3D12_CPU_DESCRIPTOR_HANDLE *pDepthStencilDescriptor); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearDepthStencilView) - void ( STDMETHODCALLTYPE *ClearDepthStencilView )( - ID3D12GraphicsCommandList10 * This, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE DepthStencilView, - _In_ D3D12_CLEAR_FLAGS ClearFlags, - _In_ FLOAT Depth, - _In_ UINT8 Stencil, - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearRenderTargetView) - void ( STDMETHODCALLTYPE *ClearRenderTargetView )( - ID3D12GraphicsCommandList10 * This, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE RenderTargetView, - _In_ const FLOAT ColorRGBA[ 4 ], - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewUint) - void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewUint )( - ID3D12GraphicsCommandList10 * This, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle, - _In_ ID3D12Resource *pResource, - _In_ const UINT Values[ 4 ], - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewFloat) - void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewFloat )( - ID3D12GraphicsCommandList10 * This, - _In_ D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap, - _In_ D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle, - _In_ ID3D12Resource *pResource, - _In_ const FLOAT Values[ 4 ], - _In_ UINT NumRects, - _In_reads_(NumRects) const D3D12_RECT *pRects); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DiscardResource) - void ( STDMETHODCALLTYPE *DiscardResource )( - ID3D12GraphicsCommandList10 * This, - _In_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DISCARD_REGION *pRegion); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginQuery) - void ( STDMETHODCALLTYPE *BeginQuery )( - ID3D12GraphicsCommandList10 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndQuery) - void ( STDMETHODCALLTYPE *EndQuery )( - ID3D12GraphicsCommandList10 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveQueryData) - void ( STDMETHODCALLTYPE *ResolveQueryData )( - ID3D12GraphicsCommandList10 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT StartIndex, - _In_ UINT NumQueries, - _In_ ID3D12Resource *pDestinationBuffer, - _In_ UINT64 AlignedDestinationBufferOffset); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPredication) - void ( STDMETHODCALLTYPE *SetPredication )( - ID3D12GraphicsCommandList10 * This, - _In_opt_ ID3D12Resource *pBuffer, - _In_ UINT64 AlignedBufferOffset, - _In_ D3D12_PREDICATION_OP Operation); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetMarker) - void ( STDMETHODCALLTYPE *SetMarker )( - ID3D12GraphicsCommandList10 * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginEvent) - void ( STDMETHODCALLTYPE *BeginEvent )( - ID3D12GraphicsCommandList10 * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndEvent) - void ( STDMETHODCALLTYPE *EndEvent )( - ID3D12GraphicsCommandList10 * This); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteIndirect) - void ( STDMETHODCALLTYPE *ExecuteIndirect )( - ID3D12GraphicsCommandList10 * This, - _In_ ID3D12CommandSignature *pCommandSignature, - _In_ UINT MaxCommandCount, - _In_ ID3D12Resource *pArgumentBuffer, - _In_ UINT64 ArgumentBufferOffset, - _In_opt_ ID3D12Resource *pCountBuffer, - _In_ UINT64 CountBufferOffset); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, AtomicCopyBufferUINT) - void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT )( - ID3D12GraphicsCommandList10 * This, - _In_ ID3D12Resource *pDstBuffer, - UINT64 DstOffset, - _In_ ID3D12Resource *pSrcBuffer, - UINT64 SrcOffset, - UINT Dependencies, - _In_reads_(Dependencies) ID3D12Resource *const *ppDependentResources, - _In_reads_(Dependencies) const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, AtomicCopyBufferUINT64) - void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT64 )( - ID3D12GraphicsCommandList10 * This, - _In_ ID3D12Resource *pDstBuffer, - UINT64 DstOffset, - _In_ ID3D12Resource *pSrcBuffer, - UINT64 SrcOffset, - UINT Dependencies, - _In_reads_(Dependencies) ID3D12Resource *const *ppDependentResources, - _In_reads_(Dependencies) const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, OMSetDepthBounds) - void ( STDMETHODCALLTYPE *OMSetDepthBounds )( - ID3D12GraphicsCommandList10 * This, - _In_ FLOAT Min, - _In_ FLOAT Max); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, SetSamplePositions) - void ( STDMETHODCALLTYPE *SetSamplePositions )( - ID3D12GraphicsCommandList10 * This, - _In_ UINT NumSamplesPerPixel, - _In_ UINT NumPixels, - _In_reads_(NumSamplesPerPixel*NumPixels) D3D12_SAMPLE_POSITION *pSamplePositions); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, ResolveSubresourceRegion) - void ( STDMETHODCALLTYPE *ResolveSubresourceRegion )( - ID3D12GraphicsCommandList10 * This, - _In_ ID3D12Resource *pDstResource, - _In_ UINT DstSubresource, - _In_ UINT DstX, - _In_ UINT DstY, - _In_ ID3D12Resource *pSrcResource, - _In_ UINT SrcSubresource, - _In_opt_ D3D12_RECT *pSrcRect, - _In_ DXGI_FORMAT Format, - _In_ D3D12_RESOLVE_MODE ResolveMode); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, SetViewInstanceMask) - void ( STDMETHODCALLTYPE *SetViewInstanceMask )( - ID3D12GraphicsCommandList10 * This, - _In_ UINT Mask); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList2, WriteBufferImmediate) - void ( STDMETHODCALLTYPE *WriteBufferImmediate )( - ID3D12GraphicsCommandList10 * This, - UINT Count, - _In_reads_(Count) const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams, - _In_reads_opt_(Count) const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList3, SetProtectedResourceSession) - void ( STDMETHODCALLTYPE *SetProtectedResourceSession )( - ID3D12GraphicsCommandList10 * This, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, BeginRenderPass) - void ( STDMETHODCALLTYPE *BeginRenderPass )( - ID3D12GraphicsCommandList10 * This, - _In_ UINT NumRenderTargets, - _In_reads_opt_(NumRenderTargets) const D3D12_RENDER_PASS_RENDER_TARGET_DESC *pRenderTargets, - _In_opt_ const D3D12_RENDER_PASS_DEPTH_STENCIL_DESC *pDepthStencil, - D3D12_RENDER_PASS_FLAGS Flags); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, EndRenderPass) - void ( STDMETHODCALLTYPE *EndRenderPass )( - ID3D12GraphicsCommandList10 * This); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, InitializeMetaCommand) - void ( STDMETHODCALLTYPE *InitializeMetaCommand )( - ID3D12GraphicsCommandList10 * This, - _In_ ID3D12MetaCommand *pMetaCommand, - _In_reads_bytes_opt_(InitializationParametersDataSizeInBytes) const void *pInitializationParametersData, - _In_ SIZE_T InitializationParametersDataSizeInBytes); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, ExecuteMetaCommand) - void ( STDMETHODCALLTYPE *ExecuteMetaCommand )( - ID3D12GraphicsCommandList10 * This, - _In_ ID3D12MetaCommand *pMetaCommand, - _In_reads_bytes_opt_(ExecutionParametersDataSizeInBytes) const void *pExecutionParametersData, - _In_ SIZE_T ExecutionParametersDataSizeInBytes); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, BuildRaytracingAccelerationStructure) - void ( STDMETHODCALLTYPE *BuildRaytracingAccelerationStructure )( - ID3D12GraphicsCommandList10 * This, - _In_ const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC *pDesc, - _In_ UINT NumPostbuildInfoDescs, - _In_reads_opt_(NumPostbuildInfoDescs) const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC *pPostbuildInfoDescs); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, EmitRaytracingAccelerationStructurePostbuildInfo) - void ( STDMETHODCALLTYPE *EmitRaytracingAccelerationStructurePostbuildInfo )( - ID3D12GraphicsCommandList10 * This, - _In_ const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC *pDesc, - _In_ UINT NumSourceAccelerationStructures, - _In_reads_( NumSourceAccelerationStructures ) const D3D12_GPU_VIRTUAL_ADDRESS *pSourceAccelerationStructureData); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, CopyRaytracingAccelerationStructure) - void ( STDMETHODCALLTYPE *CopyRaytracingAccelerationStructure )( - ID3D12GraphicsCommandList10 * This, - _In_ D3D12_GPU_VIRTUAL_ADDRESS DestAccelerationStructureData, - _In_ D3D12_GPU_VIRTUAL_ADDRESS SourceAccelerationStructureData, - _In_ D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE Mode); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, SetPipelineState1) - void ( STDMETHODCALLTYPE *SetPipelineState1 )( - ID3D12GraphicsCommandList10 * This, - _In_ ID3D12StateObject *pStateObject); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, DispatchRays) - void ( STDMETHODCALLTYPE *DispatchRays )( - ID3D12GraphicsCommandList10 * This, - _In_ const D3D12_DISPATCH_RAYS_DESC *pDesc); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList5, RSSetShadingRate) - void ( STDMETHODCALLTYPE *RSSetShadingRate )( - ID3D12GraphicsCommandList10 * This, - _In_ D3D12_SHADING_RATE baseShadingRate, - _In_reads_opt_(D3D12_RS_SET_SHADING_RATE_COMBINER_COUNT) const D3D12_SHADING_RATE_COMBINER *combiners); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList5, RSSetShadingRateImage) - void ( STDMETHODCALLTYPE *RSSetShadingRateImage )( - ID3D12GraphicsCommandList10 * This, - _In_opt_ ID3D12Resource *shadingRateImage); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList6, DispatchMesh) - void ( STDMETHODCALLTYPE *DispatchMesh )( - ID3D12GraphicsCommandList10 * This, - _In_ UINT ThreadGroupCountX, - _In_ UINT ThreadGroupCountY, - _In_ UINT ThreadGroupCountZ); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList7, Barrier) - void ( STDMETHODCALLTYPE *Barrier )( - ID3D12GraphicsCommandList10 * This, - UINT32 NumBarrierGroups, - _In_reads_(NumBarrierGroups) const D3D12_BARRIER_GROUP *pBarrierGroups); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList8, OMSetFrontAndBackStencilRef) - void ( STDMETHODCALLTYPE *OMSetFrontAndBackStencilRef )( - ID3D12GraphicsCommandList10 * This, - _In_ UINT FrontStencilRef, - _In_ UINT BackStencilRef); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList9, RSSetDepthBias) - void ( STDMETHODCALLTYPE *RSSetDepthBias )( - ID3D12GraphicsCommandList10 * This, - _In_ FLOAT DepthBias, - _In_ FLOAT DepthBiasClamp, - _In_ FLOAT SlopeScaledDepthBias); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList9, IASetIndexBufferStripCutValue) - void ( STDMETHODCALLTYPE *IASetIndexBufferStripCutValue )( - ID3D12GraphicsCommandList10 * This, - _In_ D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList10, SetProgram) - void ( STDMETHODCALLTYPE *SetProgram )( - ID3D12GraphicsCommandList10 * This, - _In_ const D3D12_SET_PROGRAM_DESC *pDesc); - - DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList10, DispatchGraph) - void ( STDMETHODCALLTYPE *DispatchGraph )( - ID3D12GraphicsCommandList10 * This, - _In_ const D3D12_DISPATCH_GRAPH_DESC *pDesc); - - END_INTERFACE - } ID3D12GraphicsCommandList10Vtbl; - - interface ID3D12GraphicsCommandList10 - { - CONST_VTBL struct ID3D12GraphicsCommandList10Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12GraphicsCommandList10_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12GraphicsCommandList10_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12GraphicsCommandList10_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12GraphicsCommandList10_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12GraphicsCommandList10_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12GraphicsCommandList10_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12GraphicsCommandList10_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12GraphicsCommandList10_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12GraphicsCommandList10_GetType(This) \ - ( (This)->lpVtbl -> GetType(This) ) - -#define ID3D12GraphicsCommandList10_Close(This) \ - ( (This)->lpVtbl -> Close(This) ) - -#define ID3D12GraphicsCommandList10_Reset(This,pAllocator,pInitialState) \ - ( (This)->lpVtbl -> Reset(This,pAllocator,pInitialState) ) - -#define ID3D12GraphicsCommandList10_ClearState(This,pPipelineState) \ - ( (This)->lpVtbl -> ClearState(This,pPipelineState) ) - -#define ID3D12GraphicsCommandList10_DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) \ - ( (This)->lpVtbl -> DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) ) - -#define ID3D12GraphicsCommandList10_DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) \ - ( (This)->lpVtbl -> DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) ) - -#define ID3D12GraphicsCommandList10_Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) \ - ( (This)->lpVtbl -> Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) ) - -#define ID3D12GraphicsCommandList10_CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes) \ - ( (This)->lpVtbl -> CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes) ) - -#define ID3D12GraphicsCommandList10_CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox) \ - ( (This)->lpVtbl -> CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox) ) - -#define ID3D12GraphicsCommandList10_CopyResource(This,pDstResource,pSrcResource) \ - ( (This)->lpVtbl -> CopyResource(This,pDstResource,pSrcResource) ) - -#define ID3D12GraphicsCommandList10_CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags) \ - ( (This)->lpVtbl -> CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags) ) - -#define ID3D12GraphicsCommandList10_ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) \ - ( (This)->lpVtbl -> ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) ) - -#define ID3D12GraphicsCommandList10_IASetPrimitiveTopology(This,PrimitiveTopology) \ - ( (This)->lpVtbl -> IASetPrimitiveTopology(This,PrimitiveTopology) ) - -#define ID3D12GraphicsCommandList10_RSSetViewports(This,NumViewports,pViewports) \ - ( (This)->lpVtbl -> RSSetViewports(This,NumViewports,pViewports) ) - -#define ID3D12GraphicsCommandList10_RSSetScissorRects(This,NumRects,pRects) \ - ( (This)->lpVtbl -> RSSetScissorRects(This,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList10_OMSetBlendFactor(This,BlendFactor) \ - ( (This)->lpVtbl -> OMSetBlendFactor(This,BlendFactor) ) - -#define ID3D12GraphicsCommandList10_OMSetStencilRef(This,StencilRef) \ - ( (This)->lpVtbl -> OMSetStencilRef(This,StencilRef) ) - -#define ID3D12GraphicsCommandList10_SetPipelineState(This,pPipelineState) \ - ( (This)->lpVtbl -> SetPipelineState(This,pPipelineState) ) - -#define ID3D12GraphicsCommandList10_ResourceBarrier(This,NumBarriers,pBarriers) \ - ( (This)->lpVtbl -> ResourceBarrier(This,NumBarriers,pBarriers) ) - -#define ID3D12GraphicsCommandList10_ExecuteBundle(This,pCommandList) \ - ( (This)->lpVtbl -> ExecuteBundle(This,pCommandList) ) - -#define ID3D12GraphicsCommandList10_SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps) \ - ( (This)->lpVtbl -> SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps) ) - -#define ID3D12GraphicsCommandList10_SetComputeRootSignature(This,pRootSignature) \ - ( (This)->lpVtbl -> SetComputeRootSignature(This,pRootSignature) ) - -#define ID3D12GraphicsCommandList10_SetGraphicsRootSignature(This,pRootSignature) \ - ( (This)->lpVtbl -> SetGraphicsRootSignature(This,pRootSignature) ) - -#define ID3D12GraphicsCommandList10_SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) \ - ( (This)->lpVtbl -> SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) - -#define ID3D12GraphicsCommandList10_SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) \ - ( (This)->lpVtbl -> SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) - -#define ID3D12GraphicsCommandList10_SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList10_SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList10_SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList10_SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) \ - ( (This)->lpVtbl -> SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) - -#define ID3D12GraphicsCommandList10_SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList10_SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList10_SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList10_SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList10_SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList10_SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) \ - ( (This)->lpVtbl -> SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) - -#define ID3D12GraphicsCommandList10_IASetIndexBuffer(This,pView) \ - ( (This)->lpVtbl -> IASetIndexBuffer(This,pView) ) - -#define ID3D12GraphicsCommandList10_IASetVertexBuffers(This,StartSlot,NumViews,pViews) \ - ( (This)->lpVtbl -> IASetVertexBuffers(This,StartSlot,NumViews,pViews) ) - -#define ID3D12GraphicsCommandList10_SOSetTargets(This,StartSlot,NumViews,pViews) \ - ( (This)->lpVtbl -> SOSetTargets(This,StartSlot,NumViews,pViews) ) - -#define ID3D12GraphicsCommandList10_OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor) \ - ( (This)->lpVtbl -> OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor) ) - -#define ID3D12GraphicsCommandList10_ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList10_ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList10_ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList10_ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) \ - ( (This)->lpVtbl -> ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) - -#define ID3D12GraphicsCommandList10_DiscardResource(This,pResource,pRegion) \ - ( (This)->lpVtbl -> DiscardResource(This,pResource,pRegion) ) - -#define ID3D12GraphicsCommandList10_BeginQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> BeginQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12GraphicsCommandList10_EndQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> EndQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12GraphicsCommandList10_ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) \ - ( (This)->lpVtbl -> ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) ) - -#define ID3D12GraphicsCommandList10_SetPredication(This,pBuffer,AlignedBufferOffset,Operation) \ - ( (This)->lpVtbl -> SetPredication(This,pBuffer,AlignedBufferOffset,Operation) ) - -#define ID3D12GraphicsCommandList10_SetMarker(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> SetMarker(This,Metadata,pData,Size) ) - -#define ID3D12GraphicsCommandList10_BeginEvent(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> BeginEvent(This,Metadata,pData,Size) ) - -#define ID3D12GraphicsCommandList10_EndEvent(This) \ - ( (This)->lpVtbl -> EndEvent(This) ) - -#define ID3D12GraphicsCommandList10_ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset) \ - ( (This)->lpVtbl -> ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset) ) - -#define ID3D12GraphicsCommandList10_AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) \ - ( (This)->lpVtbl -> AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) - -#define ID3D12GraphicsCommandList10_AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) \ - ( (This)->lpVtbl -> AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) - -#define ID3D12GraphicsCommandList10_OMSetDepthBounds(This,Min,Max) \ - ( (This)->lpVtbl -> OMSetDepthBounds(This,Min,Max) ) - -#define ID3D12GraphicsCommandList10_SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions) \ - ( (This)->lpVtbl -> SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions) ) - -#define ID3D12GraphicsCommandList10_ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode) \ - ( (This)->lpVtbl -> ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode) ) - -#define ID3D12GraphicsCommandList10_SetViewInstanceMask(This,Mask) \ - ( (This)->lpVtbl -> SetViewInstanceMask(This,Mask) ) - -#define ID3D12GraphicsCommandList10_WriteBufferImmediate(This,Count,pParams,pModes) \ - ( (This)->lpVtbl -> WriteBufferImmediate(This,Count,pParams,pModes) ) - -#define ID3D12GraphicsCommandList10_SetProtectedResourceSession(This,pProtectedResourceSession) \ - ( (This)->lpVtbl -> SetProtectedResourceSession(This,pProtectedResourceSession) ) - -#define ID3D12GraphicsCommandList10_BeginRenderPass(This,NumRenderTargets,pRenderTargets,pDepthStencil,Flags) \ - ( (This)->lpVtbl -> BeginRenderPass(This,NumRenderTargets,pRenderTargets,pDepthStencil,Flags) ) - -#define ID3D12GraphicsCommandList10_EndRenderPass(This) \ - ( (This)->lpVtbl -> EndRenderPass(This) ) - -#define ID3D12GraphicsCommandList10_InitializeMetaCommand(This,pMetaCommand,pInitializationParametersData,InitializationParametersDataSizeInBytes) \ - ( (This)->lpVtbl -> InitializeMetaCommand(This,pMetaCommand,pInitializationParametersData,InitializationParametersDataSizeInBytes) ) - -#define ID3D12GraphicsCommandList10_ExecuteMetaCommand(This,pMetaCommand,pExecutionParametersData,ExecutionParametersDataSizeInBytes) \ - ( (This)->lpVtbl -> ExecuteMetaCommand(This,pMetaCommand,pExecutionParametersData,ExecutionParametersDataSizeInBytes) ) - -#define ID3D12GraphicsCommandList10_BuildRaytracingAccelerationStructure(This,pDesc,NumPostbuildInfoDescs,pPostbuildInfoDescs) \ - ( (This)->lpVtbl -> BuildRaytracingAccelerationStructure(This,pDesc,NumPostbuildInfoDescs,pPostbuildInfoDescs) ) - -#define ID3D12GraphicsCommandList10_EmitRaytracingAccelerationStructurePostbuildInfo(This,pDesc,NumSourceAccelerationStructures,pSourceAccelerationStructureData) \ - ( (This)->lpVtbl -> EmitRaytracingAccelerationStructurePostbuildInfo(This,pDesc,NumSourceAccelerationStructures,pSourceAccelerationStructureData) ) - -#define ID3D12GraphicsCommandList10_CopyRaytracingAccelerationStructure(This,DestAccelerationStructureData,SourceAccelerationStructureData,Mode) \ - ( (This)->lpVtbl -> CopyRaytracingAccelerationStructure(This,DestAccelerationStructureData,SourceAccelerationStructureData,Mode) ) - -#define ID3D12GraphicsCommandList10_SetPipelineState1(This,pStateObject) \ - ( (This)->lpVtbl -> SetPipelineState1(This,pStateObject) ) - -#define ID3D12GraphicsCommandList10_DispatchRays(This,pDesc) \ - ( (This)->lpVtbl -> DispatchRays(This,pDesc) ) - -#define ID3D12GraphicsCommandList10_RSSetShadingRate(This,baseShadingRate,combiners) \ - ( (This)->lpVtbl -> RSSetShadingRate(This,baseShadingRate,combiners) ) - -#define ID3D12GraphicsCommandList10_RSSetShadingRateImage(This,shadingRateImage) \ - ( (This)->lpVtbl -> RSSetShadingRateImage(This,shadingRateImage) ) - -#define ID3D12GraphicsCommandList10_DispatchMesh(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) \ - ( (This)->lpVtbl -> DispatchMesh(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) ) - -#define ID3D12GraphicsCommandList10_Barrier(This,NumBarrierGroups,pBarrierGroups) \ - ( (This)->lpVtbl -> Barrier(This,NumBarrierGroups,pBarrierGroups) ) - -#define ID3D12GraphicsCommandList10_OMSetFrontAndBackStencilRef(This,FrontStencilRef,BackStencilRef) \ - ( (This)->lpVtbl -> OMSetFrontAndBackStencilRef(This,FrontStencilRef,BackStencilRef) ) - -#define ID3D12GraphicsCommandList10_RSSetDepthBias(This,DepthBias,DepthBiasClamp,SlopeScaledDepthBias) \ - ( (This)->lpVtbl -> RSSetDepthBias(This,DepthBias,DepthBiasClamp,SlopeScaledDepthBias) ) - -#define ID3D12GraphicsCommandList10_IASetIndexBufferStripCutValue(This,IBStripCutValue) \ - ( (This)->lpVtbl -> IASetIndexBufferStripCutValue(This,IBStripCutValue) ) - -#define ID3D12GraphicsCommandList10_SetProgram(This,pDesc) \ - ( (This)->lpVtbl -> SetProgram(This,pDesc) ) - -#define ID3D12GraphicsCommandList10_DispatchGraph(This,pDesc) \ - ( (This)->lpVtbl -> DispatchGraph(This,pDesc) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12GraphicsCommandList10_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12DSRDeviceFactory_INTERFACE_DEFINED__ -#define __ID3D12DSRDeviceFactory_INTERFACE_DEFINED__ - -/* interface ID3D12DSRDeviceFactory */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12DSRDeviceFactory; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("f343d1a0-afe3-439f-b13d-cd87a43b70ca") - ID3D12DSRDeviceFactory : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE CreateDSRDevice( - ID3D12Device *pD3D12Device, - UINT NodeMask, - REFIID riid, - _COM_Outptr_ void **ppvDSRDevice) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12DSRDeviceFactoryVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12DSRDeviceFactory * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12DSRDeviceFactory * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12DSRDeviceFactory * This); - - DECLSPEC_XFGVIRT(ID3D12DSRDeviceFactory, CreateDSRDevice) - HRESULT ( STDMETHODCALLTYPE *CreateDSRDevice )( - ID3D12DSRDeviceFactory * This, - ID3D12Device *pD3D12Device, - UINT NodeMask, - REFIID riid, - _COM_Outptr_ void **ppvDSRDevice); - - END_INTERFACE - } ID3D12DSRDeviceFactoryVtbl; - - interface ID3D12DSRDeviceFactory - { - CONST_VTBL struct ID3D12DSRDeviceFactoryVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12DSRDeviceFactory_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12DSRDeviceFactory_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12DSRDeviceFactory_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12DSRDeviceFactory_CreateDSRDevice(This,pD3D12Device,NodeMask,riid,ppvDSRDevice) \ - ( (This)->lpVtbl -> CreateDSRDevice(This,pD3D12Device,NodeMask,riid,ppvDSRDevice) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12DSRDeviceFactory_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12GBVDiagnostics_INTERFACE_DEFINED__ -#define __ID3D12GBVDiagnostics_INTERFACE_DEFINED__ - -/* interface ID3D12GBVDiagnostics */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12GBVDiagnostics; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("597985ab-9b75-4dbb-be23-0761195bebee") - ID3D12GBVDiagnostics : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE GetGBVEntireSubresourceStatesData( - _In_ ID3D12Resource *pResource, - _Out_writes_bytes_(DataSize) int *pData, - UINT DataSize) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetGBVSubresourceState( - _In_ ID3D12Resource *pResource, - UINT Subresource, - _Out_ int *pData) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetGBVResourceUniformState( - _In_ ID3D12Resource *pResource, - _Out_ int *pData) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetGBVResourceInfo( - _In_ ID3D12Resource *pResource, - _In_opt_ D3D12_RESOURCE_DESC *pResourceDesc, - _In_opt_ UINT32 *pResourceHash, - _In_opt_ UINT32 *pSubresourceStatesByteOffset) = 0; - - virtual void STDMETHODCALLTYPE GBVReserved0( void) = 0; - - virtual void STDMETHODCALLTYPE GBVReserved1( void) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12GBVDiagnosticsVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12GBVDiagnostics * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12GBVDiagnostics * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12GBVDiagnostics * This); - - DECLSPEC_XFGVIRT(ID3D12GBVDiagnostics, GetGBVEntireSubresourceStatesData) - HRESULT ( STDMETHODCALLTYPE *GetGBVEntireSubresourceStatesData )( - ID3D12GBVDiagnostics * This, - _In_ ID3D12Resource *pResource, - _Out_writes_bytes_(DataSize) int *pData, - UINT DataSize); - - DECLSPEC_XFGVIRT(ID3D12GBVDiagnostics, GetGBVSubresourceState) - HRESULT ( STDMETHODCALLTYPE *GetGBVSubresourceState )( - ID3D12GBVDiagnostics * This, - _In_ ID3D12Resource *pResource, - UINT Subresource, - _Out_ int *pData); - - DECLSPEC_XFGVIRT(ID3D12GBVDiagnostics, GetGBVResourceUniformState) - HRESULT ( STDMETHODCALLTYPE *GetGBVResourceUniformState )( - ID3D12GBVDiagnostics * This, - _In_ ID3D12Resource *pResource, - _Out_ int *pData); - - DECLSPEC_XFGVIRT(ID3D12GBVDiagnostics, GetGBVResourceInfo) - HRESULT ( STDMETHODCALLTYPE *GetGBVResourceInfo )( - ID3D12GBVDiagnostics * This, - _In_ ID3D12Resource *pResource, - _In_opt_ D3D12_RESOURCE_DESC *pResourceDesc, - _In_opt_ UINT32 *pResourceHash, - _In_opt_ UINT32 *pSubresourceStatesByteOffset); - - DECLSPEC_XFGVIRT(ID3D12GBVDiagnostics, GBVReserved0) - void ( STDMETHODCALLTYPE *GBVReserved0 )( - ID3D12GBVDiagnostics * This); - - DECLSPEC_XFGVIRT(ID3D12GBVDiagnostics, GBVReserved1) - void ( STDMETHODCALLTYPE *GBVReserved1 )( - ID3D12GBVDiagnostics * This); - - END_INTERFACE - } ID3D12GBVDiagnosticsVtbl; - - interface ID3D12GBVDiagnostics - { - CONST_VTBL struct ID3D12GBVDiagnosticsVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12GBVDiagnostics_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12GBVDiagnostics_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12GBVDiagnostics_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12GBVDiagnostics_GetGBVEntireSubresourceStatesData(This,pResource,pData,DataSize) \ - ( (This)->lpVtbl -> GetGBVEntireSubresourceStatesData(This,pResource,pData,DataSize) ) - -#define ID3D12GBVDiagnostics_GetGBVSubresourceState(This,pResource,Subresource,pData) \ - ( (This)->lpVtbl -> GetGBVSubresourceState(This,pResource,Subresource,pData) ) - -#define ID3D12GBVDiagnostics_GetGBVResourceUniformState(This,pResource,pData) \ - ( (This)->lpVtbl -> GetGBVResourceUniformState(This,pResource,pData) ) - -#define ID3D12GBVDiagnostics_GetGBVResourceInfo(This,pResource,pResourceDesc,pResourceHash,pSubresourceStatesByteOffset) \ - ( (This)->lpVtbl -> GetGBVResourceInfo(This,pResource,pResourceDesc,pResourceHash,pSubresourceStatesByteOffset) ) - -#define ID3D12GBVDiagnostics_GBVReserved0(This) \ - ( (This)->lpVtbl -> GBVReserved0(This) ) - -#define ID3D12GBVDiagnostics_GBVReserved1(This) \ - ( (This)->lpVtbl -> GBVReserved1(This) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12GBVDiagnostics_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12_0000_0078 */ -/* [local] */ - -#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) */ -#pragma endregion -DEFINE_GUID(IID_ID3D12Object,0xc4fec28f,0x7966,0x4e95,0x9f,0x94,0xf4,0x31,0xcb,0x56,0xc3,0xb8); -DEFINE_GUID(IID_ID3D12DeviceChild,0x905db94b,0xa00c,0x4140,0x9d,0xf5,0x2b,0x64,0xca,0x9e,0xa3,0x57); -DEFINE_GUID(IID_ID3D12RootSignature,0xc54a6b66,0x72df,0x4ee8,0x8b,0xe5,0xa9,0x46,0xa1,0x42,0x92,0x14); -DEFINE_GUID(IID_ID3D12RootSignatureDeserializer,0x34AB647B,0x3CC8,0x46AC,0x84,0x1B,0xC0,0x96,0x56,0x45,0xC0,0x46); -DEFINE_GUID(IID_ID3D12VersionedRootSignatureDeserializer,0x7F91CE67,0x090C,0x4BB7,0xB7,0x8E,0xED,0x8F,0xF2,0xE3,0x1D,0xA0); -DEFINE_GUID(IID_ID3D12Pageable,0x63ee58fb,0x1268,0x4835,0x86,0xda,0xf0,0x08,0xce,0x62,0xf0,0xd6); -DEFINE_GUID(IID_ID3D12Heap,0x6b3b2502,0x6e51,0x45b3,0x90,0xee,0x98,0x84,0x26,0x5e,0x8d,0xf3); -DEFINE_GUID(IID_ID3D12Resource,0x696442be,0xa72e,0x4059,0xbc,0x79,0x5b,0x5c,0x98,0x04,0x0f,0xad); -DEFINE_GUID(IID_ID3D12CommandAllocator,0x6102dee4,0xaf59,0x4b09,0xb9,0x99,0xb4,0x4d,0x73,0xf0,0x9b,0x24); -DEFINE_GUID(IID_ID3D12Fence,0x0a753dcf,0xc4d8,0x4b91,0xad,0xf6,0xbe,0x5a,0x60,0xd9,0x5a,0x76); -DEFINE_GUID(IID_ID3D12Fence1,0x433685fe,0xe22b,0x4ca0,0xa8,0xdb,0xb5,0xb4,0xf4,0xdd,0x0e,0x4a); -DEFINE_GUID(IID_ID3D12PipelineState,0x765a30f3,0xf624,0x4c6f,0xa8,0x28,0xac,0xe9,0x48,0x62,0x24,0x45); -DEFINE_GUID(IID_ID3D12DescriptorHeap,0x8efb471d,0x616c,0x4f49,0x90,0xf7,0x12,0x7b,0xb7,0x63,0xfa,0x51); -DEFINE_GUID(IID_ID3D12QueryHeap,0x0d9658ae,0xed45,0x469e,0xa6,0x1d,0x97,0x0e,0xc5,0x83,0xca,0xb4); -DEFINE_GUID(IID_ID3D12CommandSignature,0xc36a797c,0xec80,0x4f0a,0x89,0x85,0xa7,0xb2,0x47,0x50,0x82,0xd1); -DEFINE_GUID(IID_ID3D12CommandList,0x7116d91c,0xe7e4,0x47ce,0xb8,0xc6,0xec,0x81,0x68,0xf4,0x37,0xe5); -DEFINE_GUID(IID_ID3D12GraphicsCommandList,0x5b160d0f,0xac1b,0x4185,0x8b,0xa8,0xb3,0xae,0x42,0xa5,0xa4,0x55); -DEFINE_GUID(IID_ID3D12GraphicsCommandList1,0x553103fb,0x1fe7,0x4557,0xbb,0x38,0x94,0x6d,0x7d,0x0e,0x7c,0xa7); -DEFINE_GUID(IID_ID3D12GraphicsCommandList2,0x38C3E585,0xFF17,0x412C,0x91,0x50,0x4F,0xC6,0xF9,0xD7,0x2A,0x28); -DEFINE_GUID(IID_ID3D12CommandQueue,0x0ec870a6,0x5d7e,0x4c22,0x8c,0xfc,0x5b,0xaa,0xe0,0x76,0x16,0xed); -DEFINE_GUID(IID_ID3D12Device,0x189819f1,0x1db6,0x4b57,0xbe,0x54,0x18,0x21,0x33,0x9b,0x85,0xf7); -DEFINE_GUID(IID_ID3D12PipelineLibrary,0xc64226a8,0x9201,0x46af,0xb4,0xcc,0x53,0xfb,0x9f,0xf7,0x41,0x4f); -DEFINE_GUID(IID_ID3D12PipelineLibrary1,0x80eabf42,0x2568,0x4e5e,0xbd,0x82,0xc3,0x7f,0x86,0x96,0x1d,0xc3); -DEFINE_GUID(IID_ID3D12Device1,0x77acce80,0x638e,0x4e65,0x88,0x95,0xc1,0xf2,0x33,0x86,0x86,0x3e); -DEFINE_GUID(IID_ID3D12Device2,0x30baa41e,0xb15b,0x475c,0xa0,0xbb,0x1a,0xf5,0xc5,0xb6,0x43,0x28); -DEFINE_GUID(IID_ID3D12Device3,0x81dadc15,0x2bad,0x4392,0x93,0xc5,0x10,0x13,0x45,0xc4,0xaa,0x98); -DEFINE_GUID(IID_ID3D12ProtectedSession,0xA1533D18,0x0AC1,0x4084,0x85,0xB9,0x89,0xA9,0x61,0x16,0x80,0x6B); -DEFINE_GUID(IID_ID3D12ProtectedResourceSession,0x6CD696F4,0xF289,0x40CC,0x80,0x91,0x5A,0x6C,0x0A,0x09,0x9C,0x3D); -DEFINE_GUID(IID_ID3D12Device4,0xe865df17,0xa9ee,0x46f9,0xa4,0x63,0x30,0x98,0x31,0x5a,0xa2,0xe5); -DEFINE_GUID(IID_ID3D12LifetimeOwner,0xe667af9f,0xcd56,0x4f46,0x83,0xce,0x03,0x2e,0x59,0x5d,0x70,0xa8); -DEFINE_GUID(IID_ID3D12SwapChainAssistant,0xf1df64b6,0x57fd,0x49cd,0x88,0x07,0xc0,0xeb,0x88,0xb4,0x5c,0x8f); -DEFINE_GUID(IID_ID3D12LifetimeTracker,0x3fd03d36,0x4eb1,0x424a,0xa5,0x82,0x49,0x4e,0xcb,0x8b,0xa8,0x13); -DEFINE_GUID(IID_ID3D12StateObject,0x47016943,0xfca8,0x4594,0x93,0xea,0xaf,0x25,0x8b,0x55,0x34,0x6d); -DEFINE_GUID(IID_ID3D12StateObjectProperties,0xde5fa827,0x9bf9,0x4f26,0x89,0xff,0xd7,0xf5,0x6f,0xde,0x38,0x60); -DEFINE_GUID(IID_ID3D12StateObjectProperties1,0x460caac7,0x1d24,0x446a,0xa1,0x84,0xca,0x67,0xdb,0x49,0x41,0x38); -DEFINE_GUID(IID_ID3D12WorkGraphProperties,0x065acf71,0xf863,0x4b89,0x82,0xf4,0x02,0xe4,0xd5,0x88,0x67,0x57); -DEFINE_GUID(IID_ID3D12Device5,0x8b4f173b,0x2fea,0x4b80,0x8f,0x58,0x43,0x07,0x19,0x1a,0xb9,0x5d); -DEFINE_GUID(IID_ID3D12DeviceRemovedExtendedDataSettings,0x82BC481C,0x6B9B,0x4030,0xAE,0xDB,0x7E,0xE3,0xD1,0xDF,0x1E,0x63); -DEFINE_GUID(IID_ID3D12DeviceRemovedExtendedDataSettings1,0xDBD5AE51,0x3317,0x4F0A,0xAD,0xF9,0x1D,0x7C,0xED,0xCA,0xAE,0x0B); -DEFINE_GUID(IID_ID3D12DeviceRemovedExtendedDataSettings2,0x61552388,0x01ab,0x4008,0xa4,0x36,0x83,0xdb,0x18,0x95,0x66,0xea); -DEFINE_GUID(IID_ID3D12DeviceRemovedExtendedData,0x98931D33,0x5AE8,0x4791,0xAA,0x3C,0x1A,0x73,0xA2,0x93,0x4E,0x71); -DEFINE_GUID(IID_ID3D12DeviceRemovedExtendedData1,0x9727A022,0xCF1D,0x4DDA,0x9E,0xBA,0xEF,0xFA,0x65,0x3F,0xC5,0x06); -DEFINE_GUID(IID_ID3D12DeviceRemovedExtendedData2,0x67FC5816,0xE4CA,0x4915,0xBF,0x18,0x42,0x54,0x12,0x72,0xDA,0x54); -DEFINE_GUID(IID_ID3D12Device6,0xc70b221b,0x40e4,0x4a17,0x89,0xaf,0x02,0x5a,0x07,0x27,0xa6,0xdc); -DEFINE_GUID(IID_ID3D12ProtectedResourceSession1,0xD6F12DD6,0x76FB,0x406E,0x89,0x61,0x42,0x96,0xEE,0xFC,0x04,0x09); -DEFINE_GUID(IID_ID3D12Device7,0x5c014b53,0x68a1,0x4b9b,0x8b,0xd1,0xdd,0x60,0x46,0xb9,0x35,0x8b); -DEFINE_GUID(IID_ID3D12Device8,0x9218E6BB,0xF944,0x4F7E,0xA7,0x5C,0xB1,0xB2,0xC7,0xB7,0x01,0xF3); -DEFINE_GUID(IID_ID3D12Resource1,0x9D5E227A,0x4430,0x4161,0x88,0xB3,0x3E,0xCA,0x6B,0xB1,0x6E,0x19); -DEFINE_GUID(IID_ID3D12Resource2,0xBE36EC3B,0xEA85,0x4AEB,0xA4,0x5A,0xE9,0xD7,0x64,0x04,0xA4,0x95); -DEFINE_GUID(IID_ID3D12Heap1,0x572F7389,0x2168,0x49E3,0x96,0x93,0xD6,0xDF,0x58,0x71,0xBF,0x6D); -DEFINE_GUID(IID_ID3D12GraphicsCommandList3,0x6FDA83A7,0xB84C,0x4E38,0x9A,0xC8,0xC7,0xBD,0x22,0x01,0x6B,0x3D); -DEFINE_GUID(IID_ID3D12MetaCommand,0xDBB84C27,0x36CE,0x4FC9,0xB8,0x01,0xF0,0x48,0xC4,0x6A,0xC5,0x70); -DEFINE_GUID(IID_ID3D12GraphicsCommandList4,0x8754318e,0xd3a9,0x4541,0x98,0xcf,0x64,0x5b,0x50,0xdc,0x48,0x74); -DEFINE_GUID(IID_ID3D12ShaderCacheSession,0x28e2495d,0x0f64,0x4ae4,0xa6,0xec,0x12,0x92,0x55,0xdc,0x49,0xa8); -DEFINE_GUID(IID_ID3D12Device9,0x4c80e962,0xf032,0x4f60,0xbc,0x9e,0xeb,0xc2,0xcf,0xa1,0xd8,0x3c); -DEFINE_GUID(IID_ID3D12Device10,0x517f8718,0xaa66,0x49f9,0xb0,0x2b,0xa7,0xab,0x89,0xc0,0x60,0x31); -DEFINE_GUID(IID_ID3D12Device11,0x5405c344,0xd457,0x444e,0xb4,0xdd,0x23,0x66,0xe4,0x5a,0xee,0x39); -DEFINE_GUID(IID_ID3D12Device12,0x5af5c532,0x4c91,0x4cd0,0xb5,0x41,0x15,0xa4,0x05,0x39,0x5f,0xc5); -DEFINE_GUID(IID_ID3D12Device13,0x14eecffc,0x4df8,0x40f7,0xa1,0x18,0x5c,0x81,0x6f,0x45,0x69,0x5e); -DEFINE_GUID(IID_ID3D12Device14,0x5f6e592d,0xd895,0x44c2,0x8e,0x4a,0x88,0xad,0x49,0x26,0xd3,0x23); -DEFINE_GUID(IID_ID3D12VirtualizationGuestDevice,0xbc66d368,0x7373,0x4943,0x87,0x57,0xfc,0x87,0xdc,0x79,0xe4,0x76); -DEFINE_GUID(IID_ID3D12Tools,0x7071e1f0,0xe84b,0x4b33,0x97,0x4f,0x12,0xfa,0x49,0xde,0x65,0xc5); -DEFINE_GUID(IID_ID3D12Tools1,0xe4fbc019,0xdd3c,0x43e1,0x8f,0x32,0x7f,0x64,0x95,0x75,0xf0,0xa0); -DEFINE_GUID(IID_ID3D12PageableTools,0x8f1359db,0xd8d1,0x42f9,0xb5,0xcf,0x79,0xf4,0xcb,0xad,0x0d,0x3d); -DEFINE_GUID(IID_ID3D12DeviceTools,0x2ea68e9c,0x19c3,0x4e47,0xa1,0x09,0x6c,0xda,0xdf,0xf0,0xac,0xa9); -DEFINE_GUID(IID_ID3D12SDKConfiguration,0xe9eb5314,0x33aa,0x42b2,0xa7,0x18,0xd7,0x7f,0x58,0xb1,0xf1,0xc7); -DEFINE_GUID(IID_ID3D12SDKConfiguration1,0x8aaf9303,0xad25,0x48b9,0x9a,0x57,0xd9,0xc3,0x7e,0x00,0x9d,0x9f); -DEFINE_GUID(IID_ID3D12DeviceFactory,0x61f307d3,0xd34e,0x4e7c,0x83,0x74,0x3b,0xa4,0xde,0x23,0xcc,0xcb); -DEFINE_GUID(IID_ID3D12DeviceConfiguration,0x78dbf87b,0xf766,0x422b,0xa6,0x1c,0xc8,0xc4,0x46,0xbd,0xb9,0xad); -DEFINE_GUID(IID_ID3D12DeviceConfiguration1,0xed342442,0x6343,0x4e16,0xbb,0x82,0xa3,0xa5,0x77,0x87,0x4e,0x56); -DEFINE_GUID(IID_ID3D12GraphicsCommandList5,0x55050859,0x4024,0x474c,0x87,0xf5,0x64,0x72,0xea,0xee,0x44,0xea); -DEFINE_GUID(IID_ID3D12GraphicsCommandList6,0xc3827890,0xe548,0x4cfa,0x96,0xcf,0x56,0x89,0xa9,0x37,0x0f,0x80); -DEFINE_GUID(IID_ID3D12GraphicsCommandList7,0xdd171223,0x8b61,0x4769,0x90,0xe3,0x16,0x0c,0xcd,0xe4,0xe2,0xc1); -DEFINE_GUID(IID_ID3D12GraphicsCommandList8,0xee936ef9,0x599d,0x4d28,0x93,0x8e,0x23,0xc4,0xad,0x05,0xce,0x51); -DEFINE_GUID(IID_ID3D12GraphicsCommandList9,0x34ed2808,0xffe6,0x4c2b,0xb1,0x1a,0xca,0xbd,0x2b,0x0c,0x59,0xe1); -DEFINE_GUID(IID_ID3D12GraphicsCommandList10,0x7013c015,0xd161,0x4b63,0xa0,0x8c,0x23,0x85,0x52,0xdd,0x8a,0xcc); -DEFINE_GUID(IID_ID3D12DSRDeviceFactory,0xf343d1a0,0xafe3,0x439f,0xb1,0x3d,0xcd,0x87,0xa4,0x3b,0x70,0xca); -DEFINE_GUID(IID_ID3D12GBVDiagnostics,0x597985ab,0x9b75,0x4dbb,0xbe,0x23,0x07,0x61,0x19,0x5b,0xeb,0xee); - -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0078_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0078_v0_0_s_ifspec; - -/* Additional Prototypes for ALL interfaces */ - -/* end of Additional Prototypes */ - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/Juliet/src/Graphics/D3D12/AgilitySDK/d3d12.idl b/Juliet/src/Graphics/D3D12/AgilitySDK/d3d12.idl deleted file mode 100644 index 0bb8ed6..0000000 --- a/Juliet/src/Graphics/D3D12/AgilitySDK/d3d12.idl +++ /dev/null @@ -1,6637 +0,0 @@ -/*------------------------------------------------------------------------------------- - * - * Copyright (c) Microsoft Corporation - * Licensed under the MIT license - * - *-------------------------------------------------------------------------------------*/ -import "oaidl.idl"; -import "ocidl.idl"; - -import "dxgicommon.idl"; -import "dxgiformat.idl"; - -import "d3dcommon.idl"; - -cpp_quote("#include ") - -#pragma region App Family -cpp_quote("#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES)") - -// NOTE: The following constants are generated from the D3D12 hardware spec. Do not edit these values directly. -cpp_quote( "#ifndef _D3D12_CONSTANTS" ) -cpp_quote( "#define _D3D12_CONSTANTS" ) -const UINT D3D12_16BIT_INDEX_STRIP_CUT_VALUE = 0xffff; -const UINT D3D12_32BIT_INDEX_STRIP_CUT_VALUE = 0xffffffff; -const UINT D3D12_8BIT_INDEX_STRIP_CUT_VALUE = 0xff; -const UINT D3D12_APPEND_ALIGNED_ELEMENT = 0xffffffff; -const UINT D3D12_ARRAY_AXIS_ADDRESS_RANGE_BIT_COUNT = 9; -const UINT D3D12_CLIP_OR_CULL_DISTANCE_COUNT = 8; -const UINT D3D12_CLIP_OR_CULL_DISTANCE_ELEMENT_COUNT = 2; -const UINT D3D12_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT = 14; -const UINT D3D12_COMMONSHADER_CONSTANT_BUFFER_COMPONENTS = 4; -const UINT D3D12_COMMONSHADER_CONSTANT_BUFFER_COMPONENT_BIT_COUNT = 32; -const UINT D3D12_COMMONSHADER_CONSTANT_BUFFER_HW_SLOT_COUNT = 15; -const UINT D3D12_COMMONSHADER_CONSTANT_BUFFER_PARTIAL_UPDATE_EXTENTS_BYTE_ALIGNMENT = 16; -const UINT D3D12_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COMPONENTS = 4; -const UINT D3D12_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COUNT = 15; -const UINT D3D12_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READS_PER_INST = 1; -const UINT D3D12_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READ_PORTS = 1; -const UINT D3D12_COMMONSHADER_FLOWCONTROL_NESTING_LIMIT = 64; -const UINT D3D12_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COMPONENTS = 4; -const UINT D3D12_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COUNT = 1; -const UINT D3D12_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READS_PER_INST = 1; -const UINT D3D12_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READ_PORTS = 1; -const UINT D3D12_COMMONSHADER_IMMEDIATE_VALUE_COMPONENT_BIT_COUNT = 32; -const UINT D3D12_COMMONSHADER_INPUT_RESOURCE_REGISTER_COMPONENTS = 1; -const UINT D3D12_COMMONSHADER_INPUT_RESOURCE_REGISTER_COUNT = 128; -const UINT D3D12_COMMONSHADER_INPUT_RESOURCE_REGISTER_READS_PER_INST = 1; -const UINT D3D12_COMMONSHADER_INPUT_RESOURCE_REGISTER_READ_PORTS = 1; -const UINT D3D12_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT = 128; -const UINT D3D12_COMMONSHADER_SAMPLER_REGISTER_COMPONENTS = 1; -const UINT D3D12_COMMONSHADER_SAMPLER_REGISTER_COUNT = 16; -const UINT D3D12_COMMONSHADER_SAMPLER_REGISTER_READS_PER_INST = 1; -const UINT D3D12_COMMONSHADER_SAMPLER_REGISTER_READ_PORTS = 1; -const UINT D3D12_COMMONSHADER_SAMPLER_SLOT_COUNT = 16; -const UINT D3D12_COMMONSHADER_SUBROUTINE_NESTING_LIMIT = 32; -const UINT D3D12_COMMONSHADER_TEMP_REGISTER_COMPONENTS = 4; -const UINT D3D12_COMMONSHADER_TEMP_REGISTER_COMPONENT_BIT_COUNT = 32; -const UINT D3D12_COMMONSHADER_TEMP_REGISTER_COUNT = 4096; -const UINT D3D12_COMMONSHADER_TEMP_REGISTER_READS_PER_INST = 3; -const UINT D3D12_COMMONSHADER_TEMP_REGISTER_READ_PORTS = 3; -const UINT D3D12_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MAX = 10; -const INT D3D12_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MIN = -10; -const INT D3D12_COMMONSHADER_TEXEL_OFFSET_MAX_NEGATIVE = -8; -const UINT D3D12_COMMONSHADER_TEXEL_OFFSET_MAX_POSITIVE = 7; -const UINT D3D12_CONSTANT_BUFFER_DATA_PLACEMENT_ALIGNMENT = 256; -const UINT D3D12_CS_4_X_BUCKET00_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 256; -const UINT D3D12_CS_4_X_BUCKET00_MAX_NUM_THREADS_PER_GROUP = 64; -const UINT D3D12_CS_4_X_BUCKET01_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 240; -const UINT D3D12_CS_4_X_BUCKET01_MAX_NUM_THREADS_PER_GROUP = 68; -const UINT D3D12_CS_4_X_BUCKET02_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 224; -const UINT D3D12_CS_4_X_BUCKET02_MAX_NUM_THREADS_PER_GROUP = 72; -const UINT D3D12_CS_4_X_BUCKET03_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 208; -const UINT D3D12_CS_4_X_BUCKET03_MAX_NUM_THREADS_PER_GROUP = 76; -const UINT D3D12_CS_4_X_BUCKET04_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 192; -const UINT D3D12_CS_4_X_BUCKET04_MAX_NUM_THREADS_PER_GROUP = 84; -const UINT D3D12_CS_4_X_BUCKET05_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 176; -const UINT D3D12_CS_4_X_BUCKET05_MAX_NUM_THREADS_PER_GROUP = 92; -const UINT D3D12_CS_4_X_BUCKET06_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 160; -const UINT D3D12_CS_4_X_BUCKET06_MAX_NUM_THREADS_PER_GROUP = 100; -const UINT D3D12_CS_4_X_BUCKET07_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 144; -const UINT D3D12_CS_4_X_BUCKET07_MAX_NUM_THREADS_PER_GROUP = 112; -const UINT D3D12_CS_4_X_BUCKET08_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 128; -const UINT D3D12_CS_4_X_BUCKET08_MAX_NUM_THREADS_PER_GROUP = 128; -const UINT D3D12_CS_4_X_BUCKET09_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 112; -const UINT D3D12_CS_4_X_BUCKET09_MAX_NUM_THREADS_PER_GROUP = 144; -const UINT D3D12_CS_4_X_BUCKET10_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 96; -const UINT D3D12_CS_4_X_BUCKET10_MAX_NUM_THREADS_PER_GROUP = 168; -const UINT D3D12_CS_4_X_BUCKET11_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 80; -const UINT D3D12_CS_4_X_BUCKET11_MAX_NUM_THREADS_PER_GROUP = 204; -const UINT D3D12_CS_4_X_BUCKET12_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 64; -const UINT D3D12_CS_4_X_BUCKET12_MAX_NUM_THREADS_PER_GROUP = 256; -const UINT D3D12_CS_4_X_BUCKET13_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 48; -const UINT D3D12_CS_4_X_BUCKET13_MAX_NUM_THREADS_PER_GROUP = 340; -const UINT D3D12_CS_4_X_BUCKET14_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 32; -const UINT D3D12_CS_4_X_BUCKET14_MAX_NUM_THREADS_PER_GROUP = 512; -const UINT D3D12_CS_4_X_BUCKET15_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 16; -const UINT D3D12_CS_4_X_BUCKET15_MAX_NUM_THREADS_PER_GROUP = 768; -const UINT D3D12_CS_4_X_DISPATCH_MAX_THREAD_GROUPS_IN_Z_DIMENSION = 1; -const UINT D3D12_CS_4_X_RAW_UAV_BYTE_ALIGNMENT = 256; -const UINT D3D12_CS_4_X_THREAD_GROUP_MAX_THREADS_PER_GROUP = 768; -const UINT D3D12_CS_4_X_THREAD_GROUP_MAX_X = 768; -const UINT D3D12_CS_4_X_THREAD_GROUP_MAX_Y = 768; -const UINT D3D12_CS_4_X_UAV_REGISTER_COUNT = 1; -const UINT D3D12_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION = 65535; -const UINT D3D12_CS_TGSM_REGISTER_COUNT = 8192; -const UINT D3D12_CS_TGSM_REGISTER_READS_PER_INST = 1; -const UINT D3D12_CS_TGSM_RESOURCE_REGISTER_COMPONENTS = 1; -const UINT D3D12_CS_TGSM_RESOURCE_REGISTER_READ_PORTS = 1; -const UINT D3D12_CS_THREADGROUPID_REGISTER_COMPONENTS = 3; -const UINT D3D12_CS_THREADGROUPID_REGISTER_COUNT = 1; -const UINT D3D12_CS_THREADIDINGROUPFLATTENED_REGISTER_COMPONENTS = 1; -const UINT D3D12_CS_THREADIDINGROUPFLATTENED_REGISTER_COUNT = 1; -const UINT D3D12_CS_THREADIDINGROUP_REGISTER_COMPONENTS = 3; -const UINT D3D12_CS_THREADIDINGROUP_REGISTER_COUNT = 1; -const UINT D3D12_CS_THREADID_REGISTER_COMPONENTS = 3; -const UINT D3D12_CS_THREADID_REGISTER_COUNT = 1; -const UINT D3D12_CS_THREAD_GROUP_MAX_THREADS_PER_GROUP = 1024; -const UINT D3D12_CS_THREAD_GROUP_MAX_X = 1024; -const UINT D3D12_CS_THREAD_GROUP_MAX_Y = 1024; -const UINT D3D12_CS_THREAD_GROUP_MAX_Z = 64; -const UINT D3D12_CS_THREAD_GROUP_MIN_X = 1; -const UINT D3D12_CS_THREAD_GROUP_MIN_Y = 1; -const UINT D3D12_CS_THREAD_GROUP_MIN_Z = 1; -const UINT D3D12_CS_THREAD_LOCAL_TEMP_REGISTER_POOL = 16384; -cpp_quote( "#define D3D12_DEFAULT_BLEND_FACTOR_ALPHA ( 1.0f )" ) -cpp_quote( "#define D3D12_DEFAULT_BLEND_FACTOR_BLUE ( 1.0f )" ) -cpp_quote( "#define D3D12_DEFAULT_BLEND_FACTOR_GREEN ( 1.0f )" ) -cpp_quote( "#define D3D12_DEFAULT_BLEND_FACTOR_RED ( 1.0f )" ) -cpp_quote( "#define D3D12_DEFAULT_BORDER_COLOR_COMPONENT ( 0.0f )" ) -const UINT D3D12_DEFAULT_DEPTH_BIAS = 0; -cpp_quote( "#define D3D12_DEFAULT_DEPTH_BIAS_CLAMP ( 0.0f )" ) -const UINT D3D12_DEFAULT_MAX_ANISOTROPY = 16; -cpp_quote( "#define D3D12_DEFAULT_MIP_LOD_BIAS ( 0.0f )" ) -const UINT D3D12_DEFAULT_MSAA_RESOURCE_PLACEMENT_ALIGNMENT = 4194304; -const UINT D3D12_DEFAULT_RENDER_TARGET_ARRAY_INDEX = 0; -const UINT D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT = 65536; -const UINT D3D12_DEFAULT_SAMPLE_MASK = 0xffffffff; -const UINT D3D12_DEFAULT_SCISSOR_ENDX = 0; -const UINT D3D12_DEFAULT_SCISSOR_ENDY = 0; -const UINT D3D12_DEFAULT_SCISSOR_STARTX = 0; -const UINT D3D12_DEFAULT_SCISSOR_STARTY = 0; -cpp_quote( "#define D3D12_DEFAULT_SLOPE_SCALED_DEPTH_BIAS ( 0.0f )" ) -const UINT D3D12_DEFAULT_STENCIL_READ_MASK = 0xff; -const UINT D3D12_DEFAULT_STENCIL_REFERENCE = 0; -const UINT D3D12_DEFAULT_STENCIL_WRITE_MASK = 0xff; -const UINT D3D12_DEFAULT_VIEWPORT_AND_SCISSORRECT_INDEX = 0; -const UINT D3D12_DEFAULT_VIEWPORT_HEIGHT = 0; -cpp_quote( "#define D3D12_DEFAULT_VIEWPORT_MAX_DEPTH ( 0.0f )" ) -cpp_quote( "#define D3D12_DEFAULT_VIEWPORT_MIN_DEPTH ( 0.0f )" ) -const UINT D3D12_DEFAULT_VIEWPORT_TOPLEFTX = 0; -const UINT D3D12_DEFAULT_VIEWPORT_TOPLEFTY = 0; -const UINT D3D12_DEFAULT_VIEWPORT_WIDTH = 0; -const UINT D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND = 0xffffffff; -const UINT D3D12_DRIVER_RESERVED_REGISTER_SPACE_VALUES_END = 0xfffffff7; -const UINT D3D12_DRIVER_RESERVED_REGISTER_SPACE_VALUES_START = 0xfffffff0; -const UINT D3D12_DS_INPUT_CONTROL_POINTS_MAX_TOTAL_SCALARS = 3968; -const UINT D3D12_DS_INPUT_CONTROL_POINT_REGISTER_COMPONENTS = 4; -const UINT D3D12_DS_INPUT_CONTROL_POINT_REGISTER_COMPONENT_BIT_COUNT = 32; -const UINT D3D12_DS_INPUT_CONTROL_POINT_REGISTER_COUNT = 32; -const UINT D3D12_DS_INPUT_CONTROL_POINT_REGISTER_READS_PER_INST = 2; -const UINT D3D12_DS_INPUT_CONTROL_POINT_REGISTER_READ_PORTS = 1; -const UINT D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_COMPONENTS = 3; -const UINT D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_COMPONENT_BIT_COUNT = 32; -const UINT D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_COUNT = 1; -const UINT D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_READS_PER_INST = 2; -const UINT D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_READ_PORTS = 1; -const UINT D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_COMPONENTS = 4; -const UINT D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_COMPONENT_BIT_COUNT = 32; -const UINT D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_COUNT = 32; -const UINT D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_READS_PER_INST = 2; -const UINT D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_READ_PORTS = 1; -const UINT D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENTS = 1; -const UINT D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENT_BIT_COUNT = 32; -const UINT D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_COUNT = 1; -const UINT D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_READS_PER_INST = 2; -const UINT D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_READ_PORTS = 1; -const UINT D3D12_DS_OUTPUT_REGISTER_COMPONENTS = 4; -const UINT D3D12_DS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT = 32; -const UINT D3D12_DS_OUTPUT_REGISTER_COUNT = 32; -cpp_quote( "#define D3D12_FLOAT16_FUSED_TOLERANCE_IN_ULP ( 0.6 )" ) -cpp_quote( "#define D3D12_FLOAT32_MAX ( 3.402823466e+38f )" ) -cpp_quote( "#define D3D12_FLOAT32_TO_INTEGER_TOLERANCE_IN_ULP ( 0.6f )" ) -cpp_quote( "#define D3D12_FLOAT_TO_SRGB_EXPONENT_DENOMINATOR ( 2.4f )" ) -cpp_quote( "#define D3D12_FLOAT_TO_SRGB_EXPONENT_NUMERATOR ( 1.0f )" ) -cpp_quote( "#define D3D12_FLOAT_TO_SRGB_OFFSET ( 0.055f )" ) -cpp_quote( "#define D3D12_FLOAT_TO_SRGB_SCALE_1 ( 12.92f )" ) -cpp_quote( "#define D3D12_FLOAT_TO_SRGB_SCALE_2 ( 1.055f )" ) -cpp_quote( "#define D3D12_FLOAT_TO_SRGB_THRESHOLD ( 0.0031308f )" ) -cpp_quote( "#define D3D12_FTOI_INSTRUCTION_MAX_INPUT ( 2147483647.999f )" ) -cpp_quote( "#define D3D12_FTOI_INSTRUCTION_MIN_INPUT ( -2147483648.999f )" ) -cpp_quote( "#define D3D12_FTOU_INSTRUCTION_MAX_INPUT ( 4294967295.999f )" ) -cpp_quote( "#define D3D12_FTOU_INSTRUCTION_MIN_INPUT ( 0.0f )" ) -const UINT D3D12_GS_INPUT_INSTANCE_ID_READS_PER_INST = 2; -const UINT D3D12_GS_INPUT_INSTANCE_ID_READ_PORTS = 1; -const UINT D3D12_GS_INPUT_INSTANCE_ID_REGISTER_COMPONENTS = 1; -const UINT D3D12_GS_INPUT_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT = 32; -const UINT D3D12_GS_INPUT_INSTANCE_ID_REGISTER_COUNT = 1; -const UINT D3D12_GS_INPUT_PRIM_CONST_REGISTER_COMPONENTS = 1; -const UINT D3D12_GS_INPUT_PRIM_CONST_REGISTER_COMPONENT_BIT_COUNT = 32; -const UINT D3D12_GS_INPUT_PRIM_CONST_REGISTER_COUNT = 1; -const UINT D3D12_GS_INPUT_PRIM_CONST_REGISTER_READS_PER_INST = 2; -const UINT D3D12_GS_INPUT_PRIM_CONST_REGISTER_READ_PORTS = 1; -const UINT D3D12_GS_INPUT_REGISTER_COMPONENTS = 4; -const UINT D3D12_GS_INPUT_REGISTER_COMPONENT_BIT_COUNT = 32; -const UINT D3D12_GS_INPUT_REGISTER_COUNT = 32; -const UINT D3D12_GS_INPUT_REGISTER_READS_PER_INST = 2; -const UINT D3D12_GS_INPUT_REGISTER_READ_PORTS = 1; -const UINT D3D12_GS_INPUT_REGISTER_VERTICES = 32; -const UINT D3D12_GS_MAX_INSTANCE_COUNT = 32; -const UINT D3D12_GS_MAX_OUTPUT_VERTEX_COUNT_ACROSS_INSTANCES = 1024; -const UINT D3D12_GS_OUTPUT_ELEMENTS = 32; -const UINT D3D12_GS_OUTPUT_REGISTER_COMPONENTS = 4; -const UINT D3D12_GS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT = 32; -const UINT D3D12_GS_OUTPUT_REGISTER_COUNT = 32; -const UINT D3D12_HS_CONTROL_POINT_PHASE_INPUT_REGISTER_COUNT = 32; -const UINT D3D12_HS_CONTROL_POINT_PHASE_OUTPUT_REGISTER_COUNT = 32; -const UINT D3D12_HS_CONTROL_POINT_REGISTER_COMPONENTS = 4; -const UINT D3D12_HS_CONTROL_POINT_REGISTER_COMPONENT_BIT_COUNT = 32; -const UINT D3D12_HS_CONTROL_POINT_REGISTER_READS_PER_INST = 2; -const UINT D3D12_HS_CONTROL_POINT_REGISTER_READ_PORTS = 1; -const UINT D3D12_HS_FORK_PHASE_INSTANCE_COUNT_UPPER_BOUND = 0xFFFFFFFF; -const UINT D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_COMPONENTS = 1; -const UINT D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT = 32; -const UINT D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_COUNT = 1; -const UINT D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_READS_PER_INST = 2; -const UINT D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_READ_PORTS = 1; -const UINT D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COMPONENTS = 1; -const UINT D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT = 32; -const UINT D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COUNT = 1; -const UINT D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_READS_PER_INST = 2; -const UINT D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_READ_PORTS = 1; -const UINT D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENTS = 1; -const UINT D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENT_BIT_COUNT = 32; -const UINT D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_COUNT = 1; -const UINT D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_READS_PER_INST = 2; -const UINT D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_READ_PORTS = 1; -const UINT D3D12_HS_JOIN_PHASE_INSTANCE_COUNT_UPPER_BOUND = 0xFFFFFFFF; -cpp_quote( "#define D3D12_HS_MAXTESSFACTOR_LOWER_BOUND ( 1.0f )" ) -cpp_quote( "#define D3D12_HS_MAXTESSFACTOR_UPPER_BOUND ( 64.0f )" ) -const UINT D3D12_HS_OUTPUT_CONTROL_POINTS_MAX_TOTAL_SCALARS = 3968; -const UINT D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COMPONENTS = 1; -const UINT D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COMPONENT_BIT_COUNT = 32; -const UINT D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COUNT = 1; -const UINT D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_READS_PER_INST = 2; -const UINT D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_READ_PORTS = 1; -const UINT D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COMPONENTS = 4; -const UINT D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COMPONENT_BIT_COUNT = 32; -const UINT D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COUNT = 32; -const UINT D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_READS_PER_INST = 2; -const UINT D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_READ_PORTS = 1; -const UINT D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_SCALAR_COMPONENTS = 128; -const UINT D3D12_IA_DEFAULT_INDEX_BUFFER_OFFSET_IN_BYTES = 0; -const UINT D3D12_IA_DEFAULT_PRIMITIVE_TOPOLOGY = 0; -const UINT D3D12_IA_DEFAULT_VERTEX_BUFFER_OFFSET_IN_BYTES = 0; -const UINT D3D12_IA_INDEX_INPUT_RESOURCE_SLOT_COUNT = 1; -const UINT D3D12_IA_INSTANCE_ID_BIT_COUNT = 32; -const UINT D3D12_IA_INTEGER_ARITHMETIC_BIT_COUNT = 32; -const UINT D3D12_IA_PATCH_MAX_CONTROL_POINT_COUNT = 32; -const UINT D3D12_IA_PRIMITIVE_ID_BIT_COUNT = 32; -const UINT D3D12_IA_VERTEX_ID_BIT_COUNT = 32; -const UINT D3D12_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT = 32; -const UINT D3D12_IA_VERTEX_INPUT_STRUCTURE_ELEMENTS_COMPONENTS = 128; -const UINT D3D12_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT = 32; -const UINT D3D12_INTEGER_DIVIDE_BY_ZERO_QUOTIENT = 0xffffffff; -const UINT D3D12_INTEGER_DIVIDE_BY_ZERO_REMAINDER = 0xffffffff; -const UINT D3D12_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL = 0xffffffff; -const UINT D3D12_KEEP_UNORDERED_ACCESS_VIEWS = 0xffffffff; -cpp_quote( "#define D3D12_LINEAR_GAMMA ( 1.0f )" ) -const UINT D3D12_MAJOR_VERSION = 12; -cpp_quote( "#define D3D12_MAX_BORDER_COLOR_COMPONENT ( 1.0f )" ) -cpp_quote( "#define D3D12_MAX_DEPTH ( 1.0f )" ) -const UINT D3D12_MAX_LIVE_STATIC_SAMPLERS = 2032; -const UINT D3D12_MAX_MAXANISOTROPY = 16; -const UINT D3D12_MAX_MULTISAMPLE_SAMPLE_COUNT = 32; -cpp_quote( "#define D3D12_MAX_POSITION_VALUE ( 3.402823466e+34f )" ) -const UINT D3D12_MAX_ROOT_COST = 64; -const UINT D3D12_MAX_SHADER_VISIBLE_DESCRIPTOR_HEAP_SIZE_TIER_1 = 1000000; -const UINT D3D12_MAX_SHADER_VISIBLE_DESCRIPTOR_HEAP_SIZE_TIER_2 = 1000000; -const UINT D3D12_MAX_SHADER_VISIBLE_SAMPLER_HEAP_SIZE = 2048; -const UINT D3D12_MAX_TEXTURE_DIMENSION_2_TO_EXP = 17; -const UINT D3D12_MAX_VIEW_INSTANCE_COUNT = 4; -const UINT D3D12_MINOR_VERSION = 0; -cpp_quote( "#define D3D12_MIN_BORDER_COLOR_COMPONENT ( 0.0f )" ) -cpp_quote( "#define D3D12_MIN_DEPTH ( 0.0f )" ) -const UINT D3D12_MIN_MAXANISOTROPY = 0; -cpp_quote( "#define D3D12_MIP_LOD_BIAS_MAX ( 15.99f )" ) -cpp_quote( "#define D3D12_MIP_LOD_BIAS_MIN ( -16.0f )" ) -const UINT D3D12_MIP_LOD_FRACTIONAL_BIT_COUNT = 8; -const UINT D3D12_MIP_LOD_RANGE_BIT_COUNT = 8; -cpp_quote( "#define D3D12_MULTISAMPLE_ANTIALIAS_LINE_WIDTH ( 1.4f )" ) -const UINT D3D12_NONSAMPLE_FETCH_OUT_OF_RANGE_ACCESS_RESULT = 0; -const UINT D3D12_OS_RESERVED_REGISTER_SPACE_VALUES_END = 0xffffffff; -const UINT D3D12_OS_RESERVED_REGISTER_SPACE_VALUES_START = 0xfffffff8; -const UINT D3D12_PACKED_TILE = 0xffffffff; -const UINT D3D12_PIXEL_ADDRESS_RANGE_BIT_COUNT = 15; -const UINT D3D12_PREVIEW_SDK_VERSION = 716; -const UINT D3D12_PRE_SCISSOR_PIXEL_ADDRESS_RANGE_BIT_COUNT = 16; -const UINT D3D12_PS_CS_UAV_REGISTER_COMPONENTS = 1; -const UINT D3D12_PS_CS_UAV_REGISTER_COUNT = 8; -const UINT D3D12_PS_CS_UAV_REGISTER_READS_PER_INST = 1; -const UINT D3D12_PS_CS_UAV_REGISTER_READ_PORTS = 1; -const UINT D3D12_PS_FRONTFACING_DEFAULT_VALUE = 0xFFFFFFFF; -const UINT D3D12_PS_FRONTFACING_FALSE_VALUE = 0x00000000; -const UINT D3D12_PS_FRONTFACING_TRUE_VALUE = 0xFFFFFFFF; -const UINT D3D12_PS_INPUT_REGISTER_COMPONENTS = 4; -const UINT D3D12_PS_INPUT_REGISTER_COMPONENT_BIT_COUNT = 32; -const UINT D3D12_PS_INPUT_REGISTER_COUNT = 32; -const UINT D3D12_PS_INPUT_REGISTER_READS_PER_INST = 2; -const UINT D3D12_PS_INPUT_REGISTER_READ_PORTS = 1; -cpp_quote( "#define D3D12_PS_LEGACY_PIXEL_CENTER_FRACTIONAL_COMPONENT ( 0.0f )" ) -const UINT D3D12_PS_OUTPUT_DEPTH_REGISTER_COMPONENTS = 1; -const UINT D3D12_PS_OUTPUT_DEPTH_REGISTER_COMPONENT_BIT_COUNT = 32; -const UINT D3D12_PS_OUTPUT_DEPTH_REGISTER_COUNT = 1; -const UINT D3D12_PS_OUTPUT_MASK_REGISTER_COMPONENTS = 1; -const UINT D3D12_PS_OUTPUT_MASK_REGISTER_COMPONENT_BIT_COUNT = 32; -const UINT D3D12_PS_OUTPUT_MASK_REGISTER_COUNT = 1; -const UINT D3D12_PS_OUTPUT_REGISTER_COMPONENTS = 4; -const UINT D3D12_PS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT = 32; -const UINT D3D12_PS_OUTPUT_REGISTER_COUNT = 8; -cpp_quote( "#define D3D12_PS_PIXEL_CENTER_FRACTIONAL_COMPONENT ( 0.5f )" ) -const UINT D3D12_RAW_UAV_SRV_BYTE_ALIGNMENT = 16; -const UINT D3D12_RAYTRACING_AABB_BYTE_ALIGNMENT = 8; -const UINT D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BYTE_ALIGNMENT = 256; -const UINT D3D12_RAYTRACING_INSTANCE_DESCS_BYTE_ALIGNMENT = 16; -const UINT D3D12_RAYTRACING_MAX_ATTRIBUTE_SIZE_IN_BYTES = 32; -const UINT D3D12_RAYTRACING_MAX_DECLARABLE_TRACE_RECURSION_DEPTH = 31; -const UINT D3D12_RAYTRACING_MAX_GEOMETRIES_PER_BOTTOM_LEVEL_ACCELERATION_STRUCTURE = 16777216; -const UINT D3D12_RAYTRACING_MAX_INSTANCES_PER_TOP_LEVEL_ACCELERATION_STRUCTURE = 16777216; -const UINT D3D12_RAYTRACING_MAX_PRIMITIVES_PER_BOTTOM_LEVEL_ACCELERATION_STRUCTURE = 536870912; -const UINT D3D12_RAYTRACING_MAX_RAY_GENERATION_SHADER_THREADS = 1073741824; -const UINT D3D12_RAYTRACING_MAX_SHADER_RECORD_STRIDE = 4096; -const UINT D3D12_RAYTRACING_SHADER_RECORD_BYTE_ALIGNMENT = 32; -const UINT D3D12_RAYTRACING_SHADER_TABLE_BYTE_ALIGNMENT = 64; -const UINT D3D12_RAYTRACING_TRANSFORM3X4_BYTE_ALIGNMENT = 16; -const UINT D3D12_REQ_BLEND_OBJECT_COUNT_PER_DEVICE = 4096; -const UINT D3D12_REQ_BUFFER_RESOURCE_TEXEL_COUNT_2_TO_EXP = 27; -const UINT D3D12_REQ_CONSTANT_BUFFER_ELEMENT_COUNT = 4096; -const UINT D3D12_REQ_DEPTH_STENCIL_OBJECT_COUNT_PER_DEVICE = 4096; -const UINT D3D12_REQ_DRAWINDEXED_INDEX_COUNT_2_TO_EXP = 32; -const UINT D3D12_REQ_DRAW_VERTEX_COUNT_2_TO_EXP = 32; -const UINT D3D12_REQ_FILTERING_HW_ADDRESSABLE_RESOURCE_DIMENSION = 16384; -const UINT D3D12_REQ_GS_INVOCATION_32BIT_OUTPUT_COMPONENT_LIMIT = 1024; -const UINT D3D12_REQ_IMMEDIATE_CONSTANT_BUFFER_ELEMENT_COUNT = 4096; -const UINT D3D12_REQ_MAXANISOTROPY = 16; -const UINT D3D12_REQ_MIP_LEVELS = 15; -const UINT D3D12_REQ_MULTI_ELEMENT_STRUCTURE_SIZE_IN_BYTES = 2048; -const UINT D3D12_REQ_RASTERIZER_OBJECT_COUNT_PER_DEVICE = 4096; -const UINT D3D12_REQ_RENDER_TO_BUFFER_WINDOW_WIDTH = 16384; -const UINT D3D12_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_A_TERM = 128; -cpp_quote( "#define D3D12_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_B_TERM ( 0.25f )" ) -const UINT D3D12_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_C_TERM = 2048; -const UINT D3D12_REQ_RESOURCE_VIEW_COUNT_PER_DEVICE_2_TO_EXP = 20; -const UINT D3D12_REQ_SAMPLER_OBJECT_COUNT_PER_DEVICE = 4096; -const UINT D3D12_REQ_SUBRESOURCES = 30720; -const UINT D3D12_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION = 2048; -const UINT D3D12_REQ_TEXTURE1D_U_DIMENSION = 16384; -const UINT D3D12_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION = 2048; -const UINT D3D12_REQ_TEXTURE2D_U_OR_V_DIMENSION = 16384; -const UINT D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION = 2048; -const UINT D3D12_REQ_TEXTURECUBE_DIMENSION = 16384; -const UINT D3D12_RESINFO_INSTRUCTION_MISSING_COMPONENT_RETVAL = 0; -const UINT D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES = 0xffffffff; -const UINT D3D12_RS_SET_SHADING_RATE_COMBINER_COUNT = 2; -const UINT D3D12_SDK_VERSION = 615; -const UINT D3D12_SHADER_IDENTIFIER_SIZE_IN_BYTES = 32; -const UINT D3D12_SHADER_MAJOR_VERSION = 5; -const UINT D3D12_SHADER_MAX_INSTANCES = 65535; -const UINT D3D12_SHADER_MAX_INTERFACES = 253; -const UINT D3D12_SHADER_MAX_INTERFACE_CALL_SITES = 4096; -const UINT D3D12_SHADER_MAX_TYPES = 65535; -const UINT D3D12_SHADER_MINOR_VERSION = 1; -const UINT D3D12_SHIFT_INSTRUCTION_PAD_VALUE = 0; -const UINT D3D12_SHIFT_INSTRUCTION_SHIFT_VALUE_BIT_COUNT = 5; -const UINT D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT = 8; -const UINT D3D12_SMALL_MSAA_RESOURCE_PLACEMENT_ALIGNMENT = 65536; -const UINT D3D12_SMALL_RESOURCE_PLACEMENT_ALIGNMENT = 4096; -const UINT D3D12_SO_BUFFER_MAX_STRIDE_IN_BYTES = 2048; -const UINT D3D12_SO_BUFFER_MAX_WRITE_WINDOW_IN_BYTES = 512; -const UINT D3D12_SO_BUFFER_SLOT_COUNT = 4; -const UINT D3D12_SO_DDI_REGISTER_INDEX_DENOTING_GAP = 0xffffffff; -const UINT D3D12_SO_NO_RASTERIZED_STREAM = 0xffffffff; -const UINT D3D12_SO_OUTPUT_COMPONENT_COUNT = 128; -const UINT D3D12_SO_STREAM_COUNT = 4; -const UINT D3D12_SPEC_DATE_DAY = 14; -const UINT D3D12_SPEC_DATE_MONTH = 11; -const UINT D3D12_SPEC_DATE_YEAR = 2014; -cpp_quote( "#define D3D12_SPEC_VERSION ( 1.16 )" ) -cpp_quote( "#define D3D12_SRGB_GAMMA ( 2.2f )" ) -cpp_quote( "#define D3D12_SRGB_TO_FLOAT_DENOMINATOR_1 ( 12.92f )" ) -cpp_quote( "#define D3D12_SRGB_TO_FLOAT_DENOMINATOR_2 ( 1.055f )" ) -cpp_quote( "#define D3D12_SRGB_TO_FLOAT_EXPONENT ( 2.4f )" ) -cpp_quote( "#define D3D12_SRGB_TO_FLOAT_OFFSET ( 0.055f )" ) -cpp_quote( "#define D3D12_SRGB_TO_FLOAT_THRESHOLD ( 0.04045f )" ) -cpp_quote( "#define D3D12_SRGB_TO_FLOAT_TOLERANCE_IN_ULP ( 0.5f )" ) -const UINT D3D12_STANDARD_COMPONENT_BIT_COUNT = 32; -const UINT D3D12_STANDARD_COMPONENT_BIT_COUNT_DOUBLED = 64; -const UINT D3D12_STANDARD_MAXIMUM_ELEMENT_ALIGNMENT_BYTE_MULTIPLE = 4; -const UINT D3D12_STANDARD_PIXEL_COMPONENT_COUNT = 128; -const UINT D3D12_STANDARD_PIXEL_ELEMENT_COUNT = 32; -const UINT D3D12_STANDARD_VECTOR_SIZE = 4; -const UINT D3D12_STANDARD_VERTEX_ELEMENT_COUNT = 32; -const UINT D3D12_STANDARD_VERTEX_TOTAL_COMPONENT_COUNT = 64; -const UINT D3D12_SUBPIXEL_FRACTIONAL_BIT_COUNT = 8; -const UINT D3D12_SUBTEXEL_FRACTIONAL_BIT_COUNT = 8; -const UINT D3D12_SYSTEM_RESERVED_REGISTER_SPACE_VALUES_END = 0xffffffff; -const UINT D3D12_SYSTEM_RESERVED_REGISTER_SPACE_VALUES_START = 0xfffffff0; -const UINT D3D12_TESSELLATOR_MAX_EVEN_TESSELLATION_FACTOR = 64; -const UINT D3D12_TESSELLATOR_MAX_ISOLINE_DENSITY_TESSELLATION_FACTOR = 64; -const UINT D3D12_TESSELLATOR_MAX_ODD_TESSELLATION_FACTOR = 63; -const UINT D3D12_TESSELLATOR_MAX_TESSELLATION_FACTOR = 64; -const UINT D3D12_TESSELLATOR_MIN_EVEN_TESSELLATION_FACTOR = 2; -const UINT D3D12_TESSELLATOR_MIN_ISOLINE_DENSITY_TESSELLATION_FACTOR = 1; -const UINT D3D12_TESSELLATOR_MIN_ODD_TESSELLATION_FACTOR = 1; -const UINT D3D12_TEXEL_ADDRESS_RANGE_BIT_COUNT = 16; -const UINT D3D12_TEXTURE_DATA_PITCH_ALIGNMENT = 256; -const UINT D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT = 512; -const UINT D3D12_TILED_RESOURCE_TILE_SIZE_IN_BYTES = 65536; -const UINT D3D12_TRACKED_WORKLOAD_MAX_INSTANCES = 32; -const UINT D3D12_UAV_COUNTER_PLACEMENT_ALIGNMENT = 4096; -const UINT D3D12_UAV_SLOT_COUNT = 64; -const UINT D3D12_UNBOUND_MEMORY_ACCESS_RESULT = 0; -const UINT D3D12_VIDEO_DECODE_MAX_ARGUMENTS = 10; -const UINT D3D12_VIDEO_DECODE_MAX_HISTOGRAM_COMPONENTS = 4; -const UINT D3D12_VIDEO_DECODE_MIN_BITSTREAM_OFFSET_ALIGNMENT = 256; -const UINT D3D12_VIDEO_DECODE_MIN_HISTOGRAM_OFFSET_ALIGNMENT = 256; -const UINT D3D12_VIDEO_DECODE_STATUS_MACROBLOCKS_AFFECTED_UNKNOWN = 0xffffffff; -const UINT D3D12_VIDEO_ENCODER_AV1_INVALID_DPB_RESOURCE_INDEX = 0xFF; -const UINT D3D12_VIDEO_ENCODER_AV1_MAX_TILE_COLS = 64; -const UINT D3D12_VIDEO_ENCODER_AV1_MAX_TILE_ROWS = 64; -const UINT D3D12_VIDEO_ENCODER_AV1_SUPERRES_DENOM_MIN = 9; -const UINT D3D12_VIDEO_ENCODER_AV1_SUPERRES_NUM = 8; -const UINT D3D12_VIDEO_PROCESS_MAX_FILTERS = 32; -const UINT D3D12_VIDEO_PROCESS_STEREO_VIEWS = 2; -const UINT D3D12_VIEWPORT_AND_SCISSORRECT_MAX_INDEX = 15; -const UINT D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE = 16; -const UINT D3D12_VIEWPORT_BOUNDS_MAX = 32767; -const INT D3D12_VIEWPORT_BOUNDS_MIN = -32768; -const UINT D3D12_VS_INPUT_REGISTER_COMPONENTS = 4; -const UINT D3D12_VS_INPUT_REGISTER_COMPONENT_BIT_COUNT = 32; -const UINT D3D12_VS_INPUT_REGISTER_COUNT = 32; -const UINT D3D12_VS_INPUT_REGISTER_READS_PER_INST = 2; -const UINT D3D12_VS_INPUT_REGISTER_READ_PORTS = 1; -const UINT D3D12_VS_OUTPUT_REGISTER_COMPONENTS = 4; -const UINT D3D12_VS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT = 32; -const UINT D3D12_VS_OUTPUT_REGISTER_COUNT = 32; -const UINT D3D12_WHQL_CONTEXT_COUNT_FOR_RESOURCE_LIMIT = 10; -const UINT D3D12_WHQL_DRAWINDEXED_INDEX_COUNT_2_TO_EXP = 25; -const UINT D3D12_WHQL_DRAW_VERTEX_COUNT_2_TO_EXP = 25; -const UINT D3D12_WORK_GRAPHS_BACKING_MEMORY_ALIGNMENT_IN_BYTES = 8; -const UINT D3D12_WORK_GRAPHS_MAX_NODE_DEPTH = 32; -cpp_quote( "#endif" ) - - -// Forward declarations -interface ID3D12CommandQueue; - - -typedef UINT64 D3D12_GPU_VIRTUAL_ADDRESS; - -typedef enum D3D12_COMMAND_LIST_TYPE -{ - D3D12_COMMAND_LIST_TYPE_DIRECT = 0, - D3D12_COMMAND_LIST_TYPE_BUNDLE = 1, - D3D12_COMMAND_LIST_TYPE_COMPUTE = 2, - D3D12_COMMAND_LIST_TYPE_COPY = 3, - D3D12_COMMAND_LIST_TYPE_VIDEO_DECODE = 4, - D3D12_COMMAND_LIST_TYPE_VIDEO_PROCESS = 5, - D3D12_COMMAND_LIST_TYPE_VIDEO_ENCODE = 6, - - D3D12_COMMAND_LIST_TYPE_NONE = -1, - -} D3D12_COMMAND_LIST_TYPE; - -typedef enum D3D12_COMMAND_QUEUE_FLAGS -{ - D3D12_COMMAND_QUEUE_FLAG_NONE = 0x0, - D3D12_COMMAND_QUEUE_FLAG_DISABLE_GPU_TIMEOUT = 0x1, -} D3D12_COMMAND_QUEUE_FLAGS; -cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_COMMAND_QUEUE_FLAGS )" ) - -typedef enum D3D12_COMMAND_QUEUE_PRIORITY -{ - D3D12_COMMAND_QUEUE_PRIORITY_NORMAL = 0, - D3D12_COMMAND_QUEUE_PRIORITY_HIGH = 100, - D3D12_COMMAND_QUEUE_PRIORITY_GLOBAL_REALTIME = 10000 -} D3D12_COMMAND_QUEUE_PRIORITY; - -typedef struct D3D12_COMMAND_QUEUE_DESC -{ - D3D12_COMMAND_LIST_TYPE Type; - INT Priority; - D3D12_COMMAND_QUEUE_FLAGS Flags; - UINT NodeMask; -} D3D12_COMMAND_QUEUE_DESC; - -typedef enum D3D12_PRIMITIVE_TOPOLOGY_TYPE -{ - D3D12_PRIMITIVE_TOPOLOGY_TYPE_UNDEFINED = 0, - D3D12_PRIMITIVE_TOPOLOGY_TYPE_POINT = 1, - D3D12_PRIMITIVE_TOPOLOGY_TYPE_LINE = 2, - D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE = 3, - D3D12_PRIMITIVE_TOPOLOGY_TYPE_PATCH = 4 -} D3D12_PRIMITIVE_TOPOLOGY_TYPE; - -typedef enum D3D12_INPUT_CLASSIFICATION -{ - D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA = 0, - D3D12_INPUT_CLASSIFICATION_PER_INSTANCE_DATA = 1 -} D3D12_INPUT_CLASSIFICATION; - -typedef struct D3D12_INPUT_ELEMENT_DESC -{ - LPCSTR SemanticName; - UINT SemanticIndex; - DXGI_FORMAT Format; - UINT InputSlot; - UINT AlignedByteOffset; - D3D12_INPUT_CLASSIFICATION InputSlotClass; - UINT InstanceDataStepRate; -} D3D12_INPUT_ELEMENT_DESC; - -// Keep FILL_MODE values in sync with earlier DX versions (HW consumes values directly). -typedef enum D3D12_FILL_MODE -{ - // 1 was POINT in D3D, unused in D3D12 - D3D12_FILL_MODE_WIREFRAME = 2, - D3D12_FILL_MODE_SOLID = 3 -} D3D12_FILL_MODE; - -typedef D3D_PRIMITIVE_TOPOLOGY D3D12_PRIMITIVE_TOPOLOGY; - -typedef D3D_PRIMITIVE D3D12_PRIMITIVE; - -// Keep CULL_MODE values in sync with earlier DX versions (HW consumes values directly). -typedef enum D3D12_CULL_MODE -{ - D3D12_CULL_MODE_NONE = 1, - D3D12_CULL_MODE_FRONT = 2, - D3D12_CULL_MODE_BACK = 3 -} D3D12_CULL_MODE; - -typedef struct D3D12_SO_DECLARATION_ENTRY -{ - UINT Stream; - LPCSTR SemanticName; - UINT SemanticIndex; - BYTE StartComponent; - BYTE ComponentCount; - BYTE OutputSlot; -} D3D12_SO_DECLARATION_ENTRY; - -typedef struct D3D12_VIEWPORT -{ - FLOAT TopLeftX; - FLOAT TopLeftY; - FLOAT Width; - FLOAT Height; - FLOAT MinDepth; - FLOAT MaxDepth; -} D3D12_VIEWPORT; - - -typedef RECT D3D12_RECT; - - -typedef struct D3D12_BOX -{ - UINT left; - UINT top; - UINT front; - UINT right; - UINT bottom; - UINT back; -} D3D12_BOX; - -//-------------------------------------------------------------------------------------------------------- -// The system LUID struct isn't defined in wtypes, so we repeat it here just -// for the MIDL compiler. -cpp_quote("#ifdef __midl") -cpp_quote("#ifndef LUID_DEFINED") -cpp_quote("#define LUID_DEFINED 1") -typedef struct __LUID { - DWORD LowPart; - LONG HighPart; -} LUID, * PLUID; -cpp_quote("#endif") -cpp_quote("#endif") - - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// -// Depth-Stencil State -// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -// Keep COMPARISON_FUNC values in sync with earlier DX versions (HW consumes values directly). -typedef enum D3D12_COMPARISON_FUNC -{ - D3D12_COMPARISON_FUNC_NONE = 0, - D3D12_COMPARISON_FUNC_NEVER = 1, - D3D12_COMPARISON_FUNC_LESS = 2, - D3D12_COMPARISON_FUNC_EQUAL = 3, - D3D12_COMPARISON_FUNC_LESS_EQUAL = 4, - D3D12_COMPARISON_FUNC_GREATER = 5, - D3D12_COMPARISON_FUNC_NOT_EQUAL = 6, - D3D12_COMPARISON_FUNC_GREATER_EQUAL = 7, - D3D12_COMPARISON_FUNC_ALWAYS = 8 -} D3D12_COMPARISON_FUNC; - -typedef enum D3D12_DEPTH_WRITE_MASK -{ - D3D12_DEPTH_WRITE_MASK_ZERO = 0, - D3D12_DEPTH_WRITE_MASK_ALL = 1 -} D3D12_DEPTH_WRITE_MASK; - -// Keep STENCILOP values in sync with earlier DX versions (HW consumes values directly). -typedef enum D3D12_STENCIL_OP -{ - D3D12_STENCIL_OP_KEEP = 1, - D3D12_STENCIL_OP_ZERO = 2, - D3D12_STENCIL_OP_REPLACE = 3, - D3D12_STENCIL_OP_INCR_SAT = 4, - D3D12_STENCIL_OP_DECR_SAT = 5, - D3D12_STENCIL_OP_INVERT = 6, - D3D12_STENCIL_OP_INCR = 7, - D3D12_STENCIL_OP_DECR = 8 -} D3D12_STENCIL_OP; - -typedef struct D3D12_DEPTH_STENCILOP_DESC -{ - D3D12_STENCIL_OP StencilFailOp; - D3D12_STENCIL_OP StencilDepthFailOp; - D3D12_STENCIL_OP StencilPassOp; - D3D12_COMPARISON_FUNC StencilFunc; -} D3D12_DEPTH_STENCILOP_DESC; - -typedef struct D3D12_DEPTH_STENCIL_DESC -{ - BOOL DepthEnable; - D3D12_DEPTH_WRITE_MASK DepthWriteMask; - D3D12_COMPARISON_FUNC DepthFunc; - BOOL StencilEnable; - UINT8 StencilReadMask; - UINT8 StencilWriteMask; - D3D12_DEPTH_STENCILOP_DESC FrontFace; - D3D12_DEPTH_STENCILOP_DESC BackFace; -} D3D12_DEPTH_STENCIL_DESC; - -typedef struct D3D12_DEPTH_STENCIL_DESC1 -{ - BOOL DepthEnable; - D3D12_DEPTH_WRITE_MASK DepthWriteMask; - D3D12_COMPARISON_FUNC DepthFunc; - BOOL StencilEnable; - UINT8 StencilReadMask; - UINT8 StencilWriteMask; - D3D12_DEPTH_STENCILOP_DESC FrontFace; - D3D12_DEPTH_STENCILOP_DESC BackFace; - BOOL DepthBoundsTestEnable; -} D3D12_DEPTH_STENCIL_DESC1; - -// Front/back face independent stencil masks -typedef struct D3D12_DEPTH_STENCILOP_DESC1 -{ - D3D12_STENCIL_OP StencilFailOp; - D3D12_STENCIL_OP StencilDepthFailOp; - D3D12_STENCIL_OP StencilPassOp; - D3D12_COMPARISON_FUNC StencilFunc; - UINT8 StencilReadMask; - UINT8 StencilWriteMask; -} D3D12_DEPTH_STENCILOP_DESC1; - -typedef struct D3D12_DEPTH_STENCIL_DESC2 -{ - BOOL DepthEnable; - D3D12_DEPTH_WRITE_MASK DepthWriteMask; - D3D12_COMPARISON_FUNC DepthFunc; - BOOL StencilEnable; - D3D12_DEPTH_STENCILOP_DESC1 FrontFace; - D3D12_DEPTH_STENCILOP_DESC1 BackFace; - BOOL DepthBoundsTestEnable; -} D3D12_DEPTH_STENCIL_DESC2; - - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// -// Blend State -// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -// Keep BLEND values in sync with earlier DX versions (HW consumes values directly). -typedef enum D3D12_BLEND -{ - D3D12_BLEND_ZERO = 1, - D3D12_BLEND_ONE = 2, - D3D12_BLEND_SRC_COLOR = 3, // PS output oN.rgb (N is current RT being blended) - D3D12_BLEND_INV_SRC_COLOR = 4, // 1.0f - PS output oN.rgb - D3D12_BLEND_SRC_ALPHA = 5, // PS output oN.a - D3D12_BLEND_INV_SRC_ALPHA = 6, // 1.0f - PS output oN.a - D3D12_BLEND_DEST_ALPHA = 7, // RT(N).a (N is current RT being blended) - D3D12_BLEND_INV_DEST_ALPHA = 8, // 1.0f - RT(N).a - D3D12_BLEND_DEST_COLOR = 9, // RT(N).rgb - D3D12_BLEND_INV_DEST_COLOR = 10,// 1.0f - RT(N).rgb - D3D12_BLEND_SRC_ALPHA_SAT = 11,// (f,f,f,1), f = min(1 - RT(N).a, oN.a) - // 12 reserved (was BOTHSRCALPHA) - // 13 reserved (was BOTHSRCALPHA) - D3D12_BLEND_BLEND_FACTOR = 14, - D3D12_BLEND_INV_BLEND_FACTOR = 15, - D3D12_BLEND_SRC1_COLOR = 16, // PS output o1.rgb - D3D12_BLEND_INV_SRC1_COLOR = 17, // 1.0f - PS output o1.rgb - D3D12_BLEND_SRC1_ALPHA = 18, // PS output o1.a - D3D12_BLEND_INV_SRC1_ALPHA = 19, // 1.0f - PS output o1.a - D3D12_BLEND_ALPHA_FACTOR = 20, - D3D12_BLEND_INV_ALPHA_FACTOR = 21 -} D3D12_BLEND; - -// Keep BLENDOP values in sync with earlier DX versions (HW consumes values directly). -typedef enum D3D12_BLEND_OP -{ - D3D12_BLEND_OP_ADD = 1, - D3D12_BLEND_OP_SUBTRACT = 2, - D3D12_BLEND_OP_REV_SUBTRACT = 3, - D3D12_BLEND_OP_MIN = 4, // min semantics are like min shader instruction - D3D12_BLEND_OP_MAX = 5, // max semantics are like max shader instruction -} D3D12_BLEND_OP; - -typedef enum D3D12_COLOR_WRITE_ENABLE -{ - D3D12_COLOR_WRITE_ENABLE_RED = 1, - D3D12_COLOR_WRITE_ENABLE_GREEN = 2, - D3D12_COLOR_WRITE_ENABLE_BLUE = 4, - D3D12_COLOR_WRITE_ENABLE_ALPHA = 8, - D3D12_COLOR_WRITE_ENABLE_ALL = (D3D12_COLOR_WRITE_ENABLE_RED|D3D12_COLOR_WRITE_ENABLE_GREEN| - D3D12_COLOR_WRITE_ENABLE_BLUE|D3D12_COLOR_WRITE_ENABLE_ALPHA), -} D3D12_COLOR_WRITE_ENABLE; - -typedef enum D3D12_LOGIC_OP -{ - // Operation: - // (s == PS output, d = RTV contents) - D3D12_LOGIC_OP_CLEAR = 0, // 0 - D3D12_LOGIC_OP_SET, // 1 - D3D12_LOGIC_OP_COPY, // s - D3D12_LOGIC_OP_COPY_INVERTED, // ~s - D3D12_LOGIC_OP_NOOP, // d - D3D12_LOGIC_OP_INVERT, // ~d - D3D12_LOGIC_OP_AND, // s & d - D3D12_LOGIC_OP_NAND, // ~(s & d) - D3D12_LOGIC_OP_OR, // s | d - D3D12_LOGIC_OP_NOR, // ~(s | d) - D3D12_LOGIC_OP_XOR, // s ^ d - D3D12_LOGIC_OP_EQUIV, // ~(s ^ d) - D3D12_LOGIC_OP_AND_REVERSE, // s & ~d - D3D12_LOGIC_OP_AND_INVERTED, // ~s & d - D3D12_LOGIC_OP_OR_REVERSE, // s | ~d - D3D12_LOGIC_OP_OR_INVERTED, // ~s | d -} D3D12_LOGIC_OP; - -typedef struct D3D12_RENDER_TARGET_BLEND_DESC -{ - BOOL BlendEnable; - BOOL LogicOpEnable; // LogicOpEnable and BlendEnable can't both be true - D3D12_BLEND SrcBlend; - D3D12_BLEND DestBlend; - D3D12_BLEND_OP BlendOp; - D3D12_BLEND SrcBlendAlpha; - D3D12_BLEND DestBlendAlpha; - D3D12_BLEND_OP BlendOpAlpha; - D3D12_LOGIC_OP LogicOp; // applies to RGBA - UINT8 RenderTargetWriteMask; // D3D12_COLOR_WRITE_ENABLE -} D3D12_RENDER_TARGET_BLEND_DESC; - -typedef struct D3D12_BLEND_DESC -{ - BOOL AlphaToCoverageEnable; // relevant to multisample antialiasing only - BOOL IndependentBlendEnable; // if FALSE, then replicate the first entry in RenderTarget array to other entries - D3D12_RENDER_TARGET_BLEND_DESC RenderTarget[D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT]; -} D3D12_BLEND_DESC; - -cpp_quote( "/* Note, the array size for RenderTarget[] above is D3D12_SIMULTANEOUS_RENDERTARGET_COUNT. ") -cpp_quote( " IDL processing/generation of this header replaces the define; this comment is merely explaining what happened. */" ) - - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// -// Rasterizer State -// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -typedef enum D3D12_CONSERVATIVE_RASTERIZATION_MODE -{ - D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF = 0, // Default - D3D12_CONSERVATIVE_RASTERIZATION_MODE_ON = 1, -} D3D12_CONSERVATIVE_RASTERIZATION_MODE; - -typedef struct D3D12_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; -} D3D12_RASTERIZER_DESC; - -typedef struct D3D12_RASTERIZER_DESC1 -{ - D3D12_FILL_MODE FillMode; - D3D12_CULL_MODE CullMode; - BOOL FrontCounterClockwise; - FLOAT DepthBias; - FLOAT DepthBiasClamp; - FLOAT SlopeScaledDepthBias; - BOOL DepthClipEnable; - BOOL MultisampleEnable; - BOOL AntialiasedLineEnable; - UINT ForcedSampleCount; - D3D12_CONSERVATIVE_RASTERIZATION_MODE ConservativeRaster; -} D3D12_RASTERIZER_DESC1; - -typedef enum D3D12_LINE_RASTERIZATION_MODE -{ - D3D12_LINE_RASTERIZATION_MODE_ALIASED, - D3D12_LINE_RASTERIZATION_MODE_ALPHA_ANTIALIASED, - D3D12_LINE_RASTERIZATION_MODE_QUADRILATERAL_WIDE, - D3D12_LINE_RASTERIZATION_MODE_QUADRILATERAL_NARROW, -} D3D12_LINE_RASTERIZATION_MODE; - -typedef struct D3D12_RASTERIZER_DESC2 -{ - D3D12_FILL_MODE FillMode; - D3D12_CULL_MODE CullMode; - BOOL FrontCounterClockwise; - FLOAT DepthBias; - FLOAT DepthBiasClamp; - FLOAT SlopeScaledDepthBias; - BOOL DepthClipEnable; - D3D12_LINE_RASTERIZATION_MODE LineRasterizationMode; - UINT ForcedSampleCount; - D3D12_CONSERVATIVE_RASTERIZATION_MODE ConservativeRaster; -} D3D12_RASTERIZER_DESC2; - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// -// Pipeline State v1 -// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -[ uuid( c54a6b66-72df-4ee8-8be5-a946a1429214 ), object, local, pointer_default( unique ) ] -interface ID3D12RootSignature - : ID3D12DeviceChild -{ -} - -typedef struct D3D12_SHADER_BYTECODE -{ - [annotation("_Field_size_bytes_full_(BytecodeLength)")] const void* pShaderBytecode; - SIZE_T BytecodeLength; -} D3D12_SHADER_BYTECODE; - -typedef struct D3D12_STREAM_OUTPUT_DESC -{ - [annotation("_Field_size_full_(NumEntries)")] const D3D12_SO_DECLARATION_ENTRY* pSODeclaration; - UINT NumEntries; - [annotation("_Field_size_full_(NumStrides)")] const UINT* pBufferStrides; - UINT NumStrides; - UINT RasterizedStream; -} D3D12_STREAM_OUTPUT_DESC; - -typedef struct D3D12_INPUT_LAYOUT_DESC -{ - [annotation("_Field_size_full_(NumElements)")] const D3D12_INPUT_ELEMENT_DESC* pInputElementDescs; - UINT NumElements; -} D3D12_INPUT_LAYOUT_DESC; - -typedef enum D3D12_INDEX_BUFFER_STRIP_CUT_VALUE -{ - D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_DISABLED = 0, - D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_0xFFFF = 1, - D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_0xFFFFFFFF = 2 -} D3D12_INDEX_BUFFER_STRIP_CUT_VALUE; - -typedef enum D3D12_STANDARD_MULTISAMPLE_QUALITY_LEVELS -{ - D3D12_STANDARD_MULTISAMPLE_PATTERN = 0xffffffff, - D3D12_CENTER_MULTISAMPLE_PATTERN = 0xfffffffe -} D3D12_STANDARD_MULTISAMPLE_QUALITY_LEVELS; - -typedef struct D3D12_CACHED_PIPELINE_STATE -{ - [annotation("_Field_size_bytes_full_(CachedBlobSizeInBytes)")] const void* pCachedBlob; - SIZE_T CachedBlobSizeInBytes; -} D3D12_CACHED_PIPELINE_STATE; - -typedef enum D3D12_PIPELINE_STATE_FLAGS -{ - D3D12_PIPELINE_STATE_FLAG_NONE = 0x0, - D3D12_PIPELINE_STATE_FLAG_TOOL_DEBUG = 0x1, - D3D12_PIPELINE_STATE_FLAG_DYNAMIC_DEPTH_BIAS = 0x4, - D3D12_PIPELINE_STATE_FLAG_DYNAMIC_INDEX_BUFFER_STRIP_CUT = 0x8, - -} D3D12_PIPELINE_STATE_FLAGS; -cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_PIPELINE_STATE_FLAGS )" ) - -typedef struct D3D12_GRAPHICS_PIPELINE_STATE_DESC -{ - ID3D12RootSignature* pRootSignature; - D3D12_SHADER_BYTECODE VS; - D3D12_SHADER_BYTECODE PS; - D3D12_SHADER_BYTECODE DS; - D3D12_SHADER_BYTECODE HS; - D3D12_SHADER_BYTECODE GS; - D3D12_STREAM_OUTPUT_DESC StreamOutput; - D3D12_BLEND_DESC BlendState; - UINT SampleMask; - D3D12_RASTERIZER_DESC RasterizerState; - D3D12_DEPTH_STENCIL_DESC DepthStencilState; - D3D12_INPUT_LAYOUT_DESC InputLayout; - D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue; - D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType; - UINT NumRenderTargets; - DXGI_FORMAT RTVFormats[ D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT ]; - DXGI_FORMAT DSVFormat; - DXGI_SAMPLE_DESC SampleDesc; - UINT NodeMask; - D3D12_CACHED_PIPELINE_STATE CachedPSO; - D3D12_PIPELINE_STATE_FLAGS Flags; -} D3D12_GRAPHICS_PIPELINE_STATE_DESC; - -typedef struct D3D12_COMPUTE_PIPELINE_STATE_DESC -{ - ID3D12RootSignature* pRootSignature; - D3D12_SHADER_BYTECODE CS; - UINT NodeMask; - D3D12_CACHED_PIPELINE_STATE CachedPSO; - D3D12_PIPELINE_STATE_FLAGS Flags; -} D3D12_COMPUTE_PIPELINE_STATE_DESC; - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// -// Pipeline State v2 -// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -struct D3D12_RT_FORMAT_ARRAY -{ - DXGI_FORMAT RTFormats[D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT]; - UINT NumRenderTargets; -}; - -typedef struct D3D12_PIPELINE_STATE_STREAM_DESC -{ - [annotation("_In_")] SIZE_T SizeInBytes; - [annotation("_In_reads_(_Inexpressible_(\"Dependent on size of subobjects\"))")] void* pPipelineStateSubobjectStream; -} D3D12_PIPELINE_STATE_STREAM_DESC; - -typedef enum D3D12_PIPELINE_STATE_SUBOBJECT_TYPE -{ - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_ROOT_SIGNATURE, // ID3D12RootSignature* - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VS, // D3D12_SHADER_BYTECODE - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PS, // D3D12_SHADER_BYTECODE - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DS, // D3D12_SHADER_BYTECODE - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_HS, // D3D12_SHADER_BYTECODE - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_GS, // D3D12_SHADER_BYTECODE - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CS, // D3D12_SHADER_BYTECODE - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_STREAM_OUTPUT, // D3D12_STREAM_OUTPUT_DESC - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_BLEND, // D3D12_BLEND_DESC - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_MASK, // UINT - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER, // D3D12_RASTERIZER_DESC - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL, // D3D12_DEPTH_STENCIL_DESC - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_INPUT_LAYOUT, // D3D12_INPUT_LAYOUT_DESC - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_IB_STRIP_CUT_VALUE, // D3D12_INDEX_BUFFER_STRIP_CUT_VALUE - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY, // D3D12_PRIMITIVE_TOPOLOGY_TYPE - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RENDER_TARGET_FORMATS, // D3D12_RT_FORMAT_ARRAY - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL_FORMAT, // DXGI_FORMAT - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_DESC, // DXGI_SAMPLE_DESC - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_NODE_MASK, // UINT - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CACHED_PSO, // D3D12_CACHED_PIPELINE_STATE - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_FLAGS, // D3D12_PIPELINE_STATE_FLAGS - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1, // D3D12_DEPTH_STENCIL_DESC1 - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VIEW_INSTANCING, // D3D12_VIEW_INSTANCING_DESC - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_AS = 24, // D3D12_SHADER_BYTECODE - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MS = 25, // D3D12_SHADER_BYTECODE - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL2 = 26, // D3D12_DEPTH_STENCIL_DESC2 - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER1 = 27, // D3D12_RASTERIZER_DESC1 - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER2 = 28, // D3D12_RASTERIZER_DESC2 - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MAX_VALID, -} D3D12_PIPELINE_STATE_SUBOBJECT_TYPE; - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// -// D3D12 Caps -// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -typedef enum D3D12_FEATURE -{ - D3D12_FEATURE_D3D12_OPTIONS = 0, - D3D12_FEATURE_ARCHITECTURE = 1, // Deprecated by D3D12_FEATURE_ARCHITECTURE1 - D3D12_FEATURE_FEATURE_LEVELS = 2, - D3D12_FEATURE_FORMAT_SUPPORT = 3, - D3D12_FEATURE_MULTISAMPLE_QUALITY_LEVELS = 4, - D3D12_FEATURE_FORMAT_INFO = 5, - D3D12_FEATURE_GPU_VIRTUAL_ADDRESS_SUPPORT = 6, - D3D12_FEATURE_SHADER_MODEL = 7, - D3D12_FEATURE_D3D12_OPTIONS1 = 8, - D3D12_FEATURE_PROTECTED_RESOURCE_SESSION_SUPPORT = 10, - D3D12_FEATURE_ROOT_SIGNATURE = 12, - D3D12_FEATURE_ARCHITECTURE1 = 16, - D3D12_FEATURE_D3D12_OPTIONS2 = 18, - D3D12_FEATURE_SHADER_CACHE = 19, - D3D12_FEATURE_COMMAND_QUEUE_PRIORITY = 20, - D3D12_FEATURE_D3D12_OPTIONS3 = 21, - D3D12_FEATURE_EXISTING_HEAPS = 22, - D3D12_FEATURE_D3D12_OPTIONS4 = 23, - D3D12_FEATURE_SERIALIZATION = 24, - D3D12_FEATURE_CROSS_NODE = 25, - D3D12_FEATURE_D3D12_OPTIONS5 = 27, - D3D12_FEATURE_DISPLAYABLE = 28, - D3D12_FEATURE_D3D12_OPTIONS6 = 30, - D3D12_FEATURE_QUERY_META_COMMAND = 31, - D3D12_FEATURE_D3D12_OPTIONS7 = 32, - D3D12_FEATURE_PROTECTED_RESOURCE_SESSION_TYPE_COUNT = 33, - D3D12_FEATURE_PROTECTED_RESOURCE_SESSION_TYPES = 34, - D3D12_FEATURE_D3D12_OPTIONS8 = 36, - D3D12_FEATURE_D3D12_OPTIONS9 = 37, - D3D12_FEATURE_D3D12_OPTIONS10 = 39, - D3D12_FEATURE_D3D12_OPTIONS11 = 40, - D3D12_FEATURE_D3D12_OPTIONS12 = 41, - D3D12_FEATURE_D3D12_OPTIONS13 = 42, - D3D12_FEATURE_D3D12_OPTIONS14 = 43, - D3D12_FEATURE_D3D12_OPTIONS15 = 44, - D3D12_FEATURE_D3D12_OPTIONS16 = 45, - D3D12_FEATURE_D3D12_OPTIONS17 = 46, - D3D12_FEATURE_D3D12_OPTIONS18 = 47, - D3D12_FEATURE_D3D12_OPTIONS19 = 48, - D3D12_FEATURE_D3D12_OPTIONS20 = 49, - D3D12_FEATURE_PREDICATION = 50, - D3D12_FEATURE_PLACED_RESOURCE_SUPPORT_INFO = 51, - D3D12_FEATURE_HARDWARE_COPY = 52, - D3D12_FEATURE_D3D12_OPTIONS21 = 53, - D3D12_FEATURE_BYTECODE_BYPASS_HASH_SUPPORTED = 57, -} D3D12_FEATURE; - -typedef enum D3D12_SHADER_MIN_PRECISION_SUPPORT -{ - D3D12_SHADER_MIN_PRECISION_SUPPORT_NONE = 0x0, - D3D12_SHADER_MIN_PRECISION_SUPPORT_10_BIT = 0x1, - D3D12_SHADER_MIN_PRECISION_SUPPORT_16_BIT = 0x2 -} D3D12_SHADER_MIN_PRECISION_SUPPORT; -cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_SHADER_MIN_PRECISION_SUPPORT )" ) - -typedef enum D3D12_TILED_RESOURCES_TIER -{ - D3D12_TILED_RESOURCES_TIER_NOT_SUPPORTED = 0, - D3D12_TILED_RESOURCES_TIER_1 = 1, - D3D12_TILED_RESOURCES_TIER_2 = 2, - D3D12_TILED_RESOURCES_TIER_3 = 3, - D3D12_TILED_RESOURCES_TIER_4 = 4, -} D3D12_TILED_RESOURCES_TIER; - -typedef enum D3D12_RESOURCE_BINDING_TIER -{ - D3D12_RESOURCE_BINDING_TIER_1 = 1, - D3D12_RESOURCE_BINDING_TIER_2 = 2, - D3D12_RESOURCE_BINDING_TIER_3 = 3, -} D3D12_RESOURCE_BINDING_TIER; - -typedef enum D3D12_CONSERVATIVE_RASTERIZATION_TIER { - D3D12_CONSERVATIVE_RASTERIZATION_TIER_NOT_SUPPORTED = 0, - D3D12_CONSERVATIVE_RASTERIZATION_TIER_1 = 1, - D3D12_CONSERVATIVE_RASTERIZATION_TIER_2 = 2, - D3D12_CONSERVATIVE_RASTERIZATION_TIER_3 = 3, -} D3D12_CONSERVATIVE_RASTERIZATION_TIER; - - -typedef enum D3D12_FORMAT_SUPPORT1 -{ - D3D12_FORMAT_SUPPORT1_NONE = 0, - D3D12_FORMAT_SUPPORT1_BUFFER = 0x00000001, - D3D12_FORMAT_SUPPORT1_IA_VERTEX_BUFFER = 0x00000002, - D3D12_FORMAT_SUPPORT1_IA_INDEX_BUFFER = 0x00000004, - D3D12_FORMAT_SUPPORT1_SO_BUFFER = 0x00000008, - D3D12_FORMAT_SUPPORT1_TEXTURE1D = 0x00000010, - D3D12_FORMAT_SUPPORT1_TEXTURE2D = 0x00000020, - D3D12_FORMAT_SUPPORT1_TEXTURE3D = 0x00000040, - D3D12_FORMAT_SUPPORT1_TEXTURECUBE = 0x00000080, - D3D12_FORMAT_SUPPORT1_SHADER_LOAD = 0x00000100, - D3D12_FORMAT_SUPPORT1_SHADER_SAMPLE = 0x00000200, - D3D12_FORMAT_SUPPORT1_SHADER_SAMPLE_COMPARISON = 0x00000400, - D3D12_FORMAT_SUPPORT1_SHADER_SAMPLE_MONO_TEXT = 0x00000800, - D3D12_FORMAT_SUPPORT1_MIP = 0x00001000, - D3D12_FORMAT_SUPPORT1_RENDER_TARGET = 0x00004000, - D3D12_FORMAT_SUPPORT1_BLENDABLE = 0x00008000, - D3D12_FORMAT_SUPPORT1_DEPTH_STENCIL = 0x00010000, - D3D12_FORMAT_SUPPORT1_MULTISAMPLE_RESOLVE = 0x00040000, - D3D12_FORMAT_SUPPORT1_DISPLAY = 0x00080000, - D3D12_FORMAT_SUPPORT1_CAST_WITHIN_BIT_LAYOUT = 0x00100000, - D3D12_FORMAT_SUPPORT1_MULTISAMPLE_RENDERTARGET = 0x00200000, - D3D12_FORMAT_SUPPORT1_MULTISAMPLE_LOAD = 0x00400000, - D3D12_FORMAT_SUPPORT1_SHADER_GATHER = 0x00800000, - D3D12_FORMAT_SUPPORT1_BACK_BUFFER_CAST = 0x01000000, - D3D12_FORMAT_SUPPORT1_TYPED_UNORDERED_ACCESS_VIEW = 0x02000000, - D3D12_FORMAT_SUPPORT1_SHADER_GATHER_COMPARISON = 0x04000000, - D3D12_FORMAT_SUPPORT1_DECODER_OUTPUT = 0x08000000, - D3D12_FORMAT_SUPPORT1_VIDEO_PROCESSOR_OUTPUT = 0x10000000, - D3D12_FORMAT_SUPPORT1_VIDEO_PROCESSOR_INPUT = 0x20000000, - D3D12_FORMAT_SUPPORT1_VIDEO_ENCODER = 0x40000000, -} D3D12_FORMAT_SUPPORT1; -cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_FORMAT_SUPPORT1 )" ) - -typedef enum D3D12_FORMAT_SUPPORT2 -{ - D3D12_FORMAT_SUPPORT2_NONE = 0, - D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_ADD = 0x00000001, - D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_BITWISE_OPS = 0x00000002, - D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_COMPARE_STORE_OR_COMPARE_EXCHANGE = 0x00000004, - D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_EXCHANGE = 0x00000008, - D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_SIGNED_MIN_OR_MAX = 0x00000010, - D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_UNSIGNED_MIN_OR_MAX = 0x00000020, - D3D12_FORMAT_SUPPORT2_UAV_TYPED_LOAD = 0x00000040, - D3D12_FORMAT_SUPPORT2_UAV_TYPED_STORE = 0x00000080, - D3D12_FORMAT_SUPPORT2_OUTPUT_MERGER_LOGIC_OP = 0x00000100, - D3D12_FORMAT_SUPPORT2_TILED = 0x00000200, - D3D12_FORMAT_SUPPORT2_MULTIPLANE_OVERLAY = 0x00004000, - D3D12_FORMAT_SUPPORT2_SAMPLER_FEEDBACK = 0x00008000, -} D3D12_FORMAT_SUPPORT2; -cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_FORMAT_SUPPORT2 )" ) - -typedef enum D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS -{ - D3D12_MULTISAMPLE_QUALITY_LEVELS_FLAG_NONE = 0, - D3D12_MULTISAMPLE_QUALITY_LEVELS_FLAG_TILED_RESOURCE = 0x00000001, -} D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS; -cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS )" ) - -typedef enum D3D12_CROSS_NODE_SHARING_TIER -{ - D3D12_CROSS_NODE_SHARING_TIER_NOT_SUPPORTED = 0, - D3D12_CROSS_NODE_SHARING_TIER_1_EMULATED = 1, - D3D12_CROSS_NODE_SHARING_TIER_1 = 2, - D3D12_CROSS_NODE_SHARING_TIER_2 = 3, - D3D12_CROSS_NODE_SHARING_TIER_3 = 4, -} D3D12_CROSS_NODE_SHARING_TIER; - -typedef enum D3D12_RESOURCE_HEAP_TIER -{ - D3D12_RESOURCE_HEAP_TIER_1 = 1, - D3D12_RESOURCE_HEAP_TIER_2 = 2, -} D3D12_RESOURCE_HEAP_TIER; - -typedef enum D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER -{ - D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER_NOT_SUPPORTED = 0, - D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER_1 = 1, - D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER_2 = 2, -} D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER; - -typedef enum D3D12_VIEW_INSTANCING_TIER -{ - D3D12_VIEW_INSTANCING_TIER_NOT_SUPPORTED = 0, - D3D12_VIEW_INSTANCING_TIER_1 = 1, - D3D12_VIEW_INSTANCING_TIER_2 = 2, - D3D12_VIEW_INSTANCING_TIER_3 = 3, -} D3D12_VIEW_INSTANCING_TIER; - - -typedef enum D3D12_WORK_GRAPHS_TIER { - D3D12_WORK_GRAPHS_TIER_NOT_SUPPORTED = 0, - D3D12_WORK_GRAPHS_TIER_1_0 = 10, -} D3D12_WORK_GRAPHS_TIER; - - -// D3D12_FEATURE_D3D12_OPTIONS -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS -{ - [annotation("_Out_")] BOOL DoublePrecisionFloatShaderOps; - [annotation("_Out_")] BOOL OutputMergerLogicOp; - [annotation("_Out_")] D3D12_SHADER_MIN_PRECISION_SUPPORT MinPrecisionSupport; - [annotation("_Out_")] D3D12_TILED_RESOURCES_TIER TiledResourcesTier; - [annotation("_Out_")] D3D12_RESOURCE_BINDING_TIER ResourceBindingTier; - [annotation("_Out_")] BOOL PSSpecifiedStencilRefSupported; - [annotation("_Out_")] BOOL TypedUAVLoadAdditionalFormats; - [annotation("_Out_")] BOOL ROVsSupported; - [annotation("_Out_")] D3D12_CONSERVATIVE_RASTERIZATION_TIER ConservativeRasterizationTier; - [annotation("_Out_")] UINT MaxGPUVirtualAddressBitsPerResource; - [annotation("_Out_")] BOOL StandardSwizzle64KBSupported; - [annotation("_Out_")] D3D12_CROSS_NODE_SHARING_TIER CrossNodeSharingTier; - [annotation("_Out_")] BOOL CrossAdapterRowMajorTextureSupported; - [annotation("_Out_")] BOOL VPAndRTArrayIndexFromAnyShaderFeedingRasterizerSupportedWithoutGSEmulation; - [annotation("_Out_")] D3D12_RESOURCE_HEAP_TIER ResourceHeapTier; -} D3D12_FEATURE_DATA_D3D12_OPTIONS; - -// D3D12_FEATURE_D3D12_OPTIONS1 -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS1 -{ - [annotation("_Out_")] BOOL WaveOps; - [annotation("_Out_")] UINT WaveLaneCountMin; - [annotation("_Out_")] UINT WaveLaneCountMax; - [annotation("_Out_")] UINT TotalLaneCount; - [annotation("_Out_")] BOOL ExpandedComputeResourceStates; - [annotation("_Out_")] BOOL Int64ShaderOps; -} D3D12_FEATURE_DATA_D3D12_OPTIONS1; - -// D3D12_FEATURE_D3D12_OPTIONS2 -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS2 -{ - [annotation("_Out_")] BOOL DepthBoundsTestSupported; - [annotation("_Out_")] D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER ProgrammableSamplePositionsTier; -} D3D12_FEATURE_DATA_D3D12_OPTIONS2; - -// D3D12_FEATURE_ROOT_SIGNATURE -typedef enum D3D_ROOT_SIGNATURE_VERSION -{ - D3D_ROOT_SIGNATURE_VERSION_1 = 0x1, - D3D_ROOT_SIGNATURE_VERSION_1_0 = 0x1, - D3D_ROOT_SIGNATURE_VERSION_1_1 = 0x2, - D3D_ROOT_SIGNATURE_VERSION_1_2 = 0x3, -} D3D_ROOT_SIGNATURE_VERSION; - -typedef struct D3D12_FEATURE_DATA_ROOT_SIGNATURE -{ - [annotation("_Inout_")] D3D_ROOT_SIGNATURE_VERSION HighestVersion; -} D3D12_FEATURE_DATA_ROOT_SIGNATURE; - -// D3D12_FEATURE_ARCHITECTURE -typedef struct D3D12_FEATURE_DATA_ARCHITECTURE // Deprecated by D3D12_FEATURE_DATA_ARCHITECTURE1 -{ - [annotation("_In_")] UINT NodeIndex; - [annotation("_Out_")] BOOL TileBasedRenderer; - [annotation("_Out_")] BOOL UMA; // Needed for applications to understand WRITE_COMBINE - [annotation("_Out_")] BOOL CacheCoherentUMA; // Only TRUE when UMA is also TRUE -} D3D12_FEATURE_DATA_ARCHITECTURE; - -// D3D12_FEATURE_ARCHITECTURE1 -typedef struct D3D12_FEATURE_DATA_ARCHITECTURE1 -{ - [annotation("_In_")] UINT NodeIndex; - [annotation("_Out_")] BOOL TileBasedRenderer; - [annotation("_Out_")] BOOL UMA; // Needed for applications to understand WRITE_COMBINE - [annotation("_Out_")] BOOL CacheCoherentUMA; // Only TRUE when UMA is also TRUE - [annotation("_Out_")] BOOL IsolatedMMU; // GPU accesses don't honor the same MMU functionality as the CPU -} D3D12_FEATURE_DATA_ARCHITECTURE1; - -// D3D12_FEATURE_FEATURE_LEVELS -typedef struct D3D12_FEATURE_DATA_FEATURE_LEVELS -{ - [annotation("_In_")] UINT NumFeatureLevels; - [annotation("_In_reads_(NumFeatureLevels)")] const D3D_FEATURE_LEVEL* pFeatureLevelsRequested; - [annotation("_Out_")] D3D_FEATURE_LEVEL MaxSupportedFeatureLevel; -} D3D12_FEATURE_DATA_FEATURE_LEVELS; - -// D3D_SHADER_MODEL -typedef enum D3D_SHADER_MODEL -{ - D3D_SHADER_MODEL_NONE = 0x0, // e.g MCDM Generic devices - D3D_SHADER_MODEL_5_1 = 0x51, - D3D_SHADER_MODEL_6_0 = 0x60, - D3D_SHADER_MODEL_6_1 = 0x61, - D3D_SHADER_MODEL_6_2 = 0x62, - D3D_SHADER_MODEL_6_3 = 0x63, - D3D_SHADER_MODEL_6_4 = 0x64, - D3D_SHADER_MODEL_6_5 = 0x65, - D3D_SHADER_MODEL_6_6 = 0x66, - D3D_SHADER_MODEL_6_7 = 0x67, - D3D_SHADER_MODEL_6_8 = 0x68, - D3D_SHADER_MODEL_6_9 = 0x69, - D3D_HIGHEST_SHADER_MODEL = D3D_SHADER_MODEL_6_9 -} D3D_SHADER_MODEL; - -typedef struct D3D12_FEATURE_DATA_SHADER_MODEL -{ - [annotation("_Inout_")] D3D_SHADER_MODEL HighestShaderModel; -} D3D12_FEATURE_DATA_SHADER_MODEL; - -// D3D12_FEATURE_FORMAT_SUPPORT -typedef struct D3D12_FEATURE_DATA_FORMAT_SUPPORT -{ - [annotation("_In_")] DXGI_FORMAT Format; - [annotation("_Out_")] D3D12_FORMAT_SUPPORT1 Support1; - [annotation("_Out_")] D3D12_FORMAT_SUPPORT2 Support2; -} D3D12_FEATURE_DATA_FORMAT_SUPPORT; - -// D3D12_FEATURE_MULTISAMPLE_QUALITY_LEVELS -typedef struct D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS -{ - [annotation("_In_")] DXGI_FORMAT Format; - [annotation("_In_")] UINT SampleCount; - [annotation("_In_")] D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS Flags; - [annotation("_Out_")] UINT NumQualityLevels; -} D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS; - -// D3D12_FEATURE_FORMAT_INFO -typedef struct D3D12_FEATURE_DATA_FORMAT_INFO -{ - DXGI_FORMAT Format; - UINT8 PlaneCount; -} D3D12_FEATURE_DATA_FORMAT_INFO; - -// D3D12_FEATURE_GPU_VIRTUAL_ADDRESS_SUPPORT -typedef struct D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT -{ - UINT MaxGPUVirtualAddressBitsPerResource; - UINT MaxGPUVirtualAddressBitsPerProcess; -} D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT; - - -typedef enum D3D12_SHADER_CACHE_SUPPORT_FLAGS -{ - D3D12_SHADER_CACHE_SUPPORT_NONE = 0x0, - D3D12_SHADER_CACHE_SUPPORT_SINGLE_PSO = 0x1, // Always supported - D3D12_SHADER_CACHE_SUPPORT_LIBRARY = 0x2, - D3D12_SHADER_CACHE_SUPPORT_AUTOMATIC_INPROC_CACHE = 0x4, - D3D12_SHADER_CACHE_SUPPORT_AUTOMATIC_DISK_CACHE = 0x8, - D3D12_SHADER_CACHE_SUPPORT_DRIVER_MANAGED_CACHE = 0x10, - D3D12_SHADER_CACHE_SUPPORT_SHADER_CONTROL_CLEAR = 0x20, - D3D12_SHADER_CACHE_SUPPORT_SHADER_SESSION_DELETE = 0x40 -} D3D12_SHADER_CACHE_SUPPORT_FLAGS; -cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_SHADER_CACHE_SUPPORT_FLAGS )" ) - -// D3D12_FEATURE_SHADER_CACHE -typedef struct D3D12_FEATURE_DATA_SHADER_CACHE -{ - [annotation("_Out_")] D3D12_SHADER_CACHE_SUPPORT_FLAGS SupportFlags; -} D3D12_FEATURE_DATA_SHADER_CACHE; - -// D3D12_FEATURE_COMMAND_QUEUE_PRIORITY -typedef struct D3D12_FEATURE_DATA_COMMAND_QUEUE_PRIORITY -{ - [annotation("_In_")] D3D12_COMMAND_LIST_TYPE CommandListType; - [annotation("_In_")] UINT Priority; - [annotation("_Out_")] BOOL PriorityForTypeIsSupported; -} D3D12_FEATURE_DATA_COMMAND_QUEUE_PRIORITY; - -typedef enum D3D12_COMMAND_LIST_SUPPORT_FLAGS -{ - D3D12_COMMAND_LIST_SUPPORT_FLAG_NONE = 0x00000000, - D3D12_COMMAND_LIST_SUPPORT_FLAG_DIRECT = 1 << D3D12_COMMAND_LIST_TYPE_DIRECT, - D3D12_COMMAND_LIST_SUPPORT_FLAG_BUNDLE = 1 << D3D12_COMMAND_LIST_TYPE_BUNDLE, - D3D12_COMMAND_LIST_SUPPORT_FLAG_COMPUTE = 1 << D3D12_COMMAND_LIST_TYPE_COMPUTE, - D3D12_COMMAND_LIST_SUPPORT_FLAG_COPY = 1 << D3D12_COMMAND_LIST_TYPE_COPY, - D3D12_COMMAND_LIST_SUPPORT_FLAG_VIDEO_DECODE = 1 << D3D12_COMMAND_LIST_TYPE_VIDEO_DECODE, - D3D12_COMMAND_LIST_SUPPORT_FLAG_VIDEO_PROCESS = 1 << D3D12_COMMAND_LIST_TYPE_VIDEO_PROCESS, - D3D12_COMMAND_LIST_SUPPORT_FLAG_VIDEO_ENCODE = 1 << D3D12_COMMAND_LIST_TYPE_VIDEO_ENCODE, - -} D3D12_COMMAND_LIST_SUPPORT_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_COMMAND_LIST_SUPPORT_FLAGS )") - -// D3D12_FEATURE_D3D12_OPTIONS3 -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS3 -{ - [annotation("_Out_")] BOOL CopyQueueTimestampQueriesSupported; - [annotation("_Out_")] BOOL CastingFullyTypedFormatSupported; - [annotation("_Out_")] D3D12_COMMAND_LIST_SUPPORT_FLAGS WriteBufferImmediateSupportFlags; - [annotation("_Out_")] D3D12_VIEW_INSTANCING_TIER ViewInstancingTier; - [annotation("_Out_")] BOOL BarycentricsSupported; -} D3D12_FEATURE_DATA_D3D12_OPTIONS3; - -// D3D12_FEATURE_EXISTING_HEAPS -typedef struct D3D12_FEATURE_DATA_EXISTING_HEAPS -{ - [annotation("_Out_")] BOOL Supported; -} D3D12_FEATURE_DATA_EXISTING_HEAPS; - -typedef enum D3D12_SHARED_RESOURCE_COMPATIBILITY_TIER -{ - D3D12_SHARED_RESOURCE_COMPATIBILITY_TIER_0, - D3D12_SHARED_RESOURCE_COMPATIBILITY_TIER_1, - D3D12_SHARED_RESOURCE_COMPATIBILITY_TIER_2, -} D3D12_SHARED_RESOURCE_COMPATIBILITY_TIER; - -typedef struct D3D12_FEATURE_DATA_DISPLAYABLE -{ - [annotation("_Out_")] BOOL DisplayableTexture; - [annotation("_Out_")] D3D12_SHARED_RESOURCE_COMPATIBILITY_TIER SharedResourceCompatibilityTier; -} D3D12_FEATURE_DATA_DISPLAYABLE; - -// D3D12_FEATURE_D3D12_OPTIONS4 -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS4 -{ - [annotation("_Out_")] BOOL MSAA64KBAlignedTextureSupported; - [annotation("_Out_")] D3D12_SHARED_RESOURCE_COMPATIBILITY_TIER SharedResourceCompatibilityTier; - [annotation("_Out_")] BOOL Native16BitShaderOpsSupported; -} D3D12_FEATURE_DATA_D3D12_OPTIONS4; - -typedef enum D3D12_HEAP_SERIALIZATION_TIER -{ - D3D12_HEAP_SERIALIZATION_TIER_0 = 0, - D3D12_HEAP_SERIALIZATION_TIER_10 = 10, -} D3D12_HEAP_SERIALIZATION_TIER; - -// D3D12_FEATURE_SERIALIZATION -typedef struct D3D12_FEATURE_DATA_SERIALIZATION -{ - [annotation("_In_")] UINT NodeIndex; - [annotation("_Out_")] D3D12_HEAP_SERIALIZATION_TIER HeapSerializationTier; -} D3D12_FEATURE_DATA_SERIALIZATION; - -// D3D12_FEATURE_CROSS_NODE -typedef struct D3D12_FEATURE_DATA_CROSS_NODE -{ - D3D12_CROSS_NODE_SHARING_TIER SharingTier; - BOOL AtomicShaderInstructions; -} D3D12_FEATURE_DATA_CROSS_NODE; - - -typedef enum D3D12_RENDER_PASS_TIER -{ - D3D12_RENDER_PASS_TIER_0 = 0, - D3D12_RENDER_PASS_TIER_1 = 1, - D3D12_RENDER_PASS_TIER_2 = 2, - - -} D3D12_RENDER_PASS_TIER; - -typedef enum D3D12_RAYTRACING_TIER -{ - D3D12_RAYTRACING_TIER_NOT_SUPPORTED = 0, - D3D12_RAYTRACING_TIER_1_0 = 10, - D3D12_RAYTRACING_TIER_1_1 = 11, -} D3D12_RAYTRACING_TIER; - -// D3D12_FEATURE_D3D12_OPTIONS5 -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS5 -{ - [annotation("_Out_")] BOOL SRVOnlyTiledResourceTier3; - [annotation("_Out_")] D3D12_RENDER_PASS_TIER RenderPassesTier; - [annotation("_Out_")] D3D12_RAYTRACING_TIER RaytracingTier; -} D3D12_FEATURE_DATA_D3D12_OPTIONS5; - -typedef enum D3D12_VARIABLE_SHADING_RATE_TIER -{ - D3D12_VARIABLE_SHADING_RATE_TIER_NOT_SUPPORTED = 0, - D3D12_VARIABLE_SHADING_RATE_TIER_1 = 1, - D3D12_VARIABLE_SHADING_RATE_TIER_2 = 2, -} D3D12_VARIABLE_SHADING_RATE_TIER; - -// D3D12_FEATURE_D3D12_OPTIONS6 -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS6 -{ - [annotation("_Out_")] BOOL AdditionalShadingRatesSupported; - [annotation("_Out_")] BOOL PerPrimitiveShadingRateSupportedWithViewportIndexing; - [annotation("_Out_")] D3D12_VARIABLE_SHADING_RATE_TIER VariableShadingRateTier; - [annotation("_Out_")] UINT ShadingRateImageTileSize; - [annotation("_Out_")] BOOL BackgroundProcessingSupported; -} D3D12_FEATURE_DATA_D3D12_OPTIONS6; - -typedef enum D3D12_MESH_SHADER_TIER -{ - D3D12_MESH_SHADER_TIER_NOT_SUPPORTED = 0, - D3D12_MESH_SHADER_TIER_1 = 10, -} D3D12_MESH_SHADER_TIER; - -typedef enum D3D12_SAMPLER_FEEDBACK_TIER -{ - D3D12_SAMPLER_FEEDBACK_TIER_NOT_SUPPORTED = 0, - D3D12_SAMPLER_FEEDBACK_TIER_0_9 = 90, - D3D12_SAMPLER_FEEDBACK_TIER_1_0 = 100 -} D3D12_SAMPLER_FEEDBACK_TIER; - -// D3D12_FEATURE_D3D12_OPTIONS7 -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS7 -{ - [annotation("_Out_")] D3D12_MESH_SHADER_TIER MeshShaderTier; - [annotation("_Out_")] D3D12_SAMPLER_FEEDBACK_TIER SamplerFeedbackTier; - -} D3D12_FEATURE_DATA_D3D12_OPTIONS7; - -typedef struct D3D12_FEATURE_DATA_QUERY_META_COMMAND -{ - [annotation("_In_")] GUID CommandId; - [annotation("_In_")] UINT NodeMask; - [annotation("_Field_size_bytes_full_opt_( QueryInputDataSizeInBytes )")] const void* pQueryInputData; - [annotation("_In_")] SIZE_T QueryInputDataSizeInBytes; - [annotation("_Field_size_bytes_full_( QueryOutputDataSizeInBytes )")] void* pQueryOutputData; - [annotation("_In_")] SIZE_T QueryOutputDataSizeInBytes; -} D3D12_FEATURE_DATA_QUERY_META_COMMAND; - -// D3D12_FEATURE_D3D12_OPTIONS8 -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS8 -{ - [annotation("_Out_")] BOOL UnalignedBlockTexturesSupported; -} D3D12_FEATURE_DATA_D3D12_OPTIONS8; - -typedef enum D3D12_WAVE_MMA_TIER { - D3D12_WAVE_MMA_TIER_NOT_SUPPORTED = 0, - D3D12_WAVE_MMA_TIER_1_0 = 10, -} D3D12_WAVE_MMA_TIER; - -// D3D12_FEATURE_D3D12_OPTIONS9 -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS9 -{ - [annotation("_Out_")] BOOL MeshShaderPipelineStatsSupported; - [annotation("_Out_")] BOOL MeshShaderSupportsFullRangeRenderTargetArrayIndex; - [annotation("_Out_")] BOOL AtomicInt64OnTypedResourceSupported; - [annotation("_Out_")] BOOL AtomicInt64OnGroupSharedSupported; - [annotation("_Out_")] BOOL DerivativesInMeshAndAmplificationShadersSupported; - [annotation("_Out_")] D3D12_WAVE_MMA_TIER WaveMMATier; -} D3D12_FEATURE_DATA_D3D12_OPTIONS9; - -// D3D12_FEATURE_D3D12_OPTIONS10 -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS10 -{ - [annotation("_Out_")] BOOL VariableRateShadingSumCombinerSupported; - [annotation("_Out_")] BOOL MeshShaderPerPrimitiveShadingRateSupported; -} D3D12_FEATURE_DATA_D3D12_OPTIONS10; - -// D3D12_FEATURE_D3D12_OPTIONS11 -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS11 -{ - [annotation("_Out_")] BOOL AtomicInt64OnDescriptorHeapResourceSupported; -} D3D12_FEATURE_DATA_D3D12_OPTIONS11; - -typedef enum D3D12_TRI_STATE { - D3D12_TRI_STATE_UNKNOWN = -1, - D3D12_TRI_STATE_FALSE = 0, - D3D12_TRI_STATE_TRUE = 1, -} D3D12_TRI_STATE; - -// D3D12_FEATURE_D3D12_OPTIONS12 -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS12 -{ - [annotation("_Out_")] D3D12_TRI_STATE MSPrimitivesPipelineStatisticIncludesCulledPrimitives; - [annotation("_Out_")] BOOL EnhancedBarriersSupported; - [annotation("_Out_")] BOOL RelaxedFormatCastingSupported; -} D3D12_FEATURE_DATA_D3D12_OPTIONS12; - -// D3D12_FEATURE_D3D12_OPTIONS13 -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS13 -{ - [annotation("_Out_")] BOOL UnrestrictedBufferTextureCopyPitchSupported; - [annotation("_Out_")] BOOL UnrestrictedVertexElementAlignmentSupported; - [annotation("_Out_")] BOOL InvertedViewportHeightFlipsYSupported; - [annotation("_Out_")] BOOL InvertedViewportDepthFlipsZSupported; - [annotation("_Out_")] BOOL TextureCopyBetweenDimensionsSupported; - [annotation("_Out_")] BOOL AlphaBlendFactorSupported; -} D3D12_FEATURE_DATA_D3D12_OPTIONS13; - -// D3D12_FEATURE_D3D12_OPTIONS14 -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS14 -{ - [annotation("_Out_")] BOOL AdvancedTextureOpsSupported; - [annotation("_Out_")] BOOL WriteableMSAATexturesSupported; - [annotation("_Out_")] BOOL IndependentFrontAndBackStencilRefMaskSupported; -} D3D12_FEATURE_DATA_D3D12_OPTIONS14; - -// D3D12_FEATURE_D3D12_OPTIONS15 -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS15 -{ - [annotation("_Out_")] BOOL TriangleFanSupported; - [annotation("_Out_")] BOOL DynamicIndexBufferStripCutSupported; -} D3D12_FEATURE_DATA_D3D12_OPTIONS15; - -// D3D12_FEATURE_D3D12_OPTIONS16 -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS16 -{ - [annotation("_Out_")] BOOL DynamicDepthBiasSupported; - [annotation("_Out_")] BOOL GPUUploadHeapSupported; -} D3D12_FEATURE_DATA_D3D12_OPTIONS16; - -// D3D12_FEATURE_D3D12_OPTIONS17 -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS17 -{ - [annotation("_Out_")] BOOL NonNormalizedCoordinateSamplersSupported; - [annotation("_Out_")] BOOL ManualWriteTrackingResourceSupported; -} D3D12_FEATURE_DATA_D3D12_OPTIONS17; - -// D3D12_FEATURE_D3D12_OPTIONS18 -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS18 -{ - [annotation("_Out_")] BOOL RenderPassesValid; -} D3D12_FEATURE_DATA_D3D12_OPTIONS18; - -// D3D12_FEATURE_D3D12_OPTIONS19 -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS19 -{ - BOOL MismatchingOutputDimensionsSupported; - UINT SupportedSampleCountsWithNoOutputs; - BOOL PointSamplingAddressesNeverRoundUp; - BOOL RasterizerDesc2Supported; - BOOL NarrowQuadrilateralLinesSupported; - BOOL AnisoFilterWithPointMipSupported; - UINT MaxSamplerDescriptorHeapSize; - UINT MaxSamplerDescriptorHeapSizeWithStaticSamplers; - UINT MaxViewDescriptorHeapSize; - [annotation("_Out_")] BOOL ComputeOnlyCustomHeapSupported; -} D3D12_FEATURE_DATA_D3D12_OPTIONS19; - - -typedef enum D3D12_RECREATE_AT_TIER -{ - D3D12_RECREATE_AT_TIER_NOT_SUPPORTED = 0, - - // * Supports retrieving resource and heap allocation information - // with ID3D12PageableTools::GetAllocationInfo - // * Supports setting resource and heap virtual addresses with - // ID3D12DeviceTools::SetNextAllocation - D3D12_RECREATE_AT_TIER_1 = 1, - -} D3D12_RECREATE_AT_TIER; - - -// D3D12_FEATURE_D3D12_OPTIONS20 -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS20 -{ - [annotation("_Out_")] BOOL ComputeOnlyWriteWatchSupported; - D3D12_RECREATE_AT_TIER RecreateAtTier; -} D3D12_FEATURE_DATA_D3D12_OPTIONS20; - -typedef enum D3D12_EXECUTE_INDIRECT_TIER -{ - D3D12_EXECUTE_INDIRECT_TIER_1_0 = 10, - D3D12_EXECUTE_INDIRECT_TIER_1_1 = 11, -} D3D12_EXECUTE_INDIRECT_TIER; - -typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS21 -{ - [annotation("_Out_")] D3D12_WORK_GRAPHS_TIER WorkGraphsTier; - [annotation("_Out_")] D3D12_EXECUTE_INDIRECT_TIER ExecuteIndirectTier; - [annotation("_Out_")] BOOL SampleCmpGradientAndBiasSupported; - [annotation("_Out_")] BOOL ExtendedCommandInfoSupported; -} D3D12_FEATURE_DATA_D3D12_OPTIONS21; - - - -typedef struct D3D12_FEATURE_DATA_PREDICATION -{ - [annotation("_Out_")] BOOL Supported; -} D3D12_FEATURE_DATA_PREDICATION; - -typedef struct D3D12_FEATURE_DATA_HARDWARE_COPY -{ - [annotation("_Out_")] BOOL Supported; -} D3D12_FEATURE_DATA_HARDWARE_COPY; - - -typedef struct D3D12_FEATURE_DATA_BYTECODE_BYPASS_HASH_SUPPORTED -{ - [annotation("_Out_")] BOOL Supported; -} D3D12_FEATURE_DATA_BYTECODE_BYPASS_HASH_SUPPORTED; - -typedef struct D3D12_RESOURCE_ALLOCATION_INFO -{ - UINT64 SizeInBytes; - UINT64 Alignment; -} D3D12_RESOURCE_ALLOCATION_INFO; - -typedef struct D3D12_RESOURCE_ALLOCATION_INFO1 -{ - UINT64 Offset; - UINT64 Alignment; - UINT64 SizeInBytes; -} D3D12_RESOURCE_ALLOCATION_INFO1; - -typedef enum D3D12_HEAP_TYPE -{ - D3D12_HEAP_TYPE_DEFAULT = 1, - D3D12_HEAP_TYPE_UPLOAD = 2, - D3D12_HEAP_TYPE_READBACK = 3, - D3D12_HEAP_TYPE_CUSTOM = 4, - D3D12_HEAP_TYPE_GPU_UPLOAD = 5, -} D3D12_HEAP_TYPE; - -typedef enum D3D12_CPU_PAGE_PROPERTY -{ - D3D12_CPU_PAGE_PROPERTY_UNKNOWN = 0, - D3D12_CPU_PAGE_PROPERTY_NOT_AVAILABLE = 1, - D3D12_CPU_PAGE_PROPERTY_WRITE_COMBINE = 2, - D3D12_CPU_PAGE_PROPERTY_WRITE_BACK = 3, -} D3D12_CPU_PAGE_PROPERTY; - -typedef enum D3D12_MEMORY_POOL -{ - D3D12_MEMORY_POOL_UNKNOWN = 0, - D3D12_MEMORY_POOL_L0 = 1, // Maximum bandwidth for CPU - D3D12_MEMORY_POOL_L1 = 2, // More bandwidth for GPU, less for CPU -} D3D12_MEMORY_POOL; - -typedef struct D3D12_HEAP_PROPERTIES -{ - D3D12_HEAP_TYPE Type; - D3D12_CPU_PAGE_PROPERTY CPUPageProperty; - D3D12_MEMORY_POOL MemoryPoolPreference; - UINT CreationNodeMask; - UINT VisibleNodeMask; -} D3D12_HEAP_PROPERTIES; - -typedef enum D3D12_HEAP_FLAGS -{ - D3D12_HEAP_FLAG_NONE = 0x0, - D3D12_HEAP_FLAG_SHARED = 0x1, - D3D12_HEAP_FLAG_DENY_BUFFERS = 0x4, - D3D12_HEAP_FLAG_ALLOW_DISPLAY = 0x8, - D3D12_HEAP_FLAG_SHARED_CROSS_ADAPTER = 0x20, - D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES = 0x40, - D3D12_HEAP_FLAG_DENY_NON_RT_DS_TEXTURES = 0x80, - D3D12_HEAP_FLAG_HARDWARE_PROTECTED = 0x100, - D3D12_HEAP_FLAG_ALLOW_WRITE_WATCH = 0x200, - D3D12_HEAP_FLAG_ALLOW_SHADER_ATOMICS = 0x400, - D3D12_HEAP_FLAG_CREATE_NOT_RESIDENT = 0x800, - D3D12_HEAP_FLAG_CREATE_NOT_ZEROED = 0x1000, - D3D12_HEAP_FLAG_TOOLS_USE_MANUAL_WRITE_TRACKING = 0x2000, - - // These are convenience aliases to manage resource heap tier restrictions. They cannot be bitwise OR'ed together cleanly. - D3D12_HEAP_FLAG_ALLOW_ALL_BUFFERS_AND_TEXTURES = 0x0, - D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS = 0xC0, - D3D12_HEAP_FLAG_ALLOW_ONLY_NON_RT_DS_TEXTURES = 0x44, - D3D12_HEAP_FLAG_ALLOW_ONLY_RT_DS_TEXTURES = 0x84, - - -} D3D12_HEAP_FLAGS; -cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_HEAP_FLAGS )" ) - -typedef struct D3D12_HEAP_DESC -{ - UINT64 SizeInBytes; - D3D12_HEAP_PROPERTIES Properties; - UINT64 Alignment; - D3D12_HEAP_FLAGS Flags; -} D3D12_HEAP_DESC; - -typedef enum D3D12_RESOURCE_DIMENSION -{ - D3D12_RESOURCE_DIMENSION_UNKNOWN = 0, - D3D12_RESOURCE_DIMENSION_BUFFER = 1, - D3D12_RESOURCE_DIMENSION_TEXTURE1D = 2, - D3D12_RESOURCE_DIMENSION_TEXTURE2D = 3, - D3D12_RESOURCE_DIMENSION_TEXTURE3D = 4, -} D3D12_RESOURCE_DIMENSION; - -typedef struct D3D12_FEATURE_DATA_PLACED_RESOURCE_SUPPORT_INFO -{ - [annotation("_In_")] DXGI_FORMAT Format; - [annotation("_In_")] D3D12_RESOURCE_DIMENSION Dimension; - [annotation("_In_")] D3D12_HEAP_PROPERTIES DestHeapProperties; - [annotation("_Out_")] BOOL Supported; -} D3D12_FEATURE_DATA_PLACED_RESOURCE_SUPPORT_INFO; - -typedef enum D3D12_TEXTURE_LAYOUT -{ - D3D12_TEXTURE_LAYOUT_UNKNOWN = 0, - D3D12_TEXTURE_LAYOUT_ROW_MAJOR = 1, // Must be used with buffers. Can be used with cross-adapter shared textures. - D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE = 2, - D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE = 3, -} D3D12_TEXTURE_LAYOUT; - -typedef enum D3D12_RESOURCE_FLAGS -{ - D3D12_RESOURCE_FLAG_NONE = 0x0, - D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET = 0x1, - D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL = 0x2, - D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS = 0x4, - D3D12_RESOURCE_FLAG_DENY_SHADER_RESOURCE = 0x8, - D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTER = 0x10, - D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS = 0x20, - D3D12_RESOURCE_FLAG_VIDEO_DECODE_REFERENCE_ONLY = 0x40, - D3D12_RESOURCE_FLAG_VIDEO_ENCODE_REFERENCE_ONLY = 0x80, - D3D12_RESOURCE_FLAG_RAYTRACING_ACCELERATION_STRUCTURE = 0x100, - -} D3D12_RESOURCE_FLAGS; -cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_RESOURCE_FLAGS )" ) - -typedef struct D3D12_MIP_REGION -{ - UINT Width; - UINT Height; - UINT Depth; -} D3D12_MIP_REGION; - -typedef struct D3D12_RESOURCE_DESC -{ - D3D12_RESOURCE_DIMENSION Dimension; - UINT64 Alignment; - UINT64 Width; - UINT Height; - UINT16 DepthOrArraySize; - UINT16 MipLevels; - DXGI_FORMAT Format; - DXGI_SAMPLE_DESC SampleDesc; - D3D12_TEXTURE_LAYOUT Layout; - D3D12_RESOURCE_FLAGS Flags; -} D3D12_RESOURCE_DESC; - -typedef struct D3D12_RESOURCE_DESC1 -{ - D3D12_RESOURCE_DIMENSION Dimension; - UINT64 Alignment; - UINT64 Width; - UINT Height; - UINT16 DepthOrArraySize; - UINT16 MipLevels; - DXGI_FORMAT Format; - DXGI_SAMPLE_DESC SampleDesc; - D3D12_TEXTURE_LAYOUT Layout; - D3D12_RESOURCE_FLAGS Flags; - D3D12_MIP_REGION SamplerFeedbackMipRegion; -} D3D12_RESOURCE_DESC1; - - - -typedef struct D3D12_DEPTH_STENCIL_VALUE -{ - FLOAT Depth; - UINT8 Stencil; -} D3D12_DEPTH_STENCIL_VALUE; - -typedef struct D3D12_CLEAR_VALUE -{ - DXGI_FORMAT Format; - union - { - FLOAT Color[4]; - D3D12_DEPTH_STENCIL_VALUE DepthStencil; - }; -} D3D12_CLEAR_VALUE; - -typedef struct D3D12_RANGE -{ - SIZE_T Begin; - SIZE_T End; // One past end, so (End - Begin) = Size -} D3D12_RANGE; - -typedef struct D3D12_RANGE_UINT64 -{ - UINT64 Begin; - UINT64 End; // One past end, so (End - Begin) = Size -} D3D12_RANGE_UINT64; - -typedef struct D3D12_SUBRESOURCE_RANGE_UINT64 -{ - UINT Subresource; - D3D12_RANGE_UINT64 Range; -} D3D12_SUBRESOURCE_RANGE_UINT64; - -typedef struct D3D12_SUBRESOURCE_INFO -{ - UINT64 Offset; - UINT RowPitch; - UINT DepthPitch; -} D3D12_SUBRESOURCE_INFO; - -typedef struct D3D12_TILED_RESOURCE_COORDINATE -{ - UINT X; - UINT Y; - UINT Z; - UINT Subresource; -} D3D12_TILED_RESOURCE_COORDINATE; - -typedef struct D3D12_TILE_REGION_SIZE -{ - UINT NumTiles; - BOOL UseBox; - UINT Width; - UINT16 Height; - UINT16 Depth; -} D3D12_TILE_REGION_SIZE; - -typedef enum D3D12_TILE_RANGE_FLAGS -{ - D3D12_TILE_RANGE_FLAG_NONE = 0, - D3D12_TILE_RANGE_FLAG_NULL = 1, - D3D12_TILE_RANGE_FLAG_SKIP = 2, - D3D12_TILE_RANGE_FLAG_REUSE_SINGLE_TILE = 4, - -} D3D12_TILE_RANGE_FLAGS; - -typedef struct D3D12_SUBRESOURCE_TILING -{ - UINT WidthInTiles; - UINT16 HeightInTiles; - UINT16 DepthInTiles; - UINT StartTileIndexInOverallResource; -} D3D12_SUBRESOURCE_TILING; - -typedef struct D3D12_TILE_SHAPE -{ - UINT WidthInTexels; - UINT HeightInTexels; - UINT DepthInTexels; -} D3D12_TILE_SHAPE; - -typedef struct D3D12_PACKED_MIP_INFO -{ - UINT8 NumStandardMips; - UINT8 NumPackedMips; - UINT NumTilesForPackedMips; - UINT StartTileIndexInOverallResource; -} D3D12_PACKED_MIP_INFO; - -typedef enum D3D12_TILE_MAPPING_FLAGS -{ - D3D12_TILE_MAPPING_FLAG_NONE = 0x0, - D3D12_TILE_MAPPING_FLAG_NO_HAZARD = 0x1, -} D3D12_TILE_MAPPING_FLAGS; -cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_TILE_MAPPING_FLAGS )" ) - -typedef enum D3D12_TILE_COPY_FLAGS -{ - D3D12_TILE_COPY_FLAG_NONE = 0x0, - D3D12_TILE_COPY_FLAG_NO_HAZARD = 0x1, - D3D12_TILE_COPY_FLAG_LINEAR_BUFFER_TO_SWIZZLED_TILED_RESOURCE = 0x2, - D3D12_TILE_COPY_FLAG_SWIZZLED_TILED_RESOURCE_TO_LINEAR_BUFFER = 0x4, -} D3D12_TILE_COPY_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_TILE_COPY_FLAGS )") - -// Resource Barrier -typedef enum D3D12_RESOURCE_STATES -{ - D3D12_RESOURCE_STATE_COMMON = 0, - - D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER = 0x00001, - D3D12_RESOURCE_STATE_INDEX_BUFFER = 0x00002, - D3D12_RESOURCE_STATE_RENDER_TARGET = 0x00004, - D3D12_RESOURCE_STATE_UNORDERED_ACCESS = 0x00008, - D3D12_RESOURCE_STATE_DEPTH_WRITE = 0x00010, - D3D12_RESOURCE_STATE_DEPTH_READ = 0x00020, - D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE = 0x00040, - D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE = 0x00080, - D3D12_RESOURCE_STATE_STREAM_OUT = 0x00100, - D3D12_RESOURCE_STATE_INDIRECT_ARGUMENT = 0x00200, - D3D12_RESOURCE_STATE_COPY_DEST = 0x00400, - D3D12_RESOURCE_STATE_COPY_SOURCE = 0x00800, - D3D12_RESOURCE_STATE_RESOLVE_DEST = 0x01000, - D3D12_RESOURCE_STATE_RESOLVE_SOURCE = 0x02000, - D3D12_RESOURCE_STATE_RAYTRACING_ACCELERATION_STRUCTURE = 0x400000, - D3D12_RESOURCE_STATE_SHADING_RATE_SOURCE = 0x1000000, - - D3D12_RESOURCE_STATE_RESERVED_INTERNAL_8000 = 0x8000, - D3D12_RESOURCE_STATE_RESERVED_INTERNAL_4000 = 0x4000, - D3D12_RESOURCE_STATE_RESERVED_INTERNAL_100000 = 0x100000, - D3D12_RESOURCE_STATE_RESERVED_INTERNAL_40000000 = 0x40000000, - D3D12_RESOURCE_STATE_RESERVED_INTERNAL_80000000 = 0x80000000, - - D3D12_RESOURCE_STATE_GENERIC_READ = - /*D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER*/ 0x0001 | - /*D3D12_RESOURCE_STATE_INDEX_BUFFER*/ 0x0002 | - /*D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE*/ 0x0040 | - /*D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE*/ 0x0080 | - /*D3D12_RESOURCE_STATE_INDIRECT_ARGUMENT*/ 0x0200 | - /*D3D12_RESOURCE_STATE_COPY_SOURCE*/ 0x0800, - - D3D12_RESOURCE_STATE_ALL_SHADER_RESOURCE = - /*D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE*/ 0x40 | - /*D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE*/ 0x80, - - D3D12_RESOURCE_STATE_PRESENT = 0, - D3D12_RESOURCE_STATE_PREDICATION = /*D3D12_RESOURCE_STATE_INDIRECT_ARGUMENT*/ 0x0200, - - D3D12_RESOURCE_STATE_VIDEO_DECODE_READ = 0x00010000, - D3D12_RESOURCE_STATE_VIDEO_DECODE_WRITE = 0x00020000, - D3D12_RESOURCE_STATE_VIDEO_PROCESS_READ = 0x00040000, - D3D12_RESOURCE_STATE_VIDEO_PROCESS_WRITE = 0x00080000, - D3D12_RESOURCE_STATE_VIDEO_ENCODE_READ = 0x00200000, - D3D12_RESOURCE_STATE_VIDEO_ENCODE_WRITE = 0x00800000, - -} D3D12_RESOURCE_STATES; -cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_RESOURCE_STATES )" ) - -typedef enum D3D12_RESOURCE_BARRIER_TYPE -{ - D3D12_RESOURCE_BARRIER_TYPE_TRANSITION, - D3D12_RESOURCE_BARRIER_TYPE_ALIASING, - D3D12_RESOURCE_BARRIER_TYPE_UAV, -} D3D12_RESOURCE_BARRIER_TYPE; - -interface ID3D12Resource; - -typedef struct D3D12_RESOURCE_TRANSITION_BARRIER -{ - ID3D12Resource* pResource; - UINT Subresource; - D3D12_RESOURCE_STATES StateBefore; - D3D12_RESOURCE_STATES StateAfter; -} D3D12_RESOURCE_TRANSITION_BARRIER; - -typedef struct D3D12_RESOURCE_ALIASING_BARRIER -{ - ID3D12Resource* pResourceBefore; - ID3D12Resource* pResourceAfter; -} D3D12_RESOURCE_ALIASING_BARRIER; - -typedef struct D3D12_RESOURCE_UAV_BARRIER -{ - ID3D12Resource* pResource; -} D3D12_RESOURCE_UAV_BARRIER; - -typedef enum D3D12_RESOURCE_BARRIER_FLAGS -{ - D3D12_RESOURCE_BARRIER_FLAG_NONE = 0x0, - D3D12_RESOURCE_BARRIER_FLAG_BEGIN_ONLY = 0x1, - D3D12_RESOURCE_BARRIER_FLAG_END_ONLY = 0x2, -} D3D12_RESOURCE_BARRIER_FLAGS; -cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_RESOURCE_BARRIER_FLAGS )" ) - -typedef struct D3D12_RESOURCE_BARRIER -{ - D3D12_RESOURCE_BARRIER_TYPE Type; - D3D12_RESOURCE_BARRIER_FLAGS Flags; - - union - { - D3D12_RESOURCE_TRANSITION_BARRIER Transition; - D3D12_RESOURCE_ALIASING_BARRIER Aliasing; - D3D12_RESOURCE_UAV_BARRIER UAV; - }; -} D3D12_RESOURCE_BARRIER; - -typedef struct D3D12_SUBRESOURCE_FOOTPRINT -{ - DXGI_FORMAT Format; - UINT Width; - UINT Height; - UINT Depth; - UINT RowPitch; // Must be a multiple of D3D12_TEXTURE_DATA_PITCH_ALIGNMENT -} D3D12_SUBRESOURCE_FOOTPRINT; - -typedef struct D3D12_PLACED_SUBRESOURCE_FOOTPRINT -{ - UINT64 Offset; // Must be a multiple of D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT - D3D12_SUBRESOURCE_FOOTPRINT Footprint; -} D3D12_PLACED_SUBRESOURCE_FOOTPRINT; - -typedef enum D3D12_TEXTURE_COPY_TYPE -{ - D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX = 0, - D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT = 1, -} D3D12_TEXTURE_COPY_TYPE; - -typedef struct D3D12_TEXTURE_COPY_LOCATION -{ - ID3D12Resource* pResource; - D3D12_TEXTURE_COPY_TYPE Type; - union - { - D3D12_PLACED_SUBRESOURCE_FOOTPRINT PlacedFootprint; - UINT SubresourceIndex; - }; -} D3D12_TEXTURE_COPY_LOCATION; - -typedef enum D3D12_RESOLVE_MODE -{ - D3D12_RESOLVE_MODE_DECOMPRESS = 0, - D3D12_RESOLVE_MODE_MIN = 1, - D3D12_RESOLVE_MODE_MAX = 2, - D3D12_RESOLVE_MODE_AVERAGE = 3, - D3D12_RESOLVE_MODE_ENCODE_SAMPLER_FEEDBACK = 4, - D3D12_RESOLVE_MODE_DECODE_SAMPLER_FEEDBACK = 5 -} D3D12_RESOLVE_MODE; - -typedef struct D3D12_SAMPLE_POSITION -{ - INT8 X; - INT8 Y; -} D3D12_SAMPLE_POSITION; - -typedef struct D3D12_VIEW_INSTANCE_LOCATION -{ - UINT ViewportArrayIndex; - UINT RenderTargetArrayIndex; -} D3D12_VIEW_INSTANCE_LOCATION; - -typedef enum D3D12_VIEW_INSTANCING_FLAGS -{ - D3D12_VIEW_INSTANCING_FLAG_NONE = 0x0, - D3D12_VIEW_INSTANCING_FLAG_ENABLE_VIEW_INSTANCE_MASKING = 0x1, -} D3D12_VIEW_INSTANCING_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_VIEW_INSTANCING_FLAGS )") - -typedef struct D3D12_VIEW_INSTANCING_DESC -{ - UINT ViewInstanceCount; - [annotation("_Field_size_full_(ViewInstanceCount)")] const D3D12_VIEW_INSTANCE_LOCATION* pViewInstanceLocations; - D3D12_VIEW_INSTANCING_FLAGS Flags; -} D3D12_VIEW_INSTANCING_DESC; - -// D3D12 view descriptions -typedef enum D3D12_SHADER_COMPONENT_MAPPING -{ - D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_0 = 0, - D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_1 = 1, - D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_2 = 2, - D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_3 = 3, - D3D12_SHADER_COMPONENT_MAPPING_FORCE_VALUE_0 = 4, - D3D12_SHADER_COMPONENT_MAPPING_FORCE_VALUE_1 = 5, -} D3D12_SHADER_COMPONENT_MAPPING; - -cpp_quote( "#define D3D12_SHADER_COMPONENT_MAPPING_MASK 0x7 ") -cpp_quote( "#define D3D12_SHADER_COMPONENT_MAPPING_SHIFT 3 ") -cpp_quote( "#define D3D12_SHADER_COMPONENT_MAPPING_ALWAYS_SET_BIT_AVOIDING_ZEROMEM_MISTAKES (1<<(D3D12_SHADER_COMPONENT_MAPPING_SHIFT*4)) ") -cpp_quote( "#define D3D12_ENCODE_SHADER_4_COMPONENT_MAPPING(Src0,Src1,Src2,Src3) ((((Src0)&D3D12_SHADER_COMPONENT_MAPPING_MASK)| \\") -cpp_quote( " (((Src1)&D3D12_SHADER_COMPONENT_MAPPING_MASK)<> (D3D12_SHADER_COMPONENT_MAPPING_SHIFT*ComponentToExtract) & D3D12_SHADER_COMPONENT_MAPPING_MASK))") -cpp_quote( "#define D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING D3D12_ENCODE_SHADER_4_COMPONENT_MAPPING(0,1,2,3) ") -typedef enum D3D12_BUFFER_SRV_FLAGS -{ - D3D12_BUFFER_SRV_FLAG_NONE = 0, - D3D12_BUFFER_SRV_FLAG_RAW = 0x00000001, // allow device multi-component reads with DWORD addressing -} D3D12_BUFFER_SRV_FLAGS; -cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_BUFFER_SRV_FLAGS )" ) - -typedef struct D3D12_BUFFER_SRV -{ - UINT64 FirstElement; - UINT NumElements; - UINT StructureByteStride; // if nonzero, format must be DXGI_FORMAT_UNKNOWN - D3D12_BUFFER_SRV_FLAGS Flags; -} D3D12_BUFFER_SRV; - -typedef struct D3D12_TEX1D_SRV -{ - UINT MostDetailedMip; - UINT MipLevels; - FLOAT ResourceMinLODClamp; -} D3D12_TEX1D_SRV; - -typedef struct D3D12_TEX1D_ARRAY_SRV -{ - UINT MostDetailedMip; - UINT MipLevels; - UINT FirstArraySlice; - UINT ArraySize; - FLOAT ResourceMinLODClamp; -} D3D12_TEX1D_ARRAY_SRV; - -typedef struct D3D12_TEX2D_SRV -{ - UINT MostDetailedMip; - UINT MipLevels; - UINT PlaneSlice; - FLOAT ResourceMinLODClamp; -} D3D12_TEX2D_SRV; - -typedef struct D3D12_TEX2D_ARRAY_SRV -{ - UINT MostDetailedMip; - UINT MipLevels; - UINT FirstArraySlice; - UINT ArraySize; - UINT PlaneSlice; - FLOAT ResourceMinLODClamp; -} D3D12_TEX2D_ARRAY_SRV; - -typedef struct D3D12_TEX3D_SRV -{ - UINT MostDetailedMip; - UINT MipLevels; - FLOAT ResourceMinLODClamp; -} D3D12_TEX3D_SRV; - -typedef struct D3D12_TEXCUBE_SRV -{ - UINT MostDetailedMip; - UINT MipLevels; - FLOAT ResourceMinLODClamp; -} D3D12_TEXCUBE_SRV; - -typedef struct D3D12_TEXCUBE_ARRAY_SRV -{ - UINT MostDetailedMip; - UINT MipLevels; - UINT First2DArrayFace; - UINT NumCubes; - FLOAT ResourceMinLODClamp; -} D3D12_TEXCUBE_ARRAY_SRV; - -typedef struct D3D12_TEX2DMS_SRV -{ - // don't need to define anything specific for this view dimension - UINT UnusedField_NothingToDefine; -} D3D12_TEX2DMS_SRV; - -typedef struct D3D12_TEX2DMS_ARRAY_SRV -{ - UINT FirstArraySlice; - UINT ArraySize; -} D3D12_TEX2DMS_ARRAY_SRV; - -typedef struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_SRV -{ - D3D12_GPU_VIRTUAL_ADDRESS Location; -} D3D12_RAYTRACING_ACCELERATION_STRUCTURE_SRV; - -typedef enum D3D12_SRV_DIMENSION { - D3D12_SRV_DIMENSION_UNKNOWN = 0, - D3D12_SRV_DIMENSION_BUFFER = 1, - D3D12_SRV_DIMENSION_TEXTURE1D = 2, - D3D12_SRV_DIMENSION_TEXTURE1DARRAY = 3, - D3D12_SRV_DIMENSION_TEXTURE2D = 4, - D3D12_SRV_DIMENSION_TEXTURE2DARRAY = 5, - D3D12_SRV_DIMENSION_TEXTURE2DMS = 6, - D3D12_SRV_DIMENSION_TEXTURE2DMSARRAY = 7, - D3D12_SRV_DIMENSION_TEXTURE3D = 8, - D3D12_SRV_DIMENSION_TEXTURECUBE = 9, - D3D12_SRV_DIMENSION_TEXTURECUBEARRAY = 10, - D3D12_SRV_DIMENSION_RAYTRACING_ACCELERATION_STRUCTURE = 11, -} D3D12_SRV_DIMENSION; - -typedef struct D3D12_SHADER_RESOURCE_VIEW_DESC -{ - DXGI_FORMAT Format; - D3D12_SRV_DIMENSION ViewDimension; - UINT Shader4ComponentMapping; - - union - { - D3D12_BUFFER_SRV Buffer; - D3D12_TEX1D_SRV Texture1D; - D3D12_TEX1D_ARRAY_SRV Texture1DArray; - D3D12_TEX2D_SRV Texture2D; - D3D12_TEX2D_ARRAY_SRV Texture2DArray; - D3D12_TEX2DMS_SRV Texture2DMS; - D3D12_TEX2DMS_ARRAY_SRV Texture2DMSArray; - D3D12_TEX3D_SRV Texture3D; - D3D12_TEXCUBE_SRV TextureCube; - D3D12_TEXCUBE_ARRAY_SRV TextureCubeArray; - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_SRV RaytracingAccelerationStructure; - }; -} D3D12_SHADER_RESOURCE_VIEW_DESC; - -typedef struct D3D12_CONSTANT_BUFFER_VIEW_DESC -{ - D3D12_GPU_VIRTUAL_ADDRESS BufferLocation; - UINT SizeInBytes; -} D3D12_CONSTANT_BUFFER_VIEW_DESC; - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// -// Sampler -// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -typedef enum D3D12_FILTER -{ - // Bits used in defining enumeration of valid filters: - // bits [1:0] - mip: 0 == point, 1 == linear, 2,3 unused - // bits [3:2] - mag: 0 == point, 1 == linear, 2,3 unused - // bits [5:4] - min: 0 == point, 1 == linear, 2,3 unused - // bit [6] - aniso - // bits [8:7] - reduction type: - // 0 == standard filtering - // 1 == comparison - // 2 == min - // 3 == max - // bit [31] - mono 1-bit (narrow-purpose filter) [no longer supported in D3D12] - - D3D12_FILTER_MIN_MAG_MIP_POINT = 0x00000000, - D3D12_FILTER_MIN_MAG_POINT_MIP_LINEAR = 0x00000001, - D3D12_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x00000004, - D3D12_FILTER_MIN_POINT_MAG_MIP_LINEAR = 0x00000005, - D3D12_FILTER_MIN_LINEAR_MAG_MIP_POINT = 0x00000010, - D3D12_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x00000011, - D3D12_FILTER_MIN_MAG_LINEAR_MIP_POINT = 0x00000014, - D3D12_FILTER_MIN_MAG_MIP_LINEAR = 0x00000015, - D3D12_FILTER_MIN_MAG_ANISOTROPIC_MIP_POINT = 0x00000054, - D3D12_FILTER_ANISOTROPIC = 0x00000055, - D3D12_FILTER_COMPARISON_MIN_MAG_MIP_POINT = 0x00000080, - D3D12_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR = 0x00000081, - D3D12_FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x00000084, - D3D12_FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR = 0x00000085, - D3D12_FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT = 0x00000090, - D3D12_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x00000091, - D3D12_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT = 0x00000094, - D3D12_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR = 0x00000095, - D3D12_FILTER_COMPARISON_MIN_MAG_ANISOTROPIC_MIP_POINT = 0x000000d4, - D3D12_FILTER_COMPARISON_ANISOTROPIC = 0x000000d5, - D3D12_FILTER_MINIMUM_MIN_MAG_MIP_POINT = 0x00000100, - D3D12_FILTER_MINIMUM_MIN_MAG_POINT_MIP_LINEAR = 0x00000101, - D3D12_FILTER_MINIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x00000104, - D3D12_FILTER_MINIMUM_MIN_POINT_MAG_MIP_LINEAR = 0x00000105, - D3D12_FILTER_MINIMUM_MIN_LINEAR_MAG_MIP_POINT = 0x00000110, - D3D12_FILTER_MINIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x00000111, - D3D12_FILTER_MINIMUM_MIN_MAG_LINEAR_MIP_POINT = 0x00000114, - D3D12_FILTER_MINIMUM_MIN_MAG_MIP_LINEAR = 0x00000115, - D3D12_FILTER_MINIMUM_MIN_MAG_ANISOTROPIC_MIP_POINT = 0x00000154, - D3D12_FILTER_MINIMUM_ANISOTROPIC = 0x00000155, - D3D12_FILTER_MAXIMUM_MIN_MAG_MIP_POINT = 0x00000180, - D3D12_FILTER_MAXIMUM_MIN_MAG_POINT_MIP_LINEAR = 0x00000181, - D3D12_FILTER_MAXIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x00000184, - D3D12_FILTER_MAXIMUM_MIN_POINT_MAG_MIP_LINEAR = 0x00000185, - D3D12_FILTER_MAXIMUM_MIN_LINEAR_MAG_MIP_POINT = 0x00000190, - D3D12_FILTER_MAXIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x00000191, - D3D12_FILTER_MAXIMUM_MIN_MAG_LINEAR_MIP_POINT = 0x00000194, - D3D12_FILTER_MAXIMUM_MIN_MAG_MIP_LINEAR = 0x00000195, - D3D12_FILTER_MAXIMUM_MIN_MAG_ANISOTROPIC_MIP_POINT = 0x000001d4, - D3D12_FILTER_MAXIMUM_ANISOTROPIC = 0x000001d5 -} D3D12_FILTER; - -typedef enum D3D12_FILTER_TYPE -{ - D3D12_FILTER_TYPE_POINT = 0, - D3D12_FILTER_TYPE_LINEAR = 1, -} D3D12_FILTER_TYPE; - -typedef enum D3D12_FILTER_REDUCTION_TYPE -{ - D3D12_FILTER_REDUCTION_TYPE_STANDARD = 0, - D3D12_FILTER_REDUCTION_TYPE_COMPARISON = 1, - D3D12_FILTER_REDUCTION_TYPE_MINIMUM = 2, - D3D12_FILTER_REDUCTION_TYPE_MAXIMUM = 3, -} D3D12_FILTER_REDUCTION_TYPE; - -const UINT D3D12_FILTER_REDUCTION_TYPE_MASK = 0x00000003; -const UINT D3D12_FILTER_REDUCTION_TYPE_SHIFT = 7; - -const UINT D3D12_FILTER_TYPE_MASK = 0x00000003; -const UINT D3D12_MIN_FILTER_SHIFT = 4; -const UINT D3D12_MAG_FILTER_SHIFT = 2; -const UINT D3D12_MIP_FILTER_SHIFT = 0; - -const UINT D3D12_ANISOTROPIC_FILTERING_BIT = 0x00000040; - -// encode enum entry for most filters except anisotropic filtering -cpp_quote( "#define D3D12_ENCODE_BASIC_FILTER( min, mag, mip, reduction ) \\" ) -cpp_quote( " ( ( D3D12_FILTER ) ( \\" ) -cpp_quote( " ( ( ( min ) & D3D12_FILTER_TYPE_MASK ) << D3D12_MIN_FILTER_SHIFT ) | \\" ) -cpp_quote( " ( ( ( mag ) & D3D12_FILTER_TYPE_MASK ) << D3D12_MAG_FILTER_SHIFT ) | \\" ) -cpp_quote( " ( ( ( mip ) & D3D12_FILTER_TYPE_MASK ) << D3D12_MIP_FILTER_SHIFT ) | \\" ) -cpp_quote( " ( ( ( reduction ) & D3D12_FILTER_REDUCTION_TYPE_MASK ) << D3D12_FILTER_REDUCTION_TYPE_SHIFT ) ) ) " ) - -// encode enum entry for anisotropic filtering (with or without comparison filtering) -cpp_quote( "#define D3D12_ENCODE_ANISOTROPIC_FILTER( reduction ) \\" ) -cpp_quote( " ( ( D3D12_FILTER ) ( \\" ) -cpp_quote( " D3D12_ANISOTROPIC_FILTERING_BIT | \\" ) -cpp_quote( " D3D12_ENCODE_BASIC_FILTER( D3D12_FILTER_TYPE_LINEAR, \\" ) -cpp_quote( " D3D12_FILTER_TYPE_LINEAR, \\" ) -cpp_quote( " D3D12_FILTER_TYPE_LINEAR, \\" ) -cpp_quote( " reduction ) ) ) " ) -cpp_quote( "#define D3D12_ENCODE_MIN_MAG_ANISOTROPIC_MIP_POINT_FILTER( reduction ) \\" ) -cpp_quote( " ( ( D3D12_FILTER ) ( \\" ) -cpp_quote( " D3D12_ANISOTROPIC_FILTERING_BIT | \\" ) -cpp_quote( " D3D12_ENCODE_BASIC_FILTER( D3D12_FILTER_TYPE_LINEAR, \\" ) -cpp_quote( " D3D12_FILTER_TYPE_LINEAR, \\" ) -cpp_quote( " D3D12_FILTER_TYPE_POINT, \\" ) -cpp_quote( " reduction ) ) ) " ) - -cpp_quote( "#define D3D12_DECODE_MIN_FILTER( D3D12Filter ) \\" ) -cpp_quote( " ( ( D3D12_FILTER_TYPE ) \\" ) -cpp_quote( " ( ( ( D3D12Filter ) >> D3D12_MIN_FILTER_SHIFT ) & D3D12_FILTER_TYPE_MASK ) ) " ) - -cpp_quote( "#define D3D12_DECODE_MAG_FILTER( D3D12Filter ) \\" ) -cpp_quote( " ( ( D3D12_FILTER_TYPE ) \\" ) -cpp_quote( " ( ( ( D3D12Filter ) >> D3D12_MAG_FILTER_SHIFT ) & D3D12_FILTER_TYPE_MASK ) ) " ) - -cpp_quote( "#define D3D12_DECODE_MIP_FILTER( D3D12Filter ) \\" ) -cpp_quote( " ( ( D3D12_FILTER_TYPE ) \\" ) -cpp_quote( " ( ( ( D3D12Filter ) >> D3D12_MIP_FILTER_SHIFT ) & D3D12_FILTER_TYPE_MASK ) ) " ) - -cpp_quote( "#define D3D12_DECODE_FILTER_REDUCTION( D3D12Filter ) \\" ) -cpp_quote( " ( ( D3D12_FILTER_REDUCTION_TYPE ) \\" ) -cpp_quote( " ( ( ( D3D12Filter ) >> D3D12_FILTER_REDUCTION_TYPE_SHIFT ) & D3D12_FILTER_REDUCTION_TYPE_MASK ) ) " ) - -cpp_quote( "#define D3D12_DECODE_IS_COMPARISON_FILTER( D3D12Filter ) \\" ) -cpp_quote( " ( D3D12_DECODE_FILTER_REDUCTION( D3D12Filter ) == D3D12_FILTER_REDUCTION_TYPE_COMPARISON ) " ) - -cpp_quote( "#define D3D12_DECODE_IS_ANISOTROPIC_FILTER( D3D12Filter ) \\" ) -cpp_quote( " ( ( ( D3D12Filter ) & D3D12_ANISOTROPIC_FILTERING_BIT ) && \\" ) -cpp_quote( " ( D3D12_FILTER_TYPE_LINEAR == D3D12_DECODE_MIN_FILTER( D3D12Filter ) ) && \\" ) -cpp_quote( " ( D3D12_FILTER_TYPE_LINEAR == D3D12_DECODE_MAG_FILTER( D3D12Filter ) ) ) " ) - -typedef enum D3D12_TEXTURE_ADDRESS_MODE -{ - D3D12_TEXTURE_ADDRESS_MODE_WRAP = 1, - D3D12_TEXTURE_ADDRESS_MODE_MIRROR = 2, - D3D12_TEXTURE_ADDRESS_MODE_CLAMP = 3, - D3D12_TEXTURE_ADDRESS_MODE_BORDER = 4, - D3D12_TEXTURE_ADDRESS_MODE_MIRROR_ONCE = 5 -} D3D12_TEXTURE_ADDRESS_MODE; - - - -typedef struct D3D12_SAMPLER_DESC -{ - D3D12_FILTER Filter; - D3D12_TEXTURE_ADDRESS_MODE AddressU; - D3D12_TEXTURE_ADDRESS_MODE AddressV; - D3D12_TEXTURE_ADDRESS_MODE AddressW; - FLOAT MipLODBias; - UINT MaxAnisotropy; - D3D12_COMPARISON_FUNC ComparisonFunc; - FLOAT BorderColor[4]; // RGBA - FLOAT MinLOD; - FLOAT MaxLOD; -} D3D12_SAMPLER_DESC; - - -typedef enum D3D12_SAMPLER_FLAGS -{ - D3D12_SAMPLER_FLAG_NONE = 0x0, - D3D12_SAMPLER_FLAG_UINT_BORDER_COLOR = 0x01, - D3D12_SAMPLER_FLAG_NON_NORMALIZED_COORDINATES = 0x02, -} D3D12_SAMPLER_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_SAMPLER_FLAGS )") - -typedef struct D3D12_SAMPLER_DESC2 -{ - D3D12_FILTER Filter; - D3D12_TEXTURE_ADDRESS_MODE AddressU; - D3D12_TEXTURE_ADDRESS_MODE AddressV; - D3D12_TEXTURE_ADDRESS_MODE AddressW; - FLOAT MipLODBias; - UINT MaxAnisotropy; - D3D12_COMPARISON_FUNC ComparisonFunc; - union - { - FLOAT FloatBorderColor[4]; // RGBA - UINT UintBorderColor[4]; - }; - FLOAT MinLOD; - FLOAT MaxLOD; - D3D12_SAMPLER_FLAGS Flags; -} D3D12_SAMPLER_DESC2; - - - -typedef enum D3D12_BUFFER_UAV_FLAGS -{ - D3D12_BUFFER_UAV_FLAG_NONE = 0, - D3D12_BUFFER_UAV_FLAG_RAW = 0x00000001, -} D3D12_BUFFER_UAV_FLAGS; -cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_BUFFER_UAV_FLAGS )" ) - -typedef struct D3D12_BUFFER_UAV -{ - UINT64 FirstElement; - UINT NumElements; - UINT StructureByteStride; // if nonzero, format must be DXGI_FORMAT_UNKNOWN - UINT64 CounterOffsetInBytes; - D3D12_BUFFER_UAV_FLAGS Flags; -} D3D12_BUFFER_UAV; - -typedef struct D3D12_TEX1D_UAV -{ - UINT MipSlice; -} D3D12_TEX1D_UAV; - -typedef struct D3D12_TEX1D_ARRAY_UAV -{ - UINT MipSlice; - UINT FirstArraySlice; - UINT ArraySize; -} D3D12_TEX1D_ARRAY_UAV; - -typedef struct D3D12_TEX2D_UAV -{ - UINT MipSlice; - UINT PlaneSlice; -} D3D12_TEX2D_UAV; - -typedef struct D3D12_TEX2D_ARRAY_UAV -{ - UINT MipSlice; - UINT FirstArraySlice; - UINT ArraySize; - UINT PlaneSlice; -} D3D12_TEX2D_ARRAY_UAV; - -typedef struct D3D12_TEX2DMS_UAV -{ - // don't need to define anything specific for this view dimension - UINT UnusedField_NothingToDefine; -} D3D12_TEX2DMS_UAV; - -typedef struct D3D12_TEX2DMS_ARRAY_UAV -{ - UINT FirstArraySlice; - UINT ArraySize; -} D3D12_TEX2DMS_ARRAY_UAV; - -typedef struct D3D12_TEX3D_UAV -{ - UINT MipSlice; - UINT FirstWSlice; - UINT WSize; -} D3D12_TEX3D_UAV; - -typedef enum D3D12_UAV_DIMENSION -{ - D3D12_UAV_DIMENSION_UNKNOWN = 0, - D3D12_UAV_DIMENSION_BUFFER = 1, - D3D12_UAV_DIMENSION_TEXTURE1D = 2, - D3D12_UAV_DIMENSION_TEXTURE1DARRAY = 3, - D3D12_UAV_DIMENSION_TEXTURE2D = 4, - D3D12_UAV_DIMENSION_TEXTURE2DARRAY = 5, - D3D12_UAV_DIMENSION_TEXTURE2DMS = 6, - D3D12_UAV_DIMENSION_TEXTURE2DMSARRAY = 7, - D3D12_UAV_DIMENSION_TEXTURE3D = 8, -} D3D12_UAV_DIMENSION; - -typedef struct D3D12_UNORDERED_ACCESS_VIEW_DESC -{ - DXGI_FORMAT Format; - D3D12_UAV_DIMENSION ViewDimension; - - union - { - D3D12_BUFFER_UAV Buffer; - D3D12_TEX1D_UAV Texture1D; - D3D12_TEX1D_ARRAY_UAV Texture1DArray; - D3D12_TEX2D_UAV Texture2D; - D3D12_TEX2D_ARRAY_UAV Texture2DArray; - D3D12_TEX2DMS_UAV Texture2DMS; - D3D12_TEX2DMS_ARRAY_UAV Texture2DMSArray; - D3D12_TEX3D_UAV Texture3D; - }; -} D3D12_UNORDERED_ACCESS_VIEW_DESC; - -typedef struct D3D12_BUFFER_RTV -{ - UINT64 FirstElement; - UINT NumElements; -} D3D12_BUFFER_RTV; - -typedef struct D3D12_TEX1D_RTV -{ - UINT MipSlice; -} D3D12_TEX1D_RTV; - -typedef struct D3D12_TEX1D_ARRAY_RTV -{ - UINT MipSlice; - UINT FirstArraySlice; - UINT ArraySize; -} D3D12_TEX1D_ARRAY_RTV; - -typedef struct D3D12_TEX2D_RTV -{ - UINT MipSlice; - UINT PlaneSlice; -} D3D12_TEX2D_RTV; - -typedef struct D3D12_TEX2DMS_RTV -{ - UINT UnusedField_NothingToDefine; -} D3D12_TEX2DMS_RTV; - -typedef struct D3D12_TEX2D_ARRAY_RTV -{ - UINT MipSlice; - UINT FirstArraySlice; - UINT ArraySize; - UINT PlaneSlice; -} D3D12_TEX2D_ARRAY_RTV; - -typedef struct D3D12_TEX2DMS_ARRAY_RTV -{ - UINT FirstArraySlice; - UINT ArraySize; -} D3D12_TEX2DMS_ARRAY_RTV; - -typedef struct D3D12_TEX3D_RTV -{ - UINT MipSlice; - UINT FirstWSlice; - UINT WSize; -} D3D12_TEX3D_RTV; - -typedef enum D3D12_RTV_DIMENSION -{ - D3D12_RTV_DIMENSION_UNKNOWN = 0, - D3D12_RTV_DIMENSION_BUFFER = 1, - D3D12_RTV_DIMENSION_TEXTURE1D = 2, - D3D12_RTV_DIMENSION_TEXTURE1DARRAY = 3, - D3D12_RTV_DIMENSION_TEXTURE2D = 4, - D3D12_RTV_DIMENSION_TEXTURE2DARRAY = 5, - D3D12_RTV_DIMENSION_TEXTURE2DMS = 6, - D3D12_RTV_DIMENSION_TEXTURE2DMSARRAY = 7, - D3D12_RTV_DIMENSION_TEXTURE3D = 8, -} D3D12_RTV_DIMENSION; - -typedef struct D3D12_RENDER_TARGET_VIEW_DESC -{ - DXGI_FORMAT Format; - D3D12_RTV_DIMENSION ViewDimension; - - union - { - D3D12_BUFFER_RTV Buffer; - D3D12_TEX1D_RTV Texture1D; - D3D12_TEX1D_ARRAY_RTV Texture1DArray; - D3D12_TEX2D_RTV Texture2D; - D3D12_TEX2D_ARRAY_RTV Texture2DArray; - D3D12_TEX2DMS_RTV Texture2DMS; - D3D12_TEX2DMS_ARRAY_RTV Texture2DMSArray; - D3D12_TEX3D_RTV Texture3D; - }; -} D3D12_RENDER_TARGET_VIEW_DESC; - -typedef struct D3D12_TEX1D_DSV -{ - UINT MipSlice; -} D3D12_TEX1D_DSV; - -typedef struct D3D12_TEX1D_ARRAY_DSV -{ - UINT MipSlice; - UINT FirstArraySlice; - UINT ArraySize; -} D3D12_TEX1D_ARRAY_DSV; - -typedef struct D3D12_TEX2D_DSV -{ - UINT MipSlice; -} D3D12_TEX2D_DSV; - -typedef struct D3D12_TEX2D_ARRAY_DSV -{ - UINT MipSlice; - UINT FirstArraySlice; - UINT ArraySize; -} D3D12_TEX2D_ARRAY_DSV; - -typedef struct D3D12_TEX2DMS_DSV -{ - UINT UnusedField_NothingToDefine; -} D3D12_TEX2DMS_DSV; - -typedef struct D3D12_TEX2DMS_ARRAY_DSV -{ - UINT FirstArraySlice; - UINT ArraySize; -} D3D12_TEX2DMS_ARRAY_DSV; - -typedef enum D3D12_DSV_FLAGS -{ - D3D12_DSV_FLAG_NONE = 0x0, - D3D12_DSV_FLAG_READ_ONLY_DEPTH = 0x1, - D3D12_DSV_FLAG_READ_ONLY_STENCIL = 0x2, -} D3D12_DSV_FLAGS; -cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_DSV_FLAGS )" ) - -typedef enum D3D12_DSV_DIMENSION -{ - D3D12_DSV_DIMENSION_UNKNOWN = 0, - D3D12_DSV_DIMENSION_TEXTURE1D = 1, - D3D12_DSV_DIMENSION_TEXTURE1DARRAY = 2, - D3D12_DSV_DIMENSION_TEXTURE2D = 3, - D3D12_DSV_DIMENSION_TEXTURE2DARRAY = 4, - D3D12_DSV_DIMENSION_TEXTURE2DMS = 5, - D3D12_DSV_DIMENSION_TEXTURE2DMSARRAY = 6, -} D3D12_DSV_DIMENSION; - -typedef struct D3D12_DEPTH_STENCIL_VIEW_DESC -{ - DXGI_FORMAT Format; - D3D12_DSV_DIMENSION ViewDimension; - D3D12_DSV_FLAGS Flags; - - union - { - D3D12_TEX1D_DSV Texture1D; - D3D12_TEX1D_ARRAY_DSV Texture1DArray; - D3D12_TEX2D_DSV Texture2D; - D3D12_TEX2D_ARRAY_DSV Texture2DArray; - D3D12_TEX2DMS_DSV Texture2DMS; - D3D12_TEX2DMS_ARRAY_DSV Texture2DMSArray; - }; -} D3D12_DEPTH_STENCIL_VIEW_DESC; - -typedef enum D3D12_CLEAR_FLAGS -{ - // Intentionally no flag for NONE - D3D12_CLEAR_FLAG_DEPTH = 0x01, - D3D12_CLEAR_FLAG_STENCIL = 0x02, -} D3D12_CLEAR_FLAGS; -cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_CLEAR_FLAGS )" ) - -typedef enum D3D12_FENCE_FLAGS -{ - D3D12_FENCE_FLAG_NONE = 0x0, - D3D12_FENCE_FLAG_SHARED = 0x1, - D3D12_FENCE_FLAG_SHARED_CROSS_ADAPTER = 0x2, - D3D12_FENCE_FLAG_NON_MONITORED = 0x4, -} D3D12_FENCE_FLAGS; -cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_FENCE_FLAGS )" ) - -typedef enum D3D12_DESCRIPTOR_HEAP_TYPE -{ - D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV, - D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER, - D3D12_DESCRIPTOR_HEAP_TYPE_RTV, - D3D12_DESCRIPTOR_HEAP_TYPE_DSV, - D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES -} D3D12_DESCRIPTOR_HEAP_TYPE; - -typedef enum D3D12_DESCRIPTOR_HEAP_FLAGS -{ - D3D12_DESCRIPTOR_HEAP_FLAG_NONE = 0x0, - D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE = 0x1, -} D3D12_DESCRIPTOR_HEAP_FLAGS; -cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_DESCRIPTOR_HEAP_FLAGS )" ) - -typedef struct D3D12_DESCRIPTOR_HEAP_DESC -{ - D3D12_DESCRIPTOR_HEAP_TYPE Type; - UINT NumDescriptors; - D3D12_DESCRIPTOR_HEAP_FLAGS Flags; - UINT NodeMask; -} D3D12_DESCRIPTOR_HEAP_DESC; - -typedef enum D3D12_DESCRIPTOR_RANGE_TYPE -{ - D3D12_DESCRIPTOR_RANGE_TYPE_SRV, - D3D12_DESCRIPTOR_RANGE_TYPE_UAV, - D3D12_DESCRIPTOR_RANGE_TYPE_CBV, - D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER -} D3D12_DESCRIPTOR_RANGE_TYPE; - -typedef struct D3D12_DESCRIPTOR_RANGE -{ - D3D12_DESCRIPTOR_RANGE_TYPE RangeType; - UINT NumDescriptors; - UINT BaseShaderRegister; - UINT RegisterSpace; - UINT OffsetInDescriptorsFromTableStart; -} D3D12_DESCRIPTOR_RANGE; - - -typedef struct D3D12_ROOT_DESCRIPTOR_TABLE -{ - UINT NumDescriptorRanges; - [annotation("_Field_size_full_(NumDescriptorRanges)")] const D3D12_DESCRIPTOR_RANGE* pDescriptorRanges; -} D3D12_ROOT_DESCRIPTOR_TABLE; - - -typedef struct D3D12_ROOT_CONSTANTS -{ - UINT ShaderRegister; - UINT RegisterSpace; - UINT Num32BitValues; -} D3D12_ROOT_CONSTANTS; - -typedef struct D3D12_ROOT_DESCRIPTOR -{ - UINT ShaderRegister; - UINT RegisterSpace; -} D3D12_ROOT_DESCRIPTOR; - -typedef enum D3D12_SHADER_VISIBILITY -{ - D3D12_SHADER_VISIBILITY_ALL = 0, - D3D12_SHADER_VISIBILITY_VERTEX = 1, - D3D12_SHADER_VISIBILITY_HULL = 2, - D3D12_SHADER_VISIBILITY_DOMAIN = 3, - D3D12_SHADER_VISIBILITY_GEOMETRY = 4, - D3D12_SHADER_VISIBILITY_PIXEL = 5, - D3D12_SHADER_VISIBILITY_AMPLIFICATION = 6, - D3D12_SHADER_VISIBILITY_MESH = 7, -} D3D12_SHADER_VISIBILITY; - -typedef enum D3D12_ROOT_PARAMETER_TYPE -{ - D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE, - D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS, - D3D12_ROOT_PARAMETER_TYPE_CBV, - D3D12_ROOT_PARAMETER_TYPE_SRV, - D3D12_ROOT_PARAMETER_TYPE_UAV -} D3D12_ROOT_PARAMETER_TYPE; - -typedef struct D3D12_ROOT_PARAMETER -{ - D3D12_ROOT_PARAMETER_TYPE ParameterType; - union - { - D3D12_ROOT_DESCRIPTOR_TABLE DescriptorTable; - D3D12_ROOT_CONSTANTS Constants; - D3D12_ROOT_DESCRIPTOR Descriptor; - }; - D3D12_SHADER_VISIBILITY ShaderVisibility; -} D3D12_ROOT_PARAMETER; - -typedef enum D3D12_ROOT_SIGNATURE_FLAGS -{ - D3D12_ROOT_SIGNATURE_FLAG_NONE = 0x0, - D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT = 0x1, - D3D12_ROOT_SIGNATURE_FLAG_DENY_VERTEX_SHADER_ROOT_ACCESS = 0x2, - D3D12_ROOT_SIGNATURE_FLAG_DENY_HULL_SHADER_ROOT_ACCESS = 0x4, - D3D12_ROOT_SIGNATURE_FLAG_DENY_DOMAIN_SHADER_ROOT_ACCESS = 0x8, - D3D12_ROOT_SIGNATURE_FLAG_DENY_GEOMETRY_SHADER_ROOT_ACCESS = 0x10, - D3D12_ROOT_SIGNATURE_FLAG_DENY_PIXEL_SHADER_ROOT_ACCESS = 0x20, - D3D12_ROOT_SIGNATURE_FLAG_ALLOW_STREAM_OUTPUT = 0x40, - D3D12_ROOT_SIGNATURE_FLAG_LOCAL_ROOT_SIGNATURE = 0x80, - D3D12_ROOT_SIGNATURE_FLAG_DENY_AMPLIFICATION_SHADER_ROOT_ACCESS = 0x100, - D3D12_ROOT_SIGNATURE_FLAG_DENY_MESH_SHADER_ROOT_ACCESS = 0x200, - D3D12_ROOT_SIGNATURE_FLAG_CBV_SRV_UAV_HEAP_DIRECTLY_INDEXED = 0x400, - D3D12_ROOT_SIGNATURE_FLAG_SAMPLER_HEAP_DIRECTLY_INDEXED = 0x800, -} D3D12_ROOT_SIGNATURE_FLAGS; -cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_ROOT_SIGNATURE_FLAGS )" ) - - -typedef enum D3D12_STATIC_BORDER_COLOR -{ - D3D12_STATIC_BORDER_COLOR_TRANSPARENT_BLACK, // 0.0f,0.0f,0.0f,0.0f - D3D12_STATIC_BORDER_COLOR_OPAQUE_BLACK, // 0.0f,0.0f,0.0f,1.0f - D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE, // 1.0f,1.0f,1.0f,1.0f - D3D12_STATIC_BORDER_COLOR_OPAQUE_BLACK_UINT, // 0,0,0,1 - D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE_UINT, // 1,1,1,1 - -} D3D12_STATIC_BORDER_COLOR; - -typedef struct D3D12_STATIC_SAMPLER_DESC -{ - D3D12_FILTER Filter; - D3D12_TEXTURE_ADDRESS_MODE AddressU; - D3D12_TEXTURE_ADDRESS_MODE AddressV; - D3D12_TEXTURE_ADDRESS_MODE AddressW; - FLOAT MipLODBias; - UINT MaxAnisotropy; - D3D12_COMPARISON_FUNC ComparisonFunc; - D3D12_STATIC_BORDER_COLOR BorderColor; - FLOAT MinLOD; - FLOAT MaxLOD; - UINT ShaderRegister; - UINT RegisterSpace; - D3D12_SHADER_VISIBILITY ShaderVisibility; -} D3D12_STATIC_SAMPLER_DESC; - -typedef struct D3D12_STATIC_SAMPLER_DESC1 -{ - D3D12_FILTER Filter; - D3D12_TEXTURE_ADDRESS_MODE AddressU; - D3D12_TEXTURE_ADDRESS_MODE AddressV; - D3D12_TEXTURE_ADDRESS_MODE AddressW; - FLOAT MipLODBias; - UINT MaxAnisotropy; - D3D12_COMPARISON_FUNC ComparisonFunc; - D3D12_STATIC_BORDER_COLOR BorderColor; - FLOAT MinLOD; - FLOAT MaxLOD; - UINT ShaderRegister; - UINT RegisterSpace; - D3D12_SHADER_VISIBILITY ShaderVisibility; - D3D12_SAMPLER_FLAGS Flags; -} D3D12_STATIC_SAMPLER_DESC1; - -typedef struct D3D12_ROOT_SIGNATURE_DESC -{ - UINT NumParameters; - [annotation("_Field_size_full_(NumParameters)")] const D3D12_ROOT_PARAMETER* pParameters; - UINT NumStaticSamplers; - [annotation("_Field_size_full_(NumStaticSamplers)")] const D3D12_STATIC_SAMPLER_DESC* pStaticSamplers; - D3D12_ROOT_SIGNATURE_FLAGS Flags; -} D3D12_ROOT_SIGNATURE_DESC; - -typedef enum D3D12_DESCRIPTOR_RANGE_FLAGS -{ - D3D12_DESCRIPTOR_RANGE_FLAG_NONE = 0x0, - D3D12_DESCRIPTOR_RANGE_FLAG_DESCRIPTORS_VOLATILE = 0x1, - D3D12_DESCRIPTOR_RANGE_FLAG_DATA_VOLATILE = 0x2, - D3D12_DESCRIPTOR_RANGE_FLAG_DATA_STATIC_WHILE_SET_AT_EXECUTE = 0x4, - D3D12_DESCRIPTOR_RANGE_FLAG_DATA_STATIC = 0x8, - D3D12_DESCRIPTOR_RANGE_FLAG_DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS = 0x10000, -} D3D12_DESCRIPTOR_RANGE_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_DESCRIPTOR_RANGE_FLAGS )") - -typedef struct D3D12_DESCRIPTOR_RANGE1 -{ - D3D12_DESCRIPTOR_RANGE_TYPE RangeType; - UINT NumDescriptors; - UINT BaseShaderRegister; - UINT RegisterSpace; - D3D12_DESCRIPTOR_RANGE_FLAGS Flags; - UINT OffsetInDescriptorsFromTableStart; -} D3D12_DESCRIPTOR_RANGE1; - -typedef struct D3D12_ROOT_DESCRIPTOR_TABLE1 -{ - UINT NumDescriptorRanges; - [annotation("_Field_size_full_(NumDescriptorRanges)")] const D3D12_DESCRIPTOR_RANGE1* pDescriptorRanges; -} D3D12_ROOT_DESCRIPTOR_TABLE1; - -typedef enum D3D12_ROOT_DESCRIPTOR_FLAGS -{ - D3D12_ROOT_DESCRIPTOR_FLAG_NONE = 0x0, - D3D12_ROOT_DESCRIPTOR_FLAG_DATA_VOLATILE = 0x2, - D3D12_ROOT_DESCRIPTOR_FLAG_DATA_STATIC_WHILE_SET_AT_EXECUTE = 0x4, - D3D12_ROOT_DESCRIPTOR_FLAG_DATA_STATIC = 0x8, -} D3D12_ROOT_DESCRIPTOR_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_ROOT_DESCRIPTOR_FLAGS )") - -typedef struct D3D12_ROOT_DESCRIPTOR1 -{ - UINT ShaderRegister; - UINT RegisterSpace; - D3D12_ROOT_DESCRIPTOR_FLAGS Flags; -} D3D12_ROOT_DESCRIPTOR1; - -typedef struct D3D12_ROOT_PARAMETER1 -{ - D3D12_ROOT_PARAMETER_TYPE ParameterType; - union - { - D3D12_ROOT_DESCRIPTOR_TABLE1 DescriptorTable; - D3D12_ROOT_CONSTANTS Constants; - D3D12_ROOT_DESCRIPTOR1 Descriptor; - }; - D3D12_SHADER_VISIBILITY ShaderVisibility; -} D3D12_ROOT_PARAMETER1; - -typedef struct D3D12_ROOT_SIGNATURE_DESC1 -{ - UINT NumParameters; - [annotation("_Field_size_full_(NumParameters)")] const D3D12_ROOT_PARAMETER1* pParameters; - UINT NumStaticSamplers; - [annotation("_Field_size_full_(NumStaticSamplers)")] const D3D12_STATIC_SAMPLER_DESC* pStaticSamplers; - D3D12_ROOT_SIGNATURE_FLAGS Flags; -} D3D12_ROOT_SIGNATURE_DESC1; - -typedef struct D3D12_ROOT_SIGNATURE_DESC2 -{ - UINT NumParameters; - [annotation("_Field_size_full_(NumParameters)")] const D3D12_ROOT_PARAMETER1* pParameters; - UINT NumStaticSamplers; - [annotation("_Field_size_full_(NumStaticSamplers)")] const D3D12_STATIC_SAMPLER_DESC1* pStaticSamplers; - D3D12_ROOT_SIGNATURE_FLAGS Flags; -} D3D12_ROOT_SIGNATURE_DESC2; - - -typedef struct D3D12_VERSIONED_ROOT_SIGNATURE_DESC -{ - D3D_ROOT_SIGNATURE_VERSION Version; - union - { - D3D12_ROOT_SIGNATURE_DESC Desc_1_0; - D3D12_ROOT_SIGNATURE_DESC1 Desc_1_1; - D3D12_ROOT_SIGNATURE_DESC2 Desc_1_2; - }; -} D3D12_VERSIONED_ROOT_SIGNATURE_DESC; - -[ uuid( 34AB647B-3CC8-46AC-841B-C0965645C046 ), object, local, pointer_default( unique ) ] -interface ID3D12RootSignatureDeserializer - : IUnknown -{ - const D3D12_ROOT_SIGNATURE_DESC * GetRootSignatureDesc(); -}; - -[ uuid( 7F91CE67-090C-4BB7-B78E-ED8FF2E31DA0 ), object, local, pointer_default( unique ) ] -interface ID3D12VersionedRootSignatureDeserializer - : IUnknown -{ - HRESULT GetRootSignatureDescAtVersion(D3D_ROOT_SIGNATURE_VERSION convertToVersion, [annotation("_Out_")] const D3D12_VERSIONED_ROOT_SIGNATURE_DESC** ppDesc); - const D3D12_VERSIONED_ROOT_SIGNATURE_DESC* GetUnconvertedRootSignatureDesc(); -}; - -cpp_quote( "typedef HRESULT (WINAPI* PFN_D3D12_SERIALIZE_ROOT_SIGNATURE)(") -cpp_quote( " _In_ const D3D12_ROOT_SIGNATURE_DESC* pRootSignature," ) -cpp_quote( " _In_ D3D_ROOT_SIGNATURE_VERSION Version," ) -cpp_quote( " _Out_ ID3DBlob** ppBlob," ) -cpp_quote( " _Always_(_Outptr_opt_result_maybenull_) ID3DBlob** ppErrorBlob);" ) -cpp_quote( "" ) -cpp_quote( "HRESULT WINAPI D3D12SerializeRootSignature(") -cpp_quote( " _In_ const D3D12_ROOT_SIGNATURE_DESC* pRootSignature," ) -cpp_quote( " _In_ D3D_ROOT_SIGNATURE_VERSION Version," ) -cpp_quote( " _Out_ ID3DBlob** ppBlob," ) -cpp_quote( " _Always_(_Outptr_opt_result_maybenull_) ID3DBlob** ppErrorBlob);" ) -cpp_quote( "" ) -cpp_quote( "typedef HRESULT (WINAPI* PFN_D3D12_CREATE_ROOT_SIGNATURE_DESERIALIZER)(") -cpp_quote( " _In_reads_bytes_(SrcDataSizeInBytes) LPCVOID pSrcData," ) -cpp_quote( " _In_ SIZE_T SrcDataSizeInBytes," ) -cpp_quote( " _In_ REFIID pRootSignatureDeserializerInterface," ) -cpp_quote( " _Out_ void** ppRootSignatureDeserializer);" ) -cpp_quote( "" ) -cpp_quote( "HRESULT WINAPI D3D12CreateRootSignatureDeserializer(") -cpp_quote( " _In_reads_bytes_(SrcDataSizeInBytes) LPCVOID pSrcData," ) -cpp_quote( " _In_ SIZE_T SrcDataSizeInBytes," ) -cpp_quote( " _In_ REFIID pRootSignatureDeserializerInterface," ) -cpp_quote( " _Out_ void** ppRootSignatureDeserializer);" ) -cpp_quote( "" ) -cpp_quote( "typedef HRESULT (WINAPI* PFN_D3D12_SERIALIZE_VERSIONED_ROOT_SIGNATURE)(" ) -cpp_quote( " _In_ const D3D12_VERSIONED_ROOT_SIGNATURE_DESC* pRootSignature," ) -cpp_quote( " _Out_ ID3DBlob** ppBlob," ) -cpp_quote( " _Always_(_Outptr_opt_result_maybenull_) ID3DBlob** ppErrorBlob);" ) -cpp_quote( "" ) -cpp_quote( "HRESULT WINAPI D3D12SerializeVersionedRootSignature(" ) -cpp_quote( " _In_ const D3D12_VERSIONED_ROOT_SIGNATURE_DESC* pRootSignature," ) -cpp_quote( " _Out_ ID3DBlob** ppBlob," ) -cpp_quote( " _Always_(_Outptr_opt_result_maybenull_) ID3DBlob** ppErrorBlob);" ) -cpp_quote( "" ) -cpp_quote( "typedef HRESULT (WINAPI* PFN_D3D12_CREATE_VERSIONED_ROOT_SIGNATURE_DESERIALIZER)(" ) -cpp_quote( " _In_reads_bytes_(SrcDataSizeInBytes) LPCVOID pSrcData," ) -cpp_quote( " _In_ SIZE_T SrcDataSizeInBytes," ) -cpp_quote( " _In_ REFIID pRootSignatureDeserializerInterface," ) -cpp_quote( " _Out_ void** ppRootSignatureDeserializer);" ) -cpp_quote( "" ) -cpp_quote( "HRESULT WINAPI D3D12CreateVersionedRootSignatureDeserializer(") -cpp_quote( " _In_reads_bytes_(SrcDataSizeInBytes) LPCVOID pSrcData," ) -cpp_quote( " _In_ SIZE_T SrcDataSizeInBytes," ) -cpp_quote( " _In_ REFIID pRootSignatureDeserializerInterface," ) -cpp_quote( " _Out_ void** ppRootSignatureDeserializer);" ) -cpp_quote( "" ) -cpp_quote("typedef HRESULT (WINAPI* PFN_D3D12_CREATE_VERSIONED_ROOT_SIGNATURE_DESERIALIZER_FROM_SUBOBJECT_IN_LIBRARY)(") -cpp_quote(" _In_reads_bytes_(SrcDataSizeInBytes) LPCVOID pSrcData,") -cpp_quote(" _In_ SIZE_T SrcDataSizeInBytes,") -cpp_quote(" _In_ LPCWSTR RootSignatureSubobjectName,") -cpp_quote(" _In_ REFIID pRootSignatureDeserializerInterface,") -cpp_quote(" _Out_ void** ppRootSignatureDeserializer);") -cpp_quote("") -cpp_quote("HRESULT WINAPI D3D12CreateVersionedRootSignatureDeserializerFromSubobjectInLibrary(") -cpp_quote(" _In_reads_bytes_(SrcDataSizeInBytes) LPCVOID pSrcData,") -cpp_quote(" _In_ SIZE_T SrcDataSizeInBytes,") -cpp_quote(" _In_opt_ LPCWSTR RootSignatureSubobjectName,") -cpp_quote(" _In_ REFIID pRootSignatureDeserializerInterface,") -cpp_quote(" _Out_ void** ppRootSignatureDeserializer);") -cpp_quote("") - -typedef struct D3D12_CPU_DESCRIPTOR_HANDLE -{ - SIZE_T ptr; -} D3D12_CPU_DESCRIPTOR_HANDLE; - - -typedef struct D3D12_GPU_DESCRIPTOR_HANDLE -{ - UINT64 ptr; -} D3D12_GPU_DESCRIPTOR_HANDLE; - -cpp_quote( "// If rects are supplied in D3D12_DISCARD_REGION, below, the resource " ) -cpp_quote( "// must have 2D subresources with all specified subresources the same dimension." ) -typedef struct D3D12_DISCARD_REGION -{ - UINT NumRects; - [annotation("_In_reads_(NumRects)")] const D3D12_RECT* pRects; - UINT FirstSubresource; - UINT NumSubresources; -} D3D12_DISCARD_REGION; - -typedef enum D3D12_QUERY_HEAP_TYPE -{ - D3D12_QUERY_HEAP_TYPE_OCCLUSION = 0, - D3D12_QUERY_HEAP_TYPE_TIMESTAMP = 1, - D3D12_QUERY_HEAP_TYPE_PIPELINE_STATISTICS = 2, - D3D12_QUERY_HEAP_TYPE_SO_STATISTICS = 3, - D3D12_QUERY_HEAP_TYPE_VIDEO_DECODE_STATISTICS = 4, - D3D12_QUERY_HEAP_TYPE_COPY_QUEUE_TIMESTAMP = 5, - D3D12_QUERY_HEAP_TYPE_PIPELINE_STATISTICS1 = 7, - -} D3D12_QUERY_HEAP_TYPE; - -typedef struct D3D12_QUERY_HEAP_DESC -{ - D3D12_QUERY_HEAP_TYPE Type; - UINT Count; - UINT NodeMask; -} D3D12_QUERY_HEAP_DESC; - -typedef enum D3D12_QUERY_TYPE -{ - D3D12_QUERY_TYPE_OCCLUSION = 0, - D3D12_QUERY_TYPE_BINARY_OCCLUSION = 1, - D3D12_QUERY_TYPE_TIMESTAMP = 2, - D3D12_QUERY_TYPE_PIPELINE_STATISTICS = 3, - D3D12_QUERY_TYPE_SO_STATISTICS_STREAM0 = 4, - D3D12_QUERY_TYPE_SO_STATISTICS_STREAM1 = 5, - D3D12_QUERY_TYPE_SO_STATISTICS_STREAM2 = 6, - D3D12_QUERY_TYPE_SO_STATISTICS_STREAM3 = 7, - D3D12_QUERY_TYPE_VIDEO_DECODE_STATISTICS = 8, - D3D12_QUERY_TYPE_PIPELINE_STATISTICS1 = 10, - -} D3D12_QUERY_TYPE; - -typedef enum D3D12_PREDICATION_OP -{ - D3D12_PREDICATION_OP_EQUAL_ZERO = 0, - D3D12_PREDICATION_OP_NOT_EQUAL_ZERO = 1, -} D3D12_PREDICATION_OP; - -typedef struct D3D12_QUERY_DATA_PIPELINE_STATISTICS -{ - UINT64 IAVertices; - UINT64 IAPrimitives; - UINT64 VSInvocations; - UINT64 GSInvocations; - UINT64 GSPrimitives; - UINT64 CInvocations; - UINT64 CPrimitives; - UINT64 PSInvocations; - UINT64 HSInvocations; - UINT64 DSInvocations; - UINT64 CSInvocations; -} D3D12_QUERY_DATA_PIPELINE_STATISTICS; - -typedef struct D3D12_QUERY_DATA_PIPELINE_STATISTICS1 -{ - UINT64 IAVertices; - UINT64 IAPrimitives; - UINT64 VSInvocations; - UINT64 GSInvocations; - UINT64 GSPrimitives; - UINT64 CInvocations; - UINT64 CPrimitives; - UINT64 PSInvocations; - UINT64 HSInvocations; - UINT64 DSInvocations; - UINT64 CSInvocations; - UINT64 ASInvocations; - UINT64 MSInvocations; - UINT64 MSPrimitives; -} D3D12_QUERY_DATA_PIPELINE_STATISTICS1; - -typedef struct D3D12_QUERY_DATA_SO_STATISTICS -{ - UINT64 NumPrimitivesWritten; - UINT64 PrimitivesStorageNeeded; -} D3D12_QUERY_DATA_SO_STATISTICS; - -typedef struct D3D12_STREAM_OUTPUT_BUFFER_VIEW -{ - D3D12_GPU_VIRTUAL_ADDRESS BufferLocation; - UINT64 SizeInBytes; - D3D12_GPU_VIRTUAL_ADDRESS BufferFilledSizeLocation; -} D3D12_STREAM_OUTPUT_BUFFER_VIEW; - -typedef struct D3D12_DRAW_ARGUMENTS -{ - UINT VertexCountPerInstance; - UINT InstanceCount; - UINT StartVertexLocation; - UINT StartInstanceLocation; -} D3D12_DRAW_ARGUMENTS; - -typedef struct D3D12_DRAW_INDEXED_ARGUMENTS -{ - UINT IndexCountPerInstance; - UINT InstanceCount; - UINT StartIndexLocation; - INT BaseVertexLocation; - UINT StartInstanceLocation; -} D3D12_DRAW_INDEXED_ARGUMENTS; - -typedef struct D3D12_DISPATCH_ARGUMENTS -{ - UINT ThreadGroupCountX; - UINT ThreadGroupCountY; - UINT ThreadGroupCountZ; -} D3D12_DISPATCH_ARGUMENTS; - -typedef struct D3D12_VERTEX_BUFFER_VIEW -{ - D3D12_GPU_VIRTUAL_ADDRESS BufferLocation; - UINT SizeInBytes; - UINT StrideInBytes; -} D3D12_VERTEX_BUFFER_VIEW; - -typedef struct D3D12_INDEX_BUFFER_VIEW -{ - D3D12_GPU_VIRTUAL_ADDRESS BufferLocation; - UINT SizeInBytes; - DXGI_FORMAT Format; -} D3D12_INDEX_BUFFER_VIEW; - -typedef enum D3D12_INDIRECT_ARGUMENT_TYPE -{ - D3D12_INDIRECT_ARGUMENT_TYPE_DRAW, - D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED, - D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH, - D3D12_INDIRECT_ARGUMENT_TYPE_VERTEX_BUFFER_VIEW, - D3D12_INDIRECT_ARGUMENT_TYPE_INDEX_BUFFER_VIEW, - D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT, - D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT_BUFFER_VIEW, - D3D12_INDIRECT_ARGUMENT_TYPE_SHADER_RESOURCE_VIEW, - D3D12_INDIRECT_ARGUMENT_TYPE_UNORDERED_ACCESS_VIEW, - D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH_RAYS, - D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH_MESH, - D3D12_INDIRECT_ARGUMENT_TYPE_INCREMENTING_CONSTANT, -} D3D12_INDIRECT_ARGUMENT_TYPE; - -typedef struct D3D12_INDIRECT_ARGUMENT_DESC -{ - D3D12_INDIRECT_ARGUMENT_TYPE Type; - - union - { - struct - { - UINT Slot; - } VertexBuffer; - - struct - { - UINT RootParameterIndex; - UINT DestOffsetIn32BitValues; - UINT Num32BitValuesToSet; - } Constant; - - struct - { - UINT RootParameterIndex; - } ConstantBufferView; - - struct - { - UINT RootParameterIndex; - } ShaderResourceView; - - struct - { - UINT RootParameterIndex; - } UnorderedAccessView; - - // Tier 1.1 support - struct - { - UINT RootParameterIndex; - UINT DestOffsetIn32BitValues; - } IncrementingConstant; - }; -} D3D12_INDIRECT_ARGUMENT_DESC; - -typedef struct D3D12_COMMAND_SIGNATURE_DESC -{ - // The number of bytes between each drawing structure - UINT ByteStride; - UINT NumArgumentDescs; - [annotation("_Field_size_full_(NumArgumentDescs)")] const D3D12_INDIRECT_ARGUMENT_DESC* pArgumentDescs; - UINT NodeMask; -} D3D12_COMMAND_SIGNATURE_DESC; - -interface ID3D12Device; - -[ uuid( c4fec28f-7966-4e95-9f94-f431cb56c3b8 ), object, local, pointer_default( unique ) ] -interface ID3D12Object - : IUnknown -{ - HRESULT GetPrivateData( - [annotation("_In_")] REFGUID guid, - [annotation("_Inout_")] UINT* pDataSize, - [annotation("_Out_writes_bytes_opt_( *pDataSize )")] void* pData ); - HRESULT SetPrivateData( - [annotation("_In_")] REFGUID guid, - [annotation("_In_")] UINT DataSize, - [annotation("_In_reads_bytes_opt_( DataSize )")] const void* pData ); - HRESULT SetPrivateDataInterface( - [annotation("_In_")] REFGUID guid, - [annotation("_In_opt_")] const IUnknown* pData ); - HRESULT SetName( - [annotation("_In_z_")] LPCWSTR Name ); -} - -[ uuid( 905db94b-a00c-4140-9df5-2b64ca9ea357 ), object, local, pointer_default( unique ) ] -interface ID3D12DeviceChild - : ID3D12Object -{ - HRESULT GetDevice( - [in] REFIID riid, - [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppvDevice - ); -} - -[ uuid( 63ee58fb-1268-4835-86da-f008ce62f0d6 ), object, local, pointer_default( unique ) ] -interface ID3D12Pageable - : ID3D12DeviceChild -{ -} - -[ uuid( 6b3b2502-6e51-45b3-90ee-9884265e8df3 ), object, local, pointer_default( unique ) ] -interface ID3D12Heap - : ID3D12Pageable -{ - D3D12_HEAP_DESC GetDesc(); -} - -[ uuid( 696442be-a72e-4059-bc79-5b5c98040fad ), object, local, pointer_default( unique ) ] -interface ID3D12Resource - : ID3D12Pageable -{ - HRESULT Map( - UINT Subresource, - [annotation("_In_opt_")] const D3D12_RANGE* pReadRange, - [annotation("_Outptr_opt_result_bytebuffer_(_Inexpressible_(\"Dependent on resource\"))")] void** ppData); - - void Unmap(UINT Subresource, [annotation("_In_opt_")] const D3D12_RANGE* pWrittenRange ); - - D3D12_RESOURCE_DESC GetDesc(); - - D3D12_GPU_VIRTUAL_ADDRESS GetGPUVirtualAddress(); - - HRESULT WriteToSubresource( - UINT DstSubresource, - [annotation("_In_opt_")] const D3D12_BOX* pDstBox, - [annotation("_In_")] const void* pSrcData, - UINT SrcRowPitch, - UINT SrcDepthPitch ); - - HRESULT ReadFromSubresource( - [annotation("_Out_")] void* pDstData, - UINT DstRowPitch, - UINT DstDepthPitch, - UINT SrcSubresource, - [annotation("_In_opt_")] const D3D12_BOX* pSrcBox ); - - HRESULT GetHeapProperties( - [annotation("_Out_opt_")] D3D12_HEAP_PROPERTIES* pHeapProperties, - [annotation("_Out_opt_")] D3D12_HEAP_FLAGS* pHeapFlags - ); -} - -[ uuid( 6102dee4-af59-4b09-b999-b44d73f09b24 ), object, local, pointer_default( unique ) ] -interface ID3D12CommandAllocator - : ID3D12Pageable -{ - HRESULT Reset(); -} - -[ uuid( 0a753dcf-c4d8-4b91-adf6-be5a60d95a76 ), object, local, pointer_default( unique ) ] -interface ID3D12Fence - : ID3D12Pageable -{ - UINT64 GetCompletedValue(); - HRESULT SetEventOnCompletion(UINT64 Value, HANDLE hEvent); - HRESULT Signal(UINT64 Value); -}; - -[ uuid( 433685fe-e22b-4ca0-a8db-b5b4f4dd0e4a ), object, local, pointer_default( unique ) ] -interface ID3D12Fence1 - : ID3D12Fence -{ - D3D12_FENCE_FLAGS GetCreationFlags(); -}; - - -[ uuid( 765a30f3-f624-4c6f-a828-ace948622445 ), object, local, pointer_default( unique ) ] -interface ID3D12PipelineState - : ID3D12Pageable -{ - HRESULT GetCachedBlob([annotation("_COM_Outptr_")] ID3DBlob** ppBlob); -} - -[ uuid( 8efb471d-616c-4f49-90f7-127bb763fa51 ), object, local, pointer_default( unique ) ] -interface ID3D12DescriptorHeap - : ID3D12Pageable -{ - D3D12_DESCRIPTOR_HEAP_DESC GetDesc(); - - D3D12_CPU_DESCRIPTOR_HANDLE GetCPUDescriptorHandleForHeapStart(); - D3D12_GPU_DESCRIPTOR_HANDLE GetGPUDescriptorHandleForHeapStart(); -} - -[ uuid( 0d9658ae-ed45-469e-a61d-970ec583cab4 ), object, local, pointer_default( unique ) ] -interface ID3D12QueryHeap - : ID3D12Pageable -{ -}; - -[ uuid( c36a797c-ec80-4f0a-8985-a7b2475082d1 ), object, local, pointer_default( unique ) ] -interface ID3D12CommandSignature - : ID3D12Pageable -{ -}; - -[ uuid( 7116d91c-e7e4-47ce-b8c6-ec8168f437e5 ), object, local, pointer_default( unique ) ] -interface ID3D12CommandList - : ID3D12DeviceChild -{ - D3D12_COMMAND_LIST_TYPE GetType(); -} - -// Superseded by ID3D12GraphicsCommandList1 -[ uuid( 5b160d0f-ac1b-4185-8ba8-b3ae42a5a455 ), object, local, pointer_default( unique ) ] -interface ID3D12GraphicsCommandList - : ID3D12CommandList -{ - HRESULT Close(); - - HRESULT Reset( - [annotation("_In_")] ID3D12CommandAllocator* pAllocator, - [annotation("_In_opt_")] ID3D12PipelineState* pInitialState - ); - - void ClearState( - [annotation("_In_opt_")] ID3D12PipelineState* pPipelineState - ); - - void DrawInstanced( - [annotation("_In_")] UINT VertexCountPerInstance, - [annotation("_In_")] UINT InstanceCount, - [annotation("_In_")] UINT StartVertexLocation, - [annotation("_In_")] UINT StartInstanceLocation - ); - - void DrawIndexedInstanced( - [annotation("_In_")] UINT IndexCountPerInstance, - [annotation("_In_")] UINT InstanceCount, - [annotation("_In_")] UINT StartIndexLocation, - [annotation("_In_")] INT BaseVertexLocation, - [annotation("_In_")] UINT StartInstanceLocation - ); - - void Dispatch( - [annotation("_In_")] UINT ThreadGroupCountX, - [annotation("_In_")] UINT ThreadGroupCountY, - [annotation("_In_")] UINT ThreadGroupCountZ - ); - - void CopyBufferRegion( - [annotation("_In_")] ID3D12Resource* pDstBuffer, - UINT64 DstOffset, - [annotation("_In_")] ID3D12Resource* pSrcBuffer, - UINT64 SrcOffset, - UINT64 NumBytes - ); - - void CopyTextureRegion( - [annotation("_In_")] const D3D12_TEXTURE_COPY_LOCATION* pDst, - UINT DstX, UINT DstY, UINT DstZ, - [annotation("_In_")] const D3D12_TEXTURE_COPY_LOCATION* pSrc, - [annotation("_In_opt_")] const D3D12_BOX* pSrcBox - ); - - void CopyResource( - [annotation("_In_")] ID3D12Resource* pDstResource, - [annotation("_In_")] ID3D12Resource* pSrcResource - ); - - void CopyTiles( - [annotation("_In_")] ID3D12Resource* pTiledResource, - [annotation("_In_")] const D3D12_TILED_RESOURCE_COORDINATE* pTileRegionStartCoordinate, - [annotation("_In_")] const D3D12_TILE_REGION_SIZE* pTileRegionSize, - [annotation("_In_")] ID3D12Resource* pBuffer, - UINT64 BufferStartOffsetInBytes, - D3D12_TILE_COPY_FLAGS Flags - ); - - void ResolveSubresource( - [annotation("_In_")] ID3D12Resource* pDstResource, - [annotation("_In_")] UINT DstSubresource, - [annotation("_In_")] ID3D12Resource* pSrcResource, - [annotation("_In_")] UINT SrcSubresource, - [annotation("_In_")] DXGI_FORMAT Format - ); - - void IASetPrimitiveTopology( - [annotation("_In_")] D3D12_PRIMITIVE_TOPOLOGY PrimitiveTopology - ); - - void RSSetViewports( - [annotation("_In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)")] UINT NumViewports, - [annotation("_In_reads_( NumViewports)")] const D3D12_VIEWPORT* pViewports - ); - - void RSSetScissorRects( - [annotation("_In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)")] UINT NumRects, - [annotation("_In_reads_( NumRects)")] const D3D12_RECT* pRects - ); - - void OMSetBlendFactor( - [annotation("_In_reads_opt_(4)")] const FLOAT BlendFactor[ 4 ] - ); - - void OMSetStencilRef( - [annotation("_In_")] UINT StencilRef - ); - - void SetPipelineState( - [annotation("_In_")] ID3D12PipelineState* pPipelineState - ); - - void ResourceBarrier( - [annotation("_In_")] UINT NumBarriers, - [annotation("_In_reads_(NumBarriers)")] const D3D12_RESOURCE_BARRIER* pBarriers - ); - - void ExecuteBundle( - [annotation("_In_")] ID3D12GraphicsCommandList* pCommandList - ); - - void SetDescriptorHeaps( - [annotation("_In_")] UINT NumDescriptorHeaps, - [annotation("_In_reads_(NumDescriptorHeaps)")] ID3D12DescriptorHeap* const* ppDescriptorHeaps - ); - - void SetComputeRootSignature( - [annotation("_In_opt_")] ID3D12RootSignature* pRootSignature - ); - - void SetGraphicsRootSignature( - [annotation("_In_opt_")] ID3D12RootSignature* pRootSignature - ); - - void SetComputeRootDescriptorTable( - [annotation("_In_")] UINT RootParameterIndex, - [annotation("_In_")] D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor - ); - - void SetGraphicsRootDescriptorTable( - [annotation("_In_")] UINT RootParameterIndex, - [annotation("_In_")] D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor - ); - - // Single constant - void SetComputeRoot32BitConstant( - [annotation("_In_")] UINT RootParameterIndex, - [annotation("_In_")] UINT SrcData, - [annotation("_In_")] UINT DestOffsetIn32BitValues - ); - - void SetGraphicsRoot32BitConstant( - [annotation("_In_")] UINT RootParameterIndex, - [annotation("_In_")] UINT SrcData, - [annotation("_In_")] UINT DestOffsetIn32BitValues - ); - - // Group of constants - void SetComputeRoot32BitConstants( - [annotation("_In_")] UINT RootParameterIndex, - [annotation("_In_")] UINT Num32BitValuesToSet, - [annotation("_In_reads_(Num32BitValuesToSet*sizeof(UINT))")] const void* pSrcData, - [annotation("_In_")] UINT DestOffsetIn32BitValues - ); - - void SetGraphicsRoot32BitConstants( - [annotation("_In_")] UINT RootParameterIndex, - [annotation("_In_")] UINT Num32BitValuesToSet, - [annotation("_In_reads_(Num32BitValuesToSet*sizeof(UINT))")] const void* pSrcData, - [annotation("_In_")] UINT DestOffsetIn32BitValues - ); - - // CBV - void SetComputeRootConstantBufferView( - [annotation("_In_")] UINT RootParameterIndex, - [annotation("_In_")] D3D12_GPU_VIRTUAL_ADDRESS BufferLocation - ); - - void SetGraphicsRootConstantBufferView( - [annotation("_In_")] UINT RootParameterIndex, - [annotation("_In_")] D3D12_GPU_VIRTUAL_ADDRESS BufferLocation - ); - - // SRV - void SetComputeRootShaderResourceView( - [annotation("_In_")] UINT RootParameterIndex, - [annotation("_In_")] D3D12_GPU_VIRTUAL_ADDRESS BufferLocation - ); - - void SetGraphicsRootShaderResourceView( - [annotation("_In_")] UINT RootParameterIndex, - [annotation("_In_")] D3D12_GPU_VIRTUAL_ADDRESS BufferLocation - ); - - // UAV - void SetComputeRootUnorderedAccessView( - [annotation("_In_")] UINT RootParameterIndex, - [annotation("_In_")] D3D12_GPU_VIRTUAL_ADDRESS BufferLocation - ); - - void SetGraphicsRootUnorderedAccessView( - [annotation("_In_")] UINT RootParameterIndex, - [annotation("_In_")] D3D12_GPU_VIRTUAL_ADDRESS BufferLocation - ); - - void IASetIndexBuffer( - [annotation("_In_opt_")] const D3D12_INDEX_BUFFER_VIEW* pView - ); - - void IASetVertexBuffers( - [annotation("_In_")] UINT StartSlot, - [annotation("_In_")] UINT NumViews, - [annotation("_In_reads_opt_(NumViews)")] const D3D12_VERTEX_BUFFER_VIEW* pViews - ); - - void SOSetTargets( - [annotation("_In_")] UINT StartSlot, - [annotation("_In_")] UINT NumViews, - [annotation("_In_reads_opt_(NumViews)")] const D3D12_STREAM_OUTPUT_BUFFER_VIEW* pViews - ); - - void OMSetRenderTargets( - [annotation("_In_")] UINT NumRenderTargetDescriptors, - [annotation("_In_opt_")] const D3D12_CPU_DESCRIPTOR_HANDLE* pRenderTargetDescriptors, - [annotation("_In_")] BOOL RTsSingleHandleToDescriptorRange, - [annotation("_In_opt_")] const D3D12_CPU_DESCRIPTOR_HANDLE* pDepthStencilDescriptor - ); - - void ClearDepthStencilView( - [annotation("_In_")] D3D12_CPU_DESCRIPTOR_HANDLE DepthStencilView, - [annotation("_In_")] D3D12_CLEAR_FLAGS ClearFlags, - [annotation("_In_")] FLOAT Depth, - [annotation("_In_")] UINT8 Stencil, - [annotation("_In_")] UINT NumRects, - [annotation("_In_reads_(NumRects)")] const D3D12_RECT* pRects - ); - - void ClearRenderTargetView( - [annotation("_In_")] D3D12_CPU_DESCRIPTOR_HANDLE RenderTargetView, - [annotation("_In_")] const FLOAT ColorRGBA[4], - [annotation("_In_")] UINT NumRects, - [annotation("_In_reads_(NumRects)")] const D3D12_RECT* pRects - ); - - void ClearUnorderedAccessViewUint( - [annotation("_In_")] D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap, - [annotation("_In_")] D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle, - [annotation("_In_")] ID3D12Resource* pResource, - [annotation("_In_")] const UINT Values[4], - [annotation("_In_")] UINT NumRects, - [annotation("_In_reads_(NumRects)")] const D3D12_RECT* pRects - ); - - void ClearUnorderedAccessViewFloat( - [annotation("_In_")] D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap, - [annotation("_In_")] D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle, - [annotation("_In_")] ID3D12Resource* pResource, - [annotation("_In_")] const FLOAT Values[4], - [annotation("_In_")] UINT NumRects, - [annotation("_In_reads_(NumRects)")] const D3D12_RECT* pRects - ); - - void DiscardResource( - [annotation("_In_")] ID3D12Resource* pResource, - [annotation("_In_opt_")] const D3D12_DISCARD_REGION* pRegion - ); - - void BeginQuery( - [annotation("_In_")] ID3D12QueryHeap* pQueryHeap, - [annotation("_In_")] D3D12_QUERY_TYPE Type, - [annotation("_In_")] UINT Index - ); - - void EndQuery( - [annotation("_In_")] ID3D12QueryHeap* pQueryHeap, - [annotation("_In_")] D3D12_QUERY_TYPE Type, - [annotation("_In_")] UINT Index - ); - - void ResolveQueryData( - [annotation("_In_")] ID3D12QueryHeap* pQueryHeap, - [annotation("_In_")] D3D12_QUERY_TYPE Type, - [annotation("_In_")] UINT StartIndex, - [annotation("_In_")] UINT NumQueries, - [annotation("_In_")] ID3D12Resource* pDestinationBuffer, - [annotation("_In_")] UINT64 AlignedDestinationBufferOffset - ); - - void SetPredication( - [annotation("_In_opt_")] ID3D12Resource* pBuffer, - [annotation("_In_")] UINT64 AlignedBufferOffset, - [annotation("_In_")] D3D12_PREDICATION_OP Operation - ); - - void SetMarker(UINT Metadata, [annotation("_In_reads_bytes_opt_(Size)")] const void* pData, UINT Size); - void BeginEvent(UINT Metadata, [annotation("_In_reads_bytes_opt_(Size)")] const void* pData, UINT Size); - void EndEvent(); - - void ExecuteIndirect( - [annotation("_In_")] ID3D12CommandSignature* pCommandSignature, - [annotation("_In_")] UINT MaxCommandCount, - [annotation("_In_")] ID3D12Resource* pArgumentBuffer, - [annotation("_In_")] UINT64 ArgumentBufferOffset, - [annotation("_In_opt_")] ID3D12Resource* pCountBuffer, - [annotation("_In_")] UINT64 CountBufferOffset - ); -} - -[ uuid( 553103fb-1fe7-4557-bb38-946d7d0e7ca7 ), object, local, pointer_default( unique ) ] -interface ID3D12GraphicsCommandList1 - : ID3D12GraphicsCommandList -{ - void AtomicCopyBufferUINT( - [annotation("_In_")] ID3D12Resource* pDstBuffer, - UINT64 DstOffset, - [annotation("_In_")] ID3D12Resource* pSrcBuffer, - UINT64 SrcOffset, - UINT Dependencies, // 0 Dependencies means only the dst buffer offset is synchronized - [annotation("_In_reads_(Dependencies)")] ID3D12Resource*const* ppDependentResources, - [annotation("_In_reads_(Dependencies)")] const D3D12_SUBRESOURCE_RANGE_UINT64* pDependentSubresourceRanges - ); - - // UINT64 is only valid on UMA architectures - void AtomicCopyBufferUINT64( - [annotation("_In_")] ID3D12Resource* pDstBuffer, - UINT64 DstOffset, - [annotation("_In_")] ID3D12Resource* pSrcBuffer, - UINT64 SrcOffset, - UINT Dependencies, // 0 Dependencies means only the dst buffer offset is synchronized - [annotation("_In_reads_(Dependencies)")] ID3D12Resource*const* ppDependentResources, - [annotation("_In_reads_(Dependencies)")] const D3D12_SUBRESOURCE_RANGE_UINT64* pDependentSubresourceRanges - ); - - void OMSetDepthBounds( - [annotation("_In_")] FLOAT Min, - [annotation("_In_")] FLOAT Max - ); - - void SetSamplePositions( - [annotation("_In_")] UINT NumSamplesPerPixel, - [annotation("_In_")] UINT NumPixels, - [annotation("_In_reads_(NumSamplesPerPixel*NumPixels)")] D3D12_SAMPLE_POSITION* pSamplePositions - ); - - void ResolveSubresourceRegion( - [annotation("_In_")] ID3D12Resource* pDstResource, - [annotation("_In_")] UINT DstSubresource, - [annotation("_In_")] UINT DstX, - [annotation("_In_")] UINT DstY, - [annotation("_In_")] ID3D12Resource* pSrcResource, - [annotation("_In_")] UINT SrcSubresource, - [annotation("_In_opt_")] D3D12_RECT* pSrcRect, - [annotation("_In_")] DXGI_FORMAT Format, - [annotation("_In_")] D3D12_RESOLVE_MODE ResolveMode - ); - - void SetViewInstanceMask( - [annotation("_In_")] UINT Mask - ); - -} - -typedef struct D3D12_WRITEBUFFERIMMEDIATE_PARAMETER -{ - D3D12_GPU_VIRTUAL_ADDRESS Dest; - UINT32 Value; -} D3D12_WRITEBUFFERIMMEDIATE_PARAMETER; - -typedef enum D3D12_WRITEBUFFERIMMEDIATE_MODE -{ - D3D12_WRITEBUFFERIMMEDIATE_MODE_DEFAULT = 0x0, - D3D12_WRITEBUFFERIMMEDIATE_MODE_MARKER_IN = 0x1, - D3D12_WRITEBUFFERIMMEDIATE_MODE_MARKER_OUT = 0x2, - -} D3D12_WRITEBUFFERIMMEDIATE_MODE; - -[uuid(38C3E585-FF17-412C-9150-4FC6F9D72A28), object, local, pointer_default(unique)] -interface ID3D12GraphicsCommandList2 : ID3D12GraphicsCommandList1 -{ - void WriteBufferImmediate( - UINT Count, - [annotation("_In_reads_(Count)")] const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams, - [annotation("_In_reads_opt_(Count)")] const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes - ); -} - -[ uuid( 0ec870a6-5d7e-4c22-8cfc-5baae07616ed ), object, local, pointer_default( unique ) ] -interface ID3D12CommandQueue - : ID3D12Pageable -{ - void UpdateTileMappings( - [annotation("_In_")] ID3D12Resource* pResource, - UINT NumResourceRegions, - [annotation("_In_reads_opt_(NumResourceRegions)")] const D3D12_TILED_RESOURCE_COORDINATE* pResourceRegionStartCoordinates, - [annotation("_In_reads_opt_(NumResourceRegions)")] const D3D12_TILE_REGION_SIZE* pResourceRegionSizes, - [annotation("_In_opt_")] ID3D12Heap* pHeap, - UINT NumRanges, - [annotation("_In_reads_opt_(NumRanges)")] const D3D12_TILE_RANGE_FLAGS* pRangeFlags, - [annotation("_In_reads_opt_(NumRanges)")] const UINT* pHeapRangeStartOffsets, - [annotation("_In_reads_opt_(NumRanges)")] const UINT* pRangeTileCounts, - D3D12_TILE_MAPPING_FLAGS Flags ); - - void CopyTileMappings( - [annotation("_In_")] ID3D12Resource* pDstResource, - [annotation("_In_")] const D3D12_TILED_RESOURCE_COORDINATE* pDstRegionStartCoordinate, - [annotation("_In_")] ID3D12Resource* pSrcResource, - [annotation("_In_")] const D3D12_TILED_RESOURCE_COORDINATE* pSrcRegionStartCoordinate, - [annotation("_In_")] const D3D12_TILE_REGION_SIZE* pRegionSize, - D3D12_TILE_MAPPING_FLAGS Flags ); - - void ExecuteCommandLists( - [annotation("_In_")] UINT NumCommandLists, - [annotation("_In_reads_(NumCommandLists)")] ID3D12CommandList * const * ppCommandLists - ); - - void SetMarker(UINT Metadata, [annotation("_In_reads_bytes_opt_(Size)")] const void* pData, UINT Size); - void BeginEvent(UINT Metadata, [annotation("_In_reads_bytes_opt_(Size)")] const void* pData, UINT Size); - void EndEvent(); - - HRESULT Signal(ID3D12Fence* pFence, UINT64 Value); - HRESULT Wait(ID3D12Fence* pFence, UINT64 Value); - - HRESULT GetTimestampFrequency( - [annotation("_Out_")] UINT64* pFrequency - ); - - HRESULT GetClockCalibration( - [annotation("_Out_")] UINT64* pGpuTimestamp, - [annotation("_Out_")] UINT64* pCpuTimestamp - ); - - D3D12_COMMAND_QUEUE_DESC GetDesc(); -} - -[ uuid( 189819f1-1db6-4b57-be54-1821339b85f7 ), object, local, pointer_default( unique ) ] -interface ID3D12Device - : ID3D12Object -{ - UINT GetNodeCount(); - - HRESULT CreateCommandQueue( - [annotation("_In_")] const D3D12_COMMAND_QUEUE_DESC* pDesc, - [in] REFIID riid, // Expected: ID3D12CommandQueue - [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppCommandQueue - ); - - HRESULT CreateCommandAllocator( - [annotation("_In_")] D3D12_COMMAND_LIST_TYPE type, - [in] REFIID riid, // Expected: ID3D12CommandAllocator - [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppCommandAllocator - ); - - HRESULT CreateGraphicsPipelineState( - [annotation("_In_")] const D3D12_GRAPHICS_PIPELINE_STATE_DESC* pDesc, - [in] REFIID riid, // Expected: ID3D12PipelineState - [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppPipelineState - ); - - HRESULT CreateComputePipelineState( - [annotation("_In_")] const D3D12_COMPUTE_PIPELINE_STATE_DESC* pDesc, - [in] REFIID riid, // Expected: ID3D12PipelineState - [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppPipelineState - ); - - HRESULT CreateCommandList( - [annotation("_In_")] UINT nodeMask, - [annotation("_In_")] D3D12_COMMAND_LIST_TYPE type, - [annotation("_In_")] ID3D12CommandAllocator* pCommandAllocator, - [annotation("_In_opt_")] ID3D12PipelineState* pInitialState, - [in] REFIID riid, // Expected: ID3D12CommandList - [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppCommandList - ); - - HRESULT CheckFeatureSupport( - D3D12_FEATURE Feature, - [annotation("_Inout_updates_bytes_(FeatureSupportDataSize)")] void* pFeatureSupportData, - UINT FeatureSupportDataSize - ); - - HRESULT CreateDescriptorHeap( - [annotation("_In_")] const D3D12_DESCRIPTOR_HEAP_DESC* pDescriptorHeapDesc, - [in] REFIID riid, // Expected ID3D12DescriptorHeap - [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppvHeap); - - UINT GetDescriptorHandleIncrementSize( - [annotation("_In_")] D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType); - - HRESULT CreateRootSignature( - [annotation("_In_")] UINT nodeMask, - [annotation("_In_reads_(blobLengthInBytes)")] const void* pBlobWithRootSignature, - [annotation("_In_")] SIZE_T blobLengthInBytes, - [in] REFIID riid, // Expected ID3D12RootSignature - [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppvRootSignature); - - void CreateConstantBufferView( - [annotation("_In_opt_")] const D3D12_CONSTANT_BUFFER_VIEW_DESC* pDesc, - [annotation("_In_")] D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - void CreateShaderResourceView( - [annotation("_In_opt_")] ID3D12Resource* pResource, - [annotation("_In_opt_")] const D3D12_SHADER_RESOURCE_VIEW_DESC* pDesc, - [annotation("_In_")] D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - void CreateUnorderedAccessView( - [annotation("_In_opt_")] ID3D12Resource* pResource, - [annotation("_In_opt_")] ID3D12Resource* pCounterResource, - [annotation("_In_opt_")] const D3D12_UNORDERED_ACCESS_VIEW_DESC* pDesc, - [annotation("_In_")] D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - void CreateRenderTargetView( - [annotation("_In_opt_")] ID3D12Resource* pResource, - [annotation("_In_opt_")] const D3D12_RENDER_TARGET_VIEW_DESC* pDesc, - [annotation("_In_")] D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - void CreateDepthStencilView( - [annotation("_In_opt_")] ID3D12Resource* pResource, - [annotation("_In_opt_")] const D3D12_DEPTH_STENCIL_VIEW_DESC* pDesc, - [annotation("_In_")] D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - void CreateSampler( - [annotation("_In_")] const D3D12_SAMPLER_DESC* pDesc, - [annotation("_In_")] D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - void CopyDescriptors( - [annotation("_In_")] UINT NumDestDescriptorRanges, - [annotation("_In_reads_(NumDestDescriptorRanges)")] const D3D12_CPU_DESCRIPTOR_HANDLE* pDestDescriptorRangeStarts, - [annotation("_In_reads_opt_(NumDestDescriptorRanges)")] const UINT* pDestDescriptorRangeSizes, // NULL means all ranges 1 - [annotation("_In_")] UINT NumSrcDescriptorRanges, - [annotation("_In_reads_(NumSrcDescriptorRanges)")] const D3D12_CPU_DESCRIPTOR_HANDLE* pSrcDescriptorRangeStarts, - [annotation("_In_reads_opt_(NumSrcDescriptorRanges)")] const UINT* pSrcDescriptorRangeSizes, // NULL means all ranges 1 - [annotation("_In_")] D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType); - - void CopyDescriptorsSimple( - [annotation("_In_")] UINT NumDescriptors, - [annotation("_In_")] D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart, - [annotation("_In_")] D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart, - [annotation("_In_")] D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType); - - D3D12_RESOURCE_ALLOCATION_INFO GetResourceAllocationInfo( - [annotation("_In_")] UINT visibleMask, - [annotation("_In_")] UINT numResourceDescs, - [annotation("_In_reads_(numResourceDescs)")] const D3D12_RESOURCE_DESC* pResourceDescs ); - - D3D12_HEAP_PROPERTIES GetCustomHeapProperties( - [annotation("_In_")] UINT nodeMask, - D3D12_HEAP_TYPE heapType - ); - - HRESULT CreateCommittedResource( - [annotation("_In_")] const D3D12_HEAP_PROPERTIES* pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - [annotation("_In_")] const D3D12_RESOURCE_DESC* pDesc, - D3D12_RESOURCE_STATES InitialResourceState, - [annotation("_In_opt_")] const D3D12_CLEAR_VALUE* pOptimizedClearValue, - [in] REFIID riidResource, // Expected: ID3D12Resource* - [out, iid_is(riidResource), annotation("_COM_Outptr_opt_")] void** ppvResource ); - - HRESULT CreateHeap( - [annotation("_In_")] const D3D12_HEAP_DESC* pDesc, - [in] REFIID riid, // Expected: ID3D12Heap* - [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppvHeap ); - - HRESULT CreatePlacedResource( - [annotation("_In_")] ID3D12Heap* pHeap, - UINT64 HeapOffset, - [annotation("_In_")] const D3D12_RESOURCE_DESC* pDesc, - D3D12_RESOURCE_STATES InitialState, - [annotation("_In_opt_")] const D3D12_CLEAR_VALUE* pOptimizedClearValue, - [in] REFIID riid, // Expected: ID3D12Resource* - [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppvResource ); - - HRESULT CreateReservedResource( - [annotation("_In_")] const D3D12_RESOURCE_DESC* pDesc, - D3D12_RESOURCE_STATES InitialState, - [annotation("_In_opt_")] const D3D12_CLEAR_VALUE* pOptimizedClearValue, - [in] REFIID riid, // Expected: ID3D12Resource* - [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppvResource ); - - HRESULT CreateSharedHandle( - [annotation("_In_")] ID3D12DeviceChild* pObject, - [annotation("_In_opt_")] const SECURITY_ATTRIBUTES* pAttributes, - DWORD Access, - [annotation("_In_opt_")] LPCWSTR Name, - [annotation("_Out_")] HANDLE* pHandle ); - - HRESULT OpenSharedHandle( - [annotation("_In_")] HANDLE NTHandle, - [in] REFIID riid, // Expected: ID3D12Resource*, ID3D12Heap*, or ID3D12Fence - [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppvObj ); - - HRESULT OpenSharedHandleByName( - [annotation("_In_")] LPCWSTR Name, - DWORD Access, - [out, annotation("_Out_")] HANDLE* pNTHandle ); - - HRESULT MakeResident( - UINT NumObjects, - [annotation("_In_reads_(NumObjects)")] ID3D12Pageable*const* ppObjects ); - - HRESULT Evict( - UINT NumObjects, - [annotation("_In_reads_(NumObjects)")] ID3D12Pageable*const* ppObjects ); - - HRESULT CreateFence( - UINT64 InitialValue, - D3D12_FENCE_FLAGS Flags, - [in] REFIID riid, // Expected: ID3D12Fence - [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppFence); - - HRESULT GetDeviceRemovedReason(); - - void GetCopyableFootprints( - [annotation("_In_")] const D3D12_RESOURCE_DESC* pResourceDesc, - [annotation("_In_range_(0,D3D12_REQ_SUBRESOURCES)")] UINT FirstSubresource, - [annotation("_In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource)")] UINT NumSubresources, - UINT64 BaseOffset, - [annotation("_Out_writes_opt_(NumSubresources)")] D3D12_PLACED_SUBRESOURCE_FOOTPRINT* pLayouts, - [annotation("_Out_writes_opt_(NumSubresources)")] UINT* pNumRows, - [annotation("_Out_writes_opt_(NumSubresources)")] UINT64* pRowSizeInBytes, - [annotation("_Out_opt_")] UINT64* pTotalBytes ); - - HRESULT CreateQueryHeap( - [annotation("_In_")] const D3D12_QUERY_HEAP_DESC* pDesc, - [in] REFIID riid, // Expected: ID3D12QueryHeap - [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppvHeap - ); - - HRESULT SetStablePowerState(BOOL Enable); - - HRESULT CreateCommandSignature( - [annotation("_In_")] const D3D12_COMMAND_SIGNATURE_DESC* pDesc, - [annotation("_In_opt_")] ID3D12RootSignature* pRootSignature, - [in] REFIID riid, // Expected: ID3D12CommandSignature - [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppvCommandSignature - ); - - void GetResourceTiling( - [annotation("_In_")] ID3D12Resource* pTiledResource, - [annotation("_Out_opt_")] UINT* pNumTilesForEntireResource, - [annotation("_Out_opt_")] D3D12_PACKED_MIP_INFO* pPackedMipDesc, - [annotation("_Out_opt_")] D3D12_TILE_SHAPE* pStandardTileShapeForNonPackedMips, - [annotation("_Inout_opt_")] UINT* pNumSubresourceTilings, - [annotation("_In_")] UINT FirstSubresourceTilingToGet, - [annotation("_Out_writes_(*pNumSubresourceTilings)")] D3D12_SUBRESOURCE_TILING* pSubresourceTilingsForNonPackedMips - ); - - LUID GetAdapterLuid(); -} - -// D3D12 Revision 1 -[ uuid( c64226a8-9201-46af-b4cc-53fb9ff7414f ), object, local, pointer_default( unique ) ] -interface ID3D12PipelineLibrary - : ID3D12DeviceChild -{ - HRESULT StorePipeline( - [annotation("_In_opt_")] LPCWSTR pName, - [annotation("_In_")] ID3D12PipelineState *pPipeline - ); - - HRESULT LoadGraphicsPipeline( - [annotation("_In_")] LPCWSTR pName, - [annotation("_In_")] const D3D12_GRAPHICS_PIPELINE_STATE_DESC* pDesc, - [in] REFIID riid, // Expected: ID3D12PipelineState - [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppPipelineState - ); - - HRESULT LoadComputePipeline( - [annotation("_In_")] LPCWSTR pName, - [annotation("_In_")] const D3D12_COMPUTE_PIPELINE_STATE_DESC* pDesc, - [in] REFIID riid, // Expected: ID3D12PipelineState - [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppPipelineState - ); - - SIZE_T GetSerializedSize(); - - HRESULT Serialize( - [annotation("_Out_writes_(DataSizeInBytes)")] void* pData, - SIZE_T DataSizeInBytes - ); -} - -// Pipeline State v2 -[ uuid( 80eabf42-2568-4e5e-bd82-c37f86961dc3 ), object, local, pointer_default( unique ) ] -interface ID3D12PipelineLibrary1 - : ID3D12PipelineLibrary -{ - HRESULT LoadPipeline( - [annotation("_In_")] LPCWSTR pName, - [annotation("_In_")] const D3D12_PIPELINE_STATE_STREAM_DESC* pDesc, - [in] REFIID riid, // Expected: ID3D12PipelineState - [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppPipelineState - ); -} - -typedef enum D3D12_MULTIPLE_FENCE_WAIT_FLAGS -{ - D3D12_MULTIPLE_FENCE_WAIT_FLAG_NONE = 0x0, - D3D12_MULTIPLE_FENCE_WAIT_FLAG_ANY = 0x1, - - D3D12_MULTIPLE_FENCE_WAIT_FLAG_ALL = 0x0, // Alias, default behavior is ALL -} D3D12_MULTIPLE_FENCE_WAIT_FLAGS; -cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_MULTIPLE_FENCE_WAIT_FLAGS )" ) - -// Applications may use the whole value range of UINT for a priority. -// These names are merely semantic suggestions. -typedef enum D3D12_RESIDENCY_PRIORITY -{ - D3D12_RESIDENCY_PRIORITY_MINIMUM = 0x28000000, - D3D12_RESIDENCY_PRIORITY_LOW = 0x50000000, - D3D12_RESIDENCY_PRIORITY_NORMAL = 0x78000000, - D3D12_RESIDENCY_PRIORITY_HIGH = 0xa0010000, - D3D12_RESIDENCY_PRIORITY_MAXIMUM = 0xc8000000, -} D3D12_RESIDENCY_PRIORITY; - -[uuid(77acce80-638e-4e65-8895-c1f23386863e), object, local, pointer_default(unique)] -interface ID3D12Device1 - : ID3D12Device -{ - HRESULT CreatePipelineLibrary( - [annotation("_In_reads_(BlobLength)")] const void *pLibraryBlob, - SIZE_T BlobLength, - [in] REFIID riid, // Expected: ID3D12PipelineLibrary - [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppPipelineLibrary - ); - - HRESULT SetEventOnMultipleFenceCompletion( - [annotation("_In_reads_(NumFences)")] ID3D12Fence* const* ppFences, - [annotation("_In_reads_(NumFences)")] const UINT64* pFenceValues, - UINT NumFences, - D3D12_MULTIPLE_FENCE_WAIT_FLAGS Flags, - HANDLE hEvent - ); - - HRESULT SetResidencyPriority( - UINT NumObjects, - [annotation("_In_reads_(NumObjects)")] ID3D12Pageable*const* ppObjects, - [annotation("_In_reads_(NumObjects)")] const D3D12_RESIDENCY_PRIORITY* pPriorities ); -} - -[uuid(30baa41e-b15b-475c-a0bb-1af5c5b64328), object, local, pointer_default(unique)] -interface ID3D12Device2 - : ID3D12Device1 -{ - HRESULT CreatePipelineState( - [in] const D3D12_PIPELINE_STATE_STREAM_DESC* pDesc, - [in] REFIID riid, // Can be any pipeline state interface, provided the pipeline subobjects match - [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppPipelineState - ); -} - -typedef enum D3D12_RESIDENCY_FLAGS -{ - D3D12_RESIDENCY_FLAG_NONE = 0x0, - D3D12_RESIDENCY_FLAG_DENY_OVERBUDGET = 0x1, -} D3D12_RESIDENCY_FLAGS; -cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_RESIDENCY_FLAGS )" ) - -[uuid(81dadc15-2bad-4392-93c5-101345c4aa98), object, local, pointer_default(unique)] -interface ID3D12Device3 - : ID3D12Device2 -{ - HRESULT OpenExistingHeapFromAddress( - [annotation("_In_")] const void* pAddress, - [in] REFIID riid, // Expected: ID3D12Heap - [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppvHeap - ); - HRESULT OpenExistingHeapFromFileMapping( - [annotation("_In_")] HANDLE hFileMapping, - [in] REFIID riid, // Expected: ID3D12Heap - [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppvHeap - ); - HRESULT EnqueueMakeResident( - D3D12_RESIDENCY_FLAGS Flags, - UINT NumObjects, - [annotation("_In_reads_(NumObjects)")] ID3D12Pageable*const* ppObjects, - [annotation("_In_")] ID3D12Fence* pFenceToSignal, - UINT64 FenceValueToSignal - ); -} - -typedef enum D3D12_COMMAND_LIST_FLAGS -{ - D3D12_COMMAND_LIST_FLAG_NONE = 0x0, -} D3D12_COMMAND_LIST_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_COMMAND_LIST_FLAGS )") - - -typedef enum D3D12_COMMAND_POOL_FLAGS -{ - D3D12_COMMAND_POOL_FLAG_NONE = 0x0, - -} D3D12_COMMAND_POOL_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_COMMAND_POOL_FLAGS )") - -typedef enum D3D12_COMMAND_RECORDER_FLAGS -{ - D3D12_COMMAND_RECORDER_FLAG_NONE = 0x0, - -} D3D12_COMMAND_RECORDER_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_COMMAND_RECORDER_FLAGS )") - -typedef enum D3D12_PROTECTED_SESSION_STATUS -{ - D3D12_PROTECTED_SESSION_STATUS_OK = 0, - D3D12_PROTECTED_SESSION_STATUS_INVALID = 1, -} D3D12_PROTECTED_SESSION_STATUS; - -[uuid(A1533D18-0AC1-4084-85B9-89A96116806B), object, local, pointer_default(unique)] -interface ID3D12ProtectedSession - : ID3D12DeviceChild -{ - HRESULT GetStatusFence( - [in] REFIID riid, - [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppFence); - - D3D12_PROTECTED_SESSION_STATUS GetSessionStatus(); -} - -typedef enum D3D12_PROTECTED_RESOURCE_SESSION_SUPPORT_FLAGS -{ - D3D12_PROTECTED_RESOURCE_SESSION_SUPPORT_FLAG_NONE = 0x0, - D3D12_PROTECTED_RESOURCE_SESSION_SUPPORT_FLAG_SUPPORTED = 0x1, - -} D3D12_PROTECTED_RESOURCE_SESSION_SUPPORT_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_PROTECTED_RESOURCE_SESSION_SUPPORT_FLAGS )") - -typedef struct D3D12_FEATURE_DATA_PROTECTED_RESOURCE_SESSION_SUPPORT -{ - UINT NodeIndex; // input - D3D12_PROTECTED_RESOURCE_SESSION_SUPPORT_FLAGS Support; // output -} D3D12_FEATURE_DATA_PROTECTED_RESOURCE_SESSION_SUPPORT; - -typedef enum D3D12_PROTECTED_RESOURCE_SESSION_FLAGS -{ - D3D12_PROTECTED_RESOURCE_SESSION_FLAG_NONE = 0x0, - -} D3D12_PROTECTED_RESOURCE_SESSION_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_PROTECTED_RESOURCE_SESSION_FLAGS )") - -typedef struct D3D12_PROTECTED_RESOURCE_SESSION_DESC -{ - UINT NodeMask; - D3D12_PROTECTED_RESOURCE_SESSION_FLAGS Flags; -} D3D12_PROTECTED_RESOURCE_SESSION_DESC; - -[uuid(6CD696F4-F289-40CC-8091-5A6C0A099C3D), object, local, pointer_default(unique)] -interface ID3D12ProtectedResourceSession - : ID3D12ProtectedSession -{ - D3D12_PROTECTED_RESOURCE_SESSION_DESC GetDesc(); -} - -[uuid(e865df17-a9ee-46f9-a463-3098315aa2e5), object, local, pointer_default(unique)] -interface ID3D12Device4 - : ID3D12Device3 -{ - HRESULT CreateCommandList1( - [annotation("_In_")] UINT nodeMask, - [annotation("_In_")] D3D12_COMMAND_LIST_TYPE type, - [annotation("_In_")] D3D12_COMMAND_LIST_FLAGS flags, - [in] REFIID riid, // Expected: ID3D12CommandList - [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppCommandList - ); - - HRESULT CreateProtectedResourceSession( - [annotation("_In_")] const D3D12_PROTECTED_RESOURCE_SESSION_DESC* pDesc, - [annotation("_In_")] REFIID riid, // Expected: ID3D12ProtectedResourceSession, - [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppSession - ); - - HRESULT CreateCommittedResource1( - [annotation("_In_")] const D3D12_HEAP_PROPERTIES* pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - [annotation("_In_")] const D3D12_RESOURCE_DESC* pDesc, - D3D12_RESOURCE_STATES InitialResourceState, - [annotation("_In_opt_")] const D3D12_CLEAR_VALUE* pOptimizedClearValue, - [annotation("_In_opt_")] ID3D12ProtectedResourceSession *pProtectedSession, - [in] REFIID riidResource, // Expected: ID3D12Resource1* - [out, iid_is(riidResource), annotation("_COM_Outptr_opt_")] void** ppvResource - ); - - HRESULT CreateHeap1( - [annotation("_In_")] const D3D12_HEAP_DESC* pDesc, - [annotation("_In_opt_")] ID3D12ProtectedResourceSession *pProtectedSession, - [in] REFIID riid, // Expected: ID3D12Heap1* - [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppvHeap - ); - - HRESULT CreateReservedResource1( - [annotation("_In_")] const D3D12_RESOURCE_DESC* pDesc, - D3D12_RESOURCE_STATES InitialState, - [annotation("_In_opt_")] const D3D12_CLEAR_VALUE* pOptimizedClearValue, - [annotation("_In_opt_")] ID3D12ProtectedResourceSession *pProtectedSession, - [in] REFIID riid, // Expected: ID3D12Resource1* - [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppvResource - ); - - D3D12_RESOURCE_ALLOCATION_INFO GetResourceAllocationInfo1( - UINT visibleMask, - UINT numResourceDescs, - [annotation("_In_reads_(numResourceDescs)")] const D3D12_RESOURCE_DESC* pResourceDescs, - [annotation("_Out_writes_opt_(numResourceDescs)")] D3D12_RESOURCE_ALLOCATION_INFO1* pResourceAllocationInfo1 - ); -} - -typedef enum D3D12_LIFETIME_STATE -{ - D3D12_LIFETIME_STATE_IN_USE, - D3D12_LIFETIME_STATE_NOT_IN_USE, -} D3D12_LIFETIME_STATE; - -interface ID3D12LifetimeTracker; - -[uuid(e667af9f-cd56-4f46-83ce-032e595d70a8), object, local, pointer_default(unique)] -interface ID3D12LifetimeOwner : IUnknown -{ - void LifetimeStateUpdated(D3D12_LIFETIME_STATE NewState); -} - -[uuid(f1df64b6-57fd-49cd-8807-c0eb88b45c8f), object, local, pointer_default(unique)] -interface ID3D12SwapChainAssistant - : IUnknown -{ - LUID GetLUID(); - HRESULT GetSwapChainObject(REFIID riid, [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppv); - HRESULT GetCurrentResourceAndCommandQueue(REFIID riidResource, [out, iid_is(riidResource), annotation("_COM_Outptr_")] void** ppvResource, - REFIID riidQueue, [out, iid_is(riidQueue), annotation("_COM_Outptr_")] void** ppvQueue); - HRESULT InsertImplicitSync(); -} - -[uuid(3fd03d36-4eb1-424a-a582-494ecb8ba813), object, local, pointer_default(unique)] -interface ID3D12LifetimeTracker - : ID3D12DeviceChild -{ - HRESULT DestroyOwnedObject([annotation("_In_")] ID3D12DeviceChild* pObject); -} - -typedef enum D3D12_META_COMMAND_PARAMETER_TYPE -{ - D3D12_META_COMMAND_PARAMETER_TYPE_FLOAT = 0, - D3D12_META_COMMAND_PARAMETER_TYPE_UINT64 = 1, - D3D12_META_COMMAND_PARAMETER_TYPE_GPU_VIRTUAL_ADDRESS = 2, - D3D12_META_COMMAND_PARAMETER_TYPE_CPU_DESCRIPTOR_HANDLE_HEAP_TYPE_CBV_SRV_UAV = 3, - D3D12_META_COMMAND_PARAMETER_TYPE_GPU_DESCRIPTOR_HANDLE_HEAP_TYPE_CBV_SRV_UAV = 4, -} D3D12_META_COMMAND_PARAMETER_TYPE; - -typedef enum D3D12_META_COMMAND_PARAMETER_FLAGS -{ - D3D12_META_COMMAND_PARAMETER_FLAG_INPUT = 0x00000001, - D3D12_META_COMMAND_PARAMETER_FLAG_OUTPUT = 0x00000002 -} D3D12_META_COMMAND_PARAMETER_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_META_COMMAND_PARAMETER_FLAGS )") - -typedef enum D3D12_META_COMMAND_PARAMETER_STAGE -{ - D3D12_META_COMMAND_PARAMETER_STAGE_CREATION = 0, - D3D12_META_COMMAND_PARAMETER_STAGE_INITIALIZATION = 1, - D3D12_META_COMMAND_PARAMETER_STAGE_EXECUTION = 2, -} D3D12_META_COMMAND_PARAMETER_STAGE; - -typedef struct D3D12_META_COMMAND_PARAMETER_DESC -{ - LPCWSTR Name; - D3D12_META_COMMAND_PARAMETER_TYPE Type; - D3D12_META_COMMAND_PARAMETER_FLAGS Flags; - D3D12_RESOURCE_STATES RequiredResourceState; - UINT StructureOffset; -} D3D12_META_COMMAND_PARAMETER_DESC; - -typedef enum D3D12_GRAPHICS_STATES -{ - D3D12_GRAPHICS_STATE_NONE = 0, - D3D12_GRAPHICS_STATE_IA_VERTEX_BUFFERS = (1 << 0), - D3D12_GRAPHICS_STATE_IA_INDEX_BUFFER = (1 << 1), - D3D12_GRAPHICS_STATE_IA_PRIMITIVE_TOPOLOGY = (1 << 2), - D3D12_GRAPHICS_STATE_DESCRIPTOR_HEAP = (1 << 3), - D3D12_GRAPHICS_STATE_GRAPHICS_ROOT_SIGNATURE = (1 << 4), - D3D12_GRAPHICS_STATE_COMPUTE_ROOT_SIGNATURE = (1 << 5), - D3D12_GRAPHICS_STATE_RS_VIEWPORTS = (1 << 6), - D3D12_GRAPHICS_STATE_RS_SCISSOR_RECTS = (1 << 7), - D3D12_GRAPHICS_STATE_PREDICATION = (1 << 8), - D3D12_GRAPHICS_STATE_OM_RENDER_TARGETS = (1 << 9), - D3D12_GRAPHICS_STATE_OM_STENCIL_REF = (1 << 10), - D3D12_GRAPHICS_STATE_OM_BLEND_FACTOR = (1 << 11), - D3D12_GRAPHICS_STATE_PIPELINE_STATE = (1 << 12), - D3D12_GRAPHICS_STATE_SO_TARGETS = (1 << 13), - D3D12_GRAPHICS_STATE_OM_DEPTH_BOUNDS = (1 << 14), - D3D12_GRAPHICS_STATE_SAMPLE_POSITIONS = (1 << 15), - D3D12_GRAPHICS_STATE_VIEW_INSTANCE_MASK = (1 << 16), - -} D3D12_GRAPHICS_STATES; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_GRAPHICS_STATES )") - -typedef struct D3D12_META_COMMAND_DESC -{ - GUID Id; - LPCWSTR Name; - D3D12_GRAPHICS_STATES InitializationDirtyState; - D3D12_GRAPHICS_STATES ExecutionDirtyState; -} D3D12_META_COMMAND_DESC; - -[uuid(47016943-fca8-4594-93ea-af258b55346d), object, local, pointer_default(unique)] -interface ID3D12StateObject - : ID3D12Pageable -{ -} - -[uuid(de5fa827-9bf9-4f26-89ff-d7f56fde3860), object, local, pointer_default(unique)] -interface ID3D12StateObjectProperties - : IUnknown -{ - void* GetShaderIdentifier([annotation("_In_")] LPCWSTR pExportName); - UINT64 GetShaderStackSize([annotation("_In_")] LPCWSTR pExportName); - UINT64 GetPipelineStackSize(); - void SetPipelineStackSize(UINT64 PipelineStackSizeInBytes); -} - -typedef struct D3D12_PROGRAM_IDENTIFIER -{ - UINT64 OpaqueData[4]; -} D3D12_PROGRAM_IDENTIFIER; - -[uuid(460caac7-1d24-446a-a184-ca67db494138), object, local, pointer_default(unique)] -interface ID3D12StateObjectProperties1 - : ID3D12StateObjectProperties -{ - D3D12_PROGRAM_IDENTIFIER GetProgramIdentifier(LPCWSTR pProgramName); -} - -typedef struct D3D12_NODE_ID -{ - LPCWSTR Name; - UINT ArrayIndex; -} D3D12_NODE_ID; - -typedef struct D3D12_WORK_GRAPH_MEMORY_REQUIREMENTS -{ - UINT64 MinSizeInBytes; - UINT64 MaxSizeInBytes; - UINT SizeGranularityInBytes; -} D3D12_WORK_GRAPH_MEMORY_REQUIREMENTS; - -[uuid(065acf71-f863-4b89-82f4-02e4d5886757), object, local, pointer_default(unique)] -interface ID3D12WorkGraphProperties : IUnknown -{ - UINT GetNumWorkGraphs(); - LPCWSTR GetProgramName(UINT WorkGraphIndex); - UINT GetWorkGraphIndex(LPCWSTR pProgramName); - - UINT GetNumNodes(UINT WorkGraphIndex); - D3D12_NODE_ID GetNodeID(UINT WorkGraphIndex, UINT NodeIndex); - UINT GetNodeIndex(UINT WorkGraphIndex, D3D12_NODE_ID NodeID); - UINT GetNodeLocalRootArgumentsTableIndex(UINT WorkGraphIndex, UINT NodeIndex); - - UINT GetNumEntrypoints(UINT WorkGraphIndex); - D3D12_NODE_ID GetEntrypointID(UINT WorkGraphIndex, UINT EntrypointIndex); - UINT GetEntrypointIndex(UINT WorkGraphIndex, D3D12_NODE_ID NodeID); - UINT GetEntrypointRecordSizeInBytes(UINT WorkGraphIndex, UINT EntrypointIndex); - - void GetWorkGraphMemoryRequirements( - UINT WorkGraphIndex, - [annotation("_Out_")] D3D12_WORK_GRAPH_MEMORY_REQUIREMENTS* pWorkGraphMemoryRequirements); - - UINT GetEntrypointRecordAlignmentInBytes(UINT WorkGraphIndex, UINT EntrypointIndex); -} - -typedef enum D3D12_STATE_SUBOBJECT_TYPE -{ - D3D12_STATE_SUBOBJECT_TYPE_STATE_OBJECT_CONFIG = 0, // D3D12_STATE_OBJECT_CONFIG - D3D12_STATE_SUBOBJECT_TYPE_GLOBAL_ROOT_SIGNATURE = 1, // D3D12_GLOBAL_ROOT_SIGNATURE - D3D12_STATE_SUBOBJECT_TYPE_LOCAL_ROOT_SIGNATURE = 2, // D3D12_LOCAL_ROOT_SIGNATURE - D3D12_STATE_SUBOBJECT_TYPE_NODE_MASK = 3, // D3D12_NODE_MASK - // 4 unused - D3D12_STATE_SUBOBJECT_TYPE_DXIL_LIBRARY = 5, // D3D12_DXIL_LIBRARY_DESC - D3D12_STATE_SUBOBJECT_TYPE_EXISTING_COLLECTION = 6, // D3D12_EXISTING_COLLECTION_DESC - D3D12_STATE_SUBOBJECT_TYPE_SUBOBJECT_TO_EXPORTS_ASSOCIATION = 7, // D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION - D3D12_STATE_SUBOBJECT_TYPE_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION = 8, // D3D12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION - D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_SHADER_CONFIG = 9, // D3D12_RAYTRACING_SHADER_CONFIG - D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_PIPELINE_CONFIG = 10, // D3D12_RAYTRACING_PIPELINE_CONFIG - D3D12_STATE_SUBOBJECT_TYPE_HIT_GROUP = 11, // D3D12_HIT_GROUP_DESC - D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_PIPELINE_CONFIG1 = 12, // D3D12_RAYTRACING_PIPELINE_CONFIG1 - D3D12_STATE_SUBOBJECT_TYPE_WORK_GRAPH = 13, // D3D12_WORK_GRAPH_DESC - D3D12_STATE_SUBOBJECT_TYPE_STREAM_OUTPUT = 14, // D3D12_STREAM_OUTPUT_DESC - D3D12_STATE_SUBOBJECT_TYPE_BLEND = 15, // D3D12_BLEND_DESC - D3D12_STATE_SUBOBJECT_TYPE_SAMPLE_MASK = 16, // UINT - D3D12_STATE_SUBOBJECT_TYPE_RASTERIZER = 17, // D3D12_RASTERIZER_DESC2 - D3D12_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL = 18, // D3D12_DEPTH_STENCIL_DESC - D3D12_STATE_SUBOBJECT_TYPE_INPUT_LAYOUT = 19, // D3D12_INPUT_LAYOUT_DESC - D3D12_STATE_SUBOBJECT_TYPE_IB_STRIP_CUT_VALUE = 20, // D3D12_INDEX_BUFFER_STRIP_CUT_VALUE - D3D12_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY = 21, // D3D12_PRIMITIVE_TOPOLOGY_TYPE - D3D12_STATE_SUBOBJECT_TYPE_RENDER_TARGET_FORMATS = 22, // D3D12_RT_FORMAT_ARRAY - D3D12_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL_FORMAT = 23, // DXGI_FORMAT - D3D12_STATE_SUBOBJECT_TYPE_SAMPLE_DESC = 24, // DXGI_SAMPLE_DESC - // 25 is unused - D3D12_STATE_SUBOBJECT_TYPE_FLAGS = 26, // D3D12_PIPELINE_STATE_FLAGS - D3D12_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1 = 27, // D3D12_DEPTH_STENCIL_DESC1 - D3D12_STATE_SUBOBJECT_TYPE_VIEW_INSTANCING = 28, // D3D12_VIEW_INSTANCING_DESC - D3D12_STATE_SUBOBJECT_TYPE_GENERIC_PROGRAM = 29, // D3D12_GENERIC_PROGRAM_DESC - D3D12_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL2 = 30, // D3D12_DEPTH_STENCIL_DESC2 - - D3D12_STATE_SUBOBJECT_TYPE_MAX_VALID, -} D3D12_STATE_SUBOBJECT_TYPE; - -typedef struct D3D12_STATE_SUBOBJECT -{ - D3D12_STATE_SUBOBJECT_TYPE Type; - const void* pDesc; -} D3D12_STATE_SUBOBJECT; - -typedef enum D3D12_STATE_OBJECT_FLAGS -{ - D3D12_STATE_OBJECT_FLAG_NONE = 0x0, - D3D12_STATE_OBJECT_FLAG_ALLOW_LOCAL_DEPENDENCIES_ON_EXTERNAL_DEFINITIONS = 0x1, - D3D12_STATE_OBJECT_FLAG_ALLOW_EXTERNAL_DEPENDENCIES_ON_LOCAL_DEFINITIONS = 0x2, - D3D12_STATE_OBJECT_FLAG_ALLOW_STATE_OBJECT_ADDITIONS = 0x4, -} D3D12_STATE_OBJECT_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_STATE_OBJECT_FLAGS )") - -typedef struct D3D12_STATE_OBJECT_CONFIG -{ - D3D12_STATE_OBJECT_FLAGS Flags; -} D3D12_STATE_OBJECT_CONFIG; - -typedef struct D3D12_GLOBAL_ROOT_SIGNATURE -{ - ID3D12RootSignature* pGlobalRootSignature; -} D3D12_GLOBAL_ROOT_SIGNATURE; - -typedef struct D3D12_LOCAL_ROOT_SIGNATURE -{ - ID3D12RootSignature* pLocalRootSignature; -} D3D12_LOCAL_ROOT_SIGNATURE; - -typedef struct D3D12_NODE_MASK -{ - UINT NodeMask; -} D3D12_NODE_MASK; - -typedef struct D3D12_SAMPLE_MASK -{ - UINT SampleMask; -} D3D12_SAMPLE_MASK; - -typedef struct D3D12_IB_STRIP_CUT_VALUE -{ - D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IndexBufferStripCutValue; -} D3D12_IB_STRIP_CUT_VALUE; - -typedef struct D3D12_PRIMITIVE_TOPOLOGY_DESC -{ - D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopology; -} D3D12_PRIMITIVE_TOPOLOGY_DESC; - -typedef struct D3D12_DEPTH_STENCIL_FORMAT -{ - DXGI_FORMAT DepthStencilFormat; -} D3D12_DEPTH_STENCIL_FORMAT; - -typedef enum D3D12_EXPORT_FLAGS -{ - D3D12_EXPORT_FLAG_NONE = 0x0, -} D3D12_EXPORT_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_EXPORT_FLAGS )") - -typedef struct D3D12_EXPORT_DESC -{ - LPCWSTR Name; - [annotation("_In_opt_")] LPCWSTR ExportToRename; - D3D12_EXPORT_FLAGS Flags; -} D3D12_EXPORT_DESC; - -typedef struct D3D12_DXIL_LIBRARY_DESC -{ - D3D12_SHADER_BYTECODE DXILLibrary; - UINT NumExports; // Optional, if 0 all exports in the library/collection will be surfaced - [annotation("_In_reads_(NumExports)")] const D3D12_EXPORT_DESC* pExports; -} D3D12_DXIL_LIBRARY_DESC; - -typedef struct D3D12_EXISTING_COLLECTION_DESC -{ - ID3D12StateObject* pExistingCollection; - UINT NumExports; // Optional, if 0 all exports in the library/collection will be surfaced - [annotation("_In_reads_(NumExports)")] const D3D12_EXPORT_DESC* pExports; -} D3D12_EXISTING_COLLECTION_DESC; - -typedef struct D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION -{ - const D3D12_STATE_SUBOBJECT* pSubobjectToAssociate; - UINT NumExports; - [annotation("_In_reads_(NumExports)")] LPCWSTR* pExports; -} D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION; - -typedef struct D3D12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION -{ - LPCWSTR SubobjectToAssociate; - UINT NumExports; - [annotation("_In_reads_(NumExports)")] LPCWSTR* pExports; -} D3D12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION; - -typedef enum D3D12_HIT_GROUP_TYPE -{ - D3D12_HIT_GROUP_TYPE_TRIANGLES = 0x0, - D3D12_HIT_GROUP_TYPE_PROCEDURAL_PRIMITIVE = 0x1, -} D3D12_HIT_GROUP_TYPE; - -typedef struct D3D12_HIT_GROUP_DESC -{ - LPCWSTR HitGroupExport; - D3D12_HIT_GROUP_TYPE Type; - [annotation("_In_opt_")] LPCWSTR AnyHitShaderImport; - [annotation("_In_opt_")] LPCWSTR ClosestHitShaderImport; - [annotation("_In_opt_")] LPCWSTR IntersectionShaderImport; -} D3D12_HIT_GROUP_DESC; - -typedef struct D3D12_RAYTRACING_SHADER_CONFIG -{ - UINT MaxPayloadSizeInBytes; - UINT MaxAttributeSizeInBytes; -} D3D12_RAYTRACING_SHADER_CONFIG; - -typedef struct D3D12_RAYTRACING_PIPELINE_CONFIG -{ - UINT MaxTraceRecursionDepth; -} D3D12_RAYTRACING_PIPELINE_CONFIG; - -typedef enum D3D12_RAYTRACING_PIPELINE_FLAGS -{ - D3D12_RAYTRACING_PIPELINE_FLAG_NONE = 0x0, - D3D12_RAYTRACING_PIPELINE_FLAG_SKIP_TRIANGLES = 0x100, - D3D12_RAYTRACING_PIPELINE_FLAG_SKIP_PROCEDURAL_PRIMITIVES = 0x200, -} D3D12_RAYTRACING_PIPELINE_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAYTRACING_PIPELINE_FLAGS )") - -typedef struct D3D12_RAYTRACING_PIPELINE_CONFIG1 -{ - UINT MaxTraceRecursionDepth; - D3D12_RAYTRACING_PIPELINE_FLAGS Flags; -} D3D12_RAYTRACING_PIPELINE_CONFIG1; - -typedef struct D3D12_NODE_OUTPUT_OVERRIDES -{ - UINT OutputIndex; - [annotation("_In_opt_")] const D3D12_NODE_ID* pNewName; - [annotation("_In_opt_")] const BOOL* pAllowSparseNodes; - [annotation("_In_opt_")] const UINT* pMaxRecords; - [annotation("_In_opt_")] const UINT* pMaxRecordsSharedWithOutputIndex; -} D3D12_NODE_OUTPUT_OVERRIDES; - -typedef struct D3D12_BROADCASTING_LAUNCH_OVERRIDES -{ - [annotation("_In_opt_")] const UINT* pLocalRootArgumentsTableIndex; - [annotation("_In_opt_")] const BOOL* pProgramEntry; - [annotation("_In_opt_")] const D3D12_NODE_ID* pNewName; - [annotation("_In_opt_ ")] const D3D12_NODE_ID* pShareInputOf; - [annotation("_In_reads_opt_(3)")] const UINT* pDispatchGrid; - [annotation("_In_reads_opt_(3)")] const UINT* pMaxDispatchGrid; - UINT NumOutputOverrides; - [annotation("_In_reads_opt_(NumOutputOverrides)")] const D3D12_NODE_OUTPUT_OVERRIDES* pOutputOverrides; -} D3D12_BROADCASTING_LAUNCH_OVERRIDES; - -typedef struct D3D12_COALESCING_LAUNCH_OVERRIDES -{ - [annotation("_In_opt_")] const UINT* pLocalRootArgumentsTableIndex; - [annotation("_In_opt_")] const BOOL* pProgramEntry; - [annotation("_In_opt_")] const D3D12_NODE_ID* pNewName; - [annotation("_In_opt_")] const D3D12_NODE_ID* pShareInputOf; - UINT NumOutputOverrides; - [annotation("_In_reads_opt_(NumOutputOverrides)")] const D3D12_NODE_OUTPUT_OVERRIDES* pOutputOverrides; -} D3D12_COALESCING_LAUNCH_OVERRIDES; - -typedef struct D3D12_THREAD_LAUNCH_OVERRIDES -{ - [annotation("_In_opt_")] const UINT* pLocalRootArgumentsTableIndex; - [annotation("_In_opt_")] const BOOL* pProgramEntry; - [annotation("_In_opt_")] const D3D12_NODE_ID* pNewName; - [annotation("_In_opt_")] const D3D12_NODE_ID* pShareInputOf; - UINT NumOutputOverrides; - [annotation("_In_reads_opt_(NumOutputOverrides)")] const D3D12_NODE_OUTPUT_OVERRIDES* pOutputOverrides; -} D3D12_THREAD_LAUNCH_OVERRIDES; - -typedef struct D3D12_COMMON_COMPUTE_NODE_OVERRIDES -{ - [annotation("_In_opt_")] const UINT* pLocalRootArgumentsTableIndex; - [annotation("_In_opt_")] const BOOL* pProgramEntry; - [annotation("_In_opt_")] const D3D12_NODE_ID* pNewName; - [annotation("_In_opt_")] const D3D12_NODE_ID* pShareInputOf; - UINT NumOutputOverrides; - [annotation("_In_reads_opt_(NumOutputOverrides)")] const D3D12_NODE_OUTPUT_OVERRIDES* pOutputOverrides; -} D3D12_COMMON_COMPUTE_NODE_OVERRIDES; - -typedef enum D3D12_NODE_OVERRIDES_TYPE -{ - D3D12_NODE_OVERRIDES_TYPE_NONE = 0, - D3D12_NODE_OVERRIDES_TYPE_BROADCASTING_LAUNCH = 1, - D3D12_NODE_OVERRIDES_TYPE_COALESCING_LAUNCH = 2, - D3D12_NODE_OVERRIDES_TYPE_THREAD_LAUNCH = 3, - D3D12_NODE_OVERRIDES_TYPE_COMMON_COMPUTE = 4, -} D3D12_NODE_OVERRIDES_TYPE; - -typedef struct D3D12_SHADER_NODE -{ - LPCWSTR Shader; - D3D12_NODE_OVERRIDES_TYPE OverridesType; - union - { - const D3D12_BROADCASTING_LAUNCH_OVERRIDES* pBroadcastingLaunchOverrides; - const D3D12_COALESCING_LAUNCH_OVERRIDES* pCoalescingLaunchOverrides; - const D3D12_THREAD_LAUNCH_OVERRIDES* pThreadLaunchOverrides; - const D3D12_COMMON_COMPUTE_NODE_OVERRIDES* pCommonComputeNodeOverrides; - }; -} D3D12_SHADER_NODE; - -typedef enum D3D12_NODE_TYPE -{ - D3D12_NODE_TYPE_SHADER = 0x0 -} D3D12_NODE_TYPE; - -typedef struct D3D12_NODE -{ - D3D12_NODE_TYPE NodeType; - union - { - D3D12_SHADER_NODE Shader; // D3D12_NODE_TYPE_SHADER - }; -} D3D12_NODE; - -typedef enum D3D12_WORK_GRAPH_FLAGS -{ - D3D12_WORK_GRAPH_FLAG_NONE = 0x0, - D3D12_WORK_GRAPH_FLAG_INCLUDE_ALL_AVAILABLE_NODES = 0x1, -} D3D12_WORK_GRAPH_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_WORK_GRAPH_FLAGS )") - -typedef struct D3D12_WORK_GRAPH_DESC -{ - LPCWSTR ProgramName; - D3D12_WORK_GRAPH_FLAGS Flags; - UINT NumEntrypoints; - [annotation("_In_reads_opt_(NumEntrypoints)")] const D3D12_NODE_ID* pEntrypoints; - UINT NumExplicitlyDefinedNodes; - [annotation("_In_reads_opt_(NumExplicitlyDefinedNodes)")] const D3D12_NODE* pExplicitlyDefinedNodes; -} D3D12_WORK_GRAPH_DESC; - -typedef struct D3D12_GENERIC_PROGRAM_DESC -{ - LPCWSTR ProgramName; - UINT NumExports; - [annotation("_In_reads_(NumExports)")] LPCWSTR* pExports; - UINT NumSubobjects; - [annotation("_In_reads_opt_(NumSubobjects)")] const D3D12_STATE_SUBOBJECT* const* ppSubobjects; -} D3D12_GENERIC_PROGRAM_DESC; - -typedef enum D3D12_STATE_OBJECT_TYPE -{ - D3D12_STATE_OBJECT_TYPE_COLLECTION = 0, - D3D12_STATE_OBJECT_TYPE_RAYTRACING_PIPELINE = 3, - D3D12_STATE_OBJECT_TYPE_EXECUTABLE = 4 -} D3D12_STATE_OBJECT_TYPE; - -typedef struct D3D12_STATE_OBJECT_DESC -{ - D3D12_STATE_OBJECT_TYPE Type; - UINT NumSubobjects; - [annotation("_In_reads_(NumSubobjects)")] const D3D12_STATE_SUBOBJECT* pSubobjects; -} D3D12_STATE_OBJECT_DESC; - -typedef enum D3D12_RAYTRACING_GEOMETRY_FLAGS -{ - D3D12_RAYTRACING_GEOMETRY_FLAG_NONE = 0x0, - D3D12_RAYTRACING_GEOMETRY_FLAG_OPAQUE = 0x1, - D3D12_RAYTRACING_GEOMETRY_FLAG_NO_DUPLICATE_ANYHIT_INVOCATION = 0x2, -} D3D12_RAYTRACING_GEOMETRY_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAYTRACING_GEOMETRY_FLAGS )") - -typedef enum D3D12_RAYTRACING_GEOMETRY_TYPE -{ - D3D12_RAYTRACING_GEOMETRY_TYPE_TRIANGLES, - D3D12_RAYTRACING_GEOMETRY_TYPE_PROCEDURAL_PRIMITIVE_AABBS, -} D3D12_RAYTRACING_GEOMETRY_TYPE; - -typedef enum D3D12_RAYTRACING_INSTANCE_FLAGS -{ - D3D12_RAYTRACING_INSTANCE_FLAG_NONE = 0x0, - D3D12_RAYTRACING_INSTANCE_FLAG_TRIANGLE_CULL_DISABLE = 0x1, - D3D12_RAYTRACING_INSTANCE_FLAG_TRIANGLE_FRONT_COUNTERCLOCKWISE = 0x2, - D3D12_RAYTRACING_INSTANCE_FLAG_FORCE_OPAQUE = 0x4, - D3D12_RAYTRACING_INSTANCE_FLAG_FORCE_NON_OPAQUE = 0x8 -} D3D12_RAYTRACING_INSTANCE_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAYTRACING_INSTANCE_FLAGS )") - -typedef struct D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE -{ - D3D12_GPU_VIRTUAL_ADDRESS StartAddress; - UINT64 StrideInBytes; -} D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE; - -typedef struct D3D12_GPU_VIRTUAL_ADDRESS_RANGE -{ - D3D12_GPU_VIRTUAL_ADDRESS StartAddress; - UINT64 SizeInBytes; -} D3D12_GPU_VIRTUAL_ADDRESS_RANGE; - -typedef struct D3D12_GPU_VIRTUAL_ADDRESS_RANGE_AND_STRIDE -{ - D3D12_GPU_VIRTUAL_ADDRESS StartAddress; - UINT64 SizeInBytes; - UINT64 StrideInBytes; -} D3D12_GPU_VIRTUAL_ADDRESS_RANGE_AND_STRIDE; - -typedef struct D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC -{ - D3D12_GPU_VIRTUAL_ADDRESS Transform3x4; - DXGI_FORMAT IndexFormat; - DXGI_FORMAT VertexFormat; - UINT IndexCount; - UINT VertexCount; - D3D12_GPU_VIRTUAL_ADDRESS IndexBuffer; - D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE VertexBuffer; -} D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC; - -typedef struct D3D12_RAYTRACING_AABB -{ - FLOAT MinX; - FLOAT MinY; - FLOAT MinZ; - FLOAT MaxX; - FLOAT MaxY; - FLOAT MaxZ; -} D3D12_RAYTRACING_AABB; - -typedef struct D3D12_RAYTRACING_GEOMETRY_AABBS_DESC -{ - UINT64 AABBCount; - D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE AABBs; -} D3D12_RAYTRACING_GEOMETRY_AABBS_DESC; - -typedef enum D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS -{ - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_NONE = 0x00, - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_ALLOW_UPDATE = 0x01, - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_ALLOW_COMPACTION = 0x02, - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_PREFER_FAST_TRACE = 0x04, - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_PREFER_FAST_BUILD = 0x08, - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_MINIMIZE_MEMORY = 0x10, - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_PERFORM_UPDATE = 0x20, -} D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS )") - -typedef enum D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE -{ - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE_CLONE = 0x0, - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE_COMPACT = 0x1, - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE_VISUALIZATION_DECODE_FOR_TOOLS = 0x2, - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE_SERIALIZE = 0x3, - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE_DESERIALIZE = 0x4, -} D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE; - -typedef enum D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE -{ - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL = 0x0, - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL = 0x1 -} D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE; - -typedef enum D3D12_ELEMENTS_LAYOUT -{ - D3D12_ELEMENTS_LAYOUT_ARRAY = 0x0, - D3D12_ELEMENTS_LAYOUT_ARRAY_OF_POINTERS = 0x1 -} D3D12_ELEMENTS_LAYOUT; - -typedef enum D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_TYPE -{ - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_COMPACTED_SIZE = 0x0, - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_TOOLS_VISUALIZATION = 0x1, - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION = 0x2, - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_CURRENT_SIZE = 0x3, -} D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_TYPE; - -typedef struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC -{ - D3D12_GPU_VIRTUAL_ADDRESS DestBuffer; - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_TYPE InfoType; -} D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC; - -typedef struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_COMPACTED_SIZE_DESC -{ - UINT64 CompactedSizeInBytes; -} D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_COMPACTED_SIZE_DESC; - -typedef struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_TOOLS_VISUALIZATION_DESC -{ - UINT64 DecodedSizeInBytes; -} D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_TOOLS_VISUALIZATION_DESC; - -typedef struct D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_TOOLS_VISUALIZATION_HEADER -{ - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE Type; - UINT NumDescs; -} D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_TOOLS_VISUALIZATION_HEADER; -cpp_quote("// Regarding D3D12_BUILD_RAY_TRACING_ACCELERATION_STRUCTURE_TOOLS_VISUALIZATION_HEADER above,") -cpp_quote("// depending on Type field, NumDescs above is followed by either:") -cpp_quote("// D3D12_RAY_TRACING_INSTANCE_DESC InstanceDescs[NumDescs]") -cpp_quote("// or D3D12_RAY_TRACING_GEOMETRY_DESC GeometryDescs[NumDescs].") -cpp_quote("// There is 4 bytes of padding between GeometryDesc structs in the array so alignment is natural when viewed by CPU.") -cpp_quote("") - -typedef struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC -{ - UINT64 SerializedSizeInBytes; - UINT64 NumBottomLevelAccelerationStructurePointers; -} D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC; - -typedef struct D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER -{ - GUID DriverOpaqueGUID; - BYTE DriverOpaqueVersioningData[16]; -} D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER; - -typedef enum D3D12_SERIALIZED_DATA_TYPE -{ - D3D12_SERIALIZED_DATA_RAYTRACING_ACCELERATION_STRUCTURE = 0x0, -} D3D12_SERIALIZED_DATA_TYPE; - -typedef enum D3D12_DRIVER_MATCHING_IDENTIFIER_STATUS -{ - D3D12_DRIVER_MATCHING_IDENTIFIER_COMPATIBLE_WITH_DEVICE = 0x0, - D3D12_DRIVER_MATCHING_IDENTIFIER_UNSUPPORTED_TYPE = 0x1, - D3D12_DRIVER_MATCHING_IDENTIFIER_UNRECOGNIZED = 0x2, - D3D12_DRIVER_MATCHING_IDENTIFIER_INCOMPATIBLE_VERSION = 0x3, - D3D12_DRIVER_MATCHING_IDENTIFIER_INCOMPATIBLE_TYPE = 0x4, -} D3D12_DRIVER_MATCHING_IDENTIFIER_STATUS; - -typedef struct D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER -{ - D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER DriverMatchingIdentifier; - UINT64 SerializedSizeInBytesIncludingHeader; - UINT64 DeserializedSizeInBytes; - UINT64 NumBottomLevelAccelerationStructurePointersAfterHeader; -} D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER; - -typedef struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_CURRENT_SIZE_DESC -{ - UINT64 CurrentSizeInBytes; -} D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_CURRENT_SIZE_DESC; - -typedef struct D3D12_RAYTRACING_INSTANCE_DESC -{ - FLOAT Transform[3][4]; - UINT InstanceID : 24; - UINT InstanceMask : 8; - UINT InstanceContributionToHitGroupIndex : 24; - UINT Flags : 8; - D3D12_GPU_VIRTUAL_ADDRESS AccelerationStructure; -} D3D12_RAYTRACING_INSTANCE_DESC; - -typedef struct D3D12_RAYTRACING_GEOMETRY_DESC -{ - D3D12_RAYTRACING_GEOMETRY_TYPE Type; - D3D12_RAYTRACING_GEOMETRY_FLAGS Flags; - union - { - D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC Triangles; - D3D12_RAYTRACING_GEOMETRY_AABBS_DESC AABBs; - }; -} D3D12_RAYTRACING_GEOMETRY_DESC; - -typedef struct D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS -{ - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE Type; - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS Flags; - UINT NumDescs; - D3D12_ELEMENTS_LAYOUT DescsLayout; - union - { - D3D12_GPU_VIRTUAL_ADDRESS InstanceDescs; - const D3D12_RAYTRACING_GEOMETRY_DESC* pGeometryDescs; - const D3D12_RAYTRACING_GEOMETRY_DESC*const* ppGeometryDescs; - }; -} D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS; - -typedef struct D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC -{ - D3D12_GPU_VIRTUAL_ADDRESS DestAccelerationStructureData; - D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS Inputs; - [annotation("_In_opt_")] D3D12_GPU_VIRTUAL_ADDRESS SourceAccelerationStructureData; - D3D12_GPU_VIRTUAL_ADDRESS ScratchAccelerationStructureData; -} D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC; - -typedef struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO -{ - UINT64 ResultDataMaxSizeInBytes; - UINT64 ScratchDataSizeInBytes; - UINT64 UpdateScratchDataSizeInBytes; -} D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO; - -typedef enum D3D12_RAY_FLAGS -{ - D3D12_RAY_FLAG_NONE = 0x00, - D3D12_RAY_FLAG_FORCE_OPAQUE = 0x01, - D3D12_RAY_FLAG_FORCE_NON_OPAQUE = 0x02, - D3D12_RAY_FLAG_ACCEPT_FIRST_HIT_AND_END_SEARCH = 0x04, - D3D12_RAY_FLAG_SKIP_CLOSEST_HIT_SHADER = 0x08, - D3D12_RAY_FLAG_CULL_BACK_FACING_TRIANGLES = 0x10, - D3D12_RAY_FLAG_CULL_FRONT_FACING_TRIANGLES = 0x20, - D3D12_RAY_FLAG_CULL_OPAQUE = 0x40, - D3D12_RAY_FLAG_CULL_NON_OPAQUE = 0x80, - D3D12_RAY_FLAG_SKIP_TRIANGLES = 0x100, - D3D12_RAY_FLAG_SKIP_PROCEDURAL_PRIMITIVES = 0x200, -} D3D12_RAY_FLAGS; -cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAY_FLAGS )" ) - -typedef enum D3D12_HIT_KIND -{ - D3D12_HIT_KIND_TRIANGLE_FRONT_FACE = 0xfe, - D3D12_HIT_KIND_TRIANGLE_BACK_FACE = 0xff, -} D3D12_HIT_KIND; - -[uuid(8b4f173b-2fea-4b80-8f58-4307191ab95d), object, local, pointer_default(unique)] -interface ID3D12Device5 - : ID3D12Device4 -{ - HRESULT CreateLifetimeTracker( - [annotation("_In_")] ID3D12LifetimeOwner* pOwner, - [in] REFIID riid, // Expected: ID3D12LifetimeTracker* - [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppvTracker - ); - - void RemoveDevice(); - - HRESULT EnumerateMetaCommands( - [annotation("_Inout_")] UINT* pNumMetaCommands, - [annotation("_Out_writes_opt_(*pNumMetaCommands)")] D3D12_META_COMMAND_DESC* pDescs - ); - - HRESULT EnumerateMetaCommandParameters( - [annotation("_In_")] REFGUID CommandId, - [annotation("_In_")] D3D12_META_COMMAND_PARAMETER_STAGE Stage, - [annotation("_Out_opt_")] UINT* pTotalStructureSizeInBytes, - [annotation("_Inout_")] UINT* pParameterCount, - [annotation("_Out_writes_opt_(*pParameterCount)")] D3D12_META_COMMAND_PARAMETER_DESC* pParameterDescs - ); - - HRESULT CreateMetaCommand( - [annotation("_In_")] REFGUID CommandId, - [annotation("_In_")] UINT NodeMask, - [annotation("_In_reads_bytes_opt_(CreationParametersDataSizeInBytes)")] const void * pCreationParametersData, - [annotation("_In_")] SIZE_T CreationParametersDataSizeInBytes, - [in] REFIID riid, - [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppMetaCommand - ); - - HRESULT CreateStateObject( - [in] const D3D12_STATE_OBJECT_DESC* pDesc, - [in] REFIID riid, // ID3D12StateObject - [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppStateObject - ); - - void GetRaytracingAccelerationStructurePrebuildInfo( - [annotation("_In_")] const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS* pDesc, - [annotation("_Out_")] D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO *pInfo - ); - - D3D12_DRIVER_MATCHING_IDENTIFIER_STATUS CheckDriverMatchingIdentifier( - [annotation("_In_")] D3D12_SERIALIZED_DATA_TYPE SerializedDataType, - [annotation("_In_")] const D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER* pIdentifierToCheck); -} - - -typedef enum D3D12_AUTO_BREADCRUMB_OP -{ - D3D12_AUTO_BREADCRUMB_OP_SETMARKER = 0, - D3D12_AUTO_BREADCRUMB_OP_BEGINEVENT = 1, - D3D12_AUTO_BREADCRUMB_OP_ENDEVENT = 2, - D3D12_AUTO_BREADCRUMB_OP_DRAWINSTANCED = 3, - D3D12_AUTO_BREADCRUMB_OP_DRAWINDEXEDINSTANCED = 4, - D3D12_AUTO_BREADCRUMB_OP_EXECUTEINDIRECT = 5, - D3D12_AUTO_BREADCRUMB_OP_DISPATCH = 6, - D3D12_AUTO_BREADCRUMB_OP_COPYBUFFERREGION = 7, - D3D12_AUTO_BREADCRUMB_OP_COPYTEXTUREREGION = 8, - D3D12_AUTO_BREADCRUMB_OP_COPYRESOURCE = 9, - D3D12_AUTO_BREADCRUMB_OP_COPYTILES = 10, - D3D12_AUTO_BREADCRUMB_OP_RESOLVESUBRESOURCE = 11, - D3D12_AUTO_BREADCRUMB_OP_CLEARRENDERTARGETVIEW = 12, - D3D12_AUTO_BREADCRUMB_OP_CLEARUNORDEREDACCESSVIEW = 13, - D3D12_AUTO_BREADCRUMB_OP_CLEARDEPTHSTENCILVIEW = 14, - D3D12_AUTO_BREADCRUMB_OP_RESOURCEBARRIER = 15, - D3D12_AUTO_BREADCRUMB_OP_EXECUTEBUNDLE = 16, - D3D12_AUTO_BREADCRUMB_OP_PRESENT = 17, - D3D12_AUTO_BREADCRUMB_OP_RESOLVEQUERYDATA = 18, - D3D12_AUTO_BREADCRUMB_OP_BEGINSUBMISSION = 19, - D3D12_AUTO_BREADCRUMB_OP_ENDSUBMISSION = 20, - D3D12_AUTO_BREADCRUMB_OP_DECODEFRAME = 21, - D3D12_AUTO_BREADCRUMB_OP_PROCESSFRAMES = 22, - D3D12_AUTO_BREADCRUMB_OP_ATOMICCOPYBUFFERUINT = 23, - D3D12_AUTO_BREADCRUMB_OP_ATOMICCOPYBUFFERUINT64 = 24, - D3D12_AUTO_BREADCRUMB_OP_RESOLVESUBRESOURCEREGION = 25, - D3D12_AUTO_BREADCRUMB_OP_WRITEBUFFERIMMEDIATE = 26, - D3D12_AUTO_BREADCRUMB_OP_DECODEFRAME1 = 27, - D3D12_AUTO_BREADCRUMB_OP_SETPROTECTEDRESOURCESESSION = 28, - D3D12_AUTO_BREADCRUMB_OP_DECODEFRAME2 = 29, - D3D12_AUTO_BREADCRUMB_OP_PROCESSFRAMES1 = 30, - D3D12_AUTO_BREADCRUMB_OP_BUILDRAYTRACINGACCELERATIONSTRUCTURE = 31, - D3D12_AUTO_BREADCRUMB_OP_EMITRAYTRACINGACCELERATIONSTRUCTUREPOSTBUILDINFO = 32, - D3D12_AUTO_BREADCRUMB_OP_COPYRAYTRACINGACCELERATIONSTRUCTURE = 33, - D3D12_AUTO_BREADCRUMB_OP_DISPATCHRAYS = 34, - D3D12_AUTO_BREADCRUMB_OP_INITIALIZEMETACOMMAND = 35, - D3D12_AUTO_BREADCRUMB_OP_EXECUTEMETACOMMAND = 36, - D3D12_AUTO_BREADCRUMB_OP_ESTIMATEMOTION = 37, - D3D12_AUTO_BREADCRUMB_OP_RESOLVEMOTIONVECTORHEAP = 38, - D3D12_AUTO_BREADCRUMB_OP_SETPIPELINESTATE1 = 39, - D3D12_AUTO_BREADCRUMB_OP_INITIALIZEEXTENSIONCOMMAND = 40, - D3D12_AUTO_BREADCRUMB_OP_EXECUTEEXTENSIONCOMMAND = 41, - D3D12_AUTO_BREADCRUMB_OP_DISPATCHMESH = 42, - D3D12_AUTO_BREADCRUMB_OP_ENCODEFRAME = 43, - D3D12_AUTO_BREADCRUMB_OP_RESOLVEENCODEROUTPUTMETADATA = 44, - D3D12_AUTO_BREADCRUMB_OP_BARRIER = 45, - D3D12_AUTO_BREADCRUMB_OP_BEGIN_COMMAND_LIST = 46, - D3D12_AUTO_BREADCRUMB_OP_DISPATCHGRAPH = 47, - D3D12_AUTO_BREADCRUMB_OP_SETPROGRAM = 48, - D3D12_AUTO_BREADCRUMB_OP_PROCESSFRAMES2 = 52, -} D3D12_AUTO_BREADCRUMB_OP; - -typedef struct D3D12_AUTO_BREADCRUMB_NODE -{ - const char *pCommandListDebugNameA; - const wchar_t *pCommandListDebugNameW; - const char *pCommandQueueDebugNameA; - const wchar_t *pCommandQueueDebugNameW; - ID3D12GraphicsCommandList *pCommandList; - ID3D12CommandQueue *pCommandQueue; - UINT32 BreadcrumbCount; - const UINT32 *pLastBreadcrumbValue; - const D3D12_AUTO_BREADCRUMB_OP *pCommandHistory; - const struct D3D12_AUTO_BREADCRUMB_NODE *pNext; // pointer to next node -} D3D12_AUTO_BREADCRUMB_NODE; - -typedef struct D3D12_DRED_BREADCRUMB_CONTEXT -{ - UINT BreadcrumbIndex; - const wchar_t *pContextString; -} D3D12_DRED_BREADCRUMB_CONTEXT; - -// !!! Must be castable to D3D12_AUTO_BREADCRUMB_NODE -typedef struct D3D12_AUTO_BREADCRUMB_NODE1 -{ - const char *pCommandListDebugNameA; - const wchar_t *pCommandListDebugNameW; - const char *pCommandQueueDebugNameA; - const wchar_t *pCommandQueueDebugNameW; - ID3D12GraphicsCommandList *pCommandList; - ID3D12CommandQueue *pCommandQueue; - UINT BreadcrumbCount; - const UINT *pLastBreadcrumbValue; - const D3D12_AUTO_BREADCRUMB_OP *pCommandHistory; - const struct D3D12_AUTO_BREADCRUMB_NODE1 *pNext; // pointer to next node - UINT BreadcrumbContextsCount; - D3D12_DRED_BREADCRUMB_CONTEXT *pBreadcrumbContexts; -} D3D12_AUTO_BREADCRUMB_NODE1; - -// D3D12_DRED_VERSION -typedef enum D3D12_DRED_VERSION -{ - D3D12_DRED_VERSION_1_0 = 0x1, - D3D12_DRED_VERSION_1_1 = 0x2, - D3D12_DRED_VERSION_1_2 = 0x3, - D3D12_DRED_VERSION_1_3 = 0x4, -} D3D12_DRED_VERSION; - -typedef enum D3D12_DRED_FLAGS -{ - D3D12_DRED_FLAG_NONE = 0, - D3D12_DRED_FLAG_FORCE_ENABLE = 1, - D3D12_DRED_FLAG_DISABLE_AUTOBREADCRUMBS = 2, -} D3D12_DRED_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_DRED_FLAGS )") - -typedef enum D3D12_DRED_ENABLEMENT -{ - D3D12_DRED_ENABLEMENT_SYSTEM_CONTROLLED = 0, - D3D12_DRED_ENABLEMENT_FORCED_OFF = 1, - D3D12_DRED_ENABLEMENT_FORCED_ON = 2, -} D3D12_DRED_ENABLEMENT; - -typedef struct D3D12_DEVICE_REMOVED_EXTENDED_DATA -{ - [annotation("_In_")] D3D12_DRED_FLAGS Flags; // Dred flags - [annotation("_Out_")] D3D12_AUTO_BREADCRUMB_NODE *pHeadAutoBreadcrumbNode; // Pointer to head of a linked list of auto-breadcrumb data -} D3D12_DEVICE_REMOVED_EXTENDED_DATA; - -typedef enum D3D12_DRED_ALLOCATION_TYPE -{ - // Enum starts at 19 and skips 26 to maintain compatibility with older D3D12 drivers - D3D12_DRED_ALLOCATION_TYPE_COMMAND_QUEUE = 19, - D3D12_DRED_ALLOCATION_TYPE_COMMAND_ALLOCATOR = 20, - D3D12_DRED_ALLOCATION_TYPE_PIPELINE_STATE = 21, - D3D12_DRED_ALLOCATION_TYPE_COMMAND_LIST = 22, - D3D12_DRED_ALLOCATION_TYPE_FENCE = 23, - D3D12_DRED_ALLOCATION_TYPE_DESCRIPTOR_HEAP = 24, - D3D12_DRED_ALLOCATION_TYPE_HEAP = 25, - D3D12_DRED_ALLOCATION_TYPE_QUERY_HEAP = 27, - D3D12_DRED_ALLOCATION_TYPE_COMMAND_SIGNATURE = 28, - D3D12_DRED_ALLOCATION_TYPE_PIPELINE_LIBRARY = 29, - D3D12_DRED_ALLOCATION_TYPE_VIDEO_DECODER = 30, - D3D12_DRED_ALLOCATION_TYPE_VIDEO_PROCESSOR = 32, - D3D12_DRED_ALLOCATION_TYPE_RESOURCE = 34, - D3D12_DRED_ALLOCATION_TYPE_PASS = 35, - D3D12_DRED_ALLOCATION_TYPE_CRYPTOSESSION = 36, - D3D12_DRED_ALLOCATION_TYPE_CRYPTOSESSIONPOLICY = 37, - D3D12_DRED_ALLOCATION_TYPE_PROTECTEDRESOURCESESSION = 38, - D3D12_DRED_ALLOCATION_TYPE_VIDEO_DECODER_HEAP = 39, - D3D12_DRED_ALLOCATION_TYPE_COMMAND_POOL = 40, - D3D12_DRED_ALLOCATION_TYPE_COMMAND_RECORDER = 41, - D3D12_DRED_ALLOCATION_TYPE_STATE_OBJECT = 42, - D3D12_DRED_ALLOCATION_TYPE_METACOMMAND = 43, - D3D12_DRED_ALLOCATION_TYPE_SCHEDULINGGROUP = 44, - D3D12_DRED_ALLOCATION_TYPE_VIDEO_MOTION_ESTIMATOR = 45, - D3D12_DRED_ALLOCATION_TYPE_VIDEO_MOTION_VECTOR_HEAP = 46, - D3D12_DRED_ALLOCATION_TYPE_VIDEO_EXTENSION_COMMAND = 47, - D3D12_DRED_ALLOCATION_TYPE_VIDEO_ENCODER = 48, - D3D12_DRED_ALLOCATION_TYPE_VIDEO_ENCODER_HEAP = 49, - - - D3D12_DRED_ALLOCATION_TYPE_INVALID = 0xFFFFFFFF -} D3D12_DRED_ALLOCATION_TYPE; - -typedef struct D3D12_DRED_ALLOCATION_NODE -{ - const char *ObjectNameA; - const wchar_t *ObjectNameW; - D3D12_DRED_ALLOCATION_TYPE AllocationType; - const struct D3D12_DRED_ALLOCATION_NODE *pNext; -} D3D12_DRED_ALLOCATION_NODE; - -typedef struct D3D12_DRED_ALLOCATION_NODE1 -{ - const char *ObjectNameA; - const wchar_t *ObjectNameW; - D3D12_DRED_ALLOCATION_TYPE AllocationType; - const struct D3D12_DRED_ALLOCATION_NODE1 *pNext; - const IUnknown *pObject; -} D3D12_DRED_ALLOCATION_NODE1; - -typedef struct D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT -{ - [annotation("_Out_")] const D3D12_AUTO_BREADCRUMB_NODE *pHeadAutoBreadcrumbNode; // Pointer to head of a null-terminated linked list of auto-breadcrumb data -} D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT; - -typedef struct D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT1 -{ - [annotation("_Out_")] const D3D12_AUTO_BREADCRUMB_NODE1 *pHeadAutoBreadcrumbNode; // Pointer to head of a null-terminated linked list of auto-breadcrumb data -} D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT1; - -typedef struct D3D12_DRED_PAGE_FAULT_OUTPUT -{ - D3D12_GPU_VIRTUAL_ADDRESS PageFaultVA; //If the device removal was due to GPU Fault, this contains the VA of the faulting op - [annotation("_Out_")] const D3D12_DRED_ALLOCATION_NODE *pHeadExistingAllocationNode; - [annotation("_Out_")] const D3D12_DRED_ALLOCATION_NODE *pHeadRecentFreedAllocationNode; -} D3D12_DRED_PAGE_FAULT_OUTPUT; - -typedef struct D3D12_DRED_PAGE_FAULT_OUTPUT1 -{ - D3D12_GPU_VIRTUAL_ADDRESS PageFaultVA; //If the device removal was due to GPU Fault, this contains the VA of the faulting op - [annotation("_Out_")] const D3D12_DRED_ALLOCATION_NODE1 *pHeadExistingAllocationNode; - [annotation("_Out_")] const D3D12_DRED_ALLOCATION_NODE1 *pHeadRecentFreedAllocationNode; -} D3D12_DRED_PAGE_FAULT_OUTPUT1; - -typedef enum D3D12_DRED_PAGE_FAULT_FLAGS -{ - D3D12_DRED_PAGE_FAULT_FLAGS_NONE = 0, -} D3D12_DRED_PAGE_FAULT_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_DRED_PAGE_FAULT_FLAGS )") - -typedef enum D3D12_DRED_DEVICE_STATE -{ - D3D12_DRED_DEVICE_STATE_UNKNOWN = 0, // Only known if DRED event occurred - D3D12_DRED_DEVICE_STATE_HUNG = 3, - D3D12_DRED_DEVICE_STATE_FAULT = 6, - D3D12_DRED_DEVICE_STATE_PAGEFAULT = 7, -} D3D12_DRED_DEVICE_STATE; - -typedef struct D3D12_DRED_PAGE_FAULT_OUTPUT2 -{ - D3D12_GPU_VIRTUAL_ADDRESS PageFaultVA; //If the device removal was due to GPU Fault, this contains the VA of the faulting op - [annotation("_Out_")] const D3D12_DRED_ALLOCATION_NODE1 *pHeadExistingAllocationNode; - [annotation("_Out_")] const D3D12_DRED_ALLOCATION_NODE1 *pHeadRecentFreedAllocationNode; - D3D12_DRED_PAGE_FAULT_FLAGS PageFaultFlags; - -} D3D12_DRED_PAGE_FAULT_OUTPUT2; - -typedef struct D3D12_DEVICE_REMOVED_EXTENDED_DATA1 -{ - HRESULT DeviceRemovedReason; - D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT AutoBreadcrumbsOutput; - D3D12_DRED_PAGE_FAULT_OUTPUT PageFaultOutput; -} D3D12_DEVICE_REMOVED_EXTENDED_DATA1; - -typedef struct D3D12_DEVICE_REMOVED_EXTENDED_DATA2 -{ - HRESULT DeviceRemovedReason; - D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT1 AutoBreadcrumbsOutput; - D3D12_DRED_PAGE_FAULT_OUTPUT1 PageFaultOutput; -} D3D12_DEVICE_REMOVED_EXTENDED_DATA2; - -typedef struct D3D12_DEVICE_REMOVED_EXTENDED_DATA3 -{ - HRESULT DeviceRemovedReason; - D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT1 AutoBreadcrumbsOutput; - D3D12_DRED_PAGE_FAULT_OUTPUT2 PageFaultOutput; - D3D12_DRED_DEVICE_STATE DeviceState; -} D3D12_DEVICE_REMOVED_EXTENDED_DATA3; - -typedef struct D3D12_VERSIONED_DEVICE_REMOVED_EXTENDED_DATA -{ - D3D12_DRED_VERSION Version; // Version of the DRED data - union - { - D3D12_DEVICE_REMOVED_EXTENDED_DATA Dred_1_0; - D3D12_DEVICE_REMOVED_EXTENDED_DATA1 Dred_1_1; - D3D12_DEVICE_REMOVED_EXTENDED_DATA2 Dred_1_2; - D3D12_DEVICE_REMOVED_EXTENDED_DATA3 Dred_1_3; - }; -} D3D12_VERSIONED_DEVICE_REMOVED_EXTENDED_DATA; - -[uuid(82BC481C-6B9B-4030-AEDB-7EE3D1DF1E63), object, local, pointer_default(unique)] -interface ID3D12DeviceRemovedExtendedDataSettings - : IUnknown -{ - void SetAutoBreadcrumbsEnablement(D3D12_DRED_ENABLEMENT Enablement); - void SetPageFaultEnablement(D3D12_DRED_ENABLEMENT Enablement); - void SetWatsonDumpEnablement(D3D12_DRED_ENABLEMENT Enablement); -}; - -[uuid(DBD5AE51-3317-4F0A-ADF9-1D7CEDCAAE0B), object, local, pointer_default(unique)] -interface ID3D12DeviceRemovedExtendedDataSettings1 - : ID3D12DeviceRemovedExtendedDataSettings -{ - void SetBreadcrumbContextEnablement(D3D12_DRED_ENABLEMENT Enablement); -}; - -[uuid(61552388-01ab-4008-a436-83db189566ea), object, local, pointer_default(unique)] -interface ID3D12DeviceRemovedExtendedDataSettings2 - : ID3D12DeviceRemovedExtendedDataSettings1 -{ - void UseMarkersOnlyAutoBreadcrumbs(BOOL MarkersOnly); -}; - - -[uuid(98931D33-5AE8-4791-AA3C-1A73A2934E71), object, local, pointer_default(unique)] -interface ID3D12DeviceRemovedExtendedData - : IUnknown -{ - HRESULT GetAutoBreadcrumbsOutput([annotation("_Out_")] D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT *pOutput); - HRESULT GetPageFaultAllocationOutput([annotation("_Out_")] D3D12_DRED_PAGE_FAULT_OUTPUT *pOutput); -}; - -[uuid(9727A022-CF1D-4DDA-9EBA-EFFA653FC506), object, local, pointer_default(unique)] -interface ID3D12DeviceRemovedExtendedData1 - : ID3D12DeviceRemovedExtendedData -{ - HRESULT GetAutoBreadcrumbsOutput1([annotation("_Out_")] D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT1 *pOutput); - HRESULT GetPageFaultAllocationOutput1([annotation("_Out_")] D3D12_DRED_PAGE_FAULT_OUTPUT1 *pOutput); -}; - -[uuid(67FC5816-E4CA-4915-BF18-42541272DA54), object, local, pointer_default(unique)] -interface ID3D12DeviceRemovedExtendedData2 - : ID3D12DeviceRemovedExtendedData1 -{ - HRESULT GetPageFaultAllocationOutput2([annotation("_Out_")] D3D12_DRED_PAGE_FAULT_OUTPUT2 *pOutput); - D3D12_DRED_DEVICE_STATE GetDeviceState(); -}; - -typedef enum D3D12_BACKGROUND_PROCESSING_MODE -{ - D3D12_BACKGROUND_PROCESSING_MODE_ALLOWED, - D3D12_BACKGROUND_PROCESSING_MODE_ALLOW_INTRUSIVE_MEASUREMENTS, - D3D12_BACKGROUND_PROCESSING_MODE_DISABLE_BACKGROUND_WORK, - D3D12_BACKGROUND_PROCESSING_MODE_DISABLE_PROFILING_BY_SYSTEM, -} D3D12_BACKGROUND_PROCESSING_MODE; - -typedef enum D3D12_MEASUREMENTS_ACTION -{ - D3D12_MEASUREMENTS_ACTION_KEEP_ALL, - D3D12_MEASUREMENTS_ACTION_COMMIT_RESULTS, - D3D12_MEASUREMENTS_ACTION_COMMIT_RESULTS_HIGH_PRIORITY, - D3D12_MEASUREMENTS_ACTION_DISCARD_PREVIOUS, -} D3D12_MEASUREMENTS_ACTION; - -[uuid(c70b221b-40e4-4a17-89af-025a0727a6dc), object, local, pointer_default(unique)] -interface ID3D12Device6 : ID3D12Device5 -{ - HRESULT SetBackgroundProcessingMode( - D3D12_BACKGROUND_PROCESSING_MODE Mode, - D3D12_MEASUREMENTS_ACTION MeasurementsAction, - [annotation("_In_opt_")] HANDLE hEventToSignalUponCompletion, - [annotation("_Out_opt_")] BOOL* pbFurtherMeasurementsDesired); -}; - -cpp_quote("DEFINE_GUID(D3D12_PROTECTED_RESOURCES_SESSION_HARDWARE_PROTECTED, 0x62B0084E, 0xC70E, 0x4DAA, 0xA1, 0x09, 0x30, 0xFF, 0x8D, 0x5A, 0x04, 0x82); ") - -// D3D12_FEATURE_PROTECTED_RESOURCE_SESSION_TYPE_COUNT -typedef struct D3D12_FEATURE_DATA_PROTECTED_RESOURCE_SESSION_TYPE_COUNT -{ - UINT NodeIndex; // input - UINT Count; // output -} D3D12_FEATURE_DATA_PROTECTED_RESOURCE_SESSION_TYPE_COUNT; - -// D3D12_FEATURE_PROTECTED_RESOURCE_SESSION_TYPES -typedef struct D3D12_FEATURE_DATA_PROTECTED_RESOURCE_SESSION_TYPES -{ - UINT NodeIndex; // input - UINT Count; // input - GUID* pTypes; // output -} D3D12_FEATURE_DATA_PROTECTED_RESOURCE_SESSION_TYPES; - -typedef struct D3D12_PROTECTED_RESOURCE_SESSION_DESC1 -{ - UINT NodeMask; - D3D12_PROTECTED_RESOURCE_SESSION_FLAGS Flags; - GUID ProtectionType; -} D3D12_PROTECTED_RESOURCE_SESSION_DESC1; - -[uuid(D6F12DD6-76FB-406E-8961-4296EEFC0409), object, local, pointer_default(unique)] -interface ID3D12ProtectedResourceSession1 - : ID3D12ProtectedResourceSession -{ - D3D12_PROTECTED_RESOURCE_SESSION_DESC1 GetDesc1(); -}; - -[uuid(5c014b53-68a1-4b9b-8bd1-dd6046b9358b), object, local, pointer_default(unique)] -interface ID3D12Device7 : ID3D12Device6 -{ - HRESULT AddToStateObject( - [in] const D3D12_STATE_OBJECT_DESC* pAddition, - [in] ID3D12StateObject* pStateObjectToGrowFrom, - [in] REFIID riid, // ID3D12StateObject - [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppNewStateObject - ); - - HRESULT CreateProtectedResourceSession1( - [annotation("_In_")] const D3D12_PROTECTED_RESOURCE_SESSION_DESC1* pDesc, - [annotation("_In_")] REFIID riid, // Expected: ID3D12ProtectedResourceSession1, - [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppSession - ); -}; - -[uuid(9218E6BB-F944-4F7E-A75C-B1B2C7B701F3), object, local, pointer_default(unique)] -interface ID3D12Device8 : ID3D12Device7 -{ - D3D12_RESOURCE_ALLOCATION_INFO GetResourceAllocationInfo2( - UINT visibleMask, - UINT numResourceDescs, - [annotation("_In_reads_(numResourceDescs)")] const D3D12_RESOURCE_DESC1* pResourceDescs, - [annotation("_Out_writes_opt_(numResourceDescs)")] D3D12_RESOURCE_ALLOCATION_INFO1* pResourceAllocationInfo1); - - HRESULT CreateCommittedResource2( - [annotation("_In_")] const D3D12_HEAP_PROPERTIES* pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - [annotation("_In_")] const D3D12_RESOURCE_DESC1* pDesc, - D3D12_RESOURCE_STATES InitialResourceState, - [annotation("_In_opt_")] const D3D12_CLEAR_VALUE* pOptimizedClearValue, - [annotation("_In_opt_")] ID3D12ProtectedResourceSession* pProtectedSession, - [in] REFIID riidResource, // Expected: ID3D12Resource1* - [out, iid_is(riidResource), annotation("_COM_Outptr_opt_")] void** ppvResource); - - HRESULT CreatePlacedResource1( - [annotation("_In_")] ID3D12Heap* pHeap, - UINT64 HeapOffset, - [annotation("_In_")] const D3D12_RESOURCE_DESC1* pDesc, - D3D12_RESOURCE_STATES InitialState, - [annotation("_In_opt_")] const D3D12_CLEAR_VALUE* pOptimizedClearValue, - [in] REFIID riid, // Expected: ID3D12Resource* - [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppvResource); - - void CreateSamplerFeedbackUnorderedAccessView( - [annotation("_In_opt_")] ID3D12Resource* pTargetedResource, - [annotation("_In_opt_")] ID3D12Resource* pFeedbackResource, - [annotation("_In_")] D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); - - void GetCopyableFootprints1( - [annotation("_In_")] const D3D12_RESOURCE_DESC1* pResourceDesc, - [annotation("_In_range_(0,D3D12_REQ_SUBRESOURCES)")] UINT FirstSubresource, - [annotation("_In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource)")] UINT NumSubresources, - UINT64 BaseOffset, - [annotation("_Out_writes_opt_(NumSubresources)")] D3D12_PLACED_SUBRESOURCE_FOOTPRINT* pLayouts, - [annotation("_Out_writes_opt_(NumSubresources)")] UINT* pNumRows, - [annotation("_Out_writes_opt_(NumSubresources)")] UINT64* pRowSizeInBytes, - [annotation("_Out_opt_")] UINT64* pTotalBytes); -}; - - -[uuid(9D5E227A-4430-4161-88B3-3ECA6BB16E19), object, local, pointer_default(unique)] -interface ID3D12Resource1 - : ID3D12Resource -{ - HRESULT GetProtectedResourceSession( - [in] REFIID riid, // Expected: ID3D12ProtectedResourceSession - [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppProtectedSession); -} - -[uuid(BE36EC3B-EA85-4AEB-A45A-E9D76404A495), object, local, pointer_default(unique)] -interface ID3D12Resource2 - : ID3D12Resource1 -{ - D3D12_RESOURCE_DESC1 GetDesc1(); -} - - - -[uuid(572F7389-2168-49E3-9693-D6DF5871BF6D), object, local, pointer_default(unique)] -interface ID3D12Heap1 - : ID3D12Heap -{ - HRESULT GetProtectedResourceSession( - [in] REFIID riid, // Expected: ID3D12ProtectedResourceSession - [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppProtectedSession); -} - - -[uuid(6FDA83A7-B84C-4E38-9AC8-C7BD22016B3D), object, local, pointer_default(unique)] -interface ID3D12GraphicsCommandList3 : ID3D12GraphicsCommandList2 -{ - void SetProtectedResourceSession( - [annotation("_In_opt_")]ID3D12ProtectedResourceSession *pProtectedResourceSession - ); -} - -// Beginning Access -typedef enum D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE -{ - D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_DISCARD, - D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_PRESERVE, - D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_CLEAR, - D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_NO_ACCESS, - D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_PRESERVE_LOCAL_RENDER, - D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_PRESERVE_LOCAL_SRV, - D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_PRESERVE_LOCAL_UAV -} D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE; - -typedef struct D3D12_RENDER_PASS_BEGINNING_ACCESS_CLEAR_PARAMETERS -{ - D3D12_CLEAR_VALUE ClearValue; -} D3D12_RENDER_PASS_BEGINNING_ACCESS_CLEAR_PARAMETERS; - -typedef struct D3D12_RENDER_PASS_BEGINNING_ACCESS_PRESERVE_LOCAL_PARAMETERS -{ - UINT AdditionalWidth; - UINT AdditionalHeight; -} D3D12_RENDER_PASS_BEGINNING_ACCESS_PRESERVE_LOCAL_PARAMETERS; - -typedef struct D3D12_RENDER_PASS_BEGINNING_ACCESS -{ - D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE Type; - - union - { - D3D12_RENDER_PASS_BEGINNING_ACCESS_CLEAR_PARAMETERS Clear; - D3D12_RENDER_PASS_BEGINNING_ACCESS_PRESERVE_LOCAL_PARAMETERS PreserveLocal; - }; -} D3D12_RENDER_PASS_BEGINNING_ACCESS; - -// Ending Access -typedef enum D3D12_RENDER_PASS_ENDING_ACCESS_TYPE -{ - D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_DISCARD, - D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_PRESERVE, - D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_RESOLVE, - D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_NO_ACCESS, - D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_PRESERVE_LOCAL_RENDER, - D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_PRESERVE_LOCAL_SRV, - D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_PRESERVE_LOCAL_UAV -} D3D12_RENDER_PASS_ENDING_ACCESS_TYPE; - -typedef struct D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_SUBRESOURCE_PARAMETERS -{ - UINT SrcSubresource; - UINT DstSubresource; - - UINT DstX; - UINT DstY; - D3D12_RECT SrcRect; // (0, 0, 0, 0) == resolve entire resource. - -} D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_SUBRESOURCE_PARAMETERS; - -typedef struct D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_PARAMETERS -{ - ID3D12Resource* pSrcResource; - ID3D12Resource* pDstResource; - - // Can be a subset of RT's array slices, but can't target subresources that were't part of RTV/DSV. - UINT SubresourceCount; - [annotation("_Field_size_full_(SubresourceCount)")] const D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_SUBRESOURCE_PARAMETERS *pSubresourceParameters; - - DXGI_FORMAT Format; - D3D12_RESOLVE_MODE ResolveMode; - - BOOL PreserveResolveSource; - -} D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_PARAMETERS; - -typedef struct D3D12_RENDER_PASS_ENDING_ACCESS_PRESERVE_LOCAL_PARAMETERS -{ - UINT AdditionalWidth; - UINT AdditionalHeight; -} D3D12_RENDER_PASS_ENDING_ACCESS_PRESERVE_LOCAL_PARAMETERS; - -typedef struct D3D12_RENDER_PASS_ENDING_ACCESS -{ - D3D12_RENDER_PASS_ENDING_ACCESS_TYPE Type; - - union - { - D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_PARAMETERS Resolve; - D3D12_RENDER_PASS_ENDING_ACCESS_PRESERVE_LOCAL_PARAMETERS PreserveLocal; - }; -} D3D12_RENDER_PASS_ENDING_ACCESS; - -// Render Target Desc -typedef struct D3D12_RENDER_PASS_RENDER_TARGET_DESC -{ - D3D12_CPU_DESCRIPTOR_HANDLE cpuDescriptor; - - D3D12_RENDER_PASS_BEGINNING_ACCESS BeginningAccess; - D3D12_RENDER_PASS_ENDING_ACCESS EndingAccess; - -} D3D12_RENDER_PASS_RENDER_TARGET_DESC; - -// Depth-Stencil Desc -typedef struct D3D12_RENDER_PASS_DEPTH_STENCIL_DESC -{ - D3D12_CPU_DESCRIPTOR_HANDLE cpuDescriptor; - - D3D12_RENDER_PASS_BEGINNING_ACCESS DepthBeginningAccess; - D3D12_RENDER_PASS_BEGINNING_ACCESS StencilBeginningAccess; - - D3D12_RENDER_PASS_ENDING_ACCESS DepthEndingAccess; - D3D12_RENDER_PASS_ENDING_ACCESS StencilEndingAccess; - -} D3D12_RENDER_PASS_DEPTH_STENCIL_DESC; - -typedef enum D3D12_RENDER_PASS_FLAGS -{ - D3D12_RENDER_PASS_FLAG_NONE = 0x0, - D3D12_RENDER_PASS_FLAG_ALLOW_UAV_WRITES = 0x1, - D3D12_RENDER_PASS_FLAG_SUSPENDING_PASS = 0x2, - D3D12_RENDER_PASS_FLAG_RESUMING_PASS = 0x4, - D3D12_RENDER_PASS_FLAG_BIND_READ_ONLY_DEPTH = 0x8, - D3D12_RENDER_PASS_FLAG_BIND_READ_ONLY_STENCIL = 0x10 -} D3D12_RENDER_PASS_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_RENDER_PASS_FLAGS )") - -[uuid(DBB84C27-36CE-4FC9-B801-F048C46AC570), object, local, pointer_default(unique)] -interface ID3D12MetaCommand : ID3D12Pageable -{ - UINT64 GetRequiredParameterResourceSize([annotation("_In_")] D3D12_META_COMMAND_PARAMETER_STAGE Stage, [annotation("_In_")] UINT ParameterIndex); -} - -typedef struct D3D12_DISPATCH_RAYS_DESC -{ - D3D12_GPU_VIRTUAL_ADDRESS_RANGE RayGenerationShaderRecord; - D3D12_GPU_VIRTUAL_ADDRESS_RANGE_AND_STRIDE MissShaderTable; - D3D12_GPU_VIRTUAL_ADDRESS_RANGE_AND_STRIDE HitGroupTable; - D3D12_GPU_VIRTUAL_ADDRESS_RANGE_AND_STRIDE CallableShaderTable; - UINT Width; - UINT Height; - UINT Depth; -} D3D12_DISPATCH_RAYS_DESC; - -typedef enum D3D12_SET_WORK_GRAPH_FLAGS -{ - D3D12_SET_WORK_GRAPH_FLAG_NONE = 0x0, - D3D12_SET_WORK_GRAPH_FLAG_INITIALIZE = 0x1, -} D3D12_SET_WORK_GRAPH_FLAGS; -cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_SET_WORK_GRAPH_FLAGS )" ) - -typedef struct D3D12_SET_WORK_GRAPH_DESC -{ - D3D12_PROGRAM_IDENTIFIER ProgramIdentifier; - D3D12_SET_WORK_GRAPH_FLAGS Flags; - D3D12_GPU_VIRTUAL_ADDRESS_RANGE BackingMemory; - D3D12_GPU_VIRTUAL_ADDRESS_RANGE_AND_STRIDE NodeLocalRootArgumentsTable; -} D3D12_SET_WORK_GRAPH_DESC; - -typedef struct D3D12_SET_RAYTRACING_PIPELINE_DESC -{ - D3D12_PROGRAM_IDENTIFIER ProgramIdentifier; -} D3D12_SET_RAYTRACING_PIPELINE_DESC; - -typedef struct D3D12_SET_GENERIC_PIPELINE_DESC -{ - D3D12_PROGRAM_IDENTIFIER ProgramIdentifier; -} D3D12_SET_GENERIC_PIPELINE_DESC; - -typedef enum D3D12_PROGRAM_TYPE -{ - D3D12_PROGRAM_TYPE_GENERIC_PIPELINE = 1, - D3D12_PROGRAM_TYPE_RAYTRACING_PIPELINE = 4, - D3D12_PROGRAM_TYPE_WORK_GRAPH = 5 -} D3D12_PROGRAM_TYPE; - -typedef struct D3D12_SET_PROGRAM_DESC -{ - D3D12_PROGRAM_TYPE Type; - union - { - D3D12_SET_GENERIC_PIPELINE_DESC GenericPipeline; - D3D12_SET_RAYTRACING_PIPELINE_DESC RaytracingPipeline; - D3D12_SET_WORK_GRAPH_DESC WorkGraph; - }; -} D3D12_SET_PROGRAM_DESC; - -typedef enum D3D12_DISPATCH_MODE -{ - D3D12_DISPATCH_MODE_NODE_CPU_INPUT = 0, // D3D12_NODE_CPU_INPUT - D3D12_DISPATCH_MODE_NODE_GPU_INPUT = 1, // D3D12_NODE_GPU_INPUT in GPU memory - D3D12_DISPATCH_MODE_MULTI_NODE_CPU_INPUT = 2, // D3D12_MULTI_NODE_CPU_INPUT - D3D12_DISPATCH_MODE_MULTI_NODE_GPU_INPUT = 3 // D3D12_MULTI_NODE_GPU_INPUT in GPU memory -} D3D12_DISPATCH_MODE; - -typedef struct D3D12_NODE_CPU_INPUT -{ - UINT EntrypointIndex; - UINT NumRecords; - const void* pRecords; - UINT64 RecordStrideInBytes; -} D3D12_NODE_CPU_INPUT; - -typedef struct D3D12_NODE_GPU_INPUT -{ - UINT EntrypointIndex; - UINT NumRecords; - D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE Records; -} D3D12_NODE_GPU_INPUT; - -typedef struct D3D12_MULTI_NODE_CPU_INPUT -{ - UINT NumNodeInputs; - const D3D12_NODE_CPU_INPUT* pNodeInputs; - UINT64 NodeInputStrideInBytes; -} D3D12_MULTI_NODE_CPU_INPUT; - -typedef struct D3D12_MULTI_NODE_GPU_INPUT -{ - UINT NumNodeInputs; - D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE NodeInputs; // D3D12_GPU_NODE_INPUT array -} D3D12_MULTI_NODE_GPU_INPUT; - -typedef struct D3D12_DISPATCH_GRAPH_DESC -{ - D3D12_DISPATCH_MODE Mode; - union - { - D3D12_NODE_CPU_INPUT NodeCPUInput; - D3D12_GPU_VIRTUAL_ADDRESS NodeGPUInput; - D3D12_MULTI_NODE_CPU_INPUT MultiNodeCPUInput; - D3D12_GPU_VIRTUAL_ADDRESS MultiNodeGPUInput; - }; -} D3D12_DISPATCH_GRAPH_DESC; - -[uuid(8754318e-d3a9-4541-98cf-645b50dc4874), object, local, pointer_default(unique)] -interface ID3D12GraphicsCommandList4 : ID3D12GraphicsCommandList3 -{ - void BeginRenderPass( - [annotation("_In_")] UINT NumRenderTargets, - [annotation("_In_reads_opt_(NumRenderTargets)")] const D3D12_RENDER_PASS_RENDER_TARGET_DESC* pRenderTargets, - [annotation("_In_opt_")] const D3D12_RENDER_PASS_DEPTH_STENCIL_DESC* pDepthStencil, - D3D12_RENDER_PASS_FLAGS Flags - ); - - void EndRenderPass(); - - void InitializeMetaCommand( - [annotation("_In_")] ID3D12MetaCommand * pMetaCommand, - [annotation("_In_reads_bytes_opt_(InitializationParametersDataSizeInBytes)")] const void * pInitializationParametersData, - [annotation("_In_")] SIZE_T InitializationParametersDataSizeInBytes - ); - - void ExecuteMetaCommand( - [annotation("_In_")] ID3D12MetaCommand * pMetaCommand, - [annotation("_In_reads_bytes_opt_(ExecutionParametersDataSizeInBytes)")] const void * pExecutionParametersData, - [annotation("_In_")] SIZE_T ExecutionParametersDataSizeInBytes - ); - - void BuildRaytracingAccelerationStructure( - [annotation("_In_")] const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC* pDesc, - [annotation("_In_")] UINT NumPostbuildInfoDescs, - [annotation("_In_reads_opt_(NumPostbuildInfoDescs)")] const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC* pPostbuildInfoDescs - ); - - void EmitRaytracingAccelerationStructurePostbuildInfo( - [annotation("_In_")] const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC* pDesc, - [annotation("_In_")] UINT NumSourceAccelerationStructures, - [annotation("_In_reads_( NumSourceAccelerationStructures )")] const D3D12_GPU_VIRTUAL_ADDRESS* pSourceAccelerationStructureData); - - void CopyRaytracingAccelerationStructure( - [annotation("_In_")] D3D12_GPU_VIRTUAL_ADDRESS DestAccelerationStructureData, - [annotation("_In_")] D3D12_GPU_VIRTUAL_ADDRESS SourceAccelerationStructureData, - [annotation("_In_")] D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE Mode); - - void SetPipelineState1( - [annotation("_In_")] ID3D12StateObject* pStateObject); - - void DispatchRays( - [annotation("_In_")] const D3D12_DISPATCH_RAYS_DESC* pDesc); -} - -typedef enum D3D12_SHADER_CACHE_MODE -{ - D3D12_SHADER_CACHE_MODE_MEMORY, - D3D12_SHADER_CACHE_MODE_DISK, -} D3D12_SHADER_CACHE_MODE; - -typedef enum D3D12_SHADER_CACHE_FLAGS -{ - D3D12_SHADER_CACHE_FLAG_NONE = 0x0, - D3D12_SHADER_CACHE_FLAG_DRIVER_VERSIONED = 0x1, - D3D12_SHADER_CACHE_FLAG_USE_WORKING_DIR = 0x2, -} D3D12_SHADER_CACHE_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_SHADER_CACHE_FLAGS )") - -typedef struct D3D12_SHADER_CACHE_SESSION_DESC -{ - GUID Identifier; - D3D12_SHADER_CACHE_MODE Mode; - D3D12_SHADER_CACHE_FLAGS Flags; - - UINT MaximumInMemoryCacheSizeBytes; - UINT MaximumInMemoryCacheEntries; - - UINT MaximumValueFileSizeBytes; - - UINT64 Version; -} D3D12_SHADER_CACHE_SESSION_DESC; - -typedef enum D3D12_BARRIER_LAYOUT -{ - D3D12_BARRIER_LAYOUT_UNDEFINED = 0xffffffff, - D3D12_BARRIER_LAYOUT_COMMON = 0, - D3D12_BARRIER_LAYOUT_PRESENT = 0, - D3D12_BARRIER_LAYOUT_GENERIC_READ, - D3D12_BARRIER_LAYOUT_RENDER_TARGET, - D3D12_BARRIER_LAYOUT_UNORDERED_ACCESS, - D3D12_BARRIER_LAYOUT_DEPTH_STENCIL_WRITE, - D3D12_BARRIER_LAYOUT_DEPTH_STENCIL_READ, - D3D12_BARRIER_LAYOUT_SHADER_RESOURCE, - D3D12_BARRIER_LAYOUT_COPY_SOURCE, - D3D12_BARRIER_LAYOUT_COPY_DEST, - D3D12_BARRIER_LAYOUT_RESOLVE_SOURCE, - D3D12_BARRIER_LAYOUT_RESOLVE_DEST, - D3D12_BARRIER_LAYOUT_SHADING_RATE_SOURCE, - D3D12_BARRIER_LAYOUT_VIDEO_DECODE_READ, - D3D12_BARRIER_LAYOUT_VIDEO_DECODE_WRITE, - D3D12_BARRIER_LAYOUT_VIDEO_PROCESS_READ, - D3D12_BARRIER_LAYOUT_VIDEO_PROCESS_WRITE, - D3D12_BARRIER_LAYOUT_VIDEO_ENCODE_READ, - D3D12_BARRIER_LAYOUT_VIDEO_ENCODE_WRITE, - D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_COMMON, - D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_GENERIC_READ, - D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_UNORDERED_ACCESS, - D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_SHADER_RESOURCE, - D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_COPY_SOURCE, - D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_COPY_DEST, - D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_COMMON, - D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_GENERIC_READ, - D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_UNORDERED_ACCESS, - D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_SHADER_RESOURCE, - D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_COPY_SOURCE, - D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_COPY_DEST, - D3D12_BARRIER_LAYOUT_VIDEO_QUEUE_COMMON, - -} D3D12_BARRIER_LAYOUT; - -typedef enum D3D12_BARRIER_SYNC -{ - D3D12_BARRIER_SYNC_NONE = 0x0, - D3D12_BARRIER_SYNC_ALL = 0x1, - D3D12_BARRIER_SYNC_DRAW = 0x2, - D3D12_BARRIER_SYNC_INDEX_INPUT = 0x4, - D3D12_BARRIER_SYNC_VERTEX_SHADING = 0x8, - D3D12_BARRIER_SYNC_PIXEL_SHADING = 0x10, - D3D12_BARRIER_SYNC_DEPTH_STENCIL = 0x20, - D3D12_BARRIER_SYNC_RENDER_TARGET = 0x40, - D3D12_BARRIER_SYNC_COMPUTE_SHADING = 0x80, - D3D12_BARRIER_SYNC_RAYTRACING = 0x100, - D3D12_BARRIER_SYNC_COPY = 0x200, - D3D12_BARRIER_SYNC_RESOLVE = 0x400, - D3D12_BARRIER_SYNC_EXECUTE_INDIRECT = 0x800, - D3D12_BARRIER_SYNC_PREDICATION = 0x800, // Aliased with SYNC_EXECUTE_INDIRECT - D3D12_BARRIER_SYNC_ALL_SHADING = 0x1000, - D3D12_BARRIER_SYNC_NON_PIXEL_SHADING = 0x2000, - D3D12_BARRIER_SYNC_EMIT_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO = 0x4000, - D3D12_BARRIER_SYNC_CLEAR_UNORDERED_ACCESS_VIEW = 0x8000, - D3D12_BARRIER_SYNC_VIDEO_DECODE = 0x100000, - D3D12_BARRIER_SYNC_VIDEO_PROCESS = 0x200000, - D3D12_BARRIER_SYNC_VIDEO_ENCODE = 0x400000, - D3D12_BARRIER_SYNC_BUILD_RAYTRACING_ACCELERATION_STRUCTURE = 0x800000, - D3D12_BARRIER_SYNC_COPY_RAYTRACING_ACCELERATION_STRUCTURE = 0x1000000, - D3D12_BARRIER_SYNC_SPLIT = 0x80000000, -} D3D12_BARRIER_SYNC; -cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_BARRIER_SYNC )" ) - -typedef enum D3D12_BARRIER_ACCESS -{ - D3D12_BARRIER_ACCESS_COMMON = 0, - D3D12_BARRIER_ACCESS_VERTEX_BUFFER = 0x1, - D3D12_BARRIER_ACCESS_CONSTANT_BUFFER = 0x2, - D3D12_BARRIER_ACCESS_INDEX_BUFFER = 0x4, - D3D12_BARRIER_ACCESS_RENDER_TARGET = 0x8, - D3D12_BARRIER_ACCESS_UNORDERED_ACCESS = 0x10, - D3D12_BARRIER_ACCESS_DEPTH_STENCIL_WRITE = 0x20, - D3D12_BARRIER_ACCESS_DEPTH_STENCIL_READ = 0x40, - D3D12_BARRIER_ACCESS_SHADER_RESOURCE = 0x80, - D3D12_BARRIER_ACCESS_STREAM_OUTPUT = 0x100, - D3D12_BARRIER_ACCESS_INDIRECT_ARGUMENT = 0x200, - D3D12_BARRIER_ACCESS_PREDICATION = 0x200, // Aliased with ACCESS_INDIRECT_ARGUMENT - D3D12_BARRIER_ACCESS_COPY_DEST = 0x400, - D3D12_BARRIER_ACCESS_COPY_SOURCE = 0x800, - D3D12_BARRIER_ACCESS_RESOLVE_DEST = 0x1000, - D3D12_BARRIER_ACCESS_RESOLVE_SOURCE = 0x2000, - D3D12_BARRIER_ACCESS_RAYTRACING_ACCELERATION_STRUCTURE_READ = 0x4000, - D3D12_BARRIER_ACCESS_RAYTRACING_ACCELERATION_STRUCTURE_WRITE = 0x8000, - D3D12_BARRIER_ACCESS_SHADING_RATE_SOURCE = 0x10000, - D3D12_BARRIER_ACCESS_VIDEO_DECODE_READ = 0x20000, - D3D12_BARRIER_ACCESS_VIDEO_DECODE_WRITE = 0x40000, - D3D12_BARRIER_ACCESS_VIDEO_PROCESS_READ = 0x80000, - D3D12_BARRIER_ACCESS_VIDEO_PROCESS_WRITE = 0x100000, - D3D12_BARRIER_ACCESS_VIDEO_ENCODE_READ = 0x200000, - D3D12_BARRIER_ACCESS_VIDEO_ENCODE_WRITE = 0x400000, - D3D12_BARRIER_ACCESS_NO_ACCESS = 0x80000000, -} D3D12_BARRIER_ACCESS; -cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_BARRIER_ACCESS )" ) - -typedef enum D3D12_BARRIER_TYPE -{ - D3D12_BARRIER_TYPE_GLOBAL, - D3D12_BARRIER_TYPE_TEXTURE, - D3D12_BARRIER_TYPE_BUFFER, -} D3D12_BARRIER_TYPE; - -typedef enum D3D12_TEXTURE_BARRIER_FLAGS -{ - D3D12_TEXTURE_BARRIER_FLAG_NONE = 0x0, - D3D12_TEXTURE_BARRIER_FLAG_DISCARD = 0x1, -} D3D12_TEXTURE_BARRIER_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_TEXTURE_BARRIER_FLAGS )") - -typedef struct D3D12_BARRIER_SUBRESOURCE_RANGE -{ - UINT IndexOrFirstMipLevel; - UINT NumMipLevels; - UINT FirstArraySlice; - UINT NumArraySlices; - UINT FirstPlane; - UINT NumPlanes; -} D3D12_BARRIER_SUBRESOURCE_RANGE; - -typedef struct D3D12_GLOBAL_BARRIER -{ - D3D12_BARRIER_SYNC SyncBefore; - D3D12_BARRIER_SYNC SyncAfter; - D3D12_BARRIER_ACCESS AccessBefore; - D3D12_BARRIER_ACCESS AccessAfter; -} D3D12_GLOBAL_BARRIER; - -typedef struct D3D12_TEXTURE_BARRIER -{ - D3D12_BARRIER_SYNC SyncBefore; - D3D12_BARRIER_SYNC SyncAfter; - D3D12_BARRIER_ACCESS AccessBefore; - D3D12_BARRIER_ACCESS AccessAfter; - D3D12_BARRIER_LAYOUT LayoutBefore; - D3D12_BARRIER_LAYOUT LayoutAfter; - [annotation("_In_")] ID3D12Resource *pResource; - D3D12_BARRIER_SUBRESOURCE_RANGE Subresources; - D3D12_TEXTURE_BARRIER_FLAGS Flags; -} D3D12_TEXTURE_BARRIER; - -typedef struct D3D12_BUFFER_BARRIER -{ - D3D12_BARRIER_SYNC SyncBefore; - D3D12_BARRIER_SYNC SyncAfter; - D3D12_BARRIER_ACCESS AccessBefore; - D3D12_BARRIER_ACCESS AccessAfter; - [annotation("_In_")] ID3D12Resource *pResource; - UINT64 Offset; - UINT64 Size; -} D3D12_BUFFER_BARRIER; - -typedef struct D3D12_BARRIER_GROUP -{ - D3D12_BARRIER_TYPE Type; - UINT32 NumBarriers; - union - { - [annotation("_In_reads_(NumBarriers)")] const D3D12_GLOBAL_BARRIER *pGlobalBarriers; - [annotation("_In_reads_(NumBarriers)")] const D3D12_TEXTURE_BARRIER *pTextureBarriers; - [annotation("_In_reads_(NumBarriers)")] const D3D12_BUFFER_BARRIER *pBufferBarriers; - }; -} D3D12_BARRIER_GROUP; - -[uuid(28e2495d-0f64-4ae4-a6ec-129255dc49a8), object, local, pointer_default(unique)] -interface ID3D12ShaderCacheSession - : ID3D12DeviceChild -{ - HRESULT FindValue( - [in, annotation("_In_reads_bytes_(KeySize)")] const void* pKey, - UINT KeySize, - [out, annotation("_Out_writes_bytes_(*pValueSize)")] void* pValue, - [annotation("_Inout_")] UINT* pValueSize); - HRESULT StoreValue( - [in, annotation("_In_reads_bytes_(KeySize)")] const void* pKey, - UINT KeySize, - [in, annotation("_In_reads_bytes_(ValueSize)")] const void* pValue, - UINT ValueSize); - - void SetDeleteOnDestroy(); - D3D12_SHADER_CACHE_SESSION_DESC GetDesc(); -}; - -typedef enum D3D12_SHADER_CACHE_KIND_FLAGS -{ - D3D12_SHADER_CACHE_KIND_FLAG_IMPLICIT_D3D_CACHE_FOR_DRIVER = 0x1, - D3D12_SHADER_CACHE_KIND_FLAG_IMPLICIT_D3D_CONVERSIONS = 0x2, - D3D12_SHADER_CACHE_KIND_FLAG_IMPLICIT_DRIVER_MANAGED = 0x4, - D3D12_SHADER_CACHE_KIND_FLAG_APPLICATION_MANAGED = 0x8, -} D3D12_SHADER_CACHE_KIND_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_SHADER_CACHE_KIND_FLAGS )") - -typedef enum D3D12_SHADER_CACHE_CONTROL_FLAGS -{ - D3D12_SHADER_CACHE_CONTROL_FLAG_DISABLE = 0x1, - D3D12_SHADER_CACHE_CONTROL_FLAG_ENABLE = 0x2, - D3D12_SHADER_CACHE_CONTROL_FLAG_CLEAR = 0x4, -} D3D12_SHADER_CACHE_CONTROL_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_SHADER_CACHE_CONTROL_FLAGS )") - -[uuid(4c80e962-f032-4f60-bc9e-ebc2cfa1d83c), object, local, pointer_default(unique)] -interface ID3D12Device9 - : ID3D12Device8 -{ - HRESULT CreateShaderCacheSession( - [annotation("_In_")] const D3D12_SHADER_CACHE_SESSION_DESC* pDesc, - REFIID riid, - [annotation("_COM_Outptr_opt_")] void** ppvSession); - - HRESULT ShaderCacheControl( - D3D12_SHADER_CACHE_KIND_FLAGS Kinds, - D3D12_SHADER_CACHE_CONTROL_FLAGS Control); - - HRESULT CreateCommandQueue1( - [annotation("_In_")] const D3D12_COMMAND_QUEUE_DESC* pDesc, - REFIID CreatorID, - [in] REFIID riid, // Expected: ID3D12CommandQueue - [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppCommandQueue - ); -}; - -[uuid(517f8718-aa66-49f9-b02b-a7ab89c06031), object, local, pointer_default(unique)] -interface ID3D12Device10 - : ID3D12Device9 -{ - HRESULT CreateCommittedResource3( - [annotation("_In_")] const D3D12_HEAP_PROPERTIES* pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - [annotation("_In_")] const D3D12_RESOURCE_DESC1* pDesc, - D3D12_BARRIER_LAYOUT InitialLayout, - [annotation("_In_opt_")] const D3D12_CLEAR_VALUE* pOptimizedClearValue, - [annotation("_In_opt_")] ID3D12ProtectedResourceSession* pProtectedSession, - UINT32 NumCastableFormats, - [annotation("_In_opt_count_(NumCastableFormats)")] const DXGI_FORMAT *pCastableFormats, - [in] REFIID riidResource, // Expected: ID3D12Resource1* - [out, iid_is(riidResource), annotation("_COM_Outptr_opt_")] void** ppvResource); - - HRESULT CreatePlacedResource2( - [annotation("_In_")] ID3D12Heap* pHeap, - UINT64 HeapOffset, - [annotation("_In_")] const D3D12_RESOURCE_DESC1* pDesc, - D3D12_BARRIER_LAYOUT InitialLayout, - [annotation("_In_opt_")] const D3D12_CLEAR_VALUE* pOptimizedClearValue, - UINT32 NumCastableFormats, - [annotation("_In_opt_count_(NumCastableFormats)")] const DXGI_FORMAT *pCastableFormats, - [in] REFIID riid, // Expected: ID3D12Resource* - [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppvResource); - - HRESULT CreateReservedResource2( - [annotation("_In_")] const D3D12_RESOURCE_DESC* pDesc, - D3D12_BARRIER_LAYOUT InitialLayout, - [annotation("_In_opt_")] const D3D12_CLEAR_VALUE* pOptimizedClearValue, - [annotation("_In_opt_")] ID3D12ProtectedResourceSession *pProtectedSession, - UINT32 NumCastableFormats, - [annotation("_In_opt_count_(NumCastableFormats)")] const DXGI_FORMAT *pCastableFormats, - [in] REFIID riid, // Expected: ID3D12Resource1* - [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppvResource - ); -}; - -[uuid(5405c344-d457-444e-b4dd-2366e45aee39), object, local, pointer_default(unique)] -interface ID3D12Device11 - : ID3D12Device10 -{ - void CreateSampler2( - [annotation("_In_")] const D3D12_SAMPLER_DESC2* pDesc, - [annotation("_In_")] D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); -}; - -[uuid(5af5c532-4c91-4cd0-b541-15a405395fc5), object, local, pointer_default(unique)] -interface ID3D12Device12 - : ID3D12Device11 -{ - D3D12_RESOURCE_ALLOCATION_INFO GetResourceAllocationInfo3( - UINT visibleMask, - UINT numResourceDescs, - [annotation("_In_reads_(numResourceDescs)")] const D3D12_RESOURCE_DESC1* pResourceDescs, - [annotation("_In_opt_count_(numResourceDescs)")] const UINT32* pNumCastableFormats, - [annotation("_In_opt_count_(numResourceDescs)")] const DXGI_FORMAT *const *ppCastableFormats, - [annotation("_Out_writes_opt_(numResourceDescs)")] D3D12_RESOURCE_ALLOCATION_INFO1* pResourceAllocationInfo1); -}; - -[uuid(14eecffc-4df8-40f7-a118-5c816f45695e), object, local, pointer_default(unique)] -interface ID3D12Device13 - : ID3D12Device12 -{ - HRESULT OpenExistingHeapFromAddress1( - [annotation("_In_")] const void* pAddress, - SIZE_T size, - [in] REFIID riid, // Expected: ID3D12Heap - [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppvHeap - ); -}; - -[uuid(5f6e592d-d895-44c2-8e4a-88ad4926d323), object, local, pointer_default(unique)] -interface ID3D12Device14 : ID3D12Device13 -{ - HRESULT CreateRootSignatureFromSubobjectInLibrary( - [annotation("_In_")] UINT nodeMask, - [annotation("_In_reads_(blobLengthInBytes)")] const void* pLibraryBlob, - [annotation("_In_")] SIZE_T blobLengthInBytes, - [annotation("_In_opt_")] LPCWSTR subobjectName, - [in] REFIID riid, // Expected ID3D12RootSignature - [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppvRootSignature); -}; - - -[uuid(bc66d368-7373-4943-8757-fc87dc79e476), object, local, pointer_default(unique)] -interface ID3D12VirtualizationGuestDevice - : IUnknown -{ - HRESULT ShareWithHost( - [annotation("_In_")] ID3D12DeviceChild* pObject, - [annotation("_Out_")] HANDLE* pHandle - ); - - HRESULT CreateFenceFd( - [annotation("_In_")] ID3D12Fence *pFence, - UINT64 FenceValue, - [annotation("_Out_")] int *pFenceFd - ); -}; - - -[uuid(7071e1f0-e84b-4b33-974f-12fa49de65c5), object, local, pointer_default(unique)] -interface ID3D12Tools - : IUnknown -{ - void EnableShaderInstrumentation(BOOL bEnable); - BOOL ShaderInstrumentationEnabled(); -} - -[uuid(e4fbc019-dd3c-43e1-8f32-7f649575f0a0), object, local, pointer_default(unique)] -interface ID3D12Tools1 - : ID3D12Tools -{ - HRESULT ReserveGPUVARangesAtCreate( - [annotation("_In_reads_(uiNumRanges)")] D3D12_GPU_VIRTUAL_ADDRESS_RANGE* pRanges, - [annotation("_In_")] UINT uiNumRanges); - void ClearReservedGPUVARangesList(); -} - - -[uuid(8f1359db-d8d1-42f9-b5cf-79f4cbad0d3d), object, local, pointer_default(unique)] -interface ID3D12PageableTools - : IUnknown -{ - HRESULT GetAllocation( - [annotation("_Inout_")] D3D12_GPU_VIRTUAL_ADDRESS_RANGE* pAllocation); -} - -[uuid(2ea68e9c-19c3-4e47-a109-6cdadff0aca9), object, local, pointer_default(unique)] -interface ID3D12DeviceTools - : IUnknown -{ - void SetNextAllocationAddress( - [annotation("_In_")] D3D12_GPU_VIRTUAL_ADDRESS nextAllocationVirtualAddress); -} - - -typedef struct D3D12_SUBRESOURCE_DATA -{ - const void* pData; - LONG_PTR RowPitch; - LONG_PTR SlicePitch; -} D3D12_SUBRESOURCE_DATA; - -typedef struct D3D12_MEMCPY_DEST -{ - void* pData; - SIZE_T RowPitch; - SIZE_T SlicePitch; -} D3D12_MEMCPY_DEST; - - - -cpp_quote( "#if !defined( D3D12_IGNORE_SDK_LAYERS ) ") -cpp_quote( "#include \"d3d12sdklayers.h\" ") -cpp_quote( "#endif ") - - -cpp_quote("") -cpp_quote("///////////////////////////////////////////////////////////////////////////") -cpp_quote("// D3D12CreateDevice") -cpp_quote("// ------------------") -cpp_quote("//") -cpp_quote("// pAdapter") -cpp_quote("// If NULL, D3D12CreateDevice will choose the primary adapter.") -cpp_quote("// If non-NULL, D3D12CreateDevice will use the provided adapter.") -cpp_quote("// MinimumFeatureLevel") -cpp_quote("// The minimum feature level required for successful device creation.") -cpp_quote("// riid") -cpp_quote("// The interface IID of the device to be returned. Expected: ID3D12Device.") -cpp_quote("// ppDevice") -cpp_quote("// Pointer to returned interface. May be NULL.") -cpp_quote("//") -cpp_quote("// Return Values") -cpp_quote("// Any of those documented for ") -cpp_quote("// CreateDXGIFactory1") -cpp_quote("// IDXGIFactory::EnumAdapters") -cpp_quote("// D3D12CreateDevice") -cpp_quote("//") -cpp_quote("///////////////////////////////////////////////////////////////////////////") -cpp_quote("typedef HRESULT (WINAPI* PFN_D3D12_CREATE_DEVICE)( _In_opt_ IUnknown*, ") -cpp_quote(" D3D_FEATURE_LEVEL, ") -cpp_quote(" _In_ REFIID, _COM_Outptr_opt_ void** );") -cpp_quote("") -cpp_quote("HRESULT WINAPI D3D12CreateDevice(") -cpp_quote(" _In_opt_ IUnknown* pAdapter,") -cpp_quote(" D3D_FEATURE_LEVEL MinimumFeatureLevel,") -cpp_quote(" _In_ REFIID riid, // Expected: ID3D12Device") -cpp_quote(" _COM_Outptr_opt_ void** ppDevice );") -cpp_quote("") - -cpp_quote("") -cpp_quote("typedef HRESULT (WINAPI* PFN_D3D12_GET_DEBUG_INTERFACE)( _In_ REFIID, _COM_Outptr_opt_ void** );") -cpp_quote("") -cpp_quote("HRESULT WINAPI D3D12GetDebugInterface( _In_ REFIID riid, _COM_Outptr_opt_ void** ppvDebug );") -cpp_quote("") - -cpp_quote("// --------------------------------------------------------------------------------------------------------------------------------") -cpp_quote("// D3D12EnableExperimentalFeatures") -cpp_quote("//") -cpp_quote("// Pass in a list of feature GUIDs to be enabled together.") -cpp_quote("// ") -cpp_quote("// If a particular feature requires some configuration information on enablement, it will have") -cpp_quote("// a configuration struct that can be passed alongside the GUID.") -cpp_quote("// ") -cpp_quote("// Some features might use an interface IID as the GUID. For these, once the feature is enabled via") -cpp_quote("// D3D12EnableExperimentalFeatures, D3D12GetDebugInterface can then be called with the IID to retrieve the interface") -cpp_quote("// for manipulating the feature. This allows for control that might not cleanly be expressed by just ") -cpp_quote("// the configuration struct that D3D12EnableExperimentalFeatures provides.") -cpp_quote("//") -cpp_quote("// If this method is called and a change to existing feature enablement is made, ") -cpp_quote("// all current D3D12 devices are set to DEVICE_REMOVED state, since under the covers there is really only one") -cpp_quote("// singleton device for a process. Removing the devices when configuration changes prevents") -cpp_quote("// mismatched expectations of how a device is supposed to work after it has been created from the app's point of view.") -cpp_quote("//") -cpp_quote("// The call returns E_NOINTERFACE if an unrecognized feature is passed in or Windows Developer mode is not on.") -cpp_quote("// The call returns E_INVALIDARG if the configuration of a feature is incorrect, the set of features passed") -cpp_quote("// in are known to be incompatible with each other, or other errors.") -cpp_quote("// Returns S_OK otherwise.") -cpp_quote("//") -cpp_quote("// --------------------------------------------------------------------------------------------------------------------------------") -cpp_quote("HRESULT WINAPI D3D12EnableExperimentalFeatures(") -cpp_quote(" UINT NumFeatures,") -cpp_quote(" _In_count_(NumFeatures) const IID* pIIDs,") -cpp_quote(" _In_opt_count_(NumFeatures) void* pConfigurationStructs,") -cpp_quote(" _In_opt_count_(NumFeatures) UINT* pConfigurationStructSizes);") -cpp_quote("") -cpp_quote("// --------------------------------------------------------------------------------------------------------------------------------") -cpp_quote("// Experimental Feature: D3D12ExperimentalShaderModels") -cpp_quote("//") -cpp_quote("// Use with D3D12EnableExperimentalFeatures to enable experimental shader model support,") -cpp_quote("// meaning shader models that haven't been finalized for use in retail.") -cpp_quote("//") -cpp_quote("// Enabling D3D12ExperimentalShaderModels needs no configuration struct, pass NULL in the pConfigurationStructs array.") -cpp_quote("//") -cpp_quote("// --------------------------------------------------------------------------------------------------------------------------------") -cpp_quote("static const UUID D3D12ExperimentalShaderModels = { /* 76f5573e-f13a-40f5-b297-81ce9e18933f */") -cpp_quote(" 0x76f5573e,") -cpp_quote(" 0xf13a,") -cpp_quote(" 0x40f5,") -cpp_quote(" { 0xb2, 0x97, 0x81, 0xce, 0x9e, 0x18, 0x93, 0x3f }") -cpp_quote("};") -cpp_quote("// --------------------------------------------------------------------------------------------------------------------------------") -cpp_quote("// Experimental Feature: D3D12TiledResourceTier4") -cpp_quote("//") -cpp_quote("// Use with D3D12EnableExperimentalFeatures to enable tiled resource tier 4 support,") -cpp_quote("// meaning texture tile data-inheritance is allowed.") -cpp_quote("//") -cpp_quote("// Enabling D3D12TiledResourceTier4 needs no configuration struct, pass NULL in the pConfigurationStructs array.") -cpp_quote("//") -cpp_quote("// --------------------------------------------------------------------------------------------------------------------------------") -cpp_quote("static const UUID D3D12TiledResourceTier4 = { /* c9c4725f-a81a-4f56-8c5b-c51039d694fb */") -cpp_quote(" 0xc9c4725f,") -cpp_quote(" 0xa81a,") -cpp_quote(" 0x4f56,") -cpp_quote(" { 0x8c, 0x5b, 0xc5, 0x10, 0x39, 0xd6, 0x94, 0xfb }") -cpp_quote("};") -cpp_quote("// --------------------------------------------------------------------------------------------------------------------------------") -cpp_quote("// Experimental Feature: D3D12GPUUploadHeapsOnUnsupportedOS") -cpp_quote("//") -cpp_quote("// Use with D3D12EnableExperimentalFeatures to enable GPU upload heaps support on an unsupported OS, ") -cpp_quote("// driver support is still required for this feature.") -cpp_quote("//") -cpp_quote("// Enabling D3D12GPUUploadHeapsOnUnsupportedOS needs no configuration struct, pass NULL in the pConfigurationStructs array.") -cpp_quote("//") -cpp_quote("// --------------------------------------------------------------------------------------------------------------------------------") -cpp_quote("static const UUID D3D12GPUUploadHeapsOnUnsupportedOS = { /* 45dc51f3-767f-4588-b206-0baa2b16fbae */") -cpp_quote(" 0x45dc51f3,") -cpp_quote(" 0x767f,") -cpp_quote(" 0x4588,") -cpp_quote(" { 0xb2, 0x06, 0x0b, 0xaa, 0x2b, 0x16, 0xfb, 0xae }") -cpp_quote("};") - -cpp_quote("// --------------------------------------------------------------------------------------------------------------------------------") -cpp_quote("// D3D12GetInterface") -cpp_quote("//") -cpp_quote("// Retrieve Global D3D12 Interface.") -cpp_quote("//") -cpp_quote("") -cpp_quote("DEFINE_GUID(CLSID_D3D12Debug, 0xf2352aeb, 0xdd84, 0x49fe, 0xb9, 0x7b, 0xa9, 0xdc, 0xfd, 0xcc, 0x1b, 0x4f);") -cpp_quote("DEFINE_GUID(CLSID_D3D12Tools, 0xe38216b1, 0x3c8c, 0x4833, 0xaa, 0x09, 0x0a, 0x06, 0xb6, 0x5d, 0x96, 0xc8);") -cpp_quote("DEFINE_GUID(CLSID_D3D12DeviceRemovedExtendedData, 0x4a75bbc4, 0x9ff4, 0x4ad8, 0x9f, 0x18, 0xab, 0xae, 0x84, 0xdc, 0x5f, 0xf2);") -cpp_quote("DEFINE_GUID(CLSID_D3D12SDKConfiguration, 0x7cda6aca, 0xa03e, 0x49c8, 0x94, 0x58, 0x03, 0x34, 0xd2, 0x0e, 0x07, 0xce);") -cpp_quote("DEFINE_GUID(CLSID_D3D12DeviceFactory, 0x114863bf, 0xc386, 0x4aee, 0xb3, 0x9d, 0x8f, 0x0b, 0xbb, 0x06, 0x29, 0x55);") -cpp_quote("DEFINE_GUID(CLSID_D3D12DSRDeviceFactory, 0xbb6dd27e, 0x94a9, 0x41a6, 0x9f, 0x1b, 0x13, 0x37, 0x72, 0x17, 0x24, 0x28);") -cpp_quote("") -cpp_quote("typedef HRESULT (WINAPI* PFN_D3D12_GET_INTERFACE)( _In_ REFCLSID, _In_ REFIID, _COM_Outptr_opt_ void** );") -cpp_quote("") -cpp_quote("HRESULT WINAPI D3D12GetInterface( _In_ REFCLSID rclsid, _In_ REFIID riid, _COM_Outptr_opt_ void** ppvDebug );") -cpp_quote("") - -//================================================================================================================================== -// -// SDK Configuration -// -//================================================================================================================================== - -[uuid(e9eb5314-33aa-42b2-a718-d77f58b1f1c7), object, local, pointer_default(unique)] -interface ID3D12SDKConfiguration - : IUnknown -{ - HRESULT SetSDKVersion( - UINT SDKVersion, - [annotation("_In_z_")] LPCSTR SDKPath - ); -} - -[uuid(8aaf9303-ad25-48b9-9a57-d9c37e009d9f), object, local, pointer_default(unique)] -interface ID3D12SDKConfiguration1 - : ID3D12SDKConfiguration -{ - HRESULT CreateDeviceFactory( - UINT SDKVersion, - [annotation("_In_")] LPCSTR SDKPath, - REFIID riid, // Expected: ID3D12DeviceFactory - [annotation("_COM_Outptr_")] void **ppvFactory - ); - void FreeUnusedSDKs(); -} - -typedef enum D3D12_DEVICE_FACTORY_FLAGS -{ - D3D12_DEVICE_FACTORY_FLAG_NONE = 0, - D3D12_DEVICE_FACTORY_FLAG_ALLOW_RETURNING_EXISTING_DEVICE = 0x1, - D3D12_DEVICE_FACTORY_FLAG_ALLOW_RETURNING_INCOMPATIBLE_EXISTING_DEVICE = 0x2, - D3D12_DEVICE_FACTORY_FLAG_DISALLOW_STORING_NEW_DEVICE_AS_SINGLETON = 0x4, -} D3D12_DEVICE_FACTORY_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_DEVICE_FACTORY_FLAGS )") - -[uuid(61f307d3-d34e-4e7c-8374-3ba4de23cccb), object, local, pointer_default(unique)] -interface ID3D12DeviceFactory - : IUnknown -{ - HRESULT InitializeFromGlobalState(); - HRESULT ApplyToGlobalState(); - - HRESULT SetFlags(D3D12_DEVICE_FACTORY_FLAGS flags); - D3D12_DEVICE_FACTORY_FLAGS GetFlags(); - - HRESULT GetConfigurationInterface( - REFCLSID clsid, - REFIID iid, - [annotation("_COM_Outptr_")] void **ppv); - - HRESULT EnableExperimentalFeatures( - UINT NumFeatures, - [annotation("_In_reads_(NumFeatures)")] const IID *pIIDs, - [annotation("_In_reads_opt_(NumFeatures)")] void *pConfigurationStructs, - [annotation("_In_reads_opt_(NumFeatures)")] UINT *pConfigurationStructSizes); - - HRESULT CreateDevice( - [annotation("_In_opt_")] IUnknown *adapter, - D3D_FEATURE_LEVEL FeatureLevel, - REFIID riid, - [annotation("_COM_Outptr_opt_")] void **ppvDevice); -}; - -typedef enum D3D12_DEVICE_FLAGS -{ - D3D12_DEVICE_FLAG_NONE = 0, - D3D12_DEVICE_FLAG_DEBUG_LAYER_ENABLED = 0x1, - D3D12_DEVICE_FLAG_GPU_BASED_VALIDATION_ENABLED = 0x2, - D3D12_DEVICE_FLAG_SYNCHRONIZED_COMMAND_QUEUE_VALIDATION_DISABLED = 0x4, - D3D12_DEVICE_FLAG_DRED_AUTO_BREADCRUMBS_ENABLED = 0x8, - D3D12_DEVICE_FLAG_DRED_PAGE_FAULT_REPORTING_ENABLED = 0x10, - D3D12_DEVICE_FLAG_DRED_WATSON_REPORTING_ENABLED = 0x20, - D3D12_DEVICE_FLAG_DRED_BREADCRUMB_CONTEXT_ENABLED = 0x40, - D3D12_DEVICE_FLAG_DRED_USE_MARKERS_ONLY_BREADCRUMBS = 0x80, - D3D12_DEVICE_FLAG_SHADER_INSTRUMENTATION_ENABLED = 0x100, - D3D12_DEVICE_FLAG_AUTO_DEBUG_NAME_ENABLED = 0x200, - D3D12_DEVICE_FLAG_FORCE_LEGACY_STATE_VALIDATION = 0x400, -} D3D12_DEVICE_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_DEVICE_FLAGS )") - -typedef struct D3D12_DEVICE_CONFIGURATION_DESC -{ - D3D12_DEVICE_FLAGS Flags; - UINT GpuBasedValidationFlags; // D3D12_GPU_BASED_VALIDATION_FLAGS from d3d12sdklayers.h - UINT SDKVersion; - UINT NumEnabledExperimentalFeatures; -} D3D12_DEVICE_CONFIGURATION_DESC; - -[uuid(78dbf87b-f766-422b-a61c-c8c446bdb9ad), object, local, pointer_default(unique)] -interface ID3D12DeviceConfiguration - : IUnknown -{ - D3D12_DEVICE_CONFIGURATION_DESC GetDesc(); - HRESULT GetEnabledExperimentalFeatures([annotation("_Out_writes_(NumGuids)")] GUID *pGuids, UINT NumGuids); - - HRESULT SerializeVersionedRootSignature( - [annotation("_In_")] const D3D12_VERSIONED_ROOT_SIGNATURE_DESC *pDesc, - [annotation("_COM_Outptr_")] ID3DBlob **ppResult, - [annotation("_Always_(_Outptr_opt_result_maybenull_)")] ID3DBlob **ppError); - - HRESULT CreateVersionedRootSignatureDeserializer( - [annotation("_In_reads_bytes_(Size)")] const void *pBlob, - SIZE_T Size, - REFIID riid, - [annotation("_COM_Outptr_")] void **ppvDeserializer); -}; - -[uuid(ed342442-6343-4e16-bb82-a3a577874e56), object, local, pointer_default(unique)] -interface ID3D12DeviceConfiguration1 - : ID3D12DeviceConfiguration -{ - HRESULT CreateVersionedRootSignatureDeserializerFromSubobjectInLibrary( - [annotation("_In_reads_bytes_(Size)")] const void* pLibraryBlob, - SIZE_T Size, - LPCWSTR RootSignatureSubobjectName, - REFIID riid, - [annotation("_COM_Outptr_")] void** ppvDeserializer); -}; - - -typedef enum D3D12_AXIS_SHADING_RATE -{ - D3D12_AXIS_SHADING_RATE_1X = 0x0, - D3D12_AXIS_SHADING_RATE_2X = 0x1, - D3D12_AXIS_SHADING_RATE_4X = 0x2 -} D3D12_AXIS_SHADING_RATE; - - -cpp_quote("#define D3D12_SHADING_RATE_X_AXIS_SHIFT 2") -cpp_quote("#define D3D12_SHADING_RATE_VALID_MASK 3") - -cpp_quote("#define D3D12_MAKE_COARSE_SHADING_RATE(x,y) ((x) << D3D12_SHADING_RATE_X_AXIS_SHIFT | (y))") - -cpp_quote("#define D3D12_GET_COARSE_SHADING_RATE_X_AXIS(x) (((x) >> D3D12_SHADING_RATE_X_AXIS_SHIFT) & D3D12_SHADING_RATE_VALID_MASK)") -cpp_quote("#define D3D12_GET_COARSE_SHADING_RATE_Y_AXIS(y) ((y) & D3D12_SHADING_RATE_VALID_MASK)") - -typedef enum D3D12_SHADING_RATE -{ - D3D12_SHADING_RATE_1X1 = 0x0, - D3D12_SHADING_RATE_1X2 = 0x1, - D3D12_SHADING_RATE_2X1 = 0x4, - D3D12_SHADING_RATE_2X2 = 0x5, - D3D12_SHADING_RATE_2X4 = 0x6, - D3D12_SHADING_RATE_4X2 = 0x9, - D3D12_SHADING_RATE_4X4 = 0xA -} D3D12_SHADING_RATE; - -typedef enum D3D12_SHADING_RATE_COMBINER -{ - D3D12_SHADING_RATE_COMBINER_PASSTHROUGH = 0, - D3D12_SHADING_RATE_COMBINER_OVERRIDE = 1, - D3D12_SHADING_RATE_COMBINER_MIN = 2, - D3D12_SHADING_RATE_COMBINER_MAX = 3, - D3D12_SHADING_RATE_COMBINER_SUM = 4, -} D3D12_SHADING_RATE_COMBINER; - -[uuid(55050859-4024-474c-87f5-6472eaee44ea), object, local, pointer_default(unique)] -interface ID3D12GraphicsCommandList5 : ID3D12GraphicsCommandList4 -{ - void RSSetShadingRate( - [annotation("_In_")] D3D12_SHADING_RATE baseShadingRate, - [annotation("_In_reads_opt_(D3D12_RS_SET_SHADING_RATE_COMBINER_COUNT)")] const D3D12_SHADING_RATE_COMBINER* combiners); - - void RSSetShadingRateImage( - [annotation("_In_opt_")] ID3D12Resource* shadingRateImage); -} - -typedef struct D3D12_DISPATCH_MESH_ARGUMENTS -{ - UINT ThreadGroupCountX; - UINT ThreadGroupCountY; - UINT ThreadGroupCountZ; -} D3D12_DISPATCH_MESH_ARGUMENTS; - -[uuid(c3827890-e548-4cfa-96cf-5689a9370f80), object, local, pointer_default(unique)] -interface ID3D12GraphicsCommandList6 : ID3D12GraphicsCommandList5 -{ - void DispatchMesh( - [annotation("_In_")] UINT ThreadGroupCountX, - [annotation("_In_")] UINT ThreadGroupCountY, - [annotation("_In_")] UINT ThreadGroupCountZ - ); -} - -[uuid(dd171223-8b61-4769-90e3-160ccde4e2c1), object, local, pointer_default(unique)] -interface ID3D12GraphicsCommandList7 : ID3D12GraphicsCommandList6 -{ - void Barrier( - UINT32 NumBarrierGroups, - [annotation("_In_reads_(NumBarrierGroups)")] const D3D12_BARRIER_GROUP *pBarrierGroups - ); -}; - -[uuid(ee936ef9-599d-4d28-938e-23c4ad05ce51), object, local, pointer_default(unique)] -interface ID3D12GraphicsCommandList8 : ID3D12GraphicsCommandList7 -{ - void OMSetFrontAndBackStencilRef( - [annotation("_In_")] UINT FrontStencilRef, - [annotation("_In_")] UINT BackStencilRef - ); -}; - -[uuid(34ed2808-ffe6-4c2b-b11a-cabd2b0c59e1), object, local, pointer_default(unique)] -interface ID3D12GraphicsCommandList9 : ID3D12GraphicsCommandList8 -{ - void RSSetDepthBias( - [annotation("_In_")] FLOAT DepthBias, - [annotation("_In_")] FLOAT DepthBiasClamp, - [annotation("_In_")] FLOAT SlopeScaledDepthBias - ); - - void IASetIndexBufferStripCutValue( - [annotation("_In_")] D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue - ); -}; - -[uuid(7013c015-d161-4b63-a08c-238552dd8acc), object, local, pointer_default(unique)] -interface ID3D12GraphicsCommandList10 : ID3D12GraphicsCommandList9 -{ - void SetProgram([annotation("_In_")] const D3D12_SET_PROGRAM_DESC* pDesc); - void DispatchGraph([annotation("_In_")] const D3D12_DISPATCH_GRAPH_DESC* pDesc); -}; - - -[uuid(f343d1a0-afe3-439f-b13d-cd87a43b70ca), object, local, pointer_default(unique)] -interface ID3D12DSRDeviceFactory : IUnknown -{ - HRESULT CreateDSRDevice( - [in] ID3D12Device *pD3D12Device, - [in] UINT NodeMask, - [in] REFIID riid, // Expected IDSRDevice - [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppvDSRDevice); -} - -[uuid(597985ab-9b75-4dbb-be23-0761195bebee), object, local, pointer_default(unique)] -interface ID3D12GBVDiagnostics - : IUnknown -{ - HRESULT GetGBVEntireSubresourceStatesData( [annotation("_In_")] ID3D12Resource* pResource, [annotation("_Out_writes_bytes_(DataSize)")] int *pData, UINT DataSize ); - HRESULT GetGBVSubresourceState( [annotation("_In_")] ID3D12Resource* pResource, UINT Subresource, [annotation("_Out_")] int *pData ); - HRESULT GetGBVResourceUniformState( [annotation("_In_")] ID3D12Resource* pResource, [annotation("_Out_")] int *pData ); - HRESULT GetGBVResourceInfo( [annotation("_In_")] ID3D12Resource* pResource, - [annotation("_In_opt_")] D3D12_RESOURCE_DESC* pResourceDesc, - [annotation("_In_opt_")] UINT32* pResourceHash, - [annotation("_In_opt_")] UINT32* pSubresourceStatesByteOffset ); - - void GBVReserved0(); - - void GBVReserved1(); -} - -//---------------------------------------------------------------------------------------------------------- -// Old types which are still supported by the runtime for app-compat - -cpp_quote("#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) */") -#pragma endregion - -cpp_quote( "DEFINE_GUID(IID_ID3D12Object,0xc4fec28f,0x7966,0x4e95,0x9f,0x94,0xf4,0x31,0xcb,0x56,0xc3,0xb8);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12DeviceChild,0x905db94b,0xa00c,0x4140,0x9d,0xf5,0x2b,0x64,0xca,0x9e,0xa3,0x57);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12RootSignature,0xc54a6b66,0x72df,0x4ee8,0x8b,0xe5,0xa9,0x46,0xa1,0x42,0x92,0x14);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12RootSignatureDeserializer,0x34AB647B,0x3CC8,0x46AC,0x84,0x1B,0xC0,0x96,0x56,0x45,0xC0,0x46);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12VersionedRootSignatureDeserializer,0x7F91CE67,0x090C,0x4BB7,0xB7,0x8E,0xED,0x8F,0xF2,0xE3,0x1D,0xA0);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12Pageable,0x63ee58fb,0x1268,0x4835,0x86,0xda,0xf0,0x08,0xce,0x62,0xf0,0xd6);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12Heap,0x6b3b2502,0x6e51,0x45b3,0x90,0xee,0x98,0x84,0x26,0x5e,0x8d,0xf3);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12Resource,0x696442be,0xa72e,0x4059,0xbc,0x79,0x5b,0x5c,0x98,0x04,0x0f,0xad);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12CommandAllocator,0x6102dee4,0xaf59,0x4b09,0xb9,0x99,0xb4,0x4d,0x73,0xf0,0x9b,0x24);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12Fence,0x0a753dcf,0xc4d8,0x4b91,0xad,0xf6,0xbe,0x5a,0x60,0xd9,0x5a,0x76);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12Fence1,0x433685fe,0xe22b,0x4ca0,0xa8,0xdb,0xb5,0xb4,0xf4,0xdd,0x0e,0x4a);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12PipelineState,0x765a30f3,0xf624,0x4c6f,0xa8,0x28,0xac,0xe9,0x48,0x62,0x24,0x45);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12DescriptorHeap,0x8efb471d,0x616c,0x4f49,0x90,0xf7,0x12,0x7b,0xb7,0x63,0xfa,0x51);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12QueryHeap,0x0d9658ae,0xed45,0x469e,0xa6,0x1d,0x97,0x0e,0xc5,0x83,0xca,0xb4);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12CommandSignature,0xc36a797c,0xec80,0x4f0a,0x89,0x85,0xa7,0xb2,0x47,0x50,0x82,0xd1);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12CommandList,0x7116d91c,0xe7e4,0x47ce,0xb8,0xc6,0xec,0x81,0x68,0xf4,0x37,0xe5);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12GraphicsCommandList,0x5b160d0f,0xac1b,0x4185,0x8b,0xa8,0xb3,0xae,0x42,0xa5,0xa4,0x55);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12GraphicsCommandList1,0x553103fb,0x1fe7,0x4557,0xbb,0x38,0x94,0x6d,0x7d,0x0e,0x7c,0xa7);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12GraphicsCommandList2,0x38C3E585,0xFF17,0x412C,0x91,0x50,0x4F,0xC6,0xF9,0xD7,0x2A,0x28);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12CommandQueue,0x0ec870a6,0x5d7e,0x4c22,0x8c,0xfc,0x5b,0xaa,0xe0,0x76,0x16,0xed);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12Device,0x189819f1,0x1db6,0x4b57,0xbe,0x54,0x18,0x21,0x33,0x9b,0x85,0xf7);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12PipelineLibrary,0xc64226a8,0x9201,0x46af,0xb4,0xcc,0x53,0xfb,0x9f,0xf7,0x41,0x4f);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12PipelineLibrary1,0x80eabf42,0x2568,0x4e5e,0xbd,0x82,0xc3,0x7f,0x86,0x96,0x1d,0xc3);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12Device1,0x77acce80,0x638e,0x4e65,0x88,0x95,0xc1,0xf2,0x33,0x86,0x86,0x3e);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12Device2,0x30baa41e,0xb15b,0x475c,0xa0,0xbb,0x1a,0xf5,0xc5,0xb6,0x43,0x28);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12Device3,0x81dadc15,0x2bad,0x4392,0x93,0xc5,0x10,0x13,0x45,0xc4,0xaa,0x98);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12ProtectedSession,0xA1533D18,0x0AC1,0x4084,0x85,0xB9,0x89,0xA9,0x61,0x16,0x80,0x6B);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12ProtectedResourceSession,0x6CD696F4,0xF289,0x40CC,0x80,0x91,0x5A,0x6C,0x0A,0x09,0x9C,0x3D);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12Device4,0xe865df17,0xa9ee,0x46f9,0xa4,0x63,0x30,0x98,0x31,0x5a,0xa2,0xe5);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12LifetimeOwner,0xe667af9f,0xcd56,0x4f46,0x83,0xce,0x03,0x2e,0x59,0x5d,0x70,0xa8);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12SwapChainAssistant,0xf1df64b6,0x57fd,0x49cd,0x88,0x07,0xc0,0xeb,0x88,0xb4,0x5c,0x8f);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12LifetimeTracker,0x3fd03d36,0x4eb1,0x424a,0xa5,0x82,0x49,0x4e,0xcb,0x8b,0xa8,0x13);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12StateObject,0x47016943,0xfca8,0x4594,0x93,0xea,0xaf,0x25,0x8b,0x55,0x34,0x6d);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12StateObjectProperties,0xde5fa827,0x9bf9,0x4f26,0x89,0xff,0xd7,0xf5,0x6f,0xde,0x38,0x60);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12StateObjectProperties1,0x460caac7,0x1d24,0x446a,0xa1,0x84,0xca,0x67,0xdb,0x49,0x41,0x38);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12WorkGraphProperties,0x065acf71,0xf863,0x4b89,0x82,0xf4,0x02,0xe4,0xd5,0x88,0x67,0x57);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12Device5,0x8b4f173b,0x2fea,0x4b80,0x8f,0x58,0x43,0x07,0x19,0x1a,0xb9,0x5d);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12DeviceRemovedExtendedDataSettings,0x82BC481C,0x6B9B,0x4030,0xAE,0xDB,0x7E,0xE3,0xD1,0xDF,0x1E,0x63);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12DeviceRemovedExtendedDataSettings1,0xDBD5AE51,0x3317,0x4F0A,0xAD,0xF9,0x1D,0x7C,0xED,0xCA,0xAE,0x0B);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12DeviceRemovedExtendedDataSettings2,0x61552388,0x01ab,0x4008,0xa4,0x36,0x83,0xdb,0x18,0x95,0x66,0xea);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12DeviceRemovedExtendedData,0x98931D33,0x5AE8,0x4791,0xAA,0x3C,0x1A,0x73,0xA2,0x93,0x4E,0x71);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12DeviceRemovedExtendedData1,0x9727A022,0xCF1D,0x4DDA,0x9E,0xBA,0xEF,0xFA,0x65,0x3F,0xC5,0x06);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12DeviceRemovedExtendedData2,0x67FC5816,0xE4CA,0x4915,0xBF,0x18,0x42,0x54,0x12,0x72,0xDA,0x54);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12Device6,0xc70b221b,0x40e4,0x4a17,0x89,0xaf,0x02,0x5a,0x07,0x27,0xa6,0xdc);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12ProtectedResourceSession1,0xD6F12DD6,0x76FB,0x406E,0x89,0x61,0x42,0x96,0xEE,0xFC,0x04,0x09);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12Device7,0x5c014b53,0x68a1,0x4b9b,0x8b,0xd1,0xdd,0x60,0x46,0xb9,0x35,0x8b);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12Device8,0x9218E6BB,0xF944,0x4F7E,0xA7,0x5C,0xB1,0xB2,0xC7,0xB7,0x01,0xF3);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12Resource1,0x9D5E227A,0x4430,0x4161,0x88,0xB3,0x3E,0xCA,0x6B,0xB1,0x6E,0x19);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12Resource2,0xBE36EC3B,0xEA85,0x4AEB,0xA4,0x5A,0xE9,0xD7,0x64,0x04,0xA4,0x95);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12Heap1,0x572F7389,0x2168,0x49E3,0x96,0x93,0xD6,0xDF,0x58,0x71,0xBF,0x6D);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12GraphicsCommandList3,0x6FDA83A7,0xB84C,0x4E38,0x9A,0xC8,0xC7,0xBD,0x22,0x01,0x6B,0x3D);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12MetaCommand,0xDBB84C27,0x36CE,0x4FC9,0xB8,0x01,0xF0,0x48,0xC4,0x6A,0xC5,0x70);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12GraphicsCommandList4,0x8754318e,0xd3a9,0x4541,0x98,0xcf,0x64,0x5b,0x50,0xdc,0x48,0x74);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12ShaderCacheSession,0x28e2495d,0x0f64,0x4ae4,0xa6,0xec,0x12,0x92,0x55,0xdc,0x49,0xa8);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12Device9,0x4c80e962,0xf032,0x4f60,0xbc,0x9e,0xeb,0xc2,0xcf,0xa1,0xd8,0x3c);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12Device10,0x517f8718,0xaa66,0x49f9,0xb0,0x2b,0xa7,0xab,0x89,0xc0,0x60,0x31);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12Device11,0x5405c344,0xd457,0x444e,0xb4,0xdd,0x23,0x66,0xe4,0x5a,0xee,0x39);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12Device12,0x5af5c532,0x4c91,0x4cd0,0xb5,0x41,0x15,0xa4,0x05,0x39,0x5f,0xc5);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12Device13,0x14eecffc,0x4df8,0x40f7,0xa1,0x18,0x5c,0x81,0x6f,0x45,0x69,0x5e);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12Device14,0x5f6e592d,0xd895,0x44c2,0x8e,0x4a,0x88,0xad,0x49,0x26,0xd3,0x23);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12VirtualizationGuestDevice,0xbc66d368,0x7373,0x4943,0x87,0x57,0xfc,0x87,0xdc,0x79,0xe4,0x76);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12Tools,0x7071e1f0,0xe84b,0x4b33,0x97,0x4f,0x12,0xfa,0x49,0xde,0x65,0xc5);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12Tools1,0xe4fbc019,0xdd3c,0x43e1,0x8f,0x32,0x7f,0x64,0x95,0x75,0xf0,0xa0);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12PageableTools,0x8f1359db,0xd8d1,0x42f9,0xb5,0xcf,0x79,0xf4,0xcb,0xad,0x0d,0x3d);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12DeviceTools,0x2ea68e9c,0x19c3,0x4e47,0xa1,0x09,0x6c,0xda,0xdf,0xf0,0xac,0xa9);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12SDKConfiguration,0xe9eb5314,0x33aa,0x42b2,0xa7,0x18,0xd7,0x7f,0x58,0xb1,0xf1,0xc7);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12SDKConfiguration1,0x8aaf9303,0xad25,0x48b9,0x9a,0x57,0xd9,0xc3,0x7e,0x00,0x9d,0x9f);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12DeviceFactory,0x61f307d3,0xd34e,0x4e7c,0x83,0x74,0x3b,0xa4,0xde,0x23,0xcc,0xcb);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12DeviceConfiguration,0x78dbf87b,0xf766,0x422b,0xa6,0x1c,0xc8,0xc4,0x46,0xbd,0xb9,0xad);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12DeviceConfiguration1,0xed342442,0x6343,0x4e16,0xbb,0x82,0xa3,0xa5,0x77,0x87,0x4e,0x56);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12GraphicsCommandList5,0x55050859,0x4024,0x474c,0x87,0xf5,0x64,0x72,0xea,0xee,0x44,0xea);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12GraphicsCommandList6,0xc3827890,0xe548,0x4cfa,0x96,0xcf,0x56,0x89,0xa9,0x37,0x0f,0x80);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12GraphicsCommandList7,0xdd171223,0x8b61,0x4769,0x90,0xe3,0x16,0x0c,0xcd,0xe4,0xe2,0xc1);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12GraphicsCommandList8,0xee936ef9,0x599d,0x4d28,0x93,0x8e,0x23,0xc4,0xad,0x05,0xce,0x51);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12GraphicsCommandList9,0x34ed2808,0xffe6,0x4c2b,0xb1,0x1a,0xca,0xbd,0x2b,0x0c,0x59,0xe1);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12GraphicsCommandList10,0x7013c015,0xd161,0x4b63,0xa0,0x8c,0x23,0x85,0x52,0xdd,0x8a,0xcc);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12DSRDeviceFactory,0xf343d1a0,0xafe3,0x439f,0xb1,0x3d,0xcd,0x87,0xa4,0x3b,0x70,0xca);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12GBVDiagnostics,0x597985ab,0x9b75,0x4dbb,0xbe,0x23,0x07,0x61,0x19,0x5b,0xeb,0xee);" ) diff --git a/Juliet/src/Graphics/D3D12/AgilitySDK/d3d12compatibility.h b/Juliet/src/Graphics/D3D12/AgilitySDK/d3d12compatibility.h deleted file mode 100644 index c9e84c8..0000000 --- a/Juliet/src/Graphics/D3D12/AgilitySDK/d3d12compatibility.h +++ /dev/null @@ -1,809 +0,0 @@ -/*------------------------------------------------------------------------------------- - * - * Copyright (c) Microsoft Corporation - * Licensed under the MIT license - * - *-------------------------------------------------------------------------------------*/ - -/* this ALWAYS GENERATED file contains the definitions for the interfaces */ - - /* File created by MIDL compiler version 8.01.0628 */ - -/* verify that the version is high enough to compile this file*/ -#ifndef __REQUIRED_RPCNDR_H_VERSION__ -#define __REQUIRED_RPCNDR_H_VERSION__ 500 -#endif - -/* verify that the version is high enough to compile this file*/ -#ifndef __REQUIRED_RPCSAL_H_VERSION__ -#define __REQUIRED_RPCSAL_H_VERSION__ 100 -#endif - -#include "rpc.h" -#include "rpcndr.h" - -#ifndef __RPCNDR_H_VERSION__ -#error this stub requires an updated version of -#endif /* __RPCNDR_H_VERSION__ */ - -#ifndef COM_NO_WINDOWS_H -#include "windows.h" -#include "ole2.h" -#endif /*COM_NO_WINDOWS_H*/ - -#ifndef __d3d12compatibility_h__ -#define __d3d12compatibility_h__ - -#if defined(_MSC_VER) && (_MSC_VER >= 1020) -#pragma once -#endif - -#ifndef DECLSPEC_XFGVIRT -#if defined(_CONTROL_FLOW_GUARD_XFG) -#define DECLSPEC_XFGVIRT(base, func) __declspec(xfg_virtual(base, func)) -#else -#define DECLSPEC_XFGVIRT(base, func) -#endif -#endif - -/* Forward Declarations */ - -#ifndef __ID3D12CompatibilityDevice_FWD_DEFINED__ -#define __ID3D12CompatibilityDevice_FWD_DEFINED__ -typedef interface ID3D12CompatibilityDevice ID3D12CompatibilityDevice; - -#endif /* __ID3D12CompatibilityDevice_FWD_DEFINED__ */ - -#ifndef __D3D11On12CreatorID_FWD_DEFINED__ -#define __D3D11On12CreatorID_FWD_DEFINED__ -typedef interface D3D11On12CreatorID D3D11On12CreatorID; - -#endif /* __D3D11On12CreatorID_FWD_DEFINED__ */ - -#ifndef __D3D9On12CreatorID_FWD_DEFINED__ -#define __D3D9On12CreatorID_FWD_DEFINED__ -typedef interface D3D9On12CreatorID D3D9On12CreatorID; - -#endif /* __D3D9On12CreatorID_FWD_DEFINED__ */ - -#ifndef __OpenGLOn12CreatorID_FWD_DEFINED__ -#define __OpenGLOn12CreatorID_FWD_DEFINED__ -typedef interface OpenGLOn12CreatorID OpenGLOn12CreatorID; - -#endif /* __OpenGLOn12CreatorID_FWD_DEFINED__ */ - -#ifndef __OpenCLOn12CreatorID_FWD_DEFINED__ -#define __OpenCLOn12CreatorID_FWD_DEFINED__ -typedef interface OpenCLOn12CreatorID OpenCLOn12CreatorID; - -#endif /* __OpenCLOn12CreatorID_FWD_DEFINED__ */ - -#ifndef __VulkanOn12CreatorID_FWD_DEFINED__ -#define __VulkanOn12CreatorID_FWD_DEFINED__ -typedef interface VulkanOn12CreatorID VulkanOn12CreatorID; - -#endif /* __VulkanOn12CreatorID_FWD_DEFINED__ */ - -#ifndef __DirectMLTensorFlowCreatorID_FWD_DEFINED__ -#define __DirectMLTensorFlowCreatorID_FWD_DEFINED__ -typedef interface DirectMLTensorFlowCreatorID DirectMLTensorFlowCreatorID; - -#endif /* __DirectMLTensorFlowCreatorID_FWD_DEFINED__ */ - -#ifndef __DirectMLPyTorchCreatorID_FWD_DEFINED__ -#define __DirectMLPyTorchCreatorID_FWD_DEFINED__ -typedef interface DirectMLPyTorchCreatorID DirectMLPyTorchCreatorID; - -#endif /* __DirectMLPyTorchCreatorID_FWD_DEFINED__ */ - -#ifndef __DirectMLWebNNCreatorID_FWD_DEFINED__ -#define __DirectMLWebNNCreatorID_FWD_DEFINED__ -typedef interface DirectMLWebNNCreatorID DirectMLWebNNCreatorID; - -#endif /* __DirectMLWebNNCreatorID_FWD_DEFINED__ */ - -/* header files for imported files */ -#include "oaidl.h" -#include "ocidl.h" -#include "d3d11on12.h" - -#ifdef __cplusplus -extern "C"{ -#endif - -/* interface __MIDL_itf_d3d12compatibility_0000_0000 */ -/* [local] */ - -#include -#pragma region Desktop Family -#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) -typedef -enum D3D12_COMPATIBILITY_SHARED_FLAGS - { - D3D12_COMPATIBILITY_SHARED_FLAG_NONE = 0, - D3D12_COMPATIBILITY_SHARED_FLAG_NON_NT_HANDLE = 0x1, - D3D12_COMPATIBILITY_SHARED_FLAG_KEYED_MUTEX = 0x2, - D3D12_COMPATIBILITY_SHARED_FLAG_9_ON_12 = 0x4 - } D3D12_COMPATIBILITY_SHARED_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_COMPATIBILITY_SHARED_FLAGS ) -typedef -enum D3D12_REFLECT_SHARED_PROPERTY - { - D3D12_REFLECT_SHARED_PROPERTY_D3D11_RESOURCE_FLAGS = 0, - D3D12_REFELCT_SHARED_PROPERTY_COMPATIBILITY_SHARED_FLAGS = ( D3D12_REFLECT_SHARED_PROPERTY_D3D11_RESOURCE_FLAGS + 1 ) , - D3D12_REFLECT_SHARED_PROPERTY_NON_NT_SHARED_HANDLE = ( D3D12_REFELCT_SHARED_PROPERTY_COMPATIBILITY_SHARED_FLAGS + 1 ) - } D3D12_REFLECT_SHARED_PROPERTY; - -extern RPC_IF_HANDLE __MIDL_itf_d3d12compatibility_0000_0000_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12compatibility_0000_0000_v0_0_s_ifspec; - -#ifndef __ID3D12CompatibilityDevice_INTERFACE_DEFINED__ -#define __ID3D12CompatibilityDevice_INTERFACE_DEFINED__ - -/* interface ID3D12CompatibilityDevice */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12CompatibilityDevice; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("8f1c0e3c-fae3-4a82-b098-bfe1708207ff") - ID3D12CompatibilityDevice : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE CreateSharedResource( - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialResourceState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ const D3D11_RESOURCE_FLAGS *pFlags11, - D3D12_COMPATIBILITY_SHARED_FLAGS CompatibilityFlags, - _In_opt_ ID3D12LifetimeTracker *pLifetimeTracker, - _In_opt_ ID3D12SwapChainAssistant *pOwningSwapchain, - REFIID riid, - _COM_Outptr_opt_ void **ppResource) = 0; - - virtual HRESULT STDMETHODCALLTYPE CreateSharedHeap( - _In_ const D3D12_HEAP_DESC *pHeapDesc, - D3D12_COMPATIBILITY_SHARED_FLAGS CompatibilityFlags, - REFIID riid, - _COM_Outptr_opt_ void **ppHeap) = 0; - - virtual HRESULT STDMETHODCALLTYPE ReflectSharedProperties( - _In_ ID3D12Object *pHeapOrResource, - D3D12_REFLECT_SHARED_PROPERTY ReflectType, - _Out_writes_bytes_(DataSize) void *pData, - UINT DataSize) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12CompatibilityDeviceVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12CompatibilityDevice * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12CompatibilityDevice * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12CompatibilityDevice * This); - - DECLSPEC_XFGVIRT(ID3D12CompatibilityDevice, CreateSharedResource) - HRESULT ( STDMETHODCALLTYPE *CreateSharedResource )( - ID3D12CompatibilityDevice * This, - _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - _In_ const D3D12_RESOURCE_DESC *pDesc, - D3D12_RESOURCE_STATES InitialResourceState, - _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, - _In_opt_ const D3D11_RESOURCE_FLAGS *pFlags11, - D3D12_COMPATIBILITY_SHARED_FLAGS CompatibilityFlags, - _In_opt_ ID3D12LifetimeTracker *pLifetimeTracker, - _In_opt_ ID3D12SwapChainAssistant *pOwningSwapchain, - REFIID riid, - _COM_Outptr_opt_ void **ppResource); - - DECLSPEC_XFGVIRT(ID3D12CompatibilityDevice, CreateSharedHeap) - HRESULT ( STDMETHODCALLTYPE *CreateSharedHeap )( - ID3D12CompatibilityDevice * This, - _In_ const D3D12_HEAP_DESC *pHeapDesc, - D3D12_COMPATIBILITY_SHARED_FLAGS CompatibilityFlags, - REFIID riid, - _COM_Outptr_opt_ void **ppHeap); - - DECLSPEC_XFGVIRT(ID3D12CompatibilityDevice, ReflectSharedProperties) - HRESULT ( STDMETHODCALLTYPE *ReflectSharedProperties )( - ID3D12CompatibilityDevice * This, - _In_ ID3D12Object *pHeapOrResource, - D3D12_REFLECT_SHARED_PROPERTY ReflectType, - _Out_writes_bytes_(DataSize) void *pData, - UINT DataSize); - - END_INTERFACE - } ID3D12CompatibilityDeviceVtbl; - - interface ID3D12CompatibilityDevice - { - CONST_VTBL struct ID3D12CompatibilityDeviceVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12CompatibilityDevice_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12CompatibilityDevice_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12CompatibilityDevice_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12CompatibilityDevice_CreateSharedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pFlags11,CompatibilityFlags,pLifetimeTracker,pOwningSwapchain,riid,ppResource) \ - ( (This)->lpVtbl -> CreateSharedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pFlags11,CompatibilityFlags,pLifetimeTracker,pOwningSwapchain,riid,ppResource) ) - -#define ID3D12CompatibilityDevice_CreateSharedHeap(This,pHeapDesc,CompatibilityFlags,riid,ppHeap) \ - ( (This)->lpVtbl -> CreateSharedHeap(This,pHeapDesc,CompatibilityFlags,riid,ppHeap) ) - -#define ID3D12CompatibilityDevice_ReflectSharedProperties(This,pHeapOrResource,ReflectType,pData,DataSize) \ - ( (This)->lpVtbl -> ReflectSharedProperties(This,pHeapOrResource,ReflectType,pData,DataSize) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12CompatibilityDevice_INTERFACE_DEFINED__ */ - -#ifndef __D3D11On12CreatorID_INTERFACE_DEFINED__ -#define __D3D11On12CreatorID_INTERFACE_DEFINED__ - -/* interface D3D11On12CreatorID */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_D3D11On12CreatorID; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("edbf5678-2960-4e81-8429-99d4b2630c4e") - D3D11On12CreatorID : public IUnknown - { - public: - }; - - -#else /* C style interface */ - - typedef struct D3D11On12CreatorIDVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - D3D11On12CreatorID * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - D3D11On12CreatorID * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - D3D11On12CreatorID * This); - - END_INTERFACE - } D3D11On12CreatorIDVtbl; - - interface D3D11On12CreatorID - { - CONST_VTBL struct D3D11On12CreatorIDVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define D3D11On12CreatorID_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define D3D11On12CreatorID_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define D3D11On12CreatorID_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __D3D11On12CreatorID_INTERFACE_DEFINED__ */ - -#ifndef __D3D9On12CreatorID_INTERFACE_DEFINED__ -#define __D3D9On12CreatorID_INTERFACE_DEFINED__ - -/* interface D3D9On12CreatorID */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_D3D9On12CreatorID; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("fffcbb7f-15d3-42a2-841e-9d8d32f37ddd") - D3D9On12CreatorID : public IUnknown - { - public: - }; - - -#else /* C style interface */ - - typedef struct D3D9On12CreatorIDVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - D3D9On12CreatorID * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - D3D9On12CreatorID * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - D3D9On12CreatorID * This); - - END_INTERFACE - } D3D9On12CreatorIDVtbl; - - interface D3D9On12CreatorID - { - CONST_VTBL struct D3D9On12CreatorIDVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define D3D9On12CreatorID_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define D3D9On12CreatorID_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define D3D9On12CreatorID_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __D3D9On12CreatorID_INTERFACE_DEFINED__ */ - -#ifndef __OpenGLOn12CreatorID_INTERFACE_DEFINED__ -#define __OpenGLOn12CreatorID_INTERFACE_DEFINED__ - -/* interface OpenGLOn12CreatorID */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_OpenGLOn12CreatorID; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("6bb3cd34-0d19-45ab-97ed-d720ba3dfc80") - OpenGLOn12CreatorID : public IUnknown - { - public: - }; - - -#else /* C style interface */ - - typedef struct OpenGLOn12CreatorIDVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - OpenGLOn12CreatorID * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - OpenGLOn12CreatorID * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - OpenGLOn12CreatorID * This); - - END_INTERFACE - } OpenGLOn12CreatorIDVtbl; - - interface OpenGLOn12CreatorID - { - CONST_VTBL struct OpenGLOn12CreatorIDVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define OpenGLOn12CreatorID_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define OpenGLOn12CreatorID_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define OpenGLOn12CreatorID_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __OpenGLOn12CreatorID_INTERFACE_DEFINED__ */ - -#ifndef __OpenCLOn12CreatorID_INTERFACE_DEFINED__ -#define __OpenCLOn12CreatorID_INTERFACE_DEFINED__ - -/* interface OpenCLOn12CreatorID */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_OpenCLOn12CreatorID; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("3f76bb74-91b5-4a88-b126-20ca0331cd60") - OpenCLOn12CreatorID : public IUnknown - { - public: - }; - - -#else /* C style interface */ - - typedef struct OpenCLOn12CreatorIDVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - OpenCLOn12CreatorID * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - OpenCLOn12CreatorID * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - OpenCLOn12CreatorID * This); - - END_INTERFACE - } OpenCLOn12CreatorIDVtbl; - - interface OpenCLOn12CreatorID - { - CONST_VTBL struct OpenCLOn12CreatorIDVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define OpenCLOn12CreatorID_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define OpenCLOn12CreatorID_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define OpenCLOn12CreatorID_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __OpenCLOn12CreatorID_INTERFACE_DEFINED__ */ - -#ifndef __VulkanOn12CreatorID_INTERFACE_DEFINED__ -#define __VulkanOn12CreatorID_INTERFACE_DEFINED__ - -/* interface VulkanOn12CreatorID */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_VulkanOn12CreatorID; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("bc806e01-3052-406c-a3e8-9fc07f048f98") - VulkanOn12CreatorID : public IUnknown - { - public: - }; - - -#else /* C style interface */ - - typedef struct VulkanOn12CreatorIDVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - VulkanOn12CreatorID * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - VulkanOn12CreatorID * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - VulkanOn12CreatorID * This); - - END_INTERFACE - } VulkanOn12CreatorIDVtbl; - - interface VulkanOn12CreatorID - { - CONST_VTBL struct VulkanOn12CreatorIDVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define VulkanOn12CreatorID_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define VulkanOn12CreatorID_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define VulkanOn12CreatorID_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __VulkanOn12CreatorID_INTERFACE_DEFINED__ */ - -#ifndef __DirectMLTensorFlowCreatorID_INTERFACE_DEFINED__ -#define __DirectMLTensorFlowCreatorID_INTERFACE_DEFINED__ - -/* interface DirectMLTensorFlowCreatorID */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_DirectMLTensorFlowCreatorID; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("cb7490ac-8a0f-44ec-9b7b-6f4cafe8e9ab") - DirectMLTensorFlowCreatorID : public IUnknown - { - public: - }; - - -#else /* C style interface */ - - typedef struct DirectMLTensorFlowCreatorIDVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - DirectMLTensorFlowCreatorID * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - DirectMLTensorFlowCreatorID * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - DirectMLTensorFlowCreatorID * This); - - END_INTERFACE - } DirectMLTensorFlowCreatorIDVtbl; - - interface DirectMLTensorFlowCreatorID - { - CONST_VTBL struct DirectMLTensorFlowCreatorIDVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define DirectMLTensorFlowCreatorID_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define DirectMLTensorFlowCreatorID_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define DirectMLTensorFlowCreatorID_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __DirectMLTensorFlowCreatorID_INTERFACE_DEFINED__ */ - -#ifndef __DirectMLPyTorchCreatorID_INTERFACE_DEFINED__ -#define __DirectMLPyTorchCreatorID_INTERFACE_DEFINED__ - -/* interface DirectMLPyTorchCreatorID */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_DirectMLPyTorchCreatorID; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("af029192-fba1-4b05-9116-235e06560354") - DirectMLPyTorchCreatorID : public IUnknown - { - public: - }; - - -#else /* C style interface */ - - typedef struct DirectMLPyTorchCreatorIDVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - DirectMLPyTorchCreatorID * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - DirectMLPyTorchCreatorID * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - DirectMLPyTorchCreatorID * This); - - END_INTERFACE - } DirectMLPyTorchCreatorIDVtbl; - - interface DirectMLPyTorchCreatorID - { - CONST_VTBL struct DirectMLPyTorchCreatorIDVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define DirectMLPyTorchCreatorID_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define DirectMLPyTorchCreatorID_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define DirectMLPyTorchCreatorID_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __DirectMLPyTorchCreatorID_INTERFACE_DEFINED__ */ - -#ifndef __DirectMLWebNNCreatorID_INTERFACE_DEFINED__ -#define __DirectMLWebNNCreatorID_INTERFACE_DEFINED__ - -/* interface DirectMLWebNNCreatorID */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_DirectMLWebNNCreatorID; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("fdf01a76-1e11-450f-902b-74f04ea08094") - DirectMLWebNNCreatorID : public IUnknown - { - public: - }; - - -#else /* C style interface */ - - typedef struct DirectMLWebNNCreatorIDVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - DirectMLWebNNCreatorID * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - DirectMLWebNNCreatorID * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - DirectMLWebNNCreatorID * This); - - END_INTERFACE - } DirectMLWebNNCreatorIDVtbl; - - interface DirectMLWebNNCreatorID - { - CONST_VTBL struct DirectMLWebNNCreatorIDVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define DirectMLWebNNCreatorID_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define DirectMLWebNNCreatorID_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define DirectMLWebNNCreatorID_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __DirectMLWebNNCreatorID_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12compatibility_0000_0009 */ -/* [local] */ - -#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) */ -#pragma endregion -DEFINE_GUID(IID_ID3D12CompatibilityDevice,0x8f1c0e3c,0xfae3,0x4a82,0xb0,0x98,0xbf,0xe1,0x70,0x82,0x07,0xff); -DEFINE_GUID(IID_D3D11On12CreatorID,0xedbf5678,0x2960,0x4e81,0x84,0x29,0x99,0xd4,0xb2,0x63,0x0c,0x4e); -DEFINE_GUID(IID_D3D9On12CreatorID,0xfffcbb7f,0x15d3,0x42a2,0x84,0x1e,0x9d,0x8d,0x32,0xf3,0x7d,0xdd); -DEFINE_GUID(IID_OpenGLOn12CreatorID,0x6bb3cd34,0x0d19,0x45ab,0x97,0xed,0xd7,0x20,0xba,0x3d,0xfc,0x80); -DEFINE_GUID(IID_OpenCLOn12CreatorID,0x3f76bb74,0x91b5,0x4a88,0xb1,0x26,0x20,0xca,0x03,0x31,0xcd,0x60); -DEFINE_GUID(IID_VulkanOn12CreatorID,0xbc806e01,0x3052,0x406c,0xa3,0xe8,0x9f,0xc0,0x7f,0x04,0x8f,0x98); -DEFINE_GUID(IID_DirectMLTensorFlowCreatorID,0xcb7490ac,0x8a0f,0x44ec,0x9b,0x7b,0x6f,0x4c,0xaf,0xe8,0xe9,0xab); -DEFINE_GUID(IID_DirectMLPyTorchCreatorID,0xaf029192,0xfba1,0x4b05,0x91,0x16,0x23,0x5e,0x06,0x56,0x03,0x54); -DEFINE_GUID(IID_DirectMLWebNNCreatorID,0xfdf01a76,0x1e11,0x450f,0x90,0x2b,0x74,0xf0,0x4e,0xa0,0x80,0x94); - -extern RPC_IF_HANDLE __MIDL_itf_d3d12compatibility_0000_0009_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12compatibility_0000_0009_v0_0_s_ifspec; - -/* Additional Prototypes for ALL interfaces */ - -/* end of Additional Prototypes */ - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/Juliet/src/Graphics/D3D12/AgilitySDK/d3d12compatibility.idl b/Juliet/src/Graphics/D3D12/AgilitySDK/d3d12compatibility.idl deleted file mode 100644 index 413e811..0000000 --- a/Juliet/src/Graphics/D3D12/AgilitySDK/d3d12compatibility.idl +++ /dev/null @@ -1,100 +0,0 @@ -/*------------------------------------------------------------------------------------- - * - * Copyright (c) Microsoft Corporation - * Licensed under the MIT license - * - *-------------------------------------------------------------------------------------*/ -import "oaidl.idl"; -import "ocidl.idl"; - -import "d3d11on12.idl"; - -cpp_quote("#include ") - -#pragma region Desktop Family -cpp_quote("#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES)") - -typedef enum D3D12_COMPATIBILITY_SHARED_FLAGS -{ - D3D12_COMPATIBILITY_SHARED_FLAG_NONE = 0, - D3D12_COMPATIBILITY_SHARED_FLAG_NON_NT_HANDLE = 0x1, - D3D12_COMPATIBILITY_SHARED_FLAG_KEYED_MUTEX = 0x2, - D3D12_COMPATIBILITY_SHARED_FLAG_9_ON_12 = 0x4, - -} D3D12_COMPATIBILITY_SHARED_FLAGS; -cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_COMPATIBILITY_SHARED_FLAGS )" ) - -typedef enum D3D12_REFLECT_SHARED_PROPERTY -{ - D3D12_REFLECT_SHARED_PROPERTY_D3D11_RESOURCE_FLAGS, // D3D11_RESOURCE_FLAGS - D3D12_REFELCT_SHARED_PROPERTY_COMPATIBILITY_SHARED_FLAGS, // D3D12_COMPATIBILITY_SHARED_FLAGS - D3D12_REFLECT_SHARED_PROPERTY_NON_NT_SHARED_HANDLE, // HANDLE -} D3D12_REFLECT_SHARED_PROPERTY; - -[ uuid( 8f1c0e3c-fae3-4a82-b098-bfe1708207ff ), object, local, pointer_default( unique ) ] -interface ID3D12CompatibilityDevice - : IUnknown -{ - HRESULT CreateSharedResource( - [annotation("_In_")] const D3D12_HEAP_PROPERTIES* pHeapProperties, - D3D12_HEAP_FLAGS HeapFlags, - [annotation("_In_")] const D3D12_RESOURCE_DESC* pDesc, - D3D12_RESOURCE_STATES InitialResourceState, - [annotation("_In_opt_")] const D3D12_CLEAR_VALUE* pOptimizedClearValue, - [annotation("_In_opt_")] const D3D11_RESOURCE_FLAGS* pFlags11, - D3D12_COMPATIBILITY_SHARED_FLAGS CompatibilityFlags, - [annotation("_In_opt_")] ID3D12LifetimeTracker* pLifetimeTracker, - [annotation("_In_opt_")] ID3D12SwapChainAssistant* pOwningSwapchain, - REFIID riid, - [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppResource); - - HRESULT CreateSharedHeap( - [annotation("_In_")] const D3D12_HEAP_DESC* pHeapDesc, - D3D12_COMPATIBILITY_SHARED_FLAGS CompatibilityFlags, - REFIID riid, - [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppHeap); - - HRESULT ReflectSharedProperties( - [annotation("_In_")] ID3D12Object* pHeapOrResource, - D3D12_REFLECT_SHARED_PROPERTY ReflectType, - [annotation("_Out_writes_bytes_(DataSize)")] void* pData, - UINT DataSize); -} - -[uuid(edbf5678-2960-4e81-8429-99d4b2630c4e), object, local, pointer_default(unique)] -interface D3D11On12CreatorID : IUnknown { }; - -[uuid(fffcbb7f-15d3-42a2-841e-9d8d32f37ddd), object, local, pointer_default(unique)] -interface D3D9On12CreatorID : IUnknown { }; - -[uuid(6bb3cd34-0d19-45ab-97ed-d720ba3dfc80), object, local, pointer_default(unique)] -interface OpenGLOn12CreatorID : IUnknown { }; - -[uuid(3f76bb74-91b5-4a88-b126-20ca0331cd60), object, local, pointer_default(unique)] -interface OpenCLOn12CreatorID : IUnknown { }; - -[uuid(bc806e01-3052-406c-a3e8-9fc07f048f98), object, local, pointer_default(unique)] -interface VulkanOn12CreatorID : IUnknown { }; - -[uuid(cb7490ac-8a0f-44ec-9b7b-6f4cafe8e9ab), object, local, pointer_default(unique)] -interface DirectMLTensorFlowCreatorID : IUnknown { }; - -[uuid(af029192-fba1-4b05-9116-235e06560354), object, local, pointer_default(unique)] -interface DirectMLPyTorchCreatorID : IUnknown { }; - -[uuid(fdf01a76-1e11-450f-902b-74f04ea08094), object, local, pointer_default(unique)] -interface DirectMLWebNNCreatorID : IUnknown { }; - - -cpp_quote("#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) */") -#pragma endregion - -cpp_quote( "DEFINE_GUID(IID_ID3D12CompatibilityDevice,0x8f1c0e3c,0xfae3,0x4a82,0xb0,0x98,0xbf,0xe1,0x70,0x82,0x07,0xff);" ) -cpp_quote( "DEFINE_GUID(IID_D3D11On12CreatorID,0xedbf5678,0x2960,0x4e81,0x84,0x29,0x99,0xd4,0xb2,0x63,0x0c,0x4e);" ) -cpp_quote( "DEFINE_GUID(IID_D3D9On12CreatorID,0xfffcbb7f,0x15d3,0x42a2,0x84,0x1e,0x9d,0x8d,0x32,0xf3,0x7d,0xdd);" ) -cpp_quote( "DEFINE_GUID(IID_OpenGLOn12CreatorID,0x6bb3cd34,0x0d19,0x45ab,0x97,0xed,0xd7,0x20,0xba,0x3d,0xfc,0x80);" ) -cpp_quote( "DEFINE_GUID(IID_OpenCLOn12CreatorID,0x3f76bb74,0x91b5,0x4a88,0xb1,0x26,0x20,0xca,0x03,0x31,0xcd,0x60);" ) -cpp_quote( "DEFINE_GUID(IID_VulkanOn12CreatorID,0xbc806e01,0x3052,0x406c,0xa3,0xe8,0x9f,0xc0,0x7f,0x04,0x8f,0x98);" ) -cpp_quote( "DEFINE_GUID(IID_DirectMLTensorFlowCreatorID,0xcb7490ac,0x8a0f,0x44ec,0x9b,0x7b,0x6f,0x4c,0xaf,0xe8,0xe9,0xab);" ) -cpp_quote( "DEFINE_GUID(IID_DirectMLPyTorchCreatorID,0xaf029192,0xfba1,0x4b05,0x91,0x16,0x23,0x5e,0x06,0x56,0x03,0x54);" ) -cpp_quote( "DEFINE_GUID(IID_DirectMLWebNNCreatorID,0xfdf01a76,0x1e11,0x450f,0x90,0x2b,0x74,0xf0,0x4e,0xa0,0x80,0x94);" ) diff --git a/Juliet/src/Graphics/D3D12/AgilitySDK/d3d12sdklayers.h b/Juliet/src/Graphics/D3D12/AgilitySDK/d3d12sdklayers.h deleted file mode 100644 index a194766..0000000 --- a/Juliet/src/Graphics/D3D12/AgilitySDK/d3d12sdklayers.h +++ /dev/null @@ -1,4063 +0,0 @@ -/*------------------------------------------------------------------------------------- - * - * Copyright (c) Microsoft Corporation - * Licensed under the MIT license - * - *-------------------------------------------------------------------------------------*/ - -/* this ALWAYS GENERATED file contains the definitions for the interfaces */ - - /* File created by MIDL compiler version 8.01.0628 */ - -/* verify that the version is high enough to compile this file*/ -#ifndef __REQUIRED_RPCNDR_H_VERSION__ -#define __REQUIRED_RPCNDR_H_VERSION__ 500 -#endif - -/* verify that the version is high enough to compile this file*/ -#ifndef __REQUIRED_RPCSAL_H_VERSION__ -#define __REQUIRED_RPCSAL_H_VERSION__ 100 -#endif - -#include "rpc.h" -#include "rpcndr.h" - -#ifndef __RPCNDR_H_VERSION__ -#error this stub requires an updated version of -#endif /* __RPCNDR_H_VERSION__ */ - -#ifndef COM_NO_WINDOWS_H -#include "windows.h" -#include "ole2.h" -#endif /*COM_NO_WINDOWS_H*/ - -#ifndef __d3d12sdklayers_h__ -#define __d3d12sdklayers_h__ - -#if defined(_MSC_VER) && (_MSC_VER >= 1020) -#pragma once -#endif - -#ifndef DECLSPEC_XFGVIRT -#if defined(_CONTROL_FLOW_GUARD_XFG) -#define DECLSPEC_XFGVIRT(base, func) __declspec(xfg_virtual(base, func)) -#else -#define DECLSPEC_XFGVIRT(base, func) -#endif -#endif - -/* Forward Declarations */ - -#ifndef __ID3D12Debug_FWD_DEFINED__ -#define __ID3D12Debug_FWD_DEFINED__ -typedef interface ID3D12Debug ID3D12Debug; - -#endif /* __ID3D12Debug_FWD_DEFINED__ */ - -#ifndef __ID3D12Debug1_FWD_DEFINED__ -#define __ID3D12Debug1_FWD_DEFINED__ -typedef interface ID3D12Debug1 ID3D12Debug1; - -#endif /* __ID3D12Debug1_FWD_DEFINED__ */ - -#ifndef __ID3D12Debug2_FWD_DEFINED__ -#define __ID3D12Debug2_FWD_DEFINED__ -typedef interface ID3D12Debug2 ID3D12Debug2; - -#endif /* __ID3D12Debug2_FWD_DEFINED__ */ - -#ifndef __ID3D12Debug3_FWD_DEFINED__ -#define __ID3D12Debug3_FWD_DEFINED__ -typedef interface ID3D12Debug3 ID3D12Debug3; - -#endif /* __ID3D12Debug3_FWD_DEFINED__ */ - -#ifndef __ID3D12Debug4_FWD_DEFINED__ -#define __ID3D12Debug4_FWD_DEFINED__ -typedef interface ID3D12Debug4 ID3D12Debug4; - -#endif /* __ID3D12Debug4_FWD_DEFINED__ */ - -#ifndef __ID3D12Debug5_FWD_DEFINED__ -#define __ID3D12Debug5_FWD_DEFINED__ -typedef interface ID3D12Debug5 ID3D12Debug5; - -#endif /* __ID3D12Debug5_FWD_DEFINED__ */ - -#ifndef __ID3D12Debug6_FWD_DEFINED__ -#define __ID3D12Debug6_FWD_DEFINED__ -typedef interface ID3D12Debug6 ID3D12Debug6; - -#endif /* __ID3D12Debug6_FWD_DEFINED__ */ - -#ifndef __ID3D12DebugDevice1_FWD_DEFINED__ -#define __ID3D12DebugDevice1_FWD_DEFINED__ -typedef interface ID3D12DebugDevice1 ID3D12DebugDevice1; - -#endif /* __ID3D12DebugDevice1_FWD_DEFINED__ */ - -#ifndef __ID3D12DebugDevice_FWD_DEFINED__ -#define __ID3D12DebugDevice_FWD_DEFINED__ -typedef interface ID3D12DebugDevice ID3D12DebugDevice; - -#endif /* __ID3D12DebugDevice_FWD_DEFINED__ */ - -#ifndef __ID3D12DebugDevice2_FWD_DEFINED__ -#define __ID3D12DebugDevice2_FWD_DEFINED__ -typedef interface ID3D12DebugDevice2 ID3D12DebugDevice2; - -#endif /* __ID3D12DebugDevice2_FWD_DEFINED__ */ - -#ifndef __ID3D12DebugCommandQueue_FWD_DEFINED__ -#define __ID3D12DebugCommandQueue_FWD_DEFINED__ -typedef interface ID3D12DebugCommandQueue ID3D12DebugCommandQueue; - -#endif /* __ID3D12DebugCommandQueue_FWD_DEFINED__ */ - -#ifndef __ID3D12DebugCommandQueue1_FWD_DEFINED__ -#define __ID3D12DebugCommandQueue1_FWD_DEFINED__ -typedef interface ID3D12DebugCommandQueue1 ID3D12DebugCommandQueue1; - -#endif /* __ID3D12DebugCommandQueue1_FWD_DEFINED__ */ - -#ifndef __ID3D12DebugCommandList1_FWD_DEFINED__ -#define __ID3D12DebugCommandList1_FWD_DEFINED__ -typedef interface ID3D12DebugCommandList1 ID3D12DebugCommandList1; - -#endif /* __ID3D12DebugCommandList1_FWD_DEFINED__ */ - -#ifndef __ID3D12DebugCommandList_FWD_DEFINED__ -#define __ID3D12DebugCommandList_FWD_DEFINED__ -typedef interface ID3D12DebugCommandList ID3D12DebugCommandList; - -#endif /* __ID3D12DebugCommandList_FWD_DEFINED__ */ - -#ifndef __ID3D12DebugCommandList2_FWD_DEFINED__ -#define __ID3D12DebugCommandList2_FWD_DEFINED__ -typedef interface ID3D12DebugCommandList2 ID3D12DebugCommandList2; - -#endif /* __ID3D12DebugCommandList2_FWD_DEFINED__ */ - -#ifndef __ID3D12DebugCommandList3_FWD_DEFINED__ -#define __ID3D12DebugCommandList3_FWD_DEFINED__ -typedef interface ID3D12DebugCommandList3 ID3D12DebugCommandList3; - -#endif /* __ID3D12DebugCommandList3_FWD_DEFINED__ */ - -#ifndef __ID3D12SharingContract_FWD_DEFINED__ -#define __ID3D12SharingContract_FWD_DEFINED__ -typedef interface ID3D12SharingContract ID3D12SharingContract; - -#endif /* __ID3D12SharingContract_FWD_DEFINED__ */ - -#ifndef __ID3D12ManualWriteTrackingResource_FWD_DEFINED__ -#define __ID3D12ManualWriteTrackingResource_FWD_DEFINED__ -typedef interface ID3D12ManualWriteTrackingResource ID3D12ManualWriteTrackingResource; - -#endif /* __ID3D12ManualWriteTrackingResource_FWD_DEFINED__ */ - -#ifndef __ID3D12InfoQueue_FWD_DEFINED__ -#define __ID3D12InfoQueue_FWD_DEFINED__ -typedef interface ID3D12InfoQueue ID3D12InfoQueue; - -#endif /* __ID3D12InfoQueue_FWD_DEFINED__ */ - -#ifndef __ID3D12InfoQueue1_FWD_DEFINED__ -#define __ID3D12InfoQueue1_FWD_DEFINED__ -typedef interface ID3D12InfoQueue1 ID3D12InfoQueue1; - -#endif /* __ID3D12InfoQueue1_FWD_DEFINED__ */ - -/* header files for imported files */ -#include "oaidl.h" -#include "ocidl.h" -#include "d3d12.h" - -#ifdef __cplusplus -extern "C"{ -#endif - -/* interface __MIDL_itf_d3d12sdklayers_0000_0000 */ -/* [local] */ - -#include -#pragma region App Family -#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) - -extern RPC_IF_HANDLE __MIDL_itf_d3d12sdklayers_0000_0000_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12sdklayers_0000_0000_v0_0_s_ifspec; - -#ifndef __ID3D12Debug_INTERFACE_DEFINED__ -#define __ID3D12Debug_INTERFACE_DEFINED__ - -/* interface ID3D12Debug */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12Debug; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("344488b7-6846-474b-b989-f027448245e0") - ID3D12Debug : public IUnknown - { - public: - virtual void STDMETHODCALLTYPE EnableDebugLayer( void) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12DebugVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12Debug * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12Debug * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12Debug * This); - - DECLSPEC_XFGVIRT(ID3D12Debug, EnableDebugLayer) - void ( STDMETHODCALLTYPE *EnableDebugLayer )( - ID3D12Debug * This); - - END_INTERFACE - } ID3D12DebugVtbl; - - interface ID3D12Debug - { - CONST_VTBL struct ID3D12DebugVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12Debug_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12Debug_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12Debug_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12Debug_EnableDebugLayer(This) \ - ( (This)->lpVtbl -> EnableDebugLayer(This) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12Debug_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12sdklayers_0000_0001 */ -/* [local] */ - -typedef -enum D3D12_GPU_BASED_VALIDATION_FLAGS - { - D3D12_GPU_BASED_VALIDATION_FLAGS_NONE = 0, - D3D12_GPU_BASED_VALIDATION_FLAGS_DISABLE_STATE_TRACKING = 0x1 - } D3D12_GPU_BASED_VALIDATION_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_GPU_BASED_VALIDATION_FLAGS) - -extern RPC_IF_HANDLE __MIDL_itf_d3d12sdklayers_0000_0001_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12sdklayers_0000_0001_v0_0_s_ifspec; - -#ifndef __ID3D12Debug1_INTERFACE_DEFINED__ -#define __ID3D12Debug1_INTERFACE_DEFINED__ - -/* interface ID3D12Debug1 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12Debug1; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("affaa4ca-63fe-4d8e-b8ad-159000af4304") - ID3D12Debug1 : public IUnknown - { - public: - virtual void STDMETHODCALLTYPE EnableDebugLayer( void) = 0; - - virtual void STDMETHODCALLTYPE SetEnableGPUBasedValidation( - BOOL Enable) = 0; - - virtual void STDMETHODCALLTYPE SetEnableSynchronizedCommandQueueValidation( - BOOL Enable) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12Debug1Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12Debug1 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12Debug1 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12Debug1 * This); - - DECLSPEC_XFGVIRT(ID3D12Debug1, EnableDebugLayer) - void ( STDMETHODCALLTYPE *EnableDebugLayer )( - ID3D12Debug1 * This); - - DECLSPEC_XFGVIRT(ID3D12Debug1, SetEnableGPUBasedValidation) - void ( STDMETHODCALLTYPE *SetEnableGPUBasedValidation )( - ID3D12Debug1 * This, - BOOL Enable); - - DECLSPEC_XFGVIRT(ID3D12Debug1, SetEnableSynchronizedCommandQueueValidation) - void ( STDMETHODCALLTYPE *SetEnableSynchronizedCommandQueueValidation )( - ID3D12Debug1 * This, - BOOL Enable); - - END_INTERFACE - } ID3D12Debug1Vtbl; - - interface ID3D12Debug1 - { - CONST_VTBL struct ID3D12Debug1Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12Debug1_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12Debug1_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12Debug1_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12Debug1_EnableDebugLayer(This) \ - ( (This)->lpVtbl -> EnableDebugLayer(This) ) - -#define ID3D12Debug1_SetEnableGPUBasedValidation(This,Enable) \ - ( (This)->lpVtbl -> SetEnableGPUBasedValidation(This,Enable) ) - -#define ID3D12Debug1_SetEnableSynchronizedCommandQueueValidation(This,Enable) \ - ( (This)->lpVtbl -> SetEnableSynchronizedCommandQueueValidation(This,Enable) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12Debug1_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12Debug2_INTERFACE_DEFINED__ -#define __ID3D12Debug2_INTERFACE_DEFINED__ - -/* interface ID3D12Debug2 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12Debug2; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("93a665c4-a3b2-4e5d-b692-a26ae14e3374") - ID3D12Debug2 : public IUnknown - { - public: - virtual void STDMETHODCALLTYPE SetGPUBasedValidationFlags( - D3D12_GPU_BASED_VALIDATION_FLAGS Flags) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12Debug2Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12Debug2 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12Debug2 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12Debug2 * This); - - DECLSPEC_XFGVIRT(ID3D12Debug2, SetGPUBasedValidationFlags) - void ( STDMETHODCALLTYPE *SetGPUBasedValidationFlags )( - ID3D12Debug2 * This, - D3D12_GPU_BASED_VALIDATION_FLAGS Flags); - - END_INTERFACE - } ID3D12Debug2Vtbl; - - interface ID3D12Debug2 - { - CONST_VTBL struct ID3D12Debug2Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12Debug2_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12Debug2_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12Debug2_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12Debug2_SetGPUBasedValidationFlags(This,Flags) \ - ( (This)->lpVtbl -> SetGPUBasedValidationFlags(This,Flags) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12Debug2_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12Debug3_INTERFACE_DEFINED__ -#define __ID3D12Debug3_INTERFACE_DEFINED__ - -/* interface ID3D12Debug3 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12Debug3; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("5cf4e58f-f671-4ff1-a542-3686e3d153d1") - ID3D12Debug3 : public ID3D12Debug - { - public: - virtual void STDMETHODCALLTYPE SetEnableGPUBasedValidation( - BOOL Enable) = 0; - - virtual void STDMETHODCALLTYPE SetEnableSynchronizedCommandQueueValidation( - BOOL Enable) = 0; - - virtual void STDMETHODCALLTYPE SetGPUBasedValidationFlags( - D3D12_GPU_BASED_VALIDATION_FLAGS Flags) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12Debug3Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12Debug3 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12Debug3 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12Debug3 * This); - - DECLSPEC_XFGVIRT(ID3D12Debug, EnableDebugLayer) - void ( STDMETHODCALLTYPE *EnableDebugLayer )( - ID3D12Debug3 * This); - - DECLSPEC_XFGVIRT(ID3D12Debug3, SetEnableGPUBasedValidation) - void ( STDMETHODCALLTYPE *SetEnableGPUBasedValidation )( - ID3D12Debug3 * This, - BOOL Enable); - - DECLSPEC_XFGVIRT(ID3D12Debug3, SetEnableSynchronizedCommandQueueValidation) - void ( STDMETHODCALLTYPE *SetEnableSynchronizedCommandQueueValidation )( - ID3D12Debug3 * This, - BOOL Enable); - - DECLSPEC_XFGVIRT(ID3D12Debug3, SetGPUBasedValidationFlags) - void ( STDMETHODCALLTYPE *SetGPUBasedValidationFlags )( - ID3D12Debug3 * This, - D3D12_GPU_BASED_VALIDATION_FLAGS Flags); - - END_INTERFACE - } ID3D12Debug3Vtbl; - - interface ID3D12Debug3 - { - CONST_VTBL struct ID3D12Debug3Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12Debug3_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12Debug3_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12Debug3_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12Debug3_EnableDebugLayer(This) \ - ( (This)->lpVtbl -> EnableDebugLayer(This) ) - -#define ID3D12Debug3_SetEnableGPUBasedValidation(This,Enable) \ - ( (This)->lpVtbl -> SetEnableGPUBasedValidation(This,Enable) ) - -#define ID3D12Debug3_SetEnableSynchronizedCommandQueueValidation(This,Enable) \ - ( (This)->lpVtbl -> SetEnableSynchronizedCommandQueueValidation(This,Enable) ) - -#define ID3D12Debug3_SetGPUBasedValidationFlags(This,Flags) \ - ( (This)->lpVtbl -> SetGPUBasedValidationFlags(This,Flags) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12Debug3_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12Debug4_INTERFACE_DEFINED__ -#define __ID3D12Debug4_INTERFACE_DEFINED__ - -/* interface ID3D12Debug4 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12Debug4; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("014b816e-9ec5-4a2f-a845-ffbe441ce13a") - ID3D12Debug4 : public ID3D12Debug3 - { - public: - virtual void STDMETHODCALLTYPE DisableDebugLayer( void) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12Debug4Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12Debug4 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12Debug4 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12Debug4 * This); - - DECLSPEC_XFGVIRT(ID3D12Debug, EnableDebugLayer) - void ( STDMETHODCALLTYPE *EnableDebugLayer )( - ID3D12Debug4 * This); - - DECLSPEC_XFGVIRT(ID3D12Debug3, SetEnableGPUBasedValidation) - void ( STDMETHODCALLTYPE *SetEnableGPUBasedValidation )( - ID3D12Debug4 * This, - BOOL Enable); - - DECLSPEC_XFGVIRT(ID3D12Debug3, SetEnableSynchronizedCommandQueueValidation) - void ( STDMETHODCALLTYPE *SetEnableSynchronizedCommandQueueValidation )( - ID3D12Debug4 * This, - BOOL Enable); - - DECLSPEC_XFGVIRT(ID3D12Debug3, SetGPUBasedValidationFlags) - void ( STDMETHODCALLTYPE *SetGPUBasedValidationFlags )( - ID3D12Debug4 * This, - D3D12_GPU_BASED_VALIDATION_FLAGS Flags); - - DECLSPEC_XFGVIRT(ID3D12Debug4, DisableDebugLayer) - void ( STDMETHODCALLTYPE *DisableDebugLayer )( - ID3D12Debug4 * This); - - END_INTERFACE - } ID3D12Debug4Vtbl; - - interface ID3D12Debug4 - { - CONST_VTBL struct ID3D12Debug4Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12Debug4_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12Debug4_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12Debug4_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12Debug4_EnableDebugLayer(This) \ - ( (This)->lpVtbl -> EnableDebugLayer(This) ) - -#define ID3D12Debug4_SetEnableGPUBasedValidation(This,Enable) \ - ( (This)->lpVtbl -> SetEnableGPUBasedValidation(This,Enable) ) - -#define ID3D12Debug4_SetEnableSynchronizedCommandQueueValidation(This,Enable) \ - ( (This)->lpVtbl -> SetEnableSynchronizedCommandQueueValidation(This,Enable) ) - -#define ID3D12Debug4_SetGPUBasedValidationFlags(This,Flags) \ - ( (This)->lpVtbl -> SetGPUBasedValidationFlags(This,Flags) ) - -#define ID3D12Debug4_DisableDebugLayer(This) \ - ( (This)->lpVtbl -> DisableDebugLayer(This) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12Debug4_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12Debug5_INTERFACE_DEFINED__ -#define __ID3D12Debug5_INTERFACE_DEFINED__ - -/* interface ID3D12Debug5 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12Debug5; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("548d6b12-09fa-40e0-9069-5dcd589a52c9") - ID3D12Debug5 : public ID3D12Debug4 - { - public: - virtual void STDMETHODCALLTYPE SetEnableAutoName( - BOOL Enable) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12Debug5Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12Debug5 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12Debug5 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12Debug5 * This); - - DECLSPEC_XFGVIRT(ID3D12Debug, EnableDebugLayer) - void ( STDMETHODCALLTYPE *EnableDebugLayer )( - ID3D12Debug5 * This); - - DECLSPEC_XFGVIRT(ID3D12Debug3, SetEnableGPUBasedValidation) - void ( STDMETHODCALLTYPE *SetEnableGPUBasedValidation )( - ID3D12Debug5 * This, - BOOL Enable); - - DECLSPEC_XFGVIRT(ID3D12Debug3, SetEnableSynchronizedCommandQueueValidation) - void ( STDMETHODCALLTYPE *SetEnableSynchronizedCommandQueueValidation )( - ID3D12Debug5 * This, - BOOL Enable); - - DECLSPEC_XFGVIRT(ID3D12Debug3, SetGPUBasedValidationFlags) - void ( STDMETHODCALLTYPE *SetGPUBasedValidationFlags )( - ID3D12Debug5 * This, - D3D12_GPU_BASED_VALIDATION_FLAGS Flags); - - DECLSPEC_XFGVIRT(ID3D12Debug4, DisableDebugLayer) - void ( STDMETHODCALLTYPE *DisableDebugLayer )( - ID3D12Debug5 * This); - - DECLSPEC_XFGVIRT(ID3D12Debug5, SetEnableAutoName) - void ( STDMETHODCALLTYPE *SetEnableAutoName )( - ID3D12Debug5 * This, - BOOL Enable); - - END_INTERFACE - } ID3D12Debug5Vtbl; - - interface ID3D12Debug5 - { - CONST_VTBL struct ID3D12Debug5Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12Debug5_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12Debug5_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12Debug5_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12Debug5_EnableDebugLayer(This) \ - ( (This)->lpVtbl -> EnableDebugLayer(This) ) - -#define ID3D12Debug5_SetEnableGPUBasedValidation(This,Enable) \ - ( (This)->lpVtbl -> SetEnableGPUBasedValidation(This,Enable) ) - -#define ID3D12Debug5_SetEnableSynchronizedCommandQueueValidation(This,Enable) \ - ( (This)->lpVtbl -> SetEnableSynchronizedCommandQueueValidation(This,Enable) ) - -#define ID3D12Debug5_SetGPUBasedValidationFlags(This,Flags) \ - ( (This)->lpVtbl -> SetGPUBasedValidationFlags(This,Flags) ) - -#define ID3D12Debug5_DisableDebugLayer(This) \ - ( (This)->lpVtbl -> DisableDebugLayer(This) ) - -#define ID3D12Debug5_SetEnableAutoName(This,Enable) \ - ( (This)->lpVtbl -> SetEnableAutoName(This,Enable) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12Debug5_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12Debug6_INTERFACE_DEFINED__ -#define __ID3D12Debug6_INTERFACE_DEFINED__ - -/* interface ID3D12Debug6 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12Debug6; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("82a816d6-5d01-4157-97d0-4975463fd1ed") - ID3D12Debug6 : public ID3D12Debug5 - { - public: - virtual void STDMETHODCALLTYPE SetForceLegacyBarrierValidation( - BOOL Enable) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12Debug6Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12Debug6 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12Debug6 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12Debug6 * This); - - DECLSPEC_XFGVIRT(ID3D12Debug, EnableDebugLayer) - void ( STDMETHODCALLTYPE *EnableDebugLayer )( - ID3D12Debug6 * This); - - DECLSPEC_XFGVIRT(ID3D12Debug3, SetEnableGPUBasedValidation) - void ( STDMETHODCALLTYPE *SetEnableGPUBasedValidation )( - ID3D12Debug6 * This, - BOOL Enable); - - DECLSPEC_XFGVIRT(ID3D12Debug3, SetEnableSynchronizedCommandQueueValidation) - void ( STDMETHODCALLTYPE *SetEnableSynchronizedCommandQueueValidation )( - ID3D12Debug6 * This, - BOOL Enable); - - DECLSPEC_XFGVIRT(ID3D12Debug3, SetGPUBasedValidationFlags) - void ( STDMETHODCALLTYPE *SetGPUBasedValidationFlags )( - ID3D12Debug6 * This, - D3D12_GPU_BASED_VALIDATION_FLAGS Flags); - - DECLSPEC_XFGVIRT(ID3D12Debug4, DisableDebugLayer) - void ( STDMETHODCALLTYPE *DisableDebugLayer )( - ID3D12Debug6 * This); - - DECLSPEC_XFGVIRT(ID3D12Debug5, SetEnableAutoName) - void ( STDMETHODCALLTYPE *SetEnableAutoName )( - ID3D12Debug6 * This, - BOOL Enable); - - DECLSPEC_XFGVIRT(ID3D12Debug6, SetForceLegacyBarrierValidation) - void ( STDMETHODCALLTYPE *SetForceLegacyBarrierValidation )( - ID3D12Debug6 * This, - BOOL Enable); - - END_INTERFACE - } ID3D12Debug6Vtbl; - - interface ID3D12Debug6 - { - CONST_VTBL struct ID3D12Debug6Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12Debug6_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12Debug6_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12Debug6_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12Debug6_EnableDebugLayer(This) \ - ( (This)->lpVtbl -> EnableDebugLayer(This) ) - -#define ID3D12Debug6_SetEnableGPUBasedValidation(This,Enable) \ - ( (This)->lpVtbl -> SetEnableGPUBasedValidation(This,Enable) ) - -#define ID3D12Debug6_SetEnableSynchronizedCommandQueueValidation(This,Enable) \ - ( (This)->lpVtbl -> SetEnableSynchronizedCommandQueueValidation(This,Enable) ) - -#define ID3D12Debug6_SetGPUBasedValidationFlags(This,Flags) \ - ( (This)->lpVtbl -> SetGPUBasedValidationFlags(This,Flags) ) - -#define ID3D12Debug6_DisableDebugLayer(This) \ - ( (This)->lpVtbl -> DisableDebugLayer(This) ) - -#define ID3D12Debug6_SetEnableAutoName(This,Enable) \ - ( (This)->lpVtbl -> SetEnableAutoName(This,Enable) ) - -#define ID3D12Debug6_SetForceLegacyBarrierValidation(This,Enable) \ - ( (This)->lpVtbl -> SetForceLegacyBarrierValidation(This,Enable) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12Debug6_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12sdklayers_0000_0007 */ -/* [local] */ - -DEFINE_GUID(WKPDID_D3DAutoDebugObjectNameW, 0xd4902e36, 0x757a, 0x4942, 0x95, 0x94, 0xb6, 0x76, 0x9a, 0xfa, 0x43, 0xcd); -typedef -enum D3D12_RLDO_FLAGS - { - D3D12_RLDO_NONE = 0, - D3D12_RLDO_SUMMARY = 0x1, - D3D12_RLDO_DETAIL = 0x2, - D3D12_RLDO_IGNORE_INTERNAL = 0x4 - } D3D12_RLDO_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_RLDO_FLAGS) -typedef -enum D3D12_DEBUG_DEVICE_PARAMETER_TYPE - { - D3D12_DEBUG_DEVICE_PARAMETER_FEATURE_FLAGS = 0, - D3D12_DEBUG_DEVICE_PARAMETER_GPU_BASED_VALIDATION_SETTINGS = ( D3D12_DEBUG_DEVICE_PARAMETER_FEATURE_FLAGS + 1 ) , - D3D12_DEBUG_DEVICE_PARAMETER_GPU_SLOWDOWN_PERFORMANCE_FACTOR = ( D3D12_DEBUG_DEVICE_PARAMETER_GPU_BASED_VALIDATION_SETTINGS + 1 ) , - D3D12_DEBUG_DEVICE_PARAMETER_BYTECODE_VALIDATION_MODE = ( D3D12_DEBUG_DEVICE_PARAMETER_GPU_SLOWDOWN_PERFORMANCE_FACTOR + 1 ) - } D3D12_DEBUG_DEVICE_PARAMETER_TYPE; - -typedef -enum D3D12_DEBUG_FEATURE - { - D3D12_DEBUG_FEATURE_NONE = 0, - D3D12_DEBUG_FEATURE_ALLOW_BEHAVIOR_CHANGING_DEBUG_AIDS = 0x1, - D3D12_DEBUG_FEATURE_CONSERVATIVE_RESOURCE_STATE_TRACKING = 0x2, - D3D12_DEBUG_FEATURE_DISABLE_VIRTUALIZED_BUNDLES_VALIDATION = 0x4, - D3D12_DEBUG_FEATURE_EMULATE_WINDOWS7 = 0x8 - } D3D12_DEBUG_FEATURE; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_DEBUG_FEATURE) -typedef -enum D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODE - { - D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODE_NONE = 0, - D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODE_STATE_TRACKING_ONLY = ( D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODE_NONE + 1 ) , - D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODE_UNGUARDED_VALIDATION = ( D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODE_STATE_TRACKING_ONLY + 1 ) , - D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODE_GUARDED_VALIDATION = ( D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODE_UNGUARDED_VALIDATION + 1 ) , - NUM_D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODES = ( D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODE_GUARDED_VALIDATION + 1 ) - } D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODE; - -typedef -enum D3D12_GPU_BASED_VALIDATION_PIPELINE_STATE_CREATE_FLAGS - { - D3D12_GPU_BASED_VALIDATION_PIPELINE_STATE_CREATE_FLAG_NONE = 0, - D3D12_GPU_BASED_VALIDATION_PIPELINE_STATE_CREATE_FLAG_FRONT_LOAD_CREATE_TRACKING_ONLY_SHADERS = 0x1, - D3D12_GPU_BASED_VALIDATION_PIPELINE_STATE_CREATE_FLAG_FRONT_LOAD_CREATE_UNGUARDED_VALIDATION_SHADERS = 0x2, - D3D12_GPU_BASED_VALIDATION_PIPELINE_STATE_CREATE_FLAG_FRONT_LOAD_CREATE_GUARDED_VALIDATION_SHADERS = 0x4, - D3D12_GPU_BASED_VALIDATION_PIPELINE_STATE_CREATE_FLAGS_VALID_MASK = 0x7 - } D3D12_GPU_BASED_VALIDATION_PIPELINE_STATE_CREATE_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_GPU_BASED_VALIDATION_PIPELINE_STATE_CREATE_FLAGS) -typedef struct D3D12_DEBUG_DEVICE_GPU_BASED_VALIDATION_SETTINGS - { - UINT MaxMessagesPerCommandList; - D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODE DefaultShaderPatchMode; - D3D12_GPU_BASED_VALIDATION_PIPELINE_STATE_CREATE_FLAGS PipelineStateCreateFlags; - } D3D12_DEBUG_DEVICE_GPU_BASED_VALIDATION_SETTINGS; - -typedef struct D3D12_DEBUG_DEVICE_GPU_SLOWDOWN_PERFORMANCE_FACTOR - { - FLOAT SlowdownFactor; - } D3D12_DEBUG_DEVICE_GPU_SLOWDOWN_PERFORMANCE_FACTOR; - -typedef -enum D3D12_DEBUG_DEVICE_BYTECODE_VALIDATION_MODE - { - D3D12_DEBUG_DEVICE_BYTECODE_VALIDATION_DISABLED = 0, - D3D12_DEBUG_DEVICE_BYTECODE_VALIDATION_WHEN_HASH_BYPASSED = ( D3D12_DEBUG_DEVICE_BYTECODE_VALIDATION_DISABLED + 1 ) , - D3D12_DEBUG_DEVICE_BYTECODE_VALIDATION_ALL_BYTECODE = ( D3D12_DEBUG_DEVICE_BYTECODE_VALIDATION_WHEN_HASH_BYPASSED + 1 ) , - D3D12_DEBUG_DEVICE_BYTECODE_VALIDATION_MODE_DEFAULT = D3D12_DEBUG_DEVICE_BYTECODE_VALIDATION_WHEN_HASH_BYPASSED - } D3D12_DEBUG_DEVICE_BYTECODE_VALIDATION_MODE; - -extern RPC_IF_HANDLE __MIDL_itf_d3d12sdklayers_0000_0007_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12sdklayers_0000_0007_v0_0_s_ifspec; - -#ifndef __ID3D12DebugDevice1_INTERFACE_DEFINED__ -#define __ID3D12DebugDevice1_INTERFACE_DEFINED__ - -/* interface ID3D12DebugDevice1 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12DebugDevice1; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("a9b71770-d099-4a65-a698-3dee10020f88") - ID3D12DebugDevice1 : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE SetDebugParameter( - D3D12_DEBUG_DEVICE_PARAMETER_TYPE Type, - _In_reads_bytes_(DataSize) const void *pData, - UINT DataSize) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetDebugParameter( - D3D12_DEBUG_DEVICE_PARAMETER_TYPE Type, - _Out_writes_bytes_(DataSize) void *pData, - UINT DataSize) = 0; - - virtual HRESULT STDMETHODCALLTYPE ReportLiveDeviceObjects( - D3D12_RLDO_FLAGS Flags) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12DebugDevice1Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12DebugDevice1 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12DebugDevice1 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12DebugDevice1 * This); - - DECLSPEC_XFGVIRT(ID3D12DebugDevice1, SetDebugParameter) - HRESULT ( STDMETHODCALLTYPE *SetDebugParameter )( - ID3D12DebugDevice1 * This, - D3D12_DEBUG_DEVICE_PARAMETER_TYPE Type, - _In_reads_bytes_(DataSize) const void *pData, - UINT DataSize); - - DECLSPEC_XFGVIRT(ID3D12DebugDevice1, GetDebugParameter) - HRESULT ( STDMETHODCALLTYPE *GetDebugParameter )( - ID3D12DebugDevice1 * This, - D3D12_DEBUG_DEVICE_PARAMETER_TYPE Type, - _Out_writes_bytes_(DataSize) void *pData, - UINT DataSize); - - DECLSPEC_XFGVIRT(ID3D12DebugDevice1, ReportLiveDeviceObjects) - HRESULT ( STDMETHODCALLTYPE *ReportLiveDeviceObjects )( - ID3D12DebugDevice1 * This, - D3D12_RLDO_FLAGS Flags); - - END_INTERFACE - } ID3D12DebugDevice1Vtbl; - - interface ID3D12DebugDevice1 - { - CONST_VTBL struct ID3D12DebugDevice1Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12DebugDevice1_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12DebugDevice1_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12DebugDevice1_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12DebugDevice1_SetDebugParameter(This,Type,pData,DataSize) \ - ( (This)->lpVtbl -> SetDebugParameter(This,Type,pData,DataSize) ) - -#define ID3D12DebugDevice1_GetDebugParameter(This,Type,pData,DataSize) \ - ( (This)->lpVtbl -> GetDebugParameter(This,Type,pData,DataSize) ) - -#define ID3D12DebugDevice1_ReportLiveDeviceObjects(This,Flags) \ - ( (This)->lpVtbl -> ReportLiveDeviceObjects(This,Flags) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12DebugDevice1_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12DebugDevice_INTERFACE_DEFINED__ -#define __ID3D12DebugDevice_INTERFACE_DEFINED__ - -/* interface ID3D12DebugDevice */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12DebugDevice; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("3febd6dd-4973-4787-8194-e45f9e28923e") - ID3D12DebugDevice : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE SetFeatureMask( - D3D12_DEBUG_FEATURE Mask) = 0; - - virtual D3D12_DEBUG_FEATURE STDMETHODCALLTYPE GetFeatureMask( void) = 0; - - virtual HRESULT STDMETHODCALLTYPE ReportLiveDeviceObjects( - D3D12_RLDO_FLAGS Flags) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12DebugDeviceVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12DebugDevice * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12DebugDevice * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12DebugDevice * This); - - DECLSPEC_XFGVIRT(ID3D12DebugDevice, SetFeatureMask) - HRESULT ( STDMETHODCALLTYPE *SetFeatureMask )( - ID3D12DebugDevice * This, - D3D12_DEBUG_FEATURE Mask); - - DECLSPEC_XFGVIRT(ID3D12DebugDevice, GetFeatureMask) - D3D12_DEBUG_FEATURE ( STDMETHODCALLTYPE *GetFeatureMask )( - ID3D12DebugDevice * This); - - DECLSPEC_XFGVIRT(ID3D12DebugDevice, ReportLiveDeviceObjects) - HRESULT ( STDMETHODCALLTYPE *ReportLiveDeviceObjects )( - ID3D12DebugDevice * This, - D3D12_RLDO_FLAGS Flags); - - END_INTERFACE - } ID3D12DebugDeviceVtbl; - - interface ID3D12DebugDevice - { - CONST_VTBL struct ID3D12DebugDeviceVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12DebugDevice_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12DebugDevice_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12DebugDevice_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12DebugDevice_SetFeatureMask(This,Mask) \ - ( (This)->lpVtbl -> SetFeatureMask(This,Mask) ) - -#define ID3D12DebugDevice_GetFeatureMask(This) \ - ( (This)->lpVtbl -> GetFeatureMask(This) ) - -#define ID3D12DebugDevice_ReportLiveDeviceObjects(This,Flags) \ - ( (This)->lpVtbl -> ReportLiveDeviceObjects(This,Flags) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12DebugDevice_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12DebugDevice2_INTERFACE_DEFINED__ -#define __ID3D12DebugDevice2_INTERFACE_DEFINED__ - -/* interface ID3D12DebugDevice2 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12DebugDevice2; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("60eccbc1-378d-4df1-894c-f8ac5ce4d7dd") - ID3D12DebugDevice2 : public ID3D12DebugDevice - { - public: - virtual HRESULT STDMETHODCALLTYPE SetDebugParameter( - D3D12_DEBUG_DEVICE_PARAMETER_TYPE Type, - _In_reads_bytes_(DataSize) const void *pData, - UINT DataSize) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetDebugParameter( - D3D12_DEBUG_DEVICE_PARAMETER_TYPE Type, - _Out_writes_bytes_(DataSize) void *pData, - UINT DataSize) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12DebugDevice2Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12DebugDevice2 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12DebugDevice2 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12DebugDevice2 * This); - - DECLSPEC_XFGVIRT(ID3D12DebugDevice, SetFeatureMask) - HRESULT ( STDMETHODCALLTYPE *SetFeatureMask )( - ID3D12DebugDevice2 * This, - D3D12_DEBUG_FEATURE Mask); - - DECLSPEC_XFGVIRT(ID3D12DebugDevice, GetFeatureMask) - D3D12_DEBUG_FEATURE ( STDMETHODCALLTYPE *GetFeatureMask )( - ID3D12DebugDevice2 * This); - - DECLSPEC_XFGVIRT(ID3D12DebugDevice, ReportLiveDeviceObjects) - HRESULT ( STDMETHODCALLTYPE *ReportLiveDeviceObjects )( - ID3D12DebugDevice2 * This, - D3D12_RLDO_FLAGS Flags); - - DECLSPEC_XFGVIRT(ID3D12DebugDevice2, SetDebugParameter) - HRESULT ( STDMETHODCALLTYPE *SetDebugParameter )( - ID3D12DebugDevice2 * This, - D3D12_DEBUG_DEVICE_PARAMETER_TYPE Type, - _In_reads_bytes_(DataSize) const void *pData, - UINT DataSize); - - DECLSPEC_XFGVIRT(ID3D12DebugDevice2, GetDebugParameter) - HRESULT ( STDMETHODCALLTYPE *GetDebugParameter )( - ID3D12DebugDevice2 * This, - D3D12_DEBUG_DEVICE_PARAMETER_TYPE Type, - _Out_writes_bytes_(DataSize) void *pData, - UINT DataSize); - - END_INTERFACE - } ID3D12DebugDevice2Vtbl; - - interface ID3D12DebugDevice2 - { - CONST_VTBL struct ID3D12DebugDevice2Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12DebugDevice2_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12DebugDevice2_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12DebugDevice2_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12DebugDevice2_SetFeatureMask(This,Mask) \ - ( (This)->lpVtbl -> SetFeatureMask(This,Mask) ) - -#define ID3D12DebugDevice2_GetFeatureMask(This) \ - ( (This)->lpVtbl -> GetFeatureMask(This) ) - -#define ID3D12DebugDevice2_ReportLiveDeviceObjects(This,Flags) \ - ( (This)->lpVtbl -> ReportLiveDeviceObjects(This,Flags) ) - -#define ID3D12DebugDevice2_SetDebugParameter(This,Type,pData,DataSize) \ - ( (This)->lpVtbl -> SetDebugParameter(This,Type,pData,DataSize) ) - -#define ID3D12DebugDevice2_GetDebugParameter(This,Type,pData,DataSize) \ - ( (This)->lpVtbl -> GetDebugParameter(This,Type,pData,DataSize) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12DebugDevice2_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12sdklayers_0000_0010 */ -/* [local] */ - -DEFINE_GUID(DXGI_DEBUG_D3D12, 0xcf59a98c, 0xa950, 0x4326, 0x91, 0xef, 0x9b, 0xba, 0xa1, 0x7b, 0xfd, 0x95); - -extern RPC_IF_HANDLE __MIDL_itf_d3d12sdklayers_0000_0010_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12sdklayers_0000_0010_v0_0_s_ifspec; - -#ifndef __ID3D12DebugCommandQueue_INTERFACE_DEFINED__ -#define __ID3D12DebugCommandQueue_INTERFACE_DEFINED__ - -/* interface ID3D12DebugCommandQueue */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12DebugCommandQueue; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("09e0bf36-54ac-484f-8847-4baeeab6053a") - ID3D12DebugCommandQueue : public IUnknown - { - public: - virtual BOOL STDMETHODCALLTYPE AssertResourceState( - _In_ ID3D12Resource *pResource, - UINT Subresource, - UINT State) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12DebugCommandQueueVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12DebugCommandQueue * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12DebugCommandQueue * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12DebugCommandQueue * This); - - DECLSPEC_XFGVIRT(ID3D12DebugCommandQueue, AssertResourceState) - BOOL ( STDMETHODCALLTYPE *AssertResourceState )( - ID3D12DebugCommandQueue * This, - _In_ ID3D12Resource *pResource, - UINT Subresource, - UINT State); - - END_INTERFACE - } ID3D12DebugCommandQueueVtbl; - - interface ID3D12DebugCommandQueue - { - CONST_VTBL struct ID3D12DebugCommandQueueVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12DebugCommandQueue_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12DebugCommandQueue_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12DebugCommandQueue_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12DebugCommandQueue_AssertResourceState(This,pResource,Subresource,State) \ - ( (This)->lpVtbl -> AssertResourceState(This,pResource,Subresource,State) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12DebugCommandQueue_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12DebugCommandQueue1_INTERFACE_DEFINED__ -#define __ID3D12DebugCommandQueue1_INTERFACE_DEFINED__ - -/* interface ID3D12DebugCommandQueue1 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12DebugCommandQueue1; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("16be35a2-bfd6-49f2-bcae-eaae4aff862d") - ID3D12DebugCommandQueue1 : public ID3D12DebugCommandQueue - { - public: - virtual void STDMETHODCALLTYPE AssertResourceAccess( - _In_ ID3D12Resource *pResource, - UINT Subresource, - D3D12_BARRIER_ACCESS Access) = 0; - - virtual void STDMETHODCALLTYPE AssertTextureLayout( - _In_ ID3D12Resource *pResource, - UINT Subresource, - D3D12_BARRIER_LAYOUT Layout) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12DebugCommandQueue1Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12DebugCommandQueue1 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12DebugCommandQueue1 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12DebugCommandQueue1 * This); - - DECLSPEC_XFGVIRT(ID3D12DebugCommandQueue, AssertResourceState) - BOOL ( STDMETHODCALLTYPE *AssertResourceState )( - ID3D12DebugCommandQueue1 * This, - _In_ ID3D12Resource *pResource, - UINT Subresource, - UINT State); - - DECLSPEC_XFGVIRT(ID3D12DebugCommandQueue1, AssertResourceAccess) - void ( STDMETHODCALLTYPE *AssertResourceAccess )( - ID3D12DebugCommandQueue1 * This, - _In_ ID3D12Resource *pResource, - UINT Subresource, - D3D12_BARRIER_ACCESS Access); - - DECLSPEC_XFGVIRT(ID3D12DebugCommandQueue1, AssertTextureLayout) - void ( STDMETHODCALLTYPE *AssertTextureLayout )( - ID3D12DebugCommandQueue1 * This, - _In_ ID3D12Resource *pResource, - UINT Subresource, - D3D12_BARRIER_LAYOUT Layout); - - END_INTERFACE - } ID3D12DebugCommandQueue1Vtbl; - - interface ID3D12DebugCommandQueue1 - { - CONST_VTBL struct ID3D12DebugCommandQueue1Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12DebugCommandQueue1_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12DebugCommandQueue1_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12DebugCommandQueue1_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12DebugCommandQueue1_AssertResourceState(This,pResource,Subresource,State) \ - ( (This)->lpVtbl -> AssertResourceState(This,pResource,Subresource,State) ) - -#define ID3D12DebugCommandQueue1_AssertResourceAccess(This,pResource,Subresource,Access) \ - ( (This)->lpVtbl -> AssertResourceAccess(This,pResource,Subresource,Access) ) - -#define ID3D12DebugCommandQueue1_AssertTextureLayout(This,pResource,Subresource,Layout) \ - ( (This)->lpVtbl -> AssertTextureLayout(This,pResource,Subresource,Layout) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12DebugCommandQueue1_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12sdklayers_0000_0012 */ -/* [local] */ - -typedef -enum D3D12_DEBUG_COMMAND_LIST_PARAMETER_TYPE - { - D3D12_DEBUG_COMMAND_LIST_PARAMETER_GPU_BASED_VALIDATION_SETTINGS = 0 - } D3D12_DEBUG_COMMAND_LIST_PARAMETER_TYPE; - -typedef struct D3D12_DEBUG_COMMAND_LIST_GPU_BASED_VALIDATION_SETTINGS - { - D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODE ShaderPatchMode; - } D3D12_DEBUG_COMMAND_LIST_GPU_BASED_VALIDATION_SETTINGS; - -extern RPC_IF_HANDLE __MIDL_itf_d3d12sdklayers_0000_0012_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12sdklayers_0000_0012_v0_0_s_ifspec; - -#ifndef __ID3D12DebugCommandList1_INTERFACE_DEFINED__ -#define __ID3D12DebugCommandList1_INTERFACE_DEFINED__ - -/* interface ID3D12DebugCommandList1 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12DebugCommandList1; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("102ca951-311b-4b01-b11f-ecb83e061b37") - ID3D12DebugCommandList1 : public IUnknown - { - public: - virtual BOOL STDMETHODCALLTYPE AssertResourceState( - _In_ ID3D12Resource *pResource, - UINT Subresource, - UINT State) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetDebugParameter( - D3D12_DEBUG_COMMAND_LIST_PARAMETER_TYPE Type, - _In_reads_bytes_(DataSize) const void *pData, - UINT DataSize) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetDebugParameter( - D3D12_DEBUG_COMMAND_LIST_PARAMETER_TYPE Type, - _Out_writes_bytes_(DataSize) void *pData, - UINT DataSize) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12DebugCommandList1Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12DebugCommandList1 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12DebugCommandList1 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12DebugCommandList1 * This); - - DECLSPEC_XFGVIRT(ID3D12DebugCommandList1, AssertResourceState) - BOOL ( STDMETHODCALLTYPE *AssertResourceState )( - ID3D12DebugCommandList1 * This, - _In_ ID3D12Resource *pResource, - UINT Subresource, - UINT State); - - DECLSPEC_XFGVIRT(ID3D12DebugCommandList1, SetDebugParameter) - HRESULT ( STDMETHODCALLTYPE *SetDebugParameter )( - ID3D12DebugCommandList1 * This, - D3D12_DEBUG_COMMAND_LIST_PARAMETER_TYPE Type, - _In_reads_bytes_(DataSize) const void *pData, - UINT DataSize); - - DECLSPEC_XFGVIRT(ID3D12DebugCommandList1, GetDebugParameter) - HRESULT ( STDMETHODCALLTYPE *GetDebugParameter )( - ID3D12DebugCommandList1 * This, - D3D12_DEBUG_COMMAND_LIST_PARAMETER_TYPE Type, - _Out_writes_bytes_(DataSize) void *pData, - UINT DataSize); - - END_INTERFACE - } ID3D12DebugCommandList1Vtbl; - - interface ID3D12DebugCommandList1 - { - CONST_VTBL struct ID3D12DebugCommandList1Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12DebugCommandList1_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12DebugCommandList1_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12DebugCommandList1_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12DebugCommandList1_AssertResourceState(This,pResource,Subresource,State) \ - ( (This)->lpVtbl -> AssertResourceState(This,pResource,Subresource,State) ) - -#define ID3D12DebugCommandList1_SetDebugParameter(This,Type,pData,DataSize) \ - ( (This)->lpVtbl -> SetDebugParameter(This,Type,pData,DataSize) ) - -#define ID3D12DebugCommandList1_GetDebugParameter(This,Type,pData,DataSize) \ - ( (This)->lpVtbl -> GetDebugParameter(This,Type,pData,DataSize) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12DebugCommandList1_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12DebugCommandList_INTERFACE_DEFINED__ -#define __ID3D12DebugCommandList_INTERFACE_DEFINED__ - -/* interface ID3D12DebugCommandList */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12DebugCommandList; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("09e0bf36-54ac-484f-8847-4baeeab6053f") - ID3D12DebugCommandList : public IUnknown - { - public: - virtual BOOL STDMETHODCALLTYPE AssertResourceState( - _In_ ID3D12Resource *pResource, - UINT Subresource, - UINT State) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetFeatureMask( - D3D12_DEBUG_FEATURE Mask) = 0; - - virtual D3D12_DEBUG_FEATURE STDMETHODCALLTYPE GetFeatureMask( void) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12DebugCommandListVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12DebugCommandList * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12DebugCommandList * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12DebugCommandList * This); - - DECLSPEC_XFGVIRT(ID3D12DebugCommandList, AssertResourceState) - BOOL ( STDMETHODCALLTYPE *AssertResourceState )( - ID3D12DebugCommandList * This, - _In_ ID3D12Resource *pResource, - UINT Subresource, - UINT State); - - DECLSPEC_XFGVIRT(ID3D12DebugCommandList, SetFeatureMask) - HRESULT ( STDMETHODCALLTYPE *SetFeatureMask )( - ID3D12DebugCommandList * This, - D3D12_DEBUG_FEATURE Mask); - - DECLSPEC_XFGVIRT(ID3D12DebugCommandList, GetFeatureMask) - D3D12_DEBUG_FEATURE ( STDMETHODCALLTYPE *GetFeatureMask )( - ID3D12DebugCommandList * This); - - END_INTERFACE - } ID3D12DebugCommandListVtbl; - - interface ID3D12DebugCommandList - { - CONST_VTBL struct ID3D12DebugCommandListVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12DebugCommandList_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12DebugCommandList_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12DebugCommandList_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12DebugCommandList_AssertResourceState(This,pResource,Subresource,State) \ - ( (This)->lpVtbl -> AssertResourceState(This,pResource,Subresource,State) ) - -#define ID3D12DebugCommandList_SetFeatureMask(This,Mask) \ - ( (This)->lpVtbl -> SetFeatureMask(This,Mask) ) - -#define ID3D12DebugCommandList_GetFeatureMask(This) \ - ( (This)->lpVtbl -> GetFeatureMask(This) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12DebugCommandList_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12DebugCommandList2_INTERFACE_DEFINED__ -#define __ID3D12DebugCommandList2_INTERFACE_DEFINED__ - -/* interface ID3D12DebugCommandList2 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12DebugCommandList2; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("aeb575cf-4e06-48be-ba3b-c450fc96652e") - ID3D12DebugCommandList2 : public ID3D12DebugCommandList - { - public: - virtual HRESULT STDMETHODCALLTYPE SetDebugParameter( - D3D12_DEBUG_COMMAND_LIST_PARAMETER_TYPE Type, - _In_reads_bytes_(DataSize) const void *pData, - UINT DataSize) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetDebugParameter( - D3D12_DEBUG_COMMAND_LIST_PARAMETER_TYPE Type, - _Out_writes_bytes_(DataSize) void *pData, - UINT DataSize) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12DebugCommandList2Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12DebugCommandList2 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12DebugCommandList2 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12DebugCommandList2 * This); - - DECLSPEC_XFGVIRT(ID3D12DebugCommandList, AssertResourceState) - BOOL ( STDMETHODCALLTYPE *AssertResourceState )( - ID3D12DebugCommandList2 * This, - _In_ ID3D12Resource *pResource, - UINT Subresource, - UINT State); - - DECLSPEC_XFGVIRT(ID3D12DebugCommandList, SetFeatureMask) - HRESULT ( STDMETHODCALLTYPE *SetFeatureMask )( - ID3D12DebugCommandList2 * This, - D3D12_DEBUG_FEATURE Mask); - - DECLSPEC_XFGVIRT(ID3D12DebugCommandList, GetFeatureMask) - D3D12_DEBUG_FEATURE ( STDMETHODCALLTYPE *GetFeatureMask )( - ID3D12DebugCommandList2 * This); - - DECLSPEC_XFGVIRT(ID3D12DebugCommandList2, SetDebugParameter) - HRESULT ( STDMETHODCALLTYPE *SetDebugParameter )( - ID3D12DebugCommandList2 * This, - D3D12_DEBUG_COMMAND_LIST_PARAMETER_TYPE Type, - _In_reads_bytes_(DataSize) const void *pData, - UINT DataSize); - - DECLSPEC_XFGVIRT(ID3D12DebugCommandList2, GetDebugParameter) - HRESULT ( STDMETHODCALLTYPE *GetDebugParameter )( - ID3D12DebugCommandList2 * This, - D3D12_DEBUG_COMMAND_LIST_PARAMETER_TYPE Type, - _Out_writes_bytes_(DataSize) void *pData, - UINT DataSize); - - END_INTERFACE - } ID3D12DebugCommandList2Vtbl; - - interface ID3D12DebugCommandList2 - { - CONST_VTBL struct ID3D12DebugCommandList2Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12DebugCommandList2_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12DebugCommandList2_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12DebugCommandList2_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12DebugCommandList2_AssertResourceState(This,pResource,Subresource,State) \ - ( (This)->lpVtbl -> AssertResourceState(This,pResource,Subresource,State) ) - -#define ID3D12DebugCommandList2_SetFeatureMask(This,Mask) \ - ( (This)->lpVtbl -> SetFeatureMask(This,Mask) ) - -#define ID3D12DebugCommandList2_GetFeatureMask(This) \ - ( (This)->lpVtbl -> GetFeatureMask(This) ) - -#define ID3D12DebugCommandList2_SetDebugParameter(This,Type,pData,DataSize) \ - ( (This)->lpVtbl -> SetDebugParameter(This,Type,pData,DataSize) ) - -#define ID3D12DebugCommandList2_GetDebugParameter(This,Type,pData,DataSize) \ - ( (This)->lpVtbl -> GetDebugParameter(This,Type,pData,DataSize) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12DebugCommandList2_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12DebugCommandList3_INTERFACE_DEFINED__ -#define __ID3D12DebugCommandList3_INTERFACE_DEFINED__ - -/* interface ID3D12DebugCommandList3 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12DebugCommandList3; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("197d5e15-4d37-4d34-af78-724cd70fdb1f") - ID3D12DebugCommandList3 : public ID3D12DebugCommandList2 - { - public: - virtual void STDMETHODCALLTYPE AssertResourceAccess( - _In_ ID3D12Resource *pResource, - UINT Subresource, - D3D12_BARRIER_ACCESS Access) = 0; - - virtual void STDMETHODCALLTYPE AssertTextureLayout( - _In_ ID3D12Resource *pResource, - UINT Subresource, - D3D12_BARRIER_LAYOUT Layout) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12DebugCommandList3Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12DebugCommandList3 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12DebugCommandList3 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12DebugCommandList3 * This); - - DECLSPEC_XFGVIRT(ID3D12DebugCommandList, AssertResourceState) - BOOL ( STDMETHODCALLTYPE *AssertResourceState )( - ID3D12DebugCommandList3 * This, - _In_ ID3D12Resource *pResource, - UINT Subresource, - UINT State); - - DECLSPEC_XFGVIRT(ID3D12DebugCommandList, SetFeatureMask) - HRESULT ( STDMETHODCALLTYPE *SetFeatureMask )( - ID3D12DebugCommandList3 * This, - D3D12_DEBUG_FEATURE Mask); - - DECLSPEC_XFGVIRT(ID3D12DebugCommandList, GetFeatureMask) - D3D12_DEBUG_FEATURE ( STDMETHODCALLTYPE *GetFeatureMask )( - ID3D12DebugCommandList3 * This); - - DECLSPEC_XFGVIRT(ID3D12DebugCommandList2, SetDebugParameter) - HRESULT ( STDMETHODCALLTYPE *SetDebugParameter )( - ID3D12DebugCommandList3 * This, - D3D12_DEBUG_COMMAND_LIST_PARAMETER_TYPE Type, - _In_reads_bytes_(DataSize) const void *pData, - UINT DataSize); - - DECLSPEC_XFGVIRT(ID3D12DebugCommandList2, GetDebugParameter) - HRESULT ( STDMETHODCALLTYPE *GetDebugParameter )( - ID3D12DebugCommandList3 * This, - D3D12_DEBUG_COMMAND_LIST_PARAMETER_TYPE Type, - _Out_writes_bytes_(DataSize) void *pData, - UINT DataSize); - - DECLSPEC_XFGVIRT(ID3D12DebugCommandList3, AssertResourceAccess) - void ( STDMETHODCALLTYPE *AssertResourceAccess )( - ID3D12DebugCommandList3 * This, - _In_ ID3D12Resource *pResource, - UINT Subresource, - D3D12_BARRIER_ACCESS Access); - - DECLSPEC_XFGVIRT(ID3D12DebugCommandList3, AssertTextureLayout) - void ( STDMETHODCALLTYPE *AssertTextureLayout )( - ID3D12DebugCommandList3 * This, - _In_ ID3D12Resource *pResource, - UINT Subresource, - D3D12_BARRIER_LAYOUT Layout); - - END_INTERFACE - } ID3D12DebugCommandList3Vtbl; - - interface ID3D12DebugCommandList3 - { - CONST_VTBL struct ID3D12DebugCommandList3Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12DebugCommandList3_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12DebugCommandList3_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12DebugCommandList3_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12DebugCommandList3_AssertResourceState(This,pResource,Subresource,State) \ - ( (This)->lpVtbl -> AssertResourceState(This,pResource,Subresource,State) ) - -#define ID3D12DebugCommandList3_SetFeatureMask(This,Mask) \ - ( (This)->lpVtbl -> SetFeatureMask(This,Mask) ) - -#define ID3D12DebugCommandList3_GetFeatureMask(This) \ - ( (This)->lpVtbl -> GetFeatureMask(This) ) - -#define ID3D12DebugCommandList3_SetDebugParameter(This,Type,pData,DataSize) \ - ( (This)->lpVtbl -> SetDebugParameter(This,Type,pData,DataSize) ) - -#define ID3D12DebugCommandList3_GetDebugParameter(This,Type,pData,DataSize) \ - ( (This)->lpVtbl -> GetDebugParameter(This,Type,pData,DataSize) ) - -#define ID3D12DebugCommandList3_AssertResourceAccess(This,pResource,Subresource,Access) \ - ( (This)->lpVtbl -> AssertResourceAccess(This,pResource,Subresource,Access) ) - -#define ID3D12DebugCommandList3_AssertTextureLayout(This,pResource,Subresource,Layout) \ - ( (This)->lpVtbl -> AssertTextureLayout(This,pResource,Subresource,Layout) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12DebugCommandList3_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12SharingContract_INTERFACE_DEFINED__ -#define __ID3D12SharingContract_INTERFACE_DEFINED__ - -/* interface ID3D12SharingContract */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12SharingContract; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("0adf7d52-929c-4e61-addb-ffed30de66ef") - ID3D12SharingContract : public IUnknown - { - public: - virtual void STDMETHODCALLTYPE Present( - _In_ ID3D12Resource *pResource, - UINT Subresource, - _In_ HWND window) = 0; - - virtual void STDMETHODCALLTYPE SharedFenceSignal( - _In_ ID3D12Fence *pFence, - UINT64 FenceValue) = 0; - - virtual void STDMETHODCALLTYPE BeginCapturableWork( - _In_ REFGUID guid) = 0; - - virtual void STDMETHODCALLTYPE EndCapturableWork( - _In_ REFGUID guid) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12SharingContractVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12SharingContract * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12SharingContract * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12SharingContract * This); - - DECLSPEC_XFGVIRT(ID3D12SharingContract, Present) - void ( STDMETHODCALLTYPE *Present )( - ID3D12SharingContract * This, - _In_ ID3D12Resource *pResource, - UINT Subresource, - _In_ HWND window); - - DECLSPEC_XFGVIRT(ID3D12SharingContract, SharedFenceSignal) - void ( STDMETHODCALLTYPE *SharedFenceSignal )( - ID3D12SharingContract * This, - _In_ ID3D12Fence *pFence, - UINT64 FenceValue); - - DECLSPEC_XFGVIRT(ID3D12SharingContract, BeginCapturableWork) - void ( STDMETHODCALLTYPE *BeginCapturableWork )( - ID3D12SharingContract * This, - _In_ REFGUID guid); - - DECLSPEC_XFGVIRT(ID3D12SharingContract, EndCapturableWork) - void ( STDMETHODCALLTYPE *EndCapturableWork )( - ID3D12SharingContract * This, - _In_ REFGUID guid); - - END_INTERFACE - } ID3D12SharingContractVtbl; - - interface ID3D12SharingContract - { - CONST_VTBL struct ID3D12SharingContractVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12SharingContract_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12SharingContract_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12SharingContract_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12SharingContract_Present(This,pResource,Subresource,window) \ - ( (This)->lpVtbl -> Present(This,pResource,Subresource,window) ) - -#define ID3D12SharingContract_SharedFenceSignal(This,pFence,FenceValue) \ - ( (This)->lpVtbl -> SharedFenceSignal(This,pFence,FenceValue) ) - -#define ID3D12SharingContract_BeginCapturableWork(This,guid) \ - ( (This)->lpVtbl -> BeginCapturableWork(This,guid) ) - -#define ID3D12SharingContract_EndCapturableWork(This,guid) \ - ( (This)->lpVtbl -> EndCapturableWork(This,guid) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12SharingContract_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12ManualWriteTrackingResource_INTERFACE_DEFINED__ -#define __ID3D12ManualWriteTrackingResource_INTERFACE_DEFINED__ - -/* interface ID3D12ManualWriteTrackingResource */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12ManualWriteTrackingResource; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("86ca3b85-49ad-4b6e-aed5-eddb18540f41") - ID3D12ManualWriteTrackingResource : public IUnknown - { - public: - virtual void STDMETHODCALLTYPE TrackWrite( - UINT Subresource, - _In_opt_ const D3D12_RANGE *pWrittenRange) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12ManualWriteTrackingResourceVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12ManualWriteTrackingResource * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12ManualWriteTrackingResource * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12ManualWriteTrackingResource * This); - - DECLSPEC_XFGVIRT(ID3D12ManualWriteTrackingResource, TrackWrite) - void ( STDMETHODCALLTYPE *TrackWrite )( - ID3D12ManualWriteTrackingResource * This, - UINT Subresource, - _In_opt_ const D3D12_RANGE *pWrittenRange); - - END_INTERFACE - } ID3D12ManualWriteTrackingResourceVtbl; - - interface ID3D12ManualWriteTrackingResource - { - CONST_VTBL struct ID3D12ManualWriteTrackingResourceVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12ManualWriteTrackingResource_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12ManualWriteTrackingResource_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12ManualWriteTrackingResource_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12ManualWriteTrackingResource_TrackWrite(This,Subresource,pWrittenRange) \ - ( (This)->lpVtbl -> TrackWrite(This,Subresource,pWrittenRange) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12ManualWriteTrackingResource_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12sdklayers_0000_0018 */ -/* [local] */ - -typedef -enum D3D12_MESSAGE_CATEGORY - { - D3D12_MESSAGE_CATEGORY_APPLICATION_DEFINED = 0, - D3D12_MESSAGE_CATEGORY_MISCELLANEOUS = ( D3D12_MESSAGE_CATEGORY_APPLICATION_DEFINED + 1 ) , - D3D12_MESSAGE_CATEGORY_INITIALIZATION = ( D3D12_MESSAGE_CATEGORY_MISCELLANEOUS + 1 ) , - D3D12_MESSAGE_CATEGORY_CLEANUP = ( D3D12_MESSAGE_CATEGORY_INITIALIZATION + 1 ) , - D3D12_MESSAGE_CATEGORY_COMPILATION = ( D3D12_MESSAGE_CATEGORY_CLEANUP + 1 ) , - D3D12_MESSAGE_CATEGORY_STATE_CREATION = ( D3D12_MESSAGE_CATEGORY_COMPILATION + 1 ) , - D3D12_MESSAGE_CATEGORY_STATE_SETTING = ( D3D12_MESSAGE_CATEGORY_STATE_CREATION + 1 ) , - D3D12_MESSAGE_CATEGORY_STATE_GETTING = ( D3D12_MESSAGE_CATEGORY_STATE_SETTING + 1 ) , - D3D12_MESSAGE_CATEGORY_RESOURCE_MANIPULATION = ( D3D12_MESSAGE_CATEGORY_STATE_GETTING + 1 ) , - D3D12_MESSAGE_CATEGORY_EXECUTION = ( D3D12_MESSAGE_CATEGORY_RESOURCE_MANIPULATION + 1 ) , - D3D12_MESSAGE_CATEGORY_SHADER = ( D3D12_MESSAGE_CATEGORY_EXECUTION + 1 ) - } D3D12_MESSAGE_CATEGORY; - -typedef -enum D3D12_MESSAGE_SEVERITY - { - D3D12_MESSAGE_SEVERITY_CORRUPTION = 0, - D3D12_MESSAGE_SEVERITY_ERROR = ( D3D12_MESSAGE_SEVERITY_CORRUPTION + 1 ) , - D3D12_MESSAGE_SEVERITY_WARNING = ( D3D12_MESSAGE_SEVERITY_ERROR + 1 ) , - D3D12_MESSAGE_SEVERITY_INFO = ( D3D12_MESSAGE_SEVERITY_WARNING + 1 ) , - D3D12_MESSAGE_SEVERITY_MESSAGE = ( D3D12_MESSAGE_SEVERITY_INFO + 1 ) - } D3D12_MESSAGE_SEVERITY; - -typedef -enum D3D12_MESSAGE_ID - { - D3D12_MESSAGE_ID_UNKNOWN = 0, - D3D12_MESSAGE_ID_STRING_FROM_APPLICATION = 1, - D3D12_MESSAGE_ID_CORRUPTED_THIS = 2, - D3D12_MESSAGE_ID_CORRUPTED_PARAMETER1 = 3, - D3D12_MESSAGE_ID_CORRUPTED_PARAMETER2 = 4, - D3D12_MESSAGE_ID_CORRUPTED_PARAMETER3 = 5, - D3D12_MESSAGE_ID_CORRUPTED_PARAMETER4 = 6, - D3D12_MESSAGE_ID_CORRUPTED_PARAMETER5 = 7, - D3D12_MESSAGE_ID_CORRUPTED_PARAMETER6 = 8, - D3D12_MESSAGE_ID_CORRUPTED_PARAMETER7 = 9, - D3D12_MESSAGE_ID_CORRUPTED_PARAMETER8 = 10, - D3D12_MESSAGE_ID_CORRUPTED_PARAMETER9 = 11, - D3D12_MESSAGE_ID_CORRUPTED_PARAMETER10 = 12, - D3D12_MESSAGE_ID_CORRUPTED_PARAMETER11 = 13, - D3D12_MESSAGE_ID_CORRUPTED_PARAMETER12 = 14, - D3D12_MESSAGE_ID_CORRUPTED_PARAMETER13 = 15, - D3D12_MESSAGE_ID_CORRUPTED_PARAMETER14 = 16, - D3D12_MESSAGE_ID_CORRUPTED_PARAMETER15 = 17, - D3D12_MESSAGE_ID_CORRUPTED_MULTITHREADING = 18, - D3D12_MESSAGE_ID_MESSAGE_REPORTING_OUTOFMEMORY = 19, - D3D12_MESSAGE_ID_GETPRIVATEDATA_MOREDATA = 20, - D3D12_MESSAGE_ID_SETPRIVATEDATA_INVALIDFREEDATA = 21, - D3D12_MESSAGE_ID_SETPRIVATEDATA_CHANGINGPARAMS = 24, - D3D12_MESSAGE_ID_SETPRIVATEDATA_OUTOFMEMORY = 25, - D3D12_MESSAGE_ID_CREATESHADERRESOURCEVIEW_UNRECOGNIZEDFORMAT = 26, - D3D12_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDESC = 27, - D3D12_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDFORMAT = 28, - D3D12_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDVIDEOPLANESLICE = 29, - D3D12_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDPLANESLICE = 30, - D3D12_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDIMENSIONS = 31, - D3D12_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDRESOURCE = 32, - D3D12_MESSAGE_ID_CREATERENDERTARGETVIEW_UNRECOGNIZEDFORMAT = 35, - D3D12_MESSAGE_ID_CREATERENDERTARGETVIEW_UNSUPPORTEDFORMAT = 36, - D3D12_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDESC = 37, - D3D12_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDFORMAT = 38, - D3D12_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDVIDEOPLANESLICE = 39, - D3D12_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDPLANESLICE = 40, - D3D12_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDIMENSIONS = 41, - D3D12_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDRESOURCE = 42, - D3D12_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_UNRECOGNIZEDFORMAT = 45, - D3D12_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDESC = 46, - D3D12_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDFORMAT = 47, - D3D12_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDIMENSIONS = 48, - D3D12_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDRESOURCE = 49, - D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_OUTOFMEMORY = 52, - D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_TOOMANYELEMENTS = 53, - D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDFORMAT = 54, - D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_INCOMPATIBLEFORMAT = 55, - D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOT = 56, - D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDINPUTSLOTCLASS = 57, - D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_STEPRATESLOTCLASSMISMATCH = 58, - D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOTCLASSCHANGE = 59, - D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSTEPRATECHANGE = 60, - D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDALIGNMENT = 61, - D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_DUPLICATESEMANTIC = 62, - D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_UNPARSEABLEINPUTSIGNATURE = 63, - D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_NULLSEMANTIC = 64, - D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_MISSINGELEMENT = 65, - D3D12_MESSAGE_ID_CREATEVERTEXSHADER_OUTOFMEMORY = 66, - D3D12_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERBYTECODE = 67, - D3D12_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERTYPE = 68, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADER_OUTOFMEMORY = 69, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERBYTECODE = 70, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERTYPE = 71, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTOFMEMORY = 72, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERBYTECODE = 73, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERTYPE = 74, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMENTRIES = 75, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSTREAMSTRIDEUNUSED = 76, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSLOT0EXPECTED = 79, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSLOT = 80, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_ONLYONEELEMENTPERSLOT = 81, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDCOMPONENTCOUNT = 82, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTARTCOMPONENTANDCOMPONENTCOUNT = 83, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDGAPDEFINITION = 84, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_REPEATEDOUTPUT = 85, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSTREAMSTRIDE = 86, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGSEMANTIC = 87, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MASKMISMATCH = 88, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_CANTHAVEONLYGAPS = 89, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DECLTOOCOMPLEX = 90, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGOUTPUTSIGNATURE = 91, - D3D12_MESSAGE_ID_CREATEPIXELSHADER_OUTOFMEMORY = 92, - D3D12_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERBYTECODE = 93, - D3D12_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERTYPE = 94, - D3D12_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDFILLMODE = 95, - D3D12_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDCULLMODE = 96, - D3D12_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDDEPTHBIASCLAMP = 97, - D3D12_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDSLOPESCALEDDEPTHBIAS = 98, - D3D12_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHWRITEMASK = 100, - D3D12_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHFUNC = 101, - D3D12_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFAILOP = 102, - D3D12_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILZFAILOP = 103, - D3D12_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILPASSOP = 104, - D3D12_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFUNC = 105, - D3D12_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFAILOP = 106, - D3D12_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILZFAILOP = 107, - D3D12_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILPASSOP = 108, - D3D12_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFUNC = 109, - D3D12_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLEND = 111, - D3D12_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLEND = 112, - D3D12_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOP = 113, - D3D12_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLENDALPHA = 114, - D3D12_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLENDALPHA = 115, - D3D12_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOPALPHA = 116, - D3D12_MESSAGE_ID_CREATEBLENDSTATE_INVALIDRENDERTARGETWRITEMASK = 117, - D3D12_MESSAGE_ID_GET_PROGRAM_IDENTIFIER_ERROR = 118, - D3D12_MESSAGE_ID_GET_WORK_GRAPH_PROPERTIES_ERROR = 119, - D3D12_MESSAGE_ID_SET_PROGRAM_ERROR = 120, - D3D12_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_INVALID = 135, - D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_ROOT_SIGNATURE_NOT_SET = 200, - D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_ROOT_SIGNATURE_MISMATCH = 201, - D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_VERTEX_BUFFER_NOT_SET = 202, - D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_VERTEX_BUFFER_STRIDE_TOO_SMALL = 209, - D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_VERTEX_BUFFER_TOO_SMALL = 210, - D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_INDEX_BUFFER_NOT_SET = 211, - D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_INDEX_BUFFER_FORMAT_INVALID = 212, - D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_INDEX_BUFFER_TOO_SMALL = 213, - D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_INVALID_PRIMITIVETOPOLOGY = 219, - D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_VERTEX_STRIDE_UNALIGNED = 221, - D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_INDEX_OFFSET_UNALIGNED = 222, - D3D12_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_AT_FAULT = 232, - D3D12_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_POSSIBLY_AT_FAULT = 233, - D3D12_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_NOT_AT_FAULT = 234, - D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_TRAILING_DIGIT_IN_SEMANTIC = 239, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_TRAILING_DIGIT_IN_SEMANTIC = 240, - D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_TYPE_MISMATCH = 245, - D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_EMPTY_LAYOUT = 253, - D3D12_MESSAGE_ID_LIVE_OBJECT_SUMMARY = 255, - D3D12_MESSAGE_ID_LIVE_DEVICE = 274, - D3D12_MESSAGE_ID_LIVE_SWAPCHAIN = 275, - D3D12_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDFLAGS = 276, - D3D12_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDCLASSLINKAGE = 277, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDCLASSLINKAGE = 278, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTREAMTORASTERIZER = 280, - D3D12_MESSAGE_ID_CREATEPIXELSHADER_INVALIDCLASSLINKAGE = 283, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTREAM = 284, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDENTRIES = 285, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDSTRIDES = 286, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMSTRIDES = 287, - D3D12_MESSAGE_ID_CREATEHULLSHADER_OUTOFMEMORY = 289, - D3D12_MESSAGE_ID_CREATEHULLSHADER_INVALIDSHADERBYTECODE = 290, - D3D12_MESSAGE_ID_CREATEHULLSHADER_INVALIDSHADERTYPE = 291, - D3D12_MESSAGE_ID_CREATEHULLSHADER_INVALIDCLASSLINKAGE = 292, - D3D12_MESSAGE_ID_CREATEDOMAINSHADER_OUTOFMEMORY = 294, - D3D12_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDSHADERBYTECODE = 295, - D3D12_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDSHADERTYPE = 296, - D3D12_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDCLASSLINKAGE = 297, - D3D12_MESSAGE_ID_RESOURCE_UNMAP_NOTMAPPED = 310, - D3D12_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_MISMATCHED_DATA_SIZE = 318, - D3D12_MESSAGE_ID_CREATECOMPUTESHADER_OUTOFMEMORY = 321, - D3D12_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDSHADERBYTECODE = 322, - D3D12_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDCLASSLINKAGE = 323, - D3D12_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_DOUBLEFLOATOPSNOTSUPPORTED = 331, - D3D12_MESSAGE_ID_DEVICE_CREATEHULLSHADER_DOUBLEFLOATOPSNOTSUPPORTED = 332, - D3D12_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_DOUBLEFLOATOPSNOTSUPPORTED = 333, - D3D12_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_DOUBLEFLOATOPSNOTSUPPORTED = 334, - D3D12_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DOUBLEFLOATOPSNOTSUPPORTED = 335, - D3D12_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_DOUBLEFLOATOPSNOTSUPPORTED = 336, - D3D12_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_DOUBLEFLOATOPSNOTSUPPORTED = 337, - D3D12_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDRESOURCE = 340, - D3D12_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDDESC = 341, - D3D12_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDFORMAT = 342, - D3D12_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDVIDEOPLANESLICE = 343, - D3D12_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDPLANESLICE = 344, - D3D12_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDDIMENSIONS = 345, - D3D12_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_UNRECOGNIZEDFORMAT = 346, - D3D12_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDFLAGS = 354, - D3D12_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDFORCEDSAMPLECOUNT = 401, - D3D12_MESSAGE_ID_CREATEBLENDSTATE_INVALIDLOGICOPS = 403, - D3D12_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_DOUBLEEXTENSIONSNOTSUPPORTED = 410, - D3D12_MESSAGE_ID_DEVICE_CREATEHULLSHADER_DOUBLEEXTENSIONSNOTSUPPORTED = 412, - D3D12_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_DOUBLEEXTENSIONSNOTSUPPORTED = 414, - D3D12_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_DOUBLEEXTENSIONSNOTSUPPORTED = 416, - D3D12_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DOUBLEEXTENSIONSNOTSUPPORTED = 418, - D3D12_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_DOUBLEEXTENSIONSNOTSUPPORTED = 420, - D3D12_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_DOUBLEEXTENSIONSNOTSUPPORTED = 422, - D3D12_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_UAVSNOTSUPPORTED = 425, - D3D12_MESSAGE_ID_DEVICE_CREATEHULLSHADER_UAVSNOTSUPPORTED = 426, - D3D12_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_UAVSNOTSUPPORTED = 427, - D3D12_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_UAVSNOTSUPPORTED = 428, - D3D12_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UAVSNOTSUPPORTED = 429, - D3D12_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_UAVSNOTSUPPORTED = 430, - D3D12_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_UAVSNOTSUPPORTED = 431, - D3D12_MESSAGE_ID_DEVICE_CLEARVIEW_INVALIDSOURCERECT = 447, - D3D12_MESSAGE_ID_DEVICE_CLEARVIEW_EMPTYRECT = 448, - D3D12_MESSAGE_ID_UPDATETILEMAPPINGS_INVALID_PARAMETER = 493, - D3D12_MESSAGE_ID_COPYTILEMAPPINGS_INVALID_PARAMETER = 494, - D3D12_MESSAGE_ID_CREATEDEVICE_INVALIDARGS = 506, - D3D12_MESSAGE_ID_CREATEDEVICE_WARNING = 507, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_INVALID_TYPE = 519, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_NULL_POINTER = 520, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_INVALID_SUBRESOURCE = 521, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_RESERVED_BITS = 522, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_MISSING_BIND_FLAGS = 523, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_MISMATCHING_MISC_FLAGS = 524, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_MATCHING_STATES = 525, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_INVALID_COMBINATION = 526, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_BEFORE_AFTER_MISMATCH = 527, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_INVALID_RESOURCE = 528, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_SAMPLE_COUNT = 529, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_INVALID_FLAGS = 530, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_INVALID_COMBINED_FLAGS = 531, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_INVALID_FLAGS_FOR_FORMAT = 532, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_INVALID_SPLIT_BARRIER = 533, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_UNMATCHED_END = 534, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_UNMATCHED_BEGIN = 535, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_INVALID_FLAG = 536, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_INVALID_COMMAND_LIST_TYPE = 537, - D3D12_MESSAGE_ID_INVALID_SUBRESOURCE_STATE = 538, - D3D12_MESSAGE_ID_COMMAND_ALLOCATOR_CONTENTION = 540, - D3D12_MESSAGE_ID_COMMAND_ALLOCATOR_RESET = 541, - D3D12_MESSAGE_ID_COMMAND_ALLOCATOR_RESET_BUNDLE = 542, - D3D12_MESSAGE_ID_COMMAND_ALLOCATOR_CANNOT_RESET = 543, - D3D12_MESSAGE_ID_COMMAND_LIST_OPEN = 544, - D3D12_MESSAGE_ID_INVALID_BUNDLE_API = 546, - D3D12_MESSAGE_ID_COMMAND_LIST_CLOSED = 547, - D3D12_MESSAGE_ID_WRONG_COMMAND_ALLOCATOR_TYPE = 549, - D3D12_MESSAGE_ID_COMMAND_ALLOCATOR_SYNC = 552, - D3D12_MESSAGE_ID_COMMAND_LIST_SYNC = 553, - D3D12_MESSAGE_ID_SET_DESCRIPTOR_HEAP_INVALID = 554, - D3D12_MESSAGE_ID_CREATE_COMMANDQUEUE = 557, - D3D12_MESSAGE_ID_CREATE_COMMANDALLOCATOR = 558, - D3D12_MESSAGE_ID_CREATE_PIPELINESTATE = 559, - D3D12_MESSAGE_ID_CREATE_COMMANDLIST12 = 560, - D3D12_MESSAGE_ID_CREATE_RESOURCE = 562, - D3D12_MESSAGE_ID_CREATE_DESCRIPTORHEAP = 563, - D3D12_MESSAGE_ID_CREATE_ROOTSIGNATURE = 564, - D3D12_MESSAGE_ID_CREATE_LIBRARY = 565, - D3D12_MESSAGE_ID_CREATE_HEAP = 566, - D3D12_MESSAGE_ID_CREATE_MONITOREDFENCE = 567, - D3D12_MESSAGE_ID_CREATE_QUERYHEAP = 568, - D3D12_MESSAGE_ID_CREATE_COMMANDSIGNATURE = 569, - D3D12_MESSAGE_ID_LIVE_COMMANDQUEUE = 570, - D3D12_MESSAGE_ID_LIVE_COMMANDALLOCATOR = 571, - D3D12_MESSAGE_ID_LIVE_PIPELINESTATE = 572, - D3D12_MESSAGE_ID_LIVE_COMMANDLIST12 = 573, - D3D12_MESSAGE_ID_LIVE_RESOURCE = 575, - D3D12_MESSAGE_ID_LIVE_DESCRIPTORHEAP = 576, - D3D12_MESSAGE_ID_LIVE_ROOTSIGNATURE = 577, - D3D12_MESSAGE_ID_LIVE_LIBRARY = 578, - D3D12_MESSAGE_ID_LIVE_HEAP = 579, - D3D12_MESSAGE_ID_LIVE_MONITOREDFENCE = 580, - D3D12_MESSAGE_ID_LIVE_QUERYHEAP = 581, - D3D12_MESSAGE_ID_LIVE_COMMANDSIGNATURE = 582, - D3D12_MESSAGE_ID_DESTROY_COMMANDQUEUE = 583, - D3D12_MESSAGE_ID_DESTROY_COMMANDALLOCATOR = 584, - D3D12_MESSAGE_ID_DESTROY_PIPELINESTATE = 585, - D3D12_MESSAGE_ID_DESTROY_COMMANDLIST12 = 586, - D3D12_MESSAGE_ID_DESTROY_RESOURCE = 588, - D3D12_MESSAGE_ID_DESTROY_DESCRIPTORHEAP = 589, - D3D12_MESSAGE_ID_DESTROY_ROOTSIGNATURE = 590, - D3D12_MESSAGE_ID_DESTROY_LIBRARY = 591, - D3D12_MESSAGE_ID_DESTROY_HEAP = 592, - D3D12_MESSAGE_ID_DESTROY_MONITOREDFENCE = 593, - D3D12_MESSAGE_ID_DESTROY_QUERYHEAP = 594, - D3D12_MESSAGE_ID_DESTROY_COMMANDSIGNATURE = 595, - D3D12_MESSAGE_ID_CREATERESOURCE_INVALIDDIMENSIONS = 597, - D3D12_MESSAGE_ID_CREATERESOURCE_INVALIDMISCFLAGS = 599, - D3D12_MESSAGE_ID_CREATERESOURCE_INVALIDARG_RETURN = 602, - D3D12_MESSAGE_ID_CREATERESOURCE_OUTOFMEMORY_RETURN = 603, - D3D12_MESSAGE_ID_CREATERESOURCE_INVALIDDESC = 604, - D3D12_MESSAGE_ID_POSSIBLY_INVALID_SUBRESOURCE_STATE = 607, - D3D12_MESSAGE_ID_INVALID_USE_OF_NON_RESIDENT_RESOURCE = 608, - D3D12_MESSAGE_ID_POSSIBLE_INVALID_USE_OF_NON_RESIDENT_RESOURCE = 609, - D3D12_MESSAGE_ID_BUNDLE_PIPELINE_STATE_MISMATCH = 610, - D3D12_MESSAGE_ID_PRIMITIVE_TOPOLOGY_MISMATCH_PIPELINE_STATE = 611, - D3D12_MESSAGE_ID_RENDER_TARGET_FORMAT_MISMATCH_PIPELINE_STATE = 613, - D3D12_MESSAGE_ID_RENDER_TARGET_SAMPLE_DESC_MISMATCH_PIPELINE_STATE = 614, - D3D12_MESSAGE_ID_DEPTH_STENCIL_FORMAT_MISMATCH_PIPELINE_STATE = 615, - D3D12_MESSAGE_ID_DEPTH_STENCIL_SAMPLE_DESC_MISMATCH_PIPELINE_STATE = 616, - D3D12_MESSAGE_ID_CREATESHADER_INVALIDBYTECODE = 622, - D3D12_MESSAGE_ID_CREATEHEAP_NULLDESC = 623, - D3D12_MESSAGE_ID_CREATEHEAP_INVALIDSIZE = 624, - D3D12_MESSAGE_ID_CREATEHEAP_UNRECOGNIZEDHEAPTYPE = 625, - D3D12_MESSAGE_ID_CREATEHEAP_UNRECOGNIZEDCPUPAGEPROPERTIES = 626, - D3D12_MESSAGE_ID_CREATEHEAP_UNRECOGNIZEDMEMORYPOOL = 627, - D3D12_MESSAGE_ID_CREATEHEAP_INVALIDPROPERTIES = 628, - D3D12_MESSAGE_ID_CREATEHEAP_INVALIDALIGNMENT = 629, - D3D12_MESSAGE_ID_CREATEHEAP_UNRECOGNIZEDMISCFLAGS = 630, - D3D12_MESSAGE_ID_CREATEHEAP_INVALIDMISCFLAGS = 631, - D3D12_MESSAGE_ID_CREATEHEAP_INVALIDARG_RETURN = 632, - D3D12_MESSAGE_ID_CREATEHEAP_OUTOFMEMORY_RETURN = 633, - D3D12_MESSAGE_ID_CREATERESOURCEANDHEAP_NULLHEAPPROPERTIES = 634, - D3D12_MESSAGE_ID_CREATERESOURCEANDHEAP_UNRECOGNIZEDHEAPTYPE = 635, - D3D12_MESSAGE_ID_CREATERESOURCEANDHEAP_UNRECOGNIZEDCPUPAGEPROPERTIES = 636, - D3D12_MESSAGE_ID_CREATERESOURCEANDHEAP_UNRECOGNIZEDMEMORYPOOL = 637, - D3D12_MESSAGE_ID_CREATERESOURCEANDHEAP_INVALIDHEAPPROPERTIES = 638, - D3D12_MESSAGE_ID_CREATERESOURCEANDHEAP_UNRECOGNIZEDHEAPMISCFLAGS = 639, - D3D12_MESSAGE_ID_CREATERESOURCEANDHEAP_INVALIDHEAPMISCFLAGS = 640, - D3D12_MESSAGE_ID_CREATERESOURCEANDHEAP_INVALIDARG_RETURN = 641, - D3D12_MESSAGE_ID_CREATERESOURCEANDHEAP_OUTOFMEMORY_RETURN = 642, - D3D12_MESSAGE_ID_GETCUSTOMHEAPPROPERTIES_UNRECOGNIZEDHEAPTYPE = 643, - D3D12_MESSAGE_ID_GETCUSTOMHEAPPROPERTIES_INVALIDHEAPTYPE = 644, - D3D12_MESSAGE_ID_CREATE_DESCRIPTOR_HEAP_INVALID_DESC = 645, - D3D12_MESSAGE_ID_INVALID_DESCRIPTOR_HANDLE = 646, - D3D12_MESSAGE_ID_CREATERASTERIZERSTATE_INVALID_CONSERVATIVERASTERMODE = 647, - D3D12_MESSAGE_ID_CREATE_CONSTANT_BUFFER_VIEW_INVALID_RESOURCE = 649, - D3D12_MESSAGE_ID_CREATE_CONSTANT_BUFFER_VIEW_INVALID_DESC = 650, - D3D12_MESSAGE_ID_CREATE_UNORDEREDACCESS_VIEW_INVALID_COUNTER_USAGE = 652, - D3D12_MESSAGE_ID_COPY_DESCRIPTORS_INVALID_RANGES = 653, - D3D12_MESSAGE_ID_COPY_DESCRIPTORS_WRITE_ONLY_DESCRIPTOR = 654, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_RTV_FORMAT_NOT_UNKNOWN = 655, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_INVALID_RENDER_TARGET_COUNT = 656, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_VERTEX_SHADER_NOT_SET = 657, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_INPUTLAYOUT_NOT_SET = 658, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_SHADER_LINKAGE_HS_DS_SIGNATURE_MISMATCH = 659, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_SHADER_LINKAGE_REGISTERINDEX = 660, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_SHADER_LINKAGE_COMPONENTTYPE = 661, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_SHADER_LINKAGE_REGISTERMASK = 662, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_SHADER_LINKAGE_SYSTEMVALUE = 663, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_SHADER_LINKAGE_NEVERWRITTEN_ALWAYSREADS = 664, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_SHADER_LINKAGE_MINPRECISION = 665, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_SHADER_LINKAGE_SEMANTICNAME_NOT_FOUND = 666, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_HS_XOR_DS_MISMATCH = 667, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_HULL_SHADER_INPUT_TOPOLOGY_MISMATCH = 668, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_HS_DS_CONTROL_POINT_COUNT_MISMATCH = 669, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_HS_DS_TESSELLATOR_DOMAIN_MISMATCH = 670, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_INVALID_USE_OF_CENTER_MULTISAMPLE_PATTERN = 671, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_INVALID_USE_OF_FORCED_SAMPLE_COUNT = 672, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_INVALID_PRIMITIVETOPOLOGY = 673, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_INVALID_SYSTEMVALUE = 674, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_OM_DUAL_SOURCE_BLENDING_CAN_ONLY_HAVE_RENDER_TARGET_0 = 675, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_OM_RENDER_TARGET_DOES_NOT_SUPPORT_BLENDING = 676, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_PS_OUTPUT_TYPE_MISMATCH = 677, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_OM_RENDER_TARGET_DOES_NOT_SUPPORT_LOGIC_OPS = 678, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_RENDERTARGETVIEW_NOT_SET = 679, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_DEPTHSTENCILVIEW_NOT_SET = 680, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_GS_INPUT_PRIMITIVE_MISMATCH = 681, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_POSITION_NOT_PRESENT = 682, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_MISSING_ROOT_SIGNATURE_FLAGS = 683, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_INVALID_INDEX_BUFFER_PROPERTIES = 684, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_INVALID_SAMPLE_DESC = 685, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_HS_ROOT_SIGNATURE_MISMATCH = 686, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_DS_ROOT_SIGNATURE_MISMATCH = 687, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_VS_ROOT_SIGNATURE_MISMATCH = 688, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_GS_ROOT_SIGNATURE_MISMATCH = 689, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_PS_ROOT_SIGNATURE_MISMATCH = 690, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_MISSING_ROOT_SIGNATURE = 691, - D3D12_MESSAGE_ID_EXECUTE_BUNDLE_OPEN_BUNDLE = 692, - D3D12_MESSAGE_ID_EXECUTE_BUNDLE_DESCRIPTOR_HEAP_MISMATCH = 693, - D3D12_MESSAGE_ID_EXECUTE_BUNDLE_TYPE = 694, - D3D12_MESSAGE_ID_DRAW_EMPTY_SCISSOR_RECTANGLE = 695, - D3D12_MESSAGE_ID_CREATE_ROOT_SIGNATURE_BLOB_NOT_FOUND = 696, - D3D12_MESSAGE_ID_CREATE_ROOT_SIGNATURE_DESERIALIZE_FAILED = 697, - D3D12_MESSAGE_ID_CREATE_ROOT_SIGNATURE_INVALID_CONFIGURATION = 698, - D3D12_MESSAGE_ID_CREATE_ROOT_SIGNATURE_NOT_SUPPORTED_ON_DEVICE = 699, - D3D12_MESSAGE_ID_CREATERESOURCEANDHEAP_NULLRESOURCEPROPERTIES = 700, - D3D12_MESSAGE_ID_CREATERESOURCEANDHEAP_NULLHEAP = 701, - D3D12_MESSAGE_ID_GETRESOURCEALLOCATIONINFO_INVALIDRDESCS = 702, - D3D12_MESSAGE_ID_MAKERESIDENT_NULLOBJECTARRAY = 703, - D3D12_MESSAGE_ID_EVICT_NULLOBJECTARRAY = 705, - D3D12_MESSAGE_ID_SET_DESCRIPTOR_TABLE_INVALID = 708, - D3D12_MESSAGE_ID_SET_ROOT_CONSTANT_INVALID = 709, - D3D12_MESSAGE_ID_SET_ROOT_CONSTANT_BUFFER_VIEW_INVALID = 710, - D3D12_MESSAGE_ID_SET_ROOT_SHADER_RESOURCE_VIEW_INVALID = 711, - D3D12_MESSAGE_ID_SET_ROOT_UNORDERED_ACCESS_VIEW_INVALID = 712, - D3D12_MESSAGE_ID_SET_VERTEX_BUFFERS_INVALID_DESC = 713, - D3D12_MESSAGE_ID_SET_INDEX_BUFFER_INVALID_DESC = 715, - D3D12_MESSAGE_ID_SET_STREAM_OUTPUT_BUFFERS_INVALID_DESC = 717, - D3D12_MESSAGE_ID_CREATERESOURCE_UNRECOGNIZEDDIMENSIONALITY = 718, - D3D12_MESSAGE_ID_CREATERESOURCE_UNRECOGNIZEDLAYOUT = 719, - D3D12_MESSAGE_ID_CREATERESOURCE_INVALIDDIMENSIONALITY = 720, - D3D12_MESSAGE_ID_CREATERESOURCE_INVALIDALIGNMENT = 721, - D3D12_MESSAGE_ID_CREATERESOURCE_INVALIDMIPLEVELS = 722, - D3D12_MESSAGE_ID_CREATERESOURCE_INVALIDSAMPLEDESC = 723, - D3D12_MESSAGE_ID_CREATERESOURCE_INVALIDLAYOUT = 724, - D3D12_MESSAGE_ID_SET_INDEX_BUFFER_INVALID = 725, - D3D12_MESSAGE_ID_SET_VERTEX_BUFFERS_INVALID = 726, - D3D12_MESSAGE_ID_SET_STREAM_OUTPUT_BUFFERS_INVALID = 727, - D3D12_MESSAGE_ID_SET_RENDER_TARGETS_INVALID = 728, - D3D12_MESSAGE_ID_CREATEQUERY_HEAP_INVALID_PARAMETERS = 729, - D3D12_MESSAGE_ID_BEGIN_END_QUERY_INVALID_PARAMETERS = 731, - D3D12_MESSAGE_ID_CLOSE_COMMAND_LIST_OPEN_QUERY = 732, - D3D12_MESSAGE_ID_RESOLVE_QUERY_DATA_INVALID_PARAMETERS = 733, - D3D12_MESSAGE_ID_SET_PREDICATION_INVALID_PARAMETERS = 734, - D3D12_MESSAGE_ID_TIMESTAMPS_NOT_SUPPORTED = 735, - D3D12_MESSAGE_ID_CREATERESOURCE_UNRECOGNIZEDFORMAT = 737, - D3D12_MESSAGE_ID_CREATERESOURCE_INVALIDFORMAT = 738, - D3D12_MESSAGE_ID_GETCOPYABLEFOOTPRINTS_INVALIDSUBRESOURCERANGE = 739, - D3D12_MESSAGE_ID_GETCOPYABLEFOOTPRINTS_INVALIDBASEOFFSET = 740, - D3D12_MESSAGE_ID_GETCOPYABLELAYOUT_INVALIDSUBRESOURCERANGE = 739, - D3D12_MESSAGE_ID_GETCOPYABLELAYOUT_INVALIDBASEOFFSET = 740, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_INVALID_HEAP = 741, - D3D12_MESSAGE_ID_CREATE_SAMPLER_INVALID = 742, - D3D12_MESSAGE_ID_CREATECOMMANDSIGNATURE_INVALID = 743, - D3D12_MESSAGE_ID_EXECUTE_INDIRECT_INVALID_PARAMETERS = 744, - D3D12_MESSAGE_ID_GETGPUVIRTUALADDRESS_INVALID_RESOURCE_DIMENSION = 745, - D3D12_MESSAGE_ID_CREATERESOURCE_INVALIDCLEARVALUE = 815, - D3D12_MESSAGE_ID_CREATERESOURCE_UNRECOGNIZEDCLEARVALUEFORMAT = 816, - D3D12_MESSAGE_ID_CREATERESOURCE_INVALIDCLEARVALUEFORMAT = 817, - D3D12_MESSAGE_ID_CREATERESOURCE_CLEARVALUEDENORMFLUSH = 818, - D3D12_MESSAGE_ID_CLEARRENDERTARGETVIEW_MISMATCHINGCLEARVALUE = 820, - D3D12_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_MISMATCHINGCLEARVALUE = 821, - D3D12_MESSAGE_ID_MAP_INVALIDHEAP = 822, - D3D12_MESSAGE_ID_UNMAP_INVALIDHEAP = 823, - D3D12_MESSAGE_ID_MAP_INVALIDRESOURCE = 824, - D3D12_MESSAGE_ID_UNMAP_INVALIDRESOURCE = 825, - D3D12_MESSAGE_ID_MAP_INVALIDSUBRESOURCE = 826, - D3D12_MESSAGE_ID_UNMAP_INVALIDSUBRESOURCE = 827, - D3D12_MESSAGE_ID_MAP_INVALIDRANGE = 828, - D3D12_MESSAGE_ID_UNMAP_INVALIDRANGE = 829, - D3D12_MESSAGE_ID_MAP_INVALIDDATAPOINTER = 832, - D3D12_MESSAGE_ID_MAP_INVALIDARG_RETURN = 833, - D3D12_MESSAGE_ID_MAP_OUTOFMEMORY_RETURN = 834, - D3D12_MESSAGE_ID_EXECUTECOMMANDLISTS_BUNDLENOTSUPPORTED = 835, - D3D12_MESSAGE_ID_EXECUTECOMMANDLISTS_COMMANDLISTMISMATCH = 836, - D3D12_MESSAGE_ID_EXECUTECOMMANDLISTS_OPENCOMMANDLIST = 837, - D3D12_MESSAGE_ID_EXECUTECOMMANDLISTS_FAILEDCOMMANDLIST = 838, - D3D12_MESSAGE_ID_COPYBUFFERREGION_NULLDST = 839, - D3D12_MESSAGE_ID_COPYBUFFERREGION_INVALIDDSTRESOURCEDIMENSION = 840, - D3D12_MESSAGE_ID_COPYBUFFERREGION_DSTRANGEOUTOFBOUNDS = 841, - D3D12_MESSAGE_ID_COPYBUFFERREGION_NULLSRC = 842, - D3D12_MESSAGE_ID_COPYBUFFERREGION_INVALIDSRCRESOURCEDIMENSION = 843, - D3D12_MESSAGE_ID_COPYBUFFERREGION_SRCRANGEOUTOFBOUNDS = 844, - D3D12_MESSAGE_ID_COPYBUFFERREGION_INVALIDCOPYFLAGS = 845, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_NULLDST = 846, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_UNRECOGNIZEDDSTTYPE = 847, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDDSTRESOURCEDIMENSION = 848, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDDSTRESOURCE = 849, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDDSTSUBRESOURCE = 850, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDDSTOFFSET = 851, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_UNRECOGNIZEDDSTFORMAT = 852, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDDSTFORMAT = 853, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDDSTDIMENSIONS = 854, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDDSTROWPITCH = 855, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDDSTPLACEMENT = 856, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDDSTDSPLACEDFOOTPRINTFORMAT = 857, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_DSTREGIONOUTOFBOUNDS = 858, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_NULLSRC = 859, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_UNRECOGNIZEDSRCTYPE = 860, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDSRCRESOURCEDIMENSION = 861, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDSRCRESOURCE = 862, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDSRCSUBRESOURCE = 863, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDSRCOFFSET = 864, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_UNRECOGNIZEDSRCFORMAT = 865, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDSRCFORMAT = 866, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDSRCDIMENSIONS = 867, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDSRCROWPITCH = 868, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDSRCPLACEMENT = 869, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDSRCDSPLACEDFOOTPRINTFORMAT = 870, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_SRCREGIONOUTOFBOUNDS = 871, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDDSTCOORDINATES = 872, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDSRCBOX = 873, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_FORMATMISMATCH = 874, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_EMPTYBOX = 875, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDCOPYFLAGS = 876, - D3D12_MESSAGE_ID_RESOLVESUBRESOURCE_INVALID_SUBRESOURCE_INDEX = 877, - D3D12_MESSAGE_ID_RESOLVESUBRESOURCE_INVALID_FORMAT = 878, - D3D12_MESSAGE_ID_RESOLVESUBRESOURCE_RESOURCE_MISMATCH = 879, - D3D12_MESSAGE_ID_RESOLVESUBRESOURCE_INVALID_SAMPLE_COUNT = 880, - D3D12_MESSAGE_ID_CREATECOMPUTEPIPELINESTATE_INVALID_SHADER = 881, - D3D12_MESSAGE_ID_CREATECOMPUTEPIPELINESTATE_CS_ROOT_SIGNATURE_MISMATCH = 882, - D3D12_MESSAGE_ID_CREATECOMPUTEPIPELINESTATE_MISSING_ROOT_SIGNATURE = 883, - D3D12_MESSAGE_ID_CREATEPIPELINESTATE_INVALIDCACHEDBLOB = 884, - D3D12_MESSAGE_ID_CREATEPIPELINESTATE_CACHEDBLOBADAPTERMISMATCH = 885, - D3D12_MESSAGE_ID_CREATEPIPELINESTATE_CACHEDBLOBDRIVERVERSIONMISMATCH = 886, - D3D12_MESSAGE_ID_CREATEPIPELINESTATE_CACHEDBLOBDESCMISMATCH = 887, - D3D12_MESSAGE_ID_CREATEPIPELINESTATE_CACHEDBLOBIGNORED = 888, - D3D12_MESSAGE_ID_WRITETOSUBRESOURCE_INVALIDHEAP = 889, - D3D12_MESSAGE_ID_WRITETOSUBRESOURCE_INVALIDRESOURCE = 890, - D3D12_MESSAGE_ID_WRITETOSUBRESOURCE_INVALIDBOX = 891, - D3D12_MESSAGE_ID_WRITETOSUBRESOURCE_INVALIDSUBRESOURCE = 892, - D3D12_MESSAGE_ID_WRITETOSUBRESOURCE_EMPTYBOX = 893, - D3D12_MESSAGE_ID_READFROMSUBRESOURCE_INVALIDHEAP = 894, - D3D12_MESSAGE_ID_READFROMSUBRESOURCE_INVALIDRESOURCE = 895, - D3D12_MESSAGE_ID_READFROMSUBRESOURCE_INVALIDBOX = 896, - D3D12_MESSAGE_ID_READFROMSUBRESOURCE_INVALIDSUBRESOURCE = 897, - D3D12_MESSAGE_ID_READFROMSUBRESOURCE_EMPTYBOX = 898, - D3D12_MESSAGE_ID_TOO_MANY_NODES_SPECIFIED = 899, - D3D12_MESSAGE_ID_INVALID_NODE_INDEX = 900, - D3D12_MESSAGE_ID_GETHEAPPROPERTIES_INVALIDRESOURCE = 901, - D3D12_MESSAGE_ID_NODE_MASK_MISMATCH = 902, - D3D12_MESSAGE_ID_COMMAND_LIST_OUTOFMEMORY = 903, - D3D12_MESSAGE_ID_COMMAND_LIST_MULTIPLE_SWAPCHAIN_BUFFER_REFERENCES = 904, - D3D12_MESSAGE_ID_COMMAND_LIST_TOO_MANY_SWAPCHAIN_REFERENCES = 905, - D3D12_MESSAGE_ID_COMMAND_QUEUE_TOO_MANY_SWAPCHAIN_REFERENCES = 906, - D3D12_MESSAGE_ID_EXECUTECOMMANDLISTS_WRONGSWAPCHAINBUFFERREFERENCE = 907, - D3D12_MESSAGE_ID_COMMAND_LIST_SETRENDERTARGETS_INVALIDNUMRENDERTARGETS = 908, - D3D12_MESSAGE_ID_CREATE_QUEUE_INVALID_TYPE = 909, - D3D12_MESSAGE_ID_CREATE_QUEUE_INVALID_FLAGS = 910, - D3D12_MESSAGE_ID_CREATESHAREDRESOURCE_INVALIDFLAGS = 911, - D3D12_MESSAGE_ID_CREATESHAREDRESOURCE_INVALIDFORMAT = 912, - D3D12_MESSAGE_ID_CREATESHAREDHEAP_INVALIDFLAGS = 913, - D3D12_MESSAGE_ID_REFLECTSHAREDPROPERTIES_UNRECOGNIZEDPROPERTIES = 914, - D3D12_MESSAGE_ID_REFLECTSHAREDPROPERTIES_INVALIDSIZE = 915, - D3D12_MESSAGE_ID_REFLECTSHAREDPROPERTIES_INVALIDOBJECT = 916, - D3D12_MESSAGE_ID_KEYEDMUTEX_INVALIDOBJECT = 917, - D3D12_MESSAGE_ID_KEYEDMUTEX_INVALIDKEY = 918, - D3D12_MESSAGE_ID_KEYEDMUTEX_WRONGSTATE = 919, - D3D12_MESSAGE_ID_CREATE_QUEUE_INVALID_PRIORITY = 920, - D3D12_MESSAGE_ID_OBJECT_DELETED_WHILE_STILL_IN_USE = 921, - D3D12_MESSAGE_ID_CREATEPIPELINESTATE_INVALID_FLAGS = 922, - D3D12_MESSAGE_ID_HEAP_ADDRESS_RANGE_HAS_NO_RESOURCE = 923, - D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_RENDER_TARGET_DELETED = 924, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_ALL_RENDER_TARGETS_HAVE_UNKNOWN_FORMAT = 925, - D3D12_MESSAGE_ID_HEAP_ADDRESS_RANGE_INTERSECTS_MULTIPLE_BUFFERS = 926, - D3D12_MESSAGE_ID_EXECUTECOMMANDLISTS_GPU_WRITTEN_READBACK_RESOURCE_MAPPED = 927, - D3D12_MESSAGE_ID_UNMAP_RANGE_NOT_EMPTY = 929, - D3D12_MESSAGE_ID_MAP_INVALID_NULLRANGE = 930, - D3D12_MESSAGE_ID_UNMAP_INVALID_NULLRANGE = 931, - D3D12_MESSAGE_ID_NO_GRAPHICS_API_SUPPORT = 932, - D3D12_MESSAGE_ID_NO_COMPUTE_API_SUPPORT = 933, - D3D12_MESSAGE_ID_RESOLVESUBRESOURCE_RESOURCE_FLAGS_NOT_SUPPORTED = 934, - D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_ROOT_ARGUMENT_UNINITIALIZED = 935, - D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_DESCRIPTOR_HEAP_INDEX_OUT_OF_BOUNDS = 936, - D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_DESCRIPTOR_TABLE_REGISTER_INDEX_OUT_OF_BOUNDS = 937, - D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_DESCRIPTOR_UNINITIALIZED = 938, - D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_DESCRIPTOR_TYPE_MISMATCH = 939, - D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_SRV_RESOURCE_DIMENSION_MISMATCH = 940, - D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_UAV_RESOURCE_DIMENSION_MISMATCH = 941, - D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_INCOMPATIBLE_RESOURCE_STATE = 942, - D3D12_MESSAGE_ID_COPYRESOURCE_NULLDST = 943, - D3D12_MESSAGE_ID_COPYRESOURCE_INVALIDDSTRESOURCE = 944, - D3D12_MESSAGE_ID_COPYRESOURCE_NULLSRC = 945, - D3D12_MESSAGE_ID_COPYRESOURCE_INVALIDSRCRESOURCE = 946, - D3D12_MESSAGE_ID_RESOLVESUBRESOURCE_NULLDST = 947, - D3D12_MESSAGE_ID_RESOLVESUBRESOURCE_INVALIDDSTRESOURCE = 948, - D3D12_MESSAGE_ID_RESOLVESUBRESOURCE_NULLSRC = 949, - D3D12_MESSAGE_ID_RESOLVESUBRESOURCE_INVALIDSRCRESOURCE = 950, - D3D12_MESSAGE_ID_PIPELINE_STATE_TYPE_MISMATCH = 951, - D3D12_MESSAGE_ID_COMMAND_LIST_DISPATCH_ROOT_SIGNATURE_NOT_SET = 952, - D3D12_MESSAGE_ID_COMMAND_LIST_DISPATCH_ROOT_SIGNATURE_MISMATCH = 953, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_ZERO_BARRIERS = 954, - D3D12_MESSAGE_ID_BEGIN_END_EVENT_MISMATCH = 955, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_POSSIBLE_BEFORE_AFTER_MISMATCH = 956, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_MISMATCHING_BEGIN_END = 957, - D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_INVALID_RESOURCE = 958, - D3D12_MESSAGE_ID_USE_OF_ZERO_REFCOUNT_OBJECT = 959, - D3D12_MESSAGE_ID_OBJECT_EVICTED_WHILE_STILL_IN_USE = 960, - D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_ROOT_DESCRIPTOR_ACCESS_OUT_OF_BOUNDS = 961, - D3D12_MESSAGE_ID_CREATEPIPELINELIBRARY_INVALIDLIBRARYBLOB = 962, - D3D12_MESSAGE_ID_CREATEPIPELINELIBRARY_DRIVERVERSIONMISMATCH = 963, - D3D12_MESSAGE_ID_CREATEPIPELINELIBRARY_ADAPTERVERSIONMISMATCH = 964, - D3D12_MESSAGE_ID_CREATEPIPELINELIBRARY_UNSUPPORTED = 965, - D3D12_MESSAGE_ID_CREATE_PIPELINELIBRARY = 966, - D3D12_MESSAGE_ID_LIVE_PIPELINELIBRARY = 967, - D3D12_MESSAGE_ID_DESTROY_PIPELINELIBRARY = 968, - D3D12_MESSAGE_ID_STOREPIPELINE_NONAME = 969, - D3D12_MESSAGE_ID_STOREPIPELINE_DUPLICATENAME = 970, - D3D12_MESSAGE_ID_LOADPIPELINE_NAMENOTFOUND = 971, - D3D12_MESSAGE_ID_LOADPIPELINE_INVALIDDESC = 972, - D3D12_MESSAGE_ID_PIPELINELIBRARY_SERIALIZE_NOTENOUGHMEMORY = 973, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_PS_OUTPUT_RT_OUTPUT_MISMATCH = 974, - D3D12_MESSAGE_ID_SETEVENTONMULTIPLEFENCECOMPLETION_INVALIDFLAGS = 975, - D3D12_MESSAGE_ID_CREATE_QUEUE_VIDEO_NOT_SUPPORTED = 976, - D3D12_MESSAGE_ID_CREATE_COMMAND_ALLOCATOR_VIDEO_NOT_SUPPORTED = 977, - D3D12_MESSAGE_ID_CREATEQUERY_HEAP_VIDEO_DECODE_STATISTICS_NOT_SUPPORTED = 978, - D3D12_MESSAGE_ID_CREATE_VIDEODECODECOMMANDLIST = 979, - D3D12_MESSAGE_ID_CREATE_VIDEODECODER = 980, - D3D12_MESSAGE_ID_CREATE_VIDEODECODESTREAM = 981, - D3D12_MESSAGE_ID_LIVE_VIDEODECODECOMMANDLIST = 982, - D3D12_MESSAGE_ID_LIVE_VIDEODECODER = 983, - D3D12_MESSAGE_ID_LIVE_VIDEODECODESTREAM = 984, - D3D12_MESSAGE_ID_DESTROY_VIDEODECODECOMMANDLIST = 985, - D3D12_MESSAGE_ID_DESTROY_VIDEODECODER = 986, - D3D12_MESSAGE_ID_DESTROY_VIDEODECODESTREAM = 987, - D3D12_MESSAGE_ID_DECODE_FRAME_INVALID_PARAMETERS = 988, - D3D12_MESSAGE_ID_DEPRECATED_API = 989, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_MISMATCHING_COMMAND_LIST_TYPE = 990, - D3D12_MESSAGE_ID_COMMAND_LIST_DESCRIPTOR_TABLE_NOT_SET = 991, - D3D12_MESSAGE_ID_COMMAND_LIST_ROOT_CONSTANT_BUFFER_VIEW_NOT_SET = 992, - D3D12_MESSAGE_ID_COMMAND_LIST_ROOT_SHADER_RESOURCE_VIEW_NOT_SET = 993, - D3D12_MESSAGE_ID_COMMAND_LIST_ROOT_UNORDERED_ACCESS_VIEW_NOT_SET = 994, - D3D12_MESSAGE_ID_DISCARD_INVALID_SUBRESOURCE_RANGE = 995, - D3D12_MESSAGE_ID_DISCARD_ONE_SUBRESOURCE_FOR_MIPS_WITH_RECTS = 996, - D3D12_MESSAGE_ID_DISCARD_NO_RECTS_FOR_NON_TEXTURE2D = 997, - D3D12_MESSAGE_ID_COPY_ON_SAME_SUBRESOURCE = 998, - D3D12_MESSAGE_ID_SETRESIDENCYPRIORITY_INVALID_PAGEABLE = 999, - D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_UNSUPPORTED = 1000, - D3D12_MESSAGE_ID_STATIC_DESCRIPTOR_INVALID_DESCRIPTOR_CHANGE = 1001, - D3D12_MESSAGE_ID_DATA_STATIC_DESCRIPTOR_INVALID_DATA_CHANGE = 1002, - D3D12_MESSAGE_ID_DATA_STATIC_WHILE_SET_AT_EXECUTE_DESCRIPTOR_INVALID_DATA_CHANGE = 1003, - D3D12_MESSAGE_ID_EXECUTE_BUNDLE_STATIC_DESCRIPTOR_DATA_STATIC_NOT_SET = 1004, - D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_RESOURCE_ACCESS_OUT_OF_BOUNDS = 1005, - D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_SAMPLER_MODE_MISMATCH = 1006, - D3D12_MESSAGE_ID_CREATE_FENCE_INVALID_FLAGS = 1007, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_DUPLICATE_SUBRESOURCE_TRANSITIONS = 1008, - D3D12_MESSAGE_ID_SETRESIDENCYPRIORITY_INVALID_PRIORITY = 1009, - D3D12_MESSAGE_ID_CREATE_DESCRIPTOR_HEAP_LARGE_NUM_DESCRIPTORS = 1013, - D3D12_MESSAGE_ID_BEGIN_EVENT = 1014, - D3D12_MESSAGE_ID_END_EVENT = 1015, - D3D12_MESSAGE_ID_CREATEDEVICE_DEBUG_LAYER_STARTUP_OPTIONS = 1016, - D3D12_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_DEPTHBOUNDSTEST_UNSUPPORTED = 1017, - D3D12_MESSAGE_ID_CREATEPIPELINESTATE_DUPLICATE_SUBOBJECT = 1018, - D3D12_MESSAGE_ID_CREATEPIPELINESTATE_UNKNOWN_SUBOBJECT = 1019, - D3D12_MESSAGE_ID_CREATEPIPELINESTATE_ZERO_SIZE_STREAM = 1020, - D3D12_MESSAGE_ID_CREATEPIPELINESTATE_INVALID_STREAM = 1021, - D3D12_MESSAGE_ID_CREATEPIPELINESTATE_CANNOT_DEDUCE_TYPE = 1022, - D3D12_MESSAGE_ID_COMMAND_LIST_STATIC_DESCRIPTOR_RESOURCE_DIMENSION_MISMATCH = 1023, - D3D12_MESSAGE_ID_CREATE_COMMAND_QUEUE_INSUFFICIENT_PRIVILEGE_FOR_GLOBAL_REALTIME = 1024, - D3D12_MESSAGE_ID_CREATE_COMMAND_QUEUE_INSUFFICIENT_HARDWARE_SUPPORT_FOR_GLOBAL_REALTIME = 1025, - D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_INVALID_ARCHITECTURE = 1026, - D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_NULL_DST = 1027, - D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_INVALID_DST_RESOURCE_DIMENSION = 1028, - D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_DST_RANGE_OUT_OF_BOUNDS = 1029, - D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_NULL_SRC = 1030, - D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_INVALID_SRC_RESOURCE_DIMENSION = 1031, - D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_SRC_RANGE_OUT_OF_BOUNDS = 1032, - D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_INVALID_OFFSET_ALIGNMENT = 1033, - D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_NULL_DEPENDENT_RESOURCES = 1034, - D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_NULL_DEPENDENT_SUBRESOURCE_RANGES = 1035, - D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_INVALID_DEPENDENT_RESOURCE = 1036, - D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_INVALID_DEPENDENT_SUBRESOURCE_RANGE = 1037, - D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_DEPENDENT_SUBRESOURCE_OUT_OF_BOUNDS = 1038, - D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_DEPENDENT_RANGE_OUT_OF_BOUNDS = 1039, - D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_ZERO_DEPENDENCIES = 1040, - D3D12_MESSAGE_ID_DEVICE_CREATE_SHARED_HANDLE_INVALIDARG = 1041, - D3D12_MESSAGE_ID_DESCRIPTOR_HANDLE_WITH_INVALID_RESOURCE = 1042, - D3D12_MESSAGE_ID_SETDEPTHBOUNDS_INVALIDARGS = 1043, - D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_RESOURCE_STATE_IMPRECISE = 1044, - D3D12_MESSAGE_ID_COMMAND_LIST_PIPELINE_STATE_NOT_SET = 1045, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_SHADER_MODEL_MISMATCH = 1046, - D3D12_MESSAGE_ID_OBJECT_ACCESSED_WHILE_STILL_IN_USE = 1047, - D3D12_MESSAGE_ID_PROGRAMMABLE_MSAA_UNSUPPORTED = 1048, - D3D12_MESSAGE_ID_SETSAMPLEPOSITIONS_INVALIDARGS = 1049, - D3D12_MESSAGE_ID_RESOLVESUBRESOURCEREGION_INVALID_RECT = 1050, - D3D12_MESSAGE_ID_CREATE_VIDEODECODECOMMANDQUEUE = 1051, - D3D12_MESSAGE_ID_CREATE_VIDEOPROCESSCOMMANDLIST = 1052, - D3D12_MESSAGE_ID_CREATE_VIDEOPROCESSCOMMANDQUEUE = 1053, - D3D12_MESSAGE_ID_LIVE_VIDEODECODECOMMANDQUEUE = 1054, - D3D12_MESSAGE_ID_LIVE_VIDEOPROCESSCOMMANDLIST = 1055, - D3D12_MESSAGE_ID_LIVE_VIDEOPROCESSCOMMANDQUEUE = 1056, - D3D12_MESSAGE_ID_DESTROY_VIDEODECODECOMMANDQUEUE = 1057, - D3D12_MESSAGE_ID_DESTROY_VIDEOPROCESSCOMMANDLIST = 1058, - D3D12_MESSAGE_ID_DESTROY_VIDEOPROCESSCOMMANDQUEUE = 1059, - D3D12_MESSAGE_ID_CREATE_VIDEOPROCESSOR = 1060, - D3D12_MESSAGE_ID_CREATE_VIDEOPROCESSSTREAM = 1061, - D3D12_MESSAGE_ID_LIVE_VIDEOPROCESSOR = 1062, - D3D12_MESSAGE_ID_LIVE_VIDEOPROCESSSTREAM = 1063, - D3D12_MESSAGE_ID_DESTROY_VIDEOPROCESSOR = 1064, - D3D12_MESSAGE_ID_DESTROY_VIDEOPROCESSSTREAM = 1065, - D3D12_MESSAGE_ID_PROCESS_FRAME_INVALID_PARAMETERS = 1066, - D3D12_MESSAGE_ID_COPY_INVALIDLAYOUT = 1067, - D3D12_MESSAGE_ID_CREATE_CRYPTO_SESSION = 1068, - D3D12_MESSAGE_ID_CREATE_CRYPTO_SESSION_POLICY = 1069, - D3D12_MESSAGE_ID_CREATE_PROTECTED_RESOURCE_SESSION = 1070, - D3D12_MESSAGE_ID_LIVE_CRYPTO_SESSION = 1071, - D3D12_MESSAGE_ID_LIVE_CRYPTO_SESSION_POLICY = 1072, - D3D12_MESSAGE_ID_LIVE_PROTECTED_RESOURCE_SESSION = 1073, - D3D12_MESSAGE_ID_DESTROY_CRYPTO_SESSION = 1074, - D3D12_MESSAGE_ID_DESTROY_CRYPTO_SESSION_POLICY = 1075, - D3D12_MESSAGE_ID_DESTROY_PROTECTED_RESOURCE_SESSION = 1076, - D3D12_MESSAGE_ID_PROTECTED_RESOURCE_SESSION_UNSUPPORTED = 1077, - D3D12_MESSAGE_ID_FENCE_INVALIDOPERATION = 1078, - D3D12_MESSAGE_ID_CREATEQUERY_HEAP_COPY_QUEUE_TIMESTAMPS_NOT_SUPPORTED = 1079, - D3D12_MESSAGE_ID_SAMPLEPOSITIONS_MISMATCH_DEFERRED = 1080, - D3D12_MESSAGE_ID_SAMPLEPOSITIONS_MISMATCH_RECORDTIME_ASSUMEDFROMFIRSTUSE = 1081, - D3D12_MESSAGE_ID_SAMPLEPOSITIONS_MISMATCH_RECORDTIME_ASSUMEDFROMCLEAR = 1082, - D3D12_MESSAGE_ID_CREATE_VIDEODECODERHEAP = 1083, - D3D12_MESSAGE_ID_LIVE_VIDEODECODERHEAP = 1084, - D3D12_MESSAGE_ID_DESTROY_VIDEODECODERHEAP = 1085, - D3D12_MESSAGE_ID_OPENEXISTINGHEAP_INVALIDARG_RETURN = 1086, - D3D12_MESSAGE_ID_OPENEXISTINGHEAP_OUTOFMEMORY_RETURN = 1087, - D3D12_MESSAGE_ID_OPENEXISTINGHEAP_INVALIDADDRESS = 1088, - D3D12_MESSAGE_ID_OPENEXISTINGHEAP_INVALIDHANDLE = 1089, - D3D12_MESSAGE_ID_WRITEBUFFERIMMEDIATE_INVALID_DEST = 1090, - D3D12_MESSAGE_ID_WRITEBUFFERIMMEDIATE_INVALID_MODE = 1091, - D3D12_MESSAGE_ID_WRITEBUFFERIMMEDIATE_INVALID_ALIGNMENT = 1092, - D3D12_MESSAGE_ID_WRITEBUFFERIMMEDIATE_NOT_SUPPORTED = 1093, - D3D12_MESSAGE_ID_SETVIEWINSTANCEMASK_INVALIDARGS = 1094, - D3D12_MESSAGE_ID_VIEW_INSTANCING_UNSUPPORTED = 1095, - D3D12_MESSAGE_ID_VIEW_INSTANCING_INVALIDARGS = 1096, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_MISMATCH_DECODE_REFERENCE_ONLY_FLAG = 1097, - D3D12_MESSAGE_ID_COPYRESOURCE_MISMATCH_DECODE_REFERENCE_ONLY_FLAG = 1098, - D3D12_MESSAGE_ID_CREATE_VIDEO_DECODE_HEAP_CAPS_FAILURE = 1099, - D3D12_MESSAGE_ID_CREATE_VIDEO_DECODE_HEAP_CAPS_UNSUPPORTED = 1100, - D3D12_MESSAGE_ID_VIDEO_DECODE_SUPPORT_INVALID_INPUT = 1101, - D3D12_MESSAGE_ID_CREATE_VIDEO_DECODER_UNSUPPORTED = 1102, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_METADATA_ERROR = 1103, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_VIEW_INSTANCING_VERTEX_SIZE_EXCEEDED = 1104, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_RUNTIME_INTERNAL_ERROR = 1105, - D3D12_MESSAGE_ID_NO_VIDEO_API_SUPPORT = 1106, - D3D12_MESSAGE_ID_VIDEO_PROCESS_SUPPORT_INVALID_INPUT = 1107, - D3D12_MESSAGE_ID_CREATE_VIDEO_PROCESSOR_CAPS_FAILURE = 1108, - D3D12_MESSAGE_ID_VIDEO_PROCESS_SUPPORT_UNSUPPORTED_FORMAT = 1109, - D3D12_MESSAGE_ID_VIDEO_DECODE_FRAME_INVALID_ARGUMENT = 1110, - D3D12_MESSAGE_ID_ENQUEUE_MAKE_RESIDENT_INVALID_FLAGS = 1111, - D3D12_MESSAGE_ID_OPENEXISTINGHEAP_UNSUPPORTED = 1112, - D3D12_MESSAGE_ID_VIDEO_PROCESS_FRAMES_INVALID_ARGUMENT = 1113, - D3D12_MESSAGE_ID_VIDEO_DECODE_SUPPORT_UNSUPPORTED = 1114, - D3D12_MESSAGE_ID_CREATE_COMMANDRECORDER = 1115, - D3D12_MESSAGE_ID_LIVE_COMMANDRECORDER = 1116, - D3D12_MESSAGE_ID_DESTROY_COMMANDRECORDER = 1117, - D3D12_MESSAGE_ID_CREATE_COMMAND_RECORDER_VIDEO_NOT_SUPPORTED = 1118, - D3D12_MESSAGE_ID_CREATE_COMMAND_RECORDER_INVALID_SUPPORT_FLAGS = 1119, - D3D12_MESSAGE_ID_CREATE_COMMAND_RECORDER_INVALID_FLAGS = 1120, - D3D12_MESSAGE_ID_CREATE_COMMAND_RECORDER_MORE_RECORDERS_THAN_LOGICAL_PROCESSORS = 1121, - D3D12_MESSAGE_ID_CREATE_COMMANDPOOL = 1122, - D3D12_MESSAGE_ID_LIVE_COMMANDPOOL = 1123, - D3D12_MESSAGE_ID_DESTROY_COMMANDPOOL = 1124, - D3D12_MESSAGE_ID_CREATE_COMMAND_POOL_INVALID_FLAGS = 1125, - D3D12_MESSAGE_ID_CREATE_COMMAND_LIST_VIDEO_NOT_SUPPORTED = 1126, - D3D12_MESSAGE_ID_COMMAND_RECORDER_SUPPORT_FLAGS_MISMATCH = 1127, - D3D12_MESSAGE_ID_COMMAND_RECORDER_CONTENTION = 1128, - D3D12_MESSAGE_ID_COMMAND_RECORDER_USAGE_WITH_CREATECOMMANDLIST_COMMAND_LIST = 1129, - D3D12_MESSAGE_ID_COMMAND_ALLOCATOR_USAGE_WITH_CREATECOMMANDLIST1_COMMAND_LIST = 1130, - D3D12_MESSAGE_ID_CANNOT_EXECUTE_EMPTY_COMMAND_LIST = 1131, - D3D12_MESSAGE_ID_CANNOT_RESET_COMMAND_POOL_WITH_OPEN_COMMAND_LISTS = 1132, - D3D12_MESSAGE_ID_CANNOT_USE_COMMAND_RECORDER_WITHOUT_CURRENT_TARGET = 1133, - D3D12_MESSAGE_ID_CANNOT_CHANGE_COMMAND_RECORDER_TARGET_WHILE_RECORDING = 1134, - D3D12_MESSAGE_ID_COMMAND_POOL_SYNC = 1135, - D3D12_MESSAGE_ID_EVICT_UNDERFLOW = 1136, - D3D12_MESSAGE_ID_CREATE_META_COMMAND = 1137, - D3D12_MESSAGE_ID_LIVE_META_COMMAND = 1138, - D3D12_MESSAGE_ID_DESTROY_META_COMMAND = 1139, - D3D12_MESSAGE_ID_COPYBUFFERREGION_INVALID_DST_RESOURCE = 1140, - D3D12_MESSAGE_ID_COPYBUFFERREGION_INVALID_SRC_RESOURCE = 1141, - D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_INVALID_DST_RESOURCE = 1142, - D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_INVALID_SRC_RESOURCE = 1143, - D3D12_MESSAGE_ID_CREATEPLACEDRESOURCEONBUFFER_NULL_BUFFER = 1144, - D3D12_MESSAGE_ID_CREATEPLACEDRESOURCEONBUFFER_NULL_RESOURCE_DESC = 1145, - D3D12_MESSAGE_ID_CREATEPLACEDRESOURCEONBUFFER_UNSUPPORTED = 1146, - D3D12_MESSAGE_ID_CREATEPLACEDRESOURCEONBUFFER_INVALID_BUFFER_DIMENSION = 1147, - D3D12_MESSAGE_ID_CREATEPLACEDRESOURCEONBUFFER_INVALID_BUFFER_FLAGS = 1148, - D3D12_MESSAGE_ID_CREATEPLACEDRESOURCEONBUFFER_INVALID_BUFFER_OFFSET = 1149, - D3D12_MESSAGE_ID_CREATEPLACEDRESOURCEONBUFFER_INVALID_RESOURCE_DIMENSION = 1150, - D3D12_MESSAGE_ID_CREATEPLACEDRESOURCEONBUFFER_INVALID_RESOURCE_FLAGS = 1151, - D3D12_MESSAGE_ID_CREATEPLACEDRESOURCEONBUFFER_OUTOFMEMORY_RETURN = 1152, - D3D12_MESSAGE_ID_CANNOT_CREATE_GRAPHICS_AND_VIDEO_COMMAND_RECORDER = 1153, - D3D12_MESSAGE_ID_UPDATETILEMAPPINGS_POSSIBLY_MISMATCHING_PROPERTIES = 1154, - D3D12_MESSAGE_ID_CREATE_COMMAND_LIST_INVALID_COMMAND_LIST_TYPE = 1155, - D3D12_MESSAGE_ID_CLEARUNORDEREDACCESSVIEW_INCOMPATIBLE_WITH_STRUCTURED_BUFFERS = 1156, - D3D12_MESSAGE_ID_COMPUTE_ONLY_DEVICE_OPERATION_UNSUPPORTED = 1157, - D3D12_MESSAGE_ID_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INVALID = 1158, - D3D12_MESSAGE_ID_EMIT_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_INVALID = 1159, - D3D12_MESSAGE_ID_COPY_RAYTRACING_ACCELERATION_STRUCTURE_INVALID = 1160, - D3D12_MESSAGE_ID_DISPATCH_RAYS_INVALID = 1161, - D3D12_MESSAGE_ID_GET_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO_INVALID = 1162, - D3D12_MESSAGE_ID_CREATE_LIFETIMETRACKER = 1163, - D3D12_MESSAGE_ID_LIVE_LIFETIMETRACKER = 1164, - D3D12_MESSAGE_ID_DESTROY_LIFETIMETRACKER = 1165, - D3D12_MESSAGE_ID_DESTROYOWNEDOBJECT_OBJECTNOTOWNED = 1166, - D3D12_MESSAGE_ID_CREATE_TRACKEDWORKLOAD = 1167, - D3D12_MESSAGE_ID_LIVE_TRACKEDWORKLOAD = 1168, - D3D12_MESSAGE_ID_DESTROY_TRACKEDWORKLOAD = 1169, - D3D12_MESSAGE_ID_RENDER_PASS_ERROR = 1170, - D3D12_MESSAGE_ID_META_COMMAND_ID_INVALID = 1171, - D3D12_MESSAGE_ID_META_COMMAND_UNSUPPORTED_PARAMS = 1172, - D3D12_MESSAGE_ID_META_COMMAND_FAILED_ENUMERATION = 1173, - D3D12_MESSAGE_ID_META_COMMAND_PARAMETER_SIZE_MISMATCH = 1174, - D3D12_MESSAGE_ID_UNINITIALIZED_META_COMMAND = 1175, - D3D12_MESSAGE_ID_META_COMMAND_INVALID_GPU_VIRTUAL_ADDRESS = 1176, - D3D12_MESSAGE_ID_CREATE_VIDEOENCODECOMMANDLIST = 1177, - D3D12_MESSAGE_ID_LIVE_VIDEOENCODECOMMANDLIST = 1178, - D3D12_MESSAGE_ID_DESTROY_VIDEOENCODECOMMANDLIST = 1179, - D3D12_MESSAGE_ID_CREATE_VIDEOENCODECOMMANDQUEUE = 1180, - D3D12_MESSAGE_ID_LIVE_VIDEOENCODECOMMANDQUEUE = 1181, - D3D12_MESSAGE_ID_DESTROY_VIDEOENCODECOMMANDQUEUE = 1182, - D3D12_MESSAGE_ID_CREATE_VIDEOMOTIONESTIMATOR = 1183, - D3D12_MESSAGE_ID_LIVE_VIDEOMOTIONESTIMATOR = 1184, - D3D12_MESSAGE_ID_DESTROY_VIDEOMOTIONESTIMATOR = 1185, - D3D12_MESSAGE_ID_CREATE_VIDEOMOTIONVECTORHEAP = 1186, - D3D12_MESSAGE_ID_LIVE_VIDEOMOTIONVECTORHEAP = 1187, - D3D12_MESSAGE_ID_DESTROY_VIDEOMOTIONVECTORHEAP = 1188, - D3D12_MESSAGE_ID_MULTIPLE_TRACKED_WORKLOADS = 1189, - D3D12_MESSAGE_ID_MULTIPLE_TRACKED_WORKLOAD_PAIRS = 1190, - D3D12_MESSAGE_ID_OUT_OF_ORDER_TRACKED_WORKLOAD_PAIR = 1191, - D3D12_MESSAGE_ID_CANNOT_ADD_TRACKED_WORKLOAD = 1192, - D3D12_MESSAGE_ID_INCOMPLETE_TRACKED_WORKLOAD_PAIR = 1193, - D3D12_MESSAGE_ID_CREATE_STATE_OBJECT_ERROR = 1194, - D3D12_MESSAGE_ID_GET_SHADER_IDENTIFIER_ERROR = 1195, - D3D12_MESSAGE_ID_GET_SHADER_STACK_SIZE_ERROR = 1196, - D3D12_MESSAGE_ID_GET_PIPELINE_STACK_SIZE_ERROR = 1197, - D3D12_MESSAGE_ID_SET_PIPELINE_STACK_SIZE_ERROR = 1198, - D3D12_MESSAGE_ID_GET_SHADER_IDENTIFIER_SIZE_INVALID = 1199, - D3D12_MESSAGE_ID_CHECK_DRIVER_MATCHING_IDENTIFIER_INVALID = 1200, - D3D12_MESSAGE_ID_CHECK_DRIVER_MATCHING_IDENTIFIER_DRIVER_REPORTED_ISSUE = 1201, - D3D12_MESSAGE_ID_RENDER_PASS_INVALID_RESOURCE_BARRIER = 1202, - D3D12_MESSAGE_ID_RENDER_PASS_DISALLOWED_API_CALLED = 1203, - D3D12_MESSAGE_ID_RENDER_PASS_CANNOT_NEST_RENDER_PASSES = 1204, - D3D12_MESSAGE_ID_RENDER_PASS_CANNOT_END_WITHOUT_BEGIN = 1205, - D3D12_MESSAGE_ID_RENDER_PASS_CANNOT_CLOSE_COMMAND_LIST = 1206, - D3D12_MESSAGE_ID_RENDER_PASS_GPU_WORK_WHILE_SUSPENDED = 1207, - D3D12_MESSAGE_ID_RENDER_PASS_MISMATCHING_SUSPEND_RESUME = 1208, - D3D12_MESSAGE_ID_RENDER_PASS_NO_PRIOR_SUSPEND_WITHIN_EXECUTECOMMANDLISTS = 1209, - D3D12_MESSAGE_ID_RENDER_PASS_NO_SUBSEQUENT_RESUME_WITHIN_EXECUTECOMMANDLISTS = 1210, - D3D12_MESSAGE_ID_TRACKED_WORKLOAD_COMMAND_QUEUE_MISMATCH = 1211, - D3D12_MESSAGE_ID_TRACKED_WORKLOAD_NOT_SUPPORTED = 1212, - D3D12_MESSAGE_ID_RENDER_PASS_MISMATCHING_NO_ACCESS = 1213, - D3D12_MESSAGE_ID_RENDER_PASS_UNSUPPORTED_RESOLVE = 1214, - D3D12_MESSAGE_ID_CLEARUNORDEREDACCESSVIEW_INVALID_RESOURCE_PTR = 1215, - D3D12_MESSAGE_ID_WINDOWS7_FENCE_OUTOFORDER_SIGNAL = 1216, - D3D12_MESSAGE_ID_WINDOWS7_FENCE_OUTOFORDER_WAIT = 1217, - D3D12_MESSAGE_ID_VIDEO_CREATE_MOTION_ESTIMATOR_INVALID_ARGUMENT = 1218, - D3D12_MESSAGE_ID_VIDEO_CREATE_MOTION_VECTOR_HEAP_INVALID_ARGUMENT = 1219, - D3D12_MESSAGE_ID_ESTIMATE_MOTION_INVALID_ARGUMENT = 1220, - D3D12_MESSAGE_ID_RESOLVE_MOTION_VECTOR_HEAP_INVALID_ARGUMENT = 1221, - D3D12_MESSAGE_ID_GETGPUVIRTUALADDRESS_INVALID_HEAP_TYPE = 1222, - D3D12_MESSAGE_ID_SET_BACKGROUND_PROCESSING_MODE_INVALID_ARGUMENT = 1223, - D3D12_MESSAGE_ID_CREATE_COMMAND_LIST_INVALID_COMMAND_LIST_TYPE_FOR_FEATURE_LEVEL = 1224, - D3D12_MESSAGE_ID_CREATE_VIDEOEXTENSIONCOMMAND = 1225, - D3D12_MESSAGE_ID_LIVE_VIDEOEXTENSIONCOMMAND = 1226, - D3D12_MESSAGE_ID_DESTROY_VIDEOEXTENSIONCOMMAND = 1227, - D3D12_MESSAGE_ID_INVALID_VIDEO_EXTENSION_COMMAND_ID = 1228, - D3D12_MESSAGE_ID_VIDEO_EXTENSION_COMMAND_INVALID_ARGUMENT = 1229, - D3D12_MESSAGE_ID_CREATE_ROOT_SIGNATURE_NOT_UNIQUE_IN_DXIL_LIBRARY = 1230, - D3D12_MESSAGE_ID_VARIABLE_SHADING_RATE_NOT_ALLOWED_WITH_TIR = 1231, - D3D12_MESSAGE_ID_GEOMETRY_SHADER_OUTPUTTING_BOTH_VIEWPORT_ARRAY_INDEX_AND_SHADING_RATE_NOT_SUPPORTED_ON_DEVICE = 1232, - D3D12_MESSAGE_ID_RSSETSHADING_RATE_INVALID_SHADING_RATE = 1233, - D3D12_MESSAGE_ID_RSSETSHADING_RATE_SHADING_RATE_NOT_PERMITTED_BY_CAP = 1234, - D3D12_MESSAGE_ID_RSSETSHADING_RATE_INVALID_COMBINER = 1235, - D3D12_MESSAGE_ID_RSSETSHADINGRATEIMAGE_REQUIRES_TIER_2 = 1236, - D3D12_MESSAGE_ID_RSSETSHADINGRATE_REQUIRES_TIER_1 = 1237, - D3D12_MESSAGE_ID_SHADING_RATE_IMAGE_INCORRECT_FORMAT = 1238, - D3D12_MESSAGE_ID_SHADING_RATE_IMAGE_INCORRECT_ARRAY_SIZE = 1239, - D3D12_MESSAGE_ID_SHADING_RATE_IMAGE_INCORRECT_MIP_LEVEL = 1240, - D3D12_MESSAGE_ID_SHADING_RATE_IMAGE_INCORRECT_SAMPLE_COUNT = 1241, - D3D12_MESSAGE_ID_SHADING_RATE_IMAGE_INCORRECT_SAMPLE_QUALITY = 1242, - D3D12_MESSAGE_ID_NON_RETAIL_SHADER_MODEL_WONT_VALIDATE = 1243, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_AS_ROOT_SIGNATURE_MISMATCH = 1244, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_MS_ROOT_SIGNATURE_MISMATCH = 1245, - D3D12_MESSAGE_ID_ADD_TO_STATE_OBJECT_ERROR = 1246, - D3D12_MESSAGE_ID_CREATE_PROTECTED_RESOURCE_SESSION_INVALID_ARGUMENT = 1247, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_MS_PSO_DESC_MISMATCH = 1248, - D3D12_MESSAGE_ID_CREATEPIPELINESTATE_MS_INCOMPLETE_TYPE = 1249, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_AS_NOT_MS_MISMATCH = 1250, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_MS_NOT_PS_MISMATCH = 1251, - D3D12_MESSAGE_ID_NONZERO_SAMPLER_FEEDBACK_MIP_REGION_WITH_INCOMPATIBLE_FORMAT = 1252, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_INPUTLAYOUT_SHADER_MISMATCH = 1253, - D3D12_MESSAGE_ID_EMPTY_DISPATCH = 1254, - D3D12_MESSAGE_ID_RESOURCE_FORMAT_REQUIRES_SAMPLER_FEEDBACK_CAPABILITY = 1255, - D3D12_MESSAGE_ID_SAMPLER_FEEDBACK_MAP_INVALID_MIP_REGION = 1256, - D3D12_MESSAGE_ID_SAMPLER_FEEDBACK_MAP_INVALID_DIMENSION = 1257, - D3D12_MESSAGE_ID_SAMPLER_FEEDBACK_MAP_INVALID_SAMPLE_COUNT = 1258, - D3D12_MESSAGE_ID_SAMPLER_FEEDBACK_MAP_INVALID_SAMPLE_QUALITY = 1259, - D3D12_MESSAGE_ID_SAMPLER_FEEDBACK_MAP_INVALID_LAYOUT = 1260, - D3D12_MESSAGE_ID_SAMPLER_FEEDBACK_MAP_REQUIRES_UNORDERED_ACCESS_FLAG = 1261, - D3D12_MESSAGE_ID_SAMPLER_FEEDBACK_CREATE_UAV_NULL_ARGUMENTS = 1262, - D3D12_MESSAGE_ID_SAMPLER_FEEDBACK_UAV_REQUIRES_SAMPLER_FEEDBACK_CAPABILITY = 1263, - D3D12_MESSAGE_ID_SAMPLER_FEEDBACK_CREATE_UAV_REQUIRES_FEEDBACK_MAP_FORMAT = 1264, - D3D12_MESSAGE_ID_CREATEMESHSHADER_INVALIDSHADERBYTECODE = 1265, - D3D12_MESSAGE_ID_CREATEMESHSHADER_OUTOFMEMORY = 1266, - D3D12_MESSAGE_ID_CREATEMESHSHADERWITHSTREAMOUTPUT_INVALIDSHADERTYPE = 1267, - D3D12_MESSAGE_ID_RESOLVESUBRESOURCE_SAMPLER_FEEDBACK_TRANSCODE_INVALID_FORMAT = 1268, - D3D12_MESSAGE_ID_RESOLVESUBRESOURCE_SAMPLER_FEEDBACK_INVALID_MIP_LEVEL_COUNT = 1269, - D3D12_MESSAGE_ID_RESOLVESUBRESOURCE_SAMPLER_FEEDBACK_TRANSCODE_ARRAY_SIZE_MISMATCH = 1270, - D3D12_MESSAGE_ID_SAMPLER_FEEDBACK_CREATE_UAV_MISMATCHING_TARGETED_RESOURCE = 1271, - D3D12_MESSAGE_ID_CREATEMESHSHADER_OUTPUTEXCEEDSMAXSIZE = 1272, - D3D12_MESSAGE_ID_CREATEMESHSHADER_GROUPSHAREDEXCEEDSMAXSIZE = 1273, - D3D12_MESSAGE_ID_VERTEX_SHADER_OUTPUTTING_BOTH_VIEWPORT_ARRAY_INDEX_AND_SHADING_RATE_NOT_SUPPORTED_ON_DEVICE = 1274, - D3D12_MESSAGE_ID_MESH_SHADER_OUTPUTTING_BOTH_VIEWPORT_ARRAY_INDEX_AND_SHADING_RATE_NOT_SUPPORTED_ON_DEVICE = 1275, - D3D12_MESSAGE_ID_CREATEMESHSHADER_MISMATCHEDASMSPAYLOADSIZE = 1276, - D3D12_MESSAGE_ID_CREATE_ROOT_SIGNATURE_UNBOUNDED_STATIC_DESCRIPTORS = 1277, - D3D12_MESSAGE_ID_CREATEAMPLIFICATIONSHADER_INVALIDSHADERBYTECODE = 1278, - D3D12_MESSAGE_ID_CREATEAMPLIFICATIONSHADER_OUTOFMEMORY = 1279, - D3D12_MESSAGE_ID_CREATE_SHADERCACHESESSION = 1280, - D3D12_MESSAGE_ID_LIVE_SHADERCACHESESSION = 1281, - D3D12_MESSAGE_ID_DESTROY_SHADERCACHESESSION = 1282, - D3D12_MESSAGE_ID_CREATESHADERCACHESESSION_INVALIDARGS = 1283, - D3D12_MESSAGE_ID_CREATESHADERCACHESESSION_DISABLED = 1284, - D3D12_MESSAGE_ID_CREATESHADERCACHESESSION_ALREADYOPEN = 1285, - D3D12_MESSAGE_ID_SHADERCACHECONTROL_DEVELOPERMODE = 1286, - D3D12_MESSAGE_ID_SHADERCACHECONTROL_INVALIDFLAGS = 1287, - D3D12_MESSAGE_ID_SHADERCACHECONTROL_STATEALREADYSET = 1288, - D3D12_MESSAGE_ID_SHADERCACHECONTROL_IGNOREDFLAG = 1289, - D3D12_MESSAGE_ID_SHADERCACHESESSION_STOREVALUE_ALREADYPRESENT = 1290, - D3D12_MESSAGE_ID_SHADERCACHESESSION_STOREVALUE_HASHCOLLISION = 1291, - D3D12_MESSAGE_ID_SHADERCACHESESSION_STOREVALUE_CACHEFULL = 1292, - D3D12_MESSAGE_ID_SHADERCACHESESSION_FINDVALUE_NOTFOUND = 1293, - D3D12_MESSAGE_ID_SHADERCACHESESSION_CORRUPT = 1294, - D3D12_MESSAGE_ID_SHADERCACHESESSION_DISABLED = 1295, - D3D12_MESSAGE_ID_OVERSIZED_DISPATCH = 1296, - D3D12_MESSAGE_ID_CREATE_VIDEOENCODER = 1297, - D3D12_MESSAGE_ID_LIVE_VIDEOENCODER = 1298, - D3D12_MESSAGE_ID_DESTROY_VIDEOENCODER = 1299, - D3D12_MESSAGE_ID_CREATE_VIDEOENCODERHEAP = 1300, - D3D12_MESSAGE_ID_LIVE_VIDEOENCODERHEAP = 1301, - D3D12_MESSAGE_ID_DESTROY_VIDEOENCODERHEAP = 1302, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_MISMATCH_ENCODE_REFERENCE_ONLY_FLAG = 1303, - D3D12_MESSAGE_ID_COPYRESOURCE_MISMATCH_ENCODE_REFERENCE_ONLY_FLAG = 1304, - D3D12_MESSAGE_ID_ENCODE_FRAME_INVALID_PARAMETERS = 1305, - D3D12_MESSAGE_ID_ENCODE_FRAME_UNSUPPORTED_PARAMETERS = 1306, - D3D12_MESSAGE_ID_RESOLVE_ENCODER_OUTPUT_METADATA_INVALID_PARAMETERS = 1307, - D3D12_MESSAGE_ID_RESOLVE_ENCODER_OUTPUT_METADATA_UNSUPPORTED_PARAMETERS = 1308, - D3D12_MESSAGE_ID_CREATE_VIDEO_ENCODER_INVALID_PARAMETERS = 1309, - D3D12_MESSAGE_ID_CREATE_VIDEO_ENCODER_UNSUPPORTED_PARAMETERS = 1310, - D3D12_MESSAGE_ID_CREATE_VIDEO_ENCODER_HEAP_INVALID_PARAMETERS = 1311, - D3D12_MESSAGE_ID_CREATE_VIDEO_ENCODER_HEAP_UNSUPPORTED_PARAMETERS = 1312, - D3D12_MESSAGE_ID_CREATECOMMANDLIST_NULL_COMMANDALLOCATOR = 1313, - D3D12_MESSAGE_ID_CLEAR_UNORDERED_ACCESS_VIEW_INVALID_DESCRIPTOR_HANDLE = 1314, - D3D12_MESSAGE_ID_DESCRIPTOR_HEAP_NOT_SHADER_VISIBLE = 1315, - D3D12_MESSAGE_ID_CREATEBLENDSTATE_BLENDOP_WARNING = 1316, - D3D12_MESSAGE_ID_CREATEBLENDSTATE_BLENDOPALPHA_WARNING = 1317, - D3D12_MESSAGE_ID_WRITE_COMBINE_PERFORMANCE_WARNING = 1318, - D3D12_MESSAGE_ID_RESOLVE_QUERY_INVALID_QUERY_STATE = 1319, - D3D12_MESSAGE_ID_SETPRIVATEDATA_NO_ACCESS = 1320, - D3D12_MESSAGE_ID_COMMAND_LIST_STATIC_DESCRIPTOR_SAMPLER_MODE_MISMATCH = 1321, - D3D12_MESSAGE_ID_GETCOPYABLEFOOTPRINTS_UNSUPPORTED_BUFFER_WIDTH = 1322, - D3D12_MESSAGE_ID_CREATEMESHSHADER_TOPOLOGY_MISMATCH = 1323, - D3D12_MESSAGE_ID_VRS_SUM_COMBINER_REQUIRES_CAPABILITY = 1324, - D3D12_MESSAGE_ID_SETTING_SHADING_RATE_FROM_MS_REQUIRES_CAPABILITY = 1325, - D3D12_MESSAGE_ID_SHADERCACHESESSION_SHADERCACHEDELETE_NOTSUPPORTED = 1326, - D3D12_MESSAGE_ID_SHADERCACHECONTROL_SHADERCACHECLEAR_NOTSUPPORTED = 1327, - D3D12_MESSAGE_ID_CREATERESOURCE_STATE_IGNORED = 1328, - D3D12_MESSAGE_ID_UNUSED_CROSS_EXECUTE_SPLIT_BARRIER = 1329, - D3D12_MESSAGE_ID_DEVICE_OPEN_SHARED_HANDLE_ACCESS_DENIED = 1330, - D3D12_MESSAGE_ID_INCOMPATIBLE_BARRIER_VALUES = 1331, - D3D12_MESSAGE_ID_INCOMPATIBLE_BARRIER_ACCESS = 1332, - D3D12_MESSAGE_ID_INCOMPATIBLE_BARRIER_SYNC = 1333, - D3D12_MESSAGE_ID_INCOMPATIBLE_BARRIER_LAYOUT = 1334, - D3D12_MESSAGE_ID_INCOMPATIBLE_BARRIER_TYPE = 1335, - D3D12_MESSAGE_ID_OUT_OF_BOUNDS_BARRIER_SUBRESOURCE_RANGE = 1336, - D3D12_MESSAGE_ID_INCOMPATIBLE_BARRIER_RESOURCE_DIMENSION = 1337, - D3D12_MESSAGE_ID_SET_SCISSOR_RECTS_INVALID_RECT = 1338, - D3D12_MESSAGE_ID_SHADING_RATE_SOURCE_REQUIRES_DIMENSION_TEXTURE2D = 1339, - D3D12_MESSAGE_ID_BUFFER_BARRIER_SUBREGION_OUT_OF_BOUNDS = 1340, - D3D12_MESSAGE_ID_UNSUPPORTED_BARRIER_LAYOUT = 1341, - D3D12_MESSAGE_ID_CREATERESOURCEANDHEAP_INVALID_PARAMETERS = 1342, - D3D12_MESSAGE_ID_ENHANCED_BARRIERS_NOT_SUPPORTED = 1343, - D3D12_MESSAGE_ID_LEGACY_BARRIER_VALIDATION_FORCED_ON = 1346, - D3D12_MESSAGE_ID_EMPTY_ROOT_DESCRIPTOR_TABLE = 1347, - D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_ELEMENT_OFFSET_UNALIGNED = 1348, - D3D12_MESSAGE_ID_ALPHA_BLEND_FACTOR_NOT_SUPPORTED = 1349, - D3D12_MESSAGE_ID_BARRIER_INTEROP_INVALID_LAYOUT = 1350, - D3D12_MESSAGE_ID_BARRIER_INTEROP_INVALID_STATE = 1351, - D3D12_MESSAGE_ID_GRAPHICS_PIPELINE_STATE_DESC_ZERO_SAMPLE_MASK = 1352, - D3D12_MESSAGE_ID_INDEPENDENT_STENCIL_REF_NOT_SUPPORTED = 1353, - D3D12_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INDEPENDENT_MASKS_UNSUPPORTED = 1354, - D3D12_MESSAGE_ID_TEXTURE_BARRIER_SUBRESOURCES_OUT_OF_BOUNDS = 1355, - D3D12_MESSAGE_ID_NON_OPTIMAL_BARRIER_ONLY_EXECUTE_COMMAND_LISTS = 1356, - D3D12_MESSAGE_ID_EXECUTE_INDIRECT_ZERO_COMMAND_COUNT = 1357, - D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_INCOMPATIBLE_TEXTURE_LAYOUT = 1358, - D3D12_MESSAGE_ID_DYNAMIC_INDEX_BUFFER_STRIP_CUT_NOT_SUPPORTED = 1359, - D3D12_MESSAGE_ID_PRIMITIVE_TOPOLOGY_TRIANGLE_FANS_NOT_SUPPORTED = 1360, - D3D12_MESSAGE_ID_CREATE_SAMPLER_COMPARISON_FUNC_IGNORED = 1361, - D3D12_MESSAGE_ID_CREATEHEAP_INVALIDHEAPTYPE = 1362, - D3D12_MESSAGE_ID_CREATERESOURCEANDHEAP_INVALIDHEAPTYPE = 1363, - D3D12_MESSAGE_ID_DYNAMIC_DEPTH_BIAS_NOT_SUPPORTED = 1364, - D3D12_MESSAGE_ID_CREATERASTERIZERSTATE_NON_WHOLE_DYNAMIC_DEPTH_BIAS = 1365, - D3D12_MESSAGE_ID_DYNAMIC_DEPTH_BIAS_FLAG_MISSING = 1366, - D3D12_MESSAGE_ID_DYNAMIC_DEPTH_BIAS_NO_PIPELINE = 1367, - D3D12_MESSAGE_ID_DYNAMIC_INDEX_BUFFER_STRIP_CUT_FLAG_MISSING = 1368, - D3D12_MESSAGE_ID_DYNAMIC_INDEX_BUFFER_STRIP_CUT_NO_PIPELINE = 1369, - D3D12_MESSAGE_ID_NONNORMALIZED_COORDINATE_SAMPLING_NOT_SUPPORTED = 1370, - D3D12_MESSAGE_ID_INVALID_CAST_TARGET = 1371, - D3D12_MESSAGE_ID_RENDER_PASS_COMMANDLIST_INVALID_END_STATE = 1372, - D3D12_MESSAGE_ID_RENDER_PASS_COMMANDLIST_INVALID_START_STATE = 1373, - D3D12_MESSAGE_ID_RENDER_PASS_MISMATCHING_ACCESS = 1374, - D3D12_MESSAGE_ID_RENDER_PASS_MISMATCHING_LOCAL_PRESERVE_PARAMETERS = 1375, - D3D12_MESSAGE_ID_RENDER_PASS_LOCAL_PRESERVE_RENDER_PARAMETERS_ERROR = 1376, - D3D12_MESSAGE_ID_RENDER_PASS_LOCAL_DEPTH_STENCIL_ERROR = 1377, - D3D12_MESSAGE_ID_DRAW_POTENTIALLY_OUTSIDE_OF_VALID_RENDER_AREA = 1378, - D3D12_MESSAGE_ID_CREATERASTERIZERSTATE_INVALID_LINERASTERIZATIONMODE = 1379, - D3D12_MESSAGE_ID_CREATERESOURCE_INVALIDALIGNMENT_SMALLRESOURCE = 1380, - D3D12_MESSAGE_ID_GENERIC_DEVICE_OPERATION_UNSUPPORTED = 1381, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_RENDER_TARGET_WRONG_WRITE_MASK = 1382, - D3D12_MESSAGE_ID_PROBABLE_PIX_EVENT_LEAK = 1383, - D3D12_MESSAGE_ID_PIX_EVENT_UNDERFLOW = 1384, - D3D12_MESSAGE_ID_RECREATEAT_INVALID_TARGET = 1385, - D3D12_MESSAGE_ID_RECREATEAT_INSUFFICIENT_SUPPORT = 1386, - D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_STRUCTURED_BUFFER_STRIDE_MISMATCH = 1387, - D3D12_MESSAGE_ID_DISPATCH_GRAPH_INVALID = 1388, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_TARGET_FORMAT_INVALID = 1389, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_TARGET_DIMENSION_INVALID = 1390, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_SOURCE_COLOR_FORMAT_INVALID = 1391, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_SOURCE_DEPTH_FORMAT_INVALID = 1392, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_EXPOSURE_SCALE_FORMAT_INVALID = 1393, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_ENGINE_CREATE_FLAGS_INVALID = 1394, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_EXTENSION_INTERNAL_LOAD_FAILURE = 1395, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_EXTENSION_INTERNAL_ENGINE_CREATION_ERROR = 1396, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_EXTENSION_INTERNAL_UPSCALER_CREATION_ERROR = 1397, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_EXTENSION_INTERNAL_UPSCALER_EXECUTION_ERROR = 1398, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_UPSCALER_EXECUTE_REGION_INVALID = 1399, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_UPSCALER_EXECUTE_TIME_DELTA_INVALID = 1400, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_UPSCALER_EXECUTE_REQUIRED_TEXTURE_IS_NULL = 1401, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_UPSCALER_EXECUTE_MOTION_VECTORS_FORMAT_INVALID = 1402, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_UPSCALER_EXECUTE_FLAGS_INVALID = 1403, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_UPSCALER_EXECUTE_FORMAT_INVALID = 1404, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_UPSCALER_EXECUTE_EXPOSURE_SCALE_TEXTURE_SIZE_INVALID = 1405, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_VARIANT_INDEX_OUT_OF_BOUNDS = 1406, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_VARIANT_ID_NOT_FOUND = 1407, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_DUPLICATE_VARIANT_ID = 1408, - D3D12_MESSAGE_ID_DIRECTSR_OUT_OF_MEMORY = 1409, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_UPSCALER_EXECUTE_UNEXPECTED_TEXTURE_IS_IGNORED = 1410, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_UPSCALER_EVICT_UNDERFLOW = 1411, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_UPSCALER_EXECUTE_OPTIONAL_TEXTURE_IS_NULL = 1412, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_UPSCALER_EXECUTE_INVALID_CAMERA_JITTER = 1413, - D3D12_MESSAGE_ID_CREATE_STATE_OBJECT_WARNING = 1414, - D3D12_MESSAGE_ID_GUID_TEXTURE_LAYOUT_UNSUPPORTED = 1415, - D3D12_MESSAGE_ID_RESOLVE_ENCODER_INPUT_PARAM_LAYOUT_INVALID_PARAMETERS = 1416, - D3D12_MESSAGE_ID_INVALID_BARRIER_ACCESS = 1417, - D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_INSTANCE_COUNT_ZERO = 1418, - D3D12_MESSAGE_ID_DESCRIPTOR_HEAP_NOT_SET_BEFORE_ROOT_SIGNATURE_WITH_DIRECTLY_INDEXED_FLAG = 1419, - D3D12_MESSAGE_ID_DIFFERENT_DESCRIPTOR_HEAP_SET_AFTER_ROOT_SIGNATURE_WITH_DIRECTLY_INDEXED_FLAG = 1420, - D3D12_MESSAGE_ID_APPLICATION_SPECIFIC_DRIVER_STATE_NOT_SUPPORTED = 1421, - D3D12_MESSAGE_ID_RENDER_TARGET_OR_DEPTH_STENCIL_RESOUCE_NOT_INITIALIZED = 1422, - D3D12_MESSAGE_ID_BYTECODE_VALIDATION_ERROR = 1423, - D3D12_MESSAGE_ID_D3D12_MESSAGES_END = ( D3D12_MESSAGE_ID_BYTECODE_VALIDATION_ERROR + 1 ) - } D3D12_MESSAGE_ID; - -typedef struct D3D12_MESSAGE - { - D3D12_MESSAGE_CATEGORY Category; - D3D12_MESSAGE_SEVERITY Severity; - D3D12_MESSAGE_ID ID; - _Field_size_(DescriptionByteLength) const char *pDescription; - SIZE_T DescriptionByteLength; - } D3D12_MESSAGE; - -typedef struct D3D12_INFO_QUEUE_FILTER_DESC - { - UINT NumCategories; - _Field_size_(NumCategories) D3D12_MESSAGE_CATEGORY *pCategoryList; - UINT NumSeverities; - _Field_size_(NumSeverities) D3D12_MESSAGE_SEVERITY *pSeverityList; - UINT NumIDs; - _Field_size_(NumIDs) D3D12_MESSAGE_ID *pIDList; - } D3D12_INFO_QUEUE_FILTER_DESC; - -typedef struct D3D12_INFO_QUEUE_FILTER - { - D3D12_INFO_QUEUE_FILTER_DESC AllowList; - D3D12_INFO_QUEUE_FILTER_DESC DenyList; - } D3D12_INFO_QUEUE_FILTER; - -#define D3D12_INFO_QUEUE_DEFAULT_MESSAGE_COUNT_LIMIT 1024 - -extern RPC_IF_HANDLE __MIDL_itf_d3d12sdklayers_0000_0018_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12sdklayers_0000_0018_v0_0_s_ifspec; - -#ifndef __ID3D12InfoQueue_INTERFACE_DEFINED__ -#define __ID3D12InfoQueue_INTERFACE_DEFINED__ - -/* interface ID3D12InfoQueue */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12InfoQueue; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("0742a90b-c387-483f-b946-30a7e4e61458") - ID3D12InfoQueue : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE SetMessageCountLimit( - _In_ UINT64 MessageCountLimit) = 0; - - virtual void STDMETHODCALLTYPE ClearStoredMessages( void) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetMessage( - _In_ UINT64 MessageIndex, - _Out_writes_bytes_opt_(*pMessageByteLength) D3D12_MESSAGE *pMessage, - _Inout_ SIZE_T *pMessageByteLength) = 0; - - virtual UINT64 STDMETHODCALLTYPE GetNumMessagesAllowedByStorageFilter( void) = 0; - - virtual UINT64 STDMETHODCALLTYPE GetNumMessagesDeniedByStorageFilter( void) = 0; - - virtual UINT64 STDMETHODCALLTYPE GetNumStoredMessages( void) = 0; - - virtual UINT64 STDMETHODCALLTYPE GetNumStoredMessagesAllowedByRetrievalFilter( void) = 0; - - virtual UINT64 STDMETHODCALLTYPE GetNumMessagesDiscardedByMessageCountLimit( void) = 0; - - virtual UINT64 STDMETHODCALLTYPE GetMessageCountLimit( void) = 0; - - virtual HRESULT STDMETHODCALLTYPE AddStorageFilterEntries( - _In_ D3D12_INFO_QUEUE_FILTER *pFilter) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetStorageFilter( - _Out_writes_bytes_opt_(*pFilterByteLength) D3D12_INFO_QUEUE_FILTER *pFilter, - _Inout_ SIZE_T *pFilterByteLength) = 0; - - virtual void STDMETHODCALLTYPE ClearStorageFilter( void) = 0; - - virtual HRESULT STDMETHODCALLTYPE PushEmptyStorageFilter( void) = 0; - - virtual HRESULT STDMETHODCALLTYPE PushCopyOfStorageFilter( void) = 0; - - virtual HRESULT STDMETHODCALLTYPE PushStorageFilter( - _In_ D3D12_INFO_QUEUE_FILTER *pFilter) = 0; - - virtual void STDMETHODCALLTYPE PopStorageFilter( void) = 0; - - virtual UINT STDMETHODCALLTYPE GetStorageFilterStackSize( void) = 0; - - virtual HRESULT STDMETHODCALLTYPE AddRetrievalFilterEntries( - _In_ D3D12_INFO_QUEUE_FILTER *pFilter) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetRetrievalFilter( - _Out_writes_bytes_opt_(*pFilterByteLength) D3D12_INFO_QUEUE_FILTER *pFilter, - _Inout_ SIZE_T *pFilterByteLength) = 0; - - virtual void STDMETHODCALLTYPE ClearRetrievalFilter( void) = 0; - - virtual HRESULT STDMETHODCALLTYPE PushEmptyRetrievalFilter( void) = 0; - - virtual HRESULT STDMETHODCALLTYPE PushCopyOfRetrievalFilter( void) = 0; - - virtual HRESULT STDMETHODCALLTYPE PushRetrievalFilter( - _In_ D3D12_INFO_QUEUE_FILTER *pFilter) = 0; - - virtual void STDMETHODCALLTYPE PopRetrievalFilter( void) = 0; - - virtual UINT STDMETHODCALLTYPE GetRetrievalFilterStackSize( void) = 0; - - virtual HRESULT STDMETHODCALLTYPE AddMessage( - _In_ D3D12_MESSAGE_CATEGORY Category, - _In_ D3D12_MESSAGE_SEVERITY Severity, - _In_ D3D12_MESSAGE_ID ID, - _In_ LPCSTR pDescription) = 0; - - virtual HRESULT STDMETHODCALLTYPE AddApplicationMessage( - _In_ D3D12_MESSAGE_SEVERITY Severity, - _In_ LPCSTR pDescription) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetBreakOnCategory( - _In_ D3D12_MESSAGE_CATEGORY Category, - _In_ BOOL bEnable) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetBreakOnSeverity( - _In_ D3D12_MESSAGE_SEVERITY Severity, - _In_ BOOL bEnable) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetBreakOnID( - _In_ D3D12_MESSAGE_ID ID, - _In_ BOOL bEnable) = 0; - - virtual BOOL STDMETHODCALLTYPE GetBreakOnCategory( - _In_ D3D12_MESSAGE_CATEGORY Category) = 0; - - virtual BOOL STDMETHODCALLTYPE GetBreakOnSeverity( - _In_ D3D12_MESSAGE_SEVERITY Severity) = 0; - - virtual BOOL STDMETHODCALLTYPE GetBreakOnID( - _In_ D3D12_MESSAGE_ID ID) = 0; - - virtual void STDMETHODCALLTYPE SetMuteDebugOutput( - _In_ BOOL bMute) = 0; - - virtual BOOL STDMETHODCALLTYPE GetMuteDebugOutput( void) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12InfoQueueVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12InfoQueue * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12InfoQueue * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12InfoQueue * This); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, SetMessageCountLimit) - HRESULT ( STDMETHODCALLTYPE *SetMessageCountLimit )( - ID3D12InfoQueue * This, - _In_ UINT64 MessageCountLimit); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, ClearStoredMessages) - void ( STDMETHODCALLTYPE *ClearStoredMessages )( - ID3D12InfoQueue * This); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, GetMessage) - HRESULT ( STDMETHODCALLTYPE *GetMessage )( - ID3D12InfoQueue * This, - _In_ UINT64 MessageIndex, - _Out_writes_bytes_opt_(*pMessageByteLength) D3D12_MESSAGE *pMessage, - _Inout_ SIZE_T *pMessageByteLength); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, GetNumMessagesAllowedByStorageFilter) - UINT64 ( STDMETHODCALLTYPE *GetNumMessagesAllowedByStorageFilter )( - ID3D12InfoQueue * This); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, GetNumMessagesDeniedByStorageFilter) - UINT64 ( STDMETHODCALLTYPE *GetNumMessagesDeniedByStorageFilter )( - ID3D12InfoQueue * This); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, GetNumStoredMessages) - UINT64 ( STDMETHODCALLTYPE *GetNumStoredMessages )( - ID3D12InfoQueue * This); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, GetNumStoredMessagesAllowedByRetrievalFilter) - UINT64 ( STDMETHODCALLTYPE *GetNumStoredMessagesAllowedByRetrievalFilter )( - ID3D12InfoQueue * This); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, GetNumMessagesDiscardedByMessageCountLimit) - UINT64 ( STDMETHODCALLTYPE *GetNumMessagesDiscardedByMessageCountLimit )( - ID3D12InfoQueue * This); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, GetMessageCountLimit) - UINT64 ( STDMETHODCALLTYPE *GetMessageCountLimit )( - ID3D12InfoQueue * This); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, AddStorageFilterEntries) - HRESULT ( STDMETHODCALLTYPE *AddStorageFilterEntries )( - ID3D12InfoQueue * This, - _In_ D3D12_INFO_QUEUE_FILTER *pFilter); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, GetStorageFilter) - HRESULT ( STDMETHODCALLTYPE *GetStorageFilter )( - ID3D12InfoQueue * This, - _Out_writes_bytes_opt_(*pFilterByteLength) D3D12_INFO_QUEUE_FILTER *pFilter, - _Inout_ SIZE_T *pFilterByteLength); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, ClearStorageFilter) - void ( STDMETHODCALLTYPE *ClearStorageFilter )( - ID3D12InfoQueue * This); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, PushEmptyStorageFilter) - HRESULT ( STDMETHODCALLTYPE *PushEmptyStorageFilter )( - ID3D12InfoQueue * This); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, PushCopyOfStorageFilter) - HRESULT ( STDMETHODCALLTYPE *PushCopyOfStorageFilter )( - ID3D12InfoQueue * This); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, PushStorageFilter) - HRESULT ( STDMETHODCALLTYPE *PushStorageFilter )( - ID3D12InfoQueue * This, - _In_ D3D12_INFO_QUEUE_FILTER *pFilter); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, PopStorageFilter) - void ( STDMETHODCALLTYPE *PopStorageFilter )( - ID3D12InfoQueue * This); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, GetStorageFilterStackSize) - UINT ( STDMETHODCALLTYPE *GetStorageFilterStackSize )( - ID3D12InfoQueue * This); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, AddRetrievalFilterEntries) - HRESULT ( STDMETHODCALLTYPE *AddRetrievalFilterEntries )( - ID3D12InfoQueue * This, - _In_ D3D12_INFO_QUEUE_FILTER *pFilter); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, GetRetrievalFilter) - HRESULT ( STDMETHODCALLTYPE *GetRetrievalFilter )( - ID3D12InfoQueue * This, - _Out_writes_bytes_opt_(*pFilterByteLength) D3D12_INFO_QUEUE_FILTER *pFilter, - _Inout_ SIZE_T *pFilterByteLength); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, ClearRetrievalFilter) - void ( STDMETHODCALLTYPE *ClearRetrievalFilter )( - ID3D12InfoQueue * This); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, PushEmptyRetrievalFilter) - HRESULT ( STDMETHODCALLTYPE *PushEmptyRetrievalFilter )( - ID3D12InfoQueue * This); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, PushCopyOfRetrievalFilter) - HRESULT ( STDMETHODCALLTYPE *PushCopyOfRetrievalFilter )( - ID3D12InfoQueue * This); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, PushRetrievalFilter) - HRESULT ( STDMETHODCALLTYPE *PushRetrievalFilter )( - ID3D12InfoQueue * This, - _In_ D3D12_INFO_QUEUE_FILTER *pFilter); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, PopRetrievalFilter) - void ( STDMETHODCALLTYPE *PopRetrievalFilter )( - ID3D12InfoQueue * This); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, GetRetrievalFilterStackSize) - UINT ( STDMETHODCALLTYPE *GetRetrievalFilterStackSize )( - ID3D12InfoQueue * This); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, AddMessage) - HRESULT ( STDMETHODCALLTYPE *AddMessage )( - ID3D12InfoQueue * This, - _In_ D3D12_MESSAGE_CATEGORY Category, - _In_ D3D12_MESSAGE_SEVERITY Severity, - _In_ D3D12_MESSAGE_ID ID, - _In_ LPCSTR pDescription); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, AddApplicationMessage) - HRESULT ( STDMETHODCALLTYPE *AddApplicationMessage )( - ID3D12InfoQueue * This, - _In_ D3D12_MESSAGE_SEVERITY Severity, - _In_ LPCSTR pDescription); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, SetBreakOnCategory) - HRESULT ( STDMETHODCALLTYPE *SetBreakOnCategory )( - ID3D12InfoQueue * This, - _In_ D3D12_MESSAGE_CATEGORY Category, - _In_ BOOL bEnable); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, SetBreakOnSeverity) - HRESULT ( STDMETHODCALLTYPE *SetBreakOnSeverity )( - ID3D12InfoQueue * This, - _In_ D3D12_MESSAGE_SEVERITY Severity, - _In_ BOOL bEnable); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, SetBreakOnID) - HRESULT ( STDMETHODCALLTYPE *SetBreakOnID )( - ID3D12InfoQueue * This, - _In_ D3D12_MESSAGE_ID ID, - _In_ BOOL bEnable); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, GetBreakOnCategory) - BOOL ( STDMETHODCALLTYPE *GetBreakOnCategory )( - ID3D12InfoQueue * This, - _In_ D3D12_MESSAGE_CATEGORY Category); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, GetBreakOnSeverity) - BOOL ( STDMETHODCALLTYPE *GetBreakOnSeverity )( - ID3D12InfoQueue * This, - _In_ D3D12_MESSAGE_SEVERITY Severity); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, GetBreakOnID) - BOOL ( STDMETHODCALLTYPE *GetBreakOnID )( - ID3D12InfoQueue * This, - _In_ D3D12_MESSAGE_ID ID); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, SetMuteDebugOutput) - void ( STDMETHODCALLTYPE *SetMuteDebugOutput )( - ID3D12InfoQueue * This, - _In_ BOOL bMute); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, GetMuteDebugOutput) - BOOL ( STDMETHODCALLTYPE *GetMuteDebugOutput )( - ID3D12InfoQueue * This); - - END_INTERFACE - } ID3D12InfoQueueVtbl; - - interface ID3D12InfoQueue - { - CONST_VTBL struct ID3D12InfoQueueVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12InfoQueue_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12InfoQueue_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12InfoQueue_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12InfoQueue_SetMessageCountLimit(This,MessageCountLimit) \ - ( (This)->lpVtbl -> SetMessageCountLimit(This,MessageCountLimit) ) - -#define ID3D12InfoQueue_ClearStoredMessages(This) \ - ( (This)->lpVtbl -> ClearStoredMessages(This) ) - -#define ID3D12InfoQueue_GetMessage(This,MessageIndex,pMessage,pMessageByteLength) \ - ( (This)->lpVtbl -> GetMessage(This,MessageIndex,pMessage,pMessageByteLength) ) - -#define ID3D12InfoQueue_GetNumMessagesAllowedByStorageFilter(This) \ - ( (This)->lpVtbl -> GetNumMessagesAllowedByStorageFilter(This) ) - -#define ID3D12InfoQueue_GetNumMessagesDeniedByStorageFilter(This) \ - ( (This)->lpVtbl -> GetNumMessagesDeniedByStorageFilter(This) ) - -#define ID3D12InfoQueue_GetNumStoredMessages(This) \ - ( (This)->lpVtbl -> GetNumStoredMessages(This) ) - -#define ID3D12InfoQueue_GetNumStoredMessagesAllowedByRetrievalFilter(This) \ - ( (This)->lpVtbl -> GetNumStoredMessagesAllowedByRetrievalFilter(This) ) - -#define ID3D12InfoQueue_GetNumMessagesDiscardedByMessageCountLimit(This) \ - ( (This)->lpVtbl -> GetNumMessagesDiscardedByMessageCountLimit(This) ) - -#define ID3D12InfoQueue_GetMessageCountLimit(This) \ - ( (This)->lpVtbl -> GetMessageCountLimit(This) ) - -#define ID3D12InfoQueue_AddStorageFilterEntries(This,pFilter) \ - ( (This)->lpVtbl -> AddStorageFilterEntries(This,pFilter) ) - -#define ID3D12InfoQueue_GetStorageFilter(This,pFilter,pFilterByteLength) \ - ( (This)->lpVtbl -> GetStorageFilter(This,pFilter,pFilterByteLength) ) - -#define ID3D12InfoQueue_ClearStorageFilter(This) \ - ( (This)->lpVtbl -> ClearStorageFilter(This) ) - -#define ID3D12InfoQueue_PushEmptyStorageFilter(This) \ - ( (This)->lpVtbl -> PushEmptyStorageFilter(This) ) - -#define ID3D12InfoQueue_PushCopyOfStorageFilter(This) \ - ( (This)->lpVtbl -> PushCopyOfStorageFilter(This) ) - -#define ID3D12InfoQueue_PushStorageFilter(This,pFilter) \ - ( (This)->lpVtbl -> PushStorageFilter(This,pFilter) ) - -#define ID3D12InfoQueue_PopStorageFilter(This) \ - ( (This)->lpVtbl -> PopStorageFilter(This) ) - -#define ID3D12InfoQueue_GetStorageFilterStackSize(This) \ - ( (This)->lpVtbl -> GetStorageFilterStackSize(This) ) - -#define ID3D12InfoQueue_AddRetrievalFilterEntries(This,pFilter) \ - ( (This)->lpVtbl -> AddRetrievalFilterEntries(This,pFilter) ) - -#define ID3D12InfoQueue_GetRetrievalFilter(This,pFilter,pFilterByteLength) \ - ( (This)->lpVtbl -> GetRetrievalFilter(This,pFilter,pFilterByteLength) ) - -#define ID3D12InfoQueue_ClearRetrievalFilter(This) \ - ( (This)->lpVtbl -> ClearRetrievalFilter(This) ) - -#define ID3D12InfoQueue_PushEmptyRetrievalFilter(This) \ - ( (This)->lpVtbl -> PushEmptyRetrievalFilter(This) ) - -#define ID3D12InfoQueue_PushCopyOfRetrievalFilter(This) \ - ( (This)->lpVtbl -> PushCopyOfRetrievalFilter(This) ) - -#define ID3D12InfoQueue_PushRetrievalFilter(This,pFilter) \ - ( (This)->lpVtbl -> PushRetrievalFilter(This,pFilter) ) - -#define ID3D12InfoQueue_PopRetrievalFilter(This) \ - ( (This)->lpVtbl -> PopRetrievalFilter(This) ) - -#define ID3D12InfoQueue_GetRetrievalFilterStackSize(This) \ - ( (This)->lpVtbl -> GetRetrievalFilterStackSize(This) ) - -#define ID3D12InfoQueue_AddMessage(This,Category,Severity,ID,pDescription) \ - ( (This)->lpVtbl -> AddMessage(This,Category,Severity,ID,pDescription) ) - -#define ID3D12InfoQueue_AddApplicationMessage(This,Severity,pDescription) \ - ( (This)->lpVtbl -> AddApplicationMessage(This,Severity,pDescription) ) - -#define ID3D12InfoQueue_SetBreakOnCategory(This,Category,bEnable) \ - ( (This)->lpVtbl -> SetBreakOnCategory(This,Category,bEnable) ) - -#define ID3D12InfoQueue_SetBreakOnSeverity(This,Severity,bEnable) \ - ( (This)->lpVtbl -> SetBreakOnSeverity(This,Severity,bEnable) ) - -#define ID3D12InfoQueue_SetBreakOnID(This,ID,bEnable) \ - ( (This)->lpVtbl -> SetBreakOnID(This,ID,bEnable) ) - -#define ID3D12InfoQueue_GetBreakOnCategory(This,Category) \ - ( (This)->lpVtbl -> GetBreakOnCategory(This,Category) ) - -#define ID3D12InfoQueue_GetBreakOnSeverity(This,Severity) \ - ( (This)->lpVtbl -> GetBreakOnSeverity(This,Severity) ) - -#define ID3D12InfoQueue_GetBreakOnID(This,ID) \ - ( (This)->lpVtbl -> GetBreakOnID(This,ID) ) - -#define ID3D12InfoQueue_SetMuteDebugOutput(This,bMute) \ - ( (This)->lpVtbl -> SetMuteDebugOutput(This,bMute) ) - -#define ID3D12InfoQueue_GetMuteDebugOutput(This) \ - ( (This)->lpVtbl -> GetMuteDebugOutput(This) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12InfoQueue_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12sdklayers_0000_0019 */ -/* [local] */ - -typedef -enum D3D12_MESSAGE_CALLBACK_FLAGS - { - D3D12_MESSAGE_CALLBACK_FLAG_NONE = 0, - D3D12_MESSAGE_CALLBACK_IGNORE_FILTERS = 0x1 - } D3D12_MESSAGE_CALLBACK_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_MESSAGE_CALLBACK_FLAGS) -typedef void ( __stdcall *D3D12MessageFunc )( - D3D12_MESSAGE_CATEGORY Category, - D3D12_MESSAGE_SEVERITY Severity, - D3D12_MESSAGE_ID ID, - LPCSTR pDescription, - void *pContext); - -extern RPC_IF_HANDLE __MIDL_itf_d3d12sdklayers_0000_0019_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12sdklayers_0000_0019_v0_0_s_ifspec; - -#ifndef __ID3D12InfoQueue1_INTERFACE_DEFINED__ -#define __ID3D12InfoQueue1_INTERFACE_DEFINED__ - -/* interface ID3D12InfoQueue1 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12InfoQueue1; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("2852dd88-b484-4c0c-b6b1-67168500e600") - ID3D12InfoQueue1 : public ID3D12InfoQueue - { - public: - virtual HRESULT STDMETHODCALLTYPE RegisterMessageCallback( - _In_ D3D12MessageFunc CallbackFunc, - _In_ D3D12_MESSAGE_CALLBACK_FLAGS CallbackFilterFlags, - _Inout_ void *pContext, - _Inout_ DWORD *pCallbackCookie) = 0; - - virtual HRESULT STDMETHODCALLTYPE UnregisterMessageCallback( - _In_ DWORD CallbackCookie) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12InfoQueue1Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12InfoQueue1 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12InfoQueue1 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12InfoQueue1 * This); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, SetMessageCountLimit) - HRESULT ( STDMETHODCALLTYPE *SetMessageCountLimit )( - ID3D12InfoQueue1 * This, - _In_ UINT64 MessageCountLimit); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, ClearStoredMessages) - void ( STDMETHODCALLTYPE *ClearStoredMessages )( - ID3D12InfoQueue1 * This); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, GetMessage) - HRESULT ( STDMETHODCALLTYPE *GetMessage )( - ID3D12InfoQueue1 * This, - _In_ UINT64 MessageIndex, - _Out_writes_bytes_opt_(*pMessageByteLength) D3D12_MESSAGE *pMessage, - _Inout_ SIZE_T *pMessageByteLength); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, GetNumMessagesAllowedByStorageFilter) - UINT64 ( STDMETHODCALLTYPE *GetNumMessagesAllowedByStorageFilter )( - ID3D12InfoQueue1 * This); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, GetNumMessagesDeniedByStorageFilter) - UINT64 ( STDMETHODCALLTYPE *GetNumMessagesDeniedByStorageFilter )( - ID3D12InfoQueue1 * This); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, GetNumStoredMessages) - UINT64 ( STDMETHODCALLTYPE *GetNumStoredMessages )( - ID3D12InfoQueue1 * This); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, GetNumStoredMessagesAllowedByRetrievalFilter) - UINT64 ( STDMETHODCALLTYPE *GetNumStoredMessagesAllowedByRetrievalFilter )( - ID3D12InfoQueue1 * This); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, GetNumMessagesDiscardedByMessageCountLimit) - UINT64 ( STDMETHODCALLTYPE *GetNumMessagesDiscardedByMessageCountLimit )( - ID3D12InfoQueue1 * This); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, GetMessageCountLimit) - UINT64 ( STDMETHODCALLTYPE *GetMessageCountLimit )( - ID3D12InfoQueue1 * This); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, AddStorageFilterEntries) - HRESULT ( STDMETHODCALLTYPE *AddStorageFilterEntries )( - ID3D12InfoQueue1 * This, - _In_ D3D12_INFO_QUEUE_FILTER *pFilter); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, GetStorageFilter) - HRESULT ( STDMETHODCALLTYPE *GetStorageFilter )( - ID3D12InfoQueue1 * This, - _Out_writes_bytes_opt_(*pFilterByteLength) D3D12_INFO_QUEUE_FILTER *pFilter, - _Inout_ SIZE_T *pFilterByteLength); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, ClearStorageFilter) - void ( STDMETHODCALLTYPE *ClearStorageFilter )( - ID3D12InfoQueue1 * This); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, PushEmptyStorageFilter) - HRESULT ( STDMETHODCALLTYPE *PushEmptyStorageFilter )( - ID3D12InfoQueue1 * This); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, PushCopyOfStorageFilter) - HRESULT ( STDMETHODCALLTYPE *PushCopyOfStorageFilter )( - ID3D12InfoQueue1 * This); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, PushStorageFilter) - HRESULT ( STDMETHODCALLTYPE *PushStorageFilter )( - ID3D12InfoQueue1 * This, - _In_ D3D12_INFO_QUEUE_FILTER *pFilter); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, PopStorageFilter) - void ( STDMETHODCALLTYPE *PopStorageFilter )( - ID3D12InfoQueue1 * This); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, GetStorageFilterStackSize) - UINT ( STDMETHODCALLTYPE *GetStorageFilterStackSize )( - ID3D12InfoQueue1 * This); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, AddRetrievalFilterEntries) - HRESULT ( STDMETHODCALLTYPE *AddRetrievalFilterEntries )( - ID3D12InfoQueue1 * This, - _In_ D3D12_INFO_QUEUE_FILTER *pFilter); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, GetRetrievalFilter) - HRESULT ( STDMETHODCALLTYPE *GetRetrievalFilter )( - ID3D12InfoQueue1 * This, - _Out_writes_bytes_opt_(*pFilterByteLength) D3D12_INFO_QUEUE_FILTER *pFilter, - _Inout_ SIZE_T *pFilterByteLength); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, ClearRetrievalFilter) - void ( STDMETHODCALLTYPE *ClearRetrievalFilter )( - ID3D12InfoQueue1 * This); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, PushEmptyRetrievalFilter) - HRESULT ( STDMETHODCALLTYPE *PushEmptyRetrievalFilter )( - ID3D12InfoQueue1 * This); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, PushCopyOfRetrievalFilter) - HRESULT ( STDMETHODCALLTYPE *PushCopyOfRetrievalFilter )( - ID3D12InfoQueue1 * This); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, PushRetrievalFilter) - HRESULT ( STDMETHODCALLTYPE *PushRetrievalFilter )( - ID3D12InfoQueue1 * This, - _In_ D3D12_INFO_QUEUE_FILTER *pFilter); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, PopRetrievalFilter) - void ( STDMETHODCALLTYPE *PopRetrievalFilter )( - ID3D12InfoQueue1 * This); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, GetRetrievalFilterStackSize) - UINT ( STDMETHODCALLTYPE *GetRetrievalFilterStackSize )( - ID3D12InfoQueue1 * This); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, AddMessage) - HRESULT ( STDMETHODCALLTYPE *AddMessage )( - ID3D12InfoQueue1 * This, - _In_ D3D12_MESSAGE_CATEGORY Category, - _In_ D3D12_MESSAGE_SEVERITY Severity, - _In_ D3D12_MESSAGE_ID ID, - _In_ LPCSTR pDescription); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, AddApplicationMessage) - HRESULT ( STDMETHODCALLTYPE *AddApplicationMessage )( - ID3D12InfoQueue1 * This, - _In_ D3D12_MESSAGE_SEVERITY Severity, - _In_ LPCSTR pDescription); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, SetBreakOnCategory) - HRESULT ( STDMETHODCALLTYPE *SetBreakOnCategory )( - ID3D12InfoQueue1 * This, - _In_ D3D12_MESSAGE_CATEGORY Category, - _In_ BOOL bEnable); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, SetBreakOnSeverity) - HRESULT ( STDMETHODCALLTYPE *SetBreakOnSeverity )( - ID3D12InfoQueue1 * This, - _In_ D3D12_MESSAGE_SEVERITY Severity, - _In_ BOOL bEnable); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, SetBreakOnID) - HRESULT ( STDMETHODCALLTYPE *SetBreakOnID )( - ID3D12InfoQueue1 * This, - _In_ D3D12_MESSAGE_ID ID, - _In_ BOOL bEnable); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, GetBreakOnCategory) - BOOL ( STDMETHODCALLTYPE *GetBreakOnCategory )( - ID3D12InfoQueue1 * This, - _In_ D3D12_MESSAGE_CATEGORY Category); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, GetBreakOnSeverity) - BOOL ( STDMETHODCALLTYPE *GetBreakOnSeverity )( - ID3D12InfoQueue1 * This, - _In_ D3D12_MESSAGE_SEVERITY Severity); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, GetBreakOnID) - BOOL ( STDMETHODCALLTYPE *GetBreakOnID )( - ID3D12InfoQueue1 * This, - _In_ D3D12_MESSAGE_ID ID); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, SetMuteDebugOutput) - void ( STDMETHODCALLTYPE *SetMuteDebugOutput )( - ID3D12InfoQueue1 * This, - _In_ BOOL bMute); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue, GetMuteDebugOutput) - BOOL ( STDMETHODCALLTYPE *GetMuteDebugOutput )( - ID3D12InfoQueue1 * This); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue1, RegisterMessageCallback) - HRESULT ( STDMETHODCALLTYPE *RegisterMessageCallback )( - ID3D12InfoQueue1 * This, - _In_ D3D12MessageFunc CallbackFunc, - _In_ D3D12_MESSAGE_CALLBACK_FLAGS CallbackFilterFlags, - _Inout_ void *pContext, - _Inout_ DWORD *pCallbackCookie); - - DECLSPEC_XFGVIRT(ID3D12InfoQueue1, UnregisterMessageCallback) - HRESULT ( STDMETHODCALLTYPE *UnregisterMessageCallback )( - ID3D12InfoQueue1 * This, - _In_ DWORD CallbackCookie); - - END_INTERFACE - } ID3D12InfoQueue1Vtbl; - - interface ID3D12InfoQueue1 - { - CONST_VTBL struct ID3D12InfoQueue1Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12InfoQueue1_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12InfoQueue1_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12InfoQueue1_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12InfoQueue1_SetMessageCountLimit(This,MessageCountLimit) \ - ( (This)->lpVtbl -> SetMessageCountLimit(This,MessageCountLimit) ) - -#define ID3D12InfoQueue1_ClearStoredMessages(This) \ - ( (This)->lpVtbl -> ClearStoredMessages(This) ) - -#define ID3D12InfoQueue1_GetMessage(This,MessageIndex,pMessage,pMessageByteLength) \ - ( (This)->lpVtbl -> GetMessage(This,MessageIndex,pMessage,pMessageByteLength) ) - -#define ID3D12InfoQueue1_GetNumMessagesAllowedByStorageFilter(This) \ - ( (This)->lpVtbl -> GetNumMessagesAllowedByStorageFilter(This) ) - -#define ID3D12InfoQueue1_GetNumMessagesDeniedByStorageFilter(This) \ - ( (This)->lpVtbl -> GetNumMessagesDeniedByStorageFilter(This) ) - -#define ID3D12InfoQueue1_GetNumStoredMessages(This) \ - ( (This)->lpVtbl -> GetNumStoredMessages(This) ) - -#define ID3D12InfoQueue1_GetNumStoredMessagesAllowedByRetrievalFilter(This) \ - ( (This)->lpVtbl -> GetNumStoredMessagesAllowedByRetrievalFilter(This) ) - -#define ID3D12InfoQueue1_GetNumMessagesDiscardedByMessageCountLimit(This) \ - ( (This)->lpVtbl -> GetNumMessagesDiscardedByMessageCountLimit(This) ) - -#define ID3D12InfoQueue1_GetMessageCountLimit(This) \ - ( (This)->lpVtbl -> GetMessageCountLimit(This) ) - -#define ID3D12InfoQueue1_AddStorageFilterEntries(This,pFilter) \ - ( (This)->lpVtbl -> AddStorageFilterEntries(This,pFilter) ) - -#define ID3D12InfoQueue1_GetStorageFilter(This,pFilter,pFilterByteLength) \ - ( (This)->lpVtbl -> GetStorageFilter(This,pFilter,pFilterByteLength) ) - -#define ID3D12InfoQueue1_ClearStorageFilter(This) \ - ( (This)->lpVtbl -> ClearStorageFilter(This) ) - -#define ID3D12InfoQueue1_PushEmptyStorageFilter(This) \ - ( (This)->lpVtbl -> PushEmptyStorageFilter(This) ) - -#define ID3D12InfoQueue1_PushCopyOfStorageFilter(This) \ - ( (This)->lpVtbl -> PushCopyOfStorageFilter(This) ) - -#define ID3D12InfoQueue1_PushStorageFilter(This,pFilter) \ - ( (This)->lpVtbl -> PushStorageFilter(This,pFilter) ) - -#define ID3D12InfoQueue1_PopStorageFilter(This) \ - ( (This)->lpVtbl -> PopStorageFilter(This) ) - -#define ID3D12InfoQueue1_GetStorageFilterStackSize(This) \ - ( (This)->lpVtbl -> GetStorageFilterStackSize(This) ) - -#define ID3D12InfoQueue1_AddRetrievalFilterEntries(This,pFilter) \ - ( (This)->lpVtbl -> AddRetrievalFilterEntries(This,pFilter) ) - -#define ID3D12InfoQueue1_GetRetrievalFilter(This,pFilter,pFilterByteLength) \ - ( (This)->lpVtbl -> GetRetrievalFilter(This,pFilter,pFilterByteLength) ) - -#define ID3D12InfoQueue1_ClearRetrievalFilter(This) \ - ( (This)->lpVtbl -> ClearRetrievalFilter(This) ) - -#define ID3D12InfoQueue1_PushEmptyRetrievalFilter(This) \ - ( (This)->lpVtbl -> PushEmptyRetrievalFilter(This) ) - -#define ID3D12InfoQueue1_PushCopyOfRetrievalFilter(This) \ - ( (This)->lpVtbl -> PushCopyOfRetrievalFilter(This) ) - -#define ID3D12InfoQueue1_PushRetrievalFilter(This,pFilter) \ - ( (This)->lpVtbl -> PushRetrievalFilter(This,pFilter) ) - -#define ID3D12InfoQueue1_PopRetrievalFilter(This) \ - ( (This)->lpVtbl -> PopRetrievalFilter(This) ) - -#define ID3D12InfoQueue1_GetRetrievalFilterStackSize(This) \ - ( (This)->lpVtbl -> GetRetrievalFilterStackSize(This) ) - -#define ID3D12InfoQueue1_AddMessage(This,Category,Severity,ID,pDescription) \ - ( (This)->lpVtbl -> AddMessage(This,Category,Severity,ID,pDescription) ) - -#define ID3D12InfoQueue1_AddApplicationMessage(This,Severity,pDescription) \ - ( (This)->lpVtbl -> AddApplicationMessage(This,Severity,pDescription) ) - -#define ID3D12InfoQueue1_SetBreakOnCategory(This,Category,bEnable) \ - ( (This)->lpVtbl -> SetBreakOnCategory(This,Category,bEnable) ) - -#define ID3D12InfoQueue1_SetBreakOnSeverity(This,Severity,bEnable) \ - ( (This)->lpVtbl -> SetBreakOnSeverity(This,Severity,bEnable) ) - -#define ID3D12InfoQueue1_SetBreakOnID(This,ID,bEnable) \ - ( (This)->lpVtbl -> SetBreakOnID(This,ID,bEnable) ) - -#define ID3D12InfoQueue1_GetBreakOnCategory(This,Category) \ - ( (This)->lpVtbl -> GetBreakOnCategory(This,Category) ) - -#define ID3D12InfoQueue1_GetBreakOnSeverity(This,Severity) \ - ( (This)->lpVtbl -> GetBreakOnSeverity(This,Severity) ) - -#define ID3D12InfoQueue1_GetBreakOnID(This,ID) \ - ( (This)->lpVtbl -> GetBreakOnID(This,ID) ) - -#define ID3D12InfoQueue1_SetMuteDebugOutput(This,bMute) \ - ( (This)->lpVtbl -> SetMuteDebugOutput(This,bMute) ) - -#define ID3D12InfoQueue1_GetMuteDebugOutput(This) \ - ( (This)->lpVtbl -> GetMuteDebugOutput(This) ) - -#define ID3D12InfoQueue1_RegisterMessageCallback(This,CallbackFunc,CallbackFilterFlags,pContext,pCallbackCookie) \ - ( (This)->lpVtbl -> RegisterMessageCallback(This,CallbackFunc,CallbackFilterFlags,pContext,pCallbackCookie) ) - -#define ID3D12InfoQueue1_UnregisterMessageCallback(This,CallbackCookie) \ - ( (This)->lpVtbl -> UnregisterMessageCallback(This,CallbackCookie) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12InfoQueue1_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12sdklayers_0000_0020 */ -/* [local] */ - -#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) */ -#pragma endregion -DEFINE_GUID(IID_ID3D12Debug,0x344488b7,0x6846,0x474b,0xb9,0x89,0xf0,0x27,0x44,0x82,0x45,0xe0); -DEFINE_GUID(IID_ID3D12Debug1,0xaffaa4ca,0x63fe,0x4d8e,0xb8,0xad,0x15,0x90,0x00,0xaf,0x43,0x04); -DEFINE_GUID(IID_ID3D12Debug2,0x93a665c4,0xa3b2,0x4e5d,0xb6,0x92,0xa2,0x6a,0xe1,0x4e,0x33,0x74); -DEFINE_GUID(IID_ID3D12Debug3,0x5cf4e58f,0xf671,0x4ff1,0xa5,0x42,0x36,0x86,0xe3,0xd1,0x53,0xd1); -DEFINE_GUID(IID_ID3D12Debug4,0x014b816e,0x9ec5,0x4a2f,0xa8,0x45,0xff,0xbe,0x44,0x1c,0xe1,0x3a); -DEFINE_GUID(IID_ID3D12Debug5,0x548d6b12,0x09fa,0x40e0,0x90,0x69,0x5d,0xcd,0x58,0x9a,0x52,0xc9); -DEFINE_GUID(IID_ID3D12Debug6,0x82a816d6,0x5d01,0x4157,0x97,0xd0,0x49,0x75,0x46,0x3f,0xd1,0xed); -DEFINE_GUID(IID_ID3D12DebugDevice1,0xa9b71770,0xd099,0x4a65,0xa6,0x98,0x3d,0xee,0x10,0x02,0x0f,0x88); -DEFINE_GUID(IID_ID3D12DebugDevice,0x3febd6dd,0x4973,0x4787,0x81,0x94,0xe4,0x5f,0x9e,0x28,0x92,0x3e); -DEFINE_GUID(IID_ID3D12DebugDevice2,0x60eccbc1,0x378d,0x4df1,0x89,0x4c,0xf8,0xac,0x5c,0xe4,0xd7,0xdd); -DEFINE_GUID(IID_ID3D12DebugCommandQueue,0x09e0bf36,0x54ac,0x484f,0x88,0x47,0x4b,0xae,0xea,0xb6,0x05,0x3a); -DEFINE_GUID(IID_ID3D12DebugCommandQueue1,0x16be35a2,0xbfd6,0x49f2,0xbc,0xae,0xea,0xae,0x4a,0xff,0x86,0x2d); -DEFINE_GUID(IID_ID3D12DebugCommandList1,0x102ca951,0x311b,0x4b01,0xb1,0x1f,0xec,0xb8,0x3e,0x06,0x1b,0x37); -DEFINE_GUID(IID_ID3D12DebugCommandList,0x09e0bf36,0x54ac,0x484f,0x88,0x47,0x4b,0xae,0xea,0xb6,0x05,0x3f); -DEFINE_GUID(IID_ID3D12DebugCommandList2,0xaeb575cf,0x4e06,0x48be,0xba,0x3b,0xc4,0x50,0xfc,0x96,0x65,0x2e); -DEFINE_GUID(IID_ID3D12DebugCommandList3,0x197d5e15,0x4d37,0x4d34,0xaf,0x78,0x72,0x4c,0xd7,0x0f,0xdb,0x1f); -DEFINE_GUID(IID_ID3D12SharingContract,0x0adf7d52,0x929c,0x4e61,0xad,0xdb,0xff,0xed,0x30,0xde,0x66,0xef); -DEFINE_GUID(IID_ID3D12ManualWriteTrackingResource,0x86ca3b85,0x49ad,0x4b6e,0xae,0xd5,0xed,0xdb,0x18,0x54,0x0f,0x41); -DEFINE_GUID(IID_ID3D12InfoQueue,0x0742a90b,0xc387,0x483f,0xb9,0x46,0x30,0xa7,0xe4,0xe6,0x14,0x58); -DEFINE_GUID(IID_ID3D12InfoQueue1,0x2852dd88,0xb484,0x4c0c,0xb6,0xb1,0x67,0x16,0x85,0x00,0xe6,0x00); - -extern RPC_IF_HANDLE __MIDL_itf_d3d12sdklayers_0000_0020_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12sdklayers_0000_0020_v0_0_s_ifspec; - -/* Additional Prototypes for ALL interfaces */ - -/* end of Additional Prototypes */ - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/Juliet/src/Graphics/D3D12/AgilitySDK/d3d12sdklayers.idl b/Juliet/src/Graphics/D3D12/AgilitySDK/d3d12sdklayers.idl deleted file mode 100644 index 957c3ad..0000000 --- a/Juliet/src/Graphics/D3D12/AgilitySDK/d3d12sdklayers.idl +++ /dev/null @@ -1,1856 +0,0 @@ -/*------------------------------------------------------------------------------------- - * - * Copyright (c) Microsoft Corporation - * Licensed under the MIT license - * - *-------------------------------------------------------------------------------------*/ -import "oaidl.idl"; -import "ocidl.idl"; - -import "d3d12.idl"; - -cpp_quote("#include ") - -#pragma region App Family -cpp_quote("#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES)") - -//================================================================================================================================== -// -// Debugging Layer -// -//================================================================================================================================== - -[uuid(344488b7-6846-474b-b989-f027448245e0), object, local, pointer_default(unique)] -interface ID3D12Debug - : IUnknown -{ - void EnableDebugLayer(); -} - -typedef enum D3D12_GPU_BASED_VALIDATION_FLAGS -{ - D3D12_GPU_BASED_VALIDATION_FLAGS_NONE = 0x00, - D3D12_GPU_BASED_VALIDATION_FLAGS_DISABLE_STATE_TRACKING = 0x01, - -} D3D12_GPU_BASED_VALIDATION_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_GPU_BASED_VALIDATION_FLAGS)") - - -[uuid(affaa4ca-63fe-4d8e-b8ad-159000af4304), object, local, pointer_default(unique)] -interface ID3D12Debug1 - : IUnknown -{ - void EnableDebugLayer(); - void SetEnableGPUBasedValidation(BOOL Enable); - void SetEnableSynchronizedCommandQueueValidation(BOOL Enable); -} - -[uuid(93a665c4-a3b2-4e5d-b692-a26ae14e3374), object, local, pointer_default(unique)] -interface ID3D12Debug2 - : IUnknown -{ - void SetGPUBasedValidationFlags(D3D12_GPU_BASED_VALIDATION_FLAGS Flags); -} - -[uuid(5cf4e58f-f671-4ff1-a542-3686e3d153d1), object, local, pointer_default(unique)] -interface ID3D12Debug3 - : ID3D12Debug -{ - void SetEnableGPUBasedValidation(BOOL Enable); - void SetEnableSynchronizedCommandQueueValidation(BOOL Enable); - void SetGPUBasedValidationFlags(D3D12_GPU_BASED_VALIDATION_FLAGS Flags); -} - -[uuid(014b816e-9ec5-4a2f-a845-ffbe441ce13a), object, local, pointer_default(unique)] -interface ID3D12Debug4 - : ID3D12Debug3 -{ - void DisableDebugLayer(); -} - -[uuid(548d6b12-09fa-40e0-9069-5dcd589a52c9), object, local, pointer_default(unique)] -interface ID3D12Debug5 - : ID3D12Debug4 -{ - void SetEnableAutoName(BOOL Enable); -} - -[uuid(82a816d6-5d01-4157-97d0-4975463fd1ed), object, local, pointer_default(unique)] -interface ID3D12Debug6 - : ID3D12Debug5 -{ - void SetForceLegacyBarrierValidation(BOOL Enable); -} - -cpp_quote("DEFINE_GUID(WKPDID_D3DAutoDebugObjectNameW, 0xd4902e36, 0x757a, 0x4942, 0x95, 0x94, 0xb6, 0x76, 0x9a, 0xfa, 0x43, 0xcd);") - -typedef enum D3D12_RLDO_FLAGS -{ - D3D12_RLDO_NONE = 0x0, - D3D12_RLDO_SUMMARY = 0x1, - D3D12_RLDO_DETAIL = 0x2, - D3D12_RLDO_IGNORE_INTERNAL = 0x4, - -} D3D12_RLDO_FLAGS; - -cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS(D3D12_RLDO_FLAGS)") - -typedef enum D3D12_DEBUG_DEVICE_PARAMETER_TYPE -{ - D3D12_DEBUG_DEVICE_PARAMETER_FEATURE_FLAGS, - D3D12_DEBUG_DEVICE_PARAMETER_GPU_BASED_VALIDATION_SETTINGS, - D3D12_DEBUG_DEVICE_PARAMETER_GPU_SLOWDOWN_PERFORMANCE_FACTOR, - D3D12_DEBUG_DEVICE_PARAMETER_BYTECODE_VALIDATION_MODE -} D3D12_DEBUG_DEVICE_PARAMETER_TYPE; - -typedef enum D3D12_DEBUG_FEATURE -{ - D3D12_DEBUG_FEATURE_NONE = 0x00, - D3D12_DEBUG_FEATURE_ALLOW_BEHAVIOR_CHANGING_DEBUG_AIDS = 0x01, - D3D12_DEBUG_FEATURE_CONSERVATIVE_RESOURCE_STATE_TRACKING = 0x02, - D3D12_DEBUG_FEATURE_DISABLE_VIRTUALIZED_BUNDLES_VALIDATION = 0x04, - D3D12_DEBUG_FEATURE_EMULATE_WINDOWS7 = 0x08, -} D3D12_DEBUG_FEATURE; - -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_DEBUG_FEATURE)") - -typedef enum D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODE -{ - D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODE_NONE, - D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODE_STATE_TRACKING_ONLY, - D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODE_UNGUARDED_VALIDATION, - D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODE_GUARDED_VALIDATION, - NUM_D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODES -} D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODE; - -typedef enum D3D12_GPU_BASED_VALIDATION_PIPELINE_STATE_CREATE_FLAGS -{ - D3D12_GPU_BASED_VALIDATION_PIPELINE_STATE_CREATE_FLAG_NONE = 0x00, - D3D12_GPU_BASED_VALIDATION_PIPELINE_STATE_CREATE_FLAG_FRONT_LOAD_CREATE_TRACKING_ONLY_SHADERS = 0x01, - D3D12_GPU_BASED_VALIDATION_PIPELINE_STATE_CREATE_FLAG_FRONT_LOAD_CREATE_UNGUARDED_VALIDATION_SHADERS = 0x02, - D3D12_GPU_BASED_VALIDATION_PIPELINE_STATE_CREATE_FLAG_FRONT_LOAD_CREATE_GUARDED_VALIDATION_SHADERS = 0x04, - D3D12_GPU_BASED_VALIDATION_PIPELINE_STATE_CREATE_FLAGS_VALID_MASK = 0x07 -} D3D12_GPU_BASED_VALIDATION_PIPELINE_STATE_CREATE_FLAGS; - -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_GPU_BASED_VALIDATION_PIPELINE_STATE_CREATE_FLAGS)") - -typedef struct D3D12_DEBUG_DEVICE_GPU_BASED_VALIDATION_SETTINGS -{ - UINT MaxMessagesPerCommandList; - D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODE DefaultShaderPatchMode; - D3D12_GPU_BASED_VALIDATION_PIPELINE_STATE_CREATE_FLAGS PipelineStateCreateFlags; -} D3D12_DEBUG_DEVICE_GPU_BASED_VALIDATION_SETTINGS; - -typedef struct D3D12_DEBUG_DEVICE_GPU_SLOWDOWN_PERFORMANCE_FACTOR -{ - FLOAT SlowdownFactor; -} D3D12_DEBUG_DEVICE_GPU_SLOWDOWN_PERFORMANCE_FACTOR; - -typedef enum D3D12_DEBUG_DEVICE_BYTECODE_VALIDATION_MODE -{ - D3D12_DEBUG_DEVICE_BYTECODE_VALIDATION_DISABLED, - D3D12_DEBUG_DEVICE_BYTECODE_VALIDATION_WHEN_HASH_BYPASSED, - D3D12_DEBUG_DEVICE_BYTECODE_VALIDATION_ALL_BYTECODE, - D3D12_DEBUG_DEVICE_BYTECODE_VALIDATION_MODE_DEFAULT = - D3D12_DEBUG_DEVICE_BYTECODE_VALIDATION_WHEN_HASH_BYPASSED -} D3D12_DEBUG_DEVICE_BYTECODE_VALIDATION_MODE; - -[uuid(a9b71770-d099-4a65-a698-3dee10020f88), object, local, pointer_default(unique)] -interface ID3D12DebugDevice1 - : IUnknown -{ - HRESULT SetDebugParameter(D3D12_DEBUG_DEVICE_PARAMETER_TYPE Type, [annotation("_In_reads_bytes_(DataSize)")] const void *pData, UINT DataSize); - HRESULT GetDebugParameter(D3D12_DEBUG_DEVICE_PARAMETER_TYPE Type, [annotation("_Out_writes_bytes_(DataSize)")] void *pData, UINT DataSize); - HRESULT ReportLiveDeviceObjects( D3D12_RLDO_FLAGS Flags ); -} - -[uuid(3febd6dd-4973-4787-8194-e45f9e28923e), object, local, pointer_default(unique)] -interface ID3D12DebugDevice - : IUnknown -{ - HRESULT SetFeatureMask(D3D12_DEBUG_FEATURE Mask); - D3D12_DEBUG_FEATURE GetFeatureMask(); - HRESULT ReportLiveDeviceObjects(D3D12_RLDO_FLAGS Flags); -} - -[uuid(60eccbc1-378d-4df1-894c-f8ac5ce4d7dd), object, local, pointer_default(unique)] -interface ID3D12DebugDevice2 - : ID3D12DebugDevice -{ - HRESULT SetDebugParameter(D3D12_DEBUG_DEVICE_PARAMETER_TYPE Type, [annotation("_In_reads_bytes_(DataSize)")] const void *pData, UINT DataSize); - HRESULT GetDebugParameter(D3D12_DEBUG_DEVICE_PARAMETER_TYPE Type, [annotation("_Out_writes_bytes_(DataSize)")] void *pData, UINT DataSize); -} - -cpp_quote("DEFINE_GUID(DXGI_DEBUG_D3D12, 0xcf59a98c, 0xa950, 0x4326, 0x91, 0xef, 0x9b, 0xba, 0xa1, 0x7b, 0xfd, 0x95);") - - -[ uuid( 09e0bf36-54ac-484f-8847-4baeeab6053a ), object, local, pointer_default( unique ) ] -interface ID3D12DebugCommandQueue - : IUnknown -{ - BOOL AssertResourceState( [annotation("_In_")] ID3D12Resource* pResource, UINT Subresource, UINT State ); -// TODO: Stale BOOL AssertResourceStateThroughView( [annotation("_In_")] ID3D12View* pView, UINT State ); -}; - -[ uuid( 16be35a2-bfd6-49f2-bcae-eaae4aff862d ), object, local, pointer_default( unique ) ] -interface ID3D12DebugCommandQueue1 - : ID3D12DebugCommandQueue -{ - void AssertResourceAccess([annotation("_In_")] ID3D12Resource* pResource, UINT Subresource, D3D12_BARRIER_ACCESS Access); - void AssertTextureLayout([annotation("_In_")] ID3D12Resource* pResource, UINT Subresource, D3D12_BARRIER_LAYOUT Layout); -}; - -typedef enum D3D12_DEBUG_COMMAND_LIST_PARAMETER_TYPE -{ - D3D12_DEBUG_COMMAND_LIST_PARAMETER_GPU_BASED_VALIDATION_SETTINGS, -} D3D12_DEBUG_COMMAND_LIST_PARAMETER_TYPE; - -typedef struct D3D12_DEBUG_COMMAND_LIST_GPU_BASED_VALIDATION_SETTINGS -{ - D3D12_GPU_BASED_VALIDATION_SHADER_PATCH_MODE ShaderPatchMode; -} D3D12_DEBUG_COMMAND_LIST_GPU_BASED_VALIDATION_SETTINGS; - -[ uuid( 102ca951-311b-4b01-b11f-ecb83e061b37 ), object, local, pointer_default( unique ) ] -interface ID3D12DebugCommandList1 - : IUnknown -{ - BOOL AssertResourceState( [annotation("_In_")] ID3D12Resource* pResource, UINT Subresource, UINT State ); - HRESULT SetDebugParameter(D3D12_DEBUG_COMMAND_LIST_PARAMETER_TYPE Type, [annotation("_In_reads_bytes_(DataSize)")] const void *pData, UINT DataSize); - HRESULT GetDebugParameter(D3D12_DEBUG_COMMAND_LIST_PARAMETER_TYPE Type, [annotation("_Out_writes_bytes_(DataSize)")] void *pData, UINT DataSize); -}; - -[uuid(09e0bf36-54ac-484f-8847-4baeeab6053f), object, local, pointer_default(unique)] -interface ID3D12DebugCommandList - : IUnknown -{ - BOOL AssertResourceState([annotation("_In_")] ID3D12Resource* pResource, UINT Subresource, UINT State); - HRESULT SetFeatureMask(D3D12_DEBUG_FEATURE Mask); - D3D12_DEBUG_FEATURE GetFeatureMask(); -}; - -[ uuid(aeb575cf-4e06-48be-ba3b-c450fc96652e), object, local, pointer_default( unique ) ] -interface ID3D12DebugCommandList2 - : ID3D12DebugCommandList -{ - HRESULT SetDebugParameter(D3D12_DEBUG_COMMAND_LIST_PARAMETER_TYPE Type, [annotation("_In_reads_bytes_(DataSize)")] const void *pData, UINT DataSize); - HRESULT GetDebugParameter(D3D12_DEBUG_COMMAND_LIST_PARAMETER_TYPE Type, [annotation("_Out_writes_bytes_(DataSize)")] void *pData, UINT DataSize); -}; - -[ uuid(197d5e15-4d37-4d34-af78-724cd70fdb1f), object, local, pointer_default( unique ) ] -interface ID3D12DebugCommandList3 - : ID3D12DebugCommandList2 -{ - void AssertResourceAccess([annotation("_In_")] ID3D12Resource* pResource, UINT Subresource, D3D12_BARRIER_ACCESS Access); - void AssertTextureLayout([annotation("_In_")] ID3D12Resource* pResource, UINT Subresource, D3D12_BARRIER_LAYOUT Layout); -}; - -[uuid(0adf7d52-929c-4e61-addb-ffed30de66ef), object, local, pointer_default(unique)] -interface ID3D12SharingContract - : IUnknown -{ - void Present([annotation("_In_")] ID3D12Resource* pResource, UINT Subresource, [annotation("_In_")] HWND window); - void SharedFenceSignal([annotation("_In_")] ID3D12Fence* pFence, UINT64 FenceValue); - void BeginCapturableWork([annotation("_In_")] REFGUID guid); - void EndCapturableWork([annotation("_In_")] REFGUID guid); -}; - -[uuid(86ca3b85-49ad-4b6e-aed5-eddb18540f41), object, local, pointer_default(unique)] -interface ID3D12ManualWriteTrackingResource - : IUnknown -{ - void TrackWrite( - UINT Subresource, - [annotation("_In_opt_")] const D3D12_RANGE* pWrittenRange); -}; - - -//================================================================================================================================== -// -// Info Queue -// -//================================================================================================================================== -typedef enum D3D12_MESSAGE_CATEGORY { - D3D12_MESSAGE_CATEGORY_APPLICATION_DEFINED, - D3D12_MESSAGE_CATEGORY_MISCELLANEOUS, - D3D12_MESSAGE_CATEGORY_INITIALIZATION, - D3D12_MESSAGE_CATEGORY_CLEANUP, - D3D12_MESSAGE_CATEGORY_COMPILATION, - D3D12_MESSAGE_CATEGORY_STATE_CREATION, - D3D12_MESSAGE_CATEGORY_STATE_SETTING, - D3D12_MESSAGE_CATEGORY_STATE_GETTING, - D3D12_MESSAGE_CATEGORY_RESOURCE_MANIPULATION, - D3D12_MESSAGE_CATEGORY_EXECUTION, - D3D12_MESSAGE_CATEGORY_SHADER, -} D3D12_MESSAGE_CATEGORY; - -typedef enum D3D12_MESSAGE_SEVERITY { - D3D12_MESSAGE_SEVERITY_CORRUPTION, - D3D12_MESSAGE_SEVERITY_ERROR, - D3D12_MESSAGE_SEVERITY_WARNING, - D3D12_MESSAGE_SEVERITY_INFO, - D3D12_MESSAGE_SEVERITY_MESSAGE -} D3D12_MESSAGE_SEVERITY; - -// Unique ID for every error -// CAUTION: New enum values should be appended to the list only. Inserting -// new enum values into the middle of the list results in changing the numeric -// values of some ID's from one SDK release to the next. This in-turn breaks -// PIX and customer tools/filters. -typedef enum D3D12_MESSAGE_ID { - D3D12_MESSAGE_ID_UNKNOWN = 0, - - //-------------------------------------------------------------------------- - // Messages Used by Core - // Message IDs generated from core are at the beginning - // since the core changes less frequently than the debug layer. - - // End of Messages used by Core - // ------------------------------------------------------------------------ - D3D12_MESSAGE_ID_STRING_FROM_APPLICATION = 1, - D3D12_MESSAGE_ID_CORRUPTED_THIS = 2, - D3D12_MESSAGE_ID_CORRUPTED_PARAMETER1 = 3, - D3D12_MESSAGE_ID_CORRUPTED_PARAMETER2 = 4, - D3D12_MESSAGE_ID_CORRUPTED_PARAMETER3 = 5, - D3D12_MESSAGE_ID_CORRUPTED_PARAMETER4 = 6, - D3D12_MESSAGE_ID_CORRUPTED_PARAMETER5 = 7, - D3D12_MESSAGE_ID_CORRUPTED_PARAMETER6 = 8, - D3D12_MESSAGE_ID_CORRUPTED_PARAMETER7 = 9, - D3D12_MESSAGE_ID_CORRUPTED_PARAMETER8 = 10, - D3D12_MESSAGE_ID_CORRUPTED_PARAMETER9 = 11, - D3D12_MESSAGE_ID_CORRUPTED_PARAMETER10 = 12, - D3D12_MESSAGE_ID_CORRUPTED_PARAMETER11 = 13, - D3D12_MESSAGE_ID_CORRUPTED_PARAMETER12 = 14, - D3D12_MESSAGE_ID_CORRUPTED_PARAMETER13 = 15, - D3D12_MESSAGE_ID_CORRUPTED_PARAMETER14 = 16, - D3D12_MESSAGE_ID_CORRUPTED_PARAMETER15 = 17, - D3D12_MESSAGE_ID_CORRUPTED_MULTITHREADING = 18, - D3D12_MESSAGE_ID_MESSAGE_REPORTING_OUTOFMEMORY = 19, - - D3D12_MESSAGE_ID_GETPRIVATEDATA_MOREDATA = 20, - D3D12_MESSAGE_ID_SETPRIVATEDATA_INVALIDFREEDATA = 21, - D3D12_MESSAGE_ID_SETPRIVATEDATA_CHANGINGPARAMS = 24, - D3D12_MESSAGE_ID_SETPRIVATEDATA_OUTOFMEMORY = 25, - - D3D12_MESSAGE_ID_CREATESHADERRESOURCEVIEW_UNRECOGNIZEDFORMAT = 26, - D3D12_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDESC = 27, - D3D12_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDFORMAT = 28, - D3D12_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDVIDEOPLANESLICE = 29, - D3D12_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDPLANESLICE = 30, - D3D12_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDIMENSIONS = 31, - D3D12_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDRESOURCE = 32, - - D3D12_MESSAGE_ID_CREATERENDERTARGETVIEW_UNRECOGNIZEDFORMAT = 35, - D3D12_MESSAGE_ID_CREATERENDERTARGETVIEW_UNSUPPORTEDFORMAT = 36, - D3D12_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDESC = 37, - D3D12_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDFORMAT = 38, - D3D12_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDVIDEOPLANESLICE = 39, - D3D12_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDPLANESLICE = 40, - D3D12_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDIMENSIONS = 41, - D3D12_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDRESOURCE = 42, - - D3D12_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_UNRECOGNIZEDFORMAT = 45, - D3D12_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDESC = 46, - D3D12_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDFORMAT = 47, - D3D12_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDIMENSIONS = 48, - D3D12_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDRESOURCE = 49, - - D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_OUTOFMEMORY = 52, - D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_TOOMANYELEMENTS = 53, - D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDFORMAT = 54, - D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_INCOMPATIBLEFORMAT = 55, - D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOT = 56, - D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDINPUTSLOTCLASS = 57, - D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_STEPRATESLOTCLASSMISMATCH = 58, - D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOTCLASSCHANGE = 59, - D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSTEPRATECHANGE = 60, - D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDALIGNMENT = 61, - D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_DUPLICATESEMANTIC = 62, - D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_UNPARSEABLEINPUTSIGNATURE = 63, - D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_NULLSEMANTIC = 64, - D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_MISSINGELEMENT = 65, - - D3D12_MESSAGE_ID_CREATEVERTEXSHADER_OUTOFMEMORY = 66, - D3D12_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERBYTECODE = 67, - D3D12_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERTYPE = 68, - - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADER_OUTOFMEMORY = 69, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERBYTECODE = 70, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERTYPE = 71, - - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTOFMEMORY = 72, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERBYTECODE = 73, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERTYPE = 74, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMENTRIES = 75, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSTREAMSTRIDEUNUSED = 76, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSLOT0EXPECTED = 79, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSLOT = 80, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_ONLYONEELEMENTPERSLOT = 81, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDCOMPONENTCOUNT = 82, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTARTCOMPONENTANDCOMPONENTCOUNT = 83, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDGAPDEFINITION = 84, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_REPEATEDOUTPUT = 85, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSTREAMSTRIDE = 86, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGSEMANTIC = 87, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MASKMISMATCH = 88, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_CANTHAVEONLYGAPS = 89, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DECLTOOCOMPLEX = 90, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGOUTPUTSIGNATURE = 91, - - D3D12_MESSAGE_ID_CREATEPIXELSHADER_OUTOFMEMORY = 92, - D3D12_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERBYTECODE = 93, - D3D12_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERTYPE = 94, - - D3D12_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDFILLMODE = 95, - D3D12_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDCULLMODE = 96, - D3D12_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDDEPTHBIASCLAMP = 97, - D3D12_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDSLOPESCALEDDEPTHBIAS = 98, - - D3D12_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHWRITEMASK = 100, - D3D12_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHFUNC = 101, - D3D12_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFAILOP = 102, - D3D12_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILZFAILOP = 103, - D3D12_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILPASSOP = 104, - D3D12_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFUNC = 105, - D3D12_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFAILOP = 106, - D3D12_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILZFAILOP = 107, - D3D12_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILPASSOP = 108, - D3D12_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFUNC = 109, - - D3D12_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLEND = 111, - D3D12_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLEND = 112, - D3D12_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOP = 113, - D3D12_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLENDALPHA = 114, - D3D12_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLENDALPHA = 115, - D3D12_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOPALPHA = 116, - D3D12_MESSAGE_ID_CREATEBLENDSTATE_INVALIDRENDERTARGETWRITEMASK = 117, - - D3D12_MESSAGE_ID_GET_PROGRAM_IDENTIFIER_ERROR = 118, - D3D12_MESSAGE_ID_GET_WORK_GRAPH_PROPERTIES_ERROR = 119, - D3D12_MESSAGE_ID_SET_PROGRAM_ERROR = 120, - - D3D12_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_INVALID = 135, - - D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_ROOT_SIGNATURE_NOT_SET = 200, - D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_ROOT_SIGNATURE_MISMATCH = 201, - D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_VERTEX_BUFFER_NOT_SET = 202, - D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_VERTEX_BUFFER_STRIDE_TOO_SMALL = 209, - D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_VERTEX_BUFFER_TOO_SMALL = 210, - D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_INDEX_BUFFER_NOT_SET = 211, - D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_INDEX_BUFFER_FORMAT_INVALID = 212, - D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_INDEX_BUFFER_TOO_SMALL = 213, - D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_INVALID_PRIMITIVETOPOLOGY = 219, - D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_VERTEX_STRIDE_UNALIGNED = 221, - D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_INDEX_OFFSET_UNALIGNED = 222, - D3D12_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_AT_FAULT = 232, - D3D12_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_POSSIBLY_AT_FAULT = 233, - D3D12_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_NOT_AT_FAULT = 234, - - D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_TRAILING_DIGIT_IN_SEMANTIC = 239, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_TRAILING_DIGIT_IN_SEMANTIC = 240, - D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_TYPE_MISMATCH = 245, - - D3D12_MESSAGE_ID_CREATEINPUTLAYOUT_EMPTY_LAYOUT = 253, - - D3D12_MESSAGE_ID_LIVE_OBJECT_SUMMARY = 255, - D3D12_MESSAGE_ID_LIVE_DEVICE = 274, - D3D12_MESSAGE_ID_LIVE_SWAPCHAIN = 275, - - D3D12_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDFLAGS = 276, - D3D12_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDCLASSLINKAGE = 277, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDCLASSLINKAGE = 278, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTREAMTORASTERIZER = 280, - D3D12_MESSAGE_ID_CREATEPIXELSHADER_INVALIDCLASSLINKAGE = 283, - - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTREAM = 284, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDENTRIES = 285, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDSTRIDES = 286, - D3D12_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMSTRIDES = 287, - - D3D12_MESSAGE_ID_CREATEHULLSHADER_OUTOFMEMORY = 289, - D3D12_MESSAGE_ID_CREATEHULLSHADER_INVALIDSHADERBYTECODE = 290, - D3D12_MESSAGE_ID_CREATEHULLSHADER_INVALIDSHADERTYPE = 291, - D3D12_MESSAGE_ID_CREATEHULLSHADER_INVALIDCLASSLINKAGE = 292, - - D3D12_MESSAGE_ID_CREATEDOMAINSHADER_OUTOFMEMORY = 294, - D3D12_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDSHADERBYTECODE = 295, - D3D12_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDSHADERTYPE = 296, - D3D12_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDCLASSLINKAGE = 297, - - D3D12_MESSAGE_ID_RESOURCE_UNMAP_NOTMAPPED = 310, - - D3D12_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_MISMATCHED_DATA_SIZE = 318, - - D3D12_MESSAGE_ID_CREATECOMPUTESHADER_OUTOFMEMORY = 321, - D3D12_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDSHADERBYTECODE = 322, - D3D12_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDCLASSLINKAGE = 323, - - D3D12_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_DOUBLEFLOATOPSNOTSUPPORTED = 331, - D3D12_MESSAGE_ID_DEVICE_CREATEHULLSHADER_DOUBLEFLOATOPSNOTSUPPORTED = 332, - D3D12_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_DOUBLEFLOATOPSNOTSUPPORTED = 333, - D3D12_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_DOUBLEFLOATOPSNOTSUPPORTED = 334, - D3D12_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DOUBLEFLOATOPSNOTSUPPORTED = 335, - D3D12_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_DOUBLEFLOATOPSNOTSUPPORTED = 336, - D3D12_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_DOUBLEFLOATOPSNOTSUPPORTED = 337, - - D3D12_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDRESOURCE = 340, - D3D12_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDDESC = 341, - D3D12_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDFORMAT = 342, - D3D12_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDVIDEOPLANESLICE = 343, - D3D12_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDPLANESLICE = 344, - D3D12_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDDIMENSIONS = 345, - D3D12_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_UNRECOGNIZEDFORMAT = 346, - D3D12_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDFLAGS = 354, - - D3D12_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDFORCEDSAMPLECOUNT = 401, - - D3D12_MESSAGE_ID_CREATEBLENDSTATE_INVALIDLOGICOPS = 403, - - D3D12_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_DOUBLEEXTENSIONSNOTSUPPORTED = 410, - D3D12_MESSAGE_ID_DEVICE_CREATEHULLSHADER_DOUBLEEXTENSIONSNOTSUPPORTED = 412, - D3D12_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_DOUBLEEXTENSIONSNOTSUPPORTED = 414, - D3D12_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_DOUBLEEXTENSIONSNOTSUPPORTED = 416, - D3D12_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DOUBLEEXTENSIONSNOTSUPPORTED = 418, - D3D12_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_DOUBLEEXTENSIONSNOTSUPPORTED = 420, - D3D12_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_DOUBLEEXTENSIONSNOTSUPPORTED = 422, - - D3D12_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_UAVSNOTSUPPORTED = 425, - D3D12_MESSAGE_ID_DEVICE_CREATEHULLSHADER_UAVSNOTSUPPORTED = 426, - D3D12_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_UAVSNOTSUPPORTED = 427, - D3D12_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_UAVSNOTSUPPORTED = 428, - D3D12_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UAVSNOTSUPPORTED = 429, - D3D12_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_UAVSNOTSUPPORTED = 430, - D3D12_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_UAVSNOTSUPPORTED = 431, - - D3D12_MESSAGE_ID_DEVICE_CLEARVIEW_INVALIDSOURCERECT = 447, - D3D12_MESSAGE_ID_DEVICE_CLEARVIEW_EMPTYRECT = 448, - - D3D12_MESSAGE_ID_UPDATETILEMAPPINGS_INVALID_PARAMETER = 493, - D3D12_MESSAGE_ID_COPYTILEMAPPINGS_INVALID_PARAMETER = 494, - - D3D12_MESSAGE_ID_CREATEDEVICE_INVALIDARGS = 506, - D3D12_MESSAGE_ID_CREATEDEVICE_WARNING = 507, - - D3D12_MESSAGE_ID_RESOURCE_BARRIER_INVALID_TYPE = 519, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_NULL_POINTER = 520, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_INVALID_SUBRESOURCE = 521, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_RESERVED_BITS = 522, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_MISSING_BIND_FLAGS = 523, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_MISMATCHING_MISC_FLAGS = 524, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_MATCHING_STATES = 525, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_INVALID_COMBINATION = 526, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_BEFORE_AFTER_MISMATCH = 527, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_INVALID_RESOURCE = 528, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_SAMPLE_COUNT = 529, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_INVALID_FLAGS = 530, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_INVALID_COMBINED_FLAGS = 531, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_INVALID_FLAGS_FOR_FORMAT = 532, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_INVALID_SPLIT_BARRIER = 533, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_UNMATCHED_END = 534, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_UNMATCHED_BEGIN = 535, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_INVALID_FLAG = 536, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_INVALID_COMMAND_LIST_TYPE = 537, - D3D12_MESSAGE_ID_INVALID_SUBRESOURCE_STATE = 538, - D3D12_MESSAGE_ID_COMMAND_ALLOCATOR_CONTENTION = 540, - D3D12_MESSAGE_ID_COMMAND_ALLOCATOR_RESET = 541, - D3D12_MESSAGE_ID_COMMAND_ALLOCATOR_RESET_BUNDLE = 542, - D3D12_MESSAGE_ID_COMMAND_ALLOCATOR_CANNOT_RESET = 543, - D3D12_MESSAGE_ID_COMMAND_LIST_OPEN = 544, - D3D12_MESSAGE_ID_INVALID_BUNDLE_API = 546, - D3D12_MESSAGE_ID_COMMAND_LIST_CLOSED = 547, - D3D12_MESSAGE_ID_WRONG_COMMAND_ALLOCATOR_TYPE = 549, - D3D12_MESSAGE_ID_COMMAND_ALLOCATOR_SYNC = 552, - D3D12_MESSAGE_ID_COMMAND_LIST_SYNC = 553, - D3D12_MESSAGE_ID_SET_DESCRIPTOR_HEAP_INVALID = 554, - - D3D12_MESSAGE_ID_CREATE_COMMANDQUEUE = 557, - D3D12_MESSAGE_ID_CREATE_COMMANDALLOCATOR = 558, - D3D12_MESSAGE_ID_CREATE_PIPELINESTATE = 559, - D3D12_MESSAGE_ID_CREATE_COMMANDLIST12 = 560, - D3D12_MESSAGE_ID_CREATE_RESOURCE = 562, - D3D12_MESSAGE_ID_CREATE_DESCRIPTORHEAP = 563, - D3D12_MESSAGE_ID_CREATE_ROOTSIGNATURE = 564, - D3D12_MESSAGE_ID_CREATE_LIBRARY = 565, - D3D12_MESSAGE_ID_CREATE_HEAP = 566, - D3D12_MESSAGE_ID_CREATE_MONITOREDFENCE = 567, - D3D12_MESSAGE_ID_CREATE_QUERYHEAP = 568, - D3D12_MESSAGE_ID_CREATE_COMMANDSIGNATURE = 569, - - D3D12_MESSAGE_ID_LIVE_COMMANDQUEUE = 570, - D3D12_MESSAGE_ID_LIVE_COMMANDALLOCATOR = 571, - D3D12_MESSAGE_ID_LIVE_PIPELINESTATE = 572, - D3D12_MESSAGE_ID_LIVE_COMMANDLIST12 = 573, - D3D12_MESSAGE_ID_LIVE_RESOURCE = 575, - D3D12_MESSAGE_ID_LIVE_DESCRIPTORHEAP = 576, - D3D12_MESSAGE_ID_LIVE_ROOTSIGNATURE = 577, - D3D12_MESSAGE_ID_LIVE_LIBRARY = 578, - D3D12_MESSAGE_ID_LIVE_HEAP = 579, - D3D12_MESSAGE_ID_LIVE_MONITOREDFENCE = 580, - D3D12_MESSAGE_ID_LIVE_QUERYHEAP = 581, - D3D12_MESSAGE_ID_LIVE_COMMANDSIGNATURE = 582, - - D3D12_MESSAGE_ID_DESTROY_COMMANDQUEUE = 583, - D3D12_MESSAGE_ID_DESTROY_COMMANDALLOCATOR = 584, - D3D12_MESSAGE_ID_DESTROY_PIPELINESTATE = 585, - D3D12_MESSAGE_ID_DESTROY_COMMANDLIST12 = 586, - D3D12_MESSAGE_ID_DESTROY_RESOURCE = 588, - D3D12_MESSAGE_ID_DESTROY_DESCRIPTORHEAP = 589, - D3D12_MESSAGE_ID_DESTROY_ROOTSIGNATURE = 590, - D3D12_MESSAGE_ID_DESTROY_LIBRARY = 591, - D3D12_MESSAGE_ID_DESTROY_HEAP = 592, - D3D12_MESSAGE_ID_DESTROY_MONITOREDFENCE = 593, - D3D12_MESSAGE_ID_DESTROY_QUERYHEAP = 594, - D3D12_MESSAGE_ID_DESTROY_COMMANDSIGNATURE = 595, - - D3D12_MESSAGE_ID_CREATERESOURCE_INVALIDDIMENSIONS = 597, - D3D12_MESSAGE_ID_CREATERESOURCE_INVALIDMISCFLAGS = 599, - D3D12_MESSAGE_ID_CREATERESOURCE_INVALIDARG_RETURN = 602, - D3D12_MESSAGE_ID_CREATERESOURCE_OUTOFMEMORY_RETURN = 603, - D3D12_MESSAGE_ID_CREATERESOURCE_INVALIDDESC = 604, - // This was shipped, but is no longer used. Do not reuse. - //D3D12_MESSAGE_ID_CREATERESOURCE_INVALIDINITIALSTATE = 605, - D3D12_MESSAGE_ID_POSSIBLY_INVALID_SUBRESOURCE_STATE = 607, - D3D12_MESSAGE_ID_INVALID_USE_OF_NON_RESIDENT_RESOURCE = 608, - D3D12_MESSAGE_ID_POSSIBLE_INVALID_USE_OF_NON_RESIDENT_RESOURCE = 609, - D3D12_MESSAGE_ID_BUNDLE_PIPELINE_STATE_MISMATCH = 610, - D3D12_MESSAGE_ID_PRIMITIVE_TOPOLOGY_MISMATCH_PIPELINE_STATE = 611, - D3D12_MESSAGE_ID_RENDER_TARGET_FORMAT_MISMATCH_PIPELINE_STATE = 613, - D3D12_MESSAGE_ID_RENDER_TARGET_SAMPLE_DESC_MISMATCH_PIPELINE_STATE = 614, - D3D12_MESSAGE_ID_DEPTH_STENCIL_FORMAT_MISMATCH_PIPELINE_STATE = 615, - D3D12_MESSAGE_ID_DEPTH_STENCIL_SAMPLE_DESC_MISMATCH_PIPELINE_STATE = 616, - D3D12_MESSAGE_ID_CREATESHADER_INVALIDBYTECODE = 622, - D3D12_MESSAGE_ID_CREATEHEAP_NULLDESC = 623, - D3D12_MESSAGE_ID_CREATEHEAP_INVALIDSIZE = 624, - D3D12_MESSAGE_ID_CREATEHEAP_UNRECOGNIZEDHEAPTYPE = 625, - D3D12_MESSAGE_ID_CREATEHEAP_UNRECOGNIZEDCPUPAGEPROPERTIES = 626, - D3D12_MESSAGE_ID_CREATEHEAP_UNRECOGNIZEDMEMORYPOOL = 627, - D3D12_MESSAGE_ID_CREATEHEAP_INVALIDPROPERTIES = 628, - D3D12_MESSAGE_ID_CREATEHEAP_INVALIDALIGNMENT = 629, - D3D12_MESSAGE_ID_CREATEHEAP_UNRECOGNIZEDMISCFLAGS = 630, - D3D12_MESSAGE_ID_CREATEHEAP_INVALIDMISCFLAGS = 631, - D3D12_MESSAGE_ID_CREATEHEAP_INVALIDARG_RETURN = 632, - D3D12_MESSAGE_ID_CREATEHEAP_OUTOFMEMORY_RETURN = 633, - D3D12_MESSAGE_ID_CREATERESOURCEANDHEAP_NULLHEAPPROPERTIES = 634, - D3D12_MESSAGE_ID_CREATERESOURCEANDHEAP_UNRECOGNIZEDHEAPTYPE = 635, - D3D12_MESSAGE_ID_CREATERESOURCEANDHEAP_UNRECOGNIZEDCPUPAGEPROPERTIES = 636, - D3D12_MESSAGE_ID_CREATERESOURCEANDHEAP_UNRECOGNIZEDMEMORYPOOL = 637, - D3D12_MESSAGE_ID_CREATERESOURCEANDHEAP_INVALIDHEAPPROPERTIES = 638, - D3D12_MESSAGE_ID_CREATERESOURCEANDHEAP_UNRECOGNIZEDHEAPMISCFLAGS = 639, - D3D12_MESSAGE_ID_CREATERESOURCEANDHEAP_INVALIDHEAPMISCFLAGS = 640, - D3D12_MESSAGE_ID_CREATERESOURCEANDHEAP_INVALIDARG_RETURN = 641, - D3D12_MESSAGE_ID_CREATERESOURCEANDHEAP_OUTOFMEMORY_RETURN = 642, - D3D12_MESSAGE_ID_GETCUSTOMHEAPPROPERTIES_UNRECOGNIZEDHEAPTYPE = 643, - D3D12_MESSAGE_ID_GETCUSTOMHEAPPROPERTIES_INVALIDHEAPTYPE = 644, - D3D12_MESSAGE_ID_CREATE_DESCRIPTOR_HEAP_INVALID_DESC = 645, - D3D12_MESSAGE_ID_INVALID_DESCRIPTOR_HANDLE = 646, - D3D12_MESSAGE_ID_CREATERASTERIZERSTATE_INVALID_CONSERVATIVERASTERMODE = 647, - D3D12_MESSAGE_ID_CREATE_CONSTANT_BUFFER_VIEW_INVALID_RESOURCE = 649, - D3D12_MESSAGE_ID_CREATE_CONSTANT_BUFFER_VIEW_INVALID_DESC = 650, - D3D12_MESSAGE_ID_CREATE_UNORDEREDACCESS_VIEW_INVALID_COUNTER_USAGE = 652, - D3D12_MESSAGE_ID_COPY_DESCRIPTORS_INVALID_RANGES = 653, - D3D12_MESSAGE_ID_COPY_DESCRIPTORS_WRITE_ONLY_DESCRIPTOR = 654, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_RTV_FORMAT_NOT_UNKNOWN = 655, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_INVALID_RENDER_TARGET_COUNT = 656, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_VERTEX_SHADER_NOT_SET = 657, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_INPUTLAYOUT_NOT_SET = 658, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_SHADER_LINKAGE_HS_DS_SIGNATURE_MISMATCH = 659, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_SHADER_LINKAGE_REGISTERINDEX = 660, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_SHADER_LINKAGE_COMPONENTTYPE = 661, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_SHADER_LINKAGE_REGISTERMASK = 662, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_SHADER_LINKAGE_SYSTEMVALUE = 663, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_SHADER_LINKAGE_NEVERWRITTEN_ALWAYSREADS = 664, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_SHADER_LINKAGE_MINPRECISION = 665, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_SHADER_LINKAGE_SEMANTICNAME_NOT_FOUND = 666, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_HS_XOR_DS_MISMATCH = 667, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_HULL_SHADER_INPUT_TOPOLOGY_MISMATCH = 668, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_HS_DS_CONTROL_POINT_COUNT_MISMATCH = 669, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_HS_DS_TESSELLATOR_DOMAIN_MISMATCH = 670, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_INVALID_USE_OF_CENTER_MULTISAMPLE_PATTERN = 671, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_INVALID_USE_OF_FORCED_SAMPLE_COUNT = 672, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_INVALID_PRIMITIVETOPOLOGY = 673, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_INVALID_SYSTEMVALUE = 674, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_OM_DUAL_SOURCE_BLENDING_CAN_ONLY_HAVE_RENDER_TARGET_0 = 675, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_OM_RENDER_TARGET_DOES_NOT_SUPPORT_BLENDING = 676, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_PS_OUTPUT_TYPE_MISMATCH = 677, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_OM_RENDER_TARGET_DOES_NOT_SUPPORT_LOGIC_OPS = 678, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_RENDERTARGETVIEW_NOT_SET = 679, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_DEPTHSTENCILVIEW_NOT_SET = 680, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_GS_INPUT_PRIMITIVE_MISMATCH = 681, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_POSITION_NOT_PRESENT = 682, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_MISSING_ROOT_SIGNATURE_FLAGS = 683, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_INVALID_INDEX_BUFFER_PROPERTIES = 684, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_INVALID_SAMPLE_DESC = 685, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_HS_ROOT_SIGNATURE_MISMATCH = 686, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_DS_ROOT_SIGNATURE_MISMATCH = 687, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_VS_ROOT_SIGNATURE_MISMATCH = 688, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_GS_ROOT_SIGNATURE_MISMATCH = 689, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_PS_ROOT_SIGNATURE_MISMATCH = 690, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_MISSING_ROOT_SIGNATURE = 691, - D3D12_MESSAGE_ID_EXECUTE_BUNDLE_OPEN_BUNDLE = 692, - D3D12_MESSAGE_ID_EXECUTE_BUNDLE_DESCRIPTOR_HEAP_MISMATCH = 693, - D3D12_MESSAGE_ID_EXECUTE_BUNDLE_TYPE = 694, - D3D12_MESSAGE_ID_DRAW_EMPTY_SCISSOR_RECTANGLE = 695, - D3D12_MESSAGE_ID_CREATE_ROOT_SIGNATURE_BLOB_NOT_FOUND = 696, - D3D12_MESSAGE_ID_CREATE_ROOT_SIGNATURE_DESERIALIZE_FAILED = 697, - D3D12_MESSAGE_ID_CREATE_ROOT_SIGNATURE_INVALID_CONFIGURATION = 698, - D3D12_MESSAGE_ID_CREATE_ROOT_SIGNATURE_NOT_SUPPORTED_ON_DEVICE = 699, - D3D12_MESSAGE_ID_CREATERESOURCEANDHEAP_NULLRESOURCEPROPERTIES = 700, - D3D12_MESSAGE_ID_CREATERESOURCEANDHEAP_NULLHEAP = 701, - D3D12_MESSAGE_ID_GETRESOURCEALLOCATIONINFO_INVALIDRDESCS = 702, - D3D12_MESSAGE_ID_MAKERESIDENT_NULLOBJECTARRAY = 703, - D3D12_MESSAGE_ID_EVICT_NULLOBJECTARRAY = 705, - D3D12_MESSAGE_ID_SET_DESCRIPTOR_TABLE_INVALID = 708, - D3D12_MESSAGE_ID_SET_ROOT_CONSTANT_INVALID = 709, - D3D12_MESSAGE_ID_SET_ROOT_CONSTANT_BUFFER_VIEW_INVALID = 710, - D3D12_MESSAGE_ID_SET_ROOT_SHADER_RESOURCE_VIEW_INVALID = 711, - D3D12_MESSAGE_ID_SET_ROOT_UNORDERED_ACCESS_VIEW_INVALID = 712, - D3D12_MESSAGE_ID_SET_VERTEX_BUFFERS_INVALID_DESC = 713, - D3D12_MESSAGE_ID_SET_INDEX_BUFFER_INVALID_DESC = 715, - D3D12_MESSAGE_ID_SET_STREAM_OUTPUT_BUFFERS_INVALID_DESC = 717, - D3D12_MESSAGE_ID_CREATERESOURCE_UNRECOGNIZEDDIMENSIONALITY = 718, - D3D12_MESSAGE_ID_CREATERESOURCE_UNRECOGNIZEDLAYOUT = 719, - D3D12_MESSAGE_ID_CREATERESOURCE_INVALIDDIMENSIONALITY = 720, - D3D12_MESSAGE_ID_CREATERESOURCE_INVALIDALIGNMENT = 721, - D3D12_MESSAGE_ID_CREATERESOURCE_INVALIDMIPLEVELS = 722, - D3D12_MESSAGE_ID_CREATERESOURCE_INVALIDSAMPLEDESC = 723, - D3D12_MESSAGE_ID_CREATERESOURCE_INVALIDLAYOUT = 724, - D3D12_MESSAGE_ID_SET_INDEX_BUFFER_INVALID = 725, - D3D12_MESSAGE_ID_SET_VERTEX_BUFFERS_INVALID = 726, - D3D12_MESSAGE_ID_SET_STREAM_OUTPUT_BUFFERS_INVALID = 727, - D3D12_MESSAGE_ID_SET_RENDER_TARGETS_INVALID = 728, - D3D12_MESSAGE_ID_CREATEQUERY_HEAP_INVALID_PARAMETERS = 729, - D3D12_MESSAGE_ID_BEGIN_END_QUERY_INVALID_PARAMETERS = 731, - D3D12_MESSAGE_ID_CLOSE_COMMAND_LIST_OPEN_QUERY = 732, - D3D12_MESSAGE_ID_RESOLVE_QUERY_DATA_INVALID_PARAMETERS = 733, - D3D12_MESSAGE_ID_SET_PREDICATION_INVALID_PARAMETERS = 734, - D3D12_MESSAGE_ID_TIMESTAMPS_NOT_SUPPORTED = 735, - // This was shipped, but is no longer used. Do not reuse. - //D3D12_MESSAGE_ID_UNSTABLE_POWER_STATE = 736, - D3D12_MESSAGE_ID_CREATERESOURCE_UNRECOGNIZEDFORMAT = 737, - D3D12_MESSAGE_ID_CREATERESOURCE_INVALIDFORMAT = 738, - D3D12_MESSAGE_ID_GETCOPYABLEFOOTPRINTS_INVALIDSUBRESOURCERANGE = 739, - D3D12_MESSAGE_ID_GETCOPYABLEFOOTPRINTS_INVALIDBASEOFFSET = 740, - // Note: These are the same as the above two, with the original (incorrect) name - D3D12_MESSAGE_ID_GETCOPYABLELAYOUT_INVALIDSUBRESOURCERANGE = 739, - D3D12_MESSAGE_ID_GETCOPYABLELAYOUT_INVALIDBASEOFFSET = 740, - D3D12_MESSAGE_ID_RESOURCE_BARRIER_INVALID_HEAP = 741, - D3D12_MESSAGE_ID_CREATE_SAMPLER_INVALID = 742, - D3D12_MESSAGE_ID_CREATECOMMANDSIGNATURE_INVALID = 743, - D3D12_MESSAGE_ID_EXECUTE_INDIRECT_INVALID_PARAMETERS = 744, - D3D12_MESSAGE_ID_GETGPUVIRTUALADDRESS_INVALID_RESOURCE_DIMENSION = 745, - - // These values shipped, but are no longer used. Do not reuse. - //D3D12_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDCONTEXTTYPE = 746, - //D3D12_MESSAGE_ID_CREATEQUERYORPREDICATE_DECODENOTSUPPORTED = 747, - //D3D12_MESSAGE_ID_CREATEQUERYORPREDICATE_ENCODENOTSUPPORTED = 748, - D3D12_MESSAGE_ID_CREATERESOURCE_INVALIDCLEARVALUE = 815, - D3D12_MESSAGE_ID_CREATERESOURCE_UNRECOGNIZEDCLEARVALUEFORMAT = 816, - D3D12_MESSAGE_ID_CREATERESOURCE_INVALIDCLEARVALUEFORMAT = 817, - D3D12_MESSAGE_ID_CREATERESOURCE_CLEARVALUEDENORMFLUSH = 818, - D3D12_MESSAGE_ID_CLEARRENDERTARGETVIEW_MISMATCHINGCLEARVALUE = 820, - D3D12_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_MISMATCHINGCLEARVALUE = 821, - D3D12_MESSAGE_ID_MAP_INVALIDHEAP = 822, - D3D12_MESSAGE_ID_UNMAP_INVALIDHEAP = 823, - D3D12_MESSAGE_ID_MAP_INVALIDRESOURCE = 824, - D3D12_MESSAGE_ID_UNMAP_INVALIDRESOURCE = 825, - D3D12_MESSAGE_ID_MAP_INVALIDSUBRESOURCE = 826, - D3D12_MESSAGE_ID_UNMAP_INVALIDSUBRESOURCE = 827, - D3D12_MESSAGE_ID_MAP_INVALIDRANGE = 828, - D3D12_MESSAGE_ID_UNMAP_INVALIDRANGE = 829, - D3D12_MESSAGE_ID_MAP_INVALIDDATAPOINTER = 832, - D3D12_MESSAGE_ID_MAP_INVALIDARG_RETURN = 833, - D3D12_MESSAGE_ID_MAP_OUTOFMEMORY_RETURN = 834, - D3D12_MESSAGE_ID_EXECUTECOMMANDLISTS_BUNDLENOTSUPPORTED = 835, - D3D12_MESSAGE_ID_EXECUTECOMMANDLISTS_COMMANDLISTMISMATCH = 836, - D3D12_MESSAGE_ID_EXECUTECOMMANDLISTS_OPENCOMMANDLIST = 837, - D3D12_MESSAGE_ID_EXECUTECOMMANDLISTS_FAILEDCOMMANDLIST = 838, - D3D12_MESSAGE_ID_COPYBUFFERREGION_NULLDST = 839, - D3D12_MESSAGE_ID_COPYBUFFERREGION_INVALIDDSTRESOURCEDIMENSION = 840, - D3D12_MESSAGE_ID_COPYBUFFERREGION_DSTRANGEOUTOFBOUNDS = 841, - D3D12_MESSAGE_ID_COPYBUFFERREGION_NULLSRC = 842, - D3D12_MESSAGE_ID_COPYBUFFERREGION_INVALIDSRCRESOURCEDIMENSION = 843, - D3D12_MESSAGE_ID_COPYBUFFERREGION_SRCRANGEOUTOFBOUNDS = 844, - D3D12_MESSAGE_ID_COPYBUFFERREGION_INVALIDCOPYFLAGS = 845, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_NULLDST = 846, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_UNRECOGNIZEDDSTTYPE = 847, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDDSTRESOURCEDIMENSION = 848, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDDSTRESOURCE = 849, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDDSTSUBRESOURCE = 850, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDDSTOFFSET = 851, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_UNRECOGNIZEDDSTFORMAT = 852, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDDSTFORMAT = 853, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDDSTDIMENSIONS = 854, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDDSTROWPITCH = 855, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDDSTPLACEMENT = 856, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDDSTDSPLACEDFOOTPRINTFORMAT = 857, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_DSTREGIONOUTOFBOUNDS = 858, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_NULLSRC = 859, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_UNRECOGNIZEDSRCTYPE = 860, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDSRCRESOURCEDIMENSION = 861, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDSRCRESOURCE = 862, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDSRCSUBRESOURCE = 863, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDSRCOFFSET = 864, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_UNRECOGNIZEDSRCFORMAT = 865, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDSRCFORMAT = 866, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDSRCDIMENSIONS = 867, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDSRCROWPITCH = 868, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDSRCPLACEMENT = 869, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDSRCDSPLACEDFOOTPRINTFORMAT = 870, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_SRCREGIONOUTOFBOUNDS = 871, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDDSTCOORDINATES = 872, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDSRCBOX = 873, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_FORMATMISMATCH = 874, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_EMPTYBOX = 875, - D3D12_MESSAGE_ID_COPYTEXTUREREGION_INVALIDCOPYFLAGS = 876, - - D3D12_MESSAGE_ID_RESOLVESUBRESOURCE_INVALID_SUBRESOURCE_INDEX = 877, - D3D12_MESSAGE_ID_RESOLVESUBRESOURCE_INVALID_FORMAT = 878, - D3D12_MESSAGE_ID_RESOLVESUBRESOURCE_RESOURCE_MISMATCH = 879, - D3D12_MESSAGE_ID_RESOLVESUBRESOURCE_INVALID_SAMPLE_COUNT = 880, - - D3D12_MESSAGE_ID_CREATECOMPUTEPIPELINESTATE_INVALID_SHADER = 881, - D3D12_MESSAGE_ID_CREATECOMPUTEPIPELINESTATE_CS_ROOT_SIGNATURE_MISMATCH = 882, - D3D12_MESSAGE_ID_CREATECOMPUTEPIPELINESTATE_MISSING_ROOT_SIGNATURE = 883, - - D3D12_MESSAGE_ID_CREATEPIPELINESTATE_INVALIDCACHEDBLOB = 884, - D3D12_MESSAGE_ID_CREATEPIPELINESTATE_CACHEDBLOBADAPTERMISMATCH = 885, - D3D12_MESSAGE_ID_CREATEPIPELINESTATE_CACHEDBLOBDRIVERVERSIONMISMATCH = 886, - D3D12_MESSAGE_ID_CREATEPIPELINESTATE_CACHEDBLOBDESCMISMATCH = 887, - D3D12_MESSAGE_ID_CREATEPIPELINESTATE_CACHEDBLOBIGNORED = 888, - D3D12_MESSAGE_ID_WRITETOSUBRESOURCE_INVALIDHEAP = 889, - D3D12_MESSAGE_ID_WRITETOSUBRESOURCE_INVALIDRESOURCE = 890, - D3D12_MESSAGE_ID_WRITETOSUBRESOURCE_INVALIDBOX = 891, - D3D12_MESSAGE_ID_WRITETOSUBRESOURCE_INVALIDSUBRESOURCE = 892, - D3D12_MESSAGE_ID_WRITETOSUBRESOURCE_EMPTYBOX = 893, - D3D12_MESSAGE_ID_READFROMSUBRESOURCE_INVALIDHEAP = 894, - D3D12_MESSAGE_ID_READFROMSUBRESOURCE_INVALIDRESOURCE = 895, - D3D12_MESSAGE_ID_READFROMSUBRESOURCE_INVALIDBOX = 896, - D3D12_MESSAGE_ID_READFROMSUBRESOURCE_INVALIDSUBRESOURCE = 897, - D3D12_MESSAGE_ID_READFROMSUBRESOURCE_EMPTYBOX = 898, - - D3D12_MESSAGE_ID_TOO_MANY_NODES_SPECIFIED = 899, - D3D12_MESSAGE_ID_INVALID_NODE_INDEX = 900, - - D3D12_MESSAGE_ID_GETHEAPPROPERTIES_INVALIDRESOURCE = 901, - D3D12_MESSAGE_ID_NODE_MASK_MISMATCH = 902, - D3D12_MESSAGE_ID_COMMAND_LIST_OUTOFMEMORY = 903, - D3D12_MESSAGE_ID_COMMAND_LIST_MULTIPLE_SWAPCHAIN_BUFFER_REFERENCES = 904, - D3D12_MESSAGE_ID_COMMAND_LIST_TOO_MANY_SWAPCHAIN_REFERENCES = 905, - D3D12_MESSAGE_ID_COMMAND_QUEUE_TOO_MANY_SWAPCHAIN_REFERENCES = 906, - D3D12_MESSAGE_ID_EXECUTECOMMANDLISTS_WRONGSWAPCHAINBUFFERREFERENCE = 907, - D3D12_MESSAGE_ID_COMMAND_LIST_SETRENDERTARGETS_INVALIDNUMRENDERTARGETS = 908, - D3D12_MESSAGE_ID_CREATE_QUEUE_INVALID_TYPE = 909, - D3D12_MESSAGE_ID_CREATE_QUEUE_INVALID_FLAGS = 910, - - D3D12_MESSAGE_ID_CREATESHAREDRESOURCE_INVALIDFLAGS = 911, - D3D12_MESSAGE_ID_CREATESHAREDRESOURCE_INVALIDFORMAT = 912, - D3D12_MESSAGE_ID_CREATESHAREDHEAP_INVALIDFLAGS = 913, - D3D12_MESSAGE_ID_REFLECTSHAREDPROPERTIES_UNRECOGNIZEDPROPERTIES = 914, - D3D12_MESSAGE_ID_REFLECTSHAREDPROPERTIES_INVALIDSIZE = 915, - D3D12_MESSAGE_ID_REFLECTSHAREDPROPERTIES_INVALIDOBJECT = 916, - D3D12_MESSAGE_ID_KEYEDMUTEX_INVALIDOBJECT = 917, - D3D12_MESSAGE_ID_KEYEDMUTEX_INVALIDKEY = 918, - D3D12_MESSAGE_ID_KEYEDMUTEX_WRONGSTATE = 919, - D3D12_MESSAGE_ID_CREATE_QUEUE_INVALID_PRIORITY = 920, - - D3D12_MESSAGE_ID_OBJECT_DELETED_WHILE_STILL_IN_USE = 921, - D3D12_MESSAGE_ID_CREATEPIPELINESTATE_INVALID_FLAGS = 922, - - D3D12_MESSAGE_ID_HEAP_ADDRESS_RANGE_HAS_NO_RESOURCE = 923, - - D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_RENDER_TARGET_DELETED = 924, - - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_ALL_RENDER_TARGETS_HAVE_UNKNOWN_FORMAT = 925, - - D3D12_MESSAGE_ID_HEAP_ADDRESS_RANGE_INTERSECTS_MULTIPLE_BUFFERS = 926, - - D3D12_MESSAGE_ID_EXECUTECOMMANDLISTS_GPU_WRITTEN_READBACK_RESOURCE_MAPPED = 927, - - D3D12_MESSAGE_ID_UNMAP_RANGE_NOT_EMPTY = 929, - D3D12_MESSAGE_ID_MAP_INVALID_NULLRANGE = 930, - D3D12_MESSAGE_ID_UNMAP_INVALID_NULLRANGE = 931, - - D3D12_MESSAGE_ID_NO_GRAPHICS_API_SUPPORT = 932, - D3D12_MESSAGE_ID_NO_COMPUTE_API_SUPPORT = 933, - - D3D12_MESSAGE_ID_RESOLVESUBRESOURCE_RESOURCE_FLAGS_NOT_SUPPORTED = 934, - - D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_ROOT_ARGUMENT_UNINITIALIZED = 935, - D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_DESCRIPTOR_HEAP_INDEX_OUT_OF_BOUNDS = 936, - D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_DESCRIPTOR_TABLE_REGISTER_INDEX_OUT_OF_BOUNDS = 937, - D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_DESCRIPTOR_UNINITIALIZED = 938, - D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_DESCRIPTOR_TYPE_MISMATCH = 939, - D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_SRV_RESOURCE_DIMENSION_MISMATCH = 940, - D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_UAV_RESOURCE_DIMENSION_MISMATCH = 941, - D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_INCOMPATIBLE_RESOURCE_STATE = 942, - - D3D12_MESSAGE_ID_COPYRESOURCE_NULLDST = 943, - D3D12_MESSAGE_ID_COPYRESOURCE_INVALIDDSTRESOURCE = 944, - D3D12_MESSAGE_ID_COPYRESOURCE_NULLSRC = 945, - D3D12_MESSAGE_ID_COPYRESOURCE_INVALIDSRCRESOURCE = 946, - - D3D12_MESSAGE_ID_RESOLVESUBRESOURCE_NULLDST = 947, - D3D12_MESSAGE_ID_RESOLVESUBRESOURCE_INVALIDDSTRESOURCE = 948, - D3D12_MESSAGE_ID_RESOLVESUBRESOURCE_NULLSRC = 949, - D3D12_MESSAGE_ID_RESOLVESUBRESOURCE_INVALIDSRCRESOURCE = 950, - - D3D12_MESSAGE_ID_PIPELINE_STATE_TYPE_MISMATCH = 951, - D3D12_MESSAGE_ID_COMMAND_LIST_DISPATCH_ROOT_SIGNATURE_NOT_SET = 952, - D3D12_MESSAGE_ID_COMMAND_LIST_DISPATCH_ROOT_SIGNATURE_MISMATCH = 953, - - D3D12_MESSAGE_ID_RESOURCE_BARRIER_ZERO_BARRIERS = 954, - - D3D12_MESSAGE_ID_BEGIN_END_EVENT_MISMATCH = 955, - - D3D12_MESSAGE_ID_RESOURCE_BARRIER_POSSIBLE_BEFORE_AFTER_MISMATCH = 956, - - D3D12_MESSAGE_ID_RESOURCE_BARRIER_MISMATCHING_BEGIN_END = 957, - - D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_INVALID_RESOURCE = 958, - - D3D12_MESSAGE_ID_USE_OF_ZERO_REFCOUNT_OBJECT = 959, - - D3D12_MESSAGE_ID_OBJECT_EVICTED_WHILE_STILL_IN_USE = 960, - - D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_ROOT_DESCRIPTOR_ACCESS_OUT_OF_BOUNDS = 961, - - D3D12_MESSAGE_ID_CREATEPIPELINELIBRARY_INVALIDLIBRARYBLOB = 962, - D3D12_MESSAGE_ID_CREATEPIPELINELIBRARY_DRIVERVERSIONMISMATCH = 963, - D3D12_MESSAGE_ID_CREATEPIPELINELIBRARY_ADAPTERVERSIONMISMATCH = 964, - D3D12_MESSAGE_ID_CREATEPIPELINELIBRARY_UNSUPPORTED = 965, - D3D12_MESSAGE_ID_CREATE_PIPELINELIBRARY = 966, - D3D12_MESSAGE_ID_LIVE_PIPELINELIBRARY = 967, - D3D12_MESSAGE_ID_DESTROY_PIPELINELIBRARY = 968, - - D3D12_MESSAGE_ID_STOREPIPELINE_NONAME = 969, - D3D12_MESSAGE_ID_STOREPIPELINE_DUPLICATENAME = 970, - D3D12_MESSAGE_ID_LOADPIPELINE_NAMENOTFOUND = 971, - D3D12_MESSAGE_ID_LOADPIPELINE_INVALIDDESC = 972, - D3D12_MESSAGE_ID_PIPELINELIBRARY_SERIALIZE_NOTENOUGHMEMORY = 973, - - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_PS_OUTPUT_RT_OUTPUT_MISMATCH = 974, - - D3D12_MESSAGE_ID_SETEVENTONMULTIPLEFENCECOMPLETION_INVALIDFLAGS = 975, - - D3D12_MESSAGE_ID_CREATE_QUEUE_VIDEO_NOT_SUPPORTED = 976, - D3D12_MESSAGE_ID_CREATE_COMMAND_ALLOCATOR_VIDEO_NOT_SUPPORTED = 977, - D3D12_MESSAGE_ID_CREATEQUERY_HEAP_VIDEO_DECODE_STATISTICS_NOT_SUPPORTED = 978, - D3D12_MESSAGE_ID_CREATE_VIDEODECODECOMMANDLIST = 979, - D3D12_MESSAGE_ID_CREATE_VIDEODECODER = 980, - D3D12_MESSAGE_ID_CREATE_VIDEODECODESTREAM = 981, - D3D12_MESSAGE_ID_LIVE_VIDEODECODECOMMANDLIST = 982, - D3D12_MESSAGE_ID_LIVE_VIDEODECODER = 983, - D3D12_MESSAGE_ID_LIVE_VIDEODECODESTREAM = 984, - D3D12_MESSAGE_ID_DESTROY_VIDEODECODECOMMANDLIST = 985, - D3D12_MESSAGE_ID_DESTROY_VIDEODECODER = 986, - D3D12_MESSAGE_ID_DESTROY_VIDEODECODESTREAM = 987, - D3D12_MESSAGE_ID_DECODE_FRAME_INVALID_PARAMETERS = 988, - - D3D12_MESSAGE_ID_DEPRECATED_API = 989, - - D3D12_MESSAGE_ID_RESOURCE_BARRIER_MISMATCHING_COMMAND_LIST_TYPE = 990, - - D3D12_MESSAGE_ID_COMMAND_LIST_DESCRIPTOR_TABLE_NOT_SET = 991, - D3D12_MESSAGE_ID_COMMAND_LIST_ROOT_CONSTANT_BUFFER_VIEW_NOT_SET = 992, - D3D12_MESSAGE_ID_COMMAND_LIST_ROOT_SHADER_RESOURCE_VIEW_NOT_SET = 993, - D3D12_MESSAGE_ID_COMMAND_LIST_ROOT_UNORDERED_ACCESS_VIEW_NOT_SET = 994, - - D3D12_MESSAGE_ID_DISCARD_INVALID_SUBRESOURCE_RANGE = 995, - D3D12_MESSAGE_ID_DISCARD_ONE_SUBRESOURCE_FOR_MIPS_WITH_RECTS = 996, - D3D12_MESSAGE_ID_DISCARD_NO_RECTS_FOR_NON_TEXTURE2D = 997, - - D3D12_MESSAGE_ID_COPY_ON_SAME_SUBRESOURCE = 998, - - D3D12_MESSAGE_ID_SETRESIDENCYPRIORITY_INVALID_PAGEABLE = 999, - - D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_UNSUPPORTED = 1000, - - D3D12_MESSAGE_ID_STATIC_DESCRIPTOR_INVALID_DESCRIPTOR_CHANGE = 1001, - D3D12_MESSAGE_ID_DATA_STATIC_DESCRIPTOR_INVALID_DATA_CHANGE = 1002, - D3D12_MESSAGE_ID_DATA_STATIC_WHILE_SET_AT_EXECUTE_DESCRIPTOR_INVALID_DATA_CHANGE = 1003, - D3D12_MESSAGE_ID_EXECUTE_BUNDLE_STATIC_DESCRIPTOR_DATA_STATIC_NOT_SET = 1004, - - D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_RESOURCE_ACCESS_OUT_OF_BOUNDS = 1005, - D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_SAMPLER_MODE_MISMATCH = 1006, - - D3D12_MESSAGE_ID_CREATE_FENCE_INVALID_FLAGS = 1007, - - D3D12_MESSAGE_ID_RESOURCE_BARRIER_DUPLICATE_SUBRESOURCE_TRANSITIONS = 1008, - D3D12_MESSAGE_ID_SETRESIDENCYPRIORITY_INVALID_PRIORITY = 1009, - D3D12_MESSAGE_ID_CREATE_DESCRIPTOR_HEAP_LARGE_NUM_DESCRIPTORS = 1013, - - D3D12_MESSAGE_ID_BEGIN_EVENT = 1014, - D3D12_MESSAGE_ID_END_EVENT = 1015, - - D3D12_MESSAGE_ID_CREATEDEVICE_DEBUG_LAYER_STARTUP_OPTIONS = 1016, - - D3D12_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_DEPTHBOUNDSTEST_UNSUPPORTED = 1017, - - D3D12_MESSAGE_ID_CREATEPIPELINESTATE_DUPLICATE_SUBOBJECT = 1018, - D3D12_MESSAGE_ID_CREATEPIPELINESTATE_UNKNOWN_SUBOBJECT = 1019, - D3D12_MESSAGE_ID_CREATEPIPELINESTATE_ZERO_SIZE_STREAM = 1020, - D3D12_MESSAGE_ID_CREATEPIPELINESTATE_INVALID_STREAM = 1021, - D3D12_MESSAGE_ID_CREATEPIPELINESTATE_CANNOT_DEDUCE_TYPE = 1022, - - D3D12_MESSAGE_ID_COMMAND_LIST_STATIC_DESCRIPTOR_RESOURCE_DIMENSION_MISMATCH = 1023, - - D3D12_MESSAGE_ID_CREATE_COMMAND_QUEUE_INSUFFICIENT_PRIVILEGE_FOR_GLOBAL_REALTIME = 1024, - D3D12_MESSAGE_ID_CREATE_COMMAND_QUEUE_INSUFFICIENT_HARDWARE_SUPPORT_FOR_GLOBAL_REALTIME = 1025, - - D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_INVALID_ARCHITECTURE = 1026, - D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_NULL_DST = 1027, - D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_INVALID_DST_RESOURCE_DIMENSION = 1028, - D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_DST_RANGE_OUT_OF_BOUNDS = 1029, - D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_NULL_SRC = 1030, - D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_INVALID_SRC_RESOURCE_DIMENSION = 1031, - D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_SRC_RANGE_OUT_OF_BOUNDS = 1032, - D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_INVALID_OFFSET_ALIGNMENT = 1033, - D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_NULL_DEPENDENT_RESOURCES = 1034, - D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_NULL_DEPENDENT_SUBRESOURCE_RANGES = 1035, - D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_INVALID_DEPENDENT_RESOURCE = 1036, - D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_INVALID_DEPENDENT_SUBRESOURCE_RANGE = 1037, - D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_DEPENDENT_SUBRESOURCE_OUT_OF_BOUNDS = 1038, - D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_DEPENDENT_RANGE_OUT_OF_BOUNDS = 1039, - D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_ZERO_DEPENDENCIES = 1040, - - D3D12_MESSAGE_ID_DEVICE_CREATE_SHARED_HANDLE_INVALIDARG = 1041, - - D3D12_MESSAGE_ID_DESCRIPTOR_HANDLE_WITH_INVALID_RESOURCE = 1042, - - D3D12_MESSAGE_ID_SETDEPTHBOUNDS_INVALIDARGS = 1043, - - D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_RESOURCE_STATE_IMPRECISE = 1044, - - D3D12_MESSAGE_ID_COMMAND_LIST_PIPELINE_STATE_NOT_SET = 1045, - - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_SHADER_MODEL_MISMATCH = 1046, - - D3D12_MESSAGE_ID_OBJECT_ACCESSED_WHILE_STILL_IN_USE = 1047, - - D3D12_MESSAGE_ID_PROGRAMMABLE_MSAA_UNSUPPORTED = 1048, - - D3D12_MESSAGE_ID_SETSAMPLEPOSITIONS_INVALIDARGS = 1049, - - D3D12_MESSAGE_ID_RESOLVESUBRESOURCEREGION_INVALID_RECT = 1050, - - D3D12_MESSAGE_ID_CREATE_VIDEODECODECOMMANDQUEUE = 1051, - D3D12_MESSAGE_ID_CREATE_VIDEOPROCESSCOMMANDLIST = 1052, - D3D12_MESSAGE_ID_CREATE_VIDEOPROCESSCOMMANDQUEUE = 1053, - D3D12_MESSAGE_ID_LIVE_VIDEODECODECOMMANDQUEUE = 1054, - D3D12_MESSAGE_ID_LIVE_VIDEOPROCESSCOMMANDLIST = 1055, - D3D12_MESSAGE_ID_LIVE_VIDEOPROCESSCOMMANDQUEUE = 1056, - D3D12_MESSAGE_ID_DESTROY_VIDEODECODECOMMANDQUEUE = 1057, - D3D12_MESSAGE_ID_DESTROY_VIDEOPROCESSCOMMANDLIST = 1058, - D3D12_MESSAGE_ID_DESTROY_VIDEOPROCESSCOMMANDQUEUE = 1059, - D3D12_MESSAGE_ID_CREATE_VIDEOPROCESSOR = 1060, - D3D12_MESSAGE_ID_CREATE_VIDEOPROCESSSTREAM = 1061, - D3D12_MESSAGE_ID_LIVE_VIDEOPROCESSOR = 1062, - D3D12_MESSAGE_ID_LIVE_VIDEOPROCESSSTREAM = 1063, - D3D12_MESSAGE_ID_DESTROY_VIDEOPROCESSOR = 1064, - D3D12_MESSAGE_ID_DESTROY_VIDEOPROCESSSTREAM = 1065, - - D3D12_MESSAGE_ID_PROCESS_FRAME_INVALID_PARAMETERS = 1066, - - D3D12_MESSAGE_ID_COPY_INVALIDLAYOUT = 1067, - - D3D12_MESSAGE_ID_CREATE_CRYPTO_SESSION = 1068, - D3D12_MESSAGE_ID_CREATE_CRYPTO_SESSION_POLICY = 1069, - D3D12_MESSAGE_ID_CREATE_PROTECTED_RESOURCE_SESSION = 1070, - D3D12_MESSAGE_ID_LIVE_CRYPTO_SESSION = 1071, - D3D12_MESSAGE_ID_LIVE_CRYPTO_SESSION_POLICY = 1072, - D3D12_MESSAGE_ID_LIVE_PROTECTED_RESOURCE_SESSION = 1073, - D3D12_MESSAGE_ID_DESTROY_CRYPTO_SESSION = 1074, - D3D12_MESSAGE_ID_DESTROY_CRYPTO_SESSION_POLICY = 1075, - D3D12_MESSAGE_ID_DESTROY_PROTECTED_RESOURCE_SESSION = 1076, - D3D12_MESSAGE_ID_PROTECTED_RESOURCE_SESSION_UNSUPPORTED = 1077, - - D3D12_MESSAGE_ID_FENCE_INVALIDOPERATION = 1078, - - D3D12_MESSAGE_ID_CREATEQUERY_HEAP_COPY_QUEUE_TIMESTAMPS_NOT_SUPPORTED = 1079, - - D3D12_MESSAGE_ID_SAMPLEPOSITIONS_MISMATCH_DEFERRED = 1080, - D3D12_MESSAGE_ID_SAMPLEPOSITIONS_MISMATCH_RECORDTIME_ASSUMEDFROMFIRSTUSE = 1081, - D3D12_MESSAGE_ID_SAMPLEPOSITIONS_MISMATCH_RECORDTIME_ASSUMEDFROMCLEAR = 1082, - - D3D12_MESSAGE_ID_CREATE_VIDEODECODERHEAP = 1083, - D3D12_MESSAGE_ID_LIVE_VIDEODECODERHEAP = 1084, - D3D12_MESSAGE_ID_DESTROY_VIDEODECODERHEAP = 1085, - - D3D12_MESSAGE_ID_OPENEXISTINGHEAP_INVALIDARG_RETURN = 1086, - D3D12_MESSAGE_ID_OPENEXISTINGHEAP_OUTOFMEMORY_RETURN = 1087, - D3D12_MESSAGE_ID_OPENEXISTINGHEAP_INVALIDADDRESS = 1088, - D3D12_MESSAGE_ID_OPENEXISTINGHEAP_INVALIDHANDLE = 1089, - - D3D12_MESSAGE_ID_WRITEBUFFERIMMEDIATE_INVALID_DEST = 1090, - D3D12_MESSAGE_ID_WRITEBUFFERIMMEDIATE_INVALID_MODE = 1091, - D3D12_MESSAGE_ID_WRITEBUFFERIMMEDIATE_INVALID_ALIGNMENT = 1092, - D3D12_MESSAGE_ID_WRITEBUFFERIMMEDIATE_NOT_SUPPORTED = 1093, - - D3D12_MESSAGE_ID_SETVIEWINSTANCEMASK_INVALIDARGS = 1094, - D3D12_MESSAGE_ID_VIEW_INSTANCING_UNSUPPORTED = 1095, - D3D12_MESSAGE_ID_VIEW_INSTANCING_INVALIDARGS = 1096, - - D3D12_MESSAGE_ID_COPYTEXTUREREGION_MISMATCH_DECODE_REFERENCE_ONLY_FLAG = 1097, - D3D12_MESSAGE_ID_COPYRESOURCE_MISMATCH_DECODE_REFERENCE_ONLY_FLAG = 1098, - - D3D12_MESSAGE_ID_CREATE_VIDEO_DECODE_HEAP_CAPS_FAILURE = 1099, - D3D12_MESSAGE_ID_CREATE_VIDEO_DECODE_HEAP_CAPS_UNSUPPORTED = 1100, - D3D12_MESSAGE_ID_VIDEO_DECODE_SUPPORT_INVALID_INPUT = 1101, - D3D12_MESSAGE_ID_CREATE_VIDEO_DECODER_UNSUPPORTED = 1102, - - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_METADATA_ERROR = 1103, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_VIEW_INSTANCING_VERTEX_SIZE_EXCEEDED = 1104, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_RUNTIME_INTERNAL_ERROR = 1105, - - D3D12_MESSAGE_ID_NO_VIDEO_API_SUPPORT = 1106, - - D3D12_MESSAGE_ID_VIDEO_PROCESS_SUPPORT_INVALID_INPUT = 1107, - D3D12_MESSAGE_ID_CREATE_VIDEO_PROCESSOR_CAPS_FAILURE = 1108, - D3D12_MESSAGE_ID_VIDEO_PROCESS_SUPPORT_UNSUPPORTED_FORMAT = 1109, - - D3D12_MESSAGE_ID_VIDEO_DECODE_FRAME_INVALID_ARGUMENT = 1110, - - D3D12_MESSAGE_ID_ENQUEUE_MAKE_RESIDENT_INVALID_FLAGS = 1111, - D3D12_MESSAGE_ID_OPENEXISTINGHEAP_UNSUPPORTED = 1112, - - D3D12_MESSAGE_ID_VIDEO_PROCESS_FRAMES_INVALID_ARGUMENT = 1113, - - D3D12_MESSAGE_ID_VIDEO_DECODE_SUPPORT_UNSUPPORTED = 1114, - - D3D12_MESSAGE_ID_CREATE_COMMANDRECORDER = 1115, - D3D12_MESSAGE_ID_LIVE_COMMANDRECORDER = 1116, - D3D12_MESSAGE_ID_DESTROY_COMMANDRECORDER = 1117, - D3D12_MESSAGE_ID_CREATE_COMMAND_RECORDER_VIDEO_NOT_SUPPORTED = 1118, - D3D12_MESSAGE_ID_CREATE_COMMAND_RECORDER_INVALID_SUPPORT_FLAGS = 1119, - D3D12_MESSAGE_ID_CREATE_COMMAND_RECORDER_INVALID_FLAGS = 1120, - D3D12_MESSAGE_ID_CREATE_COMMAND_RECORDER_MORE_RECORDERS_THAN_LOGICAL_PROCESSORS = 1121, - - D3D12_MESSAGE_ID_CREATE_COMMANDPOOL = 1122, - D3D12_MESSAGE_ID_LIVE_COMMANDPOOL = 1123, - D3D12_MESSAGE_ID_DESTROY_COMMANDPOOL = 1124, - D3D12_MESSAGE_ID_CREATE_COMMAND_POOL_INVALID_FLAGS = 1125, - - D3D12_MESSAGE_ID_CREATE_COMMAND_LIST_VIDEO_NOT_SUPPORTED = 1126, - - D3D12_MESSAGE_ID_COMMAND_RECORDER_SUPPORT_FLAGS_MISMATCH = 1127, - D3D12_MESSAGE_ID_COMMAND_RECORDER_CONTENTION = 1128, - - D3D12_MESSAGE_ID_COMMAND_RECORDER_USAGE_WITH_CREATECOMMANDLIST_COMMAND_LIST = 1129, - D3D12_MESSAGE_ID_COMMAND_ALLOCATOR_USAGE_WITH_CREATECOMMANDLIST1_COMMAND_LIST = 1130, - D3D12_MESSAGE_ID_CANNOT_EXECUTE_EMPTY_COMMAND_LIST = 1131, - - D3D12_MESSAGE_ID_CANNOT_RESET_COMMAND_POOL_WITH_OPEN_COMMAND_LISTS = 1132, - D3D12_MESSAGE_ID_CANNOT_USE_COMMAND_RECORDER_WITHOUT_CURRENT_TARGET = 1133, - D3D12_MESSAGE_ID_CANNOT_CHANGE_COMMAND_RECORDER_TARGET_WHILE_RECORDING = 1134, - D3D12_MESSAGE_ID_COMMAND_POOL_SYNC = 1135, - - D3D12_MESSAGE_ID_EVICT_UNDERFLOW = 1136, - - D3D12_MESSAGE_ID_CREATE_META_COMMAND = 1137, - D3D12_MESSAGE_ID_LIVE_META_COMMAND = 1138, - D3D12_MESSAGE_ID_DESTROY_META_COMMAND = 1139, - D3D12_MESSAGE_ID_COPYBUFFERREGION_INVALID_DST_RESOURCE = 1140, - D3D12_MESSAGE_ID_COPYBUFFERREGION_INVALID_SRC_RESOURCE = 1141, - D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_INVALID_DST_RESOURCE = 1142, - D3D12_MESSAGE_ID_ATOMICCOPYBUFFER_INVALID_SRC_RESOURCE = 1143, - D3D12_MESSAGE_ID_CREATEPLACEDRESOURCEONBUFFER_NULL_BUFFER = 1144, - D3D12_MESSAGE_ID_CREATEPLACEDRESOURCEONBUFFER_NULL_RESOURCE_DESC = 1145, - D3D12_MESSAGE_ID_CREATEPLACEDRESOURCEONBUFFER_UNSUPPORTED = 1146, - D3D12_MESSAGE_ID_CREATEPLACEDRESOURCEONBUFFER_INVALID_BUFFER_DIMENSION = 1147, - D3D12_MESSAGE_ID_CREATEPLACEDRESOURCEONBUFFER_INVALID_BUFFER_FLAGS = 1148, - D3D12_MESSAGE_ID_CREATEPLACEDRESOURCEONBUFFER_INVALID_BUFFER_OFFSET = 1149, - D3D12_MESSAGE_ID_CREATEPLACEDRESOURCEONBUFFER_INVALID_RESOURCE_DIMENSION = 1150, - D3D12_MESSAGE_ID_CREATEPLACEDRESOURCEONBUFFER_INVALID_RESOURCE_FLAGS = 1151, - D3D12_MESSAGE_ID_CREATEPLACEDRESOURCEONBUFFER_OUTOFMEMORY_RETURN = 1152, - - D3D12_MESSAGE_ID_CANNOT_CREATE_GRAPHICS_AND_VIDEO_COMMAND_RECORDER = 1153, - D3D12_MESSAGE_ID_UPDATETILEMAPPINGS_POSSIBLY_MISMATCHING_PROPERTIES = 1154, - - D3D12_MESSAGE_ID_CREATE_COMMAND_LIST_INVALID_COMMAND_LIST_TYPE = 1155, - - D3D12_MESSAGE_ID_CLEARUNORDEREDACCESSVIEW_INCOMPATIBLE_WITH_STRUCTURED_BUFFERS = 1156, - - D3D12_MESSAGE_ID_COMPUTE_ONLY_DEVICE_OPERATION_UNSUPPORTED = 1157, - - D3D12_MESSAGE_ID_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INVALID = 1158, - D3D12_MESSAGE_ID_EMIT_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_INVALID = 1159, - D3D12_MESSAGE_ID_COPY_RAYTRACING_ACCELERATION_STRUCTURE_INVALID = 1160, - D3D12_MESSAGE_ID_DISPATCH_RAYS_INVALID = 1161, - D3D12_MESSAGE_ID_GET_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO_INVALID = 1162, - - D3D12_MESSAGE_ID_CREATE_LIFETIMETRACKER = 1163, - D3D12_MESSAGE_ID_LIVE_LIFETIMETRACKER = 1164, - D3D12_MESSAGE_ID_DESTROY_LIFETIMETRACKER = 1165, - D3D12_MESSAGE_ID_DESTROYOWNEDOBJECT_OBJECTNOTOWNED = 1166, - - D3D12_MESSAGE_ID_CREATE_TRACKEDWORKLOAD = 1167, - D3D12_MESSAGE_ID_LIVE_TRACKEDWORKLOAD = 1168, - D3D12_MESSAGE_ID_DESTROY_TRACKEDWORKLOAD = 1169, - - D3D12_MESSAGE_ID_RENDER_PASS_ERROR = 1170, - - D3D12_MESSAGE_ID_META_COMMAND_ID_INVALID = 1171, - D3D12_MESSAGE_ID_META_COMMAND_UNSUPPORTED_PARAMS = 1172, - D3D12_MESSAGE_ID_META_COMMAND_FAILED_ENUMERATION = 1173, - D3D12_MESSAGE_ID_META_COMMAND_PARAMETER_SIZE_MISMATCH = 1174, - D3D12_MESSAGE_ID_UNINITIALIZED_META_COMMAND = 1175, - D3D12_MESSAGE_ID_META_COMMAND_INVALID_GPU_VIRTUAL_ADDRESS = 1176, - - D3D12_MESSAGE_ID_CREATE_VIDEOENCODECOMMANDLIST = 1177, - D3D12_MESSAGE_ID_LIVE_VIDEOENCODECOMMANDLIST = 1178, - D3D12_MESSAGE_ID_DESTROY_VIDEOENCODECOMMANDLIST = 1179, - - D3D12_MESSAGE_ID_CREATE_VIDEOENCODECOMMANDQUEUE = 1180, - D3D12_MESSAGE_ID_LIVE_VIDEOENCODECOMMANDQUEUE = 1181, - D3D12_MESSAGE_ID_DESTROY_VIDEOENCODECOMMANDQUEUE = 1182, - - D3D12_MESSAGE_ID_CREATE_VIDEOMOTIONESTIMATOR = 1183, - D3D12_MESSAGE_ID_LIVE_VIDEOMOTIONESTIMATOR = 1184, - D3D12_MESSAGE_ID_DESTROY_VIDEOMOTIONESTIMATOR = 1185, - - D3D12_MESSAGE_ID_CREATE_VIDEOMOTIONVECTORHEAP = 1186, - D3D12_MESSAGE_ID_LIVE_VIDEOMOTIONVECTORHEAP = 1187, - D3D12_MESSAGE_ID_DESTROY_VIDEOMOTIONVECTORHEAP = 1188, - - D3D12_MESSAGE_ID_MULTIPLE_TRACKED_WORKLOADS = 1189, - D3D12_MESSAGE_ID_MULTIPLE_TRACKED_WORKLOAD_PAIRS = 1190, - D3D12_MESSAGE_ID_OUT_OF_ORDER_TRACKED_WORKLOAD_PAIR = 1191, - D3D12_MESSAGE_ID_CANNOT_ADD_TRACKED_WORKLOAD = 1192, - D3D12_MESSAGE_ID_INCOMPLETE_TRACKED_WORKLOAD_PAIR = 1193, - D3D12_MESSAGE_ID_CREATE_STATE_OBJECT_ERROR = 1194, - D3D12_MESSAGE_ID_GET_SHADER_IDENTIFIER_ERROR = 1195, - D3D12_MESSAGE_ID_GET_SHADER_STACK_SIZE_ERROR = 1196, - D3D12_MESSAGE_ID_GET_PIPELINE_STACK_SIZE_ERROR = 1197, - D3D12_MESSAGE_ID_SET_PIPELINE_STACK_SIZE_ERROR = 1198, - D3D12_MESSAGE_ID_GET_SHADER_IDENTIFIER_SIZE_INVALID = 1199, - D3D12_MESSAGE_ID_CHECK_DRIVER_MATCHING_IDENTIFIER_INVALID = 1200, - D3D12_MESSAGE_ID_CHECK_DRIVER_MATCHING_IDENTIFIER_DRIVER_REPORTED_ISSUE = 1201, - - D3D12_MESSAGE_ID_RENDER_PASS_INVALID_RESOURCE_BARRIER = 1202, - D3D12_MESSAGE_ID_RENDER_PASS_DISALLOWED_API_CALLED = 1203, - D3D12_MESSAGE_ID_RENDER_PASS_CANNOT_NEST_RENDER_PASSES = 1204, - D3D12_MESSAGE_ID_RENDER_PASS_CANNOT_END_WITHOUT_BEGIN = 1205, - D3D12_MESSAGE_ID_RENDER_PASS_CANNOT_CLOSE_COMMAND_LIST = 1206, - D3D12_MESSAGE_ID_RENDER_PASS_GPU_WORK_WHILE_SUSPENDED = 1207, - D3D12_MESSAGE_ID_RENDER_PASS_MISMATCHING_SUSPEND_RESUME = 1208, - D3D12_MESSAGE_ID_RENDER_PASS_NO_PRIOR_SUSPEND_WITHIN_EXECUTECOMMANDLISTS = 1209, - D3D12_MESSAGE_ID_RENDER_PASS_NO_SUBSEQUENT_RESUME_WITHIN_EXECUTECOMMANDLISTS = 1210, - - D3D12_MESSAGE_ID_TRACKED_WORKLOAD_COMMAND_QUEUE_MISMATCH = 1211, - D3D12_MESSAGE_ID_TRACKED_WORKLOAD_NOT_SUPPORTED = 1212, - - D3D12_MESSAGE_ID_RENDER_PASS_MISMATCHING_NO_ACCESS = 1213, - D3D12_MESSAGE_ID_RENDER_PASS_UNSUPPORTED_RESOLVE = 1214, - - D3D12_MESSAGE_ID_CLEARUNORDEREDACCESSVIEW_INVALID_RESOURCE_PTR = 1215, - - D3D12_MESSAGE_ID_WINDOWS7_FENCE_OUTOFORDER_SIGNAL = 1216, - D3D12_MESSAGE_ID_WINDOWS7_FENCE_OUTOFORDER_WAIT = 1217, - - D3D12_MESSAGE_ID_VIDEO_CREATE_MOTION_ESTIMATOR_INVALID_ARGUMENT = 1218, - D3D12_MESSAGE_ID_VIDEO_CREATE_MOTION_VECTOR_HEAP_INVALID_ARGUMENT = 1219, - D3D12_MESSAGE_ID_ESTIMATE_MOTION_INVALID_ARGUMENT = 1220, - D3D12_MESSAGE_ID_RESOLVE_MOTION_VECTOR_HEAP_INVALID_ARGUMENT = 1221, - - D3D12_MESSAGE_ID_GETGPUVIRTUALADDRESS_INVALID_HEAP_TYPE = 1222, - D3D12_MESSAGE_ID_SET_BACKGROUND_PROCESSING_MODE_INVALID_ARGUMENT = 1223, - D3D12_MESSAGE_ID_CREATE_COMMAND_LIST_INVALID_COMMAND_LIST_TYPE_FOR_FEATURE_LEVEL = 1224, - - D3D12_MESSAGE_ID_CREATE_VIDEOEXTENSIONCOMMAND = 1225, - D3D12_MESSAGE_ID_LIVE_VIDEOEXTENSIONCOMMAND = 1226, - D3D12_MESSAGE_ID_DESTROY_VIDEOEXTENSIONCOMMAND = 1227, - D3D12_MESSAGE_ID_INVALID_VIDEO_EXTENSION_COMMAND_ID = 1228, - D3D12_MESSAGE_ID_VIDEO_EXTENSION_COMMAND_INVALID_ARGUMENT = 1229, - - D3D12_MESSAGE_ID_CREATE_ROOT_SIGNATURE_NOT_UNIQUE_IN_DXIL_LIBRARY = 1230, - - D3D12_MESSAGE_ID_VARIABLE_SHADING_RATE_NOT_ALLOWED_WITH_TIR = 1231, - D3D12_MESSAGE_ID_GEOMETRY_SHADER_OUTPUTTING_BOTH_VIEWPORT_ARRAY_INDEX_AND_SHADING_RATE_NOT_SUPPORTED_ON_DEVICE = 1232, - D3D12_MESSAGE_ID_RSSETSHADING_RATE_INVALID_SHADING_RATE = 1233, - D3D12_MESSAGE_ID_RSSETSHADING_RATE_SHADING_RATE_NOT_PERMITTED_BY_CAP = 1234, - D3D12_MESSAGE_ID_RSSETSHADING_RATE_INVALID_COMBINER = 1235, - D3D12_MESSAGE_ID_RSSETSHADINGRATEIMAGE_REQUIRES_TIER_2 = 1236, - D3D12_MESSAGE_ID_RSSETSHADINGRATE_REQUIRES_TIER_1 = 1237, - D3D12_MESSAGE_ID_SHADING_RATE_IMAGE_INCORRECT_FORMAT = 1238, - D3D12_MESSAGE_ID_SHADING_RATE_IMAGE_INCORRECT_ARRAY_SIZE = 1239, - D3D12_MESSAGE_ID_SHADING_RATE_IMAGE_INCORRECT_MIP_LEVEL = 1240, - D3D12_MESSAGE_ID_SHADING_RATE_IMAGE_INCORRECT_SAMPLE_COUNT = 1241, - D3D12_MESSAGE_ID_SHADING_RATE_IMAGE_INCORRECT_SAMPLE_QUALITY = 1242, - - D3D12_MESSAGE_ID_NON_RETAIL_SHADER_MODEL_WONT_VALIDATE = 1243, - - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_AS_ROOT_SIGNATURE_MISMATCH = 1244, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_MS_ROOT_SIGNATURE_MISMATCH = 1245, - - D3D12_MESSAGE_ID_ADD_TO_STATE_OBJECT_ERROR = 1246, - - D3D12_MESSAGE_ID_CREATE_PROTECTED_RESOURCE_SESSION_INVALID_ARGUMENT = 1247, - - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_MS_PSO_DESC_MISMATCH = 1248, - D3D12_MESSAGE_ID_CREATEPIPELINESTATE_MS_INCOMPLETE_TYPE = 1249, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_AS_NOT_MS_MISMATCH = 1250, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_MS_NOT_PS_MISMATCH = 1251, - D3D12_MESSAGE_ID_NONZERO_SAMPLER_FEEDBACK_MIP_REGION_WITH_INCOMPATIBLE_FORMAT = 1252, - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_INPUTLAYOUT_SHADER_MISMATCH = 1253, - - D3D12_MESSAGE_ID_EMPTY_DISPATCH = 1254, - - - D3D12_MESSAGE_ID_RESOURCE_FORMAT_REQUIRES_SAMPLER_FEEDBACK_CAPABILITY = 1255, - D3D12_MESSAGE_ID_SAMPLER_FEEDBACK_MAP_INVALID_MIP_REGION = 1256, - D3D12_MESSAGE_ID_SAMPLER_FEEDBACK_MAP_INVALID_DIMENSION = 1257, - D3D12_MESSAGE_ID_SAMPLER_FEEDBACK_MAP_INVALID_SAMPLE_COUNT = 1258, - D3D12_MESSAGE_ID_SAMPLER_FEEDBACK_MAP_INVALID_SAMPLE_QUALITY = 1259, - D3D12_MESSAGE_ID_SAMPLER_FEEDBACK_MAP_INVALID_LAYOUT = 1260, - D3D12_MESSAGE_ID_SAMPLER_FEEDBACK_MAP_REQUIRES_UNORDERED_ACCESS_FLAG = 1261, - D3D12_MESSAGE_ID_SAMPLER_FEEDBACK_CREATE_UAV_NULL_ARGUMENTS = 1262, - D3D12_MESSAGE_ID_SAMPLER_FEEDBACK_UAV_REQUIRES_SAMPLER_FEEDBACK_CAPABILITY = 1263, - D3D12_MESSAGE_ID_SAMPLER_FEEDBACK_CREATE_UAV_REQUIRES_FEEDBACK_MAP_FORMAT = 1264, - - D3D12_MESSAGE_ID_CREATEMESHSHADER_INVALIDSHADERBYTECODE = 1265, - D3D12_MESSAGE_ID_CREATEMESHSHADER_OUTOFMEMORY = 1266, - D3D12_MESSAGE_ID_CREATEMESHSHADERWITHSTREAMOUTPUT_INVALIDSHADERTYPE = 1267, - - D3D12_MESSAGE_ID_RESOLVESUBRESOURCE_SAMPLER_FEEDBACK_TRANSCODE_INVALID_FORMAT = 1268, - D3D12_MESSAGE_ID_RESOLVESUBRESOURCE_SAMPLER_FEEDBACK_INVALID_MIP_LEVEL_COUNT = 1269, - D3D12_MESSAGE_ID_RESOLVESUBRESOURCE_SAMPLER_FEEDBACK_TRANSCODE_ARRAY_SIZE_MISMATCH = 1270, - - D3D12_MESSAGE_ID_SAMPLER_FEEDBACK_CREATE_UAV_MISMATCHING_TARGETED_RESOURCE = 1271, - - D3D12_MESSAGE_ID_CREATEMESHSHADER_OUTPUTEXCEEDSMAXSIZE = 1272, - D3D12_MESSAGE_ID_CREATEMESHSHADER_GROUPSHAREDEXCEEDSMAXSIZE = 1273, - - D3D12_MESSAGE_ID_VERTEX_SHADER_OUTPUTTING_BOTH_VIEWPORT_ARRAY_INDEX_AND_SHADING_RATE_NOT_SUPPORTED_ON_DEVICE = 1274, - D3D12_MESSAGE_ID_MESH_SHADER_OUTPUTTING_BOTH_VIEWPORT_ARRAY_INDEX_AND_SHADING_RATE_NOT_SUPPORTED_ON_DEVICE = 1275, - D3D12_MESSAGE_ID_CREATEMESHSHADER_MISMATCHEDASMSPAYLOADSIZE = 1276, - - D3D12_MESSAGE_ID_CREATE_ROOT_SIGNATURE_UNBOUNDED_STATIC_DESCRIPTORS = 1277, - - D3D12_MESSAGE_ID_CREATEAMPLIFICATIONSHADER_INVALIDSHADERBYTECODE = 1278, - D3D12_MESSAGE_ID_CREATEAMPLIFICATIONSHADER_OUTOFMEMORY = 1279, - - D3D12_MESSAGE_ID_CREATE_SHADERCACHESESSION = 1280, - D3D12_MESSAGE_ID_LIVE_SHADERCACHESESSION = 1281, - D3D12_MESSAGE_ID_DESTROY_SHADERCACHESESSION = 1282, - - D3D12_MESSAGE_ID_CREATESHADERCACHESESSION_INVALIDARGS = 1283, - D3D12_MESSAGE_ID_CREATESHADERCACHESESSION_DISABLED = 1284, - D3D12_MESSAGE_ID_CREATESHADERCACHESESSION_ALREADYOPEN = 1285, - - D3D12_MESSAGE_ID_SHADERCACHECONTROL_DEVELOPERMODE = 1286, - D3D12_MESSAGE_ID_SHADERCACHECONTROL_INVALIDFLAGS = 1287, - D3D12_MESSAGE_ID_SHADERCACHECONTROL_STATEALREADYSET = 1288, - D3D12_MESSAGE_ID_SHADERCACHECONTROL_IGNOREDFLAG = 1289, - - D3D12_MESSAGE_ID_SHADERCACHESESSION_STOREVALUE_ALREADYPRESENT = 1290, - D3D12_MESSAGE_ID_SHADERCACHESESSION_STOREVALUE_HASHCOLLISION = 1291, - D3D12_MESSAGE_ID_SHADERCACHESESSION_STOREVALUE_CACHEFULL = 1292, - D3D12_MESSAGE_ID_SHADERCACHESESSION_FINDVALUE_NOTFOUND = 1293, - D3D12_MESSAGE_ID_SHADERCACHESESSION_CORRUPT = 1294, - D3D12_MESSAGE_ID_SHADERCACHESESSION_DISABLED = 1295, - - D3D12_MESSAGE_ID_OVERSIZED_DISPATCH = 1296, - D3D12_MESSAGE_ID_CREATE_VIDEOENCODER = 1297, - D3D12_MESSAGE_ID_LIVE_VIDEOENCODER = 1298, - D3D12_MESSAGE_ID_DESTROY_VIDEOENCODER = 1299, - D3D12_MESSAGE_ID_CREATE_VIDEOENCODERHEAP = 1300, - D3D12_MESSAGE_ID_LIVE_VIDEOENCODERHEAP = 1301, - D3D12_MESSAGE_ID_DESTROY_VIDEOENCODERHEAP = 1302, - - D3D12_MESSAGE_ID_COPYTEXTUREREGION_MISMATCH_ENCODE_REFERENCE_ONLY_FLAG = 1303, - D3D12_MESSAGE_ID_COPYRESOURCE_MISMATCH_ENCODE_REFERENCE_ONLY_FLAG = 1304, - D3D12_MESSAGE_ID_ENCODE_FRAME_INVALID_PARAMETERS = 1305, - D3D12_MESSAGE_ID_ENCODE_FRAME_UNSUPPORTED_PARAMETERS = 1306, - D3D12_MESSAGE_ID_RESOLVE_ENCODER_OUTPUT_METADATA_INVALID_PARAMETERS = 1307, - D3D12_MESSAGE_ID_RESOLVE_ENCODER_OUTPUT_METADATA_UNSUPPORTED_PARAMETERS = 1308, - D3D12_MESSAGE_ID_CREATE_VIDEO_ENCODER_INVALID_PARAMETERS = 1309, - D3D12_MESSAGE_ID_CREATE_VIDEO_ENCODER_UNSUPPORTED_PARAMETERS = 1310, - D3D12_MESSAGE_ID_CREATE_VIDEO_ENCODER_HEAP_INVALID_PARAMETERS = 1311, - D3D12_MESSAGE_ID_CREATE_VIDEO_ENCODER_HEAP_UNSUPPORTED_PARAMETERS = 1312, - D3D12_MESSAGE_ID_CREATECOMMANDLIST_NULL_COMMANDALLOCATOR = 1313, - D3D12_MESSAGE_ID_CLEAR_UNORDERED_ACCESS_VIEW_INVALID_DESCRIPTOR_HANDLE = 1314, - D3D12_MESSAGE_ID_DESCRIPTOR_HEAP_NOT_SHADER_VISIBLE = 1315, - D3D12_MESSAGE_ID_CREATEBLENDSTATE_BLENDOP_WARNING = 1316, - D3D12_MESSAGE_ID_CREATEBLENDSTATE_BLENDOPALPHA_WARNING = 1317, - D3D12_MESSAGE_ID_WRITE_COMBINE_PERFORMANCE_WARNING = 1318, - D3D12_MESSAGE_ID_RESOLVE_QUERY_INVALID_QUERY_STATE = 1319, - D3D12_MESSAGE_ID_SETPRIVATEDATA_NO_ACCESS = 1320, - D3D12_MESSAGE_ID_COMMAND_LIST_STATIC_DESCRIPTOR_SAMPLER_MODE_MISMATCH = 1321, - D3D12_MESSAGE_ID_GETCOPYABLEFOOTPRINTS_UNSUPPORTED_BUFFER_WIDTH = 1322, - D3D12_MESSAGE_ID_CREATEMESHSHADER_TOPOLOGY_MISMATCH = 1323, - D3D12_MESSAGE_ID_VRS_SUM_COMBINER_REQUIRES_CAPABILITY = 1324, - D3D12_MESSAGE_ID_SETTING_SHADING_RATE_FROM_MS_REQUIRES_CAPABILITY = 1325, - D3D12_MESSAGE_ID_SHADERCACHESESSION_SHADERCACHEDELETE_NOTSUPPORTED = 1326, - D3D12_MESSAGE_ID_SHADERCACHECONTROL_SHADERCACHECLEAR_NOTSUPPORTED = 1327, - D3D12_MESSAGE_ID_CREATERESOURCE_STATE_IGNORED = 1328, - D3D12_MESSAGE_ID_UNUSED_CROSS_EXECUTE_SPLIT_BARRIER = 1329, - D3D12_MESSAGE_ID_DEVICE_OPEN_SHARED_HANDLE_ACCESS_DENIED = 1330, - - D3D12_MESSAGE_ID_INCOMPATIBLE_BARRIER_VALUES = 1331, - D3D12_MESSAGE_ID_INCOMPATIBLE_BARRIER_ACCESS = 1332, - D3D12_MESSAGE_ID_INCOMPATIBLE_BARRIER_SYNC = 1333, - D3D12_MESSAGE_ID_INCOMPATIBLE_BARRIER_LAYOUT = 1334, - D3D12_MESSAGE_ID_INCOMPATIBLE_BARRIER_TYPE = 1335, - D3D12_MESSAGE_ID_OUT_OF_BOUNDS_BARRIER_SUBRESOURCE_RANGE = 1336, - D3D12_MESSAGE_ID_INCOMPATIBLE_BARRIER_RESOURCE_DIMENSION = 1337, - - D3D12_MESSAGE_ID_SET_SCISSOR_RECTS_INVALID_RECT = 1338, - - D3D12_MESSAGE_ID_SHADING_RATE_SOURCE_REQUIRES_DIMENSION_TEXTURE2D = 1339, - - D3D12_MESSAGE_ID_BUFFER_BARRIER_SUBREGION_OUT_OF_BOUNDS = 1340, - - D3D12_MESSAGE_ID_UNSUPPORTED_BARRIER_LAYOUT = 1341, - - D3D12_MESSAGE_ID_CREATERESOURCEANDHEAP_INVALID_PARAMETERS = 1342, - - D3D12_MESSAGE_ID_ENHANCED_BARRIERS_NOT_SUPPORTED = 1343, - - D3D12_MESSAGE_ID_LEGACY_BARRIER_VALIDATION_FORCED_ON = 1346, - - D3D12_MESSAGE_ID_EMPTY_ROOT_DESCRIPTOR_TABLE = 1347, - - D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_ELEMENT_OFFSET_UNALIGNED = 1348, - - D3D12_MESSAGE_ID_ALPHA_BLEND_FACTOR_NOT_SUPPORTED = 1349, - - D3D12_MESSAGE_ID_BARRIER_INTEROP_INVALID_LAYOUT = 1350, - D3D12_MESSAGE_ID_BARRIER_INTEROP_INVALID_STATE = 1351, - - D3D12_MESSAGE_ID_GRAPHICS_PIPELINE_STATE_DESC_ZERO_SAMPLE_MASK = 1352, - - D3D12_MESSAGE_ID_INDEPENDENT_STENCIL_REF_NOT_SUPPORTED = 1353, - D3D12_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INDEPENDENT_MASKS_UNSUPPORTED = 1354, - - D3D12_MESSAGE_ID_TEXTURE_BARRIER_SUBRESOURCES_OUT_OF_BOUNDS = 1355, - - D3D12_MESSAGE_ID_NON_OPTIMAL_BARRIER_ONLY_EXECUTE_COMMAND_LISTS = 1356, - - D3D12_MESSAGE_ID_EXECUTE_INDIRECT_ZERO_COMMAND_COUNT = 1357, - - D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_INCOMPATIBLE_TEXTURE_LAYOUT = 1358, - - D3D12_MESSAGE_ID_DYNAMIC_INDEX_BUFFER_STRIP_CUT_NOT_SUPPORTED = 1359, - D3D12_MESSAGE_ID_PRIMITIVE_TOPOLOGY_TRIANGLE_FANS_NOT_SUPPORTED = 1360, - - D3D12_MESSAGE_ID_CREATE_SAMPLER_COMPARISON_FUNC_IGNORED = 1361, - - D3D12_MESSAGE_ID_CREATEHEAP_INVALIDHEAPTYPE = 1362, - D3D12_MESSAGE_ID_CREATERESOURCEANDHEAP_INVALIDHEAPTYPE = 1363, - D3D12_MESSAGE_ID_DYNAMIC_DEPTH_BIAS_NOT_SUPPORTED = 1364, - D3D12_MESSAGE_ID_CREATERASTERIZERSTATE_NON_WHOLE_DYNAMIC_DEPTH_BIAS = 1365, - - D3D12_MESSAGE_ID_DYNAMIC_DEPTH_BIAS_FLAG_MISSING = 1366, - D3D12_MESSAGE_ID_DYNAMIC_DEPTH_BIAS_NO_PIPELINE = 1367, - D3D12_MESSAGE_ID_DYNAMIC_INDEX_BUFFER_STRIP_CUT_FLAG_MISSING = 1368, - D3D12_MESSAGE_ID_DYNAMIC_INDEX_BUFFER_STRIP_CUT_NO_PIPELINE = 1369, - - D3D12_MESSAGE_ID_NONNORMALIZED_COORDINATE_SAMPLING_NOT_SUPPORTED = 1370, - - D3D12_MESSAGE_ID_INVALID_CAST_TARGET = 1371, - - D3D12_MESSAGE_ID_RENDER_PASS_COMMANDLIST_INVALID_END_STATE = 1372, - D3D12_MESSAGE_ID_RENDER_PASS_COMMANDLIST_INVALID_START_STATE = 1373, - D3D12_MESSAGE_ID_RENDER_PASS_MISMATCHING_ACCESS = 1374, - D3D12_MESSAGE_ID_RENDER_PASS_MISMATCHING_LOCAL_PRESERVE_PARAMETERS = 1375, - D3D12_MESSAGE_ID_RENDER_PASS_LOCAL_PRESERVE_RENDER_PARAMETERS_ERROR = 1376, - D3D12_MESSAGE_ID_RENDER_PASS_LOCAL_DEPTH_STENCIL_ERROR = 1377, - - D3D12_MESSAGE_ID_DRAW_POTENTIALLY_OUTSIDE_OF_VALID_RENDER_AREA = 1378, - D3D12_MESSAGE_ID_CREATERASTERIZERSTATE_INVALID_LINERASTERIZATIONMODE = 1379, - - D3D12_MESSAGE_ID_CREATERESOURCE_INVALIDALIGNMENT_SMALLRESOURCE = 1380, - D3D12_MESSAGE_ID_GENERIC_DEVICE_OPERATION_UNSUPPORTED = 1381, - - D3D12_MESSAGE_ID_CREATEGRAPHICSPIPELINESTATE_RENDER_TARGET_WRONG_WRITE_MASK = 1382, - - D3D12_MESSAGE_ID_PROBABLE_PIX_EVENT_LEAK = 1383, - D3D12_MESSAGE_ID_PIX_EVENT_UNDERFLOW = 1384, - - D3D12_MESSAGE_ID_RECREATEAT_INVALID_TARGET = 1385, - D3D12_MESSAGE_ID_RECREATEAT_INSUFFICIENT_SUPPORT = 1386, - - D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_STRUCTURED_BUFFER_STRIDE_MISMATCH = 1387, - - D3D12_MESSAGE_ID_DISPATCH_GRAPH_INVALID = 1388, - - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_TARGET_FORMAT_INVALID = 1389, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_TARGET_DIMENSION_INVALID = 1390, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_SOURCE_COLOR_FORMAT_INVALID = 1391, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_SOURCE_DEPTH_FORMAT_INVALID = 1392, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_EXPOSURE_SCALE_FORMAT_INVALID = 1393, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_ENGINE_CREATE_FLAGS_INVALID = 1394, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_EXTENSION_INTERNAL_LOAD_FAILURE = 1395, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_EXTENSION_INTERNAL_ENGINE_CREATION_ERROR = 1396, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_EXTENSION_INTERNAL_UPSCALER_CREATION_ERROR = 1397, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_EXTENSION_INTERNAL_UPSCALER_EXECUTION_ERROR = 1398, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_UPSCALER_EXECUTE_REGION_INVALID = 1399, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_UPSCALER_EXECUTE_TIME_DELTA_INVALID = 1400, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_UPSCALER_EXECUTE_REQUIRED_TEXTURE_IS_NULL = 1401, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_UPSCALER_EXECUTE_MOTION_VECTORS_FORMAT_INVALID = 1402, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_UPSCALER_EXECUTE_FLAGS_INVALID = 1403, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_UPSCALER_EXECUTE_FORMAT_INVALID = 1404, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_UPSCALER_EXECUTE_EXPOSURE_SCALE_TEXTURE_SIZE_INVALID = 1405, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_VARIANT_INDEX_OUT_OF_BOUNDS = 1406, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_VARIANT_ID_NOT_FOUND = 1407, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_DUPLICATE_VARIANT_ID = 1408, - D3D12_MESSAGE_ID_DIRECTSR_OUT_OF_MEMORY = 1409, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_UPSCALER_EXECUTE_UNEXPECTED_TEXTURE_IS_IGNORED = 1410, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_UPSCALER_EVICT_UNDERFLOW = 1411, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_UPSCALER_EXECUTE_OPTIONAL_TEXTURE_IS_NULL = 1412, - D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_UPSCALER_EXECUTE_INVALID_CAMERA_JITTER = 1413, - D3D12_MESSAGE_ID_CREATE_STATE_OBJECT_WARNING = 1414, - D3D12_MESSAGE_ID_GUID_TEXTURE_LAYOUT_UNSUPPORTED = 1415, - D3D12_MESSAGE_ID_RESOLVE_ENCODER_INPUT_PARAM_LAYOUT_INVALID_PARAMETERS = 1416, - D3D12_MESSAGE_ID_INVALID_BARRIER_ACCESS = 1417, - D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_INSTANCE_COUNT_ZERO = 1418, - D3D12_MESSAGE_ID_DESCRIPTOR_HEAP_NOT_SET_BEFORE_ROOT_SIGNATURE_WITH_DIRECTLY_INDEXED_FLAG = 1419, - D3D12_MESSAGE_ID_DIFFERENT_DESCRIPTOR_HEAP_SET_AFTER_ROOT_SIGNATURE_WITH_DIRECTLY_INDEXED_FLAG = 1420, - D3D12_MESSAGE_ID_APPLICATION_SPECIFIC_DRIVER_STATE_NOT_SUPPORTED = 1421, - D3D12_MESSAGE_ID_RENDER_TARGET_OR_DEPTH_STENCIL_RESOUCE_NOT_INITIALIZED = 1422, - D3D12_MESSAGE_ID_BYTECODE_VALIDATION_ERROR = 1423, - D3D12_MESSAGE_ID_D3D12_MESSAGES_END -} D3D12_MESSAGE_ID; - -typedef struct D3D12_MESSAGE -{ - D3D12_MESSAGE_CATEGORY Category; - D3D12_MESSAGE_SEVERITY Severity; - D3D12_MESSAGE_ID ID; - [annotation("_Field_size_(DescriptionByteLength)")] const char* pDescription; - SIZE_T DescriptionByteLength; -} D3D12_MESSAGE; - -typedef struct D3D12_INFO_QUEUE_FILTER_DESC -{ - UINT NumCategories; - [annotation("_Field_size_(NumCategories)")] D3D12_MESSAGE_CATEGORY* pCategoryList; - UINT NumSeverities; - [annotation("_Field_size_(NumSeverities)")] D3D12_MESSAGE_SEVERITY* pSeverityList; - UINT NumIDs; - [annotation("_Field_size_(NumIDs)")] D3D12_MESSAGE_ID* pIDList; -} D3D12_INFO_QUEUE_FILTER_DESC; - -// To use, memset to 0, then fill in what you need. -typedef struct D3D12_INFO_QUEUE_FILTER -{ - D3D12_INFO_QUEUE_FILTER_DESC AllowList; - D3D12_INFO_QUEUE_FILTER_DESC DenyList; -} D3D12_INFO_QUEUE_FILTER; - -//============================================================================= -// ID3D12InfoQueue -// -// Logs D3D12 Messages. -// This interface can be queried from ID3D12Device, as long as the device -// was created with the debug layer. -// -// -cpp_quote("#define D3D12_INFO_QUEUE_DEFAULT_MESSAGE_COUNT_LIMIT 1024") -[uuid(0742a90b-c387-483f-b946-30a7e4e61458), object, local, pointer_default(unique)] -interface ID3D12InfoQueue - : IUnknown -{ - //========================================================================= - // Methods for configuring how much data is stored in the queue. - - // SetMessageCountLimit() - // This sets how many messages are stored. When the queue is full, - // new messages coming in push old messages out. - // Passing -1 to SetMessageCountLimit means the queue has - // unlimited size (go until out of memory or ClearStoredMessages()). - // The default message count size is - // D3D12_INFO_QUEUE_DEFAULT_MESSAGE_COUNT_LIMIT - // Returns S_OK or E_INVALIDARG. - HRESULT SetMessageCountLimit([annotation("_In_")] UINT64 MessageCountLimit); - - // ClearStoredMessages - void ClearStoredMessages(); - - //========================================================================= - // Methods for retrieving data or statistics from the queue. - - // GetMessage() - // Retrieves messages, one at a time, from the queue which pass any - // retrieval filter currently defined. If there is no retrieval filter, - // all messages can be retrieved. - // The MessageIndex parameter is a 0 based index into the results passing - // the filter. The number of results is returned by - // GetNumStoredMessagesAllowedByRetrievalFilter(). - // - // Note this does not remove the message from the queue. - // - // pMessageByteLength inputs the size of the buffer passed in via - // pMessage, and outputs the size of the message. pMessage can be NULL - // when the size of the required buffer is being queried (return S_FALSE). - // - // NOTE: The returned buffer pMessage is NOT just the size of D3D12_MESSAGE, - // it includes extra memory after the D3D12_MESSAGE for storing the string - // description, which is pointed to from within D3D12_MESSAGE. Therefore - // applications should check the size needed for pMessage as described above. - // - // Watch out for thread safety when making consecutive calls first to - // determine the buffer size required and then to pass in the buffer and - // retrieve the message, and also between calling - // GetNumStoredMessagesAllowedByRetrievalFilter() and enumerating through - // the results via GetMessagE(). - // - // Returns: S_OK, S_FALSE, E_INVALIDARG or E_OUTOFMEMORY. - HRESULT GetMessage( - [annotation("_In_")] UINT64 MessageIndex, - [annotation("_Out_writes_bytes_opt_(*pMessageByteLength)")] D3D12_MESSAGE* pMessage, - [annotation("_Inout_")] SIZE_T* pMessageByteLength); - - // GetNumMessagesAllowedByStorageFilter() - // Returns how many messages sent to the queue passed - // whatever storage filter was active upon receipt of - // the message. - // This can be a larger value than the message count limit, - // returned by GetMessageCountLimit(), since old messages are discarded - // when the queue is full to prevent overflow. - UINT64 GetNumMessagesAllowedByStorageFilter(); - - // GetNumMessagesDeniedByStorageFilter() - UINT64 GetNumMessagesDeniedByStorageFilter(); - - // GetNumStoredMessages() - // Returns how many messages are currently stored in the queue. - UINT64 GetNumStoredMessages(); - - // GetNumStoredMessagesAllowedByRetrievalFilter() - // Returns how many messages that are currently in the queue - // pass any retrieval filter that is currently set. - // The MessageIndex parameter to GetMessage() indexes - // an array of this many results. - UINT64 GetNumStoredMessagesAllowedByRetrievalFilter(); - - // GetNumMessagesDiscardedByMessageCountLimit() - UINT64 GetNumMessagesDiscardedByMessageCountLimit(); - - // GetMessageCountLimit - // This is how many messages can be stored in the queue. - // When the queue is full, new messages coming in push old messages out. - // -1 means there is no limit. - UINT64 GetMessageCountLimit(); - - //========================================================================= - // Methods for filtering what gets stored in the queue - - // AddStorageFilterEntries() - // Adds to the existing entries at top of stack - // Returns: S_OK, E_INVALIDARG or E_OUTOFMEMORY. - HRESULT AddStorageFilterEntries( - [annotation("_In_")] D3D12_INFO_QUEUE_FILTER* pFilter); - - // GetStorageFilter() - // Gets all entries at top of stack. - // The application must allocate the output buffer. The size required can be - // queried by passing null for pFilter and looking at the returned - // pFilterByteLength (HRESULT is S_FALSE). Note that D3D12_INFO_QUEUE_FILTER contains - // pointers - these will point to locations within the same - // contiguous buffer - *pFilterByteLength is the total storage needed for all - // data. So the application needs to only allocate/free the memory for pFilter. - // Returns S_OK, S_FALSE, E_INVALIDARG or E_OUTOFMEMORY - HRESULT GetStorageFilter( - [annotation("_Out_writes_bytes_opt_(*pFilterByteLength)")] D3D12_INFO_QUEUE_FILTER* pFilter, - [annotation("_Inout_")] SIZE_T* pFilterByteLength); - - // ClearStorageFilter() - // Clears filter at the top of the stack (if there is one) - void ClearStorageFilter(); - - // PushEmptyStorageFilter() - // Push an empty storage filter on the stack to allow local filtering changes. - // For convenience, this is automatically called by SetStorageFilter() - // if the stack is empty. Thus if the stack is not needed, filters can be - // defined without ever bothering to push or pop. - // Returns S_OK or E_OUTOFMEMORY - HRESULT PushEmptyStorageFilter(); - - // PushCopyOfStorageFilter() - // Push a copy of the current filter so that local modifications can be made - // starting from what currently exists. - // Returns S_OK or E_OUTOFMEMORY - HRESULT PushCopyOfStorageFilter(); - - // PushStorageFilter() - // Push a filter passed as a parameter onto the stack. This is - // just a helper for calling PushEmptyStorageFilter() followed - // by AddStorageFilterEntries() - // Returns S_OK, E_INVALIDARG or E_OUTOFMEMORY. - HRESULT PushStorageFilter( - [annotation("_In_")] D3D12_INFO_QUEUE_FILTER* pFilter); - - // PopStorageFilter() - // Pop the current storage filter off the stack (if there is one) - void PopStorageFilter(); - - // GetStorageFilterStackSize() - UINT GetStorageFilterStackSize(); - - //========================================================================= - // Methods for filtering what gets read out of the queue by GetMessage(). - - // AddRetrievalFilterEntries() - // Adds to the existing entries at top of stack - // Returns: S_OK, E_INVALIDARG or E_OUTOFMEMORY. - HRESULT AddRetrievalFilterEntries( - [annotation("_In_")] D3D12_INFO_QUEUE_FILTER* pFilter); - - // GetRetrievalFilter() - // Gets all entries at top of stack. - // The application must allocate the output buffer. The size required can be - // queried by passing null for pFilter and looking at the returned - // pFilterByteLength (HRESULT is S_FALSE). Note that D3D12_INFO_QUEUE_FILTER contains - // pointers - these will point to locations within the same - // contiguous buffer - *pFilterByteLength is the total storage needed for all - // data. So the application needs to only allocate/free the memory for pFilter. - // Returns S_OK, S_FALSE, E_INVALIDARG or E_OUTOFMEMORY - HRESULT GetRetrievalFilter( - [annotation("_Out_writes_bytes_opt_(*pFilterByteLength)")] D3D12_INFO_QUEUE_FILTER* pFilter, - [annotation("_Inout_")] SIZE_T* pFilterByteLength); - - // ClearRetrievalFilter() - // Clears filter at the top of the stack (if there is one) - void ClearRetrievalFilter(); - - // PushEmptyRetrievalFilter() - // Push an empty storage filter on the stack to allow local filtering changes. - // For convenience, this is automatically called by SetRetrievalFilter() - // if the stack is empty. Thus if the stack is not needed, filters can be - // defined without ever bothering to push or pop. - // Returns S_OK or E_OUTOFMEMORY - HRESULT PushEmptyRetrievalFilter(); - - // PushCopyOfRetrievalFilter() - // Push a copy of the current filter so that local modifications can be made - // starting from what currently exists. - // Returns S_OK or E_OUTOFMEMORY - HRESULT PushCopyOfRetrievalFilter(); - - // PushRetrievalFilter() - // Push a filter passed as a parameter onto the stack. This is - // just a helper for calling PushEmptyRetrievalFilter() followed - // by AddRetrievalFilterEntries() - // Returns S_OK, E_INVALIDARG or E_OUTOFMEMORY. - HRESULT PushRetrievalFilter( - [annotation("_In_")] D3D12_INFO_QUEUE_FILTER* pFilter); - - // PopRetrievalFilter() - // Pop the current storage filter off the stack (if there is one) - void PopRetrievalFilter(); - - // GetRetrievalFilterStackSize() - UINT GetRetrievalFilterStackSize(); - - //========================================================================= - // Methods for adding entries to the queue. - - // AddMessage() - // This is used by D3D12 components to log messages. Nothing stops - // applications from calling this, but it isn’t particularly useful. - // If an application wishes to insert custom strings into the queue, - // AddApplicationMessage() below is suggested. See below. - // - // Returns S_OK, E_INVALIDARG or E_OUTOFMEMORY - HRESULT AddMessage( - [annotation("_In_")] D3D12_MESSAGE_CATEGORY Category, - [annotation("_In_")] D3D12_MESSAGE_SEVERITY Severity, - [annotation("_In_")] D3D12_MESSAGE_ID ID, - [annotation("_In_")] LPCSTR pDescription); - - // AddApplicationMessage() - // This is a convenience for applications that want - // to insert strings of their own into the queue, perhaps to log issues - // of its own, or to mark out points in time in the queue. This - // has the same effect as calling AddMessage() above with the - // following settings: - // Category = D3D12_MESSAGE_CATEGORY_APPLICATION_DEFINED - // Severity = - // ID = D3D12_MESSAGE_ID_STRING_FROM_APPLICATION - // pDescription = - // - // Returns S_OK, E_INVALIDARG or E_OUTOFMEMORY - HRESULT AddApplicationMessage( - [annotation("_In_")] D3D12_MESSAGE_SEVERITY Severity, - [annotation("_In_")] LPCSTR pDescription); - - //========================================================================= - // Methods for breaking on errors that pass the storage filter. - HRESULT SetBreakOnCategory( - [annotation("_In_")] D3D12_MESSAGE_CATEGORY Category, - [annotation("_In_")] BOOL bEnable); - HRESULT SetBreakOnSeverity( - [annotation("_In_")] D3D12_MESSAGE_SEVERITY Severity, - [annotation("_In_")] BOOL bEnable); - HRESULT SetBreakOnID( - [annotation("_In_")] D3D12_MESSAGE_ID ID, - [annotation("_In_")] BOOL bEnable); - - BOOL GetBreakOnCategory( - [annotation("_In_")] D3D12_MESSAGE_CATEGORY Category); - BOOL GetBreakOnSeverity( - [annotation("_In_")] D3D12_MESSAGE_SEVERITY Severity); - BOOL GetBreakOnID( - [annotation("_In_")] D3D12_MESSAGE_ID ID); - - //========================================================================= - // Methods for globally muting debug spte from the InfoQueue - void SetMuteDebugOutput( - [annotation("_In_")] BOOL bMute); - BOOL GetMuteDebugOutput(); -}; - -typedef enum D3D12_MESSAGE_CALLBACK_FLAGS -{ - D3D12_MESSAGE_CALLBACK_FLAG_NONE = 0x00, - D3D12_MESSAGE_CALLBACK_IGNORE_FILTERS = 0x01, - -} D3D12_MESSAGE_CALLBACK_FLAGS; - -cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS(D3D12_MESSAGE_CALLBACK_FLAGS)") - -typedef void (__stdcall *D3D12MessageFunc) (D3D12_MESSAGE_CATEGORY Category, - D3D12_MESSAGE_SEVERITY Severity, - D3D12_MESSAGE_ID ID, - LPCSTR pDescription, - void* pContext); - -[ uuid( 2852dd88-b484-4c0c-b6b1-67168500e600 ), object, local, pointer_default( unique ) ] -interface ID3D12InfoQueue1 - : ID3D12InfoQueue -{ - HRESULT RegisterMessageCallback( - [annotation("_In_")] D3D12MessageFunc CallbackFunc, - [annotation("_In_")] D3D12_MESSAGE_CALLBACK_FLAGS CallbackFilterFlags, - [annotation("_Inout_")] void* pContext, - [annotation("_Inout_")] DWORD *pCallbackCookie); - - HRESULT UnregisterMessageCallback( - [annotation("_In_")] DWORD CallbackCookie); -}; - - - -cpp_quote("#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) */") -#pragma endregion - -cpp_quote( "DEFINE_GUID(IID_ID3D12Debug,0x344488b7,0x6846,0x474b,0xb9,0x89,0xf0,0x27,0x44,0x82,0x45,0xe0);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12Debug1,0xaffaa4ca,0x63fe,0x4d8e,0xb8,0xad,0x15,0x90,0x00,0xaf,0x43,0x04);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12Debug2,0x93a665c4,0xa3b2,0x4e5d,0xb6,0x92,0xa2,0x6a,0xe1,0x4e,0x33,0x74);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12Debug3,0x5cf4e58f,0xf671,0x4ff1,0xa5,0x42,0x36,0x86,0xe3,0xd1,0x53,0xd1);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12Debug4,0x014b816e,0x9ec5,0x4a2f,0xa8,0x45,0xff,0xbe,0x44,0x1c,0xe1,0x3a);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12Debug5,0x548d6b12,0x09fa,0x40e0,0x90,0x69,0x5d,0xcd,0x58,0x9a,0x52,0xc9);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12Debug6,0x82a816d6,0x5d01,0x4157,0x97,0xd0,0x49,0x75,0x46,0x3f,0xd1,0xed);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12DebugDevice1,0xa9b71770,0xd099,0x4a65,0xa6,0x98,0x3d,0xee,0x10,0x02,0x0f,0x88);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12DebugDevice,0x3febd6dd,0x4973,0x4787,0x81,0x94,0xe4,0x5f,0x9e,0x28,0x92,0x3e);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12DebugDevice2,0x60eccbc1,0x378d,0x4df1,0x89,0x4c,0xf8,0xac,0x5c,0xe4,0xd7,0xdd);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12DebugCommandQueue,0x09e0bf36,0x54ac,0x484f,0x88,0x47,0x4b,0xae,0xea,0xb6,0x05,0x3a);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12DebugCommandQueue1,0x16be35a2,0xbfd6,0x49f2,0xbc,0xae,0xea,0xae,0x4a,0xff,0x86,0x2d);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12DebugCommandList1,0x102ca951,0x311b,0x4b01,0xb1,0x1f,0xec,0xb8,0x3e,0x06,0x1b,0x37);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12DebugCommandList,0x09e0bf36,0x54ac,0x484f,0x88,0x47,0x4b,0xae,0xea,0xb6,0x05,0x3f);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12DebugCommandList2,0xaeb575cf,0x4e06,0x48be,0xba,0x3b,0xc4,0x50,0xfc,0x96,0x65,0x2e);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12DebugCommandList3,0x197d5e15,0x4d37,0x4d34,0xaf,0x78,0x72,0x4c,0xd7,0x0f,0xdb,0x1f);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12SharingContract,0x0adf7d52,0x929c,0x4e61,0xad,0xdb,0xff,0xed,0x30,0xde,0x66,0xef);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12ManualWriteTrackingResource,0x86ca3b85,0x49ad,0x4b6e,0xae,0xd5,0xed,0xdb,0x18,0x54,0x0f,0x41);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12InfoQueue,0x0742a90b,0xc387,0x483f,0xb9,0x46,0x30,0xa7,0xe4,0xe6,0x14,0x58);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12InfoQueue1,0x2852dd88,0xb484,0x4c0c,0xb6,0xb1,0x67,0x16,0x85,0x00,0xe6,0x00);" ) diff --git a/Juliet/src/Graphics/D3D12/AgilitySDK/d3d12shader.h b/Juliet/src/Graphics/D3D12/AgilitySDK/d3d12shader.h deleted file mode 100644 index 5458064..0000000 --- a/Juliet/src/Graphics/D3D12/AgilitySDK/d3d12shader.h +++ /dev/null @@ -1,489 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. -// -// File: D3D12Shader.h -// Content: D3D12 Shader Types and APIs -// -////////////////////////////////////////////////////////////////////////////// - -#ifndef __D3D12SHADER_H__ -#define __D3D12SHADER_H__ - -#include "d3dcommon.h" - -typedef enum D3D12_SHADER_VERSION_TYPE -{ - D3D12_SHVER_PIXEL_SHADER = 0, - D3D12_SHVER_VERTEX_SHADER = 1, - D3D12_SHVER_GEOMETRY_SHADER = 2, - - // D3D11 Shaders - D3D12_SHVER_HULL_SHADER = 3, - D3D12_SHVER_DOMAIN_SHADER = 4, - D3D12_SHVER_COMPUTE_SHADER = 5, - - // D3D12 Shaders - D3D12_SHVER_LIBRARY = 6, - - D3D12_SHVER_RAY_GENERATION_SHADER = 7, - D3D12_SHVER_INTERSECTION_SHADER = 8, - D3D12_SHVER_ANY_HIT_SHADER = 9, - D3D12_SHVER_CLOSEST_HIT_SHADER = 10, - D3D12_SHVER_MISS_SHADER = 11, - D3D12_SHVER_CALLABLE_SHADER = 12, - - D3D12_SHVER_MESH_SHADER = 13, - D3D12_SHVER_AMPLIFICATION_SHADER = 14, - - D3D12_SHVER_NODE_SHADER = 15, - - D3D12_SHVER_RESERVED0 = 0xFFF0, -} D3D12_SHADER_VERSION_TYPE; - -#define D3D12_SHVER_GET_TYPE(_Version) \ - (((_Version) >> 16) & 0xffff) -#define D3D12_SHVER_GET_MAJOR(_Version) \ - (((_Version) >> 4) & 0xf) -#define D3D12_SHVER_GET_MINOR(_Version) \ - (((_Version) >> 0) & 0xf) - -// Slot ID for library function return -#define D3D_RETURN_PARAMETER_INDEX (-1) - -typedef D3D_RESOURCE_RETURN_TYPE D3D12_RESOURCE_RETURN_TYPE; - -typedef D3D_CBUFFER_TYPE D3D12_CBUFFER_TYPE; - -typedef struct _D3D12_SIGNATURE_PARAMETER_DESC -{ - LPCSTR SemanticName; // Name of the semantic - UINT SemanticIndex; // Index of the semantic - UINT Register; // Number of member variables - D3D_NAME SystemValueType;// A predefined system value, or D3D_NAME_UNDEFINED if not applicable - D3D_REGISTER_COMPONENT_TYPE ComponentType; // Scalar type (e.g. uint, float, etc.) - BYTE Mask; // Mask to indicate which components of the register - // are used (combination of D3D10_COMPONENT_MASK values) - BYTE ReadWriteMask; // Mask to indicate whether a given component is - // never written (if this is an output signature) or - // always read (if this is an input signature). - // (combination of D3D_MASK_* values) - UINT Stream; // Stream index - D3D_MIN_PRECISION MinPrecision; // Minimum desired interpolation precision -} D3D12_SIGNATURE_PARAMETER_DESC; - -typedef struct _D3D12_SHADER_BUFFER_DESC -{ - LPCSTR Name; // Name of the constant buffer - D3D_CBUFFER_TYPE Type; // Indicates type of buffer content - UINT Variables; // Number of member variables - UINT Size; // Size of CB (in bytes) - UINT uFlags; // Buffer description flags -} D3D12_SHADER_BUFFER_DESC; - -typedef struct _D3D12_SHADER_VARIABLE_DESC -{ - LPCSTR Name; // Name of the variable - UINT StartOffset; // Offset in constant buffer's backing store - UINT Size; // Size of variable (in bytes) - UINT uFlags; // Variable flags - LPVOID DefaultValue; // Raw pointer to default value - UINT StartTexture; // First texture index (or -1 if no textures used) - UINT TextureSize; // Number of texture slots possibly used. - UINT StartSampler; // First sampler index (or -1 if no textures used) - UINT SamplerSize; // Number of sampler slots possibly used. -} D3D12_SHADER_VARIABLE_DESC; - -typedef struct _D3D12_SHADER_TYPE_DESC -{ - D3D_SHADER_VARIABLE_CLASS Class; // Variable class (e.g. object, matrix, etc.) - D3D_SHADER_VARIABLE_TYPE Type; // Variable type (e.g. float, sampler, etc.) - UINT Rows; // Number of rows (for matrices, 1 for other numeric, 0 if not applicable) - UINT Columns; // Number of columns (for vectors & matrices, 1 for other numeric, 0 if not applicable) - UINT Elements; // Number of elements (0 if not an array) - UINT Members; // Number of members (0 if not a structure) - UINT Offset; // Offset from the start of structure (0 if not a structure member) - LPCSTR Name; // Name of type, can be NULL -} D3D12_SHADER_TYPE_DESC; - -typedef D3D_TESSELLATOR_DOMAIN D3D12_TESSELLATOR_DOMAIN; - -typedef D3D_TESSELLATOR_PARTITIONING D3D12_TESSELLATOR_PARTITIONING; - -typedef D3D_TESSELLATOR_OUTPUT_PRIMITIVE D3D12_TESSELLATOR_OUTPUT_PRIMITIVE; - -typedef struct _D3D12_SHADER_DESC -{ - UINT Version; // Shader version - LPCSTR Creator; // Creator string - UINT Flags; // Shader compilation/parse flags - - UINT ConstantBuffers; // Number of constant buffers - UINT BoundResources; // Number of bound resources - UINT InputParameters; // Number of parameters in the input signature - UINT OutputParameters; // Number of parameters in the output signature - - UINT InstructionCount; // Number of emitted instructions - UINT TempRegisterCount; // Number of temporary registers used - UINT TempArrayCount; // Number of temporary arrays used - UINT DefCount; // Number of constant defines - UINT DclCount; // Number of declarations (input + output) - UINT TextureNormalInstructions; // Number of non-categorized texture instructions - UINT TextureLoadInstructions; // Number of texture load instructions - UINT TextureCompInstructions; // Number of texture comparison instructions - UINT TextureBiasInstructions; // Number of texture bias instructions - UINT TextureGradientInstructions; // Number of texture gradient instructions - UINT FloatInstructionCount; // Number of floating point arithmetic instructions used - UINT IntInstructionCount; // Number of signed integer arithmetic instructions used - UINT UintInstructionCount; // Number of unsigned integer arithmetic instructions used - UINT StaticFlowControlCount; // Number of static flow control instructions used - UINT DynamicFlowControlCount; // Number of dynamic flow control instructions used - UINT MacroInstructionCount; // Number of macro instructions used - UINT ArrayInstructionCount; // Number of array instructions used - UINT CutInstructionCount; // Number of cut instructions used - UINT EmitInstructionCount; // Number of emit instructions used - D3D_PRIMITIVE_TOPOLOGY GSOutputTopology; // Geometry shader output topology - UINT GSMaxOutputVertexCount; // Geometry shader maximum output vertex count - D3D_PRIMITIVE InputPrimitive; // GS/HS input primitive - UINT PatchConstantParameters; // Number of parameters in the patch constant signature - UINT cGSInstanceCount; // Number of Geometry shader instances - UINT cControlPoints; // Number of control points in the HS->DS stage - D3D_TESSELLATOR_OUTPUT_PRIMITIVE HSOutputPrimitive; // Primitive output by the tessellator - D3D_TESSELLATOR_PARTITIONING HSPartitioning; // Partitioning mode of the tessellator - D3D_TESSELLATOR_DOMAIN TessellatorDomain; // Domain of the tessellator (quad, tri, isoline) - // instruction counts - UINT cBarrierInstructions; // Number of barrier instructions in a compute shader - UINT cInterlockedInstructions; // Number of interlocked instructions - UINT cTextureStoreInstructions; // Number of texture writes -} D3D12_SHADER_DESC; - -typedef struct _D3D12_SHADER_INPUT_BIND_DESC -{ - LPCSTR Name; // Name of the resource - D3D_SHADER_INPUT_TYPE Type; // Type of resource (e.g. texture, cbuffer, etc.) - UINT BindPoint; // Starting bind point - UINT BindCount; // Number of contiguous bind points (for arrays) - - UINT uFlags; // Input binding flags - D3D_RESOURCE_RETURN_TYPE ReturnType; // Return type (if texture) - D3D_SRV_DIMENSION Dimension; // Dimension (if texture) - UINT NumSamples; // Number of samples (0 if not MS texture) - UINT Space; // Register space - UINT uID; // Range ID in the bytecode -} D3D12_SHADER_INPUT_BIND_DESC; - -#define D3D_SHADER_REQUIRES_DOUBLES 0x00000001 -#define D3D_SHADER_REQUIRES_EARLY_DEPTH_STENCIL 0x00000002 -#define D3D_SHADER_REQUIRES_UAVS_AT_EVERY_STAGE 0x00000004 -#define D3D_SHADER_REQUIRES_64_UAVS 0x00000008 -#define D3D_SHADER_REQUIRES_MINIMUM_PRECISION 0x00000010 -#define D3D_SHADER_REQUIRES_11_1_DOUBLE_EXTENSIONS 0x00000020 -#define D3D_SHADER_REQUIRES_11_1_SHADER_EXTENSIONS 0x00000040 -#define D3D_SHADER_REQUIRES_LEVEL_9_COMPARISON_FILTERING 0x00000080 -#define D3D_SHADER_REQUIRES_TILED_RESOURCES 0x00000100 -#define D3D_SHADER_REQUIRES_STENCIL_REF 0x00000200 -#define D3D_SHADER_REQUIRES_INNER_COVERAGE 0x00000400 -#define D3D_SHADER_REQUIRES_TYPED_UAV_LOAD_ADDITIONAL_FORMATS 0x00000800 -#define D3D_SHADER_REQUIRES_ROVS 0x00001000 -#define D3D_SHADER_REQUIRES_VIEWPORT_AND_RT_ARRAY_INDEX_FROM_ANY_SHADER_FEEDING_RASTERIZER 0x00002000 -#define D3D_SHADER_REQUIRES_WAVE_OPS 0x00004000 -#define D3D_SHADER_REQUIRES_INT64_OPS 0x00008000 -#define D3D_SHADER_REQUIRES_VIEW_ID 0x00010000 -#define D3D_SHADER_REQUIRES_BARYCENTRICS 0x00020000 -#define D3D_SHADER_REQUIRES_NATIVE_16BIT_OPS 0x00040000 -#define D3D_SHADER_REQUIRES_SHADING_RATE 0x00080000 -#define D3D_SHADER_REQUIRES_RAYTRACING_TIER_1_1 0x00100000 -#define D3D_SHADER_REQUIRES_SAMPLER_FEEDBACK 0x00200000 -#define D3D_SHADER_REQUIRES_ATOMIC_INT64_ON_TYPED_RESOURCE 0x00400000 -#define D3D_SHADER_REQUIRES_ATOMIC_INT64_ON_GROUP_SHARED 0x00800000 -#define D3D_SHADER_REQUIRES_DERIVATIVES_IN_MESH_AND_AMPLIFICATION_SHADERS 0x01000000 -#define D3D_SHADER_REQUIRES_RESOURCE_DESCRIPTOR_HEAP_INDEXING 0x02000000 -#define D3D_SHADER_REQUIRES_SAMPLER_DESCRIPTOR_HEAP_INDEXING 0x04000000 -#define D3D_SHADER_REQUIRES_WAVE_MMA 0x08000000 -#define D3D_SHADER_REQUIRES_ATOMIC_INT64_ON_DESCRIPTOR_HEAP_RESOURCE 0x10000000 -#define D3D_SHADER_REQUIRES_ADVANCED_TEXTURE_OPS 0x20000000 -#define D3D_SHADER_REQUIRES_WRITEABLE_MSAA_TEXTURES 0x40000000 -#define D3D_SHADER_REQUIRES_SAMPLE_CMP_GRADIENT_OR_BIAS 0x80000000 -#define D3D_SHADER_REQUIRES_EXTENDED_COMMAND_INFO 0x100000000ull - -typedef struct _D3D12_LIBRARY_DESC -{ - LPCSTR Creator; // The name of the originator of the library. - UINT Flags; // Compilation flags. - UINT FunctionCount; // Number of functions exported from the library. -} D3D12_LIBRARY_DESC; - -typedef struct _D3D12_FUNCTION_DESC -{ - UINT Version; // Shader version - LPCSTR Creator; // Creator string - UINT Flags; // Shader compilation/parse flags - - UINT ConstantBuffers; // Number of constant buffers - UINT BoundResources; // Number of bound resources - - UINT InstructionCount; // Number of emitted instructions - UINT TempRegisterCount; // Number of temporary registers used - UINT TempArrayCount; // Number of temporary arrays used - UINT DefCount; // Number of constant defines - UINT DclCount; // Number of declarations (input + output) - UINT TextureNormalInstructions; // Number of non-categorized texture instructions - UINT TextureLoadInstructions; // Number of texture load instructions - UINT TextureCompInstructions; // Number of texture comparison instructions - UINT TextureBiasInstructions; // Number of texture bias instructions - UINT TextureGradientInstructions; // Number of texture gradient instructions - UINT FloatInstructionCount; // Number of floating point arithmetic instructions used - UINT IntInstructionCount; // Number of signed integer arithmetic instructions used - UINT UintInstructionCount; // Number of unsigned integer arithmetic instructions used - UINT StaticFlowControlCount; // Number of static flow control instructions used - UINT DynamicFlowControlCount; // Number of dynamic flow control instructions used - UINT MacroInstructionCount; // Number of macro instructions used - UINT ArrayInstructionCount; // Number of array instructions used - UINT MovInstructionCount; // Number of mov instructions used - UINT MovcInstructionCount; // Number of movc instructions used - UINT ConversionInstructionCount; // Number of type conversion instructions used - UINT BitwiseInstructionCount; // Number of bitwise arithmetic instructions used - D3D_FEATURE_LEVEL MinFeatureLevel; // Min target of the function byte code - UINT64 RequiredFeatureFlags; // Required feature flags - - LPCSTR Name; // Function name - INT FunctionParameterCount; // Number of logical parameters in the function signature (not including return) - BOOL HasReturn; // TRUE, if function returns a value, false - it is a subroutine - BOOL Has10Level9VertexShader; // TRUE, if there is a 10L9 VS blob - BOOL Has10Level9PixelShader; // TRUE, if there is a 10L9 PS blob -} D3D12_FUNCTION_DESC; - -typedef struct _D3D12_PARAMETER_DESC -{ - LPCSTR Name; // Parameter name. - LPCSTR SemanticName; // Parameter semantic name (+index). - D3D_SHADER_VARIABLE_TYPE Type; // Element type. - D3D_SHADER_VARIABLE_CLASS Class; // Scalar/Vector/Matrix. - UINT Rows; // Rows are for matrix parameters. - UINT Columns; // Components or Columns in matrix. - D3D_INTERPOLATION_MODE InterpolationMode; // Interpolation mode. - D3D_PARAMETER_FLAGS Flags; // Parameter modifiers. - - UINT FirstInRegister; // The first input register for this parameter. - UINT FirstInComponent; // The first input register component for this parameter. - UINT FirstOutRegister; // The first output register for this parameter. - UINT FirstOutComponent; // The first output register component for this parameter. -} D3D12_PARAMETER_DESC; - -////////////////////////////////////////////////////////////////////////////// -// Interfaces //////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -typedef interface ID3D12ShaderReflectionType ID3D12ShaderReflectionType; -typedef interface ID3D12ShaderReflectionType *LPD3D12SHADERREFLECTIONTYPE; - -typedef interface ID3D12ShaderReflectionVariable ID3D12ShaderReflectionVariable; -typedef interface ID3D12ShaderReflectionVariable *LPD3D12SHADERREFLECTIONVARIABLE; - -typedef interface ID3D12ShaderReflectionConstantBuffer ID3D12ShaderReflectionConstantBuffer; -typedef interface ID3D12ShaderReflectionConstantBuffer *LPD3D12SHADERREFLECTIONCONSTANTBUFFER; - -typedef interface ID3D12ShaderReflection ID3D12ShaderReflection; -typedef interface ID3D12ShaderReflection *LPD3D12SHADERREFLECTION; - -typedef interface ID3D12LibraryReflection ID3D12LibraryReflection; -typedef interface ID3D12LibraryReflection *LPD3D12LIBRARYREFLECTION; - -typedef interface ID3D12FunctionReflection ID3D12FunctionReflection; -typedef interface ID3D12FunctionReflection *LPD3D12FUNCTIONREFLECTION; - -typedef interface ID3D12FunctionParameterReflection ID3D12FunctionParameterReflection; -typedef interface ID3D12FunctionParameterReflection *LPD3D12FUNCTIONPARAMETERREFLECTION; - -// {E913C351-783D-48CA-A1D1-4F306284AD56} -interface DECLSPEC_UUID("E913C351-783D-48CA-A1D1-4F306284AD56") ID3D12ShaderReflectionType; -DEFINE_GUID(IID_ID3D12ShaderReflectionType, -0xe913c351, 0x783d, 0x48ca, 0xa1, 0xd1, 0x4f, 0x30, 0x62, 0x84, 0xad, 0x56); - -#undef INTERFACE -#define INTERFACE ID3D12ShaderReflectionType - -DECLARE_INTERFACE(ID3D12ShaderReflectionType) -{ - STDMETHOD(GetDesc)(THIS_ _Out_ D3D12_SHADER_TYPE_DESC *pDesc) PURE; - - STDMETHOD_(ID3D12ShaderReflectionType*, GetMemberTypeByIndex)(THIS_ _In_ UINT Index) PURE; - STDMETHOD_(ID3D12ShaderReflectionType*, GetMemberTypeByName)(THIS_ _In_ LPCSTR Name) PURE; - STDMETHOD_(LPCSTR, GetMemberTypeName)(THIS_ _In_ UINT Index) PURE; - - STDMETHOD(IsEqual)(THIS_ _In_ ID3D12ShaderReflectionType* pType) PURE; - STDMETHOD_(ID3D12ShaderReflectionType*, GetSubType)(THIS) PURE; - STDMETHOD_(ID3D12ShaderReflectionType*, GetBaseClass)(THIS) PURE; - STDMETHOD_(UINT, GetNumInterfaces)(THIS) PURE; - STDMETHOD_(ID3D12ShaderReflectionType*, GetInterfaceByIndex)(THIS_ _In_ UINT uIndex) PURE; - STDMETHOD(IsOfType)(THIS_ _In_ ID3D12ShaderReflectionType* pType) PURE; - STDMETHOD(ImplementsInterface)(THIS_ _In_ ID3D12ShaderReflectionType* pBase) PURE; -}; - -// {8337A8A6-A216-444A-B2F4-314733A73AEA} -interface DECLSPEC_UUID("8337A8A6-A216-444A-B2F4-314733A73AEA") ID3D12ShaderReflectionVariable; -DEFINE_GUID(IID_ID3D12ShaderReflectionVariable, -0x8337a8a6, 0xa216, 0x444a, 0xb2, 0xf4, 0x31, 0x47, 0x33, 0xa7, 0x3a, 0xea); - -#undef INTERFACE -#define INTERFACE ID3D12ShaderReflectionVariable - -DECLARE_INTERFACE(ID3D12ShaderReflectionVariable) -{ - STDMETHOD(GetDesc)(THIS_ _Out_ D3D12_SHADER_VARIABLE_DESC *pDesc) PURE; - - STDMETHOD_(ID3D12ShaderReflectionType*, GetType)(THIS) PURE; - STDMETHOD_(ID3D12ShaderReflectionConstantBuffer*, GetBuffer)(THIS) PURE; - - STDMETHOD_(UINT, GetInterfaceSlot)(THIS_ _In_ UINT uArrayIndex) PURE; -}; - -// {C59598B4-48B3-4869-B9B1-B1618B14A8B7} -interface DECLSPEC_UUID("C59598B4-48B3-4869-B9B1-B1618B14A8B7") ID3D12ShaderReflectionConstantBuffer; -DEFINE_GUID(IID_ID3D12ShaderReflectionConstantBuffer, -0xc59598b4, 0x48b3, 0x4869, 0xb9, 0xb1, 0xb1, 0x61, 0x8b, 0x14, 0xa8, 0xb7); - -#undef INTERFACE -#define INTERFACE ID3D12ShaderReflectionConstantBuffer - -DECLARE_INTERFACE(ID3D12ShaderReflectionConstantBuffer) -{ - STDMETHOD(GetDesc)(THIS_ D3D12_SHADER_BUFFER_DESC *pDesc) PURE; - - STDMETHOD_(ID3D12ShaderReflectionVariable*, GetVariableByIndex)(THIS_ _In_ UINT Index) PURE; - STDMETHOD_(ID3D12ShaderReflectionVariable*, GetVariableByName)(THIS_ _In_ LPCSTR Name) PURE; -}; - -// The ID3D12ShaderReflection IID may change from SDK version to SDK version -// if the reflection API changes. This prevents new code with the new API -// from working with an old binary. Recompiling with the new header -// will pick up the new IID. - -// {5A58797D-A72C-478D-8BA2-EFC6B0EFE88E} -interface DECLSPEC_UUID("5A58797D-A72C-478D-8BA2-EFC6B0EFE88E") ID3D12ShaderReflection; -DEFINE_GUID(IID_ID3D12ShaderReflection, -0x5a58797d, 0xa72c, 0x478d, 0x8b, 0xa2, 0xef, 0xc6, 0xb0, 0xef, 0xe8, 0x8e); - -#undef INTERFACE -#define INTERFACE ID3D12ShaderReflection - -DECLARE_INTERFACE_(ID3D12ShaderReflection, IUnknown) -{ - STDMETHOD(QueryInterface)(THIS_ _In_ REFIID iid, - _Out_ LPVOID *ppv) PURE; - STDMETHOD_(ULONG, AddRef)(THIS) PURE; - STDMETHOD_(ULONG, Release)(THIS) PURE; - - STDMETHOD(GetDesc)(THIS_ _Out_ D3D12_SHADER_DESC *pDesc) PURE; - - STDMETHOD_(ID3D12ShaderReflectionConstantBuffer*, GetConstantBufferByIndex)(THIS_ _In_ UINT Index) PURE; - STDMETHOD_(ID3D12ShaderReflectionConstantBuffer*, GetConstantBufferByName)(THIS_ _In_ LPCSTR Name) PURE; - - STDMETHOD(GetResourceBindingDesc)(THIS_ _In_ UINT ResourceIndex, - _Out_ D3D12_SHADER_INPUT_BIND_DESC *pDesc) PURE; - - STDMETHOD(GetInputParameterDesc)(THIS_ _In_ UINT ParameterIndex, - _Out_ D3D12_SIGNATURE_PARAMETER_DESC *pDesc) PURE; - STDMETHOD(GetOutputParameterDesc)(THIS_ _In_ UINT ParameterIndex, - _Out_ D3D12_SIGNATURE_PARAMETER_DESC *pDesc) PURE; - STDMETHOD(GetPatchConstantParameterDesc)(THIS_ _In_ UINT ParameterIndex, - _Out_ D3D12_SIGNATURE_PARAMETER_DESC *pDesc) PURE; - - STDMETHOD_(ID3D12ShaderReflectionVariable*, GetVariableByName)(THIS_ _In_ LPCSTR Name) PURE; - - STDMETHOD(GetResourceBindingDescByName)(THIS_ _In_ LPCSTR Name, - _Out_ D3D12_SHADER_INPUT_BIND_DESC *pDesc) PURE; - - STDMETHOD_(UINT, GetMovInstructionCount)(THIS) PURE; - STDMETHOD_(UINT, GetMovcInstructionCount)(THIS) PURE; - STDMETHOD_(UINT, GetConversionInstructionCount)(THIS) PURE; - STDMETHOD_(UINT, GetBitwiseInstructionCount)(THIS) PURE; - - STDMETHOD_(D3D_PRIMITIVE, GetGSInputPrimitive)(THIS) PURE; - STDMETHOD_(BOOL, IsSampleFrequencyShader)(THIS) PURE; - - STDMETHOD_(UINT, GetNumInterfaceSlots)(THIS) PURE; - STDMETHOD(GetMinFeatureLevel)(THIS_ _Out_ enum D3D_FEATURE_LEVEL* pLevel) PURE; - - STDMETHOD_(UINT, GetThreadGroupSize)(THIS_ - _Out_opt_ UINT* pSizeX, - _Out_opt_ UINT* pSizeY, - _Out_opt_ UINT* pSizeZ) PURE; - - STDMETHOD_(UINT64, GetRequiresFlags)(THIS) PURE; -}; - -// {8E349D19-54DB-4A56-9DC9-119D87BDB804} -interface DECLSPEC_UUID("8E349D19-54DB-4A56-9DC9-119D87BDB804") ID3D12LibraryReflection; -DEFINE_GUID(IID_ID3D12LibraryReflection, -0x8e349d19, 0x54db, 0x4a56, 0x9d, 0xc9, 0x11, 0x9d, 0x87, 0xbd, 0xb8, 0x4); - -#undef INTERFACE -#define INTERFACE ID3D12LibraryReflection - -DECLARE_INTERFACE_(ID3D12LibraryReflection, IUnknown) -{ - STDMETHOD(QueryInterface)(THIS_ _In_ REFIID iid, _Out_ LPVOID * ppv) PURE; - STDMETHOD_(ULONG, AddRef)(THIS) PURE; - STDMETHOD_(ULONG, Release)(THIS) PURE; - - STDMETHOD(GetDesc)(THIS_ _Out_ D3D12_LIBRARY_DESC * pDesc) PURE; - - STDMETHOD_(ID3D12FunctionReflection *, GetFunctionByIndex)(THIS_ _In_ INT FunctionIndex) PURE; -}; - -// {1108795C-2772-4BA9-B2A8-D464DC7E2799} -interface DECLSPEC_UUID("1108795C-2772-4BA9-B2A8-D464DC7E2799") ID3D12FunctionReflection; -DEFINE_GUID(IID_ID3D12FunctionReflection, -0x1108795c, 0x2772, 0x4ba9, 0xb2, 0xa8, 0xd4, 0x64, 0xdc, 0x7e, 0x27, 0x99); - -#undef INTERFACE -#define INTERFACE ID3D12FunctionReflection - -DECLARE_INTERFACE(ID3D12FunctionReflection) -{ - STDMETHOD(GetDesc)(THIS_ _Out_ D3D12_FUNCTION_DESC * pDesc) PURE; - - STDMETHOD_(ID3D12ShaderReflectionConstantBuffer *, GetConstantBufferByIndex)(THIS_ _In_ UINT BufferIndex) PURE; - STDMETHOD_(ID3D12ShaderReflectionConstantBuffer *, GetConstantBufferByName)(THIS_ _In_ LPCSTR Name) PURE; - - STDMETHOD(GetResourceBindingDesc)(THIS_ _In_ UINT ResourceIndex, - _Out_ D3D12_SHADER_INPUT_BIND_DESC * pDesc) PURE; - - STDMETHOD_(ID3D12ShaderReflectionVariable *, GetVariableByName)(THIS_ _In_ LPCSTR Name) PURE; - - STDMETHOD(GetResourceBindingDescByName)(THIS_ _In_ LPCSTR Name, - _Out_ D3D12_SHADER_INPUT_BIND_DESC * pDesc) PURE; - - // Use D3D_RETURN_PARAMETER_INDEX to get description of the return value. - STDMETHOD_(ID3D12FunctionParameterReflection *, GetFunctionParameter)(THIS_ _In_ INT ParameterIndex) PURE; -}; - -// {EC25F42D-7006-4F2B-B33E-02CC3375733F} -interface DECLSPEC_UUID("EC25F42D-7006-4F2B-B33E-02CC3375733F") ID3D12FunctionParameterReflection; -DEFINE_GUID(IID_ID3D12FunctionParameterReflection, -0xec25f42d, 0x7006, 0x4f2b, 0xb3, 0x3e, 0x2, 0xcc, 0x33, 0x75, 0x73, 0x3f); - -#undef INTERFACE -#define INTERFACE ID3D12FunctionParameterReflection - -DECLARE_INTERFACE(ID3D12FunctionParameterReflection) -{ - STDMETHOD(GetDesc)(THIS_ _Out_ D3D12_PARAMETER_DESC * pDesc) PURE; -}; - -////////////////////////////////////////////////////////////////////////////// -// APIs ////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -#ifdef __cplusplus -extern "C" { -#endif //__cplusplus - -#ifdef __cplusplus -} -#endif //__cplusplus - -#endif //__D3D12SHADER_H__ - diff --git a/Juliet/src/Graphics/D3D12/AgilitySDK/d3d12video.h b/Juliet/src/Graphics/D3D12/AgilitySDK/d3d12video.h deleted file mode 100644 index 78b5aeb..0000000 --- a/Juliet/src/Graphics/D3D12/AgilitySDK/d3d12video.h +++ /dev/null @@ -1,8954 +0,0 @@ -/*------------------------------------------------------------------------------------- - * - * Copyright (c) Microsoft Corporation - * Licensed under the MIT license - * - *-------------------------------------------------------------------------------------*/ - -/* this ALWAYS GENERATED file contains the definitions for the interfaces */ - - /* File created by MIDL compiler version 8.01.0628 */ - -/* verify that the version is high enough to compile this file*/ -#ifndef __REQUIRED_RPCNDR_H_VERSION__ -#define __REQUIRED_RPCNDR_H_VERSION__ 500 -#endif - -/* verify that the version is high enough to compile this file*/ -#ifndef __REQUIRED_RPCSAL_H_VERSION__ -#define __REQUIRED_RPCSAL_H_VERSION__ 100 -#endif - -#include "rpc.h" -#include "rpcndr.h" - -#ifndef __RPCNDR_H_VERSION__ -#error this stub requires an updated version of -#endif /* __RPCNDR_H_VERSION__ */ - -#ifndef COM_NO_WINDOWS_H -#include "windows.h" -#include "ole2.h" -#endif /*COM_NO_WINDOWS_H*/ - -#ifndef __d3d12video_h__ -#define __d3d12video_h__ - -#if defined(_MSC_VER) && (_MSC_VER >= 1020) -#pragma once -#endif - -#ifndef DECLSPEC_XFGVIRT -#if defined(_CONTROL_FLOW_GUARD_XFG) -#define DECLSPEC_XFGVIRT(base, func) __declspec(xfg_virtual(base, func)) -#else -#define DECLSPEC_XFGVIRT(base, func) -#endif -#endif - -/* Forward Declarations */ - -#ifndef __ID3D12VideoDecoderHeap_FWD_DEFINED__ -#define __ID3D12VideoDecoderHeap_FWD_DEFINED__ -typedef interface ID3D12VideoDecoderHeap ID3D12VideoDecoderHeap; - -#endif /* __ID3D12VideoDecoderHeap_FWD_DEFINED__ */ - -#ifndef __ID3D12VideoDevice_FWD_DEFINED__ -#define __ID3D12VideoDevice_FWD_DEFINED__ -typedef interface ID3D12VideoDevice ID3D12VideoDevice; - -#endif /* __ID3D12VideoDevice_FWD_DEFINED__ */ - -#ifndef __ID3D12VideoDecoder_FWD_DEFINED__ -#define __ID3D12VideoDecoder_FWD_DEFINED__ -typedef interface ID3D12VideoDecoder ID3D12VideoDecoder; - -#endif /* __ID3D12VideoDecoder_FWD_DEFINED__ */ - -#ifndef __ID3D12VideoProcessor_FWD_DEFINED__ -#define __ID3D12VideoProcessor_FWD_DEFINED__ -typedef interface ID3D12VideoProcessor ID3D12VideoProcessor; - -#endif /* __ID3D12VideoProcessor_FWD_DEFINED__ */ - -#ifndef __ID3D12VideoDecodeCommandList_FWD_DEFINED__ -#define __ID3D12VideoDecodeCommandList_FWD_DEFINED__ -typedef interface ID3D12VideoDecodeCommandList ID3D12VideoDecodeCommandList; - -#endif /* __ID3D12VideoDecodeCommandList_FWD_DEFINED__ */ - -#ifndef __ID3D12VideoProcessCommandList_FWD_DEFINED__ -#define __ID3D12VideoProcessCommandList_FWD_DEFINED__ -typedef interface ID3D12VideoProcessCommandList ID3D12VideoProcessCommandList; - -#endif /* __ID3D12VideoProcessCommandList_FWD_DEFINED__ */ - -#ifndef __ID3D12VideoDecodeCommandList1_FWD_DEFINED__ -#define __ID3D12VideoDecodeCommandList1_FWD_DEFINED__ -typedef interface ID3D12VideoDecodeCommandList1 ID3D12VideoDecodeCommandList1; - -#endif /* __ID3D12VideoDecodeCommandList1_FWD_DEFINED__ */ - -#ifndef __ID3D12VideoProcessCommandList1_FWD_DEFINED__ -#define __ID3D12VideoProcessCommandList1_FWD_DEFINED__ -typedef interface ID3D12VideoProcessCommandList1 ID3D12VideoProcessCommandList1; - -#endif /* __ID3D12VideoProcessCommandList1_FWD_DEFINED__ */ - -#ifndef __ID3D12VideoMotionEstimator_FWD_DEFINED__ -#define __ID3D12VideoMotionEstimator_FWD_DEFINED__ -typedef interface ID3D12VideoMotionEstimator ID3D12VideoMotionEstimator; - -#endif /* __ID3D12VideoMotionEstimator_FWD_DEFINED__ */ - -#ifndef __ID3D12VideoMotionVectorHeap_FWD_DEFINED__ -#define __ID3D12VideoMotionVectorHeap_FWD_DEFINED__ -typedef interface ID3D12VideoMotionVectorHeap ID3D12VideoMotionVectorHeap; - -#endif /* __ID3D12VideoMotionVectorHeap_FWD_DEFINED__ */ - -#ifndef __ID3D12VideoDevice1_FWD_DEFINED__ -#define __ID3D12VideoDevice1_FWD_DEFINED__ -typedef interface ID3D12VideoDevice1 ID3D12VideoDevice1; - -#endif /* __ID3D12VideoDevice1_FWD_DEFINED__ */ - -#ifndef __ID3D12VideoEncodeCommandList_FWD_DEFINED__ -#define __ID3D12VideoEncodeCommandList_FWD_DEFINED__ -typedef interface ID3D12VideoEncodeCommandList ID3D12VideoEncodeCommandList; - -#endif /* __ID3D12VideoEncodeCommandList_FWD_DEFINED__ */ - -#ifndef __ID3D12VideoDecoder1_FWD_DEFINED__ -#define __ID3D12VideoDecoder1_FWD_DEFINED__ -typedef interface ID3D12VideoDecoder1 ID3D12VideoDecoder1; - -#endif /* __ID3D12VideoDecoder1_FWD_DEFINED__ */ - -#ifndef __ID3D12VideoDecoderHeap1_FWD_DEFINED__ -#define __ID3D12VideoDecoderHeap1_FWD_DEFINED__ -typedef interface ID3D12VideoDecoderHeap1 ID3D12VideoDecoderHeap1; - -#endif /* __ID3D12VideoDecoderHeap1_FWD_DEFINED__ */ - -#ifndef __ID3D12VideoProcessor1_FWD_DEFINED__ -#define __ID3D12VideoProcessor1_FWD_DEFINED__ -typedef interface ID3D12VideoProcessor1 ID3D12VideoProcessor1; - -#endif /* __ID3D12VideoProcessor1_FWD_DEFINED__ */ - -#ifndef __ID3D12VideoExtensionCommand_FWD_DEFINED__ -#define __ID3D12VideoExtensionCommand_FWD_DEFINED__ -typedef interface ID3D12VideoExtensionCommand ID3D12VideoExtensionCommand; - -#endif /* __ID3D12VideoExtensionCommand_FWD_DEFINED__ */ - -#ifndef __ID3D12VideoDevice2_FWD_DEFINED__ -#define __ID3D12VideoDevice2_FWD_DEFINED__ -typedef interface ID3D12VideoDevice2 ID3D12VideoDevice2; - -#endif /* __ID3D12VideoDevice2_FWD_DEFINED__ */ - -#ifndef __ID3D12VideoDecodeCommandList2_FWD_DEFINED__ -#define __ID3D12VideoDecodeCommandList2_FWD_DEFINED__ -typedef interface ID3D12VideoDecodeCommandList2 ID3D12VideoDecodeCommandList2; - -#endif /* __ID3D12VideoDecodeCommandList2_FWD_DEFINED__ */ - -#ifndef __ID3D12VideoDecodeCommandList3_FWD_DEFINED__ -#define __ID3D12VideoDecodeCommandList3_FWD_DEFINED__ -typedef interface ID3D12VideoDecodeCommandList3 ID3D12VideoDecodeCommandList3; - -#endif /* __ID3D12VideoDecodeCommandList3_FWD_DEFINED__ */ - -#ifndef __ID3D12VideoProcessCommandList2_FWD_DEFINED__ -#define __ID3D12VideoProcessCommandList2_FWD_DEFINED__ -typedef interface ID3D12VideoProcessCommandList2 ID3D12VideoProcessCommandList2; - -#endif /* __ID3D12VideoProcessCommandList2_FWD_DEFINED__ */ - -#ifndef __ID3D12VideoProcessCommandList3_FWD_DEFINED__ -#define __ID3D12VideoProcessCommandList3_FWD_DEFINED__ -typedef interface ID3D12VideoProcessCommandList3 ID3D12VideoProcessCommandList3; - -#endif /* __ID3D12VideoProcessCommandList3_FWD_DEFINED__ */ - -#ifndef __ID3D12VideoEncodeCommandList1_FWD_DEFINED__ -#define __ID3D12VideoEncodeCommandList1_FWD_DEFINED__ -typedef interface ID3D12VideoEncodeCommandList1 ID3D12VideoEncodeCommandList1; - -#endif /* __ID3D12VideoEncodeCommandList1_FWD_DEFINED__ */ - -#ifndef __ID3D12VideoEncoder_FWD_DEFINED__ -#define __ID3D12VideoEncoder_FWD_DEFINED__ -typedef interface ID3D12VideoEncoder ID3D12VideoEncoder; - -#endif /* __ID3D12VideoEncoder_FWD_DEFINED__ */ - -#ifndef __ID3D12VideoEncoderHeap_FWD_DEFINED__ -#define __ID3D12VideoEncoderHeap_FWD_DEFINED__ -typedef interface ID3D12VideoEncoderHeap ID3D12VideoEncoderHeap; - -#endif /* __ID3D12VideoEncoderHeap_FWD_DEFINED__ */ - -#ifndef __ID3D12VideoDevice3_FWD_DEFINED__ -#define __ID3D12VideoDevice3_FWD_DEFINED__ -typedef interface ID3D12VideoDevice3 ID3D12VideoDevice3; - -#endif /* __ID3D12VideoDevice3_FWD_DEFINED__ */ - -#ifndef __ID3D12VideoEncodeCommandList2_FWD_DEFINED__ -#define __ID3D12VideoEncodeCommandList2_FWD_DEFINED__ -typedef interface ID3D12VideoEncodeCommandList2 ID3D12VideoEncodeCommandList2; - -#endif /* __ID3D12VideoEncodeCommandList2_FWD_DEFINED__ */ - -#ifndef __ID3D12VideoEncodeCommandList3_FWD_DEFINED__ -#define __ID3D12VideoEncodeCommandList3_FWD_DEFINED__ -typedef interface ID3D12VideoEncodeCommandList3 ID3D12VideoEncodeCommandList3; - -#endif /* __ID3D12VideoEncodeCommandList3_FWD_DEFINED__ */ - -/* header files for imported files */ -#include "oaidl.h" -#include "ocidl.h" -#include "dxgicommon.h" -#include "d3d12.h" - -#ifdef __cplusplus -extern "C"{ -#endif - -/* interface __MIDL_itf_d3d12video_0000_0000 */ -/* [local] */ - -#include -#pragma region App Family -#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) -typedef -enum D3D12_VIDEO_FIELD_TYPE - { - D3D12_VIDEO_FIELD_TYPE_NONE = 0, - D3D12_VIDEO_FIELD_TYPE_INTERLACED_TOP_FIELD_FIRST = 1, - D3D12_VIDEO_FIELD_TYPE_INTERLACED_BOTTOM_FIELD_FIRST = 2 - } D3D12_VIDEO_FIELD_TYPE; - -typedef -enum D3D12_VIDEO_FRAME_STEREO_FORMAT - { - D3D12_VIDEO_FRAME_STEREO_FORMAT_NONE = 0, - D3D12_VIDEO_FRAME_STEREO_FORMAT_MONO = 1, - D3D12_VIDEO_FRAME_STEREO_FORMAT_HORIZONTAL = 2, - D3D12_VIDEO_FRAME_STEREO_FORMAT_VERTICAL = 3, - D3D12_VIDEO_FRAME_STEREO_FORMAT_SEPARATE = 4 - } D3D12_VIDEO_FRAME_STEREO_FORMAT; - -typedef struct D3D12_VIDEO_FORMAT - { - DXGI_FORMAT Format; - DXGI_COLOR_SPACE_TYPE ColorSpace; - } D3D12_VIDEO_FORMAT; - -typedef struct D3D12_VIDEO_SAMPLE - { - UINT Width; - UINT Height; - D3D12_VIDEO_FORMAT Format; - } D3D12_VIDEO_SAMPLE; - -typedef -enum D3D12_VIDEO_FRAME_CODED_INTERLACE_TYPE - { - D3D12_VIDEO_FRAME_CODED_INTERLACE_TYPE_NONE = 0, - D3D12_VIDEO_FRAME_CODED_INTERLACE_TYPE_FIELD_BASED = 1 - } D3D12_VIDEO_FRAME_CODED_INTERLACE_TYPE; - -typedef -enum D3D12_FEATURE_VIDEO - { - D3D12_FEATURE_VIDEO_DECODE_SUPPORT = 0, - D3D12_FEATURE_VIDEO_DECODE_PROFILES = 1, - D3D12_FEATURE_VIDEO_DECODE_FORMATS = 2, - D3D12_FEATURE_VIDEO_DECODE_CONVERSION_SUPPORT = 3, - D3D12_FEATURE_VIDEO_PROCESS_SUPPORT = 5, - D3D12_FEATURE_VIDEO_PROCESS_MAX_INPUT_STREAMS = 6, - D3D12_FEATURE_VIDEO_PROCESS_REFERENCE_INFO = 7, - D3D12_FEATURE_VIDEO_DECODER_HEAP_SIZE = 8, - D3D12_FEATURE_VIDEO_PROCESSOR_SIZE = 9, - D3D12_FEATURE_VIDEO_DECODE_PROFILE_COUNT = 10, - D3D12_FEATURE_VIDEO_DECODE_FORMAT_COUNT = 11, - D3D12_FEATURE_VIDEO_ARCHITECTURE = 17, - D3D12_FEATURE_VIDEO_DECODE_HISTOGRAM = 18, - D3D12_FEATURE_VIDEO_FEATURE_AREA_SUPPORT = 19, - D3D12_FEATURE_VIDEO_MOTION_ESTIMATOR = 20, - D3D12_FEATURE_VIDEO_MOTION_ESTIMATOR_SIZE = 21, - D3D12_FEATURE_VIDEO_EXTENSION_COMMAND_COUNT = 22, - D3D12_FEATURE_VIDEO_EXTENSION_COMMANDS = 23, - D3D12_FEATURE_VIDEO_EXTENSION_COMMAND_PARAMETER_COUNT = 24, - D3D12_FEATURE_VIDEO_EXTENSION_COMMAND_PARAMETERS = 25, - D3D12_FEATURE_VIDEO_EXTENSION_COMMAND_SUPPORT = 26, - D3D12_FEATURE_VIDEO_EXTENSION_COMMAND_SIZE = 27, - D3D12_FEATURE_VIDEO_DECODE_PROTECTED_RESOURCES = 28, - D3D12_FEATURE_VIDEO_PROCESS_PROTECTED_RESOURCES = 29, - D3D12_FEATURE_VIDEO_MOTION_ESTIMATOR_PROTECTED_RESOURCES = 30, - D3D12_FEATURE_VIDEO_DECODER_HEAP_SIZE1 = 31, - D3D12_FEATURE_VIDEO_PROCESSOR_SIZE1 = 32, - D3D12_FEATURE_VIDEO_ENCODER_CODEC = 33, - D3D12_FEATURE_VIDEO_ENCODER_PROFILE_LEVEL = 34, - D3D12_FEATURE_VIDEO_ENCODER_OUTPUT_RESOLUTION_RATIOS_COUNT = 35, - D3D12_FEATURE_VIDEO_ENCODER_OUTPUT_RESOLUTION = 36, - D3D12_FEATURE_VIDEO_ENCODER_INPUT_FORMAT = 37, - D3D12_FEATURE_VIDEO_ENCODER_RATE_CONTROL_MODE = 38, - D3D12_FEATURE_VIDEO_ENCODER_INTRA_REFRESH_MODE = 39, - D3D12_FEATURE_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE = 40, - D3D12_FEATURE_VIDEO_ENCODER_HEAP_SIZE = 41, - D3D12_FEATURE_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT = 42, - D3D12_FEATURE_VIDEO_ENCODER_SUPPORT = 43, - D3D12_FEATURE_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT = 44, - D3D12_FEATURE_VIDEO_ENCODER_RESOURCE_REQUIREMENTS = 45, - D3D12_FEATURE_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_CONFIG = 46, - D3D12_FEATURE_VIDEO_ENCODER_SUPPORT1 = 47 - } D3D12_FEATURE_VIDEO; - -typedef -enum D3D12_BITSTREAM_ENCRYPTION_TYPE - { - D3D12_BITSTREAM_ENCRYPTION_TYPE_NONE = 0 - } D3D12_BITSTREAM_ENCRYPTION_TYPE; - -typedef struct D3D12_VIDEO_DECODE_CONFIGURATION - { - GUID DecodeProfile; - D3D12_BITSTREAM_ENCRYPTION_TYPE BitstreamEncryption; - D3D12_VIDEO_FRAME_CODED_INTERLACE_TYPE InterlaceType; - } D3D12_VIDEO_DECODE_CONFIGURATION; - -typedef struct D3D12_VIDEO_DECODER_DESC - { - UINT NodeMask; - D3D12_VIDEO_DECODE_CONFIGURATION Configuration; - } D3D12_VIDEO_DECODER_DESC; - -typedef struct D3D12_VIDEO_DECODER_HEAP_DESC - { - UINT NodeMask; - D3D12_VIDEO_DECODE_CONFIGURATION Configuration; - UINT DecodeWidth; - UINT DecodeHeight; - DXGI_FORMAT Format; - DXGI_RATIONAL FrameRate; - UINT BitRate; - UINT MaxDecodePictureBufferCount; - } D3D12_VIDEO_DECODER_HEAP_DESC; - -typedef struct D3D12_VIDEO_SIZE_RANGE - { - UINT MaxWidth; - UINT MaxHeight; - UINT MinWidth; - UINT MinHeight; - } D3D12_VIDEO_SIZE_RANGE; - -typedef -enum D3D12_VIDEO_PROCESS_FILTER - { - D3D12_VIDEO_PROCESS_FILTER_BRIGHTNESS = 0, - D3D12_VIDEO_PROCESS_FILTER_CONTRAST = 1, - D3D12_VIDEO_PROCESS_FILTER_HUE = 2, - D3D12_VIDEO_PROCESS_FILTER_SATURATION = 3, - D3D12_VIDEO_PROCESS_FILTER_NOISE_REDUCTION = 4, - D3D12_VIDEO_PROCESS_FILTER_EDGE_ENHANCEMENT = 5, - D3D12_VIDEO_PROCESS_FILTER_ANAMORPHIC_SCALING = 6, - D3D12_VIDEO_PROCESS_FILTER_STEREO_ADJUSTMENT = 7 - } D3D12_VIDEO_PROCESS_FILTER; - -typedef -enum D3D12_VIDEO_PROCESS_FILTER_FLAGS - { - D3D12_VIDEO_PROCESS_FILTER_FLAG_NONE = 0, - D3D12_VIDEO_PROCESS_FILTER_FLAG_BRIGHTNESS = ( 1 << D3D12_VIDEO_PROCESS_FILTER_BRIGHTNESS ) , - D3D12_VIDEO_PROCESS_FILTER_FLAG_CONTRAST = ( 1 << D3D12_VIDEO_PROCESS_FILTER_CONTRAST ) , - D3D12_VIDEO_PROCESS_FILTER_FLAG_HUE = ( 1 << D3D12_VIDEO_PROCESS_FILTER_HUE ) , - D3D12_VIDEO_PROCESS_FILTER_FLAG_SATURATION = ( 1 << D3D12_VIDEO_PROCESS_FILTER_SATURATION ) , - D3D12_VIDEO_PROCESS_FILTER_FLAG_NOISE_REDUCTION = ( 1 << D3D12_VIDEO_PROCESS_FILTER_NOISE_REDUCTION ) , - D3D12_VIDEO_PROCESS_FILTER_FLAG_EDGE_ENHANCEMENT = ( 1 << D3D12_VIDEO_PROCESS_FILTER_EDGE_ENHANCEMENT ) , - D3D12_VIDEO_PROCESS_FILTER_FLAG_ANAMORPHIC_SCALING = ( 1 << D3D12_VIDEO_PROCESS_FILTER_ANAMORPHIC_SCALING ) , - D3D12_VIDEO_PROCESS_FILTER_FLAG_STEREO_ADJUSTMENT = ( 1 << D3D12_VIDEO_PROCESS_FILTER_STEREO_ADJUSTMENT ) - } D3D12_VIDEO_PROCESS_FILTER_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROCESS_FILTER_FLAGS ) -typedef -enum D3D12_VIDEO_PROCESS_DEINTERLACE_FLAGS - { - D3D12_VIDEO_PROCESS_DEINTERLACE_FLAG_NONE = 0, - D3D12_VIDEO_PROCESS_DEINTERLACE_FLAG_BOB = 0x1, - D3D12_VIDEO_PROCESS_DEINTERLACE_FLAG_CUSTOM = 0x80000000 - } D3D12_VIDEO_PROCESS_DEINTERLACE_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROCESS_DEINTERLACE_FLAGS ) -typedef struct D3D12_VIDEO_PROCESS_ALPHA_BLENDING - { - BOOL Enable; - FLOAT Alpha; - } D3D12_VIDEO_PROCESS_ALPHA_BLENDING; - -typedef struct D3D12_VIDEO_PROCESS_LUMA_KEY - { - BOOL Enable; - FLOAT Lower; - FLOAT Upper; - } D3D12_VIDEO_PROCESS_LUMA_KEY; - -typedef struct D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC - { - DXGI_FORMAT Format; - DXGI_COLOR_SPACE_TYPE ColorSpace; - DXGI_RATIONAL SourceAspectRatio; - DXGI_RATIONAL DestinationAspectRatio; - DXGI_RATIONAL FrameRate; - D3D12_VIDEO_SIZE_RANGE SourceSizeRange; - D3D12_VIDEO_SIZE_RANGE DestinationSizeRange; - BOOL EnableOrientation; - D3D12_VIDEO_PROCESS_FILTER_FLAGS FilterFlags; - D3D12_VIDEO_FRAME_STEREO_FORMAT StereoFormat; - D3D12_VIDEO_FIELD_TYPE FieldType; - D3D12_VIDEO_PROCESS_DEINTERLACE_FLAGS DeinterlaceMode; - BOOL EnableAlphaBlending; - D3D12_VIDEO_PROCESS_LUMA_KEY LumaKey; - UINT NumPastFrames; - UINT NumFutureFrames; - BOOL EnableAutoProcessing; - } D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC; - -typedef -enum D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE - { - D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE_OPAQUE = 0, - D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE_BACKGROUND = 1, - D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE_DESTINATION = 2, - D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE_SOURCE_STREAM = 3 - } D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE; - -typedef struct D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC - { - DXGI_FORMAT Format; - DXGI_COLOR_SPACE_TYPE ColorSpace; - D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE AlphaFillMode; - UINT AlphaFillModeSourceStreamIndex; - FLOAT BackgroundColor[ 4 ]; - DXGI_RATIONAL FrameRate; - BOOL EnableStereo; - } D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC; - -extern RPC_IF_HANDLE __MIDL_itf_d3d12video_0000_0000_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12video_0000_0000_v0_0_s_ifspec; - -#ifndef __ID3D12VideoDecoderHeap_INTERFACE_DEFINED__ -#define __ID3D12VideoDecoderHeap_INTERFACE_DEFINED__ - -/* interface ID3D12VideoDecoderHeap */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12VideoDecoderHeap; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("0946B7C9-EBF6-4047-BB73-8683E27DBB1F") - ID3D12VideoDecoderHeap : public ID3D12Pageable - { - public: -#if defined(_MSC_VER) || !defined(_WIN32) - virtual D3D12_VIDEO_DECODER_HEAP_DESC STDMETHODCALLTYPE GetDesc( void) = 0; -#else - virtual D3D12_VIDEO_DECODER_HEAP_DESC *STDMETHODCALLTYPE GetDesc( - D3D12_VIDEO_DECODER_HEAP_DESC * RetVal) = 0; -#endif - - }; - - -#else /* C style interface */ - - typedef struct ID3D12VideoDecoderHeapVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12VideoDecoderHeap * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12VideoDecoderHeap * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12VideoDecoderHeap * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12VideoDecoderHeap * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12VideoDecoderHeap * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12VideoDecoderHeap * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12VideoDecoderHeap * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12VideoDecoderHeap * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12VideoDecoderHeap, GetDesc) -#if !defined(_WIN32) - D3D12_VIDEO_DECODER_HEAP_DESC ( STDMETHODCALLTYPE *GetDesc )( - ID3D12VideoDecoderHeap * This); - -#else - D3D12_VIDEO_DECODER_HEAP_DESC *( STDMETHODCALLTYPE *GetDesc )( - ID3D12VideoDecoderHeap * This, - D3D12_VIDEO_DECODER_HEAP_DESC * RetVal); - -#endif - - END_INTERFACE - } ID3D12VideoDecoderHeapVtbl; - - interface ID3D12VideoDecoderHeap - { - CONST_VTBL struct ID3D12VideoDecoderHeapVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12VideoDecoderHeap_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12VideoDecoderHeap_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12VideoDecoderHeap_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12VideoDecoderHeap_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12VideoDecoderHeap_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12VideoDecoderHeap_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12VideoDecoderHeap_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12VideoDecoderHeap_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#if !defined(_WIN32) - -#define ID3D12VideoDecoderHeap_GetDesc(This) \ - ( (This)->lpVtbl -> GetDesc(This) ) -#else -#define ID3D12VideoDecoderHeap_GetDesc(This,RetVal) \ - ( (This)->lpVtbl -> GetDesc(This,RetVal) ) -#endif - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12VideoDecoderHeap_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12VideoDevice_INTERFACE_DEFINED__ -#define __ID3D12VideoDevice_INTERFACE_DEFINED__ - -/* interface ID3D12VideoDevice */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12VideoDevice; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("1F052807-0B46-4ACC-8A89-364F793718A4") - ID3D12VideoDevice : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE CheckFeatureSupport( - D3D12_FEATURE_VIDEO FeatureVideo, - _Inout_updates_bytes_(FeatureSupportDataSize) void *pFeatureSupportData, - UINT FeatureSupportDataSize) = 0; - - virtual HRESULT STDMETHODCALLTYPE CreateVideoDecoder( - _In_ const D3D12_VIDEO_DECODER_DESC *pDesc, - _In_ REFIID riid, - _COM_Outptr_ void **ppVideoDecoder) = 0; - - virtual HRESULT STDMETHODCALLTYPE CreateVideoDecoderHeap( - _In_ const D3D12_VIDEO_DECODER_HEAP_DESC *pVideoDecoderHeapDesc, - _In_ REFIID riid, - _COM_Outptr_ void **ppVideoDecoderHeap) = 0; - - virtual HRESULT STDMETHODCALLTYPE CreateVideoProcessor( - UINT NodeMask, - _In_ const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC *pOutputStreamDesc, - UINT NumInputStreamDescs, - _In_reads_(NumInputStreamDescs) const D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *pInputStreamDescs, - _In_ REFIID riid, - _COM_Outptr_ void **ppVideoProcessor) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12VideoDeviceVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12VideoDevice * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12VideoDevice * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12VideoDevice * This); - - DECLSPEC_XFGVIRT(ID3D12VideoDevice, CheckFeatureSupport) - HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )( - ID3D12VideoDevice * This, - D3D12_FEATURE_VIDEO FeatureVideo, - _Inout_updates_bytes_(FeatureSupportDataSize) void *pFeatureSupportData, - UINT FeatureSupportDataSize); - - DECLSPEC_XFGVIRT(ID3D12VideoDevice, CreateVideoDecoder) - HRESULT ( STDMETHODCALLTYPE *CreateVideoDecoder )( - ID3D12VideoDevice * This, - _In_ const D3D12_VIDEO_DECODER_DESC *pDesc, - _In_ REFIID riid, - _COM_Outptr_ void **ppVideoDecoder); - - DECLSPEC_XFGVIRT(ID3D12VideoDevice, CreateVideoDecoderHeap) - HRESULT ( STDMETHODCALLTYPE *CreateVideoDecoderHeap )( - ID3D12VideoDevice * This, - _In_ const D3D12_VIDEO_DECODER_HEAP_DESC *pVideoDecoderHeapDesc, - _In_ REFIID riid, - _COM_Outptr_ void **ppVideoDecoderHeap); - - DECLSPEC_XFGVIRT(ID3D12VideoDevice, CreateVideoProcessor) - HRESULT ( STDMETHODCALLTYPE *CreateVideoProcessor )( - ID3D12VideoDevice * This, - UINT NodeMask, - _In_ const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC *pOutputStreamDesc, - UINT NumInputStreamDescs, - _In_reads_(NumInputStreamDescs) const D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *pInputStreamDescs, - _In_ REFIID riid, - _COM_Outptr_ void **ppVideoProcessor); - - END_INTERFACE - } ID3D12VideoDeviceVtbl; - - interface ID3D12VideoDevice - { - CONST_VTBL struct ID3D12VideoDeviceVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12VideoDevice_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12VideoDevice_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12VideoDevice_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12VideoDevice_CheckFeatureSupport(This,FeatureVideo,pFeatureSupportData,FeatureSupportDataSize) \ - ( (This)->lpVtbl -> CheckFeatureSupport(This,FeatureVideo,pFeatureSupportData,FeatureSupportDataSize) ) - -#define ID3D12VideoDevice_CreateVideoDecoder(This,pDesc,riid,ppVideoDecoder) \ - ( (This)->lpVtbl -> CreateVideoDecoder(This,pDesc,riid,ppVideoDecoder) ) - -#define ID3D12VideoDevice_CreateVideoDecoderHeap(This,pVideoDecoderHeapDesc,riid,ppVideoDecoderHeap) \ - ( (This)->lpVtbl -> CreateVideoDecoderHeap(This,pVideoDecoderHeapDesc,riid,ppVideoDecoderHeap) ) - -#define ID3D12VideoDevice_CreateVideoProcessor(This,NodeMask,pOutputStreamDesc,NumInputStreamDescs,pInputStreamDescs,riid,ppVideoProcessor) \ - ( (This)->lpVtbl -> CreateVideoProcessor(This,NodeMask,pOutputStreamDesc,NumInputStreamDescs,pInputStreamDescs,riid,ppVideoProcessor) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12VideoDevice_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12VideoDecoder_INTERFACE_DEFINED__ -#define __ID3D12VideoDecoder_INTERFACE_DEFINED__ - -/* interface ID3D12VideoDecoder */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12VideoDecoder; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("C59B6BDC-7720-4074-A136-17A156037470") - ID3D12VideoDecoder : public ID3D12Pageable - { - public: -#if defined(_MSC_VER) || !defined(_WIN32) - virtual D3D12_VIDEO_DECODER_DESC STDMETHODCALLTYPE GetDesc( void) = 0; -#else - virtual D3D12_VIDEO_DECODER_DESC *STDMETHODCALLTYPE GetDesc( - D3D12_VIDEO_DECODER_DESC * RetVal) = 0; -#endif - - }; - - -#else /* C style interface */ - - typedef struct ID3D12VideoDecoderVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12VideoDecoder * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12VideoDecoder * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12VideoDecoder * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12VideoDecoder * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12VideoDecoder * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12VideoDecoder * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12VideoDecoder * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12VideoDecoder * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12VideoDecoder, GetDesc) -#if !defined(_WIN32) - D3D12_VIDEO_DECODER_DESC ( STDMETHODCALLTYPE *GetDesc )( - ID3D12VideoDecoder * This); - -#else - D3D12_VIDEO_DECODER_DESC *( STDMETHODCALLTYPE *GetDesc )( - ID3D12VideoDecoder * This, - D3D12_VIDEO_DECODER_DESC * RetVal); - -#endif - - END_INTERFACE - } ID3D12VideoDecoderVtbl; - - interface ID3D12VideoDecoder - { - CONST_VTBL struct ID3D12VideoDecoderVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12VideoDecoder_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12VideoDecoder_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12VideoDecoder_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12VideoDecoder_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12VideoDecoder_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12VideoDecoder_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12VideoDecoder_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12VideoDecoder_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#if !defined(_WIN32) - -#define ID3D12VideoDecoder_GetDesc(This) \ - ( (This)->lpVtbl -> GetDesc(This) ) -#else -#define ID3D12VideoDecoder_GetDesc(This,RetVal) \ - ( (This)->lpVtbl -> GetDesc(This,RetVal) ) -#endif - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12VideoDecoder_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12video_0000_0003 */ -/* [local] */ - -typedef -enum D3D12_VIDEO_DECODE_TIER - { - D3D12_VIDEO_DECODE_TIER_NOT_SUPPORTED = 0, - D3D12_VIDEO_DECODE_TIER_1 = 1, - D3D12_VIDEO_DECODE_TIER_2 = 2, - D3D12_VIDEO_DECODE_TIER_3 = 3 - } D3D12_VIDEO_DECODE_TIER; - -typedef -enum D3D12_VIDEO_DECODE_SUPPORT_FLAGS - { - D3D12_VIDEO_DECODE_SUPPORT_FLAG_NONE = 0, - D3D12_VIDEO_DECODE_SUPPORT_FLAG_SUPPORTED = 0x1 - } D3D12_VIDEO_DECODE_SUPPORT_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_DECODE_SUPPORT_FLAGS ) -typedef -enum D3D12_VIDEO_DECODE_CONFIGURATION_FLAGS - { - D3D12_VIDEO_DECODE_CONFIGURATION_FLAG_NONE = 0, - D3D12_VIDEO_DECODE_CONFIGURATION_FLAG_HEIGHT_ALIGNMENT_MULTIPLE_32_REQUIRED = 0x1, - D3D12_VIDEO_DECODE_CONFIGURATION_FLAG_POST_PROCESSING_SUPPORTED = 0x2, - D3D12_VIDEO_DECODE_CONFIGURATION_FLAG_REFERENCE_ONLY_ALLOCATIONS_REQUIRED = 0x4, - D3D12_VIDEO_DECODE_CONFIGURATION_FLAG_ALLOW_RESOLUTION_CHANGE_ON_NON_KEY_FRAME = 0x8 - } D3D12_VIDEO_DECODE_CONFIGURATION_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_DECODE_CONFIGURATION_FLAGS ) -typedef -enum D3D12_VIDEO_DECODE_STATUS - { - D3D12_VIDEO_DECODE_STATUS_OK = 0, - D3D12_VIDEO_DECODE_STATUS_CONTINUE = 1, - D3D12_VIDEO_DECODE_STATUS_CONTINUE_SKIP_DISPLAY = 2, - D3D12_VIDEO_DECODE_STATUS_RESTART = 3, - D3D12_VIDEO_DECODE_STATUS_RATE_EXCEEDED = 4 - } D3D12_VIDEO_DECODE_STATUS; - -typedef -enum D3D12_VIDEO_DECODE_ARGUMENT_TYPE - { - D3D12_VIDEO_DECODE_ARGUMENT_TYPE_PICTURE_PARAMETERS = 0, - D3D12_VIDEO_DECODE_ARGUMENT_TYPE_INVERSE_QUANTIZATION_MATRIX = 1, - D3D12_VIDEO_DECODE_ARGUMENT_TYPE_SLICE_CONTROL = 2, - D3D12_VIDEO_DECODE_ARGUMENT_TYPE_HUFFMAN_TABLE = 3 - } D3D12_VIDEO_DECODE_ARGUMENT_TYPE; - -typedef struct D3D12_FEATURE_DATA_VIDEO_DECODE_SUPPORT - { - UINT NodeIndex; - D3D12_VIDEO_DECODE_CONFIGURATION Configuration; - UINT Width; - UINT Height; - DXGI_FORMAT DecodeFormat; - DXGI_RATIONAL FrameRate; - UINT BitRate; - D3D12_VIDEO_DECODE_SUPPORT_FLAGS SupportFlags; - D3D12_VIDEO_DECODE_CONFIGURATION_FLAGS ConfigurationFlags; - D3D12_VIDEO_DECODE_TIER DecodeTier; - } D3D12_FEATURE_DATA_VIDEO_DECODE_SUPPORT; - -typedef struct D3D12_FEATURE_DATA_VIDEO_DECODE_PROFILE_COUNT - { - UINT NodeIndex; - UINT ProfileCount; - } D3D12_FEATURE_DATA_VIDEO_DECODE_PROFILE_COUNT; - -typedef struct D3D12_FEATURE_DATA_VIDEO_DECODE_PROFILES - { - UINT NodeIndex; - UINT ProfileCount; - _Field_size_full_(ProfileCount) GUID *pProfiles; - } D3D12_FEATURE_DATA_VIDEO_DECODE_PROFILES; - -typedef struct D3D12_FEATURE_DATA_VIDEO_DECODE_FORMAT_COUNT - { - UINT NodeIndex; - D3D12_VIDEO_DECODE_CONFIGURATION Configuration; - UINT FormatCount; - } D3D12_FEATURE_DATA_VIDEO_DECODE_FORMAT_COUNT; - -typedef struct D3D12_FEATURE_DATA_VIDEO_DECODE_FORMATS - { - UINT NodeIndex; - D3D12_VIDEO_DECODE_CONFIGURATION Configuration; - UINT FormatCount; - _Field_size_full_(FormatCount) DXGI_FORMAT *pOutputFormats; - } D3D12_FEATURE_DATA_VIDEO_DECODE_FORMATS; - -typedef struct D3D12_FEATURE_DATA_VIDEO_ARCHITECTURE - { - BOOL IOCoherent; - } D3D12_FEATURE_DATA_VIDEO_ARCHITECTURE; - -typedef -enum D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT - { - D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_Y = 0, - D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_U = 1, - D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_V = 2, - D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_R = 0, - D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_G = 1, - D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_B = 2, - D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_A = 3 - } D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT; - -typedef -enum D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAGS - { - D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAG_NONE = 0, - D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAG_Y = ( 1 << D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_Y ) , - D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAG_U = ( 1 << D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_U ) , - D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAG_V = ( 1 << D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_V ) , - D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAG_R = ( 1 << D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_R ) , - D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAG_G = ( 1 << D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_G ) , - D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAG_B = ( 1 << D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_B ) , - D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAG_A = ( 1 << D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_A ) - } D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAGS ) -typedef struct D3D12_FEATURE_DATA_VIDEO_DECODE_HISTOGRAM - { - UINT NodeIndex; - GUID DecodeProfile; - UINT Width; - UINT Height; - DXGI_FORMAT DecodeFormat; - D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAGS Components; - UINT BinCount; - UINT CounterBitDepth; - } D3D12_FEATURE_DATA_VIDEO_DECODE_HISTOGRAM; - -typedef -enum D3D12_VIDEO_DECODE_CONVERSION_SUPPORT_FLAGS - { - D3D12_VIDEO_DECODE_CONVERSION_SUPPORT_FLAG_NONE = 0, - D3D12_VIDEO_DECODE_CONVERSION_SUPPORT_FLAG_SUPPORTED = 0x1 - } D3D12_VIDEO_DECODE_CONVERSION_SUPPORT_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_DECODE_CONVERSION_SUPPORT_FLAGS ) -typedef -enum D3D12_VIDEO_SCALE_SUPPORT_FLAGS - { - D3D12_VIDEO_SCALE_SUPPORT_FLAG_NONE = 0, - D3D12_VIDEO_SCALE_SUPPORT_FLAG_POW2_ONLY = 0x1, - D3D12_VIDEO_SCALE_SUPPORT_FLAG_EVEN_DIMENSIONS_ONLY = 0x2 - } D3D12_VIDEO_SCALE_SUPPORT_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_SCALE_SUPPORT_FLAGS ) -typedef struct D3D12_VIDEO_SCALE_SUPPORT - { - D3D12_VIDEO_SIZE_RANGE OutputSizeRange; - D3D12_VIDEO_SCALE_SUPPORT_FLAGS Flags; - } D3D12_VIDEO_SCALE_SUPPORT; - -typedef struct D3D12_FEATURE_DATA_VIDEO_DECODE_CONVERSION_SUPPORT - { - UINT NodeIndex; - D3D12_VIDEO_DECODE_CONFIGURATION Configuration; - D3D12_VIDEO_SAMPLE DecodeSample; - D3D12_VIDEO_FORMAT OutputFormat; - DXGI_RATIONAL FrameRate; - UINT BitRate; - D3D12_VIDEO_DECODE_CONVERSION_SUPPORT_FLAGS SupportFlags; - D3D12_VIDEO_SCALE_SUPPORT ScaleSupport; - } D3D12_FEATURE_DATA_VIDEO_DECODE_CONVERSION_SUPPORT; - -typedef struct D3D12_FEATURE_DATA_VIDEO_DECODER_HEAP_SIZE - { - D3D12_VIDEO_DECODER_HEAP_DESC VideoDecoderHeapDesc; - UINT64 MemoryPoolL0Size; - UINT64 MemoryPoolL1Size; - } D3D12_FEATURE_DATA_VIDEO_DECODER_HEAP_SIZE; - -typedef struct D3D12_FEATURE_DATA_VIDEO_PROCESSOR_SIZE - { - UINT NodeMask; - const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC *pOutputStreamDesc; - UINT NumInputStreamDescs; - const D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *pInputStreamDescs; - UINT64 MemoryPoolL0Size; - UINT64 MemoryPoolL1Size; - } D3D12_FEATURE_DATA_VIDEO_PROCESSOR_SIZE; - -typedef struct D3D12_QUERY_DATA_VIDEO_DECODE_STATISTICS - { - UINT64 Status; - UINT64 NumMacroblocksAffected; - DXGI_RATIONAL FrameRate; - UINT BitRate; - } D3D12_QUERY_DATA_VIDEO_DECODE_STATISTICS; - -typedef struct D3D12_VIDEO_DECODE_FRAME_ARGUMENT - { - D3D12_VIDEO_DECODE_ARGUMENT_TYPE Type; - UINT Size; - _Field_size_bytes_full_(Size) void *pData; - } D3D12_VIDEO_DECODE_FRAME_ARGUMENT; - -typedef struct D3D12_VIDEO_DECODE_REFERENCE_FRAMES - { - UINT NumTexture2Ds; - _Field_size_full_(NumTexture2Ds) ID3D12Resource **ppTexture2Ds; - _Field_size_full_(NumTexture2Ds) UINT *pSubresources; - _Field_size_full_opt_(NumTexture2Ds) ID3D12VideoDecoderHeap **ppHeaps; - } D3D12_VIDEO_DECODE_REFERENCE_FRAMES; - -typedef struct D3D12_VIDEO_DECODE_COMPRESSED_BITSTREAM - { - ID3D12Resource *pBuffer; - UINT64 Offset; - UINT64 Size; - } D3D12_VIDEO_DECODE_COMPRESSED_BITSTREAM; - -typedef struct D3D12_VIDEO_DECODE_CONVERSION_ARGUMENTS - { - BOOL Enable; - ID3D12Resource *pReferenceTexture2D; - UINT ReferenceSubresource; - DXGI_COLOR_SPACE_TYPE OutputColorSpace; - DXGI_COLOR_SPACE_TYPE DecodeColorSpace; - } D3D12_VIDEO_DECODE_CONVERSION_ARGUMENTS; - -typedef struct D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS - { - UINT NumFrameArguments; - D3D12_VIDEO_DECODE_FRAME_ARGUMENT FrameArguments[ 10 ]; - D3D12_VIDEO_DECODE_REFERENCE_FRAMES ReferenceFrames; - D3D12_VIDEO_DECODE_COMPRESSED_BITSTREAM CompressedBitstream; - ID3D12VideoDecoderHeap *pHeap; - } D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS; - -typedef struct D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS - { - ID3D12Resource *pOutputTexture2D; - UINT OutputSubresource; - D3D12_VIDEO_DECODE_CONVERSION_ARGUMENTS ConversionArguments; - } D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS; - -extern RPC_IF_HANDLE __MIDL_itf_d3d12video_0000_0003_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12video_0000_0003_v0_0_s_ifspec; - -#ifndef __ID3D12VideoProcessor_INTERFACE_DEFINED__ -#define __ID3D12VideoProcessor_INTERFACE_DEFINED__ - -/* interface ID3D12VideoProcessor */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12VideoProcessor; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("304FDB32-BEDE-410A-8545-943AC6A46138") - ID3D12VideoProcessor : public ID3D12Pageable - { - public: - virtual UINT STDMETHODCALLTYPE GetNodeMask( void) = 0; - - virtual UINT STDMETHODCALLTYPE GetNumInputStreamDescs( void) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetInputStreamDescs( - UINT NumInputStreamDescs, - _Out_writes_(NumInputStreamDescs) D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *pInputStreamDescs) = 0; - -#if defined(_MSC_VER) || !defined(_WIN32) - virtual D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC STDMETHODCALLTYPE GetOutputStreamDesc( void) = 0; -#else - virtual D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC *STDMETHODCALLTYPE GetOutputStreamDesc( - D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC * RetVal) = 0; -#endif - - }; - - -#else /* C style interface */ - - typedef struct ID3D12VideoProcessorVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12VideoProcessor * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12VideoProcessor * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12VideoProcessor * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12VideoProcessor * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12VideoProcessor * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12VideoProcessor * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12VideoProcessor * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12VideoProcessor * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessor, GetNodeMask) - UINT ( STDMETHODCALLTYPE *GetNodeMask )( - ID3D12VideoProcessor * This); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessor, GetNumInputStreamDescs) - UINT ( STDMETHODCALLTYPE *GetNumInputStreamDescs )( - ID3D12VideoProcessor * This); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessor, GetInputStreamDescs) - HRESULT ( STDMETHODCALLTYPE *GetInputStreamDescs )( - ID3D12VideoProcessor * This, - UINT NumInputStreamDescs, - _Out_writes_(NumInputStreamDescs) D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *pInputStreamDescs); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessor, GetOutputStreamDesc) -#if !defined(_WIN32) - D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC ( STDMETHODCALLTYPE *GetOutputStreamDesc )( - ID3D12VideoProcessor * This); - -#else - D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC *( STDMETHODCALLTYPE *GetOutputStreamDesc )( - ID3D12VideoProcessor * This, - D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC * RetVal); - -#endif - - END_INTERFACE - } ID3D12VideoProcessorVtbl; - - interface ID3D12VideoProcessor - { - CONST_VTBL struct ID3D12VideoProcessorVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12VideoProcessor_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12VideoProcessor_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12VideoProcessor_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12VideoProcessor_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12VideoProcessor_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12VideoProcessor_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12VideoProcessor_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12VideoProcessor_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12VideoProcessor_GetNodeMask(This) \ - ( (This)->lpVtbl -> GetNodeMask(This) ) - -#define ID3D12VideoProcessor_GetNumInputStreamDescs(This) \ - ( (This)->lpVtbl -> GetNumInputStreamDescs(This) ) - -#define ID3D12VideoProcessor_GetInputStreamDescs(This,NumInputStreamDescs,pInputStreamDescs) \ - ( (This)->lpVtbl -> GetInputStreamDescs(This,NumInputStreamDescs,pInputStreamDescs) ) -#if !defined(_WIN32) - -#define ID3D12VideoProcessor_GetOutputStreamDesc(This) \ - ( (This)->lpVtbl -> GetOutputStreamDesc(This) ) -#else -#define ID3D12VideoProcessor_GetOutputStreamDesc(This,RetVal) \ - ( (This)->lpVtbl -> GetOutputStreamDesc(This,RetVal) ) -#endif - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12VideoProcessor_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12video_0000_0004 */ -/* [local] */ - -typedef -enum D3D12_VIDEO_PROCESS_FEATURE_FLAGS - { - D3D12_VIDEO_PROCESS_FEATURE_FLAG_NONE = 0, - D3D12_VIDEO_PROCESS_FEATURE_FLAG_ALPHA_FILL = 0x1, - D3D12_VIDEO_PROCESS_FEATURE_FLAG_LUMA_KEY = 0x2, - D3D12_VIDEO_PROCESS_FEATURE_FLAG_STEREO = 0x4, - D3D12_VIDEO_PROCESS_FEATURE_FLAG_ROTATION = 0x8, - D3D12_VIDEO_PROCESS_FEATURE_FLAG_FLIP = 0x10, - D3D12_VIDEO_PROCESS_FEATURE_FLAG_ALPHA_BLENDING = 0x20, - D3D12_VIDEO_PROCESS_FEATURE_FLAG_PIXEL_ASPECT_RATIO = 0x40 - } D3D12_VIDEO_PROCESS_FEATURE_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROCESS_FEATURE_FLAGS ) -typedef -enum D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAGS - { - D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAG_NONE = 0, - D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAG_DENOISE = 0x1, - D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAG_DERINGING = 0x2, - D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAG_EDGE_ENHANCEMENT = 0x4, - D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAG_COLOR_CORRECTION = 0x8, - D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAG_FLESH_TONE_MAPPING = 0x10, - D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAG_IMAGE_STABILIZATION = 0x20, - D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAG_SUPER_RESOLUTION = 0x40, - D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAG_ANAMORPHIC_SCALING = 0x80, - D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAG_CUSTOM = 0x80000000 - } D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAGS ) -typedef -enum D3D12_VIDEO_PROCESS_ORIENTATION - { - D3D12_VIDEO_PROCESS_ORIENTATION_DEFAULT = 0, - D3D12_VIDEO_PROCESS_ORIENTATION_FLIP_HORIZONTAL = 1, - D3D12_VIDEO_PROCESS_ORIENTATION_CLOCKWISE_90 = 2, - D3D12_VIDEO_PROCESS_ORIENTATION_CLOCKWISE_90_FLIP_HORIZONTAL = 3, - D3D12_VIDEO_PROCESS_ORIENTATION_CLOCKWISE_180 = 4, - D3D12_VIDEO_PROCESS_ORIENTATION_FLIP_VERTICAL = 5, - D3D12_VIDEO_PROCESS_ORIENTATION_CLOCKWISE_270 = 6, - D3D12_VIDEO_PROCESS_ORIENTATION_CLOCKWISE_270_FLIP_HORIZONTAL = 7 - } D3D12_VIDEO_PROCESS_ORIENTATION; - -typedef -enum D3D12_VIDEO_PROCESS_INPUT_STREAM_FLAGS - { - D3D12_VIDEO_PROCESS_INPUT_STREAM_FLAG_NONE = 0, - D3D12_VIDEO_PROCESS_INPUT_STREAM_FLAG_FRAME_DISCONTINUITY = 0x1, - D3D12_VIDEO_PROCESS_INPUT_STREAM_FLAG_FRAME_REPEAT = 0x2 - } D3D12_VIDEO_PROCESS_INPUT_STREAM_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROCESS_INPUT_STREAM_FLAGS ) -typedef struct D3D12_VIDEO_PROCESS_FILTER_RANGE - { - INT Minimum; - INT Maximum; - INT Default; - FLOAT Multiplier; - } D3D12_VIDEO_PROCESS_FILTER_RANGE; - -typedef -enum D3D12_VIDEO_PROCESS_SUPPORT_FLAGS - { - D3D12_VIDEO_PROCESS_SUPPORT_FLAG_NONE = 0, - D3D12_VIDEO_PROCESS_SUPPORT_FLAG_SUPPORTED = 0x1 - } D3D12_VIDEO_PROCESS_SUPPORT_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROCESS_SUPPORT_FLAGS ) -typedef struct D3D12_FEATURE_DATA_VIDEO_PROCESS_SUPPORT - { - UINT NodeIndex; - D3D12_VIDEO_SAMPLE InputSample; - D3D12_VIDEO_FIELD_TYPE InputFieldType; - D3D12_VIDEO_FRAME_STEREO_FORMAT InputStereoFormat; - DXGI_RATIONAL InputFrameRate; - D3D12_VIDEO_FORMAT OutputFormat; - D3D12_VIDEO_FRAME_STEREO_FORMAT OutputStereoFormat; - DXGI_RATIONAL OutputFrameRate; - D3D12_VIDEO_PROCESS_SUPPORT_FLAGS SupportFlags; - D3D12_VIDEO_SCALE_SUPPORT ScaleSupport; - D3D12_VIDEO_PROCESS_FEATURE_FLAGS FeatureSupport; - D3D12_VIDEO_PROCESS_DEINTERLACE_FLAGS DeinterlaceSupport; - D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAGS AutoProcessingSupport; - D3D12_VIDEO_PROCESS_FILTER_FLAGS FilterSupport; - D3D12_VIDEO_PROCESS_FILTER_RANGE FilterRangeSupport[ 32 ]; - } D3D12_FEATURE_DATA_VIDEO_PROCESS_SUPPORT; - -typedef struct D3D12_FEATURE_DATA_VIDEO_PROCESS_MAX_INPUT_STREAMS - { - UINT NodeIndex; - UINT MaxInputStreams; - } D3D12_FEATURE_DATA_VIDEO_PROCESS_MAX_INPUT_STREAMS; - -typedef struct D3D12_FEATURE_DATA_VIDEO_PROCESS_REFERENCE_INFO - { - UINT NodeIndex; - D3D12_VIDEO_PROCESS_DEINTERLACE_FLAGS DeinterlaceMode; - D3D12_VIDEO_PROCESS_FILTER_FLAGS Filters; - D3D12_VIDEO_PROCESS_FEATURE_FLAGS FeatureSupport; - DXGI_RATIONAL InputFrameRate; - DXGI_RATIONAL OutputFrameRate; - BOOL EnableAutoProcessing; - UINT PastFrames; - UINT FutureFrames; - } D3D12_FEATURE_DATA_VIDEO_PROCESS_REFERENCE_INFO; - -typedef struct D3D12_VIDEO_PROCESS_REFERENCE_SET - { - UINT NumPastFrames; - ID3D12Resource **ppPastFrames; - UINT *pPastSubresources; - UINT NumFutureFrames; - ID3D12Resource **ppFutureFrames; - UINT *pFutureSubresources; - } D3D12_VIDEO_PROCESS_REFERENCE_SET; - -typedef struct D3D12_VIDEO_PROCESS_TRANSFORM - { - D3D12_RECT SourceRectangle; - D3D12_RECT DestinationRectangle; - D3D12_VIDEO_PROCESS_ORIENTATION Orientation; - } D3D12_VIDEO_PROCESS_TRANSFORM; - -typedef struct D3D12_VIDEO_PROCESS_INPUT_STREAM_RATE - { - UINT OutputIndex; - UINT InputFrameOrField; - } D3D12_VIDEO_PROCESS_INPUT_STREAM_RATE; - -typedef struct D3D12_VIDEO_PROCESS_INPUT_STREAM - { - ID3D12Resource *pTexture2D; - UINT Subresource; - D3D12_VIDEO_PROCESS_REFERENCE_SET ReferenceSet; - } D3D12_VIDEO_PROCESS_INPUT_STREAM; - -typedef struct D3D12_VIDEO_PROCESS_INPUT_STREAM_ARGUMENTS - { - D3D12_VIDEO_PROCESS_INPUT_STREAM InputStream[ 2 ]; - D3D12_VIDEO_PROCESS_TRANSFORM Transform; - D3D12_VIDEO_PROCESS_INPUT_STREAM_FLAGS Flags; - D3D12_VIDEO_PROCESS_INPUT_STREAM_RATE RateInfo; - INT FilterLevels[ 32 ]; - D3D12_VIDEO_PROCESS_ALPHA_BLENDING AlphaBlending; - } D3D12_VIDEO_PROCESS_INPUT_STREAM_ARGUMENTS; - -typedef struct D3D12_VIDEO_PROCESS_OUTPUT_STREAM - { - ID3D12Resource *pTexture2D; - UINT Subresource; - } D3D12_VIDEO_PROCESS_OUTPUT_STREAM; - -typedef struct D3D12_VIDEO_PROCESS_OUTPUT_STREAM_ARGUMENTS - { - D3D12_VIDEO_PROCESS_OUTPUT_STREAM OutputStream[ 2 ]; - D3D12_RECT TargetRectangle; - } D3D12_VIDEO_PROCESS_OUTPUT_STREAM_ARGUMENTS; - -extern RPC_IF_HANDLE __MIDL_itf_d3d12video_0000_0004_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12video_0000_0004_v0_0_s_ifspec; - -#ifndef __ID3D12VideoDecodeCommandList_INTERFACE_DEFINED__ -#define __ID3D12VideoDecodeCommandList_INTERFACE_DEFINED__ - -/* interface ID3D12VideoDecodeCommandList */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12VideoDecodeCommandList; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("3B60536E-AD29-4E64-A269-F853837E5E53") - ID3D12VideoDecodeCommandList : public ID3D12CommandList - { - public: - virtual HRESULT STDMETHODCALLTYPE Close( void) = 0; - - virtual HRESULT STDMETHODCALLTYPE Reset( - _In_ ID3D12CommandAllocator *pAllocator) = 0; - - virtual void STDMETHODCALLTYPE ClearState( void) = 0; - - virtual void STDMETHODCALLTYPE ResourceBarrier( - _In_ UINT NumBarriers, - _In_reads_(NumBarriers) const D3D12_RESOURCE_BARRIER *pBarriers) = 0; - - virtual void STDMETHODCALLTYPE DiscardResource( - _In_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DISCARD_REGION *pRegion) = 0; - - virtual void STDMETHODCALLTYPE BeginQuery( - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index) = 0; - - virtual void STDMETHODCALLTYPE EndQuery( - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index) = 0; - - virtual void STDMETHODCALLTYPE ResolveQueryData( - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT StartIndex, - _In_ UINT NumQueries, - _In_ ID3D12Resource *pDestinationBuffer, - _In_ UINT64 AlignedDestinationBufferOffset) = 0; - - virtual void STDMETHODCALLTYPE SetPredication( - _In_opt_ ID3D12Resource *pBuffer, - _In_ UINT64 AlignedBufferOffset, - _In_ D3D12_PREDICATION_OP Operation) = 0; - - virtual void STDMETHODCALLTYPE SetMarker( - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size) = 0; - - virtual void STDMETHODCALLTYPE BeginEvent( - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size) = 0; - - virtual void STDMETHODCALLTYPE EndEvent( void) = 0; - - virtual void STDMETHODCALLTYPE DecodeFrame( - _In_ ID3D12VideoDecoder *pDecoder, - _In_ const D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS *pOutputArguments, - _In_ const D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS *pInputArguments) = 0; - - virtual void STDMETHODCALLTYPE WriteBufferImmediate( - UINT Count, - _In_reads_(Count) const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams, - _In_reads_opt_(Count) const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12VideoDecodeCommandListVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12VideoDecodeCommandList * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12VideoDecodeCommandList * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12VideoDecodeCommandList * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12VideoDecodeCommandList * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12VideoDecodeCommandList * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12VideoDecodeCommandList * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12VideoDecodeCommandList * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12VideoDecodeCommandList * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12CommandList, GetType) - D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )( - ID3D12VideoDecodeCommandList * This); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, Close) - HRESULT ( STDMETHODCALLTYPE *Close )( - ID3D12VideoDecodeCommandList * This); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, Reset) - HRESULT ( STDMETHODCALLTYPE *Reset )( - ID3D12VideoDecodeCommandList * This, - _In_ ID3D12CommandAllocator *pAllocator); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, ClearState) - void ( STDMETHODCALLTYPE *ClearState )( - ID3D12VideoDecodeCommandList * This); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, ResourceBarrier) - void ( STDMETHODCALLTYPE *ResourceBarrier )( - ID3D12VideoDecodeCommandList * This, - _In_ UINT NumBarriers, - _In_reads_(NumBarriers) const D3D12_RESOURCE_BARRIER *pBarriers); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, DiscardResource) - void ( STDMETHODCALLTYPE *DiscardResource )( - ID3D12VideoDecodeCommandList * This, - _In_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DISCARD_REGION *pRegion); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, BeginQuery) - void ( STDMETHODCALLTYPE *BeginQuery )( - ID3D12VideoDecodeCommandList * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, EndQuery) - void ( STDMETHODCALLTYPE *EndQuery )( - ID3D12VideoDecodeCommandList * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, ResolveQueryData) - void ( STDMETHODCALLTYPE *ResolveQueryData )( - ID3D12VideoDecodeCommandList * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT StartIndex, - _In_ UINT NumQueries, - _In_ ID3D12Resource *pDestinationBuffer, - _In_ UINT64 AlignedDestinationBufferOffset); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, SetPredication) - void ( STDMETHODCALLTYPE *SetPredication )( - ID3D12VideoDecodeCommandList * This, - _In_opt_ ID3D12Resource *pBuffer, - _In_ UINT64 AlignedBufferOffset, - _In_ D3D12_PREDICATION_OP Operation); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, SetMarker) - void ( STDMETHODCALLTYPE *SetMarker )( - ID3D12VideoDecodeCommandList * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, BeginEvent) - void ( STDMETHODCALLTYPE *BeginEvent )( - ID3D12VideoDecodeCommandList * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, EndEvent) - void ( STDMETHODCALLTYPE *EndEvent )( - ID3D12VideoDecodeCommandList * This); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, DecodeFrame) - void ( STDMETHODCALLTYPE *DecodeFrame )( - ID3D12VideoDecodeCommandList * This, - _In_ ID3D12VideoDecoder *pDecoder, - _In_ const D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS *pOutputArguments, - _In_ const D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS *pInputArguments); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, WriteBufferImmediate) - void ( STDMETHODCALLTYPE *WriteBufferImmediate )( - ID3D12VideoDecodeCommandList * This, - UINT Count, - _In_reads_(Count) const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams, - _In_reads_opt_(Count) const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes); - - END_INTERFACE - } ID3D12VideoDecodeCommandListVtbl; - - interface ID3D12VideoDecodeCommandList - { - CONST_VTBL struct ID3D12VideoDecodeCommandListVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12VideoDecodeCommandList_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12VideoDecodeCommandList_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12VideoDecodeCommandList_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12VideoDecodeCommandList_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12VideoDecodeCommandList_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12VideoDecodeCommandList_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12VideoDecodeCommandList_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12VideoDecodeCommandList_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12VideoDecodeCommandList_GetType(This) \ - ( (This)->lpVtbl -> GetType(This) ) - -#define ID3D12VideoDecodeCommandList_Close(This) \ - ( (This)->lpVtbl -> Close(This) ) - -#define ID3D12VideoDecodeCommandList_Reset(This,pAllocator) \ - ( (This)->lpVtbl -> Reset(This,pAllocator) ) - -#define ID3D12VideoDecodeCommandList_ClearState(This) \ - ( (This)->lpVtbl -> ClearState(This) ) - -#define ID3D12VideoDecodeCommandList_ResourceBarrier(This,NumBarriers,pBarriers) \ - ( (This)->lpVtbl -> ResourceBarrier(This,NumBarriers,pBarriers) ) - -#define ID3D12VideoDecodeCommandList_DiscardResource(This,pResource,pRegion) \ - ( (This)->lpVtbl -> DiscardResource(This,pResource,pRegion) ) - -#define ID3D12VideoDecodeCommandList_BeginQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> BeginQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12VideoDecodeCommandList_EndQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> EndQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12VideoDecodeCommandList_ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) \ - ( (This)->lpVtbl -> ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) ) - -#define ID3D12VideoDecodeCommandList_SetPredication(This,pBuffer,AlignedBufferOffset,Operation) \ - ( (This)->lpVtbl -> SetPredication(This,pBuffer,AlignedBufferOffset,Operation) ) - -#define ID3D12VideoDecodeCommandList_SetMarker(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> SetMarker(This,Metadata,pData,Size) ) - -#define ID3D12VideoDecodeCommandList_BeginEvent(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> BeginEvent(This,Metadata,pData,Size) ) - -#define ID3D12VideoDecodeCommandList_EndEvent(This) \ - ( (This)->lpVtbl -> EndEvent(This) ) - -#define ID3D12VideoDecodeCommandList_DecodeFrame(This,pDecoder,pOutputArguments,pInputArguments) \ - ( (This)->lpVtbl -> DecodeFrame(This,pDecoder,pOutputArguments,pInputArguments) ) - -#define ID3D12VideoDecodeCommandList_WriteBufferImmediate(This,Count,pParams,pModes) \ - ( (This)->lpVtbl -> WriteBufferImmediate(This,Count,pParams,pModes) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12VideoDecodeCommandList_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12VideoProcessCommandList_INTERFACE_DEFINED__ -#define __ID3D12VideoProcessCommandList_INTERFACE_DEFINED__ - -/* interface ID3D12VideoProcessCommandList */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12VideoProcessCommandList; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("AEB2543A-167F-4682-ACC8-D159ED4A6209") - ID3D12VideoProcessCommandList : public ID3D12CommandList - { - public: - virtual HRESULT STDMETHODCALLTYPE Close( void) = 0; - - virtual HRESULT STDMETHODCALLTYPE Reset( - _In_ ID3D12CommandAllocator *pAllocator) = 0; - - virtual void STDMETHODCALLTYPE ClearState( void) = 0; - - virtual void STDMETHODCALLTYPE ResourceBarrier( - _In_ UINT NumBarriers, - _In_reads_(NumBarriers) const D3D12_RESOURCE_BARRIER *pBarriers) = 0; - - virtual void STDMETHODCALLTYPE DiscardResource( - _In_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DISCARD_REGION *pRegion) = 0; - - virtual void STDMETHODCALLTYPE BeginQuery( - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index) = 0; - - virtual void STDMETHODCALLTYPE EndQuery( - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index) = 0; - - virtual void STDMETHODCALLTYPE ResolveQueryData( - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT StartIndex, - _In_ UINT NumQueries, - _In_ ID3D12Resource *pDestinationBuffer, - _In_ UINT64 AlignedDestinationBufferOffset) = 0; - - virtual void STDMETHODCALLTYPE SetPredication( - _In_opt_ ID3D12Resource *pBuffer, - _In_ UINT64 AlignedBufferOffset, - _In_ D3D12_PREDICATION_OP Operation) = 0; - - virtual void STDMETHODCALLTYPE SetMarker( - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size) = 0; - - virtual void STDMETHODCALLTYPE BeginEvent( - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size) = 0; - - virtual void STDMETHODCALLTYPE EndEvent( void) = 0; - - virtual void STDMETHODCALLTYPE ProcessFrames( - _In_ ID3D12VideoProcessor *pVideoProcessor, - _In_ const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_ARGUMENTS *pOutputArguments, - UINT NumInputStreams, - _In_reads_(NumInputStreams) const D3D12_VIDEO_PROCESS_INPUT_STREAM_ARGUMENTS *pInputArguments) = 0; - - virtual void STDMETHODCALLTYPE WriteBufferImmediate( - UINT Count, - _In_reads_(Count) const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams, - _In_reads_opt_(Count) const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12VideoProcessCommandListVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12VideoProcessCommandList * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12VideoProcessCommandList * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12VideoProcessCommandList * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12VideoProcessCommandList * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12VideoProcessCommandList * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12VideoProcessCommandList * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12VideoProcessCommandList * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12VideoProcessCommandList * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12CommandList, GetType) - D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )( - ID3D12VideoProcessCommandList * This); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, Close) - HRESULT ( STDMETHODCALLTYPE *Close )( - ID3D12VideoProcessCommandList * This); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, Reset) - HRESULT ( STDMETHODCALLTYPE *Reset )( - ID3D12VideoProcessCommandList * This, - _In_ ID3D12CommandAllocator *pAllocator); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, ClearState) - void ( STDMETHODCALLTYPE *ClearState )( - ID3D12VideoProcessCommandList * This); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, ResourceBarrier) - void ( STDMETHODCALLTYPE *ResourceBarrier )( - ID3D12VideoProcessCommandList * This, - _In_ UINT NumBarriers, - _In_reads_(NumBarriers) const D3D12_RESOURCE_BARRIER *pBarriers); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, DiscardResource) - void ( STDMETHODCALLTYPE *DiscardResource )( - ID3D12VideoProcessCommandList * This, - _In_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DISCARD_REGION *pRegion); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, BeginQuery) - void ( STDMETHODCALLTYPE *BeginQuery )( - ID3D12VideoProcessCommandList * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, EndQuery) - void ( STDMETHODCALLTYPE *EndQuery )( - ID3D12VideoProcessCommandList * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, ResolveQueryData) - void ( STDMETHODCALLTYPE *ResolveQueryData )( - ID3D12VideoProcessCommandList * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT StartIndex, - _In_ UINT NumQueries, - _In_ ID3D12Resource *pDestinationBuffer, - _In_ UINT64 AlignedDestinationBufferOffset); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, SetPredication) - void ( STDMETHODCALLTYPE *SetPredication )( - ID3D12VideoProcessCommandList * This, - _In_opt_ ID3D12Resource *pBuffer, - _In_ UINT64 AlignedBufferOffset, - _In_ D3D12_PREDICATION_OP Operation); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, SetMarker) - void ( STDMETHODCALLTYPE *SetMarker )( - ID3D12VideoProcessCommandList * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, BeginEvent) - void ( STDMETHODCALLTYPE *BeginEvent )( - ID3D12VideoProcessCommandList * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, EndEvent) - void ( STDMETHODCALLTYPE *EndEvent )( - ID3D12VideoProcessCommandList * This); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, ProcessFrames) - void ( STDMETHODCALLTYPE *ProcessFrames )( - ID3D12VideoProcessCommandList * This, - _In_ ID3D12VideoProcessor *pVideoProcessor, - _In_ const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_ARGUMENTS *pOutputArguments, - UINT NumInputStreams, - _In_reads_(NumInputStreams) const D3D12_VIDEO_PROCESS_INPUT_STREAM_ARGUMENTS *pInputArguments); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, WriteBufferImmediate) - void ( STDMETHODCALLTYPE *WriteBufferImmediate )( - ID3D12VideoProcessCommandList * This, - UINT Count, - _In_reads_(Count) const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams, - _In_reads_opt_(Count) const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes); - - END_INTERFACE - } ID3D12VideoProcessCommandListVtbl; - - interface ID3D12VideoProcessCommandList - { - CONST_VTBL struct ID3D12VideoProcessCommandListVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12VideoProcessCommandList_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12VideoProcessCommandList_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12VideoProcessCommandList_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12VideoProcessCommandList_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12VideoProcessCommandList_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12VideoProcessCommandList_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12VideoProcessCommandList_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12VideoProcessCommandList_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12VideoProcessCommandList_GetType(This) \ - ( (This)->lpVtbl -> GetType(This) ) - -#define ID3D12VideoProcessCommandList_Close(This) \ - ( (This)->lpVtbl -> Close(This) ) - -#define ID3D12VideoProcessCommandList_Reset(This,pAllocator) \ - ( (This)->lpVtbl -> Reset(This,pAllocator) ) - -#define ID3D12VideoProcessCommandList_ClearState(This) \ - ( (This)->lpVtbl -> ClearState(This) ) - -#define ID3D12VideoProcessCommandList_ResourceBarrier(This,NumBarriers,pBarriers) \ - ( (This)->lpVtbl -> ResourceBarrier(This,NumBarriers,pBarriers) ) - -#define ID3D12VideoProcessCommandList_DiscardResource(This,pResource,pRegion) \ - ( (This)->lpVtbl -> DiscardResource(This,pResource,pRegion) ) - -#define ID3D12VideoProcessCommandList_BeginQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> BeginQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12VideoProcessCommandList_EndQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> EndQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12VideoProcessCommandList_ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) \ - ( (This)->lpVtbl -> ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) ) - -#define ID3D12VideoProcessCommandList_SetPredication(This,pBuffer,AlignedBufferOffset,Operation) \ - ( (This)->lpVtbl -> SetPredication(This,pBuffer,AlignedBufferOffset,Operation) ) - -#define ID3D12VideoProcessCommandList_SetMarker(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> SetMarker(This,Metadata,pData,Size) ) - -#define ID3D12VideoProcessCommandList_BeginEvent(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> BeginEvent(This,Metadata,pData,Size) ) - -#define ID3D12VideoProcessCommandList_EndEvent(This) \ - ( (This)->lpVtbl -> EndEvent(This) ) - -#define ID3D12VideoProcessCommandList_ProcessFrames(This,pVideoProcessor,pOutputArguments,NumInputStreams,pInputArguments) \ - ( (This)->lpVtbl -> ProcessFrames(This,pVideoProcessor,pOutputArguments,NumInputStreams,pInputArguments) ) - -#define ID3D12VideoProcessCommandList_WriteBufferImmediate(This,Count,pParams,pModes) \ - ( (This)->lpVtbl -> WriteBufferImmediate(This,Count,pParams,pModes) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12VideoProcessCommandList_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12video_0000_0006 */ -/* [local] */ - -typedef struct D3D12_VIDEO_DECODE_OUTPUT_HISTOGRAM - { - UINT64 Offset; - ID3D12Resource *pBuffer; - } D3D12_VIDEO_DECODE_OUTPUT_HISTOGRAM; - -typedef struct D3D12_VIDEO_DECODE_CONVERSION_ARGUMENTS1 - { - BOOL Enable; - ID3D12Resource *pReferenceTexture2D; - UINT ReferenceSubresource; - DXGI_COLOR_SPACE_TYPE OutputColorSpace; - DXGI_COLOR_SPACE_TYPE DecodeColorSpace; - UINT OutputWidth; - UINT OutputHeight; - } D3D12_VIDEO_DECODE_CONVERSION_ARGUMENTS1; - -typedef struct D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS1 - { - ID3D12Resource *pOutputTexture2D; - UINT OutputSubresource; - D3D12_VIDEO_DECODE_CONVERSION_ARGUMENTS1 ConversionArguments; - D3D12_VIDEO_DECODE_OUTPUT_HISTOGRAM Histograms[ 4 ]; - } D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS1; - -extern RPC_IF_HANDLE __MIDL_itf_d3d12video_0000_0006_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12video_0000_0006_v0_0_s_ifspec; - -#ifndef __ID3D12VideoDecodeCommandList1_INTERFACE_DEFINED__ -#define __ID3D12VideoDecodeCommandList1_INTERFACE_DEFINED__ - -/* interface ID3D12VideoDecodeCommandList1 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12VideoDecodeCommandList1; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("D52F011B-B56E-453C-A05A-A7F311C8F472") - ID3D12VideoDecodeCommandList1 : public ID3D12VideoDecodeCommandList - { - public: - virtual void STDMETHODCALLTYPE DecodeFrame1( - _In_ ID3D12VideoDecoder *pDecoder, - _In_ const D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS1 *pOutputArguments, - _In_ const D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS *pInputArguments) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12VideoDecodeCommandList1Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12VideoDecodeCommandList1 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12VideoDecodeCommandList1 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12VideoDecodeCommandList1 * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12VideoDecodeCommandList1 * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12VideoDecodeCommandList1 * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12VideoDecodeCommandList1 * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12VideoDecodeCommandList1 * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12VideoDecodeCommandList1 * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12CommandList, GetType) - D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )( - ID3D12VideoDecodeCommandList1 * This); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, Close) - HRESULT ( STDMETHODCALLTYPE *Close )( - ID3D12VideoDecodeCommandList1 * This); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, Reset) - HRESULT ( STDMETHODCALLTYPE *Reset )( - ID3D12VideoDecodeCommandList1 * This, - _In_ ID3D12CommandAllocator *pAllocator); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, ClearState) - void ( STDMETHODCALLTYPE *ClearState )( - ID3D12VideoDecodeCommandList1 * This); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, ResourceBarrier) - void ( STDMETHODCALLTYPE *ResourceBarrier )( - ID3D12VideoDecodeCommandList1 * This, - _In_ UINT NumBarriers, - _In_reads_(NumBarriers) const D3D12_RESOURCE_BARRIER *pBarriers); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, DiscardResource) - void ( STDMETHODCALLTYPE *DiscardResource )( - ID3D12VideoDecodeCommandList1 * This, - _In_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DISCARD_REGION *pRegion); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, BeginQuery) - void ( STDMETHODCALLTYPE *BeginQuery )( - ID3D12VideoDecodeCommandList1 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, EndQuery) - void ( STDMETHODCALLTYPE *EndQuery )( - ID3D12VideoDecodeCommandList1 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, ResolveQueryData) - void ( STDMETHODCALLTYPE *ResolveQueryData )( - ID3D12VideoDecodeCommandList1 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT StartIndex, - _In_ UINT NumQueries, - _In_ ID3D12Resource *pDestinationBuffer, - _In_ UINT64 AlignedDestinationBufferOffset); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, SetPredication) - void ( STDMETHODCALLTYPE *SetPredication )( - ID3D12VideoDecodeCommandList1 * This, - _In_opt_ ID3D12Resource *pBuffer, - _In_ UINT64 AlignedBufferOffset, - _In_ D3D12_PREDICATION_OP Operation); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, SetMarker) - void ( STDMETHODCALLTYPE *SetMarker )( - ID3D12VideoDecodeCommandList1 * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, BeginEvent) - void ( STDMETHODCALLTYPE *BeginEvent )( - ID3D12VideoDecodeCommandList1 * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, EndEvent) - void ( STDMETHODCALLTYPE *EndEvent )( - ID3D12VideoDecodeCommandList1 * This); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, DecodeFrame) - void ( STDMETHODCALLTYPE *DecodeFrame )( - ID3D12VideoDecodeCommandList1 * This, - _In_ ID3D12VideoDecoder *pDecoder, - _In_ const D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS *pOutputArguments, - _In_ const D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS *pInputArguments); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, WriteBufferImmediate) - void ( STDMETHODCALLTYPE *WriteBufferImmediate )( - ID3D12VideoDecodeCommandList1 * This, - UINT Count, - _In_reads_(Count) const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams, - _In_reads_opt_(Count) const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList1, DecodeFrame1) - void ( STDMETHODCALLTYPE *DecodeFrame1 )( - ID3D12VideoDecodeCommandList1 * This, - _In_ ID3D12VideoDecoder *pDecoder, - _In_ const D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS1 *pOutputArguments, - _In_ const D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS *pInputArguments); - - END_INTERFACE - } ID3D12VideoDecodeCommandList1Vtbl; - - interface ID3D12VideoDecodeCommandList1 - { - CONST_VTBL struct ID3D12VideoDecodeCommandList1Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12VideoDecodeCommandList1_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12VideoDecodeCommandList1_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12VideoDecodeCommandList1_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12VideoDecodeCommandList1_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12VideoDecodeCommandList1_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12VideoDecodeCommandList1_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12VideoDecodeCommandList1_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12VideoDecodeCommandList1_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12VideoDecodeCommandList1_GetType(This) \ - ( (This)->lpVtbl -> GetType(This) ) - -#define ID3D12VideoDecodeCommandList1_Close(This) \ - ( (This)->lpVtbl -> Close(This) ) - -#define ID3D12VideoDecodeCommandList1_Reset(This,pAllocator) \ - ( (This)->lpVtbl -> Reset(This,pAllocator) ) - -#define ID3D12VideoDecodeCommandList1_ClearState(This) \ - ( (This)->lpVtbl -> ClearState(This) ) - -#define ID3D12VideoDecodeCommandList1_ResourceBarrier(This,NumBarriers,pBarriers) \ - ( (This)->lpVtbl -> ResourceBarrier(This,NumBarriers,pBarriers) ) - -#define ID3D12VideoDecodeCommandList1_DiscardResource(This,pResource,pRegion) \ - ( (This)->lpVtbl -> DiscardResource(This,pResource,pRegion) ) - -#define ID3D12VideoDecodeCommandList1_BeginQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> BeginQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12VideoDecodeCommandList1_EndQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> EndQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12VideoDecodeCommandList1_ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) \ - ( (This)->lpVtbl -> ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) ) - -#define ID3D12VideoDecodeCommandList1_SetPredication(This,pBuffer,AlignedBufferOffset,Operation) \ - ( (This)->lpVtbl -> SetPredication(This,pBuffer,AlignedBufferOffset,Operation) ) - -#define ID3D12VideoDecodeCommandList1_SetMarker(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> SetMarker(This,Metadata,pData,Size) ) - -#define ID3D12VideoDecodeCommandList1_BeginEvent(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> BeginEvent(This,Metadata,pData,Size) ) - -#define ID3D12VideoDecodeCommandList1_EndEvent(This) \ - ( (This)->lpVtbl -> EndEvent(This) ) - -#define ID3D12VideoDecodeCommandList1_DecodeFrame(This,pDecoder,pOutputArguments,pInputArguments) \ - ( (This)->lpVtbl -> DecodeFrame(This,pDecoder,pOutputArguments,pInputArguments) ) - -#define ID3D12VideoDecodeCommandList1_WriteBufferImmediate(This,Count,pParams,pModes) \ - ( (This)->lpVtbl -> WriteBufferImmediate(This,Count,pParams,pModes) ) - -#define ID3D12VideoDecodeCommandList1_DecodeFrame1(This,pDecoder,pOutputArguments,pInputArguments) \ - ( (This)->lpVtbl -> DecodeFrame1(This,pDecoder,pOutputArguments,pInputArguments) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12VideoDecodeCommandList1_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12video_0000_0007 */ -/* [local] */ - -typedef struct D3D12_VIDEO_PROCESS_INPUT_STREAM_ARGUMENTS1 - { - D3D12_VIDEO_PROCESS_INPUT_STREAM InputStream[ 2 ]; - D3D12_VIDEO_PROCESS_TRANSFORM Transform; - D3D12_VIDEO_PROCESS_INPUT_STREAM_FLAGS Flags; - D3D12_VIDEO_PROCESS_INPUT_STREAM_RATE RateInfo; - INT FilterLevels[ 32 ]; - D3D12_VIDEO_PROCESS_ALPHA_BLENDING AlphaBlending; - D3D12_VIDEO_FIELD_TYPE FieldType; - } D3D12_VIDEO_PROCESS_INPUT_STREAM_ARGUMENTS1; - -extern RPC_IF_HANDLE __MIDL_itf_d3d12video_0000_0007_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12video_0000_0007_v0_0_s_ifspec; - -#ifndef __ID3D12VideoProcessCommandList1_INTERFACE_DEFINED__ -#define __ID3D12VideoProcessCommandList1_INTERFACE_DEFINED__ - -/* interface ID3D12VideoProcessCommandList1 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12VideoProcessCommandList1; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("542C5C4D-7596-434F-8C93-4EFA6766F267") - ID3D12VideoProcessCommandList1 : public ID3D12VideoProcessCommandList - { - public: - virtual void STDMETHODCALLTYPE ProcessFrames1( - _In_ ID3D12VideoProcessor *pVideoProcessor, - _In_ const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_ARGUMENTS *pOutputArguments, - UINT NumInputStreams, - _In_reads_(NumInputStreams) const D3D12_VIDEO_PROCESS_INPUT_STREAM_ARGUMENTS1 *pInputArguments) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12VideoProcessCommandList1Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12VideoProcessCommandList1 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12VideoProcessCommandList1 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12VideoProcessCommandList1 * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12VideoProcessCommandList1 * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12VideoProcessCommandList1 * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12VideoProcessCommandList1 * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12VideoProcessCommandList1 * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12VideoProcessCommandList1 * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12CommandList, GetType) - D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )( - ID3D12VideoProcessCommandList1 * This); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, Close) - HRESULT ( STDMETHODCALLTYPE *Close )( - ID3D12VideoProcessCommandList1 * This); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, Reset) - HRESULT ( STDMETHODCALLTYPE *Reset )( - ID3D12VideoProcessCommandList1 * This, - _In_ ID3D12CommandAllocator *pAllocator); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, ClearState) - void ( STDMETHODCALLTYPE *ClearState )( - ID3D12VideoProcessCommandList1 * This); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, ResourceBarrier) - void ( STDMETHODCALLTYPE *ResourceBarrier )( - ID3D12VideoProcessCommandList1 * This, - _In_ UINT NumBarriers, - _In_reads_(NumBarriers) const D3D12_RESOURCE_BARRIER *pBarriers); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, DiscardResource) - void ( STDMETHODCALLTYPE *DiscardResource )( - ID3D12VideoProcessCommandList1 * This, - _In_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DISCARD_REGION *pRegion); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, BeginQuery) - void ( STDMETHODCALLTYPE *BeginQuery )( - ID3D12VideoProcessCommandList1 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, EndQuery) - void ( STDMETHODCALLTYPE *EndQuery )( - ID3D12VideoProcessCommandList1 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, ResolveQueryData) - void ( STDMETHODCALLTYPE *ResolveQueryData )( - ID3D12VideoProcessCommandList1 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT StartIndex, - _In_ UINT NumQueries, - _In_ ID3D12Resource *pDestinationBuffer, - _In_ UINT64 AlignedDestinationBufferOffset); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, SetPredication) - void ( STDMETHODCALLTYPE *SetPredication )( - ID3D12VideoProcessCommandList1 * This, - _In_opt_ ID3D12Resource *pBuffer, - _In_ UINT64 AlignedBufferOffset, - _In_ D3D12_PREDICATION_OP Operation); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, SetMarker) - void ( STDMETHODCALLTYPE *SetMarker )( - ID3D12VideoProcessCommandList1 * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, BeginEvent) - void ( STDMETHODCALLTYPE *BeginEvent )( - ID3D12VideoProcessCommandList1 * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, EndEvent) - void ( STDMETHODCALLTYPE *EndEvent )( - ID3D12VideoProcessCommandList1 * This); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, ProcessFrames) - void ( STDMETHODCALLTYPE *ProcessFrames )( - ID3D12VideoProcessCommandList1 * This, - _In_ ID3D12VideoProcessor *pVideoProcessor, - _In_ const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_ARGUMENTS *pOutputArguments, - UINT NumInputStreams, - _In_reads_(NumInputStreams) const D3D12_VIDEO_PROCESS_INPUT_STREAM_ARGUMENTS *pInputArguments); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, WriteBufferImmediate) - void ( STDMETHODCALLTYPE *WriteBufferImmediate )( - ID3D12VideoProcessCommandList1 * This, - UINT Count, - _In_reads_(Count) const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams, - _In_reads_opt_(Count) const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList1, ProcessFrames1) - void ( STDMETHODCALLTYPE *ProcessFrames1 )( - ID3D12VideoProcessCommandList1 * This, - _In_ ID3D12VideoProcessor *pVideoProcessor, - _In_ const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_ARGUMENTS *pOutputArguments, - UINT NumInputStreams, - _In_reads_(NumInputStreams) const D3D12_VIDEO_PROCESS_INPUT_STREAM_ARGUMENTS1 *pInputArguments); - - END_INTERFACE - } ID3D12VideoProcessCommandList1Vtbl; - - interface ID3D12VideoProcessCommandList1 - { - CONST_VTBL struct ID3D12VideoProcessCommandList1Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12VideoProcessCommandList1_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12VideoProcessCommandList1_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12VideoProcessCommandList1_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12VideoProcessCommandList1_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12VideoProcessCommandList1_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12VideoProcessCommandList1_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12VideoProcessCommandList1_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12VideoProcessCommandList1_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12VideoProcessCommandList1_GetType(This) \ - ( (This)->lpVtbl -> GetType(This) ) - -#define ID3D12VideoProcessCommandList1_Close(This) \ - ( (This)->lpVtbl -> Close(This) ) - -#define ID3D12VideoProcessCommandList1_Reset(This,pAllocator) \ - ( (This)->lpVtbl -> Reset(This,pAllocator) ) - -#define ID3D12VideoProcessCommandList1_ClearState(This) \ - ( (This)->lpVtbl -> ClearState(This) ) - -#define ID3D12VideoProcessCommandList1_ResourceBarrier(This,NumBarriers,pBarriers) \ - ( (This)->lpVtbl -> ResourceBarrier(This,NumBarriers,pBarriers) ) - -#define ID3D12VideoProcessCommandList1_DiscardResource(This,pResource,pRegion) \ - ( (This)->lpVtbl -> DiscardResource(This,pResource,pRegion) ) - -#define ID3D12VideoProcessCommandList1_BeginQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> BeginQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12VideoProcessCommandList1_EndQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> EndQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12VideoProcessCommandList1_ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) \ - ( (This)->lpVtbl -> ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) ) - -#define ID3D12VideoProcessCommandList1_SetPredication(This,pBuffer,AlignedBufferOffset,Operation) \ - ( (This)->lpVtbl -> SetPredication(This,pBuffer,AlignedBufferOffset,Operation) ) - -#define ID3D12VideoProcessCommandList1_SetMarker(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> SetMarker(This,Metadata,pData,Size) ) - -#define ID3D12VideoProcessCommandList1_BeginEvent(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> BeginEvent(This,Metadata,pData,Size) ) - -#define ID3D12VideoProcessCommandList1_EndEvent(This) \ - ( (This)->lpVtbl -> EndEvent(This) ) - -#define ID3D12VideoProcessCommandList1_ProcessFrames(This,pVideoProcessor,pOutputArguments,NumInputStreams,pInputArguments) \ - ( (This)->lpVtbl -> ProcessFrames(This,pVideoProcessor,pOutputArguments,NumInputStreams,pInputArguments) ) - -#define ID3D12VideoProcessCommandList1_WriteBufferImmediate(This,Count,pParams,pModes) \ - ( (This)->lpVtbl -> WriteBufferImmediate(This,Count,pParams,pModes) ) - -#define ID3D12VideoProcessCommandList1_ProcessFrames1(This,pVideoProcessor,pOutputArguments,NumInputStreams,pInputArguments) \ - ( (This)->lpVtbl -> ProcessFrames1(This,pVideoProcessor,pOutputArguments,NumInputStreams,pInputArguments) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12VideoProcessCommandList1_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12video_0000_0008 */ -/* [local] */ - -typedef -enum D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE - { - D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_8X8 = 0, - D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_16X16 = 1 - } D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE; - -typedef -enum D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_FLAGS - { - D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_FLAG_NONE = 0, - D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_FLAG_8X8 = ( 1 << D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_8X8 ) , - D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_FLAG_16X16 = ( 1 << D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_16X16 ) - } D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_FLAGS ) -typedef -enum D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION - { - D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION_QUARTER_PEL = 0 - } D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION; - -typedef -enum D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION_FLAGS - { - D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION_FLAG_NONE = 0, - D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION_FLAG_QUARTER_PEL = ( 1 << D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION_QUARTER_PEL ) - } D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS( D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION_FLAGS ) -typedef struct D3D12_FEATURE_DATA_VIDEO_FEATURE_AREA_SUPPORT - { - UINT NodeIndex; - BOOL VideoDecodeSupport; - BOOL VideoProcessSupport; - BOOL VideoEncodeSupport; - } D3D12_FEATURE_DATA_VIDEO_FEATURE_AREA_SUPPORT; - -typedef struct D3D12_FEATURE_DATA_VIDEO_MOTION_ESTIMATOR - { - UINT NodeIndex; - DXGI_FORMAT InputFormat; - D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_FLAGS BlockSizeFlags; - D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION_FLAGS PrecisionFlags; - D3D12_VIDEO_SIZE_RANGE SizeRange; - } D3D12_FEATURE_DATA_VIDEO_MOTION_ESTIMATOR; - -typedef struct D3D12_FEATURE_DATA_VIDEO_MOTION_ESTIMATOR_SIZE - { - UINT NodeIndex; - DXGI_FORMAT InputFormat; - D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE BlockSize; - D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION Precision; - D3D12_VIDEO_SIZE_RANGE SizeRange; - BOOL Protected; - UINT64 MotionVectorHeapMemoryPoolL0Size; - UINT64 MotionVectorHeapMemoryPoolL1Size; - UINT64 MotionEstimatorMemoryPoolL0Size; - UINT64 MotionEstimatorMemoryPoolL1Size; - } D3D12_FEATURE_DATA_VIDEO_MOTION_ESTIMATOR_SIZE; - -typedef struct D3D12_VIDEO_MOTION_ESTIMATOR_DESC - { - UINT NodeMask; - DXGI_FORMAT InputFormat; - D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE BlockSize; - D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION Precision; - D3D12_VIDEO_SIZE_RANGE SizeRange; - } D3D12_VIDEO_MOTION_ESTIMATOR_DESC; - -extern RPC_IF_HANDLE __MIDL_itf_d3d12video_0000_0008_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12video_0000_0008_v0_0_s_ifspec; - -#ifndef __ID3D12VideoMotionEstimator_INTERFACE_DEFINED__ -#define __ID3D12VideoMotionEstimator_INTERFACE_DEFINED__ - -/* interface ID3D12VideoMotionEstimator */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12VideoMotionEstimator; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("33FDAE0E-098B-428F-87BB-34B695DE08F8") - ID3D12VideoMotionEstimator : public ID3D12Pageable - { - public: -#if defined(_MSC_VER) || !defined(_WIN32) - virtual D3D12_VIDEO_MOTION_ESTIMATOR_DESC STDMETHODCALLTYPE GetDesc( void) = 0; -#else - virtual D3D12_VIDEO_MOTION_ESTIMATOR_DESC *STDMETHODCALLTYPE GetDesc( - D3D12_VIDEO_MOTION_ESTIMATOR_DESC * RetVal) = 0; -#endif - - virtual HRESULT STDMETHODCALLTYPE GetProtectedResourceSession( - REFIID riid, - _COM_Outptr_opt_ void **ppProtectedSession) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12VideoMotionEstimatorVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12VideoMotionEstimator * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12VideoMotionEstimator * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12VideoMotionEstimator * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12VideoMotionEstimator * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12VideoMotionEstimator * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12VideoMotionEstimator * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12VideoMotionEstimator * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12VideoMotionEstimator * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12VideoMotionEstimator, GetDesc) -#if !defined(_WIN32) - D3D12_VIDEO_MOTION_ESTIMATOR_DESC ( STDMETHODCALLTYPE *GetDesc )( - ID3D12VideoMotionEstimator * This); - -#else - D3D12_VIDEO_MOTION_ESTIMATOR_DESC *( STDMETHODCALLTYPE *GetDesc )( - ID3D12VideoMotionEstimator * This, - D3D12_VIDEO_MOTION_ESTIMATOR_DESC * RetVal); - -#endif - - DECLSPEC_XFGVIRT(ID3D12VideoMotionEstimator, GetProtectedResourceSession) - HRESULT ( STDMETHODCALLTYPE *GetProtectedResourceSession )( - ID3D12VideoMotionEstimator * This, - REFIID riid, - _COM_Outptr_opt_ void **ppProtectedSession); - - END_INTERFACE - } ID3D12VideoMotionEstimatorVtbl; - - interface ID3D12VideoMotionEstimator - { - CONST_VTBL struct ID3D12VideoMotionEstimatorVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12VideoMotionEstimator_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12VideoMotionEstimator_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12VideoMotionEstimator_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12VideoMotionEstimator_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12VideoMotionEstimator_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12VideoMotionEstimator_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12VideoMotionEstimator_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12VideoMotionEstimator_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#if !defined(_WIN32) - -#define ID3D12VideoMotionEstimator_GetDesc(This) \ - ( (This)->lpVtbl -> GetDesc(This) ) -#else -#define ID3D12VideoMotionEstimator_GetDesc(This,RetVal) \ - ( (This)->lpVtbl -> GetDesc(This,RetVal) ) -#endif - -#define ID3D12VideoMotionEstimator_GetProtectedResourceSession(This,riid,ppProtectedSession) \ - ( (This)->lpVtbl -> GetProtectedResourceSession(This,riid,ppProtectedSession) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12VideoMotionEstimator_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12video_0000_0009 */ -/* [local] */ - -typedef struct D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC - { - UINT NodeMask; - DXGI_FORMAT InputFormat; - D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE BlockSize; - D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION Precision; - D3D12_VIDEO_SIZE_RANGE SizeRange; - } D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC; - -extern RPC_IF_HANDLE __MIDL_itf_d3d12video_0000_0009_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12video_0000_0009_v0_0_s_ifspec; - -#ifndef __ID3D12VideoMotionVectorHeap_INTERFACE_DEFINED__ -#define __ID3D12VideoMotionVectorHeap_INTERFACE_DEFINED__ - -/* interface ID3D12VideoMotionVectorHeap */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12VideoMotionVectorHeap; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("5BE17987-743A-4061-834B-23D22DAEA505") - ID3D12VideoMotionVectorHeap : public ID3D12Pageable - { - public: -#if defined(_MSC_VER) || !defined(_WIN32) - virtual D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC STDMETHODCALLTYPE GetDesc( void) = 0; -#else - virtual D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC *STDMETHODCALLTYPE GetDesc( - D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC * RetVal) = 0; -#endif - - virtual HRESULT STDMETHODCALLTYPE GetProtectedResourceSession( - REFIID riid, - _COM_Outptr_opt_ void **ppProtectedSession) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12VideoMotionVectorHeapVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12VideoMotionVectorHeap * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12VideoMotionVectorHeap * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12VideoMotionVectorHeap * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12VideoMotionVectorHeap * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12VideoMotionVectorHeap * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12VideoMotionVectorHeap * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12VideoMotionVectorHeap * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12VideoMotionVectorHeap * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12VideoMotionVectorHeap, GetDesc) -#if !defined(_WIN32) - D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC ( STDMETHODCALLTYPE *GetDesc )( - ID3D12VideoMotionVectorHeap * This); - -#else - D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC *( STDMETHODCALLTYPE *GetDesc )( - ID3D12VideoMotionVectorHeap * This, - D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC * RetVal); - -#endif - - DECLSPEC_XFGVIRT(ID3D12VideoMotionVectorHeap, GetProtectedResourceSession) - HRESULT ( STDMETHODCALLTYPE *GetProtectedResourceSession )( - ID3D12VideoMotionVectorHeap * This, - REFIID riid, - _COM_Outptr_opt_ void **ppProtectedSession); - - END_INTERFACE - } ID3D12VideoMotionVectorHeapVtbl; - - interface ID3D12VideoMotionVectorHeap - { - CONST_VTBL struct ID3D12VideoMotionVectorHeapVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12VideoMotionVectorHeap_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12VideoMotionVectorHeap_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12VideoMotionVectorHeap_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12VideoMotionVectorHeap_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12VideoMotionVectorHeap_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12VideoMotionVectorHeap_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12VideoMotionVectorHeap_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12VideoMotionVectorHeap_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#if !defined(_WIN32) - -#define ID3D12VideoMotionVectorHeap_GetDesc(This) \ - ( (This)->lpVtbl -> GetDesc(This) ) -#else -#define ID3D12VideoMotionVectorHeap_GetDesc(This,RetVal) \ - ( (This)->lpVtbl -> GetDesc(This,RetVal) ) -#endif - -#define ID3D12VideoMotionVectorHeap_GetProtectedResourceSession(This,riid,ppProtectedSession) \ - ( (This)->lpVtbl -> GetProtectedResourceSession(This,riid,ppProtectedSession) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12VideoMotionVectorHeap_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12VideoDevice1_INTERFACE_DEFINED__ -#define __ID3D12VideoDevice1_INTERFACE_DEFINED__ - -/* interface ID3D12VideoDevice1 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12VideoDevice1; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("981611AD-A144-4C83-9890-F30E26D658AB") - ID3D12VideoDevice1 : public ID3D12VideoDevice - { - public: - virtual HRESULT STDMETHODCALLTYPE CreateVideoMotionEstimator( - _In_ const D3D12_VIDEO_MOTION_ESTIMATOR_DESC *pDesc, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession, - _In_ REFIID riid, - _COM_Outptr_ void **ppVideoMotionEstimator) = 0; - - virtual HRESULT STDMETHODCALLTYPE CreateVideoMotionVectorHeap( - _In_ const D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC *pDesc, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession, - _In_ REFIID riid, - _COM_Outptr_ void **ppVideoMotionVectorHeap) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12VideoDevice1Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12VideoDevice1 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12VideoDevice1 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12VideoDevice1 * This); - - DECLSPEC_XFGVIRT(ID3D12VideoDevice, CheckFeatureSupport) - HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )( - ID3D12VideoDevice1 * This, - D3D12_FEATURE_VIDEO FeatureVideo, - _Inout_updates_bytes_(FeatureSupportDataSize) void *pFeatureSupportData, - UINT FeatureSupportDataSize); - - DECLSPEC_XFGVIRT(ID3D12VideoDevice, CreateVideoDecoder) - HRESULT ( STDMETHODCALLTYPE *CreateVideoDecoder )( - ID3D12VideoDevice1 * This, - _In_ const D3D12_VIDEO_DECODER_DESC *pDesc, - _In_ REFIID riid, - _COM_Outptr_ void **ppVideoDecoder); - - DECLSPEC_XFGVIRT(ID3D12VideoDevice, CreateVideoDecoderHeap) - HRESULT ( STDMETHODCALLTYPE *CreateVideoDecoderHeap )( - ID3D12VideoDevice1 * This, - _In_ const D3D12_VIDEO_DECODER_HEAP_DESC *pVideoDecoderHeapDesc, - _In_ REFIID riid, - _COM_Outptr_ void **ppVideoDecoderHeap); - - DECLSPEC_XFGVIRT(ID3D12VideoDevice, CreateVideoProcessor) - HRESULT ( STDMETHODCALLTYPE *CreateVideoProcessor )( - ID3D12VideoDevice1 * This, - UINT NodeMask, - _In_ const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC *pOutputStreamDesc, - UINT NumInputStreamDescs, - _In_reads_(NumInputStreamDescs) const D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *pInputStreamDescs, - _In_ REFIID riid, - _COM_Outptr_ void **ppVideoProcessor); - - DECLSPEC_XFGVIRT(ID3D12VideoDevice1, CreateVideoMotionEstimator) - HRESULT ( STDMETHODCALLTYPE *CreateVideoMotionEstimator )( - ID3D12VideoDevice1 * This, - _In_ const D3D12_VIDEO_MOTION_ESTIMATOR_DESC *pDesc, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession, - _In_ REFIID riid, - _COM_Outptr_ void **ppVideoMotionEstimator); - - DECLSPEC_XFGVIRT(ID3D12VideoDevice1, CreateVideoMotionVectorHeap) - HRESULT ( STDMETHODCALLTYPE *CreateVideoMotionVectorHeap )( - ID3D12VideoDevice1 * This, - _In_ const D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC *pDesc, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession, - _In_ REFIID riid, - _COM_Outptr_ void **ppVideoMotionVectorHeap); - - END_INTERFACE - } ID3D12VideoDevice1Vtbl; - - interface ID3D12VideoDevice1 - { - CONST_VTBL struct ID3D12VideoDevice1Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12VideoDevice1_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12VideoDevice1_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12VideoDevice1_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12VideoDevice1_CheckFeatureSupport(This,FeatureVideo,pFeatureSupportData,FeatureSupportDataSize) \ - ( (This)->lpVtbl -> CheckFeatureSupport(This,FeatureVideo,pFeatureSupportData,FeatureSupportDataSize) ) - -#define ID3D12VideoDevice1_CreateVideoDecoder(This,pDesc,riid,ppVideoDecoder) \ - ( (This)->lpVtbl -> CreateVideoDecoder(This,pDesc,riid,ppVideoDecoder) ) - -#define ID3D12VideoDevice1_CreateVideoDecoderHeap(This,pVideoDecoderHeapDesc,riid,ppVideoDecoderHeap) \ - ( (This)->lpVtbl -> CreateVideoDecoderHeap(This,pVideoDecoderHeapDesc,riid,ppVideoDecoderHeap) ) - -#define ID3D12VideoDevice1_CreateVideoProcessor(This,NodeMask,pOutputStreamDesc,NumInputStreamDescs,pInputStreamDescs,riid,ppVideoProcessor) \ - ( (This)->lpVtbl -> CreateVideoProcessor(This,NodeMask,pOutputStreamDesc,NumInputStreamDescs,pInputStreamDescs,riid,ppVideoProcessor) ) - -#define ID3D12VideoDevice1_CreateVideoMotionEstimator(This,pDesc,pProtectedResourceSession,riid,ppVideoMotionEstimator) \ - ( (This)->lpVtbl -> CreateVideoMotionEstimator(This,pDesc,pProtectedResourceSession,riid,ppVideoMotionEstimator) ) - -#define ID3D12VideoDevice1_CreateVideoMotionVectorHeap(This,pDesc,pProtectedResourceSession,riid,ppVideoMotionVectorHeap) \ - ( (This)->lpVtbl -> CreateVideoMotionVectorHeap(This,pDesc,pProtectedResourceSession,riid,ppVideoMotionVectorHeap) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12VideoDevice1_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12video_0000_0011 */ -/* [local] */ - -typedef struct D3D12_RESOURCE_COORDINATE - { - UINT64 X; - UINT Y; - UINT Z; - UINT SubresourceIndex; - } D3D12_RESOURCE_COORDINATE; - -typedef struct D3D12_VIDEO_MOTION_ESTIMATOR_OUTPUT - { - ID3D12VideoMotionVectorHeap *pMotionVectorHeap; - } D3D12_VIDEO_MOTION_ESTIMATOR_OUTPUT; - -typedef struct D3D12_VIDEO_MOTION_ESTIMATOR_INPUT - { - ID3D12Resource *pInputTexture2D; - UINT InputSubresourceIndex; - ID3D12Resource *pReferenceTexture2D; - UINT ReferenceSubresourceIndex; - ID3D12VideoMotionVectorHeap *pHintMotionVectorHeap; - } D3D12_VIDEO_MOTION_ESTIMATOR_INPUT; - -typedef struct D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_OUTPUT - { - ID3D12Resource *pMotionVectorTexture2D; - D3D12_RESOURCE_COORDINATE MotionVectorCoordinate; - } D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_OUTPUT; - -typedef struct D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_INPUT - { - ID3D12VideoMotionVectorHeap *pMotionVectorHeap; - UINT PixelWidth; - UINT PixelHeight; - } D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_INPUT; - -extern RPC_IF_HANDLE __MIDL_itf_d3d12video_0000_0011_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12video_0000_0011_v0_0_s_ifspec; - -#ifndef __ID3D12VideoEncodeCommandList_INTERFACE_DEFINED__ -#define __ID3D12VideoEncodeCommandList_INTERFACE_DEFINED__ - -/* interface ID3D12VideoEncodeCommandList */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12VideoEncodeCommandList; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("8455293A-0CBD-4831-9B39-FBDBAB724723") - ID3D12VideoEncodeCommandList : public ID3D12CommandList - { - public: - virtual HRESULT STDMETHODCALLTYPE Close( void) = 0; - - virtual HRESULT STDMETHODCALLTYPE Reset( - _In_ ID3D12CommandAllocator *pAllocator) = 0; - - virtual void STDMETHODCALLTYPE ClearState( void) = 0; - - virtual void STDMETHODCALLTYPE ResourceBarrier( - _In_ UINT NumBarriers, - _In_reads_(NumBarriers) const D3D12_RESOURCE_BARRIER *pBarriers) = 0; - - virtual void STDMETHODCALLTYPE DiscardResource( - _In_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DISCARD_REGION *pRegion) = 0; - - virtual void STDMETHODCALLTYPE BeginQuery( - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index) = 0; - - virtual void STDMETHODCALLTYPE EndQuery( - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index) = 0; - - virtual void STDMETHODCALLTYPE ResolveQueryData( - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT StartIndex, - _In_ UINT NumQueries, - _In_ ID3D12Resource *pDestinationBuffer, - _In_ UINT64 AlignedDestinationBufferOffset) = 0; - - virtual void STDMETHODCALLTYPE SetPredication( - _In_opt_ ID3D12Resource *pBuffer, - _In_ UINT64 AlignedBufferOffset, - _In_ D3D12_PREDICATION_OP Operation) = 0; - - virtual void STDMETHODCALLTYPE SetMarker( - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size) = 0; - - virtual void STDMETHODCALLTYPE BeginEvent( - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size) = 0; - - virtual void STDMETHODCALLTYPE EndEvent( void) = 0; - - virtual void STDMETHODCALLTYPE EstimateMotion( - _In_ ID3D12VideoMotionEstimator *pMotionEstimator, - _In_ const D3D12_VIDEO_MOTION_ESTIMATOR_OUTPUT *pOutputArguments, - _In_ const D3D12_VIDEO_MOTION_ESTIMATOR_INPUT *pInputArguments) = 0; - - virtual void STDMETHODCALLTYPE ResolveMotionVectorHeap( - const D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_OUTPUT *pOutputArguments, - const D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_INPUT *pInputArguments) = 0; - - virtual void STDMETHODCALLTYPE WriteBufferImmediate( - UINT Count, - _In_reads_(Count) const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams, - _In_reads_opt_(Count) const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes) = 0; - - virtual void STDMETHODCALLTYPE SetProtectedResourceSession( - _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12VideoEncodeCommandListVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12VideoEncodeCommandList * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12VideoEncodeCommandList * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12VideoEncodeCommandList * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12VideoEncodeCommandList * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12VideoEncodeCommandList * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12VideoEncodeCommandList * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12VideoEncodeCommandList * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12VideoEncodeCommandList * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12CommandList, GetType) - D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )( - ID3D12VideoEncodeCommandList * This); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, Close) - HRESULT ( STDMETHODCALLTYPE *Close )( - ID3D12VideoEncodeCommandList * This); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, Reset) - HRESULT ( STDMETHODCALLTYPE *Reset )( - ID3D12VideoEncodeCommandList * This, - _In_ ID3D12CommandAllocator *pAllocator); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, ClearState) - void ( STDMETHODCALLTYPE *ClearState )( - ID3D12VideoEncodeCommandList * This); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, ResourceBarrier) - void ( STDMETHODCALLTYPE *ResourceBarrier )( - ID3D12VideoEncodeCommandList * This, - _In_ UINT NumBarriers, - _In_reads_(NumBarriers) const D3D12_RESOURCE_BARRIER *pBarriers); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, DiscardResource) - void ( STDMETHODCALLTYPE *DiscardResource )( - ID3D12VideoEncodeCommandList * This, - _In_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DISCARD_REGION *pRegion); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, BeginQuery) - void ( STDMETHODCALLTYPE *BeginQuery )( - ID3D12VideoEncodeCommandList * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, EndQuery) - void ( STDMETHODCALLTYPE *EndQuery )( - ID3D12VideoEncodeCommandList * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, ResolveQueryData) - void ( STDMETHODCALLTYPE *ResolveQueryData )( - ID3D12VideoEncodeCommandList * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT StartIndex, - _In_ UINT NumQueries, - _In_ ID3D12Resource *pDestinationBuffer, - _In_ UINT64 AlignedDestinationBufferOffset); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, SetPredication) - void ( STDMETHODCALLTYPE *SetPredication )( - ID3D12VideoEncodeCommandList * This, - _In_opt_ ID3D12Resource *pBuffer, - _In_ UINT64 AlignedBufferOffset, - _In_ D3D12_PREDICATION_OP Operation); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, SetMarker) - void ( STDMETHODCALLTYPE *SetMarker )( - ID3D12VideoEncodeCommandList * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, BeginEvent) - void ( STDMETHODCALLTYPE *BeginEvent )( - ID3D12VideoEncodeCommandList * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, EndEvent) - void ( STDMETHODCALLTYPE *EndEvent )( - ID3D12VideoEncodeCommandList * This); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, EstimateMotion) - void ( STDMETHODCALLTYPE *EstimateMotion )( - ID3D12VideoEncodeCommandList * This, - _In_ ID3D12VideoMotionEstimator *pMotionEstimator, - _In_ const D3D12_VIDEO_MOTION_ESTIMATOR_OUTPUT *pOutputArguments, - _In_ const D3D12_VIDEO_MOTION_ESTIMATOR_INPUT *pInputArguments); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, ResolveMotionVectorHeap) - void ( STDMETHODCALLTYPE *ResolveMotionVectorHeap )( - ID3D12VideoEncodeCommandList * This, - const D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_OUTPUT *pOutputArguments, - const D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_INPUT *pInputArguments); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, WriteBufferImmediate) - void ( STDMETHODCALLTYPE *WriteBufferImmediate )( - ID3D12VideoEncodeCommandList * This, - UINT Count, - _In_reads_(Count) const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams, - _In_reads_opt_(Count) const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, SetProtectedResourceSession) - void ( STDMETHODCALLTYPE *SetProtectedResourceSession )( - ID3D12VideoEncodeCommandList * This, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession); - - END_INTERFACE - } ID3D12VideoEncodeCommandListVtbl; - - interface ID3D12VideoEncodeCommandList - { - CONST_VTBL struct ID3D12VideoEncodeCommandListVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12VideoEncodeCommandList_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12VideoEncodeCommandList_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12VideoEncodeCommandList_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12VideoEncodeCommandList_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12VideoEncodeCommandList_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12VideoEncodeCommandList_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12VideoEncodeCommandList_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12VideoEncodeCommandList_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12VideoEncodeCommandList_GetType(This) \ - ( (This)->lpVtbl -> GetType(This) ) - -#define ID3D12VideoEncodeCommandList_Close(This) \ - ( (This)->lpVtbl -> Close(This) ) - -#define ID3D12VideoEncodeCommandList_Reset(This,pAllocator) \ - ( (This)->lpVtbl -> Reset(This,pAllocator) ) - -#define ID3D12VideoEncodeCommandList_ClearState(This) \ - ( (This)->lpVtbl -> ClearState(This) ) - -#define ID3D12VideoEncodeCommandList_ResourceBarrier(This,NumBarriers,pBarriers) \ - ( (This)->lpVtbl -> ResourceBarrier(This,NumBarriers,pBarriers) ) - -#define ID3D12VideoEncodeCommandList_DiscardResource(This,pResource,pRegion) \ - ( (This)->lpVtbl -> DiscardResource(This,pResource,pRegion) ) - -#define ID3D12VideoEncodeCommandList_BeginQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> BeginQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12VideoEncodeCommandList_EndQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> EndQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12VideoEncodeCommandList_ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) \ - ( (This)->lpVtbl -> ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) ) - -#define ID3D12VideoEncodeCommandList_SetPredication(This,pBuffer,AlignedBufferOffset,Operation) \ - ( (This)->lpVtbl -> SetPredication(This,pBuffer,AlignedBufferOffset,Operation) ) - -#define ID3D12VideoEncodeCommandList_SetMarker(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> SetMarker(This,Metadata,pData,Size) ) - -#define ID3D12VideoEncodeCommandList_BeginEvent(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> BeginEvent(This,Metadata,pData,Size) ) - -#define ID3D12VideoEncodeCommandList_EndEvent(This) \ - ( (This)->lpVtbl -> EndEvent(This) ) - -#define ID3D12VideoEncodeCommandList_EstimateMotion(This,pMotionEstimator,pOutputArguments,pInputArguments) \ - ( (This)->lpVtbl -> EstimateMotion(This,pMotionEstimator,pOutputArguments,pInputArguments) ) - -#define ID3D12VideoEncodeCommandList_ResolveMotionVectorHeap(This,pOutputArguments,pInputArguments) \ - ( (This)->lpVtbl -> ResolveMotionVectorHeap(This,pOutputArguments,pInputArguments) ) - -#define ID3D12VideoEncodeCommandList_WriteBufferImmediate(This,Count,pParams,pModes) \ - ( (This)->lpVtbl -> WriteBufferImmediate(This,Count,pParams,pModes) ) - -#define ID3D12VideoEncodeCommandList_SetProtectedResourceSession(This,pProtectedResourceSession) \ - ( (This)->lpVtbl -> SetProtectedResourceSession(This,pProtectedResourceSession) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12VideoEncodeCommandList_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12video_0000_0012 */ -/* [local] */ - -typedef -enum D3D12_VIDEO_PROTECTED_RESOURCE_SUPPORT_FLAGS - { - D3D12_VIDEO_PROTECTED_RESOURCE_SUPPORT_FLAG_NONE = 0, - D3D12_VIDEO_PROTECTED_RESOURCE_SUPPORT_FLAG_SUPPORTED = 0x1 - } D3D12_VIDEO_PROTECTED_RESOURCE_SUPPORT_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROTECTED_RESOURCE_SUPPORT_FLAGS ) -typedef struct D3D12_FEATURE_DATA_VIDEO_DECODE_PROTECTED_RESOURCES - { - UINT NodeIndex; - D3D12_VIDEO_DECODE_CONFIGURATION Configuration; - D3D12_VIDEO_PROTECTED_RESOURCE_SUPPORT_FLAGS SupportFlags; - } D3D12_FEATURE_DATA_VIDEO_DECODE_PROTECTED_RESOURCES; - -typedef struct D3D12_FEATURE_DATA_VIDEO_PROCESS_PROTECTED_RESOURCES - { - UINT NodeIndex; - D3D12_VIDEO_PROTECTED_RESOURCE_SUPPORT_FLAGS SupportFlags; - } D3D12_FEATURE_DATA_VIDEO_PROCESS_PROTECTED_RESOURCES; - -typedef struct D3D12_FEATURE_DATA_VIDEO_MOTION_ESTIMATOR_PROTECTED_RESOURCES - { - UINT NodeIndex; - D3D12_VIDEO_PROTECTED_RESOURCE_SUPPORT_FLAGS SupportFlags; - } D3D12_FEATURE_DATA_VIDEO_MOTION_ESTIMATOR_PROTECTED_RESOURCES; - -typedef struct D3D12_FEATURE_DATA_VIDEO_DECODER_HEAP_SIZE1 - { - D3D12_VIDEO_DECODER_HEAP_DESC VideoDecoderHeapDesc; - BOOL Protected; - UINT64 MemoryPoolL0Size; - UINT64 MemoryPoolL1Size; - } D3D12_FEATURE_DATA_VIDEO_DECODER_HEAP_SIZE1; - -typedef struct D3D12_FEATURE_DATA_VIDEO_PROCESSOR_SIZE1 - { - UINT NodeMask; - const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC *pOutputStreamDesc; - UINT NumInputStreamDescs; - const D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *pInputStreamDescs; - BOOL Protected; - UINT64 MemoryPoolL0Size; - UINT64 MemoryPoolL1Size; - } D3D12_FEATURE_DATA_VIDEO_PROCESSOR_SIZE1; - -typedef -enum D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE - { - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE_CREATION = 0, - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE_INITIALIZATION = 1, - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE_EXECUTION = 2, - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE_CAPS_INPUT = 3, - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE_CAPS_OUTPUT = 4, - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE_DEVICE_EXECUTE_INPUT = 5, - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE_DEVICE_EXECUTE_OUTPUT = 6 - } D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE; - -typedef -enum D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE - { - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_UINT8 = 0, - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_UINT16 = 1, - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_UINT32 = 2, - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_UINT64 = 3, - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_SINT8 = 4, - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_SINT16 = 5, - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_SINT32 = 6, - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_SINT64 = 7, - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_FLOAT = 8, - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_DOUBLE = 9, - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_RESOURCE = 10 - } D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE; - -typedef -enum D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_FLAGS - { - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_FLAG_NONE = 0, - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_FLAG_READ = 0x1, - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_FLAG_WRITE = 0x2 - } D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_FLAGS ) -typedef struct D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMAND_COUNT - { - UINT NodeIndex; - UINT CommandCount; - } D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMAND_COUNT; - -typedef struct D3D12_VIDEO_EXTENSION_COMMAND_INFO - { - GUID CommandId; - LPCWSTR Name; - D3D12_COMMAND_LIST_SUPPORT_FLAGS CommandListSupportFlags; - } D3D12_VIDEO_EXTENSION_COMMAND_INFO; - -typedef struct D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMANDS - { - UINT NodeIndex; - UINT CommandCount; - _Field_size_full_(CommandCount) D3D12_VIDEO_EXTENSION_COMMAND_INFO *pCommandInfos; - } D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMANDS; - -typedef struct D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMAND_PARAMETER_COUNT - { - GUID CommandId; - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE Stage; - UINT ParameterCount; - UINT ParameterPacking; - } D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMAND_PARAMETER_COUNT; - -typedef struct D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_INFO - { - LPCWSTR Name; - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE Type; - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_FLAGS Flags; - } D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_INFO; - -typedef struct D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMAND_PARAMETERS - { - GUID CommandId; - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE Stage; - UINT ParameterCount; - _Field_size_full_(ParameterCount) D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_INFO *pParameterInfos; - } D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMAND_PARAMETERS; - -typedef struct D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMAND_SUPPORT - { - UINT NodeIndex; - GUID CommandId; - _Field_size_bytes_full_opt_(InputDataSizeInBytes) const void *pInputData; - SIZE_T InputDataSizeInBytes; - _Field_size_bytes_full_opt_(OutputDataSizeInBytes) void *pOutputData; - SIZE_T OutputDataSizeInBytes; - } D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMAND_SUPPORT; - -typedef struct D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMAND_SIZE - { - UINT NodeIndex; - GUID CommandId; - _Field_size_bytes_full_(CreationParametersDataSizeInBytes) const void *pCreationParameters; - SIZE_T CreationParametersSizeInBytes; - UINT64 MemoryPoolL0Size; - UINT64 MemoryPoolL1Size; - } D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMAND_SIZE; - -typedef struct D3D12_VIDEO_EXTENSION_COMMAND_DESC - { - UINT NodeMask; - GUID CommandId; - } D3D12_VIDEO_EXTENSION_COMMAND_DESC; - -extern RPC_IF_HANDLE __MIDL_itf_d3d12video_0000_0012_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12video_0000_0012_v0_0_s_ifspec; - -#ifndef __ID3D12VideoDecoder1_INTERFACE_DEFINED__ -#define __ID3D12VideoDecoder1_INTERFACE_DEFINED__ - -/* interface ID3D12VideoDecoder1 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12VideoDecoder1; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("79A2E5FB-CCD2-469A-9FDE-195D10951F7E") - ID3D12VideoDecoder1 : public ID3D12VideoDecoder - { - public: - virtual HRESULT STDMETHODCALLTYPE GetProtectedResourceSession( - REFIID riid, - _COM_Outptr_opt_ void **ppProtectedSession) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12VideoDecoder1Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12VideoDecoder1 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12VideoDecoder1 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12VideoDecoder1 * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12VideoDecoder1 * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12VideoDecoder1 * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12VideoDecoder1 * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12VideoDecoder1 * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12VideoDecoder1 * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12VideoDecoder, GetDesc) -#if !defined(_WIN32) - D3D12_VIDEO_DECODER_DESC ( STDMETHODCALLTYPE *GetDesc )( - ID3D12VideoDecoder1 * This); - -#else - D3D12_VIDEO_DECODER_DESC *( STDMETHODCALLTYPE *GetDesc )( - ID3D12VideoDecoder1 * This, - D3D12_VIDEO_DECODER_DESC * RetVal); - -#endif - - DECLSPEC_XFGVIRT(ID3D12VideoDecoder1, GetProtectedResourceSession) - HRESULT ( STDMETHODCALLTYPE *GetProtectedResourceSession )( - ID3D12VideoDecoder1 * This, - REFIID riid, - _COM_Outptr_opt_ void **ppProtectedSession); - - END_INTERFACE - } ID3D12VideoDecoder1Vtbl; - - interface ID3D12VideoDecoder1 - { - CONST_VTBL struct ID3D12VideoDecoder1Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12VideoDecoder1_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12VideoDecoder1_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12VideoDecoder1_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12VideoDecoder1_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12VideoDecoder1_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12VideoDecoder1_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12VideoDecoder1_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12VideoDecoder1_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#if !defined(_WIN32) - -#define ID3D12VideoDecoder1_GetDesc(This) \ - ( (This)->lpVtbl -> GetDesc(This) ) -#else -#define ID3D12VideoDecoder1_GetDesc(This,RetVal) \ - ( (This)->lpVtbl -> GetDesc(This,RetVal) ) -#endif - -#define ID3D12VideoDecoder1_GetProtectedResourceSession(This,riid,ppProtectedSession) \ - ( (This)->lpVtbl -> GetProtectedResourceSession(This,riid,ppProtectedSession) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12VideoDecoder1_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12VideoDecoderHeap1_INTERFACE_DEFINED__ -#define __ID3D12VideoDecoderHeap1_INTERFACE_DEFINED__ - -/* interface ID3D12VideoDecoderHeap1 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12VideoDecoderHeap1; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("DA1D98C5-539F-41B2-BF6B-1198A03B6D26") - ID3D12VideoDecoderHeap1 : public ID3D12VideoDecoderHeap - { - public: - virtual HRESULT STDMETHODCALLTYPE GetProtectedResourceSession( - REFIID riid, - _COM_Outptr_opt_ void **ppProtectedSession) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12VideoDecoderHeap1Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12VideoDecoderHeap1 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12VideoDecoderHeap1 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12VideoDecoderHeap1 * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12VideoDecoderHeap1 * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12VideoDecoderHeap1 * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12VideoDecoderHeap1 * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12VideoDecoderHeap1 * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12VideoDecoderHeap1 * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12VideoDecoderHeap, GetDesc) -#if !defined(_WIN32) - D3D12_VIDEO_DECODER_HEAP_DESC ( STDMETHODCALLTYPE *GetDesc )( - ID3D12VideoDecoderHeap1 * This); - -#else - D3D12_VIDEO_DECODER_HEAP_DESC *( STDMETHODCALLTYPE *GetDesc )( - ID3D12VideoDecoderHeap1 * This, - D3D12_VIDEO_DECODER_HEAP_DESC * RetVal); - -#endif - - DECLSPEC_XFGVIRT(ID3D12VideoDecoderHeap1, GetProtectedResourceSession) - HRESULT ( STDMETHODCALLTYPE *GetProtectedResourceSession )( - ID3D12VideoDecoderHeap1 * This, - REFIID riid, - _COM_Outptr_opt_ void **ppProtectedSession); - - END_INTERFACE - } ID3D12VideoDecoderHeap1Vtbl; - - interface ID3D12VideoDecoderHeap1 - { - CONST_VTBL struct ID3D12VideoDecoderHeap1Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12VideoDecoderHeap1_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12VideoDecoderHeap1_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12VideoDecoderHeap1_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12VideoDecoderHeap1_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12VideoDecoderHeap1_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12VideoDecoderHeap1_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12VideoDecoderHeap1_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12VideoDecoderHeap1_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#if !defined(_WIN32) - -#define ID3D12VideoDecoderHeap1_GetDesc(This) \ - ( (This)->lpVtbl -> GetDesc(This) ) -#else -#define ID3D12VideoDecoderHeap1_GetDesc(This,RetVal) \ - ( (This)->lpVtbl -> GetDesc(This,RetVal) ) -#endif - -#define ID3D12VideoDecoderHeap1_GetProtectedResourceSession(This,riid,ppProtectedSession) \ - ( (This)->lpVtbl -> GetProtectedResourceSession(This,riid,ppProtectedSession) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12VideoDecoderHeap1_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12VideoProcessor1_INTERFACE_DEFINED__ -#define __ID3D12VideoProcessor1_INTERFACE_DEFINED__ - -/* interface ID3D12VideoProcessor1 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12VideoProcessor1; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("F3CFE615-553F-425C-86D8-EE8C1B1FB01C") - ID3D12VideoProcessor1 : public ID3D12VideoProcessor - { - public: - virtual HRESULT STDMETHODCALLTYPE GetProtectedResourceSession( - REFIID riid, - _COM_Outptr_opt_ void **ppProtectedSession) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12VideoProcessor1Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12VideoProcessor1 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12VideoProcessor1 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12VideoProcessor1 * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12VideoProcessor1 * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12VideoProcessor1 * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12VideoProcessor1 * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12VideoProcessor1 * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12VideoProcessor1 * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessor, GetNodeMask) - UINT ( STDMETHODCALLTYPE *GetNodeMask )( - ID3D12VideoProcessor1 * This); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessor, GetNumInputStreamDescs) - UINT ( STDMETHODCALLTYPE *GetNumInputStreamDescs )( - ID3D12VideoProcessor1 * This); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessor, GetInputStreamDescs) - HRESULT ( STDMETHODCALLTYPE *GetInputStreamDescs )( - ID3D12VideoProcessor1 * This, - UINT NumInputStreamDescs, - _Out_writes_(NumInputStreamDescs) D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *pInputStreamDescs); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessor, GetOutputStreamDesc) -#if !defined(_WIN32) - D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC ( STDMETHODCALLTYPE *GetOutputStreamDesc )( - ID3D12VideoProcessor1 * This); - -#else - D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC *( STDMETHODCALLTYPE *GetOutputStreamDesc )( - ID3D12VideoProcessor1 * This, - D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC * RetVal); - -#endif - - DECLSPEC_XFGVIRT(ID3D12VideoProcessor1, GetProtectedResourceSession) - HRESULT ( STDMETHODCALLTYPE *GetProtectedResourceSession )( - ID3D12VideoProcessor1 * This, - REFIID riid, - _COM_Outptr_opt_ void **ppProtectedSession); - - END_INTERFACE - } ID3D12VideoProcessor1Vtbl; - - interface ID3D12VideoProcessor1 - { - CONST_VTBL struct ID3D12VideoProcessor1Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12VideoProcessor1_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12VideoProcessor1_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12VideoProcessor1_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12VideoProcessor1_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12VideoProcessor1_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12VideoProcessor1_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12VideoProcessor1_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12VideoProcessor1_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12VideoProcessor1_GetNodeMask(This) \ - ( (This)->lpVtbl -> GetNodeMask(This) ) - -#define ID3D12VideoProcessor1_GetNumInputStreamDescs(This) \ - ( (This)->lpVtbl -> GetNumInputStreamDescs(This) ) - -#define ID3D12VideoProcessor1_GetInputStreamDescs(This,NumInputStreamDescs,pInputStreamDescs) \ - ( (This)->lpVtbl -> GetInputStreamDescs(This,NumInputStreamDescs,pInputStreamDescs) ) -#if !defined(_WIN32) - -#define ID3D12VideoProcessor1_GetOutputStreamDesc(This) \ - ( (This)->lpVtbl -> GetOutputStreamDesc(This) ) -#else -#define ID3D12VideoProcessor1_GetOutputStreamDesc(This,RetVal) \ - ( (This)->lpVtbl -> GetOutputStreamDesc(This,RetVal) ) -#endif - -#define ID3D12VideoProcessor1_GetProtectedResourceSession(This,riid,ppProtectedSession) \ - ( (This)->lpVtbl -> GetProtectedResourceSession(This,riid,ppProtectedSession) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12VideoProcessor1_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12VideoExtensionCommand_INTERFACE_DEFINED__ -#define __ID3D12VideoExtensionCommand_INTERFACE_DEFINED__ - -/* interface ID3D12VideoExtensionCommand */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12VideoExtensionCommand; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("554E41E8-AE8E-4A8C-B7D2-5B4F274A30E4") - ID3D12VideoExtensionCommand : public ID3D12Pageable - { - public: -#if defined(_MSC_VER) || !defined(_WIN32) - virtual D3D12_VIDEO_EXTENSION_COMMAND_DESC STDMETHODCALLTYPE GetDesc( void) = 0; -#else - virtual D3D12_VIDEO_EXTENSION_COMMAND_DESC *STDMETHODCALLTYPE GetDesc( - D3D12_VIDEO_EXTENSION_COMMAND_DESC * RetVal) = 0; -#endif - - virtual HRESULT STDMETHODCALLTYPE GetProtectedResourceSession( - REFIID riid, - _COM_Outptr_opt_ void **ppProtectedSession) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12VideoExtensionCommandVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12VideoExtensionCommand * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12VideoExtensionCommand * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12VideoExtensionCommand * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12VideoExtensionCommand * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12VideoExtensionCommand * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12VideoExtensionCommand * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12VideoExtensionCommand * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12VideoExtensionCommand * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12VideoExtensionCommand, GetDesc) -#if !defined(_WIN32) - D3D12_VIDEO_EXTENSION_COMMAND_DESC ( STDMETHODCALLTYPE *GetDesc )( - ID3D12VideoExtensionCommand * This); - -#else - D3D12_VIDEO_EXTENSION_COMMAND_DESC *( STDMETHODCALLTYPE *GetDesc )( - ID3D12VideoExtensionCommand * This, - D3D12_VIDEO_EXTENSION_COMMAND_DESC * RetVal); - -#endif - - DECLSPEC_XFGVIRT(ID3D12VideoExtensionCommand, GetProtectedResourceSession) - HRESULT ( STDMETHODCALLTYPE *GetProtectedResourceSession )( - ID3D12VideoExtensionCommand * This, - REFIID riid, - _COM_Outptr_opt_ void **ppProtectedSession); - - END_INTERFACE - } ID3D12VideoExtensionCommandVtbl; - - interface ID3D12VideoExtensionCommand - { - CONST_VTBL struct ID3D12VideoExtensionCommandVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12VideoExtensionCommand_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12VideoExtensionCommand_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12VideoExtensionCommand_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12VideoExtensionCommand_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12VideoExtensionCommand_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12VideoExtensionCommand_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12VideoExtensionCommand_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12VideoExtensionCommand_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#if !defined(_WIN32) - -#define ID3D12VideoExtensionCommand_GetDesc(This) \ - ( (This)->lpVtbl -> GetDesc(This) ) -#else -#define ID3D12VideoExtensionCommand_GetDesc(This,RetVal) \ - ( (This)->lpVtbl -> GetDesc(This,RetVal) ) -#endif - -#define ID3D12VideoExtensionCommand_GetProtectedResourceSession(This,riid,ppProtectedSession) \ - ( (This)->lpVtbl -> GetProtectedResourceSession(This,riid,ppProtectedSession) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12VideoExtensionCommand_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12VideoDevice2_INTERFACE_DEFINED__ -#define __ID3D12VideoDevice2_INTERFACE_DEFINED__ - -/* interface ID3D12VideoDevice2 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12VideoDevice2; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("F019AC49-F838-4A95-9B17-579437C8F513") - ID3D12VideoDevice2 : public ID3D12VideoDevice1 - { - public: - virtual HRESULT STDMETHODCALLTYPE CreateVideoDecoder1( - _In_ const D3D12_VIDEO_DECODER_DESC *pDesc, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession, - _In_ REFIID riid, - _COM_Outptr_ void **ppVideoDecoder) = 0; - - virtual HRESULT STDMETHODCALLTYPE CreateVideoDecoderHeap1( - _In_ const D3D12_VIDEO_DECODER_HEAP_DESC *pVideoDecoderHeapDesc, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession, - _In_ REFIID riid, - _COM_Outptr_ void **ppVideoDecoderHeap) = 0; - - virtual HRESULT STDMETHODCALLTYPE CreateVideoProcessor1( - UINT NodeMask, - _In_ const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC *pOutputStreamDesc, - UINT NumInputStreamDescs, - _In_reads_(NumInputStreamDescs) const D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *pInputStreamDescs, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession, - _In_ REFIID riid, - _COM_Outptr_ void **ppVideoProcessor) = 0; - - virtual HRESULT STDMETHODCALLTYPE CreateVideoExtensionCommand( - _In_ const D3D12_VIDEO_EXTENSION_COMMAND_DESC *pDesc, - _In_reads_bytes_(CreationParametersDataSizeInBytes) const void *pCreationParameters, - SIZE_T CreationParametersDataSizeInBytes, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession, - _In_ REFIID riid, - _COM_Outptr_ void **ppVideoExtensionCommand) = 0; - - virtual HRESULT STDMETHODCALLTYPE ExecuteExtensionCommand( - _In_ ID3D12VideoExtensionCommand *pExtensionCommand, - _In_reads_bytes_(ExecutionParametersSizeInBytes) const void *pExecutionParameters, - SIZE_T ExecutionParametersSizeInBytes, - _Out_writes_bytes_(OutputDataSizeInBytes) void *pOutputData, - SIZE_T OutputDataSizeInBytes) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12VideoDevice2Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12VideoDevice2 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12VideoDevice2 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12VideoDevice2 * This); - - DECLSPEC_XFGVIRT(ID3D12VideoDevice, CheckFeatureSupport) - HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )( - ID3D12VideoDevice2 * This, - D3D12_FEATURE_VIDEO FeatureVideo, - _Inout_updates_bytes_(FeatureSupportDataSize) void *pFeatureSupportData, - UINT FeatureSupportDataSize); - - DECLSPEC_XFGVIRT(ID3D12VideoDevice, CreateVideoDecoder) - HRESULT ( STDMETHODCALLTYPE *CreateVideoDecoder )( - ID3D12VideoDevice2 * This, - _In_ const D3D12_VIDEO_DECODER_DESC *pDesc, - _In_ REFIID riid, - _COM_Outptr_ void **ppVideoDecoder); - - DECLSPEC_XFGVIRT(ID3D12VideoDevice, CreateVideoDecoderHeap) - HRESULT ( STDMETHODCALLTYPE *CreateVideoDecoderHeap )( - ID3D12VideoDevice2 * This, - _In_ const D3D12_VIDEO_DECODER_HEAP_DESC *pVideoDecoderHeapDesc, - _In_ REFIID riid, - _COM_Outptr_ void **ppVideoDecoderHeap); - - DECLSPEC_XFGVIRT(ID3D12VideoDevice, CreateVideoProcessor) - HRESULT ( STDMETHODCALLTYPE *CreateVideoProcessor )( - ID3D12VideoDevice2 * This, - UINT NodeMask, - _In_ const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC *pOutputStreamDesc, - UINT NumInputStreamDescs, - _In_reads_(NumInputStreamDescs) const D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *pInputStreamDescs, - _In_ REFIID riid, - _COM_Outptr_ void **ppVideoProcessor); - - DECLSPEC_XFGVIRT(ID3D12VideoDevice1, CreateVideoMotionEstimator) - HRESULT ( STDMETHODCALLTYPE *CreateVideoMotionEstimator )( - ID3D12VideoDevice2 * This, - _In_ const D3D12_VIDEO_MOTION_ESTIMATOR_DESC *pDesc, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession, - _In_ REFIID riid, - _COM_Outptr_ void **ppVideoMotionEstimator); - - DECLSPEC_XFGVIRT(ID3D12VideoDevice1, CreateVideoMotionVectorHeap) - HRESULT ( STDMETHODCALLTYPE *CreateVideoMotionVectorHeap )( - ID3D12VideoDevice2 * This, - _In_ const D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC *pDesc, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession, - _In_ REFIID riid, - _COM_Outptr_ void **ppVideoMotionVectorHeap); - - DECLSPEC_XFGVIRT(ID3D12VideoDevice2, CreateVideoDecoder1) - HRESULT ( STDMETHODCALLTYPE *CreateVideoDecoder1 )( - ID3D12VideoDevice2 * This, - _In_ const D3D12_VIDEO_DECODER_DESC *pDesc, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession, - _In_ REFIID riid, - _COM_Outptr_ void **ppVideoDecoder); - - DECLSPEC_XFGVIRT(ID3D12VideoDevice2, CreateVideoDecoderHeap1) - HRESULT ( STDMETHODCALLTYPE *CreateVideoDecoderHeap1 )( - ID3D12VideoDevice2 * This, - _In_ const D3D12_VIDEO_DECODER_HEAP_DESC *pVideoDecoderHeapDesc, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession, - _In_ REFIID riid, - _COM_Outptr_ void **ppVideoDecoderHeap); - - DECLSPEC_XFGVIRT(ID3D12VideoDevice2, CreateVideoProcessor1) - HRESULT ( STDMETHODCALLTYPE *CreateVideoProcessor1 )( - ID3D12VideoDevice2 * This, - UINT NodeMask, - _In_ const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC *pOutputStreamDesc, - UINT NumInputStreamDescs, - _In_reads_(NumInputStreamDescs) const D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *pInputStreamDescs, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession, - _In_ REFIID riid, - _COM_Outptr_ void **ppVideoProcessor); - - DECLSPEC_XFGVIRT(ID3D12VideoDevice2, CreateVideoExtensionCommand) - HRESULT ( STDMETHODCALLTYPE *CreateVideoExtensionCommand )( - ID3D12VideoDevice2 * This, - _In_ const D3D12_VIDEO_EXTENSION_COMMAND_DESC *pDesc, - _In_reads_bytes_(CreationParametersDataSizeInBytes) const void *pCreationParameters, - SIZE_T CreationParametersDataSizeInBytes, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession, - _In_ REFIID riid, - _COM_Outptr_ void **ppVideoExtensionCommand); - - DECLSPEC_XFGVIRT(ID3D12VideoDevice2, ExecuteExtensionCommand) - HRESULT ( STDMETHODCALLTYPE *ExecuteExtensionCommand )( - ID3D12VideoDevice2 * This, - _In_ ID3D12VideoExtensionCommand *pExtensionCommand, - _In_reads_bytes_(ExecutionParametersSizeInBytes) const void *pExecutionParameters, - SIZE_T ExecutionParametersSizeInBytes, - _Out_writes_bytes_(OutputDataSizeInBytes) void *pOutputData, - SIZE_T OutputDataSizeInBytes); - - END_INTERFACE - } ID3D12VideoDevice2Vtbl; - - interface ID3D12VideoDevice2 - { - CONST_VTBL struct ID3D12VideoDevice2Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12VideoDevice2_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12VideoDevice2_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12VideoDevice2_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12VideoDevice2_CheckFeatureSupport(This,FeatureVideo,pFeatureSupportData,FeatureSupportDataSize) \ - ( (This)->lpVtbl -> CheckFeatureSupport(This,FeatureVideo,pFeatureSupportData,FeatureSupportDataSize) ) - -#define ID3D12VideoDevice2_CreateVideoDecoder(This,pDesc,riid,ppVideoDecoder) \ - ( (This)->lpVtbl -> CreateVideoDecoder(This,pDesc,riid,ppVideoDecoder) ) - -#define ID3D12VideoDevice2_CreateVideoDecoderHeap(This,pVideoDecoderHeapDesc,riid,ppVideoDecoderHeap) \ - ( (This)->lpVtbl -> CreateVideoDecoderHeap(This,pVideoDecoderHeapDesc,riid,ppVideoDecoderHeap) ) - -#define ID3D12VideoDevice2_CreateVideoProcessor(This,NodeMask,pOutputStreamDesc,NumInputStreamDescs,pInputStreamDescs,riid,ppVideoProcessor) \ - ( (This)->lpVtbl -> CreateVideoProcessor(This,NodeMask,pOutputStreamDesc,NumInputStreamDescs,pInputStreamDescs,riid,ppVideoProcessor) ) - -#define ID3D12VideoDevice2_CreateVideoMotionEstimator(This,pDesc,pProtectedResourceSession,riid,ppVideoMotionEstimator) \ - ( (This)->lpVtbl -> CreateVideoMotionEstimator(This,pDesc,pProtectedResourceSession,riid,ppVideoMotionEstimator) ) - -#define ID3D12VideoDevice2_CreateVideoMotionVectorHeap(This,pDesc,pProtectedResourceSession,riid,ppVideoMotionVectorHeap) \ - ( (This)->lpVtbl -> CreateVideoMotionVectorHeap(This,pDesc,pProtectedResourceSession,riid,ppVideoMotionVectorHeap) ) - -#define ID3D12VideoDevice2_CreateVideoDecoder1(This,pDesc,pProtectedResourceSession,riid,ppVideoDecoder) \ - ( (This)->lpVtbl -> CreateVideoDecoder1(This,pDesc,pProtectedResourceSession,riid,ppVideoDecoder) ) - -#define ID3D12VideoDevice2_CreateVideoDecoderHeap1(This,pVideoDecoderHeapDesc,pProtectedResourceSession,riid,ppVideoDecoderHeap) \ - ( (This)->lpVtbl -> CreateVideoDecoderHeap1(This,pVideoDecoderHeapDesc,pProtectedResourceSession,riid,ppVideoDecoderHeap) ) - -#define ID3D12VideoDevice2_CreateVideoProcessor1(This,NodeMask,pOutputStreamDesc,NumInputStreamDescs,pInputStreamDescs,pProtectedResourceSession,riid,ppVideoProcessor) \ - ( (This)->lpVtbl -> CreateVideoProcessor1(This,NodeMask,pOutputStreamDesc,NumInputStreamDescs,pInputStreamDescs,pProtectedResourceSession,riid,ppVideoProcessor) ) - -#define ID3D12VideoDevice2_CreateVideoExtensionCommand(This,pDesc,pCreationParameters,CreationParametersDataSizeInBytes,pProtectedResourceSession,riid,ppVideoExtensionCommand) \ - ( (This)->lpVtbl -> CreateVideoExtensionCommand(This,pDesc,pCreationParameters,CreationParametersDataSizeInBytes,pProtectedResourceSession,riid,ppVideoExtensionCommand) ) - -#define ID3D12VideoDevice2_ExecuteExtensionCommand(This,pExtensionCommand,pExecutionParameters,ExecutionParametersSizeInBytes,pOutputData,OutputDataSizeInBytes) \ - ( (This)->lpVtbl -> ExecuteExtensionCommand(This,pExtensionCommand,pExecutionParameters,ExecutionParametersSizeInBytes,pOutputData,OutputDataSizeInBytes) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12VideoDevice2_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12VideoDecodeCommandList2_INTERFACE_DEFINED__ -#define __ID3D12VideoDecodeCommandList2_INTERFACE_DEFINED__ - -/* interface ID3D12VideoDecodeCommandList2 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12VideoDecodeCommandList2; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("6e120880-c114-4153-8036-d247051e1729") - ID3D12VideoDecodeCommandList2 : public ID3D12VideoDecodeCommandList1 - { - public: - virtual void STDMETHODCALLTYPE SetProtectedResourceSession( - _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession) = 0; - - virtual void STDMETHODCALLTYPE InitializeExtensionCommand( - _In_ ID3D12VideoExtensionCommand *pExtensionCommand, - _In_reads_bytes_(InitializationParametersSizeInBytes) const void *pInitializationParameters, - SIZE_T InitializationParametersSizeInBytes) = 0; - - virtual void STDMETHODCALLTYPE ExecuteExtensionCommand( - _In_ ID3D12VideoExtensionCommand *pExtensionCommand, - _In_reads_bytes_(ExecutionParametersSizeInBytes) const void *pExecutionParameters, - SIZE_T ExecutionParametersSizeInBytes) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12VideoDecodeCommandList2Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12VideoDecodeCommandList2 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12VideoDecodeCommandList2 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12VideoDecodeCommandList2 * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12VideoDecodeCommandList2 * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12VideoDecodeCommandList2 * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12VideoDecodeCommandList2 * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12VideoDecodeCommandList2 * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12VideoDecodeCommandList2 * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12CommandList, GetType) - D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )( - ID3D12VideoDecodeCommandList2 * This); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, Close) - HRESULT ( STDMETHODCALLTYPE *Close )( - ID3D12VideoDecodeCommandList2 * This); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, Reset) - HRESULT ( STDMETHODCALLTYPE *Reset )( - ID3D12VideoDecodeCommandList2 * This, - _In_ ID3D12CommandAllocator *pAllocator); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, ClearState) - void ( STDMETHODCALLTYPE *ClearState )( - ID3D12VideoDecodeCommandList2 * This); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, ResourceBarrier) - void ( STDMETHODCALLTYPE *ResourceBarrier )( - ID3D12VideoDecodeCommandList2 * This, - _In_ UINT NumBarriers, - _In_reads_(NumBarriers) const D3D12_RESOURCE_BARRIER *pBarriers); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, DiscardResource) - void ( STDMETHODCALLTYPE *DiscardResource )( - ID3D12VideoDecodeCommandList2 * This, - _In_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DISCARD_REGION *pRegion); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, BeginQuery) - void ( STDMETHODCALLTYPE *BeginQuery )( - ID3D12VideoDecodeCommandList2 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, EndQuery) - void ( STDMETHODCALLTYPE *EndQuery )( - ID3D12VideoDecodeCommandList2 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, ResolveQueryData) - void ( STDMETHODCALLTYPE *ResolveQueryData )( - ID3D12VideoDecodeCommandList2 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT StartIndex, - _In_ UINT NumQueries, - _In_ ID3D12Resource *pDestinationBuffer, - _In_ UINT64 AlignedDestinationBufferOffset); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, SetPredication) - void ( STDMETHODCALLTYPE *SetPredication )( - ID3D12VideoDecodeCommandList2 * This, - _In_opt_ ID3D12Resource *pBuffer, - _In_ UINT64 AlignedBufferOffset, - _In_ D3D12_PREDICATION_OP Operation); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, SetMarker) - void ( STDMETHODCALLTYPE *SetMarker )( - ID3D12VideoDecodeCommandList2 * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, BeginEvent) - void ( STDMETHODCALLTYPE *BeginEvent )( - ID3D12VideoDecodeCommandList2 * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, EndEvent) - void ( STDMETHODCALLTYPE *EndEvent )( - ID3D12VideoDecodeCommandList2 * This); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, DecodeFrame) - void ( STDMETHODCALLTYPE *DecodeFrame )( - ID3D12VideoDecodeCommandList2 * This, - _In_ ID3D12VideoDecoder *pDecoder, - _In_ const D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS *pOutputArguments, - _In_ const D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS *pInputArguments); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, WriteBufferImmediate) - void ( STDMETHODCALLTYPE *WriteBufferImmediate )( - ID3D12VideoDecodeCommandList2 * This, - UINT Count, - _In_reads_(Count) const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams, - _In_reads_opt_(Count) const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList1, DecodeFrame1) - void ( STDMETHODCALLTYPE *DecodeFrame1 )( - ID3D12VideoDecodeCommandList2 * This, - _In_ ID3D12VideoDecoder *pDecoder, - _In_ const D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS1 *pOutputArguments, - _In_ const D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS *pInputArguments); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList2, SetProtectedResourceSession) - void ( STDMETHODCALLTYPE *SetProtectedResourceSession )( - ID3D12VideoDecodeCommandList2 * This, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList2, InitializeExtensionCommand) - void ( STDMETHODCALLTYPE *InitializeExtensionCommand )( - ID3D12VideoDecodeCommandList2 * This, - _In_ ID3D12VideoExtensionCommand *pExtensionCommand, - _In_reads_bytes_(InitializationParametersSizeInBytes) const void *pInitializationParameters, - SIZE_T InitializationParametersSizeInBytes); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList2, ExecuteExtensionCommand) - void ( STDMETHODCALLTYPE *ExecuteExtensionCommand )( - ID3D12VideoDecodeCommandList2 * This, - _In_ ID3D12VideoExtensionCommand *pExtensionCommand, - _In_reads_bytes_(ExecutionParametersSizeInBytes) const void *pExecutionParameters, - SIZE_T ExecutionParametersSizeInBytes); - - END_INTERFACE - } ID3D12VideoDecodeCommandList2Vtbl; - - interface ID3D12VideoDecodeCommandList2 - { - CONST_VTBL struct ID3D12VideoDecodeCommandList2Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12VideoDecodeCommandList2_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12VideoDecodeCommandList2_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12VideoDecodeCommandList2_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12VideoDecodeCommandList2_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12VideoDecodeCommandList2_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12VideoDecodeCommandList2_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12VideoDecodeCommandList2_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12VideoDecodeCommandList2_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12VideoDecodeCommandList2_GetType(This) \ - ( (This)->lpVtbl -> GetType(This) ) - -#define ID3D12VideoDecodeCommandList2_Close(This) \ - ( (This)->lpVtbl -> Close(This) ) - -#define ID3D12VideoDecodeCommandList2_Reset(This,pAllocator) \ - ( (This)->lpVtbl -> Reset(This,pAllocator) ) - -#define ID3D12VideoDecodeCommandList2_ClearState(This) \ - ( (This)->lpVtbl -> ClearState(This) ) - -#define ID3D12VideoDecodeCommandList2_ResourceBarrier(This,NumBarriers,pBarriers) \ - ( (This)->lpVtbl -> ResourceBarrier(This,NumBarriers,pBarriers) ) - -#define ID3D12VideoDecodeCommandList2_DiscardResource(This,pResource,pRegion) \ - ( (This)->lpVtbl -> DiscardResource(This,pResource,pRegion) ) - -#define ID3D12VideoDecodeCommandList2_BeginQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> BeginQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12VideoDecodeCommandList2_EndQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> EndQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12VideoDecodeCommandList2_ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) \ - ( (This)->lpVtbl -> ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) ) - -#define ID3D12VideoDecodeCommandList2_SetPredication(This,pBuffer,AlignedBufferOffset,Operation) \ - ( (This)->lpVtbl -> SetPredication(This,pBuffer,AlignedBufferOffset,Operation) ) - -#define ID3D12VideoDecodeCommandList2_SetMarker(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> SetMarker(This,Metadata,pData,Size) ) - -#define ID3D12VideoDecodeCommandList2_BeginEvent(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> BeginEvent(This,Metadata,pData,Size) ) - -#define ID3D12VideoDecodeCommandList2_EndEvent(This) \ - ( (This)->lpVtbl -> EndEvent(This) ) - -#define ID3D12VideoDecodeCommandList2_DecodeFrame(This,pDecoder,pOutputArguments,pInputArguments) \ - ( (This)->lpVtbl -> DecodeFrame(This,pDecoder,pOutputArguments,pInputArguments) ) - -#define ID3D12VideoDecodeCommandList2_WriteBufferImmediate(This,Count,pParams,pModes) \ - ( (This)->lpVtbl -> WriteBufferImmediate(This,Count,pParams,pModes) ) - -#define ID3D12VideoDecodeCommandList2_DecodeFrame1(This,pDecoder,pOutputArguments,pInputArguments) \ - ( (This)->lpVtbl -> DecodeFrame1(This,pDecoder,pOutputArguments,pInputArguments) ) - -#define ID3D12VideoDecodeCommandList2_SetProtectedResourceSession(This,pProtectedResourceSession) \ - ( (This)->lpVtbl -> SetProtectedResourceSession(This,pProtectedResourceSession) ) - -#define ID3D12VideoDecodeCommandList2_InitializeExtensionCommand(This,pExtensionCommand,pInitializationParameters,InitializationParametersSizeInBytes) \ - ( (This)->lpVtbl -> InitializeExtensionCommand(This,pExtensionCommand,pInitializationParameters,InitializationParametersSizeInBytes) ) - -#define ID3D12VideoDecodeCommandList2_ExecuteExtensionCommand(This,pExtensionCommand,pExecutionParameters,ExecutionParametersSizeInBytes) \ - ( (This)->lpVtbl -> ExecuteExtensionCommand(This,pExtensionCommand,pExecutionParameters,ExecutionParametersSizeInBytes) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12VideoDecodeCommandList2_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12VideoDecodeCommandList3_INTERFACE_DEFINED__ -#define __ID3D12VideoDecodeCommandList3_INTERFACE_DEFINED__ - -/* interface ID3D12VideoDecodeCommandList3 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12VideoDecodeCommandList3; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("2aee8c37-9562-42da-8abf-61efeb2e4513") - ID3D12VideoDecodeCommandList3 : public ID3D12VideoDecodeCommandList2 - { - public: - virtual void STDMETHODCALLTYPE Barrier( - UINT32 NumBarrierGroups, - _In_reads_(NumBarrierGroups) const D3D12_BARRIER_GROUP *pBarrierGroups) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12VideoDecodeCommandList3Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12VideoDecodeCommandList3 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12VideoDecodeCommandList3 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12VideoDecodeCommandList3 * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12VideoDecodeCommandList3 * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12VideoDecodeCommandList3 * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12VideoDecodeCommandList3 * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12VideoDecodeCommandList3 * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12VideoDecodeCommandList3 * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12CommandList, GetType) - D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )( - ID3D12VideoDecodeCommandList3 * This); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, Close) - HRESULT ( STDMETHODCALLTYPE *Close )( - ID3D12VideoDecodeCommandList3 * This); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, Reset) - HRESULT ( STDMETHODCALLTYPE *Reset )( - ID3D12VideoDecodeCommandList3 * This, - _In_ ID3D12CommandAllocator *pAllocator); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, ClearState) - void ( STDMETHODCALLTYPE *ClearState )( - ID3D12VideoDecodeCommandList3 * This); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, ResourceBarrier) - void ( STDMETHODCALLTYPE *ResourceBarrier )( - ID3D12VideoDecodeCommandList3 * This, - _In_ UINT NumBarriers, - _In_reads_(NumBarriers) const D3D12_RESOURCE_BARRIER *pBarriers); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, DiscardResource) - void ( STDMETHODCALLTYPE *DiscardResource )( - ID3D12VideoDecodeCommandList3 * This, - _In_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DISCARD_REGION *pRegion); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, BeginQuery) - void ( STDMETHODCALLTYPE *BeginQuery )( - ID3D12VideoDecodeCommandList3 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, EndQuery) - void ( STDMETHODCALLTYPE *EndQuery )( - ID3D12VideoDecodeCommandList3 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, ResolveQueryData) - void ( STDMETHODCALLTYPE *ResolveQueryData )( - ID3D12VideoDecodeCommandList3 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT StartIndex, - _In_ UINT NumQueries, - _In_ ID3D12Resource *pDestinationBuffer, - _In_ UINT64 AlignedDestinationBufferOffset); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, SetPredication) - void ( STDMETHODCALLTYPE *SetPredication )( - ID3D12VideoDecodeCommandList3 * This, - _In_opt_ ID3D12Resource *pBuffer, - _In_ UINT64 AlignedBufferOffset, - _In_ D3D12_PREDICATION_OP Operation); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, SetMarker) - void ( STDMETHODCALLTYPE *SetMarker )( - ID3D12VideoDecodeCommandList3 * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, BeginEvent) - void ( STDMETHODCALLTYPE *BeginEvent )( - ID3D12VideoDecodeCommandList3 * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, EndEvent) - void ( STDMETHODCALLTYPE *EndEvent )( - ID3D12VideoDecodeCommandList3 * This); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, DecodeFrame) - void ( STDMETHODCALLTYPE *DecodeFrame )( - ID3D12VideoDecodeCommandList3 * This, - _In_ ID3D12VideoDecoder *pDecoder, - _In_ const D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS *pOutputArguments, - _In_ const D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS *pInputArguments); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList, WriteBufferImmediate) - void ( STDMETHODCALLTYPE *WriteBufferImmediate )( - ID3D12VideoDecodeCommandList3 * This, - UINT Count, - _In_reads_(Count) const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams, - _In_reads_opt_(Count) const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList1, DecodeFrame1) - void ( STDMETHODCALLTYPE *DecodeFrame1 )( - ID3D12VideoDecodeCommandList3 * This, - _In_ ID3D12VideoDecoder *pDecoder, - _In_ const D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS1 *pOutputArguments, - _In_ const D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS *pInputArguments); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList2, SetProtectedResourceSession) - void ( STDMETHODCALLTYPE *SetProtectedResourceSession )( - ID3D12VideoDecodeCommandList3 * This, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList2, InitializeExtensionCommand) - void ( STDMETHODCALLTYPE *InitializeExtensionCommand )( - ID3D12VideoDecodeCommandList3 * This, - _In_ ID3D12VideoExtensionCommand *pExtensionCommand, - _In_reads_bytes_(InitializationParametersSizeInBytes) const void *pInitializationParameters, - SIZE_T InitializationParametersSizeInBytes); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList2, ExecuteExtensionCommand) - void ( STDMETHODCALLTYPE *ExecuteExtensionCommand )( - ID3D12VideoDecodeCommandList3 * This, - _In_ ID3D12VideoExtensionCommand *pExtensionCommand, - _In_reads_bytes_(ExecutionParametersSizeInBytes) const void *pExecutionParameters, - SIZE_T ExecutionParametersSizeInBytes); - - DECLSPEC_XFGVIRT(ID3D12VideoDecodeCommandList3, Barrier) - void ( STDMETHODCALLTYPE *Barrier )( - ID3D12VideoDecodeCommandList3 * This, - UINT32 NumBarrierGroups, - _In_reads_(NumBarrierGroups) const D3D12_BARRIER_GROUP *pBarrierGroups); - - END_INTERFACE - } ID3D12VideoDecodeCommandList3Vtbl; - - interface ID3D12VideoDecodeCommandList3 - { - CONST_VTBL struct ID3D12VideoDecodeCommandList3Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12VideoDecodeCommandList3_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12VideoDecodeCommandList3_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12VideoDecodeCommandList3_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12VideoDecodeCommandList3_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12VideoDecodeCommandList3_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12VideoDecodeCommandList3_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12VideoDecodeCommandList3_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12VideoDecodeCommandList3_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12VideoDecodeCommandList3_GetType(This) \ - ( (This)->lpVtbl -> GetType(This) ) - -#define ID3D12VideoDecodeCommandList3_Close(This) \ - ( (This)->lpVtbl -> Close(This) ) - -#define ID3D12VideoDecodeCommandList3_Reset(This,pAllocator) \ - ( (This)->lpVtbl -> Reset(This,pAllocator) ) - -#define ID3D12VideoDecodeCommandList3_ClearState(This) \ - ( (This)->lpVtbl -> ClearState(This) ) - -#define ID3D12VideoDecodeCommandList3_ResourceBarrier(This,NumBarriers,pBarriers) \ - ( (This)->lpVtbl -> ResourceBarrier(This,NumBarriers,pBarriers) ) - -#define ID3D12VideoDecodeCommandList3_DiscardResource(This,pResource,pRegion) \ - ( (This)->lpVtbl -> DiscardResource(This,pResource,pRegion) ) - -#define ID3D12VideoDecodeCommandList3_BeginQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> BeginQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12VideoDecodeCommandList3_EndQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> EndQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12VideoDecodeCommandList3_ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) \ - ( (This)->lpVtbl -> ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) ) - -#define ID3D12VideoDecodeCommandList3_SetPredication(This,pBuffer,AlignedBufferOffset,Operation) \ - ( (This)->lpVtbl -> SetPredication(This,pBuffer,AlignedBufferOffset,Operation) ) - -#define ID3D12VideoDecodeCommandList3_SetMarker(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> SetMarker(This,Metadata,pData,Size) ) - -#define ID3D12VideoDecodeCommandList3_BeginEvent(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> BeginEvent(This,Metadata,pData,Size) ) - -#define ID3D12VideoDecodeCommandList3_EndEvent(This) \ - ( (This)->lpVtbl -> EndEvent(This) ) - -#define ID3D12VideoDecodeCommandList3_DecodeFrame(This,pDecoder,pOutputArguments,pInputArguments) \ - ( (This)->lpVtbl -> DecodeFrame(This,pDecoder,pOutputArguments,pInputArguments) ) - -#define ID3D12VideoDecodeCommandList3_WriteBufferImmediate(This,Count,pParams,pModes) \ - ( (This)->lpVtbl -> WriteBufferImmediate(This,Count,pParams,pModes) ) - -#define ID3D12VideoDecodeCommandList3_DecodeFrame1(This,pDecoder,pOutputArguments,pInputArguments) \ - ( (This)->lpVtbl -> DecodeFrame1(This,pDecoder,pOutputArguments,pInputArguments) ) - -#define ID3D12VideoDecodeCommandList3_SetProtectedResourceSession(This,pProtectedResourceSession) \ - ( (This)->lpVtbl -> SetProtectedResourceSession(This,pProtectedResourceSession) ) - -#define ID3D12VideoDecodeCommandList3_InitializeExtensionCommand(This,pExtensionCommand,pInitializationParameters,InitializationParametersSizeInBytes) \ - ( (This)->lpVtbl -> InitializeExtensionCommand(This,pExtensionCommand,pInitializationParameters,InitializationParametersSizeInBytes) ) - -#define ID3D12VideoDecodeCommandList3_ExecuteExtensionCommand(This,pExtensionCommand,pExecutionParameters,ExecutionParametersSizeInBytes) \ - ( (This)->lpVtbl -> ExecuteExtensionCommand(This,pExtensionCommand,pExecutionParameters,ExecutionParametersSizeInBytes) ) - -#define ID3D12VideoDecodeCommandList3_Barrier(This,NumBarrierGroups,pBarrierGroups) \ - ( (This)->lpVtbl -> Barrier(This,NumBarrierGroups,pBarrierGroups) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12VideoDecodeCommandList3_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12VideoProcessCommandList2_INTERFACE_DEFINED__ -#define __ID3D12VideoProcessCommandList2_INTERFACE_DEFINED__ - -/* interface ID3D12VideoProcessCommandList2 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12VideoProcessCommandList2; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("db525ae4-6ad6-473c-baa7-59b2e37082e4") - ID3D12VideoProcessCommandList2 : public ID3D12VideoProcessCommandList1 - { - public: - virtual void STDMETHODCALLTYPE SetProtectedResourceSession( - _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession) = 0; - - virtual void STDMETHODCALLTYPE InitializeExtensionCommand( - _In_ ID3D12VideoExtensionCommand *pExtensionCommand, - _In_reads_bytes_(InitializationParametersSizeInBytes) const void *pInitializationParameters, - SIZE_T InitializationParametersSizeInBytes) = 0; - - virtual void STDMETHODCALLTYPE ExecuteExtensionCommand( - _In_ ID3D12VideoExtensionCommand *pExtensionCommand, - _In_reads_bytes_(ExecutionParametersSizeInBytes) const void *pExecutionParameters, - SIZE_T ExecutionParametersSizeInBytes) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12VideoProcessCommandList2Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12VideoProcessCommandList2 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12VideoProcessCommandList2 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12VideoProcessCommandList2 * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12VideoProcessCommandList2 * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12VideoProcessCommandList2 * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12VideoProcessCommandList2 * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12VideoProcessCommandList2 * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12VideoProcessCommandList2 * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12CommandList, GetType) - D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )( - ID3D12VideoProcessCommandList2 * This); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, Close) - HRESULT ( STDMETHODCALLTYPE *Close )( - ID3D12VideoProcessCommandList2 * This); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, Reset) - HRESULT ( STDMETHODCALLTYPE *Reset )( - ID3D12VideoProcessCommandList2 * This, - _In_ ID3D12CommandAllocator *pAllocator); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, ClearState) - void ( STDMETHODCALLTYPE *ClearState )( - ID3D12VideoProcessCommandList2 * This); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, ResourceBarrier) - void ( STDMETHODCALLTYPE *ResourceBarrier )( - ID3D12VideoProcessCommandList2 * This, - _In_ UINT NumBarriers, - _In_reads_(NumBarriers) const D3D12_RESOURCE_BARRIER *pBarriers); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, DiscardResource) - void ( STDMETHODCALLTYPE *DiscardResource )( - ID3D12VideoProcessCommandList2 * This, - _In_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DISCARD_REGION *pRegion); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, BeginQuery) - void ( STDMETHODCALLTYPE *BeginQuery )( - ID3D12VideoProcessCommandList2 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, EndQuery) - void ( STDMETHODCALLTYPE *EndQuery )( - ID3D12VideoProcessCommandList2 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, ResolveQueryData) - void ( STDMETHODCALLTYPE *ResolveQueryData )( - ID3D12VideoProcessCommandList2 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT StartIndex, - _In_ UINT NumQueries, - _In_ ID3D12Resource *pDestinationBuffer, - _In_ UINT64 AlignedDestinationBufferOffset); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, SetPredication) - void ( STDMETHODCALLTYPE *SetPredication )( - ID3D12VideoProcessCommandList2 * This, - _In_opt_ ID3D12Resource *pBuffer, - _In_ UINT64 AlignedBufferOffset, - _In_ D3D12_PREDICATION_OP Operation); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, SetMarker) - void ( STDMETHODCALLTYPE *SetMarker )( - ID3D12VideoProcessCommandList2 * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, BeginEvent) - void ( STDMETHODCALLTYPE *BeginEvent )( - ID3D12VideoProcessCommandList2 * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, EndEvent) - void ( STDMETHODCALLTYPE *EndEvent )( - ID3D12VideoProcessCommandList2 * This); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, ProcessFrames) - void ( STDMETHODCALLTYPE *ProcessFrames )( - ID3D12VideoProcessCommandList2 * This, - _In_ ID3D12VideoProcessor *pVideoProcessor, - _In_ const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_ARGUMENTS *pOutputArguments, - UINT NumInputStreams, - _In_reads_(NumInputStreams) const D3D12_VIDEO_PROCESS_INPUT_STREAM_ARGUMENTS *pInputArguments); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, WriteBufferImmediate) - void ( STDMETHODCALLTYPE *WriteBufferImmediate )( - ID3D12VideoProcessCommandList2 * This, - UINT Count, - _In_reads_(Count) const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams, - _In_reads_opt_(Count) const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList1, ProcessFrames1) - void ( STDMETHODCALLTYPE *ProcessFrames1 )( - ID3D12VideoProcessCommandList2 * This, - _In_ ID3D12VideoProcessor *pVideoProcessor, - _In_ const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_ARGUMENTS *pOutputArguments, - UINT NumInputStreams, - _In_reads_(NumInputStreams) const D3D12_VIDEO_PROCESS_INPUT_STREAM_ARGUMENTS1 *pInputArguments); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList2, SetProtectedResourceSession) - void ( STDMETHODCALLTYPE *SetProtectedResourceSession )( - ID3D12VideoProcessCommandList2 * This, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList2, InitializeExtensionCommand) - void ( STDMETHODCALLTYPE *InitializeExtensionCommand )( - ID3D12VideoProcessCommandList2 * This, - _In_ ID3D12VideoExtensionCommand *pExtensionCommand, - _In_reads_bytes_(InitializationParametersSizeInBytes) const void *pInitializationParameters, - SIZE_T InitializationParametersSizeInBytes); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList2, ExecuteExtensionCommand) - void ( STDMETHODCALLTYPE *ExecuteExtensionCommand )( - ID3D12VideoProcessCommandList2 * This, - _In_ ID3D12VideoExtensionCommand *pExtensionCommand, - _In_reads_bytes_(ExecutionParametersSizeInBytes) const void *pExecutionParameters, - SIZE_T ExecutionParametersSizeInBytes); - - END_INTERFACE - } ID3D12VideoProcessCommandList2Vtbl; - - interface ID3D12VideoProcessCommandList2 - { - CONST_VTBL struct ID3D12VideoProcessCommandList2Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12VideoProcessCommandList2_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12VideoProcessCommandList2_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12VideoProcessCommandList2_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12VideoProcessCommandList2_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12VideoProcessCommandList2_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12VideoProcessCommandList2_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12VideoProcessCommandList2_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12VideoProcessCommandList2_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12VideoProcessCommandList2_GetType(This) \ - ( (This)->lpVtbl -> GetType(This) ) - -#define ID3D12VideoProcessCommandList2_Close(This) \ - ( (This)->lpVtbl -> Close(This) ) - -#define ID3D12VideoProcessCommandList2_Reset(This,pAllocator) \ - ( (This)->lpVtbl -> Reset(This,pAllocator) ) - -#define ID3D12VideoProcessCommandList2_ClearState(This) \ - ( (This)->lpVtbl -> ClearState(This) ) - -#define ID3D12VideoProcessCommandList2_ResourceBarrier(This,NumBarriers,pBarriers) \ - ( (This)->lpVtbl -> ResourceBarrier(This,NumBarriers,pBarriers) ) - -#define ID3D12VideoProcessCommandList2_DiscardResource(This,pResource,pRegion) \ - ( (This)->lpVtbl -> DiscardResource(This,pResource,pRegion) ) - -#define ID3D12VideoProcessCommandList2_BeginQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> BeginQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12VideoProcessCommandList2_EndQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> EndQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12VideoProcessCommandList2_ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) \ - ( (This)->lpVtbl -> ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) ) - -#define ID3D12VideoProcessCommandList2_SetPredication(This,pBuffer,AlignedBufferOffset,Operation) \ - ( (This)->lpVtbl -> SetPredication(This,pBuffer,AlignedBufferOffset,Operation) ) - -#define ID3D12VideoProcessCommandList2_SetMarker(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> SetMarker(This,Metadata,pData,Size) ) - -#define ID3D12VideoProcessCommandList2_BeginEvent(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> BeginEvent(This,Metadata,pData,Size) ) - -#define ID3D12VideoProcessCommandList2_EndEvent(This) \ - ( (This)->lpVtbl -> EndEvent(This) ) - -#define ID3D12VideoProcessCommandList2_ProcessFrames(This,pVideoProcessor,pOutputArguments,NumInputStreams,pInputArguments) \ - ( (This)->lpVtbl -> ProcessFrames(This,pVideoProcessor,pOutputArguments,NumInputStreams,pInputArguments) ) - -#define ID3D12VideoProcessCommandList2_WriteBufferImmediate(This,Count,pParams,pModes) \ - ( (This)->lpVtbl -> WriteBufferImmediate(This,Count,pParams,pModes) ) - -#define ID3D12VideoProcessCommandList2_ProcessFrames1(This,pVideoProcessor,pOutputArguments,NumInputStreams,pInputArguments) \ - ( (This)->lpVtbl -> ProcessFrames1(This,pVideoProcessor,pOutputArguments,NumInputStreams,pInputArguments) ) - -#define ID3D12VideoProcessCommandList2_SetProtectedResourceSession(This,pProtectedResourceSession) \ - ( (This)->lpVtbl -> SetProtectedResourceSession(This,pProtectedResourceSession) ) - -#define ID3D12VideoProcessCommandList2_InitializeExtensionCommand(This,pExtensionCommand,pInitializationParameters,InitializationParametersSizeInBytes) \ - ( (This)->lpVtbl -> InitializeExtensionCommand(This,pExtensionCommand,pInitializationParameters,InitializationParametersSizeInBytes) ) - -#define ID3D12VideoProcessCommandList2_ExecuteExtensionCommand(This,pExtensionCommand,pExecutionParameters,ExecutionParametersSizeInBytes) \ - ( (This)->lpVtbl -> ExecuteExtensionCommand(This,pExtensionCommand,pExecutionParameters,ExecutionParametersSizeInBytes) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12VideoProcessCommandList2_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12VideoProcessCommandList3_INTERFACE_DEFINED__ -#define __ID3D12VideoProcessCommandList3_INTERFACE_DEFINED__ - -/* interface ID3D12VideoProcessCommandList3 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12VideoProcessCommandList3; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("1a0a4ca4-9f08-40ce-9558-b411fd2666ff") - ID3D12VideoProcessCommandList3 : public ID3D12VideoProcessCommandList2 - { - public: - virtual void STDMETHODCALLTYPE Barrier( - UINT32 NumBarrierGroups, - _In_reads_(NumBarrierGroups) const D3D12_BARRIER_GROUP *pBarrierGroups) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12VideoProcessCommandList3Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12VideoProcessCommandList3 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12VideoProcessCommandList3 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12VideoProcessCommandList3 * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12VideoProcessCommandList3 * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12VideoProcessCommandList3 * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12VideoProcessCommandList3 * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12VideoProcessCommandList3 * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12VideoProcessCommandList3 * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12CommandList, GetType) - D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )( - ID3D12VideoProcessCommandList3 * This); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, Close) - HRESULT ( STDMETHODCALLTYPE *Close )( - ID3D12VideoProcessCommandList3 * This); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, Reset) - HRESULT ( STDMETHODCALLTYPE *Reset )( - ID3D12VideoProcessCommandList3 * This, - _In_ ID3D12CommandAllocator *pAllocator); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, ClearState) - void ( STDMETHODCALLTYPE *ClearState )( - ID3D12VideoProcessCommandList3 * This); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, ResourceBarrier) - void ( STDMETHODCALLTYPE *ResourceBarrier )( - ID3D12VideoProcessCommandList3 * This, - _In_ UINT NumBarriers, - _In_reads_(NumBarriers) const D3D12_RESOURCE_BARRIER *pBarriers); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, DiscardResource) - void ( STDMETHODCALLTYPE *DiscardResource )( - ID3D12VideoProcessCommandList3 * This, - _In_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DISCARD_REGION *pRegion); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, BeginQuery) - void ( STDMETHODCALLTYPE *BeginQuery )( - ID3D12VideoProcessCommandList3 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, EndQuery) - void ( STDMETHODCALLTYPE *EndQuery )( - ID3D12VideoProcessCommandList3 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, ResolveQueryData) - void ( STDMETHODCALLTYPE *ResolveQueryData )( - ID3D12VideoProcessCommandList3 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT StartIndex, - _In_ UINT NumQueries, - _In_ ID3D12Resource *pDestinationBuffer, - _In_ UINT64 AlignedDestinationBufferOffset); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, SetPredication) - void ( STDMETHODCALLTYPE *SetPredication )( - ID3D12VideoProcessCommandList3 * This, - _In_opt_ ID3D12Resource *pBuffer, - _In_ UINT64 AlignedBufferOffset, - _In_ D3D12_PREDICATION_OP Operation); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, SetMarker) - void ( STDMETHODCALLTYPE *SetMarker )( - ID3D12VideoProcessCommandList3 * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, BeginEvent) - void ( STDMETHODCALLTYPE *BeginEvent )( - ID3D12VideoProcessCommandList3 * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, EndEvent) - void ( STDMETHODCALLTYPE *EndEvent )( - ID3D12VideoProcessCommandList3 * This); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, ProcessFrames) - void ( STDMETHODCALLTYPE *ProcessFrames )( - ID3D12VideoProcessCommandList3 * This, - _In_ ID3D12VideoProcessor *pVideoProcessor, - _In_ const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_ARGUMENTS *pOutputArguments, - UINT NumInputStreams, - _In_reads_(NumInputStreams) const D3D12_VIDEO_PROCESS_INPUT_STREAM_ARGUMENTS *pInputArguments); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList, WriteBufferImmediate) - void ( STDMETHODCALLTYPE *WriteBufferImmediate )( - ID3D12VideoProcessCommandList3 * This, - UINT Count, - _In_reads_(Count) const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams, - _In_reads_opt_(Count) const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList1, ProcessFrames1) - void ( STDMETHODCALLTYPE *ProcessFrames1 )( - ID3D12VideoProcessCommandList3 * This, - _In_ ID3D12VideoProcessor *pVideoProcessor, - _In_ const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_ARGUMENTS *pOutputArguments, - UINT NumInputStreams, - _In_reads_(NumInputStreams) const D3D12_VIDEO_PROCESS_INPUT_STREAM_ARGUMENTS1 *pInputArguments); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList2, SetProtectedResourceSession) - void ( STDMETHODCALLTYPE *SetProtectedResourceSession )( - ID3D12VideoProcessCommandList3 * This, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList2, InitializeExtensionCommand) - void ( STDMETHODCALLTYPE *InitializeExtensionCommand )( - ID3D12VideoProcessCommandList3 * This, - _In_ ID3D12VideoExtensionCommand *pExtensionCommand, - _In_reads_bytes_(InitializationParametersSizeInBytes) const void *pInitializationParameters, - SIZE_T InitializationParametersSizeInBytes); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList2, ExecuteExtensionCommand) - void ( STDMETHODCALLTYPE *ExecuteExtensionCommand )( - ID3D12VideoProcessCommandList3 * This, - _In_ ID3D12VideoExtensionCommand *pExtensionCommand, - _In_reads_bytes_(ExecutionParametersSizeInBytes) const void *pExecutionParameters, - SIZE_T ExecutionParametersSizeInBytes); - - DECLSPEC_XFGVIRT(ID3D12VideoProcessCommandList3, Barrier) - void ( STDMETHODCALLTYPE *Barrier )( - ID3D12VideoProcessCommandList3 * This, - UINT32 NumBarrierGroups, - _In_reads_(NumBarrierGroups) const D3D12_BARRIER_GROUP *pBarrierGroups); - - END_INTERFACE - } ID3D12VideoProcessCommandList3Vtbl; - - interface ID3D12VideoProcessCommandList3 - { - CONST_VTBL struct ID3D12VideoProcessCommandList3Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12VideoProcessCommandList3_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12VideoProcessCommandList3_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12VideoProcessCommandList3_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12VideoProcessCommandList3_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12VideoProcessCommandList3_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12VideoProcessCommandList3_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12VideoProcessCommandList3_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12VideoProcessCommandList3_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12VideoProcessCommandList3_GetType(This) \ - ( (This)->lpVtbl -> GetType(This) ) - -#define ID3D12VideoProcessCommandList3_Close(This) \ - ( (This)->lpVtbl -> Close(This) ) - -#define ID3D12VideoProcessCommandList3_Reset(This,pAllocator) \ - ( (This)->lpVtbl -> Reset(This,pAllocator) ) - -#define ID3D12VideoProcessCommandList3_ClearState(This) \ - ( (This)->lpVtbl -> ClearState(This) ) - -#define ID3D12VideoProcessCommandList3_ResourceBarrier(This,NumBarriers,pBarriers) \ - ( (This)->lpVtbl -> ResourceBarrier(This,NumBarriers,pBarriers) ) - -#define ID3D12VideoProcessCommandList3_DiscardResource(This,pResource,pRegion) \ - ( (This)->lpVtbl -> DiscardResource(This,pResource,pRegion) ) - -#define ID3D12VideoProcessCommandList3_BeginQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> BeginQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12VideoProcessCommandList3_EndQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> EndQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12VideoProcessCommandList3_ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) \ - ( (This)->lpVtbl -> ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) ) - -#define ID3D12VideoProcessCommandList3_SetPredication(This,pBuffer,AlignedBufferOffset,Operation) \ - ( (This)->lpVtbl -> SetPredication(This,pBuffer,AlignedBufferOffset,Operation) ) - -#define ID3D12VideoProcessCommandList3_SetMarker(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> SetMarker(This,Metadata,pData,Size) ) - -#define ID3D12VideoProcessCommandList3_BeginEvent(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> BeginEvent(This,Metadata,pData,Size) ) - -#define ID3D12VideoProcessCommandList3_EndEvent(This) \ - ( (This)->lpVtbl -> EndEvent(This) ) - -#define ID3D12VideoProcessCommandList3_ProcessFrames(This,pVideoProcessor,pOutputArguments,NumInputStreams,pInputArguments) \ - ( (This)->lpVtbl -> ProcessFrames(This,pVideoProcessor,pOutputArguments,NumInputStreams,pInputArguments) ) - -#define ID3D12VideoProcessCommandList3_WriteBufferImmediate(This,Count,pParams,pModes) \ - ( (This)->lpVtbl -> WriteBufferImmediate(This,Count,pParams,pModes) ) - -#define ID3D12VideoProcessCommandList3_ProcessFrames1(This,pVideoProcessor,pOutputArguments,NumInputStreams,pInputArguments) \ - ( (This)->lpVtbl -> ProcessFrames1(This,pVideoProcessor,pOutputArguments,NumInputStreams,pInputArguments) ) - -#define ID3D12VideoProcessCommandList3_SetProtectedResourceSession(This,pProtectedResourceSession) \ - ( (This)->lpVtbl -> SetProtectedResourceSession(This,pProtectedResourceSession) ) - -#define ID3D12VideoProcessCommandList3_InitializeExtensionCommand(This,pExtensionCommand,pInitializationParameters,InitializationParametersSizeInBytes) \ - ( (This)->lpVtbl -> InitializeExtensionCommand(This,pExtensionCommand,pInitializationParameters,InitializationParametersSizeInBytes) ) - -#define ID3D12VideoProcessCommandList3_ExecuteExtensionCommand(This,pExtensionCommand,pExecutionParameters,ExecutionParametersSizeInBytes) \ - ( (This)->lpVtbl -> ExecuteExtensionCommand(This,pExtensionCommand,pExecutionParameters,ExecutionParametersSizeInBytes) ) - -#define ID3D12VideoProcessCommandList3_Barrier(This,NumBarrierGroups,pBarrierGroups) \ - ( (This)->lpVtbl -> Barrier(This,NumBarrierGroups,pBarrierGroups) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12VideoProcessCommandList3_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12VideoEncodeCommandList1_INTERFACE_DEFINED__ -#define __ID3D12VideoEncodeCommandList1_INTERFACE_DEFINED__ - -/* interface ID3D12VideoEncodeCommandList1 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12VideoEncodeCommandList1; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("94971eca-2bdb-4769-88cf-3675ea757ebc") - ID3D12VideoEncodeCommandList1 : public ID3D12VideoEncodeCommandList - { - public: - virtual void STDMETHODCALLTYPE InitializeExtensionCommand( - _In_ ID3D12VideoExtensionCommand *pExtensionCommand, - _In_reads_bytes_(InitializationParametersSizeInBytes) const void *pInitializationParameters, - SIZE_T InitializationParametersSizeInBytes) = 0; - - virtual void STDMETHODCALLTYPE ExecuteExtensionCommand( - _In_ ID3D12VideoExtensionCommand *pExtensionCommand, - _In_reads_bytes_(ExecutionParametersSizeInBytes) const void *pExecutionParameters, - SIZE_T ExecutionParametersSizeInBytes) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12VideoEncodeCommandList1Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12VideoEncodeCommandList1 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12VideoEncodeCommandList1 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12VideoEncodeCommandList1 * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12VideoEncodeCommandList1 * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12VideoEncodeCommandList1 * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12VideoEncodeCommandList1 * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12VideoEncodeCommandList1 * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12VideoEncodeCommandList1 * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12CommandList, GetType) - D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )( - ID3D12VideoEncodeCommandList1 * This); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, Close) - HRESULT ( STDMETHODCALLTYPE *Close )( - ID3D12VideoEncodeCommandList1 * This); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, Reset) - HRESULT ( STDMETHODCALLTYPE *Reset )( - ID3D12VideoEncodeCommandList1 * This, - _In_ ID3D12CommandAllocator *pAllocator); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, ClearState) - void ( STDMETHODCALLTYPE *ClearState )( - ID3D12VideoEncodeCommandList1 * This); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, ResourceBarrier) - void ( STDMETHODCALLTYPE *ResourceBarrier )( - ID3D12VideoEncodeCommandList1 * This, - _In_ UINT NumBarriers, - _In_reads_(NumBarriers) const D3D12_RESOURCE_BARRIER *pBarriers); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, DiscardResource) - void ( STDMETHODCALLTYPE *DiscardResource )( - ID3D12VideoEncodeCommandList1 * This, - _In_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DISCARD_REGION *pRegion); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, BeginQuery) - void ( STDMETHODCALLTYPE *BeginQuery )( - ID3D12VideoEncodeCommandList1 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, EndQuery) - void ( STDMETHODCALLTYPE *EndQuery )( - ID3D12VideoEncodeCommandList1 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, ResolveQueryData) - void ( STDMETHODCALLTYPE *ResolveQueryData )( - ID3D12VideoEncodeCommandList1 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT StartIndex, - _In_ UINT NumQueries, - _In_ ID3D12Resource *pDestinationBuffer, - _In_ UINT64 AlignedDestinationBufferOffset); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, SetPredication) - void ( STDMETHODCALLTYPE *SetPredication )( - ID3D12VideoEncodeCommandList1 * This, - _In_opt_ ID3D12Resource *pBuffer, - _In_ UINT64 AlignedBufferOffset, - _In_ D3D12_PREDICATION_OP Operation); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, SetMarker) - void ( STDMETHODCALLTYPE *SetMarker )( - ID3D12VideoEncodeCommandList1 * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, BeginEvent) - void ( STDMETHODCALLTYPE *BeginEvent )( - ID3D12VideoEncodeCommandList1 * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, EndEvent) - void ( STDMETHODCALLTYPE *EndEvent )( - ID3D12VideoEncodeCommandList1 * This); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, EstimateMotion) - void ( STDMETHODCALLTYPE *EstimateMotion )( - ID3D12VideoEncodeCommandList1 * This, - _In_ ID3D12VideoMotionEstimator *pMotionEstimator, - _In_ const D3D12_VIDEO_MOTION_ESTIMATOR_OUTPUT *pOutputArguments, - _In_ const D3D12_VIDEO_MOTION_ESTIMATOR_INPUT *pInputArguments); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, ResolveMotionVectorHeap) - void ( STDMETHODCALLTYPE *ResolveMotionVectorHeap )( - ID3D12VideoEncodeCommandList1 * This, - const D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_OUTPUT *pOutputArguments, - const D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_INPUT *pInputArguments); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, WriteBufferImmediate) - void ( STDMETHODCALLTYPE *WriteBufferImmediate )( - ID3D12VideoEncodeCommandList1 * This, - UINT Count, - _In_reads_(Count) const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams, - _In_reads_opt_(Count) const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, SetProtectedResourceSession) - void ( STDMETHODCALLTYPE *SetProtectedResourceSession )( - ID3D12VideoEncodeCommandList1 * This, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList1, InitializeExtensionCommand) - void ( STDMETHODCALLTYPE *InitializeExtensionCommand )( - ID3D12VideoEncodeCommandList1 * This, - _In_ ID3D12VideoExtensionCommand *pExtensionCommand, - _In_reads_bytes_(InitializationParametersSizeInBytes) const void *pInitializationParameters, - SIZE_T InitializationParametersSizeInBytes); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList1, ExecuteExtensionCommand) - void ( STDMETHODCALLTYPE *ExecuteExtensionCommand )( - ID3D12VideoEncodeCommandList1 * This, - _In_ ID3D12VideoExtensionCommand *pExtensionCommand, - _In_reads_bytes_(ExecutionParametersSizeInBytes) const void *pExecutionParameters, - SIZE_T ExecutionParametersSizeInBytes); - - END_INTERFACE - } ID3D12VideoEncodeCommandList1Vtbl; - - interface ID3D12VideoEncodeCommandList1 - { - CONST_VTBL struct ID3D12VideoEncodeCommandList1Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12VideoEncodeCommandList1_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12VideoEncodeCommandList1_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12VideoEncodeCommandList1_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12VideoEncodeCommandList1_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12VideoEncodeCommandList1_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12VideoEncodeCommandList1_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12VideoEncodeCommandList1_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12VideoEncodeCommandList1_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12VideoEncodeCommandList1_GetType(This) \ - ( (This)->lpVtbl -> GetType(This) ) - -#define ID3D12VideoEncodeCommandList1_Close(This) \ - ( (This)->lpVtbl -> Close(This) ) - -#define ID3D12VideoEncodeCommandList1_Reset(This,pAllocator) \ - ( (This)->lpVtbl -> Reset(This,pAllocator) ) - -#define ID3D12VideoEncodeCommandList1_ClearState(This) \ - ( (This)->lpVtbl -> ClearState(This) ) - -#define ID3D12VideoEncodeCommandList1_ResourceBarrier(This,NumBarriers,pBarriers) \ - ( (This)->lpVtbl -> ResourceBarrier(This,NumBarriers,pBarriers) ) - -#define ID3D12VideoEncodeCommandList1_DiscardResource(This,pResource,pRegion) \ - ( (This)->lpVtbl -> DiscardResource(This,pResource,pRegion) ) - -#define ID3D12VideoEncodeCommandList1_BeginQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> BeginQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12VideoEncodeCommandList1_EndQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> EndQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12VideoEncodeCommandList1_ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) \ - ( (This)->lpVtbl -> ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) ) - -#define ID3D12VideoEncodeCommandList1_SetPredication(This,pBuffer,AlignedBufferOffset,Operation) \ - ( (This)->lpVtbl -> SetPredication(This,pBuffer,AlignedBufferOffset,Operation) ) - -#define ID3D12VideoEncodeCommandList1_SetMarker(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> SetMarker(This,Metadata,pData,Size) ) - -#define ID3D12VideoEncodeCommandList1_BeginEvent(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> BeginEvent(This,Metadata,pData,Size) ) - -#define ID3D12VideoEncodeCommandList1_EndEvent(This) \ - ( (This)->lpVtbl -> EndEvent(This) ) - -#define ID3D12VideoEncodeCommandList1_EstimateMotion(This,pMotionEstimator,pOutputArguments,pInputArguments) \ - ( (This)->lpVtbl -> EstimateMotion(This,pMotionEstimator,pOutputArguments,pInputArguments) ) - -#define ID3D12VideoEncodeCommandList1_ResolveMotionVectorHeap(This,pOutputArguments,pInputArguments) \ - ( (This)->lpVtbl -> ResolveMotionVectorHeap(This,pOutputArguments,pInputArguments) ) - -#define ID3D12VideoEncodeCommandList1_WriteBufferImmediate(This,Count,pParams,pModes) \ - ( (This)->lpVtbl -> WriteBufferImmediate(This,Count,pParams,pModes) ) - -#define ID3D12VideoEncodeCommandList1_SetProtectedResourceSession(This,pProtectedResourceSession) \ - ( (This)->lpVtbl -> SetProtectedResourceSession(This,pProtectedResourceSession) ) - -#define ID3D12VideoEncodeCommandList1_InitializeExtensionCommand(This,pExtensionCommand,pInitializationParameters,InitializationParametersSizeInBytes) \ - ( (This)->lpVtbl -> InitializeExtensionCommand(This,pExtensionCommand,pInitializationParameters,InitializationParametersSizeInBytes) ) - -#define ID3D12VideoEncodeCommandList1_ExecuteExtensionCommand(This,pExtensionCommand,pExecutionParameters,ExecutionParametersSizeInBytes) \ - ( (This)->lpVtbl -> ExecuteExtensionCommand(This,pExtensionCommand,pExecutionParameters,ExecutionParametersSizeInBytes) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12VideoEncodeCommandList1_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12video_0000_0022 */ -/* [local] */ - -DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_MPEG2, 0xee27417f, 0x5e28, 0x4e65, 0xbe, 0xea, 0x1d, 0x26, 0xb5, 0x08, 0xad, 0xc9); -DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_MPEG1_AND_MPEG2, 0x86695f12, 0x340e, 0x4f04, 0x9f, 0xd3, 0x92, 0x53, 0xdd, 0x32, 0x74, 0x60); -DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_H264, 0x1b81be68, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5); -DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_H264_STEREO_PROGRESSIVE, 0xd79be8da, 0x0cf1, 0x4c81, 0xb8, 0x2a, 0x69, 0xa4, 0xe2, 0x36, 0xf4, 0x3d); -DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_H264_STEREO, 0xf9aaccbb, 0xc2b6, 0x4cfc, 0x87, 0x79, 0x57, 0x07, 0xb1, 0x76, 0x05, 0x52); -DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_H264_MULTIVIEW, 0x705b9d82, 0x76cf, 0x49d6, 0xb7, 0xe6, 0xac, 0x88, 0x72, 0xdb, 0x01, 0x3c); -DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_VC1, 0x1b81beA3, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5); -DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_VC1_D2010, 0x1b81beA4, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5); -DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_MPEG4PT2_SIMPLE, 0xefd64d74, 0xc9e8,0x41d7,0xa5,0xe9,0xe9,0xb0,0xe3,0x9f,0xa3,0x19); -DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_MPEG4PT2_ADVSIMPLE_NOGMC, 0xed418a9f, 0x010d, 0x4eda, 0x9a, 0xe3, 0x9a, 0x65, 0x35, 0x8d, 0x8d, 0x2e); -DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_HEVC_MAIN, 0x5b11d51b, 0x2f4c, 0x4452, 0xbc, 0xc3, 0x09, 0xf2, 0xa1, 0x16, 0x0c, 0xc0); -DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_HEVC_MAIN10, 0x107af0e0, 0xef1a, 0x4d19, 0xab, 0xa8, 0x67, 0xa1, 0x63, 0x07, 0x3d, 0x13); -DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_HEVC_MONOCHROME, 0x0685b993, 0x3d8c, 0x43a0, 0x8b, 0x28, 0xd7, 0x4c, 0x2d, 0x68, 0x99, 0xa4); -DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_HEVC_MONOCHROME10, 0x142a1d0f, 0x69dd, 0x4ec9, 0x85, 0x91, 0xb1, 0x2f, 0xfc, 0xb9, 0x1a, 0x29); -DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_HEVC_MAIN12, 0x1a72925f, 0x0c2c, 0x4f15, 0x96, 0xfb, 0xb1, 0x7d, 0x14, 0x73, 0x60, 0x3f); -DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_HEVC_MAIN10_422, 0x0bac4fe5, 0x1532, 0x4429, 0xa8, 0x54, 0xf8, 0x4d, 0xe0, 0x49, 0x53, 0xdb); -DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_HEVC_MAIN12_422, 0x55bcac81, 0xf311, 0x4093, 0xa7, 0xd0, 0x1c, 0xbc, 0x0b, 0x84, 0x9b, 0xee); -DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_HEVC_MAIN_444, 0x4008018f, 0xf537, 0x4b36, 0x98, 0xcf, 0x61, 0xaf, 0x8a, 0x2c, 0x1a, 0x33); -DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_HEVC_MAIN10_EXT, 0x9cc55490, 0xe37c, 0x4932, 0x86, 0x84, 0x49, 0x20, 0xf9, 0xf6, 0x40, 0x9c); -DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_HEVC_MAIN10_444, 0x0dabeffa, 0x4458, 0x4602, 0xbc, 0x03, 0x07, 0x95, 0x65, 0x9d, 0x61, 0x7c); -DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_HEVC_MAIN12_444, 0x9798634d, 0xfe9d, 0x48e5, 0xb4, 0xda, 0xdb, 0xec, 0x45, 0xb3, 0xdf, 0x01); -DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_HEVC_MAIN16, 0xa4fbdbb0, 0xa113, 0x482b, 0xa2, 0x32, 0x63, 0x5c, 0xc0, 0x69, 0x7f, 0x6d); -DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_VP9, 0x463707f8, 0xa1d0, 0x4585, 0x87, 0x6d, 0x83, 0xaa, 0x6d, 0x60, 0xb8, 0x9e); -DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_VP9_10BIT_PROFILE2, 0xa4c749ef, 0x6ecf, 0x48aa, 0x84, 0x48, 0x50, 0xa7, 0xa1, 0x16, 0x5f, 0xf7); -DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_VP8, 0x90b899ea, 0x3a62, 0x4705, 0x88, 0xb3, 0x8d, 0xf0, 0x4b, 0x27, 0x44, 0xe7); -DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_AV1_PROFILE0, 0xb8be4ccb, 0xcf53, 0x46ba, 0x8d, 0x59, 0xd6, 0xb8, 0xa6, 0xda, 0x5d, 0x2a); -DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_AV1_PROFILE1, 0x6936ff0f, 0x45b1, 0x4163, 0x9c, 0xc1, 0x64, 0x6e, 0xf6, 0x94, 0x61, 0x08); -DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_AV1_PROFILE2, 0x0c5f2aa1, 0xe541, 0x4089, 0xbb, 0x7b, 0x98, 0x11, 0x0a, 0x19, 0xd7, 0xc8); -DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_AV1_12BIT_PROFILE2, 0x17127009, 0xa00f, 0x4ce1, 0x99, 0x4e, 0xbf, 0x40, 0x81, 0xf6, 0xf3, 0xf0); -DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_AV1_12BIT_PROFILE2_420, 0x2d80bed6, 0x9cac, 0x4835, 0x9e, 0x91, 0x32, 0x7b, 0xbc, 0x4f, 0x9e, 0xe8); -DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_MJPEG_VLD_420, 0x725cb506, 0xc29, 0x43c4, 0x94, 0x40, 0x8e, 0x93, 0x97, 0x90, 0x3a, 0x4); -DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_MJPEG_VLD_422, 0x5b77b9cd, 0x1a35, 0x4c30, 0x9f, 0xd8, 0xef, 0x4b, 0x60, 0xc0, 0x35, 0xdd); -DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_MJPEG_VLD_444, 0xd95161f9, 0xd44, 0x47e6, 0xbc, 0xf5, 0x1b, 0xfb, 0xfb, 0x26, 0x8f, 0x97); -DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_MJPEG_VLD_4444, 0xc91748d5, 0xfd18, 0x4aca, 0x9d, 0xb3, 0x3a, 0x66, 0x34, 0xab, 0x54, 0x7d); -DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_JPEG_VLD_420, 0xcf782c83, 0xbef5, 0x4a2c, 0x87, 0xcb, 0x60, 0x19, 0xe7, 0xb1, 0x75, 0xac); -DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_JPEG_VLD_422, 0xf04df417, 0xeee2, 0x4067, 0xa7, 0x78, 0xf3, 0x5c, 0x15, 0xab, 0x97, 0x21); -DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_JPEG_VLD_444, 0x4cd00e17, 0x89ba, 0x48ef, 0xb9, 0xf9, 0xed, 0xcb, 0x82, 0x71, 0x3f, 0x65); -typedef -enum D3D12_VIDEO_ENCODER_AV1_PROFILE - { - D3D12_VIDEO_ENCODER_AV1_PROFILE_MAIN = 0, - D3D12_VIDEO_ENCODER_AV1_PROFILE_HIGH = 1, - D3D12_VIDEO_ENCODER_AV1_PROFILE_PROFESSIONAL = 2 - } D3D12_VIDEO_ENCODER_AV1_PROFILE; - -typedef -enum D3D12_VIDEO_ENCODER_AV1_LEVELS - { - D3D12_VIDEO_ENCODER_AV1_LEVELS_2_0 = 0, - D3D12_VIDEO_ENCODER_AV1_LEVELS_2_1 = 1, - D3D12_VIDEO_ENCODER_AV1_LEVELS_2_2 = 2, - D3D12_VIDEO_ENCODER_AV1_LEVELS_2_3 = 3, - D3D12_VIDEO_ENCODER_AV1_LEVELS_3_0 = 4, - D3D12_VIDEO_ENCODER_AV1_LEVELS_3_1 = 5, - D3D12_VIDEO_ENCODER_AV1_LEVELS_3_2 = 6, - D3D12_VIDEO_ENCODER_AV1_LEVELS_3_3 = 7, - D3D12_VIDEO_ENCODER_AV1_LEVELS_4_0 = 8, - D3D12_VIDEO_ENCODER_AV1_LEVELS_4_1 = 9, - D3D12_VIDEO_ENCODER_AV1_LEVELS_4_2 = 10, - D3D12_VIDEO_ENCODER_AV1_LEVELS_4_3 = 11, - D3D12_VIDEO_ENCODER_AV1_LEVELS_5_0 = 12, - D3D12_VIDEO_ENCODER_AV1_LEVELS_5_1 = 13, - D3D12_VIDEO_ENCODER_AV1_LEVELS_5_2 = 14, - D3D12_VIDEO_ENCODER_AV1_LEVELS_5_3 = 15, - D3D12_VIDEO_ENCODER_AV1_LEVELS_6_0 = 16, - D3D12_VIDEO_ENCODER_AV1_LEVELS_6_1 = 17, - D3D12_VIDEO_ENCODER_AV1_LEVELS_6_2 = 18, - D3D12_VIDEO_ENCODER_AV1_LEVELS_6_3 = 19, - D3D12_VIDEO_ENCODER_AV1_LEVELS_7_0 = 20, - D3D12_VIDEO_ENCODER_AV1_LEVELS_7_1 = 21, - D3D12_VIDEO_ENCODER_AV1_LEVELS_7_2 = 22, - D3D12_VIDEO_ENCODER_AV1_LEVELS_7_3 = 23 - } D3D12_VIDEO_ENCODER_AV1_LEVELS; - -typedef -enum D3D12_VIDEO_ENCODER_AV1_TIER - { - D3D12_VIDEO_ENCODER_AV1_TIER_MAIN = 0, - D3D12_VIDEO_ENCODER_AV1_TIER_HIGH = 1 - } D3D12_VIDEO_ENCODER_AV1_TIER; - -typedef struct D3D12_VIDEO_ENCODER_AV1_LEVEL_TIER_CONSTRAINTS - { - D3D12_VIDEO_ENCODER_AV1_LEVELS Level; - D3D12_VIDEO_ENCODER_AV1_TIER Tier; - } D3D12_VIDEO_ENCODER_AV1_LEVEL_TIER_CONSTRAINTS; - -typedef -enum D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAGS - { - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_NONE = 0, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_128x128_SUPERBLOCK = 0x1, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_FILTER_INTRA = 0x2, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_INTRA_EDGE_FILTER = 0x4, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_INTERINTRA_COMPOUND = 0x8, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_MASKED_COMPOUND = 0x10, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_WARPED_MOTION = 0x20, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_DUAL_FILTER = 0x40, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_JNT_COMP = 0x80, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_FORCED_INTEGER_MOTION_VECTORS = 0x100, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_SUPER_RESOLUTION = 0x200, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_LOOP_RESTORATION_FILTER = 0x400, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_PALETTE_ENCODING = 0x800, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_CDEF_FILTERING = 0x1000, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_INTRA_BLOCK_COPY = 0x2000, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_FRAME_REFERENCE_MOTION_VECTORS = 0x4000, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_ORDER_HINT_TOOLS = 0x8000, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_AUTO_SEGMENTATION = 0x10000, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_CUSTOM_SEGMENTATION = 0x20000, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_LOOP_FILTER_DELTAS = 0x40000, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_QUANTIZATION_DELTAS = 0x80000, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_QUANTIZATION_MATRIX = 0x100000, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_REDUCED_TX_SET = 0x200000, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_MOTION_MODE_SWITCHABLE = 0x400000, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_ALLOW_HIGH_PRECISION_MV = 0x800000, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_SKIP_MODE_PRESENT = 0x1000000, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_DELTA_LF_PARAMS = 0x2000000 - } D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAGS) -typedef -enum D3D12_VIDEO_ENCODER_AV1_TX_MODE - { - D3D12_VIDEO_ENCODER_AV1_TX_MODE_ONLY4x4 = 0, - D3D12_VIDEO_ENCODER_AV1_TX_MODE_LARGEST = 1, - D3D12_VIDEO_ENCODER_AV1_TX_MODE_SELECT = 2 - } D3D12_VIDEO_ENCODER_AV1_TX_MODE; - -typedef -enum D3D12_VIDEO_ENCODER_AV1_TX_MODE_FLAGS - { - D3D12_VIDEO_ENCODER_AV1_TX_MODE_FLAG_NONE = 0, - D3D12_VIDEO_ENCODER_AV1_TX_MODE_FLAG_ONLY4x4 = ( 1 << D3D12_VIDEO_ENCODER_AV1_TX_MODE_ONLY4x4 ) , - D3D12_VIDEO_ENCODER_AV1_TX_MODE_FLAG_LARGEST = ( 1 << D3D12_VIDEO_ENCODER_AV1_TX_MODE_LARGEST ) , - D3D12_VIDEO_ENCODER_AV1_TX_MODE_FLAG_SELECT = ( 1 << D3D12_VIDEO_ENCODER_AV1_TX_MODE_SELECT ) - } D3D12_VIDEO_ENCODER_AV1_TX_MODE_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_TX_MODE_FLAGS) -typedef -enum D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS - { - D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_EIGHTTAP = 0, - D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_EIGHTTAP_SMOOTH = 1, - D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_EIGHTTAP_SHARP = 2, - D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_BILINEAR = 3, - D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_SWITCHABLE = 4 - } D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS; - -typedef -enum D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_FLAGS - { - D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_FLAG_NONE = 0, - D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_FLAG_EIGHTTAP = ( 1 << D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_EIGHTTAP ) , - D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_FLAG_EIGHTTAP_SMOOTH = ( 1 << D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_EIGHTTAP_SMOOTH ) , - D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_FLAG_EIGHTTAP_SHARP = ( 1 << D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_EIGHTTAP_SHARP ) , - D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_FLAG_BILINEAR = ( 1 << D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_BILINEAR ) , - D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_FLAG_SWITCHABLE = ( 1 << D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_SWITCHABLE ) - } D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_FLAGS) -typedef -enum D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_BLOCK_SIZE - { - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_BLOCK_SIZE_4x4 = 0, - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_BLOCK_SIZE_8x8 = 1, - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_BLOCK_SIZE_16x16 = 2, - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_BLOCK_SIZE_32x32 = 3, - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_BLOCK_SIZE_64x64 = 4 - } D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_BLOCK_SIZE; - -typedef -enum D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE - { - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_DISABLED = 0, - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_Q = 1, - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_LF_Y_V = 2, - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_LF_Y_H = 3, - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_LF_U = 4, - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_LF_V = 5, - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_REF_FRAME = 6, - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_SKIP = 7, - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_GLOBALMV = 8 - } D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE; - -typedef -enum D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAGS - { - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAG_NONE = 0, - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAG_DISABLED = ( 1 << D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_DISABLED ) , - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAG_ALT_Q = ( 1 << D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_Q ) , - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAG_ALT_LF_Y_V = ( 1 << D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_LF_Y_V ) , - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAG_ALT_LF_Y_H = ( 1 << D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_LF_Y_H ) , - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAG_ALT_LF_U = ( 1 << D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_LF_U ) , - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAG_ALT_LF_V = ( 1 << D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_LF_V ) , - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAG_REF_FRAME = ( 1 << D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_REF_FRAME ) , - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAG_ALT_SKIP = ( 1 << D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_SKIP ) , - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAG_ALT_GLOBALMV = ( 1 << D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_GLOBALMV ) - } D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAGS) -typedef -enum D3D12_VIDEO_ENCODER_AV1_RESTORATION_TYPE - { - D3D12_VIDEO_ENCODER_AV1_RESTORATION_TYPE_DISABLED = 0, - D3D12_VIDEO_ENCODER_AV1_RESTORATION_TYPE_SWITCHABLE = 1, - D3D12_VIDEO_ENCODER_AV1_RESTORATION_TYPE_WIENER = 2, - D3D12_VIDEO_ENCODER_AV1_RESTORATION_TYPE_SGRPROJ = 3 - } D3D12_VIDEO_ENCODER_AV1_RESTORATION_TYPE; - -typedef -enum D3D12_VIDEO_ENCODER_AV1_RESTORATION_TILESIZE - { - D3D12_VIDEO_ENCODER_AV1_RESTORATION_TILESIZE_DISABLED = 0, - D3D12_VIDEO_ENCODER_AV1_RESTORATION_TILESIZE_32x32 = 1, - D3D12_VIDEO_ENCODER_AV1_RESTORATION_TILESIZE_64x64 = 2, - D3D12_VIDEO_ENCODER_AV1_RESTORATION_TILESIZE_128x128 = 3, - D3D12_VIDEO_ENCODER_AV1_RESTORATION_TILESIZE_256x256 = 4 - } D3D12_VIDEO_ENCODER_AV1_RESTORATION_TILESIZE; - -typedef -enum D3D12_VIDEO_ENCODER_AV1_RESTORATION_SUPPORT_FLAGS - { - D3D12_VIDEO_ENCODER_AV1_RESTORATION_SUPPORT_FLAG_NOT_SUPPORTED = 0, - D3D12_VIDEO_ENCODER_AV1_RESTORATION_SUPPORT_FLAG_32x32 = 0x1, - D3D12_VIDEO_ENCODER_AV1_RESTORATION_SUPPORT_FLAG_64x64 = 0x2, - D3D12_VIDEO_ENCODER_AV1_RESTORATION_SUPPORT_FLAG_128x128 = 0x4, - D3D12_VIDEO_ENCODER_AV1_RESTORATION_SUPPORT_FLAG_256x256 = 0x8 - } D3D12_VIDEO_ENCODER_AV1_RESTORATION_SUPPORT_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_RESTORATION_SUPPORT_FLAGS) -typedef -enum D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION - { - D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_IDENTITY = 0, - D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_TRANSLATION = 1, - D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_ROTZOOM = 2, - D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_AFFINE = 3 - } D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION; - -typedef -enum D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_FLAGS - { - D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_FLAG_NONE = 0, - D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_FLAG_IDENTITY = ( 1 << D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_IDENTITY ) , - D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_FLAG_TRANSLATION = ( 1 << D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_TRANSLATION ) , - D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_FLAG_ROTZOOM = ( 1 << D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_ROTZOOM ) , - D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_FLAG_AFFINE = ( 1 << D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_AFFINE ) - } D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_FLAGS) -typedef -enum D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAGS - { - D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAG_NONE = 0, - D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAG_QUANTIZATION = 0x1, - D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAG_QUANTIZATION_DELTA = 0x2, - D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAG_LOOP_FILTER = 0x4, - D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAG_LOOP_FILTER_DELTA = 0x8, - D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAG_CDEF_DATA = 0x10, - D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAG_CONTEXT_UPDATE_TILE_ID = 0x20, - D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAG_COMPOUND_PREDICTION_MODE = 0x40, - D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAG_PRIMARY_REF_FRAME = 0x80, - D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAG_REFERENCE_INDICES = 0x100 - } D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAGS) -typedef struct D3D12_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION_SUPPORT - { - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAGS SupportedFeatureFlags; - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAGS RequiredFeatureFlags; - D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_FLAGS SupportedInterpolationFilters; - D3D12_VIDEO_ENCODER_AV1_RESTORATION_SUPPORT_FLAGS SupportedRestorationParams[ 3 ][ 3 ]; - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAGS SupportedSegmentationModes; - D3D12_VIDEO_ENCODER_AV1_TX_MODE_FLAGS SupportedTxModes[ 4 ]; - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_BLOCK_SIZE SegmentationBlockSize; - D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAGS PostEncodeValuesFlags; - UINT MaxTemporalLayers; - UINT MaxSpatialLayers; - } D3D12_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION_SUPPORT; - -typedef -enum D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE - { - D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_KEY_FRAME = 0, - D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_INTER_FRAME = 1, - D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_INTRA_ONLY_FRAME = 2, - D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_SWITCH_FRAME = 3 - } D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE; - -typedef -enum D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_FLAGS - { - D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_FLAG_NONE = 0, - D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_FLAG_KEY_FRAME = ( 1 << D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_KEY_FRAME ) , - D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_FLAG_INTER_FRAME = ( 1 << D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_INTER_FRAME ) , - D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_FLAG_INTRA_ONLY_FRAME = ( 1 << D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_INTRA_ONLY_FRAME ) , - D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_FLAG_SWITCH_FRAME = ( 1 << D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_SWITCH_FRAME ) - } D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_FLAGS) -typedef -enum D3D12_VIDEO_ENCODER_AV1_COMP_PREDICTION_TYPE - { - D3D12_VIDEO_ENCODER_AV1_COMP_PREDICTION_TYPE_SINGLE_REFERENCE = 0, - D3D12_VIDEO_ENCODER_AV1_COMP_PREDICTION_TYPE_COMPOUND_REFERENCE = 1 - } D3D12_VIDEO_ENCODER_AV1_COMP_PREDICTION_TYPE; - -typedef struct D3D12_VIDEO_ENCODER_CODEC_AV1_PICTURE_CONTROL_SUPPORT - { - D3D12_VIDEO_ENCODER_AV1_COMP_PREDICTION_TYPE PredictionMode; - UINT MaxUniqueReferencesPerFrame; - D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_FLAGS SupportedFrameTypes; - D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_FLAGS SupportedReferenceWarpedMotionFlags; - } D3D12_VIDEO_ENCODER_CODEC_AV1_PICTURE_CONTROL_SUPPORT; - -typedef struct D3D12_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION - { - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAGS FeatureFlags; - UINT OrderHintBitsMinus1; - } D3D12_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION; - -typedef struct D3D12_VIDEO_ENCODER_AV1_SEQUENCE_STRUCTURE - { - UINT IntraDistance; - UINT InterFramePeriod; - } D3D12_VIDEO_ENCODER_AV1_SEQUENCE_STRUCTURE; - -typedef struct D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_WARPED_MOTION_INFO - { - D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION TransformationType; - INT TransformationMatrix[ 8 ]; - BOOL InvalidAffineSet; - } D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_WARPED_MOTION_INFO; - -typedef struct D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR - { - UINT ReconstructedPictureResourceIndex; - UINT TemporalLayerIndexPlus1; - UINT SpatialLayerIndexPlus1; - D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE FrameType; - D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_WARPED_MOTION_INFO WarpedMotionInfo; - UINT OrderHint; - UINT PictureIndex; - } D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR; - -typedef -enum D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAGS - { - D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_NONE = 0, - D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_ENABLE_ERROR_RESILIENT_MODE = 0x1, - D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_DISABLE_CDF_UPDATE = 0x2, - D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_ENABLE_PALETTE_ENCODING = 0x4, - D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_ENABLE_SKIP_MODE = 0x8, - D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_FRAME_REFERENCE_MOTION_VECTORS = 0x10, - D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_FORCE_INTEGER_MOTION_VECTORS = 0x20, - D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_ALLOW_INTRA_BLOCK_COPY = 0x40, - D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_USE_SUPER_RESOLUTION = 0x80, - D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_DISABLE_FRAME_END_UPDATE_CDF = 0x100, - D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_ENABLE_FRAME_SEGMENTATION_AUTO = 0x200, - D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_ENABLE_FRAME_SEGMENTATION_CUSTOM = 0x400, - D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_ENABLE_WARPED_MOTION = 0x800, - D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_REDUCED_TX_SET = 0x1000, - D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_MOTION_MODE_SWITCHABLE = 0x2000, - D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_ALLOW_HIGH_PRECISION_MV = 0x4000 - } D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAGS) -typedef struct D3D12_VIDEO_ENCODER_AV1_RESTORATION_CONFIG - { - D3D12_VIDEO_ENCODER_AV1_RESTORATION_TYPE FrameRestorationType[ 3 ]; - D3D12_VIDEO_ENCODER_AV1_RESTORATION_TILESIZE LoopRestorationPixelSize[ 3 ]; - } D3D12_VIDEO_ENCODER_AV1_RESTORATION_CONFIG; - -typedef struct D3D12_VIDEO_ENCODER_AV1_SEGMENT_DATA - { - UINT64 EnabledFeatures; - INT64 FeatureValue[ 8 ]; - } D3D12_VIDEO_ENCODER_AV1_SEGMENT_DATA; - -typedef struct D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG - { - UINT64 UpdateMap; - UINT64 TemporalUpdate; - UINT64 UpdateData; - UINT64 NumSegments; - D3D12_VIDEO_ENCODER_AV1_SEGMENT_DATA SegmentsData[ 8 ]; - } D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG; - -typedef struct D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MAP - { - UINT SegmentsMapByteSize; - UINT8 *pSegmentsMap; - } D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MAP; - -typedef struct D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG - { - UINT64 LoopFilterLevel[ 2 ]; - UINT64 LoopFilterLevelU; - UINT64 LoopFilterLevelV; - UINT64 LoopFilterSharpnessLevel; - UINT64 LoopFilterDeltaEnabled; - UINT64 UpdateRefDelta; - INT64 RefDeltas[ 8 ]; - UINT64 UpdateModeDelta; - INT64 ModeDeltas[ 2 ]; - } D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG; - -typedef struct D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG - { - UINT64 DeltaLFPresent; - UINT64 DeltaLFMulti; - UINT64 DeltaLFRes; - } D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG; - -typedef struct D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG - { - UINT64 BaseQIndex; - INT64 YDCDeltaQ; - INT64 UDCDeltaQ; - INT64 UACDeltaQ; - INT64 VDCDeltaQ; - INT64 VACDeltaQ; - UINT64 UsingQMatrix; - UINT64 QMY; - UINT64 QMU; - UINT64 QMV; - } D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG; - -typedef struct D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG - { - UINT64 DeltaQPresent; - UINT64 DeltaQRes; - } D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG; - -typedef struct D3D12_VIDEO_ENCODER_AV1_CDEF_CONFIG - { - UINT64 CdefBits; - UINT64 CdefDampingMinus3; - UINT64 CdefYPriStrength[ 8 ]; - UINT64 CdefUVPriStrength[ 8 ]; - UINT64 CdefYSecStrength[ 8 ]; - UINT64 CdefUVSecStrength[ 8 ]; - } D3D12_VIDEO_ENCODER_AV1_CDEF_CONFIG; - -typedef struct D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA - { - D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAGS Flags; - D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE FrameType; - D3D12_VIDEO_ENCODER_AV1_COMP_PREDICTION_TYPE CompoundPredictionType; - D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS InterpolationFilter; - D3D12_VIDEO_ENCODER_AV1_RESTORATION_CONFIG FrameRestorationConfig; - D3D12_VIDEO_ENCODER_AV1_TX_MODE TxMode; - UINT SuperResDenominator; - UINT OrderHint; - UINT PictureIndex; - UINT TemporalLayerIndexPlus1; - UINT SpatialLayerIndexPlus1; - D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR ReferenceFramesReconPictureDescriptors[ 8 ]; - UINT ReferenceIndices[ 7 ]; - UINT PrimaryRefFrame; - UINT RefreshFrameFlags; - D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG LoopFilter; - D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG LoopFilterDelta; - D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG Quantization; - D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG QuantizationDelta; - D3D12_VIDEO_ENCODER_AV1_CDEF_CONFIG CDEF; - UINT QPMapValuesCount; - _Field_size_full_(QPMapValuesCount) INT16 *pRateControlQPMap; - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG CustomSegmentation; - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MAP CustomSegmentsMap; - } D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA; - -typedef struct D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_TILES - { - UINT64 RowCount; - UINT64 ColCount; - UINT64 RowHeights[ 64 ]; - UINT64 ColWidths[ 64 ]; - UINT64 ContextUpdateTileId; - } D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_TILES; - -typedef struct D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES - { - UINT64 CompoundPredictionType; - D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG LoopFilter; - D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG LoopFilterDelta; - D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG Quantization; - D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG QuantizationDelta; - D3D12_VIDEO_ENCODER_AV1_CDEF_CONFIG CDEF; - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG SegmentationConfig; - UINT64 PrimaryRefFrame; - UINT64 ReferenceIndices[ 7 ]; - } D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES; - -typedef -enum D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE - { - D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE_ABSOLUTE_QP_MAP = 0, - D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE_CQP = 1, - D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE_CBR = 2, - D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE_VBR = 3, - D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE_QVBR = 4 - } D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE; - -typedef -enum D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAGS - { - D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_NONE = 0, - D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_DELTA_QP = 0x1, - D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_FRAME_ANALYSIS = 0x2, - D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_QP_RANGE = 0x4, - D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_INITIAL_QP = 0x8, - D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_MAX_FRAME_SIZE = 0x10, - D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_VBV_SIZES = 0x20, - D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_EXTENSION1_SUPPORT = 0x40, - D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_QUALITY_VS_SPEED = 0x80 - } D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAGS) -typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL_CQP - { - UINT ConstantQP_FullIntracodedFrame; - UINT ConstantQP_InterPredictedFrame_PrevRefOnly; - UINT ConstantQP_InterPredictedFrame_BiDirectionalRef; - } D3D12_VIDEO_ENCODER_RATE_CONTROL_CQP; - -typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL_CQP1 - { - UINT ConstantQP_FullIntracodedFrame; - UINT ConstantQP_InterPredictedFrame_PrevRefOnly; - UINT ConstantQP_InterPredictedFrame_BiDirectionalRef; - UINT QualityVsSpeed; - } D3D12_VIDEO_ENCODER_RATE_CONTROL_CQP1; - -typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL_CBR - { - UINT InitialQP; - UINT MinQP; - UINT MaxQP; - UINT64 MaxFrameBitSize; - UINT64 TargetBitRate; - UINT64 VBVCapacity; - UINT64 InitialVBVFullness; - } D3D12_VIDEO_ENCODER_RATE_CONTROL_CBR; - -typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL_CBR1 - { - UINT InitialQP; - UINT MinQP; - UINT MaxQP; - UINT64 MaxFrameBitSize; - UINT64 TargetBitRate; - UINT64 VBVCapacity; - UINT64 InitialVBVFullness; - UINT QualityVsSpeed; - } D3D12_VIDEO_ENCODER_RATE_CONTROL_CBR1; - -typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL_VBR - { - UINT InitialQP; - UINT MinQP; - UINT MaxQP; - UINT64 MaxFrameBitSize; - UINT64 TargetAvgBitRate; - UINT64 PeakBitRate; - UINT64 VBVCapacity; - UINT64 InitialVBVFullness; - } D3D12_VIDEO_ENCODER_RATE_CONTROL_VBR; - -typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL_VBR1 - { - UINT InitialQP; - UINT MinQP; - UINT MaxQP; - UINT64 MaxFrameBitSize; - UINT64 TargetAvgBitRate; - UINT64 PeakBitRate; - UINT64 VBVCapacity; - UINT64 InitialVBVFullness; - UINT QualityVsSpeed; - } D3D12_VIDEO_ENCODER_RATE_CONTROL_VBR1; - -typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL_QVBR - { - UINT InitialQP; - UINT MinQP; - UINT MaxQP; - UINT64 MaxFrameBitSize; - UINT64 TargetAvgBitRate; - UINT64 PeakBitRate; - UINT ConstantQualityTarget; - } D3D12_VIDEO_ENCODER_RATE_CONTROL_QVBR; - -typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL_QVBR1 - { - UINT InitialQP; - UINT MinQP; - UINT MaxQP; - UINT64 MaxFrameBitSize; - UINT64 TargetAvgBitRate; - UINT64 PeakBitRate; - UINT ConstantQualityTarget; - UINT64 VBVCapacity; - UINT64 InitialVBVFullness; - UINT QualityVsSpeed; - } D3D12_VIDEO_ENCODER_RATE_CONTROL_QVBR1; - -typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL_ABSOLUTE_QP_MAP - { - UINT QualityVsSpeed; - } D3D12_VIDEO_ENCODER_RATE_CONTROL_ABSOLUTE_QP_MAP; - -typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL_CONFIGURATION_PARAMS - { - UINT DataSize; - union - { - const D3D12_VIDEO_ENCODER_RATE_CONTROL_CQP *pConfiguration_CQP; - const D3D12_VIDEO_ENCODER_RATE_CONTROL_CBR *pConfiguration_CBR; - const D3D12_VIDEO_ENCODER_RATE_CONTROL_VBR *pConfiguration_VBR; - const D3D12_VIDEO_ENCODER_RATE_CONTROL_QVBR *pConfiguration_QVBR; - const D3D12_VIDEO_ENCODER_RATE_CONTROL_CQP1 *pConfiguration_CQP1; - const D3D12_VIDEO_ENCODER_RATE_CONTROL_CBR1 *pConfiguration_CBR1; - const D3D12_VIDEO_ENCODER_RATE_CONTROL_VBR1 *pConfiguration_VBR1; - const D3D12_VIDEO_ENCODER_RATE_CONTROL_QVBR1 *pConfiguration_QVBR1; - const D3D12_VIDEO_ENCODER_RATE_CONTROL_ABSOLUTE_QP_MAP *pConfiguration_AbsoluteQPMap; - } ; - } D3D12_VIDEO_ENCODER_RATE_CONTROL_CONFIGURATION_PARAMS; - -typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL - { - D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE Mode; - D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAGS Flags; - D3D12_VIDEO_ENCODER_RATE_CONTROL_CONFIGURATION_PARAMS ConfigParams; - DXGI_RATIONAL TargetFrameRate; - } D3D12_VIDEO_ENCODER_RATE_CONTROL; - -typedef -enum D3D12_VIDEO_ENCODER_CODEC - { - D3D12_VIDEO_ENCODER_CODEC_H264 = 0, - D3D12_VIDEO_ENCODER_CODEC_HEVC = 1, - D3D12_VIDEO_ENCODER_CODEC_AV1 = 2 - } D3D12_VIDEO_ENCODER_CODEC; - -typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_CODEC - { - UINT NodeIndex; - D3D12_VIDEO_ENCODER_CODEC Codec; - BOOL IsSupported; - } D3D12_FEATURE_DATA_VIDEO_ENCODER_CODEC; - -typedef -enum D3D12_VIDEO_ENCODER_PROFILE_H264 - { - D3D12_VIDEO_ENCODER_PROFILE_H264_MAIN = 0, - D3D12_VIDEO_ENCODER_PROFILE_H264_HIGH = 1, - D3D12_VIDEO_ENCODER_PROFILE_H264_HIGH_10 = 2 - } D3D12_VIDEO_ENCODER_PROFILE_H264; - -typedef -enum D3D12_VIDEO_ENCODER_PROFILE_HEVC - { - D3D12_VIDEO_ENCODER_PROFILE_HEVC_MAIN = 0, - D3D12_VIDEO_ENCODER_PROFILE_HEVC_MAIN10 = 1, - D3D12_VIDEO_ENCODER_PROFILE_HEVC_MAIN12 = 2, - D3D12_VIDEO_ENCODER_PROFILE_HEVC_MAIN10_422 = 3, - D3D12_VIDEO_ENCODER_PROFILE_HEVC_MAIN12_422 = 4, - D3D12_VIDEO_ENCODER_PROFILE_HEVC_MAIN_444 = 5, - D3D12_VIDEO_ENCODER_PROFILE_HEVC_MAIN10_444 = 6, - D3D12_VIDEO_ENCODER_PROFILE_HEVC_MAIN12_444 = 7, - D3D12_VIDEO_ENCODER_PROFILE_HEVC_MAIN16_444 = 8 - } D3D12_VIDEO_ENCODER_PROFILE_HEVC; - -typedef struct D3D12_VIDEO_ENCODER_PROFILE_DESC - { - UINT DataSize; - union - { - D3D12_VIDEO_ENCODER_PROFILE_H264 *pH264Profile; - D3D12_VIDEO_ENCODER_PROFILE_HEVC *pHEVCProfile; - D3D12_VIDEO_ENCODER_AV1_PROFILE *pAV1Profile; - } ; - } D3D12_VIDEO_ENCODER_PROFILE_DESC; - -typedef -enum D3D12_VIDEO_ENCODER_LEVELS_H264 - { - D3D12_VIDEO_ENCODER_LEVELS_H264_1 = 0, - D3D12_VIDEO_ENCODER_LEVELS_H264_1b = 1, - D3D12_VIDEO_ENCODER_LEVELS_H264_11 = 2, - D3D12_VIDEO_ENCODER_LEVELS_H264_12 = 3, - D3D12_VIDEO_ENCODER_LEVELS_H264_13 = 4, - D3D12_VIDEO_ENCODER_LEVELS_H264_2 = 5, - D3D12_VIDEO_ENCODER_LEVELS_H264_21 = 6, - D3D12_VIDEO_ENCODER_LEVELS_H264_22 = 7, - D3D12_VIDEO_ENCODER_LEVELS_H264_3 = 8, - D3D12_VIDEO_ENCODER_LEVELS_H264_31 = 9, - D3D12_VIDEO_ENCODER_LEVELS_H264_32 = 10, - D3D12_VIDEO_ENCODER_LEVELS_H264_4 = 11, - D3D12_VIDEO_ENCODER_LEVELS_H264_41 = 12, - D3D12_VIDEO_ENCODER_LEVELS_H264_42 = 13, - D3D12_VIDEO_ENCODER_LEVELS_H264_5 = 14, - D3D12_VIDEO_ENCODER_LEVELS_H264_51 = 15, - D3D12_VIDEO_ENCODER_LEVELS_H264_52 = 16, - D3D12_VIDEO_ENCODER_LEVELS_H264_6 = 17, - D3D12_VIDEO_ENCODER_LEVELS_H264_61 = 18, - D3D12_VIDEO_ENCODER_LEVELS_H264_62 = 19 - } D3D12_VIDEO_ENCODER_LEVELS_H264; - -typedef -enum D3D12_VIDEO_ENCODER_TIER_HEVC - { - D3D12_VIDEO_ENCODER_TIER_HEVC_MAIN = 0, - D3D12_VIDEO_ENCODER_TIER_HEVC_HIGH = 1 - } D3D12_VIDEO_ENCODER_TIER_HEVC; - -typedef -enum D3D12_VIDEO_ENCODER_LEVELS_HEVC - { - D3D12_VIDEO_ENCODER_LEVELS_HEVC_1 = 0, - D3D12_VIDEO_ENCODER_LEVELS_HEVC_2 = 1, - D3D12_VIDEO_ENCODER_LEVELS_HEVC_21 = 2, - D3D12_VIDEO_ENCODER_LEVELS_HEVC_3 = 3, - D3D12_VIDEO_ENCODER_LEVELS_HEVC_31 = 4, - D3D12_VIDEO_ENCODER_LEVELS_HEVC_4 = 5, - D3D12_VIDEO_ENCODER_LEVELS_HEVC_41 = 6, - D3D12_VIDEO_ENCODER_LEVELS_HEVC_5 = 7, - D3D12_VIDEO_ENCODER_LEVELS_HEVC_51 = 8, - D3D12_VIDEO_ENCODER_LEVELS_HEVC_52 = 9, - D3D12_VIDEO_ENCODER_LEVELS_HEVC_6 = 10, - D3D12_VIDEO_ENCODER_LEVELS_HEVC_61 = 11, - D3D12_VIDEO_ENCODER_LEVELS_HEVC_62 = 12 - } D3D12_VIDEO_ENCODER_LEVELS_HEVC; - -typedef struct D3D12_VIDEO_ENCODER_LEVEL_TIER_CONSTRAINTS_HEVC - { - D3D12_VIDEO_ENCODER_LEVELS_HEVC Level; - D3D12_VIDEO_ENCODER_TIER_HEVC Tier; - } D3D12_VIDEO_ENCODER_LEVEL_TIER_CONSTRAINTS_HEVC; - -typedef struct D3D12_VIDEO_ENCODER_LEVEL_SETTING - { - UINT DataSize; - union - { - D3D12_VIDEO_ENCODER_LEVELS_H264 *pH264LevelSetting; - D3D12_VIDEO_ENCODER_LEVEL_TIER_CONSTRAINTS_HEVC *pHEVCLevelSetting; - D3D12_VIDEO_ENCODER_AV1_LEVEL_TIER_CONSTRAINTS *pAV1LevelSetting; - } ; - } D3D12_VIDEO_ENCODER_LEVEL_SETTING; - -typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_PROFILE_LEVEL - { - UINT NodeIndex; - D3D12_VIDEO_ENCODER_CODEC Codec; - D3D12_VIDEO_ENCODER_PROFILE_DESC Profile; - BOOL IsSupported; - D3D12_VIDEO_ENCODER_LEVEL_SETTING MinSupportedLevel; - D3D12_VIDEO_ENCODER_LEVEL_SETTING MaxSupportedLevel; - } D3D12_FEATURE_DATA_VIDEO_ENCODER_PROFILE_LEVEL; - -typedef struct D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC - { - UINT Width; - UINT Height; - } D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC; - -typedef struct D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_RATIO_DESC - { - UINT WidthRatio; - UINT HeightRatio; - } D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_RATIO_DESC; - -typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_OUTPUT_RESOLUTION_RATIOS_COUNT - { - UINT NodeIndex; - D3D12_VIDEO_ENCODER_CODEC Codec; - UINT ResolutionRatiosCount; - } D3D12_FEATURE_DATA_VIDEO_ENCODER_OUTPUT_RESOLUTION_RATIOS_COUNT; - -typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_OUTPUT_RESOLUTION - { - UINT NodeIndex; - D3D12_VIDEO_ENCODER_CODEC Codec; - UINT ResolutionRatiosCount; - BOOL IsSupported; - D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC MinResolutionSupported; - D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC MaxResolutionSupported; - UINT ResolutionWidthMultipleRequirement; - UINT ResolutionHeightMultipleRequirement; - _Field_size_full_(ResolutionRatiosCount) D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_RATIO_DESC *pResolutionRatios; - } D3D12_FEATURE_DATA_VIDEO_ENCODER_OUTPUT_RESOLUTION; - -typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_INPUT_FORMAT - { - UINT NodeIndex; - D3D12_VIDEO_ENCODER_CODEC Codec; - D3D12_VIDEO_ENCODER_PROFILE_DESC Profile; - DXGI_FORMAT Format; - BOOL IsSupported; - } D3D12_FEATURE_DATA_VIDEO_ENCODER_INPUT_FORMAT; - -typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_RATE_CONTROL_MODE - { - UINT NodeIndex; - D3D12_VIDEO_ENCODER_CODEC Codec; - D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE RateControlMode; - BOOL IsSupported; - } D3D12_FEATURE_DATA_VIDEO_ENCODER_RATE_CONTROL_MODE; - -typedef -enum D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE - { - D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE_NONE = 0, - D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE_ROW_BASED = 1 - } D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE; - -typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_INTRA_REFRESH_MODE - { - UINT NodeIndex; - D3D12_VIDEO_ENCODER_CODEC Codec; - D3D12_VIDEO_ENCODER_PROFILE_DESC Profile; - D3D12_VIDEO_ENCODER_LEVEL_SETTING Level; - D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE IntraRefreshMode; - BOOL IsSupported; - } D3D12_FEATURE_DATA_VIDEO_ENCODER_INTRA_REFRESH_MODE; - -typedef -enum D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE - { - D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_FULL_FRAME = 0, - D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_BYTES_PER_SUBREGION = 1, - D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_SQUARE_UNITS_PER_SUBREGION_ROW_UNALIGNED = 2, - D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_UNIFORM_PARTITIONING_ROWS_PER_SUBREGION = 3, - D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_UNIFORM_PARTITIONING_SUBREGIONS_PER_FRAME = 4, - D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_UNIFORM_GRID_PARTITION = 5, - D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_CONFIGURABLE_GRID_PARTITION = 6 - } D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE; - -typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE - { - UINT NodeIndex; - D3D12_VIDEO_ENCODER_CODEC Codec; - D3D12_VIDEO_ENCODER_PROFILE_DESC Profile; - D3D12_VIDEO_ENCODER_LEVEL_SETTING Level; - D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE SubregionMode; - BOOL IsSupported; - } D3D12_FEATURE_DATA_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE; - -typedef -enum D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAGS - { - D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAG_NONE = 0, - D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAG_NOT_SPECIFIED = 0x1, - D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAG_CODEC_CONSTRAINT = 0x2, - D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAG_HARDWARE_CONSTRAINT = 0x4, - D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAG_ROWS_COUNT = 0x8, - D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAG_COLS_COUNT = 0x10, - D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAG_WIDTH = 0x20, - D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAG_AREA = 0x40, - D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAG_TOTAL_TILES = 0x80 - } D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAGS) -typedef struct D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_SUPPORT - { - BOOL Use128SuperBlocks; - D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_TILES TilesConfiguration; - D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAGS ValidationFlags; - UINT MinTileRows; - UINT MaxTileRows; - UINT MinTileCols; - UINT MaxTileCols; - UINT MinTileWidth; - UINT MaxTileWidth; - UINT MinTileArea; - UINT MaxTileArea; - UINT TileSizeBytesMinus1; - } D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_SUPPORT; - -typedef struct D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_CONFIG_SUPPORT - { - UINT DataSize; - union - { - D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_SUPPORT *pAV1Support; - } ; - } D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_CONFIG_SUPPORT; - -typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_CONFIG - { - UINT NodeIndex; - D3D12_VIDEO_ENCODER_CODEC Codec; - D3D12_VIDEO_ENCODER_PROFILE_DESC Profile; - D3D12_VIDEO_ENCODER_LEVEL_SETTING Level; - D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE SubregionMode; - D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC FrameResolution; - D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_CONFIG_SUPPORT CodecSupport; - BOOL IsSupported; - } D3D12_FEATURE_DATA_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_CONFIG; - -typedef -enum D3D12_VIDEO_ENCODER_HEAP_FLAGS - { - D3D12_VIDEO_ENCODER_HEAP_FLAG_NONE = 0 - } D3D12_VIDEO_ENCODER_HEAP_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_HEAP_FLAGS) -typedef struct D3D12_VIDEO_ENCODER_HEAP_DESC - { - UINT NodeMask; - D3D12_VIDEO_ENCODER_HEAP_FLAGS Flags; - D3D12_VIDEO_ENCODER_CODEC EncodeCodec; - D3D12_VIDEO_ENCODER_PROFILE_DESC EncodeProfile; - D3D12_VIDEO_ENCODER_LEVEL_SETTING EncodeLevel; - UINT ResolutionsListCount; - _Field_size_full_(ResolutionsListCount) const D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC *pResolutionList; - } D3D12_VIDEO_ENCODER_HEAP_DESC; - -typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_HEAP_SIZE - { - D3D12_VIDEO_ENCODER_HEAP_DESC HeapDesc; - BOOL IsSupported; - UINT64 MemoryPoolL0Size; - UINT64 MemoryPoolL1Size; - } D3D12_FEATURE_DATA_VIDEO_ENCODER_HEAP_SIZE; - -typedef -enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAGS - { - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_NONE = 0, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_CABAC_ENCODING_SUPPORT = 0x1, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_INTRA_SLICE_CONSTRAINED_ENCODING_SUPPORT = 0x2, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_BFRAME_LTR_COMBINED_SUPPORT = 0x4, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_ADAPTIVE_8x8_TRANSFORM_ENCODING_SUPPORT = 0x8, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_DIRECT_SPATIAL_ENCODING_SUPPORT = 0x10, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_DIRECT_TEMPORAL_ENCODING_SUPPORT = 0x20, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_CONSTRAINED_INTRAPREDICTION_SUPPORT = 0x40, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_NUM_REF_IDX_ACTIVE_OVERRIDE_FLAG_SLICE_SUPPORT = 0x80 - } D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAGS) -typedef -enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODES - { - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_0_ALL_LUMA_CHROMA_SLICE_BLOCK_EDGES_ALWAYS_FILTERED = 0, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_1_DISABLE_ALL_SLICE_BLOCK_EDGES = 1, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_2_DISABLE_SLICE_BOUNDARIES_BLOCKS = 2, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_3_USE_TWO_STAGE_DEBLOCKING = 3, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_4_DISABLE_CHROMA_BLOCK_EDGES = 4, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_5_DISABLE_CHROMA_BLOCK_EDGES_AND_LUMA_BOUNDARIES = 5, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_6_DISABLE_CHROMA_BLOCK_EDGES_AND_USE_LUMA_TWO_STAGE_DEBLOCKING = 6 - } D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODES; - -typedef -enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAGS - { - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAG_NONE = 0, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAG_0_ALL_LUMA_CHROMA_SLICE_BLOCK_EDGES_ALWAYS_FILTERED = ( 1 << D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_0_ALL_LUMA_CHROMA_SLICE_BLOCK_EDGES_ALWAYS_FILTERED ) , - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAG_1_DISABLE_ALL_SLICE_BLOCK_EDGES = ( 1 << D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_1_DISABLE_ALL_SLICE_BLOCK_EDGES ) , - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAG_2_DISABLE_SLICE_BOUNDARIES_BLOCKS = ( 1 << D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_2_DISABLE_SLICE_BOUNDARIES_BLOCKS ) , - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAG_3_USE_TWO_STAGE_DEBLOCKING = ( 1 << D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_3_USE_TWO_STAGE_DEBLOCKING ) , - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAG_4_DISABLE_CHROMA_BLOCK_EDGES = ( 1 << D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_4_DISABLE_CHROMA_BLOCK_EDGES ) , - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAG_5_DISABLE_CHROMA_BLOCK_EDGES_AND_LUMA_BOUNDARIES = ( 1 << D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_5_DISABLE_CHROMA_BLOCK_EDGES_AND_LUMA_BOUNDARIES ) , - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAG_6_DISABLE_CHROMA_BLOCK_EDGES_AND_USE_LUMA_TWO_STAGE_DEBLOCKING = ( 1 << D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_6_DISABLE_CHROMA_BLOCK_EDGES_AND_USE_LUMA_TWO_STAGE_DEBLOCKING ) - } D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAGS) -typedef struct D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264 - { - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAGS SupportFlags; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAGS DisableDeblockingFilterSupportedModes; - } D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264; - -typedef -enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS - { - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_NONE = 0, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_BFRAME_LTR_COMBINED_SUPPORT = 0x1, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_INTRA_SLICE_CONSTRAINED_ENCODING_SUPPORT = 0x2, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_CONSTRAINED_INTRAPREDICTION_SUPPORT = 0x4, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_SAO_FILTER_SUPPORT = 0x8, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_ASYMETRIC_MOTION_PARTITION_SUPPORT = 0x10, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_ASYMETRIC_MOTION_PARTITION_REQUIRED = 0x20, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_TRANSFORM_SKIP_SUPPORT = 0x40, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_DISABLING_LOOP_FILTER_ACROSS_SLICES_SUPPORT = 0x80, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_P_FRAMES_IMPLEMENTED_AS_LOW_DELAY_B_FRAMES = 0x100, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_NUM_REF_IDX_ACTIVE_OVERRIDE_FLAG_SLICE_SUPPORT = 0x200, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_TRANSFORM_SKIP_ROTATION_ENABLED_SUPPORT = 0x400, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_TRANSFORM_SKIP_ROTATION_ENABLED_REQUIRED = 0x800, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_TRANSFORM_SKIP_CONTEXT_ENABLED_SUPPORT = 0x1000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_TRANSFORM_SKIP_CONTEXT_ENABLED_REQUIRED = 0x2000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_IMPLICIT_RDPCM_ENABLED_SUPPORT = 0x4000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_IMPLICIT_RDPCM_ENABLED_REQUIRED = 0x8000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_EXPLICIT_RDPCM_ENABLED_SUPPORT = 0x10000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_EXPLICIT_RDPCM_ENABLED_REQUIRED = 0x20000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_EXTENDED_PRECISION_PROCESSING_SUPPORT = 0x40000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_EXTENDED_PRECISION_PROCESSING_REQUIRED = 0x80000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_INTRA_SMOOTHING_DISABLED_SUPPORT = 0x100000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_INTRA_SMOOTHING_DISABLED_REQUIRED = 0x200000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_HIGH_PRECISION_OFFSETS_ENABLED_SUPPORT = 0x400000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_HIGH_PRECISION_OFFSETS_ENABLED_REQUIRED = 0x800000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_PERSISTENT_RICE_ADAPTATION_ENABLED_SUPPORT = 0x1000000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_PERSISTENT_RICE_ADAPTATION_ENABLED_REQUIRED = 0x2000000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_CABAC_BYPASS_ALIGNMENT_ENABLED_SUPPORT = 0x4000000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_CABAC_BYPASS_ALIGNMENT_ENABLED_REQUIRED = 0x8000000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_CROSS_COMPONENT_PREDICTION_ENABLED_FLAG_SUPPORT = 0x10000000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_CROSS_COMPONENT_PREDICTION_ENABLED_FLAG_REQUIRED = 0x20000000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_CHROMA_QP_OFFSET_LIST_ENABLED_FLAG_SUPPORT = 0x40000000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_CHROMA_QP_OFFSET_LIST_ENABLED_FLAG_REQUIRED = 0x80000000 - } D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS) -typedef -enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE - { - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE_8x8 = 0, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE_16x16 = 1, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE_32x32 = 2, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE_64x64 = 3 - } D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE; - -typedef -enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE - { - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE_4x4 = 0, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE_8x8 = 1, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE_16x16 = 2, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE_32x32 = 3 - } D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE; - -typedef struct D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC - { - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS SupportFlags; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE MinLumaCodingUnitSize; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE MaxLumaCodingUnitSize; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE MinLumaTransformUnitSize; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE MaxLumaTransformUnitSize; - UCHAR max_transform_hierarchy_depth_inter; - UCHAR max_transform_hierarchy_depth_intra; - } D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC; - -typedef -enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS1 - { - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG1_NONE = 0, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG1_SEPARATE_COLOUR_PLANE_SUPPORT = 0x1, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG1_SEPARATE_COLOUR_PLANE_REQUIRED = 0x2 - } D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS1; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS1) -typedef struct D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC1 - { - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS SupportFlags; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE MinLumaCodingUnitSize; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE MaxLumaCodingUnitSize; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE MinLumaTransformUnitSize; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE MaxLumaTransformUnitSize; - UCHAR max_transform_hierarchy_depth_inter; - UCHAR max_transform_hierarchy_depth_intra; - UINT allowed_diff_cu_chroma_qp_offset_depth_values; - UINT allowed_log2_sao_offset_scale_luma_values; - UINT allowed_log2_sao_offset_scale_chroma_values; - UINT allowed_log2_max_transform_skip_block_size_minus2_values; - UINT allowed_chroma_qp_offset_list_len_minus1_values; - UINT allowed_cb_qp_offset_list_values[ 6 ]; - UINT allowed_cr_qp_offset_list_values[ 6 ]; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS1 SupportFlags1; - } D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC1; - -typedef struct D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT - { - UINT DataSize; - union - { - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264 *pH264Support; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC *pHEVCSupport; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC1 *pHEVCSupport1; - D3D12_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION_SUPPORT *pAV1Support; - } ; - } D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT; - -typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT - { - UINT NodeIndex; - D3D12_VIDEO_ENCODER_CODEC Codec; - D3D12_VIDEO_ENCODER_PROFILE_DESC Profile; - BOOL IsSupported; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT CodecSupportLimits; - } D3D12_FEATURE_DATA_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT; - -typedef struct D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT_H264 - { - UINT MaxL0ReferencesForP; - UINT MaxL0ReferencesForB; - UINT MaxL1ReferencesForB; - UINT MaxLongTermReferences; - UINT MaxDPBCapacity; - } D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT_H264; - -typedef struct D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT_HEVC - { - UINT MaxL0ReferencesForP; - UINT MaxL0ReferencesForB; - UINT MaxL1ReferencesForB; - UINT MaxLongTermReferences; - UINT MaxDPBCapacity; - } D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT_HEVC; - -typedef struct D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT - { - UINT DataSize; - union - { - D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT_H264 *pH264Support; - D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT_HEVC *pHEVCSupport; - D3D12_VIDEO_ENCODER_CODEC_AV1_PICTURE_CONTROL_SUPPORT *pAV1Support; - } ; - } D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT; - -typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT - { - UINT NodeIndex; - D3D12_VIDEO_ENCODER_CODEC Codec; - D3D12_VIDEO_ENCODER_PROFILE_DESC Profile; - BOOL IsSupported; - D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT PictureSupport; - } D3D12_FEATURE_DATA_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT; - -typedef -enum D3D12_VIDEO_ENCODER_SUPPORT_FLAGS - { - D3D12_VIDEO_ENCODER_SUPPORT_FLAG_NONE = 0, - D3D12_VIDEO_ENCODER_SUPPORT_FLAG_GENERAL_SUPPORT_OK = 0x1, - D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_RECONFIGURATION_AVAILABLE = 0x2, - D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RESOLUTION_RECONFIGURATION_AVAILABLE = 0x4, - D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_VBV_SIZE_CONFIG_AVAILABLE = 0x8, - D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_FRAME_ANALYSIS_AVAILABLE = 0x10, - D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RECONSTRUCTED_FRAMES_REQUIRE_TEXTURE_ARRAYS = 0x20, - D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_DELTA_QP_AVAILABLE = 0x40, - D3D12_VIDEO_ENCODER_SUPPORT_FLAG_SUBREGION_LAYOUT_RECONFIGURATION_AVAILABLE = 0x80, - D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_ADJUSTABLE_QP_RANGE_AVAILABLE = 0x100, - D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_INITIAL_QP_AVAILABLE = 0x200, - D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_MAX_FRAME_SIZE_AVAILABLE = 0x400, - D3D12_VIDEO_ENCODER_SUPPORT_FLAG_SEQUENCE_GOP_RECONFIGURATION_AVAILABLE = 0x800, - D3D12_VIDEO_ENCODER_SUPPORT_FLAG_MOTION_ESTIMATION_PRECISION_MODE_LIMIT_AVAILABLE = 0x1000, - D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_EXTENSION1_SUPPORT = 0x2000, - D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_QUALITY_VS_SPEED_AVAILABLE = 0x4000, - D3D12_VIDEO_ENCODER_SUPPORT_FLAG_READABLE_RECONSTRUCTED_PICTURE_LAYOUT_AVAILABLE = 0x8000 - } D3D12_VIDEO_ENCODER_SUPPORT_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_SUPPORT_FLAGS) -typedef -enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAGS - { - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_NONE = 0, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_USE_CONSTRAINED_INTRAPREDICTION = 0x1, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_USE_ADAPTIVE_8x8_TRANSFORM = 0x2, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_ENABLE_CABAC_ENCODING = 0x4, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_ALLOW_REQUEST_INTRA_CONSTRAINED_SLICES = 0x8 - } D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAGS) -typedef -enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_DIRECT_MODES - { - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_DIRECT_MODES_DISABLED = 0, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_DIRECT_MODES_TEMPORAL = 1, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_DIRECT_MODES_SPATIAL = 2 - } D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_DIRECT_MODES; - -typedef struct D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264 - { - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAGS ConfigurationFlags; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_DIRECT_MODES DirectModeConfig; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODES DisableDeblockingFilterConfig; - } D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264; - -typedef -enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAGS - { - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_NONE = 0, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_DISABLE_LOOP_FILTER_ACROSS_SLICES = 0x1, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_ALLOW_REQUEST_INTRA_CONSTRAINED_SLICES = 0x2, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_ENABLE_SAO_FILTER = 0x4, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_ENABLE_LONG_TERM_REFERENCES = 0x8, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_USE_ASYMETRIC_MOTION_PARTITION = 0x10, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_ENABLE_TRANSFORM_SKIPPING = 0x20, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_USE_CONSTRAINED_INTRAPREDICTION = 0x40, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_TRANSFORM_SKIP_ROTATION = 0x80, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_TRANSFORM_SKIP_CONTEXT = 0x100, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_IMPLICIT_RDPCM = 0x200, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_EXPLICIT_RDPCM = 0x400, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_EXTENDED_PRECISION_PROCESSING = 0x800, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_INTRA_SMOOTHING_DISABLED = 0x1000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_HIGH_PRECISION_OFFSETS = 0x2000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_PERSISTENT_RICE_ADAPTATION = 0x4000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_CABAC_BYPASS_ALIGNMENT = 0x8000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_SEPARATE_COLOUR_PLANE = 0x10000 - } D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAGS) -typedef struct D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC - { - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAGS ConfigurationFlags; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE MinLumaCodingUnitSize; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE MaxLumaCodingUnitSize; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE MinLumaTransformUnitSize; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE MaxLumaTransformUnitSize; - UCHAR max_transform_hierarchy_depth_inter; - UCHAR max_transform_hierarchy_depth_intra; - } D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC; - -typedef struct D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION - { - UINT DataSize; - union - { - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264 *pH264Config; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC *pHEVCConfig; - D3D12_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION *pAV1Config; - } ; - } D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION; - -typedef struct D3D12_VIDEO_ENCODER_INTRA_REFRESH - { - D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE Mode; - UINT IntraRefreshDuration; - } D3D12_VIDEO_ENCODER_INTRA_REFRESH; - -typedef -enum D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE - { - D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE_MAXIMUM = 0, - D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE_FULL_PIXEL = 1, - D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE_HALF_PIXEL = 2, - D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE_QUARTER_PIXEL = 3, - D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE_EIGHTH_PIXEL = 4 - } D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE; - -typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS - { - UINT MaxSubregionsNumber; - UINT MaxIntraRefreshFrameDuration; - UINT SubregionBlockPixelsSize; - UINT QPMapRegionPixelsSize; - } D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS; - -typedef -enum D3D12_VIDEO_ENCODER_VALIDATION_FLAGS - { - D3D12_VIDEO_ENCODER_VALIDATION_FLAG_NONE = 0, - D3D12_VIDEO_ENCODER_VALIDATION_FLAG_CODEC_NOT_SUPPORTED = 0x1, - D3D12_VIDEO_ENCODER_VALIDATION_FLAG_INPUT_FORMAT_NOT_SUPPORTED = 0x8, - D3D12_VIDEO_ENCODER_VALIDATION_FLAG_CODEC_CONFIGURATION_NOT_SUPPORTED = 0x10, - D3D12_VIDEO_ENCODER_VALIDATION_FLAG_RATE_CONTROL_MODE_NOT_SUPPORTED = 0x20, - D3D12_VIDEO_ENCODER_VALIDATION_FLAG_RATE_CONTROL_CONFIGURATION_NOT_SUPPORTED = 0x40, - D3D12_VIDEO_ENCODER_VALIDATION_FLAG_INTRA_REFRESH_MODE_NOT_SUPPORTED = 0x80, - D3D12_VIDEO_ENCODER_VALIDATION_FLAG_SUBREGION_LAYOUT_MODE_NOT_SUPPORTED = 0x100, - D3D12_VIDEO_ENCODER_VALIDATION_FLAG_RESOLUTION_NOT_SUPPORTED_IN_LIST = 0x200, - D3D12_VIDEO_ENCODER_VALIDATION_FLAG_GOP_STRUCTURE_NOT_SUPPORTED = 0x800, - D3D12_VIDEO_ENCODER_VALIDATION_FLAG_SUBREGION_LAYOUT_DATA_NOT_SUPPORTED = 0x1000, - D3D12_VIDEO_ENCODER_VALIDATION_FLAG_QPMAP_NOT_SUPPORTED = 0x2000, - D3D12_VIDEO_ENCODER_VALIDATION_FLAG_DIRTY_REGIONS_NOT_SUPPORTED = 0x4000, - D3D12_VIDEO_ENCODER_VALIDATION_FLAG_MOTION_SEARCH_NOT_SUPPORTED = 0x8000 - } D3D12_VIDEO_ENCODER_VALIDATION_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_VALIDATION_FLAGS) -typedef struct D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264 - { - UINT GOPLength; - UINT PPicturePeriod; - UCHAR pic_order_cnt_type; - UCHAR log2_max_frame_num_minus4; - UCHAR log2_max_pic_order_cnt_lsb_minus4; - } D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264; - -typedef struct D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_HEVC - { - UINT GOPLength; - UINT PPicturePeriod; - UCHAR log2_max_pic_order_cnt_lsb_minus4; - } D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_HEVC; - -typedef struct D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE - { - UINT DataSize; - union - { - D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264 *pH264GroupOfPictures; - D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_HEVC *pHEVCGroupOfPictures; - D3D12_VIDEO_ENCODER_AV1_SEQUENCE_STRUCTURE *pAV1SequenceStructure; - } ; - } D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE; - -typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT - { - UINT NodeIndex; - D3D12_VIDEO_ENCODER_CODEC Codec; - DXGI_FORMAT InputFormat; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION CodecConfiguration; - D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE CodecGopSequence; - D3D12_VIDEO_ENCODER_RATE_CONTROL RateControl; - D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE IntraRefresh; - D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE SubregionFrameEncoding; - UINT ResolutionsListCount; - const D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC *pResolutionList; - UINT MaxReferenceFramesInDPB; - D3D12_VIDEO_ENCODER_VALIDATION_FLAGS ValidationFlags; - D3D12_VIDEO_ENCODER_SUPPORT_FLAGS SupportFlags; - D3D12_VIDEO_ENCODER_PROFILE_DESC SuggestedProfile; - D3D12_VIDEO_ENCODER_LEVEL_SETTING SuggestedLevel; - _Field_size_full_(ResolutionsListCount) D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS *pResolutionDependentSupport; - } D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT; - -typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_SLICES - { - union - { - UINT MaxBytesPerSlice; - UINT NumberOfCodingUnitsPerSlice; - UINT NumberOfRowsPerSlice; - UINT NumberOfSlicesPerFrame; - } ; - } D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_SLICES; - -typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA - { - UINT DataSize; - union - { - const D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_SLICES *pSlicesPartition_H264; - const D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_SLICES *pSlicesPartition_HEVC; - const D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_TILES *pTilesPartition_AV1; - } ; - } D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA; - -typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT1 - { - UINT NodeIndex; - D3D12_VIDEO_ENCODER_CODEC Codec; - DXGI_FORMAT InputFormat; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION CodecConfiguration; - D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE CodecGopSequence; - D3D12_VIDEO_ENCODER_RATE_CONTROL RateControl; - D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE IntraRefresh; - D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE SubregionFrameEncoding; - UINT ResolutionsListCount; - const D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC *pResolutionList; - UINT MaxReferenceFramesInDPB; - D3D12_VIDEO_ENCODER_VALIDATION_FLAGS ValidationFlags; - D3D12_VIDEO_ENCODER_SUPPORT_FLAGS SupportFlags; - D3D12_VIDEO_ENCODER_PROFILE_DESC SuggestedProfile; - D3D12_VIDEO_ENCODER_LEVEL_SETTING SuggestedLevel; - _Field_size_full_(ResolutionsListCount) D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS *pResolutionDependentSupport; - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA SubregionFrameEncodingData; - UINT MaxQualityVsSpeed; - } D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT1; - -typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOURCE_REQUIREMENTS - { - UINT NodeIndex; - D3D12_VIDEO_ENCODER_CODEC Codec; - D3D12_VIDEO_ENCODER_PROFILE_DESC Profile; - DXGI_FORMAT InputFormat; - D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC PictureTargetResolution; - BOOL IsSupported; - UINT CompressedBitstreamBufferAccessAlignment; - UINT EncoderMetadataBufferAccessAlignment; - UINT MaxEncoderOutputMetadataBufferSize; - } D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOURCE_REQUIREMENTS; - -typedef -enum D3D12_VIDEO_ENCODER_FLAGS - { - D3D12_VIDEO_ENCODER_FLAG_NONE = 0 - } D3D12_VIDEO_ENCODER_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_FLAGS) -typedef struct D3D12_VIDEO_ENCODER_DESC - { - UINT NodeMask; - D3D12_VIDEO_ENCODER_FLAGS Flags; - D3D12_VIDEO_ENCODER_CODEC EncodeCodec; - D3D12_VIDEO_ENCODER_PROFILE_DESC EncodeProfile; - DXGI_FORMAT InputFormat; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION CodecConfiguration; - D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE MaxMotionEstimationPrecision; - } D3D12_VIDEO_ENCODER_DESC; - -extern RPC_IF_HANDLE __MIDL_itf_d3d12video_0000_0022_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12video_0000_0022_v0_0_s_ifspec; - -#ifndef __ID3D12VideoEncoder_INTERFACE_DEFINED__ -#define __ID3D12VideoEncoder_INTERFACE_DEFINED__ - -/* interface ID3D12VideoEncoder */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12VideoEncoder; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("2E0D212D-8DF9-44A6-A770-BB289B182737") - ID3D12VideoEncoder : public ID3D12Pageable - { - public: - virtual UINT STDMETHODCALLTYPE GetNodeMask( void) = 0; - - virtual D3D12_VIDEO_ENCODER_FLAGS STDMETHODCALLTYPE GetEncoderFlags( void) = 0; - - virtual D3D12_VIDEO_ENCODER_CODEC STDMETHODCALLTYPE GetCodec( void) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetCodecProfile( - _Inout_ D3D12_VIDEO_ENCODER_PROFILE_DESC dstProfile) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetCodecConfiguration( - _Inout_ D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION dstCodecConfig) = 0; - - virtual DXGI_FORMAT STDMETHODCALLTYPE GetInputFormat( void) = 0; - - virtual D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE STDMETHODCALLTYPE GetMaxMotionEstimationPrecision( void) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12VideoEncoderVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12VideoEncoder * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12VideoEncoder * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12VideoEncoder * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12VideoEncoder * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12VideoEncoder * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12VideoEncoder * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12VideoEncoder * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12VideoEncoder * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12VideoEncoder, GetNodeMask) - UINT ( STDMETHODCALLTYPE *GetNodeMask )( - ID3D12VideoEncoder * This); - - DECLSPEC_XFGVIRT(ID3D12VideoEncoder, GetEncoderFlags) - D3D12_VIDEO_ENCODER_FLAGS ( STDMETHODCALLTYPE *GetEncoderFlags )( - ID3D12VideoEncoder * This); - - DECLSPEC_XFGVIRT(ID3D12VideoEncoder, GetCodec) - D3D12_VIDEO_ENCODER_CODEC ( STDMETHODCALLTYPE *GetCodec )( - ID3D12VideoEncoder * This); - - DECLSPEC_XFGVIRT(ID3D12VideoEncoder, GetCodecProfile) - HRESULT ( STDMETHODCALLTYPE *GetCodecProfile )( - ID3D12VideoEncoder * This, - _Inout_ D3D12_VIDEO_ENCODER_PROFILE_DESC dstProfile); - - DECLSPEC_XFGVIRT(ID3D12VideoEncoder, GetCodecConfiguration) - HRESULT ( STDMETHODCALLTYPE *GetCodecConfiguration )( - ID3D12VideoEncoder * This, - _Inout_ D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION dstCodecConfig); - - DECLSPEC_XFGVIRT(ID3D12VideoEncoder, GetInputFormat) - DXGI_FORMAT ( STDMETHODCALLTYPE *GetInputFormat )( - ID3D12VideoEncoder * This); - - DECLSPEC_XFGVIRT(ID3D12VideoEncoder, GetMaxMotionEstimationPrecision) - D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE ( STDMETHODCALLTYPE *GetMaxMotionEstimationPrecision )( - ID3D12VideoEncoder * This); - - END_INTERFACE - } ID3D12VideoEncoderVtbl; - - interface ID3D12VideoEncoder - { - CONST_VTBL struct ID3D12VideoEncoderVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12VideoEncoder_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12VideoEncoder_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12VideoEncoder_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12VideoEncoder_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12VideoEncoder_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12VideoEncoder_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12VideoEncoder_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12VideoEncoder_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12VideoEncoder_GetNodeMask(This) \ - ( (This)->lpVtbl -> GetNodeMask(This) ) - -#define ID3D12VideoEncoder_GetEncoderFlags(This) \ - ( (This)->lpVtbl -> GetEncoderFlags(This) ) - -#define ID3D12VideoEncoder_GetCodec(This) \ - ( (This)->lpVtbl -> GetCodec(This) ) - -#define ID3D12VideoEncoder_GetCodecProfile(This,dstProfile) \ - ( (This)->lpVtbl -> GetCodecProfile(This,dstProfile) ) - -#define ID3D12VideoEncoder_GetCodecConfiguration(This,dstCodecConfig) \ - ( (This)->lpVtbl -> GetCodecConfiguration(This,dstCodecConfig) ) - -#define ID3D12VideoEncoder_GetInputFormat(This) \ - ( (This)->lpVtbl -> GetInputFormat(This) ) - -#define ID3D12VideoEncoder_GetMaxMotionEstimationPrecision(This) \ - ( (This)->lpVtbl -> GetMaxMotionEstimationPrecision(This) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12VideoEncoder_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12VideoEncoderHeap_INTERFACE_DEFINED__ -#define __ID3D12VideoEncoderHeap_INTERFACE_DEFINED__ - -/* interface ID3D12VideoEncoderHeap */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12VideoEncoderHeap; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("22B35D96-876A-44C0-B25E-FB8C9C7F1C4A") - ID3D12VideoEncoderHeap : public ID3D12Pageable - { - public: - virtual UINT STDMETHODCALLTYPE GetNodeMask( void) = 0; - - virtual D3D12_VIDEO_ENCODER_HEAP_FLAGS STDMETHODCALLTYPE GetEncoderHeapFlags( void) = 0; - - virtual D3D12_VIDEO_ENCODER_CODEC STDMETHODCALLTYPE GetCodec( void) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetCodecProfile( - _Inout_ D3D12_VIDEO_ENCODER_PROFILE_DESC dstProfile) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetCodecLevel( - _Inout_ D3D12_VIDEO_ENCODER_LEVEL_SETTING dstLevel) = 0; - - virtual UINT STDMETHODCALLTYPE GetResolutionListCount( void) = 0; - - virtual HRESULT STDMETHODCALLTYPE GetResolutionList( - const UINT ResolutionsListCount, - _Out_writes_(ResolutionsListCount) D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC *pResolutionList) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12VideoEncoderHeapVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12VideoEncoderHeap * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12VideoEncoderHeap * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12VideoEncoderHeap * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12VideoEncoderHeap * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12VideoEncoderHeap * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12VideoEncoderHeap * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12VideoEncoderHeap * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12VideoEncoderHeap * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12VideoEncoderHeap, GetNodeMask) - UINT ( STDMETHODCALLTYPE *GetNodeMask )( - ID3D12VideoEncoderHeap * This); - - DECLSPEC_XFGVIRT(ID3D12VideoEncoderHeap, GetEncoderHeapFlags) - D3D12_VIDEO_ENCODER_HEAP_FLAGS ( STDMETHODCALLTYPE *GetEncoderHeapFlags )( - ID3D12VideoEncoderHeap * This); - - DECLSPEC_XFGVIRT(ID3D12VideoEncoderHeap, GetCodec) - D3D12_VIDEO_ENCODER_CODEC ( STDMETHODCALLTYPE *GetCodec )( - ID3D12VideoEncoderHeap * This); - - DECLSPEC_XFGVIRT(ID3D12VideoEncoderHeap, GetCodecProfile) - HRESULT ( STDMETHODCALLTYPE *GetCodecProfile )( - ID3D12VideoEncoderHeap * This, - _Inout_ D3D12_VIDEO_ENCODER_PROFILE_DESC dstProfile); - - DECLSPEC_XFGVIRT(ID3D12VideoEncoderHeap, GetCodecLevel) - HRESULT ( STDMETHODCALLTYPE *GetCodecLevel )( - ID3D12VideoEncoderHeap * This, - _Inout_ D3D12_VIDEO_ENCODER_LEVEL_SETTING dstLevel); - - DECLSPEC_XFGVIRT(ID3D12VideoEncoderHeap, GetResolutionListCount) - UINT ( STDMETHODCALLTYPE *GetResolutionListCount )( - ID3D12VideoEncoderHeap * This); - - DECLSPEC_XFGVIRT(ID3D12VideoEncoderHeap, GetResolutionList) - HRESULT ( STDMETHODCALLTYPE *GetResolutionList )( - ID3D12VideoEncoderHeap * This, - const UINT ResolutionsListCount, - _Out_writes_(ResolutionsListCount) D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC *pResolutionList); - - END_INTERFACE - } ID3D12VideoEncoderHeapVtbl; - - interface ID3D12VideoEncoderHeap - { - CONST_VTBL struct ID3D12VideoEncoderHeapVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12VideoEncoderHeap_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12VideoEncoderHeap_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12VideoEncoderHeap_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12VideoEncoderHeap_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12VideoEncoderHeap_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12VideoEncoderHeap_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12VideoEncoderHeap_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12VideoEncoderHeap_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12VideoEncoderHeap_GetNodeMask(This) \ - ( (This)->lpVtbl -> GetNodeMask(This) ) - -#define ID3D12VideoEncoderHeap_GetEncoderHeapFlags(This) \ - ( (This)->lpVtbl -> GetEncoderHeapFlags(This) ) - -#define ID3D12VideoEncoderHeap_GetCodec(This) \ - ( (This)->lpVtbl -> GetCodec(This) ) - -#define ID3D12VideoEncoderHeap_GetCodecProfile(This,dstProfile) \ - ( (This)->lpVtbl -> GetCodecProfile(This,dstProfile) ) - -#define ID3D12VideoEncoderHeap_GetCodecLevel(This,dstLevel) \ - ( (This)->lpVtbl -> GetCodecLevel(This,dstLevel) ) - -#define ID3D12VideoEncoderHeap_GetResolutionListCount(This) \ - ( (This)->lpVtbl -> GetResolutionListCount(This) ) - -#define ID3D12VideoEncoderHeap_GetResolutionList(This,ResolutionsListCount,pResolutionList) \ - ( (This)->lpVtbl -> GetResolutionList(This,ResolutionsListCount,pResolutionList) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12VideoEncoderHeap_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12VideoDevice3_INTERFACE_DEFINED__ -#define __ID3D12VideoDevice3_INTERFACE_DEFINED__ - -/* interface ID3D12VideoDevice3 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12VideoDevice3; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("4243ADB4-3A32-4666-973C-0CCC5625DC44") - ID3D12VideoDevice3 : public ID3D12VideoDevice2 - { - public: - virtual HRESULT STDMETHODCALLTYPE CreateVideoEncoder( - _In_ const D3D12_VIDEO_ENCODER_DESC *pDesc, - _In_ REFIID riid, - _COM_Outptr_ void **ppVideoEncoder) = 0; - - virtual HRESULT STDMETHODCALLTYPE CreateVideoEncoderHeap( - _In_ const D3D12_VIDEO_ENCODER_HEAP_DESC *pDesc, - _In_ REFIID riid, - _COM_Outptr_ void **ppVideoEncoderHeap) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12VideoDevice3Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12VideoDevice3 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12VideoDevice3 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12VideoDevice3 * This); - - DECLSPEC_XFGVIRT(ID3D12VideoDevice, CheckFeatureSupport) - HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )( - ID3D12VideoDevice3 * This, - D3D12_FEATURE_VIDEO FeatureVideo, - _Inout_updates_bytes_(FeatureSupportDataSize) void *pFeatureSupportData, - UINT FeatureSupportDataSize); - - DECLSPEC_XFGVIRT(ID3D12VideoDevice, CreateVideoDecoder) - HRESULT ( STDMETHODCALLTYPE *CreateVideoDecoder )( - ID3D12VideoDevice3 * This, - _In_ const D3D12_VIDEO_DECODER_DESC *pDesc, - _In_ REFIID riid, - _COM_Outptr_ void **ppVideoDecoder); - - DECLSPEC_XFGVIRT(ID3D12VideoDevice, CreateVideoDecoderHeap) - HRESULT ( STDMETHODCALLTYPE *CreateVideoDecoderHeap )( - ID3D12VideoDevice3 * This, - _In_ const D3D12_VIDEO_DECODER_HEAP_DESC *pVideoDecoderHeapDesc, - _In_ REFIID riid, - _COM_Outptr_ void **ppVideoDecoderHeap); - - DECLSPEC_XFGVIRT(ID3D12VideoDevice, CreateVideoProcessor) - HRESULT ( STDMETHODCALLTYPE *CreateVideoProcessor )( - ID3D12VideoDevice3 * This, - UINT NodeMask, - _In_ const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC *pOutputStreamDesc, - UINT NumInputStreamDescs, - _In_reads_(NumInputStreamDescs) const D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *pInputStreamDescs, - _In_ REFIID riid, - _COM_Outptr_ void **ppVideoProcessor); - - DECLSPEC_XFGVIRT(ID3D12VideoDevice1, CreateVideoMotionEstimator) - HRESULT ( STDMETHODCALLTYPE *CreateVideoMotionEstimator )( - ID3D12VideoDevice3 * This, - _In_ const D3D12_VIDEO_MOTION_ESTIMATOR_DESC *pDesc, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession, - _In_ REFIID riid, - _COM_Outptr_ void **ppVideoMotionEstimator); - - DECLSPEC_XFGVIRT(ID3D12VideoDevice1, CreateVideoMotionVectorHeap) - HRESULT ( STDMETHODCALLTYPE *CreateVideoMotionVectorHeap )( - ID3D12VideoDevice3 * This, - _In_ const D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC *pDesc, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession, - _In_ REFIID riid, - _COM_Outptr_ void **ppVideoMotionVectorHeap); - - DECLSPEC_XFGVIRT(ID3D12VideoDevice2, CreateVideoDecoder1) - HRESULT ( STDMETHODCALLTYPE *CreateVideoDecoder1 )( - ID3D12VideoDevice3 * This, - _In_ const D3D12_VIDEO_DECODER_DESC *pDesc, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession, - _In_ REFIID riid, - _COM_Outptr_ void **ppVideoDecoder); - - DECLSPEC_XFGVIRT(ID3D12VideoDevice2, CreateVideoDecoderHeap1) - HRESULT ( STDMETHODCALLTYPE *CreateVideoDecoderHeap1 )( - ID3D12VideoDevice3 * This, - _In_ const D3D12_VIDEO_DECODER_HEAP_DESC *pVideoDecoderHeapDesc, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession, - _In_ REFIID riid, - _COM_Outptr_ void **ppVideoDecoderHeap); - - DECLSPEC_XFGVIRT(ID3D12VideoDevice2, CreateVideoProcessor1) - HRESULT ( STDMETHODCALLTYPE *CreateVideoProcessor1 )( - ID3D12VideoDevice3 * This, - UINT NodeMask, - _In_ const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC *pOutputStreamDesc, - UINT NumInputStreamDescs, - _In_reads_(NumInputStreamDescs) const D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *pInputStreamDescs, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession, - _In_ REFIID riid, - _COM_Outptr_ void **ppVideoProcessor); - - DECLSPEC_XFGVIRT(ID3D12VideoDevice2, CreateVideoExtensionCommand) - HRESULT ( STDMETHODCALLTYPE *CreateVideoExtensionCommand )( - ID3D12VideoDevice3 * This, - _In_ const D3D12_VIDEO_EXTENSION_COMMAND_DESC *pDesc, - _In_reads_bytes_(CreationParametersDataSizeInBytes) const void *pCreationParameters, - SIZE_T CreationParametersDataSizeInBytes, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession, - _In_ REFIID riid, - _COM_Outptr_ void **ppVideoExtensionCommand); - - DECLSPEC_XFGVIRT(ID3D12VideoDevice2, ExecuteExtensionCommand) - HRESULT ( STDMETHODCALLTYPE *ExecuteExtensionCommand )( - ID3D12VideoDevice3 * This, - _In_ ID3D12VideoExtensionCommand *pExtensionCommand, - _In_reads_bytes_(ExecutionParametersSizeInBytes) const void *pExecutionParameters, - SIZE_T ExecutionParametersSizeInBytes, - _Out_writes_bytes_(OutputDataSizeInBytes) void *pOutputData, - SIZE_T OutputDataSizeInBytes); - - DECLSPEC_XFGVIRT(ID3D12VideoDevice3, CreateVideoEncoder) - HRESULT ( STDMETHODCALLTYPE *CreateVideoEncoder )( - ID3D12VideoDevice3 * This, - _In_ const D3D12_VIDEO_ENCODER_DESC *pDesc, - _In_ REFIID riid, - _COM_Outptr_ void **ppVideoEncoder); - - DECLSPEC_XFGVIRT(ID3D12VideoDevice3, CreateVideoEncoderHeap) - HRESULT ( STDMETHODCALLTYPE *CreateVideoEncoderHeap )( - ID3D12VideoDevice3 * This, - _In_ const D3D12_VIDEO_ENCODER_HEAP_DESC *pDesc, - _In_ REFIID riid, - _COM_Outptr_ void **ppVideoEncoderHeap); - - END_INTERFACE - } ID3D12VideoDevice3Vtbl; - - interface ID3D12VideoDevice3 - { - CONST_VTBL struct ID3D12VideoDevice3Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12VideoDevice3_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12VideoDevice3_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12VideoDevice3_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12VideoDevice3_CheckFeatureSupport(This,FeatureVideo,pFeatureSupportData,FeatureSupportDataSize) \ - ( (This)->lpVtbl -> CheckFeatureSupport(This,FeatureVideo,pFeatureSupportData,FeatureSupportDataSize) ) - -#define ID3D12VideoDevice3_CreateVideoDecoder(This,pDesc,riid,ppVideoDecoder) \ - ( (This)->lpVtbl -> CreateVideoDecoder(This,pDesc,riid,ppVideoDecoder) ) - -#define ID3D12VideoDevice3_CreateVideoDecoderHeap(This,pVideoDecoderHeapDesc,riid,ppVideoDecoderHeap) \ - ( (This)->lpVtbl -> CreateVideoDecoderHeap(This,pVideoDecoderHeapDesc,riid,ppVideoDecoderHeap) ) - -#define ID3D12VideoDevice3_CreateVideoProcessor(This,NodeMask,pOutputStreamDesc,NumInputStreamDescs,pInputStreamDescs,riid,ppVideoProcessor) \ - ( (This)->lpVtbl -> CreateVideoProcessor(This,NodeMask,pOutputStreamDesc,NumInputStreamDescs,pInputStreamDescs,riid,ppVideoProcessor) ) - -#define ID3D12VideoDevice3_CreateVideoMotionEstimator(This,pDesc,pProtectedResourceSession,riid,ppVideoMotionEstimator) \ - ( (This)->lpVtbl -> CreateVideoMotionEstimator(This,pDesc,pProtectedResourceSession,riid,ppVideoMotionEstimator) ) - -#define ID3D12VideoDevice3_CreateVideoMotionVectorHeap(This,pDesc,pProtectedResourceSession,riid,ppVideoMotionVectorHeap) \ - ( (This)->lpVtbl -> CreateVideoMotionVectorHeap(This,pDesc,pProtectedResourceSession,riid,ppVideoMotionVectorHeap) ) - -#define ID3D12VideoDevice3_CreateVideoDecoder1(This,pDesc,pProtectedResourceSession,riid,ppVideoDecoder) \ - ( (This)->lpVtbl -> CreateVideoDecoder1(This,pDesc,pProtectedResourceSession,riid,ppVideoDecoder) ) - -#define ID3D12VideoDevice3_CreateVideoDecoderHeap1(This,pVideoDecoderHeapDesc,pProtectedResourceSession,riid,ppVideoDecoderHeap) \ - ( (This)->lpVtbl -> CreateVideoDecoderHeap1(This,pVideoDecoderHeapDesc,pProtectedResourceSession,riid,ppVideoDecoderHeap) ) - -#define ID3D12VideoDevice3_CreateVideoProcessor1(This,NodeMask,pOutputStreamDesc,NumInputStreamDescs,pInputStreamDescs,pProtectedResourceSession,riid,ppVideoProcessor) \ - ( (This)->lpVtbl -> CreateVideoProcessor1(This,NodeMask,pOutputStreamDesc,NumInputStreamDescs,pInputStreamDescs,pProtectedResourceSession,riid,ppVideoProcessor) ) - -#define ID3D12VideoDevice3_CreateVideoExtensionCommand(This,pDesc,pCreationParameters,CreationParametersDataSizeInBytes,pProtectedResourceSession,riid,ppVideoExtensionCommand) \ - ( (This)->lpVtbl -> CreateVideoExtensionCommand(This,pDesc,pCreationParameters,CreationParametersDataSizeInBytes,pProtectedResourceSession,riid,ppVideoExtensionCommand) ) - -#define ID3D12VideoDevice3_ExecuteExtensionCommand(This,pExtensionCommand,pExecutionParameters,ExecutionParametersSizeInBytes,pOutputData,OutputDataSizeInBytes) \ - ( (This)->lpVtbl -> ExecuteExtensionCommand(This,pExtensionCommand,pExecutionParameters,ExecutionParametersSizeInBytes,pOutputData,OutputDataSizeInBytes) ) - -#define ID3D12VideoDevice3_CreateVideoEncoder(This,pDesc,riid,ppVideoEncoder) \ - ( (This)->lpVtbl -> CreateVideoEncoder(This,pDesc,riid,ppVideoEncoder) ) - -#define ID3D12VideoDevice3_CreateVideoEncoderHeap(This,pDesc,riid,ppVideoEncoderHeap) \ - ( (This)->lpVtbl -> CreateVideoEncoderHeap(This,pDesc,riid,ppVideoEncoderHeap) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12VideoDevice3_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12video_0000_0025 */ -/* [local] */ - -typedef -enum D3D12_VIDEO_ENCODER_FRAME_TYPE_H264 - { - D3D12_VIDEO_ENCODER_FRAME_TYPE_H264_I_FRAME = 0, - D3D12_VIDEO_ENCODER_FRAME_TYPE_H264_P_FRAME = 1, - D3D12_VIDEO_ENCODER_FRAME_TYPE_H264_B_FRAME = 2, - D3D12_VIDEO_ENCODER_FRAME_TYPE_H264_IDR_FRAME = 3 - } D3D12_VIDEO_ENCODER_FRAME_TYPE_H264; - -typedef struct D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_H264 - { - UINT ReconstructedPictureResourceIndex; - BOOL IsLongTermReference; - UINT LongTermPictureIdx; - UINT PictureOrderCountNumber; - UINT FrameDecodingOrderNumber; - UINT TemporalLayerIndex; - } D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_H264; - -typedef -enum D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAGS - { - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAG_NONE = 0, - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAG_REQUEST_INTRA_CONSTRAINED_SLICES = 0x1, - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAG_REQUEST_NUM_REF_IDX_ACTIVE_OVERRIDE_FLAG_SLICE = 0x2 - } D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAGS) -typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION - { - UCHAR memory_management_control_operation; - UINT difference_of_pic_nums_minus1; - UINT long_term_pic_num; - UINT long_term_frame_idx; - UINT max_long_term_frame_idx_plus1; - } D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION; - -typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION - { - UCHAR modification_of_pic_nums_idc; - UINT abs_diff_pic_num_minus1; - UINT long_term_pic_num; - } D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION; - -typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264 - { - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAGS Flags; - D3D12_VIDEO_ENCODER_FRAME_TYPE_H264 FrameType; - UINT pic_parameter_set_id; - UINT idr_pic_id; - UINT PictureOrderCountNumber; - UINT FrameDecodingOrderNumber; - UINT TemporalLayerIndex; - UINT List0ReferenceFramesCount; - _Field_size_full_(List0ReferenceFramesCount) UINT *pList0ReferenceFrames; - UINT List1ReferenceFramesCount; - _Field_size_full_(List1ReferenceFramesCount) UINT *pList1ReferenceFrames; - UINT ReferenceFramesReconPictureDescriptorsCount; - _Field_size_full_(ReferenceFramesReconPictureDescriptorsCount) D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_H264 *pReferenceFramesReconPictureDescriptors; - UCHAR adaptive_ref_pic_marking_mode_flag; - UINT RefPicMarkingOperationsCommandsCount; - _Field_size_full_(RefPicMarkingOperationsCommandsCount) D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION *pRefPicMarkingOperationsCommands; - UINT List0RefPicModificationsCount; - _Field_size_full_(List0RefPicModificationsCount) D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION *pList0RefPicModifications; - UINT List1RefPicModificationsCount; - _Field_size_full_(List1RefPicModificationsCount) D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION *pList1RefPicModifications; - UINT QPMapValuesCount; - _Field_size_full_(QPMapValuesCount) INT8 *pRateControlQPMap; - } D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264; - -typedef -enum D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC - { - D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC_I_FRAME = 0, - D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC_P_FRAME = 1, - D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC_B_FRAME = 2, - D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC_IDR_FRAME = 3 - } D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC; - -typedef struct D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_HEVC - { - UINT ReconstructedPictureResourceIndex; - BOOL IsRefUsedByCurrentPic; - BOOL IsLongTermReference; - UINT PictureOrderCountNumber; - UINT TemporalLayerIndex; - } D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_HEVC; - -typedef -enum D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS - { - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAG_NONE = 0, - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAG_REQUEST_INTRA_CONSTRAINED_SLICES = 0x1, - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAG_REQUEST_NUM_REF_IDX_ACTIVE_OVERRIDE_FLAG_SLICE = 0x2, - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAG_CROSS_COMPONENT_PREDICTION = 0x4, - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAG_CHROMA_QP_OFFSET_LIST = 0x8 - } D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS) -typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC - { - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS Flags; - D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC FrameType; - UINT slice_pic_parameter_set_id; - UINT PictureOrderCountNumber; - UINT TemporalLayerIndex; - UINT List0ReferenceFramesCount; - _Field_size_full_(List0ReferenceFramesCount) UINT *pList0ReferenceFrames; - UINT List1ReferenceFramesCount; - _Field_size_full_(List1ReferenceFramesCount) UINT *pList1ReferenceFrames; - UINT ReferenceFramesReconPictureDescriptorsCount; - _Field_size_full_(ReferenceFramesReconPictureDescriptorsCount) D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_HEVC *pReferenceFramesReconPictureDescriptors; - UINT List0RefPicModificationsCount; - _Field_size_full_(List0RefPicModificationsCount) UINT *pList0RefPicModifications; - UINT List1RefPicModificationsCount; - _Field_size_full_(List1RefPicModificationsCount) UINT *pList1RefPicModifications; - UINT QPMapValuesCount; - _Field_size_full_(QPMapValuesCount) INT8 *pRateControlQPMap; - } D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC; - -typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC1 - { - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS Flags; - D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC FrameType; - UINT slice_pic_parameter_set_id; - UINT PictureOrderCountNumber; - UINT TemporalLayerIndex; - UINT List0ReferenceFramesCount; - _Field_size_full_(List0ReferenceFramesCount) UINT *pList0ReferenceFrames; - UINT List1ReferenceFramesCount; - _Field_size_full_(List1ReferenceFramesCount) UINT *pList1ReferenceFrames; - UINT ReferenceFramesReconPictureDescriptorsCount; - _Field_size_full_(ReferenceFramesReconPictureDescriptorsCount) D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_HEVC *pReferenceFramesReconPictureDescriptors; - UINT List0RefPicModificationsCount; - _Field_size_full_(List0RefPicModificationsCount) UINT *pList0RefPicModifications; - UINT List1RefPicModificationsCount; - _Field_size_full_(List1RefPicModificationsCount) UINT *pList1RefPicModifications; - UINT QPMapValuesCount; - _Field_size_full_(QPMapValuesCount) INT8 *pRateControlQPMap; - UCHAR diff_cu_chroma_qp_offset_depth; - UCHAR log2_sao_offset_scale_luma; - UCHAR log2_sao_offset_scale_chroma; - UCHAR log2_max_transform_skip_block_size_minus2; - UCHAR chroma_qp_offset_list_len_minus1; - CHAR cb_qp_offset_list[ 6 ]; - CHAR cr_qp_offset_list[ 6 ]; - } D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC1; - -typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA - { - UINT DataSize; - union - { - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264 *pH264PicData; - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC *pHEVCPicData; - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC1 *pHEVCPicData1; - D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA *pAV1PicData; - } ; - } D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA; - -typedef struct D3D12_VIDEO_ENCODE_REFERENCE_FRAMES - { - UINT NumTexture2Ds; - _Field_size_full_(NumTexture2Ds) ID3D12Resource **ppTexture2Ds; - _Field_size_full_(NumTexture2Ds) UINT *pSubresources; - } D3D12_VIDEO_ENCODE_REFERENCE_FRAMES; - -typedef -enum D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAGS - { - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAG_NONE = 0, - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAG_USED_AS_REFERENCE_PICTURE = 0x1 - } D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAGS) -typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC - { - UINT IntraRefreshFrameIndex; - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAGS Flags; - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA PictureControlCodecData; - D3D12_VIDEO_ENCODE_REFERENCE_FRAMES ReferenceFrames; - } D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC; - -typedef -enum D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAGS - { - D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAG_NONE = 0, - D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAG_RESOLUTION_CHANGE = 0x1, - D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAG_RATE_CONTROL_CHANGE = 0x2, - D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAG_SUBREGION_LAYOUT_CHANGE = 0x4, - D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAG_REQUEST_INTRA_REFRESH = 0x8, - D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAG_GOP_SEQUENCE_CHANGE = 0x10 - } D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAGS) -typedef struct D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_DESC - { - D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAGS Flags; - D3D12_VIDEO_ENCODER_INTRA_REFRESH IntraRefreshConfig; - D3D12_VIDEO_ENCODER_RATE_CONTROL RateControl; - D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC PictureTargetResolution; - D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE SelectedLayoutMode; - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA FrameSubregionsLayoutData; - D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE CodecGopSequence; - } D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_DESC; - -typedef struct D3D12_VIDEO_ENCODER_ENCODEFRAME_INPUT_ARGUMENTS - { - D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_DESC SequenceControlDesc; - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC PictureControlDesc; - ID3D12Resource *pInputFrame; - UINT InputFrameSubresource; - UINT CurrentFrameBitstreamMetadataSize; - } D3D12_VIDEO_ENCODER_ENCODEFRAME_INPUT_ARGUMENTS; - -typedef struct D3D12_VIDEO_ENCODER_COMPRESSED_BITSTREAM - { - ID3D12Resource *pBuffer; - UINT64 FrameStartOffset; - } D3D12_VIDEO_ENCODER_COMPRESSED_BITSTREAM; - -typedef struct D3D12_VIDEO_ENCODER_RECONSTRUCTED_PICTURE - { - ID3D12Resource *pReconstructedPicture; - UINT ReconstructedPictureSubresource; - } D3D12_VIDEO_ENCODER_RECONSTRUCTED_PICTURE; - -typedef struct D3D12_VIDEO_ENCODER_FRAME_SUBREGION_METADATA - { - UINT64 bSize; - UINT64 bStartOffset; - UINT64 bHeaderSize; - } D3D12_VIDEO_ENCODER_FRAME_SUBREGION_METADATA; - -typedef -enum D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAGS - { - D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAG_NO_ERROR = 0, - D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAG_CODEC_PICTURE_CONTROL_NOT_SUPPORTED = 0x1, - D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAG_SUBREGION_LAYOUT_CONFIGURATION_NOT_SUPPORTED = 0x2, - D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAG_INVALID_REFERENCE_PICTURES = 0x4, - D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAG_RECONFIGURATION_REQUEST_NOT_SUPPORTED = 0x8, - D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAG_INVALID_METADATA_BUFFER_SOURCE = 0x10 - } D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAGS; - -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAGS) -typedef struct D3D12_VIDEO_ENCODER_OUTPUT_METADATA_STATISTICS - { - UINT64 AverageQP; - UINT64 IntraCodingUnitsCount; - UINT64 InterCodingUnitsCount; - UINT64 SkipCodingUnitsCount; - UINT64 AverageMotionEstimationXDirection; - UINT64 AverageMotionEstimationYDirection; - } D3D12_VIDEO_ENCODER_OUTPUT_METADATA_STATISTICS; - -typedef struct D3D12_VIDEO_ENCODER_OUTPUT_METADATA - { - UINT64 EncodeErrorFlags; - D3D12_VIDEO_ENCODER_OUTPUT_METADATA_STATISTICS EncodeStats; - UINT64 EncodedBitstreamWrittenBytesCount; - UINT64 WrittenSubregionsCount; - } D3D12_VIDEO_ENCODER_OUTPUT_METADATA; - -typedef struct D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER - { - ID3D12Resource *pBuffer; - UINT64 Offset; - } D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER; - -typedef struct D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS - { - D3D12_VIDEO_ENCODER_CODEC EncoderCodec; - D3D12_VIDEO_ENCODER_PROFILE_DESC EncoderProfile; - DXGI_FORMAT EncoderInputFormat; - D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC EncodedPictureEffectiveResolution; - D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER HWLayoutMetadata; - } D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS; - -typedef struct D3D12_VIDEO_ENCODER_RESOLVE_METADATA_OUTPUT_ARGUMENTS - { - D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER ResolvedLayoutMetadata; - } D3D12_VIDEO_ENCODER_RESOLVE_METADATA_OUTPUT_ARGUMENTS; - -typedef struct D3D12_VIDEO_ENCODER_ENCODEFRAME_OUTPUT_ARGUMENTS - { - D3D12_VIDEO_ENCODER_COMPRESSED_BITSTREAM Bitstream; - D3D12_VIDEO_ENCODER_RECONSTRUCTED_PICTURE ReconstructedPicture; - D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER EncoderOutputMetadata; - } D3D12_VIDEO_ENCODER_ENCODEFRAME_OUTPUT_ARGUMENTS; - -extern RPC_IF_HANDLE __MIDL_itf_d3d12video_0000_0025_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12video_0000_0025_v0_0_s_ifspec; - -#ifndef __ID3D12VideoEncodeCommandList2_INTERFACE_DEFINED__ -#define __ID3D12VideoEncodeCommandList2_INTERFACE_DEFINED__ - -/* interface ID3D12VideoEncodeCommandList2 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12VideoEncodeCommandList2; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("895491e2-e701-46a9-9a1f-8d3480ed867a") - ID3D12VideoEncodeCommandList2 : public ID3D12VideoEncodeCommandList1 - { - public: - virtual void STDMETHODCALLTYPE EncodeFrame( - _In_ ID3D12VideoEncoder *pEncoder, - _In_ ID3D12VideoEncoderHeap *pHeap, - _In_ const D3D12_VIDEO_ENCODER_ENCODEFRAME_INPUT_ARGUMENTS *pInputArguments, - _In_ const D3D12_VIDEO_ENCODER_ENCODEFRAME_OUTPUT_ARGUMENTS *pOutputArguments) = 0; - - virtual void STDMETHODCALLTYPE ResolveEncoderOutputMetadata( - _In_ const D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS *pInputArguments, - _In_ const D3D12_VIDEO_ENCODER_RESOLVE_METADATA_OUTPUT_ARGUMENTS *pOutputArguments) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12VideoEncodeCommandList2Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12VideoEncodeCommandList2 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12VideoEncodeCommandList2 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12VideoEncodeCommandList2 * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12VideoEncodeCommandList2 * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12VideoEncodeCommandList2 * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12VideoEncodeCommandList2 * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12VideoEncodeCommandList2 * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12VideoEncodeCommandList2 * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12CommandList, GetType) - D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )( - ID3D12VideoEncodeCommandList2 * This); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, Close) - HRESULT ( STDMETHODCALLTYPE *Close )( - ID3D12VideoEncodeCommandList2 * This); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, Reset) - HRESULT ( STDMETHODCALLTYPE *Reset )( - ID3D12VideoEncodeCommandList2 * This, - _In_ ID3D12CommandAllocator *pAllocator); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, ClearState) - void ( STDMETHODCALLTYPE *ClearState )( - ID3D12VideoEncodeCommandList2 * This); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, ResourceBarrier) - void ( STDMETHODCALLTYPE *ResourceBarrier )( - ID3D12VideoEncodeCommandList2 * This, - _In_ UINT NumBarriers, - _In_reads_(NumBarriers) const D3D12_RESOURCE_BARRIER *pBarriers); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, DiscardResource) - void ( STDMETHODCALLTYPE *DiscardResource )( - ID3D12VideoEncodeCommandList2 * This, - _In_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DISCARD_REGION *pRegion); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, BeginQuery) - void ( STDMETHODCALLTYPE *BeginQuery )( - ID3D12VideoEncodeCommandList2 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, EndQuery) - void ( STDMETHODCALLTYPE *EndQuery )( - ID3D12VideoEncodeCommandList2 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, ResolveQueryData) - void ( STDMETHODCALLTYPE *ResolveQueryData )( - ID3D12VideoEncodeCommandList2 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT StartIndex, - _In_ UINT NumQueries, - _In_ ID3D12Resource *pDestinationBuffer, - _In_ UINT64 AlignedDestinationBufferOffset); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, SetPredication) - void ( STDMETHODCALLTYPE *SetPredication )( - ID3D12VideoEncodeCommandList2 * This, - _In_opt_ ID3D12Resource *pBuffer, - _In_ UINT64 AlignedBufferOffset, - _In_ D3D12_PREDICATION_OP Operation); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, SetMarker) - void ( STDMETHODCALLTYPE *SetMarker )( - ID3D12VideoEncodeCommandList2 * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, BeginEvent) - void ( STDMETHODCALLTYPE *BeginEvent )( - ID3D12VideoEncodeCommandList2 * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, EndEvent) - void ( STDMETHODCALLTYPE *EndEvent )( - ID3D12VideoEncodeCommandList2 * This); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, EstimateMotion) - void ( STDMETHODCALLTYPE *EstimateMotion )( - ID3D12VideoEncodeCommandList2 * This, - _In_ ID3D12VideoMotionEstimator *pMotionEstimator, - _In_ const D3D12_VIDEO_MOTION_ESTIMATOR_OUTPUT *pOutputArguments, - _In_ const D3D12_VIDEO_MOTION_ESTIMATOR_INPUT *pInputArguments); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, ResolveMotionVectorHeap) - void ( STDMETHODCALLTYPE *ResolveMotionVectorHeap )( - ID3D12VideoEncodeCommandList2 * This, - const D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_OUTPUT *pOutputArguments, - const D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_INPUT *pInputArguments); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, WriteBufferImmediate) - void ( STDMETHODCALLTYPE *WriteBufferImmediate )( - ID3D12VideoEncodeCommandList2 * This, - UINT Count, - _In_reads_(Count) const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams, - _In_reads_opt_(Count) const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, SetProtectedResourceSession) - void ( STDMETHODCALLTYPE *SetProtectedResourceSession )( - ID3D12VideoEncodeCommandList2 * This, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList1, InitializeExtensionCommand) - void ( STDMETHODCALLTYPE *InitializeExtensionCommand )( - ID3D12VideoEncodeCommandList2 * This, - _In_ ID3D12VideoExtensionCommand *pExtensionCommand, - _In_reads_bytes_(InitializationParametersSizeInBytes) const void *pInitializationParameters, - SIZE_T InitializationParametersSizeInBytes); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList1, ExecuteExtensionCommand) - void ( STDMETHODCALLTYPE *ExecuteExtensionCommand )( - ID3D12VideoEncodeCommandList2 * This, - _In_ ID3D12VideoExtensionCommand *pExtensionCommand, - _In_reads_bytes_(ExecutionParametersSizeInBytes) const void *pExecutionParameters, - SIZE_T ExecutionParametersSizeInBytes); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList2, EncodeFrame) - void ( STDMETHODCALLTYPE *EncodeFrame )( - ID3D12VideoEncodeCommandList2 * This, - _In_ ID3D12VideoEncoder *pEncoder, - _In_ ID3D12VideoEncoderHeap *pHeap, - _In_ const D3D12_VIDEO_ENCODER_ENCODEFRAME_INPUT_ARGUMENTS *pInputArguments, - _In_ const D3D12_VIDEO_ENCODER_ENCODEFRAME_OUTPUT_ARGUMENTS *pOutputArguments); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList2, ResolveEncoderOutputMetadata) - void ( STDMETHODCALLTYPE *ResolveEncoderOutputMetadata )( - ID3D12VideoEncodeCommandList2 * This, - _In_ const D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS *pInputArguments, - _In_ const D3D12_VIDEO_ENCODER_RESOLVE_METADATA_OUTPUT_ARGUMENTS *pOutputArguments); - - END_INTERFACE - } ID3D12VideoEncodeCommandList2Vtbl; - - interface ID3D12VideoEncodeCommandList2 - { - CONST_VTBL struct ID3D12VideoEncodeCommandList2Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12VideoEncodeCommandList2_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12VideoEncodeCommandList2_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12VideoEncodeCommandList2_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12VideoEncodeCommandList2_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12VideoEncodeCommandList2_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12VideoEncodeCommandList2_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12VideoEncodeCommandList2_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12VideoEncodeCommandList2_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12VideoEncodeCommandList2_GetType(This) \ - ( (This)->lpVtbl -> GetType(This) ) - -#define ID3D12VideoEncodeCommandList2_Close(This) \ - ( (This)->lpVtbl -> Close(This) ) - -#define ID3D12VideoEncodeCommandList2_Reset(This,pAllocator) \ - ( (This)->lpVtbl -> Reset(This,pAllocator) ) - -#define ID3D12VideoEncodeCommandList2_ClearState(This) \ - ( (This)->lpVtbl -> ClearState(This) ) - -#define ID3D12VideoEncodeCommandList2_ResourceBarrier(This,NumBarriers,pBarriers) \ - ( (This)->lpVtbl -> ResourceBarrier(This,NumBarriers,pBarriers) ) - -#define ID3D12VideoEncodeCommandList2_DiscardResource(This,pResource,pRegion) \ - ( (This)->lpVtbl -> DiscardResource(This,pResource,pRegion) ) - -#define ID3D12VideoEncodeCommandList2_BeginQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> BeginQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12VideoEncodeCommandList2_EndQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> EndQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12VideoEncodeCommandList2_ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) \ - ( (This)->lpVtbl -> ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) ) - -#define ID3D12VideoEncodeCommandList2_SetPredication(This,pBuffer,AlignedBufferOffset,Operation) \ - ( (This)->lpVtbl -> SetPredication(This,pBuffer,AlignedBufferOffset,Operation) ) - -#define ID3D12VideoEncodeCommandList2_SetMarker(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> SetMarker(This,Metadata,pData,Size) ) - -#define ID3D12VideoEncodeCommandList2_BeginEvent(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> BeginEvent(This,Metadata,pData,Size) ) - -#define ID3D12VideoEncodeCommandList2_EndEvent(This) \ - ( (This)->lpVtbl -> EndEvent(This) ) - -#define ID3D12VideoEncodeCommandList2_EstimateMotion(This,pMotionEstimator,pOutputArguments,pInputArguments) \ - ( (This)->lpVtbl -> EstimateMotion(This,pMotionEstimator,pOutputArguments,pInputArguments) ) - -#define ID3D12VideoEncodeCommandList2_ResolveMotionVectorHeap(This,pOutputArguments,pInputArguments) \ - ( (This)->lpVtbl -> ResolveMotionVectorHeap(This,pOutputArguments,pInputArguments) ) - -#define ID3D12VideoEncodeCommandList2_WriteBufferImmediate(This,Count,pParams,pModes) \ - ( (This)->lpVtbl -> WriteBufferImmediate(This,Count,pParams,pModes) ) - -#define ID3D12VideoEncodeCommandList2_SetProtectedResourceSession(This,pProtectedResourceSession) \ - ( (This)->lpVtbl -> SetProtectedResourceSession(This,pProtectedResourceSession) ) - -#define ID3D12VideoEncodeCommandList2_InitializeExtensionCommand(This,pExtensionCommand,pInitializationParameters,InitializationParametersSizeInBytes) \ - ( (This)->lpVtbl -> InitializeExtensionCommand(This,pExtensionCommand,pInitializationParameters,InitializationParametersSizeInBytes) ) - -#define ID3D12VideoEncodeCommandList2_ExecuteExtensionCommand(This,pExtensionCommand,pExecutionParameters,ExecutionParametersSizeInBytes) \ - ( (This)->lpVtbl -> ExecuteExtensionCommand(This,pExtensionCommand,pExecutionParameters,ExecutionParametersSizeInBytes) ) - -#define ID3D12VideoEncodeCommandList2_EncodeFrame(This,pEncoder,pHeap,pInputArguments,pOutputArguments) \ - ( (This)->lpVtbl -> EncodeFrame(This,pEncoder,pHeap,pInputArguments,pOutputArguments) ) - -#define ID3D12VideoEncodeCommandList2_ResolveEncoderOutputMetadata(This,pInputArguments,pOutputArguments) \ - ( (This)->lpVtbl -> ResolveEncoderOutputMetadata(This,pInputArguments,pOutputArguments) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12VideoEncodeCommandList2_INTERFACE_DEFINED__ */ - -#ifndef __ID3D12VideoEncodeCommandList3_INTERFACE_DEFINED__ -#define __ID3D12VideoEncodeCommandList3_INTERFACE_DEFINED__ - -/* interface ID3D12VideoEncodeCommandList3 */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D12VideoEncodeCommandList3; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("7f027b22-1515-4e85-aa0d-026486580576") - ID3D12VideoEncodeCommandList3 : public ID3D12VideoEncodeCommandList2 - { - public: - virtual void STDMETHODCALLTYPE Barrier( - UINT32 NumBarrierGroups, - _In_reads_(NumBarrierGroups) const D3D12_BARRIER_GROUP *pBarrierGroups) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D12VideoEncodeCommandList3Vtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D12VideoEncodeCommandList3 * This, - REFIID riid, - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D12VideoEncodeCommandList3 * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D12VideoEncodeCommandList3 * This); - - DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) - HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( - ID3D12VideoEncodeCommandList3 * This, - _In_ REFGUID guid, - _Inout_ UINT *pDataSize, - _Out_writes_bytes_opt_( *pDataSize ) void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) - HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( - ID3D12VideoEncodeCommandList3 * This, - _In_ REFGUID guid, - _In_ UINT DataSize, - _In_reads_bytes_opt_( DataSize ) const void *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) - HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( - ID3D12VideoEncodeCommandList3 * This, - _In_ REFGUID guid, - _In_opt_ const IUnknown *pData); - - DECLSPEC_XFGVIRT(ID3D12Object, SetName) - HRESULT ( STDMETHODCALLTYPE *SetName )( - ID3D12VideoEncodeCommandList3 * This, - _In_z_ LPCWSTR Name); - - DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) - HRESULT ( STDMETHODCALLTYPE *GetDevice )( - ID3D12VideoEncodeCommandList3 * This, - REFIID riid, - _COM_Outptr_opt_ void **ppvDevice); - - DECLSPEC_XFGVIRT(ID3D12CommandList, GetType) - D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )( - ID3D12VideoEncodeCommandList3 * This); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, Close) - HRESULT ( STDMETHODCALLTYPE *Close )( - ID3D12VideoEncodeCommandList3 * This); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, Reset) - HRESULT ( STDMETHODCALLTYPE *Reset )( - ID3D12VideoEncodeCommandList3 * This, - _In_ ID3D12CommandAllocator *pAllocator); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, ClearState) - void ( STDMETHODCALLTYPE *ClearState )( - ID3D12VideoEncodeCommandList3 * This); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, ResourceBarrier) - void ( STDMETHODCALLTYPE *ResourceBarrier )( - ID3D12VideoEncodeCommandList3 * This, - _In_ UINT NumBarriers, - _In_reads_(NumBarriers) const D3D12_RESOURCE_BARRIER *pBarriers); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, DiscardResource) - void ( STDMETHODCALLTYPE *DiscardResource )( - ID3D12VideoEncodeCommandList3 * This, - _In_ ID3D12Resource *pResource, - _In_opt_ const D3D12_DISCARD_REGION *pRegion); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, BeginQuery) - void ( STDMETHODCALLTYPE *BeginQuery )( - ID3D12VideoEncodeCommandList3 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, EndQuery) - void ( STDMETHODCALLTYPE *EndQuery )( - ID3D12VideoEncodeCommandList3 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT Index); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, ResolveQueryData) - void ( STDMETHODCALLTYPE *ResolveQueryData )( - ID3D12VideoEncodeCommandList3 * This, - _In_ ID3D12QueryHeap *pQueryHeap, - _In_ D3D12_QUERY_TYPE Type, - _In_ UINT StartIndex, - _In_ UINT NumQueries, - _In_ ID3D12Resource *pDestinationBuffer, - _In_ UINT64 AlignedDestinationBufferOffset); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, SetPredication) - void ( STDMETHODCALLTYPE *SetPredication )( - ID3D12VideoEncodeCommandList3 * This, - _In_opt_ ID3D12Resource *pBuffer, - _In_ UINT64 AlignedBufferOffset, - _In_ D3D12_PREDICATION_OP Operation); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, SetMarker) - void ( STDMETHODCALLTYPE *SetMarker )( - ID3D12VideoEncodeCommandList3 * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, BeginEvent) - void ( STDMETHODCALLTYPE *BeginEvent )( - ID3D12VideoEncodeCommandList3 * This, - UINT Metadata, - _In_reads_bytes_opt_(Size) const void *pData, - UINT Size); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, EndEvent) - void ( STDMETHODCALLTYPE *EndEvent )( - ID3D12VideoEncodeCommandList3 * This); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, EstimateMotion) - void ( STDMETHODCALLTYPE *EstimateMotion )( - ID3D12VideoEncodeCommandList3 * This, - _In_ ID3D12VideoMotionEstimator *pMotionEstimator, - _In_ const D3D12_VIDEO_MOTION_ESTIMATOR_OUTPUT *pOutputArguments, - _In_ const D3D12_VIDEO_MOTION_ESTIMATOR_INPUT *pInputArguments); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, ResolveMotionVectorHeap) - void ( STDMETHODCALLTYPE *ResolveMotionVectorHeap )( - ID3D12VideoEncodeCommandList3 * This, - const D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_OUTPUT *pOutputArguments, - const D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_INPUT *pInputArguments); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, WriteBufferImmediate) - void ( STDMETHODCALLTYPE *WriteBufferImmediate )( - ID3D12VideoEncodeCommandList3 * This, - UINT Count, - _In_reads_(Count) const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams, - _In_reads_opt_(Count) const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, SetProtectedResourceSession) - void ( STDMETHODCALLTYPE *SetProtectedResourceSession )( - ID3D12VideoEncodeCommandList3 * This, - _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList1, InitializeExtensionCommand) - void ( STDMETHODCALLTYPE *InitializeExtensionCommand )( - ID3D12VideoEncodeCommandList3 * This, - _In_ ID3D12VideoExtensionCommand *pExtensionCommand, - _In_reads_bytes_(InitializationParametersSizeInBytes) const void *pInitializationParameters, - SIZE_T InitializationParametersSizeInBytes); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList1, ExecuteExtensionCommand) - void ( STDMETHODCALLTYPE *ExecuteExtensionCommand )( - ID3D12VideoEncodeCommandList3 * This, - _In_ ID3D12VideoExtensionCommand *pExtensionCommand, - _In_reads_bytes_(ExecutionParametersSizeInBytes) const void *pExecutionParameters, - SIZE_T ExecutionParametersSizeInBytes); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList2, EncodeFrame) - void ( STDMETHODCALLTYPE *EncodeFrame )( - ID3D12VideoEncodeCommandList3 * This, - _In_ ID3D12VideoEncoder *pEncoder, - _In_ ID3D12VideoEncoderHeap *pHeap, - _In_ const D3D12_VIDEO_ENCODER_ENCODEFRAME_INPUT_ARGUMENTS *pInputArguments, - _In_ const D3D12_VIDEO_ENCODER_ENCODEFRAME_OUTPUT_ARGUMENTS *pOutputArguments); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList2, ResolveEncoderOutputMetadata) - void ( STDMETHODCALLTYPE *ResolveEncoderOutputMetadata )( - ID3D12VideoEncodeCommandList3 * This, - _In_ const D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS *pInputArguments, - _In_ const D3D12_VIDEO_ENCODER_RESOLVE_METADATA_OUTPUT_ARGUMENTS *pOutputArguments); - - DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList3, Barrier) - void ( STDMETHODCALLTYPE *Barrier )( - ID3D12VideoEncodeCommandList3 * This, - UINT32 NumBarrierGroups, - _In_reads_(NumBarrierGroups) const D3D12_BARRIER_GROUP *pBarrierGroups); - - END_INTERFACE - } ID3D12VideoEncodeCommandList3Vtbl; - - interface ID3D12VideoEncodeCommandList3 - { - CONST_VTBL struct ID3D12VideoEncodeCommandList3Vtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D12VideoEncodeCommandList3_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D12VideoEncodeCommandList3_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D12VideoEncodeCommandList3_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D12VideoEncodeCommandList3_GetPrivateData(This,guid,pDataSize,pData) \ - ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) - -#define ID3D12VideoEncodeCommandList3_SetPrivateData(This,guid,DataSize,pData) \ - ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) - -#define ID3D12VideoEncodeCommandList3_SetPrivateDataInterface(This,guid,pData) \ - ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) - -#define ID3D12VideoEncodeCommandList3_SetName(This,Name) \ - ( (This)->lpVtbl -> SetName(This,Name) ) - -#define ID3D12VideoEncodeCommandList3_GetDevice(This,riid,ppvDevice) \ - ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) - -#define ID3D12VideoEncodeCommandList3_GetType(This) \ - ( (This)->lpVtbl -> GetType(This) ) - -#define ID3D12VideoEncodeCommandList3_Close(This) \ - ( (This)->lpVtbl -> Close(This) ) - -#define ID3D12VideoEncodeCommandList3_Reset(This,pAllocator) \ - ( (This)->lpVtbl -> Reset(This,pAllocator) ) - -#define ID3D12VideoEncodeCommandList3_ClearState(This) \ - ( (This)->lpVtbl -> ClearState(This) ) - -#define ID3D12VideoEncodeCommandList3_ResourceBarrier(This,NumBarriers,pBarriers) \ - ( (This)->lpVtbl -> ResourceBarrier(This,NumBarriers,pBarriers) ) - -#define ID3D12VideoEncodeCommandList3_DiscardResource(This,pResource,pRegion) \ - ( (This)->lpVtbl -> DiscardResource(This,pResource,pRegion) ) - -#define ID3D12VideoEncodeCommandList3_BeginQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> BeginQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12VideoEncodeCommandList3_EndQuery(This,pQueryHeap,Type,Index) \ - ( (This)->lpVtbl -> EndQuery(This,pQueryHeap,Type,Index) ) - -#define ID3D12VideoEncodeCommandList3_ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) \ - ( (This)->lpVtbl -> ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) ) - -#define ID3D12VideoEncodeCommandList3_SetPredication(This,pBuffer,AlignedBufferOffset,Operation) \ - ( (This)->lpVtbl -> SetPredication(This,pBuffer,AlignedBufferOffset,Operation) ) - -#define ID3D12VideoEncodeCommandList3_SetMarker(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> SetMarker(This,Metadata,pData,Size) ) - -#define ID3D12VideoEncodeCommandList3_BeginEvent(This,Metadata,pData,Size) \ - ( (This)->lpVtbl -> BeginEvent(This,Metadata,pData,Size) ) - -#define ID3D12VideoEncodeCommandList3_EndEvent(This) \ - ( (This)->lpVtbl -> EndEvent(This) ) - -#define ID3D12VideoEncodeCommandList3_EstimateMotion(This,pMotionEstimator,pOutputArguments,pInputArguments) \ - ( (This)->lpVtbl -> EstimateMotion(This,pMotionEstimator,pOutputArguments,pInputArguments) ) - -#define ID3D12VideoEncodeCommandList3_ResolveMotionVectorHeap(This,pOutputArguments,pInputArguments) \ - ( (This)->lpVtbl -> ResolveMotionVectorHeap(This,pOutputArguments,pInputArguments) ) - -#define ID3D12VideoEncodeCommandList3_WriteBufferImmediate(This,Count,pParams,pModes) \ - ( (This)->lpVtbl -> WriteBufferImmediate(This,Count,pParams,pModes) ) - -#define ID3D12VideoEncodeCommandList3_SetProtectedResourceSession(This,pProtectedResourceSession) \ - ( (This)->lpVtbl -> SetProtectedResourceSession(This,pProtectedResourceSession) ) - -#define ID3D12VideoEncodeCommandList3_InitializeExtensionCommand(This,pExtensionCommand,pInitializationParameters,InitializationParametersSizeInBytes) \ - ( (This)->lpVtbl -> InitializeExtensionCommand(This,pExtensionCommand,pInitializationParameters,InitializationParametersSizeInBytes) ) - -#define ID3D12VideoEncodeCommandList3_ExecuteExtensionCommand(This,pExtensionCommand,pExecutionParameters,ExecutionParametersSizeInBytes) \ - ( (This)->lpVtbl -> ExecuteExtensionCommand(This,pExtensionCommand,pExecutionParameters,ExecutionParametersSizeInBytes) ) - -#define ID3D12VideoEncodeCommandList3_EncodeFrame(This,pEncoder,pHeap,pInputArguments,pOutputArguments) \ - ( (This)->lpVtbl -> EncodeFrame(This,pEncoder,pHeap,pInputArguments,pOutputArguments) ) - -#define ID3D12VideoEncodeCommandList3_ResolveEncoderOutputMetadata(This,pInputArguments,pOutputArguments) \ - ( (This)->lpVtbl -> ResolveEncoderOutputMetadata(This,pInputArguments,pOutputArguments) ) - -#define ID3D12VideoEncodeCommandList3_Barrier(This,NumBarrierGroups,pBarrierGroups) \ - ( (This)->lpVtbl -> Barrier(This,NumBarrierGroups,pBarrierGroups) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D12VideoEncodeCommandList3_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3d12video_0000_0027 */ -/* [local] */ - -#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) */ -#pragma endregion -DEFINE_GUID(IID_ID3D12VideoDecoderHeap,0x0946B7C9,0xEBF6,0x4047,0xBB,0x73,0x86,0x83,0xE2,0x7D,0xBB,0x1F); -DEFINE_GUID(IID_ID3D12VideoDevice,0x1F052807,0x0B46,0x4ACC,0x8A,0x89,0x36,0x4F,0x79,0x37,0x18,0xA4); -DEFINE_GUID(IID_ID3D12VideoDecoder,0xC59B6BDC,0x7720,0x4074,0xA1,0x36,0x17,0xA1,0x56,0x03,0x74,0x70); -DEFINE_GUID(IID_ID3D12VideoProcessor,0x304FDB32,0xBEDE,0x410A,0x85,0x45,0x94,0x3A,0xC6,0xA4,0x61,0x38); -DEFINE_GUID(IID_ID3D12VideoDecodeCommandList,0x3B60536E,0xAD29,0x4E64,0xA2,0x69,0xF8,0x53,0x83,0x7E,0x5E,0x53); -DEFINE_GUID(IID_ID3D12VideoProcessCommandList,0xAEB2543A,0x167F,0x4682,0xAC,0xC8,0xD1,0x59,0xED,0x4A,0x62,0x09); -DEFINE_GUID(IID_ID3D12VideoDecodeCommandList1,0xD52F011B,0xB56E,0x453C,0xA0,0x5A,0xA7,0xF3,0x11,0xC8,0xF4,0x72); -DEFINE_GUID(IID_ID3D12VideoProcessCommandList1,0x542C5C4D,0x7596,0x434F,0x8C,0x93,0x4E,0xFA,0x67,0x66,0xF2,0x67); -DEFINE_GUID(IID_ID3D12VideoMotionEstimator,0x33FDAE0E,0x098B,0x428F,0x87,0xBB,0x34,0xB6,0x95,0xDE,0x08,0xF8); -DEFINE_GUID(IID_ID3D12VideoMotionVectorHeap,0x5BE17987,0x743A,0x4061,0x83,0x4B,0x23,0xD2,0x2D,0xAE,0xA5,0x05); -DEFINE_GUID(IID_ID3D12VideoDevice1,0x981611AD,0xA144,0x4C83,0x98,0x90,0xF3,0x0E,0x26,0xD6,0x58,0xAB); -DEFINE_GUID(IID_ID3D12VideoEncodeCommandList,0x8455293A,0x0CBD,0x4831,0x9B,0x39,0xFB,0xDB,0xAB,0x72,0x47,0x23); -DEFINE_GUID(IID_ID3D12VideoDecoder1,0x79A2E5FB,0xCCD2,0x469A,0x9F,0xDE,0x19,0x5D,0x10,0x95,0x1F,0x7E); -DEFINE_GUID(IID_ID3D12VideoDecoderHeap1,0xDA1D98C5,0x539F,0x41B2,0xBF,0x6B,0x11,0x98,0xA0,0x3B,0x6D,0x26); -DEFINE_GUID(IID_ID3D12VideoProcessor1,0xF3CFE615,0x553F,0x425C,0x86,0xD8,0xEE,0x8C,0x1B,0x1F,0xB0,0x1C); -DEFINE_GUID(IID_ID3D12VideoExtensionCommand,0x554E41E8,0xAE8E,0x4A8C,0xB7,0xD2,0x5B,0x4F,0x27,0x4A,0x30,0xE4); -DEFINE_GUID(IID_ID3D12VideoDevice2,0xF019AC49,0xF838,0x4A95,0x9B,0x17,0x57,0x94,0x37,0xC8,0xF5,0x13); -DEFINE_GUID(IID_ID3D12VideoDecodeCommandList2,0x6e120880,0xc114,0x4153,0x80,0x36,0xd2,0x47,0x05,0x1e,0x17,0x29); -DEFINE_GUID(IID_ID3D12VideoDecodeCommandList3,0x2aee8c37,0x9562,0x42da,0x8a,0xbf,0x61,0xef,0xeb,0x2e,0x45,0x13); -DEFINE_GUID(IID_ID3D12VideoProcessCommandList2,0xdb525ae4,0x6ad6,0x473c,0xba,0xa7,0x59,0xb2,0xe3,0x70,0x82,0xe4); -DEFINE_GUID(IID_ID3D12VideoProcessCommandList3,0x1a0a4ca4,0x9f08,0x40ce,0x95,0x58,0xb4,0x11,0xfd,0x26,0x66,0xff); -DEFINE_GUID(IID_ID3D12VideoEncodeCommandList1,0x94971eca,0x2bdb,0x4769,0x88,0xcf,0x36,0x75,0xea,0x75,0x7e,0xbc); -DEFINE_GUID(IID_ID3D12VideoEncoder,0x2E0D212D,0x8DF9,0x44A6,0xA7,0x70,0xBB,0x28,0x9B,0x18,0x27,0x37); -DEFINE_GUID(IID_ID3D12VideoEncoderHeap,0x22B35D96,0x876A,0x44C0,0xB2,0x5E,0xFB,0x8C,0x9C,0x7F,0x1C,0x4A); -DEFINE_GUID(IID_ID3D12VideoDevice3,0x4243ADB4,0x3A32,0x4666,0x97,0x3C,0x0C,0xCC,0x56,0x25,0xDC,0x44); -DEFINE_GUID(IID_ID3D12VideoEncodeCommandList2,0x895491e2,0xe701,0x46a9,0x9a,0x1f,0x8d,0x34,0x80,0xed,0x86,0x7a); -DEFINE_GUID(IID_ID3D12VideoEncodeCommandList3,0x7f027b22,0x1515,0x4e85,0xaa,0x0d,0x02,0x64,0x86,0x58,0x05,0x76); - -extern RPC_IF_HANDLE __MIDL_itf_d3d12video_0000_0027_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12video_0000_0027_v0_0_s_ifspec; - -/* Additional Prototypes for ALL interfaces */ - -/* end of Additional Prototypes */ - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/Juliet/src/Graphics/D3D12/AgilitySDK/d3d12video.idl b/Juliet/src/Graphics/D3D12/AgilitySDK/d3d12video.idl deleted file mode 100644 index 36d63bf..0000000 --- a/Juliet/src/Graphics/D3D12/AgilitySDK/d3d12video.idl +++ /dev/null @@ -1,3172 +0,0 @@ -/*------------------------------------------------------------------------------------- - * - * Copyright (c) Microsoft Corporation - * Licensed under the MIT license - * - *-------------------------------------------------------------------------------------*/ -import "oaidl.idl"; -import "ocidl.idl"; - -import "dxgicommon.idl"; -import "d3d12.idl"; - -cpp_quote("#include ") - -#pragma region App Family -cpp_quote("#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES)") - -typedef enum D3D12_VIDEO_FIELD_TYPE -{ - D3D12_VIDEO_FIELD_TYPE_NONE = 0, - D3D12_VIDEO_FIELD_TYPE_INTERLACED_TOP_FIELD_FIRST = 1, - D3D12_VIDEO_FIELD_TYPE_INTERLACED_BOTTOM_FIELD_FIRST = 2, -} D3D12_VIDEO_FIELD_TYPE; - -typedef enum D3D12_VIDEO_FRAME_STEREO_FORMAT -{ - D3D12_VIDEO_FRAME_STEREO_FORMAT_NONE = 0, - D3D12_VIDEO_FRAME_STEREO_FORMAT_MONO = 1, - D3D12_VIDEO_FRAME_STEREO_FORMAT_HORIZONTAL = 2, - D3D12_VIDEO_FRAME_STEREO_FORMAT_VERTICAL = 3, - D3D12_VIDEO_FRAME_STEREO_FORMAT_SEPARATE = 4, -} D3D12_VIDEO_FRAME_STEREO_FORMAT; - -typedef struct D3D12_VIDEO_FORMAT -{ - DXGI_FORMAT Format; - DXGI_COLOR_SPACE_TYPE ColorSpace; -} D3D12_VIDEO_FORMAT; - -typedef struct D3D12_VIDEO_SAMPLE -{ - UINT Width; - UINT Height; - D3D12_VIDEO_FORMAT Format; -} D3D12_VIDEO_SAMPLE; - -typedef enum D3D12_VIDEO_FRAME_CODED_INTERLACE_TYPE -{ - D3D12_VIDEO_FRAME_CODED_INTERLACE_TYPE_NONE = 0, - D3D12_VIDEO_FRAME_CODED_INTERLACE_TYPE_FIELD_BASED = 1, -} D3D12_VIDEO_FRAME_CODED_INTERLACE_TYPE; - -typedef enum D3D12_FEATURE_VIDEO -{ - D3D12_FEATURE_VIDEO_DECODE_SUPPORT = 0, - D3D12_FEATURE_VIDEO_DECODE_PROFILES = 1, - D3D12_FEATURE_VIDEO_DECODE_FORMATS = 2, - D3D12_FEATURE_VIDEO_DECODE_CONVERSION_SUPPORT = 3, - D3D12_FEATURE_VIDEO_PROCESS_SUPPORT = 5, - D3D12_FEATURE_VIDEO_PROCESS_MAX_INPUT_STREAMS = 6, - D3D12_FEATURE_VIDEO_PROCESS_REFERENCE_INFO = 7, - D3D12_FEATURE_VIDEO_DECODER_HEAP_SIZE = 8, - D3D12_FEATURE_VIDEO_PROCESSOR_SIZE = 9, - D3D12_FEATURE_VIDEO_DECODE_PROFILE_COUNT = 10, - D3D12_FEATURE_VIDEO_DECODE_FORMAT_COUNT = 11, - D3D12_FEATURE_VIDEO_ARCHITECTURE = 17, - D3D12_FEATURE_VIDEO_DECODE_HISTOGRAM = 18, - D3D12_FEATURE_VIDEO_FEATURE_AREA_SUPPORT = 19, - D3D12_FEATURE_VIDEO_MOTION_ESTIMATOR = 20, - D3D12_FEATURE_VIDEO_MOTION_ESTIMATOR_SIZE = 21, - D3D12_FEATURE_VIDEO_EXTENSION_COMMAND_COUNT = 22, - D3D12_FEATURE_VIDEO_EXTENSION_COMMANDS = 23, - D3D12_FEATURE_VIDEO_EXTENSION_COMMAND_PARAMETER_COUNT = 24, - D3D12_FEATURE_VIDEO_EXTENSION_COMMAND_PARAMETERS = 25, - D3D12_FEATURE_VIDEO_EXTENSION_COMMAND_SUPPORT = 26, - D3D12_FEATURE_VIDEO_EXTENSION_COMMAND_SIZE = 27, - D3D12_FEATURE_VIDEO_DECODE_PROTECTED_RESOURCES = 28, - D3D12_FEATURE_VIDEO_PROCESS_PROTECTED_RESOURCES = 29, - D3D12_FEATURE_VIDEO_MOTION_ESTIMATOR_PROTECTED_RESOURCES = 30, - D3D12_FEATURE_VIDEO_DECODER_HEAP_SIZE1 = 31, - D3D12_FEATURE_VIDEO_PROCESSOR_SIZE1 = 32, - D3D12_FEATURE_VIDEO_ENCODER_CODEC = 33, - D3D12_FEATURE_VIDEO_ENCODER_PROFILE_LEVEL = 34, - D3D12_FEATURE_VIDEO_ENCODER_OUTPUT_RESOLUTION_RATIOS_COUNT = 35, - D3D12_FEATURE_VIDEO_ENCODER_OUTPUT_RESOLUTION = 36, - D3D12_FEATURE_VIDEO_ENCODER_INPUT_FORMAT = 37, - D3D12_FEATURE_VIDEO_ENCODER_RATE_CONTROL_MODE = 38, - D3D12_FEATURE_VIDEO_ENCODER_INTRA_REFRESH_MODE = 39, - D3D12_FEATURE_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE = 40, - D3D12_FEATURE_VIDEO_ENCODER_HEAP_SIZE = 41, - D3D12_FEATURE_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT = 42, - D3D12_FEATURE_VIDEO_ENCODER_SUPPORT = 43, - D3D12_FEATURE_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT = 44, - D3D12_FEATURE_VIDEO_ENCODER_RESOURCE_REQUIREMENTS = 45, - D3D12_FEATURE_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_CONFIG = 46, - D3D12_FEATURE_VIDEO_ENCODER_SUPPORT1 = 47, - -} D3D12_FEATURE_VIDEO; - -typedef enum D3D12_BITSTREAM_ENCRYPTION_TYPE -{ - D3D12_BITSTREAM_ENCRYPTION_TYPE_NONE = 0, -} D3D12_BITSTREAM_ENCRYPTION_TYPE; - -typedef struct D3D12_VIDEO_DECODE_CONFIGURATION -{ - GUID DecodeProfile; - D3D12_BITSTREAM_ENCRYPTION_TYPE BitstreamEncryption; - D3D12_VIDEO_FRAME_CODED_INTERLACE_TYPE InterlaceType; -} D3D12_VIDEO_DECODE_CONFIGURATION; - -typedef struct D3D12_VIDEO_DECODER_DESC -{ - UINT NodeMask; - D3D12_VIDEO_DECODE_CONFIGURATION Configuration; -} D3D12_VIDEO_DECODER_DESC; - -typedef struct D3D12_VIDEO_DECODER_HEAP_DESC -{ - UINT NodeMask; - D3D12_VIDEO_DECODE_CONFIGURATION Configuration; - UINT DecodeWidth; - UINT DecodeHeight; - DXGI_FORMAT Format; - DXGI_RATIONAL FrameRate; - UINT BitRate; - UINT MaxDecodePictureBufferCount; -} D3D12_VIDEO_DECODER_HEAP_DESC; - -typedef struct D3D12_VIDEO_SIZE_RANGE -{ - UINT MaxWidth; - UINT MaxHeight; - UINT MinWidth; - UINT MinHeight; -} D3D12_VIDEO_SIZE_RANGE; - -typedef enum D3D12_VIDEO_PROCESS_FILTER -{ - D3D12_VIDEO_PROCESS_FILTER_BRIGHTNESS = 0, - D3D12_VIDEO_PROCESS_FILTER_CONTRAST = 1, - D3D12_VIDEO_PROCESS_FILTER_HUE = 2, - D3D12_VIDEO_PROCESS_FILTER_SATURATION = 3, - D3D12_VIDEO_PROCESS_FILTER_NOISE_REDUCTION = 4, - D3D12_VIDEO_PROCESS_FILTER_EDGE_ENHANCEMENT = 5, - D3D12_VIDEO_PROCESS_FILTER_ANAMORPHIC_SCALING = 6, - D3D12_VIDEO_PROCESS_FILTER_STEREO_ADJUSTMENT = 7, -} D3D12_VIDEO_PROCESS_FILTER; - -typedef enum D3D12_VIDEO_PROCESS_FILTER_FLAGS -{ - D3D12_VIDEO_PROCESS_FILTER_FLAG_NONE = 0x0, - D3D12_VIDEO_PROCESS_FILTER_FLAG_BRIGHTNESS = (1 << D3D12_VIDEO_PROCESS_FILTER_BRIGHTNESS), - D3D12_VIDEO_PROCESS_FILTER_FLAG_CONTRAST = (1 << D3D12_VIDEO_PROCESS_FILTER_CONTRAST), - D3D12_VIDEO_PROCESS_FILTER_FLAG_HUE = (1 << D3D12_VIDEO_PROCESS_FILTER_HUE), - D3D12_VIDEO_PROCESS_FILTER_FLAG_SATURATION = (1 << D3D12_VIDEO_PROCESS_FILTER_SATURATION), - D3D12_VIDEO_PROCESS_FILTER_FLAG_NOISE_REDUCTION = (1 << D3D12_VIDEO_PROCESS_FILTER_NOISE_REDUCTION), - D3D12_VIDEO_PROCESS_FILTER_FLAG_EDGE_ENHANCEMENT = (1 << D3D12_VIDEO_PROCESS_FILTER_EDGE_ENHANCEMENT), - D3D12_VIDEO_PROCESS_FILTER_FLAG_ANAMORPHIC_SCALING = (1 << D3D12_VIDEO_PROCESS_FILTER_ANAMORPHIC_SCALING), - D3D12_VIDEO_PROCESS_FILTER_FLAG_STEREO_ADJUSTMENT = (1 << D3D12_VIDEO_PROCESS_FILTER_STEREO_ADJUSTMENT), - -} D3D12_VIDEO_PROCESS_FILTER_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROCESS_FILTER_FLAGS )") - -typedef enum D3D12_VIDEO_PROCESS_DEINTERLACE_FLAGS -{ - D3D12_VIDEO_PROCESS_DEINTERLACE_FLAG_NONE = 0x0, - D3D12_VIDEO_PROCESS_DEINTERLACE_FLAG_BOB = 0x1, - D3D12_VIDEO_PROCESS_DEINTERLACE_FLAG_CUSTOM = 0x80000000, - -} D3D12_VIDEO_PROCESS_DEINTERLACE_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROCESS_DEINTERLACE_FLAGS )") - -typedef struct D3D12_VIDEO_PROCESS_ALPHA_BLENDING -{ - BOOL Enable; - FLOAT Alpha; -} D3D12_VIDEO_PROCESS_ALPHA_BLENDING; - -typedef struct D3D12_VIDEO_PROCESS_LUMA_KEY -{ - BOOL Enable; - FLOAT Lower; - FLOAT Upper; -} D3D12_VIDEO_PROCESS_LUMA_KEY; - -typedef struct D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC -{ - DXGI_FORMAT Format; - DXGI_COLOR_SPACE_TYPE ColorSpace; - DXGI_RATIONAL SourceAspectRatio; - DXGI_RATIONAL DestinationAspectRatio; - DXGI_RATIONAL FrameRate; - D3D12_VIDEO_SIZE_RANGE SourceSizeRange; - D3D12_VIDEO_SIZE_RANGE DestinationSizeRange; - BOOL EnableOrientation; - D3D12_VIDEO_PROCESS_FILTER_FLAGS FilterFlags; - D3D12_VIDEO_FRAME_STEREO_FORMAT StereoFormat; - D3D12_VIDEO_FIELD_TYPE FieldType; - D3D12_VIDEO_PROCESS_DEINTERLACE_FLAGS DeinterlaceMode; - BOOL EnableAlphaBlending; - D3D12_VIDEO_PROCESS_LUMA_KEY LumaKey; - UINT NumPastFrames; - UINT NumFutureFrames; - BOOL EnableAutoProcessing; -} D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC; - -typedef enum D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE -{ - D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE_OPAQUE = 0, - D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE_BACKGROUND = 1, - D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE_DESTINATION = 2, - D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE_SOURCE_STREAM = 3, -} D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE; - -typedef struct D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC -{ - DXGI_FORMAT Format; - DXGI_COLOR_SPACE_TYPE ColorSpace; - D3D12_VIDEO_PROCESS_ALPHA_FILL_MODE AlphaFillMode; - UINT AlphaFillModeSourceStreamIndex; - FLOAT BackgroundColor[4]; - DXGI_RATIONAL FrameRate; - BOOL EnableStereo; -} D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC; - -[uuid(0946B7C9-EBF6-4047-BB73-8683E27DBB1F), object, local, pointer_default(unique)] -interface ID3D12VideoDecoderHeap - : ID3D12Pageable -{ - D3D12_VIDEO_DECODER_HEAP_DESC GetDesc(); -} - -[uuid(1F052807-0B46-4ACC-8A89-364F793718A4), object, local, pointer_default(unique)] -interface ID3D12VideoDevice - : IUnknown -{ - HRESULT CheckFeatureSupport( - D3D12_FEATURE_VIDEO FeatureVideo, - [annotation("_Inout_updates_bytes_(FeatureSupportDataSize)")] void* pFeatureSupportData, - UINT FeatureSupportDataSize - ); - - HRESULT CreateVideoDecoder( - [annotation("_In_")] const D3D12_VIDEO_DECODER_DESC* pDesc, - [annotation("_In_")] REFIID riid, // Expected: IID_ID3D12VideoDecoder, - [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppVideoDecoder - ); - - HRESULT CreateVideoDecoderHeap( - [annotation("_In_")]const D3D12_VIDEO_DECODER_HEAP_DESC* pVideoDecoderHeapDesc, - [annotation("_In_")] REFIID riid, // Expected: IID_ID3D12VideoDecoderHeap, - [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppVideoDecoderHeap - ); - - HRESULT CreateVideoProcessor( - UINT NodeMask, - [annotation("_In_")] const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC* pOutputStreamDesc, - UINT NumInputStreamDescs, - [annotation("_In_reads_(NumInputStreamDescs)")]const D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *pInputStreamDescs, - [annotation("_In_")] REFIID riid, // Expected: IID_ID3D12VideoProcessor, - [out, iid_is(riid), annotation("_COM_Outptr_")] void **ppVideoProcessor - ); -} - -[uuid(C59B6BDC-7720-4074-A136-17A156037470), object, local, pointer_default(unique)] -interface ID3D12VideoDecoder - : ID3D12Pageable -{ - D3D12_VIDEO_DECODER_DESC GetDesc(); -} - -typedef enum D3D12_VIDEO_DECODE_TIER -{ - D3D12_VIDEO_DECODE_TIER_NOT_SUPPORTED = 0, - D3D12_VIDEO_DECODE_TIER_1 = 1, - D3D12_VIDEO_DECODE_TIER_2 = 2, - D3D12_VIDEO_DECODE_TIER_3 = 3, -} D3D12_VIDEO_DECODE_TIER; - -typedef enum D3D12_VIDEO_DECODE_SUPPORT_FLAGS -{ - D3D12_VIDEO_DECODE_SUPPORT_FLAG_NONE = 0x0, - D3D12_VIDEO_DECODE_SUPPORT_FLAG_SUPPORTED = 0x1, - -} D3D12_VIDEO_DECODE_SUPPORT_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_DECODE_SUPPORT_FLAGS )") - -typedef enum D3D12_VIDEO_DECODE_CONFIGURATION_FLAGS -{ - D3D12_VIDEO_DECODE_CONFIGURATION_FLAG_NONE = 0x0, - D3D12_VIDEO_DECODE_CONFIGURATION_FLAG_HEIGHT_ALIGNMENT_MULTIPLE_32_REQUIRED = 0x1, - D3D12_VIDEO_DECODE_CONFIGURATION_FLAG_POST_PROCESSING_SUPPORTED = 0x2, - D3D12_VIDEO_DECODE_CONFIGURATION_FLAG_REFERENCE_ONLY_ALLOCATIONS_REQUIRED = 0x4, - D3D12_VIDEO_DECODE_CONFIGURATION_FLAG_ALLOW_RESOLUTION_CHANGE_ON_NON_KEY_FRAME = 0x8, - -} D3D12_VIDEO_DECODE_CONFIGURATION_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_DECODE_CONFIGURATION_FLAGS )") - -typedef enum D3D12_VIDEO_DECODE_STATUS -{ - D3D12_VIDEO_DECODE_STATUS_OK = 0, - D3D12_VIDEO_DECODE_STATUS_CONTINUE = 1, - D3D12_VIDEO_DECODE_STATUS_CONTINUE_SKIP_DISPLAY = 2, - D3D12_VIDEO_DECODE_STATUS_RESTART = 3, - D3D12_VIDEO_DECODE_STATUS_RATE_EXCEEDED = 4, -} D3D12_VIDEO_DECODE_STATUS; - -typedef enum D3D12_VIDEO_DECODE_ARGUMENT_TYPE -{ - D3D12_VIDEO_DECODE_ARGUMENT_TYPE_PICTURE_PARAMETERS = 0, - D3D12_VIDEO_DECODE_ARGUMENT_TYPE_INVERSE_QUANTIZATION_MATRIX = 1, - D3D12_VIDEO_DECODE_ARGUMENT_TYPE_SLICE_CONTROL = 2, - D3D12_VIDEO_DECODE_ARGUMENT_TYPE_HUFFMAN_TABLE = 3, -} D3D12_VIDEO_DECODE_ARGUMENT_TYPE; - -typedef struct D3D12_FEATURE_DATA_VIDEO_DECODE_SUPPORT -{ - UINT NodeIndex; // input - D3D12_VIDEO_DECODE_CONFIGURATION Configuration; // input - UINT Width; // input - UINT Height; // input - DXGI_FORMAT DecodeFormat; // input - DXGI_RATIONAL FrameRate; // input - UINT BitRate; // input - D3D12_VIDEO_DECODE_SUPPORT_FLAGS SupportFlags; // output - D3D12_VIDEO_DECODE_CONFIGURATION_FLAGS ConfigurationFlags; // output - D3D12_VIDEO_DECODE_TIER DecodeTier; // output -} D3D12_FEATURE_DATA_VIDEO_DECODE_SUPPORT; - -typedef struct D3D12_FEATURE_DATA_VIDEO_DECODE_PROFILE_COUNT -{ - UINT NodeIndex; // input - UINT ProfileCount; // output -} D3D12_FEATURE_DATA_VIDEO_DECODE_PROFILE_COUNT; - -typedef struct D3D12_FEATURE_DATA_VIDEO_DECODE_PROFILES -{ - UINT NodeIndex; // input - UINT ProfileCount; // input - [annotation("_Field_size_full_(ProfileCount)")] GUID *pProfiles; // output. The list of supported profiles. The caller allocates storage for the profile list before calling CheckFeatureSupport. -} D3D12_FEATURE_DATA_VIDEO_DECODE_PROFILES; - -typedef struct D3D12_FEATURE_DATA_VIDEO_DECODE_FORMAT_COUNT -{ - UINT NodeIndex; // input - D3D12_VIDEO_DECODE_CONFIGURATION Configuration; // input - UINT FormatCount; // output -} D3D12_FEATURE_DATA_VIDEO_DECODE_FORMAT_COUNT; - -typedef struct D3D12_FEATURE_DATA_VIDEO_DECODE_FORMATS -{ - UINT NodeIndex; // input - D3D12_VIDEO_DECODE_CONFIGURATION Configuration; // input - UINT FormatCount; // input - [annotation("_Field_size_full_(FormatCount)")] DXGI_FORMAT *pOutputFormats; // output. The list of supported video formats. The caller allocates storage for the format list before calling CheckFeatureSupport. -} D3D12_FEATURE_DATA_VIDEO_DECODE_FORMATS; - -typedef struct D3D12_FEATURE_DATA_VIDEO_ARCHITECTURE -{ - BOOL IOCoherent; -} D3D12_FEATURE_DATA_VIDEO_ARCHITECTURE; - -typedef enum D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT -{ - D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_Y = 0, - D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_U = 1, - D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_V = 2, - - D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_R = 0, - D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_G = 1, - D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_B = 2, - - D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_A = 3, -} D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT; - -typedef enum D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAGS -{ - D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAG_NONE = 0x0, - - D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAG_Y = (1 << D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_Y), - D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAG_U = (1 << D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_U), - D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAG_V = (1 << D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_V), - - D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAG_R = (1 << D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_R), - D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAG_G = (1 << D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_G), - D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAG_B = (1 << D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_B), - - D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAG_A = (1 << D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_A), -} D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAGS )") - -typedef struct D3D12_FEATURE_DATA_VIDEO_DECODE_HISTOGRAM -{ - UINT NodeIndex; // in - GUID DecodeProfile; // in - UINT Width; // in - UINT Height; // in - DXGI_FORMAT DecodeFormat; // in - D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAGS Components; // out - UINT BinCount; // out - UINT CounterBitDepth; // out -} D3D12_FEATURE_DATA_VIDEO_DECODE_HISTOGRAM; - -typedef enum D3D12_VIDEO_DECODE_CONVERSION_SUPPORT_FLAGS -{ - D3D12_VIDEO_DECODE_CONVERSION_SUPPORT_FLAG_NONE = 0x0, - D3D12_VIDEO_DECODE_CONVERSION_SUPPORT_FLAG_SUPPORTED = 0x1, - -} D3D12_VIDEO_DECODE_CONVERSION_SUPPORT_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_DECODE_CONVERSION_SUPPORT_FLAGS )") - -typedef enum D3D12_VIDEO_SCALE_SUPPORT_FLAGS -{ - D3D12_VIDEO_SCALE_SUPPORT_FLAG_NONE = 0x0, - D3D12_VIDEO_SCALE_SUPPORT_FLAG_POW2_ONLY = 0x1, - D3D12_VIDEO_SCALE_SUPPORT_FLAG_EVEN_DIMENSIONS_ONLY = 0x2, - -} D3D12_VIDEO_SCALE_SUPPORT_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_SCALE_SUPPORT_FLAGS )") - -typedef struct D3D12_VIDEO_SCALE_SUPPORT -{ - D3D12_VIDEO_SIZE_RANGE OutputSizeRange; - D3D12_VIDEO_SCALE_SUPPORT_FLAGS Flags; -} D3D12_VIDEO_SCALE_SUPPORT; - -typedef struct D3D12_FEATURE_DATA_VIDEO_DECODE_CONVERSION_SUPPORT -{ - UINT NodeIndex; // input - D3D12_VIDEO_DECODE_CONFIGURATION Configuration; // input - D3D12_VIDEO_SAMPLE DecodeSample; // input - D3D12_VIDEO_FORMAT OutputFormat; // input - DXGI_RATIONAL FrameRate; // input - UINT BitRate; // input - D3D12_VIDEO_DECODE_CONVERSION_SUPPORT_FLAGS SupportFlags; // output - D3D12_VIDEO_SCALE_SUPPORT ScaleSupport; // output -} D3D12_FEATURE_DATA_VIDEO_DECODE_CONVERSION_SUPPORT; - -typedef struct D3D12_FEATURE_DATA_VIDEO_DECODER_HEAP_SIZE -{ - D3D12_VIDEO_DECODER_HEAP_DESC VideoDecoderHeapDesc; // input - UINT64 MemoryPoolL0Size; // output - UINT64 MemoryPoolL1Size; // output -} D3D12_FEATURE_DATA_VIDEO_DECODER_HEAP_SIZE; - -typedef struct D3D12_FEATURE_DATA_VIDEO_PROCESSOR_SIZE -{ - UINT NodeMask; - const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC* pOutputStreamDesc; // input - UINT NumInputStreamDescs; // input - const D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *pInputStreamDescs; // input - UINT64 MemoryPoolL0Size; // output - UINT64 MemoryPoolL1Size; // output -} D3D12_FEATURE_DATA_VIDEO_PROCESSOR_SIZE; - -typedef struct D3D12_QUERY_DATA_VIDEO_DECODE_STATISTICS -{ - UINT64 Status; // see D3D12_VIDEO_DECODE_STATUS - UINT64 NumMacroblocksAffected; - DXGI_RATIONAL FrameRate; - UINT BitRate; -} D3D12_QUERY_DATA_VIDEO_DECODE_STATISTICS; - -typedef struct D3D12_VIDEO_DECODE_FRAME_ARGUMENT -{ - D3D12_VIDEO_DECODE_ARGUMENT_TYPE Type; - UINT Size; - [annotation("_Field_size_bytes_full_(Size)")] void *pData; -} D3D12_VIDEO_DECODE_FRAME_ARGUMENT; - -typedef struct D3D12_VIDEO_DECODE_REFERENCE_FRAMES -{ - UINT NumTexture2Ds; - [annotation("_Field_size_full_(NumTexture2Ds)")] ID3D12Resource** ppTexture2Ds; - [annotation("_Field_size_full_(NumTexture2Ds)")] UINT* pSubresources; - [annotation("_Field_size_full_opt_(NumTexture2Ds)")] ID3D12VideoDecoderHeap** ppHeaps; // If null, assume single decoder heap from input args. -} D3D12_VIDEO_DECODE_REFERENCE_FRAMES; - -typedef struct D3D12_VIDEO_DECODE_COMPRESSED_BITSTREAM -{ - ID3D12Resource* pBuffer; - UINT64 Offset; - UINT64 Size; -} D3D12_VIDEO_DECODE_COMPRESSED_BITSTREAM; - -typedef struct D3D12_VIDEO_DECODE_CONVERSION_ARGUMENTS -{ - BOOL Enable; - ID3D12Resource* pReferenceTexture2D; - UINT ReferenceSubresource; - DXGI_COLOR_SPACE_TYPE OutputColorSpace; - DXGI_COLOR_SPACE_TYPE DecodeColorSpace; -} D3D12_VIDEO_DECODE_CONVERSION_ARGUMENTS; - -typedef struct D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS -{ - UINT NumFrameArguments; - D3D12_VIDEO_DECODE_FRAME_ARGUMENT FrameArguments[D3D12_VIDEO_DECODE_MAX_ARGUMENTS]; - D3D12_VIDEO_DECODE_REFERENCE_FRAMES ReferenceFrames; - D3D12_VIDEO_DECODE_COMPRESSED_BITSTREAM CompressedBitstream; - ID3D12VideoDecoderHeap *pHeap; -} D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS; - -typedef struct D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS -{ - ID3D12Resource* pOutputTexture2D; - UINT OutputSubresource; - D3D12_VIDEO_DECODE_CONVERSION_ARGUMENTS ConversionArguments; -} D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS; - -[uuid(304FDB32-BEDE-410A-8545-943AC6A46138), object, local, pointer_default(unique)] -interface ID3D12VideoProcessor - : ID3D12Pageable -{ - UINT GetNodeMask(); - UINT GetNumInputStreamDescs(); - HRESULT GetInputStreamDescs(UINT NumInputStreamDescs, [annotation("_Out_writes_(NumInputStreamDescs)")] D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *pInputStreamDescs); - D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC GetOutputStreamDesc(); -} - -typedef enum D3D12_VIDEO_PROCESS_FEATURE_FLAGS -{ - D3D12_VIDEO_PROCESS_FEATURE_FLAG_NONE = 0x0, - D3D12_VIDEO_PROCESS_FEATURE_FLAG_ALPHA_FILL = 0x1, - D3D12_VIDEO_PROCESS_FEATURE_FLAG_LUMA_KEY = 0x2, - D3D12_VIDEO_PROCESS_FEATURE_FLAG_STEREO = 0x4, - D3D12_VIDEO_PROCESS_FEATURE_FLAG_ROTATION = 0x8, - D3D12_VIDEO_PROCESS_FEATURE_FLAG_FLIP = 0x10, - D3D12_VIDEO_PROCESS_FEATURE_FLAG_ALPHA_BLENDING = 0x20, - D3D12_VIDEO_PROCESS_FEATURE_FLAG_PIXEL_ASPECT_RATIO = 0x40, - -} D3D12_VIDEO_PROCESS_FEATURE_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROCESS_FEATURE_FLAGS )") - -typedef enum D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAGS -{ - D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAG_NONE = 0x0, - D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAG_DENOISE = 0x01, - D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAG_DERINGING = 0x02, - D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAG_EDGE_ENHANCEMENT = 0x04, - D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAG_COLOR_CORRECTION = 0x08, - D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAG_FLESH_TONE_MAPPING = 0x10, - D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAG_IMAGE_STABILIZATION = 0x20, - D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAG_SUPER_RESOLUTION = 0x40, - D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAG_ANAMORPHIC_SCALING = 0x80, - D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAG_CUSTOM = 0x80000000, - -} D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAGS )") - -typedef enum D3D12_VIDEO_PROCESS_ORIENTATION -{ - D3D12_VIDEO_PROCESS_ORIENTATION_DEFAULT = 0, - D3D12_VIDEO_PROCESS_ORIENTATION_FLIP_HORIZONTAL = 1, - D3D12_VIDEO_PROCESS_ORIENTATION_CLOCKWISE_90 = 2, - D3D12_VIDEO_PROCESS_ORIENTATION_CLOCKWISE_90_FLIP_HORIZONTAL = 3, - D3D12_VIDEO_PROCESS_ORIENTATION_CLOCKWISE_180 = 4, - D3D12_VIDEO_PROCESS_ORIENTATION_FLIP_VERTICAL = 5, - D3D12_VIDEO_PROCESS_ORIENTATION_CLOCKWISE_270 = 6, - D3D12_VIDEO_PROCESS_ORIENTATION_CLOCKWISE_270_FLIP_HORIZONTAL = 7, -} D3D12_VIDEO_PROCESS_ORIENTATION; - -typedef enum D3D12_VIDEO_PROCESS_INPUT_STREAM_FLAGS -{ - D3D12_VIDEO_PROCESS_INPUT_STREAM_FLAG_NONE = 0x0, - D3D12_VIDEO_PROCESS_INPUT_STREAM_FLAG_FRAME_DISCONTINUITY = 0x1, - D3D12_VIDEO_PROCESS_INPUT_STREAM_FLAG_FRAME_REPEAT = 0x2, - -} D3D12_VIDEO_PROCESS_INPUT_STREAM_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROCESS_INPUT_STREAM_FLAGS )") - -typedef struct D3D12_VIDEO_PROCESS_FILTER_RANGE -{ - INT Minimum; - INT Maximum; - INT Default; - FLOAT Multiplier; -} D3D12_VIDEO_PROCESS_FILTER_RANGE; - -typedef enum D3D12_VIDEO_PROCESS_SUPPORT_FLAGS -{ - D3D12_VIDEO_PROCESS_SUPPORT_FLAG_NONE = 0x0, - D3D12_VIDEO_PROCESS_SUPPORT_FLAG_SUPPORTED = 0x1, - -} D3D12_VIDEO_PROCESS_SUPPORT_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROCESS_SUPPORT_FLAGS )") - -typedef struct D3D12_FEATURE_DATA_VIDEO_PROCESS_SUPPORT -{ - UINT NodeIndex; // input - D3D12_VIDEO_SAMPLE InputSample; // input - D3D12_VIDEO_FIELD_TYPE InputFieldType; // input - D3D12_VIDEO_FRAME_STEREO_FORMAT InputStereoFormat; // input - DXGI_RATIONAL InputFrameRate; // input - D3D12_VIDEO_FORMAT OutputFormat; // input - D3D12_VIDEO_FRAME_STEREO_FORMAT OutputStereoFormat; // input - DXGI_RATIONAL OutputFrameRate; // input - D3D12_VIDEO_PROCESS_SUPPORT_FLAGS SupportFlags; // output - D3D12_VIDEO_SCALE_SUPPORT ScaleSupport; // output - D3D12_VIDEO_PROCESS_FEATURE_FLAGS FeatureSupport; // output - D3D12_VIDEO_PROCESS_DEINTERLACE_FLAGS DeinterlaceSupport; // output - D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAGS AutoProcessingSupport; // output - D3D12_VIDEO_PROCESS_FILTER_FLAGS FilterSupport; // output - D3D12_VIDEO_PROCESS_FILTER_RANGE FilterRangeSupport[D3D12_VIDEO_PROCESS_MAX_FILTERS]; // output -} D3D12_FEATURE_DATA_VIDEO_PROCESS_SUPPORT; - -typedef struct D3D12_FEATURE_DATA_VIDEO_PROCESS_MAX_INPUT_STREAMS -{ - UINT NodeIndex; // input - UINT MaxInputStreams; // output -} D3D12_FEATURE_DATA_VIDEO_PROCESS_MAX_INPUT_STREAMS; - -typedef struct D3D12_FEATURE_DATA_VIDEO_PROCESS_REFERENCE_INFO -{ - UINT NodeIndex; // input - D3D12_VIDEO_PROCESS_DEINTERLACE_FLAGS DeinterlaceMode; // input - D3D12_VIDEO_PROCESS_FILTER_FLAGS Filters; // input - D3D12_VIDEO_PROCESS_FEATURE_FLAGS FeatureSupport; // input - DXGI_RATIONAL InputFrameRate; // input - DXGI_RATIONAL OutputFrameRate; // input - BOOL EnableAutoProcessing; // input - UINT PastFrames; // output - UINT FutureFrames; // output -} D3D12_FEATURE_DATA_VIDEO_PROCESS_REFERENCE_INFO; - -typedef struct D3D12_VIDEO_PROCESS_REFERENCE_SET -{ - UINT NumPastFrames; - ID3D12Resource **ppPastFrames; - UINT *pPastSubresources; - UINT NumFutureFrames; - ID3D12Resource **ppFutureFrames; - UINT *pFutureSubresources; -} D3D12_VIDEO_PROCESS_REFERENCE_SET; - -typedef struct D3D12_VIDEO_PROCESS_TRANSFORM -{ - D3D12_RECT SourceRectangle; - D3D12_RECT DestinationRectangle; - D3D12_VIDEO_PROCESS_ORIENTATION Orientation; -} D3D12_VIDEO_PROCESS_TRANSFORM; - -typedef struct D3D12_VIDEO_PROCESS_INPUT_STREAM_RATE -{ - UINT OutputIndex; - UINT InputFrameOrField; -} D3D12_VIDEO_PROCESS_INPUT_STREAM_RATE; - -typedef struct D3D12_VIDEO_PROCESS_INPUT_STREAM -{ - ID3D12Resource *pTexture2D; - UINT Subresource; - D3D12_VIDEO_PROCESS_REFERENCE_SET ReferenceSet; -} D3D12_VIDEO_PROCESS_INPUT_STREAM; - -typedef struct D3D12_VIDEO_PROCESS_INPUT_STREAM_ARGUMENTS -{ - D3D12_VIDEO_PROCESS_INPUT_STREAM InputStream[D3D12_VIDEO_PROCESS_STEREO_VIEWS]; - D3D12_VIDEO_PROCESS_TRANSFORM Transform; - D3D12_VIDEO_PROCESS_INPUT_STREAM_FLAGS Flags; - D3D12_VIDEO_PROCESS_INPUT_STREAM_RATE RateInfo; - INT FilterLevels[D3D12_VIDEO_PROCESS_MAX_FILTERS]; - D3D12_VIDEO_PROCESS_ALPHA_BLENDING AlphaBlending; -} D3D12_VIDEO_PROCESS_INPUT_STREAM_ARGUMENTS; - -typedef struct D3D12_VIDEO_PROCESS_OUTPUT_STREAM -{ - ID3D12Resource* pTexture2D; - UINT Subresource; -} D3D12_VIDEO_PROCESS_OUTPUT_STREAM; - -typedef struct D3D12_VIDEO_PROCESS_OUTPUT_STREAM_ARGUMENTS -{ - D3D12_VIDEO_PROCESS_OUTPUT_STREAM OutputStream[D3D12_VIDEO_PROCESS_STEREO_VIEWS]; - D3D12_RECT TargetRectangle; -} D3D12_VIDEO_PROCESS_OUTPUT_STREAM_ARGUMENTS; - -[uuid(3B60536E-AD29-4E64-A269-F853837E5E53), object, local, pointer_default(unique)] -interface ID3D12VideoDecodeCommandList - : ID3D12CommandList -{ - HRESULT Close(); - - HRESULT Reset( - [annotation("_In_")] ID3D12CommandAllocator* pAllocator - ); - - void ClearState(); - - void ResourceBarrier( - [annotation("_In_")] UINT NumBarriers, - [annotation("_In_reads_(NumBarriers)")] const D3D12_RESOURCE_BARRIER* pBarriers - ); - - void DiscardResource( - [annotation("_In_")] ID3D12Resource* pResource, - [annotation("_In_opt_")] const D3D12_DISCARD_REGION* pRegion - ); - - void BeginQuery( - [annotation("_In_")] ID3D12QueryHeap* pQueryHeap, - [annotation("_In_")] D3D12_QUERY_TYPE Type, - [annotation("_In_")] UINT Index - ); - - void EndQuery( - [annotation("_In_")] ID3D12QueryHeap* pQueryHeap, - [annotation("_In_")] D3D12_QUERY_TYPE Type, - [annotation("_In_")] UINT Index - ); - - void ResolveQueryData( - [annotation("_In_")] ID3D12QueryHeap* pQueryHeap, - [annotation("_In_")] D3D12_QUERY_TYPE Type, - [annotation("_In_")] UINT StartIndex, - [annotation("_In_")] UINT NumQueries, - [annotation("_In_")] ID3D12Resource* pDestinationBuffer, - [annotation("_In_")] UINT64 AlignedDestinationBufferOffset - ); - - void SetPredication( - [annotation("_In_opt_")] ID3D12Resource* pBuffer, - [annotation("_In_")] UINT64 AlignedBufferOffset, - [annotation("_In_")] D3D12_PREDICATION_OP Operation - ); - - void SetMarker( - UINT Metadata, - [annotation("_In_reads_bytes_opt_(Size)")] const void* pData, - UINT Size); - - void BeginEvent( - UINT Metadata, - [annotation("_In_reads_bytes_opt_(Size)")] const void* pData, - UINT Size); - - void EndEvent(); - - void DecodeFrame( - [annotation("_In_")] ID3D12VideoDecoder* pDecoder, - [annotation("_In_")] const D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS *pOutputArguments, - [annotation("_In_")] const D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS *pInputArguments - ); - - void WriteBufferImmediate( - UINT Count, - [annotation("_In_reads_(Count)")] const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams, - [annotation("_In_reads_opt_(Count)")] const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes - ); -} - -[uuid(AEB2543A-167F-4682-ACC8-D159ED4A6209), object, local, pointer_default(unique)] -interface ID3D12VideoProcessCommandList - : ID3D12CommandList -{ - HRESULT Close(); - - HRESULT Reset( - [annotation("_In_")] ID3D12CommandAllocator* pAllocator - ); - - void ClearState(); - - void ResourceBarrier( - [annotation("_In_")] UINT NumBarriers, - [annotation("_In_reads_(NumBarriers)")] const D3D12_RESOURCE_BARRIER* pBarriers - ); - - void DiscardResource( - [annotation("_In_")] ID3D12Resource* pResource, - [annotation("_In_opt_")] const D3D12_DISCARD_REGION* pRegion - ); - - void BeginQuery( - [annotation("_In_")] ID3D12QueryHeap* pQueryHeap, - [annotation("_In_")] D3D12_QUERY_TYPE Type, - [annotation("_In_")] UINT Index - ); - - void EndQuery( - [annotation("_In_")] ID3D12QueryHeap* pQueryHeap, - [annotation("_In_")] D3D12_QUERY_TYPE Type, - [annotation("_In_")] UINT Index - ); - - void ResolveQueryData( - [annotation("_In_")] ID3D12QueryHeap* pQueryHeap, - [annotation("_In_")] D3D12_QUERY_TYPE Type, - [annotation("_In_")] UINT StartIndex, - [annotation("_In_")] UINT NumQueries, - [annotation("_In_")] ID3D12Resource* pDestinationBuffer, - [annotation("_In_")] UINT64 AlignedDestinationBufferOffset - ); - - void SetPredication( - [annotation("_In_opt_")] ID3D12Resource* pBuffer, - [annotation("_In_")] UINT64 AlignedBufferOffset, - [annotation("_In_")] D3D12_PREDICATION_OP Operation - ); - - void SetMarker( - UINT Metadata, - [annotation("_In_reads_bytes_opt_(Size)")] const void* pData, - UINT Size); - - void BeginEvent( - UINT Metadata, - [annotation("_In_reads_bytes_opt_(Size)")] const void* pData, - UINT Size); - - void EndEvent(); - - void ProcessFrames( - [annotation("_In_")] ID3D12VideoProcessor* pVideoProcessor, - [annotation("_In_")] const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_ARGUMENTS *pOutputArguments, - UINT NumInputStreams, - [annotation("_In_reads_(NumInputStreams)")] const D3D12_VIDEO_PROCESS_INPUT_STREAM_ARGUMENTS *pInputArguments - ); - - void WriteBufferImmediate( - UINT Count, - [annotation("_In_reads_(Count)")] const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams, - [annotation("_In_reads_opt_(Count)")] const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes - ); -} - -typedef struct D3D12_VIDEO_DECODE_OUTPUT_HISTOGRAM -{ - UINT64 Offset; - ID3D12Resource* pBuffer; -} D3D12_VIDEO_DECODE_OUTPUT_HISTOGRAM; - -typedef struct D3D12_VIDEO_DECODE_CONVERSION_ARGUMENTS1 -{ - BOOL Enable; - ID3D12Resource* pReferenceTexture2D; - UINT ReferenceSubresource; - DXGI_COLOR_SPACE_TYPE OutputColorSpace; - DXGI_COLOR_SPACE_TYPE DecodeColorSpace; - UINT OutputWidth; - UINT OutputHeight; -} D3D12_VIDEO_DECODE_CONVERSION_ARGUMENTS1; - -typedef struct D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS1 -{ - ID3D12Resource* pOutputTexture2D; - UINT OutputSubresource; - D3D12_VIDEO_DECODE_CONVERSION_ARGUMENTS1 ConversionArguments; - D3D12_VIDEO_DECODE_OUTPUT_HISTOGRAM Histograms[D3D12_VIDEO_DECODE_MAX_HISTOGRAM_COMPONENTS]; -} D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS1; - -[uuid(D52F011B-B56E-453C-A05A-A7F311C8F472), object, local, pointer_default(unique)] -interface ID3D12VideoDecodeCommandList1 - : ID3D12VideoDecodeCommandList -{ - void DecodeFrame1( - [annotation("_In_")] ID3D12VideoDecoder* pDecoder, - [annotation("_In_")] const D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS1 *pOutputArguments, - [annotation("_In_")] const D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS *pInputArguments - ); -} - -typedef struct D3D12_VIDEO_PROCESS_INPUT_STREAM_ARGUMENTS1 -{ - D3D12_VIDEO_PROCESS_INPUT_STREAM InputStream[D3D12_VIDEO_PROCESS_STEREO_VIEWS]; - D3D12_VIDEO_PROCESS_TRANSFORM Transform; - D3D12_VIDEO_PROCESS_INPUT_STREAM_FLAGS Flags; - D3D12_VIDEO_PROCESS_INPUT_STREAM_RATE RateInfo; - INT FilterLevels[D3D12_VIDEO_PROCESS_MAX_FILTERS]; - D3D12_VIDEO_PROCESS_ALPHA_BLENDING AlphaBlending; - D3D12_VIDEO_FIELD_TYPE FieldType; -} D3D12_VIDEO_PROCESS_INPUT_STREAM_ARGUMENTS1; - -[uuid(542C5C4D-7596-434F-8C93-4EFA6766F267), object, local, pointer_default(unique)] -interface ID3D12VideoProcessCommandList1 : ID3D12VideoProcessCommandList -{ - void ProcessFrames1( - [annotation("_In_")] ID3D12VideoProcessor* pVideoProcessor, - [annotation("_In_")] const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_ARGUMENTS *pOutputArguments, - UINT NumInputStreams, - [annotation("_In_reads_(NumInputStreams)")] const D3D12_VIDEO_PROCESS_INPUT_STREAM_ARGUMENTS1 *pInputArguments - ); -} - -typedef enum D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE -{ - D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_8X8 = 0, - D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_16X16 = 1, -} D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE; - -typedef enum D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_FLAGS -{ - D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_FLAG_NONE = 0, - D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_FLAG_8X8 = (1 << D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_8X8), - D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_FLAG_16X16 = (1 << D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_16X16), - -} D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_FLAGS; -cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_FLAGS )" ) - -typedef enum D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION -{ - D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION_QUARTER_PEL = 0, -} D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION; - -typedef enum D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION_FLAGS -{ - D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION_FLAG_NONE = 0, - D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION_FLAG_QUARTER_PEL = (1 << D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION_QUARTER_PEL), - -} D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION_FLAGS; -cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION_FLAGS )" ) - -// D3D12_FEATURE_VIDEO_FEATURE_AREA_SUPPORT -typedef struct D3D12_FEATURE_DATA_VIDEO_FEATURE_AREA_SUPPORT -{ - UINT NodeIndex; // input - BOOL VideoDecodeSupport; // output - BOOL VideoProcessSupport; // output - BOOL VideoEncodeSupport; // output -} D3D12_FEATURE_DATA_VIDEO_FEATURE_AREA_SUPPORT; - -// D3D12_FEATURE_VIDEO_MOTION_ESTIMATOR -typedef struct D3D12_FEATURE_DATA_VIDEO_MOTION_ESTIMATOR -{ - UINT NodeIndex; // input - DXGI_FORMAT InputFormat; // input - D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_FLAGS BlockSizeFlags; // output - D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION_FLAGS PrecisionFlags; // output - D3D12_VIDEO_SIZE_RANGE SizeRange; // output -} D3D12_FEATURE_DATA_VIDEO_MOTION_ESTIMATOR; - -// D3D12_FEATURE_VIDEO_MOTION_ESTIMATOR_SIZE -typedef struct D3D12_FEATURE_DATA_VIDEO_MOTION_ESTIMATOR_SIZE -{ - UINT NodeIndex; // input - DXGI_FORMAT InputFormat; // input - D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE BlockSize; // input - D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION Precision; // input - D3D12_VIDEO_SIZE_RANGE SizeRange; // input - BOOL Protected; // input - UINT64 MotionVectorHeapMemoryPoolL0Size; // output - UINT64 MotionVectorHeapMemoryPoolL1Size; // output - UINT64 MotionEstimatorMemoryPoolL0Size; // output - UINT64 MotionEstimatorMemoryPoolL1Size; // output -} D3D12_FEATURE_DATA_VIDEO_MOTION_ESTIMATOR_SIZE; - -typedef struct D3D12_VIDEO_MOTION_ESTIMATOR_DESC -{ - UINT NodeMask; - DXGI_FORMAT InputFormat; - D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE BlockSize; - D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION Precision; - D3D12_VIDEO_SIZE_RANGE SizeRange; - -} D3D12_VIDEO_MOTION_ESTIMATOR_DESC; - -[uuid(33FDAE0E-098B-428F-87BB-34B695DE08F8), object, local, pointer_default(unique)] -interface ID3D12VideoMotionEstimator - : ID3D12Pageable -{ - D3D12_VIDEO_MOTION_ESTIMATOR_DESC GetDesc(); - - HRESULT GetProtectedResourceSession( - [in] REFIID riid, // Expected: ID3D12ProtectedResourceSession - [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppProtectedSession); -} - -typedef struct D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC -{ - UINT NodeMask; - DXGI_FORMAT InputFormat; - D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE BlockSize; - D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION Precision; - D3D12_VIDEO_SIZE_RANGE SizeRange; - -} D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC; - -[uuid(5BE17987-743A-4061-834B-23D22DAEA505), object, local, pointer_default(unique)] -interface ID3D12VideoMotionVectorHeap - : ID3D12Pageable -{ - D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC GetDesc(); - - HRESULT GetProtectedResourceSession( - [in] REFIID riid, // Expected: ID3D12ProtectedResourceSession - [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppProtectedSession); -} - -[uuid(981611AD-A144-4C83-9890-F30E26D658AB), object, local, pointer_default(unique)] -interface ID3D12VideoDevice1 - : ID3D12VideoDevice -{ - HRESULT CreateVideoMotionEstimator( - [annotation("_In_")] const D3D12_VIDEO_MOTION_ESTIMATOR_DESC* pDesc, - [annotation("_In_opt_")] ID3D12ProtectedResourceSession *pProtectedResourceSession, - [annotation("_In_")] REFIID riid, // Expected: IID_ID3D12VideoMotionEstimator, - [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppVideoMotionEstimator - ); - - HRESULT CreateVideoMotionVectorHeap( - [annotation("_In_")] const D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC* pDesc, - [annotation("_In_opt_")] ID3D12ProtectedResourceSession *pProtectedResourceSession, - [annotation("_In_")] REFIID riid, // Expected: IID_ID3D12VideoMotionVectorHeap, - [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppVideoMotionVectorHeap - ); -} - -typedef struct D3D12_RESOURCE_COORDINATE -{ - // Coordinate values below index pixels. - UINT64 X; // Used for buffer, 1D, 2D, 3D - UINT Y; // Used for 2D, 3D - UINT Z; // Used for 3D - UINT SubresourceIndex; // indexes into mips, arrays, and planes. Used for 1D, 2D, 3D -} D3D12_RESOURCE_COORDINATE; - -typedef struct D3D12_VIDEO_MOTION_ESTIMATOR_OUTPUT -{ - ID3D12VideoMotionVectorHeap* pMotionVectorHeap; -} D3D12_VIDEO_MOTION_ESTIMATOR_OUTPUT; - -typedef struct D3D12_VIDEO_MOTION_ESTIMATOR_INPUT -{ - ID3D12Resource* pInputTexture2D; - UINT InputSubresourceIndex; - ID3D12Resource* pReferenceTexture2D; - UINT ReferenceSubresourceIndex; - ID3D12VideoMotionVectorHeap* pHintMotionVectorHeap; -} D3D12_VIDEO_MOTION_ESTIMATOR_INPUT; - -typedef struct D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_OUTPUT -{ - ID3D12Resource* pMotionVectorTexture2D; - D3D12_RESOURCE_COORDINATE MotionVectorCoordinate; -} D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_OUTPUT; - -typedef struct D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_INPUT -{ - ID3D12VideoMotionVectorHeap* pMotionVectorHeap; - UINT PixelWidth; - UINT PixelHeight; -} D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_INPUT; - -[uuid(8455293A-0CBD-4831-9B39-FBDBAB724723), object, local, pointer_default(unique)] -interface ID3D12VideoEncodeCommandList - : ID3D12CommandList -{ - HRESULT Close(); - - HRESULT Reset( - [annotation("_In_")] ID3D12CommandAllocator* pAllocator - ); - - void ClearState(); - - void ResourceBarrier( - [annotation("_In_")] UINT NumBarriers, - [annotation("_In_reads_(NumBarriers)")] const D3D12_RESOURCE_BARRIER* pBarriers - ); - - void DiscardResource( - [annotation("_In_")] ID3D12Resource* pResource, - [annotation("_In_opt_")] const D3D12_DISCARD_REGION* pRegion - ); - - void BeginQuery( - [annotation("_In_")] ID3D12QueryHeap* pQueryHeap, - [annotation("_In_")] D3D12_QUERY_TYPE Type, - [annotation("_In_")] UINT Index - ); - - void EndQuery( - [annotation("_In_")] ID3D12QueryHeap* pQueryHeap, - [annotation("_In_")] D3D12_QUERY_TYPE Type, - [annotation("_In_")] UINT Index - ); - - void ResolveQueryData( - [annotation("_In_")] ID3D12QueryHeap* pQueryHeap, - [annotation("_In_")] D3D12_QUERY_TYPE Type, - [annotation("_In_")] UINT StartIndex, - [annotation("_In_")] UINT NumQueries, - [annotation("_In_")] ID3D12Resource* pDestinationBuffer, - [annotation("_In_")] UINT64 AlignedDestinationBufferOffset - ); - - void SetPredication( - [annotation("_In_opt_")] ID3D12Resource* pBuffer, - [annotation("_In_")] UINT64 AlignedBufferOffset, - [annotation("_In_")] D3D12_PREDICATION_OP Operation - ); - - void SetMarker( - UINT Metadata, - [annotation("_In_reads_bytes_opt_(Size)")] const void* pData, - UINT Size); - - void BeginEvent( - UINT Metadata, - [annotation("_In_reads_bytes_opt_(Size)")] const void* pData, - UINT Size); - - void EndEvent(); - - void EstimateMotion( - [annotation("_In_")] ID3D12VideoMotionEstimator* pMotionEstimator, - [annotation("_In_")] const D3D12_VIDEO_MOTION_ESTIMATOR_OUTPUT* pOutputArguments, - [annotation("_In_")] const D3D12_VIDEO_MOTION_ESTIMATOR_INPUT* pInputArguments - ); - - void ResolveMotionVectorHeap( - const D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_OUTPUT* pOutputArguments, - const D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_INPUT* pInputArguments - ); - - void WriteBufferImmediate( - UINT Count, - [annotation("_In_reads_(Count)")] const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams, - [annotation("_In_reads_opt_(Count)")] const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes - ); - - void SetProtectedResourceSession( - [annotation("_In_opt_")]ID3D12ProtectedResourceSession *pProtectedResourceSession - ); -} - -typedef enum D3D12_VIDEO_PROTECTED_RESOURCE_SUPPORT_FLAGS -{ - D3D12_VIDEO_PROTECTED_RESOURCE_SUPPORT_FLAG_NONE = 0x0, - D3D12_VIDEO_PROTECTED_RESOURCE_SUPPORT_FLAG_SUPPORTED = 0x1, - -} D3D12_VIDEO_PROTECTED_RESOURCE_SUPPORT_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROTECTED_RESOURCE_SUPPORT_FLAGS )") - -// D3D12_FEATURE_VIDEO_DECODE_PROTECTED_RESOURCES -typedef struct D3D12_FEATURE_DATA_VIDEO_DECODE_PROTECTED_RESOURCES -{ - UINT NodeIndex; // input - D3D12_VIDEO_DECODE_CONFIGURATION Configuration; // input - D3D12_VIDEO_PROTECTED_RESOURCE_SUPPORT_FLAGS SupportFlags; // output -} D3D12_FEATURE_DATA_VIDEO_DECODE_PROTECTED_RESOURCES; - -// D3D12_FEATURE_VIDEO_PROCESS_PROTECTED_RESOURCES -typedef struct D3D12_FEATURE_DATA_VIDEO_PROCESS_PROTECTED_RESOURCES -{ - UINT NodeIndex; // input - D3D12_VIDEO_PROTECTED_RESOURCE_SUPPORT_FLAGS SupportFlags; // output -} D3D12_FEATURE_DATA_VIDEO_PROCESS_PROTECTED_RESOURCES; - -// D3D12_FEATURE_VIDEO_MOTION_ESTIMATOR_PROTECTED_RESOURCES -typedef struct D3D12_FEATURE_DATA_VIDEO_MOTION_ESTIMATOR_PROTECTED_RESOURCES -{ - UINT NodeIndex; // input - D3D12_VIDEO_PROTECTED_RESOURCE_SUPPORT_FLAGS SupportFlags; // output -} D3D12_FEATURE_DATA_VIDEO_MOTION_ESTIMATOR_PROTECTED_RESOURCES; - -//D3D12_FEATURE_VIDEO_DECODER_HEAP_SIZE1 -typedef struct D3D12_FEATURE_DATA_VIDEO_DECODER_HEAP_SIZE1 -{ - D3D12_VIDEO_DECODER_HEAP_DESC VideoDecoderHeapDesc; // input - BOOL Protected; // input - UINT64 MemoryPoolL0Size; // output - UINT64 MemoryPoolL1Size; // output -} D3D12_FEATURE_DATA_VIDEO_DECODER_HEAP_SIZE1; - -// D3D12_FEATURE_VIDEO_PROCESSOR_SIZE1 -typedef struct D3D12_FEATURE_DATA_VIDEO_PROCESSOR_SIZE1 -{ - UINT NodeMask; - const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC* pOutputStreamDesc; // input - UINT NumInputStreamDescs; // input - const D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *pInputStreamDescs; // input - BOOL Protected; // input - UINT64 MemoryPoolL0Size; // output - UINT64 MemoryPoolL1Size; // output -} D3D12_FEATURE_DATA_VIDEO_PROCESSOR_SIZE1; - -typedef enum D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE -{ - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE_CREATION = 0, - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE_INITIALIZATION = 1, - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE_EXECUTION = 2, - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE_CAPS_INPUT = 3, - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE_CAPS_OUTPUT = 4, - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE_DEVICE_EXECUTE_INPUT = 5, - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE_DEVICE_EXECUTE_OUTPUT = 6, -} D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE; - -typedef enum D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE -{ - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_UINT8 = 0, - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_UINT16 = 1, - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_UINT32 = 2, - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_UINT64 = 3, - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_SINT8 = 4, - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_SINT16 = 5, - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_SINT32 = 6, - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_SINT64 = 7, - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_FLOAT = 8, - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_DOUBLE = 9, - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE_RESOURCE = 10, -} D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE; - -typedef enum D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_FLAGS -{ - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_FLAG_NONE = 0x00000000, - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_FLAG_READ = 0x00000001, - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_FLAG_WRITE = 0x00000002 -} D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_FLAGS; - -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_FLAGS )") - -typedef struct D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMAND_COUNT -{ - UINT NodeIndex; // in - UINT CommandCount; // out -} D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMAND_COUNT; - -typedef struct D3D12_VIDEO_EXTENSION_COMMAND_INFO -{ - GUID CommandId; - LPCWSTR Name; - D3D12_COMMAND_LIST_SUPPORT_FLAGS CommandListSupportFlags; -} D3D12_VIDEO_EXTENSION_COMMAND_INFO; - -typedef struct D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMANDS -{ - UINT NodeIndex; - UINT CommandCount; - [annotation("_Field_size_full_(CommandCount)")] D3D12_VIDEO_EXTENSION_COMMAND_INFO* pCommandInfos; -} D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMANDS; - -typedef struct D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMAND_PARAMETER_COUNT -{ - GUID CommandId; // in - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE Stage; // in - UINT ParameterCount; // out - UINT ParameterPacking; // out -} D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMAND_PARAMETER_COUNT; - -typedef struct D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_INFO -{ - LPCWSTR Name; - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_TYPE Type; - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_FLAGS Flags; -} D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_INFO; - -typedef struct D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMAND_PARAMETERS -{ - GUID CommandId; // in - D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_STAGE Stage; // in - UINT ParameterCount; // in - [annotation("_Field_size_full_(ParameterCount)")] D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_INFO* pParameterInfos; // out -} D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMAND_PARAMETERS; - -typedef struct D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMAND_SUPPORT -{ - UINT NodeIndex; - GUID CommandId; - [annotation("_Field_size_bytes_full_opt_(InputDataSizeInBytes)")] const void *pInputData; - SIZE_T InputDataSizeInBytes; - [annotation("_Field_size_bytes_full_opt_(OutputDataSizeInBytes)")] void *pOutputData; - SIZE_T OutputDataSizeInBytes; -} D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMAND_SUPPORT; - -typedef struct D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMAND_SIZE -{ - UINT NodeIndex; - GUID CommandId; - [annotation("_Field_size_bytes_full_(CreationParametersDataSizeInBytes)")] const void* pCreationParameters; - SIZE_T CreationParametersSizeInBytes; - UINT64 MemoryPoolL0Size; // output - UINT64 MemoryPoolL1Size; // output -} D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMAND_SIZE; - -typedef struct D3D12_VIDEO_EXTENSION_COMMAND_DESC -{ - UINT NodeMask; - GUID CommandId; -} D3D12_VIDEO_EXTENSION_COMMAND_DESC; - -[uuid(79A2E5FB-CCD2-469A-9FDE-195D10951F7E), object, local, pointer_default(unique)] -interface ID3D12VideoDecoder1 - : ID3D12VideoDecoder -{ - HRESULT GetProtectedResourceSession( - [in] REFIID riid, // Expected: ID3D12ProtectedResourceSession - [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppProtectedSession); -} - -[uuid(DA1D98C5-539F-41B2-BF6B-1198A03B6D26), object, local, pointer_default(unique)] -interface ID3D12VideoDecoderHeap1 - : ID3D12VideoDecoderHeap -{ - HRESULT GetProtectedResourceSession( - [in] REFIID riid, // Expected: ID3D12ProtectedResourceSession - [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppProtectedSession); -} - -[uuid(F3CFE615-553F-425C-86D8-EE8C1B1FB01C), object, local, pointer_default(unique)] -interface ID3D12VideoProcessor1 - : ID3D12VideoProcessor -{ - HRESULT GetProtectedResourceSession( - [in] REFIID riid, // Expected: ID3D12ProtectedResourceSession - [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppProtectedSession); -} - -[uuid(554E41E8-AE8E-4A8C-B7D2-5B4F274A30E4), object, local, pointer_default(unique)] -interface ID3D12VideoExtensionCommand - : ID3D12Pageable -{ - D3D12_VIDEO_EXTENSION_COMMAND_DESC GetDesc(); - - HRESULT GetProtectedResourceSession( - [in] REFIID riid, // Expected: ID3D12ProtectedResourceSession - [out, iid_is(riid), annotation("_COM_Outptr_opt_")] void** ppProtectedSession); -} - -[uuid(F019AC49-F838-4A95-9B17-579437C8F513), object, local, pointer_default(unique)] -interface ID3D12VideoDevice2 - : ID3D12VideoDevice1 -{ - HRESULT CreateVideoDecoder1( - [annotation("_In_")] const D3D12_VIDEO_DECODER_DESC* pDesc, - [annotation("_In_opt_")] ID3D12ProtectedResourceSession *pProtectedResourceSession, - [annotation("_In_")] REFIID riid, // Expected: IID_ID3D12VideoDecoder1, - [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppVideoDecoder - ); - - HRESULT CreateVideoDecoderHeap1( - [annotation("_In_")] const D3D12_VIDEO_DECODER_HEAP_DESC* pVideoDecoderHeapDesc, - [annotation("_In_opt_")] ID3D12ProtectedResourceSession *pProtectedResourceSession, - [annotation("_In_")] REFIID riid, // Expected: IID_ID3D12VideoDecoderHeap1, - [out, iid_is(riid), annotation("_COM_Outptr_")] void** ppVideoDecoderHeap - ); - - HRESULT CreateVideoProcessor1( - UINT NodeMask, - [annotation("_In_")] const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC* pOutputStreamDesc, - UINT NumInputStreamDescs, - [annotation("_In_reads_(NumInputStreamDescs)")]const D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *pInputStreamDescs, - [annotation("_In_opt_")] ID3D12ProtectedResourceSession *pProtectedResourceSession, - [annotation("_In_")] REFIID riid, // Expected: IID_ID3D12VideoProcessor1, - [out, iid_is(riid), annotation("_COM_Outptr_")] void **ppVideoProcessor - ); - - HRESULT CreateVideoExtensionCommand( - [annotation("_In_")] const D3D12_VIDEO_EXTENSION_COMMAND_DESC* pDesc, - [annotation("_In_reads_bytes_(CreationParametersDataSizeInBytes)")] const void* pCreationParameters, - SIZE_T CreationParametersDataSizeInBytes, - [annotation("_In_opt_")] ID3D12ProtectedResourceSession* pProtectedResourceSession, - [annotation("_In_")] REFIID riid, // Expected: IID_ID3D12VideoExtensionCommand, - [annotation("_COM_Outptr_")] void** ppVideoExtensionCommand); - - HRESULT ExecuteExtensionCommand( - [annotation("_In_")] ID3D12VideoExtensionCommand* pExtensionCommand, - [annotation("_In_reads_bytes_(ExecutionParametersSizeInBytes)")] const void *pExecutionParameters, - SIZE_T ExecutionParametersSizeInBytes, - [annotation("_Out_writes_bytes_(OutputDataSizeInBytes)")] void *pOutputData, - SIZE_T OutputDataSizeInBytes - ); -} - -[uuid(6e120880-c114-4153-8036-d247051e1729), object, local, pointer_default(unique)] -interface ID3D12VideoDecodeCommandList2 - : ID3D12VideoDecodeCommandList1 -{ - void SetProtectedResourceSession( - [annotation("_In_opt_")]ID3D12ProtectedResourceSession *pProtectedResourceSession - ); - - void InitializeExtensionCommand( - [annotation("_In_")] ID3D12VideoExtensionCommand* pExtensionCommand, - [annotation("_In_reads_bytes_(InitializationParametersSizeInBytes)")] const void *pInitializationParameters, - SIZE_T InitializationParametersSizeInBytes); - - void ExecuteExtensionCommand( - [annotation("_In_")] ID3D12VideoExtensionCommand* pExtensionCommand, - [annotation("_In_reads_bytes_(ExecutionParametersSizeInBytes)")] const void *pExecutionParameters, - SIZE_T ExecutionParametersSizeInBytes); -} - -[uuid(2aee8c37-9562-42da-8abf-61efeb2e4513), object, local, pointer_default(unique)] -interface ID3D12VideoDecodeCommandList3 - : ID3D12VideoDecodeCommandList2 -{ - void Barrier( - UINT32 NumBarrierGroups, - [annotation("_In_reads_(NumBarrierGroups)")] const D3D12_BARRIER_GROUP *pBarrierGroups - ); -} - -[uuid(db525ae4-6ad6-473c-baa7-59b2e37082e4), object, local, pointer_default(unique)] -interface ID3D12VideoProcessCommandList2 - : ID3D12VideoProcessCommandList1 -{ - - void SetProtectedResourceSession( - [annotation("_In_opt_")]ID3D12ProtectedResourceSession *pProtectedResourceSession - ); - - void InitializeExtensionCommand( - [annotation("_In_")] ID3D12VideoExtensionCommand* pExtensionCommand, - [annotation("_In_reads_bytes_(InitializationParametersSizeInBytes)")] const void *pInitializationParameters, - SIZE_T InitializationParametersSizeInBytes); - - void ExecuteExtensionCommand( - [annotation("_In_")] ID3D12VideoExtensionCommand* pExtensionCommand, - [annotation("_In_reads_bytes_(ExecutionParametersSizeInBytes)")] const void *pExecutionParameters, - SIZE_T ExecutionParametersSizeInBytes); -} - -[uuid(1a0a4ca4-9f08-40ce-9558-b411fd2666ff), object, local, pointer_default(unique)] -interface ID3D12VideoProcessCommandList3 - : ID3D12VideoProcessCommandList2 -{ - void Barrier( - UINT32 NumBarrierGroups, - [annotation("_In_reads_(NumBarrierGroups)")] const D3D12_BARRIER_GROUP *pBarrierGroups - ); -} - -[uuid(94971eca-2bdb-4769-88cf-3675ea757ebc), object, local, pointer_default(unique)] -interface ID3D12VideoEncodeCommandList1 - : ID3D12VideoEncodeCommandList -{ - void InitializeExtensionCommand( - [annotation("_In_")] ID3D12VideoExtensionCommand* pExtensionCommand, - [annotation("_In_reads_bytes_(InitializationParametersSizeInBytes)")] const void *pInitializationParameters, - SIZE_T InitializationParametersSizeInBytes); - - void ExecuteExtensionCommand( - [annotation("_In_")] ID3D12VideoExtensionCommand* pExtensionCommand, - [annotation("_In_reads_bytes_(ExecutionParametersSizeInBytes)")] const void *pExecutionParameters, - SIZE_T ExecutionParametersSizeInBytes); -} - -cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_MPEG2, 0xee27417f, 0x5e28, 0x4e65, 0xbe, 0xea, 0x1d, 0x26, 0xb5, 0x08, 0xad, 0xc9); ") -cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_MPEG1_AND_MPEG2, 0x86695f12, 0x340e, 0x4f04, 0x9f, 0xd3, 0x92, 0x53, 0xdd, 0x32, 0x74, 0x60); ") -cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_H264, 0x1b81be68, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5);") -cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_H264_STEREO_PROGRESSIVE, 0xd79be8da, 0x0cf1, 0x4c81, 0xb8, 0x2a, 0x69, 0xa4, 0xe2, 0x36, 0xf4, 0x3d);") -cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_H264_STEREO, 0xf9aaccbb, 0xc2b6, 0x4cfc, 0x87, 0x79, 0x57, 0x07, 0xb1, 0x76, 0x05, 0x52);") -cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_H264_MULTIVIEW, 0x705b9d82, 0x76cf, 0x49d6, 0xb7, 0xe6, 0xac, 0x88, 0x72, 0xdb, 0x01, 0x3c);") -cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_VC1, 0x1b81beA3, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5);") -cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_VC1_D2010, 0x1b81beA4, 0xa0c7, 0x11d3, 0xb9, 0x84, 0x00, 0xc0, 0x4f, 0x2e, 0x73, 0xc5);") -cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_MPEG4PT2_SIMPLE, 0xefd64d74, 0xc9e8,0x41d7,0xa5,0xe9,0xe9,0xb0,0xe3,0x9f,0xa3,0x19);") -cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_MPEG4PT2_ADVSIMPLE_NOGMC, 0xed418a9f, 0x010d, 0x4eda, 0x9a, 0xe3, 0x9a, 0x65, 0x35, 0x8d, 0x8d, 0x2e);") -cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_HEVC_MAIN, 0x5b11d51b, 0x2f4c, 0x4452, 0xbc, 0xc3, 0x09, 0xf2, 0xa1, 0x16, 0x0c, 0xc0);") -cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_HEVC_MAIN10, 0x107af0e0, 0xef1a, 0x4d19, 0xab, 0xa8, 0x67, 0xa1, 0x63, 0x07, 0x3d, 0x13);") -cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_HEVC_MONOCHROME, 0x0685b993, 0x3d8c, 0x43a0, 0x8b, 0x28, 0xd7, 0x4c, 0x2d, 0x68, 0x99, 0xa4);") -cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_HEVC_MONOCHROME10, 0x142a1d0f, 0x69dd, 0x4ec9, 0x85, 0x91, 0xb1, 0x2f, 0xfc, 0xb9, 0x1a, 0x29);") -cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_HEVC_MAIN12, 0x1a72925f, 0x0c2c, 0x4f15, 0x96, 0xfb, 0xb1, 0x7d, 0x14, 0x73, 0x60, 0x3f);") -cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_HEVC_MAIN10_422, 0x0bac4fe5, 0x1532, 0x4429, 0xa8, 0x54, 0xf8, 0x4d, 0xe0, 0x49, 0x53, 0xdb);") -cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_HEVC_MAIN12_422, 0x55bcac81, 0xf311, 0x4093, 0xa7, 0xd0, 0x1c, 0xbc, 0x0b, 0x84, 0x9b, 0xee);") -cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_HEVC_MAIN_444, 0x4008018f, 0xf537, 0x4b36, 0x98, 0xcf, 0x61, 0xaf, 0x8a, 0x2c, 0x1a, 0x33);") -cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_HEVC_MAIN10_EXT, 0x9cc55490, 0xe37c, 0x4932, 0x86, 0x84, 0x49, 0x20, 0xf9, 0xf6, 0x40, 0x9c);") -cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_HEVC_MAIN10_444, 0x0dabeffa, 0x4458, 0x4602, 0xbc, 0x03, 0x07, 0x95, 0x65, 0x9d, 0x61, 0x7c);") -cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_HEVC_MAIN12_444, 0x9798634d, 0xfe9d, 0x48e5, 0xb4, 0xda, 0xdb, 0xec, 0x45, 0xb3, 0xdf, 0x01);") -cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_HEVC_MAIN16, 0xa4fbdbb0, 0xa113, 0x482b, 0xa2, 0x32, 0x63, 0x5c, 0xc0, 0x69, 0x7f, 0x6d);") -cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_VP9, 0x463707f8, 0xa1d0, 0x4585, 0x87, 0x6d, 0x83, 0xaa, 0x6d, 0x60, 0xb8, 0x9e);") -cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_VP9_10BIT_PROFILE2, 0xa4c749ef, 0x6ecf, 0x48aa, 0x84, 0x48, 0x50, 0xa7, 0xa1, 0x16, 0x5f, 0xf7);") -cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_VP8, 0x90b899ea, 0x3a62, 0x4705, 0x88, 0xb3, 0x8d, 0xf0, 0x4b, 0x27, 0x44, 0xe7);") -cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_AV1_PROFILE0, 0xb8be4ccb, 0xcf53, 0x46ba, 0x8d, 0x59, 0xd6, 0xb8, 0xa6, 0xda, 0x5d, 0x2a);") -cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_AV1_PROFILE1, 0x6936ff0f, 0x45b1, 0x4163, 0x9c, 0xc1, 0x64, 0x6e, 0xf6, 0x94, 0x61, 0x08);") -cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_AV1_PROFILE2, 0x0c5f2aa1, 0xe541, 0x4089, 0xbb, 0x7b, 0x98, 0x11, 0x0a, 0x19, 0xd7, 0xc8);") -cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_AV1_12BIT_PROFILE2, 0x17127009, 0xa00f, 0x4ce1, 0x99, 0x4e, 0xbf, 0x40, 0x81, 0xf6, 0xf3, 0xf0);") -cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_AV1_12BIT_PROFILE2_420, 0x2d80bed6, 0x9cac, 0x4835, 0x9e, 0x91, 0x32, 0x7b, 0xbc, 0x4f, 0x9e, 0xe8);") -cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_MJPEG_VLD_420, 0x725cb506, 0xc29, 0x43c4, 0x94, 0x40, 0x8e, 0x93, 0x97, 0x90, 0x3a, 0x4); ") -cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_MJPEG_VLD_422, 0x5b77b9cd, 0x1a35, 0x4c30, 0x9f, 0xd8, 0xef, 0x4b, 0x60, 0xc0, 0x35, 0xdd); ") -cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_MJPEG_VLD_444, 0xd95161f9, 0xd44, 0x47e6, 0xbc, 0xf5, 0x1b, 0xfb, 0xfb, 0x26, 0x8f, 0x97); ") -cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_MJPEG_VLD_4444, 0xc91748d5, 0xfd18, 0x4aca, 0x9d, 0xb3, 0x3a, 0x66, 0x34, 0xab, 0x54, 0x7d); ") -cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_JPEG_VLD_420, 0xcf782c83, 0xbef5, 0x4a2c, 0x87, 0xcb, 0x60, 0x19, 0xe7, 0xb1, 0x75, 0xac); ") -cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_JPEG_VLD_422, 0xf04df417, 0xeee2, 0x4067, 0xa7, 0x78, 0xf3, 0x5c, 0x15, 0xab, 0x97, 0x21); ") -cpp_quote("DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_JPEG_VLD_444, 0x4cd00e17, 0x89ba, 0x48ef, 0xb9, 0xf9, 0xed, 0xcb, 0x82, 0x71, 0x3f, 0x65);") - -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// Video Encoder -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -typedef enum D3D12_VIDEO_ENCODER_AV1_PROFILE -{ - D3D12_VIDEO_ENCODER_AV1_PROFILE_MAIN = 0, - D3D12_VIDEO_ENCODER_AV1_PROFILE_HIGH = 1, - D3D12_VIDEO_ENCODER_AV1_PROFILE_PROFESSIONAL = 2, -} D3D12_VIDEO_ENCODER_AV1_PROFILE; - -typedef enum D3D12_VIDEO_ENCODER_AV1_LEVELS -{ // These values are defined according to the AV1 codec standard spec - D3D12_VIDEO_ENCODER_AV1_LEVELS_2_0 = 0, - D3D12_VIDEO_ENCODER_AV1_LEVELS_2_1 = 1, - D3D12_VIDEO_ENCODER_AV1_LEVELS_2_2 = 2, - D3D12_VIDEO_ENCODER_AV1_LEVELS_2_3 = 3, - D3D12_VIDEO_ENCODER_AV1_LEVELS_3_0 = 4, - D3D12_VIDEO_ENCODER_AV1_LEVELS_3_1 = 5, - D3D12_VIDEO_ENCODER_AV1_LEVELS_3_2 = 6, - D3D12_VIDEO_ENCODER_AV1_LEVELS_3_3 = 7, - D3D12_VIDEO_ENCODER_AV1_LEVELS_4_0 = 8, - D3D12_VIDEO_ENCODER_AV1_LEVELS_4_1 = 9, - D3D12_VIDEO_ENCODER_AV1_LEVELS_4_2 = 10, - D3D12_VIDEO_ENCODER_AV1_LEVELS_4_3 = 11, - D3D12_VIDEO_ENCODER_AV1_LEVELS_5_0 = 12, - D3D12_VIDEO_ENCODER_AV1_LEVELS_5_1 = 13, - D3D12_VIDEO_ENCODER_AV1_LEVELS_5_2 = 14, - D3D12_VIDEO_ENCODER_AV1_LEVELS_5_3 = 15, - D3D12_VIDEO_ENCODER_AV1_LEVELS_6_0 = 16, - D3D12_VIDEO_ENCODER_AV1_LEVELS_6_1 = 17, - D3D12_VIDEO_ENCODER_AV1_LEVELS_6_2 = 18, - D3D12_VIDEO_ENCODER_AV1_LEVELS_6_3 = 19, - D3D12_VIDEO_ENCODER_AV1_LEVELS_7_0 = 20, - D3D12_VIDEO_ENCODER_AV1_LEVELS_7_1 = 21, - D3D12_VIDEO_ENCODER_AV1_LEVELS_7_2 = 22, - D3D12_VIDEO_ENCODER_AV1_LEVELS_7_3 = 23, -} D3D12_VIDEO_ENCODER_AV1_LEVELS; - -typedef enum D3D12_VIDEO_ENCODER_AV1_TIER -{ - D3D12_VIDEO_ENCODER_AV1_TIER_MAIN = 0, - D3D12_VIDEO_ENCODER_AV1_TIER_HIGH = 1, -} D3D12_VIDEO_ENCODER_AV1_TIER; - -typedef struct D3D12_VIDEO_ENCODER_AV1_LEVEL_TIER_CONSTRAINTS -{ - D3D12_VIDEO_ENCODER_AV1_LEVELS Level; - D3D12_VIDEO_ENCODER_AV1_TIER Tier; -} D3D12_VIDEO_ENCODER_AV1_LEVEL_TIER_CONSTRAINTS; - -typedef enum D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAGS -{ - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_NONE = 0x0, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_128x128_SUPERBLOCK = 0x1, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_FILTER_INTRA = 0x2, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_INTRA_EDGE_FILTER = 0x4, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_INTERINTRA_COMPOUND = 0x8, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_MASKED_COMPOUND = 0x10, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_WARPED_MOTION = 0x20, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_DUAL_FILTER = 0x40, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_JNT_COMP = 0x80, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_FORCED_INTEGER_MOTION_VECTORS = 0x100, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_SUPER_RESOLUTION = 0x200, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_LOOP_RESTORATION_FILTER = 0x400, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_PALETTE_ENCODING = 0x800, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_CDEF_FILTERING = 0x1000, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_INTRA_BLOCK_COPY = 0x2000, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_FRAME_REFERENCE_MOTION_VECTORS = 0x4000, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_ORDER_HINT_TOOLS = 0x8000, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_AUTO_SEGMENTATION = 0x10000, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_CUSTOM_SEGMENTATION = 0x20000, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_LOOP_FILTER_DELTAS = 0x40000, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_QUANTIZATION_DELTAS = 0x80000, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_QUANTIZATION_MATRIX = 0x100000, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_REDUCED_TX_SET = 0x200000, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_MOTION_MODE_SWITCHABLE = 0x400000, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_ALLOW_HIGH_PRECISION_MV = 0x800000, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_SKIP_MODE_PRESENT = 0x1000000, - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_DELTA_LF_PARAMS = 0x2000000, -} D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAGS)") - -typedef enum D3D12_VIDEO_ENCODER_AV1_TX_MODE { - D3D12_VIDEO_ENCODER_AV1_TX_MODE_ONLY4x4 = 0, - D3D12_VIDEO_ENCODER_AV1_TX_MODE_LARGEST = 1, - D3D12_VIDEO_ENCODER_AV1_TX_MODE_SELECT = 2, -} D3D12_VIDEO_ENCODER_AV1_TX_MODE; - -typedef enum D3D12_VIDEO_ENCODER_AV1_TX_MODE_FLAGS { - D3D12_VIDEO_ENCODER_AV1_TX_MODE_FLAG_NONE = 0x0, - D3D12_VIDEO_ENCODER_AV1_TX_MODE_FLAG_ONLY4x4 = (1 << D3D12_VIDEO_ENCODER_AV1_TX_MODE_ONLY4x4), - D3D12_VIDEO_ENCODER_AV1_TX_MODE_FLAG_LARGEST = (1 << D3D12_VIDEO_ENCODER_AV1_TX_MODE_LARGEST), - D3D12_VIDEO_ENCODER_AV1_TX_MODE_FLAG_SELECT = (1 << D3D12_VIDEO_ENCODER_AV1_TX_MODE_SELECT), -} D3D12_VIDEO_ENCODER_AV1_TX_MODE_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_TX_MODE_FLAGS)") - -typedef enum D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS { - D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_EIGHTTAP = 0, - D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_EIGHTTAP_SMOOTH = 1, - D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_EIGHTTAP_SHARP = 2, - D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_BILINEAR = 3, - D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_SWITCHABLE = 4, -} D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS; - -typedef enum D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_FLAGS { - D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_FLAG_NONE = 0x0, - D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_FLAG_EIGHTTAP = (1 << D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_EIGHTTAP), - D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_FLAG_EIGHTTAP_SMOOTH = (1 << D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_EIGHTTAP_SMOOTH), - D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_FLAG_EIGHTTAP_SHARP = (1 << D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_EIGHTTAP_SHARP), - D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_FLAG_BILINEAR = (1 << D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_BILINEAR), - D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_FLAG_SWITCHABLE = (1 << D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_SWITCHABLE), -} D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_FLAGS)") - -typedef enum D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_BLOCK_SIZE { - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_BLOCK_SIZE_4x4 = 0, - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_BLOCK_SIZE_8x8 = 1, - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_BLOCK_SIZE_16x16 = 2, - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_BLOCK_SIZE_32x32 = 3, - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_BLOCK_SIZE_64x64 = 4, -} D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_BLOCK_SIZE; - -typedef enum D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE { - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_DISABLED = 0, - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_Q = 1, - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_LF_Y_V = 2, - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_LF_Y_H = 3, - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_LF_U = 4, - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_LF_V = 5, - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_REF_FRAME = 6, - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_SKIP = 7, - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_GLOBALMV = 8, -} D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE; - -typedef enum D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAGS { - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAG_NONE = 0, - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAG_DISABLED = (1 << D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_DISABLED), - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAG_ALT_Q = (1 << D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_Q), - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAG_ALT_LF_Y_V = (1 << D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_LF_Y_V), - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAG_ALT_LF_Y_H = (1 << D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_LF_Y_H), - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAG_ALT_LF_U = (1 << D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_LF_U), - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAG_ALT_LF_V = (1 << D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_LF_V), - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAG_REF_FRAME = (1 << D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_REF_FRAME), - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAG_ALT_SKIP = (1 << D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_SKIP), - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAG_ALT_GLOBALMV = (1 << D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_GLOBALMV), -} D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAGS)") - -typedef enum D3D12_VIDEO_ENCODER_AV1_RESTORATION_TYPE { - D3D12_VIDEO_ENCODER_AV1_RESTORATION_TYPE_DISABLED = 0, - D3D12_VIDEO_ENCODER_AV1_RESTORATION_TYPE_SWITCHABLE = 1, - D3D12_VIDEO_ENCODER_AV1_RESTORATION_TYPE_WIENER = 2, - D3D12_VIDEO_ENCODER_AV1_RESTORATION_TYPE_SGRPROJ = 3, -} D3D12_VIDEO_ENCODER_AV1_RESTORATION_TYPE; - -typedef enum D3D12_VIDEO_ENCODER_AV1_RESTORATION_TILESIZE { - D3D12_VIDEO_ENCODER_AV1_RESTORATION_TILESIZE_DISABLED = 0, - D3D12_VIDEO_ENCODER_AV1_RESTORATION_TILESIZE_32x32 = 1, - D3D12_VIDEO_ENCODER_AV1_RESTORATION_TILESIZE_64x64 = 2, - D3D12_VIDEO_ENCODER_AV1_RESTORATION_TILESIZE_128x128 = 3, - D3D12_VIDEO_ENCODER_AV1_RESTORATION_TILESIZE_256x256 = 4, -} D3D12_VIDEO_ENCODER_AV1_RESTORATION_TILESIZE; - -typedef enum D3D12_VIDEO_ENCODER_AV1_RESTORATION_SUPPORT_FLAGS { - D3D12_VIDEO_ENCODER_AV1_RESTORATION_SUPPORT_FLAG_NOT_SUPPORTED = 0x0, - D3D12_VIDEO_ENCODER_AV1_RESTORATION_SUPPORT_FLAG_32x32 = 0x1, - D3D12_VIDEO_ENCODER_AV1_RESTORATION_SUPPORT_FLAG_64x64 = 0x2, - D3D12_VIDEO_ENCODER_AV1_RESTORATION_SUPPORT_FLAG_128x128 = 0x4, - D3D12_VIDEO_ENCODER_AV1_RESTORATION_SUPPORT_FLAG_256x256 = 0x8, -} D3D12_VIDEO_ENCODER_AV1_RESTORATION_SUPPORT_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_RESTORATION_SUPPORT_FLAGS)") - -typedef enum D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION -{ - D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_IDENTITY = 0, - D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_TRANSLATION = 1, - D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_ROTZOOM = 2, - D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_AFFINE = 3, -} D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION; - -typedef enum D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_FLAGS { - D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_FLAG_NONE = 0, // None is supported, reference warp motion arguments are ignored and is_global syntax is false for all references - D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_FLAG_IDENTITY = (1 << D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_IDENTITY), - D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_FLAG_TRANSLATION = (1 << D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_TRANSLATION), - D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_FLAG_ROTZOOM = (1 << D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_ROTZOOM), - D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_FLAG_AFFINE = (1 << D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_AFFINE), -} D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_FLAGS)") - -typedef enum D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAGS { - D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAG_NONE = 0, - D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAG_QUANTIZATION = 0x1, - D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAG_QUANTIZATION_DELTA = 0x2, - D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAG_LOOP_FILTER = 0x4, - D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAG_LOOP_FILTER_DELTA = 0x8, - D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAG_CDEF_DATA = 0x10, - D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAG_CONTEXT_UPDATE_TILE_ID = 0x20, - D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAG_COMPOUND_PREDICTION_MODE = 0x40, - D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAG_PRIMARY_REF_FRAME = 0x80, - D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAG_REFERENCE_INDICES = 0x100, -} D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAGS)") - -typedef struct D3D12_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION_SUPPORT { - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAGS SupportedFeatureFlags; - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAGS RequiredFeatureFlags; - D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_FLAGS SupportedInterpolationFilters; - D3D12_VIDEO_ENCODER_AV1_RESTORATION_SUPPORT_FLAGS SupportedRestorationParams[3][3]; - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAGS SupportedSegmentationModes; - D3D12_VIDEO_ENCODER_AV1_TX_MODE_FLAGS SupportedTxModes[4]; // Different for D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE types - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_BLOCK_SIZE SegmentationBlockSize; - D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAGS PostEncodeValuesFlags; - UINT MaxTemporalLayers; - UINT MaxSpatialLayers; -} D3D12_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION_SUPPORT; - -typedef enum D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE -{ - D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_KEY_FRAME = 0, - D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_INTER_FRAME = 1, - D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_INTRA_ONLY_FRAME = 2, - D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_SWITCH_FRAME = 3, -} D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE; - -typedef enum D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_FLAGS { - D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_FLAG_NONE = 0x0, - D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_FLAG_KEY_FRAME = (1 << D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_KEY_FRAME), - D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_FLAG_INTER_FRAME = (1 << D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_INTER_FRAME), - D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_FLAG_INTRA_ONLY_FRAME = (1 << D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_INTRA_ONLY_FRAME), - D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_FLAG_SWITCH_FRAME = (1 << D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_SWITCH_FRAME), -} D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_FLAGS)") - -typedef enum D3D12_VIDEO_ENCODER_AV1_COMP_PREDICTION_TYPE -{ - D3D12_VIDEO_ENCODER_AV1_COMP_PREDICTION_TYPE_SINGLE_REFERENCE = 0, - D3D12_VIDEO_ENCODER_AV1_COMP_PREDICTION_TYPE_COMPOUND_REFERENCE = 1, -} D3D12_VIDEO_ENCODER_AV1_COMP_PREDICTION_TYPE; - -typedef struct D3D12_VIDEO_ENCODER_CODEC_AV1_PICTURE_CONTROL_SUPPORT { - D3D12_VIDEO_ENCODER_AV1_COMP_PREDICTION_TYPE PredictionMode; - UINT MaxUniqueReferencesPerFrame; - D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_FLAGS SupportedFrameTypes; - D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_FLAGS SupportedReferenceWarpedMotionFlags; -} D3D12_VIDEO_ENCODER_CODEC_AV1_PICTURE_CONTROL_SUPPORT; - -typedef struct D3D12_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION { - D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAGS FeatureFlags; - UINT OrderHintBitsMinus1; -} D3D12_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION; - -typedef struct D3D12_VIDEO_ENCODER_AV1_SEQUENCE_STRUCTURE -{ - UINT IntraDistance; - UINT InterFramePeriod; -} D3D12_VIDEO_ENCODER_AV1_SEQUENCE_STRUCTURE; - -typedef struct D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_WARPED_MOTION_INFO -{ - D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION TransformationType; - INT TransformationMatrix[8]; - BOOL InvalidAffineSet; // Valid or invalid on affine set -} D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_WARPED_MOTION_INFO; - -typedef struct D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR -{ - UINT ReconstructedPictureResourceIndex; - UINT TemporalLayerIndexPlus1; - UINT SpatialLayerIndexPlus1; - D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE FrameType; - // Only used if supported in D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_FLAGS, ignored by driver otherwise - D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_WARPED_MOTION_INFO WarpedMotionInfo; - UINT OrderHint; - UINT PictureIndex; -} D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR; - -typedef enum D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAGS -{ - D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_NONE = 0x0, - D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_ENABLE_ERROR_RESILIENT_MODE = 0x1, - D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_DISABLE_CDF_UPDATE = 0x2, - D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_ENABLE_PALETTE_ENCODING = 0x4, - D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_ENABLE_SKIP_MODE = 0x8, - D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_FRAME_REFERENCE_MOTION_VECTORS = 0x10, - D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_FORCE_INTEGER_MOTION_VECTORS = 0x20, - D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_ALLOW_INTRA_BLOCK_COPY = 0x40, - D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_USE_SUPER_RESOLUTION = 0x80, - D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_DISABLE_FRAME_END_UPDATE_CDF = 0x100, - D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_ENABLE_FRAME_SEGMENTATION_AUTO = 0x200, - D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_ENABLE_FRAME_SEGMENTATION_CUSTOM = 0x400, - D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_ENABLE_WARPED_MOTION = 0x800, - D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_REDUCED_TX_SET = 0x1000, - D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_MOTION_MODE_SWITCHABLE = 0x2000, - D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_ALLOW_HIGH_PRECISION_MV = 0x4000, - -} D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAGS)") - -typedef struct D3D12_VIDEO_ENCODER_AV1_RESTORATION_CONFIG { - D3D12_VIDEO_ENCODER_AV1_RESTORATION_TYPE FrameRestorationType[3]; - D3D12_VIDEO_ENCODER_AV1_RESTORATION_TILESIZE LoopRestorationPixelSize[3]; -} D3D12_VIDEO_ENCODER_AV1_RESTORATION_CONFIG; - -typedef struct D3D12_VIDEO_ENCODER_AV1_SEGMENT_DATA { - UINT64 EnabledFeatures; // D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAGS - // For the enabled features in EnabledFeatures, the array below - // is indexed by D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE - 1 - INT64 FeatureValue[8]; -} D3D12_VIDEO_ENCODER_AV1_SEGMENT_DATA; - -typedef struct D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG { - UINT64 UpdateMap; - UINT64 TemporalUpdate; - UINT64 UpdateData; - UINT64 NumSegments; - D3D12_VIDEO_ENCODER_AV1_SEGMENT_DATA SegmentsData[8]; -} D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG; - -typedef struct D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MAP { - UINT SegmentsMapByteSize; - UINT8* pSegmentsMap; -} D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MAP; - -typedef struct D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG { - UINT64 LoopFilterLevel[2]; - UINT64 LoopFilterLevelU; - UINT64 LoopFilterLevelV; - UINT64 LoopFilterSharpnessLevel; - UINT64 LoopFilterDeltaEnabled; - // loop_filter_delta_update = UpdateRefDelta || UpdateModeDelta - UINT64 UpdateRefDelta; - INT64 RefDeltas[8]; - UINT64 UpdateModeDelta; - INT64 ModeDeltas[2]; -} D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG; - -typedef struct D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG { - UINT64 DeltaLFPresent; - UINT64 DeltaLFMulti; - UINT64 DeltaLFRes; -} D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG; - -typedef struct D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG { - UINT64 BaseQIndex; - INT64 YDCDeltaQ; - INT64 UDCDeltaQ; - INT64 UACDeltaQ; - INT64 VDCDeltaQ; - INT64 VACDeltaQ; - UINT64 UsingQMatrix; - UINT64 QMY; - UINT64 QMU; - UINT64 QMV; -} D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG; - -typedef struct D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG { - UINT64 DeltaQPresent; - UINT64 DeltaQRes; -} D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG; - -typedef struct D3D12_VIDEO_ENCODER_AV1_CDEF_CONFIG { - UINT64 CdefBits; - UINT64 CdefDampingMinus3; - UINT64 CdefYPriStrength[8]; - UINT64 CdefUVPriStrength[8]; - UINT64 CdefYSecStrength[8]; - UINT64 CdefUVSecStrength[8]; -} D3D12_VIDEO_ENCODER_AV1_CDEF_CONFIG; - -typedef struct D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA -{ - D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAGS Flags; - D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE FrameType; - D3D12_VIDEO_ENCODER_AV1_COMP_PREDICTION_TYPE CompoundPredictionType; - D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS InterpolationFilter; - D3D12_VIDEO_ENCODER_AV1_RESTORATION_CONFIG FrameRestorationConfig; - D3D12_VIDEO_ENCODER_AV1_TX_MODE TxMode; - UINT SuperResDenominator; - UINT OrderHint; - UINT PictureIndex; - UINT TemporalLayerIndexPlus1; - UINT SpatialLayerIndexPlus1; - D3D12_VIDEO_ENCODER_AV1_REFERENCE_PICTURE_DESCRIPTOR ReferenceFramesReconPictureDescriptors[8]; - UINT ReferenceIndices[7]; - UINT PrimaryRefFrame; - UINT RefreshFrameFlags; - D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG LoopFilter; - D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG LoopFilterDelta; - D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG Quantization; - D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG QuantizationDelta; - D3D12_VIDEO_ENCODER_AV1_CDEF_CONFIG CDEF; - UINT QPMapValuesCount; - [annotation("_Field_size_full_(QPMapValuesCount)")] INT16* pRateControlQPMap; - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG CustomSegmentation; - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MAP CustomSegmentsMap; -} D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA; - -typedef struct D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_TILES -{ - UINT64 RowCount; - UINT64 ColCount; - UINT64 RowHeights[D3D12_VIDEO_ENCODER_AV1_MAX_TILE_ROWS]; - UINT64 ColWidths[D3D12_VIDEO_ENCODER_AV1_MAX_TILE_COLS]; - UINT64 ContextUpdateTileId; -} D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_TILES; - -typedef struct D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES -{ - UINT64 CompoundPredictionType; // D3D12_VIDEO_ENCODER_AV1_COMP_PREDICTION_TYPE - D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_CONFIG LoopFilter; - D3D12_VIDEO_ENCODER_CODEC_AV1_LOOP_FILTER_DELTA_CONFIG LoopFilterDelta; - D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_CONFIG Quantization; - D3D12_VIDEO_ENCODER_CODEC_AV1_QUANTIZATION_DELTA_CONFIG QuantizationDelta; - D3D12_VIDEO_ENCODER_AV1_CDEF_CONFIG CDEF; - D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_CONFIG SegmentationConfig; - UINT64 PrimaryRefFrame; // Aligned to 64 for use of post encode metadata with predication - UINT64 ReferenceIndices[7]; // Aligned to 64 for use of post encode metadata with predication -} D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES; - -// -// Rate control API -// - -typedef enum D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE -{ - D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE_ABSOLUTE_QP_MAP = 0, - D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE_CQP = 1, - D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE_CBR = 2, - D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE_VBR = 3, - D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE_QVBR = 4, -} D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE; - -typedef enum D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAGS -{ - D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_NONE = 0x0, - D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_DELTA_QP = 0x1, - D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_FRAME_ANALYSIS = 0x2, - D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_QP_RANGE = 0x4, - D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_INITIAL_QP = 0x8, - D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_MAX_FRAME_SIZE = 0x10, - D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_VBV_SIZES = 0x20, - D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_EXTENSION1_SUPPORT = 0x40, - D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_QUALITY_VS_SPEED = 0x80, -} D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAGS)") - -typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL_CQP { - UINT ConstantQP_FullIntracodedFrame; - UINT ConstantQP_InterPredictedFrame_PrevRefOnly; - UINT ConstantQP_InterPredictedFrame_BiDirectionalRef; -} D3D12_VIDEO_ENCODER_RATE_CONTROL_CQP; - -typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL_CQP1 { - UINT ConstantQP_FullIntracodedFrame; - UINT ConstantQP_InterPredictedFrame_PrevRefOnly; - UINT ConstantQP_InterPredictedFrame_BiDirectionalRef; - UINT QualityVsSpeed; -} D3D12_VIDEO_ENCODER_RATE_CONTROL_CQP1; - -typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL_CBR { - UINT InitialQP; - UINT MinQP; - UINT MaxQP; - UINT64 MaxFrameBitSize; - UINT64 TargetBitRate; - UINT64 VBVCapacity; - UINT64 InitialVBVFullness; -} D3D12_VIDEO_ENCODER_RATE_CONTROL_CBR; - -typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL_CBR1 { - UINT InitialQP; - UINT MinQP; - UINT MaxQP; - UINT64 MaxFrameBitSize; - UINT64 TargetBitRate; - UINT64 VBVCapacity; - UINT64 InitialVBVFullness; - UINT QualityVsSpeed; -} D3D12_VIDEO_ENCODER_RATE_CONTROL_CBR1; - -typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL_VBR { - UINT InitialQP; - UINT MinQP; - UINT MaxQP; - UINT64 MaxFrameBitSize; - UINT64 TargetAvgBitRate; - UINT64 PeakBitRate; - UINT64 VBVCapacity; - UINT64 InitialVBVFullness; -} D3D12_VIDEO_ENCODER_RATE_CONTROL_VBR; - -typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL_VBR1 { - UINT InitialQP; - UINT MinQP; - UINT MaxQP; - UINT64 MaxFrameBitSize; - UINT64 TargetAvgBitRate; - UINT64 PeakBitRate; - UINT64 VBVCapacity; - UINT64 InitialVBVFullness; - UINT QualityVsSpeed; -} D3D12_VIDEO_ENCODER_RATE_CONTROL_VBR1; - -typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL_QVBR { - UINT InitialQP; - UINT MinQP; - UINT MaxQP; - UINT64 MaxFrameBitSize; - UINT64 TargetAvgBitRate; - UINT64 PeakBitRate; - UINT ConstantQualityTarget; -} D3D12_VIDEO_ENCODER_RATE_CONTROL_QVBR; - -typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL_QVBR1 -{ - UINT InitialQP; - UINT MinQP; - UINT MaxQP; - UINT64 MaxFrameBitSize; - UINT64 TargetAvgBitRate; - UINT64 PeakBitRate; - UINT ConstantQualityTarget; - UINT64 VBVCapacity; - UINT64 InitialVBVFullness; - UINT QualityVsSpeed; -} D3D12_VIDEO_ENCODER_RATE_CONTROL_QVBR1; - -typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL_ABSOLUTE_QP_MAP { - UINT QualityVsSpeed; -} D3D12_VIDEO_ENCODER_RATE_CONTROL_ABSOLUTE_QP_MAP; - -typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL_CONFIGURATION_PARAMS -{ - UINT DataSize; - union - { - const D3D12_VIDEO_ENCODER_RATE_CONTROL_CQP* pConfiguration_CQP; - const D3D12_VIDEO_ENCODER_RATE_CONTROL_CBR* pConfiguration_CBR; - const D3D12_VIDEO_ENCODER_RATE_CONTROL_VBR* pConfiguration_VBR; - const D3D12_VIDEO_ENCODER_RATE_CONTROL_QVBR* pConfiguration_QVBR; - const D3D12_VIDEO_ENCODER_RATE_CONTROL_CQP1* pConfiguration_CQP1; - const D3D12_VIDEO_ENCODER_RATE_CONTROL_CBR1* pConfiguration_CBR1; - const D3D12_VIDEO_ENCODER_RATE_CONTROL_VBR1* pConfiguration_VBR1; - const D3D12_VIDEO_ENCODER_RATE_CONTROL_QVBR1* pConfiguration_QVBR1; - const D3D12_VIDEO_ENCODER_RATE_CONTROL_ABSOLUTE_QP_MAP* pConfiguration_AbsoluteQPMap; - }; -} D3D12_VIDEO_ENCODER_RATE_CONTROL_CONFIGURATION_PARAMS; - -typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL { - D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE Mode; - D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAGS Flags; - D3D12_VIDEO_ENCODER_RATE_CONTROL_CONFIGURATION_PARAMS ConfigParams; - DXGI_RATIONAL TargetFrameRate; -} D3D12_VIDEO_ENCODER_RATE_CONTROL; - -// -// Video Encoder support API -// - -typedef enum D3D12_VIDEO_ENCODER_CODEC -{ - D3D12_VIDEO_ENCODER_CODEC_H264 = 0, - D3D12_VIDEO_ENCODER_CODEC_HEVC = 1, - D3D12_VIDEO_ENCODER_CODEC_AV1 = 2, -} D3D12_VIDEO_ENCODER_CODEC; - -typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_CODEC -{ - UINT NodeIndex; // input - D3D12_VIDEO_ENCODER_CODEC Codec; // input - BOOL IsSupported; // output -} D3D12_FEATURE_DATA_VIDEO_ENCODER_CODEC; - -typedef enum D3D12_VIDEO_ENCODER_PROFILE_H264 -{ - D3D12_VIDEO_ENCODER_PROFILE_H264_MAIN = 0, - D3D12_VIDEO_ENCODER_PROFILE_H264_HIGH = 1, - D3D12_VIDEO_ENCODER_PROFILE_H264_HIGH_10 = 2, -} D3D12_VIDEO_ENCODER_PROFILE_H264; - -typedef enum D3D12_VIDEO_ENCODER_PROFILE_HEVC -{ - D3D12_VIDEO_ENCODER_PROFILE_HEVC_MAIN = 0, - D3D12_VIDEO_ENCODER_PROFILE_HEVC_MAIN10 = 1, - D3D12_VIDEO_ENCODER_PROFILE_HEVC_MAIN12 = 2, - D3D12_VIDEO_ENCODER_PROFILE_HEVC_MAIN10_422 = 3, - D3D12_VIDEO_ENCODER_PROFILE_HEVC_MAIN12_422 = 4, - D3D12_VIDEO_ENCODER_PROFILE_HEVC_MAIN_444 = 5, - D3D12_VIDEO_ENCODER_PROFILE_HEVC_MAIN10_444 = 6, - D3D12_VIDEO_ENCODER_PROFILE_HEVC_MAIN12_444 = 7, - D3D12_VIDEO_ENCODER_PROFILE_HEVC_MAIN16_444 = 8, -} D3D12_VIDEO_ENCODER_PROFILE_HEVC; - -typedef struct D3D12_VIDEO_ENCODER_PROFILE_DESC -{ - UINT DataSize; - union - { - D3D12_VIDEO_ENCODER_PROFILE_H264* pH264Profile; - D3D12_VIDEO_ENCODER_PROFILE_HEVC* pHEVCProfile; - D3D12_VIDEO_ENCODER_AV1_PROFILE* pAV1Profile; - }; -} D3D12_VIDEO_ENCODER_PROFILE_DESC; - -typedef enum D3D12_VIDEO_ENCODER_LEVELS_H264 -{ - D3D12_VIDEO_ENCODER_LEVELS_H264_1 = 0, - D3D12_VIDEO_ENCODER_LEVELS_H264_1b = 1, - D3D12_VIDEO_ENCODER_LEVELS_H264_11 = 2, - D3D12_VIDEO_ENCODER_LEVELS_H264_12 = 3, - D3D12_VIDEO_ENCODER_LEVELS_H264_13 = 4, - D3D12_VIDEO_ENCODER_LEVELS_H264_2 = 5, - D3D12_VIDEO_ENCODER_LEVELS_H264_21 = 6, - D3D12_VIDEO_ENCODER_LEVELS_H264_22 = 7, - D3D12_VIDEO_ENCODER_LEVELS_H264_3 = 8, - D3D12_VIDEO_ENCODER_LEVELS_H264_31 = 9, - D3D12_VIDEO_ENCODER_LEVELS_H264_32 = 10, - D3D12_VIDEO_ENCODER_LEVELS_H264_4 = 11, - D3D12_VIDEO_ENCODER_LEVELS_H264_41 = 12, - D3D12_VIDEO_ENCODER_LEVELS_H264_42 = 13, - D3D12_VIDEO_ENCODER_LEVELS_H264_5 = 14, - D3D12_VIDEO_ENCODER_LEVELS_H264_51 = 15, - D3D12_VIDEO_ENCODER_LEVELS_H264_52 = 16, - D3D12_VIDEO_ENCODER_LEVELS_H264_6 = 17, - D3D12_VIDEO_ENCODER_LEVELS_H264_61 = 18, - D3D12_VIDEO_ENCODER_LEVELS_H264_62 = 19, -} D3D12_VIDEO_ENCODER_LEVELS_H264; - -typedef enum D3D12_VIDEO_ENCODER_TIER_HEVC -{ - D3D12_VIDEO_ENCODER_TIER_HEVC_MAIN = 0, - D3D12_VIDEO_ENCODER_TIER_HEVC_HIGH = 1, -} D3D12_VIDEO_ENCODER_TIER_HEVC; - -typedef enum D3D12_VIDEO_ENCODER_LEVELS_HEVC -{ - D3D12_VIDEO_ENCODER_LEVELS_HEVC_1 = 0, - D3D12_VIDEO_ENCODER_LEVELS_HEVC_2 = 1, - D3D12_VIDEO_ENCODER_LEVELS_HEVC_21 = 2, - D3D12_VIDEO_ENCODER_LEVELS_HEVC_3 = 3, - D3D12_VIDEO_ENCODER_LEVELS_HEVC_31 = 4, - D3D12_VIDEO_ENCODER_LEVELS_HEVC_4 = 5, - D3D12_VIDEO_ENCODER_LEVELS_HEVC_41 = 6, - D3D12_VIDEO_ENCODER_LEVELS_HEVC_5 = 7, - D3D12_VIDEO_ENCODER_LEVELS_HEVC_51 = 8, - D3D12_VIDEO_ENCODER_LEVELS_HEVC_52 = 9, - D3D12_VIDEO_ENCODER_LEVELS_HEVC_6 = 10, - D3D12_VIDEO_ENCODER_LEVELS_HEVC_61 = 11, - D3D12_VIDEO_ENCODER_LEVELS_HEVC_62 = 12, -} D3D12_VIDEO_ENCODER_LEVELS_HEVC; - -typedef struct D3D12_VIDEO_ENCODER_LEVEL_TIER_CONSTRAINTS_HEVC -{ - D3D12_VIDEO_ENCODER_LEVELS_HEVC Level; - D3D12_VIDEO_ENCODER_TIER_HEVC Tier; -} D3D12_VIDEO_ENCODER_LEVEL_TIER_CONSTRAINTS_HEVC; - -typedef struct D3D12_VIDEO_ENCODER_LEVEL_SETTING -{ - UINT DataSize; - union - { - D3D12_VIDEO_ENCODER_LEVELS_H264* pH264LevelSetting; - D3D12_VIDEO_ENCODER_LEVEL_TIER_CONSTRAINTS_HEVC* pHEVCLevelSetting; - D3D12_VIDEO_ENCODER_AV1_LEVEL_TIER_CONSTRAINTS* pAV1LevelSetting; - }; -} D3D12_VIDEO_ENCODER_LEVEL_SETTING; - -typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_PROFILE_LEVEL -{ - UINT NodeIndex; // input - D3D12_VIDEO_ENCODER_CODEC Codec; // input - D3D12_VIDEO_ENCODER_PROFILE_DESC Profile; // input - BOOL IsSupported; // output - D3D12_VIDEO_ENCODER_LEVEL_SETTING MinSupportedLevel; // output - D3D12_VIDEO_ENCODER_LEVEL_SETTING MaxSupportedLevel; // output -} D3D12_FEATURE_DATA_VIDEO_ENCODER_PROFILE_LEVEL; - -typedef struct D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC -{ - UINT Width; - UINT Height; -} D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC; - -typedef struct D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_RATIO_DESC -{ - UINT WidthRatio; - UINT HeightRatio; -} D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_RATIO_DESC; - -typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_OUTPUT_RESOLUTION_RATIOS_COUNT -{ - UINT NodeIndex; // input - D3D12_VIDEO_ENCODER_CODEC Codec; // input - UINT ResolutionRatiosCount; // output -} D3D12_FEATURE_DATA_VIDEO_ENCODER_OUTPUT_RESOLUTION_RATIOS_COUNT; - -typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_OUTPUT_RESOLUTION -{ - UINT NodeIndex; // input - D3D12_VIDEO_ENCODER_CODEC Codec; // input - UINT ResolutionRatiosCount; // input - BOOL IsSupported; // output - D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC MinResolutionSupported; // output - D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC MaxResolutionSupported; // output - UINT ResolutionWidthMultipleRequirement; // output - UINT ResolutionHeightMultipleRequirement; // output - [annotation("_Field_size_full_(ResolutionRatiosCount)")] D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_RATIO_DESC* pResolutionRatios; -} D3D12_FEATURE_DATA_VIDEO_ENCODER_OUTPUT_RESOLUTION; - -typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_INPUT_FORMAT -{ - UINT NodeIndex; // input - D3D12_VIDEO_ENCODER_CODEC Codec; // input - D3D12_VIDEO_ENCODER_PROFILE_DESC Profile; // input - DXGI_FORMAT Format; // input - BOOL IsSupported; // output -} D3D12_FEATURE_DATA_VIDEO_ENCODER_INPUT_FORMAT; - -typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_RATE_CONTROL_MODE -{ - UINT NodeIndex; // input - D3D12_VIDEO_ENCODER_CODEC Codec; // input - D3D12_VIDEO_ENCODER_RATE_CONTROL_MODE RateControlMode; // input - BOOL IsSupported; // output -} D3D12_FEATURE_DATA_VIDEO_ENCODER_RATE_CONTROL_MODE; - -typedef enum D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE -{ - D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE_NONE = 0, - D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE_ROW_BASED = 1, -} D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE; - -typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_INTRA_REFRESH_MODE { - UINT NodeIndex; // input - D3D12_VIDEO_ENCODER_CODEC Codec; // input - D3D12_VIDEO_ENCODER_PROFILE_DESC Profile; // input - D3D12_VIDEO_ENCODER_LEVEL_SETTING Level; // input - D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE IntraRefreshMode; // input - BOOL IsSupported; // output -} D3D12_FEATURE_DATA_VIDEO_ENCODER_INTRA_REFRESH_MODE; - -typedef enum D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE -{ - D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_FULL_FRAME = 0, - D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_BYTES_PER_SUBREGION = 1, - D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_SQUARE_UNITS_PER_SUBREGION_ROW_UNALIGNED = 2, - D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_UNIFORM_PARTITIONING_ROWS_PER_SUBREGION = 3, - D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_UNIFORM_PARTITIONING_SUBREGIONS_PER_FRAME = 4, - D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_UNIFORM_GRID_PARTITION = 5, - D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_CONFIGURABLE_GRID_PARTITION = 6, -} D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE; - -typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE -{ - UINT NodeIndex; // input - D3D12_VIDEO_ENCODER_CODEC Codec; // input - D3D12_VIDEO_ENCODER_PROFILE_DESC Profile; // input - D3D12_VIDEO_ENCODER_LEVEL_SETTING Level; // input - D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE SubregionMode; // input - BOOL IsSupported; // output -} D3D12_FEATURE_DATA_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE; - -typedef enum D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAGS -{ - D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAG_NONE = 0x0, - D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAG_NOT_SPECIFIED = 0x1, - D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAG_CODEC_CONSTRAINT = 0x2, - D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAG_HARDWARE_CONSTRAINT = 0x4, - D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAG_ROWS_COUNT = 0x8, - D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAG_COLS_COUNT = 0x10, - D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAG_WIDTH = 0x20, - D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAG_AREA = 0x40, - D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAG_TOTAL_TILES = 0x80, - -} D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAGS)") - -typedef struct D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_SUPPORT -{ - BOOL Use128SuperBlocks; - D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_TILES TilesConfiguration; - D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAGS ValidationFlags; - UINT MinTileRows; - UINT MaxTileRows; - UINT MinTileCols; - UINT MaxTileCols; - UINT MinTileWidth; - UINT MaxTileWidth; - UINT MinTileArea; - UINT MaxTileArea; - UINT TileSizeBytesMinus1; -} D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_SUPPORT; - -typedef struct D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_CONFIG_SUPPORT { - UINT DataSize; - union - { - D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_SUPPORT* pAV1Support; - }; -} D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_CONFIG_SUPPORT; - -typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_CONFIG -{ - UINT NodeIndex; // input - D3D12_VIDEO_ENCODER_CODEC Codec; // input - D3D12_VIDEO_ENCODER_PROFILE_DESC Profile; // input - D3D12_VIDEO_ENCODER_LEVEL_SETTING Level; // input - D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE SubregionMode; // input - D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC FrameResolution; // input - D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_CONFIG_SUPPORT CodecSupport; // input/output - BOOL IsSupported; // output -} D3D12_FEATURE_DATA_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_CONFIG; - -typedef enum D3D12_VIDEO_ENCODER_HEAP_FLAGS -{ - D3D12_VIDEO_ENCODER_HEAP_FLAG_NONE = 0x0, -} D3D12_VIDEO_ENCODER_HEAP_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_HEAP_FLAGS)") - -typedef struct D3D12_VIDEO_ENCODER_HEAP_DESC -{ - UINT NodeMask; - D3D12_VIDEO_ENCODER_HEAP_FLAGS Flags; - D3D12_VIDEO_ENCODER_CODEC EncodeCodec; - D3D12_VIDEO_ENCODER_PROFILE_DESC EncodeProfile; - D3D12_VIDEO_ENCODER_LEVEL_SETTING EncodeLevel; - UINT ResolutionsListCount; - [annotation("_Field_size_full_(ResolutionsListCount)")] const D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC* pResolutionList; -} D3D12_VIDEO_ENCODER_HEAP_DESC; - -typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_HEAP_SIZE { - D3D12_VIDEO_ENCODER_HEAP_DESC HeapDesc; // input - BOOL IsSupported; // output - UINT64 MemoryPoolL0Size; // output - UINT64 MemoryPoolL1Size; // output -} D3D12_FEATURE_DATA_VIDEO_ENCODER_HEAP_SIZE; - -typedef enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAGS -{ - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_NONE = 0x0, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_CABAC_ENCODING_SUPPORT = 0x1, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_INTRA_SLICE_CONSTRAINED_ENCODING_SUPPORT = 0x2, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_BFRAME_LTR_COMBINED_SUPPORT = 0x4, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_ADAPTIVE_8x8_TRANSFORM_ENCODING_SUPPORT = 0x8, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_DIRECT_SPATIAL_ENCODING_SUPPORT = 0x10, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_DIRECT_TEMPORAL_ENCODING_SUPPORT = 0x20, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_CONSTRAINED_INTRAPREDICTION_SUPPORT = 0x40, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_NUM_REF_IDX_ACTIVE_OVERRIDE_FLAG_SLICE_SUPPORT = 0x80, -} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAGS)") - -typedef enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODES { - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_0_ALL_LUMA_CHROMA_SLICE_BLOCK_EDGES_ALWAYS_FILTERED = 0, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_1_DISABLE_ALL_SLICE_BLOCK_EDGES = 1, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_2_DISABLE_SLICE_BOUNDARIES_BLOCKS = 2, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_3_USE_TWO_STAGE_DEBLOCKING = 3, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_4_DISABLE_CHROMA_BLOCK_EDGES = 4, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_5_DISABLE_CHROMA_BLOCK_EDGES_AND_LUMA_BOUNDARIES = 5, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_6_DISABLE_CHROMA_BLOCK_EDGES_AND_USE_LUMA_TWO_STAGE_DEBLOCKING = 6, -} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODES; - -typedef enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAGS { - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAG_NONE = 0x0, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAG_0_ALL_LUMA_CHROMA_SLICE_BLOCK_EDGES_ALWAYS_FILTERED = (1 << D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_0_ALL_LUMA_CHROMA_SLICE_BLOCK_EDGES_ALWAYS_FILTERED), - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAG_1_DISABLE_ALL_SLICE_BLOCK_EDGES = (1 << D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_1_DISABLE_ALL_SLICE_BLOCK_EDGES), - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAG_2_DISABLE_SLICE_BOUNDARIES_BLOCKS = (1 << D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_2_DISABLE_SLICE_BOUNDARIES_BLOCKS), - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAG_3_USE_TWO_STAGE_DEBLOCKING = (1 << D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_3_USE_TWO_STAGE_DEBLOCKING), - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAG_4_DISABLE_CHROMA_BLOCK_EDGES = (1 << D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_4_DISABLE_CHROMA_BLOCK_EDGES), - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAG_5_DISABLE_CHROMA_BLOCK_EDGES_AND_LUMA_BOUNDARIES = (1 << D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_5_DISABLE_CHROMA_BLOCK_EDGES_AND_LUMA_BOUNDARIES), - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAG_6_DISABLE_CHROMA_BLOCK_EDGES_AND_USE_LUMA_TWO_STAGE_DEBLOCKING = (1 << D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_6_DISABLE_CHROMA_BLOCK_EDGES_AND_USE_LUMA_TWO_STAGE_DEBLOCKING), -} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAGS)") - -typedef struct D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264 { - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAGS SupportFlags; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAGS DisableDeblockingFilterSupportedModes; -} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264; - -typedef enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS -{ - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_NONE = 0x0, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_BFRAME_LTR_COMBINED_SUPPORT = 0x1, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_INTRA_SLICE_CONSTRAINED_ENCODING_SUPPORT = 0x2, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_CONSTRAINED_INTRAPREDICTION_SUPPORT = 0x4, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_SAO_FILTER_SUPPORT = 0x8, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_ASYMETRIC_MOTION_PARTITION_SUPPORT = 0x10, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_ASYMETRIC_MOTION_PARTITION_REQUIRED = 0x20, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_TRANSFORM_SKIP_SUPPORT = 0x40, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_DISABLING_LOOP_FILTER_ACROSS_SLICES_SUPPORT = 0x80, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_P_FRAMES_IMPLEMENTED_AS_LOW_DELAY_B_FRAMES = 0x100, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_NUM_REF_IDX_ACTIVE_OVERRIDE_FLAG_SLICE_SUPPORT = 0x200, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_TRANSFORM_SKIP_ROTATION_ENABLED_SUPPORT = 0x400, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_TRANSFORM_SKIP_ROTATION_ENABLED_REQUIRED = 0x800, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_TRANSFORM_SKIP_CONTEXT_ENABLED_SUPPORT = 0x1000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_TRANSFORM_SKIP_CONTEXT_ENABLED_REQUIRED = 0x2000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_IMPLICIT_RDPCM_ENABLED_SUPPORT = 0x4000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_IMPLICIT_RDPCM_ENABLED_REQUIRED = 0x8000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_EXPLICIT_RDPCM_ENABLED_SUPPORT = 0x10000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_EXPLICIT_RDPCM_ENABLED_REQUIRED = 0x20000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_EXTENDED_PRECISION_PROCESSING_SUPPORT = 0x40000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_EXTENDED_PRECISION_PROCESSING_REQUIRED = 0x80000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_INTRA_SMOOTHING_DISABLED_SUPPORT = 0x100000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_INTRA_SMOOTHING_DISABLED_REQUIRED = 0x200000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_HIGH_PRECISION_OFFSETS_ENABLED_SUPPORT = 0x400000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_HIGH_PRECISION_OFFSETS_ENABLED_REQUIRED = 0x800000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_PERSISTENT_RICE_ADAPTATION_ENABLED_SUPPORT = 0x1000000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_PERSISTENT_RICE_ADAPTATION_ENABLED_REQUIRED = 0x2000000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_CABAC_BYPASS_ALIGNMENT_ENABLED_SUPPORT = 0x4000000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_CABAC_BYPASS_ALIGNMENT_ENABLED_REQUIRED = 0x8000000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_CROSS_COMPONENT_PREDICTION_ENABLED_FLAG_SUPPORT = 0x10000000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_CROSS_COMPONENT_PREDICTION_ENABLED_FLAG_REQUIRED = 0x20000000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_CHROMA_QP_OFFSET_LIST_ENABLED_FLAG_SUPPORT = 0x40000000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_CHROMA_QP_OFFSET_LIST_ENABLED_FLAG_REQUIRED = 0x80000000, // 2^31 - 32 bit integer enum type - -} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS)") - -typedef enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE { - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE_8x8 = 0, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE_16x16 = 1, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE_32x32 = 2, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE_64x64 = 3, -} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE; - -typedef enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE { - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE_4x4 = 0, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE_8x8 = 1, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE_16x16 = 2, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE_32x32 = 3, -} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE; - -typedef struct D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC { - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS SupportFlags; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE MinLumaCodingUnitSize; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE MaxLumaCodingUnitSize; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE MinLumaTransformUnitSize; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE MaxLumaTransformUnitSize; - UCHAR max_transform_hierarchy_depth_inter; - UCHAR max_transform_hierarchy_depth_intra; -} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC; - - -typedef enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS1 -{ - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG1_NONE = 0x0, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG1_SEPARATE_COLOUR_PLANE_SUPPORT = 0x1, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG1_SEPARATE_COLOUR_PLANE_REQUIRED = 0x2, -} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS1; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS1)") - -typedef struct D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC1 { - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS SupportFlags; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE MinLumaCodingUnitSize; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE MaxLumaCodingUnitSize; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE MinLumaTransformUnitSize; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE MaxLumaTransformUnitSize; - UCHAR max_transform_hierarchy_depth_inter; - UCHAR max_transform_hierarchy_depth_intra; - UINT allowed_diff_cu_chroma_qp_offset_depth_values; - UINT allowed_log2_sao_offset_scale_luma_values; - UINT allowed_log2_sao_offset_scale_chroma_values; - UINT allowed_log2_max_transform_skip_block_size_minus2_values; - UINT allowed_chroma_qp_offset_list_len_minus1_values; - UINT allowed_cb_qp_offset_list_values[6]; - UINT allowed_cr_qp_offset_list_values[6]; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS1 SupportFlags1; -} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC1; - -typedef struct D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT { - UINT DataSize; - union - { - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264* pH264Support; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC* pHEVCSupport; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC1* pHEVCSupport1; - D3D12_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION_SUPPORT* pAV1Support; - }; -} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT; - -typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT { - UINT NodeIndex; // input - D3D12_VIDEO_ENCODER_CODEC Codec; // input - D3D12_VIDEO_ENCODER_PROFILE_DESC Profile; // input - BOOL IsSupported; // output - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT CodecSupportLimits; // input/output -} D3D12_FEATURE_DATA_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT; - -typedef struct D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT_H264 { - UINT MaxL0ReferencesForP; - UINT MaxL0ReferencesForB; - UINT MaxL1ReferencesForB; - UINT MaxLongTermReferences; - UINT MaxDPBCapacity; -} D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT_H264; - -typedef struct D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT_HEVC { - UINT MaxL0ReferencesForP; - UINT MaxL0ReferencesForB; - UINT MaxL1ReferencesForB; - UINT MaxLongTermReferences; - UINT MaxDPBCapacity; -} D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT_HEVC; - -typedef struct D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT { - UINT DataSize; - union - { - D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT_H264* pH264Support; - D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT_HEVC* pHEVCSupport; - D3D12_VIDEO_ENCODER_CODEC_AV1_PICTURE_CONTROL_SUPPORT* pAV1Support; - }; -} D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT; - -typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT { - UINT NodeIndex; // input - D3D12_VIDEO_ENCODER_CODEC Codec; // input - D3D12_VIDEO_ENCODER_PROFILE_DESC Profile; // input - BOOL IsSupported; // output - D3D12_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT PictureSupport; // output -} D3D12_FEATURE_DATA_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT; - -typedef enum D3D12_VIDEO_ENCODER_SUPPORT_FLAGS -{ - D3D12_VIDEO_ENCODER_SUPPORT_FLAG_NONE = 0x0, - D3D12_VIDEO_ENCODER_SUPPORT_FLAG_GENERAL_SUPPORT_OK = 0x1, - D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_RECONFIGURATION_AVAILABLE = 0x2, - D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RESOLUTION_RECONFIGURATION_AVAILABLE = 0x4, - D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_VBV_SIZE_CONFIG_AVAILABLE = 0x8, - D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_FRAME_ANALYSIS_AVAILABLE = 0x10, - D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RECONSTRUCTED_FRAMES_REQUIRE_TEXTURE_ARRAYS = 0x20, - D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_DELTA_QP_AVAILABLE = 0x40, - D3D12_VIDEO_ENCODER_SUPPORT_FLAG_SUBREGION_LAYOUT_RECONFIGURATION_AVAILABLE = 0x80, - D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_ADJUSTABLE_QP_RANGE_AVAILABLE = 0x100, - D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_INITIAL_QP_AVAILABLE = 0x200, - D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_MAX_FRAME_SIZE_AVAILABLE = 0x400, - D3D12_VIDEO_ENCODER_SUPPORT_FLAG_SEQUENCE_GOP_RECONFIGURATION_AVAILABLE = 0x800, - D3D12_VIDEO_ENCODER_SUPPORT_FLAG_MOTION_ESTIMATION_PRECISION_MODE_LIMIT_AVAILABLE = 0x1000, - D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_EXTENSION1_SUPPORT = 0x2000, - D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_QUALITY_VS_SPEED_AVAILABLE = 0x4000, - D3D12_VIDEO_ENCODER_SUPPORT_FLAG_READABLE_RECONSTRUCTED_PICTURE_LAYOUT_AVAILABLE = 0x8000, - -} D3D12_VIDEO_ENCODER_SUPPORT_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_SUPPORT_FLAGS)") - -typedef enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAGS -{ - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_NONE = 0x0, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_USE_CONSTRAINED_INTRAPREDICTION = 0x1, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_USE_ADAPTIVE_8x8_TRANSFORM = 0x2, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_ENABLE_CABAC_ENCODING = 0x4, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_ALLOW_REQUEST_INTRA_CONSTRAINED_SLICES = 0x8, -} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAGS)") - -typedef enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_DIRECT_MODES { - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_DIRECT_MODES_DISABLED = 0, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_DIRECT_MODES_TEMPORAL = 1, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_DIRECT_MODES_SPATIAL = 2, -} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_DIRECT_MODES; - -typedef struct D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264 -{ - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAGS ConfigurationFlags; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_DIRECT_MODES DirectModeConfig; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODES DisableDeblockingFilterConfig; -} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264; - -typedef enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAGS -{ - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_NONE = 0x0, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_DISABLE_LOOP_FILTER_ACROSS_SLICES = 0x1, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_ALLOW_REQUEST_INTRA_CONSTRAINED_SLICES = 0x2, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_ENABLE_SAO_FILTER = 0x4, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_ENABLE_LONG_TERM_REFERENCES = 0x8, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_USE_ASYMETRIC_MOTION_PARTITION = 0x10, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_ENABLE_TRANSFORM_SKIPPING = 0x20, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_USE_CONSTRAINED_INTRAPREDICTION = 0x40, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_TRANSFORM_SKIP_ROTATION = 0x80, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_TRANSFORM_SKIP_CONTEXT = 0x100, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_IMPLICIT_RDPCM = 0x200, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_EXPLICIT_RDPCM = 0x400, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_EXTENDED_PRECISION_PROCESSING = 0x800, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_INTRA_SMOOTHING_DISABLED = 0x1000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_HIGH_PRECISION_OFFSETS = 0x2000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_PERSISTENT_RICE_ADAPTATION = 0x4000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_CABAC_BYPASS_ALIGNMENT = 0x8000, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_SEPARATE_COLOUR_PLANE = 0x10000, -} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAGS)") - -typedef struct D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC { - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAGS ConfigurationFlags; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE MinLumaCodingUnitSize; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE MaxLumaCodingUnitSize; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE MinLumaTransformUnitSize; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE MaxLumaTransformUnitSize; - UCHAR max_transform_hierarchy_depth_inter; - UCHAR max_transform_hierarchy_depth_intra; -} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC; - -typedef struct D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION -{ - UINT DataSize; - union - { - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264* pH264Config; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC* pHEVCConfig; - D3D12_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION* pAV1Config; - }; -} D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION; - -typedef struct D3D12_VIDEO_ENCODER_INTRA_REFRESH -{ - D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE Mode; - UINT IntraRefreshDuration; -} D3D12_VIDEO_ENCODER_INTRA_REFRESH; - - -typedef enum D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE -{ - D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE_MAXIMUM = 0, - D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE_FULL_PIXEL = 1, - D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE_HALF_PIXEL = 2, - D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE_QUARTER_PIXEL = 3, - D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE_EIGHTH_PIXEL = 4, -} D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE; - -typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS -{ - UINT MaxSubregionsNumber; - UINT MaxIntraRefreshFrameDuration; - UINT SubregionBlockPixelsSize; - UINT QPMapRegionPixelsSize; -} D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS; - -typedef enum D3D12_VIDEO_ENCODER_VALIDATION_FLAGS -{ - D3D12_VIDEO_ENCODER_VALIDATION_FLAG_NONE = 0x0, - D3D12_VIDEO_ENCODER_VALIDATION_FLAG_CODEC_NOT_SUPPORTED = 0x1, - D3D12_VIDEO_ENCODER_VALIDATION_FLAG_INPUT_FORMAT_NOT_SUPPORTED = 0x8, - D3D12_VIDEO_ENCODER_VALIDATION_FLAG_CODEC_CONFIGURATION_NOT_SUPPORTED = 0x10, - D3D12_VIDEO_ENCODER_VALIDATION_FLAG_RATE_CONTROL_MODE_NOT_SUPPORTED = 0x20, - D3D12_VIDEO_ENCODER_VALIDATION_FLAG_RATE_CONTROL_CONFIGURATION_NOT_SUPPORTED = 0x40, - D3D12_VIDEO_ENCODER_VALIDATION_FLAG_INTRA_REFRESH_MODE_NOT_SUPPORTED = 0x80, - D3D12_VIDEO_ENCODER_VALIDATION_FLAG_SUBREGION_LAYOUT_MODE_NOT_SUPPORTED = 0x100, - D3D12_VIDEO_ENCODER_VALIDATION_FLAG_RESOLUTION_NOT_SUPPORTED_IN_LIST = 0x200, - D3D12_VIDEO_ENCODER_VALIDATION_FLAG_GOP_STRUCTURE_NOT_SUPPORTED = 0x800, - D3D12_VIDEO_ENCODER_VALIDATION_FLAG_SUBREGION_LAYOUT_DATA_NOT_SUPPORTED = 0x1000, - D3D12_VIDEO_ENCODER_VALIDATION_FLAG_QPMAP_NOT_SUPPORTED = 0x2000, - D3D12_VIDEO_ENCODER_VALIDATION_FLAG_DIRTY_REGIONS_NOT_SUPPORTED = 0x4000, - D3D12_VIDEO_ENCODER_VALIDATION_FLAG_MOTION_SEARCH_NOT_SUPPORTED = 0x8000, -} D3D12_VIDEO_ENCODER_VALIDATION_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_VALIDATION_FLAGS)") - -typedef struct D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264 -{ - UINT GOPLength; - UINT PPicturePeriod; - UCHAR pic_order_cnt_type; - UCHAR log2_max_frame_num_minus4; - UCHAR log2_max_pic_order_cnt_lsb_minus4; -} D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264; - -typedef struct D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_HEVC -{ - UINT GOPLength; - UINT PPicturePeriod; - UCHAR log2_max_pic_order_cnt_lsb_minus4; -} D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_HEVC; - -typedef struct D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE -{ - UINT DataSize; - union - { - D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264* pH264GroupOfPictures; - D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_HEVC* pHEVCGroupOfPictures; - D3D12_VIDEO_ENCODER_AV1_SEQUENCE_STRUCTURE* pAV1SequenceStructure; - }; -} D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE; - -typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT -{ - // input - UINT NodeIndex; - D3D12_VIDEO_ENCODER_CODEC Codec; - DXGI_FORMAT InputFormat; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION CodecConfiguration; - D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE CodecGopSequence; - D3D12_VIDEO_ENCODER_RATE_CONTROL RateControl; - D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE IntraRefresh; - D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE SubregionFrameEncoding; - UINT ResolutionsListCount; - const D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC* pResolutionList; - UINT MaxReferenceFramesInDPB; - - // single value output - D3D12_VIDEO_ENCODER_VALIDATION_FLAGS ValidationFlags; - D3D12_VIDEO_ENCODER_SUPPORT_FLAGS SupportFlags; - D3D12_VIDEO_ENCODER_PROFILE_DESC SuggestedProfile; - D3D12_VIDEO_ENCODER_LEVEL_SETTING SuggestedLevel; // assuming max resolution from input list - - // resolution dependent output - [annotation("_Field_size_full_(ResolutionsListCount)")] D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS* pResolutionDependentSupport; -} D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT; - -typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_SLICES -{ - // Mutually exclusive options according to selected mode - union - { - // Use with mode: D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_BYTES_PER_SUBREGION - UINT MaxBytesPerSlice; - - // Use with mode: D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_SQUARE_UNITS_PER_SUBREGION_ROW_UNALIGNED - UINT NumberOfCodingUnitsPerSlice; - - // Use with mode: D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_UNIFORM_PARTITIONING_ROWS_PER_SUBREGION - UINT NumberOfRowsPerSlice; - - // Use with mode: D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_UNIFORM_PARTITIONING_SUBREGIONS_PER_FRAME - UINT NumberOfSlicesPerFrame; - }; -} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_SLICES; - -typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA -{ - UINT DataSize; - union - { - const D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_SLICES* pSlicesPartition_H264; - const D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_SLICES* pSlicesPartition_HEVC; - const D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA_TILES* pTilesPartition_AV1; - }; - -} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA; - -typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT1 -{ - /* Below match existing D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT */ - UINT NodeIndex; - D3D12_VIDEO_ENCODER_CODEC Codec; - DXGI_FORMAT InputFormat; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION CodecConfiguration; - D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE CodecGopSequence; - D3D12_VIDEO_ENCODER_RATE_CONTROL RateControl; - D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE IntraRefresh; - D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE SubregionFrameEncoding; - UINT ResolutionsListCount; - const D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC* pResolutionList; - UINT MaxReferenceFramesInDPB; - D3D12_VIDEO_ENCODER_VALIDATION_FLAGS ValidationFlags; - D3D12_VIDEO_ENCODER_SUPPORT_FLAGS SupportFlags; - D3D12_VIDEO_ENCODER_PROFILE_DESC SuggestedProfile; - D3D12_VIDEO_ENCODER_LEVEL_SETTING SuggestedLevel; - [annotation("_Field_size_full_(ResolutionsListCount)")] D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS* pResolutionDependentSupport; - - /* Below are new arguments for D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT1 */ - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA SubregionFrameEncodingData; // input - UINT MaxQualityVsSpeed; -} D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT1; - -typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOURCE_REQUIREMENTS -{ - UINT NodeIndex; // input - D3D12_VIDEO_ENCODER_CODEC Codec; // input - D3D12_VIDEO_ENCODER_PROFILE_DESC Profile; // input - DXGI_FORMAT InputFormat; // input - D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC PictureTargetResolution; // input - - BOOL IsSupported; // output - UINT CompressedBitstreamBufferAccessAlignment; // output - UINT EncoderMetadataBufferAccessAlignment; // output - UINT MaxEncoderOutputMetadataBufferSize; // output -} D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOURCE_REQUIREMENTS; - -// -// Video Encoder creation API -// - -typedef enum D3D12_VIDEO_ENCODER_FLAGS -{ - D3D12_VIDEO_ENCODER_FLAG_NONE = 0x0, -} D3D12_VIDEO_ENCODER_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_FLAGS)") - -typedef struct D3D12_VIDEO_ENCODER_DESC -{ - UINT NodeMask; - D3D12_VIDEO_ENCODER_FLAGS Flags; - D3D12_VIDEO_ENCODER_CODEC EncodeCodec; - D3D12_VIDEO_ENCODER_PROFILE_DESC EncodeProfile; - DXGI_FORMAT InputFormat; - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION CodecConfiguration; - D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE MaxMotionEstimationPrecision; -} D3D12_VIDEO_ENCODER_DESC; - -[uuid(2E0D212D-8DF9-44A6-A770-BB289B182737), object, local, pointer_default(unique)] -interface ID3D12VideoEncoder - : ID3D12Pageable -{ - UINT GetNodeMask(); - D3D12_VIDEO_ENCODER_FLAGS GetEncoderFlags(); - D3D12_VIDEO_ENCODER_CODEC GetCodec(); - HRESULT GetCodecProfile([annotation("_Inout_")] D3D12_VIDEO_ENCODER_PROFILE_DESC dstProfile); - HRESULT GetCodecConfiguration([annotation("_Inout_")] D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION dstCodecConfig); - DXGI_FORMAT GetInputFormat(); - D3D12_VIDEO_ENCODER_MOTION_ESTIMATION_PRECISION_MODE GetMaxMotionEstimationPrecision(); -} - -[uuid(22B35D96-876A-44C0-B25E-FB8C9C7F1C4A), object, local, pointer_default(unique)] -interface ID3D12VideoEncoderHeap - : ID3D12Pageable -{ - UINT GetNodeMask(); - D3D12_VIDEO_ENCODER_HEAP_FLAGS GetEncoderHeapFlags(); - D3D12_VIDEO_ENCODER_CODEC GetCodec(); - HRESULT GetCodecProfile([annotation("_Inout_")] D3D12_VIDEO_ENCODER_PROFILE_DESC dstProfile); - HRESULT GetCodecLevel([annotation("_Inout_")] D3D12_VIDEO_ENCODER_LEVEL_SETTING dstLevel); - UINT GetResolutionListCount(); - HRESULT GetResolutionList( - const UINT ResolutionsListCount, - [annotation("_Out_writes_(ResolutionsListCount)")] D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC* pResolutionList); -} - -[uuid(4243ADB4-3A32-4666-973C-0CCC5625DC44), object, local, pointer_default(unique)] -interface ID3D12VideoDevice3 - : ID3D12VideoDevice2 -{ - - HRESULT CreateVideoEncoder( - [annotation("_In_")] const D3D12_VIDEO_ENCODER_DESC* pDesc, - [annotation("_In_")] REFIID riid, // Expected: IID_ID3D12VideoEncoder, - [annotation("_COM_Outptr_")] void** ppVideoEncoder); - - HRESULT CreateVideoEncoderHeap( - [annotation("_In_")] const D3D12_VIDEO_ENCODER_HEAP_DESC* pDesc, - [annotation("_In_")] REFIID riid, // Expected: IID_ID3D12VideoEncoderHeap, - [annotation("_COM_Outptr_")] void** ppVideoEncoderHeap); - -} - -// -// Video Encoder operation API -// - - -typedef enum D3D12_VIDEO_ENCODER_FRAME_TYPE_H264 -{ - D3D12_VIDEO_ENCODER_FRAME_TYPE_H264_I_FRAME = 0, - D3D12_VIDEO_ENCODER_FRAME_TYPE_H264_P_FRAME = 1, - D3D12_VIDEO_ENCODER_FRAME_TYPE_H264_B_FRAME = 2, - D3D12_VIDEO_ENCODER_FRAME_TYPE_H264_IDR_FRAME = 3, -} D3D12_VIDEO_ENCODER_FRAME_TYPE_H264; - - -typedef struct D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_H264 -{ - UINT ReconstructedPictureResourceIndex; - BOOL IsLongTermReference; - UINT LongTermPictureIdx; - UINT PictureOrderCountNumber; - UINT FrameDecodingOrderNumber; - UINT TemporalLayerIndex; -} D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_H264; - -typedef enum D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAGS -{ - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAG_NONE = 0x0, - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAG_REQUEST_INTRA_CONSTRAINED_SLICES = 0x1, - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAG_REQUEST_NUM_REF_IDX_ACTIVE_OVERRIDE_FLAG_SLICE = 0x2, -} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAGS)") - -typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION -{ - UCHAR memory_management_control_operation; - UINT difference_of_pic_nums_minus1; - UINT long_term_pic_num; - UINT long_term_frame_idx; - UINT max_long_term_frame_idx_plus1; -} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION; - -typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION -{ - UCHAR modification_of_pic_nums_idc; - UINT abs_diff_pic_num_minus1; - UINT long_term_pic_num; -} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION; - -typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264 -{ - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAGS Flags; - D3D12_VIDEO_ENCODER_FRAME_TYPE_H264 FrameType; - UINT pic_parameter_set_id; - UINT idr_pic_id; - UINT PictureOrderCountNumber; - UINT FrameDecodingOrderNumber; - UINT TemporalLayerIndex; - UINT List0ReferenceFramesCount; - [annotation("_Field_size_full_(List0ReferenceFramesCount)")] UINT* pList0ReferenceFrames; - UINT List1ReferenceFramesCount; - [annotation("_Field_size_full_(List1ReferenceFramesCount)")] UINT* pList1ReferenceFrames; - UINT ReferenceFramesReconPictureDescriptorsCount; - [annotation("_Field_size_full_(ReferenceFramesReconPictureDescriptorsCount)")] D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_H264* pReferenceFramesReconPictureDescriptors; - UCHAR adaptive_ref_pic_marking_mode_flag; - UINT RefPicMarkingOperationsCommandsCount; - [annotation("_Field_size_full_(RefPicMarkingOperationsCommandsCount)")] D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION* pRefPicMarkingOperationsCommands; - UINT List0RefPicModificationsCount; - [annotation("_Field_size_full_(List0RefPicModificationsCount)")] D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION* pList0RefPicModifications; - UINT List1RefPicModificationsCount; - [annotation("_Field_size_full_(List1RefPicModificationsCount)")] D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION* pList1RefPicModifications; - UINT QPMapValuesCount; - [annotation("_Field_size_full_(QPMapValuesCount)")] INT8 *pRateControlQPMap; -} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264; - -typedef enum D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC -{ - D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC_I_FRAME = 0, - D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC_P_FRAME = 1, - D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC_B_FRAME = 2, - D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC_IDR_FRAME = 3, -} D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC; - -typedef struct D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_HEVC -{ - UINT ReconstructedPictureResourceIndex; - BOOL IsRefUsedByCurrentPic; - BOOL IsLongTermReference; - UINT PictureOrderCountNumber; - UINT TemporalLayerIndex; -} D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_HEVC; - -typedef enum D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS -{ - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAG_NONE = 0x0, - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAG_REQUEST_INTRA_CONSTRAINED_SLICES = 0x1, - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAG_REQUEST_NUM_REF_IDX_ACTIVE_OVERRIDE_FLAG_SLICE = 0x2, - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAG_CROSS_COMPONENT_PREDICTION = 0x4, - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAG_CHROMA_QP_OFFSET_LIST = 0x8, -} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS)") - -typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC -{ - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS Flags; - D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC FrameType; - UINT slice_pic_parameter_set_id; - UINT PictureOrderCountNumber; - UINT TemporalLayerIndex; - UINT List0ReferenceFramesCount; - [annotation("_Field_size_full_(List0ReferenceFramesCount)")] UINT* pList0ReferenceFrames; - UINT List1ReferenceFramesCount; - [annotation("_Field_size_full_(List1ReferenceFramesCount)")] UINT* pList1ReferenceFrames; - UINT ReferenceFramesReconPictureDescriptorsCount; - [annotation("_Field_size_full_(ReferenceFramesReconPictureDescriptorsCount)")] D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_HEVC* pReferenceFramesReconPictureDescriptors; - UINT List0RefPicModificationsCount; - [annotation("_Field_size_full_(List0RefPicModificationsCount)")] UINT* pList0RefPicModifications; - UINT List1RefPicModificationsCount; - [annotation("_Field_size_full_(List1RefPicModificationsCount)")] UINT* pList1RefPicModifications; - UINT QPMapValuesCount; - [annotation("_Field_size_full_(QPMapValuesCount)")] INT8 *pRateControlQPMap; -} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC; - -typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC1 -{ - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS Flags; - D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC FrameType; - UINT slice_pic_parameter_set_id; - UINT PictureOrderCountNumber; - UINT TemporalLayerIndex; - UINT List0ReferenceFramesCount; - [annotation("_Field_size_full_(List0ReferenceFramesCount)")] UINT* pList0ReferenceFrames; - UINT List1ReferenceFramesCount; - [annotation("_Field_size_full_(List1ReferenceFramesCount)")] UINT* pList1ReferenceFrames; - UINT ReferenceFramesReconPictureDescriptorsCount; - [annotation("_Field_size_full_(ReferenceFramesReconPictureDescriptorsCount)")] D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_HEVC* pReferenceFramesReconPictureDescriptors; - UINT List0RefPicModificationsCount; - [annotation("_Field_size_full_(List0RefPicModificationsCount)")] UINT* pList0RefPicModifications; - UINT List1RefPicModificationsCount; - [annotation("_Field_size_full_(List1RefPicModificationsCount)")] UINT* pList1RefPicModifications; - UINT QPMapValuesCount; - [annotation("_Field_size_full_(QPMapValuesCount)")] INT8* pRateControlQPMap; - UCHAR diff_cu_chroma_qp_offset_depth; - UCHAR log2_sao_offset_scale_luma; - UCHAR log2_sao_offset_scale_chroma; - UCHAR log2_max_transform_skip_block_size_minus2; - UCHAR chroma_qp_offset_list_len_minus1; - CHAR cb_qp_offset_list[6]; - CHAR cr_qp_offset_list[6]; -} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC1; - -typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA -{ - UINT DataSize; - union - { - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264* pH264PicData; - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC* pHEVCPicData; - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC1* pHEVCPicData1; - D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA* pAV1PicData; - }; -} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA; - -typedef struct D3D12_VIDEO_ENCODE_REFERENCE_FRAMES -{ - UINT NumTexture2Ds; - [annotation("_Field_size_full_(NumTexture2Ds)")] ID3D12Resource** ppTexture2Ds; - [annotation("_Field_size_full_(NumTexture2Ds)")] UINT* pSubresources; -} D3D12_VIDEO_ENCODE_REFERENCE_FRAMES; - -typedef enum D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAGS -{ - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAG_NONE = 0x0, - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAG_USED_AS_REFERENCE_PICTURE = 0x1, -} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAGS)") - -typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC -{ - UINT IntraRefreshFrameIndex; - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAGS Flags; - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA PictureControlCodecData; - D3D12_VIDEO_ENCODE_REFERENCE_FRAMES ReferenceFrames; -} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC; - -typedef enum D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAGS -{ - D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAG_NONE = 0x0, - D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAG_RESOLUTION_CHANGE = 0x1, - D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAG_RATE_CONTROL_CHANGE = 0x2, - D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAG_SUBREGION_LAYOUT_CHANGE = 0x4, - D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAG_REQUEST_INTRA_REFRESH = 0x8, - D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAG_GOP_SEQUENCE_CHANGE = 0x10, -} D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAGS)") - -typedef struct D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_DESC -{ - D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAGS Flags; - D3D12_VIDEO_ENCODER_INTRA_REFRESH IntraRefreshConfig; - D3D12_VIDEO_ENCODER_RATE_CONTROL RateControl; - D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC PictureTargetResolution; - D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE SelectedLayoutMode; - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA FrameSubregionsLayoutData; - D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE CodecGopSequence; -} D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_DESC; - -// -// Video Encoder operation commands API -// - -typedef struct D3D12_VIDEO_ENCODER_ENCODEFRAME_INPUT_ARGUMENTS -{ - D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_DESC SequenceControlDesc; - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC PictureControlDesc; - ID3D12Resource *pInputFrame; - UINT InputFrameSubresource; - UINT CurrentFrameBitstreamMetadataSize; -} D3D12_VIDEO_ENCODER_ENCODEFRAME_INPUT_ARGUMENTS; - -typedef struct D3D12_VIDEO_ENCODER_COMPRESSED_BITSTREAM -{ - ID3D12Resource* pBuffer; - UINT64 FrameStartOffset; -} D3D12_VIDEO_ENCODER_COMPRESSED_BITSTREAM; - -typedef struct D3D12_VIDEO_ENCODER_RECONSTRUCTED_PICTURE -{ - ID3D12Resource *pReconstructedPicture; - UINT ReconstructedPictureSubresource; -} D3D12_VIDEO_ENCODER_RECONSTRUCTED_PICTURE; - -typedef struct D3D12_VIDEO_ENCODER_FRAME_SUBREGION_METADATA -{ - UINT64 bSize; - UINT64 bStartOffset; - UINT64 bHeaderSize; -} D3D12_VIDEO_ENCODER_FRAME_SUBREGION_METADATA; - -typedef enum D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAGS -{ - D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAG_NO_ERROR = 0x0, - D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAG_CODEC_PICTURE_CONTROL_NOT_SUPPORTED = 0x1, - D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAG_SUBREGION_LAYOUT_CONFIGURATION_NOT_SUPPORTED = 0x2, - D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAG_INVALID_REFERENCE_PICTURES = 0x4, - D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAG_RECONFIGURATION_REQUEST_NOT_SUPPORTED = 0x8, - D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAG_INVALID_METADATA_BUFFER_SOURCE = 0x10, -} D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAGS; -cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAGS)") - -typedef struct D3D12_VIDEO_ENCODER_OUTPUT_METADATA_STATISTICS -{ - UINT64 AverageQP; - UINT64 IntraCodingUnitsCount; - UINT64 InterCodingUnitsCount; - UINT64 SkipCodingUnitsCount; - UINT64 AverageMotionEstimationXDirection; - UINT64 AverageMotionEstimationYDirection; -} D3D12_VIDEO_ENCODER_OUTPUT_METADATA_STATISTICS; - -typedef struct D3D12_VIDEO_ENCODER_OUTPUT_METADATA -{ - UINT64 EncodeErrorFlags; // D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAGS - D3D12_VIDEO_ENCODER_OUTPUT_METADATA_STATISTICS EncodeStats; - UINT64 EncodedBitstreamWrittenBytesCount; - UINT64 WrittenSubregionsCount; -} D3D12_VIDEO_ENCODER_OUTPUT_METADATA; - -typedef struct D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER -{ - ID3D12Resource* pBuffer; - UINT64 Offset; -} D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER; - -typedef struct D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS -{ - D3D12_VIDEO_ENCODER_CODEC EncoderCodec; - D3D12_VIDEO_ENCODER_PROFILE_DESC EncoderProfile; - DXGI_FORMAT EncoderInputFormat; - D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC EncodedPictureEffectiveResolution; - D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER HWLayoutMetadata; -} D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS; - -typedef struct D3D12_VIDEO_ENCODER_RESOLVE_METADATA_OUTPUT_ARGUMENTS -{ - D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER ResolvedLayoutMetadata; -} D3D12_VIDEO_ENCODER_RESOLVE_METADATA_OUTPUT_ARGUMENTS; - -typedef struct D3D12_VIDEO_ENCODER_ENCODEFRAME_OUTPUT_ARGUMENTS -{ - D3D12_VIDEO_ENCODER_COMPRESSED_BITSTREAM Bitstream; - D3D12_VIDEO_ENCODER_RECONSTRUCTED_PICTURE ReconstructedPicture; - D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER EncoderOutputMetadata; -} D3D12_VIDEO_ENCODER_ENCODEFRAME_OUTPUT_ARGUMENTS; - -[uuid(895491e2-e701-46a9-9a1f-8d3480ed867a), object, local, pointer_default(unique)] -interface ID3D12VideoEncodeCommandList2 - : ID3D12VideoEncodeCommandList1 -{ - void EncodeFrame( - [annotation("_In_")] ID3D12VideoEncoder* pEncoder, - [annotation("_In_")] ID3D12VideoEncoderHeap *pHeap, - [annotation("_In_")] const D3D12_VIDEO_ENCODER_ENCODEFRAME_INPUT_ARGUMENTS *pInputArguments, - [annotation("_In_")] const D3D12_VIDEO_ENCODER_ENCODEFRAME_OUTPUT_ARGUMENTS *pOutputArguments); - - void ResolveEncoderOutputMetadata( - [annotation("_In_")] const D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS* pInputArguments, - [annotation("_In_")] const D3D12_VIDEO_ENCODER_RESOLVE_METADATA_OUTPUT_ARGUMENTS* pOutputArguments); -} - - -[uuid(7f027b22-1515-4e85-aa0d-026486580576), object, local, pointer_default(unique)] -interface ID3D12VideoEncodeCommandList3 - : ID3D12VideoEncodeCommandList2 -{ - - void Barrier( - UINT32 NumBarrierGroups, - [annotation("_In_reads_(NumBarrierGroups)")] const D3D12_BARRIER_GROUP *pBarrierGroups - ); -} - -cpp_quote("#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) */") -#pragma endregion - -cpp_quote( "DEFINE_GUID(IID_ID3D12VideoDecoderHeap,0x0946B7C9,0xEBF6,0x4047,0xBB,0x73,0x86,0x83,0xE2,0x7D,0xBB,0x1F);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12VideoDevice,0x1F052807,0x0B46,0x4ACC,0x8A,0x89,0x36,0x4F,0x79,0x37,0x18,0xA4);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12VideoDecoder,0xC59B6BDC,0x7720,0x4074,0xA1,0x36,0x17,0xA1,0x56,0x03,0x74,0x70);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12VideoProcessor,0x304FDB32,0xBEDE,0x410A,0x85,0x45,0x94,0x3A,0xC6,0xA4,0x61,0x38);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12VideoDecodeCommandList,0x3B60536E,0xAD29,0x4E64,0xA2,0x69,0xF8,0x53,0x83,0x7E,0x5E,0x53);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12VideoProcessCommandList,0xAEB2543A,0x167F,0x4682,0xAC,0xC8,0xD1,0x59,0xED,0x4A,0x62,0x09);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12VideoDecodeCommandList1,0xD52F011B,0xB56E,0x453C,0xA0,0x5A,0xA7,0xF3,0x11,0xC8,0xF4,0x72);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12VideoProcessCommandList1,0x542C5C4D,0x7596,0x434F,0x8C,0x93,0x4E,0xFA,0x67,0x66,0xF2,0x67);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12VideoMotionEstimator,0x33FDAE0E,0x098B,0x428F,0x87,0xBB,0x34,0xB6,0x95,0xDE,0x08,0xF8);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12VideoMotionVectorHeap,0x5BE17987,0x743A,0x4061,0x83,0x4B,0x23,0xD2,0x2D,0xAE,0xA5,0x05);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12VideoDevice1,0x981611AD,0xA144,0x4C83,0x98,0x90,0xF3,0x0E,0x26,0xD6,0x58,0xAB);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12VideoEncodeCommandList,0x8455293A,0x0CBD,0x4831,0x9B,0x39,0xFB,0xDB,0xAB,0x72,0x47,0x23);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12VideoDecoder1,0x79A2E5FB,0xCCD2,0x469A,0x9F,0xDE,0x19,0x5D,0x10,0x95,0x1F,0x7E);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12VideoDecoderHeap1,0xDA1D98C5,0x539F,0x41B2,0xBF,0x6B,0x11,0x98,0xA0,0x3B,0x6D,0x26);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12VideoProcessor1,0xF3CFE615,0x553F,0x425C,0x86,0xD8,0xEE,0x8C,0x1B,0x1F,0xB0,0x1C);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12VideoExtensionCommand,0x554E41E8,0xAE8E,0x4A8C,0xB7,0xD2,0x5B,0x4F,0x27,0x4A,0x30,0xE4);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12VideoDevice2,0xF019AC49,0xF838,0x4A95,0x9B,0x17,0x57,0x94,0x37,0xC8,0xF5,0x13);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12VideoDecodeCommandList2,0x6e120880,0xc114,0x4153,0x80,0x36,0xd2,0x47,0x05,0x1e,0x17,0x29);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12VideoDecodeCommandList3,0x2aee8c37,0x9562,0x42da,0x8a,0xbf,0x61,0xef,0xeb,0x2e,0x45,0x13);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12VideoProcessCommandList2,0xdb525ae4,0x6ad6,0x473c,0xba,0xa7,0x59,0xb2,0xe3,0x70,0x82,0xe4);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12VideoProcessCommandList3,0x1a0a4ca4,0x9f08,0x40ce,0x95,0x58,0xb4,0x11,0xfd,0x26,0x66,0xff);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12VideoEncodeCommandList1,0x94971eca,0x2bdb,0x4769,0x88,0xcf,0x36,0x75,0xea,0x75,0x7e,0xbc);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12VideoEncoder,0x2E0D212D,0x8DF9,0x44A6,0xA7,0x70,0xBB,0x28,0x9B,0x18,0x27,0x37);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12VideoEncoderHeap,0x22B35D96,0x876A,0x44C0,0xB2,0x5E,0xFB,0x8C,0x9C,0x7F,0x1C,0x4A);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12VideoDevice3,0x4243ADB4,0x3A32,0x4666,0x97,0x3C,0x0C,0xCC,0x56,0x25,0xDC,0x44);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12VideoEncodeCommandList2,0x895491e2,0xe701,0x46a9,0x9a,0x1f,0x8d,0x34,0x80,0xed,0x86,0x7a);" ) -cpp_quote( "DEFINE_GUID(IID_ID3D12VideoEncodeCommandList3,0x7f027b22,0x1515,0x4e85,0xaa,0x0d,0x02,0x64,0x86,0x58,0x05,0x76);" ) diff --git a/Juliet/src/Graphics/D3D12/AgilitySDK/d3dcommon.h b/Juliet/src/Graphics/D3D12/AgilitySDK/d3dcommon.h deleted file mode 100644 index 946f4da..0000000 --- a/Juliet/src/Graphics/D3D12/AgilitySDK/d3dcommon.h +++ /dev/null @@ -1,1105 +0,0 @@ -/*------------------------------------------------------------------------------------- - * - * Copyright (c) Microsoft Corporation - * Licensed under the MIT license - * - *-------------------------------------------------------------------------------------*/ - -/* this ALWAYS GENERATED file contains the definitions for the interfaces */ - - /* File created by MIDL compiler version 8.01.0628 */ -/* @@MIDL_FILE_HEADING( ) */ - -/* verify that the version is high enough to compile this file*/ -#ifndef __REQUIRED_RPCNDR_H_VERSION__ -#define __REQUIRED_RPCNDR_H_VERSION__ 500 -#endif - -/* verify that the version is high enough to compile this file*/ -#ifndef __REQUIRED_RPCSAL_H_VERSION__ -#define __REQUIRED_RPCSAL_H_VERSION__ 100 -#endif - -#include "rpc.h" -#include "rpcndr.h" - -#ifndef __RPCNDR_H_VERSION__ -#error this stub requires an updated version of -#endif /* __RPCNDR_H_VERSION__ */ - -#ifndef COM_NO_WINDOWS_H -#include "windows.h" -#include "ole2.h" -#endif /*COM_NO_WINDOWS_H*/ - -#ifndef __d3dcommon_h__ -#define __d3dcommon_h__ - -#if defined(_MSC_VER) && (_MSC_VER >= 1020) -#pragma once -#endif - -#ifndef DECLSPEC_XFGVIRT -#if defined(_CONTROL_FLOW_GUARD_XFG) -#define DECLSPEC_XFGVIRT(base, func) __declspec(xfg_virtual(base, func)) -#else -#define DECLSPEC_XFGVIRT(base, func) -#endif -#endif - -/* Forward Declarations */ - -#ifndef __ID3D10Blob_FWD_DEFINED__ -#define __ID3D10Blob_FWD_DEFINED__ -typedef interface ID3D10Blob ID3D10Blob; - -#endif /* __ID3D10Blob_FWD_DEFINED__ */ - -#ifndef __ID3DDestructionNotifier_FWD_DEFINED__ -#define __ID3DDestructionNotifier_FWD_DEFINED__ -typedef interface ID3DDestructionNotifier ID3DDestructionNotifier; - -#endif /* __ID3DDestructionNotifier_FWD_DEFINED__ */ - -/* header files for imported files */ -#include "oaidl.h" -#include "ocidl.h" - -#ifdef __cplusplus -extern "C"{ -#endif - -/* interface __MIDL_itf_d3dcommon_0000_0000 */ -/* [local] */ - -typedef -enum D3D_DRIVER_TYPE - { - D3D_DRIVER_TYPE_UNKNOWN = 0, - D3D_DRIVER_TYPE_HARDWARE = ( D3D_DRIVER_TYPE_UNKNOWN + 1 ) , - D3D_DRIVER_TYPE_REFERENCE = ( D3D_DRIVER_TYPE_HARDWARE + 1 ) , - D3D_DRIVER_TYPE_NULL = ( D3D_DRIVER_TYPE_REFERENCE + 1 ) , - D3D_DRIVER_TYPE_SOFTWARE = ( D3D_DRIVER_TYPE_NULL + 1 ) , - D3D_DRIVER_TYPE_WARP = ( D3D_DRIVER_TYPE_SOFTWARE + 1 ) - } D3D_DRIVER_TYPE; - -typedef -enum D3D_FEATURE_LEVEL - { - D3D_FEATURE_LEVEL_1_0_GENERIC = 0x100, - D3D_FEATURE_LEVEL_1_0_CORE = 0x1000, - D3D_FEATURE_LEVEL_9_1 = 0x9100, - D3D_FEATURE_LEVEL_9_2 = 0x9200, - D3D_FEATURE_LEVEL_9_3 = 0x9300, - D3D_FEATURE_LEVEL_10_0 = 0xa000, - D3D_FEATURE_LEVEL_10_1 = 0xa100, - D3D_FEATURE_LEVEL_11_0 = 0xb000, - D3D_FEATURE_LEVEL_11_1 = 0xb100, - D3D_FEATURE_LEVEL_12_0 = 0xc000, - D3D_FEATURE_LEVEL_12_1 = 0xc100, - D3D_FEATURE_LEVEL_12_2 = 0xc200 - } D3D_FEATURE_LEVEL; - -#define D3D_FL9_1_REQ_TEXTURE1D_U_DIMENSION 2048 -#define D3D_FL9_3_REQ_TEXTURE1D_U_DIMENSION 4096 -#define D3D_FL9_1_REQ_TEXTURE2D_U_OR_V_DIMENSION 2048 -#define D3D_FL9_3_REQ_TEXTURE2D_U_OR_V_DIMENSION 4096 -#define D3D_FL9_1_REQ_TEXTURECUBE_DIMENSION 512 -#define D3D_FL9_3_REQ_TEXTURECUBE_DIMENSION 4096 -#define D3D_FL9_1_REQ_TEXTURE3D_U_V_OR_W_DIMENSION 256 -#define D3D_FL9_1_DEFAULT_MAX_ANISOTROPY 2 -#define D3D_FL9_1_IA_PRIMITIVE_MAX_COUNT 65535 -#define D3D_FL9_2_IA_PRIMITIVE_MAX_COUNT 1048575 -#define D3D_FL9_1_SIMULTANEOUS_RENDER_TARGET_COUNT 1 -#define D3D_FL9_3_SIMULTANEOUS_RENDER_TARGET_COUNT 4 -#define D3D_FL9_1_MAX_TEXTURE_REPEAT 128 -#define D3D_FL9_2_MAX_TEXTURE_REPEAT 2048 -#define D3D_FL9_3_MAX_TEXTURE_REPEAT 8192 -typedef -enum D3D_PRIMITIVE_TOPOLOGY - { - D3D_PRIMITIVE_TOPOLOGY_UNDEFINED = 0, - D3D_PRIMITIVE_TOPOLOGY_POINTLIST = 1, - D3D_PRIMITIVE_TOPOLOGY_LINELIST = 2, - D3D_PRIMITIVE_TOPOLOGY_LINESTRIP = 3, - D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST = 4, - D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP = 5, - D3D_PRIMITIVE_TOPOLOGY_TRIANGLEFAN = 6, - D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ = 10, - D3D_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ = 11, - D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ = 12, - D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ = 13, - D3D_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST = 33, - D3D_PRIMITIVE_TOPOLOGY_2_CONTROL_POINT_PATCHLIST = 34, - D3D_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST = 35, - D3D_PRIMITIVE_TOPOLOGY_4_CONTROL_POINT_PATCHLIST = 36, - D3D_PRIMITIVE_TOPOLOGY_5_CONTROL_POINT_PATCHLIST = 37, - D3D_PRIMITIVE_TOPOLOGY_6_CONTROL_POINT_PATCHLIST = 38, - D3D_PRIMITIVE_TOPOLOGY_7_CONTROL_POINT_PATCHLIST = 39, - D3D_PRIMITIVE_TOPOLOGY_8_CONTROL_POINT_PATCHLIST = 40, - D3D_PRIMITIVE_TOPOLOGY_9_CONTROL_POINT_PATCHLIST = 41, - D3D_PRIMITIVE_TOPOLOGY_10_CONTROL_POINT_PATCHLIST = 42, - D3D_PRIMITIVE_TOPOLOGY_11_CONTROL_POINT_PATCHLIST = 43, - D3D_PRIMITIVE_TOPOLOGY_12_CONTROL_POINT_PATCHLIST = 44, - D3D_PRIMITIVE_TOPOLOGY_13_CONTROL_POINT_PATCHLIST = 45, - D3D_PRIMITIVE_TOPOLOGY_14_CONTROL_POINT_PATCHLIST = 46, - D3D_PRIMITIVE_TOPOLOGY_15_CONTROL_POINT_PATCHLIST = 47, - D3D_PRIMITIVE_TOPOLOGY_16_CONTROL_POINT_PATCHLIST = 48, - D3D_PRIMITIVE_TOPOLOGY_17_CONTROL_POINT_PATCHLIST = 49, - D3D_PRIMITIVE_TOPOLOGY_18_CONTROL_POINT_PATCHLIST = 50, - D3D_PRIMITIVE_TOPOLOGY_19_CONTROL_POINT_PATCHLIST = 51, - D3D_PRIMITIVE_TOPOLOGY_20_CONTROL_POINT_PATCHLIST = 52, - D3D_PRIMITIVE_TOPOLOGY_21_CONTROL_POINT_PATCHLIST = 53, - D3D_PRIMITIVE_TOPOLOGY_22_CONTROL_POINT_PATCHLIST = 54, - D3D_PRIMITIVE_TOPOLOGY_23_CONTROL_POINT_PATCHLIST = 55, - D3D_PRIMITIVE_TOPOLOGY_24_CONTROL_POINT_PATCHLIST = 56, - D3D_PRIMITIVE_TOPOLOGY_25_CONTROL_POINT_PATCHLIST = 57, - D3D_PRIMITIVE_TOPOLOGY_26_CONTROL_POINT_PATCHLIST = 58, - D3D_PRIMITIVE_TOPOLOGY_27_CONTROL_POINT_PATCHLIST = 59, - D3D_PRIMITIVE_TOPOLOGY_28_CONTROL_POINT_PATCHLIST = 60, - D3D_PRIMITIVE_TOPOLOGY_29_CONTROL_POINT_PATCHLIST = 61, - D3D_PRIMITIVE_TOPOLOGY_30_CONTROL_POINT_PATCHLIST = 62, - D3D_PRIMITIVE_TOPOLOGY_31_CONTROL_POINT_PATCHLIST = 63, - D3D_PRIMITIVE_TOPOLOGY_32_CONTROL_POINT_PATCHLIST = 64, - D3D10_PRIMITIVE_TOPOLOGY_UNDEFINED = D3D_PRIMITIVE_TOPOLOGY_UNDEFINED, - D3D10_PRIMITIVE_TOPOLOGY_POINTLIST = D3D_PRIMITIVE_TOPOLOGY_POINTLIST, - D3D10_PRIMITIVE_TOPOLOGY_LINELIST = D3D_PRIMITIVE_TOPOLOGY_LINELIST, - D3D10_PRIMITIVE_TOPOLOGY_LINESTRIP = D3D_PRIMITIVE_TOPOLOGY_LINESTRIP, - D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST = D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST, - D3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP = D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP, - D3D10_PRIMITIVE_TOPOLOGY_LINELIST_ADJ = D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ, - D3D10_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ = D3D_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ, - D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ = D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ, - D3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ = D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ, - D3D11_PRIMITIVE_TOPOLOGY_UNDEFINED = D3D_PRIMITIVE_TOPOLOGY_UNDEFINED, - D3D11_PRIMITIVE_TOPOLOGY_POINTLIST = D3D_PRIMITIVE_TOPOLOGY_POINTLIST, - D3D11_PRIMITIVE_TOPOLOGY_LINELIST = D3D_PRIMITIVE_TOPOLOGY_LINELIST, - D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP = D3D_PRIMITIVE_TOPOLOGY_LINESTRIP, - D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST = D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST, - D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP = D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP, - D3D11_PRIMITIVE_TOPOLOGY_LINELIST_ADJ = D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ, - D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ = D3D_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ, - D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ = D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ, - D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ = D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ, - D3D11_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_2_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_2_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_4_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_4_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_5_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_5_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_6_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_6_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_7_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_7_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_8_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_8_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_9_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_9_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_10_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_10_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_11_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_11_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_12_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_12_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_13_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_13_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_14_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_14_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_15_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_15_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_16_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_16_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_17_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_17_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_18_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_18_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_19_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_19_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_20_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_20_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_21_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_21_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_22_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_22_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_23_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_23_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_24_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_24_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_25_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_25_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_26_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_26_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_27_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_27_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_28_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_28_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_29_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_29_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_30_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_30_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_31_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_31_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_32_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_32_CONTROL_POINT_PATCHLIST - } D3D_PRIMITIVE_TOPOLOGY; - -typedef -enum D3D_PRIMITIVE - { - D3D_PRIMITIVE_UNDEFINED = 0, - D3D_PRIMITIVE_POINT = 1, - D3D_PRIMITIVE_LINE = 2, - D3D_PRIMITIVE_TRIANGLE = 3, - D3D_PRIMITIVE_LINE_ADJ = 6, - D3D_PRIMITIVE_TRIANGLE_ADJ = 7, - D3D_PRIMITIVE_1_CONTROL_POINT_PATCH = 8, - D3D_PRIMITIVE_2_CONTROL_POINT_PATCH = 9, - D3D_PRIMITIVE_3_CONTROL_POINT_PATCH = 10, - D3D_PRIMITIVE_4_CONTROL_POINT_PATCH = 11, - D3D_PRIMITIVE_5_CONTROL_POINT_PATCH = 12, - D3D_PRIMITIVE_6_CONTROL_POINT_PATCH = 13, - D3D_PRIMITIVE_7_CONTROL_POINT_PATCH = 14, - D3D_PRIMITIVE_8_CONTROL_POINT_PATCH = 15, - D3D_PRIMITIVE_9_CONTROL_POINT_PATCH = 16, - D3D_PRIMITIVE_10_CONTROL_POINT_PATCH = 17, - D3D_PRIMITIVE_11_CONTROL_POINT_PATCH = 18, - D3D_PRIMITIVE_12_CONTROL_POINT_PATCH = 19, - D3D_PRIMITIVE_13_CONTROL_POINT_PATCH = 20, - D3D_PRIMITIVE_14_CONTROL_POINT_PATCH = 21, - D3D_PRIMITIVE_15_CONTROL_POINT_PATCH = 22, - D3D_PRIMITIVE_16_CONTROL_POINT_PATCH = 23, - D3D_PRIMITIVE_17_CONTROL_POINT_PATCH = 24, - D3D_PRIMITIVE_18_CONTROL_POINT_PATCH = 25, - D3D_PRIMITIVE_19_CONTROL_POINT_PATCH = 26, - D3D_PRIMITIVE_20_CONTROL_POINT_PATCH = 27, - D3D_PRIMITIVE_21_CONTROL_POINT_PATCH = 28, - D3D_PRIMITIVE_22_CONTROL_POINT_PATCH = 29, - D3D_PRIMITIVE_23_CONTROL_POINT_PATCH = 30, - D3D_PRIMITIVE_24_CONTROL_POINT_PATCH = 31, - D3D_PRIMITIVE_25_CONTROL_POINT_PATCH = 32, - D3D_PRIMITIVE_26_CONTROL_POINT_PATCH = 33, - D3D_PRIMITIVE_27_CONTROL_POINT_PATCH = 34, - D3D_PRIMITIVE_28_CONTROL_POINT_PATCH = 35, - D3D_PRIMITIVE_29_CONTROL_POINT_PATCH = 36, - D3D_PRIMITIVE_30_CONTROL_POINT_PATCH = 37, - D3D_PRIMITIVE_31_CONTROL_POINT_PATCH = 38, - D3D_PRIMITIVE_32_CONTROL_POINT_PATCH = 39, - D3D10_PRIMITIVE_UNDEFINED = D3D_PRIMITIVE_UNDEFINED, - D3D10_PRIMITIVE_POINT = D3D_PRIMITIVE_POINT, - D3D10_PRIMITIVE_LINE = D3D_PRIMITIVE_LINE, - D3D10_PRIMITIVE_TRIANGLE = D3D_PRIMITIVE_TRIANGLE, - D3D10_PRIMITIVE_LINE_ADJ = D3D_PRIMITIVE_LINE_ADJ, - D3D10_PRIMITIVE_TRIANGLE_ADJ = D3D_PRIMITIVE_TRIANGLE_ADJ, - D3D11_PRIMITIVE_UNDEFINED = D3D_PRIMITIVE_UNDEFINED, - D3D11_PRIMITIVE_POINT = D3D_PRIMITIVE_POINT, - D3D11_PRIMITIVE_LINE = D3D_PRIMITIVE_LINE, - D3D11_PRIMITIVE_TRIANGLE = D3D_PRIMITIVE_TRIANGLE, - D3D11_PRIMITIVE_LINE_ADJ = D3D_PRIMITIVE_LINE_ADJ, - D3D11_PRIMITIVE_TRIANGLE_ADJ = D3D_PRIMITIVE_TRIANGLE_ADJ, - D3D11_PRIMITIVE_1_CONTROL_POINT_PATCH = D3D_PRIMITIVE_1_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_2_CONTROL_POINT_PATCH = D3D_PRIMITIVE_2_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_3_CONTROL_POINT_PATCH = D3D_PRIMITIVE_3_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_4_CONTROL_POINT_PATCH = D3D_PRIMITIVE_4_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_5_CONTROL_POINT_PATCH = D3D_PRIMITIVE_5_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_6_CONTROL_POINT_PATCH = D3D_PRIMITIVE_6_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_7_CONTROL_POINT_PATCH = D3D_PRIMITIVE_7_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_8_CONTROL_POINT_PATCH = D3D_PRIMITIVE_8_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_9_CONTROL_POINT_PATCH = D3D_PRIMITIVE_9_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_10_CONTROL_POINT_PATCH = D3D_PRIMITIVE_10_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_11_CONTROL_POINT_PATCH = D3D_PRIMITIVE_11_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_12_CONTROL_POINT_PATCH = D3D_PRIMITIVE_12_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_13_CONTROL_POINT_PATCH = D3D_PRIMITIVE_13_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_14_CONTROL_POINT_PATCH = D3D_PRIMITIVE_14_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_15_CONTROL_POINT_PATCH = D3D_PRIMITIVE_15_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_16_CONTROL_POINT_PATCH = D3D_PRIMITIVE_16_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_17_CONTROL_POINT_PATCH = D3D_PRIMITIVE_17_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_18_CONTROL_POINT_PATCH = D3D_PRIMITIVE_18_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_19_CONTROL_POINT_PATCH = D3D_PRIMITIVE_19_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_20_CONTROL_POINT_PATCH = D3D_PRIMITIVE_20_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_21_CONTROL_POINT_PATCH = D3D_PRIMITIVE_21_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_22_CONTROL_POINT_PATCH = D3D_PRIMITIVE_22_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_23_CONTROL_POINT_PATCH = D3D_PRIMITIVE_23_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_24_CONTROL_POINT_PATCH = D3D_PRIMITIVE_24_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_25_CONTROL_POINT_PATCH = D3D_PRIMITIVE_25_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_26_CONTROL_POINT_PATCH = D3D_PRIMITIVE_26_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_27_CONTROL_POINT_PATCH = D3D_PRIMITIVE_27_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_28_CONTROL_POINT_PATCH = D3D_PRIMITIVE_28_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_29_CONTROL_POINT_PATCH = D3D_PRIMITIVE_29_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_30_CONTROL_POINT_PATCH = D3D_PRIMITIVE_30_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_31_CONTROL_POINT_PATCH = D3D_PRIMITIVE_31_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_32_CONTROL_POINT_PATCH = D3D_PRIMITIVE_32_CONTROL_POINT_PATCH - } D3D_PRIMITIVE; - -typedef -enum D3D_SRV_DIMENSION - { - D3D_SRV_DIMENSION_UNKNOWN = 0, - D3D_SRV_DIMENSION_BUFFER = 1, - D3D_SRV_DIMENSION_TEXTURE1D = 2, - D3D_SRV_DIMENSION_TEXTURE1DARRAY = 3, - D3D_SRV_DIMENSION_TEXTURE2D = 4, - D3D_SRV_DIMENSION_TEXTURE2DARRAY = 5, - D3D_SRV_DIMENSION_TEXTURE2DMS = 6, - D3D_SRV_DIMENSION_TEXTURE2DMSARRAY = 7, - D3D_SRV_DIMENSION_TEXTURE3D = 8, - D3D_SRV_DIMENSION_TEXTURECUBE = 9, - D3D_SRV_DIMENSION_TEXTURECUBEARRAY = 10, - D3D_SRV_DIMENSION_BUFFEREX = 11, - D3D10_SRV_DIMENSION_UNKNOWN = D3D_SRV_DIMENSION_UNKNOWN, - D3D10_SRV_DIMENSION_BUFFER = D3D_SRV_DIMENSION_BUFFER, - D3D10_SRV_DIMENSION_TEXTURE1D = D3D_SRV_DIMENSION_TEXTURE1D, - D3D10_SRV_DIMENSION_TEXTURE1DARRAY = D3D_SRV_DIMENSION_TEXTURE1DARRAY, - D3D10_SRV_DIMENSION_TEXTURE2D = D3D_SRV_DIMENSION_TEXTURE2D, - D3D10_SRV_DIMENSION_TEXTURE2DARRAY = D3D_SRV_DIMENSION_TEXTURE2DARRAY, - D3D10_SRV_DIMENSION_TEXTURE2DMS = D3D_SRV_DIMENSION_TEXTURE2DMS, - D3D10_SRV_DIMENSION_TEXTURE2DMSARRAY = D3D_SRV_DIMENSION_TEXTURE2DMSARRAY, - D3D10_SRV_DIMENSION_TEXTURE3D = D3D_SRV_DIMENSION_TEXTURE3D, - D3D10_SRV_DIMENSION_TEXTURECUBE = D3D_SRV_DIMENSION_TEXTURECUBE, - D3D10_1_SRV_DIMENSION_UNKNOWN = D3D_SRV_DIMENSION_UNKNOWN, - D3D10_1_SRV_DIMENSION_BUFFER = D3D_SRV_DIMENSION_BUFFER, - D3D10_1_SRV_DIMENSION_TEXTURE1D = D3D_SRV_DIMENSION_TEXTURE1D, - D3D10_1_SRV_DIMENSION_TEXTURE1DARRAY = D3D_SRV_DIMENSION_TEXTURE1DARRAY, - D3D10_1_SRV_DIMENSION_TEXTURE2D = D3D_SRV_DIMENSION_TEXTURE2D, - D3D10_1_SRV_DIMENSION_TEXTURE2DARRAY = D3D_SRV_DIMENSION_TEXTURE2DARRAY, - D3D10_1_SRV_DIMENSION_TEXTURE2DMS = D3D_SRV_DIMENSION_TEXTURE2DMS, - D3D10_1_SRV_DIMENSION_TEXTURE2DMSARRAY = D3D_SRV_DIMENSION_TEXTURE2DMSARRAY, - D3D10_1_SRV_DIMENSION_TEXTURE3D = D3D_SRV_DIMENSION_TEXTURE3D, - D3D10_1_SRV_DIMENSION_TEXTURECUBE = D3D_SRV_DIMENSION_TEXTURECUBE, - D3D10_1_SRV_DIMENSION_TEXTURECUBEARRAY = D3D_SRV_DIMENSION_TEXTURECUBEARRAY, - D3D11_SRV_DIMENSION_UNKNOWN = D3D_SRV_DIMENSION_UNKNOWN, - D3D11_SRV_DIMENSION_BUFFER = D3D_SRV_DIMENSION_BUFFER, - D3D11_SRV_DIMENSION_TEXTURE1D = D3D_SRV_DIMENSION_TEXTURE1D, - D3D11_SRV_DIMENSION_TEXTURE1DARRAY = D3D_SRV_DIMENSION_TEXTURE1DARRAY, - D3D11_SRV_DIMENSION_TEXTURE2D = D3D_SRV_DIMENSION_TEXTURE2D, - D3D11_SRV_DIMENSION_TEXTURE2DARRAY = D3D_SRV_DIMENSION_TEXTURE2DARRAY, - D3D11_SRV_DIMENSION_TEXTURE2DMS = D3D_SRV_DIMENSION_TEXTURE2DMS, - D3D11_SRV_DIMENSION_TEXTURE2DMSARRAY = D3D_SRV_DIMENSION_TEXTURE2DMSARRAY, - D3D11_SRV_DIMENSION_TEXTURE3D = D3D_SRV_DIMENSION_TEXTURE3D, - D3D11_SRV_DIMENSION_TEXTURECUBE = D3D_SRV_DIMENSION_TEXTURECUBE, - D3D11_SRV_DIMENSION_TEXTURECUBEARRAY = D3D_SRV_DIMENSION_TEXTURECUBEARRAY, - D3D11_SRV_DIMENSION_BUFFEREX = D3D_SRV_DIMENSION_BUFFEREX - } D3D_SRV_DIMENSION; - -#define D3D_SHADER_FEATURE_DOUBLES 0x00001 -#define D3D_SHADER_FEATURE_COMPUTE_SHADERS_PLUS_RAW_AND_STRUCTURED_BUFFERS_VIA_SHADER_4_X 0x00002 -#define D3D_SHADER_FEATURE_UAVS_AT_EVERY_STAGE 0x00004 -#define D3D_SHADER_FEATURE_64_UAVS 0x00008 -#define D3D_SHADER_FEATURE_MINIMUM_PRECISION 0x00010 -#define D3D_SHADER_FEATURE_11_1_DOUBLE_EXTENSIONS 0x00020 -#define D3D_SHADER_FEATURE_11_1_SHADER_EXTENSIONS 0x00040 -#define D3D_SHADER_FEATURE_LEVEL_9_COMPARISON_FILTERING 0x00080 -#define D3D_SHADER_FEATURE_TILED_RESOURCES 0x00100 -#define D3D_SHADER_FEATURE_STENCIL_REF 0x00200 -#define D3D_SHADER_FEATURE_INNER_COVERAGE 0x00400 -#define D3D_SHADER_FEATURE_TYPED_UAV_LOAD_ADDITIONAL_FORMATS 0x00800 -#define D3D_SHADER_FEATURE_ROVS 0x01000 -#define D3D_SHADER_FEATURE_VIEWPORT_AND_RT_ARRAY_INDEX_FROM_ANY_SHADER_FEEDING_RASTERIZER 0x02000 -#define D3D_SHADER_FEATURE_WAVE_OPS 0x04000 -#define D3D_SHADER_FEATURE_INT64_OPS 0x08000 -#define D3D_SHADER_FEATURE_VIEW_ID 0x10000 -#define D3D_SHADER_FEATURE_BARYCENTRICS 0x20000 -#define D3D_SHADER_FEATURE_NATIVE_16BIT_OPS 0x40000 -#define D3D_SHADER_FEATURE_SHADING_RATE 0x80000 -#define D3D_SHADER_FEATURE_RAYTRACING_TIER_1_1 0x100000 -#define D3D_SHADER_FEATURE_SAMPLER_FEEDBACK 0x200000 -#define D3D_SHADER_FEATURE_ATOMIC_INT64_ON_TYPED_RESOURCE 0x400000 -#define D3D_SHADER_FEATURE_ATOMIC_INT64_ON_GROUP_SHARED 0x800000 -#define D3D_SHADER_FEATURE_DERIVATIVES_IN_MESH_AND_AMPLIFICATION_SHADERS 0x1000000 -#define D3D_SHADER_FEATURE_RESOURCE_DESCRIPTOR_HEAP_INDEXING 0x2000000 -#define D3D_SHADER_FEATURE_SAMPLER_DESCRIPTOR_HEAP_INDEXING 0x4000000 -#define D3D_SHADER_FEATURE_WAVE_MMA 0x8000000 -#define D3D_SHADER_FEATURE_ATOMIC_INT64_ON_DESCRIPTOR_HEAP_RESOURCE 0x10000000 -#define D3D_SHADER_FEATURE_ADVANCED_TEXTURE_OPS 0x20000000 -#define D3D_SHADER_FEATURE_WRITEABLE_MSAA_TEXTURES 0x40000000 -#define D3D_SHADER_FEATURE_SAMPLE_CMP_GRADIENT_OR_BIAS 0x80000000 -#define D3D_SHADER_FEATURE_EXTENDED_COMMAND_INFO 0x100000000ull -#define D3D_OPT_SHADER_FEATURE_USES_DERIVATIVES 0x0000010000000000ull -#define D3D_OPT_SHADER_FEATURE_REQUIRES_GROUP 0x0000020000000000ull -typedef struct _D3D_SHADER_MACRO - { - LPCSTR Name; - LPCSTR Definition; - } D3D_SHADER_MACRO; - -typedef struct _D3D_SHADER_MACRO *LPD3D_SHADER_MACRO; - -DEFINE_GUID(IID_ID3D10Blob, 0x8ba5fb08, 0x5195, 0x40e2, 0xac, 0x58, 0xd, 0x98, 0x9c, 0x3a, 0x1, 0x2); - -extern RPC_IF_HANDLE __MIDL_itf_d3dcommon_0000_0000_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3dcommon_0000_0000_v0_0_s_ifspec; - -#ifndef __ID3D10Blob_INTERFACE_DEFINED__ -#define __ID3D10Blob_INTERFACE_DEFINED__ - -/* interface ID3D10Blob */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3D10Blob; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("8BA5FB08-5195-40e2-AC58-0D989C3A0102") - ID3D10Blob : public IUnknown - { - public: - virtual LPVOID STDMETHODCALLTYPE GetBufferPointer( void) = 0; - - virtual SIZE_T STDMETHODCALLTYPE GetBufferSize( void) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3D10BlobVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3D10Blob * This, - /* [in] */ REFIID riid, - /* [annotation][iid_is][out] */ - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3D10Blob * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3D10Blob * This); - - DECLSPEC_XFGVIRT(ID3D10Blob, GetBufferPointer) - LPVOID ( STDMETHODCALLTYPE *GetBufferPointer )( - ID3D10Blob * This); - - DECLSPEC_XFGVIRT(ID3D10Blob, GetBufferSize) - SIZE_T ( STDMETHODCALLTYPE *GetBufferSize )( - ID3D10Blob * This); - - END_INTERFACE - } ID3D10BlobVtbl; - - interface ID3D10Blob - { - CONST_VTBL struct ID3D10BlobVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3D10Blob_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3D10Blob_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3D10Blob_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3D10Blob_GetBufferPointer(This) \ - ( (This)->lpVtbl -> GetBufferPointer(This) ) - -#define ID3D10Blob_GetBufferSize(This) \ - ( (This)->lpVtbl -> GetBufferSize(This) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3D10Blob_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3dcommon_0000_0001 */ -/* [local] */ - -typedef interface ID3D10Blob* LPD3D10BLOB; -typedef ID3D10Blob ID3DBlob; - -typedef ID3DBlob* LPD3DBLOB; -#define IID_ID3DBlob IID_ID3D10Blob -typedef void ( __stdcall *PFN_DESTRUCTION_CALLBACK )( - void *pData); - -extern RPC_IF_HANDLE __MIDL_itf_d3dcommon_0000_0001_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3dcommon_0000_0001_v0_0_s_ifspec; - -#ifndef __ID3DDestructionNotifier_INTERFACE_DEFINED__ -#define __ID3DDestructionNotifier_INTERFACE_DEFINED__ - -/* interface ID3DDestructionNotifier */ -/* [unique][local][object][uuid] */ - -EXTERN_C const IID IID_ID3DDestructionNotifier; - -#if defined(__cplusplus) && !defined(CINTERFACE) - - MIDL_INTERFACE("a06eb39a-50da-425b-8c31-4eecd6c270f3") - ID3DDestructionNotifier : public IUnknown - { - public: - virtual HRESULT STDMETHODCALLTYPE RegisterDestructionCallback( - /* [annotation] */ - _In_ PFN_DESTRUCTION_CALLBACK callbackFn, - /* [annotation] */ - _In_ void *pData, - /* [annotation] */ - _Out_ UINT *pCallbackID) = 0; - - virtual HRESULT STDMETHODCALLTYPE UnregisterDestructionCallback( - /* [annotation] */ - _In_ UINT callbackID) = 0; - - }; - - -#else /* C style interface */ - - typedef struct ID3DDestructionNotifierVtbl - { - BEGIN_INTERFACE - - DECLSPEC_XFGVIRT(IUnknown, QueryInterface) - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - ID3DDestructionNotifier * This, - /* [in] */ REFIID riid, - /* [annotation][iid_is][out] */ - _COM_Outptr_ void **ppvObject); - - DECLSPEC_XFGVIRT(IUnknown, AddRef) - ULONG ( STDMETHODCALLTYPE *AddRef )( - ID3DDestructionNotifier * This); - - DECLSPEC_XFGVIRT(IUnknown, Release) - ULONG ( STDMETHODCALLTYPE *Release )( - ID3DDestructionNotifier * This); - - DECLSPEC_XFGVIRT(ID3DDestructionNotifier, RegisterDestructionCallback) - HRESULT ( STDMETHODCALLTYPE *RegisterDestructionCallback )( - ID3DDestructionNotifier * This, - /* [annotation] */ - _In_ PFN_DESTRUCTION_CALLBACK callbackFn, - /* [annotation] */ - _In_ void *pData, - /* [annotation] */ - _Out_ UINT *pCallbackID); - - DECLSPEC_XFGVIRT(ID3DDestructionNotifier, UnregisterDestructionCallback) - HRESULT ( STDMETHODCALLTYPE *UnregisterDestructionCallback )( - ID3DDestructionNotifier * This, - /* [annotation] */ - _In_ UINT callbackID); - - END_INTERFACE - } ID3DDestructionNotifierVtbl; - - interface ID3DDestructionNotifier - { - CONST_VTBL struct ID3DDestructionNotifierVtbl *lpVtbl; - }; - - - -#ifdef COBJMACROS - -#define ID3DDestructionNotifier_QueryInterface(This,riid,ppvObject) \ - ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) - -#define ID3DDestructionNotifier_AddRef(This) \ - ( (This)->lpVtbl -> AddRef(This) ) - -#define ID3DDestructionNotifier_Release(This) \ - ( (This)->lpVtbl -> Release(This) ) - -#define ID3DDestructionNotifier_RegisterDestructionCallback(This,callbackFn,pData,pCallbackID) \ - ( (This)->lpVtbl -> RegisterDestructionCallback(This,callbackFn,pData,pCallbackID) ) - -#define ID3DDestructionNotifier_UnregisterDestructionCallback(This,callbackID) \ - ( (This)->lpVtbl -> UnregisterDestructionCallback(This,callbackID) ) - -#endif /* COBJMACROS */ - -#endif /* C style interface */ - -#endif /* __ID3DDestructionNotifier_INTERFACE_DEFINED__ */ - -/* interface __MIDL_itf_d3dcommon_0000_0002 */ -/* [local] */ - -typedef -enum _D3D_INCLUDE_TYPE - { - D3D_INCLUDE_LOCAL = 0, - D3D_INCLUDE_SYSTEM = ( D3D_INCLUDE_LOCAL + 1 ) , - D3D10_INCLUDE_LOCAL = D3D_INCLUDE_LOCAL, - D3D10_INCLUDE_SYSTEM = D3D_INCLUDE_SYSTEM, - D3D_INCLUDE_FORCE_DWORD = 0x7fffffff - } D3D_INCLUDE_TYPE; - -typedef interface ID3DInclude ID3DInclude; -#undef INTERFACE -#define INTERFACE ID3DInclude -DECLARE_INTERFACE(ID3DInclude) -{ - STDMETHOD(Open)(THIS_ D3D_INCLUDE_TYPE IncludeType, LPCSTR pFileName, LPCVOID pParentData, LPCVOID *ppData, UINT *pBytes) PURE; - STDMETHOD(Close)(THIS_ LPCVOID pData) PURE; -}; -typedef ID3DInclude* LPD3DINCLUDE; -typedef -enum _D3D_SHADER_VARIABLE_CLASS - { - D3D_SVC_SCALAR = 0, - D3D_SVC_VECTOR = ( D3D_SVC_SCALAR + 1 ) , - D3D_SVC_MATRIX_ROWS = ( D3D_SVC_VECTOR + 1 ) , - D3D_SVC_MATRIX_COLUMNS = ( D3D_SVC_MATRIX_ROWS + 1 ) , - D3D_SVC_OBJECT = ( D3D_SVC_MATRIX_COLUMNS + 1 ) , - D3D_SVC_STRUCT = ( D3D_SVC_OBJECT + 1 ) , - D3D_SVC_INTERFACE_CLASS = ( D3D_SVC_STRUCT + 1 ) , - D3D_SVC_INTERFACE_POINTER = ( D3D_SVC_INTERFACE_CLASS + 1 ) , - D3D10_SVC_SCALAR = D3D_SVC_SCALAR, - D3D10_SVC_VECTOR = D3D_SVC_VECTOR, - D3D10_SVC_MATRIX_ROWS = D3D_SVC_MATRIX_ROWS, - D3D10_SVC_MATRIX_COLUMNS = D3D_SVC_MATRIX_COLUMNS, - D3D10_SVC_OBJECT = D3D_SVC_OBJECT, - D3D10_SVC_STRUCT = D3D_SVC_STRUCT, - D3D11_SVC_INTERFACE_CLASS = D3D_SVC_INTERFACE_CLASS, - D3D11_SVC_INTERFACE_POINTER = D3D_SVC_INTERFACE_POINTER, - D3D_SVC_FORCE_DWORD = 0x7fffffff - } D3D_SHADER_VARIABLE_CLASS; - -typedef -enum _D3D_SHADER_VARIABLE_FLAGS - { - D3D_SVF_USERPACKED = 1, - D3D_SVF_USED = 2, - D3D_SVF_INTERFACE_POINTER = 4, - D3D_SVF_INTERFACE_PARAMETER = 8, - D3D10_SVF_USERPACKED = D3D_SVF_USERPACKED, - D3D10_SVF_USED = D3D_SVF_USED, - D3D11_SVF_INTERFACE_POINTER = D3D_SVF_INTERFACE_POINTER, - D3D11_SVF_INTERFACE_PARAMETER = D3D_SVF_INTERFACE_PARAMETER, - D3D_SVF_FORCE_DWORD = 0x7fffffff - } D3D_SHADER_VARIABLE_FLAGS; - -typedef -enum _D3D_SHADER_VARIABLE_TYPE - { - D3D_SVT_VOID = 0, - D3D_SVT_BOOL = 1, - D3D_SVT_INT = 2, - D3D_SVT_FLOAT = 3, - D3D_SVT_STRING = 4, - D3D_SVT_TEXTURE = 5, - D3D_SVT_TEXTURE1D = 6, - D3D_SVT_TEXTURE2D = 7, - D3D_SVT_TEXTURE3D = 8, - D3D_SVT_TEXTURECUBE = 9, - D3D_SVT_SAMPLER = 10, - D3D_SVT_SAMPLER1D = 11, - D3D_SVT_SAMPLER2D = 12, - D3D_SVT_SAMPLER3D = 13, - D3D_SVT_SAMPLERCUBE = 14, - D3D_SVT_PIXELSHADER = 15, - D3D_SVT_VERTEXSHADER = 16, - D3D_SVT_PIXELFRAGMENT = 17, - D3D_SVT_VERTEXFRAGMENT = 18, - D3D_SVT_UINT = 19, - D3D_SVT_UINT8 = 20, - D3D_SVT_GEOMETRYSHADER = 21, - D3D_SVT_RASTERIZER = 22, - D3D_SVT_DEPTHSTENCIL = 23, - D3D_SVT_BLEND = 24, - D3D_SVT_BUFFER = 25, - D3D_SVT_CBUFFER = 26, - D3D_SVT_TBUFFER = 27, - D3D_SVT_TEXTURE1DARRAY = 28, - D3D_SVT_TEXTURE2DARRAY = 29, - D3D_SVT_RENDERTARGETVIEW = 30, - D3D_SVT_DEPTHSTENCILVIEW = 31, - D3D_SVT_TEXTURE2DMS = 32, - D3D_SVT_TEXTURE2DMSARRAY = 33, - D3D_SVT_TEXTURECUBEARRAY = 34, - D3D_SVT_HULLSHADER = 35, - D3D_SVT_DOMAINSHADER = 36, - D3D_SVT_INTERFACE_POINTER = 37, - D3D_SVT_COMPUTESHADER = 38, - D3D_SVT_DOUBLE = 39, - D3D_SVT_RWTEXTURE1D = 40, - D3D_SVT_RWTEXTURE1DARRAY = 41, - D3D_SVT_RWTEXTURE2D = 42, - D3D_SVT_RWTEXTURE2DARRAY = 43, - D3D_SVT_RWTEXTURE3D = 44, - D3D_SVT_RWBUFFER = 45, - D3D_SVT_BYTEADDRESS_BUFFER = 46, - D3D_SVT_RWBYTEADDRESS_BUFFER = 47, - D3D_SVT_STRUCTURED_BUFFER = 48, - D3D_SVT_RWSTRUCTURED_BUFFER = 49, - D3D_SVT_APPEND_STRUCTURED_BUFFER = 50, - D3D_SVT_CONSUME_STRUCTURED_BUFFER = 51, - D3D_SVT_MIN8FLOAT = 52, - D3D_SVT_MIN10FLOAT = 53, - D3D_SVT_MIN16FLOAT = 54, - D3D_SVT_MIN12INT = 55, - D3D_SVT_MIN16INT = 56, - D3D_SVT_MIN16UINT = 57, - D3D_SVT_INT16 = 58, - D3D_SVT_UINT16 = 59, - D3D_SVT_FLOAT16 = 60, - D3D_SVT_INT64 = 61, - D3D_SVT_UINT64 = 62, - D3D10_SVT_VOID = D3D_SVT_VOID, - D3D10_SVT_BOOL = D3D_SVT_BOOL, - D3D10_SVT_INT = D3D_SVT_INT, - D3D10_SVT_FLOAT = D3D_SVT_FLOAT, - D3D10_SVT_STRING = D3D_SVT_STRING, - D3D10_SVT_TEXTURE = D3D_SVT_TEXTURE, - D3D10_SVT_TEXTURE1D = D3D_SVT_TEXTURE1D, - D3D10_SVT_TEXTURE2D = D3D_SVT_TEXTURE2D, - D3D10_SVT_TEXTURE3D = D3D_SVT_TEXTURE3D, - D3D10_SVT_TEXTURECUBE = D3D_SVT_TEXTURECUBE, - D3D10_SVT_SAMPLER = D3D_SVT_SAMPLER, - D3D10_SVT_SAMPLER1D = D3D_SVT_SAMPLER1D, - D3D10_SVT_SAMPLER2D = D3D_SVT_SAMPLER2D, - D3D10_SVT_SAMPLER3D = D3D_SVT_SAMPLER3D, - D3D10_SVT_SAMPLERCUBE = D3D_SVT_SAMPLERCUBE, - D3D10_SVT_PIXELSHADER = D3D_SVT_PIXELSHADER, - D3D10_SVT_VERTEXSHADER = D3D_SVT_VERTEXSHADER, - D3D10_SVT_PIXELFRAGMENT = D3D_SVT_PIXELFRAGMENT, - D3D10_SVT_VERTEXFRAGMENT = D3D_SVT_VERTEXFRAGMENT, - D3D10_SVT_UINT = D3D_SVT_UINT, - D3D10_SVT_UINT8 = D3D_SVT_UINT8, - D3D10_SVT_GEOMETRYSHADER = D3D_SVT_GEOMETRYSHADER, - D3D10_SVT_RASTERIZER = D3D_SVT_RASTERIZER, - D3D10_SVT_DEPTHSTENCIL = D3D_SVT_DEPTHSTENCIL, - D3D10_SVT_BLEND = D3D_SVT_BLEND, - D3D10_SVT_BUFFER = D3D_SVT_BUFFER, - D3D10_SVT_CBUFFER = D3D_SVT_CBUFFER, - D3D10_SVT_TBUFFER = D3D_SVT_TBUFFER, - D3D10_SVT_TEXTURE1DARRAY = D3D_SVT_TEXTURE1DARRAY, - D3D10_SVT_TEXTURE2DARRAY = D3D_SVT_TEXTURE2DARRAY, - D3D10_SVT_RENDERTARGETVIEW = D3D_SVT_RENDERTARGETVIEW, - D3D10_SVT_DEPTHSTENCILVIEW = D3D_SVT_DEPTHSTENCILVIEW, - D3D10_SVT_TEXTURE2DMS = D3D_SVT_TEXTURE2DMS, - D3D10_SVT_TEXTURE2DMSARRAY = D3D_SVT_TEXTURE2DMSARRAY, - D3D10_SVT_TEXTURECUBEARRAY = D3D_SVT_TEXTURECUBEARRAY, - D3D11_SVT_HULLSHADER = D3D_SVT_HULLSHADER, - D3D11_SVT_DOMAINSHADER = D3D_SVT_DOMAINSHADER, - D3D11_SVT_INTERFACE_POINTER = D3D_SVT_INTERFACE_POINTER, - D3D11_SVT_COMPUTESHADER = D3D_SVT_COMPUTESHADER, - D3D11_SVT_DOUBLE = D3D_SVT_DOUBLE, - D3D11_SVT_RWTEXTURE1D = D3D_SVT_RWTEXTURE1D, - D3D11_SVT_RWTEXTURE1DARRAY = D3D_SVT_RWTEXTURE1DARRAY, - D3D11_SVT_RWTEXTURE2D = D3D_SVT_RWTEXTURE2D, - D3D11_SVT_RWTEXTURE2DARRAY = D3D_SVT_RWTEXTURE2DARRAY, - D3D11_SVT_RWTEXTURE3D = D3D_SVT_RWTEXTURE3D, - D3D11_SVT_RWBUFFER = D3D_SVT_RWBUFFER, - D3D11_SVT_BYTEADDRESS_BUFFER = D3D_SVT_BYTEADDRESS_BUFFER, - D3D11_SVT_RWBYTEADDRESS_BUFFER = D3D_SVT_RWBYTEADDRESS_BUFFER, - D3D11_SVT_STRUCTURED_BUFFER = D3D_SVT_STRUCTURED_BUFFER, - D3D11_SVT_RWSTRUCTURED_BUFFER = D3D_SVT_RWSTRUCTURED_BUFFER, - D3D11_SVT_APPEND_STRUCTURED_BUFFER = D3D_SVT_APPEND_STRUCTURED_BUFFER, - D3D11_SVT_CONSUME_STRUCTURED_BUFFER = D3D_SVT_CONSUME_STRUCTURED_BUFFER, - D3D_SVT_FORCE_DWORD = 0x7fffffff - } D3D_SHADER_VARIABLE_TYPE; - -typedef -enum _D3D_SHADER_INPUT_FLAGS - { - D3D_SIF_USERPACKED = 0x1, - D3D_SIF_COMPARISON_SAMPLER = 0x2, - D3D_SIF_TEXTURE_COMPONENT_0 = 0x4, - D3D_SIF_TEXTURE_COMPONENT_1 = 0x8, - D3D_SIF_TEXTURE_COMPONENTS = 0xc, - D3D_SIF_UNUSED = 0x10, - D3D10_SIF_USERPACKED = D3D_SIF_USERPACKED, - D3D10_SIF_COMPARISON_SAMPLER = D3D_SIF_COMPARISON_SAMPLER, - D3D10_SIF_TEXTURE_COMPONENT_0 = D3D_SIF_TEXTURE_COMPONENT_0, - D3D10_SIF_TEXTURE_COMPONENT_1 = D3D_SIF_TEXTURE_COMPONENT_1, - D3D10_SIF_TEXTURE_COMPONENTS = D3D_SIF_TEXTURE_COMPONENTS, - D3D_SIF_FORCE_DWORD = 0x7fffffff - } D3D_SHADER_INPUT_FLAGS; - -typedef -enum _D3D_SHADER_INPUT_TYPE - { - D3D_SIT_CBUFFER = 0, - D3D_SIT_TBUFFER = ( D3D_SIT_CBUFFER + 1 ) , - D3D_SIT_TEXTURE = ( D3D_SIT_TBUFFER + 1 ) , - D3D_SIT_SAMPLER = ( D3D_SIT_TEXTURE + 1 ) , - D3D_SIT_UAV_RWTYPED = ( D3D_SIT_SAMPLER + 1 ) , - D3D_SIT_STRUCTURED = ( D3D_SIT_UAV_RWTYPED + 1 ) , - D3D_SIT_UAV_RWSTRUCTURED = ( D3D_SIT_STRUCTURED + 1 ) , - D3D_SIT_BYTEADDRESS = ( D3D_SIT_UAV_RWSTRUCTURED + 1 ) , - D3D_SIT_UAV_RWBYTEADDRESS = ( D3D_SIT_BYTEADDRESS + 1 ) , - D3D_SIT_UAV_APPEND_STRUCTURED = ( D3D_SIT_UAV_RWBYTEADDRESS + 1 ) , - D3D_SIT_UAV_CONSUME_STRUCTURED = ( D3D_SIT_UAV_APPEND_STRUCTURED + 1 ) , - D3D_SIT_UAV_RWSTRUCTURED_WITH_COUNTER = ( D3D_SIT_UAV_CONSUME_STRUCTURED + 1 ) , - D3D_SIT_RTACCELERATIONSTRUCTURE = ( D3D_SIT_UAV_RWSTRUCTURED_WITH_COUNTER + 1 ) , - D3D_SIT_UAV_FEEDBACKTEXTURE = ( D3D_SIT_RTACCELERATIONSTRUCTURE + 1 ) , - D3D10_SIT_CBUFFER = D3D_SIT_CBUFFER, - D3D10_SIT_TBUFFER = D3D_SIT_TBUFFER, - D3D10_SIT_TEXTURE = D3D_SIT_TEXTURE, - D3D10_SIT_SAMPLER = D3D_SIT_SAMPLER, - D3D11_SIT_UAV_RWTYPED = D3D_SIT_UAV_RWTYPED, - D3D11_SIT_STRUCTURED = D3D_SIT_STRUCTURED, - D3D11_SIT_UAV_RWSTRUCTURED = D3D_SIT_UAV_RWSTRUCTURED, - D3D11_SIT_BYTEADDRESS = D3D_SIT_BYTEADDRESS, - D3D11_SIT_UAV_RWBYTEADDRESS = D3D_SIT_UAV_RWBYTEADDRESS, - D3D11_SIT_UAV_APPEND_STRUCTURED = D3D_SIT_UAV_APPEND_STRUCTURED, - D3D11_SIT_UAV_CONSUME_STRUCTURED = D3D_SIT_UAV_CONSUME_STRUCTURED, - D3D11_SIT_UAV_RWSTRUCTURED_WITH_COUNTER = D3D_SIT_UAV_RWSTRUCTURED_WITH_COUNTER - } D3D_SHADER_INPUT_TYPE; - -typedef -enum _D3D_SHADER_CBUFFER_FLAGS - { - D3D_CBF_USERPACKED = 1, - D3D10_CBF_USERPACKED = D3D_CBF_USERPACKED, - D3D_CBF_FORCE_DWORD = 0x7fffffff - } D3D_SHADER_CBUFFER_FLAGS; - -typedef -enum _D3D_CBUFFER_TYPE - { - D3D_CT_CBUFFER = 0, - D3D_CT_TBUFFER = ( D3D_CT_CBUFFER + 1 ) , - D3D_CT_INTERFACE_POINTERS = ( D3D_CT_TBUFFER + 1 ) , - D3D_CT_RESOURCE_BIND_INFO = ( D3D_CT_INTERFACE_POINTERS + 1 ) , - D3D10_CT_CBUFFER = D3D_CT_CBUFFER, - D3D10_CT_TBUFFER = D3D_CT_TBUFFER, - D3D11_CT_CBUFFER = D3D_CT_CBUFFER, - D3D11_CT_TBUFFER = D3D_CT_TBUFFER, - D3D11_CT_INTERFACE_POINTERS = D3D_CT_INTERFACE_POINTERS, - D3D11_CT_RESOURCE_BIND_INFO = D3D_CT_RESOURCE_BIND_INFO - } D3D_CBUFFER_TYPE; - -typedef -enum D3D_NAME - { - D3D_NAME_UNDEFINED = 0, - D3D_NAME_POSITION = 1, - D3D_NAME_CLIP_DISTANCE = 2, - D3D_NAME_CULL_DISTANCE = 3, - D3D_NAME_RENDER_TARGET_ARRAY_INDEX = 4, - D3D_NAME_VIEWPORT_ARRAY_INDEX = 5, - D3D_NAME_VERTEX_ID = 6, - D3D_NAME_PRIMITIVE_ID = 7, - D3D_NAME_INSTANCE_ID = 8, - D3D_NAME_IS_FRONT_FACE = 9, - D3D_NAME_SAMPLE_INDEX = 10, - D3D_NAME_FINAL_QUAD_EDGE_TESSFACTOR = 11, - D3D_NAME_FINAL_QUAD_INSIDE_TESSFACTOR = 12, - D3D_NAME_FINAL_TRI_EDGE_TESSFACTOR = 13, - D3D_NAME_FINAL_TRI_INSIDE_TESSFACTOR = 14, - D3D_NAME_FINAL_LINE_DETAIL_TESSFACTOR = 15, - D3D_NAME_FINAL_LINE_DENSITY_TESSFACTOR = 16, - D3D_NAME_BARYCENTRICS = 23, - D3D_NAME_SHADINGRATE = 24, - D3D_NAME_CULLPRIMITIVE = 25, - D3D_NAME_TARGET = 64, - D3D_NAME_DEPTH = 65, - D3D_NAME_COVERAGE = 66, - D3D_NAME_DEPTH_GREATER_EQUAL = 67, - D3D_NAME_DEPTH_LESS_EQUAL = 68, - D3D_NAME_STENCIL_REF = 69, - D3D_NAME_INNER_COVERAGE = 70, - D3D10_NAME_UNDEFINED = D3D_NAME_UNDEFINED, - D3D10_NAME_POSITION = D3D_NAME_POSITION, - D3D10_NAME_CLIP_DISTANCE = D3D_NAME_CLIP_DISTANCE, - D3D10_NAME_CULL_DISTANCE = D3D_NAME_CULL_DISTANCE, - D3D10_NAME_RENDER_TARGET_ARRAY_INDEX = D3D_NAME_RENDER_TARGET_ARRAY_INDEX, - D3D10_NAME_VIEWPORT_ARRAY_INDEX = D3D_NAME_VIEWPORT_ARRAY_INDEX, - D3D10_NAME_VERTEX_ID = D3D_NAME_VERTEX_ID, - D3D10_NAME_PRIMITIVE_ID = D3D_NAME_PRIMITIVE_ID, - D3D10_NAME_INSTANCE_ID = D3D_NAME_INSTANCE_ID, - D3D10_NAME_IS_FRONT_FACE = D3D_NAME_IS_FRONT_FACE, - D3D10_NAME_SAMPLE_INDEX = D3D_NAME_SAMPLE_INDEX, - D3D10_NAME_TARGET = D3D_NAME_TARGET, - D3D10_NAME_DEPTH = D3D_NAME_DEPTH, - D3D10_NAME_COVERAGE = D3D_NAME_COVERAGE, - D3D11_NAME_FINAL_QUAD_EDGE_TESSFACTOR = D3D_NAME_FINAL_QUAD_EDGE_TESSFACTOR, - D3D11_NAME_FINAL_QUAD_INSIDE_TESSFACTOR = D3D_NAME_FINAL_QUAD_INSIDE_TESSFACTOR, - D3D11_NAME_FINAL_TRI_EDGE_TESSFACTOR = D3D_NAME_FINAL_TRI_EDGE_TESSFACTOR, - D3D11_NAME_FINAL_TRI_INSIDE_TESSFACTOR = D3D_NAME_FINAL_TRI_INSIDE_TESSFACTOR, - D3D11_NAME_FINAL_LINE_DETAIL_TESSFACTOR = D3D_NAME_FINAL_LINE_DETAIL_TESSFACTOR, - D3D11_NAME_FINAL_LINE_DENSITY_TESSFACTOR = D3D_NAME_FINAL_LINE_DENSITY_TESSFACTOR, - D3D11_NAME_DEPTH_GREATER_EQUAL = D3D_NAME_DEPTH_GREATER_EQUAL, - D3D11_NAME_DEPTH_LESS_EQUAL = D3D_NAME_DEPTH_LESS_EQUAL, - D3D11_NAME_STENCIL_REF = D3D_NAME_STENCIL_REF, - D3D11_NAME_INNER_COVERAGE = D3D_NAME_INNER_COVERAGE, - D3D12_NAME_BARYCENTRICS = D3D_NAME_BARYCENTRICS, - D3D12_NAME_SHADINGRATE = D3D_NAME_SHADINGRATE, - D3D12_NAME_CULLPRIMITIVE = D3D_NAME_CULLPRIMITIVE - } D3D_NAME; - -typedef -enum D3D_RESOURCE_RETURN_TYPE - { - D3D_RETURN_TYPE_UNORM = 1, - D3D_RETURN_TYPE_SNORM = 2, - D3D_RETURN_TYPE_SINT = 3, - D3D_RETURN_TYPE_UINT = 4, - D3D_RETURN_TYPE_FLOAT = 5, - D3D_RETURN_TYPE_MIXED = 6, - D3D_RETURN_TYPE_DOUBLE = 7, - D3D_RETURN_TYPE_CONTINUED = 8, - D3D10_RETURN_TYPE_UNORM = D3D_RETURN_TYPE_UNORM, - D3D10_RETURN_TYPE_SNORM = D3D_RETURN_TYPE_SNORM, - D3D10_RETURN_TYPE_SINT = D3D_RETURN_TYPE_SINT, - D3D10_RETURN_TYPE_UINT = D3D_RETURN_TYPE_UINT, - D3D10_RETURN_TYPE_FLOAT = D3D_RETURN_TYPE_FLOAT, - D3D10_RETURN_TYPE_MIXED = D3D_RETURN_TYPE_MIXED, - D3D11_RETURN_TYPE_UNORM = D3D_RETURN_TYPE_UNORM, - D3D11_RETURN_TYPE_SNORM = D3D_RETURN_TYPE_SNORM, - D3D11_RETURN_TYPE_SINT = D3D_RETURN_TYPE_SINT, - D3D11_RETURN_TYPE_UINT = D3D_RETURN_TYPE_UINT, - D3D11_RETURN_TYPE_FLOAT = D3D_RETURN_TYPE_FLOAT, - D3D11_RETURN_TYPE_MIXED = D3D_RETURN_TYPE_MIXED, - D3D11_RETURN_TYPE_DOUBLE = D3D_RETURN_TYPE_DOUBLE, - D3D11_RETURN_TYPE_CONTINUED = D3D_RETURN_TYPE_CONTINUED - } D3D_RESOURCE_RETURN_TYPE; - -typedef -enum D3D_REGISTER_COMPONENT_TYPE - { - D3D_REGISTER_COMPONENT_UNKNOWN = 0, - D3D_REGISTER_COMPONENT_UINT32 = 1, - D3D_REGISTER_COMPONENT_SINT32 = 2, - D3D_REGISTER_COMPONENT_FLOAT32 = 3, - D3D_REGISTER_COMPONENT_UINT16 = 4, - D3D_REGISTER_COMPONENT_SINT16 = 5, - D3D_REGISTER_COMPONENT_FLOAT16 = 6, - D3D_REGISTER_COMPONENT_UINT64 = 7, - D3D_REGISTER_COMPONENT_SINT64 = 8, - D3D_REGISTER_COMPONENT_FLOAT64 = 9, - D3D10_REGISTER_COMPONENT_UNKNOWN = D3D_REGISTER_COMPONENT_UNKNOWN, - D3D10_REGISTER_COMPONENT_UINT32 = D3D_REGISTER_COMPONENT_UINT32, - D3D10_REGISTER_COMPONENT_SINT32 = D3D_REGISTER_COMPONENT_SINT32, - D3D10_REGISTER_COMPONENT_FLOAT32 = D3D_REGISTER_COMPONENT_FLOAT32, - D3D10_REGISTER_COMPONENT_UINT16 = D3D_REGISTER_COMPONENT_UINT16, - D3D10_REGISTER_COMPONENT_SINT16 = D3D_REGISTER_COMPONENT_SINT16, - D3D10_REGISTER_COMPONENT_FLOAT16 = D3D_REGISTER_COMPONENT_FLOAT16, - D3D10_REGISTER_COMPONENT_UINT64 = D3D_REGISTER_COMPONENT_UINT64, - D3D10_REGISTER_COMPONENT_SINT64 = D3D_REGISTER_COMPONENT_SINT64, - D3D10_REGISTER_COMPONENT_FLOAT64 = D3D_REGISTER_COMPONENT_FLOAT64 - } D3D_REGISTER_COMPONENT_TYPE; - -typedef -enum D3D_TESSELLATOR_DOMAIN - { - D3D_TESSELLATOR_DOMAIN_UNDEFINED = 0, - D3D_TESSELLATOR_DOMAIN_ISOLINE = 1, - D3D_TESSELLATOR_DOMAIN_TRI = 2, - D3D_TESSELLATOR_DOMAIN_QUAD = 3, - D3D11_TESSELLATOR_DOMAIN_UNDEFINED = D3D_TESSELLATOR_DOMAIN_UNDEFINED, - D3D11_TESSELLATOR_DOMAIN_ISOLINE = D3D_TESSELLATOR_DOMAIN_ISOLINE, - D3D11_TESSELLATOR_DOMAIN_TRI = D3D_TESSELLATOR_DOMAIN_TRI, - D3D11_TESSELLATOR_DOMAIN_QUAD = D3D_TESSELLATOR_DOMAIN_QUAD - } D3D_TESSELLATOR_DOMAIN; - -typedef -enum D3D_TESSELLATOR_PARTITIONING - { - D3D_TESSELLATOR_PARTITIONING_UNDEFINED = 0, - D3D_TESSELLATOR_PARTITIONING_INTEGER = 1, - D3D_TESSELLATOR_PARTITIONING_POW2 = 2, - D3D_TESSELLATOR_PARTITIONING_FRACTIONAL_ODD = 3, - D3D_TESSELLATOR_PARTITIONING_FRACTIONAL_EVEN = 4, - D3D11_TESSELLATOR_PARTITIONING_UNDEFINED = D3D_TESSELLATOR_PARTITIONING_UNDEFINED, - D3D11_TESSELLATOR_PARTITIONING_INTEGER = D3D_TESSELLATOR_PARTITIONING_INTEGER, - D3D11_TESSELLATOR_PARTITIONING_POW2 = D3D_TESSELLATOR_PARTITIONING_POW2, - D3D11_TESSELLATOR_PARTITIONING_FRACTIONAL_ODD = D3D_TESSELLATOR_PARTITIONING_FRACTIONAL_ODD, - D3D11_TESSELLATOR_PARTITIONING_FRACTIONAL_EVEN = D3D_TESSELLATOR_PARTITIONING_FRACTIONAL_EVEN - } D3D_TESSELLATOR_PARTITIONING; - -typedef -enum D3D_TESSELLATOR_OUTPUT_PRIMITIVE - { - D3D_TESSELLATOR_OUTPUT_UNDEFINED = 0, - D3D_TESSELLATOR_OUTPUT_POINT = 1, - D3D_TESSELLATOR_OUTPUT_LINE = 2, - D3D_TESSELLATOR_OUTPUT_TRIANGLE_CW = 3, - D3D_TESSELLATOR_OUTPUT_TRIANGLE_CCW = 4, - D3D11_TESSELLATOR_OUTPUT_UNDEFINED = D3D_TESSELLATOR_OUTPUT_UNDEFINED, - D3D11_TESSELLATOR_OUTPUT_POINT = D3D_TESSELLATOR_OUTPUT_POINT, - D3D11_TESSELLATOR_OUTPUT_LINE = D3D_TESSELLATOR_OUTPUT_LINE, - D3D11_TESSELLATOR_OUTPUT_TRIANGLE_CW = D3D_TESSELLATOR_OUTPUT_TRIANGLE_CW, - D3D11_TESSELLATOR_OUTPUT_TRIANGLE_CCW = D3D_TESSELLATOR_OUTPUT_TRIANGLE_CCW - } D3D_TESSELLATOR_OUTPUT_PRIMITIVE; - -typedef -enum D3D_MIN_PRECISION - { - D3D_MIN_PRECISION_DEFAULT = 0, - D3D_MIN_PRECISION_FLOAT_16 = 1, - D3D_MIN_PRECISION_FLOAT_2_8 = 2, - D3D_MIN_PRECISION_RESERVED = 3, - D3D_MIN_PRECISION_SINT_16 = 4, - D3D_MIN_PRECISION_UINT_16 = 5, - D3D_MIN_PRECISION_ANY_16 = 0xf0, - D3D_MIN_PRECISION_ANY_10 = 0xf1 - } D3D_MIN_PRECISION; - -typedef -enum D3D_INTERPOLATION_MODE - { - D3D_INTERPOLATION_UNDEFINED = 0, - D3D_INTERPOLATION_CONSTANT = 1, - D3D_INTERPOLATION_LINEAR = 2, - D3D_INTERPOLATION_LINEAR_CENTROID = 3, - D3D_INTERPOLATION_LINEAR_NOPERSPECTIVE = 4, - D3D_INTERPOLATION_LINEAR_NOPERSPECTIVE_CENTROID = 5, - D3D_INTERPOLATION_LINEAR_SAMPLE = 6, - D3D_INTERPOLATION_LINEAR_NOPERSPECTIVE_SAMPLE = 7 - } D3D_INTERPOLATION_MODE; - -typedef -enum _D3D_PARAMETER_FLAGS - { - D3D_PF_NONE = 0, - D3D_PF_IN = 0x1, - D3D_PF_OUT = 0x2, - D3D_PF_FORCE_DWORD = 0x7fffffff - } D3D_PARAMETER_FLAGS; - -typedef -enum D3D_FORMAT_LAYOUT - { - D3DFL_STANDARD = 0, - D3DFL_CUSTOM = -1 - } D3D_FORMAT_LAYOUT; - -typedef -enum D3D_FORMAT_TYPE_LEVEL - { - D3DFTL_NO_TYPE = 0, - D3DFTL_PARTIAL_TYPE = -2, - D3DFTL_FULL_TYPE = -1 - } D3D_FORMAT_TYPE_LEVEL; - -typedef -enum D3D_FORMAT_COMPONENT_NAME - { - D3DFCN_R = -4, - D3DFCN_G = -3, - D3DFCN_B = -2, - D3DFCN_A = -1, - D3DFCN_D = 0, - D3DFCN_S = 1, - D3DFCN_X = 2 - } D3D_FORMAT_COMPONENT_NAME; - -typedef -enum D3D_FORMAT_COMPONENT_INTERPRETATION - { - D3DFCI_TYPELESS = 0, - D3DFCI_FLOAT = -4, - D3DFCI_SNORM = -3, - D3DFCI_UNORM = -2, - D3DFCI_SINT = -1, - D3DFCI_UINT = 1, - D3DFCI_UNORM_SRGB = 2, - D3DFCI_BIASED_FIXED_2_8 = 3 - } D3D_FORMAT_COMPONENT_INTERPRETATION; - -DEFINE_GUID(WKPDID_D3DDebugObjectName,0x429b8c22,0x9188,0x4b0c,0x87,0x42,0xac,0xb0,0xbf,0x85,0xc2,0x00); -DEFINE_GUID(WKPDID_D3DDebugObjectNameW,0x4cca5fd8,0x921f,0x42c8,0x85,0x66,0x70,0xca,0xf2,0xa9,0xb7,0x41); -DEFINE_GUID(WKPDID_CommentStringW,0xd0149dc0,0x90e8,0x4ec8,0x81, 0x44, 0xe9, 0x00, 0xad, 0x26, 0x6b, 0xb2); -DEFINE_GUID(WKPDID_D3D12UniqueObjectId, 0x1b39de15, 0xec04, 0x4bae, 0xba, 0x4d, 0x8c, 0xef, 0x79, 0xfc, 0x04, 0xc1); -#define D3D_SET_OBJECT_NAME_N_A(pObject, Chars, pName) (pObject)->SetPrivateData(WKPDID_D3DDebugObjectName, Chars, pName) -#define D3D_SET_OBJECT_NAME_A(pObject, pName) D3D_SET_OBJECT_NAME_N_A(pObject, lstrlenA(pName), pName) -#define D3D_SET_OBJECT_NAME_N_W(pObject, Chars, pName) (pObject)->SetPrivateData(WKPDID_D3DDebugObjectNameW, Chars*2, pName) -#define D3D_SET_OBJECT_NAME_W(pObject, pName) D3D_SET_OBJECT_NAME_N_W(pObject, wcslen(pName), pName) -#define D3D_COMPONENT_MASK_X 1 -#define D3D_COMPONENT_MASK_Y 2 -#define D3D_COMPONENT_MASK_Z 4 -#define D3D_COMPONENT_MASK_W 8 -DEFINE_GUID(D3D_TEXTURE_LAYOUT_ROW_MAJOR,0xb5dc234f,0x72bb,0x4bec,0x97,0x05,0x8c,0xf2,0x58,0xdf,0x6b,0x6c); -DEFINE_GUID(D3D_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE,0x4c0f29e3,0x3f5f,0x4d35,0x84,0xc9,0xbc,0x09,0x83,0xb6,0x2c,0x28); - -extern RPC_IF_HANDLE __MIDL_itf_d3dcommon_0000_0002_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3dcommon_0000_0002_v0_0_s_ifspec; - -/* Additional Prototypes for ALL interfaces */ - -/* end of Additional Prototypes */ - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/Juliet/src/Graphics/D3D12/AgilitySDK/d3dcommon.idl b/Juliet/src/Graphics/D3D12/AgilitySDK/d3dcommon.idl deleted file mode 100644 index bfa375d..0000000 --- a/Juliet/src/Graphics/D3D12/AgilitySDK/d3dcommon.idl +++ /dev/null @@ -1,991 +0,0 @@ -/*------------------------------------------------------------------------------------- - * - * Copyright (c) Microsoft Corporation - * Licensed under the MIT license - * - *-------------------------------------------------------------------------------------*/ -import "oaidl.idl"; -import "ocidl.idl"; - -//---------------------------------------------------------------------------- -// -// D3D-version-neutral runtime information. -// -//---------------------------------------------------------------------------- - -typedef enum D3D_DRIVER_TYPE -{ - D3D_DRIVER_TYPE_UNKNOWN, - D3D_DRIVER_TYPE_HARDWARE, - D3D_DRIVER_TYPE_REFERENCE, - D3D_DRIVER_TYPE_NULL, - D3D_DRIVER_TYPE_SOFTWARE, - D3D_DRIVER_TYPE_WARP, -} D3D_DRIVER_TYPE; - -typedef enum D3D_FEATURE_LEVEL -{ - D3D_FEATURE_LEVEL_1_0_GENERIC = 0x100, - D3D_FEATURE_LEVEL_1_0_CORE = 0x1000, - D3D_FEATURE_LEVEL_9_1 = 0x9100, - D3D_FEATURE_LEVEL_9_2 = 0x9200, - D3D_FEATURE_LEVEL_9_3 = 0x9300, - D3D_FEATURE_LEVEL_10_0 = 0xa000, - D3D_FEATURE_LEVEL_10_1 = 0xa100, - D3D_FEATURE_LEVEL_11_0 = 0xb000, - D3D_FEATURE_LEVEL_11_1 = 0xb100, - D3D_FEATURE_LEVEL_12_0 = 0xc000, - D3D_FEATURE_LEVEL_12_1 = 0xc100, - D3D_FEATURE_LEVEL_12_2 = 0xc200 -} D3D_FEATURE_LEVEL; - -cpp_quote("#define D3D_FL9_1_REQ_TEXTURE1D_U_DIMENSION 2048") -cpp_quote("#define D3D_FL9_3_REQ_TEXTURE1D_U_DIMENSION 4096") -cpp_quote("#define D3D_FL9_1_REQ_TEXTURE2D_U_OR_V_DIMENSION 2048") -cpp_quote("#define D3D_FL9_3_REQ_TEXTURE2D_U_OR_V_DIMENSION 4096") -cpp_quote("#define D3D_FL9_1_REQ_TEXTURECUBE_DIMENSION 512") -cpp_quote("#define D3D_FL9_3_REQ_TEXTURECUBE_DIMENSION 4096") -cpp_quote("#define D3D_FL9_1_REQ_TEXTURE3D_U_V_OR_W_DIMENSION 256") -cpp_quote("#define D3D_FL9_1_DEFAULT_MAX_ANISOTROPY 2") -cpp_quote("#define D3D_FL9_1_IA_PRIMITIVE_MAX_COUNT 65535") -cpp_quote("#define D3D_FL9_2_IA_PRIMITIVE_MAX_COUNT 1048575") -cpp_quote("#define D3D_FL9_1_SIMULTANEOUS_RENDER_TARGET_COUNT 1") -cpp_quote("#define D3D_FL9_3_SIMULTANEOUS_RENDER_TARGET_COUNT 4") -cpp_quote("#define D3D_FL9_1_MAX_TEXTURE_REPEAT 128") -cpp_quote("#define D3D_FL9_2_MAX_TEXTURE_REPEAT 2048") -cpp_quote("#define D3D_FL9_3_MAX_TEXTURE_REPEAT 8192") - -typedef enum D3D_PRIMITIVE_TOPOLOGY -{ - D3D_PRIMITIVE_TOPOLOGY_UNDEFINED = 0, - D3D_PRIMITIVE_TOPOLOGY_POINTLIST = 1, - D3D_PRIMITIVE_TOPOLOGY_LINELIST = 2, - D3D_PRIMITIVE_TOPOLOGY_LINESTRIP = 3, - D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST = 4, - D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP = 5, - D3D_PRIMITIVE_TOPOLOGY_TRIANGLEFAN = 6, - // Adjacency values should be equal to (0x8 & non-adjacency): - D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ = 10, - D3D_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ = 11, - D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ = 12, - D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ = 13, - D3D_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST = 33, - D3D_PRIMITIVE_TOPOLOGY_2_CONTROL_POINT_PATCHLIST = 34, - D3D_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST = 35, - D3D_PRIMITIVE_TOPOLOGY_4_CONTROL_POINT_PATCHLIST = 36, - D3D_PRIMITIVE_TOPOLOGY_5_CONTROL_POINT_PATCHLIST = 37, - D3D_PRIMITIVE_TOPOLOGY_6_CONTROL_POINT_PATCHLIST = 38, - D3D_PRIMITIVE_TOPOLOGY_7_CONTROL_POINT_PATCHLIST = 39, - D3D_PRIMITIVE_TOPOLOGY_8_CONTROL_POINT_PATCHLIST = 40, - D3D_PRIMITIVE_TOPOLOGY_9_CONTROL_POINT_PATCHLIST = 41, - D3D_PRIMITIVE_TOPOLOGY_10_CONTROL_POINT_PATCHLIST = 42, - D3D_PRIMITIVE_TOPOLOGY_11_CONTROL_POINT_PATCHLIST = 43, - D3D_PRIMITIVE_TOPOLOGY_12_CONTROL_POINT_PATCHLIST = 44, - D3D_PRIMITIVE_TOPOLOGY_13_CONTROL_POINT_PATCHLIST = 45, - D3D_PRIMITIVE_TOPOLOGY_14_CONTROL_POINT_PATCHLIST = 46, - D3D_PRIMITIVE_TOPOLOGY_15_CONTROL_POINT_PATCHLIST = 47, - D3D_PRIMITIVE_TOPOLOGY_16_CONTROL_POINT_PATCHLIST = 48, - D3D_PRIMITIVE_TOPOLOGY_17_CONTROL_POINT_PATCHLIST = 49, - D3D_PRIMITIVE_TOPOLOGY_18_CONTROL_POINT_PATCHLIST = 50, - D3D_PRIMITIVE_TOPOLOGY_19_CONTROL_POINT_PATCHLIST = 51, - D3D_PRIMITIVE_TOPOLOGY_20_CONTROL_POINT_PATCHLIST = 52, - D3D_PRIMITIVE_TOPOLOGY_21_CONTROL_POINT_PATCHLIST = 53, - D3D_PRIMITIVE_TOPOLOGY_22_CONTROL_POINT_PATCHLIST = 54, - D3D_PRIMITIVE_TOPOLOGY_23_CONTROL_POINT_PATCHLIST = 55, - D3D_PRIMITIVE_TOPOLOGY_24_CONTROL_POINT_PATCHLIST = 56, - D3D_PRIMITIVE_TOPOLOGY_25_CONTROL_POINT_PATCHLIST = 57, - D3D_PRIMITIVE_TOPOLOGY_26_CONTROL_POINT_PATCHLIST = 58, - D3D_PRIMITIVE_TOPOLOGY_27_CONTROL_POINT_PATCHLIST = 59, - D3D_PRIMITIVE_TOPOLOGY_28_CONTROL_POINT_PATCHLIST = 60, - D3D_PRIMITIVE_TOPOLOGY_29_CONTROL_POINT_PATCHLIST = 61, - D3D_PRIMITIVE_TOPOLOGY_30_CONTROL_POINT_PATCHLIST = 62, - D3D_PRIMITIVE_TOPOLOGY_31_CONTROL_POINT_PATCHLIST = 63, - D3D_PRIMITIVE_TOPOLOGY_32_CONTROL_POINT_PATCHLIST = 64, - - D3D10_PRIMITIVE_TOPOLOGY_UNDEFINED = D3D_PRIMITIVE_TOPOLOGY_UNDEFINED, - D3D10_PRIMITIVE_TOPOLOGY_POINTLIST = D3D_PRIMITIVE_TOPOLOGY_POINTLIST, - D3D10_PRIMITIVE_TOPOLOGY_LINELIST = D3D_PRIMITIVE_TOPOLOGY_LINELIST, - D3D10_PRIMITIVE_TOPOLOGY_LINESTRIP = D3D_PRIMITIVE_TOPOLOGY_LINESTRIP, - D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST = D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST, - D3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP = D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP, - D3D10_PRIMITIVE_TOPOLOGY_LINELIST_ADJ = D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ, - D3D10_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ = D3D_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ, - D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ = D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ, - D3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ = D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ, - - D3D11_PRIMITIVE_TOPOLOGY_UNDEFINED = D3D_PRIMITIVE_TOPOLOGY_UNDEFINED, - D3D11_PRIMITIVE_TOPOLOGY_POINTLIST = D3D_PRIMITIVE_TOPOLOGY_POINTLIST, - D3D11_PRIMITIVE_TOPOLOGY_LINELIST = D3D_PRIMITIVE_TOPOLOGY_LINELIST, - D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP = D3D_PRIMITIVE_TOPOLOGY_LINESTRIP, - D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST = D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST, - D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP = D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP, - D3D11_PRIMITIVE_TOPOLOGY_LINELIST_ADJ = D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ, - D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ = D3D_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ, - D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ = D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ, - D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ = D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ, - D3D11_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_2_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_2_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_4_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_4_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_5_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_5_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_6_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_6_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_7_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_7_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_8_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_8_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_9_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_9_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_10_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_10_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_11_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_11_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_12_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_12_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_13_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_13_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_14_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_14_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_15_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_15_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_16_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_16_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_17_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_17_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_18_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_18_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_19_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_19_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_20_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_20_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_21_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_21_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_22_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_22_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_23_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_23_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_24_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_24_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_25_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_25_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_26_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_26_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_27_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_27_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_28_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_28_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_29_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_29_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_30_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_30_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_31_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_31_CONTROL_POINT_PATCHLIST, - D3D11_PRIMITIVE_TOPOLOGY_32_CONTROL_POINT_PATCHLIST = D3D_PRIMITIVE_TOPOLOGY_32_CONTROL_POINT_PATCHLIST -} D3D_PRIMITIVE_TOPOLOGY; - -typedef enum D3D_PRIMITIVE -{ - D3D_PRIMITIVE_UNDEFINED = 0, - D3D_PRIMITIVE_POINT = 1, - D3D_PRIMITIVE_LINE = 2, - D3D_PRIMITIVE_TRIANGLE = 3, - // Adjacency values should be equal to (0x4 & non-adjacency): - D3D_PRIMITIVE_LINE_ADJ = 6, - D3D_PRIMITIVE_TRIANGLE_ADJ = 7, - D3D_PRIMITIVE_1_CONTROL_POINT_PATCH = 8, - D3D_PRIMITIVE_2_CONTROL_POINT_PATCH = 9, - D3D_PRIMITIVE_3_CONTROL_POINT_PATCH = 10, - D3D_PRIMITIVE_4_CONTROL_POINT_PATCH = 11, - D3D_PRIMITIVE_5_CONTROL_POINT_PATCH = 12, - D3D_PRIMITIVE_6_CONTROL_POINT_PATCH = 13, - D3D_PRIMITIVE_7_CONTROL_POINT_PATCH = 14, - D3D_PRIMITIVE_8_CONTROL_POINT_PATCH = 15, - D3D_PRIMITIVE_9_CONTROL_POINT_PATCH = 16, - D3D_PRIMITIVE_10_CONTROL_POINT_PATCH = 17, - D3D_PRIMITIVE_11_CONTROL_POINT_PATCH = 18, - D3D_PRIMITIVE_12_CONTROL_POINT_PATCH = 19, - D3D_PRIMITIVE_13_CONTROL_POINT_PATCH = 20, - D3D_PRIMITIVE_14_CONTROL_POINT_PATCH = 21, - D3D_PRIMITIVE_15_CONTROL_POINT_PATCH = 22, - D3D_PRIMITIVE_16_CONTROL_POINT_PATCH = 23, - D3D_PRIMITIVE_17_CONTROL_POINT_PATCH = 24, - D3D_PRIMITIVE_18_CONTROL_POINT_PATCH = 25, - D3D_PRIMITIVE_19_CONTROL_POINT_PATCH = 26, - D3D_PRIMITIVE_20_CONTROL_POINT_PATCH = 27, - D3D_PRIMITIVE_21_CONTROL_POINT_PATCH = 28, - D3D_PRIMITIVE_22_CONTROL_POINT_PATCH = 29, - D3D_PRIMITIVE_23_CONTROL_POINT_PATCH = 30, - D3D_PRIMITIVE_24_CONTROL_POINT_PATCH = 31, - D3D_PRIMITIVE_25_CONTROL_POINT_PATCH = 32, - D3D_PRIMITIVE_26_CONTROL_POINT_PATCH = 33, - D3D_PRIMITIVE_27_CONTROL_POINT_PATCH = 34, - D3D_PRIMITIVE_28_CONTROL_POINT_PATCH = 35, - D3D_PRIMITIVE_29_CONTROL_POINT_PATCH = 36, - D3D_PRIMITIVE_30_CONTROL_POINT_PATCH = 37, - D3D_PRIMITIVE_31_CONTROL_POINT_PATCH = 38, - D3D_PRIMITIVE_32_CONTROL_POINT_PATCH = 39, - - D3D10_PRIMITIVE_UNDEFINED = D3D_PRIMITIVE_UNDEFINED, - D3D10_PRIMITIVE_POINT = D3D_PRIMITIVE_POINT, - D3D10_PRIMITIVE_LINE = D3D_PRIMITIVE_LINE, - D3D10_PRIMITIVE_TRIANGLE = D3D_PRIMITIVE_TRIANGLE, - D3D10_PRIMITIVE_LINE_ADJ = D3D_PRIMITIVE_LINE_ADJ, - D3D10_PRIMITIVE_TRIANGLE_ADJ = D3D_PRIMITIVE_TRIANGLE_ADJ, - - D3D11_PRIMITIVE_UNDEFINED = D3D_PRIMITIVE_UNDEFINED, - D3D11_PRIMITIVE_POINT = D3D_PRIMITIVE_POINT, - D3D11_PRIMITIVE_LINE = D3D_PRIMITIVE_LINE, - D3D11_PRIMITIVE_TRIANGLE = D3D_PRIMITIVE_TRIANGLE, - D3D11_PRIMITIVE_LINE_ADJ = D3D_PRIMITIVE_LINE_ADJ, - D3D11_PRIMITIVE_TRIANGLE_ADJ = D3D_PRIMITIVE_TRIANGLE_ADJ, - D3D11_PRIMITIVE_1_CONTROL_POINT_PATCH = D3D_PRIMITIVE_1_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_2_CONTROL_POINT_PATCH = D3D_PRIMITIVE_2_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_3_CONTROL_POINT_PATCH = D3D_PRIMITIVE_3_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_4_CONTROL_POINT_PATCH = D3D_PRIMITIVE_4_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_5_CONTROL_POINT_PATCH = D3D_PRIMITIVE_5_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_6_CONTROL_POINT_PATCH = D3D_PRIMITIVE_6_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_7_CONTROL_POINT_PATCH = D3D_PRIMITIVE_7_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_8_CONTROL_POINT_PATCH = D3D_PRIMITIVE_8_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_9_CONTROL_POINT_PATCH = D3D_PRIMITIVE_9_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_10_CONTROL_POINT_PATCH = D3D_PRIMITIVE_10_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_11_CONTROL_POINT_PATCH = D3D_PRIMITIVE_11_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_12_CONTROL_POINT_PATCH = D3D_PRIMITIVE_12_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_13_CONTROL_POINT_PATCH = D3D_PRIMITIVE_13_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_14_CONTROL_POINT_PATCH = D3D_PRIMITIVE_14_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_15_CONTROL_POINT_PATCH = D3D_PRIMITIVE_15_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_16_CONTROL_POINT_PATCH = D3D_PRIMITIVE_16_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_17_CONTROL_POINT_PATCH = D3D_PRIMITIVE_17_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_18_CONTROL_POINT_PATCH = D3D_PRIMITIVE_18_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_19_CONTROL_POINT_PATCH = D3D_PRIMITIVE_19_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_20_CONTROL_POINT_PATCH = D3D_PRIMITIVE_20_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_21_CONTROL_POINT_PATCH = D3D_PRIMITIVE_21_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_22_CONTROL_POINT_PATCH = D3D_PRIMITIVE_22_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_23_CONTROL_POINT_PATCH = D3D_PRIMITIVE_23_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_24_CONTROL_POINT_PATCH = D3D_PRIMITIVE_24_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_25_CONTROL_POINT_PATCH = D3D_PRIMITIVE_25_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_26_CONTROL_POINT_PATCH = D3D_PRIMITIVE_26_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_27_CONTROL_POINT_PATCH = D3D_PRIMITIVE_27_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_28_CONTROL_POINT_PATCH = D3D_PRIMITIVE_28_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_29_CONTROL_POINT_PATCH = D3D_PRIMITIVE_29_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_30_CONTROL_POINT_PATCH = D3D_PRIMITIVE_30_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_31_CONTROL_POINT_PATCH = D3D_PRIMITIVE_31_CONTROL_POINT_PATCH, - D3D11_PRIMITIVE_32_CONTROL_POINT_PATCH = D3D_PRIMITIVE_32_CONTROL_POINT_PATCH, -} D3D_PRIMITIVE; - -typedef enum D3D_SRV_DIMENSION -{ - D3D_SRV_DIMENSION_UNKNOWN = 0, - D3D_SRV_DIMENSION_BUFFER = 1, - D3D_SRV_DIMENSION_TEXTURE1D = 2, - D3D_SRV_DIMENSION_TEXTURE1DARRAY = 3, - D3D_SRV_DIMENSION_TEXTURE2D = 4, - D3D_SRV_DIMENSION_TEXTURE2DARRAY = 5, - D3D_SRV_DIMENSION_TEXTURE2DMS = 6, - D3D_SRV_DIMENSION_TEXTURE2DMSARRAY = 7, - D3D_SRV_DIMENSION_TEXTURE3D = 8, - D3D_SRV_DIMENSION_TEXTURECUBE = 9, - D3D_SRV_DIMENSION_TEXTURECUBEARRAY = 10, - D3D_SRV_DIMENSION_BUFFEREX = 11, - - D3D10_SRV_DIMENSION_UNKNOWN = D3D_SRV_DIMENSION_UNKNOWN, - D3D10_SRV_DIMENSION_BUFFER = D3D_SRV_DIMENSION_BUFFER, - D3D10_SRV_DIMENSION_TEXTURE1D = D3D_SRV_DIMENSION_TEXTURE1D, - D3D10_SRV_DIMENSION_TEXTURE1DARRAY = D3D_SRV_DIMENSION_TEXTURE1DARRAY, - D3D10_SRV_DIMENSION_TEXTURE2D = D3D_SRV_DIMENSION_TEXTURE2D, - D3D10_SRV_DIMENSION_TEXTURE2DARRAY = D3D_SRV_DIMENSION_TEXTURE2DARRAY, - D3D10_SRV_DIMENSION_TEXTURE2DMS = D3D_SRV_DIMENSION_TEXTURE2DMS, - D3D10_SRV_DIMENSION_TEXTURE2DMSARRAY = D3D_SRV_DIMENSION_TEXTURE2DMSARRAY, - D3D10_SRV_DIMENSION_TEXTURE3D = D3D_SRV_DIMENSION_TEXTURE3D, - D3D10_SRV_DIMENSION_TEXTURECUBE = D3D_SRV_DIMENSION_TEXTURECUBE, - - D3D10_1_SRV_DIMENSION_UNKNOWN = D3D_SRV_DIMENSION_UNKNOWN, - D3D10_1_SRV_DIMENSION_BUFFER = D3D_SRV_DIMENSION_BUFFER, - D3D10_1_SRV_DIMENSION_TEXTURE1D = D3D_SRV_DIMENSION_TEXTURE1D, - D3D10_1_SRV_DIMENSION_TEXTURE1DARRAY = D3D_SRV_DIMENSION_TEXTURE1DARRAY, - D3D10_1_SRV_DIMENSION_TEXTURE2D = D3D_SRV_DIMENSION_TEXTURE2D, - D3D10_1_SRV_DIMENSION_TEXTURE2DARRAY = D3D_SRV_DIMENSION_TEXTURE2DARRAY, - D3D10_1_SRV_DIMENSION_TEXTURE2DMS = D3D_SRV_DIMENSION_TEXTURE2DMS, - D3D10_1_SRV_DIMENSION_TEXTURE2DMSARRAY = D3D_SRV_DIMENSION_TEXTURE2DMSARRAY, - D3D10_1_SRV_DIMENSION_TEXTURE3D = D3D_SRV_DIMENSION_TEXTURE3D, - D3D10_1_SRV_DIMENSION_TEXTURECUBE = D3D_SRV_DIMENSION_TEXTURECUBE, - D3D10_1_SRV_DIMENSION_TEXTURECUBEARRAY = D3D_SRV_DIMENSION_TEXTURECUBEARRAY, - - D3D11_SRV_DIMENSION_UNKNOWN = D3D_SRV_DIMENSION_UNKNOWN, - D3D11_SRV_DIMENSION_BUFFER = D3D_SRV_DIMENSION_BUFFER, - D3D11_SRV_DIMENSION_TEXTURE1D = D3D_SRV_DIMENSION_TEXTURE1D, - D3D11_SRV_DIMENSION_TEXTURE1DARRAY = D3D_SRV_DIMENSION_TEXTURE1DARRAY, - D3D11_SRV_DIMENSION_TEXTURE2D = D3D_SRV_DIMENSION_TEXTURE2D, - D3D11_SRV_DIMENSION_TEXTURE2DARRAY = D3D_SRV_DIMENSION_TEXTURE2DARRAY, - D3D11_SRV_DIMENSION_TEXTURE2DMS = D3D_SRV_DIMENSION_TEXTURE2DMS, - D3D11_SRV_DIMENSION_TEXTURE2DMSARRAY = D3D_SRV_DIMENSION_TEXTURE2DMSARRAY, - D3D11_SRV_DIMENSION_TEXTURE3D = D3D_SRV_DIMENSION_TEXTURE3D, - D3D11_SRV_DIMENSION_TEXTURECUBE = D3D_SRV_DIMENSION_TEXTURECUBE, - D3D11_SRV_DIMENSION_TEXTURECUBEARRAY = D3D_SRV_DIMENSION_TEXTURECUBEARRAY, - D3D11_SRV_DIMENSION_BUFFEREX = D3D_SRV_DIMENSION_BUFFEREX, -} D3D_SRV_DIMENSION; - -// Bits in shaders indicating features they use which the runtime checks against current device support: -cpp_quote("#define D3D_SHADER_FEATURE_DOUBLES 0x00001") -cpp_quote("#define D3D_SHADER_FEATURE_COMPUTE_SHADERS_PLUS_RAW_AND_STRUCTURED_BUFFERS_VIA_SHADER_4_X 0x00002") -cpp_quote("#define D3D_SHADER_FEATURE_UAVS_AT_EVERY_STAGE 0x00004") -cpp_quote("#define D3D_SHADER_FEATURE_64_UAVS 0x00008") -cpp_quote("#define D3D_SHADER_FEATURE_MINIMUM_PRECISION 0x00010") -cpp_quote("#define D3D_SHADER_FEATURE_11_1_DOUBLE_EXTENSIONS 0x00020") -cpp_quote("#define D3D_SHADER_FEATURE_11_1_SHADER_EXTENSIONS 0x00040") -cpp_quote("#define D3D_SHADER_FEATURE_LEVEL_9_COMPARISON_FILTERING 0x00080") -cpp_quote("#define D3D_SHADER_FEATURE_TILED_RESOURCES 0x00100") -cpp_quote("#define D3D_SHADER_FEATURE_STENCIL_REF 0x00200") -cpp_quote("#define D3D_SHADER_FEATURE_INNER_COVERAGE 0x00400") -cpp_quote("#define D3D_SHADER_FEATURE_TYPED_UAV_LOAD_ADDITIONAL_FORMATS 0x00800") -cpp_quote("#define D3D_SHADER_FEATURE_ROVS 0x01000") -cpp_quote("#define D3D_SHADER_FEATURE_VIEWPORT_AND_RT_ARRAY_INDEX_FROM_ANY_SHADER_FEEDING_RASTERIZER 0x02000") -cpp_quote("#define D3D_SHADER_FEATURE_WAVE_OPS 0x04000") -cpp_quote("#define D3D_SHADER_FEATURE_INT64_OPS 0x08000") -cpp_quote("#define D3D_SHADER_FEATURE_VIEW_ID 0x10000") -cpp_quote("#define D3D_SHADER_FEATURE_BARYCENTRICS 0x20000") -cpp_quote("#define D3D_SHADER_FEATURE_NATIVE_16BIT_OPS 0x40000") -cpp_quote("#define D3D_SHADER_FEATURE_SHADING_RATE 0x80000") -cpp_quote("#define D3D_SHADER_FEATURE_RAYTRACING_TIER_1_1 0x100000") -cpp_quote("#define D3D_SHADER_FEATURE_SAMPLER_FEEDBACK 0x200000") -cpp_quote("#define D3D_SHADER_FEATURE_ATOMIC_INT64_ON_TYPED_RESOURCE 0x400000") -cpp_quote("#define D3D_SHADER_FEATURE_ATOMIC_INT64_ON_GROUP_SHARED 0x800000") -cpp_quote("#define D3D_SHADER_FEATURE_DERIVATIVES_IN_MESH_AND_AMPLIFICATION_SHADERS 0x1000000") -cpp_quote("#define D3D_SHADER_FEATURE_RESOURCE_DESCRIPTOR_HEAP_INDEXING 0x2000000") -cpp_quote("#define D3D_SHADER_FEATURE_SAMPLER_DESCRIPTOR_HEAP_INDEXING 0x4000000") -cpp_quote("#define D3D_SHADER_FEATURE_WAVE_MMA 0x8000000") -cpp_quote("#define D3D_SHADER_FEATURE_ATOMIC_INT64_ON_DESCRIPTOR_HEAP_RESOURCE 0x10000000") -cpp_quote("#define D3D_SHADER_FEATURE_ADVANCED_TEXTURE_OPS 0x20000000") -cpp_quote("#define D3D_SHADER_FEATURE_WRITEABLE_MSAA_TEXTURES 0x40000000") -cpp_quote("#define D3D_SHADER_FEATURE_SAMPLE_CMP_GRADIENT_OR_BIAS 0x80000000") -cpp_quote("#define D3D_SHADER_FEATURE_EXTENDED_COMMAND_INFO 0x100000000ull") - -// This section is for flags that do not directly indicate a required feature, -// but are used to indicate something about the shader. - -// Flag for any derivative use. This allows call-graph validation -// in the runtime to detect misuse of derivatives for an entry point that cannot -// support it, or to determine when the flag -// D3D_SHADER_FEATURE_DERIVATIVES_IN_MESH_AND_AMPLIFICATION_SHADERS is required. -cpp_quote("#define D3D_OPT_SHADER_FEATURE_USES_DERIVATIVES 0x0000010000000000ull") - -cpp_quote("#define D3D_OPT_SHADER_FEATURE_REQUIRES_GROUP 0x0000020000000000ull") - - -// Additional internal shader feature flags are listed in dxbcutils.h (not relevant/useful for public to see) -// When adding entries here, make sure they don't conflict with what's there. - -//---------------------------------------------------------------------------- -// -// Shader compilation information. -// -//---------------------------------------------------------------------------- - -//---------------------------------------------------------------------------- -// D3D_SHADER_MACRO: -// ---------- -// Preprocessor macro definition. The application pass in a NULL-terminated -// array of this structure to various D3D APIs. This enables the application -// to #define tokens at runtime, before the file is parsed. -//---------------------------------------------------------------------------- - -typedef struct _D3D_SHADER_MACRO -{ - LPCSTR Name; - LPCSTR Definition; -} D3D_SHADER_MACRO, *LPD3D_SHADER_MACRO; - -//---------------------------------------------------------------------------- -// ID3DBlob: -// ------------ -// The buffer object is used by D3D to return arbitrary size data. -// For compatibility with D3D10 this interface is also called ID3D10Blob, -// but the version-neutral form is preferred. -// -// GetBufferPointer - -// Returns a pointer to the beginning of the buffer. -// -// GetBufferSize - -// Returns the size of the buffer, in bytes. -//---------------------------------------------------------------------------- - -// {8BA5FB08-5195-40e2-AC58-0D989C3A0102} -cpp_quote("DEFINE_GUID(IID_ID3D10Blob, 0x8ba5fb08, 0x5195, 0x40e2, 0xac, 0x58, 0xd, 0x98, 0x9c, 0x3a, 0x1, 0x2);") - -[ uuid( 8BA5FB08-5195-40e2-AC58-0D989C3A0102 ), object, local, pointer_default( unique ) ] -interface ID3D10Blob : IUnknown -{ - LPVOID GetBufferPointer(); - SIZE_T GetBufferSize(); -}; - -cpp_quote("typedef interface ID3D10Blob* LPD3D10BLOB;") - -typedef ID3D10Blob ID3DBlob; -cpp_quote("typedef ID3DBlob* LPD3DBLOB;") -cpp_quote("#define IID_ID3DBlob IID_ID3D10Blob") - -// ID3DDestructionNotifier: An interface to QI for, to set a callback which is triggered when the object is fully destroyed -typedef void(__stdcall *PFN_DESTRUCTION_CALLBACK)(void* pData); - -[uuid(a06eb39a-50da-425b-8c31-4eecd6c270f3), object, local, pointer_default(unique)] -interface ID3DDestructionNotifier - : IUnknown -{ - HRESULT RegisterDestructionCallback( - [annotation("_In_")] PFN_DESTRUCTION_CALLBACK callbackFn, - [annotation("_In_")] void* pData, - [annotation("_Out_")] UINT* pCallbackID - ); - HRESULT UnregisterDestructionCallback( - [annotation("_In_")] UINT callbackID - ); -}; - -typedef enum _D3D_INCLUDE_TYPE -{ - D3D_INCLUDE_LOCAL, - D3D_INCLUDE_SYSTEM, - - D3D10_INCLUDE_LOCAL = D3D_INCLUDE_LOCAL, - D3D10_INCLUDE_SYSTEM = D3D_INCLUDE_SYSTEM, - - // force 32-bit size enum - D3D_INCLUDE_FORCE_DWORD = 0x7fffffff -} D3D_INCLUDE_TYPE; - -//---------------------------------------------------------------------------- -// ID3DInclude: -// ------------- -// This interface is intended to be implemented by the application, and can -// be used by various D3D APIs. This enables application-specific handling -// of #include directives in source files. -// -// Open() -// Opens an include file. If successful, it should fill in ppData and -// pBytes. The data pointer returned must remain valid until Close is -// subsequently called. The name of the file is encoded in UTF-8 format. -// Close() -// Closes an include file. If Open was successful, Close is guaranteed -// to be called before the API using this interface returns. -//---------------------------------------------------------------------------- - -cpp_quote("typedef interface ID3DInclude ID3DInclude;") - -cpp_quote("#undef INTERFACE") -cpp_quote("#define INTERFACE ID3DInclude") - -cpp_quote("DECLARE_INTERFACE(ID3DInclude)") -cpp_quote("{") -cpp_quote(" STDMETHOD(Open)(THIS_ D3D_INCLUDE_TYPE IncludeType, LPCSTR pFileName, LPCVOID pParentData, LPCVOID *ppData, UINT *pBytes) PURE;") -cpp_quote(" STDMETHOD(Close)(THIS_ LPCVOID pData) PURE;") -cpp_quote("};") - -cpp_quote("typedef ID3DInclude* LPD3DINCLUDE;") - -//---------------------------------------------------------------------------- -// -// Shader reflection information. -// -//---------------------------------------------------------------------------- - -typedef enum _D3D_SHADER_VARIABLE_CLASS -{ - D3D_SVC_SCALAR, - D3D_SVC_VECTOR, - D3D_SVC_MATRIX_ROWS, - D3D_SVC_MATRIX_COLUMNS, - D3D_SVC_OBJECT, - D3D_SVC_STRUCT, - D3D_SVC_INTERFACE_CLASS, - D3D_SVC_INTERFACE_POINTER, - - D3D10_SVC_SCALAR = D3D_SVC_SCALAR, - D3D10_SVC_VECTOR = D3D_SVC_VECTOR, - D3D10_SVC_MATRIX_ROWS = D3D_SVC_MATRIX_ROWS, - D3D10_SVC_MATRIX_COLUMNS = D3D_SVC_MATRIX_COLUMNS, - D3D10_SVC_OBJECT = D3D_SVC_OBJECT, - D3D10_SVC_STRUCT = D3D_SVC_STRUCT, - - D3D11_SVC_INTERFACE_CLASS = D3D_SVC_INTERFACE_CLASS, - D3D11_SVC_INTERFACE_POINTER = D3D_SVC_INTERFACE_POINTER, - - // force 32-bit size enum - D3D_SVC_FORCE_DWORD = 0x7fffffff -} D3D_SHADER_VARIABLE_CLASS; - -typedef enum _D3D_SHADER_VARIABLE_FLAGS -{ - D3D_SVF_USERPACKED = 1, - D3D_SVF_USED = 2, - - D3D_SVF_INTERFACE_POINTER = 4, - D3D_SVF_INTERFACE_PARAMETER = 8, - - D3D10_SVF_USERPACKED = D3D_SVF_USERPACKED, - D3D10_SVF_USED = D3D_SVF_USED, - - D3D11_SVF_INTERFACE_POINTER = D3D_SVF_INTERFACE_POINTER, - D3D11_SVF_INTERFACE_PARAMETER = D3D_SVF_INTERFACE_PARAMETER, - - // force 32-bit size enum - D3D_SVF_FORCE_DWORD = 0x7fffffff -} D3D_SHADER_VARIABLE_FLAGS; - -typedef enum _D3D_SHADER_VARIABLE_TYPE -{ - D3D_SVT_VOID = 0, - D3D_SVT_BOOL = 1, - D3D_SVT_INT = 2, - D3D_SVT_FLOAT = 3, - D3D_SVT_STRING = 4, - D3D_SVT_TEXTURE = 5, - D3D_SVT_TEXTURE1D = 6, - D3D_SVT_TEXTURE2D = 7, - D3D_SVT_TEXTURE3D = 8, - D3D_SVT_TEXTURECUBE = 9, - D3D_SVT_SAMPLER = 10, - D3D_SVT_SAMPLER1D = 11, - D3D_SVT_SAMPLER2D = 12, - D3D_SVT_SAMPLER3D = 13, - D3D_SVT_SAMPLERCUBE = 14, - D3D_SVT_PIXELSHADER = 15, - D3D_SVT_VERTEXSHADER = 16, - D3D_SVT_PIXELFRAGMENT = 17, - D3D_SVT_VERTEXFRAGMENT = 18, - D3D_SVT_UINT = 19, - D3D_SVT_UINT8 = 20, - D3D_SVT_GEOMETRYSHADER = 21, - D3D_SVT_RASTERIZER = 22, - D3D_SVT_DEPTHSTENCIL = 23, - D3D_SVT_BLEND = 24, - D3D_SVT_BUFFER = 25, - D3D_SVT_CBUFFER = 26, - D3D_SVT_TBUFFER = 27, - D3D_SVT_TEXTURE1DARRAY = 28, - D3D_SVT_TEXTURE2DARRAY = 29, - D3D_SVT_RENDERTARGETVIEW = 30, - D3D_SVT_DEPTHSTENCILVIEW = 31, - - D3D_SVT_TEXTURE2DMS = 32, - D3D_SVT_TEXTURE2DMSARRAY = 33, - - D3D_SVT_TEXTURECUBEARRAY = 34, - - D3D_SVT_HULLSHADER = 35, - D3D_SVT_DOMAINSHADER = 36, - - D3D_SVT_INTERFACE_POINTER = 37, - D3D_SVT_COMPUTESHADER = 38, - - D3D_SVT_DOUBLE = 39, - - D3D_SVT_RWTEXTURE1D = 40, - D3D_SVT_RWTEXTURE1DARRAY = 41, - D3D_SVT_RWTEXTURE2D = 42, - D3D_SVT_RWTEXTURE2DARRAY = 43, - D3D_SVT_RWTEXTURE3D = 44, - D3D_SVT_RWBUFFER = 45, - - D3D_SVT_BYTEADDRESS_BUFFER = 46, - D3D_SVT_RWBYTEADDRESS_BUFFER = 47, - D3D_SVT_STRUCTURED_BUFFER = 48, - D3D_SVT_RWSTRUCTURED_BUFFER = 49, - D3D_SVT_APPEND_STRUCTURED_BUFFER = 50, - D3D_SVT_CONSUME_STRUCTURED_BUFFER = 51, - - D3D_SVT_MIN8FLOAT = 52, - D3D_SVT_MIN10FLOAT = 53, - D3D_SVT_MIN16FLOAT = 54, - D3D_SVT_MIN12INT = 55, - D3D_SVT_MIN16INT = 56, - D3D_SVT_MIN16UINT = 57, - - D3D_SVT_INT16 = 58, - D3D_SVT_UINT16 = 59, - D3D_SVT_FLOAT16 = 60, - D3D_SVT_INT64 = 61, - D3D_SVT_UINT64 = 62, - - D3D10_SVT_VOID = D3D_SVT_VOID, - D3D10_SVT_BOOL = D3D_SVT_BOOL, - D3D10_SVT_INT = D3D_SVT_INT, - D3D10_SVT_FLOAT = D3D_SVT_FLOAT, - D3D10_SVT_STRING = D3D_SVT_STRING, - D3D10_SVT_TEXTURE = D3D_SVT_TEXTURE, - D3D10_SVT_TEXTURE1D = D3D_SVT_TEXTURE1D, - D3D10_SVT_TEXTURE2D = D3D_SVT_TEXTURE2D, - D3D10_SVT_TEXTURE3D = D3D_SVT_TEXTURE3D, - D3D10_SVT_TEXTURECUBE = D3D_SVT_TEXTURECUBE, - D3D10_SVT_SAMPLER = D3D_SVT_SAMPLER, - D3D10_SVT_SAMPLER1D = D3D_SVT_SAMPLER1D, - D3D10_SVT_SAMPLER2D = D3D_SVT_SAMPLER2D, - D3D10_SVT_SAMPLER3D = D3D_SVT_SAMPLER3D, - D3D10_SVT_SAMPLERCUBE = D3D_SVT_SAMPLERCUBE, - D3D10_SVT_PIXELSHADER = D3D_SVT_PIXELSHADER, - D3D10_SVT_VERTEXSHADER = D3D_SVT_VERTEXSHADER, - D3D10_SVT_PIXELFRAGMENT = D3D_SVT_PIXELFRAGMENT, - D3D10_SVT_VERTEXFRAGMENT = D3D_SVT_VERTEXFRAGMENT, - D3D10_SVT_UINT = D3D_SVT_UINT, - D3D10_SVT_UINT8 = D3D_SVT_UINT8, - D3D10_SVT_GEOMETRYSHADER = D3D_SVT_GEOMETRYSHADER, - D3D10_SVT_RASTERIZER = D3D_SVT_RASTERIZER, - D3D10_SVT_DEPTHSTENCIL = D3D_SVT_DEPTHSTENCIL, - D3D10_SVT_BLEND = D3D_SVT_BLEND, - D3D10_SVT_BUFFER = D3D_SVT_BUFFER, - D3D10_SVT_CBUFFER = D3D_SVT_CBUFFER, - D3D10_SVT_TBUFFER = D3D_SVT_TBUFFER, - D3D10_SVT_TEXTURE1DARRAY = D3D_SVT_TEXTURE1DARRAY, - D3D10_SVT_TEXTURE2DARRAY = D3D_SVT_TEXTURE2DARRAY, - D3D10_SVT_RENDERTARGETVIEW = D3D_SVT_RENDERTARGETVIEW, - D3D10_SVT_DEPTHSTENCILVIEW = D3D_SVT_DEPTHSTENCILVIEW, - - D3D10_SVT_TEXTURE2DMS = D3D_SVT_TEXTURE2DMS, - D3D10_SVT_TEXTURE2DMSARRAY = D3D_SVT_TEXTURE2DMSARRAY, - - D3D10_SVT_TEXTURECUBEARRAY = D3D_SVT_TEXTURECUBEARRAY, - - D3D11_SVT_HULLSHADER = D3D_SVT_HULLSHADER, - D3D11_SVT_DOMAINSHADER = D3D_SVT_DOMAINSHADER, - - D3D11_SVT_INTERFACE_POINTER = D3D_SVT_INTERFACE_POINTER, - D3D11_SVT_COMPUTESHADER = D3D_SVT_COMPUTESHADER, - - D3D11_SVT_DOUBLE = D3D_SVT_DOUBLE, - - D3D11_SVT_RWTEXTURE1D = D3D_SVT_RWTEXTURE1D, - D3D11_SVT_RWTEXTURE1DARRAY = D3D_SVT_RWTEXTURE1DARRAY, - D3D11_SVT_RWTEXTURE2D = D3D_SVT_RWTEXTURE2D, - D3D11_SVT_RWTEXTURE2DARRAY = D3D_SVT_RWTEXTURE2DARRAY, - D3D11_SVT_RWTEXTURE3D = D3D_SVT_RWTEXTURE3D, - D3D11_SVT_RWBUFFER = D3D_SVT_RWBUFFER, - - D3D11_SVT_BYTEADDRESS_BUFFER = D3D_SVT_BYTEADDRESS_BUFFER, - D3D11_SVT_RWBYTEADDRESS_BUFFER = D3D_SVT_RWBYTEADDRESS_BUFFER, - D3D11_SVT_STRUCTURED_BUFFER = D3D_SVT_STRUCTURED_BUFFER, - D3D11_SVT_RWSTRUCTURED_BUFFER = D3D_SVT_RWSTRUCTURED_BUFFER, - D3D11_SVT_APPEND_STRUCTURED_BUFFER = D3D_SVT_APPEND_STRUCTURED_BUFFER, - D3D11_SVT_CONSUME_STRUCTURED_BUFFER = D3D_SVT_CONSUME_STRUCTURED_BUFFER, - - // force 32-bit size enum - D3D_SVT_FORCE_DWORD = 0x7fffffff -} D3D_SHADER_VARIABLE_TYPE; - -typedef enum _D3D_SHADER_INPUT_FLAGS -{ - D3D_SIF_USERPACKED = 0x01, - D3D_SIF_COMPARISON_SAMPLER = 0x02, // is this a comparison sampler? - D3D_SIF_TEXTURE_COMPONENT_0 = 0x04, // this 2-bit value encodes c - 1, where c - D3D_SIF_TEXTURE_COMPONENT_1 = 0x08, // is the number of components in the texture - D3D_SIF_TEXTURE_COMPONENTS = 0x0c, - D3D_SIF_UNUSED = 0x10, - - D3D10_SIF_USERPACKED = D3D_SIF_USERPACKED, - D3D10_SIF_COMPARISON_SAMPLER = D3D_SIF_COMPARISON_SAMPLER, - D3D10_SIF_TEXTURE_COMPONENT_0 = D3D_SIF_TEXTURE_COMPONENT_0, - D3D10_SIF_TEXTURE_COMPONENT_1 = D3D_SIF_TEXTURE_COMPONENT_1, - D3D10_SIF_TEXTURE_COMPONENTS = D3D_SIF_TEXTURE_COMPONENTS, - - // force 32-bit size enum - D3D_SIF_FORCE_DWORD = 0x7fffffff -} D3D_SHADER_INPUT_FLAGS; - -typedef enum _D3D_SHADER_INPUT_TYPE -{ - D3D_SIT_CBUFFER, - D3D_SIT_TBUFFER, - D3D_SIT_TEXTURE, - D3D_SIT_SAMPLER, - D3D_SIT_UAV_RWTYPED, - D3D_SIT_STRUCTURED, - D3D_SIT_UAV_RWSTRUCTURED, - D3D_SIT_BYTEADDRESS, - D3D_SIT_UAV_RWBYTEADDRESS, - D3D_SIT_UAV_APPEND_STRUCTURED, - D3D_SIT_UAV_CONSUME_STRUCTURED, - D3D_SIT_UAV_RWSTRUCTURED_WITH_COUNTER, - D3D_SIT_RTACCELERATIONSTRUCTURE, - D3D_SIT_UAV_FEEDBACKTEXTURE, - - D3D10_SIT_CBUFFER = D3D_SIT_CBUFFER, - D3D10_SIT_TBUFFER = D3D_SIT_TBUFFER, - D3D10_SIT_TEXTURE = D3D_SIT_TEXTURE, - D3D10_SIT_SAMPLER = D3D_SIT_SAMPLER, - - D3D11_SIT_UAV_RWTYPED = D3D_SIT_UAV_RWTYPED, - D3D11_SIT_STRUCTURED = D3D_SIT_STRUCTURED, - D3D11_SIT_UAV_RWSTRUCTURED = D3D_SIT_UAV_RWSTRUCTURED, - D3D11_SIT_BYTEADDRESS = D3D_SIT_BYTEADDRESS, - D3D11_SIT_UAV_RWBYTEADDRESS = D3D_SIT_UAV_RWBYTEADDRESS, - D3D11_SIT_UAV_APPEND_STRUCTURED = D3D_SIT_UAV_APPEND_STRUCTURED, - D3D11_SIT_UAV_CONSUME_STRUCTURED = D3D_SIT_UAV_CONSUME_STRUCTURED, - D3D11_SIT_UAV_RWSTRUCTURED_WITH_COUNTER = D3D_SIT_UAV_RWSTRUCTURED_WITH_COUNTER, -} D3D_SHADER_INPUT_TYPE; - -typedef enum _D3D_SHADER_CBUFFER_FLAGS -{ - D3D_CBF_USERPACKED = 1, - - D3D10_CBF_USERPACKED = D3D_CBF_USERPACKED, - - // force 32-bit size enum - D3D_CBF_FORCE_DWORD = 0x7fffffff -} D3D_SHADER_CBUFFER_FLAGS; - -typedef enum _D3D_CBUFFER_TYPE -{ - D3D_CT_CBUFFER, - D3D_CT_TBUFFER, - D3D_CT_INTERFACE_POINTERS, - D3D_CT_RESOURCE_BIND_INFO, - - D3D10_CT_CBUFFER = D3D_CT_CBUFFER, - D3D10_CT_TBUFFER = D3D_CT_TBUFFER, - - D3D11_CT_CBUFFER = D3D_CT_CBUFFER, - D3D11_CT_TBUFFER = D3D_CT_TBUFFER, - D3D11_CT_INTERFACE_POINTERS = D3D_CT_INTERFACE_POINTERS, - D3D11_CT_RESOURCE_BIND_INFO = D3D_CT_RESOURCE_BIND_INFO, -} D3D_CBUFFER_TYPE; - -typedef enum D3D_NAME -{ - D3D_NAME_UNDEFINED = 0, - - // Names meaningful to both HLSL and hardware - D3D_NAME_POSITION = 1, - D3D_NAME_CLIP_DISTANCE = 2, - D3D_NAME_CULL_DISTANCE = 3, - D3D_NAME_RENDER_TARGET_ARRAY_INDEX = 4, - D3D_NAME_VIEWPORT_ARRAY_INDEX = 5, - D3D_NAME_VERTEX_ID = 6, - D3D_NAME_PRIMITIVE_ID = 7, - D3D_NAME_INSTANCE_ID = 8, - D3D_NAME_IS_FRONT_FACE = 9, - D3D_NAME_SAMPLE_INDEX = 10, - D3D_NAME_FINAL_QUAD_EDGE_TESSFACTOR = 11, - D3D_NAME_FINAL_QUAD_INSIDE_TESSFACTOR = 12, - D3D_NAME_FINAL_TRI_EDGE_TESSFACTOR = 13, - D3D_NAME_FINAL_TRI_INSIDE_TESSFACTOR = 14, - D3D_NAME_FINAL_LINE_DETAIL_TESSFACTOR = 15, - D3D_NAME_FINAL_LINE_DENSITY_TESSFACTOR = 16, - D3D_NAME_BARYCENTRICS = 23, - D3D_NAME_SHADINGRATE = 24, - D3D_NAME_CULLPRIMITIVE = 25, - - // Names meaningful to HLSL only - D3D_NAME_TARGET = 64, - D3D_NAME_DEPTH = 65, - D3D_NAME_COVERAGE = 66, - D3D_NAME_DEPTH_GREATER_EQUAL = 67, - D3D_NAME_DEPTH_LESS_EQUAL = 68, - D3D_NAME_STENCIL_REF = 69, - D3D_NAME_INNER_COVERAGE = 70, - - D3D10_NAME_UNDEFINED = D3D_NAME_UNDEFINED, - D3D10_NAME_POSITION = D3D_NAME_POSITION, - D3D10_NAME_CLIP_DISTANCE = D3D_NAME_CLIP_DISTANCE, - D3D10_NAME_CULL_DISTANCE = D3D_NAME_CULL_DISTANCE, - D3D10_NAME_RENDER_TARGET_ARRAY_INDEX = D3D_NAME_RENDER_TARGET_ARRAY_INDEX, - D3D10_NAME_VIEWPORT_ARRAY_INDEX = D3D_NAME_VIEWPORT_ARRAY_INDEX, - D3D10_NAME_VERTEX_ID = D3D_NAME_VERTEX_ID, - D3D10_NAME_PRIMITIVE_ID = D3D_NAME_PRIMITIVE_ID, - D3D10_NAME_INSTANCE_ID = D3D_NAME_INSTANCE_ID, - D3D10_NAME_IS_FRONT_FACE = D3D_NAME_IS_FRONT_FACE, - D3D10_NAME_SAMPLE_INDEX = D3D_NAME_SAMPLE_INDEX, - D3D10_NAME_TARGET = D3D_NAME_TARGET, - D3D10_NAME_DEPTH = D3D_NAME_DEPTH, - D3D10_NAME_COVERAGE = D3D_NAME_COVERAGE, - - D3D11_NAME_FINAL_QUAD_EDGE_TESSFACTOR = D3D_NAME_FINAL_QUAD_EDGE_TESSFACTOR, - D3D11_NAME_FINAL_QUAD_INSIDE_TESSFACTOR = D3D_NAME_FINAL_QUAD_INSIDE_TESSFACTOR, - D3D11_NAME_FINAL_TRI_EDGE_TESSFACTOR = D3D_NAME_FINAL_TRI_EDGE_TESSFACTOR, - D3D11_NAME_FINAL_TRI_INSIDE_TESSFACTOR = D3D_NAME_FINAL_TRI_INSIDE_TESSFACTOR, - D3D11_NAME_FINAL_LINE_DETAIL_TESSFACTOR = D3D_NAME_FINAL_LINE_DETAIL_TESSFACTOR, - D3D11_NAME_FINAL_LINE_DENSITY_TESSFACTOR = D3D_NAME_FINAL_LINE_DENSITY_TESSFACTOR, - D3D11_NAME_DEPTH_GREATER_EQUAL = D3D_NAME_DEPTH_GREATER_EQUAL, - D3D11_NAME_DEPTH_LESS_EQUAL = D3D_NAME_DEPTH_LESS_EQUAL, - - D3D11_NAME_STENCIL_REF = D3D_NAME_STENCIL_REF, - D3D11_NAME_INNER_COVERAGE = D3D_NAME_INNER_COVERAGE, - - D3D12_NAME_BARYCENTRICS = D3D_NAME_BARYCENTRICS, - D3D12_NAME_SHADINGRATE = D3D_NAME_SHADINGRATE, - D3D12_NAME_CULLPRIMITIVE = D3D_NAME_CULLPRIMITIVE, -} D3D_NAME; - -typedef enum D3D_RESOURCE_RETURN_TYPE -{ - D3D_RETURN_TYPE_UNORM = 1, - D3D_RETURN_TYPE_SNORM = 2, - D3D_RETURN_TYPE_SINT = 3, - D3D_RETURN_TYPE_UINT = 4, - D3D_RETURN_TYPE_FLOAT = 5, - D3D_RETURN_TYPE_MIXED = 6, - D3D_RETURN_TYPE_DOUBLE = 7, - D3D_RETURN_TYPE_CONTINUED = 8, - - D3D10_RETURN_TYPE_UNORM = D3D_RETURN_TYPE_UNORM, - D3D10_RETURN_TYPE_SNORM = D3D_RETURN_TYPE_SNORM, - D3D10_RETURN_TYPE_SINT = D3D_RETURN_TYPE_SINT, - D3D10_RETURN_TYPE_UINT = D3D_RETURN_TYPE_UINT, - D3D10_RETURN_TYPE_FLOAT = D3D_RETURN_TYPE_FLOAT, - D3D10_RETURN_TYPE_MIXED = D3D_RETURN_TYPE_MIXED, - - D3D11_RETURN_TYPE_UNORM = D3D_RETURN_TYPE_UNORM, - D3D11_RETURN_TYPE_SNORM = D3D_RETURN_TYPE_SNORM, - D3D11_RETURN_TYPE_SINT = D3D_RETURN_TYPE_SINT, - D3D11_RETURN_TYPE_UINT = D3D_RETURN_TYPE_UINT, - D3D11_RETURN_TYPE_FLOAT = D3D_RETURN_TYPE_FLOAT, - D3D11_RETURN_TYPE_MIXED = D3D_RETURN_TYPE_MIXED, - D3D11_RETURN_TYPE_DOUBLE = D3D_RETURN_TYPE_DOUBLE, - D3D11_RETURN_TYPE_CONTINUED = D3D_RETURN_TYPE_CONTINUED, -} D3D_RESOURCE_RETURN_TYPE; - -typedef enum D3D_REGISTER_COMPONENT_TYPE -{ - D3D_REGISTER_COMPONENT_UNKNOWN = 0, - D3D_REGISTER_COMPONENT_UINT32 = 1, - D3D_REGISTER_COMPONENT_SINT32 = 2, - D3D_REGISTER_COMPONENT_FLOAT32 = 3, - D3D_REGISTER_COMPONENT_UINT16 = 4, - D3D_REGISTER_COMPONENT_SINT16 = 5, - D3D_REGISTER_COMPONENT_FLOAT16 = 6, - D3D_REGISTER_COMPONENT_UINT64 = 7, - D3D_REGISTER_COMPONENT_SINT64 = 8, - D3D_REGISTER_COMPONENT_FLOAT64 = 9, - - D3D10_REGISTER_COMPONENT_UNKNOWN = D3D_REGISTER_COMPONENT_UNKNOWN, - D3D10_REGISTER_COMPONENT_UINT32 = D3D_REGISTER_COMPONENT_UINT32, - D3D10_REGISTER_COMPONENT_SINT32 = D3D_REGISTER_COMPONENT_SINT32, - D3D10_REGISTER_COMPONENT_FLOAT32 = D3D_REGISTER_COMPONENT_FLOAT32, - D3D10_REGISTER_COMPONENT_UINT16 = D3D_REGISTER_COMPONENT_UINT16, - D3D10_REGISTER_COMPONENT_SINT16 = D3D_REGISTER_COMPONENT_SINT16, - D3D10_REGISTER_COMPONENT_FLOAT16 = D3D_REGISTER_COMPONENT_FLOAT16, - D3D10_REGISTER_COMPONENT_UINT64 = D3D_REGISTER_COMPONENT_UINT64, - D3D10_REGISTER_COMPONENT_SINT64 = D3D_REGISTER_COMPONENT_SINT64, - D3D10_REGISTER_COMPONENT_FLOAT64 = D3D_REGISTER_COMPONENT_FLOAT64, -} D3D_REGISTER_COMPONENT_TYPE; - -typedef enum D3D_TESSELLATOR_DOMAIN -{ - D3D_TESSELLATOR_DOMAIN_UNDEFINED = 0, - D3D_TESSELLATOR_DOMAIN_ISOLINE = 1, - D3D_TESSELLATOR_DOMAIN_TRI = 2, - D3D_TESSELLATOR_DOMAIN_QUAD = 3, - - D3D11_TESSELLATOR_DOMAIN_UNDEFINED = D3D_TESSELLATOR_DOMAIN_UNDEFINED, - D3D11_TESSELLATOR_DOMAIN_ISOLINE = D3D_TESSELLATOR_DOMAIN_ISOLINE, - D3D11_TESSELLATOR_DOMAIN_TRI = D3D_TESSELLATOR_DOMAIN_TRI, - D3D11_TESSELLATOR_DOMAIN_QUAD = D3D_TESSELLATOR_DOMAIN_QUAD, -} D3D_TESSELLATOR_DOMAIN; - -typedef enum D3D_TESSELLATOR_PARTITIONING -{ - D3D_TESSELLATOR_PARTITIONING_UNDEFINED = 0, - D3D_TESSELLATOR_PARTITIONING_INTEGER = 1, - D3D_TESSELLATOR_PARTITIONING_POW2 = 2, - D3D_TESSELLATOR_PARTITIONING_FRACTIONAL_ODD = 3, - D3D_TESSELLATOR_PARTITIONING_FRACTIONAL_EVEN = 4, - - D3D11_TESSELLATOR_PARTITIONING_UNDEFINED = D3D_TESSELLATOR_PARTITIONING_UNDEFINED, - D3D11_TESSELLATOR_PARTITIONING_INTEGER = D3D_TESSELLATOR_PARTITIONING_INTEGER, - D3D11_TESSELLATOR_PARTITIONING_POW2 = D3D_TESSELLATOR_PARTITIONING_POW2, - D3D11_TESSELLATOR_PARTITIONING_FRACTIONAL_ODD = D3D_TESSELLATOR_PARTITIONING_FRACTIONAL_ODD, - D3D11_TESSELLATOR_PARTITIONING_FRACTIONAL_EVEN = D3D_TESSELLATOR_PARTITIONING_FRACTIONAL_EVEN, -} D3D_TESSELLATOR_PARTITIONING; - -typedef enum D3D_TESSELLATOR_OUTPUT_PRIMITIVE -{ - D3D_TESSELLATOR_OUTPUT_UNDEFINED = 0, - D3D_TESSELLATOR_OUTPUT_POINT = 1, - D3D_TESSELLATOR_OUTPUT_LINE = 2, - D3D_TESSELLATOR_OUTPUT_TRIANGLE_CW = 3, - D3D_TESSELLATOR_OUTPUT_TRIANGLE_CCW = 4, - - D3D11_TESSELLATOR_OUTPUT_UNDEFINED = D3D_TESSELLATOR_OUTPUT_UNDEFINED, - D3D11_TESSELLATOR_OUTPUT_POINT = D3D_TESSELLATOR_OUTPUT_POINT, - D3D11_TESSELLATOR_OUTPUT_LINE = D3D_TESSELLATOR_OUTPUT_LINE, - D3D11_TESSELLATOR_OUTPUT_TRIANGLE_CW = D3D_TESSELLATOR_OUTPUT_TRIANGLE_CW, - D3D11_TESSELLATOR_OUTPUT_TRIANGLE_CCW = D3D_TESSELLATOR_OUTPUT_TRIANGLE_CCW, -} D3D_TESSELLATOR_OUTPUT_PRIMITIVE; - -typedef enum D3D_MIN_PRECISION -{ - D3D_MIN_PRECISION_DEFAULT = 0, // Default precision for the shader model - D3D_MIN_PRECISION_FLOAT_16 = 1, // Min 16 bit/component float - D3D_MIN_PRECISION_FLOAT_2_8 = 2, // Min 10(2.8)bit/comp. float - D3D_MIN_PRECISION_RESERVED = 3, // Reserved for future use - D3D_MIN_PRECISION_SINT_16 = 4, // Min 16 bit/comp. signed integer - D3D_MIN_PRECISION_UINT_16 = 5, // Min 16 bit/comp. unsigned integer - - // These values are abstractions of width only for use in situations - // where a general width is needed instead of specific types. They - // will never be used in shader operands. - D3D_MIN_PRECISION_ANY_16 = 0xf0, - D3D_MIN_PRECISION_ANY_10 = 0xf1, -} D3D_MIN_PRECISION; - -typedef enum D3D_INTERPOLATION_MODE -{ - D3D_INTERPOLATION_UNDEFINED = 0, - D3D_INTERPOLATION_CONSTANT = 1, - D3D_INTERPOLATION_LINEAR = 2, - D3D_INTERPOLATION_LINEAR_CENTROID = 3, - D3D_INTERPOLATION_LINEAR_NOPERSPECTIVE = 4, - D3D_INTERPOLATION_LINEAR_NOPERSPECTIVE_CENTROID = 5, - D3D_INTERPOLATION_LINEAR_SAMPLE = 6, - D3D_INTERPOLATION_LINEAR_NOPERSPECTIVE_SAMPLE = 7, -} D3D_INTERPOLATION_MODE; - -// Parameter flags. -typedef enum _D3D_PARAMETER_FLAGS -{ - D3D_PF_NONE = 0x00000000, - D3D_PF_IN = 0x00000001, - D3D_PF_OUT = 0x00000002, - D3D_PF_FORCE_DWORD = 0x7fffffff -} D3D_PARAMETER_FLAGS; - -// Format Layout Properties -typedef enum D3D_FORMAT_LAYOUT -{ - D3DFL_STANDARD = 0, // standard layout - D3DFL_CUSTOM = -1 // custom layout - // Note, 1 bit allocated for this in FORMAT_DETAIL below. If you add fields here, add bits... - // NOTE SIGNED VALUES ARE USED SINCE COMPILER MAKES ENUMS SIGNED, AND BITFIELDS ARE SIGN EXTENDED ON READ -} D3D_FORMAT_LAYOUT; - -typedef enum D3D_FORMAT_TYPE_LEVEL -{ - D3DFTL_NO_TYPE = 0, - D3DFTL_PARTIAL_TYPE = -2, - D3DFTL_FULL_TYPE = -1, - // Note, 2 bits allocated for this in FORMAT_DETAIL below. If you add fields here, add bits... - // NOTE SIGNED VALUES ARE USED SINCE COMPILER MAKES ENUMS SIGNED, AND BITFIELDS ARE SIGN EXTENDED ON READ -} D3D_FORMAT_TYPE_LEVEL; - -typedef enum D3D_FORMAT_COMPONENT_NAME -{ - D3DFCN_R = -4, - D3DFCN_G = -3, - D3DFCN_B = -2, - D3DFCN_A = -1, - D3DFCN_D = 0, - D3DFCN_S = 1, - D3DFCN_X = 2, - // Note, 3 bits allocated for this in FORMAT_DETAIL below. If you add fields here, add bits... - // NOTE SIGNED VALUES ARE USED SINCE COMPILER MAKES ENUMS SIGNED, AND BITFIELDS ARE SIGN EXTENDED ON READ -} D3D_FORMAT_COMPONENT_NAME; - -typedef enum D3D_FORMAT_COMPONENT_INTERPRETATION -{ - D3DFCI_TYPELESS = 0, - D3DFCI_FLOAT = -4, - D3DFCI_SNORM = -3, - D3DFCI_UNORM = -2, - D3DFCI_SINT = -1, - D3DFCI_UINT = 1, - D3DFCI_UNORM_SRGB = 2, - D3DFCI_BIASED_FIXED_2_8 = 3, - // Note, 3 bits allocated for this in FORMAT_DETAIL below. If you add fields here, add bits... - // NOTE SIGNED VALUES ARE USED SINCE COMPILER MAKES ENUMS SIGNED, AND BITFIELDS ARE SIGN EXTENDED ON READ -} D3D_FORMAT_COMPONENT_INTERPRETATION; - -// Well-Known Private Data IDs (WKPDID_*): - -// WKPDID_D3DDebugObjectName provides a unique name to objects in order to assist the developer during debugging. -// -// const char c_szName[] = "texture.jpg"; -// pObject->SetPrivateData( WKPDID_D3DDebugObjectName, sizeof( c_szName ) - 1, c_szName ); -cpp_quote("DEFINE_GUID(WKPDID_D3DDebugObjectName,0x429b8c22,0x9188,0x4b0c,0x87,0x42,0xac,0xb0,0xbf,0x85,0xc2,0x00);") -cpp_quote("DEFINE_GUID(WKPDID_D3DDebugObjectNameW,0x4cca5fd8,0x921f,0x42c8,0x85,0x66,0x70,0xca,0xf2,0xa9,0xb7,0x41);") -cpp_quote("DEFINE_GUID(WKPDID_CommentStringW,0xd0149dc0,0x90e8,0x4ec8,0x81, 0x44, 0xe9, 0x00, 0xad, 0x26, 0x6b, 0xb2);") -cpp_quote("DEFINE_GUID(WKPDID_D3D12UniqueObjectId, 0x1b39de15, 0xec04, 0x4bae, 0xba, 0x4d, 0x8c, 0xef, 0x79, 0xfc, 0x04, 0xc1);") - -cpp_quote("#define D3D_SET_OBJECT_NAME_N_A(pObject, Chars, pName) (pObject)->SetPrivateData(WKPDID_D3DDebugObjectName, Chars, pName)") -cpp_quote("#define D3D_SET_OBJECT_NAME_A(pObject, pName) D3D_SET_OBJECT_NAME_N_A(pObject, lstrlenA(pName), pName)") -cpp_quote("#define D3D_SET_OBJECT_NAME_N_W(pObject, Chars, pName) (pObject)->SetPrivateData(WKPDID_D3DDebugObjectNameW, Chars*2, pName)") -cpp_quote("#define D3D_SET_OBJECT_NAME_W(pObject, pName) D3D_SET_OBJECT_NAME_N_W(pObject, wcslen(pName), pName)") - -cpp_quote("#define D3D_COMPONENT_MASK_X 1") -cpp_quote("#define D3D_COMPONENT_MASK_Y 2") -cpp_quote("#define D3D_COMPONENT_MASK_Z 4") -cpp_quote("#define D3D_COMPONENT_MASK_W 8") - -cpp_quote("DEFINE_GUID(D3D_TEXTURE_LAYOUT_ROW_MAJOR,0xb5dc234f,0x72bb,0x4bec,0x97,0x05,0x8c,0xf2,0x58,0xdf,0x6b,0x6c);") // Feature_D3D1XDisplayable -cpp_quote("DEFINE_GUID(D3D_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE,0x4c0f29e3,0x3f5f,0x4d35,0x84,0xc9,0xbc,0x09,0x83,0xb6,0x2c,0x28);") // Feature_D3D1XDisplayable - diff --git a/Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12.h b/Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12.h deleted file mode 100644 index 1187816..0000000 --- a/Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12.h +++ /dev/null @@ -1,35 +0,0 @@ -//********************************************************* -// -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License (MIT). -// -//********************************************************* - -#ifndef __D3DX12_H__ -#define __D3DX12_H__ - -#include "d3d12.h" - -#if defined( __cplusplus ) - -#include "d3dx12_barriers.h" -#include "d3dx12_core.h" -#include "d3dx12_default.h" -#include "d3dx12_pipeline_state_stream.h" -#include "d3dx12_render_pass.h" -#include "d3dx12_resource_helpers.h" -#include "d3dx12_root_signature.h" -#include "d3dx12_property_format_table.h" - -#ifndef D3DX12_NO_STATE_OBJECT_HELPERS -#include "d3dx12_state_object.h" -#endif // !D3DX12_NO_STATE_OBJECT_HELPERS - -#ifndef D3DX12_NO_CHECK_FEATURE_SUPPORT_CLASS -#include "d3dx12_check_feature_support.h" -#endif // !D3DX12_NO_CHECK_FEATURE_SUPPORT_CLASS - -#endif // defined( __cplusplus ) - -#endif //__D3DX12_H__ - diff --git a/Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_barriers.h b/Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_barriers.h deleted file mode 100644 index d178111..0000000 --- a/Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_barriers.h +++ /dev/null @@ -1,191 +0,0 @@ -//********************************************************* -// -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License (MIT). -// -//********************************************************* - -#ifndef __D3DX12_BARRIERS_H__ -#define __D3DX12_BARRIERS_H__ - -#if defined( __cplusplus ) - -#include "d3d12.h" - -//------------------------------------------------------------------------------------------------ -struct CD3DX12_RESOURCE_BARRIER : public D3D12_RESOURCE_BARRIER -{ - CD3DX12_RESOURCE_BARRIER() = default; - explicit CD3DX12_RESOURCE_BARRIER(const D3D12_RESOURCE_BARRIER &o) noexcept : - 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) noexcept - { - CD3DX12_RESOURCE_BARRIER 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_opt_ ID3D12Resource* pResourceBefore, - _In_opt_ ID3D12Resource* pResourceAfter) noexcept - { - CD3DX12_RESOURCE_BARRIER 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_opt_ ID3D12Resource* pResource) noexcept - { - CD3DX12_RESOURCE_BARRIER result = {}; - D3D12_RESOURCE_BARRIER &barrier = result; - result.Type = D3D12_RESOURCE_BARRIER_TYPE_UAV; - barrier.UAV.pResource = pResource; - return result; - } -}; - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 608) - -//================================================================================================ -// D3DX12 Enhanced Barrier Helpers -//================================================================================================ - -class CD3DX12_BARRIER_SUBRESOURCE_RANGE : public D3D12_BARRIER_SUBRESOURCE_RANGE -{ -public: - CD3DX12_BARRIER_SUBRESOURCE_RANGE() = default; - CD3DX12_BARRIER_SUBRESOURCE_RANGE(const D3D12_BARRIER_SUBRESOURCE_RANGE &o) noexcept : - D3D12_BARRIER_SUBRESOURCE_RANGE(o) - {} - explicit CD3DX12_BARRIER_SUBRESOURCE_RANGE(UINT Subresource) noexcept : - D3D12_BARRIER_SUBRESOURCE_RANGE{ Subresource, 0, 0, 0, 0, 0 } - {} - CD3DX12_BARRIER_SUBRESOURCE_RANGE( - UINT firstMipLevel, - UINT numMips, - UINT firstArraySlice, - UINT numArraySlices, - UINT firstPlane = 0, - UINT numPlanes = 1) noexcept : - D3D12_BARRIER_SUBRESOURCE_RANGE - { - firstMipLevel, - numMips, - firstArraySlice, - numArraySlices, - firstPlane, - numPlanes - } - {} -}; - -class CD3DX12_GLOBAL_BARRIER : public D3D12_GLOBAL_BARRIER -{ -public: - CD3DX12_GLOBAL_BARRIER() = default; - CD3DX12_GLOBAL_BARRIER(const D3D12_GLOBAL_BARRIER &o) noexcept : D3D12_GLOBAL_BARRIER(o){} - CD3DX12_GLOBAL_BARRIER( - D3D12_BARRIER_SYNC syncBefore, - D3D12_BARRIER_SYNC syncAfter, - D3D12_BARRIER_ACCESS accessBefore, - D3D12_BARRIER_ACCESS accessAfter) noexcept : D3D12_GLOBAL_BARRIER { - syncBefore, - syncAfter, - accessBefore, - accessAfter - } - {} -}; - -class CD3DX12_BUFFER_BARRIER : public D3D12_BUFFER_BARRIER -{ -public: - CD3DX12_BUFFER_BARRIER() = default; - CD3DX12_BUFFER_BARRIER(const D3D12_BUFFER_BARRIER &o) noexcept : D3D12_BUFFER_BARRIER(o){} - CD3DX12_BUFFER_BARRIER( - D3D12_BARRIER_SYNC syncBefore, - D3D12_BARRIER_SYNC syncAfter, - D3D12_BARRIER_ACCESS accessBefore, - D3D12_BARRIER_ACCESS accessAfter, - ID3D12Resource *pRes) noexcept : D3D12_BUFFER_BARRIER { - syncBefore, - syncAfter, - accessBefore, - accessAfter, - pRes, - 0, ULLONG_MAX - } - {} -}; - -class CD3DX12_TEXTURE_BARRIER : public D3D12_TEXTURE_BARRIER -{ -public: - CD3DX12_TEXTURE_BARRIER() = default; - CD3DX12_TEXTURE_BARRIER(const D3D12_TEXTURE_BARRIER &o) noexcept : D3D12_TEXTURE_BARRIER(o){} - CD3DX12_TEXTURE_BARRIER( - D3D12_BARRIER_SYNC syncBefore, - D3D12_BARRIER_SYNC syncAfter, - D3D12_BARRIER_ACCESS accessBefore, - D3D12_BARRIER_ACCESS accessAfter, - D3D12_BARRIER_LAYOUT layoutBefore, - D3D12_BARRIER_LAYOUT layoutAfter, - ID3D12Resource *pRes, - const D3D12_BARRIER_SUBRESOURCE_RANGE &subresources, - D3D12_TEXTURE_BARRIER_FLAGS flag = D3D12_TEXTURE_BARRIER_FLAG_NONE) noexcept : D3D12_TEXTURE_BARRIER { - syncBefore, - syncAfter, - accessBefore, - accessAfter, - layoutBefore, - layoutAfter, - pRes, - subresources, - flag - } - {} -}; - -class CD3DX12_BARRIER_GROUP : public D3D12_BARRIER_GROUP -{ -public: - CD3DX12_BARRIER_GROUP() = default; - CD3DX12_BARRIER_GROUP(const D3D12_BARRIER_GROUP &o) noexcept : D3D12_BARRIER_GROUP(o){} - CD3DX12_BARRIER_GROUP(UINT32 numBarriers, const D3D12_BUFFER_BARRIER *pBarriers) noexcept - { - Type = D3D12_BARRIER_TYPE_BUFFER; - NumBarriers = numBarriers; - pBufferBarriers = pBarriers; - } - CD3DX12_BARRIER_GROUP(UINT32 numBarriers, const D3D12_TEXTURE_BARRIER *pBarriers) noexcept - { - Type = D3D12_BARRIER_TYPE_TEXTURE; - NumBarriers = numBarriers; - pTextureBarriers = pBarriers; - } - CD3DX12_BARRIER_GROUP(UINT32 numBarriers, const D3D12_GLOBAL_BARRIER *pBarriers) noexcept - { - Type = D3D12_BARRIER_TYPE_GLOBAL; - NumBarriers = numBarriers; - pGlobalBarriers = pBarriers; - } -}; -#endif // D3D12_SDK_VERSION >= 608 - -#endif // defined( __cplusplus ) - -#endif // __D3DX12_BARRIERS_H__ diff --git a/Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_check_feature_support.h b/Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_check_feature_support.h deleted file mode 100644 index 4c397f7..0000000 --- a/Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_check_feature_support.h +++ /dev/null @@ -1,1136 +0,0 @@ -//********************************************************* -// -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License (MIT). -// -//********************************************************* - -#pragma once - -#ifndef __cplusplus -#error D3DX12 requires C++ -#endif - -#include "d3d12.h" - -//================================================================================================ -// D3DX12 Check Feature Support -//================================================================================================ - -class CD3DX12FeatureSupport -{ -public: // Function declaration - // Default constructor that creates an empty object - CD3DX12FeatureSupport() noexcept; - - // Initialize data from the given device - HRESULT Init(ID3D12Device* pDevice); - - // Retreives the status of the object. If an error occurred in the initialization process, the function returns the error code. - HRESULT GetStatus() const noexcept { return m_hStatus; } - - // Getter functions for each feature class - // D3D12_OPTIONS - BOOL DoublePrecisionFloatShaderOps() const noexcept; - BOOL OutputMergerLogicOp() const noexcept; - D3D12_SHADER_MIN_PRECISION_SUPPORT MinPrecisionSupport() const noexcept; - D3D12_TILED_RESOURCES_TIER TiledResourcesTier() const noexcept; - D3D12_RESOURCE_BINDING_TIER ResourceBindingTier() const noexcept; - BOOL PSSpecifiedStencilRefSupported() const noexcept; - BOOL TypedUAVLoadAdditionalFormats() const noexcept; - BOOL ROVsSupported() const noexcept; - D3D12_CONSERVATIVE_RASTERIZATION_TIER ConservativeRasterizationTier() const noexcept; - BOOL StandardSwizzle64KBSupported() const noexcept; - BOOL CrossAdapterRowMajorTextureSupported() const noexcept; - BOOL VPAndRTArrayIndexFromAnyShaderFeedingRasterizerSupportedWithoutGSEmulation() const noexcept; - D3D12_RESOURCE_HEAP_TIER ResourceHeapTier() const noexcept; - D3D12_CROSS_NODE_SHARING_TIER CrossNodeSharingTier() const noexcept; - UINT MaxGPUVirtualAddressBitsPerResource() const noexcept; - - // FEATURE_LEVELS - D3D_FEATURE_LEVEL MaxSupportedFeatureLevel() const noexcept; - - // FORMAT_SUPPORT - HRESULT FormatSupport(DXGI_FORMAT Format, D3D12_FORMAT_SUPPORT1& Support1, D3D12_FORMAT_SUPPORT2& Support2) const; - - // MUTLTISAMPLE_QUALITY_LEVELS - HRESULT MultisampleQualityLevels(DXGI_FORMAT Format, UINT SampleCount, D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS Flags, UINT& NumQualityLevels) const; - - // FORMAT_INFO - HRESULT FormatInfo(DXGI_FORMAT Format, UINT8& PlaneCount) const; - - // GPU_VIRTUAL_ADDRESS_SUPPORT - UINT MaxGPUVirtualAddressBitsPerProcess() const noexcept; - - // SHADER_MODEL - D3D_SHADER_MODEL HighestShaderModel() const noexcept; - - // D3D12_OPTIONS1 - BOOL WaveOps() const noexcept; - UINT WaveLaneCountMin() const noexcept; - UINT WaveLaneCountMax() const noexcept; - UINT TotalLaneCount() const noexcept; - BOOL ExpandedComputeResourceStates() const noexcept; - BOOL Int64ShaderOps() const noexcept; - - // PROTECTED_RESOURCE_SESSION_SUPPORT - D3D12_PROTECTED_RESOURCE_SESSION_SUPPORT_FLAGS ProtectedResourceSessionSupport(UINT NodeIndex = 0) const; - - // ROOT_SIGNATURE - D3D_ROOT_SIGNATURE_VERSION HighestRootSignatureVersion() const noexcept; - - // ARCHITECTURE1 - BOOL TileBasedRenderer(UINT NodeIndex = 0) const; - BOOL UMA(UINT NodeIndex = 0) const; - BOOL CacheCoherentUMA(UINT NodeIndex = 0) const; - BOOL IsolatedMMU(UINT NodeIndex = 0) const; - - // D3D12_OPTIONS2 - BOOL DepthBoundsTestSupported() const noexcept; - D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER ProgrammableSamplePositionsTier() const noexcept; - - // SHADER_CACHE - D3D12_SHADER_CACHE_SUPPORT_FLAGS ShaderCacheSupportFlags() const noexcept; - - // COMMAND_QUEUE_PRIORITY - BOOL CommandQueuePrioritySupported(D3D12_COMMAND_LIST_TYPE CommandListType, UINT Priority); - - // D3D12_OPTIONS3 - BOOL CopyQueueTimestampQueriesSupported() const noexcept; - BOOL CastingFullyTypedFormatSupported() const noexcept; - D3D12_COMMAND_LIST_SUPPORT_FLAGS WriteBufferImmediateSupportFlags() const noexcept; - D3D12_VIEW_INSTANCING_TIER ViewInstancingTier() const noexcept; - BOOL BarycentricsSupported() const noexcept; - - // EXISTING_HEAPS - BOOL ExistingHeapsSupported() const noexcept; - - // D3D12_OPTIONS4 - BOOL MSAA64KBAlignedTextureSupported() const noexcept; - D3D12_SHARED_RESOURCE_COMPATIBILITY_TIER SharedResourceCompatibilityTier() const noexcept; - BOOL Native16BitShaderOpsSupported() const noexcept; - - // SERIALIZATION - D3D12_HEAP_SERIALIZATION_TIER HeapSerializationTier(UINT NodeIndex = 0) const; - - // CROSS_NODE - // CrossNodeSharingTier handled in D3D12Options - BOOL CrossNodeAtomicShaderInstructions() const noexcept; - - // D3D12_OPTIONS5 - BOOL SRVOnlyTiledResourceTier3() const noexcept; - D3D12_RENDER_PASS_TIER RenderPassesTier() const noexcept; - D3D12_RAYTRACING_TIER RaytracingTier() const noexcept; - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 4) - // DISPLAYABLE - BOOL DisplayableTexture() const noexcept; - // SharedResourceCompatibilityTier handled in D3D12Options4 -#endif - - // D3D12_OPTIONS6 - BOOL AdditionalShadingRatesSupported() const noexcept; - BOOL PerPrimitiveShadingRateSupportedWithViewportIndexing() const noexcept; - D3D12_VARIABLE_SHADING_RATE_TIER VariableShadingRateTier() const noexcept; - UINT ShadingRateImageTileSize() const noexcept; - BOOL BackgroundProcessingSupported() const noexcept; - - // QUERY_META_COMMAND - HRESULT QueryMetaCommand(D3D12_FEATURE_DATA_QUERY_META_COMMAND& dQueryMetaCommand) const; - - // D3D12_OPTIONS7 - D3D12_MESH_SHADER_TIER MeshShaderTier() const noexcept; - D3D12_SAMPLER_FEEDBACK_TIER SamplerFeedbackTier() const noexcept; - - // PROTECTED_RESOURCE_SESSION_TYPE_COUNT - UINT ProtectedResourceSessionTypeCount(UINT NodeIndex = 0) const; - - // PROTECTED_RESOURCE_SESSION_TYPES - std::vector ProtectedResourceSessionTypes(UINT NodeIndex = 0) const; - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 3) - // D3D12_OPTIONS8 - BOOL UnalignedBlockTexturesSupported() const noexcept; - - // D3D12_OPTIONS9 - BOOL MeshShaderPipelineStatsSupported() const noexcept; - BOOL MeshShaderSupportsFullRangeRenderTargetArrayIndex() const noexcept; - BOOL AtomicInt64OnTypedResourceSupported() const noexcept; - BOOL AtomicInt64OnGroupSharedSupported() const noexcept; - BOOL DerivativesInMeshAndAmplificationShadersSupported() const noexcept; - D3D12_WAVE_MMA_TIER WaveMMATier() const noexcept; -#endif - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 4) - // D3D12_OPTIONS10 - BOOL VariableRateShadingSumCombinerSupported() const noexcept; - BOOL MeshShaderPerPrimitiveShadingRateSupported() const noexcept; - - // D3D12_OPTIONS11 - BOOL AtomicInt64OnDescriptorHeapResourceSupported() const noexcept; -#endif - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 600) - // D3D12_OPTIONS12 - D3D12_TRI_STATE MSPrimitivesPipelineStatisticIncludesCulledPrimitives() const noexcept; - BOOL EnhancedBarriersSupported() const noexcept; - BOOL RelaxedFormatCastingSupported() const noexcept; -#endif - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 602) - // D3D12_OPTIONS13 - BOOL UnrestrictedBufferTextureCopyPitchSupported() const noexcept; - BOOL UnrestrictedVertexElementAlignmentSupported() const noexcept; - BOOL InvertedViewportHeightFlipsYSupported() const noexcept; - BOOL InvertedViewportDepthFlipsZSupported() const noexcept; - BOOL TextureCopyBetweenDimensionsSupported() const noexcept; - BOOL AlphaBlendFactorSupported() const noexcept; -#endif - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 606) - // D3D12_OPTIONS14 - BOOL AdvancedTextureOpsSupported() const noexcept; - BOOL WriteableMSAATexturesSupported() const noexcept; - BOOL IndependentFrontAndBackStencilRefMaskSupported() const noexcept; - - // D3D12_OPTIONS15 - BOOL TriangleFanSupported() const noexcept; - BOOL DynamicIndexBufferStripCutSupported() const noexcept; -#endif - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 608) - // D3D12_OPTIONS16 - BOOL DynamicDepthBiasSupported() const noexcept; -#endif -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609) - BOOL GPUUploadHeapSupported() const noexcept; - - // D3D12_OPTIONS17 - BOOL NonNormalizedCoordinateSamplersSupported() const noexcept; - BOOL ManualWriteTrackingResourceSupported() const noexcept; - - // D3D12_OPTIONS18 - BOOL RenderPassesValid() const noexcept; -#endif - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 610) - BOOL MismatchingOutputDimensionsSupported() const noexcept; - UINT SupportedSampleCountsWithNoOutputs() const noexcept; - BOOL PointSamplingAddressesNeverRoundUp() const noexcept; - BOOL RasterizerDesc2Supported() const noexcept; - BOOL NarrowQuadrilateralLinesSupported() const noexcept; - BOOL AnisoFilterWithPointMipSupported() const noexcept; - UINT MaxSamplerDescriptorHeapSize() const noexcept; - UINT MaxSamplerDescriptorHeapSizeWithStaticSamplers() const noexcept; - UINT MaxViewDescriptorHeapSize() const noexcept; -#endif - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 611) - BOOL ComputeOnlyWriteWatchSupported() const noexcept; -#endif - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612) - D3D12_EXECUTE_INDIRECT_TIER ExecuteIndirectTier() const noexcept; - D3D12_WORK_GRAPHS_TIER WorkGraphsTier() const noexcept; -#endif - -private: // Private structs and helpers declaration - struct ProtectedResourceSessionTypesLocal : D3D12_FEATURE_DATA_PROTECTED_RESOURCE_SESSION_TYPES - { - std::vector TypeVec; - }; - - // Helper function to decide the highest shader model supported by the system - // Stores the result in m_dShaderModel - // Must be updated whenever a new shader model is added to the d3d12.h header - HRESULT QueryHighestShaderModel(); - - // Helper function to decide the highest root signature supported - // Must be updated whenever a new root signature version is added to the d3d12.h header - HRESULT QueryHighestRootSignatureVersion(); - - // Helper funcion to decide the highest feature level - HRESULT QueryHighestFeatureLevel(); - - // Helper function to initialize local protected resource session types structs - HRESULT QueryProtectedResourceSessionTypes(UINT NodeIndex, UINT Count); - -private: // Member data - // Pointer to the underlying device - ID3D12Device* m_pDevice; - - // Stores the error code from initialization - HRESULT m_hStatus; - - // Feature support data structs - D3D12_FEATURE_DATA_D3D12_OPTIONS m_dOptions; - D3D_FEATURE_LEVEL m_eMaxFeatureLevel; - D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT m_dGPUVASupport; - D3D12_FEATURE_DATA_SHADER_MODEL m_dShaderModel; - D3D12_FEATURE_DATA_D3D12_OPTIONS1 m_dOptions1; - std::vector m_dProtectedResourceSessionSupport; - D3D12_FEATURE_DATA_ROOT_SIGNATURE m_dRootSignature; - std::vector m_dArchitecture1; - D3D12_FEATURE_DATA_D3D12_OPTIONS2 m_dOptions2; - D3D12_FEATURE_DATA_SHADER_CACHE m_dShaderCache; - D3D12_FEATURE_DATA_COMMAND_QUEUE_PRIORITY m_dCommandQueuePriority; - D3D12_FEATURE_DATA_D3D12_OPTIONS3 m_dOptions3; - D3D12_FEATURE_DATA_EXISTING_HEAPS m_dExistingHeaps; - D3D12_FEATURE_DATA_D3D12_OPTIONS4 m_dOptions4; - std::vector m_dSerialization; // Cat2 NodeIndex - D3D12_FEATURE_DATA_CROSS_NODE m_dCrossNode; - D3D12_FEATURE_DATA_D3D12_OPTIONS5 m_dOptions5; -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 4) - D3D12_FEATURE_DATA_DISPLAYABLE m_dDisplayable; -#endif - D3D12_FEATURE_DATA_D3D12_OPTIONS6 m_dOptions6; - D3D12_FEATURE_DATA_D3D12_OPTIONS7 m_dOptions7; - std::vector m_dProtectedResourceSessionTypeCount; // Cat2 NodeIndex - std::vector m_dProtectedResourceSessionTypes; // Cat3 -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 3) - D3D12_FEATURE_DATA_D3D12_OPTIONS8 m_dOptions8; - D3D12_FEATURE_DATA_D3D12_OPTIONS9 m_dOptions9; -#endif -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 4) - D3D12_FEATURE_DATA_D3D12_OPTIONS10 m_dOptions10; - D3D12_FEATURE_DATA_D3D12_OPTIONS11 m_dOptions11; -#endif -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 600) - D3D12_FEATURE_DATA_D3D12_OPTIONS12 m_dOptions12; -#endif -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 602) - D3D12_FEATURE_DATA_D3D12_OPTIONS13 m_dOptions13; -#endif -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 606) - D3D12_FEATURE_DATA_D3D12_OPTIONS14 m_dOptions14; - D3D12_FEATURE_DATA_D3D12_OPTIONS15 m_dOptions15; -#endif -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 608) - D3D12_FEATURE_DATA_D3D12_OPTIONS16 m_dOptions16; -#endif -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609) - D3D12_FEATURE_DATA_D3D12_OPTIONS17 m_dOptions17; -#endif -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609) - D3D12_FEATURE_DATA_D3D12_OPTIONS18 m_dOptions18; -#endif -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 610) - D3D12_FEATURE_DATA_D3D12_OPTIONS19 m_dOptions19; -#endif -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 611) - D3D12_FEATURE_DATA_D3D12_OPTIONS20 m_dOptions20; -#endif -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612) - D3D12_FEATURE_DATA_D3D12_OPTIONS21 m_dOptions21; -#endif -}; - -// Implementations for CD3DX12FeatureSupport functions - -// Macro to set up a getter function for each entry in feature support data -// The getter function will have the same name as the feature option name -#define FEATURE_SUPPORT_GET(RETTYPE,FEATURE,OPTION) \ -inline RETTYPE CD3DX12FeatureSupport::OPTION() const noexcept \ -{ \ - return FEATURE.OPTION; \ -} - -// Macro to set up a getter function for each entry in feature support data -// Also specifies the name for the function which can be different from the feature name -#define FEATURE_SUPPORT_GET_NAME(RETTYPE,FEATURE,OPTION,NAME) \ -inline RETTYPE CD3DX12FeatureSupport::NAME() const noexcept \ -{\ - return FEATURE.OPTION; \ -} - -// Macro to set up a getter function for feature data indexed by the graphics node ID -// The default parameter is 0, or the first availabe graphics device node -#define FEATURE_SUPPORT_GET_NODE_INDEXED(RETTYPE,FEATURE,OPTION) \ -inline RETTYPE CD3DX12FeatureSupport::OPTION(UINT NodeIndex) const \ -{\ - return FEATURE[NodeIndex].OPTION; \ -} - -// Macro to set up a getter function for feature data indexed by NodeIndex -// Allows a custom name for the getter function -#define FEATURE_SUPPORT_GET_NODE_INDEXED_NAME(RETTYPE,FEATURE,OPTION,NAME) \ -inline RETTYPE CD3DX12FeatureSupport::NAME(UINT NodeIndex) const \ -{\ - return FEATURE[NodeIndex].OPTION; \ -} - -inline CD3DX12FeatureSupport::CD3DX12FeatureSupport() noexcept -: m_pDevice(nullptr) -, m_hStatus(E_INVALIDARG) -, m_dOptions{} -, m_eMaxFeatureLevel{} -, m_dGPUVASupport{} -, m_dShaderModel{} -, m_dOptions1{} -, m_dRootSignature{} -, m_dOptions2{} -, m_dShaderCache{} -, m_dCommandQueuePriority{} -, m_dOptions3{} -, m_dExistingHeaps{} -, m_dOptions4{} -, m_dCrossNode{} -, m_dOptions5{} -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 4) -, m_dDisplayable{} -#endif -, m_dOptions6{} -, m_dOptions7{} -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 3) -, m_dOptions8{} -, m_dOptions9{} -#endif -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 4) -, m_dOptions10{} -, m_dOptions11{} -#endif -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 600) -, m_dOptions12{} -#endif -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 602) -, m_dOptions13{} -#endif -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 606) -, m_dOptions14{} -, m_dOptions15{} -#endif -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 608) -, m_dOptions16{} -#endif -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609) -, m_dOptions17{} -#endif -#if defined (D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609) -, m_dOptions18{} -#endif -#if defined (D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 610) -, m_dOptions19{} -#endif -#if defined (D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 611) -, m_dOptions20{} -#endif -#if defined (D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612) -, m_dOptions21{} -#endif -{} - -inline HRESULT CD3DX12FeatureSupport::Init(ID3D12Device* pDevice) -{ - if (!pDevice) - { - m_hStatus = E_INVALIDARG; - return m_hStatus; - } - - m_pDevice = pDevice; - - // Initialize static feature support data structures - if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS, &m_dOptions, sizeof(m_dOptions)))) - { - m_dOptions = {}; - } - - if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_GPU_VIRTUAL_ADDRESS_SUPPORT, &m_dGPUVASupport, sizeof(m_dGPUVASupport)))) - { - m_dGPUVASupport = {}; - } - - if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS1, &m_dOptions1, sizeof(m_dOptions1)))) - { - m_dOptions1 = {}; - } - - if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS2, &m_dOptions2, sizeof(m_dOptions2)))) - { - m_dOptions2 = {}; - } - - if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_SHADER_CACHE, &m_dShaderCache, sizeof(m_dShaderCache)))) - { - m_dShaderCache = {}; - } - - if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS3, &m_dOptions3, sizeof(m_dOptions3)))) - { - m_dOptions3 = {}; - } - - if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_EXISTING_HEAPS, &m_dExistingHeaps, sizeof(m_dExistingHeaps)))) - { - m_dExistingHeaps = {}; - } - - if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS4, &m_dOptions4, sizeof(m_dOptions4)))) - { - m_dOptions4 = {}; - } - - if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_CROSS_NODE, &m_dCrossNode, sizeof(m_dCrossNode)))) - { - m_dCrossNode = {}; - } - - if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS5, &m_dOptions5, sizeof(m_dOptions5)))) - { - m_dOptions5 = {}; - } - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 4) - if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_DISPLAYABLE, &m_dDisplayable, sizeof(m_dDisplayable)))) - { - m_dDisplayable = {}; - } -#endif - - if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS6, &m_dOptions6, sizeof(m_dOptions6)))) - { - m_dOptions6 = {}; - } - - if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS7, &m_dOptions7, sizeof(m_dOptions7)))) - { - m_dOptions7 = {}; - } - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 3) - if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS8, &m_dOptions8, sizeof(m_dOptions8)))) - { - m_dOptions8 = {}; - } - - if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS9, &m_dOptions9, sizeof(m_dOptions9)))) - { - m_dOptions9 = {}; - } -#endif - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 4) - if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS10, &m_dOptions10, sizeof(m_dOptions10)))) - { - m_dOptions10 = {}; - } - - if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS11, &m_dOptions11, sizeof(m_dOptions11)))) - { - m_dOptions11 = {}; - } -#endif - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 600) - if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS12, &m_dOptions12, sizeof(m_dOptions12)))) - { - m_dOptions12 = {}; - m_dOptions12.MSPrimitivesPipelineStatisticIncludesCulledPrimitives = D3D12_TRI_STATE::D3D12_TRI_STATE_UNKNOWN; - } -#endif - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 602) - if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS13, &m_dOptions13, sizeof(m_dOptions13)))) - { - m_dOptions13 = {}; - } -#endif - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 606) - if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS14, &m_dOptions14, sizeof(m_dOptions14)))) - { - m_dOptions14 = {}; - } - - if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS15, &m_dOptions15, sizeof(m_dOptions15)))) - { - m_dOptions15 = {}; - } -#endif - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 608) - if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS16, &m_dOptions16, sizeof(m_dOptions16)))) - { - m_dOptions16 = {}; - } -#endif - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609) - if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS17, &m_dOptions17, sizeof(m_dOptions17)))) - { - m_dOptions17 = {}; - } - - if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS18, &m_dOptions18, sizeof(m_dOptions18)))) - { - m_dOptions18.RenderPassesValid = false; - } -#endif - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 610) - if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS19, &m_dOptions19, sizeof(m_dOptions19)))) - { - m_dOptions19 = {}; - m_dOptions19.SupportedSampleCountsWithNoOutputs = 1; - m_dOptions19.MaxSamplerDescriptorHeapSize = D3D12_MAX_SHADER_VISIBLE_SAMPLER_HEAP_SIZE; - m_dOptions19.MaxSamplerDescriptorHeapSizeWithStaticSamplers = D3D12_MAX_SHADER_VISIBLE_SAMPLER_HEAP_SIZE; - m_dOptions19.MaxViewDescriptorHeapSize = D3D12_MAX_SHADER_VISIBLE_DESCRIPTOR_HEAP_SIZE_TIER_1; - } -#endif - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 611) - if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS20, &m_dOptions20, sizeof(m_dOptions20)))) - { - m_dOptions20 = {}; - } -#endif - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612) - if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS21, &m_dOptions21, sizeof(m_dOptions21)))) - { - m_dOptions21 = {}; - } -#endif - - // Initialize per-node feature support data structures - const UINT uNodeCount = m_pDevice->GetNodeCount(); - m_dProtectedResourceSessionSupport.resize(uNodeCount); - m_dArchitecture1.resize(uNodeCount); - m_dSerialization.resize(uNodeCount); - m_dProtectedResourceSessionTypeCount.resize(uNodeCount); - m_dProtectedResourceSessionTypes.resize(uNodeCount); - for (UINT NodeIndex = 0; NodeIndex < uNodeCount; NodeIndex++) - { - m_dProtectedResourceSessionSupport[NodeIndex].NodeIndex = NodeIndex; - if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_PROTECTED_RESOURCE_SESSION_SUPPORT, &m_dProtectedResourceSessionSupport[NodeIndex], sizeof(m_dProtectedResourceSessionSupport[NodeIndex])))) - { - m_dProtectedResourceSessionSupport[NodeIndex].Support = D3D12_PROTECTED_RESOURCE_SESSION_SUPPORT_FLAG_NONE; - } - - m_dArchitecture1[NodeIndex].NodeIndex = NodeIndex; - if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_ARCHITECTURE1, &m_dArchitecture1[NodeIndex], sizeof(m_dArchitecture1[NodeIndex])))) - { - D3D12_FEATURE_DATA_ARCHITECTURE dArchLocal = {}; - dArchLocal.NodeIndex = NodeIndex; - if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_ARCHITECTURE, &dArchLocal, sizeof(dArchLocal)))) - { - dArchLocal.TileBasedRenderer = false; - dArchLocal.UMA = false; - dArchLocal.CacheCoherentUMA = false; - } - - m_dArchitecture1[NodeIndex].TileBasedRenderer = dArchLocal.TileBasedRenderer; - m_dArchitecture1[NodeIndex].UMA = dArchLocal.UMA; - m_dArchitecture1[NodeIndex].CacheCoherentUMA = dArchLocal.CacheCoherentUMA; - m_dArchitecture1[NodeIndex].IsolatedMMU = false; - } - - m_dSerialization[NodeIndex].NodeIndex = NodeIndex; - if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_SERIALIZATION, &m_dSerialization[NodeIndex], sizeof(m_dSerialization[NodeIndex])))) - { - m_dSerialization[NodeIndex].HeapSerializationTier = D3D12_HEAP_SERIALIZATION_TIER_0; - } - - m_dProtectedResourceSessionTypeCount[NodeIndex].NodeIndex = NodeIndex; - if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_PROTECTED_RESOURCE_SESSION_TYPE_COUNT, &m_dProtectedResourceSessionTypeCount[NodeIndex], sizeof(m_dProtectedResourceSessionTypeCount[NodeIndex])))) - { - m_dProtectedResourceSessionTypeCount[NodeIndex].Count = 0; - } - - // Special procedure to initialize local protected resource session types structs - // Must wait until session type count initialized - QueryProtectedResourceSessionTypes(NodeIndex, m_dProtectedResourceSessionTypeCount[NodeIndex].Count); - } - - // Initialize features that requires highest version check - if (FAILED(m_hStatus = QueryHighestShaderModel())) - { - return m_hStatus; - } - - if (FAILED(m_hStatus = QueryHighestRootSignatureVersion())) - { - return m_hStatus; - } - - // Initialize Feature Levels data - if (FAILED(m_hStatus = QueryHighestFeatureLevel())) - { - return m_hStatus; - } - - return m_hStatus; -} - -// 0: D3D12_OPTIONS -FEATURE_SUPPORT_GET(BOOL, m_dOptions, DoublePrecisionFloatShaderOps); -FEATURE_SUPPORT_GET(BOOL, m_dOptions, OutputMergerLogicOp); -FEATURE_SUPPORT_GET(D3D12_SHADER_MIN_PRECISION_SUPPORT, m_dOptions, MinPrecisionSupport); -FEATURE_SUPPORT_GET(D3D12_TILED_RESOURCES_TIER, m_dOptions, TiledResourcesTier); -FEATURE_SUPPORT_GET(D3D12_RESOURCE_BINDING_TIER, m_dOptions, ResourceBindingTier); -FEATURE_SUPPORT_GET(BOOL, m_dOptions, PSSpecifiedStencilRefSupported); -FEATURE_SUPPORT_GET(BOOL, m_dOptions, TypedUAVLoadAdditionalFormats); -FEATURE_SUPPORT_GET(BOOL, m_dOptions, ROVsSupported); -FEATURE_SUPPORT_GET(D3D12_CONSERVATIVE_RASTERIZATION_TIER, m_dOptions, ConservativeRasterizationTier); -FEATURE_SUPPORT_GET(BOOL, m_dOptions, StandardSwizzle64KBSupported); -FEATURE_SUPPORT_GET(BOOL, m_dOptions, CrossAdapterRowMajorTextureSupported); -FEATURE_SUPPORT_GET(BOOL, m_dOptions, VPAndRTArrayIndexFromAnyShaderFeedingRasterizerSupportedWithoutGSEmulation); -FEATURE_SUPPORT_GET(D3D12_RESOURCE_HEAP_TIER, m_dOptions, ResourceHeapTier); - -// Special procedure for handling caps that is also part of other features -inline D3D12_CROSS_NODE_SHARING_TIER CD3DX12FeatureSupport::CrossNodeSharingTier() const noexcept -{ - if (m_dCrossNode.SharingTier > D3D12_CROSS_NODE_SHARING_TIER_NOT_SUPPORTED) - { - return m_dCrossNode.SharingTier; - } - else - { - return m_dOptions.CrossNodeSharingTier; - } -} - -inline UINT CD3DX12FeatureSupport::MaxGPUVirtualAddressBitsPerResource() const noexcept -{ - if (m_dOptions.MaxGPUVirtualAddressBitsPerResource > 0) - { - return m_dOptions.MaxGPUVirtualAddressBitsPerResource; - } - else - { - return m_dGPUVASupport.MaxGPUVirtualAddressBitsPerResource; - } -} - -// 1: Architecture -// Combined with Architecture1 - -// 2: Feature Levels -// Simply returns the highest supported feature level -inline D3D_FEATURE_LEVEL CD3DX12FeatureSupport::MaxSupportedFeatureLevel() const noexcept -{ - return m_eMaxFeatureLevel; -} - -// 3: Feature Format Support -inline HRESULT CD3DX12FeatureSupport::FormatSupport(DXGI_FORMAT Format, D3D12_FORMAT_SUPPORT1& Support1, D3D12_FORMAT_SUPPORT2& Support2) const -{ - D3D12_FEATURE_DATA_FORMAT_SUPPORT dFormatSupport; - dFormatSupport.Format = Format; - - // It is possible that the function call returns an error - HRESULT result = m_pDevice->CheckFeatureSupport(D3D12_FEATURE_FORMAT_SUPPORT, &dFormatSupport, sizeof(D3D12_FEATURE_DATA_FORMAT_SUPPORT)); - - Support1 = dFormatSupport.Support1; - Support2 = dFormatSupport.Support2; // Two outputs. Probably better just to take in the struct as an argument? - - return result; -} - -// 4: Multisample Quality Levels -inline HRESULT CD3DX12FeatureSupport::MultisampleQualityLevels(DXGI_FORMAT Format, UINT SampleCount, D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS Flags, UINT& NumQualityLevels) const -{ - D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS dMultisampleQualityLevels; - dMultisampleQualityLevels.Format = Format; - dMultisampleQualityLevels.SampleCount = SampleCount; - dMultisampleQualityLevels.Flags = Flags; - - HRESULT result = m_pDevice->CheckFeatureSupport(D3D12_FEATURE_MULTISAMPLE_QUALITY_LEVELS, &dMultisampleQualityLevels, sizeof(D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS)); - - if (SUCCEEDED(result)) - { - NumQualityLevels = dMultisampleQualityLevels.NumQualityLevels; - } - else - { - NumQualityLevels = 0; - } - - return result; -} - -// 5: Format Info -inline HRESULT CD3DX12FeatureSupport::FormatInfo(DXGI_FORMAT Format, UINT8& PlaneCount) const -{ - D3D12_FEATURE_DATA_FORMAT_INFO dFormatInfo; - dFormatInfo.Format = Format; - - HRESULT result = m_pDevice->CheckFeatureSupport(D3D12_FEATURE_FORMAT_INFO, &dFormatInfo, sizeof(D3D12_FEATURE_DATA_FORMAT_INFO)); - if (FAILED(result)) - { - PlaneCount = 0; - } - else - { - PlaneCount = dFormatInfo.PlaneCount; - } - return result; -} - -// 6: GPU Virtual Address Support -// MaxGPUVirtualAddressBitsPerResource handled in D3D12Options -FEATURE_SUPPORT_GET(UINT, m_dGPUVASupport, MaxGPUVirtualAddressBitsPerProcess); - -// 7: Shader Model -inline D3D_SHADER_MODEL CD3DX12FeatureSupport::HighestShaderModel() const noexcept -{ - return m_dShaderModel.HighestShaderModel; -} - -// 8: D3D12 Options1 -FEATURE_SUPPORT_GET(BOOL, m_dOptions1, WaveOps); -FEATURE_SUPPORT_GET(UINT, m_dOptions1, WaveLaneCountMin); -FEATURE_SUPPORT_GET(UINT, m_dOptions1, WaveLaneCountMax); -FEATURE_SUPPORT_GET(UINT, m_dOptions1, TotalLaneCount); -FEATURE_SUPPORT_GET(BOOL, m_dOptions1, ExpandedComputeResourceStates); -FEATURE_SUPPORT_GET(BOOL, m_dOptions1, Int64ShaderOps); - -// 10: Protected Resource Session Support -inline D3D12_PROTECTED_RESOURCE_SESSION_SUPPORT_FLAGS CD3DX12FeatureSupport::ProtectedResourceSessionSupport(UINT NodeIndex) const -{ - return m_dProtectedResourceSessionSupport[NodeIndex].Support; -} - -// 12: Root Signature -inline D3D_ROOT_SIGNATURE_VERSION CD3DX12FeatureSupport::HighestRootSignatureVersion() const noexcept -{ - return m_dRootSignature.HighestVersion; -} - -// 16: Architecture1 -// Same data fields can be queried from m_dArchitecture -FEATURE_SUPPORT_GET_NODE_INDEXED(BOOL, m_dArchitecture1, TileBasedRenderer); -FEATURE_SUPPORT_GET_NODE_INDEXED(BOOL, m_dArchitecture1, UMA); -FEATURE_SUPPORT_GET_NODE_INDEXED(BOOL, m_dArchitecture1, CacheCoherentUMA); -FEATURE_SUPPORT_GET_NODE_INDEXED(BOOL, m_dArchitecture1, IsolatedMMU); - -// 18: D3D12 Options2 -FEATURE_SUPPORT_GET(BOOL, m_dOptions2, DepthBoundsTestSupported); -FEATURE_SUPPORT_GET(D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER, m_dOptions2, ProgrammableSamplePositionsTier); - -// 19: Shader Cache -FEATURE_SUPPORT_GET_NAME(D3D12_SHADER_CACHE_SUPPORT_FLAGS, m_dShaderCache, SupportFlags, ShaderCacheSupportFlags); - -// 20: Command Queue Priority -inline BOOL CD3DX12FeatureSupport::CommandQueuePrioritySupported(D3D12_COMMAND_LIST_TYPE CommandListType, UINT Priority) -{ - m_dCommandQueuePriority.CommandListType = CommandListType; - m_dCommandQueuePriority.Priority = Priority; - - if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_COMMAND_QUEUE_PRIORITY, &m_dCommandQueuePriority, sizeof(D3D12_FEATURE_DATA_COMMAND_QUEUE_PRIORITY)))) - { - return false; - } - - return m_dCommandQueuePriority.PriorityForTypeIsSupported; -} - -// 21: D3D12 Options3 -FEATURE_SUPPORT_GET(BOOL, m_dOptions3, CopyQueueTimestampQueriesSupported); -FEATURE_SUPPORT_GET(BOOL, m_dOptions3, CastingFullyTypedFormatSupported); -FEATURE_SUPPORT_GET(D3D12_COMMAND_LIST_SUPPORT_FLAGS, m_dOptions3, WriteBufferImmediateSupportFlags); -FEATURE_SUPPORT_GET(D3D12_VIEW_INSTANCING_TIER, m_dOptions3, ViewInstancingTier); -FEATURE_SUPPORT_GET(BOOL, m_dOptions3, BarycentricsSupported); - -// 22: Existing Heaps -FEATURE_SUPPORT_GET_NAME(BOOL, m_dExistingHeaps, Supported, ExistingHeapsSupported); - -// 23: D3D12 Options4 -FEATURE_SUPPORT_GET(BOOL, m_dOptions4, MSAA64KBAlignedTextureSupported); -FEATURE_SUPPORT_GET(D3D12_SHARED_RESOURCE_COMPATIBILITY_TIER, m_dOptions4, SharedResourceCompatibilityTier); -FEATURE_SUPPORT_GET(BOOL, m_dOptions4, Native16BitShaderOpsSupported); - -// 24: Serialization -FEATURE_SUPPORT_GET_NODE_INDEXED(D3D12_HEAP_SERIALIZATION_TIER, m_dSerialization, HeapSerializationTier); - -// 25: Cross Node -// CrossNodeSharingTier handled in D3D12Options -FEATURE_SUPPORT_GET_NAME(BOOL, m_dCrossNode, AtomicShaderInstructions, CrossNodeAtomicShaderInstructions); - -// 27: D3D12 Options5 -FEATURE_SUPPORT_GET(BOOL, m_dOptions5, SRVOnlyTiledResourceTier3); -FEATURE_SUPPORT_GET(D3D12_RENDER_PASS_TIER, m_dOptions5, RenderPassesTier); -FEATURE_SUPPORT_GET(D3D12_RAYTRACING_TIER, m_dOptions5, RaytracingTier); - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 4) -// 28: Displayable -FEATURE_SUPPORT_GET(BOOL, m_dDisplayable, DisplayableTexture); -// SharedResourceCompatibilityTier handled in D3D12Options4 -#endif - -// 30: D3D12 Options6 -FEATURE_SUPPORT_GET(BOOL, m_dOptions6, AdditionalShadingRatesSupported); -FEATURE_SUPPORT_GET(BOOL, m_dOptions6, PerPrimitiveShadingRateSupportedWithViewportIndexing); -FEATURE_SUPPORT_GET(D3D12_VARIABLE_SHADING_RATE_TIER, m_dOptions6, VariableShadingRateTier); -FEATURE_SUPPORT_GET(UINT, m_dOptions6, ShadingRateImageTileSize); -FEATURE_SUPPORT_GET(BOOL, m_dOptions6, BackgroundProcessingSupported); - -// 31: Query Meta Command -// Keep the original call routine -inline HRESULT CD3DX12FeatureSupport::QueryMetaCommand(D3D12_FEATURE_DATA_QUERY_META_COMMAND& dQueryMetaCommand) const -{ - return m_pDevice->CheckFeatureSupport(D3D12_FEATURE_QUERY_META_COMMAND, &dQueryMetaCommand, sizeof(D3D12_FEATURE_DATA_QUERY_META_COMMAND)); -} - -// 32: D3D12 Options7 -FEATURE_SUPPORT_GET(D3D12_MESH_SHADER_TIER, m_dOptions7, MeshShaderTier); -FEATURE_SUPPORT_GET(D3D12_SAMPLER_FEEDBACK_TIER, m_dOptions7, SamplerFeedbackTier); - -// 33: Protected Resource Session Type Count -FEATURE_SUPPORT_GET_NODE_INDEXED_NAME(UINT, m_dProtectedResourceSessionTypeCount, Count, ProtectedResourceSessionTypeCount); - -// 34: Protected Resource Session Types -FEATURE_SUPPORT_GET_NODE_INDEXED_NAME(std::vector, m_dProtectedResourceSessionTypes, TypeVec, ProtectedResourceSessionTypes); - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 3) -// 36: Options8 -FEATURE_SUPPORT_GET(BOOL, m_dOptions8, UnalignedBlockTexturesSupported); - -// 37: Options9 -FEATURE_SUPPORT_GET(BOOL, m_dOptions9, MeshShaderPipelineStatsSupported); -FEATURE_SUPPORT_GET(BOOL, m_dOptions9, MeshShaderSupportsFullRangeRenderTargetArrayIndex); -FEATURE_SUPPORT_GET(BOOL, m_dOptions9, AtomicInt64OnTypedResourceSupported); -FEATURE_SUPPORT_GET(BOOL, m_dOptions9, AtomicInt64OnGroupSharedSupported); -FEATURE_SUPPORT_GET(BOOL, m_dOptions9, DerivativesInMeshAndAmplificationShadersSupported); -FEATURE_SUPPORT_GET(D3D12_WAVE_MMA_TIER, m_dOptions9, WaveMMATier); -#endif - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 4) -// 39: Options10 -FEATURE_SUPPORT_GET(BOOL, m_dOptions10, VariableRateShadingSumCombinerSupported); -FEATURE_SUPPORT_GET(BOOL, m_dOptions10, MeshShaderPerPrimitiveShadingRateSupported); - -// 40: Options11 -FEATURE_SUPPORT_GET(BOOL, m_dOptions11, AtomicInt64OnDescriptorHeapResourceSupported); -#endif - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 600) -// 41: Options12 -FEATURE_SUPPORT_GET(D3D12_TRI_STATE, m_dOptions12, MSPrimitivesPipelineStatisticIncludesCulledPrimitives); -FEATURE_SUPPORT_GET(BOOL, m_dOptions12, EnhancedBarriersSupported); -FEATURE_SUPPORT_GET(BOOL, m_dOptions12, RelaxedFormatCastingSupported); -#endif - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 602) -// 42: Options13 -FEATURE_SUPPORT_GET(BOOL, m_dOptions13, UnrestrictedBufferTextureCopyPitchSupported); -FEATURE_SUPPORT_GET(BOOL, m_dOptions13, UnrestrictedVertexElementAlignmentSupported); -FEATURE_SUPPORT_GET(BOOL, m_dOptions13, InvertedViewportHeightFlipsYSupported); -FEATURE_SUPPORT_GET(BOOL, m_dOptions13, InvertedViewportDepthFlipsZSupported); -FEATURE_SUPPORT_GET(BOOL, m_dOptions13, TextureCopyBetweenDimensionsSupported); -FEATURE_SUPPORT_GET(BOOL, m_dOptions13, AlphaBlendFactorSupported); -#endif - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 606) -// 43: Options14 -FEATURE_SUPPORT_GET(BOOL, m_dOptions14, AdvancedTextureOpsSupported); -FEATURE_SUPPORT_GET(BOOL, m_dOptions14, WriteableMSAATexturesSupported); -FEATURE_SUPPORT_GET(BOOL, m_dOptions14, IndependentFrontAndBackStencilRefMaskSupported); - -// 44: Options15 -FEATURE_SUPPORT_GET(BOOL, m_dOptions15, TriangleFanSupported); -FEATURE_SUPPORT_GET(BOOL, m_dOptions15, DynamicIndexBufferStripCutSupported); -#endif - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 608) -// 45: Options16 -FEATURE_SUPPORT_GET(BOOL, m_dOptions16, DynamicDepthBiasSupported); -#endif -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609) -FEATURE_SUPPORT_GET(BOOL, m_dOptions16, GPUUploadHeapSupported); - -// 46: Options17 -FEATURE_SUPPORT_GET(BOOL, m_dOptions17, NonNormalizedCoordinateSamplersSupported); -FEATURE_SUPPORT_GET(BOOL, m_dOptions17, ManualWriteTrackingResourceSupported); - -// 47: Option18 -FEATURE_SUPPORT_GET(BOOL, m_dOptions18, RenderPassesValid); -#endif - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 610) -FEATURE_SUPPORT_GET(BOOL, m_dOptions19, MismatchingOutputDimensionsSupported); -FEATURE_SUPPORT_GET(UINT, m_dOptions19, SupportedSampleCountsWithNoOutputs); -FEATURE_SUPPORT_GET(BOOL, m_dOptions19, PointSamplingAddressesNeverRoundUp); -FEATURE_SUPPORT_GET(BOOL, m_dOptions19, RasterizerDesc2Supported); -FEATURE_SUPPORT_GET(BOOL, m_dOptions19, NarrowQuadrilateralLinesSupported); -FEATURE_SUPPORT_GET(BOOL, m_dOptions19, AnisoFilterWithPointMipSupported); -FEATURE_SUPPORT_GET(UINT, m_dOptions19, MaxSamplerDescriptorHeapSize); -FEATURE_SUPPORT_GET(UINT, m_dOptions19, MaxSamplerDescriptorHeapSizeWithStaticSamplers); -FEATURE_SUPPORT_GET(UINT, m_dOptions19, MaxViewDescriptorHeapSize); -#endif - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 611) -// 49: Options20 -FEATURE_SUPPORT_GET(BOOL, m_dOptions20, ComputeOnlyWriteWatchSupported); -#endif - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612) -// 50: Options21 -FEATURE_SUPPORT_GET(D3D12_EXECUTE_INDIRECT_TIER, m_dOptions21, ExecuteIndirectTier); -FEATURE_SUPPORT_GET(D3D12_WORK_GRAPHS_TIER, m_dOptions21, WorkGraphsTier); -#endif - -// Helper function to decide the highest shader model supported by the system -// Stores the result in m_dShaderModel -// Must be updated whenever a new shader model is added to the d3d12.h header -inline HRESULT CD3DX12FeatureSupport::QueryHighestShaderModel() -{ - // Check support in descending order - HRESULT result; - - const D3D_SHADER_MODEL allModelVersions[] = - { -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612) - D3D_SHADER_MODEL_6_9, -#endif -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 606) - D3D_SHADER_MODEL_6_8, -#endif -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 3) - D3D_SHADER_MODEL_6_7, -#endif - D3D_SHADER_MODEL_6_6, - D3D_SHADER_MODEL_6_5, - D3D_SHADER_MODEL_6_4, - D3D_SHADER_MODEL_6_3, - D3D_SHADER_MODEL_6_2, - D3D_SHADER_MODEL_6_1, - D3D_SHADER_MODEL_6_0, - D3D_SHADER_MODEL_5_1 - }; - constexpr size_t numModelVersions = sizeof(allModelVersions) / sizeof(D3D_SHADER_MODEL); - - for (size_t i = 0; i < numModelVersions; i++) - { - m_dShaderModel.HighestShaderModel = allModelVersions[i]; - result = m_pDevice->CheckFeatureSupport(D3D12_FEATURE_SHADER_MODEL, &m_dShaderModel, sizeof(D3D12_FEATURE_DATA_SHADER_MODEL)); - if (result != E_INVALIDARG) - { - // Indicates that the version is recognizable by the runtime and stored in the struct - // Also terminate on unexpected error code - if (FAILED(result)) - { - m_dShaderModel.HighestShaderModel = static_cast(0); - } - return result; - } - } - - // Shader model may not be supported. Continue the rest initializations - m_dShaderModel.HighestShaderModel = static_cast(0); - return S_OK; -} - -// Helper function to decide the highest root signature supported -// Must be updated whenever a new root signature version is added to the d3d12.h header -inline HRESULT CD3DX12FeatureSupport::QueryHighestRootSignatureVersion() -{ - HRESULT result; - - const D3D_ROOT_SIGNATURE_VERSION allRootSignatureVersions[] = - { -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609) - D3D_ROOT_SIGNATURE_VERSION_1_2, -#endif - D3D_ROOT_SIGNATURE_VERSION_1_1, - D3D_ROOT_SIGNATURE_VERSION_1_0, - D3D_ROOT_SIGNATURE_VERSION_1, - }; - constexpr size_t numRootSignatureVersions = sizeof(allRootSignatureVersions) / sizeof(D3D_ROOT_SIGNATURE_VERSION); - - for (size_t i = 0; i < numRootSignatureVersions; i++) - { - m_dRootSignature.HighestVersion = allRootSignatureVersions[i]; - result = m_pDevice->CheckFeatureSupport(D3D12_FEATURE_ROOT_SIGNATURE, &m_dRootSignature, sizeof(D3D12_FEATURE_DATA_ROOT_SIGNATURE)); - if (result != E_INVALIDARG) - { - if (FAILED(result)) - { - m_dRootSignature.HighestVersion = static_cast(0); - } - // If succeeded, the highest version is already written into the member struct - return result; - } - } - - // No version left. Set to invalid value and continue. - m_dRootSignature.HighestVersion = static_cast(0); - return S_OK; -} - -// Helper funcion to decide the highest feature level -inline HRESULT CD3DX12FeatureSupport::QueryHighestFeatureLevel() -{ - HRESULT result; - - // Check against a list of all feature levels present in d3dcommon.h - // Needs to be updated for future feature levels - const D3D_FEATURE_LEVEL allLevels[] = - { -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 3) - D3D_FEATURE_LEVEL_12_2, -#endif - D3D_FEATURE_LEVEL_12_1, - D3D_FEATURE_LEVEL_12_0, - D3D_FEATURE_LEVEL_11_1, - D3D_FEATURE_LEVEL_11_0, - D3D_FEATURE_LEVEL_10_1, - D3D_FEATURE_LEVEL_10_0, - D3D_FEATURE_LEVEL_9_3, - D3D_FEATURE_LEVEL_9_2, - D3D_FEATURE_LEVEL_9_1, -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 5) - D3D_FEATURE_LEVEL_1_0_CORE, -#endif -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 611) - D3D_FEATURE_LEVEL_1_0_GENERIC -#endif - }; - - D3D12_FEATURE_DATA_FEATURE_LEVELS dFeatureLevel; - dFeatureLevel.NumFeatureLevels = static_cast(sizeof(allLevels) / sizeof(D3D_FEATURE_LEVEL)); - dFeatureLevel.pFeatureLevelsRequested = allLevels; - - result = m_pDevice->CheckFeatureSupport(D3D12_FEATURE_FEATURE_LEVELS, &dFeatureLevel, sizeof(D3D12_FEATURE_DATA_FEATURE_LEVELS)); - if (SUCCEEDED(result)) - { - m_eMaxFeatureLevel = dFeatureLevel.MaxSupportedFeatureLevel; - } - else - { - m_eMaxFeatureLevel = static_cast(0); - - if (result == DXGI_ERROR_UNSUPPORTED) - { - // Indicates that none supported. Continue initialization - result = S_OK; - } - } - return result; -} - -// Helper function to initialize local protected resource session types structs -inline HRESULT CD3DX12FeatureSupport::QueryProtectedResourceSessionTypes(UINT NodeIndex, UINT Count) -{ - auto& CurrentPRSTypes = m_dProtectedResourceSessionTypes[NodeIndex]; - CurrentPRSTypes.NodeIndex = NodeIndex; - CurrentPRSTypes.Count = Count; - CurrentPRSTypes.TypeVec.resize(CurrentPRSTypes.Count); - CurrentPRSTypes.pTypes = CurrentPRSTypes.TypeVec.data(); - - HRESULT result = m_pDevice->CheckFeatureSupport(D3D12_FEATURE_PROTECTED_RESOURCE_SESSION_TYPES, &m_dProtectedResourceSessionTypes[NodeIndex], sizeof(D3D12_FEATURE_DATA_PROTECTED_RESOURCE_SESSION_TYPES)); - if (FAILED(result)) - { - // Resize TypeVec to empty - CurrentPRSTypes.TypeVec.clear(); - } - - return result; -} - -#undef FEATURE_SUPPORT_GET -#undef FEATURE_SUPPORT_GET_NAME -#undef FEATURE_SUPPORT_GET_NODE_INDEXED -#undef FEATURE_SUPPORT_GET_NODE_INDEXED_NAME - -// end CD3DX12FeatureSupport diff --git a/Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_core.h b/Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_core.h deleted file mode 100644 index f942689..0000000 --- a/Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_core.h +++ /dev/null @@ -1,1533 +0,0 @@ -//********************************************************* -// -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License (MIT). -// -//********************************************************* - -#pragma once - -#ifndef __cplusplus -#error D3DX12 requires C++ -#endif - -#include -#include "d3d12.h" -#include "d3dx12_default.h" - -//------------------------------------------------------------------------------------------------ -#ifndef D3DX12_ASSERT - #ifdef assert - #define D3DX12_ASSERT(x) assert(x) - #else - #define D3DX12_ASSERT(x) - #endif -#endif - -//------------------------------------------------------------------------------------------------ -template -inline ID3D12CommandList * const * CommandListCast(t_CommandListType * const * pp) noexcept -{ - // 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(pp); -} - -//------------------------------------------------------------------------------------------------ -inline bool operator==( const D3D12_VIEWPORT& l, const D3D12_VIEWPORT& r ) noexcept -{ - 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 ) noexcept -{ return !( l == r ); } - -//------------------------------------------------------------------------------------------------ -struct CD3DX12_RECT : public D3D12_RECT -{ - CD3DX12_RECT() = default; - explicit CD3DX12_RECT( const D3D12_RECT& o ) noexcept : - D3D12_RECT( o ) - {} - explicit CD3DX12_RECT( - LONG Left, - LONG Top, - LONG Right, - LONG Bottom ) noexcept - { - left = Left; - top = Top; - right = Right; - bottom = Bottom; - } -}; - -//------------------------------------------------------------------------------------------------ -struct CD3DX12_VIEWPORT : public D3D12_VIEWPORT -{ - CD3DX12_VIEWPORT() = default; - explicit CD3DX12_VIEWPORT( const D3D12_VIEWPORT& o ) noexcept : - D3D12_VIEWPORT( o ) - {} - explicit CD3DX12_VIEWPORT( - FLOAT topLeftX, - FLOAT topLeftY, - FLOAT width, - FLOAT height, - FLOAT minDepth = D3D12_MIN_DEPTH, - FLOAT maxDepth = D3D12_MAX_DEPTH ) noexcept - { - 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 ) noexcept - { -#if defined(_MSC_VER) || !defined(_WIN32) - const auto Desc = pResource->GetDesc(); -#else - D3D12_RESOURCE_DESC tmpDesc; - const auto& Desc = *pResource->GetDesc(&tmpDesc); -#endif - 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 = float(Desc.Width) - topLeftX; - Height = 1.0f; - break; - case D3D12_RESOURCE_DIMENSION_TEXTURE1D: - TopLeftX = topLeftX; - TopLeftY = 0.0f; - Width = (SubresourceWidth ? float(SubresourceWidth) : 1.0f) - topLeftX; - Height = 1.0f; - break; - case D3D12_RESOURCE_DIMENSION_TEXTURE2D: - case D3D12_RESOURCE_DIMENSION_TEXTURE3D: - TopLeftX = topLeftX; - TopLeftY = topLeftY; - Width = (SubresourceWidth ? float(SubresourceWidth) : 1.0f) - topLeftX; - Height = (SubresourceHeight ? float(SubresourceHeight) : 1.0f) - topLeftY; - break; - default: break; - } - - MinDepth = minDepth; - MaxDepth = maxDepth; - } -}; - -//------------------------------------------------------------------------------------------------ -struct CD3DX12_BOX : public D3D12_BOX -{ - CD3DX12_BOX() = default; - explicit CD3DX12_BOX( const D3D12_BOX& o ) noexcept : - D3D12_BOX( o ) - {} - explicit CD3DX12_BOX( - LONG Left, - LONG Right ) noexcept - { - left = static_cast(Left); - top = 0; - front = 0; - right = static_cast(Right); - bottom = 1; - back = 1; - } - explicit CD3DX12_BOX( - LONG Left, - LONG Top, - LONG Right, - LONG Bottom ) noexcept - { - left = static_cast(Left); - top = static_cast(Top); - front = 0; - right = static_cast(Right); - bottom = static_cast(Bottom); - back = 1; - } - explicit CD3DX12_BOX( - LONG Left, - LONG Top, - LONG Front, - LONG Right, - LONG Bottom, - LONG Back ) noexcept - { - left = static_cast(Left); - top = static_cast(Top); - front = static_cast(Front); - right = static_cast(Right); - bottom = static_cast(Bottom); - back = static_cast(Back); - } -}; -inline bool operator==( const D3D12_BOX& l, const D3D12_BOX& r ) noexcept -{ - 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 ) noexcept -{ return !( l == r ); } - -//------------------------------------------------------------------------------------------------ -struct CD3DX12_DEPTH_STENCIL_DESC : public D3D12_DEPTH_STENCIL_DESC -{ - CD3DX12_DEPTH_STENCIL_DESC() = default; - explicit CD3DX12_DEPTH_STENCIL_DESC( const D3D12_DEPTH_STENCIL_DESC& o ) noexcept : - D3D12_DEPTH_STENCIL_DESC( o ) - {} - explicit CD3DX12_DEPTH_STENCIL_DESC( CD3DX12_DEFAULT ) noexcept - { - 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 ) noexcept - { - 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; - } -}; - -//------------------------------------------------------------------------------------------------ -struct CD3DX12_DEPTH_STENCIL_DESC1 : public D3D12_DEPTH_STENCIL_DESC1 -{ - CD3DX12_DEPTH_STENCIL_DESC1() = default; - explicit CD3DX12_DEPTH_STENCIL_DESC1( const D3D12_DEPTH_STENCIL_DESC1& o ) noexcept : - D3D12_DEPTH_STENCIL_DESC1( o ) - {} - explicit CD3DX12_DEPTH_STENCIL_DESC1( const D3D12_DEPTH_STENCIL_DESC& o ) noexcept - { - 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 ) noexcept - { - 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 ) noexcept - { - 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; - } - operator D3D12_DEPTH_STENCIL_DESC() const noexcept - { - 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; - } -}; - -//------------------------------------------------------------------------------------------------ -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 606) -struct CD3DX12_DEPTH_STENCIL_DESC2 : public D3D12_DEPTH_STENCIL_DESC2 -{ - CD3DX12_DEPTH_STENCIL_DESC2() = default; - explicit CD3DX12_DEPTH_STENCIL_DESC2( const D3D12_DEPTH_STENCIL_DESC2& o ) noexcept : - D3D12_DEPTH_STENCIL_DESC2( o ) - {} - explicit CD3DX12_DEPTH_STENCIL_DESC2( const D3D12_DEPTH_STENCIL_DESC1& o ) noexcept - { - DepthEnable = o.DepthEnable; - DepthWriteMask = o.DepthWriteMask; - DepthFunc = o.DepthFunc; - StencilEnable = o.StencilEnable; - FrontFace.StencilFailOp = o.FrontFace.StencilFailOp; - FrontFace.StencilDepthFailOp = o.FrontFace.StencilDepthFailOp; - FrontFace.StencilPassOp = o.FrontFace.StencilPassOp; - FrontFace.StencilFunc = o.FrontFace.StencilFunc; - FrontFace.StencilReadMask = o.StencilReadMask; - FrontFace.StencilWriteMask = o.StencilWriteMask; - - BackFace.StencilFailOp = o.BackFace.StencilFailOp; - BackFace.StencilDepthFailOp = o.BackFace.StencilDepthFailOp; - BackFace.StencilPassOp = o.BackFace.StencilPassOp; - BackFace.StencilFunc = o.BackFace.StencilFunc; - BackFace.StencilReadMask = o.StencilReadMask; - BackFace.StencilWriteMask = o.StencilWriteMask; - DepthBoundsTestEnable = o.DepthBoundsTestEnable; - } - explicit CD3DX12_DEPTH_STENCIL_DESC2( const D3D12_DEPTH_STENCIL_DESC& o ) noexcept - { - DepthEnable = o.DepthEnable; - DepthWriteMask = o.DepthWriteMask; - DepthFunc = o.DepthFunc; - StencilEnable = o.StencilEnable; - - FrontFace.StencilFailOp = o.FrontFace.StencilFailOp; - FrontFace.StencilDepthFailOp = o.FrontFace.StencilDepthFailOp; - FrontFace.StencilPassOp = o.FrontFace.StencilPassOp; - FrontFace.StencilFunc = o.FrontFace.StencilFunc; - FrontFace.StencilReadMask = o.StencilReadMask; - FrontFace.StencilWriteMask = o.StencilWriteMask; - - BackFace.StencilFailOp = o.BackFace.StencilFailOp; - BackFace.StencilDepthFailOp = o.BackFace.StencilDepthFailOp; - BackFace.StencilPassOp = o.BackFace.StencilPassOp; - BackFace.StencilFunc = o.BackFace.StencilFunc; - BackFace.StencilReadMask = o.StencilReadMask; - BackFace.StencilWriteMask = o.StencilWriteMask; - - DepthBoundsTestEnable = FALSE; - } - explicit CD3DX12_DEPTH_STENCIL_DESC2( CD3DX12_DEFAULT ) noexcept - { - DepthEnable = TRUE; - DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ALL; - DepthFunc = D3D12_COMPARISON_FUNC_LESS; - StencilEnable = FALSE; - const D3D12_DEPTH_STENCILOP_DESC1 defaultStencilOp = - { D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_COMPARISON_FUNC_ALWAYS, D3D12_DEFAULT_STENCIL_READ_MASK, D3D12_DEFAULT_STENCIL_WRITE_MASK }; - FrontFace = defaultStencilOp; - BackFace = defaultStencilOp; - DepthBoundsTestEnable = FALSE; - } - explicit CD3DX12_DEPTH_STENCIL_DESC2( - BOOL depthEnable, - D3D12_DEPTH_WRITE_MASK depthWriteMask, - D3D12_COMPARISON_FUNC depthFunc, - BOOL stencilEnable, - D3D12_STENCIL_OP frontStencilFailOp, - D3D12_STENCIL_OP frontStencilDepthFailOp, - D3D12_STENCIL_OP frontStencilPassOp, - D3D12_COMPARISON_FUNC frontStencilFunc, - UINT8 frontStencilReadMask, - UINT8 frontStencilWriteMask, - D3D12_STENCIL_OP backStencilFailOp, - D3D12_STENCIL_OP backStencilDepthFailOp, - D3D12_STENCIL_OP backStencilPassOp, - D3D12_COMPARISON_FUNC backStencilFunc, - UINT8 backStencilReadMask, - UINT8 backStencilWriteMask, - BOOL depthBoundsTestEnable ) noexcept - { - DepthEnable = depthEnable; - DepthWriteMask = depthWriteMask; - DepthFunc = depthFunc; - StencilEnable = stencilEnable; - - FrontFace.StencilFailOp = frontStencilFailOp; - FrontFace.StencilDepthFailOp = frontStencilDepthFailOp; - FrontFace.StencilPassOp = frontStencilPassOp; - FrontFace.StencilFunc = frontStencilFunc; - FrontFace.StencilReadMask = frontStencilReadMask; - FrontFace.StencilWriteMask = frontStencilWriteMask; - - BackFace.StencilFailOp = backStencilFailOp; - BackFace.StencilDepthFailOp = backStencilDepthFailOp; - BackFace.StencilPassOp = backStencilPassOp; - BackFace.StencilFunc = backStencilFunc; - BackFace.StencilReadMask = backStencilReadMask; - BackFace.StencilWriteMask = backStencilWriteMask; - - DepthBoundsTestEnable = depthBoundsTestEnable; - } - - operator D3D12_DEPTH_STENCIL_DESC() const noexcept - { - D3D12_DEPTH_STENCIL_DESC D; - D.DepthEnable = DepthEnable; - D.DepthWriteMask = DepthWriteMask; - D.DepthFunc = DepthFunc; - D.StencilEnable = StencilEnable; - D.StencilReadMask = FrontFace.StencilReadMask; - D.StencilWriteMask = FrontFace.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; - } -}; -#endif // D3D12_SDK_VERSION >= 606 - -//------------------------------------------------------------------------------------------------ -struct CD3DX12_BLEND_DESC : public D3D12_BLEND_DESC -{ - CD3DX12_BLEND_DESC() = default; - explicit CD3DX12_BLEND_DESC( const D3D12_BLEND_DESC& o ) noexcept : - D3D12_BLEND_DESC( o ) - {} - explicit CD3DX12_BLEND_DESC( CD3DX12_DEFAULT ) noexcept - { - 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; - } -}; - -//------------------------------------------------------------------------------------------------ -struct CD3DX12_RASTERIZER_DESC : public D3D12_RASTERIZER_DESC -{ - CD3DX12_RASTERIZER_DESC() = default; - explicit CD3DX12_RASTERIZER_DESC( const D3D12_RASTERIZER_DESC& o ) noexcept : - D3D12_RASTERIZER_DESC( o ) - {} - explicit CD3DX12_RASTERIZER_DESC( CD3DX12_DEFAULT ) noexcept - { - 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) noexcept - { - FillMode = fillMode; - CullMode = cullMode; - FrontCounterClockwise = frontCounterClockwise; - DepthBias = depthBias; - DepthBiasClamp = depthBiasClamp; - SlopeScaledDepthBias = slopeScaledDepthBias; - DepthClipEnable = depthClipEnable; - MultisampleEnable = multisampleEnable; - AntialiasedLineEnable = antialiasedLineEnable; - ForcedSampleCount = forcedSampleCount; - ConservativeRaster = conservativeRaster; - } -}; - -//------------------------------------------------------------------------------------------------ -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 608) -struct CD3DX12_RASTERIZER_DESC1 : public D3D12_RASTERIZER_DESC1 -{ - CD3DX12_RASTERIZER_DESC1() = default; - explicit CD3DX12_RASTERIZER_DESC1(const D3D12_RASTERIZER_DESC1& o) noexcept : - D3D12_RASTERIZER_DESC1(o) - - { - } - explicit CD3DX12_RASTERIZER_DESC1(const D3D12_RASTERIZER_DESC& o) noexcept - { - FillMode = o.FillMode; - CullMode = o.CullMode; - FrontCounterClockwise = o.FrontCounterClockwise; - DepthBias = static_cast(o.DepthBias); - DepthBiasClamp = o.DepthBiasClamp; - SlopeScaledDepthBias = o.SlopeScaledDepthBias; - DepthClipEnable = o.DepthClipEnable; - MultisampleEnable = o.MultisampleEnable; - AntialiasedLineEnable = o.AntialiasedLineEnable; - ForcedSampleCount = o.ForcedSampleCount; - ConservativeRaster = o.ConservativeRaster; - } - explicit CD3DX12_RASTERIZER_DESC1(CD3DX12_DEFAULT) noexcept - { - 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_DESC1( - D3D12_FILL_MODE fillMode, - D3D12_CULL_MODE cullMode, - BOOL frontCounterClockwise, - FLOAT depthBias, - FLOAT depthBiasClamp, - FLOAT slopeScaledDepthBias, - BOOL depthClipEnable, - BOOL multisampleEnable, - BOOL antialiasedLineEnable, - UINT forcedSampleCount, - D3D12_CONSERVATIVE_RASTERIZATION_MODE conservativeRaster) noexcept - { - FillMode = fillMode; - CullMode = cullMode; - FrontCounterClockwise = frontCounterClockwise; - DepthBias = depthBias; - DepthBiasClamp = depthBiasClamp; - SlopeScaledDepthBias = slopeScaledDepthBias; - DepthClipEnable = depthClipEnable; - MultisampleEnable = multisampleEnable; - AntialiasedLineEnable = antialiasedLineEnable; - ForcedSampleCount = forcedSampleCount; - ConservativeRaster = conservativeRaster; - } - - operator D3D12_RASTERIZER_DESC() const noexcept - { - D3D12_RASTERIZER_DESC o; - - o.FillMode = FillMode; - o.CullMode = CullMode; - o.FrontCounterClockwise = FrontCounterClockwise; - o.DepthBias = static_cast(DepthBias); - o.DepthBiasClamp = DepthBiasClamp; - o.SlopeScaledDepthBias = SlopeScaledDepthBias; - o.DepthClipEnable = DepthClipEnable; - o.MultisampleEnable = MultisampleEnable; - o.AntialiasedLineEnable = AntialiasedLineEnable; - o.ForcedSampleCount = ForcedSampleCount; - o.ConservativeRaster = ConservativeRaster; - - return o; - } -}; -#endif // D3D12_SDK_VERSION >= 608 - -//------------------------------------------------------------------------------------------------ -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 610) -struct CD3DX12_RASTERIZER_DESC2 : public D3D12_RASTERIZER_DESC2 -{ - CD3DX12_RASTERIZER_DESC2() = default; - explicit CD3DX12_RASTERIZER_DESC2(const D3D12_RASTERIZER_DESC2& o) noexcept : - D3D12_RASTERIZER_DESC2(o) - - { - } - explicit CD3DX12_RASTERIZER_DESC2(const D3D12_RASTERIZER_DESC1& o) noexcept - { - FillMode = o.FillMode; - CullMode = o.CullMode; - FrontCounterClockwise = o.FrontCounterClockwise; - DepthBias = o.DepthBias; - DepthBiasClamp = o.DepthBiasClamp; - SlopeScaledDepthBias = o.SlopeScaledDepthBias; - DepthClipEnable = o.DepthClipEnable; - LineRasterizationMode = D3D12_LINE_RASTERIZATION_MODE_ALIASED; - if (o.MultisampleEnable) - { - LineRasterizationMode = D3D12_LINE_RASTERIZATION_MODE_QUADRILATERAL_WIDE; - } - else if (o.AntialiasedLineEnable) - { - LineRasterizationMode = D3D12_LINE_RASTERIZATION_MODE_ALPHA_ANTIALIASED; - } - ForcedSampleCount = o.ForcedSampleCount; - ConservativeRaster = o.ConservativeRaster; - } - explicit CD3DX12_RASTERIZER_DESC2(const D3D12_RASTERIZER_DESC& o) noexcept - : CD3DX12_RASTERIZER_DESC2(CD3DX12_RASTERIZER_DESC1(o)) - { - } - explicit CD3DX12_RASTERIZER_DESC2(CD3DX12_DEFAULT) noexcept - { - 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; - LineRasterizationMode = D3D12_LINE_RASTERIZATION_MODE_ALIASED; - ForcedSampleCount = 0; - ConservativeRaster = D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF; - } - explicit CD3DX12_RASTERIZER_DESC2( - D3D12_FILL_MODE fillMode, - D3D12_CULL_MODE cullMode, - BOOL frontCounterClockwise, - FLOAT depthBias, - FLOAT depthBiasClamp, - FLOAT slopeScaledDepthBias, - BOOL depthClipEnable, - D3D12_LINE_RASTERIZATION_MODE lineRasterizationMode, - UINT forcedSampleCount, - D3D12_CONSERVATIVE_RASTERIZATION_MODE conservativeRaster) noexcept - { - FillMode = fillMode; - CullMode = cullMode; - FrontCounterClockwise = frontCounterClockwise; - DepthBias = depthBias; - DepthBiasClamp = depthBiasClamp; - SlopeScaledDepthBias = slopeScaledDepthBias; - DepthClipEnable = depthClipEnable; - LineRasterizationMode = lineRasterizationMode; - ForcedSampleCount = forcedSampleCount; - ConservativeRaster = conservativeRaster; - } - - operator D3D12_RASTERIZER_DESC1() const noexcept - { - D3D12_RASTERIZER_DESC1 o; - - o.FillMode = FillMode; - o.CullMode = CullMode; - o.FrontCounterClockwise = FrontCounterClockwise; - o.DepthBias = DepthBias; - o.DepthBiasClamp = DepthBiasClamp; - o.SlopeScaledDepthBias = SlopeScaledDepthBias; - o.DepthClipEnable = DepthClipEnable; - o.MultisampleEnable = FALSE; - o.AntialiasedLineEnable = FALSE; - if (LineRasterizationMode == D3D12_LINE_RASTERIZATION_MODE_ALPHA_ANTIALIASED) - { - o.AntialiasedLineEnable = TRUE; - } - else if (LineRasterizationMode != D3D12_LINE_RASTERIZATION_MODE_ALIASED) - { - o.MultisampleEnable = TRUE; - } - o.ForcedSampleCount = ForcedSampleCount; - o.ConservativeRaster = ConservativeRaster; - - return o; - } - operator D3D12_RASTERIZER_DESC() const noexcept - { - return static_cast(CD3DX12_RASTERIZER_DESC1(static_cast(*this))); - } -}; -#endif // D3D12_SDK_VERSION >= 610 - -//------------------------------------------------------------------------------------------------ -struct CD3DX12_RESOURCE_ALLOCATION_INFO : public D3D12_RESOURCE_ALLOCATION_INFO -{ - CD3DX12_RESOURCE_ALLOCATION_INFO() = default; - explicit CD3DX12_RESOURCE_ALLOCATION_INFO( const D3D12_RESOURCE_ALLOCATION_INFO& o ) noexcept : - D3D12_RESOURCE_ALLOCATION_INFO( o ) - {} - CD3DX12_RESOURCE_ALLOCATION_INFO( - UINT64 size, - UINT64 alignment ) noexcept - { - SizeInBytes = size; - Alignment = alignment; - } -}; - -//------------------------------------------------------------------------------------------------ -struct CD3DX12_HEAP_PROPERTIES : public D3D12_HEAP_PROPERTIES -{ - CD3DX12_HEAP_PROPERTIES() = default; - explicit CD3DX12_HEAP_PROPERTIES(const D3D12_HEAP_PROPERTIES &o) noexcept : - D3D12_HEAP_PROPERTIES(o) - {} - CD3DX12_HEAP_PROPERTIES( - D3D12_CPU_PAGE_PROPERTY cpuPageProperty, - D3D12_MEMORY_POOL memoryPoolPreference, - UINT creationNodeMask = 1, - UINT nodeMask = 1 ) noexcept - { - 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 ) noexcept - { - Type = type; - CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; - MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; - CreationNodeMask = creationNodeMask; - VisibleNodeMask = nodeMask; - } - bool IsCPUAccessible() const noexcept - { - return Type == D3D12_HEAP_TYPE_UPLOAD || Type == D3D12_HEAP_TYPE_READBACK -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609) - || Type == D3D12_HEAP_TYPE_GPU_UPLOAD -#endif - || (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 ) noexcept -{ - 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 ) noexcept -{ return !( l == r ); } - -//------------------------------------------------------------------------------------------------ -struct CD3DX12_HEAP_DESC : public D3D12_HEAP_DESC -{ - CD3DX12_HEAP_DESC() = default; - explicit CD3DX12_HEAP_DESC(const D3D12_HEAP_DESC &o) noexcept : - D3D12_HEAP_DESC(o) - {} - CD3DX12_HEAP_DESC( - UINT64 size, - D3D12_HEAP_PROPERTIES properties, - UINT64 alignment = 0, - D3D12_HEAP_FLAGS flags = D3D12_HEAP_FLAG_NONE ) noexcept - { - 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 ) noexcept - { - 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 ) noexcept - { - 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 ) noexcept - { - 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 ) noexcept - { - 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 ) noexcept - { - SizeInBytes = resAllocInfo.SizeInBytes; - Properties = CD3DX12_HEAP_PROPERTIES( cpuPageProperty, memoryPoolPreference ); - Alignment = resAllocInfo.Alignment; - Flags = flags; - } - bool IsCPUAccessible() const noexcept - { return static_cast< const CD3DX12_HEAP_PROPERTIES* >( &Properties )->IsCPUAccessible(); } -}; -inline bool operator==( const D3D12_HEAP_DESC& l, const D3D12_HEAP_DESC& r ) noexcept -{ - 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 ) noexcept -{ return !( l == r ); } - -//------------------------------------------------------------------------------------------------ -struct CD3DX12_CLEAR_VALUE : public D3D12_CLEAR_VALUE -{ - CD3DX12_CLEAR_VALUE() = default; - explicit CD3DX12_CLEAR_VALUE(const D3D12_CLEAR_VALUE &o) noexcept : - D3D12_CLEAR_VALUE(o) - {} - CD3DX12_CLEAR_VALUE( - DXGI_FORMAT format, - const FLOAT color[4] ) noexcept - { - Format = format; - memcpy( Color, color, sizeof( Color ) ); - } - CD3DX12_CLEAR_VALUE( - DXGI_FORMAT format, - FLOAT depth, - UINT8 stencil ) noexcept - { - Format = format; - memset( &Color, 0, sizeof( Color ) ); - /* Use memcpy to preserve NAN values */ - memcpy( &DepthStencil.Depth, &depth, sizeof( depth ) ); - DepthStencil.Stencil = stencil; - } -}; - -//------------------------------------------------------------------------------------------------ -inline bool operator==( const D3D12_CLEAR_VALUE &a, const D3D12_CLEAR_VALUE &b) noexcept -{ - if (a.Format != b.Format) return false; - if (a.Format == DXGI_FORMAT_D24_UNORM_S8_UINT - || a.Format == DXGI_FORMAT_D16_UNORM - || a.Format == DXGI_FORMAT_D32_FLOAT - || a.Format == DXGI_FORMAT_D32_FLOAT_S8X24_UINT) - { - return (a.DepthStencil.Depth == b.DepthStencil.Depth) && - (a.DepthStencil.Stencil == b.DepthStencil.Stencil); - } else { - return (a.Color[0] == b.Color[0]) && - (a.Color[1] == b.Color[1]) && - (a.Color[2] == b.Color[2]) && - (a.Color[3] == b.Color[3]); - } -} - -//------------------------------------------------------------------------------------------------ -struct CD3DX12_RANGE : public D3D12_RANGE -{ - CD3DX12_RANGE() = default; - explicit CD3DX12_RANGE(const D3D12_RANGE &o) noexcept : - D3D12_RANGE(o) - {} - CD3DX12_RANGE( - SIZE_T begin, - SIZE_T end ) noexcept - { - Begin = begin; - End = end; - } -}; - -//------------------------------------------------------------------------------------------------ -struct CD3DX12_RANGE_UINT64 : public D3D12_RANGE_UINT64 -{ - CD3DX12_RANGE_UINT64() = default; - explicit CD3DX12_RANGE_UINT64(const D3D12_RANGE_UINT64 &o) noexcept : - D3D12_RANGE_UINT64(o) - {} - CD3DX12_RANGE_UINT64( - UINT64 begin, - UINT64 end ) noexcept - { - Begin = begin; - End = end; - } -}; - -//------------------------------------------------------------------------------------------------ -struct CD3DX12_SUBRESOURCE_RANGE_UINT64 : public D3D12_SUBRESOURCE_RANGE_UINT64 -{ - CD3DX12_SUBRESOURCE_RANGE_UINT64() = default; - explicit CD3DX12_SUBRESOURCE_RANGE_UINT64(const D3D12_SUBRESOURCE_RANGE_UINT64 &o) noexcept : - D3D12_SUBRESOURCE_RANGE_UINT64(o) - {} - CD3DX12_SUBRESOURCE_RANGE_UINT64( - UINT subresource, - const D3D12_RANGE_UINT64& range ) noexcept - { - Subresource = subresource; - Range = range; - } - CD3DX12_SUBRESOURCE_RANGE_UINT64( - UINT subresource, - UINT64 begin, - UINT64 end ) noexcept - { - Subresource = subresource; - Range.Begin = begin; - Range.End = end; - } -}; - -//------------------------------------------------------------------------------------------------ -struct CD3DX12_SHADER_BYTECODE : public D3D12_SHADER_BYTECODE -{ - CD3DX12_SHADER_BYTECODE() = default; - explicit CD3DX12_SHADER_BYTECODE(const D3D12_SHADER_BYTECODE &o) noexcept : - D3D12_SHADER_BYTECODE(o) - {} - CD3DX12_SHADER_BYTECODE( - _In_ ID3DBlob* pShaderBlob ) noexcept - { - pShaderBytecode = pShaderBlob->GetBufferPointer(); - BytecodeLength = pShaderBlob->GetBufferSize(); - } - CD3DX12_SHADER_BYTECODE( - const void* _pShaderBytecode, - SIZE_T bytecodeLength ) noexcept - { - pShaderBytecode = _pShaderBytecode; - BytecodeLength = bytecodeLength; - } -}; - -//------------------------------------------------------------------------------------------------ -struct CD3DX12_TILED_RESOURCE_COORDINATE : public D3D12_TILED_RESOURCE_COORDINATE -{ - CD3DX12_TILED_RESOURCE_COORDINATE() = default; - explicit CD3DX12_TILED_RESOURCE_COORDINATE(const D3D12_TILED_RESOURCE_COORDINATE &o) noexcept : - D3D12_TILED_RESOURCE_COORDINATE(o) - {} - CD3DX12_TILED_RESOURCE_COORDINATE( - UINT x, - UINT y, - UINT z, - UINT subresource ) noexcept - { - X = x; - Y = y; - Z = z; - Subresource = subresource; - } -}; - -//------------------------------------------------------------------------------------------------ -struct CD3DX12_TILE_REGION_SIZE : public D3D12_TILE_REGION_SIZE -{ - CD3DX12_TILE_REGION_SIZE() = default; - explicit CD3DX12_TILE_REGION_SIZE(const D3D12_TILE_REGION_SIZE &o) noexcept : - D3D12_TILE_REGION_SIZE(o) - {} - CD3DX12_TILE_REGION_SIZE( - UINT numTiles, - BOOL useBox, - UINT width, - UINT16 height, - UINT16 depth ) noexcept - { - NumTiles = numTiles; - UseBox = useBox; - Width = width; - Height = height; - Depth = depth; - } -}; - -//------------------------------------------------------------------------------------------------ -struct CD3DX12_SUBRESOURCE_TILING : public D3D12_SUBRESOURCE_TILING -{ - CD3DX12_SUBRESOURCE_TILING() = default; - explicit CD3DX12_SUBRESOURCE_TILING(const D3D12_SUBRESOURCE_TILING &o) noexcept : - D3D12_SUBRESOURCE_TILING(o) - {} - CD3DX12_SUBRESOURCE_TILING( - UINT widthInTiles, - UINT16 heightInTiles, - UINT16 depthInTiles, - UINT startTileIndexInOverallResource ) noexcept - { - WidthInTiles = widthInTiles; - HeightInTiles = heightInTiles; - DepthInTiles = depthInTiles; - StartTileIndexInOverallResource = startTileIndexInOverallResource; - } -}; - -//------------------------------------------------------------------------------------------------ -struct CD3DX12_TILE_SHAPE : public D3D12_TILE_SHAPE -{ - CD3DX12_TILE_SHAPE() = default; - explicit CD3DX12_TILE_SHAPE(const D3D12_TILE_SHAPE &o) noexcept : - D3D12_TILE_SHAPE(o) - {} - CD3DX12_TILE_SHAPE( - UINT widthInTexels, - UINT heightInTexels, - UINT depthInTexels ) noexcept - { - WidthInTexels = widthInTexels; - HeightInTexels = heightInTexels; - DepthInTexels = depthInTexels; - } -}; - -//------------------------------------------------------------------------------------------------ -struct CD3DX12_PACKED_MIP_INFO : public D3D12_PACKED_MIP_INFO -{ - CD3DX12_PACKED_MIP_INFO() = default; - explicit CD3DX12_PACKED_MIP_INFO(const D3D12_PACKED_MIP_INFO &o) noexcept : - D3D12_PACKED_MIP_INFO(o) - {} - CD3DX12_PACKED_MIP_INFO( - UINT8 numStandardMips, - UINT8 numPackedMips, - UINT numTilesForPackedMips, - UINT startTileIndexInOverallResource ) noexcept - { - NumStandardMips = numStandardMips; - NumPackedMips = numPackedMips; - NumTilesForPackedMips = numTilesForPackedMips; - StartTileIndexInOverallResource = startTileIndexInOverallResource; - } -}; - -//------------------------------------------------------------------------------------------------ -struct CD3DX12_SUBRESOURCE_FOOTPRINT : public D3D12_SUBRESOURCE_FOOTPRINT -{ - CD3DX12_SUBRESOURCE_FOOTPRINT() = default; - explicit CD3DX12_SUBRESOURCE_FOOTPRINT(const D3D12_SUBRESOURCE_FOOTPRINT &o) noexcept : - D3D12_SUBRESOURCE_FOOTPRINT(o) - {} - CD3DX12_SUBRESOURCE_FOOTPRINT( - DXGI_FORMAT format, - UINT width, - UINT height, - UINT depth, - UINT rowPitch ) noexcept - { - Format = format; - Width = width; - Height = height; - Depth = depth; - RowPitch = rowPitch; - } - explicit CD3DX12_SUBRESOURCE_FOOTPRINT( - const D3D12_RESOURCE_DESC& resDesc, - UINT rowPitch ) noexcept - { - Format = resDesc.Format; - Width = UINT( resDesc.Width ); - Height = resDesc.Height; - Depth = (resDesc.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D ? resDesc.DepthOrArraySize : 1u); - RowPitch = rowPitch; - } -}; - -//------------------------------------------------------------------------------------------------ -struct CD3DX12_TEXTURE_COPY_LOCATION : public D3D12_TEXTURE_COPY_LOCATION -{ - CD3DX12_TEXTURE_COPY_LOCATION() = default; - explicit CD3DX12_TEXTURE_COPY_LOCATION(const D3D12_TEXTURE_COPY_LOCATION &o) noexcept : - D3D12_TEXTURE_COPY_LOCATION(o) - {} - CD3DX12_TEXTURE_COPY_LOCATION(_In_ ID3D12Resource* pRes) noexcept - { - pResource = pRes; - Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX; - PlacedFootprint = {}; - } - CD3DX12_TEXTURE_COPY_LOCATION(_In_ ID3D12Resource* pRes, D3D12_PLACED_SUBRESOURCE_FOOTPRINT const& Footprint) noexcept - { - pResource = pRes; - Type = D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT; - PlacedFootprint = Footprint; - } - CD3DX12_TEXTURE_COPY_LOCATION(_In_ ID3D12Resource* pRes, UINT Sub) noexcept - { - pResource = pRes; - Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX; - PlacedFootprint = {}; - SubresourceIndex = Sub; - } -}; - -//------------------------------------------------------------------------------------------------ -constexpr UINT D3D12CalcSubresource( UINT MipSlice, UINT ArraySlice, UINT PlaneSlice, UINT MipLevels, UINT ArraySize ) noexcept -{ - return MipSlice + ArraySlice * MipLevels + PlaneSlice * MipLevels * ArraySize; -} - -//------------------------------------------------------------------------------------------------ -inline UINT8 D3D12GetFormatPlaneCount( - _In_ ID3D12Device* pDevice, - DXGI_FORMAT Format - ) noexcept -{ - D3D12_FEATURE_DATA_FORMAT_INFO formatInfo = { Format, 0 }; - 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() = default; - explicit CD3DX12_RESOURCE_DESC( const D3D12_RESOURCE_DESC& o ) noexcept : - 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 ) noexcept - { - 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 ) noexcept - { - 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 ) noexcept - { - 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 ) noexcept - { - 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 ) noexcept - { - 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 ) noexcept - { - return CD3DX12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_TEXTURE3D, alignment, width, height, depth, - mipLevels, format, 1, 0, layout, flags ); - } - inline UINT16 Depth() const noexcept - { return (Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D ? DepthOrArraySize : 1u); } - inline UINT16 ArraySize() const noexcept - { return (Dimension != D3D12_RESOURCE_DIMENSION_TEXTURE3D ? DepthOrArraySize : 1u); } - inline UINT8 PlaneCount(_In_ ID3D12Device* pDevice) const noexcept - { return D3D12GetFormatPlaneCount(pDevice, Format); } - inline UINT Subresources(_In_ ID3D12Device* pDevice) const noexcept - { return static_cast(MipLevels) * ArraySize() * PlaneCount(pDevice); } - inline UINT CalcSubresource(UINT MipSlice, UINT ArraySlice, UINT PlaneSlice) noexcept - { return D3D12CalcSubresource(MipSlice, ArraySlice, PlaneSlice, MipLevels, ArraySize()); } -}; -inline bool operator==( const D3D12_RESOURCE_DESC& l, const D3D12_RESOURCE_DESC& r ) noexcept -{ - 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 ) noexcept -{ return !( l == r ); } - -//------------------------------------------------------------------------------------------------ -struct CD3DX12_RESOURCE_DESC1 : public D3D12_RESOURCE_DESC1 -{ - CD3DX12_RESOURCE_DESC1() = default; - explicit CD3DX12_RESOURCE_DESC1( const D3D12_RESOURCE_DESC1& o ) noexcept : - D3D12_RESOURCE_DESC1( o ) - {} - explicit CD3DX12_RESOURCE_DESC1( const D3D12_RESOURCE_DESC& o ) noexcept - { - Dimension = o.Dimension; - Alignment = o.Alignment; - Width = o.Width; - Height = o.Height; - DepthOrArraySize = o.DepthOrArraySize; - MipLevels = o.MipLevels; - Format = o.Format; - SampleDesc = o.SampleDesc; - Layout = o.Layout; - Flags = o.Flags; - SamplerFeedbackMipRegion = {}; - } - CD3DX12_RESOURCE_DESC1( - 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, - UINT samplerFeedbackMipRegionWidth = 0, - UINT samplerFeedbackMipRegionHeight = 0, - UINT samplerFeedbackMipRegionDepth = 0) noexcept - { - Dimension = dimension; - Alignment = alignment; - Width = width; - Height = height; - DepthOrArraySize = depthOrArraySize; - MipLevels = mipLevels; - Format = format; - SampleDesc.Count = sampleCount; - SampleDesc.Quality = sampleQuality; - Layout = layout; - Flags = flags; - SamplerFeedbackMipRegion.Width = samplerFeedbackMipRegionWidth; - SamplerFeedbackMipRegion.Height = samplerFeedbackMipRegionHeight; - SamplerFeedbackMipRegion.Depth = samplerFeedbackMipRegionDepth; - } - - static inline CD3DX12_RESOURCE_DESC1 Buffer( - const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo, - D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE ) noexcept - { - return CD3DX12_RESOURCE_DESC1( D3D12_RESOURCE_DIMENSION_BUFFER, resAllocInfo.Alignment, resAllocInfo.SizeInBytes, - 1, 1, 1, DXGI_FORMAT_UNKNOWN, 1, 0, D3D12_TEXTURE_LAYOUT_ROW_MAJOR, flags, 0, 0, 0 ); - } - static inline CD3DX12_RESOURCE_DESC1 Buffer( - UINT64 width, - D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE, - UINT64 alignment = 0 ) noexcept - { - return CD3DX12_RESOURCE_DESC1( D3D12_RESOURCE_DIMENSION_BUFFER, alignment, width, 1, 1, 1, - DXGI_FORMAT_UNKNOWN, 1, 0, D3D12_TEXTURE_LAYOUT_ROW_MAJOR, flags, 0, 0, 0 ); - } - static inline CD3DX12_RESOURCE_DESC1 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 ) noexcept - { - return CD3DX12_RESOURCE_DESC1( D3D12_RESOURCE_DIMENSION_TEXTURE1D, alignment, width, 1, arraySize, - mipLevels, format, 1, 0, layout, flags, 0, 0, 0 ); - } - static inline CD3DX12_RESOURCE_DESC1 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, - UINT samplerFeedbackMipRegionWidth = 0, - UINT samplerFeedbackMipRegionHeight = 0, - UINT samplerFeedbackMipRegionDepth = 0) noexcept - { - return CD3DX12_RESOURCE_DESC1( D3D12_RESOURCE_DIMENSION_TEXTURE2D, alignment, width, height, arraySize, - mipLevels, format, sampleCount, sampleQuality, layout, flags, samplerFeedbackMipRegionWidth, - samplerFeedbackMipRegionHeight, samplerFeedbackMipRegionDepth ); - } - static inline CD3DX12_RESOURCE_DESC1 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 ) noexcept - { - return CD3DX12_RESOURCE_DESC1( D3D12_RESOURCE_DIMENSION_TEXTURE3D, alignment, width, height, depth, - mipLevels, format, 1, 0, layout, flags, 0, 0, 0 ); - } - inline UINT16 Depth() const noexcept - { return (Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D ? DepthOrArraySize : 1u); } - inline UINT16 ArraySize() const noexcept - { return (Dimension != D3D12_RESOURCE_DIMENSION_TEXTURE3D ? DepthOrArraySize : 1u); } - inline UINT8 PlaneCount(_In_ ID3D12Device* pDevice) const noexcept - { return D3D12GetFormatPlaneCount(pDevice, Format); } - inline UINT Subresources(_In_ ID3D12Device* pDevice) const noexcept - { return static_cast(MipLevels) * ArraySize() * PlaneCount(pDevice); } - inline UINT CalcSubresource(UINT MipSlice, UINT ArraySlice, UINT PlaneSlice) noexcept - { return D3D12CalcSubresource(MipSlice, ArraySlice, PlaneSlice, MipLevels, ArraySize()); } -}; -inline bool operator==( const D3D12_RESOURCE_DESC1& l, const D3D12_RESOURCE_DESC1& r ) noexcept -{ - 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 && - l.SamplerFeedbackMipRegion.Width == r.SamplerFeedbackMipRegion.Width && - l.SamplerFeedbackMipRegion.Height == r.SamplerFeedbackMipRegion.Height && - l.SamplerFeedbackMipRegion.Depth == r.SamplerFeedbackMipRegion.Depth; -} -inline bool operator!=( const D3D12_RESOURCE_DESC1& l, const D3D12_RESOURCE_DESC1& r ) noexcept -{ return !( l == r ); } - -//------------------------------------------------------------------------------------------------ -// Fills in the mipmap and alignment values of pDesc when either members are zero -// Used to replace an implicit field to an explicit (0 mip map = max mip map level) -// If expansion has occured, returns LclDesc, else returns the original pDesc -inline const CD3DX12_RESOURCE_DESC1* D3DX12ConditionallyExpandAPIDesc( - CD3DX12_RESOURCE_DESC1& LclDesc, - const CD3DX12_RESOURCE_DESC1* pDesc) -{ - // Expand mip levels: - if (pDesc->MipLevels == 0 || pDesc->Alignment == 0) - { - LclDesc = *pDesc; - if (pDesc->MipLevels == 0) - { - auto MaxMipLevels = [](UINT64 uiMaxDimension) -> UINT16 - { - UINT16 uiRet = 0; - while (uiMaxDimension > 0) - { - uiRet++; - uiMaxDimension >>= 1; - } - return uiRet; - }; - auto Max = [](UINT64 const& a, UINT64 const& b) - { - return (a < b) ? b : a; - }; - - LclDesc.MipLevels = MaxMipLevels( - Max(LclDesc.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D ? LclDesc.DepthOrArraySize : 1, - Max(LclDesc.Width, LclDesc.Height))); - } - if (pDesc->Alignment == 0) - { - if (pDesc->Layout == D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE - || pDesc->Layout == D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE - ) - { - LclDesc.Alignment = D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT; - } - else - { - LclDesc.Alignment = - (pDesc->SampleDesc.Count > 1 ? D3D12_DEFAULT_MSAA_RESOURCE_PLACEMENT_ALIGNMENT : D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT); - } - } - return &LclDesc; - } - else - { - return pDesc; - } -} - -//------------------------------------------------------------------------------------------------ -struct CD3DX12_VIEW_INSTANCING_DESC : public D3D12_VIEW_INSTANCING_DESC -{ - CD3DX12_VIEW_INSTANCING_DESC() = default; - explicit CD3DX12_VIEW_INSTANCING_DESC( const D3D12_VIEW_INSTANCING_DESC& o ) noexcept : - D3D12_VIEW_INSTANCING_DESC( o ) - {} - explicit CD3DX12_VIEW_INSTANCING_DESC( CD3DX12_DEFAULT ) noexcept - { - ViewInstanceCount = 0; - pViewInstanceLocations = nullptr; - Flags = D3D12_VIEW_INSTANCING_FLAG_NONE; - } - explicit CD3DX12_VIEW_INSTANCING_DESC( - UINT InViewInstanceCount, - const D3D12_VIEW_INSTANCE_LOCATION* InViewInstanceLocations, - D3D12_VIEW_INSTANCING_FLAGS InFlags) noexcept - { - ViewInstanceCount = InViewInstanceCount; - pViewInstanceLocations = InViewInstanceLocations; - Flags = InFlags; - } -}; - -//------------------------------------------------------------------------------------------------ -struct CD3DX12_RT_FORMAT_ARRAY : public D3D12_RT_FORMAT_ARRAY -{ - CD3DX12_RT_FORMAT_ARRAY() = default; - explicit CD3DX12_RT_FORMAT_ARRAY(const D3D12_RT_FORMAT_ARRAY& o) noexcept - : D3D12_RT_FORMAT_ARRAY(o) - {} - explicit CD3DX12_RT_FORMAT_ARRAY(_In_reads_(NumFormats) const DXGI_FORMAT* pFormats, UINT NumFormats) noexcept - { - NumRenderTargets = NumFormats; - memcpy(RTFormats, pFormats, sizeof(RTFormats)); - // assumes ARRAY_SIZE(pFormats) == ARRAY_SIZE(RTFormats) - } -}; - diff --git a/Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_default.h b/Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_default.h deleted file mode 100644 index 2b74d70..0000000 --- a/Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_default.h +++ /dev/null @@ -1,12 +0,0 @@ -//********************************************************* -// -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License (MIT). -// -//********************************************************* - -#pragma once - -struct CD3DX12_DEFAULT {}; -extern const DECLSPEC_SELECTANY CD3DX12_DEFAULT D3D12_DEFAULT; - diff --git a/Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_pipeline_state_stream.h b/Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_pipeline_state_stream.h deleted file mode 100644 index 979ee8c..0000000 --- a/Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_pipeline_state_stream.h +++ /dev/null @@ -1,1496 +0,0 @@ -//********************************************************* -// -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License (MIT). -// -//********************************************************* - -#pragma once - -#ifndef __cplusplus -#error D3DX12 requires C++ -#endif - -#include "d3dx12_default.h" -#include "d3d12.h" -#include "d3dx12_core.h" - -//------------------------------------------------------------------------------------------------ -// Pipeline State Stream Helpers -//------------------------------------------------------------------------------------------------ - -//------------------------------------------------------------------------------------------------ -// Stream Subobjects, i.e. elements of a stream - -struct DefaultSampleMask { operator UINT() noexcept { return UINT_MAX; } }; -struct DefaultSampleDesc { operator DXGI_SAMPLE_DESC() noexcept { return DXGI_SAMPLE_DESC{1, 0}; } }; - -#ifdef _MSC_VER -#pragma warning(push) -#pragma warning(disable : 4324) -#endif -template -class alignas(void*) CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT -{ -private: - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE pssType; - InnerStructType pssInner; -public: - CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT() noexcept : pssType(Type), pssInner(DefaultArg()) {} - CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT(InnerStructType const& i) noexcept : pssType(Type), pssInner(i) {} - CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT& operator=(InnerStructType const& i) noexcept { pssType = Type; pssInner = i; return *this; } - operator InnerStructType const&() const noexcept { return pssInner; } - operator InnerStructType&() noexcept { return pssInner; } - InnerStructType* operator&() noexcept { return &pssInner; } - InnerStructType const* operator&() const noexcept { return &pssInner; } -}; -#ifdef _MSC_VER -#pragma warning(pop) -#endif -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_AS> CD3DX12_PIPELINE_STATE_STREAM_AS; -typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_SHADER_BYTECODE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MS> CD3DX12_PIPELINE_STATE_STREAM_MS; -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; -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 606) -typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_DEPTH_STENCIL_DESC2, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL2, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL2; -#endif -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; -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 608) -typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_RASTERIZER_DESC1, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER1, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER1; -#endif -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 610) -typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_RASTERIZER_DESC2, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER2, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER2; -#endif -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, DefaultSampleDesc> CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC; -typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< UINT, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_MASK, DefaultSampleMask> 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; -typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_VIEW_INSTANCING_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VIEW_INSTANCING, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING; - -//------------------------------------------------------------------------------------------------ -// 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 ASCb(const D3D12_SHADER_BYTECODE&) {} - virtual void MSCb(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&) {} -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 606) - virtual void DepthStencilState2Cb(const D3D12_DEPTH_STENCIL_DESC2&) {} -#endif - virtual void DSVFormatCb(DXGI_FORMAT) {} - virtual void RasterizerStateCb(const D3D12_RASTERIZER_DESC&) {} -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 608) - virtual void RasterizerState1Cb(const D3D12_RASTERIZER_DESC1&) {} -#endif -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 610) - virtual void RasterizerState2Cb(const D3D12_RASTERIZER_DESC2&) {} -#endif - virtual void RTVFormatsCb(const D3D12_RT_FORMAT_ARRAY&) {} - virtual void SampleDescCb(const DXGI_SAMPLE_DESC&) {} - virtual void SampleMaskCb(UINT) {} - virtual void ViewInstancingCb(const D3D12_VIEW_INSTANCING_DESC&) {} - 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*/) {} -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 613) - virtual void FinalizeCb() {} -#endif - - virtual ~ID3DX12PipelineParserCallbacks() = default; -}; - -struct D3DX12_MESH_SHADER_PIPELINE_STATE_DESC -{ - ID3D12RootSignature* pRootSignature; - D3D12_SHADER_BYTECODE AS; - D3D12_SHADER_BYTECODE MS; - D3D12_SHADER_BYTECODE PS; - D3D12_BLEND_DESC BlendState; - UINT SampleMask; - D3D12_RASTERIZER_DESC RasterizerState; - D3D12_DEPTH_STENCIL_DESC DepthStencilState; - D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType; - UINT NumRenderTargets; - DXGI_FORMAT RTVFormats[ D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT ]; - DXGI_FORMAT DSVFormat; - DXGI_SAMPLE_DESC SampleDesc; - UINT NodeMask; - D3D12_CACHED_PIPELINE_STATE CachedPSO; - D3D12_PIPELINE_STATE_FLAGS Flags; -}; - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 610) -// Use CD3DX12_PIPELINE_STATE_STREAM5 for D3D12_RASTERIZER_DESC2 when CheckFeatureSupport returns true for Options19::RasterizerDesc2Supported is true -// Use CD3DX12_PIPELINE_STATE_STREAM4 for D3D12_RASTERIZER_DESC1 when CheckFeatureSupport returns true for Options16::DynamicDepthBiasSupported is true -// Use CD3DX12_PIPELINE_STATE_STREAM3 for D3D12_DEPTH_STENCIL_DESC2 when CheckFeatureSupport returns true for Options14::IndependentFrontAndBackStencilSupported is true -// Use CD3DX12_PIPELINE_STATE_STREAM2 for OS Build 19041+ (where there is a new mesh shader pipeline). -// Use CD3DX12_PIPELINE_STATE_STREAM1 for OS Build 16299+ (where there is a new view instancing subobject). -// Use CD3DX12_PIPELINE_STATE_STREAM for OS Build 15063+ support. -struct CD3DX12_PIPELINE_STATE_STREAM5 -{ - CD3DX12_PIPELINE_STATE_STREAM5() = default; - // Mesh and amplification shaders must be set manually, since they do not have representation in D3D12_GRAPHICS_PIPELINE_STATE_DESC - CD3DX12_PIPELINE_STATE_STREAM5(const D3D12_GRAPHICS_PIPELINE_STATE_DESC& Desc) noexcept - : 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_DESC2(Desc.DepthStencilState)) - , DSVFormat(Desc.DSVFormat) - , RasterizerState(CD3DX12_RASTERIZER_DESC2(Desc.RasterizerState)) - , RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets)) - , SampleDesc(Desc.SampleDesc) - , SampleMask(Desc.SampleMask) - , CachedPSO(Desc.CachedPSO) - , ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT())) - {} - CD3DX12_PIPELINE_STATE_STREAM5(const D3DX12_MESH_SHADER_PIPELINE_STATE_DESC& Desc) noexcept - : Flags(Desc.Flags) - , NodeMask(Desc.NodeMask) - , pRootSignature(Desc.pRootSignature) - , PrimitiveTopologyType(Desc.PrimitiveTopologyType) - , PS(Desc.PS) - , AS(Desc.AS) - , MS(Desc.MS) - , BlendState(CD3DX12_BLEND_DESC(Desc.BlendState)) - , DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC2(Desc.DepthStencilState)) - , DSVFormat(Desc.DSVFormat) - , RasterizerState(CD3DX12_RASTERIZER_DESC2(Desc.RasterizerState)) - , RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets)) - , SampleDesc(Desc.SampleDesc) - , SampleMask(Desc.SampleMask) - , CachedPSO(Desc.CachedPSO) - , ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT())) - {} - CD3DX12_PIPELINE_STATE_STREAM5(const D3D12_COMPUTE_PIPELINE_STATE_DESC& Desc) noexcept - : Flags(Desc.Flags) - , NodeMask(Desc.NodeMask) - , pRootSignature(Desc.pRootSignature) - , CS(CD3DX12_SHADER_BYTECODE(Desc.CS)) - , CachedPSO(Desc.CachedPSO) - { - static_cast(DepthStencilState).DepthEnable = false; - } - 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_AS AS; - CD3DX12_PIPELINE_STATE_STREAM_MS MS; - CD3DX12_PIPELINE_STATE_STREAM_CS CS; - CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC BlendState; - CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL2 DepthStencilState; - CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT DSVFormat; - CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER2 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; - CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING ViewInstancingDesc; - - D3D12_GRAPHICS_PIPELINE_STATE_DESC GraphicsDescV0() const noexcept - { - 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_DESC2(D3D12_DEPTH_STENCIL_DESC2(this->DepthStencilState)); - D.DSVFormat = this->DSVFormat; - D.RasterizerState = CD3DX12_RASTERIZER_DESC2(D3D12_RASTERIZER_DESC2(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 noexcept - { - 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; - } -}; -#endif // D3D12_SDK_VERSION >= 610 - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 608) -// Use CD3DX12_PIPELINE_STATE_STREAM4 for D3D12_RASTERIZER_DESC1 when CheckFeatureSupport returns true for Options16::DynamicDepthBiasSupported is true -// Use CD3DX12_PIPELINE_STATE_STREAM3 for D3D12_DEPTH_STENCIL_DESC2 when CheckFeatureSupport returns true for Options14::IndependentFrontAndBackStencilSupported is true -// Use CD3DX12_PIPELINE_STATE_STREAM2 for OS Build 19041+ (where there is a new mesh shader pipeline). -// Use CD3DX12_PIPELINE_STATE_STREAM1 for OS Build 16299+ (where there is a new view instancing subobject). -// Use CD3DX12_PIPELINE_STATE_STREAM for OS Build 15063+ support. -struct CD3DX12_PIPELINE_STATE_STREAM4 -{ - CD3DX12_PIPELINE_STATE_STREAM4() = default; - // Mesh and amplification shaders must be set manually, since they do not have representation in D3D12_GRAPHICS_PIPELINE_STATE_DESC - CD3DX12_PIPELINE_STATE_STREAM4(const D3D12_GRAPHICS_PIPELINE_STATE_DESC& Desc) noexcept - : 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_DESC2(Desc.DepthStencilState)) - , DSVFormat(Desc.DSVFormat) - , RasterizerState(CD3DX12_RASTERIZER_DESC1(Desc.RasterizerState)) - , RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets)) - , SampleDesc(Desc.SampleDesc) - , SampleMask(Desc.SampleMask) - , CachedPSO(Desc.CachedPSO) - , ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT())) - {} - CD3DX12_PIPELINE_STATE_STREAM4(const D3DX12_MESH_SHADER_PIPELINE_STATE_DESC& Desc) noexcept - : Flags(Desc.Flags) - , NodeMask(Desc.NodeMask) - , pRootSignature(Desc.pRootSignature) - , PrimitiveTopologyType(Desc.PrimitiveTopologyType) - , PS(Desc.PS) - , AS(Desc.AS) - , MS(Desc.MS) - , BlendState(CD3DX12_BLEND_DESC(Desc.BlendState)) - , DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC2(Desc.DepthStencilState)) - , DSVFormat(Desc.DSVFormat) - , RasterizerState(CD3DX12_RASTERIZER_DESC1(Desc.RasterizerState)) - , RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets)) - , SampleDesc(Desc.SampleDesc) - , SampleMask(Desc.SampleMask) - , CachedPSO(Desc.CachedPSO) - , ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT())) - {} - CD3DX12_PIPELINE_STATE_STREAM4(const D3D12_COMPUTE_PIPELINE_STATE_DESC& Desc) noexcept - : Flags(Desc.Flags) - , NodeMask(Desc.NodeMask) - , pRootSignature(Desc.pRootSignature) - , CS(CD3DX12_SHADER_BYTECODE(Desc.CS)) - , CachedPSO(Desc.CachedPSO) - { - static_cast(DepthStencilState).DepthEnable = false; - } - 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_AS AS; - CD3DX12_PIPELINE_STATE_STREAM_MS MS; - CD3DX12_PIPELINE_STATE_STREAM_CS CS; - CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC BlendState; - CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL2 DepthStencilState; - CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT DSVFormat; - CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER1 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; - CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING ViewInstancingDesc; - - D3D12_GRAPHICS_PIPELINE_STATE_DESC GraphicsDescV0() const noexcept - { - 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_DESC2(D3D12_DEPTH_STENCIL_DESC2(this->DepthStencilState)); - D.DSVFormat = this->DSVFormat; - D.RasterizerState = CD3DX12_RASTERIZER_DESC1(D3D12_RASTERIZER_DESC1(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 noexcept - { - 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; - } -}; -#endif // D3D12_SDK_VERSION >= 608 - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 606) -// Use CD3DX12_PIPELINE_STATE_STREAM3 for D3D12_DEPTH_STENCIL_DESC2 when CheckFeatureSupport returns true for Options14::IndependentFrontAndBackStencilSupported is true -// Use CD3DX12_PIPELINE_STATE_STREAM2 for OS Build 19041+ (where there is a new mesh shader pipeline). -// Use CD3DX12_PIPELINE_STATE_STREAM1 for OS Build 16299+ (where there is a new view instancing subobject). -// Use CD3DX12_PIPELINE_STATE_STREAM for OS Build 15063+ support. -struct CD3DX12_PIPELINE_STATE_STREAM3 -{ - CD3DX12_PIPELINE_STATE_STREAM3() = default; - // Mesh and amplification shaders must be set manually, since they do not have representation in D3D12_GRAPHICS_PIPELINE_STATE_DESC - CD3DX12_PIPELINE_STATE_STREAM3(const D3D12_GRAPHICS_PIPELINE_STATE_DESC& Desc) noexcept - : 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_DESC2(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) - , ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT())) - {} - CD3DX12_PIPELINE_STATE_STREAM3(const D3DX12_MESH_SHADER_PIPELINE_STATE_DESC& Desc) noexcept - : Flags(Desc.Flags) - , NodeMask(Desc.NodeMask) - , pRootSignature(Desc.pRootSignature) - , PrimitiveTopologyType(Desc.PrimitiveTopologyType) - , PS(Desc.PS) - , AS(Desc.AS) - , MS(Desc.MS) - , BlendState(CD3DX12_BLEND_DESC(Desc.BlendState)) - , DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC2(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) - , ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT())) - {} - CD3DX12_PIPELINE_STATE_STREAM3(const D3D12_COMPUTE_PIPELINE_STATE_DESC& Desc) noexcept - : Flags(Desc.Flags) - , NodeMask(Desc.NodeMask) - , pRootSignature(Desc.pRootSignature) - , CS(CD3DX12_SHADER_BYTECODE(Desc.CS)) - , CachedPSO(Desc.CachedPSO) - { - static_cast(DepthStencilState).DepthEnable = false; - } - 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_AS AS; - CD3DX12_PIPELINE_STATE_STREAM_MS MS; - CD3DX12_PIPELINE_STATE_STREAM_CS CS; - CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC BlendState; - CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL2 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; - CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING ViewInstancingDesc; - - D3D12_GRAPHICS_PIPELINE_STATE_DESC GraphicsDescV0() const noexcept - { - 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_DESC2(D3D12_DEPTH_STENCIL_DESC2(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 noexcept - { - 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; - } -}; -#endif // D3D12_SDK_VERSION >= 606 - -// CD3DX12_PIPELINE_STATE_STREAM2 Works on OS Build 19041+ (where there is a new mesh shader pipeline). -// Use CD3DX12_PIPELINE_STATE_STREAM1 for OS Build 16299+ (where there is a new view instancing subobject). -// Use CD3DX12_PIPELINE_STATE_STREAM for OS Build 15063+ support. -struct CD3DX12_PIPELINE_STATE_STREAM2 -{ - CD3DX12_PIPELINE_STATE_STREAM2() = default; - // Mesh and amplification shaders must be set manually, since they do not have representation in D3D12_GRAPHICS_PIPELINE_STATE_DESC - CD3DX12_PIPELINE_STATE_STREAM2(const D3D12_GRAPHICS_PIPELINE_STATE_DESC& Desc) noexcept - : 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) - , ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT())) - {} - CD3DX12_PIPELINE_STATE_STREAM2(const D3DX12_MESH_SHADER_PIPELINE_STATE_DESC& Desc) noexcept - : Flags(Desc.Flags) - , NodeMask(Desc.NodeMask) - , pRootSignature(Desc.pRootSignature) - , PrimitiveTopologyType(Desc.PrimitiveTopologyType) - , PS(Desc.PS) - , AS(Desc.AS) - , MS(Desc.MS) - , 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) - , ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT())) - {} - CD3DX12_PIPELINE_STATE_STREAM2(const D3D12_COMPUTE_PIPELINE_STATE_DESC& Desc) noexcept - : Flags(Desc.Flags) - , NodeMask(Desc.NodeMask) - , pRootSignature(Desc.pRootSignature) - , CS(CD3DX12_SHADER_BYTECODE(Desc.CS)) - , CachedPSO(Desc.CachedPSO) - { - static_cast(DepthStencilState).DepthEnable = false; - } - 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_AS AS; - CD3DX12_PIPELINE_STATE_STREAM_MS MS; - 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; - CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING ViewInstancingDesc; - D3D12_GRAPHICS_PIPELINE_STATE_DESC GraphicsDescV0() const noexcept - { - 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 noexcept - { - 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; - } -}; - -// CD3DX12_PIPELINE_STATE_STREAM1 Works on OS Build 16299+ (where there is a new view instancing subobject). -// Use CD3DX12_PIPELINE_STATE_STREAM for OS Build 15063+ support. -struct CD3DX12_PIPELINE_STATE_STREAM1 -{ - CD3DX12_PIPELINE_STATE_STREAM1() = default; - // Mesh and amplification shaders must be set manually, since they do not have representation in D3D12_GRAPHICS_PIPELINE_STATE_DESC - CD3DX12_PIPELINE_STATE_STREAM1(const D3D12_GRAPHICS_PIPELINE_STATE_DESC& Desc) noexcept - : 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) - , ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT())) - {} - CD3DX12_PIPELINE_STATE_STREAM1(const D3DX12_MESH_SHADER_PIPELINE_STATE_DESC& Desc) noexcept - : Flags(Desc.Flags) - , NodeMask(Desc.NodeMask) - , pRootSignature(Desc.pRootSignature) - , PrimitiveTopologyType(Desc.PrimitiveTopologyType) - , 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) - , ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT())) - {} - CD3DX12_PIPELINE_STATE_STREAM1(const D3D12_COMPUTE_PIPELINE_STATE_DESC& Desc) noexcept - : Flags(Desc.Flags) - , NodeMask(Desc.NodeMask) - , pRootSignature(Desc.pRootSignature) - , CS(CD3DX12_SHADER_BYTECODE(Desc.CS)) - , CachedPSO(Desc.CachedPSO) - { - static_cast(DepthStencilState).DepthEnable = false; - } - 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; - CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING ViewInstancingDesc; - D3D12_GRAPHICS_PIPELINE_STATE_DESC GraphicsDescV0() const noexcept - { - 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 noexcept - { - 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_MESH_STATE_STREAM -{ - CD3DX12_PIPELINE_MESH_STATE_STREAM() = default; - CD3DX12_PIPELINE_MESH_STATE_STREAM(const D3DX12_MESH_SHADER_PIPELINE_STATE_DESC& Desc) noexcept - : Flags(Desc.Flags) - , NodeMask(Desc.NodeMask) - , pRootSignature(Desc.pRootSignature) - , PrimitiveTopologyType(Desc.PrimitiveTopologyType) - , PS(Desc.PS) - , AS(Desc.AS) - , MS(Desc.MS) - , 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) - , ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT())) - {} - CD3DX12_PIPELINE_STATE_STREAM_FLAGS Flags; - CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK NodeMask; - CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE pRootSignature; - CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY PrimitiveTopologyType; - CD3DX12_PIPELINE_STATE_STREAM_PS PS; - CD3DX12_PIPELINE_STATE_STREAM_AS AS; - CD3DX12_PIPELINE_STATE_STREAM_MS MS; - 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; - CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING ViewInstancingDesc; - D3DX12_MESH_SHADER_PIPELINE_STATE_DESC MeshShaderDescV0() const noexcept - { - D3DX12_MESH_SHADER_PIPELINE_STATE_DESC D; - D.Flags = this->Flags; - D.NodeMask = this->NodeMask; - D.pRootSignature = this->pRootSignature; - D.PrimitiveTopologyType = this->PrimitiveTopologyType; - D.PS = this->PS; - D.AS = this->AS; - D.MS = this->MS; - 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; - } -}; - -// CD3DX12_PIPELINE_STATE_STREAM works on OS Build 15063+ but does not support new subobject(s) added in OS Build 16299+. -// See CD3DX12_PIPELINE_STATE_STREAM1 for instance. -struct CD3DX12_PIPELINE_STATE_STREAM -{ - CD3DX12_PIPELINE_STATE_STREAM() = default; - CD3DX12_PIPELINE_STATE_STREAM(const D3D12_GRAPHICS_PIPELINE_STATE_DESC& Desc) noexcept - : 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) noexcept - : 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 noexcept - { - 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 noexcept - { - 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_STREAM2_PARSE_HELPER : public ID3DX12PipelineParserCallbacks -{ - CD3DX12_PIPELINE_STATE_STREAM2 PipelineStream; - CD3DX12_PIPELINE_STATE_STREAM2_PARSE_HELPER() noexcept - : SeenDSS(false) - { - // Adjust defaults to account for absent members. - PipelineStream.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE; - - // Depth disabled if no DSV format specified. - static_cast(PipelineStream.DepthStencilState).DepthEnable = false; - } - - // ID3DX12PipelineParserCallbacks - void FlagsCb(D3D12_PIPELINE_STATE_FLAGS Flags) override {PipelineStream.Flags = Flags;} - void NodeMaskCb(UINT NodeMask) override {PipelineStream.NodeMask = NodeMask;} - void RootSignatureCb(ID3D12RootSignature* pRootSignature) override {PipelineStream.pRootSignature = pRootSignature;} - void InputLayoutCb(const D3D12_INPUT_LAYOUT_DESC& InputLayout) override {PipelineStream.InputLayout = InputLayout;} - void IBStripCutValueCb(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue) override {PipelineStream.IBStripCutValue = IBStripCutValue;} - void PrimitiveTopologyTypeCb(D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType) override {PipelineStream.PrimitiveTopologyType = PrimitiveTopologyType;} - void VSCb(const D3D12_SHADER_BYTECODE& VS) override {PipelineStream.VS = VS;} - void GSCb(const D3D12_SHADER_BYTECODE& GS) override {PipelineStream.GS = GS;} - void StreamOutputCb(const D3D12_STREAM_OUTPUT_DESC& StreamOutput) override {PipelineStream.StreamOutput = StreamOutput;} - void HSCb(const D3D12_SHADER_BYTECODE& HS) override {PipelineStream.HS = HS;} - void DSCb(const D3D12_SHADER_BYTECODE& DS) override {PipelineStream.DS = DS;} - void PSCb(const D3D12_SHADER_BYTECODE& PS) override {PipelineStream.PS = PS;} - void CSCb(const D3D12_SHADER_BYTECODE& CS) override {PipelineStream.CS = CS;} - void ASCb(const D3D12_SHADER_BYTECODE& AS) override {PipelineStream.AS = AS;} - void MSCb(const D3D12_SHADER_BYTECODE& MS) override {PipelineStream.MS = MS;} - void BlendStateCb(const D3D12_BLEND_DESC& BlendState) override {PipelineStream.BlendState = CD3DX12_BLEND_DESC(BlendState);} - void DepthStencilStateCb(const D3D12_DEPTH_STENCIL_DESC& DepthStencilState) override - { - PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(DepthStencilState); - SeenDSS = true; - } - void DepthStencilState1Cb(const D3D12_DEPTH_STENCIL_DESC1& DepthStencilState) override - { - PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(DepthStencilState); - SeenDSS = true; - } - void DSVFormatCb(DXGI_FORMAT DSVFormat) override - { - PipelineStream.DSVFormat = DSVFormat; - if (!SeenDSS && DSVFormat != DXGI_FORMAT_UNKNOWN) - { - // Re-enable depth for the default state. - static_cast(PipelineStream.DepthStencilState).DepthEnable = true; - } - } - void RasterizerStateCb(const D3D12_RASTERIZER_DESC& RasterizerState) override {PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC(RasterizerState);} - void RTVFormatsCb(const D3D12_RT_FORMAT_ARRAY& RTVFormats) override {PipelineStream.RTVFormats = RTVFormats;} - void SampleDescCb(const DXGI_SAMPLE_DESC& SampleDesc) override {PipelineStream.SampleDesc = SampleDesc;} - void SampleMaskCb(UINT SampleMask) override {PipelineStream.SampleMask = SampleMask;} - void ViewInstancingCb(const D3D12_VIEW_INSTANCING_DESC& ViewInstancingDesc) override {PipelineStream.ViewInstancingDesc = CD3DX12_VIEW_INSTANCING_DESC(ViewInstancingDesc);} - void CachedPSOCb(const D3D12_CACHED_PIPELINE_STATE& CachedPSO) override {PipelineStream.CachedPSO = CachedPSO;} - -private: - bool SeenDSS; -}; - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 606) -struct CD3DX12_PIPELINE_STATE_STREAM3_PARSE_HELPER : public ID3DX12PipelineParserCallbacks -{ - CD3DX12_PIPELINE_STATE_STREAM3 PipelineStream; - CD3DX12_PIPELINE_STATE_STREAM3_PARSE_HELPER() noexcept - : SeenDSS(false) - { - // Adjust defaults to account for absent members. - PipelineStream.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE; - - // Depth disabled if no DSV format specified. - static_cast(PipelineStream.DepthStencilState).DepthEnable = false; - } - - // ID3DX12PipelineParserCallbacks - void FlagsCb(D3D12_PIPELINE_STATE_FLAGS Flags) override { PipelineStream.Flags = Flags; } - void NodeMaskCb(UINT NodeMask) override { PipelineStream.NodeMask = NodeMask; } - void RootSignatureCb(ID3D12RootSignature* pRootSignature) override { PipelineStream.pRootSignature = pRootSignature; } - void InputLayoutCb(const D3D12_INPUT_LAYOUT_DESC& InputLayout) override { PipelineStream.InputLayout = InputLayout; } - void IBStripCutValueCb(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue) override { PipelineStream.IBStripCutValue = IBStripCutValue; } - void PrimitiveTopologyTypeCb(D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType) override { PipelineStream.PrimitiveTopologyType = PrimitiveTopologyType; } - void VSCb(const D3D12_SHADER_BYTECODE& VS) override { PipelineStream.VS = VS; } - void GSCb(const D3D12_SHADER_BYTECODE& GS) override { PipelineStream.GS = GS; } - void StreamOutputCb(const D3D12_STREAM_OUTPUT_DESC& StreamOutput) override { PipelineStream.StreamOutput = StreamOutput; } - void HSCb(const D3D12_SHADER_BYTECODE& HS) override { PipelineStream.HS = HS; } - void DSCb(const D3D12_SHADER_BYTECODE& DS) override { PipelineStream.DS = DS; } - void PSCb(const D3D12_SHADER_BYTECODE& PS) override { PipelineStream.PS = PS; } - void CSCb(const D3D12_SHADER_BYTECODE& CS) override { PipelineStream.CS = CS; } - void ASCb(const D3D12_SHADER_BYTECODE& AS) override { PipelineStream.AS = AS; } - void MSCb(const D3D12_SHADER_BYTECODE& MS) override { PipelineStream.MS = MS; } - void BlendStateCb(const D3D12_BLEND_DESC& BlendState) override { PipelineStream.BlendState = CD3DX12_BLEND_DESC(BlendState); } - void DepthStencilStateCb(const D3D12_DEPTH_STENCIL_DESC& DepthStencilState) override - { - PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState); - SeenDSS = true; - } - void DepthStencilState1Cb(const D3D12_DEPTH_STENCIL_DESC1& DepthStencilState) override - { - PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState); - SeenDSS = true; - } - void DepthStencilState2Cb(const D3D12_DEPTH_STENCIL_DESC2& DepthStencilState) override - { - PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState); - SeenDSS = true; - } - void DSVFormatCb(DXGI_FORMAT DSVFormat) override - { - PipelineStream.DSVFormat = DSVFormat; - if (!SeenDSS && DSVFormat != DXGI_FORMAT_UNKNOWN) - { - // Re-enable depth for the default state. - static_cast(PipelineStream.DepthStencilState).DepthEnable = true; - } - } - void RasterizerStateCb(const D3D12_RASTERIZER_DESC& RasterizerState) override { PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC(RasterizerState); } - void RTVFormatsCb(const D3D12_RT_FORMAT_ARRAY& RTVFormats) override { PipelineStream.RTVFormats = RTVFormats; } - void SampleDescCb(const DXGI_SAMPLE_DESC& SampleDesc) override { PipelineStream.SampleDesc = SampleDesc; } - void SampleMaskCb(UINT SampleMask) override { PipelineStream.SampleMask = SampleMask; } - void ViewInstancingCb(const D3D12_VIEW_INSTANCING_DESC& ViewInstancingDesc) override { PipelineStream.ViewInstancingDesc = CD3DX12_VIEW_INSTANCING_DESC(ViewInstancingDesc); } - void CachedPSOCb(const D3D12_CACHED_PIPELINE_STATE& CachedPSO) override { PipelineStream.CachedPSO = CachedPSO; } - -private: - bool SeenDSS; -}; -#endif // D3D12_SDK_VERSION >= 606 - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 608) -struct CD3DX12_PIPELINE_STATE_STREAM4_PARSE_HELPER : public ID3DX12PipelineParserCallbacks -{ - CD3DX12_PIPELINE_STATE_STREAM4 PipelineStream; - CD3DX12_PIPELINE_STATE_STREAM4_PARSE_HELPER() noexcept - : SeenDSS(false) - { - // Adjust defaults to account for absent members. - PipelineStream.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE; - - // Depth disabled if no DSV format specified. - static_cast(PipelineStream.DepthStencilState).DepthEnable = false; - } - - // ID3DX12PipelineParserCallbacks - void FlagsCb(D3D12_PIPELINE_STATE_FLAGS Flags) override { PipelineStream.Flags = Flags; } - void NodeMaskCb(UINT NodeMask) override { PipelineStream.NodeMask = NodeMask; } - void RootSignatureCb(ID3D12RootSignature* pRootSignature) override { PipelineStream.pRootSignature = pRootSignature; } - void InputLayoutCb(const D3D12_INPUT_LAYOUT_DESC& InputLayout) override { PipelineStream.InputLayout = InputLayout; } - void IBStripCutValueCb(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue) override { PipelineStream.IBStripCutValue = IBStripCutValue; } - void PrimitiveTopologyTypeCb(D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType) override { PipelineStream.PrimitiveTopologyType = PrimitiveTopologyType; } - void VSCb(const D3D12_SHADER_BYTECODE& VS) override { PipelineStream.VS = VS; } - void GSCb(const D3D12_SHADER_BYTECODE& GS) override { PipelineStream.GS = GS; } - void StreamOutputCb(const D3D12_STREAM_OUTPUT_DESC& StreamOutput) override { PipelineStream.StreamOutput = StreamOutput; } - void HSCb(const D3D12_SHADER_BYTECODE& HS) override { PipelineStream.HS = HS; } - void DSCb(const D3D12_SHADER_BYTECODE& DS) override { PipelineStream.DS = DS; } - void PSCb(const D3D12_SHADER_BYTECODE& PS) override { PipelineStream.PS = PS; } - void CSCb(const D3D12_SHADER_BYTECODE& CS) override { PipelineStream.CS = CS; } - void ASCb(const D3D12_SHADER_BYTECODE& AS) override { PipelineStream.AS = AS; } - void MSCb(const D3D12_SHADER_BYTECODE& MS) override { PipelineStream.MS = MS; } - void BlendStateCb(const D3D12_BLEND_DESC& BlendState) override { PipelineStream.BlendState = CD3DX12_BLEND_DESC(BlendState); } - void DepthStencilStateCb(const D3D12_DEPTH_STENCIL_DESC& DepthStencilState) override - { - PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState); - SeenDSS = true; - } - void DepthStencilState1Cb(const D3D12_DEPTH_STENCIL_DESC1& DepthStencilState) override - { - PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState); - SeenDSS = true; - } - void DepthStencilState2Cb(const D3D12_DEPTH_STENCIL_DESC2& DepthStencilState) override - { - PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState); - SeenDSS = true; - } - void DSVFormatCb(DXGI_FORMAT DSVFormat) override - { - PipelineStream.DSVFormat = DSVFormat; - if (!SeenDSS && DSVFormat != DXGI_FORMAT_UNKNOWN) - { - // Re-enable depth for the default state. - static_cast(PipelineStream.DepthStencilState).DepthEnable = true; - } - } - void RasterizerStateCb(const D3D12_RASTERIZER_DESC& RasterizerState) override { PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC1(RasterizerState); } - void RasterizerState1Cb(const D3D12_RASTERIZER_DESC1& RasterizerState) override { PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC1(RasterizerState); } - void RTVFormatsCb(const D3D12_RT_FORMAT_ARRAY& RTVFormats) override { PipelineStream.RTVFormats = RTVFormats; } - void SampleDescCb(const DXGI_SAMPLE_DESC& SampleDesc) override { PipelineStream.SampleDesc = SampleDesc; } - void SampleMaskCb(UINT SampleMask) override { PipelineStream.SampleMask = SampleMask; } - void ViewInstancingCb(const D3D12_VIEW_INSTANCING_DESC& ViewInstancingDesc) override { PipelineStream.ViewInstancingDesc = CD3DX12_VIEW_INSTANCING_DESC(ViewInstancingDesc); } - void CachedPSOCb(const D3D12_CACHED_PIPELINE_STATE& CachedPSO) override { PipelineStream.CachedPSO = CachedPSO; } - -private: - bool SeenDSS; -}; -#endif // D3D12_SDK_VERSION >= 608 - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 613) -// This SDK 613 version has better primitive topology default handling than the v610 equivalent below. -struct CD3DX12_PIPELINE_STATE_STREAM5_PARSE_HELPER : public ID3DX12PipelineParserCallbacks -{ - CD3DX12_PIPELINE_STATE_STREAM5 PipelineStream; - CD3DX12_PIPELINE_STATE_STREAM5_PARSE_HELPER() noexcept - : SeenDSS(false), - SeenMS(false), - SeenTopology(false) - { - // Adjust defaults to account for absent members. - PipelineStream.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE; - - // Depth disabled if no DSV format specified. - static_cast(PipelineStream.DepthStencilState).DepthEnable = false; - } - - // ID3DX12PipelineParserCallbacks - void FlagsCb(D3D12_PIPELINE_STATE_FLAGS Flags) override { PipelineStream.Flags = Flags; } - void NodeMaskCb(UINT NodeMask) override { PipelineStream.NodeMask = NodeMask; } - void RootSignatureCb(ID3D12RootSignature* pRootSignature) override { PipelineStream.pRootSignature = pRootSignature; } - void InputLayoutCb(const D3D12_INPUT_LAYOUT_DESC& InputLayout) override { PipelineStream.InputLayout = InputLayout; } - void IBStripCutValueCb(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue) override { PipelineStream.IBStripCutValue = IBStripCutValue; } - void PrimitiveTopologyTypeCb(D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType) override - { - PipelineStream.PrimitiveTopologyType = PrimitiveTopologyType; - SeenTopology = true; - } - void VSCb(const D3D12_SHADER_BYTECODE& VS) override { PipelineStream.VS = VS; } - void GSCb(const D3D12_SHADER_BYTECODE& GS) override { PipelineStream.GS = GS; } - void StreamOutputCb(const D3D12_STREAM_OUTPUT_DESC& StreamOutput) override { PipelineStream.StreamOutput = StreamOutput; } - void HSCb(const D3D12_SHADER_BYTECODE& HS) override { PipelineStream.HS = HS; } - void DSCb(const D3D12_SHADER_BYTECODE& DS) override { PipelineStream.DS = DS; } - void PSCb(const D3D12_SHADER_BYTECODE& PS) override { PipelineStream.PS = PS; } - void CSCb(const D3D12_SHADER_BYTECODE& CS) override { PipelineStream.CS = CS; } - void ASCb(const D3D12_SHADER_BYTECODE& AS) override { PipelineStream.AS = AS; } - void MSCb(const D3D12_SHADER_BYTECODE& MS) override { PipelineStream.MS = MS; SeenMS = true; } - void BlendStateCb(const D3D12_BLEND_DESC& BlendState) override { PipelineStream.BlendState = CD3DX12_BLEND_DESC(BlendState); } - void DepthStencilStateCb(const D3D12_DEPTH_STENCIL_DESC& DepthStencilState) override - { - PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState); - SeenDSS = true; - } - void DepthStencilState1Cb(const D3D12_DEPTH_STENCIL_DESC1& DepthStencilState) override - { - PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState); - SeenDSS = true; - } - void DepthStencilState2Cb(const D3D12_DEPTH_STENCIL_DESC2& DepthStencilState) override - { - PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState); - SeenDSS = true; - } - void DSVFormatCb(DXGI_FORMAT DSVFormat) override {PipelineStream.DSVFormat = DSVFormat;} - void RasterizerStateCb(const D3D12_RASTERIZER_DESC& RasterizerState) override { PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC2(RasterizerState); } - void RasterizerState1Cb(const D3D12_RASTERIZER_DESC1& RasterizerState) override { PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC2(RasterizerState); } - void RasterizerState2Cb(const D3D12_RASTERIZER_DESC2& RasterizerState) override { PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC2(RasterizerState); } - void RTVFormatsCb(const D3D12_RT_FORMAT_ARRAY& RTVFormats) override { PipelineStream.RTVFormats = RTVFormats; } - void SampleDescCb(const DXGI_SAMPLE_DESC& SampleDesc) override { PipelineStream.SampleDesc = SampleDesc; } - void SampleMaskCb(UINT SampleMask) override { PipelineStream.SampleMask = SampleMask; } - void ViewInstancingCb(const D3D12_VIEW_INSTANCING_DESC& ViewInstancingDesc) override { PipelineStream.ViewInstancingDesc = CD3DX12_VIEW_INSTANCING_DESC(ViewInstancingDesc); } - void CachedPSOCb(const D3D12_CACHED_PIPELINE_STATE& CachedPSO) override { PipelineStream.CachedPSO = CachedPSO; } - void FinalizeCb() override - { - if (!SeenDSS && PipelineStream.DSVFormat != DXGI_FORMAT_UNKNOWN) - { - // Re-enable depth for the default state. - static_cast(PipelineStream.DepthStencilState).DepthEnable = true; - } - if (!SeenTopology && SeenMS) - { - PipelineStream.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_UNDEFINED; - } - } - -private: - bool SeenDSS; - bool SeenMS; - bool SeenTopology; -}; -#elif defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 610) -struct CD3DX12_PIPELINE_STATE_STREAM5_PARSE_HELPER : public ID3DX12PipelineParserCallbacks -{ - CD3DX12_PIPELINE_STATE_STREAM5 PipelineStream; - CD3DX12_PIPELINE_STATE_STREAM5_PARSE_HELPER() noexcept - : SeenDSS(false) - { - // Adjust defaults to account for absent members. - PipelineStream.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE; - - // Depth disabled if no DSV format specified. - static_cast(PipelineStream.DepthStencilState).DepthEnable = false; - } - - // ID3DX12PipelineParserCallbacks - void FlagsCb(D3D12_PIPELINE_STATE_FLAGS Flags) override { PipelineStream.Flags = Flags; } - void NodeMaskCb(UINT NodeMask) override { PipelineStream.NodeMask = NodeMask; } - void RootSignatureCb(ID3D12RootSignature* pRootSignature) override { PipelineStream.pRootSignature = pRootSignature; } - void InputLayoutCb(const D3D12_INPUT_LAYOUT_DESC& InputLayout) override { PipelineStream.InputLayout = InputLayout; } - void IBStripCutValueCb(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue) override { PipelineStream.IBStripCutValue = IBStripCutValue; } - void PrimitiveTopologyTypeCb(D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType) override { PipelineStream.PrimitiveTopologyType = PrimitiveTopologyType; } - void VSCb(const D3D12_SHADER_BYTECODE& VS) override { PipelineStream.VS = VS; } - void GSCb(const D3D12_SHADER_BYTECODE& GS) override { PipelineStream.GS = GS; } - void StreamOutputCb(const D3D12_STREAM_OUTPUT_DESC& StreamOutput) override { PipelineStream.StreamOutput = StreamOutput; } - void HSCb(const D3D12_SHADER_BYTECODE& HS) override { PipelineStream.HS = HS; } - void DSCb(const D3D12_SHADER_BYTECODE& DS) override { PipelineStream.DS = DS; } - void PSCb(const D3D12_SHADER_BYTECODE& PS) override { PipelineStream.PS = PS; } - void CSCb(const D3D12_SHADER_BYTECODE& CS) override { PipelineStream.CS = CS; } - void ASCb(const D3D12_SHADER_BYTECODE& AS) override { PipelineStream.AS = AS; } - void MSCb(const D3D12_SHADER_BYTECODE& MS) override { PipelineStream.MS = MS; } - void BlendStateCb(const D3D12_BLEND_DESC& BlendState) override { PipelineStream.BlendState = CD3DX12_BLEND_DESC(BlendState); } - void DepthStencilStateCb(const D3D12_DEPTH_STENCIL_DESC& DepthStencilState) override - { - PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState); - SeenDSS = true; - } - void DepthStencilState1Cb(const D3D12_DEPTH_STENCIL_DESC1& DepthStencilState) override - { - PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState); - SeenDSS = true; - } - void DepthStencilState2Cb(const D3D12_DEPTH_STENCIL_DESC2& DepthStencilState) override - { - PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState); - SeenDSS = true; - } - void DSVFormatCb(DXGI_FORMAT DSVFormat) override - { - PipelineStream.DSVFormat = DSVFormat; - if (!SeenDSS && DSVFormat != DXGI_FORMAT_UNKNOWN) - { - // Re-enable depth for the default state. - static_cast(PipelineStream.DepthStencilState).DepthEnable = true; - } - } - void RasterizerStateCb(const D3D12_RASTERIZER_DESC& RasterizerState) override { PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC2(RasterizerState); } - void RasterizerState1Cb(const D3D12_RASTERIZER_DESC1& RasterizerState) override { PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC2(RasterizerState); } - void RasterizerState2Cb(const D3D12_RASTERIZER_DESC2& RasterizerState) override { PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC2(RasterizerState); } - void RTVFormatsCb(const D3D12_RT_FORMAT_ARRAY& RTVFormats) override { PipelineStream.RTVFormats = RTVFormats; } - void SampleDescCb(const DXGI_SAMPLE_DESC& SampleDesc) override { PipelineStream.SampleDesc = SampleDesc; } - void SampleMaskCb(UINT SampleMask) override { PipelineStream.SampleMask = SampleMask; } - void ViewInstancingCb(const D3D12_VIEW_INSTANCING_DESC& ViewInstancingDesc) override { PipelineStream.ViewInstancingDesc = CD3DX12_VIEW_INSTANCING_DESC(ViewInstancingDesc); } - void CachedPSOCb(const D3D12_CACHED_PIPELINE_STATE& CachedPSO) override { PipelineStream.CachedPSO = CachedPSO; } - -private: - bool SeenDSS; -}; -#endif // D3D12_SDK_VERSION >= 610 - -struct CD3DX12_PIPELINE_STATE_STREAM_PARSE_HELPER : public ID3DX12PipelineParserCallbacks -{ - CD3DX12_PIPELINE_STATE_STREAM1 PipelineStream; - CD3DX12_PIPELINE_STATE_STREAM_PARSE_HELPER() noexcept - : SeenDSS(false) - { - // Adjust defaults to account for absent members. - PipelineStream.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE; - - // Depth disabled if no DSV format specified. - static_cast(PipelineStream.DepthStencilState).DepthEnable = false; - } - - // ID3DX12PipelineParserCallbacks - void FlagsCb(D3D12_PIPELINE_STATE_FLAGS Flags) override {PipelineStream.Flags = Flags;} - void NodeMaskCb(UINT NodeMask) override {PipelineStream.NodeMask = NodeMask;} - void RootSignatureCb(ID3D12RootSignature* pRootSignature) override {PipelineStream.pRootSignature = pRootSignature;} - void InputLayoutCb(const D3D12_INPUT_LAYOUT_DESC& InputLayout) override {PipelineStream.InputLayout = InputLayout;} - void IBStripCutValueCb(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue) override {PipelineStream.IBStripCutValue = IBStripCutValue;} - void PrimitiveTopologyTypeCb(D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType) override {PipelineStream.PrimitiveTopologyType = PrimitiveTopologyType;} - void VSCb(const D3D12_SHADER_BYTECODE& VS) override {PipelineStream.VS = VS;} - void GSCb(const D3D12_SHADER_BYTECODE& GS) override {PipelineStream.GS = GS;} - void StreamOutputCb(const D3D12_STREAM_OUTPUT_DESC& StreamOutput) override {PipelineStream.StreamOutput = StreamOutput;} - void HSCb(const D3D12_SHADER_BYTECODE& HS) override {PipelineStream.HS = HS;} - void DSCb(const D3D12_SHADER_BYTECODE& DS) override {PipelineStream.DS = DS;} - void PSCb(const D3D12_SHADER_BYTECODE& PS) override {PipelineStream.PS = PS;} - void CSCb(const D3D12_SHADER_BYTECODE& CS) override {PipelineStream.CS = CS;} - void BlendStateCb(const D3D12_BLEND_DESC& BlendState) override {PipelineStream.BlendState = CD3DX12_BLEND_DESC(BlendState);} - void DepthStencilStateCb(const D3D12_DEPTH_STENCIL_DESC& DepthStencilState) override - { - PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(DepthStencilState); - SeenDSS = true; - } - void DepthStencilState1Cb(const D3D12_DEPTH_STENCIL_DESC1& DepthStencilState) override - { - PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(DepthStencilState); - SeenDSS = true; - } - void DSVFormatCb(DXGI_FORMAT DSVFormat) override - { - PipelineStream.DSVFormat = DSVFormat; - if (!SeenDSS && DSVFormat != DXGI_FORMAT_UNKNOWN) - { - // Re-enable depth for the default state. - static_cast(PipelineStream.DepthStencilState).DepthEnable = true; - } - } - void RasterizerStateCb(const D3D12_RASTERIZER_DESC& RasterizerState) override {PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC(RasterizerState);} - void RTVFormatsCb(const D3D12_RT_FORMAT_ARRAY& RTVFormats) override {PipelineStream.RTVFormats = RTVFormats;} - void SampleDescCb(const DXGI_SAMPLE_DESC& SampleDesc) override {PipelineStream.SampleDesc = SampleDesc;} - void SampleMaskCb(UINT SampleMask) override {PipelineStream.SampleMask = SampleMask;} - void ViewInstancingCb(const D3D12_VIEW_INSTANCING_DESC& ViewInstancingDesc) override {PipelineStream.ViewInstancingDesc = CD3DX12_VIEW_INSTANCING_DESC(ViewInstancingDesc);} - void CachedPSOCb(const D3D12_CACHED_PIPELINE_STATE& CachedPSO) override {PipelineStream.CachedPSO = CachedPSO;} - -private: - bool SeenDSS; -}; - -inline D3D12_PIPELINE_STATE_SUBOBJECT_TYPE D3DX12GetBaseSubobjectType(D3D12_PIPELINE_STATE_SUBOBJECT_TYPE SubobjectType) noexcept -{ - switch (SubobjectType) - { - case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1: - return D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL; -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 606) - case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL2: - return D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL; -#endif -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 608) - case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER1: - return D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER; -#endif - default: - return SubobjectType; - } -} - -inline HRESULT D3DX12ParsePipelineStream(const D3D12_PIPELINE_STATE_STREAM_DESC& Desc, ID3DX12PipelineParserCallbacks* pCallbacks) -{ - if (pCallbacks == nullptr) - { - return E_INVALIDARG; - } - - if (Desc.SizeInBytes == 0 || Desc.pPipelineStateSubobjectStream == nullptr) - { - pCallbacks->ErrorBadInputParameter(1); // first parameter issue - return E_INVALIDARG; - } - - bool SubobjectSeen[D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MAX_VALID] = {}; - for (SIZE_T CurOffset = 0, SizeOfSubobject = 0; CurOffset < Desc.SizeInBytes; CurOffset += SizeOfSubobject) - { - BYTE* pStream = static_cast(Desc.pPipelineStateSubobjectStream)+CurOffset; - auto SubobjectType = *reinterpret_cast(pStream); - if (SubobjectType < 0 || 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(pStream)); - SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::pRootSignature); - break; - case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VS: - pCallbacks->VSCb(*reinterpret_cast(pStream)); - SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::VS); - break; - case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PS: - pCallbacks->PSCb(*reinterpret_cast(pStream)); - SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::PS); - break; - case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DS: - pCallbacks->DSCb(*reinterpret_cast(pStream)); - SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::DS); - break; - case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_HS: - pCallbacks->HSCb(*reinterpret_cast(pStream)); - SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::HS); - break; - case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_GS: - pCallbacks->GSCb(*reinterpret_cast(pStream)); - SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::GS); - break; - case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CS: - pCallbacks->CSCb(*reinterpret_cast(pStream)); - SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::CS); - break; - case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_AS: - pCallbacks->ASCb(*reinterpret_cast(pStream)); - SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM2::AS); - break; - case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MS: - pCallbacks->MSCb(*reinterpret_cast(pStream)); - SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM2::MS); - break; - case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_STREAM_OUTPUT: - pCallbacks->StreamOutputCb(*reinterpret_cast(pStream)); - SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::StreamOutput); - break; - case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_BLEND: - pCallbacks->BlendStateCb(*reinterpret_cast(pStream)); - SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::BlendState); - break; - case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_MASK: - pCallbacks->SampleMaskCb(*reinterpret_cast(pStream)); - SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::SampleMask); - break; - case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER: - pCallbacks->RasterizerStateCb(*reinterpret_cast(pStream)); - SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::RasterizerState); - break; -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 608) - case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER1: - pCallbacks->RasterizerState1Cb(*reinterpret_cast(pStream)); - SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM4::RasterizerState); - break; -#endif -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 610) - case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER2: - pCallbacks->RasterizerState2Cb(*reinterpret_cast(pStream)); - SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM5::RasterizerState); - break; -#endif - case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL: - pCallbacks->DepthStencilStateCb(*reinterpret_cast(pStream)); - SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL); - break; - case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1: - pCallbacks->DepthStencilState1Cb(*reinterpret_cast(pStream)); - SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::DepthStencilState); - break; -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 606) - case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL2: - pCallbacks->DepthStencilState2Cb(*reinterpret_cast(pStream)); - SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM3::DepthStencilState); - break; -#endif - case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_INPUT_LAYOUT: - pCallbacks->InputLayoutCb(*reinterpret_cast(pStream)); - SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::InputLayout); - break; - case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_IB_STRIP_CUT_VALUE: - pCallbacks->IBStripCutValueCb(*reinterpret_cast(pStream)); - SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::IBStripCutValue); - break; - case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY: - pCallbacks->PrimitiveTopologyTypeCb(*reinterpret_cast(pStream)); - SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::PrimitiveTopologyType); - break; - case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RENDER_TARGET_FORMATS: - pCallbacks->RTVFormatsCb(*reinterpret_cast(pStream)); - SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::RTVFormats); - break; - case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL_FORMAT: - pCallbacks->DSVFormatCb(*reinterpret_cast(pStream)); - SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::DSVFormat); - break; - case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_DESC: - pCallbacks->SampleDescCb(*reinterpret_cast(pStream)); - SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::SampleDesc); - break; - case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_NODE_MASK: - pCallbacks->NodeMaskCb(*reinterpret_cast(pStream)); - SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::NodeMask); - break; - case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CACHED_PSO: - pCallbacks->CachedPSOCb(*reinterpret_cast(pStream)); - SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::CachedPSO); - break; - case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_FLAGS: - pCallbacks->FlagsCb(*reinterpret_cast(pStream)); - SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM::Flags); - break; - case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VIEW_INSTANCING: - pCallbacks->ViewInstancingCb(*reinterpret_cast(pStream)); - SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM1::ViewInstancingDesc); - break; - default: - pCallbacks->ErrorUnknownSubobject(SubobjectType); - return E_INVALIDARG; - } - } -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 613) - pCallbacks->FinalizeCb(); -#endif - - return S_OK; -} - diff --git a/Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_property_format_table.cpp b/Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_property_format_table.cpp deleted file mode 100644 index 0d3f4c3..0000000 --- a/Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_property_format_table.cpp +++ /dev/null @@ -1,7606 +0,0 @@ -//********************************************************* -// -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License (MIT). -// -//********************************************************* - -// Because Microsoft respects nothing -#ifdef __clang__ -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wall" -#pragma clang diagnostic ignored "-Wextra" -#pragma clang diagnostic ignored "-Weverything" -#endif - -#ifndef WIN32_LEAN_AND_MEAN -#define WIN32_LEAN_AND_MEAN -#endif -#ifndef NOMINMAX -#define NOMINMAX 1 -#endif -#ifdef __MINGW32__ -#include -#endif -#ifndef _WIN32 -#include -#endif - -#include -#include "d3dx12_property_format_table.h" -#if defined(__cpp_exceptions) && (!defined(_HAS_EXCEPTIONS) || _HAS_EXCEPTIONS != 0) - -#endif -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 606) -#ifndef ASSUME -#define ASSUME(x) assert(x) -#endif - -#define R D3DFCN_R -#define G D3DFCN_G -#define B D3DFCN_B -#define A D3DFCN_A -#define D D3DFCN_D -#define S D3DFCN_S -#define X D3DFCN_X - -#define _TYPELESS D3DFCI_TYPELESS -#define _FLOAT D3DFCI_FLOAT -#define _SNORM D3DFCI_SNORM -#define _UNORM D3DFCI_UNORM -#define _SINT D3DFCI_SINT -#define _UINT D3DFCI_UINT -#define _UNORM_SRGB D3DFCI_UNORM_SRGB -#define _FIXED_2_8 D3DFCI_BIASED_FIXED_2_8 - -#ifndef INTSAFE_E_ARITHMETIC_OVERFLOW -#define INTSAFE_E_ARITHMETIC_OVERFLOW ((HRESULT)0x80070216L) -#endif - -// -// UINT addition -// -inline HRESULT Safe_UIntAdd(UINT uAugend, UINT uAddend, UINT* puResult) -{ - if ((uAugend + uAddend) >= uAugend) - { - *puResult = (uAugend + uAddend); - return S_OK; - } - *puResult = UINT_MAX; - return E_FAIL; -} - -// -// UINT multiplication -// -inline HRESULT Safe_UIntMult(UINT uMultiplicand, UINT uMultiplier, UINT* puResult) -{ - ULONGLONG ull64Result = (ULONGLONG)uMultiplicand * (ULONGLONG)uMultiplier; - - if (ull64Result <= UINT_MAX) - { - *puResult = (UINT)ull64Result; - return S_OK; - } - *puResult = UINT_MAX; - return E_FAIL; -} - -const LPCSTR D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::s_FormatNames[] = // separate from above structure so it can be compiled out of the runtime. - { - // Name - "UNKNOWN", - "R32G32B32A32_TYPELESS", - "R32G32B32A32_FLOAT", - "R32G32B32A32_UINT", - "R32G32B32A32_SINT", - "R32G32B32_TYPELESS", - "R32G32B32_FLOAT", - "R32G32B32_UINT", - "R32G32B32_SINT", - "R16G16B16A16_TYPELESS", - "R16G16B16A16_FLOAT", - "R16G16B16A16_UNORM", - "R16G16B16A16_UINT", - "R16G16B16A16_SNORM", - "R16G16B16A16_SINT", - "R32G32_TYPELESS", - "R32G32_FLOAT", - "R32G32_UINT", - "R32G32_SINT", - "R32G8X24_TYPELESS", - "D32_FLOAT_S8X24_UINT", - "R32_FLOAT_X8X24_TYPELESS", - "X32_TYPELESS_G8X24_UINT", - "R10G10B10A2_TYPELESS", - "R10G10B10A2_UNORM", - "R10G10B10A2_UINT", - "R11G11B10_FLOAT", - "R8G8B8A8_TYPELESS", - "R8G8B8A8_UNORM", - "R8G8B8A8_UNORM_SRGB", - "R8G8B8A8_UINT", - "R8G8B8A8_SNORM", - "R8G8B8A8_SINT", - "R16G16_TYPELESS", - "R16G16_FLOAT", - "R16G16_UNORM", - "R16G16_UINT", - "R16G16_SNORM", - "R16G16_SINT", - "R32_TYPELESS", - "D32_FLOAT", - "R32_FLOAT", - "R32_UINT", - "R32_SINT", - "R24G8_TYPELESS", - "D24_UNORM_S8_UINT", - "R24_UNORM_X8_TYPELESS", - "X24_TYPELESS_G8_UINT", - "R8G8_TYPELESS", - "R8G8_UNORM", - "R8G8_UINT", - "R8G8_SNORM", - "R8G8_SINT", - "R16_TYPELESS", - "R16_FLOAT", - "D16_UNORM", - "R16_UNORM", - "R16_UINT", - "R16_SNORM", - "R16_SINT", - "R8_TYPELESS", - "R8_UNORM", - "R8_UINT", - "R8_SNORM", - "R8_SINT", - "A8_UNORM", - "R1_UNORM", - "R9G9B9E5_SHAREDEXP", - "R8G8_B8G8_UNORM", - "G8R8_G8B8_UNORM", - "BC1_TYPELESS", - "BC1_UNORM", - "BC1_UNORM_SRGB", - "BC2_TYPELESS", - "BC2_UNORM", - "BC2_UNORM_SRGB", - "BC3_TYPELESS", - "BC3_UNORM", - "BC3_UNORM_SRGB", - "BC4_TYPELESS", - "BC4_UNORM", - "BC4_SNORM", - "BC5_TYPELESS", - "BC5_UNORM", - "BC5_SNORM", - "B5G6R5_UNORM", - "B5G5R5A1_UNORM", - "B8G8R8A8_UNORM", - "B8G8R8X8_UNORM", - "R10G10B10_XR_BIAS_A2_UNORM", - "B8G8R8A8_TYPELESS", - "B8G8R8A8_UNORM_SRGB", - "B8G8R8X8_TYPELESS", - "B8G8R8X8_UNORM_SRGB", - "BC6H_TYPELESS", - "BC6H_UF16", - "BC6H_SF16", - "BC7_TYPELESS", - "BC7_UNORM", - "BC7_UNORM_SRGB", - "AYUV", - "Y410", - "Y416", - "NV12", - "P010", - "P016", - "420_OPAQUE", - "YUY2", - "Y210", - "Y216", - "NV11", - "AI44", - "IA44", - "P8", - "A8P8", - "B4G4R4A4_UNORM", - - nullptr, // 116 - nullptr, // 117 - nullptr, // 118 - nullptr, // 119 - nullptr, // 120 - nullptr, // 121 - nullptr, // 122 - nullptr, // 123 - nullptr, // 124 - nullptr, // 125 - nullptr, // 126 - nullptr, // 127 - nullptr, // 128 - nullptr, // 129 - - "P208", - "V208", - "V408", - - nullptr, // 133 - nullptr, // 134 - nullptr, // 135 - nullptr, // 136 - nullptr, // 137 - nullptr, // 138 - nullptr, // 139 - nullptr, // 140 - nullptr, // 141 - nullptr, // 142 - nullptr, // 143 - nullptr, // 144 - nullptr, // 145 - nullptr, // 146 - nullptr, // 147 - nullptr, // 148 - nullptr, // 149 - nullptr, // 150 - nullptr, // 151 - nullptr, // 152 - nullptr, // 153 - nullptr, // 154 - nullptr, // 155 - nullptr, // 156 - nullptr, // 157 - nullptr, // 158 - nullptr, // 159 - nullptr, // 160 - nullptr, // 161 - nullptr, // 162 - nullptr, // 163 - nullptr, // 164 - nullptr, // 165 - nullptr, // 166 - nullptr, // 167 - nullptr, // 168 - nullptr, // 169 - nullptr, // 170 - nullptr, // 171 - nullptr, // 172 - nullptr, // 173 - nullptr, // 174 - nullptr, // 175 - nullptr, // 176 - nullptr, // 177 - nullptr, // 178 - nullptr, // 179 - nullptr, // 180 - nullptr, // 181 - nullptr, // 182 - nullptr, // 183 - nullptr, // 184 - nullptr, // 185 - nullptr, // 186 - nullptr, // 187 - nullptr, // 188 - - "SAMPLER_FEEDBACK_MIN_MIP_OPAQUE", - "SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUE", - "A4B4G4R4_UNORM", - }; - -// -------------------------------------------------------------------------------------------------------------------------------- -// Format Cast Sets -// -------------------------------------------------------------------------------------------------------------------------------- -constexpr DXGI_FORMAT D3DFCS_UNKNOWN[] = { - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_R32G32B32A32[] = { - DXGI_FORMAT_R32G32B32A32_TYPELESS, DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_R32G32B32A32_UINT, DXGI_FORMAT_R32G32B32A32_SINT, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_R32G32B32[] = { - DXGI_FORMAT_R32G32B32_TYPELESS, DXGI_FORMAT_R32G32B32_FLOAT, DXGI_FORMAT_R32G32B32_UINT, DXGI_FORMAT_R32G32B32_SINT, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_R16G16B16A16[] = { - DXGI_FORMAT_R16G16B16A16_TYPELESS, - DXGI_FORMAT_R16G16B16A16_FLOAT, - DXGI_FORMAT_R16G16B16A16_UNORM, - DXGI_FORMAT_R16G16B16A16_UINT, - DXGI_FORMAT_R16G16B16A16_SNORM, - DXGI_FORMAT_R16G16B16A16_SINT, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_R32G32[] = { - DXGI_FORMAT_R32G32_TYPELESS, DXGI_FORMAT_R32G32_FLOAT, DXGI_FORMAT_R32G32_UINT, DXGI_FORMAT_R32G32_SINT, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_R32G8X24[] = { - DXGI_FORMAT_R32G8X24_TYPELESS, DXGI_FORMAT_D32_FLOAT_S8X24_UINT, DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS, - DXGI_FORMAT_X32_TYPELESS_G8X24_UINT, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_R11G11B10[] = { - DXGI_FORMAT_R11G11B10_FLOAT, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_R8G8B8A8[] = { - DXGI_FORMAT_R8G8B8A8_TYPELESS, - DXGI_FORMAT_R8G8B8A8_UNORM, - DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, - DXGI_FORMAT_R8G8B8A8_UINT, - DXGI_FORMAT_R8G8B8A8_SNORM, - DXGI_FORMAT_R8G8B8A8_SINT, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_R16G16[] = { - DXGI_FORMAT_R16G16_TYPELESS, DXGI_FORMAT_R16G16_FLOAT, DXGI_FORMAT_R16G16_UNORM, - DXGI_FORMAT_R16G16_UINT, DXGI_FORMAT_R16G16_SNORM, DXGI_FORMAT_R16G16_SINT, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_R32[] = { - DXGI_FORMAT_R32_TYPELESS, DXGI_FORMAT_D32_FLOAT, DXGI_FORMAT_R32_FLOAT, DXGI_FORMAT_R32_UINT, DXGI_FORMAT_R32_SINT, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_R24G8[] = { - DXGI_FORMAT_R24G8_TYPELESS, DXGI_FORMAT_D24_UNORM_S8_UINT, DXGI_FORMAT_R24_UNORM_X8_TYPELESS, DXGI_FORMAT_X24_TYPELESS_G8_UINT, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_R8G8[] = { - DXGI_FORMAT_R8G8_TYPELESS, DXGI_FORMAT_R8G8_UNORM, DXGI_FORMAT_R8G8_UINT, - DXGI_FORMAT_R8G8_SNORM, DXGI_FORMAT_R8G8_SINT, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_R16[] = { - DXGI_FORMAT_R16_TYPELESS, DXGI_FORMAT_R16_FLOAT, DXGI_FORMAT_D16_UNORM, DXGI_FORMAT_R16_UNORM, - DXGI_FORMAT_R16_UINT, DXGI_FORMAT_R16_SNORM, DXGI_FORMAT_R16_SINT, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_R8[] = { - DXGI_FORMAT_R8_TYPELESS, DXGI_FORMAT_R8_UNORM, DXGI_FORMAT_R8_UINT, DXGI_FORMAT_R8_SNORM, DXGI_FORMAT_R8_SINT, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_A8[] = { - DXGI_FORMAT_A8_UNORM, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_R1[] = { - DXGI_FORMAT_R1_UNORM, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_R9G9B9E5[] = { - DXGI_FORMAT_R9G9B9E5_SHAREDEXP, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_R8G8_B8G8[] = { - DXGI_FORMAT_R8G8_B8G8_UNORM, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_G8R8_G8B8[] = { - DXGI_FORMAT_G8R8_G8B8_UNORM, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_BC1[] = { - DXGI_FORMAT_BC1_TYPELESS, DXGI_FORMAT_BC1_UNORM, DXGI_FORMAT_BC1_UNORM_SRGB, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_BC2[] = { - DXGI_FORMAT_BC2_TYPELESS, DXGI_FORMAT_BC2_UNORM, DXGI_FORMAT_BC2_UNORM_SRGB, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_BC3[] = { - DXGI_FORMAT_BC3_TYPELESS, DXGI_FORMAT_BC3_UNORM, DXGI_FORMAT_BC3_UNORM_SRGB, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_BC4[] = { - DXGI_FORMAT_BC4_TYPELESS, DXGI_FORMAT_BC4_UNORM, DXGI_FORMAT_BC4_SNORM, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_BC5[] = { - DXGI_FORMAT_BC5_TYPELESS, DXGI_FORMAT_BC5_UNORM, DXGI_FORMAT_BC5_SNORM, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_B5G6R5[] = { - DXGI_FORMAT_B5G6R5_UNORM, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_B5G5R5A1[] = { - DXGI_FORMAT_B5G5R5A1_UNORM, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_B8G8R8A8[] = { - DXGI_FORMAT_B8G8R8A8_TYPELESS, DXGI_FORMAT_B8G8R8A8_UNORM, DXGI_FORMAT_B8G8R8A8_UNORM_SRGB, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_B8G8R8X8[] = { - DXGI_FORMAT_B8G8R8X8_TYPELESS, DXGI_FORMAT_B8G8R8X8_UNORM, DXGI_FORMAT_B8G8R8X8_UNORM_SRGB, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_R10G10B10A2[] = { - DXGI_FORMAT_R10G10B10A2_TYPELESS, DXGI_FORMAT_R10G10B10A2_UNORM, DXGI_FORMAT_R10G10B10A2_UINT, DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_BC6H[] = { - DXGI_FORMAT_BC6H_TYPELESS, DXGI_FORMAT_BC6H_UF16, DXGI_FORMAT_BC6H_SF16, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_BC7[] = { - DXGI_FORMAT_BC7_TYPELESS, DXGI_FORMAT_BC7_UNORM, DXGI_FORMAT_BC7_UNORM_SRGB, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_AYUV[] = { - DXGI_FORMAT_AYUV, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_NV12[] = { - DXGI_FORMAT_NV12, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_YUY2[] = { - DXGI_FORMAT_YUY2, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_P010[] = { - DXGI_FORMAT_P010, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_P016[] = { - DXGI_FORMAT_P016, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_NV11[] = { - DXGI_FORMAT_NV11, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_420_OPAQUE[] = { - DXGI_FORMAT_420_OPAQUE, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_Y410[] = { - DXGI_FORMAT_Y410, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_Y416[] = { - DXGI_FORMAT_Y416, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_Y210[] = { - DXGI_FORMAT_Y210, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_Y216[] = { - DXGI_FORMAT_Y216, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_AI44[] = { - DXGI_FORMAT_AI44, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_IA44[] = { - DXGI_FORMAT_IA44, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_P8[] = { - DXGI_FORMAT_P8, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_A8P8[] = { - DXGI_FORMAT_A8P8, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_B4G4R4A4[] = { - DXGI_FORMAT_B4G4R4A4_UNORM, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_P208[] = { - DXGI_FORMAT_P208, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_V208[] = { - DXGI_FORMAT_V208, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_V408[] = { - DXGI_FORMAT_V408, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr DXGI_FORMAT D3DFCS_A4B4G4R4[] = { - DXGI_FORMAT_A4B4G4R4_UNORM, - DXGI_FORMAT_UNKNOWN // not part of cast set, just the "null terminator" -}; - -constexpr D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::FORMAT_DETAIL D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::s_FormatDetail[] = { - // DXGI_FORMAT ParentFormat pDefaultFormatCastSet BitsPerComponent[4], - // BitsPerUnit, SRGB, WidthAlignment, HeightAlignment, DepthAlignment, Layout, TypeLevel, ComponentName[4],ComponentInterpretation[4], - // bDX9VertexOrIndexFormat bDX9TextureFormat, bFloatNormFormat, bPlanar, bYUV bDependantFormatCastSet bInternal - { - DXGI_FORMAT_UNKNOWN, - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R32G32B32A32_TYPELESS, - DXGI_FORMAT_R32G32B32A32_TYPELESS, - D3DFCS_R32G32B32A32, - { 32, 32, 32, 32 }, - 128, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_PARTIAL_TYPE, - R, - G, - B, - A, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R32G32B32A32_FLOAT, - DXGI_FORMAT_R32G32B32A32_TYPELESS, - D3DFCS_R32G32B32A32, - { 32, 32, 32, 32 }, - 128, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - G, - B, - A, - _FLOAT, - _FLOAT, - _FLOAT, - _FLOAT, - TRUE, - FALSE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R32G32B32A32_UINT, - DXGI_FORMAT_R32G32B32A32_TYPELESS, - D3DFCS_R32G32B32A32, - { 32, 32, 32, 32 }, - 128, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - G, - B, - A, - _UINT, - _UINT, - _UINT, - _UINT, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R32G32B32A32_SINT, - DXGI_FORMAT_R32G32B32A32_TYPELESS, - D3DFCS_R32G32B32A32, - { 32, 32, 32, 32 }, - 128, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - G, - B, - A, - _SINT, - _SINT, - _SINT, - _SINT, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R32G32B32_TYPELESS, - DXGI_FORMAT_R32G32B32_TYPELESS, - D3DFCS_R32G32B32, - { 32, 32, 32, 0 }, - 96, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_PARTIAL_TYPE, - R, - G, - B, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R32G32B32_FLOAT, - DXGI_FORMAT_R32G32B32_TYPELESS, - D3DFCS_R32G32B32, - { 32, 32, 32, 0 }, - 96, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - G, - B, - X, - _FLOAT, - _FLOAT, - _FLOAT, - _TYPELESS, - TRUE, - FALSE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R32G32B32_UINT, - DXGI_FORMAT_R32G32B32_TYPELESS, - D3DFCS_R32G32B32, - { 32, 32, 32, 0 }, - 96, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - G, - B, - X, - _UINT, - _UINT, - _UINT, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R32G32B32_SINT, - DXGI_FORMAT_R32G32B32_TYPELESS, - D3DFCS_R32G32B32, - { 32, 32, 32, 0 }, - 96, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - G, - B, - X, - _SINT, - _SINT, - _SINT, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R16G16B16A16_TYPELESS, - DXGI_FORMAT_R16G16B16A16_TYPELESS, - D3DFCS_R16G16B16A16, - { 16, 16, 16, 16 }, - 64, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_PARTIAL_TYPE, - R, - G, - B, - A, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R16G16B16A16_FLOAT, - DXGI_FORMAT_R16G16B16A16_TYPELESS, - D3DFCS_R16G16B16A16, - { 16, 16, 16, 16 }, - 64, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - G, - B, - A, - _FLOAT, - _FLOAT, - _FLOAT, - _FLOAT, - TRUE, - FALSE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R16G16B16A16_UNORM, - DXGI_FORMAT_R16G16B16A16_TYPELESS, - D3DFCS_R16G16B16A16, - { 16, 16, 16, 16 }, - 64, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - G, - B, - A, - _UNORM, - _UNORM, - _UNORM, - _UNORM, - TRUE, - TRUE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R16G16B16A16_UINT, - DXGI_FORMAT_R16G16B16A16_TYPELESS, - D3DFCS_R16G16B16A16, - { 16, 16, 16, 16 }, - 64, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - G, - B, - A, - _UINT, - _UINT, - _UINT, - _UINT, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R16G16B16A16_SNORM, - DXGI_FORMAT_R16G16B16A16_TYPELESS, - D3DFCS_R16G16B16A16, - { 16, 16, 16, 16 }, - 64, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - G, - B, - A, - _SNORM, - _SNORM, - _SNORM, - _SNORM, - TRUE, - FALSE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R16G16B16A16_SINT, - DXGI_FORMAT_R16G16B16A16_TYPELESS, - D3DFCS_R16G16B16A16, - { 16, 16, 16, 16 }, - 64, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - G, - B, - A, - _SINT, - _SINT, - _SINT, - _SINT, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R32G32_TYPELESS, - DXGI_FORMAT_R32G32_TYPELESS, - D3DFCS_R32G32, - { 32, 32, 0, 0 }, - 64, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_PARTIAL_TYPE, - R, - G, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R32G32_FLOAT, - DXGI_FORMAT_R32G32_TYPELESS, - D3DFCS_R32G32, - { 32, 32, 0, 0 }, - 64, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - G, - X, - X, - _FLOAT, - _FLOAT, - _TYPELESS, - _TYPELESS, - TRUE, - FALSE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R32G32_UINT, - DXGI_FORMAT_R32G32_TYPELESS, - D3DFCS_R32G32, - { 32, 32, 0, 0 }, - 64, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - G, - X, - X, - _UINT, - _UINT, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R32G32_SINT, - DXGI_FORMAT_R32G32_TYPELESS, - D3DFCS_R32G32, - { 32, 32, 0, 0 }, - 64, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - G, - X, - X, - _SINT, - _SINT, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R32G8X24_TYPELESS, - DXGI_FORMAT_R32G8X24_TYPELESS, - D3DFCS_R32G8X24, - { 32, 8, 24, 0 }, - 64, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_PARTIAL_TYPE, - R, - G, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - TRUE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_D32_FLOAT_S8X24_UINT, - DXGI_FORMAT_R32G8X24_TYPELESS, - D3DFCS_R32G8X24, - { 32, 8, 24, 0 }, - 64, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - D, - S, - X, - X, - _FLOAT, - _UINT, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - TRUE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS, - DXGI_FORMAT_R32G8X24_TYPELESS, - D3DFCS_R32G8X24, - { 32, 8, 24, 0 }, - 64, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - X, - X, - X, - _FLOAT, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - TRUE, - TRUE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_X32_TYPELESS_G8X24_UINT, - DXGI_FORMAT_R32G8X24_TYPELESS, - D3DFCS_R32G8X24, - { 32, 8, 24, 0 }, - 64, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - X, - G, - X, - X, - _TYPELESS, - _UINT, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - TRUE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R10G10B10A2_TYPELESS, - DXGI_FORMAT_R10G10B10A2_TYPELESS, - D3DFCS_R10G10B10A2, - { 10, 10, 10, 2 }, - 32, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_PARTIAL_TYPE, - R, - G, - B, - A, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - FALSE, - }, - { - DXGI_FORMAT_R10G10B10A2_UNORM, - DXGI_FORMAT_R10G10B10A2_TYPELESS, - D3DFCS_R10G10B10A2, - { 10, 10, 10, 2 }, - 32, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - G, - B, - A, - _UNORM, - _UNORM, - _UNORM, - _UNORM, - FALSE, - TRUE, - TRUE, - FALSE, - FALSE, - TRUE, - FALSE, - }, - { - DXGI_FORMAT_R10G10B10A2_UINT, - DXGI_FORMAT_R10G10B10A2_TYPELESS, - D3DFCS_R10G10B10A2, - { 10, 10, 10, 2 }, - 32, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - G, - B, - A, - _UINT, - _UINT, - _UINT, - _UINT, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - FALSE, - }, - { - DXGI_FORMAT_R11G11B10_FLOAT, - DXGI_FORMAT_R11G11B10_FLOAT, - D3DFCS_R11G11B10, - { 11, 11, 10, 0 }, - 32, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - G, - B, - X, - _FLOAT, - _FLOAT, - _FLOAT, - _TYPELESS, - FALSE, - FALSE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R8G8B8A8_TYPELESS, - DXGI_FORMAT_R8G8B8A8_TYPELESS, - D3DFCS_R8G8B8A8, - { 8, 8, 8, 8 }, - 32, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_PARTIAL_TYPE, - R, - G, - B, - A, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R8G8B8A8_UNORM, - DXGI_FORMAT_R8G8B8A8_TYPELESS, - D3DFCS_R8G8B8A8, - { 8, 8, 8, 8 }, - 32, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - G, - B, - A, - _UNORM, - _UNORM, - _UNORM, - _UNORM, - TRUE, - TRUE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, - DXGI_FORMAT_R8G8B8A8_TYPELESS, - D3DFCS_R8G8B8A8, - { 8, 8, 8, 8 }, - 32, - TRUE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - G, - B, - A, - _UNORM_SRGB, - _UNORM_SRGB, - _UNORM_SRGB, - _UNORM_SRGB, - FALSE, - TRUE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R8G8B8A8_UINT, - DXGI_FORMAT_R8G8B8A8_TYPELESS, - D3DFCS_R8G8B8A8, - { 8, 8, 8, 8 }, - 32, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - G, - B, - A, - _UINT, - _UINT, - _UINT, - _UINT, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R8G8B8A8_SNORM, - DXGI_FORMAT_R8G8B8A8_TYPELESS, - D3DFCS_R8G8B8A8, - { 8, 8, 8, 8 }, - 32, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - G, - B, - A, - _SNORM, - _SNORM, - _SNORM, - _SNORM, - FALSE, - FALSE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R8G8B8A8_SINT, - DXGI_FORMAT_R8G8B8A8_TYPELESS, - D3DFCS_R8G8B8A8, - { 8, 8, 8, 8 }, - 32, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - G, - B, - A, - _SINT, - _SINT, - _SINT, - _SINT, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R16G16_TYPELESS, - DXGI_FORMAT_R16G16_TYPELESS, - D3DFCS_R16G16, - { 16, 16, 0, 0 }, - 32, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_PARTIAL_TYPE, - R, - G, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R16G16_FLOAT, - DXGI_FORMAT_R16G16_TYPELESS, - D3DFCS_R16G16, - { 16, 16, 0, 0 }, - 32, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - G, - X, - X, - _FLOAT, - _FLOAT, - _TYPELESS, - _TYPELESS, - TRUE, - TRUE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R16G16_UNORM, - DXGI_FORMAT_R16G16_TYPELESS, - D3DFCS_R16G16, - { 16, 16, 0, 0 }, - 32, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - G, - X, - X, - _UNORM, - _UNORM, - _TYPELESS, - _TYPELESS, - TRUE, - TRUE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R16G16_UINT, - DXGI_FORMAT_R16G16_TYPELESS, - D3DFCS_R16G16, - { 16, 16, 0, 0 }, - 32, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - G, - X, - X, - _UINT, - _UINT, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R16G16_SNORM, - DXGI_FORMAT_R16G16_TYPELESS, - D3DFCS_R16G16, - { 16, 16, 0, 0 }, - 32, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - G, - X, - X, - _SNORM, - _SNORM, - _TYPELESS, - _TYPELESS, - TRUE, - TRUE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R16G16_SINT, - DXGI_FORMAT_R16G16_TYPELESS, - D3DFCS_R16G16, - { 16, 16, 0, 0 }, - 32, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - G, - X, - X, - _SINT, - _SINT, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R32_TYPELESS, - DXGI_FORMAT_R32_TYPELESS, - D3DFCS_R32, - { 32, 0, 0, 0 }, - 32, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_PARTIAL_TYPE, - R, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_D32_FLOAT, - DXGI_FORMAT_R32_TYPELESS, - D3DFCS_R32, - { 32, 0, 0, 0 }, - 32, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - D, - X, - X, - X, - _FLOAT, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - TRUE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R32_FLOAT, - DXGI_FORMAT_R32_TYPELESS, - D3DFCS_R32, - { 32, 0, 0, 0 }, - 32, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - X, - X, - X, - _FLOAT, - _TYPELESS, - _TYPELESS, - _TYPELESS, - TRUE, - TRUE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R32_UINT, - DXGI_FORMAT_R32_TYPELESS, - D3DFCS_R32, - { 32, 0, 0, 0 }, - 32, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - X, - X, - X, - _UINT, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R32_SINT, - DXGI_FORMAT_R32_TYPELESS, - D3DFCS_R32, - { 32, 0, 0, 0 }, - 32, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - X, - X, - X, - _SINT, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R24G8_TYPELESS, - DXGI_FORMAT_R24G8_TYPELESS, - D3DFCS_R24G8, - { 24, 8, 0, 0 }, - 32, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_PARTIAL_TYPE, - R, - G, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - TRUE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_D24_UNORM_S8_UINT, - DXGI_FORMAT_R24G8_TYPELESS, - D3DFCS_R24G8, - { 24, 8, 0, 0 }, - 32, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - D, - S, - X, - X, - _UNORM, - _UINT, - _TYPELESS, - _TYPELESS, - FALSE, - TRUE, - FALSE, - TRUE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R24_UNORM_X8_TYPELESS, - DXGI_FORMAT_R24G8_TYPELESS, - D3DFCS_R24G8, - { 24, 8, 0, 0 }, - 32, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - X, - X, - X, - _UNORM, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - TRUE, - TRUE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_X24_TYPELESS_G8_UINT, - DXGI_FORMAT_R24G8_TYPELESS, - D3DFCS_R24G8, - { 24, 8, 0, 0 }, - 32, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - X, - G, - X, - X, - _TYPELESS, - _UINT, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - TRUE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R8G8_TYPELESS, - DXGI_FORMAT_R8G8_TYPELESS, - D3DFCS_R8G8, - { 8, 8, 0, 0 }, - 16, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_PARTIAL_TYPE, - R, - G, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R8G8_UNORM, - DXGI_FORMAT_R8G8_TYPELESS, - D3DFCS_R8G8, - { 8, 8, 0, 0 }, - 16, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - G, - X, - X, - _UNORM, - _UNORM, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R8G8_UINT, - DXGI_FORMAT_R8G8_TYPELESS, - D3DFCS_R8G8, - { 8, 8, 0, 0 }, - 16, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - G, - X, - X, - _UINT, - _UINT, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R8G8_SNORM, - DXGI_FORMAT_R8G8_TYPELESS, - D3DFCS_R8G8, - { 8, 8, 0, 0 }, - 16, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - G, - X, - X, - _SNORM, - _SNORM, - _TYPELESS, - _TYPELESS, - FALSE, - TRUE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R8G8_SINT, - DXGI_FORMAT_R8G8_TYPELESS, - D3DFCS_R8G8, - { 8, 8, 0, 0 }, - 16, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - G, - X, - X, - _SINT, - _SINT, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R16_TYPELESS, - DXGI_FORMAT_R16_TYPELESS, - D3DFCS_R16, - { 16, 0, 0, 0 }, - 16, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_PARTIAL_TYPE, - R, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R16_FLOAT, - DXGI_FORMAT_R16_TYPELESS, - D3DFCS_R16, - { 16, 0, 0, 0 }, - 16, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - X, - X, - X, - _FLOAT, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_D16_UNORM, - DXGI_FORMAT_R16_TYPELESS, - D3DFCS_R16, - { 16, 0, 0, 0 }, - 16, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - D, - X, - X, - X, - _UNORM, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - TRUE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R16_UNORM, - DXGI_FORMAT_R16_TYPELESS, - D3DFCS_R16, - { 16, 0, 0, 0 }, - 16, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - X, - X, - X, - _UNORM, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R16_UINT, - DXGI_FORMAT_R16_TYPELESS, - D3DFCS_R16, - { 16, 0, 0, 0 }, - 16, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - X, - X, - X, - _UINT, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R16_SNORM, - DXGI_FORMAT_R16_TYPELESS, - D3DFCS_R16, - { 16, 0, 0, 0 }, - 16, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - X, - X, - X, - _SNORM, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R16_SINT, - DXGI_FORMAT_R16_TYPELESS, - D3DFCS_R16, - { 16, 0, 0, 0 }, - 16, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - X, - X, - X, - _SINT, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R8_TYPELESS, - DXGI_FORMAT_R8_TYPELESS, - D3DFCS_R8, - { 8, 0, 0, 0 }, - 8, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_PARTIAL_TYPE, - R, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R8_UNORM, - DXGI_FORMAT_R8_TYPELESS, - D3DFCS_R8, - { 8, 0, 0, 0 }, - 8, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - X, - X, - X, - _UNORM, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R8_UINT, - DXGI_FORMAT_R8_TYPELESS, - D3DFCS_R8, - { 8, 0, 0, 0 }, - 8, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - X, - X, - X, - _UINT, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R8_SNORM, - DXGI_FORMAT_R8_TYPELESS, - D3DFCS_R8, - { 8, 0, 0, 0 }, - 8, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - X, - X, - X, - _SNORM, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R8_SINT, - DXGI_FORMAT_R8_TYPELESS, - D3DFCS_R8, - { 8, 0, 0, 0 }, - 8, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - X, - X, - X, - _SINT, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_A8_UNORM, - DXGI_FORMAT_A8_UNORM, - D3DFCS_A8, - { 0, 0, 0, 8 }, - 8, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - X, - X, - X, - A, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _UNORM, - FALSE, - TRUE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R1_UNORM, - DXGI_FORMAT_R1_UNORM, - D3DFCS_R1, - { 1, 0, 0, 0 }, - 1, - FALSE, - 8, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - X, - X, - X, - _UNORM, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R9G9B9E5_SHAREDEXP, - DXGI_FORMAT_R9G9B9E5_SHAREDEXP, - D3DFCS_R9G9B9E5, - { 0, 0, 0, 0 }, - 32, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_FULL_TYPE, - R, - G, - B, - X, - _FLOAT, - _FLOAT, - _FLOAT, - _FLOAT, - FALSE, - FALSE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R8G8_B8G8_UNORM, - DXGI_FORMAT_R8G8_B8G8_UNORM, - D3DFCS_R8G8_B8G8, - { 0, 0, 0, 0 }, - 16, - FALSE, - 2, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_FULL_TYPE, - R, - G, - B, - X, - _UNORM, - _UNORM, - _UNORM, - _TYPELESS, - FALSE, - TRUE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_G8R8_G8B8_UNORM, - DXGI_FORMAT_G8R8_G8B8_UNORM, - D3DFCS_G8R8_G8B8, - { 0, 0, 0, 0 }, - 16, - FALSE, - 2, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_FULL_TYPE, - R, - G, - B, - X, - _UNORM, - _UNORM, - _UNORM, - _TYPELESS, - FALSE, - TRUE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_BC1_TYPELESS, - DXGI_FORMAT_BC1_TYPELESS, - D3DFCS_BC1, - { 0, 0, 0, 0 }, - 64, - FALSE, - 4, - 4, - 1, - D3DFL_CUSTOM, - D3DFTL_PARTIAL_TYPE, - R, - G, - B, - A, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_BC1_UNORM, - DXGI_FORMAT_BC1_TYPELESS, - D3DFCS_BC1, - { 0, 0, 0, 0 }, - 64, - FALSE, - 4, - 4, - 1, - D3DFL_CUSTOM, - D3DFTL_FULL_TYPE, - R, - G, - B, - A, - _UNORM, - _UNORM, - _UNORM, - _UNORM, - FALSE, - TRUE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_BC1_UNORM_SRGB, - DXGI_FORMAT_BC1_TYPELESS, - D3DFCS_BC1, - { 0, 0, 0, 0 }, - 64, - TRUE, - 4, - 4, - 1, - D3DFL_CUSTOM, - D3DFTL_FULL_TYPE, - R, - G, - B, - A, - _UNORM_SRGB, - _UNORM_SRGB, - _UNORM_SRGB, - _UNORM, - FALSE, - TRUE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_BC2_TYPELESS, - DXGI_FORMAT_BC2_TYPELESS, - D3DFCS_BC2, - { 0, 0, 0, 0 }, - 128, - FALSE, - 4, - 4, - 1, - D3DFL_CUSTOM, - D3DFTL_PARTIAL_TYPE, - R, - G, - B, - A, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_BC2_UNORM, - DXGI_FORMAT_BC2_TYPELESS, - D3DFCS_BC2, - { 0, 0, 0, 0 }, - 128, - FALSE, - 4, - 4, - 1, - D3DFL_CUSTOM, - D3DFTL_FULL_TYPE, - R, - G, - B, - A, - _UNORM, - _UNORM, - _UNORM, - _UNORM, - FALSE, - TRUE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_BC2_UNORM_SRGB, - DXGI_FORMAT_BC2_TYPELESS, - D3DFCS_BC2, - { 0, 0, 0, 0 }, - 128, - TRUE, - 4, - 4, - 1, - D3DFL_CUSTOM, - D3DFTL_FULL_TYPE, - R, - G, - B, - A, - _UNORM_SRGB, - _UNORM_SRGB, - _UNORM_SRGB, - _UNORM, - FALSE, - TRUE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_BC3_TYPELESS, - DXGI_FORMAT_BC3_TYPELESS, - D3DFCS_BC3, - { 0, 0, 0, 0 }, - 128, - FALSE, - 4, - 4, - 1, - D3DFL_CUSTOM, - D3DFTL_PARTIAL_TYPE, - R, - G, - B, - A, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_BC3_UNORM, - DXGI_FORMAT_BC3_TYPELESS, - D3DFCS_BC3, - { 0, 0, 0, 0 }, - 128, - FALSE, - 4, - 4, - 1, - D3DFL_CUSTOM, - D3DFTL_FULL_TYPE, - R, - G, - B, - A, - _UNORM, - _UNORM, - _UNORM, - _UNORM, - FALSE, - TRUE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_BC3_UNORM_SRGB, - DXGI_FORMAT_BC3_TYPELESS, - D3DFCS_BC3, - { 0, 0, 0, 0 }, - 128, - TRUE, - 4, - 4, - 1, - D3DFL_CUSTOM, - D3DFTL_FULL_TYPE, - R, - G, - B, - A, - _UNORM_SRGB, - _UNORM_SRGB, - _UNORM_SRGB, - _UNORM, - FALSE, - TRUE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_BC4_TYPELESS, - DXGI_FORMAT_BC4_TYPELESS, - D3DFCS_BC4, - { 0, 0, 0, 0 }, - 64, - FALSE, - 4, - 4, - 1, - D3DFL_CUSTOM, - D3DFTL_PARTIAL_TYPE, - R, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_BC4_UNORM, - DXGI_FORMAT_BC4_TYPELESS, - D3DFCS_BC4, - { 0, 0, 0, 0 }, - 64, - FALSE, - 4, - 4, - 1, - D3DFL_CUSTOM, - D3DFTL_FULL_TYPE, - R, - X, - X, - X, - _UNORM, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_BC4_SNORM, - DXGI_FORMAT_BC4_TYPELESS, - D3DFCS_BC4, - { 0, 0, 0, 0 }, - 64, - FALSE, - 4, - 4, - 1, - D3DFL_CUSTOM, - D3DFTL_FULL_TYPE, - R, - X, - X, - X, - _SNORM, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_BC5_TYPELESS, - DXGI_FORMAT_BC5_TYPELESS, - D3DFCS_BC5, - { 0, 0, 0, 0 }, - 128, - FALSE, - 4, - 4, - 1, - D3DFL_CUSTOM, - D3DFTL_PARTIAL_TYPE, - R, - G, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_BC5_UNORM, - DXGI_FORMAT_BC5_TYPELESS, - D3DFCS_BC5, - { 0, 0, 0, 0 }, - 128, - FALSE, - 4, - 4, - 1, - D3DFL_CUSTOM, - D3DFTL_FULL_TYPE, - R, - G, - X, - X, - _UNORM, - _UNORM, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_BC5_SNORM, - DXGI_FORMAT_BC5_TYPELESS, - D3DFCS_BC5, - { 0, 0, 0, 0 }, - 128, - FALSE, - 4, - 4, - 1, - D3DFL_CUSTOM, - D3DFTL_FULL_TYPE, - R, - G, - X, - X, - _SNORM, - _SNORM, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_B5G6R5_UNORM, - DXGI_FORMAT_B5G6R5_UNORM, - D3DFCS_B5G6R5, - { 5, 6, 5, 0 }, - 16, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - B, - G, - R, - X, - _UNORM, - _UNORM, - _UNORM, - _TYPELESS, - FALSE, - TRUE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_B5G5R5A1_UNORM, - DXGI_FORMAT_B5G5R5A1_UNORM, - D3DFCS_B5G5R5A1, - { 5, 5, 5, 1 }, - 16, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - B, - G, - R, - A, - _UNORM, - _UNORM, - _UNORM, - _UNORM, - FALSE, - TRUE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_B8G8R8A8_UNORM, - DXGI_FORMAT_B8G8R8A8_TYPELESS, - D3DFCS_B8G8R8A8, - { 8, 8, 8, 8 }, - 32, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - B, - G, - R, - A, - _UNORM, - _UNORM, - _UNORM, - _UNORM, - FALSE, - TRUE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_B8G8R8X8_UNORM, - DXGI_FORMAT_B8G8R8X8_TYPELESS, - D3DFCS_B8G8R8X8, - { 8, 8, 8, 8 }, - 32, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - B, - G, - R, - X, - _UNORM, - _UNORM, - _UNORM, - _TYPELESS, - FALSE, - TRUE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM, - DXGI_FORMAT_R10G10B10A2_TYPELESS, - D3DFCS_R10G10B10A2, - { 10, 10, 10, 2 }, - 32, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - R, - G, - B, - A, - _FIXED_2_8, - _FIXED_2_8, - _FIXED_2_8, - _UNORM, - FALSE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_B8G8R8A8_TYPELESS, - DXGI_FORMAT_B8G8R8A8_TYPELESS, - D3DFCS_B8G8R8A8, - { 8, 8, 8, 8 }, - 32, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_PARTIAL_TYPE, - B, - G, - R, - A, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_B8G8R8A8_UNORM_SRGB, - DXGI_FORMAT_B8G8R8A8_TYPELESS, - D3DFCS_B8G8R8A8, - { 8, 8, 8, 8 }, - 32, - TRUE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - B, - G, - R, - A, - _UNORM_SRGB, - _UNORM_SRGB, - _UNORM_SRGB, - _UNORM_SRGB, - FALSE, - TRUE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_B8G8R8X8_TYPELESS, - DXGI_FORMAT_B8G8R8X8_TYPELESS, - D3DFCS_B8G8R8X8, - { 8, 8, 8, 8 }, - 32, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_PARTIAL_TYPE, - B, - G, - R, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_B8G8R8X8_UNORM_SRGB, - DXGI_FORMAT_B8G8R8X8_TYPELESS, - D3DFCS_B8G8R8X8, - { 8, 8, 8, 8 }, - 32, - TRUE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - B, - G, - R, - X, - _UNORM_SRGB, - _UNORM_SRGB, - _UNORM_SRGB, - _TYPELESS, - FALSE, - TRUE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_BC6H_TYPELESS, - DXGI_FORMAT_BC6H_TYPELESS, - D3DFCS_BC6H, - { 0, 0, 0, 0 }, - 128, - FALSE, - 4, - 4, - 1, - D3DFL_CUSTOM, - D3DFTL_PARTIAL_TYPE, - R, - G, - B, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_BC6H_UF16, - DXGI_FORMAT_BC6H_TYPELESS, - D3DFCS_BC6H, - { 0, 0, 0, 0 }, - 128, - FALSE, - 4, - 4, - 1, - D3DFL_CUSTOM, - D3DFTL_FULL_TYPE, - R, - G, - B, - X, - _FLOAT, - _FLOAT, - _FLOAT, - _TYPELESS, - FALSE, - FALSE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_BC6H_SF16, - DXGI_FORMAT_BC6H_TYPELESS, - D3DFCS_BC6H, - { 0, 0, 0, 0 }, - 128, - FALSE, - 4, - 4, - 1, - D3DFL_CUSTOM, - D3DFTL_FULL_TYPE, - R, - G, - B, - X, - _FLOAT, - _FLOAT, - _FLOAT, - _TYPELESS, - FALSE, - FALSE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_BC7_TYPELESS, - DXGI_FORMAT_BC7_TYPELESS, - D3DFCS_BC7, - { 0, 0, 0, 0 }, - 128, - FALSE, - 4, - 4, - 1, - D3DFL_CUSTOM, - D3DFTL_PARTIAL_TYPE, - R, - G, - B, - A, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_BC7_UNORM, - DXGI_FORMAT_BC7_TYPELESS, - D3DFCS_BC7, - { 0, 0, 0, 0 }, - 128, - FALSE, - 4, - 4, - 1, - D3DFL_CUSTOM, - D3DFTL_FULL_TYPE, - R, - G, - B, - A, - _UNORM, - _UNORM, - _UNORM, - _UNORM, - FALSE, - FALSE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_BC7_UNORM_SRGB, - DXGI_FORMAT_BC7_TYPELESS, - D3DFCS_BC7, - { 0, 0, 0, 0 }, - 128, - TRUE, - 4, - 4, - 1, - D3DFL_CUSTOM, - D3DFTL_FULL_TYPE, - R, - G, - B, - A, - _UNORM_SRGB, - _UNORM_SRGB, - _UNORM_SRGB, - _UNORM, - FALSE, - FALSE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - // YUV 4:4:4 formats - { - DXGI_FORMAT_AYUV, - DXGI_FORMAT_AYUV, - D3DFCS_AYUV, - { 8, 8, 8, 8 }, - 32, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - B, - G, - R, - A, - _UNORM, - _UNORM, - _UNORM, - _UNORM, - FALSE, - TRUE, - FALSE, - FALSE, - TRUE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_Y410, - DXGI_FORMAT_Y410, - D3DFCS_Y410, - { 10, 10, 10, 2 }, - 32, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - B, - G, - R, - A, - _UNORM, - _UNORM, - _UNORM, - _UNORM, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_Y416, - DXGI_FORMAT_Y416, - D3DFCS_Y416, - { 16, 16, 16, 16 }, - 64, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - B, - G, - R, - A, - _UNORM, - _UNORM, - _UNORM, - _UNORM, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - FALSE, - FALSE, - }, - // YUV 4:2:0 formats - { - DXGI_FORMAT_NV12, - DXGI_FORMAT_NV12, - D3DFCS_NV12, - { 0, 0, 0, 0 }, - 8, - FALSE, - 2, - 2, - 1, - D3DFL_CUSTOM, - D3DFTL_FULL_TYPE, - R, - X, - X, - X, - _UNORM, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - TRUE, - FALSE, - TRUE, - TRUE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_P010, - DXGI_FORMAT_P010, - D3DFCS_P010, - { 0, 0, 0, 0 }, - 16, - FALSE, - 2, - 2, - 1, - D3DFL_CUSTOM, - D3DFTL_FULL_TYPE, - R, - X, - X, - X, - _UNORM, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - TRUE, - TRUE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_P016, - DXGI_FORMAT_P016, - D3DFCS_P016, - { 0, 0, 0, 0 }, - 16, - FALSE, - 2, - 2, - 1, - D3DFL_CUSTOM, - D3DFTL_FULL_TYPE, - R, - X, - X, - X, - _UNORM, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - TRUE, - TRUE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_420_OPAQUE, - DXGI_FORMAT_420_OPAQUE, - D3DFCS_420_OPAQUE, - { 0, 0, 0, 0 }, - 8, - FALSE, - 2, - 2, - 1, - D3DFL_CUSTOM, - D3DFTL_FULL_TYPE, - R, - X, - X, - X, - _UNORM, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - TRUE, - FALSE, - TRUE, - TRUE, - FALSE, - FALSE, - }, - // YUV 4:2:2 formats - { - DXGI_FORMAT_YUY2, - DXGI_FORMAT_YUY2, - D3DFCS_YUY2, - { 0, 0, 0, 0 }, - 16, - FALSE, - 2, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_FULL_TYPE, - R, - G, - B, - X, - _UNORM, - _UNORM, - _UNORM, - _TYPELESS, - FALSE, - TRUE, - FALSE, - FALSE, - TRUE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_Y210, - DXGI_FORMAT_Y210, - D3DFCS_Y210, - { 0, 0, 0, 0 }, - 32, - FALSE, - 2, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_FULL_TYPE, - R, - G, - B, - X, - _UNORM, - _UNORM, - _UNORM, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_Y216, - DXGI_FORMAT_Y216, - D3DFCS_Y216, - { 0, 0, 0, 0 }, - 32, - FALSE, - 2, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_FULL_TYPE, - R, - G, - B, - X, - _UNORM, - _UNORM, - _UNORM, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - FALSE, - FALSE, - }, - // YUV 4:1:1 formats - { - DXGI_FORMAT_NV11, - DXGI_FORMAT_NV11, - D3DFCS_NV11, - { 0, 0, 0, 0 }, - 8, - FALSE, - 4, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_FULL_TYPE, - R, - X, - X, - X, - _UNORM, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - TRUE, - FALSE, - TRUE, - TRUE, - FALSE, - FALSE, - }, - // Legacy substream formats - { - DXGI_FORMAT_AI44, - DXGI_FORMAT_AI44, - D3DFCS_AI44, - { 0, 0, 0, 0 }, - 8, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_FULL_TYPE, - R, - X, - X, - X, - _UNORM, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - TRUE, - FALSE, - FALSE, - TRUE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_IA44, - DXGI_FORMAT_IA44, - D3DFCS_IA44, - { 0, 0, 0, 0 }, - 8, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_FULL_TYPE, - R, - X, - X, - X, - _UNORM, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - TRUE, - FALSE, - FALSE, - TRUE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_P8, - DXGI_FORMAT_P8, - D3DFCS_P8, - { 0, 0, 0, 0 }, - 8, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_FULL_TYPE, - R, - X, - X, - X, - _UNORM, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - TRUE, - FALSE, - FALSE, - TRUE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_A8P8, - DXGI_FORMAT_A8P8, - D3DFCS_A8P8, - { 0, 0, 0, 0 }, - 16, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_FULL_TYPE, - R, - X, - X, - X, - _UNORM, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - TRUE, - FALSE, - FALSE, - TRUE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_B4G4R4A4_UNORM, - DXGI_FORMAT_B4G4R4A4_UNORM, - D3DFCS_B4G4R4A4, - { 4, 4, 4, 4 }, - 16, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - B, - G, - R, - A, - _UNORM, - _UNORM, - _UNORM, - _UNORM, - FALSE, - TRUE, - TRUE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT(116), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(117), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(118), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(119), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(120), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(121), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(122), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - - { - DXGI_FORMAT(123), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - - { - DXGI_FORMAT(124), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(125), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(126), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(127), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(128), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(129), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(DXGI_FORMAT_P208), - DXGI_FORMAT_P208, - D3DFCS_P208, - { 0, 0, 0, 0 }, - 8, - FALSE, - 2, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_FULL_TYPE, - R, - X, - X, - X, - _UNORM, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - TRUE, - FALSE, - TRUE, - TRUE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT(DXGI_FORMAT_V208), - DXGI_FORMAT_V208, - D3DFCS_V208, - { 0, 0, 0, 0 }, - 8, - FALSE, - 1, - 2, - 1, - D3DFL_CUSTOM, - D3DFTL_FULL_TYPE, - R, - X, - X, - X, - _UNORM, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - TRUE, - FALSE, - TRUE, - TRUE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT(DXGI_FORMAT_V408), - DXGI_FORMAT_V408, - D3DFCS_V408, - { 0, 0, 0, 0 }, - 8, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_FULL_TYPE, - R, - X, - X, - X, - _UNORM, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - TRUE, - FALSE, - TRUE, - TRUE, - FALSE, - FALSE, - }, - - { - DXGI_FORMAT(133), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(134), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(135), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(136), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(137), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(138), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(139), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(140), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(141), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(142), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(143), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(144), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(145), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(146), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(147), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(148), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(149), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(150), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(151), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(152), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(153), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(154), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(155), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(156), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(157), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(158), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(159), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(160), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(161), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(162), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(163), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(164), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(165), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(166), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(167), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(168), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(169), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(170), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(171), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(172), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(173), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(174), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(175), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(176), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(177), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(178), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(179), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(180), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(181), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(182), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(183), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(184), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(185), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(186), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(187), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - { - DXGI_FORMAT(188), - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 0, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_NO_TYPE, - X, - X, - X, - X, - _TYPELESS, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - TRUE, - }, - - { - DXGI_FORMAT_SAMPLER_FEEDBACK_MIN_MIP_OPAQUE, - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 8, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_FULL_TYPE, - R, - X, - X, - X, - _UNORM, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUE, - DXGI_FORMAT_UNKNOWN, - D3DFCS_UNKNOWN, - { 0, 0, 0, 0 }, - 8, - FALSE, - 1, - 1, - 1, - D3DFL_CUSTOM, - D3DFTL_FULL_TYPE, - R, - X, - X, - X, - _UNORM, - _TYPELESS, - _TYPELESS, - _TYPELESS, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - { - DXGI_FORMAT_A4B4G4R4_UNORM, - DXGI_FORMAT_A4B4G4R4_UNORM, - D3DFCS_A4B4G4R4, - { 4, 4, 4, 4 }, - 16, - FALSE, - 1, - 1, - 1, - D3DFL_STANDARD, - D3DFTL_FULL_TYPE, - A, - B, - G, - R, - _UNORM, - _UNORM, - _UNORM, - _UNORM, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - FALSE, - }, - // DXGI_FORMAT ParentFormat pDefaultFormatCastSet BitsPerComponent[4], BitsPerUnit, - // SRGB, WidthAlignment, HeightAlignment, DepthAlignment, Layout, TypeLevel, ComponentName[4],ComponentInterpretation[4], - // bDX9VertexOrIndexFormat bDX9TextureFormat, bFloatNormFormat, bPlanar, bYUV bDependantFormatCastSet bInternal - -}; - -const UINT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::s_NumFormats = - (sizeof(D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::s_FormatDetail) / sizeof(D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::FORMAT_DETAIL)); - -//--------------------------------------------------------------------------------------------------------------------------------- -// GetHighestDefinedFeatureLevel -D3D_FEATURE_LEVEL D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetHighestDefinedFeatureLevel() -{ - return D3D_FEATURE_LEVEL_12_2; -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// GetNumFormats -UINT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetNumFormats() -{ - return s_NumFormats; -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// GetFormatTable -const D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::FORMAT_DETAIL* D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetFormatTable() -{ - return &s_FormatDetail[0]; -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// GetFormatTable -BOOL D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::Opaque(DXGI_FORMAT Format) -{ - return Format == DXGI_FORMAT_420_OPAQUE; -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// FormatExists -bool D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::FormatExists(DXGI_FORMAT Format) -{ - return GetFormat(static_cast(Format)) != static_cast(-1) ? true : false; -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// GetDetailTableIndex -UINT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetDetailTableIndex(DXGI_FORMAT Format) -{ - if ((UINT)Format < _countof(s_FormatDetail)) - { - assert(s_FormatDetail[(UINT)Format].DXGIFormat == Format); - return static_cast(Format); - } - - return (UINT)-1; -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// IsBlockCompressFormat - returns true if format is block compressed. This function is a helper function for -// GetBitsPerUnit and if this function returns true then GetBitsPerUnit returns block size. -bool D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::IsBlockCompressFormat(DXGI_FORMAT Format) -{ - // Returns true if BC1, BC2, BC3, BC4, BC5, BC6, BC7, or ASTC - return (Format >= DXGI_FORMAT_BC1_TYPELESS && Format <= DXGI_FORMAT_BC5_SNORM) || - (Format >= DXGI_FORMAT_BC6H_TYPELESS && Format <= DXGI_FORMAT_BC7_UNORM_SRGB); -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// GetByteAlignment -UINT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetByteAlignment(DXGI_FORMAT Format) -{ - UINT bits = GetBitsPerUnit(Format); - if (!IsBlockCompressFormat(Format)) - { - bits *= GetWidthAlignment(Format) * GetHeightAlignment(Format) * GetDepthAlignment(Format); - } - - assert((bits & 0x7) == 0); // Unit must be byte-aligned - return bits >> 3; -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// GetBitsPerUnitThrow -UINT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetBitsPerUnitThrow(DXGI_FORMAT Format) -{ - return s_FormatDetail[GetDetailTableIndexThrow(Format)].BitsPerUnit; -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// FormatExistsInHeader -bool D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::FormatExistsInHeader(DXGI_FORMAT Format, bool bExternalHeader) -{ - const UINT Index = GetDetailTableIndex(Format); - if (UINT(-1) == Index || (bExternalHeader && GetFormatDetail(Format)->bInternal)) - { - return false; - } - else - { - return true; - } -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// GetName -LPCSTR D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetName(DXGI_FORMAT Format, bool bHideInternalFormats) -{ - const UINT Index = GetDetailTableIndex(Format); - if (UINT(-1) == Index || (bHideInternalFormats && GetFormatDetail(Format)->bInternal) || !s_FormatNames[Index]) - { - return "Unrecognized"; - } - else - { - return s_FormatNames[Index]; - } -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// IsSRGBFormat -bool D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::IsSRGBFormat(DXGI_FORMAT Format) -{ - const UINT Index = GetDetailTableIndex(Format); - if (UINT(-1) == Index) - { - return false; - } - - return s_FormatDetail[Index].SRGBFormat ? true : false; -} - -//---------------------------------------------------------------------------- -// DivideAndRoundUp -inline HRESULT DivideAndRoundUp(UINT dividend, UINT divisor, _Out_ UINT& result) -{ - HRESULT hr = S_OK; - - UINT adjustedDividend; - hr = Safe_UIntAdd(dividend, (divisor - 1), &adjustedDividend); - - result = SUCCEEDED(hr) ? (adjustedDividend / divisor) : 0; - - return hr; -} - -//---------------------------------------------------------------------------- -// CalculateExtraPlanarRows -HRESULT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::CalculateExtraPlanarRows(DXGI_FORMAT format, UINT plane0Height, _Out_ UINT& totalHeight) -{ - if (!D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::Planar(format)) - { - totalHeight = plane0Height; - return S_OK; - } - - // blockWidth, blockHeight, and blockSize only reflect the size of plane 0. Each planar format has additonal planes - // that must be counted. Each format increases size by another 0.5x, 1x, or 2x. Grab the number of "half - // allocation" increments so integer math can be used to calculate the extra size. - UINT extraHalfHeight; - UINT round; - - switch (D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetParentFormat(format)) - { - case DXGI_FORMAT_NV12: - case DXGI_FORMAT_P010: - case DXGI_FORMAT_P016: - case DXGI_FORMAT_420_OPAQUE: - extraHalfHeight = 1; - round = 1; - break; - - case DXGI_FORMAT_NV11: - case DXGI_FORMAT_P208: - extraHalfHeight = 2; - round = 0; - break; - case DXGI_FORMAT_V208: - extraHalfHeight = 2; - round = 1; - break; - - case DXGI_FORMAT_V408: - extraHalfHeight = 4; - round = 0; - break; - - case DXGI_FORMAT_R24G8_TYPELESS: - case DXGI_FORMAT_R32G8X24_TYPELESS: totalHeight = plane0Height; return S_OK; - - default: assert(false); return S_OK; - } - - UINT extraPlaneHeight; - if (FAILED(Safe_UIntMult(plane0Height, extraHalfHeight, &extraPlaneHeight)) || - FAILED(Safe_UIntAdd(extraPlaneHeight, round, &extraPlaneHeight)) || - FAILED(Safe_UIntAdd(plane0Height, (extraPlaneHeight >> 1), &totalHeight))) - { - return INTSAFE_E_ARITHMETIC_OVERFLOW; - } - - return S_OK; -} - -//---------------------------------------------------------------------------- -// CalculateResourceSize -HRESULT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::CalculateResourceSize(UINT width, UINT height, UINT depth, DXGI_FORMAT format, - UINT mipLevels, UINT subresources, _Out_ SIZE_T& totalByteSize, - _Out_writes_opt_(subresources) D3D12_MEMCPY_DEST* pDst) -{ - UINT tableIndex = GetDetailTableIndexNoThrow(format); - if (tableIndex == UINT(-1)) - { - return E_INVALIDARG; - } - - totalByteSize = 0; - - const FORMAT_DETAIL& formatDetail = s_FormatDetail[tableIndex]; - - bool fIsBlockCompressedFormat = IsBlockCompressFormat(format); - - // No format currently requires depth alignment. - assert(formatDetail.DepthAlignment == 1); - - UINT subWidth = width; - UINT subHeight = height; - UINT subDepth = depth; - for (UINT s = 0, iM = 0; s < subresources; ++s) - { - UINT blockWidth; - if (FAILED(DivideAndRoundUp(subWidth, formatDetail.WidthAlignment, /*_Out_*/ blockWidth))) - { - return INTSAFE_E_ARITHMETIC_OVERFLOW; - } - - UINT blockSize, blockHeight; - if (fIsBlockCompressedFormat) - { - if (FAILED(DivideAndRoundUp(subHeight, formatDetail.HeightAlignment, /*_Out_*/ blockHeight))) - { - return INTSAFE_E_ARITHMETIC_OVERFLOW; - } - - // Block Compressed formats use BitsPerUnit as block size. - blockSize = formatDetail.BitsPerUnit; - } - else - { - // The height must *not* be aligned to HeightAlign. As there is no plane pitch/stride, the expectation is - // that the 2nd plane begins immediately after the first. The only formats with HeightAlignment other than - // 1 are planar or block compressed, and block compressed is handled above. - assert(formatDetail.bPlanar || formatDetail.HeightAlignment == 1); - blockHeight = subHeight; - - // Combined with the division os subWidth by the width alignment above, this helps achieve rounding the stride up to an even multiple of - // block width. This is especially important for formats like NV12 and P208 whose chroma plane is wider than the luma. - blockSize = formatDetail.BitsPerUnit * formatDetail.WidthAlignment; - } - - if (DXGI_FORMAT_UNKNOWN == formatDetail.DXGIFormat) - { - blockSize = 8; - } - - // Convert block width size to bytes. - assert((blockSize & 0x7) == 0); - blockSize = blockSize >> 3; - - if (formatDetail.bPlanar) - { - if (FAILED(CalculateExtraPlanarRows(format, blockHeight, /*_Out_*/ blockHeight))) - { - return INTSAFE_E_ARITHMETIC_OVERFLOW; - } - } - - // Calculate rowPitch, depthPitch, and total subresource size. - UINT rowPitch, depthPitch; - - if (FAILED(Safe_UIntMult(blockWidth, blockSize, &rowPitch)) || FAILED(Safe_UIntMult(blockHeight, rowPitch, &depthPitch))) - { - return INTSAFE_E_ARITHMETIC_OVERFLOW; - } - SIZE_T subresourceByteSize = SIZE_T(UINT64(subDepth) * UINT64(depthPitch)); - - if (pDst) - { - D3D12_MEMCPY_DEST& dst = pDst[s]; - - // This data will be returned straight from the API to satisfy Map. So, strides/ alignment must be API-correct. - dst.pData = reinterpret_cast(totalByteSize); - assert(s != 0 || dst.pData == nullptr); - - dst.RowPitch = rowPitch; - dst.SlicePitch = depthPitch; - } - - // Align the subresource size. - static_assert((MAP_ALIGN_REQUIREMENT & (MAP_ALIGN_REQUIREMENT - 1)) == 0, - "This code expects MAP_ALIGN_REQUIREMENT to be a power of 2."); - - SIZE_T subresourceByteSizeAligned = subresourceByteSize + MAP_ALIGN_REQUIREMENT - 1; - subresourceByteSizeAligned = subresourceByteSizeAligned & ~(MAP_ALIGN_REQUIREMENT - 1); - totalByteSize = totalByteSize + subresourceByteSizeAligned; - - // Iterate over mip levels and array elements - if (++iM >= mipLevels) - { - iM = 0; - - subWidth = width; - subHeight = height; - subDepth = depth; - } - else - { - subWidth /= (1 == subWidth ? 1 : 2); - subHeight /= (1 == subHeight ? 1 : 2); - subDepth /= (1 == subDepth ? 1 : 2); - } - } - - return S_OK; -} - -inline bool IsPow2(UINT Val) -{ - return 0 == (Val & (Val - 1)); -} - -// This helper function calculates the Row Pitch for a given format. For Planar formats this function returns -// the row major RowPitch of the resource. The RowPitch is the same for all the planes. For Planar -// also use the CalculateExtraPlanarRows function to calculate the corresonding height or use the CalculateMinimumRowMajorSlicePitch -// function. For Block Compressed Formats, this function returns the RowPitch of a row of blocks. For packed subsampled formats and other formats, -// this function returns the row pitch of one single row of pixels. -HRESULT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::CalculateMinimumRowMajorRowPitch(DXGI_FORMAT Format, UINT Width, _Out_ UINT& RowPitch) -{ - // Early out for DXGI_FORMAT_UNKNOWN special case. - if (Format == DXGI_FORMAT_UNKNOWN) - { - RowPitch = Width; - return S_OK; - } - - UINT WidthAlignment = GetWidthAlignment(Format); - - UINT NumUnits; - if (IsBlockCompressFormat(Format)) - { - // This function calculates the minimum stride needed for a block row when the format - // is block compressed.The GetBitsPerUnit value stored in the format table indicates - // the size of a compressed block for block compressed formats. - assert(WidthAlignment != 0); - if (FAILED(DivideAndRoundUp(Width, WidthAlignment, NumUnits))) - { - return INTSAFE_E_ARITHMETIC_OVERFLOW; - } - } - else - { - // All other formats must have strides aligned to their width alignment requirements. - // The Width may not be aligned to the WidthAlignment. This is not an error for this - // function as we expect to allow formats like NV12 to have odd dimensions in the future. - - // The following alignement code expects only pow2 alignment requirements. Only block - // compressed formats currently have non-pow2 alignment requriements. - assert(IsPow2(WidthAlignment)); - - UINT Mask = WidthAlignment - 1; - if (FAILED(Safe_UIntAdd(Width, Mask, &NumUnits))) - { - return INTSAFE_E_ARITHMETIC_OVERFLOW; - } - - NumUnits &= ~Mask; - } - - if (FAILED(Safe_UIntMult(NumUnits, GetBitsPerUnit(Format), &RowPitch))) - { - return INTSAFE_E_ARITHMETIC_OVERFLOW; - } - - // This must to always be Byte aligned. - assert((RowPitch & 7) == 0); - RowPitch >>= 3; - - return S_OK; -} - -// This helper function calculates the SlicePitch for a given format. For Planar formats the slice pitch includes the -// extra planes. -HRESULT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::CalculateMinimumRowMajorSlicePitch(DXGI_FORMAT Format, UINT TightRowPitch, - UINT Height, _Out_ UINT& SlicePitch) -{ - if (Planar(Format)) - { - UINT PlanarHeight; - if (FAILED(CalculateExtraPlanarRows(Format, Height, PlanarHeight))) - { - return INTSAFE_E_ARITHMETIC_OVERFLOW; - } - - return Safe_UIntMult(TightRowPitch, PlanarHeight, &SlicePitch); - } - else if (Format == DXGI_FORMAT_UNKNOWN) - { - return Safe_UIntMult(TightRowPitch, Height, &SlicePitch); - } - - UINT HeightAlignment = GetHeightAlignment(Format); - - // Caution assert to make sure that no new format breaks this assumption that all HeightAlignment formats are BC or - // Planar. This is to make sure that Height handled correctly for this calculation. - assert(HeightAlignment == 1 || IsBlockCompressFormat(Format)); - - UINT HeightOfPacked; - if (FAILED(DivideAndRoundUp(Height, HeightAlignment, HeightOfPacked))) - { - return INTSAFE_E_ARITHMETIC_OVERFLOW; - } - - if (FAILED(Safe_UIntMult(HeightOfPacked, TightRowPitch, &SlicePitch))) - { - return INTSAFE_E_ARITHMETIC_OVERFLOW; - } - - return S_OK; -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// GetBitsPerUnit - returns bits per pixel unless format is a block compress format then it returns bits per block. -// use IsBlockCompressFormat() to determine if block size is returned. -UINT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetBitsPerUnit(DXGI_FORMAT Format) -{ - return s_FormatDetail[GetDetailTableIndexNoThrow(Format)].BitsPerUnit; -} - -//--------------------------------------------------------------------------------------------------------------------------------- -UINT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetWidthAlignment(DXGI_FORMAT Format) -{ - return s_FormatDetail[GetDetailTableIndexNoThrow(Format)].WidthAlignment; -} - -UINT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetHeightAlignment(DXGI_FORMAT Format) -{ - return s_FormatDetail[GetDetailTableIndexNoThrow(Format)].HeightAlignment; -} - -UINT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetDepthAlignment(DXGI_FORMAT Format) -{ - return s_FormatDetail[GetDetailTableIndexNoThrow(Format)].DepthAlignment; -} -//--------------------------------------------------------------------------------------------------------------------------------- -// GetFormat -DXGI_FORMAT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetFormat(SIZE_T Index) -{ - if (Index < GetNumFormats()) - { - return s_FormatDetail[Index].DXGIFormat; - } - return (DXGI_FORMAT)-1; -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// CanBeCastEvenFullyTyped -bool D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::CanBeCastEvenFullyTyped(DXGI_FORMAT Format, D3D_FEATURE_LEVEL fl) -{ - // SRGB can be cast away/back, and XR_BIAS can be cast to/from UNORM - switch (fl) - { - case D3D_FEATURE_LEVEL_1_0_GENERIC: - case D3D_FEATURE_LEVEL_1_0_CORE: return false; - default: break; - } - switch (Format) - { - case DXGI_FORMAT_R8G8B8A8_UNORM: - case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: - case DXGI_FORMAT_B8G8R8A8_UNORM: - case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: return true; - case DXGI_FORMAT_R10G10B10A2_UNORM: - case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: return fl >= D3D_FEATURE_LEVEL_10_0; - default: return false; - } -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// GetFormatDetail -const D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::FORMAT_DETAIL* D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetFormatDetail(DXGI_FORMAT Format) -{ - const UINT Index = GetDetailTableIndex(Format); - if (UINT(-1) == Index) - { - return nullptr; - } - - return &s_FormatDetail[Index]; -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// GetBitsPerStencil -UINT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetBitsPerStencil(DXGI_FORMAT Format) -{ - const UINT Index = GetDetailTableIndexThrow(Format); - if ((s_FormatDetail[Index].TypeLevel != D3DFTL_PARTIAL_TYPE) && (s_FormatDetail[Index].TypeLevel != D3DFTL_FULL_TYPE)) - { - return 0; - } - for (UINT comp = 0; comp < 4; comp++) - { - D3D_FORMAT_COMPONENT_NAME name = D3DFCN_D; - switch (comp) - { - case 0: name = s_FormatDetail[Index].ComponentName0; break; - case 1: name = s_FormatDetail[Index].ComponentName1; break; - case 2: name = s_FormatDetail[Index].ComponentName2; break; - case 3: name = s_FormatDetail[Index].ComponentName3; break; - } - if (name == D3DFCN_S) - { - return s_FormatDetail[Index].BitsPerComponent[comp]; - } - } - return 0; -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// GetBitsPerDepth -UINT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetBitsPerDepth(DXGI_FORMAT Format) -{ - const UINT Index = GetDetailTableIndexThrow(Format); - if ((s_FormatDetail[Index].TypeLevel != D3DFTL_PARTIAL_TYPE) && (s_FormatDetail[Index].TypeLevel != D3DFTL_FULL_TYPE)) - { - return 0; - } - for (UINT comp = 0; comp < 4; comp++) - { - D3D_FORMAT_COMPONENT_NAME name = D3DFCN_D; - switch (comp) - { - case 0: name = s_FormatDetail[Index].ComponentName0; break; - case 1: name = s_FormatDetail[Index].ComponentName1; break; - case 2: name = s_FormatDetail[Index].ComponentName2; break; - case 3: name = s_FormatDetail[Index].ComponentName3; break; - } - if (name == D3DFCN_D) - { - return s_FormatDetail[Index].BitsPerComponent[comp]; - } - } - return 0; -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// GetFormatReturnTypes -void D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetFormatReturnTypes(DXGI_FORMAT Format, - D3D_FORMAT_COMPONENT_INTERPRETATION* pInterpretations) // return array with 4 entries -{ - const UINT Index = GetDetailTableIndexThrow(Format); - pInterpretations[D3D10_SB_4_COMPONENT_R] = s_FormatDetail[Index].ComponentInterpretation0; - pInterpretations[D3D10_SB_4_COMPONENT_G] = s_FormatDetail[Index].ComponentInterpretation1; - pInterpretations[D3D10_SB_4_COMPONENT_B] = s_FormatDetail[Index].ComponentInterpretation2; - pInterpretations[D3D10_SB_4_COMPONENT_A] = s_FormatDetail[Index].ComponentInterpretation3; -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// GetAddressingBitsPerAlignedSize -UINT8 D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetAddressingBitsPerAlignedSize(DXGI_FORMAT Format) -{ - UINT byteAlignment = GetByteAlignment(Format); - UINT8 addressBitsPerElement = 0; - - switch (byteAlignment) - { - case 1: addressBitsPerElement = 0; break; - case 2: addressBitsPerElement = 1; break; - case 4: addressBitsPerElement = 2; break; - case 8: addressBitsPerElement = 3; break; - case 16: addressBitsPerElement = 4; break; - - // The format is not supported - default: return UINT8(-1); - } - - return addressBitsPerElement; -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// GetNumComponentsInFormat -UINT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetNumComponentsInFormat(DXGI_FORMAT Format) -{ - UINT n = 0; - const UINT Index = GetDetailTableIndexThrow(Format); - for (UINT comp = 0; comp < 4; comp++) - { - D3D_FORMAT_COMPONENT_NAME name = D3DFCN_D; - switch (comp) - { - case 0: name = s_FormatDetail[Index].ComponentName0; break; - case 1: name = s_FormatDetail[Index].ComponentName1; break; - case 2: name = s_FormatDetail[Index].ComponentName2; break; - case 3: name = s_FormatDetail[Index].ComponentName3; break; - } - if (name != D3DFCN_X) - { - n++; - } - } - return n; -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// GetMinNumComponentsInFormats -UINT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetMinNumComponentsInFormats(DXGI_FORMAT FormatA, DXGI_FORMAT FormatB) -{ - UINT NumComponentsFormatA = GetNumComponentsInFormat(FormatA); - UINT NumComponentsFormatB = GetNumComponentsInFormat(FormatB); - UINT NumComponents = NumComponentsFormatA < NumComponentsFormatB ? NumComponentsFormatA : NumComponentsFormatB; - return NumComponents; -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// Sequential2AbsoluteComponentIndex -UINT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::Sequential2AbsoluteComponentIndex(DXGI_FORMAT Format, UINT SequentialComponentIndex) -{ - UINT n = 0; - const UINT Index = GetDetailTableIndexThrow(Format); - for (UINT comp = 0; comp < 4; comp++) - { - auto name = static_cast(0); - switch (comp) - { - case 0: name = s_FormatDetail[Index].ComponentName0; break; - case 1: name = s_FormatDetail[Index].ComponentName1; break; - case 2: name = s_FormatDetail[Index].ComponentName2; break; - case 3: name = s_FormatDetail[Index].ComponentName3; break; - } - if (name != D3DFCN_X) - { - if (SequentialComponentIndex == n) - { - return comp; - } - n++; - } - } - return UINT(-1); -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// Depth Only Format -bool D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::DepthOnlyFormat(DXGI_FORMAT Format) -{ - switch (Format) - { - case DXGI_FORMAT_D32_FLOAT: - case DXGI_FORMAT_D16_UNORM: return true; - default: return false; - } -} - -//--------------------------------------------------------------------------------------------------------------------------------- -bool D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::SupportsSamplerFeedback(DXGI_FORMAT Format) -{ - switch (Format) - { - case DXGI_FORMAT_SAMPLER_FEEDBACK_MIN_MIP_OPAQUE: - case DXGI_FORMAT_SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUE: return true; - default: return false; - } -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// GetParentFormat -DXGI_FORMAT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetParentFormat(DXGI_FORMAT Format) -{ - return s_FormatDetail[Format].ParentFormat; -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// GetFormatCastSet -const DXGI_FORMAT* D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetFormatCastSet(DXGI_FORMAT Format) -{ - return s_FormatDetail[Format].pDefaultFormatCastSet; -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// GetTypeLevel -D3D_FORMAT_TYPE_LEVEL D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetTypeLevel(DXGI_FORMAT Format) -{ - return s_FormatDetail[GetDetailTableIndexNoThrow(Format)].TypeLevel; -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// GetLayout -D3D_FORMAT_LAYOUT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetLayout(DXGI_FORMAT Format) -{ - return s_FormatDetail[GetDetailTableIndexNoThrow(Format)].Layout; -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// GetComponentName -D3D_FORMAT_COMPONENT_NAME D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetComponentName(DXGI_FORMAT Format, UINT AbsoluteComponentIndex) -{ - D3D_FORMAT_COMPONENT_NAME name = {}; - switch (AbsoluteComponentIndex) - { - case 0: name = s_FormatDetail[GetDetailTableIndexNoThrow(Format)].ComponentName0; break; - case 1: name = s_FormatDetail[GetDetailTableIndexNoThrow(Format)].ComponentName1; break; - case 2: name = s_FormatDetail[GetDetailTableIndexNoThrow(Format)].ComponentName2; break; - case 3: name = s_FormatDetail[GetDetailTableIndexNoThrow(Format)].ComponentName3; break; -#if defined(__cpp_exceptions) && (!defined(_HAS_EXCEPTIONS) || _HAS_EXCEPTIONS != 0) - default: throw std::invalid_argument("AbsoluteComponentIndex"); -#else - default: break; -#endif - } - return name; -} -//--------------------------------------------------------------------------------------------------------------------------------- -// GetBitsPerComponent -UINT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetBitsPerComponent(DXGI_FORMAT Format, UINT AbsoluteComponentIndex) -{ - if (AbsoluteComponentIndex > 3) - { -#if defined(__cpp_exceptions) && (!defined(_HAS_EXCEPTIONS) || _HAS_EXCEPTIONS != 0) - throw std::invalid_argument("AbsoluteComponentIndex"); -#else - return UINT(-1); -#endif - } - return s_FormatDetail[GetDetailTableIndexNoThrow(Format)].BitsPerComponent[AbsoluteComponentIndex]; -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// GetFormatComponentInterpretation -D3D_FORMAT_COMPONENT_INTERPRETATION D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetFormatComponentInterpretation(DXGI_FORMAT Format, UINT AbsoluteComponentIndex) -{ - D3D_FORMAT_COMPONENT_INTERPRETATION interp{}; - - switch (AbsoluteComponentIndex) - { - case 0: interp = s_FormatDetail[GetDetailTableIndexNoThrow(Format)].ComponentInterpretation0; break; - case 1: interp = s_FormatDetail[GetDetailTableIndexNoThrow(Format)].ComponentInterpretation1; break; - case 2: interp = s_FormatDetail[GetDetailTableIndexNoThrow(Format)].ComponentInterpretation2; break; - case 3: interp = s_FormatDetail[GetDetailTableIndexNoThrow(Format)].ComponentInterpretation3; break; -#if defined(__cpp_exceptions) && (!defined(_HAS_EXCEPTIONS) || _HAS_EXCEPTIONS != 0) - default: throw std::invalid_argument("AbsoluteComponentIndex"); -#else - default: break; -#endif - } - return interp; -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// Planar -BOOL D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::Planar(DXGI_FORMAT Format) -{ - return s_FormatDetail[GetDetailTableIndexNoThrow(Format)].bPlanar; -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// Non-opaque Planar -BOOL D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::NonOpaquePlanar(DXGI_FORMAT Format) -{ - return Planar(Format) && !Opaque(Format); -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// YUV -BOOL D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::YUV(DXGI_FORMAT Format) -{ - return s_FormatDetail[GetDetailTableIndexNoThrow(Format)].bYUV; -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// Format family supports stencil -bool D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::FamilySupportsStencil(DXGI_FORMAT Format) -{ - switch (GetParentFormat(Format)) - { - case DXGI_FORMAT_R32G8X24_TYPELESS: - case DXGI_FORMAT_R24G8_TYPELESS: return true; - default: return false; - } -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// GetDetailTableIndexThrow -UINT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetDetailTableIndexThrow(DXGI_FORMAT Format) -{ - UINT Index = GetDetailTableIndex(Format); -#if defined(__cpp_exceptions) && (!defined(_HAS_EXCEPTIONS) || _HAS_EXCEPTIONS != 0) - if (UINT(-1) == Index) - { - throw std::invalid_argument("Format"); - } -#endif - return Index; -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// GetDetailTableIndexNoThrow -UINT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetDetailTableIndexNoThrow(DXGI_FORMAT Format) -{ - UINT Index = GetDetailTableIndex(Format); - assert(UINT(-1) != Index); // Needs to be validated externally. - return Index; -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// GetYCbCrChromaSubsampling -void D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetYCbCrChromaSubsampling(DXGI_FORMAT Format, _Out_ UINT& HorizontalSubsampling, - _Out_ UINT& VerticalSubsampling) -{ - switch (Format) - { - // YCbCr 4:2:0 - case DXGI_FORMAT_NV12: - case DXGI_FORMAT_P010: - case DXGI_FORMAT_P016: - case DXGI_FORMAT_420_OPAQUE: - HorizontalSubsampling = 2; - VerticalSubsampling = 2; - break; - - // YCbCr 4:2:2 - case DXGI_FORMAT_P208: - case DXGI_FORMAT_YUY2: - case DXGI_FORMAT_Y210: - HorizontalSubsampling = 2; - VerticalSubsampling = 1; - break; - - // YCbCr 4:4:0 - case DXGI_FORMAT_V208: - HorizontalSubsampling = 1; - VerticalSubsampling = 2; - break; - - // YCbCr 4:4:4 - case DXGI_FORMAT_AYUV: - case DXGI_FORMAT_V408: - case DXGI_FORMAT_Y410: - case DXGI_FORMAT_Y416: - // Fallthrough - - // YCbCr palletized 4:4:4: - case DXGI_FORMAT_AI44: - case DXGI_FORMAT_IA44: - case DXGI_FORMAT_P8: - case DXGI_FORMAT_A8P8: - HorizontalSubsampling = 1; - VerticalSubsampling = 1; - break; - - // YCbCr 4:1:1 - case DXGI_FORMAT_NV11: - HorizontalSubsampling = 4; - VerticalSubsampling = 1; - break; - - default: - // All YCbCr formats should be in this list. - assert(!YUV(Format)); - HorizontalSubsampling = 1; - VerticalSubsampling = 1; - break; - }; -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// Plane count for non-opaque planar formats -UINT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::NonOpaquePlaneCount(DXGI_FORMAT Format) -{ - if (!D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::NonOpaquePlanar(Format)) - { - return 1; - } - - // V208 and V408 are the only 3-plane formats. - return (Format == DXGI_FORMAT_V208 || Format == DXGI_FORMAT_V408) ? 3 : 2; -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// GetTileShape -// -// Retrieve 64K Tiled Resource tile shape -void D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetTileShape(D3D12_TILE_SHAPE* pTileShape, DXGI_FORMAT Format, - D3D12_RESOURCE_DIMENSION Dimension, UINT SampleCount) -{ - UINT BPU = GetBitsPerUnit(Format); - - switch (Dimension) - { - case D3D12_RESOURCE_DIMENSION_UNKNOWN: - case D3D12_RESOURCE_DIMENSION_BUFFER: - case D3D12_RESOURCE_DIMENSION_TEXTURE1D: - { - assert(!IsBlockCompressFormat(Format)); - pTileShape->WidthInTexels = - (BPU == 0) ? D3D12_TILED_RESOURCE_TILE_SIZE_IN_BYTES : D3D12_TILED_RESOURCE_TILE_SIZE_IN_BYTES * 8 / BPU; - pTileShape->HeightInTexels = 1; - pTileShape->DepthInTexels = 1; - } - break; - case D3D12_RESOURCE_DIMENSION_TEXTURE2D: - { - if (IsBlockCompressFormat(Format)) - { - // Currently only supported block sizes are 64 and 128. - // These equations calculate the size in texels for a tile. It relies on the fact that 64 * 64 blocks fit in a tile if the block size is 128 bits. - assert(BPU == 64 || BPU == 128); - pTileShape->WidthInTexels = 64 * GetWidthAlignment(Format); - pTileShape->HeightInTexels = 64 * GetHeightAlignment(Format); - pTileShape->DepthInTexels = 1; - if (BPU == 64) - { - // If bits per block are 64 we double width so it takes up the full tile size. - // This is only true for BC1 and BC4 - assert((Format >= DXGI_FORMAT_BC1_TYPELESS && Format <= DXGI_FORMAT_BC1_UNORM_SRGB) || - (Format >= DXGI_FORMAT_BC4_TYPELESS && Format <= DXGI_FORMAT_BC4_SNORM)); - pTileShape->WidthInTexels *= 2; - } - } - else - { - pTileShape->DepthInTexels = 1; - if (BPU <= 8) - { - pTileShape->WidthInTexels = 256; - pTileShape->HeightInTexels = 256; - } - else if (BPU <= 16) - { - pTileShape->WidthInTexels = 256; - pTileShape->HeightInTexels = 128; - } - else if (BPU <= 32) - { - pTileShape->WidthInTexels = 128; - pTileShape->HeightInTexels = 128; - } - else if (BPU <= 64) - { - pTileShape->WidthInTexels = 128; - pTileShape->HeightInTexels = 64; - } - else if (BPU <= 128) - { - pTileShape->WidthInTexels = 64; - pTileShape->HeightInTexels = 64; - } - else - { - ASSUME(FALSE); - } - - if (SampleCount <= 1) - { /* Do nothing */ - } - else if (SampleCount <= 2) - { - pTileShape->WidthInTexels /= 2; - pTileShape->HeightInTexels /= 1; - } - else if (SampleCount <= 4) - { - pTileShape->WidthInTexels /= 2; - pTileShape->HeightInTexels /= 2; - } - else if (SampleCount <= 8) - { - pTileShape->WidthInTexels /= 4; - pTileShape->HeightInTexels /= 2; - } - else if (SampleCount <= 16) - { - pTileShape->WidthInTexels /= 4; - pTileShape->HeightInTexels /= 4; - } - else - { - ASSUME(FALSE); - } - } - } - break; - case D3D12_RESOURCE_DIMENSION_TEXTURE3D: - { - if (IsBlockCompressFormat(Format)) - { - // Currently only supported block sizes are 64 and 128. - // These equations calculate the size in texels for a tile. It relies on the fact that 16*16*16 blocks fit in a tile if the block size is 128 bits. - assert(BPU == 64 || BPU == 128); - pTileShape->WidthInTexels = 16 * GetWidthAlignment(Format); - pTileShape->HeightInTexels = 16 * GetHeightAlignment(Format); - pTileShape->DepthInTexels = 16 * GetDepthAlignment(Format); - if (BPU == 64) - { - // If bits per block are 64 we double width so it takes up the full tile size. - // This is only true for BC1 and BC4 - assert((Format >= DXGI_FORMAT_BC1_TYPELESS && Format <= DXGI_FORMAT_BC1_UNORM_SRGB) || - (Format >= DXGI_FORMAT_BC4_TYPELESS && Format <= DXGI_FORMAT_BC4_SNORM)); - pTileShape->WidthInTexels *= 2; - } - } - else if (Format == DXGI_FORMAT_R8G8_B8G8_UNORM || Format == DXGI_FORMAT_G8R8_G8B8_UNORM) - { - // RGBG and GRGB are treated as 2x1 block format - pTileShape->WidthInTexels = 64; - pTileShape->HeightInTexels = 32; - pTileShape->DepthInTexels = 16; - } - else - { - // Not a block format so BPU is bits per pixel. - assert(GetWidthAlignment(Format) == 1 && GetHeightAlignment(Format) == 1 && GetDepthAlignment(Format)); - switch (BPU) - { - case 8: - pTileShape->WidthInTexels = 64; - pTileShape->HeightInTexels = 32; - pTileShape->DepthInTexels = 32; - break; - case 16: - pTileShape->WidthInTexels = 32; - pTileShape->HeightInTexels = 32; - pTileShape->DepthInTexels = 32; - break; - case 32: - pTileShape->WidthInTexels = 32; - pTileShape->HeightInTexels = 32; - pTileShape->DepthInTexels = 16; - break; - case 64: - pTileShape->WidthInTexels = 32; - pTileShape->HeightInTexels = 16; - pTileShape->DepthInTexels = 16; - break; - case 128: - pTileShape->WidthInTexels = 16; - pTileShape->HeightInTexels = 16; - pTileShape->DepthInTexels = 16; - break; - } - } - break; - } - } -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// Get4KTileShape -// -// Retrieve 4K Tiled Resource tile shape -void D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::Get4KTileShape(D3D12_TILE_SHAPE* pTileShape, DXGI_FORMAT Format, - D3D12_RESOURCE_DIMENSION Dimension, UINT SampleCount) -{ - UINT BPU = GetBitsPerUnit(Format); - - switch (Dimension) - { - case D3D12_RESOURCE_DIMENSION_UNKNOWN: - case D3D12_RESOURCE_DIMENSION_BUFFER: - case D3D12_RESOURCE_DIMENSION_TEXTURE1D: - { - assert(!IsBlockCompressFormat(Format)); - pTileShape->WidthInTexels = (BPU == 0) ? 4096 : 4096 * 8 / BPU; - pTileShape->HeightInTexels = 1; - pTileShape->DepthInTexels = 1; - } - break; - case D3D12_RESOURCE_DIMENSION_TEXTURE2D: - { - pTileShape->DepthInTexels = 1; - if (IsBlockCompressFormat(Format)) - { - // Currently only supported block sizes are 64 and 128. - // These equations calculate the size in texels for a tile. It relies on the fact that 16*16*16 blocks fit in a tile if the block size is 128 bits. - assert(BPU == 64 || BPU == 128); - pTileShape->WidthInTexels = 16 * GetWidthAlignment(Format); - pTileShape->HeightInTexels = 16 * GetHeightAlignment(Format); - if (BPU == 64) - { - // If bits per block are 64 we double width so it takes up the full tile size. - // This is only true for BC1 and BC4 - assert((Format >= DXGI_FORMAT_BC1_TYPELESS && Format <= DXGI_FORMAT_BC1_UNORM_SRGB) || - (Format >= DXGI_FORMAT_BC4_TYPELESS && Format <= DXGI_FORMAT_BC4_SNORM)); - pTileShape->WidthInTexels *= 2; - } - } - else - { - if (BPU <= 8) - { - pTileShape->WidthInTexels = 64; - pTileShape->HeightInTexels = 64; - } - else if (BPU <= 16) - { - pTileShape->WidthInTexels = 64; - pTileShape->HeightInTexels = 32; - } - else if (BPU <= 32) - { - pTileShape->WidthInTexels = 32; - pTileShape->HeightInTexels = 32; - } - else if (BPU <= 64) - { - pTileShape->WidthInTexels = 32; - pTileShape->HeightInTexels = 16; - } - else if (BPU <= 128) - { - pTileShape->WidthInTexels = 16; - pTileShape->HeightInTexels = 16; - } - else - { - ASSUME(FALSE); - } - - if (SampleCount <= 1) - { /* Do nothing */ - } - else if (SampleCount <= 2) - { - pTileShape->WidthInTexels /= 2; - pTileShape->HeightInTexels /= 1; - } - else if (SampleCount <= 4) - { - pTileShape->WidthInTexels /= 2; - pTileShape->HeightInTexels /= 2; - } - else if (SampleCount <= 8) - { - pTileShape->WidthInTexels /= 4; - pTileShape->HeightInTexels /= 2; - } - else if (SampleCount <= 16) - { - pTileShape->WidthInTexels /= 4; - pTileShape->HeightInTexels /= 4; - } - else - { - ASSUME(FALSE); - } - - assert(GetWidthAlignment(Format) == 1); - assert(GetHeightAlignment(Format) == 1); - assert(GetDepthAlignment(Format) == 1); - } - - break; - } - case D3D12_RESOURCE_DIMENSION_TEXTURE3D: - { - if (IsBlockCompressFormat(Format)) - { - // Currently only supported block sizes are 64 and 128. - // These equations calculate the size in texels for a tile. It relies on the fact that 16*16*16 blocks fit in a tile if the block size is 128 bits. - assert(BPU == 64 || BPU == 128); - pTileShape->WidthInTexels = 8 * GetWidthAlignment(Format); - pTileShape->HeightInTexels = 8 * GetHeightAlignment(Format); - pTileShape->DepthInTexels = 4; - if (BPU == 64) - { - // If bits per block are 64 we double width so it takes up the full tile size. - // This is only true for BC1 and BC4 - assert((Format >= DXGI_FORMAT_BC1_TYPELESS && Format <= DXGI_FORMAT_BC1_UNORM_SRGB) || - (Format >= DXGI_FORMAT_BC4_TYPELESS && Format <= DXGI_FORMAT_BC4_SNORM)); - pTileShape->DepthInTexels *= 2; - } - } - else - { - if (BPU <= 8) - { - pTileShape->WidthInTexels = 16; - pTileShape->HeightInTexels = 16; - pTileShape->DepthInTexels = 16; - } - else if (BPU <= 16) - { - pTileShape->WidthInTexels = 16; - pTileShape->HeightInTexels = 16; - pTileShape->DepthInTexels = 8; - } - else if (BPU <= 32) - { - pTileShape->WidthInTexels = 16; - pTileShape->HeightInTexels = 8; - pTileShape->DepthInTexels = 8; - } - else if (BPU <= 64) - { - pTileShape->WidthInTexels = 8; - pTileShape->HeightInTexels = 8; - pTileShape->DepthInTexels = 8; - } - else if (BPU <= 128) - { - pTileShape->WidthInTexels = 8; - pTileShape->HeightInTexels = 8; - pTileShape->DepthInTexels = 4; - } - else - { - ASSUME(FALSE); - } - - assert(GetWidthAlignment(Format) == 1); - assert(GetHeightAlignment(Format) == 1); - assert(GetDepthAlignment(Format) == 1); - } - } - break; - } -} - -//---------------------------------------------------------------------------------------------------------------------------------- -// GetPlaneSliceFromViewFormat -// Maps resource format + view format to a plane index for resource formats where the plane index can be inferred from -// this information. For planar formats where the plane index is ambiguous given this information (examples: V208, -// V408), this function returns 0. This function returns 0 for non-planar formats. -UINT8 D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetPlaneSliceFromViewFormat(DXGI_FORMAT ResourceFormat, DXGI_FORMAT ViewFormat) -{ - switch (GetParentFormat(ResourceFormat)) - { - case DXGI_FORMAT_R24G8_TYPELESS: - switch (ViewFormat) - { - case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: return 0; - case DXGI_FORMAT_X24_TYPELESS_G8_UINT: return 1; - default: ASSUME(false); - } - break; - case DXGI_FORMAT_R32G8X24_TYPELESS: - switch (ViewFormat) - { - case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: return 0; - case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: return 1; - default: ASSUME(false); - } - break; - case DXGI_FORMAT_NV12: - case DXGI_FORMAT_NV11: - case DXGI_FORMAT_P208: - switch (ViewFormat) - { - case DXGI_FORMAT_R8_UNORM: - case DXGI_FORMAT_R8_UINT: return 0; - case DXGI_FORMAT_R8G8_UNORM: - case DXGI_FORMAT_R8G8_UINT: return 1; - default: ASSUME(false); - } - break; - case DXGI_FORMAT_P016: - case DXGI_FORMAT_P010: - switch (ViewFormat) - { - case DXGI_FORMAT_R16_UNORM: - case DXGI_FORMAT_R16_UINT: return 0; - case DXGI_FORMAT_R16G16_UNORM: - case DXGI_FORMAT_R16G16_UINT: - case DXGI_FORMAT_R32_UINT: return 1; - default: ASSUME(false); - } - break; - default: break; - } - return 0; -} - -//---------------------------------------------------------------------------------------------------------------------------------- -void D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetPlaneSubsampledSizeAndFormatForCopyableLayout( - UINT PlaneSlice, DXGI_FORMAT Format, UINT Width, UINT Height, _Out_ DXGI_FORMAT& PlaneFormat, - _Out_ UINT& MinPlanePitchWidth, _Out_ UINT& PlaneWidth, _Out_ UINT& PlaneHeight) -{ - DXGI_FORMAT ParentFormat = GetParentFormat(Format); - - if (Planar(ParentFormat)) - { - switch (ParentFormat) - { - // YCbCr 4:2:0 - case DXGI_FORMAT_NV12: - switch (PlaneSlice) - { - case 0: - PlaneFormat = DXGI_FORMAT_R8_TYPELESS; - PlaneWidth = Width; - PlaneHeight = Height; - break; - case 1: - PlaneFormat = DXGI_FORMAT_R8G8_TYPELESS; - PlaneWidth = (Width + 1) >> 1; - PlaneHeight = (Height + 1) >> 1; - break; - default: ASSUME(FALSE); - }; - - MinPlanePitchWidth = PlaneWidth; - break; - - case DXGI_FORMAT_P010: - case DXGI_FORMAT_P016: - switch (PlaneSlice) - { - case 0: - PlaneFormat = DXGI_FORMAT_R16_TYPELESS; - PlaneWidth = Width; - PlaneHeight = Height; - break; - case 1: - PlaneFormat = DXGI_FORMAT_R16G16_TYPELESS; - PlaneWidth = (Width + 1) >> 1; - PlaneHeight = (Height + 1) >> 1; - break; - default: ASSUME(FALSE); - }; - - MinPlanePitchWidth = PlaneWidth; - break; - - // YCbCr 4:2:2 - case DXGI_FORMAT_P208: - switch (PlaneSlice) - { - case 0: - PlaneFormat = DXGI_FORMAT_R8_TYPELESS; - PlaneWidth = Width; - PlaneHeight = Height; - break; - case 1: - PlaneFormat = DXGI_FORMAT_R8G8_TYPELESS; - PlaneWidth = (Width + 1) >> 1; - PlaneHeight = Height; - break; - default: ASSUME(FALSE); - }; - - MinPlanePitchWidth = PlaneWidth; - break; - - // YCbCr 4:4:0 - case DXGI_FORMAT_V208: - PlaneFormat = DXGI_FORMAT_R8_TYPELESS; - switch (PlaneSlice) - { - case 0: - PlaneWidth = Width; - PlaneHeight = Height; - break; - case 1: - case 2: - PlaneWidth = Width; - PlaneHeight = (Height + 1) >> 1; - break; - default: ASSUME(FALSE); - }; - - MinPlanePitchWidth = PlaneWidth; - break; - - // YCbCr 4:4:4 - case DXGI_FORMAT_V408: - - switch (PlaneSlice) - { - case 0: - case 1: - case 2: - PlaneFormat = DXGI_FORMAT_R8_TYPELESS; - PlaneWidth = Width; - PlaneHeight = Height; - MinPlanePitchWidth = PlaneWidth; - break; - default: ASSUME(FALSE); - }; - break; - - // YCbCr 4:1:1 - case DXGI_FORMAT_NV11: - switch (PlaneSlice) - { - case 0: - PlaneFormat = DXGI_FORMAT_R8_TYPELESS; - PlaneWidth = Width; - PlaneHeight = Height; - MinPlanePitchWidth = Width; - break; - case 1: - PlaneFormat = DXGI_FORMAT_R8G8_TYPELESS; - PlaneWidth = (Width + 3) >> 2; - PlaneHeight = Height; - - // NV11 has unused padding to the right of the chroma plane in the RowMajor (linear) copyable layout. - MinPlanePitchWidth = (Width + 1) >> 1; - break; - default: ASSUME(FALSE); - }; - - break; - - case DXGI_FORMAT_R32G8X24_TYPELESS: - case DXGI_FORMAT_R24G8_TYPELESS: - switch (PlaneSlice) - { - case 0: - PlaneFormat = DXGI_FORMAT_R32_TYPELESS; - PlaneWidth = Width; - PlaneHeight = Height; - MinPlanePitchWidth = Width; - break; - case 1: - PlaneFormat = DXGI_FORMAT_R8_TYPELESS; - PlaneWidth = Width; - PlaneHeight = Height; - MinPlanePitchWidth = Width; - break; - default: ASSUME(FALSE); - }; - break; - - default: ASSUME(FALSE); - }; - } - else - { - assert(PlaneSlice == 0); - PlaneFormat = Format; - PlaneWidth = Width; - PlaneHeight = Height; - MinPlanePitchWidth = PlaneWidth; - } -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// GetPlaneCount -UINT8 D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetPlaneCount(DXGI_FORMAT Format) -{ - switch (GetParentFormat(Format)) - { - case DXGI_FORMAT_NV12: - case DXGI_FORMAT_NV11: - case DXGI_FORMAT_P208: - case DXGI_FORMAT_P016: - case DXGI_FORMAT_P010: - case DXGI_FORMAT_R24G8_TYPELESS: - case DXGI_FORMAT_R32G8X24_TYPELESS: return 2; - case DXGI_FORMAT_V208: - case DXGI_FORMAT_V408: return 3; - default: return 1; - } -} - -//--------------------------------------------------------------------------------------------------------------------------------- -void D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetMipDimensions(UINT8 mipSlice, _Inout_ UINT64* pWidth, - _Inout_opt_ UINT64* pHeight, _Inout_opt_ UINT64* pDepth) -{ - UINT denominator = (1U << mipSlice); // 2 ^ subresource - UINT64 mipWidth = *pWidth / denominator; - UINT64 mipHeight = pHeight ? *pHeight / denominator : 1; - UINT64 mipDepth = pDepth ? *pDepth / denominator : 1; - - // Adjust dimensions for degenerate mips - if (mipHeight == 0) - { - mipHeight = 1; - } - if (mipWidth == 0) - { - mipWidth = 1; - } - if (mipDepth == 0) - { - mipDepth = 1; - } - - *pWidth = mipWidth; - if (pHeight) - { - *pHeight = mipHeight; - } - if (pDepth) - { - *pDepth = mipDepth; - } -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// DX9VertexOrIndexFormat -BOOL D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::DX9VertexOrIndexFormat(DXGI_FORMAT Format) -{ - return s_FormatDetail[D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetDetailTableIndexThrow(Format)].bDX9VertexOrIndexFormat; -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// DX9TextureFormat -BOOL D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::DX9TextureFormat(DXGI_FORMAT Format) -{ - return s_FormatDetail[D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetDetailTableIndexThrow(Format)].bDX9TextureFormat; -} -//--------------------------------------------------------------------------------------------------------------------------------- -// FloatNormTextureFormat -BOOL D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::FloatNormTextureFormat(DXGI_FORMAT Format) -{ - return s_FormatDetail[D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetDetailTableIndexThrow(Format)].bFloatNormFormat; -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// ValidCastToR32UAV -// -// D3D11 has a limitation on typed UAVs (e.g. Texture1D/2D/3D) whereby the only format that can be read is R32_*. Lots of formats -// can be written though, with type conversion (e.g. R8G8B8A8_*). If an API user wants to do image processing in-place, in either -// the Compute Shader or the Pixel Shader, the only format available is R32_* (since it can be read and written at the same time). -// -// We were able to allow resources (Texture1D/2D/3D), created with a format from a small set of families that have 32 bits per element -// (such as R8G8B8A8_TYPELESS), to be cast to R32_* when creating a UAV. This means the Compute Shader or Pixel Shader can -// do simultaneous read+write on the resource when bound as an R32_* UAV, with the caveat that the shader code has to do manual -// type conversion manually, but later on the resource can be used as an SRV or RT as the desired type (e.g. R8G8B8A8_UNORM), and -// thus have access to filtering/blending where the hardware knows what the format is. -// -// If we didn't have this ability to cast some formats to R32_* UAVs, applications would have to keep an extra allocation around -// and do a rendering pass that copies from the R32_* UAV to whatever typed resource they really wanted. For formats not included -// in this list, such as any format that doesn't have 32-bits per component, as well as some 32-bit per component formats like -// R24G8 or R11G11B10_FLOAT there is no alternative for an application but to do the extra copy as mentioned, or avoid in-place -// image editing in favor of ping-ponging between buffers with multiple passes. -// -bool D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::ValidCastToR32UAV(DXGI_FORMAT from, DXGI_FORMAT to) -{ - // Allow casting of 32 bit formats to R32_* - if (((to == DXGI_FORMAT_R32_UINT) || (to == DXGI_FORMAT_R32_SINT) || (to == DXGI_FORMAT_R32_FLOAT)) && - ((from == DXGI_FORMAT_R10G10B10A2_TYPELESS) || (from == DXGI_FORMAT_R8G8B8A8_TYPELESS) || - (from == DXGI_FORMAT_B8G8R8A8_TYPELESS) || (from == DXGI_FORMAT_B8G8R8X8_TYPELESS) || - (from == DXGI_FORMAT_R16G16_TYPELESS) || (from == DXGI_FORMAT_R32_TYPELESS))) - { - return true; - } - return false; -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// IsSupportedTextureDisplayableFormat -// -// List of formats associated with Feature_D3D1XDisplayable -bool D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::IsSupportedTextureDisplayableFormat(DXGI_FORMAT Format, bool bMediaFormatOnly) -{ - if (bMediaFormatOnly) - { - return (false || (Format == DXGI_FORMAT_NV12 || Format == DXGI_FORMAT_YUY2)); - } - else - { - return (false // eases evolution - || (Format == DXGI_FORMAT_B8G8R8A8_UNORM || Format == DXGI_FORMAT_R8G8B8A8_UNORM || Format == DXGI_FORMAT_R16G16B16A16_FLOAT || - Format == DXGI_FORMAT_R10G10B10A2_UNORM || Format == DXGI_FORMAT_NV12 || Format == DXGI_FORMAT_YUY2)); - } -} - -//--------------------------------------------------------------------------------------------------------------------------------- -bool D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::FloatAndNotFloatFormats(DXGI_FORMAT FormatA, DXGI_FORMAT FormatB) -{ - UINT NumComponents = GetMinNumComponentsInFormats(FormatA, FormatB); - for (UINT c = 0; c < NumComponents; c++) - { - D3D_FORMAT_COMPONENT_INTERPRETATION fciA = GetFormatComponentInterpretation(FormatA, c); - D3D_FORMAT_COMPONENT_INTERPRETATION fciB = GetFormatComponentInterpretation(FormatB, c); - if ((fciA != fciB) && ((fciA == D3DFCI_FLOAT) || (fciB == D3DFCI_FLOAT))) - { - return true; - } - } - return false; -} - -//--------------------------------------------------------------------------------------------------------------------------------- -bool D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::SNORMAndUNORMFormats(DXGI_FORMAT FormatA, DXGI_FORMAT FormatB) -{ - UINT NumComponents = GetMinNumComponentsInFormats(FormatA, FormatB); - for (UINT c = 0; c < NumComponents; c++) - { - D3D_FORMAT_COMPONENT_INTERPRETATION fciA = GetFormatComponentInterpretation(FormatA, c); - D3D_FORMAT_COMPONENT_INTERPRETATION fciB = GetFormatComponentInterpretation(FormatB, c); - if (((fciA == D3DFCI_SNORM) && (fciB == D3DFCI_UNORM)) || ((fciB == D3DFCI_SNORM) && (fciA == D3DFCI_UNORM))) - { - return true; - } - } - return false; -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// Formats allowed by runtime for decode histogram. -bool D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::DecodeHistogramAllowedForOutputFormatSupport(DXGI_FORMAT Format) -{ - return ( - /* YUV 4:2:0 */ - Format == DXGI_FORMAT_NV12 || Format == DXGI_FORMAT_P010 || - Format == DXGI_FORMAT_P016 - /* YUV 4:2:2 */ - || Format == DXGI_FORMAT_YUY2 || Format == DXGI_FORMAT_Y210 || - Format == DXGI_FORMAT_Y216 - /* YUV 4:4:4 */ - || Format == DXGI_FORMAT_AYUV || Format == DXGI_FORMAT_Y410 || Format == DXGI_FORMAT_Y416); -} - -//--------------------------------------------------------------------------------------------------------------------------------- -// Formats allowed by runtime for decode histogram. Scopes to tested formats. -bool D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::MotionEstimatorAllowedInputFormat(DXGI_FORMAT Format) -{ - return Format == DXGI_FORMAT_NV12; -} - -//--------------------------------------------------------------------------------------------------------------------------------- -bool D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::SupportsDepth(DXGI_FORMAT Format) -{ - // If the number of bits associated with depth in the format is greater then 0, then the format supports depth - return (GetComponentName(Format, 0) == D3DFCN_D); -} - -//--------------------------------------------------------------------------------------------------------------------------------- -bool D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::SupportsStencil(DXGI_FORMAT Format) -{ - // If the number of bits associated with stencil in the format is greater then 0, then the format supports stencil - return GetBitsPerStencil(Format) > 0; -} - -#undef R -#undef G -#undef B -#undef A -#undef D -#undef S -#undef X - -#undef _TYPELESS -#undef _FLOAT -#undef _SNORM -#undef _UNORM -#undef _SINT -#undef _UINT -#undef _UNORM_SRGB -#undef _FIXED_2_8 - -#endif // D3D12_SDK_VERSION >= 606 - -#ifdef __clang__ -#pragma clang diagnostic pop -#endif diff --git a/Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_property_format_table.h b/Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_property_format_table.h deleted file mode 100644 index b268abe..0000000 --- a/Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_property_format_table.h +++ /dev/null @@ -1,126 +0,0 @@ -//********************************************************* -// -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License (MIT). -// -//********************************************************* -#pragma once - -#include "d3d12.h" -#define MAP_ALIGN_REQUIREMENT 16 // Map is required to return 16-byte aligned addresses - -struct D3D12_PROPERTY_LAYOUT_FORMAT_TABLE -{ -public: - // ---------------------------------------------------------------------------- - // Information describing everything about a D3D Resource Format - // ---------------------------------------------------------------------------- - typedef struct FORMAT_DETAIL - { - DXGI_FORMAT DXGIFormat; - DXGI_FORMAT ParentFormat; - const DXGI_FORMAT* pDefaultFormatCastSet; // This is dependent on FL/driver version, but is here to save a lot of space - UINT8 BitsPerComponent[4]; // only used for D3DFTL_PARTIAL_TYPE or FULL_TYPE - UINT8 BitsPerUnit; - BYTE SRGBFormat : 1; - UINT WidthAlignment : 4; // number of texels to align to in a mip level. - UINT HeightAlignment : 4; // Top level dimensions must be a multiple of these - UINT DepthAlignment : 1; // values. - D3D_FORMAT_LAYOUT Layout : 1; - D3D_FORMAT_TYPE_LEVEL TypeLevel : 2; - D3D_FORMAT_COMPONENT_NAME ComponentName0 : 3; // RED ... only used for D3DFTL_PARTIAL_TYPE or FULL_TYPE - D3D_FORMAT_COMPONENT_NAME ComponentName1 : 3; // GREEN ... only used for D3DFTL_PARTIAL_TYPE or FULL_TYPE - D3D_FORMAT_COMPONENT_NAME ComponentName2 : 3; // BLUE ... only used for D3DFTL_PARTIAL_TYPE or FULL_TYPE - D3D_FORMAT_COMPONENT_NAME ComponentName3 : 3; // ALPHA ... only used for D3DFTL_PARTIAL_TYPE or FULL_TYPE - D3D_FORMAT_COMPONENT_INTERPRETATION ComponentInterpretation0 : 3; // only used for D3DFTL_FULL_TYPE - D3D_FORMAT_COMPONENT_INTERPRETATION ComponentInterpretation1 : 3; // only used for D3DFTL_FULL_TYPE - D3D_FORMAT_COMPONENT_INTERPRETATION ComponentInterpretation2 : 3; // only used for D3DFTL_FULL_TYPE - D3D_FORMAT_COMPONENT_INTERPRETATION ComponentInterpretation3 : 3; // only used for D3DFTL_FULL_TYPE - bool bDX9VertexOrIndexFormat : 1; - bool bDX9TextureFormat : 1; - bool bFloatNormFormat : 1; - bool bPlanar : 1; - bool bYUV : 1; - bool bDependantFormatCastSet : 1; // This indicates that the format cast set is dependent on FL/driver version - bool bInternal : 1; - } FORMAT_DETAIL; - -private: - static const FORMAT_DETAIL s_FormatDetail[]; - static const UINT s_NumFormats; - static const LPCSTR s_FormatNames[]; // separate from above structure so it can be compiled out of runtime. -public: - static UINT GetNumFormats(); - static const FORMAT_DETAIL* GetFormatTable(); - static D3D_FEATURE_LEVEL GetHighestDefinedFeatureLevel(); - - static DXGI_FORMAT GetFormat (SIZE_T Index); - static bool FormatExists (DXGI_FORMAT Format); - static bool FormatExistsInHeader (DXGI_FORMAT Format, bool bExternalHeader = true); - static UINT GetByteAlignment (DXGI_FORMAT Format); - static bool IsBlockCompressFormat (DXGI_FORMAT Format); - static LPCSTR GetName (DXGI_FORMAT Format, bool bHideInternalFormats = true); - static bool IsSRGBFormat (DXGI_FORMAT Format); - static UINT GetBitsPerStencil (DXGI_FORMAT Format); - static UINT GetBitsPerDepth (DXGI_FORMAT Format); - static void GetFormatReturnTypes (DXGI_FORMAT Format, D3D_FORMAT_COMPONENT_INTERPRETATION* pInterpretations); // return array of 4 components - static UINT GetNumComponentsInFormat(DXGI_FORMAT Format); - static UINT GetMinNumComponentsInFormats(DXGI_FORMAT FormatA, DXGI_FORMAT FormatB); - - // Converts the sequential component index (range from 0 to GetNumComponentsInFormat()) to - // the absolute component index (range 0 to 3). - static UINT Sequential2AbsoluteComponentIndex (DXGI_FORMAT Format, UINT SequentialComponentIndex); - static bool CanBeCastEvenFullyTyped (DXGI_FORMAT Format, D3D_FEATURE_LEVEL fl); - static UINT8 GetAddressingBitsPerAlignedSize (DXGI_FORMAT Format); - static DXGI_FORMAT GetParentFormat (DXGI_FORMAT Format); - static const DXGI_FORMAT* GetFormatCastSet (DXGI_FORMAT Format); - static D3D_FORMAT_LAYOUT GetLayout (DXGI_FORMAT Format); - static D3D_FORMAT_TYPE_LEVEL GetTypeLevel (DXGI_FORMAT Format); - static UINT GetBitsPerUnit (DXGI_FORMAT Format); - static UINT GetBitsPerUnitThrow (DXGI_FORMAT Format); - static UINT GetBitsPerElement (DXGI_FORMAT Format); // Legacy function used to support D3D10on9 only. Do not use. - static UINT GetWidthAlignment (DXGI_FORMAT Format); - static UINT GetHeightAlignment (DXGI_FORMAT Format); - static UINT GetDepthAlignment (DXGI_FORMAT Format); - static BOOL Planar (DXGI_FORMAT Format); - static BOOL NonOpaquePlanar (DXGI_FORMAT Format); - static BOOL YUV (DXGI_FORMAT Format); - static BOOL Opaque (DXGI_FORMAT Format); - static bool FamilySupportsStencil (DXGI_FORMAT Format); - static UINT NonOpaquePlaneCount (DXGI_FORMAT Format); - static BOOL DX9VertexOrIndexFormat (DXGI_FORMAT Format); - static BOOL DX9TextureFormat (DXGI_FORMAT Format); - static BOOL FloatNormTextureFormat (DXGI_FORMAT Format); - static bool DepthOnlyFormat (DXGI_FORMAT format); - static UINT8 GetPlaneCount (DXGI_FORMAT Format); - static bool MotionEstimatorAllowedInputFormat (DXGI_FORMAT Format); - static bool SupportsSamplerFeedback (DXGI_FORMAT Format); - static bool DecodeHistogramAllowedForOutputFormatSupport(DXGI_FORMAT Format); - static UINT8 GetPlaneSliceFromViewFormat (DXGI_FORMAT ResourceFormat, DXGI_FORMAT ViewFormat); - static bool FloatAndNotFloatFormats (DXGI_FORMAT FormatA, DXGI_FORMAT FormatB); - static bool SNORMAndUNORMFormats (DXGI_FORMAT FormatA, DXGI_FORMAT FormatB); - static bool ValidCastToR32UAV (DXGI_FORMAT from, DXGI_FORMAT to); - static bool IsSupportedTextureDisplayableFormat (DXGI_FORMAT, bool bMediaFormatOnly); - static D3D_FORMAT_COMPONENT_INTERPRETATION GetFormatComponentInterpretation (DXGI_FORMAT Format, UINT AbsoluteComponentIndex); - static UINT GetBitsPerComponent (DXGI_FORMAT Format, UINT AbsoluteComponentIndex); - static D3D_FORMAT_COMPONENT_NAME GetComponentName (DXGI_FORMAT Format, UINT AbsoluteComponentIndex); - static HRESULT CalculateExtraPlanarRows (DXGI_FORMAT format, UINT plane0Height, _Out_ UINT& totalHeight); - static HRESULT CalculateMinimumRowMajorRowPitch (DXGI_FORMAT Format, UINT Width, _Out_ UINT& RowPitch); - static HRESULT CalculateMinimumRowMajorSlicePitch (DXGI_FORMAT Format, UINT ContextBasedRowPitch, UINT Height, _Out_ UINT& SlicePitch); - static void GetYCbCrChromaSubsampling (DXGI_FORMAT Format, _Out_ UINT& HorizontalSubsampling, _Out_ UINT& VerticalSubsampling); - - static HRESULT CalculateResourceSize (UINT width, UINT height, UINT depth, DXGI_FORMAT format, UINT mipLevels, UINT subresources, _Out_ SIZE_T& totalByteSize, _Out_writes_opt_(subresources) D3D12_MEMCPY_DEST* pDst = nullptr); - static void GetTileShape (D3D12_TILE_SHAPE* pTileShape, DXGI_FORMAT Format, D3D12_RESOURCE_DIMENSION Dimension, UINT SampleCount); - static void Get4KTileShape (D3D12_TILE_SHAPE* pTileShape, DXGI_FORMAT Format, D3D12_RESOURCE_DIMENSION Dimension, UINT SampleCount); - static void GetMipDimensions (UINT8 mipSlice, _Inout_ UINT64* pWidth, _Inout_opt_ UINT64* pHeight = nullptr, _Inout_opt_ UINT64* pDepth = nullptr); - static void GetPlaneSubsampledSizeAndFormatForCopyableLayout(UINT PlaneSlice, DXGI_FORMAT Format, UINT Width, UINT Height, _Out_ DXGI_FORMAT& PlaneFormat, _Out_ UINT& MinPlanePitchWidth, _Out_ UINT& PlaneWidth, _Out_ UINT& PlaneHeight); - - static UINT GetDetailTableIndex (DXGI_FORMAT Format); - static UINT GetDetailTableIndexNoThrow (DXGI_FORMAT Format); - static UINT GetDetailTableIndexThrow (DXGI_FORMAT Format); - static bool SupportsDepth (DXGI_FORMAT Format); - static bool SupportsStencil (DXGI_FORMAT Format); -private: - static const FORMAT_DETAIL* GetFormatDetail (DXGI_FORMAT Format); - -}; diff --git a/Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_render_pass.h b/Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_render_pass.h deleted file mode 100644 index c88fbdf..0000000 --- a/Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_render_pass.h +++ /dev/null @@ -1,105 +0,0 @@ -//********************************************************* -// -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License (MIT). -// -//********************************************************* - -#pragma once - -#ifndef __cplusplus -#error D3DX12 requires C++ -#endif - -#include "d3d12.h" -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609) -inline bool operator==(const D3D12_RENDER_PASS_BEGINNING_ACCESS_PRESERVE_LOCAL_PARAMETERS& a, const D3D12_RENDER_PASS_ENDING_ACCESS_PRESERVE_LOCAL_PARAMETERS& b) noexcept -{ - return ((a.AdditionalWidth == b.AdditionalWidth) && (a.AdditionalHeight == b.AdditionalHeight)); -} - -inline bool operator==(const D3D12_RENDER_PASS_BEGINNING_ACCESS_PRESERVE_LOCAL_PARAMETERS& a, const D3D12_RENDER_PASS_BEGINNING_ACCESS_PRESERVE_LOCAL_PARAMETERS& b) noexcept -{ - return ((a.AdditionalWidth == b.AdditionalWidth) && (a.AdditionalHeight == b.AdditionalHeight)); -} - -inline bool operator==(const D3D12_RENDER_PASS_ENDING_ACCESS_PRESERVE_LOCAL_PARAMETERS& a, const D3D12_RENDER_PASS_ENDING_ACCESS_PRESERVE_LOCAL_PARAMETERS& b) noexcept -{ - return ((a.AdditionalWidth == b.AdditionalWidth) && (a.AdditionalHeight == b.AdditionalHeight)); -} -#endif - -inline bool operator==( const D3D12_RENDER_PASS_BEGINNING_ACCESS_CLEAR_PARAMETERS &a, const D3D12_RENDER_PASS_BEGINNING_ACCESS_CLEAR_PARAMETERS &b) noexcept -{ - return a.ClearValue == b.ClearValue; -} - -inline bool operator==( const D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_PARAMETERS &a, const D3D12_RENDER_PASS_ENDING_ACCESS_RESOLVE_PARAMETERS &b) noexcept -{ - if (a.pSrcResource != b.pSrcResource) return false; - if (a.pDstResource != b.pDstResource) return false; - if (a.SubresourceCount != b.SubresourceCount) return false; - if (a.Format != b.Format) return false; - if (a.ResolveMode != b.ResolveMode) return false; - if (a.PreserveResolveSource != b.PreserveResolveSource) return false; - return true; -} - -inline bool operator==( const D3D12_RENDER_PASS_BEGINNING_ACCESS &a, const D3D12_RENDER_PASS_BEGINNING_ACCESS &b) noexcept -{ - if (a.Type != b.Type) return false; - switch (a.Type) - { - case D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_CLEAR: - if (!(a.Clear == b.Clear)) return false; - break; -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609) - case D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_PRESERVE_LOCAL_RENDER: - case D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_PRESERVE_LOCAL_SRV: - case D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_PRESERVE_LOCAL_UAV: - if (!(a.PreserveLocal == b.PreserveLocal)) return false; - break; -#endif - default: - break; - } - return true; -} - -inline bool operator==(const D3D12_RENDER_PASS_ENDING_ACCESS& a, const D3D12_RENDER_PASS_ENDING_ACCESS& b) noexcept -{ - if (a.Type != b.Type) return false; - switch (a.Type) - { - case D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_RESOLVE: - if (!(a.Resolve == b.Resolve)) return false; - break; -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609) - case D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_PRESERVE_LOCAL_RENDER: - case D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_PRESERVE_LOCAL_SRV: - case D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_PRESERVE_LOCAL_UAV: - if (!(a.PreserveLocal == b.PreserveLocal)) return false; - break; -#endif - default: - break; - } - return true; -} - -inline bool operator==( const D3D12_RENDER_PASS_RENDER_TARGET_DESC &a, const D3D12_RENDER_PASS_RENDER_TARGET_DESC &b) noexcept -{ - if (a.cpuDescriptor.ptr != b.cpuDescriptor.ptr) return false; - if (!(a.BeginningAccess == b.BeginningAccess)) return false; - if (!(a.EndingAccess == b.EndingAccess)) return false; - return true; -} -inline bool operator==( const D3D12_RENDER_PASS_DEPTH_STENCIL_DESC &a, const D3D12_RENDER_PASS_DEPTH_STENCIL_DESC &b) noexcept -{ - if (a.cpuDescriptor.ptr != b.cpuDescriptor.ptr) return false; - if (!(a.DepthBeginningAccess == b.DepthBeginningAccess)) return false; - if (!(a.StencilBeginningAccess == b.StencilBeginningAccess)) return false; - if (!(a.DepthEndingAccess == b.DepthEndingAccess)) return false; - if (!(a.StencilEndingAccess == b.StencilEndingAccess)) return false; - return true; -} diff --git a/Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_resource_helpers.h b/Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_resource_helpers.h deleted file mode 100644 index 1a9d22c..0000000 --- a/Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_resource_helpers.h +++ /dev/null @@ -1,602 +0,0 @@ -//********************************************************* -// -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License (MIT). -// -//********************************************************* - -#pragma once - -#ifndef __cplusplus -#error D3DX12 requires C++ -#endif - -#include "d3dx12_property_format_table.h" -#include "d3d12.h" -#include "d3dx12_core.h" -//------------------------------------------------------------------------------------------------ -template -inline void D3D12DecomposeSubresource( UINT Subresource, UINT MipLevels, UINT ArraySize, _Out_ T& MipSlice, _Out_ U& ArraySlice, _Out_ V& PlaneSlice ) noexcept -{ - MipSlice = static_cast(Subresource % MipLevels); - ArraySlice = static_cast((Subresource / MipLevels) % ArraySize); - PlaneSlice = static_cast(Subresource / (MipLevels * ArraySize)); -} - -//------------------------------------------------------------------------------------------------ -// 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) noexcept -{ - for (UINT z = 0; z < NumSlices; ++z) - { - auto pDestSlice = static_cast(pDest->pData) + pDest->SlicePitch * z; - auto pSrcSlice = static_cast(pSrc->pData) + pSrc->SlicePitch * LONG_PTR(z); - for (UINT y = 0; y < NumRows; ++y) - { - memcpy(pDestSlice + pDest->RowPitch * y, - pSrcSlice + pSrc->RowPitch * LONG_PTR(y), - RowSizeInBytes); - } - } -} - -//------------------------------------------------------------------------------------------------ -// Row-by-row memcpy -inline void MemcpySubresource( - _In_ const D3D12_MEMCPY_DEST* pDest, - _In_ const void* pResourceData, - _In_ const D3D12_SUBRESOURCE_INFO* pSrc, - SIZE_T RowSizeInBytes, - UINT NumRows, - UINT NumSlices) noexcept -{ - for (UINT z = 0; z < NumSlices; ++z) - { - auto pDestSlice = static_cast(pDest->pData) + pDest->SlicePitch * z; - auto pSrcSlice = (static_cast(pResourceData) + pSrc->Offset) + pSrc->DepthPitch * ULONG_PTR(z); - for (UINT y = 0; y < NumRows; ++y) - { - memcpy(pDestSlice + pDest->RowPitch * y, - pSrcSlice + pSrc->RowPitch * ULONG_PTR(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) noexcept -{ -#if defined(_MSC_VER) || !defined(_WIN32) - const auto Desc = pDestinationResource->GetDesc(); -#else - D3D12_RESOURCE_DESC tmpDesc; - const auto& Desc = *pDestinationResource->GetDesc(&tmpDesc); -#endif - UINT64 RequiredSize = 0; - - ID3D12Device* pDevice = nullptr; - pDestinationResource->GetDevice(IID_ID3D12Device, reinterpret_cast(&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) noexcept -{ - // Minor validation -#if defined(_MSC_VER) || !defined(_WIN32) - const auto IntermediateDesc = pIntermediate->GetDesc(); - const auto DestinationDesc = pDestinationResource->GetDesc(); -#else - D3D12_RESOURCE_DESC tmpDesc1, tmpDesc2; - const auto& IntermediateDesc = *pIntermediate->GetDesc(&tmpDesc1); - const auto& DestinationDesc = *pDestinationResource->GetDesc(&tmpDesc2); -#endif - 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, nullptr, reinterpret_cast(&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, SIZE_T(pLayouts[i].Footprint.RowPitch) * SIZE_T(pNumRows[i]) }; - MemcpySubresource(&DestData, &pSrcData[i], static_cast(pRowSizesInBytes[i]), pNumRows[i], pLayouts[i].Footprint.Depth); - } - pIntermediate->Unmap(0, nullptr); - - if (DestinationDesc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER) - { - pCmdList->CopyBufferRegion( - pDestinationResource, 0, pIntermediate, pLayouts[0].Offset, pLayouts[0].Footprint.Width); - } - else - { - for (UINT i = 0; i < NumSubresources; ++i) - { - const CD3DX12_TEXTURE_COPY_LOCATION Dst(pDestinationResource, i + FirstSubresource); - const CD3DX12_TEXTURE_COPY_LOCATION Src(pIntermediate, pLayouts[i]); - pCmdList->CopyTextureRegion(&Dst, 0, 0, 0, &Src, nullptr); - } - } - 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_ const void* pResourceData, - _In_reads_(NumSubresources) const D3D12_SUBRESOURCE_INFO* pSrcData) noexcept -{ - // Minor validation -#if defined(_MSC_VER) || !defined(_WIN32) - const auto IntermediateDesc = pIntermediate->GetDesc(); - const auto DestinationDesc = pDestinationResource->GetDesc(); -#else - D3D12_RESOURCE_DESC tmpDesc1, tmpDesc2; - const auto& IntermediateDesc = *pIntermediate->GetDesc(&tmpDesc1); - const auto& DestinationDesc = *pDestinationResource->GetDesc(&tmpDesc2); -#endif - 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, nullptr, reinterpret_cast(&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, SIZE_T(pLayouts[i].Footprint.RowPitch) * SIZE_T(pNumRows[i]) }; - MemcpySubresource(&DestData, pResourceData, &pSrcData[i], static_cast(pRowSizesInBytes[i]), pNumRows[i], pLayouts[i].Footprint.Depth); - } - pIntermediate->Unmap(0, nullptr); - - if (DestinationDesc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER) - { - pCmdList->CopyBufferRegion( - pDestinationResource, 0, pIntermediate, pLayouts[0].Offset, pLayouts[0].Footprint.Width); - } - else - { - for (UINT i = 0; i < NumSubresources; ++i) - { - const CD3DX12_TEXTURE_COPY_LOCATION Dst(pDestinationResource, i + FirstSubresource); - const 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) const D3D12_SUBRESOURCE_DATA* pSrcData) noexcept -{ - UINT64 RequiredSize = 0; - const auto MemToAlloc = static_cast(sizeof(D3D12_PLACED_SUBRESOURCE_FOOTPRINT) + sizeof(UINT) + sizeof(UINT64)) * NumSubresources; - if (MemToAlloc > SIZE_MAX) - { - return 0; - } - void* pMem = HeapAlloc(GetProcessHeap(), 0, static_cast(MemToAlloc)); - if (pMem == nullptr) - { - return 0; - } - auto pLayouts = static_cast(pMem); - auto pRowSizesInBytes = reinterpret_cast(pLayouts + NumSubresources); - auto pNumRows = reinterpret_cast(pRowSizesInBytes + NumSubresources); - -#if defined(_MSC_VER) || !defined(_WIN32) - const auto Desc = pDestinationResource->GetDesc(); -#else - D3D12_RESOURCE_DESC tmpDesc; - const auto& Desc = *pDestinationResource->GetDesc(&tmpDesc); -#endif - ID3D12Device* pDevice = nullptr; - pDestinationResource->GetDevice(IID_ID3D12Device, reinterpret_cast(&pDevice)); - pDevice->GetCopyableFootprints(&Desc, FirstSubresource, NumSubresources, IntermediateOffset, pLayouts, pNumRows, pRowSizesInBytes, &RequiredSize); - pDevice->Release(); - - const UINT64 Result = UpdateSubresources(pCmdList, pDestinationResource, pIntermediate, FirstSubresource, NumSubresources, RequiredSize, pLayouts, pNumRows, pRowSizesInBytes, pSrcData); - HeapFree(GetProcessHeap(), 0, pMem); - return Result; -} - -//------------------------------------------------------------------------------------------------ -// 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_ const void* pResourceData, - _In_reads_(NumSubresources) const D3D12_SUBRESOURCE_INFO* pSrcData) noexcept -{ - UINT64 RequiredSize = 0; - const auto MemToAlloc = static_cast(sizeof(D3D12_PLACED_SUBRESOURCE_FOOTPRINT) + sizeof(UINT) + sizeof(UINT64)) * NumSubresources; - if (MemToAlloc > SIZE_MAX) - { - return 0; - } - void* pMem = HeapAlloc(GetProcessHeap(), 0, static_cast(MemToAlloc)); - if (pMem == nullptr) - { - return 0; - } - auto pLayouts = static_cast(pMem); - auto pRowSizesInBytes = reinterpret_cast(pLayouts + NumSubresources); - auto pNumRows = reinterpret_cast(pRowSizesInBytes + NumSubresources); - -#if defined(_MSC_VER) || !defined(_WIN32) - const auto Desc = pDestinationResource->GetDesc(); -#else - D3D12_RESOURCE_DESC tmpDesc; - const auto& Desc = *pDestinationResource->GetDesc(&tmpDesc); -#endif - ID3D12Device* pDevice = nullptr; - pDestinationResource->GetDevice(IID_ID3D12Device, reinterpret_cast(&pDevice)); - pDevice->GetCopyableFootprints(&Desc, FirstSubresource, NumSubresources, IntermediateOffset, pLayouts, pNumRows, pRowSizesInBytes, &RequiredSize); - pDevice->Release(); - - const UINT64 Result = UpdateSubresources(pCmdList, pDestinationResource, pIntermediate, FirstSubresource, NumSubresources, RequiredSize, pLayouts, pNumRows, pRowSizesInBytes, pResourceData, pSrcData); - HeapFree(GetProcessHeap(), 0, pMem); - return Result; -} - -//------------------------------------------------------------------------------------------------ -// Stack-allocating UpdateSubresources implementation -template -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) const D3D12_SUBRESOURCE_DATA* pSrcData) noexcept -{ - UINT64 RequiredSize = 0; - D3D12_PLACED_SUBRESOURCE_FOOTPRINT Layouts[MaxSubresources]; - UINT NumRows[MaxSubresources]; - UINT64 RowSizesInBytes[MaxSubresources]; - -#if defined(_MSC_VER) || !defined(_WIN32) - const auto Desc = pDestinationResource->GetDesc(); -#else - D3D12_RESOURCE_DESC tmpDesc; - const auto& Desc = *pDestinationResource->GetDesc(&tmpDesc); -#endif - ID3D12Device* pDevice = nullptr; - pDestinationResource->GetDevice(IID_ID3D12Device, reinterpret_cast(&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); -} - -//------------------------------------------------------------------------------------------------ -// Stack-allocating UpdateSubresources implementation -template -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_ const void* pResourceData, - _In_reads_(NumSubresources) const D3D12_SUBRESOURCE_INFO* pSrcData) noexcept -{ - UINT64 RequiredSize = 0; - D3D12_PLACED_SUBRESOURCE_FOOTPRINT Layouts[MaxSubresources]; - UINT NumRows[MaxSubresources]; - UINT64 RowSizesInBytes[MaxSubresources]; - -#if defined(_MSC_VER) || !defined(_WIN32) - const auto Desc = pDestinationResource->GetDesc(); -#else - D3D12_RESOURCE_DESC tmpDesc; - const auto& Desc = *pDestinationResource->GetDesc(&tmpDesc); -#endif - ID3D12Device* pDevice = nullptr; - pDestinationResource->GetDevice(IID_ID3D12Device, reinterpret_cast(&pDevice)); - pDevice->GetCopyableFootprints(&Desc, FirstSubresource, NumSubresources, IntermediateOffset, Layouts, NumRows, RowSizesInBytes, &RequiredSize); - pDevice->Release(); - - return UpdateSubresources(pCmdList, pDestinationResource, pIntermediate, FirstSubresource, NumSubresources, RequiredSize, Layouts, NumRows, RowSizesInBytes, pResourceData, pSrcData); -} - -//------------------------------------------------------------------------------------------------ -constexpr bool D3D12IsLayoutOpaque( D3D12_TEXTURE_LAYOUT Layout ) noexcept -{ return Layout == D3D12_TEXTURE_LAYOUT_UNKNOWN || Layout == D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE; } - -//------------------------------------------------------------------------------------------------ -template< typename T > -inline T D3DX12Align(T uValue, T uAlign) -{ - // Assert power of 2 alignment - D3DX12_ASSERT(0 == (uAlign & (uAlign - 1))); - T uMask = uAlign - 1; - T uResult = (uValue + uMask) & ~uMask; - D3DX12_ASSERT(uResult >= uValue); - D3DX12_ASSERT(0 == (uResult % uAlign)); - return uResult; -} - -//------------------------------------------------------------------------------------------------ -template< typename T > -inline T D3DX12AlignAtLeast(T uValue, T uAlign) -{ - T aligned = D3DX12Align(uValue, uAlign); - return aligned > uAlign ? aligned : uAlign; -} - -inline const CD3DX12_RESOURCE_DESC1* D3DX12ConditionallyExpandAPIDesc( - D3D12_RESOURCE_DESC1& LclDesc, - const D3D12_RESOURCE_DESC1* pDesc) -{ - return D3DX12ConditionallyExpandAPIDesc(static_cast(LclDesc), static_cast(pDesc)); -} - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 606) -//------------------------------------------------------------------------------------------------ -// The difference between D3DX12GetCopyableFootprints and ID3D12Device::GetCopyableFootprints -// is that this one loses a lot of error checking by assuming the arguments are correct -inline bool D3DX12GetCopyableFootprints( - _In_ const D3D12_RESOURCE_DESC1& ResourceDesc, - _In_range_(0, D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, - _In_range_(0, D3D12_REQ_SUBRESOURCES - FirstSubresource) UINT NumSubresources, - UINT64 BaseOffset, - _Out_writes_opt_(NumSubresources) D3D12_PLACED_SUBRESOURCE_FOOTPRINT* pLayouts, - _Out_writes_opt_(NumSubresources) UINT* pNumRows, - _Out_writes_opt_(NumSubresources) UINT64* pRowSizeInBytes, - _Out_opt_ UINT64* pTotalBytes) -{ - constexpr UINT64 uint64_max = ~0ull; - UINT64 TotalBytes = uint64_max; - UINT uSubRes = 0; - - bool bResourceOverflow = false; - TotalBytes = 0; - - const DXGI_FORMAT Format = ResourceDesc.Format; - - CD3DX12_RESOURCE_DESC1 LresourceDesc; - const CD3DX12_RESOURCE_DESC1& resourceDesc = *D3DX12ConditionallyExpandAPIDesc(LresourceDesc, &ResourceDesc); - - // Check if its a valid format - D3DX12_ASSERT(D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::FormatExists(Format)); - - const UINT WidthAlignment = D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetWidthAlignment( Format ); - const UINT HeightAlignment = D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetHeightAlignment( Format ); - const UINT16 DepthAlignment = UINT16( D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetDepthAlignment( Format ) ); - - for (; uSubRes < NumSubresources; ++uSubRes) - { - bool bOverflow = false; - UINT Subresource = FirstSubresource + uSubRes; - - D3DX12_ASSERT(resourceDesc.MipLevels != 0); - UINT subresourceCount = resourceDesc.MipLevels * resourceDesc.ArraySize() * D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetPlaneCount(resourceDesc.Format); - - if (Subresource > subresourceCount) - { - break; - } - - TotalBytes = D3DX12Align< UINT64 >( TotalBytes, D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT ); - - UINT MipLevel, ArraySlice, PlaneSlice; - D3D12DecomposeSubresource(Subresource, resourceDesc.MipLevels, resourceDesc.ArraySize(), /*_Out_*/MipLevel, /*_Out_*/ArraySlice, /*_Out_*/PlaneSlice); - - const UINT64 Width = D3DX12AlignAtLeast(resourceDesc.Width >> MipLevel, WidthAlignment); - const UINT Height = D3DX12AlignAtLeast(resourceDesc.Height >> MipLevel, HeightAlignment); - const UINT16 Depth = D3DX12AlignAtLeast(resourceDesc.Depth() >> MipLevel, DepthAlignment); - - // Adjust for the current PlaneSlice. Most formats have only one plane. - DXGI_FORMAT PlaneFormat; - UINT32 MinPlanePitchWidth, PlaneWidth, PlaneHeight; - D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetPlaneSubsampledSizeAndFormatForCopyableLayout(PlaneSlice, Format, (UINT)Width, Height, /*_Out_*/ PlaneFormat, /*_Out_*/ MinPlanePitchWidth, /* _Out_ */ PlaneWidth, /*_Out_*/ PlaneHeight); - - D3D12_SUBRESOURCE_FOOTPRINT LocalPlacement = {}; - auto& Placement = pLayouts ? pLayouts[uSubRes].Footprint : LocalPlacement; - Placement.Format = PlaneFormat; - Placement.Width = PlaneWidth; - Placement.Height = PlaneHeight; - Placement.Depth = Depth; - - // Calculate row pitch - UINT MinPlaneRowPitch = 0; - D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::CalculateMinimumRowMajorRowPitch(PlaneFormat, MinPlanePitchWidth, MinPlaneRowPitch); - - // Formats with more than one plane choose a larger pitch alignment to ensure that each plane begins on the row - // immediately following the previous plane while still adhering to subresource alignment restrictions. - static_assert( D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT >= D3D12_TEXTURE_DATA_PITCH_ALIGNMENT - && ((D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT % D3D12_TEXTURE_DATA_PITCH_ALIGNMENT) == 0), - "D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT must be >= and evenly divisible by D3D12_TEXTURE_DATA_PITCH_ALIGNMENT." ); - - Placement.RowPitch = D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::Planar(Format) - ? D3DX12Align< UINT >( MinPlaneRowPitch, D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT ) - : D3DX12Align< UINT >( MinPlaneRowPitch, D3D12_TEXTURE_DATA_PITCH_ALIGNMENT ); - - if (pRowSizeInBytes) - { - UINT PlaneRowSize = 0; - D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::CalculateMinimumRowMajorRowPitch(PlaneFormat, PlaneWidth, PlaneRowSize); - - pRowSizeInBytes[uSubRes] = PlaneRowSize; - } - - // Number of rows (accounting for block compression and additional planes) - UINT NumRows = 0; - if (D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::Planar(Format)) - { - NumRows = PlaneHeight; - } - else - { - D3DX12_ASSERT(Height % HeightAlignment == 0); - NumRows = Height / HeightAlignment; - } - - if (pNumRows) - { - pNumRows[uSubRes] = NumRows; - } - - // Offsetting - if (pLayouts) - { - pLayouts[uSubRes].Offset = (bOverflow ? uint64_max : TotalBytes + BaseOffset); - } - - const UINT16 NumSlices = Depth; - const UINT64 SubresourceSize = (NumRows * NumSlices - 1) * Placement.RowPitch + MinPlaneRowPitch; - - // uint64 addition with overflow checking - TotalBytes = TotalBytes + SubresourceSize; - if(TotalBytes < SubresourceSize) - { - TotalBytes = uint64_max; - } - bResourceOverflow = bResourceOverflow || bOverflow; - } - - // Overflow error - if (bResourceOverflow) - { - TotalBytes = uint64_max; - } - - if (pLayouts) - { - memset( pLayouts + uSubRes, -1, sizeof( *pLayouts ) * (NumSubresources - uSubRes) ); - } - if (pNumRows) - { - memset(pNumRows + uSubRes, -1, sizeof(*pNumRows) * (NumSubresources - uSubRes)); - } - if (pRowSizeInBytes) - { - memset(pRowSizeInBytes + uSubRes, -1, sizeof(*pRowSizeInBytes) * (NumSubresources - uSubRes)); - } - if (pTotalBytes) - { - *pTotalBytes = TotalBytes; - } - if(TotalBytes == uint64_max) - { - return false; - } - return true; -} - -//------------------------------------------------------------------------------------------------ -inline D3D12_RESOURCE_DESC1 D3DX12ResourceDesc0ToDesc1(D3D12_RESOURCE_DESC const& desc0) -{ - D3D12_RESOURCE_DESC1 desc1; - desc1.Dimension = desc0.Dimension; - desc1.Alignment = desc0.Alignment; - desc1.Width = desc0.Width; - desc1.Height = desc0.Height; - desc1.DepthOrArraySize = desc0.DepthOrArraySize; - desc1.MipLevels = desc0.MipLevels; - desc1.Format = desc0.Format; - desc1.SampleDesc.Count = desc0.SampleDesc.Count; - desc1.SampleDesc.Quality = desc0.SampleDesc.Quality; - desc1.Layout = desc0.Layout; - desc1.Flags = desc0.Flags; - desc1.SamplerFeedbackMipRegion.Width = 0; - desc1.SamplerFeedbackMipRegion.Height = 0; - desc1.SamplerFeedbackMipRegion.Depth = 0; - return desc1; -} - -//------------------------------------------------------------------------------------------------ -inline bool D3DX12GetCopyableFootprints( - _In_ const D3D12_RESOURCE_DESC& pResourceDesc, - _In_range_(0, D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, - _In_range_(0, D3D12_REQ_SUBRESOURCES - FirstSubresource) UINT NumSubresources, - UINT64 BaseOffset, - _Out_writes_opt_(NumSubresources) D3D12_PLACED_SUBRESOURCE_FOOTPRINT* pLayouts, - _Out_writes_opt_(NumSubresources) UINT* pNumRows, - _Out_writes_opt_(NumSubresources) UINT64* pRowSizeInBytes, - _Out_opt_ UINT64* pTotalBytes) -{ - // From D3D12_RESOURCE_DESC to D3D12_RESOURCE_DESC1 - D3D12_RESOURCE_DESC1 desc = D3DX12ResourceDesc0ToDesc1(pResourceDesc); - return D3DX12GetCopyableFootprints( - *static_cast(&desc),// From D3D12_RESOURCE_DESC1 to CD3DX12_RESOURCE_DESC1 - FirstSubresource, - NumSubresources, - BaseOffset, - pLayouts, - pNumRows, - pRowSizeInBytes, - pTotalBytes); -} - -#endif // D3D12_SDK_VERSION >= 606 - diff --git a/Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_root_signature.h b/Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_root_signature.h deleted file mode 100644 index e194d30..0000000 --- a/Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_root_signature.h +++ /dev/null @@ -1,1227 +0,0 @@ -//********************************************************* -// -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License (MIT). -// -//********************************************************* - -#pragma once - -#ifndef __cplusplus -#error D3DX12 requires C++ -#endif - -#include "d3d12.h" -#include "d3dx12_default.h" - -//------------------------------------------------------------------------------------------------ -struct CD3DX12_DESCRIPTOR_RANGE : public D3D12_DESCRIPTOR_RANGE -{ - CD3DX12_DESCRIPTOR_RANGE() = default; - explicit CD3DX12_DESCRIPTOR_RANGE(const D3D12_DESCRIPTOR_RANGE &o) noexcept : - 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) noexcept - { - 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) noexcept - { - 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) noexcept - { - 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() = default; - explicit CD3DX12_ROOT_DESCRIPTOR_TABLE(const D3D12_ROOT_DESCRIPTOR_TABLE &o) noexcept : - D3D12_ROOT_DESCRIPTOR_TABLE(o) - {} - CD3DX12_ROOT_DESCRIPTOR_TABLE( - UINT numDescriptorRanges, - _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* _pDescriptorRanges) noexcept - { - Init(numDescriptorRanges, _pDescriptorRanges); - } - - inline void Init( - UINT numDescriptorRanges, - _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE* _pDescriptorRanges) noexcept - { - 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) noexcept - { - rootDescriptorTable.NumDescriptorRanges = numDescriptorRanges; - rootDescriptorTable.pDescriptorRanges = _pDescriptorRanges; - } -}; - -//------------------------------------------------------------------------------------------------ -struct CD3DX12_ROOT_CONSTANTS : public D3D12_ROOT_CONSTANTS -{ - CD3DX12_ROOT_CONSTANTS() = default; - explicit CD3DX12_ROOT_CONSTANTS(const D3D12_ROOT_CONSTANTS &o) noexcept : - D3D12_ROOT_CONSTANTS(o) - {} - CD3DX12_ROOT_CONSTANTS( - UINT num32BitValues, - UINT shaderRegister, - UINT registerSpace = 0) noexcept - { - Init(num32BitValues, shaderRegister, registerSpace); - } - - inline void Init( - UINT num32BitValues, - UINT shaderRegister, - UINT registerSpace = 0) noexcept - { - Init(*this, num32BitValues, shaderRegister, registerSpace); - } - - static inline void Init( - _Out_ D3D12_ROOT_CONSTANTS &rootConstants, - UINT num32BitValues, - UINT shaderRegister, - UINT registerSpace = 0) noexcept - { - rootConstants.Num32BitValues = num32BitValues; - rootConstants.ShaderRegister = shaderRegister; - rootConstants.RegisterSpace = registerSpace; - } -}; - -//------------------------------------------------------------------------------------------------ -struct CD3DX12_ROOT_DESCRIPTOR : public D3D12_ROOT_DESCRIPTOR -{ - CD3DX12_ROOT_DESCRIPTOR() = default; - explicit CD3DX12_ROOT_DESCRIPTOR(const D3D12_ROOT_DESCRIPTOR &o) noexcept : - D3D12_ROOT_DESCRIPTOR(o) - {} - CD3DX12_ROOT_DESCRIPTOR( - UINT shaderRegister, - UINT registerSpace = 0) noexcept - { - Init(shaderRegister, registerSpace); - } - - inline void Init( - UINT shaderRegister, - UINT registerSpace = 0) noexcept - { - Init(*this, shaderRegister, registerSpace); - } - - static inline void Init(_Out_ D3D12_ROOT_DESCRIPTOR &table, UINT shaderRegister, UINT registerSpace = 0) noexcept - { - table.ShaderRegister = shaderRegister; - table.RegisterSpace = registerSpace; - } -}; - -//------------------------------------------------------------------------------------------------ -struct CD3DX12_ROOT_PARAMETER : public D3D12_ROOT_PARAMETER -{ - CD3DX12_ROOT_PARAMETER() = default; - explicit CD3DX12_ROOT_PARAMETER(const D3D12_ROOT_PARAMETER &o) noexcept : - 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) noexcept - { - 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) noexcept - { - 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) noexcept - { - 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) noexcept - { - 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) noexcept - { - 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) noexcept - { - InitAsDescriptorTable(*this, numDescriptorRanges, pDescriptorRanges, visibility); - } - - inline void InitAsConstants( - UINT num32BitValues, - UINT shaderRegister, - UINT registerSpace = 0, - D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) noexcept - { - InitAsConstants(*this, num32BitValues, shaderRegister, registerSpace, visibility); - } - - inline void InitAsConstantBufferView( - UINT shaderRegister, - UINT registerSpace = 0, - D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) noexcept - { - InitAsConstantBufferView(*this, shaderRegister, registerSpace, visibility); - } - - inline void InitAsShaderResourceView( - UINT shaderRegister, - UINT registerSpace = 0, - D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) noexcept - { - InitAsShaderResourceView(*this, shaderRegister, registerSpace, visibility); - } - - inline void InitAsUnorderedAccessView( - UINT shaderRegister, - UINT registerSpace = 0, - D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) noexcept - { - InitAsUnorderedAccessView(*this, shaderRegister, registerSpace, visibility); - } -}; - -//------------------------------------------------------------------------------------------------ -struct CD3DX12_STATIC_SAMPLER_DESC : public D3D12_STATIC_SAMPLER_DESC -{ - CD3DX12_STATIC_SAMPLER_DESC() = default; - explicit CD3DX12_STATIC_SAMPLER_DESC(const D3D12_STATIC_SAMPLER_DESC &o) noexcept : - 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) noexcept - { - 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) noexcept - { - 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) noexcept - { - Init( - *this, - shaderRegister, - filter, - addressU, - addressV, - addressW, - mipLODBias, - maxAnisotropy, - comparisonFunc, - borderColor, - minLOD, - maxLOD, - shaderVisibility, - registerSpace); - } -}; - -//------------------------------------------------------------------------------------------------ -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609) -struct CD3DX12_STATIC_SAMPLER_DESC1 : public D3D12_STATIC_SAMPLER_DESC1 -{ - CD3DX12_STATIC_SAMPLER_DESC1() = default; - explicit CD3DX12_STATIC_SAMPLER_DESC1(const D3D12_STATIC_SAMPLER_DESC &o) noexcept - { - memcpy(this, &o, sizeof(D3D12_STATIC_SAMPLER_DESC)); - Flags = D3D12_SAMPLER_FLAGS::D3D12_SAMPLER_FLAG_NONE; - } - explicit CD3DX12_STATIC_SAMPLER_DESC1(const D3D12_STATIC_SAMPLER_DESC1 & o) noexcept : - D3D12_STATIC_SAMPLER_DESC1(o) - {} - CD3DX12_STATIC_SAMPLER_DESC1( - 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, - D3D12_SAMPLER_FLAGS flags = D3D12_SAMPLER_FLAGS::D3D12_SAMPLER_FLAG_NONE) noexcept - { - Init( - shaderRegister, - filter, - addressU, - addressV, - addressW, - mipLODBias, - maxAnisotropy, - comparisonFunc, - borderColor, - minLOD, - maxLOD, - shaderVisibility, - registerSpace, - flags); - } - - static inline void Init( - _Out_ D3D12_STATIC_SAMPLER_DESC1 &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, - D3D12_SAMPLER_FLAGS flags = D3D12_SAMPLER_FLAGS::D3D12_SAMPLER_FLAG_NONE) noexcept - { - 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; - samplerDesc.Flags = flags; - } - 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, - D3D12_SAMPLER_FLAGS flags = D3D12_SAMPLER_FLAGS::D3D12_SAMPLER_FLAG_NONE) noexcept - { - Init( - *this, - shaderRegister, - filter, - addressU, - addressV, - addressW, - mipLODBias, - maxAnisotropy, - comparisonFunc, - borderColor, - minLOD, - maxLOD, - shaderVisibility, - registerSpace, - flags); - } -}; -#endif // D3D12_SDK_VERSION >= 609 - -//------------------------------------------------------------------------------------------------ -struct CD3DX12_ROOT_SIGNATURE_DESC : public D3D12_ROOT_SIGNATURE_DESC -{ - CD3DX12_ROOT_SIGNATURE_DESC() = default; - explicit CD3DX12_ROOT_SIGNATURE_DESC(const D3D12_ROOT_SIGNATURE_DESC &o) noexcept : - 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 = nullptr, - D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) noexcept - { - Init(numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); - } - CD3DX12_ROOT_SIGNATURE_DESC(CD3DX12_DEFAULT) noexcept - { - Init(0, nullptr, 0, nullptr, 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 = nullptr, - D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) noexcept - { - 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 = nullptr, - D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) noexcept - { - 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() = default; - explicit CD3DX12_DESCRIPTOR_RANGE1(const D3D12_DESCRIPTOR_RANGE1 &o) noexcept : - 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) noexcept - { - 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) noexcept - { - 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) noexcept - { - 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() = default; - explicit CD3DX12_ROOT_DESCRIPTOR_TABLE1(const D3D12_ROOT_DESCRIPTOR_TABLE1 &o) noexcept : - D3D12_ROOT_DESCRIPTOR_TABLE1(o) - {} - CD3DX12_ROOT_DESCRIPTOR_TABLE1( - UINT numDescriptorRanges, - _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* _pDescriptorRanges) noexcept - { - Init(numDescriptorRanges, _pDescriptorRanges); - } - - inline void Init( - UINT numDescriptorRanges, - _In_reads_opt_(numDescriptorRanges) const D3D12_DESCRIPTOR_RANGE1* _pDescriptorRanges) noexcept - { - 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) noexcept - { - rootDescriptorTable.NumDescriptorRanges = numDescriptorRanges; - rootDescriptorTable.pDescriptorRanges = _pDescriptorRanges; - } -}; - -//------------------------------------------------------------------------------------------------ -struct CD3DX12_ROOT_DESCRIPTOR1 : public D3D12_ROOT_DESCRIPTOR1 -{ - CD3DX12_ROOT_DESCRIPTOR1() = default; - explicit CD3DX12_ROOT_DESCRIPTOR1(const D3D12_ROOT_DESCRIPTOR1 &o) noexcept : - D3D12_ROOT_DESCRIPTOR1(o) - {} - CD3DX12_ROOT_DESCRIPTOR1( - UINT shaderRegister, - UINT registerSpace = 0, - D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE) noexcept - { - Init(shaderRegister, registerSpace, flags); - } - - inline void Init( - UINT shaderRegister, - UINT registerSpace = 0, - D3D12_ROOT_DESCRIPTOR_FLAGS flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE) noexcept - { - 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) noexcept - { - table.ShaderRegister = shaderRegister; - table.RegisterSpace = registerSpace; - table.Flags = flags; - } -}; - -//------------------------------------------------------------------------------------------------ -struct CD3DX12_ROOT_PARAMETER1 : public D3D12_ROOT_PARAMETER1 -{ - CD3DX12_ROOT_PARAMETER1() = default; - explicit CD3DX12_ROOT_PARAMETER1(const D3D12_ROOT_PARAMETER1 &o) noexcept : - 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) noexcept - { - 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) noexcept - { - 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) noexcept - { - 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) noexcept - { - 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) noexcept - { - 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) noexcept - { - InitAsDescriptorTable(*this, numDescriptorRanges, pDescriptorRanges, visibility); - } - - inline void InitAsConstants( - UINT num32BitValues, - UINT shaderRegister, - UINT registerSpace = 0, - D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL) noexcept - { - 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) noexcept - { - 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) noexcept - { - 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) noexcept - { - InitAsUnorderedAccessView(*this, shaderRegister, registerSpace, flags, visibility); - } -}; - -//------------------------------------------------------------------------------------------------ -struct CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC : public D3D12_VERSIONED_ROOT_SIGNATURE_DESC -{ - CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC() = default; - explicit CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(const D3D12_VERSIONED_ROOT_SIGNATURE_DESC &o) noexcept : - D3D12_VERSIONED_ROOT_SIGNATURE_DESC(o) - {} - explicit CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(const D3D12_ROOT_SIGNATURE_DESC &o) noexcept - { - Version = D3D_ROOT_SIGNATURE_VERSION_1_0; - Desc_1_0 = o; - } - explicit CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(const D3D12_ROOT_SIGNATURE_DESC1 &o) noexcept - { - Version = D3D_ROOT_SIGNATURE_VERSION_1_1; - Desc_1_1 = o; - } -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609) - explicit CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(const D3D12_ROOT_SIGNATURE_DESC2& o) noexcept - { - Version = D3D_ROOT_SIGNATURE_VERSION_1_2; - Desc_1_2 = o; - } -#endif - 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 = nullptr, - D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) noexcept - { - 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 = nullptr, - D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) noexcept - { - Init_1_1(numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags); - } - CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC(CD3DX12_DEFAULT) noexcept - { - Init_1_1(0, nullptr, 0, nullptr, 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 = nullptr, - D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) noexcept - { - 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 = nullptr, - D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) noexcept - { - 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 = nullptr, - D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) noexcept - { - 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 = nullptr, - D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) noexcept - { - 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; - } - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609) - static inline void Init_1_2( - _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_DESC1* _pStaticSamplers = nullptr, - D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_NONE) noexcept - { - desc.Version = D3D_ROOT_SIGNATURE_VERSION_1_2; - desc.Desc_1_2.NumParameters = numParameters; - desc.Desc_1_2.pParameters = _pParameters; - desc.Desc_1_2.NumStaticSamplers = numStaticSamplers; - desc.Desc_1_2.pStaticSamplers = _pStaticSamplers; - desc.Desc_1_2.Flags = flags; - } -#endif -}; - -//------------------------------------------------------------------------------------------------ -struct CD3DX12_CPU_DESCRIPTOR_HANDLE : public D3D12_CPU_DESCRIPTOR_HANDLE -{ - CD3DX12_CPU_DESCRIPTOR_HANDLE() = default; - explicit CD3DX12_CPU_DESCRIPTOR_HANDLE(const D3D12_CPU_DESCRIPTOR_HANDLE &o) noexcept : - D3D12_CPU_DESCRIPTOR_HANDLE(o) - {} - CD3DX12_CPU_DESCRIPTOR_HANDLE(CD3DX12_DEFAULT) noexcept { ptr = 0; } - CD3DX12_CPU_DESCRIPTOR_HANDLE(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE &other, INT offsetScaledByIncrementSize) noexcept - { - InitOffsetted(other, offsetScaledByIncrementSize); - } - CD3DX12_CPU_DESCRIPTOR_HANDLE(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE &other, INT offsetInDescriptors, UINT descriptorIncrementSize) noexcept - { - InitOffsetted(other, offsetInDescriptors, descriptorIncrementSize); - } - CD3DX12_CPU_DESCRIPTOR_HANDLE& Offset(INT offsetInDescriptors, UINT descriptorIncrementSize) noexcept - { - ptr = SIZE_T(INT64(ptr) + INT64(offsetInDescriptors) * INT64(descriptorIncrementSize)); - return *this; - } - CD3DX12_CPU_DESCRIPTOR_HANDLE& Offset(INT offsetScaledByIncrementSize) noexcept - { - ptr = SIZE_T(INT64(ptr) + INT64(offsetScaledByIncrementSize)); - return *this; - } - bool operator==(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE& other) const noexcept - { - return (ptr == other.ptr); - } - bool operator!=(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE& other) const noexcept - { - return (ptr != other.ptr); - } - CD3DX12_CPU_DESCRIPTOR_HANDLE &operator=(const D3D12_CPU_DESCRIPTOR_HANDLE &other) noexcept - { - ptr = other.ptr; - return *this; - } - - inline void InitOffsetted(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize) noexcept - { - InitOffsetted(*this, base, offsetScaledByIncrementSize); - } - - inline void InitOffsetted(_In_ const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize) noexcept - { - InitOffsetted(*this, base, offsetInDescriptors, descriptorIncrementSize); - } - - static inline void InitOffsetted(_Out_ D3D12_CPU_DESCRIPTOR_HANDLE &handle, _In_ const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize) noexcept - { - handle.ptr = SIZE_T(INT64(base.ptr) + INT64(offsetScaledByIncrementSize)); - } - - static inline void InitOffsetted(_Out_ D3D12_CPU_DESCRIPTOR_HANDLE &handle, _In_ const D3D12_CPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize) noexcept - { - handle.ptr = SIZE_T(INT64(base.ptr) + INT64(offsetInDescriptors) * INT64(descriptorIncrementSize)); - } -}; - -//------------------------------------------------------------------------------------------------ -struct CD3DX12_GPU_DESCRIPTOR_HANDLE : public D3D12_GPU_DESCRIPTOR_HANDLE -{ - CD3DX12_GPU_DESCRIPTOR_HANDLE() = default; - explicit CD3DX12_GPU_DESCRIPTOR_HANDLE(const D3D12_GPU_DESCRIPTOR_HANDLE &o) noexcept : - D3D12_GPU_DESCRIPTOR_HANDLE(o) - {} - CD3DX12_GPU_DESCRIPTOR_HANDLE(CD3DX12_DEFAULT) noexcept { ptr = 0; } - CD3DX12_GPU_DESCRIPTOR_HANDLE(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE &other, INT offsetScaledByIncrementSize) noexcept - { - InitOffsetted(other, offsetScaledByIncrementSize); - } - CD3DX12_GPU_DESCRIPTOR_HANDLE(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE &other, INT offsetInDescriptors, UINT descriptorIncrementSize) noexcept - { - InitOffsetted(other, offsetInDescriptors, descriptorIncrementSize); - } - CD3DX12_GPU_DESCRIPTOR_HANDLE& Offset(INT offsetInDescriptors, UINT descriptorIncrementSize) noexcept - { - ptr = UINT64(INT64(ptr) + INT64(offsetInDescriptors) * INT64(descriptorIncrementSize)); - return *this; - } - CD3DX12_GPU_DESCRIPTOR_HANDLE& Offset(INT offsetScaledByIncrementSize) noexcept - { - ptr = UINT64(INT64(ptr) + INT64(offsetScaledByIncrementSize)); - return *this; - } - inline bool operator==(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE& other) const noexcept - { - return (ptr == other.ptr); - } - inline bool operator!=(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE& other) const noexcept - { - return (ptr != other.ptr); - } - CD3DX12_GPU_DESCRIPTOR_HANDLE &operator=(const D3D12_GPU_DESCRIPTOR_HANDLE &other) noexcept - { - ptr = other.ptr; - return *this; - } - - inline void InitOffsetted(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize) noexcept - { - InitOffsetted(*this, base, offsetScaledByIncrementSize); - } - - inline void InitOffsetted(_In_ const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize) noexcept - { - InitOffsetted(*this, base, offsetInDescriptors, descriptorIncrementSize); - } - - static inline void InitOffsetted(_Out_ D3D12_GPU_DESCRIPTOR_HANDLE &handle, _In_ const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetScaledByIncrementSize) noexcept - { - handle.ptr = UINT64(INT64(base.ptr) + INT64(offsetScaledByIncrementSize)); - } - - static inline void InitOffsetted(_Out_ D3D12_GPU_DESCRIPTOR_HANDLE &handle, _In_ const D3D12_GPU_DESCRIPTOR_HANDLE &base, INT offsetInDescriptors, UINT descriptorIncrementSize) noexcept - { - handle.ptr = UINT64(INT64(base.ptr) + INT64(offsetInDescriptors) * INT64(descriptorIncrementSize)); - } -}; - -//------------------------------------------------------------------------------------------------ -// 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. -#ifdef __clang__ -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wcovered-switch-default" -#endif - -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) noexcept -{ - if (ppErrorBlob != nullptr) - { - *ppErrorBlob = nullptr; - } - - 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: -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609) - case D3D_ROOT_SIGNATURE_VERSION_1_2: -#endif - { - 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) : nullptr; - if (ParametersSize > 0 && pParameters == nullptr) - { - hr = E_OUTOFMEMORY; - } - auto pParameters_1_0 = static_cast(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) : nullptr; - if (DescriptorRangesSize > 0 && pDescriptorRanges == nullptr) - { - hr = E_OUTOFMEMORY; - } - auto pDescriptorRanges_1_0 = static_cast(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; - } - break; - - default: - break; - } - } - } - - D3D12_STATIC_SAMPLER_DESC* pStaticSamplers = nullptr; -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609) - if (desc_1_1.NumStaticSamplers > 0 && pRootSignatureDesc->Version == D3D_ROOT_SIGNATURE_VERSION_1_2) - { - const SIZE_T SamplersSize = sizeof(D3D12_STATIC_SAMPLER_DESC) * desc_1_1.NumStaticSamplers; - pStaticSamplers = static_cast(HeapAlloc(GetProcessHeap(), 0, SamplersSize)); - - if (pStaticSamplers == nullptr) - { - hr = E_OUTOFMEMORY; - } - else - { - const D3D12_ROOT_SIGNATURE_DESC2& desc_1_2 = pRootSignatureDesc->Desc_1_2; - for (UINT n = 0; n < desc_1_1.NumStaticSamplers; ++n) - { - if ((desc_1_2.pStaticSamplers[n].Flags & ~D3D12_SAMPLER_FLAG_UINT_BORDER_COLOR) != 0) - { - hr = E_INVALIDARG; - break; - } - memcpy(pStaticSamplers + n, desc_1_2.pStaticSamplers + n, sizeof(D3D12_STATIC_SAMPLER_DESC)); - } - } - } -#endif - - if (SUCCEEDED(hr)) - { - const CD3DX12_ROOT_SIGNATURE_DESC desc_1_0(desc_1_1.NumParameters, pParameters_1_0, desc_1_1.NumStaticSamplers, pStaticSamplers == nullptr ? desc_1_1.pStaticSamplers : 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) - { - auto pDescriptorRanges_1_0 = pParameters_1_0[n].DescriptorTable.pDescriptorRanges; - HeapFree(GetProcessHeap(), 0, reinterpret_cast(const_cast(pDescriptorRanges_1_0))); - } - } - HeapFree(GetProcessHeap(), 0, pParameters); - } - - if (pStaticSamplers) - { - HeapFree(GetProcessHeap(), 0, pStaticSamplers); - } - - return hr; - } - - default: - break; - } - break; - - case D3D_ROOT_SIGNATURE_VERSION_1_1: - switch (pRootSignatureDesc->Version) - { - case D3D_ROOT_SIGNATURE_VERSION_1_0: - case D3D_ROOT_SIGNATURE_VERSION_1_1: - return D3D12SerializeVersionedRootSignature(pRootSignatureDesc, ppBlob, ppErrorBlob); - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609) - case D3D_ROOT_SIGNATURE_VERSION_1_2: - { - HRESULT hr = S_OK; - const D3D12_ROOT_SIGNATURE_DESC1& desc_1_1 = pRootSignatureDesc->Desc_1_1; - - D3D12_STATIC_SAMPLER_DESC* pStaticSamplers = nullptr; - if (desc_1_1.NumStaticSamplers > 0) - { - const SIZE_T SamplersSize = sizeof(D3D12_STATIC_SAMPLER_DESC) * desc_1_1.NumStaticSamplers; - pStaticSamplers = static_cast(HeapAlloc(GetProcessHeap(), 0, SamplersSize)); - - if (pStaticSamplers == nullptr) - { - hr = E_OUTOFMEMORY; - } - else - { - const D3D12_ROOT_SIGNATURE_DESC2& desc_1_2 = pRootSignatureDesc->Desc_1_2; - for (UINT n = 0; n < desc_1_1.NumStaticSamplers; ++n) - { - if ((desc_1_2.pStaticSamplers[n].Flags & ~D3D12_SAMPLER_FLAG_UINT_BORDER_COLOR) != 0) - { - hr = E_INVALIDARG; - break; - } - memcpy(pStaticSamplers + n, desc_1_2.pStaticSamplers + n, sizeof(D3D12_STATIC_SAMPLER_DESC)); - } - } - } - - if (SUCCEEDED(hr)) - { - const CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC desc(desc_1_1.NumParameters, desc_1_1.pParameters, desc_1_1.NumStaticSamplers, pStaticSamplers == nullptr ? desc_1_1.pStaticSamplers : pStaticSamplers, desc_1_1.Flags); - hr = D3D12SerializeVersionedRootSignature(&desc, ppBlob, ppErrorBlob); - } - - if (pStaticSamplers) - { - HeapFree(GetProcessHeap(), 0, pStaticSamplers); - } - - return hr; - } -#endif - - default: - break; - } - break; - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609) - case D3D_ROOT_SIGNATURE_VERSION_1_2: -#endif - default: - return D3D12SerializeVersionedRootSignature(pRootSignatureDesc, ppBlob, ppErrorBlob); - } - - return E_INVALIDARG; -} - -#ifdef __clang__ -#pragma clang diagnostic pop -#endif diff --git a/Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_state_object.h b/Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_state_object.h deleted file mode 100644 index 3f0ffc7..0000000 --- a/Juliet/src/Graphics/D3D12/AgilitySDK/d3dx12/d3dx12_state_object.h +++ /dev/null @@ -1,2205 +0,0 @@ -//********************************************************* -// -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License (MIT). -// -//********************************************************* - -#pragma once - -#ifndef __cplusplus -#error D3DX12 requires C++ -#endif - -#include "d3dx12_default.h" -#include "d3d12.h" -#include "d3dx12_core.h" - -//================================================================================================ -// D3DX12 State Object Creation Helpers -// -// Helper classes for creating new style state objects out of an arbitrary set of subobjects. -// Uses STL -// -// Start by instantiating CD3DX12_STATE_OBJECT_DESC (see its public methods). -// One of its methods is CreateSubobject(), which has a comment showing a couple of options for -// defining subobjects using the helper classes for each subobject (CD3DX12_DXIL_LIBRARY_SUBOBJECT -// etc.). The subobject helpers each have methods specific to the subobject for configuring its -// contents. -// -//================================================================================================ - -#ifndef D3DX12_USE_ATL -#include -#define D3DX12_COM_PTR Microsoft::WRL::ComPtr -#define D3DX12_COM_PTR_GET(x) x.Get() -#define D3DX12_COM_PTR_ADDRESSOF(x) x.GetAddressOf() -#else -#include -#define D3DX12_COM_PTR ATL::CComPtr -#define D3DX12_COM_PTR_GET(x) x.p -#define D3DX12_COM_PTR_ADDRESSOF(x) &x.p -#endif - -//------------------------------------------------------------------------------------------------ -class CD3DX12_STATE_OBJECT_DESC -{ -public: - CD3DX12_STATE_OBJECT_DESC() noexcept - { - Init(D3D12_STATE_OBJECT_TYPE_COLLECTION); - } - CD3DX12_STATE_OBJECT_DESC(D3D12_STATE_OBJECT_TYPE Type) noexcept - { - Init(Type); - } - void SetStateObjectType(D3D12_STATE_OBJECT_TYPE Type) noexcept { m_Desc.Type = Type; } - CD3DX12_STATE_OBJECT_DESC(const CD3DX12_STATE_OBJECT_DESC& other) = delete; - CD3DX12_STATE_OBJECT_DESC& operator=(const CD3DX12_STATE_OBJECT_DESC& other) = delete; - CD3DX12_STATE_OBJECT_DESC(CD3DX12_STATE_OBJECT_DESC&& other) = default; - CD3DX12_STATE_OBJECT_DESC& operator=(CD3DX12_STATE_OBJECT_DESC&& other) = default; - operator const D3D12_STATE_OBJECT_DESC& () - { - // Do final preparation work - for (auto& ownedSubobject : m_OwnedSubobjectHelpers) - { - ownedSubobject->Finalize(); - } - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612) - m_RepointedSubobjectVectors.clear(); - m_RepointedPrograms.clear(); -#endif - m_RepointedAssociations.clear(); - m_SubobjectArray.clear(); - m_SubobjectArray.reserve(m_Desc.NumSubobjects); - // Flatten subobjects into an array (each flattened subobject still has a - // member that's a pointer to its desc that's not flattened) - for (auto Iter = m_SubobjectList.begin(); - Iter != m_SubobjectList.end(); Iter++) - { - m_SubobjectArray.push_back(*Iter); - // Store new location in array so we can redirect pointers contained in subobjects - Iter->pSubobjectArrayLocation = &m_SubobjectArray.back(); - } - // For subobjects with pointer fields, create a new copy of those subobject definitions - // with fixed pointers - for (UINT i = 0; i < m_Desc.NumSubobjects; i++) - { - if (m_SubobjectArray[i].Type == D3D12_STATE_SUBOBJECT_TYPE_SUBOBJECT_TO_EXPORTS_ASSOCIATION) - { - auto pOriginalSubobjectAssociation = - static_cast(m_SubobjectArray[i].pDesc); - D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION Repointed = *pOriginalSubobjectAssociation; - auto pWrapper = - static_cast(pOriginalSubobjectAssociation->pSubobjectToAssociate); - Repointed.pSubobjectToAssociate = pWrapper->pSubobjectArrayLocation; - m_RepointedAssociations.push_back(Repointed); - m_SubobjectArray[i].pDesc = &m_RepointedAssociations.back(); - } -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612) - else if (m_SubobjectArray[i].Type == D3D12_STATE_SUBOBJECT_TYPE_GENERIC_PROGRAM) - { - auto originalGenericProgramDesc = - static_cast(m_SubobjectArray[i].pDesc); - D3D12_GENERIC_PROGRAM_DESC Repointed = *originalGenericProgramDesc; - if (originalGenericProgramDesc->NumSubobjects > 0) - { - m_RepointedSubobjectVectors.emplace_back(std::vector()); - std::vector& repointedGenericProgramSubobjects = m_RepointedSubobjectVectors.back(); - repointedGenericProgramSubobjects.resize(originalGenericProgramDesc->NumSubobjects); - for (UINT s = 0; s < originalGenericProgramDesc->NumSubobjects; s++) - { - auto pWrapper = - static_cast(originalGenericProgramDesc->ppSubobjects[s]); - repointedGenericProgramSubobjects[s] = pWrapper->pSubobjectArrayLocation; - } - // Below: using ugly way to get pointer in case .data() is not defined - Repointed.ppSubobjects = &repointedGenericProgramSubobjects[0]; - } - m_RepointedPrograms.push_back(Repointed); - m_SubobjectArray[i].pDesc = &m_RepointedPrograms.back(); - } -#endif - } - // Below: using ugly way to get pointer in case .data() is not defined - m_Desc.pSubobjects = m_Desc.NumSubobjects ? &m_SubobjectArray[0] : nullptr; - return m_Desc; - } - operator const D3D12_STATE_OBJECT_DESC* () - { - // Cast calls the above final preparation work - return &static_cast(*this); - } - - // CreateSubobject creates a sububject helper (e.g. CD3DX12_HIT_GROUP_SUBOBJECT) - // whose lifetime is owned by this class. - // e.g. - // - // CD3DX12_STATE_OBJECT_DESC Collection1(D3D12_STATE_OBJECT_TYPE_COLLECTION); - // auto Lib0 = Collection1.CreateSubobject(); - // Lib0->SetDXILLibrary(&pMyAppDxilLibs[0]); - // Lib0->DefineExport(L"rayGenShader0"); // in practice these export listings might be - // // data/engine driven - // etc. - // - // Alternatively, users can instantiate sububject helpers explicitly, such as via local - // variables instead, passing the state object desc that should point to it into the helper - // constructor (or call mySubobjectHelper.AddToStateObject(Collection1)). - // In this alternative scenario, the user must keep the subobject alive as long as the state - // object it is associated with is alive, else its pointer references will be stale. - // e.g. - // - // CD3DX12_STATE_OBJECT_DESC RaytracingState2(D3D12_STATE_OBJECT_TYPE_RAYTRACING_PIPELINE); - // CD3DX12_DXIL_LIBRARY_SUBOBJECT LibA(RaytracingState2); - // LibA.SetDXILLibrary(&pMyAppDxilLibs[4]); // not manually specifying exports - // // - meaning all exports in the libraries - // // are exported - // etc. - - template - T* CreateSubobject() - { - T* pSubobject = new T(*this); - m_OwnedSubobjectHelpers.emplace_back(pSubobject); - return pSubobject; - } - -private: - D3D12_STATE_SUBOBJECT* TrackSubobject(D3D12_STATE_SUBOBJECT_TYPE Type, void* pDesc) - { - SUBOBJECT_WRAPPER Subobject; - Subobject.pSubobjectArrayLocation = nullptr; - Subobject.Type = Type; - Subobject.pDesc = pDesc; - m_SubobjectList.push_back(Subobject); - m_Desc.NumSubobjects++; - return &m_SubobjectList.back(); - } - void Init(D3D12_STATE_OBJECT_TYPE Type) noexcept - { - SetStateObjectType(Type); - m_Desc.pSubobjects = nullptr; - m_Desc.NumSubobjects = 0; - m_SubobjectList.clear(); - m_SubobjectArray.clear(); - m_RepointedAssociations.clear(); -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612) - m_RepointedSubobjectVectors.clear(); - m_RepointedPrograms.clear(); -#endif - } - typedef struct SUBOBJECT_WRAPPER : public D3D12_STATE_SUBOBJECT - { - D3D12_STATE_SUBOBJECT* pSubobjectArrayLocation; // new location when flattened into array - // for repointing pointers in subobjects - } SUBOBJECT_WRAPPER; - D3D12_STATE_OBJECT_DESC m_Desc; - std::list m_SubobjectList; // Pointers to list nodes handed out so - // these can be edited live - std::vector m_SubobjectArray; // Built at the end, copying list contents - - std::list - m_RepointedAssociations; // subobject type that contains pointers to other subobjects, - // repointed to flattened array - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612) - std::list> - m_RepointedSubobjectVectors; - std::list - m_RepointedPrograms; -#endif - - template - class StringContainer - { - public: - CStr LocalCopy(CStr string, bool bSingleString = false) - { - if (string) - { - if (bSingleString) - { - m_Strings.clear(); - m_Strings.push_back(string); - } - else - { - m_Strings.push_back(string); - } - return m_Strings.back().c_str(); - } - else - { - return nullptr; - } - } - void clear() noexcept { m_Strings.clear(); } - private: - std::list m_Strings; - }; - -public: - class SUBOBJECT_HELPER_BASE - { - public: - SUBOBJECT_HELPER_BASE() noexcept { Init(); } - virtual ~SUBOBJECT_HELPER_BASE() = default; - virtual D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept = 0; - SUBOBJECT_HELPER_BASE(const SUBOBJECT_HELPER_BASE& other) = delete; - SUBOBJECT_HELPER_BASE& operator=(const SUBOBJECT_HELPER_BASE& other) = delete; - SUBOBJECT_HELPER_BASE(SUBOBJECT_HELPER_BASE&& other) = default; - SUBOBJECT_HELPER_BASE& operator=(SUBOBJECT_HELPER_BASE&& other) = default; - void AddToStateObject(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) - { - m_pSubobject = ContainingStateObject.TrackSubobject(Type(), Data()); - } - virtual void Finalize() {}; - operator const D3D12_STATE_SUBOBJECT& () const noexcept { return *m_pSubobject; } - protected: - virtual void* Data() noexcept = 0; - void Init() noexcept { m_pSubobject = nullptr; } - D3D12_STATE_SUBOBJECT* m_pSubobject; - }; - -private: - std::list> m_OwnedSubobjectHelpers; - - friend class CD3DX12_DXIL_LIBRARY_SUBOBJECT; - friend class CD3DX12_EXISTING_COLLECTION_SUBOBJECT; - friend class CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT; - friend class CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION; - friend class CD3DX12_HIT_GROUP_SUBOBJECT; - friend class CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT; - friend class CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT; - friend class CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT; - friend class CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT; - friend class CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT; - friend class CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT; - friend class CD3DX12_NODE_MASK_SUBOBJECT; - //TODO: SDK Version check should include all the newly added subobject type for the public release. - // The SDK version check will be changed based on when we release state objects. -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612) - friend class CD3DX12_GENERIC_PROGRAM_SUBOBJECT; - friend class CD3DX12_WORK_GRAPH_SUBOBJECT; - friend class CD3DX12_STREAM_OUTPUT_SUBOBJECT; - friend class CD3DX12_BLEND_SUBOBJECT; - friend class CD3DX12_RASTERIZER_SUBOBJECT; - friend class CD3DX12_DEPTH_STENCIL2_SUBOBJECT; - friend class CD3DX12_INPUT_LAYOUT_SUBOBJECT; - friend class CD3DX12_IB_STRIP_CUT_VALUE_SUBOBJECT; - friend class CD3DX12_PRIMITIVE_TOPOLOGY_SUBOBJECT; - friend class CD3DX12_RENDER_TARGET_FORMATS_SUBOBJECT; - friend class CD3DX12_DEPTH_STENCIL_FORMAT_SUBOBJECT; - friend class CD3DX12_SAMPLE_DESC_SUBOBJECT; - friend class CD3DX12_FLAGS_SUBOBJECT; - friend class CD3DX12_VIEW_INSTANCING_SUBOBJECT; - friend class CD3DX12_DEPTH_STENCIL_SUBOBJECT; - friend class CD3DX12_DEPTH_STENCIL1_SUBOBJECT; - friend class CD3DX12_SAMPLE_MASK_SUBOBJECT; - friend class CD3DX12_NODE_OUTPUT_OVERRIDES; - friend class CD3DX12_SHADER_NODE; - friend class CD3DX12_BROADCASTING_LAUNCH_NODE_OVERRIDES; - friend class CD3DX12_COALESCING_LAUNCH_NODE_OVERRIDES; - friend class CD3DX12_THREAD_LAUNCH_NODE_OVERRIDES; - friend class CD3DX12_COMMON_COMPUTE_NODE_OVERRIDES; -#endif // D3D12_SDK_VERSION >= 612 -}; - -//------------------------------------------------------------------------------------------------ -class CD3DX12_DXIL_LIBRARY_SUBOBJECT - : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE -{ -public: - CD3DX12_DXIL_LIBRARY_SUBOBJECT() noexcept - { - Init(); - } - CD3DX12_DXIL_LIBRARY_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) - { - Init(); - AddToStateObject(ContainingStateObject); - } - CD3DX12_DXIL_LIBRARY_SUBOBJECT(const CD3DX12_DXIL_LIBRARY_SUBOBJECT& other) = delete; - CD3DX12_DXIL_LIBRARY_SUBOBJECT& operator=(const CD3DX12_DXIL_LIBRARY_SUBOBJECT& other) = delete; - CD3DX12_DXIL_LIBRARY_SUBOBJECT(CD3DX12_DXIL_LIBRARY_SUBOBJECT&& other) = default; - CD3DX12_DXIL_LIBRARY_SUBOBJECT& operator=(CD3DX12_DXIL_LIBRARY_SUBOBJECT&& other) = default; - void SetDXILLibrary(const D3D12_SHADER_BYTECODE* pCode) noexcept - { - static const D3D12_SHADER_BYTECODE Default = {}; - m_Desc.DXILLibrary = pCode ? *pCode : Default; - } - void DefineExport( - LPCWSTR Name, - LPCWSTR ExportToRename = nullptr, - D3D12_EXPORT_FLAGS Flags = D3D12_EXPORT_FLAG_NONE) - { - D3D12_EXPORT_DESC Export; - Export.Name = m_Strings.LocalCopy(Name); - Export.ExportToRename = m_Strings.LocalCopy(ExportToRename); - Export.Flags = Flags; - m_Exports.push_back(Export); - m_Desc.pExports = &m_Exports[0]; // using ugly way to get pointer in case .data() is not defined - m_Desc.NumExports = static_cast(m_Exports.size()); - } - template - void DefineExports(LPCWSTR(&Exports)[N]) - { - for (UINT i = 0; i < N; i++) - { - DefineExport(Exports[i]); - } - } - void DefineExports(const LPCWSTR* Exports, UINT N) - { - for (UINT i = 0; i < N; i++) - { - DefineExport(Exports[i]); - } - } - D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override - { - return D3D12_STATE_SUBOBJECT_TYPE_DXIL_LIBRARY; - } - operator const D3D12_DXIL_LIBRARY_DESC&() const noexcept { return m_Desc; } -private: - void Init() noexcept - { - SUBOBJECT_HELPER_BASE::Init(); - m_Desc = {}; - m_Strings.clear(); - m_Exports.clear(); - } - void* Data() noexcept override { return &m_Desc; } - D3D12_DXIL_LIBRARY_DESC m_Desc; - CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; - std::vector m_Exports; -}; - -//------------------------------------------------------------------------------------------------ -class CD3DX12_EXISTING_COLLECTION_SUBOBJECT - : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE -{ -public: - CD3DX12_EXISTING_COLLECTION_SUBOBJECT() noexcept - { - Init(); - } - CD3DX12_EXISTING_COLLECTION_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) - { - Init(); - AddToStateObject(ContainingStateObject); - } - CD3DX12_EXISTING_COLLECTION_SUBOBJECT(const CD3DX12_EXISTING_COLLECTION_SUBOBJECT& other) = delete; - CD3DX12_EXISTING_COLLECTION_SUBOBJECT& operator=(const CD3DX12_EXISTING_COLLECTION_SUBOBJECT& other) = delete; - CD3DX12_EXISTING_COLLECTION_SUBOBJECT(CD3DX12_EXISTING_COLLECTION_SUBOBJECT&& other) = default; - CD3DX12_EXISTING_COLLECTION_SUBOBJECT& operator=(CD3DX12_EXISTING_COLLECTION_SUBOBJECT&& other) = default; - void SetExistingCollection(ID3D12StateObject*pExistingCollection) noexcept - { - m_Desc.pExistingCollection = pExistingCollection; - m_CollectionRef = pExistingCollection; - } - void DefineExport( - LPCWSTR Name, - LPCWSTR ExportToRename = nullptr, - D3D12_EXPORT_FLAGS Flags = D3D12_EXPORT_FLAG_NONE) - { - D3D12_EXPORT_DESC Export; - Export.Name = m_Strings.LocalCopy(Name); - Export.ExportToRename = m_Strings.LocalCopy(ExportToRename); - Export.Flags = Flags; - m_Exports.push_back(Export); - m_Desc.pExports = &m_Exports[0]; // using ugly way to get pointer in case .data() is not defined - m_Desc.NumExports = static_cast(m_Exports.size()); - } - template - void DefineExports(LPCWSTR(&Exports)[N]) - { - for (UINT i = 0; i < N; i++) - { - DefineExport(Exports[i]); - } - } - void DefineExports(const LPCWSTR* Exports, UINT N) - { - for (UINT i = 0; i < N; i++) - { - DefineExport(Exports[i]); - } - } - D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override - { - return D3D12_STATE_SUBOBJECT_TYPE_EXISTING_COLLECTION; - } - operator const D3D12_EXISTING_COLLECTION_DESC&() const noexcept { return m_Desc; } -private: - void Init() noexcept - { - SUBOBJECT_HELPER_BASE::Init(); - m_Desc = {}; - m_CollectionRef = nullptr; - m_Strings.clear(); - m_Exports.clear(); - } - void* Data() noexcept override { return &m_Desc; } - D3D12_EXISTING_COLLECTION_DESC m_Desc; - D3DX12_COM_PTR m_CollectionRef; - CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; - std::vector m_Exports; -}; - -//------------------------------------------------------------------------------------------------ -class CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT - : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE -{ -public: - CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT() noexcept - { - Init(); - } - CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) - { - Init(); - AddToStateObject(ContainingStateObject); - } - CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT(const CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT& other) = delete; - CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT& operator=(const CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT& other) = delete; - CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT(CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT&& other) = default; - CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT& operator=(CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT&& other) = default; - void SetSubobjectToAssociate(const D3D12_STATE_SUBOBJECT& SubobjectToAssociate) noexcept - { - m_Desc.pSubobjectToAssociate = &SubobjectToAssociate; - } - void AddExport(LPCWSTR Export) - { - m_Desc.NumExports++; - m_Exports.push_back(m_Strings.LocalCopy(Export)); - m_Desc.pExports = &m_Exports[0]; // using ugly way to get pointer in case .data() is not defined - } - template - void AddExports(LPCWSTR (&Exports)[N]) - { - for (UINT i = 0; i < N; i++) - { - AddExport(Exports[i]); - } - } - void AddExports(const LPCWSTR* Exports, UINT N) - { - for (UINT i = 0; i < N; i++) - { - AddExport(Exports[i]); - } - } - D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override - { - return D3D12_STATE_SUBOBJECT_TYPE_SUBOBJECT_TO_EXPORTS_ASSOCIATION; - } - operator const D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION&() const noexcept { return m_Desc; } -private: - void Init() noexcept - { - SUBOBJECT_HELPER_BASE::Init(); - m_Desc = {}; - m_Strings.clear(); - m_Exports.clear(); - } - void* Data() noexcept override { return &m_Desc; } - D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION m_Desc; - CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; - std::vector m_Exports; -}; - -//------------------------------------------------------------------------------------------------ -class CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION - : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE -{ -public: - CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION() noexcept - { - Init(); - } - CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) - { - Init(); - AddToStateObject(ContainingStateObject); - } - CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION(const CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION& other) = delete; - CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION& operator=(const CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION& other) = delete; - CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION(CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION&& other) = default; - CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION& operator=(CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION&& other) = default; - void SetSubobjectNameToAssociate(LPCWSTR SubobjectToAssociate) - { - m_Desc.SubobjectToAssociate = m_SubobjectName.LocalCopy(SubobjectToAssociate, true); - } - void AddExport(LPCWSTR Export) - { - m_Desc.NumExports++; - m_Exports.push_back(m_Strings.LocalCopy(Export)); - m_Desc.pExports = &m_Exports[0]; // using ugly way to get pointer in case .data() is not defined - } - template - void AddExports(LPCWSTR (&Exports)[N]) - { - for (UINT i = 0; i < N; i++) - { - AddExport(Exports[i]); - } - } - void AddExports(const LPCWSTR* Exports, UINT N) - { - for (UINT i = 0; i < N; i++) - { - AddExport(Exports[i]); - } - } - D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override - { - return D3D12_STATE_SUBOBJECT_TYPE_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION; - } - operator const D3D12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION&() const noexcept { return m_Desc; } -private: - void Init() noexcept - { - SUBOBJECT_HELPER_BASE::Init(); - m_Desc = {}; - m_Strings.clear(); - m_SubobjectName.clear(); - m_Exports.clear(); - } - void* Data() noexcept override { return &m_Desc; } - D3D12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION m_Desc; - CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; - CD3DX12_STATE_OBJECT_DESC::StringContainer m_SubobjectName; - std::vector m_Exports; -}; - -//------------------------------------------------------------------------------------------------ -class CD3DX12_HIT_GROUP_SUBOBJECT - : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE -{ -public: - CD3DX12_HIT_GROUP_SUBOBJECT() noexcept - { - Init(); - } - CD3DX12_HIT_GROUP_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) - { - Init(); - AddToStateObject(ContainingStateObject); - } - CD3DX12_HIT_GROUP_SUBOBJECT(const CD3DX12_HIT_GROUP_SUBOBJECT& other) = delete; - CD3DX12_HIT_GROUP_SUBOBJECT& operator=(const CD3DX12_HIT_GROUP_SUBOBJECT& other) = delete; - CD3DX12_HIT_GROUP_SUBOBJECT(CD3DX12_HIT_GROUP_SUBOBJECT&& other) = default; - CD3DX12_HIT_GROUP_SUBOBJECT& operator=(CD3DX12_HIT_GROUP_SUBOBJECT&& other) = default; - void SetHitGroupExport(LPCWSTR exportName) - { - m_Desc.HitGroupExport = m_Strings[0].LocalCopy(exportName, true); - } - void SetHitGroupType(D3D12_HIT_GROUP_TYPE Type) noexcept { m_Desc.Type = Type; } - void SetAnyHitShaderImport(LPCWSTR importName) - { - m_Desc.AnyHitShaderImport = m_Strings[1].LocalCopy(importName, true); - } - void SetClosestHitShaderImport(LPCWSTR importName) - { - m_Desc.ClosestHitShaderImport = m_Strings[2].LocalCopy(importName, true); - } - void SetIntersectionShaderImport(LPCWSTR importName) - { - m_Desc.IntersectionShaderImport = m_Strings[3].LocalCopy(importName, true); - } - D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override - { - return D3D12_STATE_SUBOBJECT_TYPE_HIT_GROUP; - } - operator const D3D12_HIT_GROUP_DESC&() const noexcept { return m_Desc; } -private: - void Init() noexcept - { - SUBOBJECT_HELPER_BASE::Init(); - m_Desc = {}; - for (UINT i = 0; i < m_NumStrings; i++) - { - m_Strings[i].clear(); - } - } - void* Data() noexcept override { return &m_Desc; } - D3D12_HIT_GROUP_DESC m_Desc; - static constexpr UINT m_NumStrings = 4; - CD3DX12_STATE_OBJECT_DESC::StringContainer - m_Strings[m_NumStrings]; // one string for every entrypoint name -}; - -//------------------------------------------------------------------------------------------------ -class CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT - : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE -{ -public: - CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT() noexcept - { - Init(); - } - CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) - { - Init(); - AddToStateObject(ContainingStateObject); - } - CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT(const CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT& other) = delete; - CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT& operator=(const CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT& other) = delete; - CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT(CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT&& other) = default; - CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT& operator=(CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT&& other) = default; - void Config(UINT MaxPayloadSizeInBytes, UINT MaxAttributeSizeInBytes) noexcept - { - m_Desc.MaxPayloadSizeInBytes = MaxPayloadSizeInBytes; - m_Desc.MaxAttributeSizeInBytes = MaxAttributeSizeInBytes; - } - D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override - { - return D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_SHADER_CONFIG; - } - operator const D3D12_RAYTRACING_SHADER_CONFIG&() const noexcept { return m_Desc; } -private: - void Init() noexcept - { - SUBOBJECT_HELPER_BASE::Init(); - m_Desc = {}; - } - void* Data() noexcept override { return &m_Desc; } - D3D12_RAYTRACING_SHADER_CONFIG m_Desc; -}; - -//------------------------------------------------------------------------------------------------ -class CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT - : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE -{ -public: - CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT() noexcept - { - Init(); - } - CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) - { - Init(); - AddToStateObject(ContainingStateObject); - } - CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT(const CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT& other) = delete; - CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT& operator=(const CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT& other) = delete; - CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT(CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT&& other) = default; - CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT& operator=(CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT&& other) = default; - void Config(UINT MaxTraceRecursionDepth) noexcept - { - m_Desc.MaxTraceRecursionDepth = MaxTraceRecursionDepth; - } - D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override - { - return D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_PIPELINE_CONFIG; - } - operator const D3D12_RAYTRACING_PIPELINE_CONFIG&() const noexcept { return m_Desc; } -private: - void Init() noexcept - { - SUBOBJECT_HELPER_BASE::Init(); - m_Desc = {}; - } - void* Data() noexcept override { return &m_Desc; } - D3D12_RAYTRACING_PIPELINE_CONFIG m_Desc; -}; - -//------------------------------------------------------------------------------------------------ -class CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT - : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE -{ -public: - CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT() noexcept - { - Init(); - } - CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) - { - Init(); - AddToStateObject(ContainingStateObject); - } - CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT(const CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT& other) = delete; - CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT& operator=(const CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT& other) = delete; - CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT(CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT&& other) = default; - CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT& operator=(CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT&& other) = default; - void Config(UINT MaxTraceRecursionDepth, D3D12_RAYTRACING_PIPELINE_FLAGS Flags) noexcept - { - m_Desc.MaxTraceRecursionDepth = MaxTraceRecursionDepth; - m_Desc.Flags = Flags; - } - D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override - { - return D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_PIPELINE_CONFIG1; - } - operator const D3D12_RAYTRACING_PIPELINE_CONFIG1&() const noexcept { return m_Desc; } -private: - void Init() noexcept - { - SUBOBJECT_HELPER_BASE::Init(); - m_Desc = {}; - } - void* Data() noexcept override { return &m_Desc; } - D3D12_RAYTRACING_PIPELINE_CONFIG1 m_Desc; -}; - -//------------------------------------------------------------------------------------------------ -class CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT - : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE -{ -public: - CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT() noexcept - { - Init(); - } - CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) - { - Init(); - AddToStateObject(ContainingStateObject); - } - CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT(const CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT& other) = delete; - CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT& operator=(const CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT& other) = delete; - CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT(CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT&& other) = default; - CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT& operator=(CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT&& other) = default; - void SetRootSignature(ID3D12RootSignature* pRootSig) noexcept - { - m_pRootSig = pRootSig; - } - D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override - { - return D3D12_STATE_SUBOBJECT_TYPE_GLOBAL_ROOT_SIGNATURE; - } - operator ID3D12RootSignature*() const noexcept { return D3DX12_COM_PTR_GET(m_pRootSig); } -private: - void Init() noexcept - { - SUBOBJECT_HELPER_BASE::Init(); - m_pRootSig = nullptr; - } - void* Data() noexcept override { return D3DX12_COM_PTR_ADDRESSOF(m_pRootSig); } - D3DX12_COM_PTR m_pRootSig; -}; - -//------------------------------------------------------------------------------------------------ -class CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT - : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE -{ -public: - CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT() noexcept - { - Init(); - } - CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) - { - Init(); - AddToStateObject(ContainingStateObject); - } - CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT(const CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT& other) = delete; - CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT& operator=(const CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT& other) = delete; - CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT(CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT&& other) = default; - CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT& operator=(CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT&& other) = default; - void SetRootSignature(ID3D12RootSignature* pRootSig) noexcept - { - m_pRootSig = pRootSig; - } - D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override - { - return D3D12_STATE_SUBOBJECT_TYPE_LOCAL_ROOT_SIGNATURE; - } - operator ID3D12RootSignature*() const noexcept { return D3DX12_COM_PTR_GET(m_pRootSig); } -private: - void Init() noexcept - { - SUBOBJECT_HELPER_BASE::Init(); - m_pRootSig = nullptr; - } - void* Data() noexcept override { return D3DX12_COM_PTR_ADDRESSOF(m_pRootSig); } - D3DX12_COM_PTR m_pRootSig; -}; - -//------------------------------------------------------------------------------------------------ -class CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT - : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE -{ -public: - CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT() noexcept - { - Init(); - } - CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) - { - Init(); - AddToStateObject(ContainingStateObject); - } - CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT(const CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT& other) = delete; - CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT& operator=(const CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT& other) = delete; - CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT(CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT&& other) = default; - CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT& operator=(CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT&& other) = default; - void SetFlags(D3D12_STATE_OBJECT_FLAGS Flags) noexcept - { - m_Desc.Flags = Flags; - } - D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override - { - return D3D12_STATE_SUBOBJECT_TYPE_STATE_OBJECT_CONFIG; - } - operator const D3D12_STATE_OBJECT_CONFIG&() const noexcept { return m_Desc; } -private: - void Init() noexcept - { - SUBOBJECT_HELPER_BASE::Init(); - m_Desc = {}; - } - void* Data() noexcept override { return &m_Desc; } - D3D12_STATE_OBJECT_CONFIG m_Desc; -}; - -//------------------------------------------------------------------------------------------------ -class CD3DX12_NODE_MASK_SUBOBJECT - : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE -{ -public: - CD3DX12_NODE_MASK_SUBOBJECT() noexcept - { - Init(); - } - CD3DX12_NODE_MASK_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) - { - Init(); - AddToStateObject(ContainingStateObject); - } - CD3DX12_NODE_MASK_SUBOBJECT(const CD3DX12_NODE_MASK_SUBOBJECT& other) = delete; - CD3DX12_NODE_MASK_SUBOBJECT& operator=(const CD3DX12_NODE_MASK_SUBOBJECT& other) = delete; - CD3DX12_NODE_MASK_SUBOBJECT(CD3DX12_NODE_MASK_SUBOBJECT&& other) = default; - CD3DX12_NODE_MASK_SUBOBJECT& operator=(CD3DX12_NODE_MASK_SUBOBJECT&& other) = default; - void SetNodeMask(UINT NodeMask) noexcept - { - m_Desc.NodeMask = NodeMask; - } - D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override - { - return D3D12_STATE_SUBOBJECT_TYPE_NODE_MASK; - } - operator const D3D12_NODE_MASK&() const noexcept { return m_Desc; } -private: - void Init() noexcept - { - SUBOBJECT_HELPER_BASE::Init(); - m_Desc = {}; - } - void* Data() noexcept override { return &m_Desc; } - D3D12_NODE_MASK m_Desc; -}; - -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612) -//------------------------------------------------------------------------------------------------ -class CD3DX12_STREAM_OUTPUT_SUBOBJECT - : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE -{ -public: - CD3DX12_STREAM_OUTPUT_SUBOBJECT() - { - Init(); - } - CD3DX12_STREAM_OUTPUT_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) - { - Init(); - AddToStateObject(ContainingStateObject); - } - void SetSODeclEntries(const D3D12_SO_DECLARATION_ENTRY* soDeclEntries, UINT numEntries) - { - m_soDecalEntries.resize(numEntries); - for (UINT i = 0; i < numEntries; i++) - { - m_soDecalEntries[i] = D3D12_SO_DECLARATION_ENTRY{ - soDeclEntries[i].Stream, - m_Strings.LocalCopy(soDeclEntries[i].SemanticName), - soDeclEntries[i].SemanticIndex, - soDeclEntries[i].StartComponent, - soDeclEntries[i].ComponentCount, - soDeclEntries[i].OutputSlot - }; - } - // Below: using ugly way to get pointer in case .data() is not defined - m_Desc.pSODeclaration = &m_soDecalEntries[0]; - m_Desc.NumEntries = numEntries; - } - void SetBufferStrides(const UINT* bufferStrides, UINT numStrides) - { - m_Desc.pBufferStrides = bufferStrides; - m_Desc.NumStrides = numStrides; - } - void SetRasterizedStream(UINT rasterizedStream) - { - m_Desc.RasterizedStream = rasterizedStream; - } - D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override - { - return D3D12_STATE_SUBOBJECT_TYPE_STREAM_OUTPUT; - } - operator const D3D12_STREAM_OUTPUT_DESC& () const noexcept { return m_Desc; } - -private: - void Init() - { - SUBOBJECT_HELPER_BASE::Init(); - m_Desc = {}; - } - void* Data() noexcept override { return &m_Desc; } - D3D12_STREAM_OUTPUT_DESC m_Desc; - CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; - std::vector m_soDecalEntries; -}; - -//------------------------------------------------------------------------------------------------ -class CD3DX12_BLEND_SUBOBJECT - : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE -{ -public: - CD3DX12_BLEND_SUBOBJECT() - { - Init(); - } - CD3DX12_BLEND_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) - { - Init(); - AddToStateObject(ContainingStateObject); - } - void SetAlphaToCoverageEnable(bool alphaToCoverageEnable) - { - m_Desc.AlphaToCoverageEnable = alphaToCoverageEnable; - } - void SetIndependentBlendEnable(bool independentBlendEnable) - { - m_Desc.IndependentBlendEnable = independentBlendEnable; - } - void SetRenderTarget(UINT renderTargetIndex, const D3D12_RENDER_TARGET_BLEND_DESC& renderTargetBlendDesc) - { - m_Desc.RenderTarget[renderTargetIndex].BlendEnable = renderTargetBlendDesc.BlendEnable; - m_Desc.RenderTarget[renderTargetIndex].BlendOp = renderTargetBlendDesc.BlendOp; - m_Desc.RenderTarget[renderTargetIndex].BlendOpAlpha = renderTargetBlendDesc.BlendOpAlpha; - m_Desc.RenderTarget[renderTargetIndex].DestBlend = renderTargetBlendDesc.DestBlend; - m_Desc.RenderTarget[renderTargetIndex].DestBlendAlpha = renderTargetBlendDesc.DestBlendAlpha; - m_Desc.RenderTarget[renderTargetIndex].LogicOp = renderTargetBlendDesc.LogicOp; - m_Desc.RenderTarget[renderTargetIndex].LogicOpEnable = renderTargetBlendDesc.LogicOpEnable; - m_Desc.RenderTarget[renderTargetIndex].RenderTargetWriteMask = renderTargetBlendDesc.RenderTargetWriteMask; - m_Desc.RenderTarget[renderTargetIndex].SrcBlend = renderTargetBlendDesc.SrcBlend; - m_Desc.RenderTarget[renderTargetIndex].SrcBlendAlpha = renderTargetBlendDesc.SrcBlendAlpha; - } - D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override - { - return D3D12_STATE_SUBOBJECT_TYPE_BLEND; - } - operator const D3D12_BLEND_DESC& () const noexcept { return m_Desc; } -private: - void Init() noexcept - { - SUBOBJECT_HELPER_BASE::Init(); - m_Desc = CD3DX12_BLEND_DESC(D3D12_DEFAULT); - } - void* Data() noexcept override { return &m_Desc; } - CD3DX12_BLEND_DESC m_Desc; -}; - -//------------------------------------------------------------------------------------------------ -class CD3DX12_RASTERIZER_SUBOBJECT - : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE -{ -public: - CD3DX12_RASTERIZER_SUBOBJECT() - { - Init(); - } - CD3DX12_RASTERIZER_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) - { - Init(); - AddToStateObject(ContainingStateObject); - } - void SetFillMode(D3D12_FILL_MODE fillMode) - { - m_Desc.FillMode = fillMode; - } - void SetCullMode(D3D12_CULL_MODE cullMode) - { - m_Desc.CullMode = cullMode; - } - void SetFrontCounterClockwise(BOOL frontCounterClockwise) - { - m_Desc.FrontCounterClockwise = frontCounterClockwise; - } - void SetDepthBias(FLOAT depthBias) - { - m_Desc.DepthBias = depthBias; - } - void SetDepthBiasClamp(FLOAT depthBiasClamp) - { - m_Desc.DepthBiasClamp = depthBiasClamp; - } - void SetSlopeScaledDepthBias(FLOAT slopeScaledDepthBias) - { - m_Desc.SlopeScaledDepthBias = slopeScaledDepthBias; - } - void SetDepthClipEnable(BOOL depthClipEnable) - { - m_Desc.DepthClipEnable = depthClipEnable; - } - void SetLineRasterizationMode(D3D12_LINE_RASTERIZATION_MODE lineRasterizationMode) - { - m_Desc.LineRasterizationMode = lineRasterizationMode; - } - void SetForcedSampleCount(UINT forcedSampleCount) - { - m_Desc.ForcedSampleCount = forcedSampleCount; - } - void SetConservativeRaster(D3D12_CONSERVATIVE_RASTERIZATION_MODE conservativeRaster) - { - m_Desc.ConservativeRaster = conservativeRaster; - } - D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override - { - return D3D12_STATE_SUBOBJECT_TYPE_RASTERIZER; - } - operator const D3D12_RASTERIZER_DESC2& () const noexcept { return m_Desc; } -private: - void Init() noexcept - { - SUBOBJECT_HELPER_BASE::Init(); - m_Desc = CD3DX12_RASTERIZER_DESC2(D3D12_DEFAULT); - } - void* Data() noexcept override { return &m_Desc; } - CD3DX12_RASTERIZER_DESC2 m_Desc; -}; - -//------------------------------------------------------------------------------------------------ -class CD3DX12_DEPTH_STENCIL2_SUBOBJECT - : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE -{ -public: - CD3DX12_DEPTH_STENCIL2_SUBOBJECT() - { - Init(); - } - CD3DX12_DEPTH_STENCIL2_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) - { - Init(); - AddToStateObject(ContainingStateObject); - } - void SetDepthEnable(BOOL depthEnable) - { - m_Desc.DepthEnable = depthEnable; - } - void SetDepthWriteMask(D3D12_DEPTH_WRITE_MASK depthWriteMask) - { - m_Desc.DepthWriteMask = depthWriteMask; - } - void SetDepthFunc(D3D12_COMPARISON_FUNC depthFunc) - { - m_Desc.DepthFunc = depthFunc; - } - void SetStencilEnable(BOOL stencilEnable) - { - m_Desc.StencilEnable = stencilEnable; - } - void SetFrontFace(D3D12_DEPTH_STENCILOP_DESC1 frontFace) - { - m_Desc.FrontFace = { - frontFace.StencilFailOp, - frontFace.StencilDepthFailOp, - frontFace.StencilPassOp, - frontFace.StencilFunc, - frontFace.StencilReadMask, - frontFace.StencilWriteMask - }; - } - void SetBackFace(D3D12_DEPTH_STENCILOP_DESC1 backFace) - { - m_Desc.BackFace = { - backFace.StencilFailOp, - backFace.StencilDepthFailOp, - backFace.StencilPassOp, - backFace.StencilFunc, - backFace.StencilReadMask, - backFace.StencilWriteMask - }; - } - void SetDepthBoundsTestEnable(BOOL depthBoundsTestEnable) - { - m_Desc.DepthBoundsTestEnable = depthBoundsTestEnable; - } - D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override - { - return D3D12_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL2; - } - operator const D3D12_DEPTH_STENCIL_DESC2& () const noexcept { return m_Desc; } -private: - void Init() noexcept - { - SUBOBJECT_HELPER_BASE::Init(); - m_Desc = CD3DX12_DEPTH_STENCIL_DESC2(D3D12_DEFAULT); - } - void* Data() noexcept override { return &m_Desc; } - CD3DX12_DEPTH_STENCIL_DESC2 m_Desc; -}; - -//------------------------------------------------------------------------------------------------ -class CD3DX12_INPUT_LAYOUT_SUBOBJECT - : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE -{ -public: - CD3DX12_INPUT_LAYOUT_SUBOBJECT() - { - Init(); - } - CD3DX12_INPUT_LAYOUT_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) - { - Init(); - AddToStateObject(ContainingStateObject); - } - void AddInputLayoutElementDesc(D3D12_INPUT_ELEMENT_DESC inputLayoutElementDesc) - { - m_inputLayoutElements.emplace_back( - D3D12_INPUT_ELEMENT_DESC{ - m_Strings.LocalCopy(inputLayoutElementDesc.SemanticName), - inputLayoutElementDesc.SemanticIndex, - inputLayoutElementDesc.Format, - inputLayoutElementDesc.InputSlot, - inputLayoutElementDesc.AlignedByteOffset, - inputLayoutElementDesc.InputSlotClass, - inputLayoutElementDesc.InstanceDataStepRate - }); - ++m_numElements; - } - D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override - { - return D3D12_STATE_SUBOBJECT_TYPE_INPUT_LAYOUT; - } - operator const D3D12_INPUT_LAYOUT_DESC& () const noexcept { return m_Desc; } - virtual void Finalize() override - { - if (m_numElements > 0) - { - std::list::iterator inputLayoutIt = m_inputLayoutElements.begin(); - m_inputLayoutElementsVector.resize(m_numElements); - for (UINT i = 0; inputLayoutIt != m_inputLayoutElements.end(); i++, inputLayoutIt++) - { - m_inputLayoutElementsVector[i] = *inputLayoutIt; - } - // Below: using ugly way to get pointer in case .data() is not defined - m_Desc.pInputElementDescs = &m_inputLayoutElementsVector[0]; - } - m_Desc.NumElements = m_numElements; - } -private: - void Init() noexcept - { - SUBOBJECT_HELPER_BASE::Init(); - m_Desc = {}; - m_Desc.pInputElementDescs = nullptr; - m_numElements = 0; - m_inputLayoutElements.clear(); - m_inputLayoutElementsVector.clear(); - } - void* Data() noexcept override { return &m_Desc; } - D3D12_INPUT_LAYOUT_DESC m_Desc; - std::list m_inputLayoutElements; - std::vector m_inputLayoutElementsVector; - UINT m_numElements; - CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; -}; - -//------------------------------------------------------------------------------------------------ -class CD3DX12_IB_STRIP_CUT_VALUE_SUBOBJECT - : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE -{ -public: - CD3DX12_IB_STRIP_CUT_VALUE_SUBOBJECT() - { - Init(); - } - CD3DX12_IB_STRIP_CUT_VALUE_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) - { - Init(); - AddToStateObject(ContainingStateObject); - } - void SetIBStripCutValue(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE ibStripCutValue) - { - m_Desc = ibStripCutValue; - } - D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override - { - return D3D12_STATE_SUBOBJECT_TYPE_IB_STRIP_CUT_VALUE; - } - operator const D3D12_INDEX_BUFFER_STRIP_CUT_VALUE& () const noexcept { return m_Desc; } -private: - void Init() noexcept - { - SUBOBJECT_HELPER_BASE::Init(); - } - void* Data() noexcept override { return &m_Desc; } - D3D12_INDEX_BUFFER_STRIP_CUT_VALUE m_Desc; -}; - -//------------------------------------------------------------------------------------------------ -class CD3DX12_PRIMITIVE_TOPOLOGY_SUBOBJECT - : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE -{ -public: - CD3DX12_PRIMITIVE_TOPOLOGY_SUBOBJECT() - { - Init(); - } - CD3DX12_PRIMITIVE_TOPOLOGY_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) - { - Init(); - AddToStateObject(ContainingStateObject); - } - void SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE primitiveTopologytype) - { - m_Desc = primitiveTopologytype; - } - D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override - { - return D3D12_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY; - } - operator const D3D12_PRIMITIVE_TOPOLOGY_TYPE& () const noexcept { return m_Desc; } -private: - void Init() noexcept - { - SUBOBJECT_HELPER_BASE::Init(); - } - void* Data() noexcept override { return &m_Desc; } - D3D12_PRIMITIVE_TOPOLOGY_TYPE m_Desc; -}; - -//------------------------------------------------------------------------------------------------ -class CD3DX12_RENDER_TARGET_FORMATS_SUBOBJECT - : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE -{ -public: - CD3DX12_RENDER_TARGET_FORMATS_SUBOBJECT() - { - Init(); - } - CD3DX12_RENDER_TARGET_FORMATS_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) - { - Init(); - AddToStateObject(ContainingStateObject); - } - void SetNumRenderTargets(UINT numRenderTargets) - { - m_Desc.NumRenderTargets = numRenderTargets; - } - void SetRenderTargetFormat(UINT renderTarget, DXGI_FORMAT renderTargetFormat) - { - m_Desc.RTFormats[renderTarget] = renderTargetFormat; - } - D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override - { - return D3D12_STATE_SUBOBJECT_TYPE_RENDER_TARGET_FORMATS; - } - operator const D3D12_RT_FORMAT_ARRAY& () const noexcept { return m_Desc; } -private: - void Init() noexcept - { - SUBOBJECT_HELPER_BASE::Init(); - m_Desc = {}; - } - void* Data() noexcept override { return &m_Desc; } - D3D12_RT_FORMAT_ARRAY m_Desc; -}; - -//------------------------------------------------------------------------------------------------ -class CD3DX12_DEPTH_STENCIL_FORMAT_SUBOBJECT - : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE -{ -public: - CD3DX12_DEPTH_STENCIL_FORMAT_SUBOBJECT() - { - Init(); - } - CD3DX12_DEPTH_STENCIL_FORMAT_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) - { - Init(); - AddToStateObject(ContainingStateObject); - } - void SetDepthStencilFormat(DXGI_FORMAT depthStencilFormat) - { - m_Desc = depthStencilFormat; - } - D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override - { - return D3D12_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL_FORMAT; - } - operator const DXGI_FORMAT& () const noexcept { return m_Desc; } -private: - void Init() noexcept - { - SUBOBJECT_HELPER_BASE::Init(); - } - void* Data() noexcept override { return &m_Desc; } - DXGI_FORMAT m_Desc; -}; - -//------------------------------------------------------------------------------------------------ -class CD3DX12_SAMPLE_DESC_SUBOBJECT - : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE -{ -public: - CD3DX12_SAMPLE_DESC_SUBOBJECT() - { - Init(); - } - CD3DX12_SAMPLE_DESC_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) - { - Init(); - AddToStateObject(ContainingStateObject); - } - void SetCount(UINT count) - { - m_Desc.Count = count; - } - void SetQuality(UINT quality) - { - m_Desc.Quality = quality; - } - D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override - { - return D3D12_STATE_SUBOBJECT_TYPE_SAMPLE_DESC; - } - operator const DXGI_SAMPLE_DESC& () const noexcept { return m_Desc; } -private: - void Init() noexcept - { - SUBOBJECT_HELPER_BASE::Init(); - m_Desc = {}; - } - void* Data() noexcept override { return &m_Desc; } - DXGI_SAMPLE_DESC m_Desc; -}; - -//------------------------------------------------------------------------------------------------ -class CD3DX12_FLAGS_SUBOBJECT - : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE -{ -public: - CD3DX12_FLAGS_SUBOBJECT() - { - Init(); - } - CD3DX12_FLAGS_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) - { - Init(); - AddToStateObject(ContainingStateObject); - } - void SetFlags(D3D12_PIPELINE_STATE_FLAGS flags) - { - m_Desc = flags; - } - D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override - { - return D3D12_STATE_SUBOBJECT_TYPE_FLAGS; - } - operator const D3D12_PIPELINE_STATE_FLAGS& () const noexcept { return m_Desc; } -private: - void Init() noexcept - { - SUBOBJECT_HELPER_BASE::Init(); - m_Desc = {}; - } - void* Data() noexcept override { return &m_Desc; } - D3D12_PIPELINE_STATE_FLAGS m_Desc; -}; - -//------------------------------------------------------------------------------------------------ -class CD3DX12_VIEW_INSTANCING_SUBOBJECT - : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE -{ -public: - CD3DX12_VIEW_INSTANCING_SUBOBJECT() - { - Init(); - } - CD3DX12_VIEW_INSTANCING_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) - { - Init(); - AddToStateObject(ContainingStateObject); - } - void AddViewInstanceLocation(D3D12_VIEW_INSTANCE_LOCATION viewInstanceLocation) - { - m_viewInstanceCount++; - m_viewInstanceLocations.emplace_back( - D3D12_VIEW_INSTANCE_LOCATION - { - viewInstanceLocation.ViewportArrayIndex, - viewInstanceLocation.RenderTargetArrayIndex - } - ); - } - void SetFlags(D3D12_VIEW_INSTANCING_FLAGS flags) - { - m_Desc.Flags = flags; - } - D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override - { - return D3D12_STATE_SUBOBJECT_TYPE_VIEW_INSTANCING; - } - operator const D3D12_VIEW_INSTANCING_DESC& () const noexcept { return m_Desc; } - virtual void Finalize() override - { - if (m_viewInstanceCount > 0) - { - m_viewInstanceLocationsVector.resize(m_viewInstanceCount); - std::list::iterator viewInstancingLocationIt = m_viewInstanceLocations.begin(); - for (UINT i = 0; viewInstancingLocationIt != m_viewInstanceLocations.end(); i++, viewInstancingLocationIt++) - { - m_viewInstanceLocationsVector[i] = *viewInstancingLocationIt; - } - // Below: using ugly way to get pointer in case .data() is not defined - m_Desc.pViewInstanceLocations = &m_viewInstanceLocationsVector[0]; - } - m_Desc.ViewInstanceCount = m_viewInstanceCount; - } -private: - void Init() noexcept - { - SUBOBJECT_HELPER_BASE::Init(); - m_Desc = CD3DX12_VIEW_INSTANCING_DESC(D3D12_DEFAULT); - m_viewInstanceCount = 0; - m_viewInstanceLocations.clear(); - m_viewInstanceLocationsVector.clear(); - } - void* Data() noexcept override { return &m_Desc; } - CD3DX12_VIEW_INSTANCING_DESC m_Desc; - UINT m_viewInstanceCount; - std::list m_viewInstanceLocations; - std::vector m_viewInstanceLocationsVector; -}; - -//------------------------------------------------------------------------------------------------ -class CD3DX12_DEPTH_STENCIL_SUBOBJECT - : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE -{ -public: - CD3DX12_DEPTH_STENCIL_SUBOBJECT() - { - Init(); - } - CD3DX12_DEPTH_STENCIL_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) - { - Init(); - AddToStateObject(ContainingStateObject); - } - void SetDepthEnable(BOOL depthEnable) - { - m_Desc.DepthEnable = depthEnable; - } - void SetDepthWriteMask(D3D12_DEPTH_WRITE_MASK depthWriteMask) - { - m_Desc.DepthWriteMask = depthWriteMask; - } - void SetDepthFunc(D3D12_COMPARISON_FUNC depthFunc) - { - m_Desc.DepthFunc = depthFunc; - } - void SetStencilEnable(BOOL stencilEnable) - { - m_Desc.StencilEnable = stencilEnable; - } - void SetStencilReadMask(UINT8 stencilReadMask) - { - m_Desc.StencilReadMask = stencilReadMask; - } - void SetStencilWriteMask(UINT8 stencilWriteMask) - { - m_Desc.StencilWriteMask = stencilWriteMask; - } - void SetFrontFace(D3D12_DEPTH_STENCILOP_DESC frontFace) - { - m_Desc.FrontFace = { - frontFace.StencilFailOp, - frontFace.StencilDepthFailOp, - frontFace.StencilPassOp, - frontFace.StencilFunc - }; - } - void SetBackFace(D3D12_DEPTH_STENCILOP_DESC backFace) - { - m_Desc.BackFace = { - backFace.StencilFailOp, - backFace.StencilDepthFailOp, - backFace.StencilPassOp, - backFace.StencilFunc - }; - } - D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override - { - return D3D12_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL; - } - operator const D3D12_DEPTH_STENCIL_DESC& () const noexcept { return m_Desc; } -private: - void Init() noexcept - { - SUBOBJECT_HELPER_BASE::Init(); - m_Desc = CD3DX12_DEPTH_STENCIL_DESC(D3D12_DEFAULT); - } - void* Data() noexcept override { return &m_Desc; } - CD3DX12_DEPTH_STENCIL_DESC m_Desc; -}; - -//------------------------------------------------------------------------------------------------ -class CD3DX12_DEPTH_STENCIL1_SUBOBJECT - : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE -{ -public: - CD3DX12_DEPTH_STENCIL1_SUBOBJECT() - { - Init(); - } - CD3DX12_DEPTH_STENCIL1_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) - { - Init(); - AddToStateObject(ContainingStateObject); - } - void SetDepthEnable(BOOL depthEnable) - { - m_Desc.DepthEnable = depthEnable; - } - void SetDepthWriteMask(D3D12_DEPTH_WRITE_MASK depthWriteMask) - { - m_Desc.DepthWriteMask = depthWriteMask; - } - void SetDepthFunc(D3D12_COMPARISON_FUNC depthFunc) - { - m_Desc.DepthFunc = depthFunc; - } - void SetStencilEnable(BOOL stencilEnable) - { - m_Desc.StencilEnable = stencilEnable; - } - void SetStencilReadMask(UINT8 stencilReadMask) - { - m_Desc.StencilReadMask = stencilReadMask; - } - void SetStencilWriteMask(UINT8 stencilWriteMask) - { - m_Desc.StencilWriteMask = stencilWriteMask; - } - void SetFrontFace(D3D12_DEPTH_STENCILOP_DESC frontFace) - { - m_Desc.FrontFace = { - frontFace.StencilFailOp, - frontFace.StencilDepthFailOp, - frontFace.StencilPassOp, - frontFace.StencilFunc - }; - } - void SetBackFace(D3D12_DEPTH_STENCILOP_DESC backFace) - { - m_Desc.BackFace = { - backFace.StencilFailOp, - backFace.StencilDepthFailOp, - backFace.StencilPassOp, - backFace.StencilFunc - }; - } - void SetDepthBoundsTestEnable(BOOL depthBoundsTestEnable) - { - m_Desc.DepthBoundsTestEnable = depthBoundsTestEnable; - } - D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override - { - return D3D12_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1; - } - operator const D3D12_DEPTH_STENCIL_DESC1& () const noexcept { return m_Desc; } -private: - void Init() noexcept - { - SUBOBJECT_HELPER_BASE::Init(); - m_Desc = CD3DX12_DEPTH_STENCIL_DESC1(D3D12_DEFAULT); - } - void* Data() noexcept override { return &m_Desc; } - CD3DX12_DEPTH_STENCIL_DESC1 m_Desc; -}; - -//------------------------------------------------------------------------------------------------ -class CD3DX12_SAMPLE_MASK_SUBOBJECT - : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE -{ -public: - CD3DX12_SAMPLE_MASK_SUBOBJECT() - { - Init(); - } - CD3DX12_SAMPLE_MASK_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) - { - Init(); - AddToStateObject(ContainingStateObject); - } - void SetSampleMask(UINT sampleMask) - { - m_Desc = sampleMask; - } - D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override - { - return D3D12_STATE_SUBOBJECT_TYPE_SAMPLE_MASK; - } - operator const UINT& () const noexcept { return m_Desc; } -private: - void Init() noexcept - { - SUBOBJECT_HELPER_BASE::Init(); - } - void* Data() noexcept override { return &m_Desc; } - UINT m_Desc; -}; - -//------------------------------------------------------------------------------------------------ -class CD3DX12_GENERIC_PROGRAM_SUBOBJECT - : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE -{ -public: - CD3DX12_GENERIC_PROGRAM_SUBOBJECT() - { - Init(); - } - CD3DX12_GENERIC_PROGRAM_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) - { - Init(); - AddToStateObject(ContainingStateObject); - } - void SetProgramName(LPCWSTR ProgramName) - { - m_Desc.ProgramName = m_Strings.LocalCopy(ProgramName); - } - void AddExport(LPCWSTR exportName) - { - m_Exports.emplace_back(m_Strings.LocalCopy(exportName)); - m_numExports++; - } - void AddSubobject(const D3D12_STATE_SUBOBJECT& subobject) - { - m_Subobjects.emplace_back(&subobject); - m_numSubobjects++; - } - D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override - { - return D3D12_STATE_SUBOBJECT_TYPE_GENERIC_PROGRAM; - } - operator const D3D12_GENERIC_PROGRAM_DESC& () const noexcept { return m_Desc; } - virtual void Finalize() override - { - // Set exports - if (m_numExports > 0) - { - m_ExportsVector.resize(m_numExports); - std::list::iterator exportIt = m_Exports.begin(); - for (UINT i = 0; exportIt != m_Exports.end(); i++, exportIt++) - { - m_ExportsVector[i] = *exportIt; - } - // Below: using ugly way to get pointer in case .data() is not defined - m_Desc.pExports = &m_ExportsVector[0]; - } - else - { - m_Desc.pExports = nullptr; - } - m_Desc.NumExports = m_numExports; - - // Set subobjects - if (m_numSubobjects > 0) - { - m_SubobjectsVector.resize(m_numSubobjects); - std::list::iterator subobjectIt = m_Subobjects.begin(); - for (UINT i = 0; subobjectIt != m_Subobjects.end(); i++, subobjectIt++) - { - m_SubobjectsVector[i] = *subobjectIt; - } - // Below: using ugly way to get pointer in case .data() is not defined - m_Desc.ppSubobjects = &m_SubobjectsVector[0]; - } - else - { - m_Desc.ppSubobjects = nullptr; - } - m_Desc.NumSubobjects = m_numSubobjects; - } -private: - void Init() noexcept - { - SUBOBJECT_HELPER_BASE::Init(); - m_Desc = {}; - m_numExports = 0; - m_numSubobjects = 0; - } - void* Data() noexcept override { return &m_Desc; } - D3D12_GENERIC_PROGRAM_DESC m_Desc; - std::list m_Exports; - std::vector m_ExportsVector; - UINT m_numExports; - std::list m_Subobjects; - std::vector m_SubobjectsVector; - UINT m_numSubobjects; - CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; -}; - -//------------------------------------------------------------------------------------------------ -class CD3DX12_NODE_OUTPUT_OVERRIDES -{ -public: - CD3DX12_NODE_OUTPUT_OVERRIDES(const D3D12_NODE_OUTPUT_OVERRIDES** ppOwner, UINT* pNumOutputOverrides) noexcept - { - m_Desc.clear(); - m_ppOwner = ppOwner; - *m_ppOwner = nullptr; - m_pNumOutputOverrides = pNumOutputOverrides; - *m_pNumOutputOverrides = 0; - } - void NewOutputOverride() - { - m_Desc.emplace_back(D3D12_NODE_OUTPUT_OVERRIDES{}); - *m_ppOwner = m_Desc.data(); - (*m_pNumOutputOverrides)++; - } - void OutputIndex(UINT index) - { - m_Desc.back().OutputIndex = index; - } - void NewName(LPCWSTR Name, UINT ArrayIndex = 0) - { - m_NodeIDs.emplace_front(D3D12_NODE_ID{ m_Strings.LocalCopy(Name),ArrayIndex }); - m_Desc.back().pNewName = &m_NodeIDs.front(); - } - void AllowSparseNodes(BOOL bAllow) - { - m_UINTs.emplace_front((UINT)bAllow); - m_Desc.back().pAllowSparseNodes = (BOOL*)&m_UINTs.front(); - } - void MaxOutputRecords(UINT maxOutputRecords) noexcept - { - m_UINTs.emplace_front(maxOutputRecords); - m_Desc.back().pMaxRecords = &m_UINTs.front(); - } - void MaxOutputRecordsSharedWith(UINT outputIndex) noexcept - { - m_UINTs.emplace_front(outputIndex); - m_Desc.back().pMaxRecordsSharedWithOutputIndex = &m_UINTs.front(); - } -private: - std::vector m_Desc; - // Cached parameters - CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; - std::forward_list m_UINTs; - std::forward_list m_NodeIDs; - const D3D12_NODE_OUTPUT_OVERRIDES** m_ppOwner; - UINT* m_pNumOutputOverrides; -}; - -//------------------------------------------------------------------------------------------------ -class CD3DX12_NODE_HELPER_BASE -{ -public: - virtual ~CD3DX12_NODE_HELPER_BASE() = default; -}; - -//------------------------------------------------------------------------------------------------ -class CD3DX12_SHADER_NODE // Not specifying launch mode. - // Don't need to distinguish if no parameter overriding is happening - : public CD3DX12_NODE_HELPER_BASE -{ -public: - CD3DX12_SHADER_NODE( - D3D12_NODE* pNode, - LPCWSTR _Shader = nullptr) - { - m_pDesc = pNode; - m_pDesc->NodeType = D3D12_NODE_TYPE_SHADER; - Shader(_Shader); - } - void Shader(LPCWSTR _Shader) - { - m_pDesc->Shader.Shader = m_Strings.LocalCopy(_Shader); - } - D3D12_NODE* m_pDesc; -private: - CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; -}; - -//------------------------------------------------------------------------------------------------ -// Use this class when defining a broadcasting launch node where configuration parameters -// need to be overridden. If overrides are not needed, just use CD3DX12_COMPUTE_SHADER_NODE -class CD3DX12_BROADCASTING_LAUNCH_NODE_OVERRIDES - : public CD3DX12_NODE_HELPER_BASE -{ -public: - CD3DX12_BROADCASTING_LAUNCH_NODE_OVERRIDES( - D3D12_NODE* pNode, - LPCWSTR _Shader = nullptr) : - m_NodeOutputOverrides(&Overrides.pOutputOverrides, &Overrides.NumOutputOverrides) - { - Overrides = {}; - m_pDesc = pNode; - m_pDesc->NodeType = D3D12_NODE_TYPE_SHADER; - m_pDesc->Shader.OverridesType = D3D12_NODE_OVERRIDES_TYPE_BROADCASTING_LAUNCH; - m_pDesc->Shader.pBroadcastingLaunchOverrides = &Overrides; - Shader(_Shader); - } - void Shader(LPCWSTR _Shader) - { - m_pDesc->Shader.Shader = m_Strings.LocalCopy(_Shader); - } - void LocalRootArgumentsTableIndex(UINT index) - { - m_UINTs.emplace_front(index); - Overrides.pLocalRootArgumentsTableIndex = &m_UINTs.front(); - } - void ProgramEntry(BOOL bIsProgramEntry) - { - m_UINTs.emplace_front(bIsProgramEntry); - Overrides.pProgramEntry = (BOOL*)&m_UINTs.front(); - } - void NewName(D3D12_NODE_ID NodeID) - { - m_NodeIDs.emplace_front(D3D12_NODE_ID{ m_Strings.LocalCopy(NodeID.Name),NodeID.ArrayIndex }); - Overrides.pNewName = &m_NodeIDs.front(); - } - void ShareInputOf(D3D12_NODE_ID NodeID) - { - m_NodeIDs.emplace_front(D3D12_NODE_ID{ m_Strings.LocalCopy(NodeID.Name),NodeID.ArrayIndex }); - Overrides.pShareInputOf = &m_NodeIDs.front(); - } - void DispatchGrid(UINT x, UINT y, UINT z) - { - m_UINT3s.emplace_front(UINT3{ x,y,z }); - Overrides.pDispatchGrid = (UINT*)&m_UINT3s.front(); - } - void MaxDispatchGrid(UINT x, UINT y, UINT z) - { - m_UINT3s.emplace_front(UINT3{x,y,z}); - Overrides.pMaxDispatchGrid = (UINT*)&m_UINT3s.front(); - } - CD3DX12_NODE_OUTPUT_OVERRIDES& NodeOutputOverrides() - { - return m_NodeOutputOverrides; - } - D3D12_BROADCASTING_LAUNCH_OVERRIDES Overrides; - D3D12_NODE* m_pDesc; -private: - // Cached parameters - CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; - std::forward_list m_UINTs; - struct UINT3 - { - UINT x; - UINT y; - UINT z; - }; - std::forward_list m_UINT3s; - std::forward_list m_NodeIDs; - CD3DX12_NODE_OUTPUT_OVERRIDES m_NodeOutputOverrides; -}; - -//------------------------------------------------------------------------------------------------ -// Use this class when defining a coalescing launch node where configuration parameters -// need to be overridden. If overrides are not needed, just use CD3DX12_COMPUTE_SHADER_NODE -class CD3DX12_COALESCING_LAUNCH_NODE_OVERRIDES - : public CD3DX12_NODE_HELPER_BASE -{ -public: - CD3DX12_COALESCING_LAUNCH_NODE_OVERRIDES( - D3D12_NODE* pNode, - LPCWSTR _Shader = nullptr) : - m_NodeOutputOverrides(&Overrides.pOutputOverrides, &Overrides.NumOutputOverrides) - { - Overrides = {}; - m_pDesc = pNode; - m_pDesc->NodeType = D3D12_NODE_TYPE_SHADER; - m_pDesc->Shader.OverridesType = D3D12_NODE_OVERRIDES_TYPE_COALESCING_LAUNCH; - m_pDesc->Shader.pCoalescingLaunchOverrides = &Overrides; - Shader(_Shader); - } - void Shader(LPCWSTR _Shader) - { - m_pDesc->Shader.Shader = m_Strings.LocalCopy(_Shader); - } - void LocalRootArgumentsTableIndex(UINT index) - { - m_UINTs.emplace_front(index); - Overrides.pLocalRootArgumentsTableIndex = &m_UINTs.front(); - } - void ProgramEntry(BOOL bIsProgramEntry) - { - m_UINTs.emplace_front(bIsProgramEntry); - Overrides.pProgramEntry = (BOOL*)&m_UINTs.front(); - } - void NewName(D3D12_NODE_ID NodeID) - { - m_NodeIDs.emplace_front(D3D12_NODE_ID{ m_Strings.LocalCopy(NodeID.Name),NodeID.ArrayIndex }); - Overrides.pNewName = &m_NodeIDs.front(); - } - void ShareInputOf(D3D12_NODE_ID NodeID) - { - m_NodeIDs.emplace_front(D3D12_NODE_ID{ m_Strings.LocalCopy(NodeID.Name),NodeID.ArrayIndex }); - Overrides.pShareInputOf = &m_NodeIDs.front(); - } - CD3DX12_NODE_OUTPUT_OVERRIDES& NodeOutputOverrides() - { - return m_NodeOutputOverrides; - } - D3D12_COALESCING_LAUNCH_OVERRIDES Overrides; - D3D12_NODE* m_pDesc; -private: - // Cached parameters - CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; - std::forward_list m_UINTs; - struct UINT3 - { - UINT x; - UINT y; - UINT z; - }; - std::forward_list m_UINT3s; - std::forward_list m_NodeIDs; - CD3DX12_NODE_OUTPUT_OVERRIDES m_NodeOutputOverrides; -}; - -//------------------------------------------------------------------------------------------------ -// Use this class when defining a thread launch node where configuration parameters -// need to be overridden. If overrides are not needed, just use CD3DX12_COMPUTE_SHADER_NODE -class CD3DX12_THREAD_LAUNCH_NODE_OVERRIDES - : public CD3DX12_NODE_HELPER_BASE -{ -public: - CD3DX12_THREAD_LAUNCH_NODE_OVERRIDES( - D3D12_NODE* pNode, - LPCWSTR _Shader = nullptr) : - m_NodeOutputOverrides(&Overrides.pOutputOverrides, &Overrides.NumOutputOverrides) - { - Overrides = {}; - m_pDesc = pNode; - m_pDesc->NodeType = D3D12_NODE_TYPE_SHADER; - m_pDesc->Shader.OverridesType = D3D12_NODE_OVERRIDES_TYPE_THREAD_LAUNCH; - m_pDesc->Shader.pThreadLaunchOverrides = &Overrides; - Shader(_Shader); - } - void Shader(LPCWSTR _Shader) - { - m_pDesc->Shader.Shader = m_Strings.LocalCopy(_Shader); - } - void LocalRootArgumentsTableIndex(UINT index) - { - m_UINTs.emplace_front(index); - Overrides.pLocalRootArgumentsTableIndex = &m_UINTs.front(); - } - void ProgramEntry(BOOL bIsProgramEntry) - { - m_UINTs.emplace_front(bIsProgramEntry); - Overrides.pProgramEntry = (BOOL*)&m_UINTs.front(); - } - void NewName(D3D12_NODE_ID NodeID) - { - m_NodeIDs.emplace_front(D3D12_NODE_ID{ m_Strings.LocalCopy(NodeID.Name),NodeID.ArrayIndex }); - Overrides.pNewName = &m_NodeIDs.front(); - } - void ShareInputOf(D3D12_NODE_ID NodeID) - { - m_NodeIDs.emplace_front(D3D12_NODE_ID{ m_Strings.LocalCopy(NodeID.Name),NodeID.ArrayIndex }); - Overrides.pShareInputOf = &m_NodeIDs.front(); - } - CD3DX12_NODE_OUTPUT_OVERRIDES& NodeOutputOverrides() - { - return m_NodeOutputOverrides; - } - D3D12_THREAD_LAUNCH_OVERRIDES Overrides; - D3D12_NODE* m_pDesc; -private: - // Cached parameters - CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; - std::forward_list m_UINTs; - std::forward_list m_NodeIDs; - CD3DX12_NODE_OUTPUT_OVERRIDES m_NodeOutputOverrides; -}; - -//------------------------------------------------------------------------------------------------ -// Use this class when defining a node where configuration parameters -// need to be overridden for parameters that are common to all launch node types. -// This option is a convenience if you don't want to determine what the launch mode is -// and just want to override a setting that isn't specific to launch mode. -// If overrides are not needed, just use CD3DX12_COMPUTE_SHADER_NODE -class CD3DX12_COMMON_COMPUTE_NODE_OVERRIDES - : public CD3DX12_NODE_HELPER_BASE -{ -public: - CD3DX12_COMMON_COMPUTE_NODE_OVERRIDES( - D3D12_NODE* pNode, - LPCWSTR _Shader = nullptr) : - m_NodeOutputOverrides(&Overrides.pOutputOverrides, &Overrides.NumOutputOverrides) - { - Overrides = {}; - m_pDesc = pNode; - m_pDesc->NodeType = D3D12_NODE_TYPE_SHADER; - m_pDesc->Shader.OverridesType = D3D12_NODE_OVERRIDES_TYPE_COMMON_COMPUTE; - m_pDesc->Shader.pThreadLaunchOverrides = &Overrides; - Shader(_Shader); - } - void Shader(LPCWSTR _Shader) - { - m_pDesc->Shader.Shader = m_Strings.LocalCopy(_Shader); - } - void LocalRootArgumentsTableIndex(UINT index) - { - m_UINTs.emplace_front(index); - Overrides.pLocalRootArgumentsTableIndex = &m_UINTs.front(); - } - void ProgramEntry(BOOL bIsProgramEntry) - { - m_UINTs.emplace_front(bIsProgramEntry); - Overrides.pProgramEntry = (BOOL*)&m_UINTs.front(); - } - void NewName(D3D12_NODE_ID NodeID) - { - m_NodeIDs.emplace_front(D3D12_NODE_ID{ m_Strings.LocalCopy(NodeID.Name),NodeID.ArrayIndex }); - Overrides.pNewName = &m_NodeIDs.front(); - } - void ShareInputOf(D3D12_NODE_ID NodeID) - { - m_NodeIDs.emplace_front(D3D12_NODE_ID{ m_Strings.LocalCopy(NodeID.Name),NodeID.ArrayIndex }); - Overrides.pShareInputOf = &m_NodeIDs.front(); - } - CD3DX12_NODE_OUTPUT_OVERRIDES& NodeOutputOverrides() - { - return m_NodeOutputOverrides; - } - D3D12_THREAD_LAUNCH_OVERRIDES Overrides; - D3D12_NODE* m_pDesc; -private: - // Cached parameters - CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; - std::forward_list m_UINTs; - std::forward_list m_NodeIDs; - CD3DX12_NODE_OUTPUT_OVERRIDES m_NodeOutputOverrides; -}; - -//------------------------------------------------------------------------------------------------ -class CD3DX12_WORK_GRAPH_SUBOBJECT - : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE -{ -public: - CD3DX12_WORK_GRAPH_SUBOBJECT() noexcept - { - Init(); - } - CD3DX12_WORK_GRAPH_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) - { - Init(); - AddToStateObject(ContainingStateObject); - } - D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override - { - return D3D12_STATE_SUBOBJECT_TYPE_WORK_GRAPH; - } - void IncludeAllAvailableNodes() - { - m_Desc.Flags |= D3D12_WORK_GRAPH_FLAG_INCLUDE_ALL_AVAILABLE_NODES; - } - void SetProgramName(LPCWSTR ProgramName) - { - m_Desc.ProgramName = m_Strings.LocalCopy(ProgramName); - } - void AddEntrypoint(D3D12_NODE_ID Entrypoint) - { - m_Entrypoints.emplace_back(D3D12_NODE_ID{ m_Strings.LocalCopy(Entrypoint.Name),Entrypoint.ArrayIndex }); - m_NumEntrypoints++; - } - - template - T* CreateNode() - { - m_NodeDescs.push_back({}); - m_NumNodes++; - T* pNodeHelper = new T(&m_NodeDescs.back()); - m_OwnedNodeHelpers.emplace_back(pNodeHelper); - return pNodeHelper; - } - CD3DX12_SHADER_NODE* CreateShaderNode(LPCWSTR Shader = nullptr) - { - auto pNode = CreateNode(); - pNode->Shader(Shader); - return pNode; - } - CD3DX12_BROADCASTING_LAUNCH_NODE_OVERRIDES* CreateBroadcastingLaunchNodeOverrides(LPCWSTR Shader = nullptr) - { - auto pNode = CreateNode(); - pNode->Shader(Shader); - return pNode; - } - CD3DX12_COALESCING_LAUNCH_NODE_OVERRIDES* CreateCoalescingLaunchNodeOverrides(LPCWSTR Shader = nullptr) - { - auto pNode = CreateNode(); - pNode->Shader(Shader); - return pNode; - } - CD3DX12_THREAD_LAUNCH_NODE_OVERRIDES* CreateThreadLaunchNodeOverrides(LPCWSTR Shader = nullptr) - { - auto pNode = CreateNode(); - pNode->Shader(Shader); - return pNode; - } - CD3DX12_COMMON_COMPUTE_NODE_OVERRIDES* CreateCommonComputeNodeOverrides(LPCWSTR Shader = nullptr) - { - auto pNode = CreateNode(); - pNode->Shader(Shader); - return pNode; - } - operator const D3D12_WORK_GRAPH_DESC& () noexcept - { - return m_Desc; - } - virtual void Finalize() override - { - m_EntrypointsVector.resize(m_NumEntrypoints); - std::list::iterator entryIt = m_Entrypoints.begin(); - for (UINT n = 0; n < m_NumEntrypoints; n++, entryIt++) - { - m_EntrypointsVector[n] = *entryIt; - } - m_Desc.NumEntrypoints = m_NumEntrypoints; - m_Desc.pEntrypoints = m_EntrypointsVector.data(); - - m_NodeDescsVector.resize(m_NumNodes); - std::list::iterator nodeIt = m_NodeDescs.begin(); - for (UINT n = 0; n < m_NumNodes; n++, nodeIt++) - { - m_NodeDescsVector[n] = *nodeIt; - } - m_Desc.NumExplicitlyDefinedNodes = m_NumNodes; - m_Desc.pExplicitlyDefinedNodes = m_NodeDescsVector.data(); - } -private: - void Init() noexcept - { - SUBOBJECT_HELPER_BASE::Init(); - m_Desc = {}; - m_NodeDescs.clear(); - m_NodeDescsVector.clear(); - m_NumNodes = 0; - m_NumEntrypoints = 0; - } - void* Data() noexcept override { return &m_Desc; } - D3D12_WORK_GRAPH_DESC m_Desc; - std::list m_Entrypoints; - UINT m_NumEntrypoints; - std::vector m_EntrypointsVector; - std::list m_NodeDescs; - UINT m_NumNodes; - std::vector m_NodeDescsVector; - CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; - std::list> m_OwnedNodeHelpers; -}; -#endif // D3D12_SDK_VERSION >= 612 - -#undef D3DX12_COM_PTR -#undef D3DX12_COM_PTR_GET -#undef D3DX12_COM_PTR_ADDRESSOF - diff --git a/Juliet/src/Graphics/D3D12/AgilitySDK/dxgiformat.h b/Juliet/src/Graphics/D3D12/AgilitySDK/dxgiformat.h deleted file mode 100644 index 917f172..0000000 --- a/Juliet/src/Graphics/D3D12/AgilitySDK/dxgiformat.h +++ /dev/null @@ -1,142 +0,0 @@ -// -// Copyright (C) Microsoft Corporation. -// Licensed under the MIT license -// - -#ifndef __dxgiformat_h__ -#define __dxgiformat_h__ - -#define DXGI_FORMAT_DEFINED 1 - -typedef enum DXGI_FORMAT -{ - DXGI_FORMAT_UNKNOWN = 0, - DXGI_FORMAT_R32G32B32A32_TYPELESS = 1, - DXGI_FORMAT_R32G32B32A32_FLOAT = 2, - DXGI_FORMAT_R32G32B32A32_UINT = 3, - DXGI_FORMAT_R32G32B32A32_SINT = 4, - DXGI_FORMAT_R32G32B32_TYPELESS = 5, - DXGI_FORMAT_R32G32B32_FLOAT = 6, - DXGI_FORMAT_R32G32B32_UINT = 7, - DXGI_FORMAT_R32G32B32_SINT = 8, - DXGI_FORMAT_R16G16B16A16_TYPELESS = 9, - DXGI_FORMAT_R16G16B16A16_FLOAT = 10, - DXGI_FORMAT_R16G16B16A16_UNORM = 11, - DXGI_FORMAT_R16G16B16A16_UINT = 12, - DXGI_FORMAT_R16G16B16A16_SNORM = 13, - DXGI_FORMAT_R16G16B16A16_SINT = 14, - DXGI_FORMAT_R32G32_TYPELESS = 15, - DXGI_FORMAT_R32G32_FLOAT = 16, - DXGI_FORMAT_R32G32_UINT = 17, - DXGI_FORMAT_R32G32_SINT = 18, - DXGI_FORMAT_R32G8X24_TYPELESS = 19, - DXGI_FORMAT_D32_FLOAT_S8X24_UINT = 20, - DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS = 21, - DXGI_FORMAT_X32_TYPELESS_G8X24_UINT = 22, - DXGI_FORMAT_R10G10B10A2_TYPELESS = 23, - DXGI_FORMAT_R10G10B10A2_UNORM = 24, - DXGI_FORMAT_R10G10B10A2_UINT = 25, - DXGI_FORMAT_R11G11B10_FLOAT = 26, - DXGI_FORMAT_R8G8B8A8_TYPELESS = 27, - DXGI_FORMAT_R8G8B8A8_UNORM = 28, - DXGI_FORMAT_R8G8B8A8_UNORM_SRGB = 29, - DXGI_FORMAT_R8G8B8A8_UINT = 30, - DXGI_FORMAT_R8G8B8A8_SNORM = 31, - DXGI_FORMAT_R8G8B8A8_SINT = 32, - DXGI_FORMAT_R16G16_TYPELESS = 33, - DXGI_FORMAT_R16G16_FLOAT = 34, - DXGI_FORMAT_R16G16_UNORM = 35, - DXGI_FORMAT_R16G16_UINT = 36, - DXGI_FORMAT_R16G16_SNORM = 37, - DXGI_FORMAT_R16G16_SINT = 38, - DXGI_FORMAT_R32_TYPELESS = 39, - DXGI_FORMAT_D32_FLOAT = 40, - DXGI_FORMAT_R32_FLOAT = 41, - DXGI_FORMAT_R32_UINT = 42, - DXGI_FORMAT_R32_SINT = 43, - DXGI_FORMAT_R24G8_TYPELESS = 44, - DXGI_FORMAT_D24_UNORM_S8_UINT = 45, - DXGI_FORMAT_R24_UNORM_X8_TYPELESS = 46, - DXGI_FORMAT_X24_TYPELESS_G8_UINT = 47, - DXGI_FORMAT_R8G8_TYPELESS = 48, - DXGI_FORMAT_R8G8_UNORM = 49, - DXGI_FORMAT_R8G8_UINT = 50, - DXGI_FORMAT_R8G8_SNORM = 51, - DXGI_FORMAT_R8G8_SINT = 52, - DXGI_FORMAT_R16_TYPELESS = 53, - DXGI_FORMAT_R16_FLOAT = 54, - DXGI_FORMAT_D16_UNORM = 55, - DXGI_FORMAT_R16_UNORM = 56, - DXGI_FORMAT_R16_UINT = 57, - DXGI_FORMAT_R16_SNORM = 58, - DXGI_FORMAT_R16_SINT = 59, - DXGI_FORMAT_R8_TYPELESS = 60, - DXGI_FORMAT_R8_UNORM = 61, - DXGI_FORMAT_R8_UINT = 62, - DXGI_FORMAT_R8_SNORM = 63, - DXGI_FORMAT_R8_SINT = 64, - DXGI_FORMAT_A8_UNORM = 65, - DXGI_FORMAT_R1_UNORM = 66, - DXGI_FORMAT_R9G9B9E5_SHAREDEXP = 67, - DXGI_FORMAT_R8G8_B8G8_UNORM = 68, - DXGI_FORMAT_G8R8_G8B8_UNORM = 69, - DXGI_FORMAT_BC1_TYPELESS = 70, - DXGI_FORMAT_BC1_UNORM = 71, - DXGI_FORMAT_BC1_UNORM_SRGB = 72, - DXGI_FORMAT_BC2_TYPELESS = 73, - DXGI_FORMAT_BC2_UNORM = 74, - DXGI_FORMAT_BC2_UNORM_SRGB = 75, - DXGI_FORMAT_BC3_TYPELESS = 76, - DXGI_FORMAT_BC3_UNORM = 77, - DXGI_FORMAT_BC3_UNORM_SRGB = 78, - DXGI_FORMAT_BC4_TYPELESS = 79, - DXGI_FORMAT_BC4_UNORM = 80, - DXGI_FORMAT_BC4_SNORM = 81, - DXGI_FORMAT_BC5_TYPELESS = 82, - DXGI_FORMAT_BC5_UNORM = 83, - DXGI_FORMAT_BC5_SNORM = 84, - DXGI_FORMAT_B5G6R5_UNORM = 85, - DXGI_FORMAT_B5G5R5A1_UNORM = 86, - DXGI_FORMAT_B8G8R8A8_UNORM = 87, - DXGI_FORMAT_B8G8R8X8_UNORM = 88, - DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM = 89, - DXGI_FORMAT_B8G8R8A8_TYPELESS = 90, - DXGI_FORMAT_B8G8R8A8_UNORM_SRGB = 91, - DXGI_FORMAT_B8G8R8X8_TYPELESS = 92, - DXGI_FORMAT_B8G8R8X8_UNORM_SRGB = 93, - DXGI_FORMAT_BC6H_TYPELESS = 94, - DXGI_FORMAT_BC6H_UF16 = 95, - DXGI_FORMAT_BC6H_SF16 = 96, - DXGI_FORMAT_BC7_TYPELESS = 97, - DXGI_FORMAT_BC7_UNORM = 98, - DXGI_FORMAT_BC7_UNORM_SRGB = 99, - DXGI_FORMAT_AYUV = 100, - DXGI_FORMAT_Y410 = 101, - DXGI_FORMAT_Y416 = 102, - DXGI_FORMAT_NV12 = 103, - DXGI_FORMAT_P010 = 104, - DXGI_FORMAT_P016 = 105, - DXGI_FORMAT_420_OPAQUE = 106, - DXGI_FORMAT_YUY2 = 107, - DXGI_FORMAT_Y210 = 108, - DXGI_FORMAT_Y216 = 109, - DXGI_FORMAT_NV11 = 110, - DXGI_FORMAT_AI44 = 111, - DXGI_FORMAT_IA44 = 112, - DXGI_FORMAT_P8 = 113, - DXGI_FORMAT_A8P8 = 114, - DXGI_FORMAT_B4G4R4A4_UNORM = 115, - - DXGI_FORMAT_P208 = 130, - DXGI_FORMAT_V208 = 131, - DXGI_FORMAT_V408 = 132, - - DXGI_FORMAT_SAMPLER_FEEDBACK_MIN_MIP_OPAQUE = 189, - DXGI_FORMAT_SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUE = 190, - - DXGI_FORMAT_A4B4G4R4_UNORM = 191, - - DXGI_FORMAT_FORCE_UINT = 0xffffffff -} DXGI_FORMAT; - -#endif // __dxgiformat_h__ diff --git a/Juliet/src/Graphics/D3D12/AgilitySDK/dxgiformat.idl b/Juliet/src/Graphics/D3D12/AgilitySDK/dxgiformat.idl deleted file mode 100644 index 34cc883..0000000 --- a/Juliet/src/Graphics/D3D12/AgilitySDK/dxgiformat.idl +++ /dev/null @@ -1,139 +0,0 @@ -// -// Copyright (C) Microsoft Corporation. -// Licensed under the MIT license -// - - -typedef enum DXGI_FORMAT -{ - DXGI_FORMAT_UNKNOWN = 0, - DXGI_FORMAT_R32G32B32A32_TYPELESS = 1, - DXGI_FORMAT_R32G32B32A32_FLOAT = 2, - DXGI_FORMAT_R32G32B32A32_UINT = 3, - DXGI_FORMAT_R32G32B32A32_SINT = 4, - DXGI_FORMAT_R32G32B32_TYPELESS = 5, - DXGI_FORMAT_R32G32B32_FLOAT = 6, - DXGI_FORMAT_R32G32B32_UINT = 7, - DXGI_FORMAT_R32G32B32_SINT = 8, - DXGI_FORMAT_R16G16B16A16_TYPELESS = 9, - DXGI_FORMAT_R16G16B16A16_FLOAT = 10, - DXGI_FORMAT_R16G16B16A16_UNORM = 11, - DXGI_FORMAT_R16G16B16A16_UINT = 12, - DXGI_FORMAT_R16G16B16A16_SNORM = 13, - DXGI_FORMAT_R16G16B16A16_SINT = 14, - DXGI_FORMAT_R32G32_TYPELESS = 15, - DXGI_FORMAT_R32G32_FLOAT = 16, - DXGI_FORMAT_R32G32_UINT = 17, - DXGI_FORMAT_R32G32_SINT = 18, - DXGI_FORMAT_R32G8X24_TYPELESS = 19, - DXGI_FORMAT_D32_FLOAT_S8X24_UINT = 20, - DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS = 21, - DXGI_FORMAT_X32_TYPELESS_G8X24_UINT = 22, - DXGI_FORMAT_R10G10B10A2_TYPELESS = 23, - DXGI_FORMAT_R10G10B10A2_UNORM = 24, - DXGI_FORMAT_R10G10B10A2_UINT = 25, - DXGI_FORMAT_R11G11B10_FLOAT = 26, - DXGI_FORMAT_R8G8B8A8_TYPELESS = 27, - DXGI_FORMAT_R8G8B8A8_UNORM = 28, - DXGI_FORMAT_R8G8B8A8_UNORM_SRGB = 29, - DXGI_FORMAT_R8G8B8A8_UINT = 30, - DXGI_FORMAT_R8G8B8A8_SNORM = 31, - DXGI_FORMAT_R8G8B8A8_SINT = 32, - DXGI_FORMAT_R16G16_TYPELESS = 33, - DXGI_FORMAT_R16G16_FLOAT = 34, - DXGI_FORMAT_R16G16_UNORM = 35, - DXGI_FORMAT_R16G16_UINT = 36, - DXGI_FORMAT_R16G16_SNORM = 37, - DXGI_FORMAT_R16G16_SINT = 38, - DXGI_FORMAT_R32_TYPELESS = 39, - DXGI_FORMAT_D32_FLOAT = 40, - DXGI_FORMAT_R32_FLOAT = 41, - DXGI_FORMAT_R32_UINT = 42, - DXGI_FORMAT_R32_SINT = 43, - DXGI_FORMAT_R24G8_TYPELESS = 44, - DXGI_FORMAT_D24_UNORM_S8_UINT = 45, - DXGI_FORMAT_R24_UNORM_X8_TYPELESS = 46, - DXGI_FORMAT_X24_TYPELESS_G8_UINT = 47, - DXGI_FORMAT_R8G8_TYPELESS = 48, - DXGI_FORMAT_R8G8_UNORM = 49, - DXGI_FORMAT_R8G8_UINT = 50, - DXGI_FORMAT_R8G8_SNORM = 51, - DXGI_FORMAT_R8G8_SINT = 52, - DXGI_FORMAT_R16_TYPELESS = 53, - DXGI_FORMAT_R16_FLOAT = 54, - DXGI_FORMAT_D16_UNORM = 55, - DXGI_FORMAT_R16_UNORM = 56, - DXGI_FORMAT_R16_UINT = 57, - DXGI_FORMAT_R16_SNORM = 58, - DXGI_FORMAT_R16_SINT = 59, - DXGI_FORMAT_R8_TYPELESS = 60, - DXGI_FORMAT_R8_UNORM = 61, - DXGI_FORMAT_R8_UINT = 62, - DXGI_FORMAT_R8_SNORM = 63, - DXGI_FORMAT_R8_SINT = 64, - DXGI_FORMAT_A8_UNORM = 65, - DXGI_FORMAT_R1_UNORM = 66, - DXGI_FORMAT_R9G9B9E5_SHAREDEXP = 67, - DXGI_FORMAT_R8G8_B8G8_UNORM = 68, - DXGI_FORMAT_G8R8_G8B8_UNORM = 69, - DXGI_FORMAT_BC1_TYPELESS = 70, - DXGI_FORMAT_BC1_UNORM = 71, - DXGI_FORMAT_BC1_UNORM_SRGB = 72, - DXGI_FORMAT_BC2_TYPELESS = 73, - DXGI_FORMAT_BC2_UNORM = 74, - DXGI_FORMAT_BC2_UNORM_SRGB = 75, - DXGI_FORMAT_BC3_TYPELESS = 76, - DXGI_FORMAT_BC3_UNORM = 77, - DXGI_FORMAT_BC3_UNORM_SRGB = 78, - DXGI_FORMAT_BC4_TYPELESS = 79, - DXGI_FORMAT_BC4_UNORM = 80, - DXGI_FORMAT_BC4_SNORM = 81, - DXGI_FORMAT_BC5_TYPELESS = 82, - DXGI_FORMAT_BC5_UNORM = 83, - DXGI_FORMAT_BC5_SNORM = 84, - DXGI_FORMAT_B5G6R5_UNORM = 85, - DXGI_FORMAT_B5G5R5A1_UNORM = 86, - DXGI_FORMAT_B8G8R8A8_UNORM = 87, - DXGI_FORMAT_B8G8R8X8_UNORM = 88, - DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM = 89, - DXGI_FORMAT_B8G8R8A8_TYPELESS = 90, - DXGI_FORMAT_B8G8R8A8_UNORM_SRGB = 91, - DXGI_FORMAT_B8G8R8X8_TYPELESS = 92, - DXGI_FORMAT_B8G8R8X8_UNORM_SRGB = 93, - DXGI_FORMAT_BC6H_TYPELESS = 94, - DXGI_FORMAT_BC6H_UF16 = 95, - DXGI_FORMAT_BC6H_SF16 = 96, - DXGI_FORMAT_BC7_TYPELESS = 97, - DXGI_FORMAT_BC7_UNORM = 98, - DXGI_FORMAT_BC7_UNORM_SRGB = 99, - DXGI_FORMAT_AYUV = 100, - DXGI_FORMAT_Y410 = 101, - DXGI_FORMAT_Y416 = 102, - DXGI_FORMAT_NV12 = 103, - DXGI_FORMAT_P010 = 104, - DXGI_FORMAT_P016 = 105, - DXGI_FORMAT_420_OPAQUE = 106, - DXGI_FORMAT_YUY2 = 107, - DXGI_FORMAT_Y210 = 108, - DXGI_FORMAT_Y216 = 109, - DXGI_FORMAT_NV11 = 110, - DXGI_FORMAT_AI44 = 111, - DXGI_FORMAT_IA44 = 112, - DXGI_FORMAT_P8 = 113, - DXGI_FORMAT_A8P8 = 114, - DXGI_FORMAT_B4G4R4A4_UNORM = 115, - - DXGI_FORMAT_P208 = 130, - DXGI_FORMAT_V208 = 131, - DXGI_FORMAT_V408 = 132, - - - DXGI_FORMAT_SAMPLER_FEEDBACK_MIN_MIP_OPAQUE = 189, - DXGI_FORMAT_SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUE = 190, - - DXGI_FORMAT_A4B4G4R4_UNORM = 191, - - - DXGI_FORMAT_FORCE_UINT = 0xffffffff -} DXGI_FORMAT; - diff --git a/Juliet/src/Graphics/D3D12/D3D12GraphicsDevice.c b/Juliet/src/Graphics/D3D12/D3D12GraphicsDevice.c new file mode 100644 index 0000000..60b094c --- /dev/null +++ b/Juliet/src/Graphics/D3D12/D3D12GraphicsDevice.c @@ -0,0 +1,4709 @@ +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#define D3D12_DLL "d3d12.dll" +#define D3D12_CREATEDEVICE_FUNC "D3D12CreateDevice" +#define D3D12_SERIALIZE_VERSIONED_ROOT_SIGNATURE_FUNC "D3D12SerializeVersionedRootSignature" + +#define D3D12_FENCE_UNSIGNALED_VALUE 0 +#define D3D12_FENCE_SIGNAL_VALUE 1 + +#ifdef _WIN32 +#define HRESULT_FMT "(0x%08lX)" +#else +#define HRESULT_FMT "(0x%08X)" +#endif + +#define TOD3D12FuncPtr(type, ptr) ((type)(void*)(ptr)) + +typedef struct D3D12GraphicsRootSignature D3D12GraphicsRootSignature; +typedef struct D3D12GraphicsPipeline D3D12GraphicsPipeline; +typedef struct D3D12Texture D3D12Texture; +typedef struct D3D12TextureSubresource D3D12TextureSubresource; +typedef struct D3D12Fence D3D12Fence; +typedef struct D3D12CommandList D3D12CommandList; +typedef struct D3D12StagingDescriptorPool D3D12StagingDescriptorPool; +typedef struct D3D12Driver D3D12Driver; + +#define kD3DFeatureLevel D3D_FEATURE_LEVEL_12_1 +#define kD3DFeatureLevelStr "12_1" +#define kStagingHeapDescriptorExpectedCount 1024 +#define kMaxTexturePerCommandList 1024 +#define kMaxGraphicsPipelinePerCommandList 1024 +#define kMaxPresentDataPerCommandList 1 +#define kMaxCommandListCount 4 + +internal index_t g_CommandListID = 0; + +internal uint32 JulietToD3D12_SampleCount[] = { + 1, // MSAA 1x + 2, // MSAA 2x + 4, // MSAA 4x + 8, // MSAA 8x +}; + +internal DXGI_COLOR_SPACE_TYPE SwapchainCompositionToColorSpace[] = { + DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709, // SDR + DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709, // SDR_LINEAR + DXGI_COLOR_SPACE_RGB_FULL_G10_NONE_P709, // HDR_EXTENDED_LINEAR + DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020 // HDR10_ST2084 +}; + +internal DXGI_FORMAT SwapchainCompositionToTextureFormat[] = { + DXGI_FORMAT_B8G8R8A8_UNORM, // SDR + DXGI_FORMAT_B8G8R8A8_UNORM, // SDR_LINEAR (NOTE: The RTV uses the sRGB format) + DXGI_FORMAT_R16G16B16A16_FLOAT, // HDR_EXTENDED_LINEAR + DXGI_FORMAT_R10G10B10A2_UNORM, // HDR10_ST2084 +}; + +internal TextureFormat SwapchainCompositionToJulietTextureFormat[] = { + TextureFormat_B8G8R8A8_UNORM, // SDR + TextureFormat_B8G8R8A8_UNORM_SRGB, // SDR_LINEAR + TextureFormat_R16G16B16A16_FLOAT, // HDR_EXTENDED_LINEAR + TextureFormat_R10G10B10A2_UNORM, // HDR10_ST2084 +}; + +internal DXGI_FORMAT JulietToD3D12_TextureFormat[] = { + DXGI_FORMAT_UNKNOWN, // INVALID + DXGI_FORMAT_A8_UNORM, // A8_UNORM + DXGI_FORMAT_R8_UNORM, // R8_UNORM + DXGI_FORMAT_R8G8_UNORM, // R8G8_UNORM + DXGI_FORMAT_R8G8B8A8_UNORM, // R8G8B8A8_UNORM + DXGI_FORMAT_R16_UNORM, // R16_UNORM + DXGI_FORMAT_R16G16_UNORM, // R16G16_UNORM + DXGI_FORMAT_R16G16B16A16_UNORM, // R16G16B16A16_UNORM + DXGI_FORMAT_R10G10B10A2_UNORM, // R10G10B10A2_UNORM + DXGI_FORMAT_B5G6R5_UNORM, // B5G6R5_UNORM + DXGI_FORMAT_B5G5R5A1_UNORM, // B5G5R5A1_UNORM + DXGI_FORMAT_B4G4R4A4_UNORM, // B4G4R4A4_UNORM + DXGI_FORMAT_B8G8R8A8_UNORM, // B8G8R8A8_UNORM + DXGI_FORMAT_BC1_UNORM, // BC1_UNORM + DXGI_FORMAT_BC2_UNORM, // BC2_UNORM + DXGI_FORMAT_BC3_UNORM, // BC3_UNORM + DXGI_FORMAT_BC4_UNORM, // BC4_UNORM + DXGI_FORMAT_BC5_UNORM, // BC5_UNORM + DXGI_FORMAT_BC7_UNORM, // BC7_UNORM + DXGI_FORMAT_BC6H_SF16, // BC6H_FLOAT + DXGI_FORMAT_BC6H_UF16, // BC6H_UFLOAT + DXGI_FORMAT_R8_SNORM, // R8_SNORM + DXGI_FORMAT_R8G8_SNORM, // R8G8_SNORM + DXGI_FORMAT_R8G8B8A8_SNORM, // R8G8B8A8_SNORM + DXGI_FORMAT_R16_SNORM, // R16_SNORM + DXGI_FORMAT_R16G16_SNORM, // R16G16_SNORM + DXGI_FORMAT_R16G16B16A16_SNORM, // R16G16B16A16_SNORM + DXGI_FORMAT_R16_FLOAT, // R16_FLOAT + DXGI_FORMAT_R16G16_FLOAT, // R16G16_FLOAT + DXGI_FORMAT_R16G16B16A16_FLOAT, // R16G16B16A16_FLOAT + DXGI_FORMAT_R32_FLOAT, // R32_FLOAT + DXGI_FORMAT_R32G32_FLOAT, // R32G32_FLOAT + DXGI_FORMAT_R32G32B32A32_FLOAT, // R32G32B32A32_FLOAT + DXGI_FORMAT_R11G11B10_FLOAT, // R11G11B10_UFLOAT + DXGI_FORMAT_R8_UINT, // R8_UINT + DXGI_FORMAT_R8G8_UINT, // R8G8_UINT + DXGI_FORMAT_R8G8B8A8_UINT, // R8G8B8A8_UINT + DXGI_FORMAT_R16_UINT, // R16_UINT + DXGI_FORMAT_R16G16_UINT, // R16G16_UINT + DXGI_FORMAT_R16G16B16A16_UINT, // R16G16B16A16_UINT + DXGI_FORMAT_R32_UINT, // R32_UINT + DXGI_FORMAT_R32G32_UINT, // R32G32_UINT + DXGI_FORMAT_R32G32B32A32_UINT, // R32G32B32A32_UINT + DXGI_FORMAT_R8_SINT, // R8_INT + DXGI_FORMAT_R8G8_SINT, // R8G8_INT + DXGI_FORMAT_R8G8B8A8_SINT, // R8G8B8A8_INT + DXGI_FORMAT_R16_SINT, // R16_INT + DXGI_FORMAT_R16G16_SINT, // R16G16_INT + DXGI_FORMAT_R16G16B16A16_SINT, // R16G16B16A16_INT + DXGI_FORMAT_R32_SINT, // R32_INT + DXGI_FORMAT_R32G32_SINT, // R32G32_INT + DXGI_FORMAT_R32G32B32A32_SINT, // R32G32B32A32_INT + DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, // R8G8B8A8_UNORM_SRGB + DXGI_FORMAT_B8G8R8A8_UNORM_SRGB, // B8G8R8A8_UNORM_SRGB + DXGI_FORMAT_BC1_UNORM_SRGB, // BC1_UNORM_SRGB + DXGI_FORMAT_BC2_UNORM_SRGB, // BC2_UNORM_SRGB + DXGI_FORMAT_BC3_UNORM_SRGB, // BC3_UNORM_SRGB + DXGI_FORMAT_BC7_UNORM_SRGB, // BC7_UNORM_SRGB + DXGI_FORMAT_R16_TYPELESS, // D16_UNORM + DXGI_FORMAT_R24G8_TYPELESS, // D24_UNORM + DXGI_FORMAT_R32_TYPELESS, // D32_FLOAT + DXGI_FORMAT_R24G8_TYPELESS, // D24_UNORM_S8_UINT + DXGI_FORMAT_R32G8X24_TYPELESS, // D32_FLOAT_S8_UINT + DXGI_FORMAT_UNKNOWN, // ASTC_4x4_UNORM + DXGI_FORMAT_UNKNOWN, // ASTC_5x4_UNORM + DXGI_FORMAT_UNKNOWN, // ASTC_5x5_UNORM + DXGI_FORMAT_UNKNOWN, // ASTC_6x5_UNORM + DXGI_FORMAT_UNKNOWN, // ASTC_6x6_UNORM + DXGI_FORMAT_UNKNOWN, // ASTC_8x5_UNORM + DXGI_FORMAT_UNKNOWN, // ASTC_8x6_UNORM + DXGI_FORMAT_UNKNOWN, // ASTC_8x8_UNORM + DXGI_FORMAT_UNKNOWN, // ASTC_10x5_UNORM + DXGI_FORMAT_UNKNOWN, // ASTC_10x6_UNORM + DXGI_FORMAT_UNKNOWN, // ASTC_10x8_UNORM + DXGI_FORMAT_UNKNOWN, // ASTC_10x10_UNORM + DXGI_FORMAT_UNKNOWN, // ASTC_12x10_UNORM + DXGI_FORMAT_UNKNOWN, // ASTC_12x12_UNORM + DXGI_FORMAT_UNKNOWN, // ASTC_4x4_UNORM_SRGB + DXGI_FORMAT_UNKNOWN, // ASTC_5x4_UNORM_SRGB + DXGI_FORMAT_UNKNOWN, // ASTC_5x5_UNORM_SRGB + DXGI_FORMAT_UNKNOWN, // ASTC_6x5_UNORM_SRGB + DXGI_FORMAT_UNKNOWN, // ASTC_6x6_UNORM_SRGB + DXGI_FORMAT_UNKNOWN, // ASTC_8x5_UNORM_SRGB + DXGI_FORMAT_UNKNOWN, // ASTC_8x6_UNORM_SRGB + DXGI_FORMAT_UNKNOWN, // ASTC_8x8_UNORM_SRGB + DXGI_FORMAT_UNKNOWN, // ASTC_10x5_UNORM_SRGB + DXGI_FORMAT_UNKNOWN, // ASTC_10x6_UNORM_SRGB + DXGI_FORMAT_UNKNOWN, // ASTC_10x8_UNORM_SRGB + DXGI_FORMAT_UNKNOWN, // ASTC_10x10_UNORM_SRGB + DXGI_FORMAT_UNKNOWN, // ASTC_12x10_UNORM_SRGB + DXGI_FORMAT_UNKNOWN, // ASTC_12x12_UNORM_SRGB + DXGI_FORMAT_UNKNOWN, // ASTC_4x4_FLOAT + DXGI_FORMAT_UNKNOWN, // ASTC_5x4_FLOAT + DXGI_FORMAT_UNKNOWN, // ASTC_5x5_FLOAT + DXGI_FORMAT_UNKNOWN, // ASTC_6x5_FLOAT + DXGI_FORMAT_UNKNOWN, // ASTC_6x6_FLOAT + DXGI_FORMAT_UNKNOWN, // ASTC_8x5_FLOAT + DXGI_FORMAT_UNKNOWN, // ASTC_8x6_FLOAT + DXGI_FORMAT_UNKNOWN, // ASTC_8x8_FLOAT + DXGI_FORMAT_UNKNOWN, // ASTC_10x5_FLOAT + DXGI_FORMAT_UNKNOWN, // ASTC_10x6_FLOAT + DXGI_FORMAT_UNKNOWN, // ASTC_10x8_FLOAT + DXGI_FORMAT_UNKNOWN, // ASTC_10x10_FLOAT + DXGI_FORMAT_UNKNOWN, // ASTC_12x10_FLOAT + DXGI_FORMAT_UNKNOWN, // ASTC_12x12_FLOAT +}; +StaticAssert(sizeof(JulietToD3D12_TextureFormat) / sizeof(JulietToD3D12_TextureFormat[0]) == TextureFormat_Count, TextureFormatCheck); + +internal DXGI_FORMAT JulietToD3D12_DepthFormat[] = { + DXGI_FORMAT_UNKNOWN, // INVALID + DXGI_FORMAT_UNKNOWN, // A8_UNORM + DXGI_FORMAT_UNKNOWN, // R8_UNORM + DXGI_FORMAT_UNKNOWN, // R8G8_UNORM + DXGI_FORMAT_UNKNOWN, // R8G8B8A8_UNORM + DXGI_FORMAT_UNKNOWN, // R16_UNORM + DXGI_FORMAT_UNKNOWN, // R16G16_UNORM + DXGI_FORMAT_UNKNOWN, // R16G16B16A16_UNORM + DXGI_FORMAT_UNKNOWN, // R10G10B10A2_UNORM + DXGI_FORMAT_UNKNOWN, // B5G6R5_UNORM + DXGI_FORMAT_UNKNOWN, // B5G5R5A1_UNORM + DXGI_FORMAT_UNKNOWN, // B4G4R4A4_UNORM + DXGI_FORMAT_UNKNOWN, // B8G8R8A8_UNORM + DXGI_FORMAT_UNKNOWN, // BC1_UNORM + DXGI_FORMAT_UNKNOWN, // BC2_UNORM + DXGI_FORMAT_UNKNOWN, // BC3_UNORM + DXGI_FORMAT_UNKNOWN, // BC4_UNORM + DXGI_FORMAT_UNKNOWN, // BC5_UNORM + DXGI_FORMAT_UNKNOWN, // BC7_UNORM + DXGI_FORMAT_UNKNOWN, // BC6H_FLOAT + DXGI_FORMAT_UNKNOWN, // BC6H_UFLOAT + DXGI_FORMAT_UNKNOWN, // R8_SNORM + DXGI_FORMAT_UNKNOWN, // R8G8_SNORM + DXGI_FORMAT_UNKNOWN, // R8G8B8A8_SNORM + DXGI_FORMAT_UNKNOWN, // R16_SNORM + DXGI_FORMAT_UNKNOWN, // R16G16_SNORM + DXGI_FORMAT_UNKNOWN, // R16G16B16A16_SNORM + DXGI_FORMAT_UNKNOWN, // R16_FLOAT + DXGI_FORMAT_UNKNOWN, // R16G16_FLOAT + DXGI_FORMAT_UNKNOWN, // R16G16B16A16_FLOAT + DXGI_FORMAT_UNKNOWN, // R32_FLOAT + DXGI_FORMAT_UNKNOWN, // R32G32_FLOAT + DXGI_FORMAT_UNKNOWN, // R32G32B32A32_FLOAT + DXGI_FORMAT_UNKNOWN, // R11G11B10_UFLOAT + DXGI_FORMAT_UNKNOWN, // R8_UINT + DXGI_FORMAT_UNKNOWN, // R8G8_UINT + DXGI_FORMAT_UNKNOWN, // R8G8B8A8_UINT + DXGI_FORMAT_UNKNOWN, // R16_UINT + DXGI_FORMAT_UNKNOWN, // R16G16_UINT + DXGI_FORMAT_UNKNOWN, // R16G16B16A16_UINT + DXGI_FORMAT_UNKNOWN, // R32_UINT + DXGI_FORMAT_UNKNOWN, // R32G32_UINT + DXGI_FORMAT_UNKNOWN, // R32G32B32A32_UINT + DXGI_FORMAT_UNKNOWN, // R8_INT + DXGI_FORMAT_UNKNOWN, // R8G8_INT + DXGI_FORMAT_UNKNOWN, // R8G8B8A8_INT + DXGI_FORMAT_UNKNOWN, // R16_INT + DXGI_FORMAT_UNKNOWN, // R16G16_INT + DXGI_FORMAT_UNKNOWN, // R16G16B16A16_INT + DXGI_FORMAT_UNKNOWN, // R32_INT + DXGI_FORMAT_UNKNOWN, // R32G32_INT + DXGI_FORMAT_UNKNOWN, // R32G32B32A32_INT + DXGI_FORMAT_UNKNOWN, // R8G8B8A8_UNORM_SRGB + DXGI_FORMAT_UNKNOWN, // B8G8R8A8_UNORM_SRGB + DXGI_FORMAT_UNKNOWN, // BC1_UNORM_SRGB + DXGI_FORMAT_UNKNOWN, // BC2_UNORM_SRGB + DXGI_FORMAT_UNKNOWN, // BC3_UNORM_SRGB + DXGI_FORMAT_UNKNOWN, // BC7_UNORM_SRGB + DXGI_FORMAT_D16_UNORM, // D16_UNORM + DXGI_FORMAT_D24_UNORM_S8_UINT, // D24_UNORM + DXGI_FORMAT_D32_FLOAT, // D32_FLOAT + DXGI_FORMAT_D24_UNORM_S8_UINT, // D24_UNORM_S8_UINT + DXGI_FORMAT_D32_FLOAT_S8X24_UINT, // D32_FLOAT_S8_UINT + DXGI_FORMAT_UNKNOWN, // ASTC_4x4_UNORM + DXGI_FORMAT_UNKNOWN, // ASTC_5x4_UNORM + DXGI_FORMAT_UNKNOWN, // ASTC_5x5_UNORM + DXGI_FORMAT_UNKNOWN, // ASTC_6x5_UNORM + DXGI_FORMAT_UNKNOWN, // ASTC_6x6_UNORM + DXGI_FORMAT_UNKNOWN, // ASTC_8x5_UNORM + DXGI_FORMAT_UNKNOWN, // ASTC_8x6_UNORM + DXGI_FORMAT_UNKNOWN, // ASTC_8x8_UNORM + DXGI_FORMAT_UNKNOWN, // ASTC_10x5_UNORM + DXGI_FORMAT_UNKNOWN, // ASTC_10x6_UNORM + DXGI_FORMAT_UNKNOWN, // ASTC_10x8_UNORM + DXGI_FORMAT_UNKNOWN, // ASTC_10x10_UNORM + DXGI_FORMAT_UNKNOWN, // ASTC_12x10_UNORM + DXGI_FORMAT_UNKNOWN, // ASTC_12x12_UNORM + DXGI_FORMAT_UNKNOWN, // ASTC_4x4_UNORM_SRGB + DXGI_FORMAT_UNKNOWN, // ASTC_5x4_UNORM_SRGB + DXGI_FORMAT_UNKNOWN, // ASTC_5x5_UNORM_SRGB + DXGI_FORMAT_UNKNOWN, // ASTC_6x5_UNORM_SRGB + DXGI_FORMAT_UNKNOWN, // ASTC_6x6_UNORM_SRGB + DXGI_FORMAT_UNKNOWN, // ASTC_8x5_UNORM_SRGB + DXGI_FORMAT_UNKNOWN, // ASTC_8x6_UNORM_SRGB + DXGI_FORMAT_UNKNOWN, // ASTC_8x8_UNORM_SRGB + DXGI_FORMAT_UNKNOWN, // ASTC_10x5_UNORM_SRGB + DXGI_FORMAT_UNKNOWN, // ASTC_10x6_UNORM_SRGB + DXGI_FORMAT_UNKNOWN, // ASTC_10x8_UNORM_SRGB + DXGI_FORMAT_UNKNOWN, // ASTC_10x10_UNORM_SRGB + DXGI_FORMAT_UNKNOWN, // ASTC_12x10_UNORM_SRGB + DXGI_FORMAT_UNKNOWN, // ASTC_12x12_UNORM_SRGB + DXGI_FORMAT_UNKNOWN, // ASTC_4x4_FLOAT + DXGI_FORMAT_UNKNOWN, // ASTC_5x4_FLOAT + DXGI_FORMAT_UNKNOWN, // ASTC_5x5_FLOAT + DXGI_FORMAT_UNKNOWN, // ASTC_6x5_FLOAT + DXGI_FORMAT_UNKNOWN, // ASTC_6x6_FLOAT + DXGI_FORMAT_UNKNOWN, // ASTC_8x5_FLOAT + DXGI_FORMAT_UNKNOWN, // ASTC_8x6_FLOAT + DXGI_FORMAT_UNKNOWN, // ASTC_8x8_FLOAT + DXGI_FORMAT_UNKNOWN, // ASTC_10x5_FLOAT + DXGI_FORMAT_UNKNOWN, // ASTC_10x6_FLOAT + DXGI_FORMAT_UNKNOWN, // ASTC_10x8_FLOAT + DXGI_FORMAT_UNKNOWN, // ASTC_10x10_FLOAT + DXGI_FORMAT_UNKNOWN, // ASTC_12x10_FLOAT + DXGI_FORMAT_UNKNOWN, // ASTC_12x12_FLOAT +}; +StaticAssert(sizeof(JulietToD3D12_DepthFormat) / sizeof(JulietToD3D12_DepthFormat[0]) == TextureFormat_Count, DepthFormatCheck); + +internal D3D12_INPUT_CLASSIFICATION JulietToD3D12_InputRate[] = { + D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, // VERTEX + D3D12_INPUT_CLASSIFICATION_PER_INSTANCE_DATA // INSTANCE +}; +StaticAssert(sizeof(JulietToD3D12_InputRate) / sizeof(JulietToD3D12_InputRate[0]) == VertexInputRate_Count, InputRateCheck); + +internal D3D12_CULL_MODE JulietToD3D12_CullMode[] = { + D3D12_CULL_MODE_NONE, + D3D12_CULL_MODE_FRONT, + D3D12_CULL_MODE_BACK +}; +StaticAssert(sizeof(JulietToD3D12_CullMode) / sizeof(JulietToD3D12_CullMode[0]) == CullMode_Count, CullModeCheck); + +internal D3D12_FILL_MODE JulietToD3D12_FillMode[] = { + D3D12_FILL_MODE_SOLID, + D3D12_FILL_MODE_WIREFRAME +}; +StaticAssert(sizeof(JulietToD3D12_FillMode) / sizeof(JulietToD3D12_FillMode[0]) == FillMode_Count, FillModeCheck); + +internal DXGI_FORMAT JulietToD3D12_VertexFormat[] = { + DXGI_FORMAT_UNKNOWN, // Unknown + DXGI_FORMAT_R32_SINT, // Int + DXGI_FORMAT_R32G32_SINT, // Int2 + DXGI_FORMAT_R32G32B32_SINT, // Int3 + DXGI_FORMAT_R32G32B32A32_SINT, // Int4 + DXGI_FORMAT_R32_UINT, // UInt + DXGI_FORMAT_R32G32_UINT, // UInt2 + DXGI_FORMAT_R32G32B32_UINT, // UInt3 + DXGI_FORMAT_R32G32B32A32_UINT, // UInt4 + DXGI_FORMAT_R32_FLOAT, // Float + DXGI_FORMAT_R32G32_FLOAT, // Float2 + DXGI_FORMAT_R32G32B32_FLOAT, // Float3 + DXGI_FORMAT_R32G32B32A32_FLOAT, // Float4 + DXGI_FORMAT_R8G8_SINT, // Byte2 + DXGI_FORMAT_R8G8B8A8_SINT, // Byte4 + DXGI_FORMAT_R8G8_UINT, // UByte2 + DXGI_FORMAT_R8G8B8A8_UINT, // UByte4 + DXGI_FORMAT_R8G8_SNORM, // Byte2_Norm + DXGI_FORMAT_R8G8B8A8_SNORM, // Byte4_Norm + DXGI_FORMAT_R8G8_UNORM, // UByte2_Norm + DXGI_FORMAT_R8G8B8A8_UNORM, // UByte4_Norm + DXGI_FORMAT_R16G16_SINT, // Short2 + DXGI_FORMAT_R16G16B16A16_SINT, // Short4 + DXGI_FORMAT_R16G16_UINT, // UShort2 + DXGI_FORMAT_R16G16B16A16_UINT, // UShort4 + DXGI_FORMAT_R16G16_SNORM, // Short2_Norm + DXGI_FORMAT_R16G16B16A16_SNORM, // Short4_Norm + DXGI_FORMAT_R16G16_UNORM, // UShort2_Norm + DXGI_FORMAT_R16G16B16A16_UNORM, // UShort4_Norm + DXGI_FORMAT_R16G16_FLOAT, // Half2 + DXGI_FORMAT_R16G16B16A16_FLOAT // Half4 +}; +StaticAssert(sizeof(JulietToD3D12_VertexFormat) / sizeof(JulietToD3D12_VertexFormat[0]) == VertexElementFormat_Count, VertexFormatCheck); + +internal D3D12_PRIMITIVE_TOPOLOGY_TYPE JulietToD3D12_PrimitiveTopologyType[] = { + D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE, + D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE, + D3D12_PRIMITIVE_TOPOLOGY_TYPE_LINE, + D3D12_PRIMITIVE_TOPOLOGY_TYPE_LINE, + D3D12_PRIMITIVE_TOPOLOGY_TYPE_POINT +}; +StaticAssert(sizeof(JulietToD3D12_PrimitiveTopologyType) / sizeof(JulietToD3D12_PrimitiveTopologyType[0]) == PrimitiveType_Count, PrimitiveTopologyTypeCheck); + +internal D3D12_BLEND JulietToD3D12_BlendFactor[] = { + D3D12_BLEND_ZERO, + D3D12_BLEND_ZERO, + D3D12_BLEND_ONE, + D3D12_BLEND_SRC_COLOR, + D3D12_BLEND_INV_SRC_COLOR, + D3D12_BLEND_DEST_COLOR, + D3D12_BLEND_INV_DEST_COLOR, + D3D12_BLEND_SRC_ALPHA, + D3D12_BLEND_INV_SRC_ALPHA, + D3D12_BLEND_DEST_ALPHA, + D3D12_BLEND_INV_DEST_ALPHA, + D3D12_BLEND_BLEND_FACTOR, + D3D12_BLEND_INV_BLEND_FACTOR, + D3D12_BLEND_SRC_ALPHA_SAT, +}; +StaticAssert(sizeof(JulietToD3D12_BlendFactor) / sizeof(JulietToD3D12_BlendFactor[0]) == BlendFactor_Count, BlendFactorCheck); + +internal D3D12_BLEND JulietToD3D12_BlendFactorAlpha[] = { + D3D12_BLEND_ZERO, + D3D12_BLEND_ZERO, + D3D12_BLEND_ONE, + D3D12_BLEND_SRC_ALPHA, + D3D12_BLEND_INV_SRC_ALPHA, + D3D12_BLEND_DEST_ALPHA, + D3D12_BLEND_INV_DEST_ALPHA, + D3D12_BLEND_SRC_ALPHA, + D3D12_BLEND_INV_SRC_ALPHA, + D3D12_BLEND_DEST_ALPHA, + D3D12_BLEND_INV_DEST_ALPHA, + D3D12_BLEND_BLEND_FACTOR, + D3D12_BLEND_INV_BLEND_FACTOR, + D3D12_BLEND_SRC_ALPHA_SAT, +}; +StaticAssert(sizeof(JulietToD3D12_BlendFactorAlpha) / sizeof(JulietToD3D12_BlendFactorAlpha[0]) == BlendFactor_Count, BlendFactorAlphaCheck); + +internal D3D12_BLEND_OP JulietToD3D12_BlendOperation[] = { + D3D12_BLEND_OP_ADD, + D3D12_BLEND_OP_ADD, + D3D12_BLEND_OP_SUBTRACT, + D3D12_BLEND_OP_REV_SUBTRACT, + D3D12_BLEND_OP_MIN, + D3D12_BLEND_OP_MAX +}; +StaticAssert(sizeof(JulietToD3D12_BlendOperation) / sizeof(JulietToD3D12_BlendOperation[0]) == BlendOperation_Count, BlendOperationCheck); + +internal D3D12_COMPARISON_FUNC JulietToD3D12_CompareOperation[] = { + D3D12_COMPARISON_FUNC_NEVER, + D3D12_COMPARISON_FUNC_NEVER, + D3D12_COMPARISON_FUNC_LESS, + D3D12_COMPARISON_FUNC_EQUAL, + D3D12_COMPARISON_FUNC_LESS_EQUAL, + D3D12_COMPARISON_FUNC_GREATER, + D3D12_COMPARISON_FUNC_NOT_EQUAL, + D3D12_COMPARISON_FUNC_GREATER_EQUAL, + D3D12_COMPARISON_FUNC_ALWAYS +}; +StaticAssert(sizeof(JulietToD3D12_CompareOperation) / sizeof(JulietToD3D12_CompareOperation[0]) == CompareOperation_Count, CompareOperationCheck); + +internal D3D12_STENCIL_OP JulietToD3D12_StencilOperation[] = { + D3D12_STENCIL_OP_KEEP, + D3D12_STENCIL_OP_KEEP, + D3D12_STENCIL_OP_ZERO, + D3D12_STENCIL_OP_REPLACE, + D3D12_STENCIL_OP_INCR_SAT, + D3D12_STENCIL_OP_DECR_SAT, + D3D12_STENCIL_OP_INVERT, + D3D12_STENCIL_OP_INCR, + D3D12_STENCIL_OP_DECR +}; +StaticAssert(sizeof(JulietToD3D12_StencilOperation) / sizeof(JulietToD3D12_StencilOperation[0]) == StencilOperation_Count, StencilOperationCheck); + +internal D3D12_PRIMITIVE_TOPOLOGY JulietToD3D12_PrimitiveType[] = { + D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST, + D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP, + D3D_PRIMITIVE_TOPOLOGY_LINELIST, + D3D_PRIMITIVE_TOPOLOGY_LINESTRIP, + D3D_PRIMITIVE_TOPOLOGY_POINTLIST +}; +StaticAssert(sizeof(JulietToD3D12_PrimitiveType) / sizeof(JulietToD3D12_PrimitiveType[0]) == PrimitiveType_Count, PrimitiveTypeCheck); + +typedef uint8 RootParameters; +enum +{ + RootParameters_Constants32Bits, + RootParameters_Count, +}; + +typedef struct D3D12TextureContainer D3D12TextureContainer; +struct D3D12TextureContainer +{ + TextureHeader Header; + + D3D12Texture* ActiveTexture; + D3D12Texture** Textures; + uint32 Capacity; + uint32 Count; + + bool8 CanBeCycled; + +#if JULIET_DEBUG + char* DebugName; +#endif +}; + +typedef struct D3D12WindowData D3D12WindowData; +struct D3D12WindowData +{ + Window* Window; + + IDXGISwapChain3* SwapChain; + D3D12TextureContainer SwapChainTextureContainers[kGPUDriver_MaxFramesInFlight]; + DXGI_COLOR_SPACE_TYPE SwapChainColorSpace; + SwapChainComposition SwapChainComposition; + uint8 SwapChainTextureCount; + + PresentMode PresentMode; + + Fence* InFlightFences[kGPUDriver_MaxFramesInFlight]; + + uint32 WindowFrameCounter; + uint32 Width; + uint32 Height; +}; + +typedef struct D3D12CommandListBaseData D3D12CommandListBaseData; +struct D3D12CommandListBaseData +{ + ID3D12CommandAllocator* Allocator; +}; + +typedef struct D3D12CopyCommandListData D3D12CopyCommandListData; +struct D3D12CopyCommandListData +{ + ID3D12CommandAllocator* Allocator; + ID3D12GraphicsCommandList* CommandList; +}; + +typedef struct D3D12GraphicsCommandListData D3D12GraphicsCommandListData; +struct D3D12GraphicsCommandListData +{ + ID3D12CommandAllocator* Allocator; + ID3D12GraphicsCommandList6* CommandList; +}; + +typedef struct D3D12Shader D3D12Shader; +struct D3D12Shader +{ + ByteBuffer ByteCode; + + uint32 NumSamplers; + uint32 NumUniformBuffers; + uint32 NumStorageBuffers; + uint32 NumStorageTextures; +}; + +typedef struct D3D12PresentData D3D12PresentData; +struct D3D12PresentData +{ + D3D12WindowData* WindowData; + uint32 SwapChainImageIndex; +}; + +typedef struct D3D12DescriptorHeap D3D12DescriptorHeap; +struct D3D12DescriptorHeap +{ + D3D12DescriptorHeap* Next; + ID3D12DescriptorHeap* Handle; + D3D12_DESCRIPTOR_HEAP_TYPE HeapType; + D3D12_CPU_DESCRIPTOR_HANDLE DescriptorHeapCPUStart; + D3D12_GPU_DESCRIPTOR_HANDLE DescriptorHeapGPUStart; + uint32 MaxDescriptors; + uint32 DescriptorSize; + uint32 CurrentDescriptorIndex; + + VectorArena FreeIndices; + index_t CurrentFreeIndex; + + bool8 Staging : 1; +}; + +typedef struct D3D12Descriptor D3D12Descriptor; +struct D3D12Descriptor +{ + D3D12DescriptorHeap* Heap; + uint32 Index; + D3D12_CPU_DESCRIPTOR_HANDLE CpuHandle; + D3D12_GPU_DESCRIPTOR_HANDLE GpuHandle; +}; + +typedef struct D3D12DescriptorHeapPool D3D12DescriptorHeapPool; +struct D3D12DescriptorHeapPool +{ + D3D12DescriptorHeap* FirstFreeDescriptorHeap; +}; + +typedef struct D3D12StagingDescriptor D3D12StagingDescriptor; +struct D3D12StagingDescriptor +{ + D3D12StagingDescriptorPool* Pool; + D3D12DescriptorHeap* Heap; + D3D12_CPU_DESCRIPTOR_HANDLE CpuHandle; + uint32 CpuHandleIndex; +}; + +struct D3D12StagingDescriptorPool +{ + D3D12DescriptorHeap** Heaps; + uint32 HeapCount; + + uint32 FreeDescriptorCapacity; + uint32 FreeDescriptorCount; + D3D12StagingDescriptor* FreeDescriptors; +}; + +typedef struct D3D12Buffer D3D12Buffer; +struct D3D12Buffer +{ + D3D12Descriptor Descriptor; + ID3D12Resource* Handle; + D3D12_RESOURCE_STATES CurrentState; + + D3D12Buffer* Next; + size_t Size; +}; + +struct D3D12Driver +{ + Arena* DriverArena; + GraphicsDevice* GraphicsDevice; + + DynamicLibrary* D3D12DLL; + ID3D12Device5* D3D12Device; + PFN_D3D12_SERIALIZE_VERSIONED_ROOT_SIGNATURE D3D12SerializeVersionedRootSignatureFct; + ID3D12CommandQueue* GraphicsQueue; + D3D12_COMMAND_QUEUE_DESC QueueDesc[QueueType_Count]; +#if JULIET_DEBUG + ID3D12Debug1* D3D12Debug; +#endif + + ID3D12CommandSignature* IndirectDrawCommandSignature; + ID3D12CommandSignature* IndirectIndexedDrawCommandSignature; + ID3D12CommandSignature* IndirectDispatchCommandSignature; + + IDXGIFactory4* DXGIFactory; + IDXGIAdapter1* DXGIAdapter; +#if JULIET_DEBUG + DynamicLibrary* DXGIDebugDLL; + IDXGIDebug* DXGIDebug; +#ifdef IDXGIINFOQUEUE_SUPPORTED + IDXGIInfoQueue* DXGIInfoQueue; +#endif +#endif + + D3D12WindowData* WindowData; + + D3D12CommandList** AvailableCommandLists; + uint8 AvailableCommandListCapacity; + uint8 AvailableCommandListCount; + + D3D12CommandList** SubmittedCommandLists; + uint8 SubmittedCommandListCapacity; + uint8 SubmittedCommandListCount; + + D3D12Fence** AvailableFences; + uint32 AvailableFenceCount; + uint32 AvailableFenceCapacity; + + D3D12GraphicsPipeline** GraphicsPipelinesToDispose; + uint32 GraphicsPipelinesToDisposeCount; + uint32 GraphicsPipelinesToDisposeCapacity; + + D3D12GraphicsRootSignature* BindlessRootSignature; + + D3D12StagingDescriptorPool* StagingDescriptorPools[D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES]; + D3D12DescriptorHeap* BindlessDescriptorHeap; + D3D12DescriptorHeapPool SamplerHeapPool; + + String Semantic; + + uint8 FramesInFlight; + uint64 FrameCounter; + + bool8 IsTearingSupported : 1; + bool8 IsUMAAvailable : 1; + bool8 IsUMACacheCoherent : 1; + bool8 GPUUploadHeapSupported : 1; +}; + +struct D3D12GraphicsRootSignature +{ + ID3D12RootSignature* Handle; +}; + +struct D3D12GraphicsPipeline +{ +#if ALLOW_SHADER_HOT_RELOAD + D3D12_GRAPHICS_PIPELINE_STATE_DESC PSODescTemplate; + + D3D12Shader* VertexShaderCache; + D3D12Shader* FragmentShaderCache; +#endif + + ID3D12PipelineState* PipelineState; + D3D12GraphicsRootSignature* RootSignature; + PrimitiveType PrimitiveType; + + uint32 VertexStrides[kGPUDriver_MaxVertexBuffers]; + + uint32 VertexSamplerCount; + uint32 VertexUniformBufferCount; + uint32 VertexStorageBufferCount; + uint32 VertexStorageTextureCount; + + uint32 FragmentSamplerCount; + uint32 FragmentUniformBufferCount; + uint32 FragmentStorageBufferCount; + uint32 FragmentStorageTextureCount; + + int32 ReferenceCount; +}; + +struct D3D12CommandList +{ + CommandListHeader Common; + + index_t ID; + + D3D12Driver* Driver; + + D3D12PresentData* PresentDatas; + uint32 PresentDataCapacity; + uint32 PresentDataCount; + + D3D12Fence* InFlightFence; + bool8 AutoReleaseFence; + + D3D12GraphicsCommandListData GraphicsCommandList; + D3D12GraphicsCommandListData ComputeCommandList; + D3D12CopyCommandListData CopyCommandList; + + D3D12GraphicsPipeline* CurrentGraphicsPipeline; + + D3D12TextureSubresource* ColorTargetSubresources[kGPUDriver_MaxColorTargetInfo]; + D3D12TextureSubresource* ColorResolveSubresources[kGPUDriver_MaxColorTargetInfo]; + D3D12TextureSubresource* DepthStencilSubresource; + + bool8 NeedVertexBufferBind : 1; + bool8 NeedVertexSamplerBind : 1; + bool8 NeedVertexStorageTextureBind : 1; + bool8 NeedVertexStorageBufferBind : 1; + + bool8 NeedFragmentSamplerBind : 1; + bool8 NeedFragmentStorageTextureBind : 1; + bool8 NeedFragmentStorageBufferBind : 1; + + bool8 NeedVertexUniformBufferBind[kGPUDriver_MaxUniformBuffersPerStage]; + bool8 NeedFragmentUniformBufferBind[kGPUDriver_MaxUniformBuffersPerStage]; + + D3D12DescriptorHeap* CRB_SRV_UAV_Heap; + D3D12DescriptorHeap* Sampler_Heap; + + D3D12Texture** UsedTextures; + uint32 UsedTextureCount; + uint32 UsedTextureCapacity; + + D3D12GraphicsPipeline** UsedGraphicsPipelines; + uint32 UsedGraphicsPipelineCount; + uint32 UsedGraphicsPipelineCapacity; +}; + +struct D3D12TextureSubresource +{ + D3D12Texture* Parent; + uint32 Layer; + uint32 Level; + uint32 Depth; + uint32 Index; + + D3D12StagingDescriptor* RTVHandles; + + D3D12StagingDescriptor UAVHandle; + D3D12StagingDescriptor DSVHandle; +}; + +struct D3D12Texture +{ + D3D12TextureContainer* Container; + uint32 IndexInContainer; + + ID3D12Resource* Resource; + + D3D12TextureSubresource* Subresources; + uint32 SubresourceCount; + + D3D12StagingDescriptor SRVHandle; + + int32 ReferenceCount; +}; + +struct D3D12Fence +{ + ID3D12Fence* Handle; + HANDLE Event; + int32 ReferenceCount; +}; + +internal DXGI_FORMAT ConvertToD3D12TextureFormat(TextureFormat format) +{ + return JulietToD3D12_TextureFormat[format]; +} + +internal DXGI_FORMAT ConvertToD3D12DepthFormat(TextureFormat format) +{ + return JulietToD3D12_DepthFormat[format]; +} + +internal void D3D12_LogError(ID3D12Device5* d3d12Device, const char* errorMessage, HRESULT result) +{ + Assert(d3d12Device != NULL); +#define MAX_ERROR_LEN 1024 + + char wszMsgBuff[MAX_ERROR_LEN + 1]; + + if (result == DXGI_ERROR_DEVICE_REMOVED) + { + result = ID3D12Device5_GetDeviceRemovedReason(d3d12Device); + } + + DWORD dwChars = FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, + (DWORD)result, 0, wszMsgBuff, MAX_ERROR_LEN, NULL); + + if (dwChars == 0) + { + Log(LogLevel_Error, LogCategory_Graphics, "%s! Error: " HRESULT_FMT, errorMessage, result); + } + else + { + dwChars = Min(dwChars, (DWORD)MAX_ERROR_LEN); + + while (dwChars > 0) + { + if (wszMsgBuff[dwChars - 1] <= ' ') + { + dwChars--; + } + else + { + break; + } + } + + wszMsgBuff[dwChars] = '\0'; + + Log(LogLevel_Error, LogCategory_Graphics, "%s! Error: %s" HRESULT_FMT, errorMessage, wszMsgBuff, result); + } +} + +#if JULIET_DEBUG +internal String GetDescriptorTypeName(D3D12_DESCRIPTOR_HEAP_TYPE type) +{ + String result = WrapString("Invalid"); + switch (type) + { + case D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV: + { + result = WrapString("D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV"); + break; + } + case D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER: + { + result = WrapString("D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER"); + break; + } + case D3D12_DESCRIPTOR_HEAP_TYPE_RTV: + { + result = WrapString("D3D12_DESCRIPTOR_HEAP_TYPE_RTV"); + break; + } + case D3D12_DESCRIPTOR_HEAP_TYPE_DSV: + { + result = WrapString("D3D12_DESCRIPTOR_HEAP_TYPE_DSV"); + break; + } + case D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES: + { + result = WrapString("Invalid"); + break; + } + } + return result; +} +#endif + +internal bool8 CheckResourceTypeTier(ID3D12Device5* device) +{ + bool8 ok = false; + D3D12_FEATURE_DATA_D3D12_OPTIONS options = { 0 }; + HRESULT result = + ID3D12Device5_CheckFeatureSupport(device, D3D12_FEATURE_D3D12_OPTIONS, &options, sizeof(D3D12_FEATURE_DATA_D3D12_OPTIONS)); + if (SUCCEEDED(result)) + { + if (options.ResourceBindingTier < D3D12_RESOURCE_BINDING_TIER_3) + { + LogError(LogCategory_Graphics, "Resource Binding Tier 3 not supported. :("); + } + else + { + ok = true; + } + } + else + { + LogError(LogCategory_Graphics, "Couldn't fetch D3D12_FEATURE_D3D12_OPTIONS :("); + } + return ok; +} + +internal bool8 CheckShaderModel(ID3D12Device5* device) +{ + bool8 foundShaderModel = false; + D3D12_FEATURE_DATA_SHADER_MODEL shaderModel = { 0 }; + const D3D_SHADER_MODEL allModelVersions[] = { +#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612) + D3D_SHADER_MODEL_6_9, +#endif +#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 606) + D3D_SHADER_MODEL_6_8, +#endif +#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 3) + D3D_SHADER_MODEL_6_7, +#endif + D3D_SHADER_MODEL_6_6, D3D_SHADER_MODEL_6_5, D3D_SHADER_MODEL_6_4, D3D_SHADER_MODEL_6_3, + D3D_SHADER_MODEL_6_2, D3D_SHADER_MODEL_6_1, D3D_SHADER_MODEL_6_0, D3D_SHADER_MODEL_5_1 + }; + for (size_t i = 0; i < ArraySize(allModelVersions); ++i) + { + shaderModel.HighestShaderModel = allModelVersions[i]; + HRESULT result = ID3D12Device5_CheckFeatureSupport(device, D3D12_FEATURE_SHADER_MODEL, &shaderModel, + sizeof(D3D12_FEATURE_DATA_SHADER_MODEL)); + if (result != E_INVALIDARG) + { + if (FAILED(result)) + { + shaderModel.HighestShaderModel = (D3D_SHADER_MODEL)0; + } + else + { + foundShaderModel = true; + break; + } + } + } + + if (!foundShaderModel) + { + shaderModel.HighestShaderModel = (D3D_SHADER_MODEL)0; + } + + bool8 ok = true; + if (shaderModel.HighestShaderModel < D3D_SHADER_MODEL_6_6) + { + LogError(LogCategory_Graphics, "Shader Model 6.6 not supported. :("); + ok = false; + } + return ok; +} + +internal bool8 D3D12_CheckDriver(void) +{ + bool8 driverIsValid = false; + DynamicLibrary* d3d12_dll = LoadDynamicLibrary(D3D12_DLL); + if (d3d12_dll == NULL) + { + Log(LogLevel_Warning, LogCategory_Graphics, "DX12: Couldn't find " D3D12_DLL); + } + else + { + PFN_D3D12_CREATE_DEVICE D3D12CreateDeviceFuncPtr = + TOD3D12FuncPtr(PFN_D3D12_CREATE_DEVICE, LoadFunction(d3d12_dll, D3D12_CREATEDEVICE_FUNC)); + if (D3D12CreateDeviceFuncPtr == NULL) + { + Log(LogLevel_Warning, LogCategory_Graphics, "DX12: Couldn't find function " D3D12_CREATEDEVICE_FUNC " in " D3D12_DLL); + UnloadDynamicLibrary(d3d12_dll); + } + else + { + IDXGIFactory1* factory1 = NULL; + HRESULT result = CreateDXGIFactory1(&IID_IDXGIFactory1, (void**)&factory1); + if (FAILED(result)) + { + Log(LogLevel_Warning, LogCategory_Graphics, "DX12: Cannot create DXGIFactory1"); + } + else + { + IDXGIFactory4* factory4 = NULL; + result = IDXGIFactory1_QueryInterface(factory1, &IID_IDXGIFactory4, (void**)&factory4); + if (FAILED(result)) + { + IDXGIFactory1_Release(factory1); + Log(LogLevel_Warning, LogCategory_Graphics, "DX12: Failed to query DXGI1.4."); + } + else + { + IDXGIFactory4_Release(factory4); + + IDXGIAdapter1* adapter = NULL; + IDXGIFactory6* factory6 = NULL; + result = IDXGIFactory1_QueryInterface(factory1, &IID_IDXGIFactory6, (void**)&factory6); + if (SUCCEEDED(result)) + { + result = IDXGIFactory6_EnumAdapterByGpuPreference(factory6, 0, DXGI_GPU_PREFERENCE_HIGH_PERFORMANCE, + &IID_IDXGIAdapter1, (void**)&adapter); + IDXGIFactory6_Release(factory6); + } + else + { + result = IDXGIFactory1_EnumAdapters1(factory1, 0, &adapter); + } + + if (FAILED(result)) + { + Log(LogLevel_Warning, LogCategory_Graphics, "DX12: Failed to find an adapter for D3D12."); + IDXGIFactory1_Release(factory1); + } + else + { + ID3D12Device5* device = NULL; + result = D3D12CreateDeviceFuncPtr((IUnknown*)adapter, kD3DFeatureLevel, &IID_ID3D12Device5, + (void**)&device); + + driverIsValid = true; + if (SUCCEEDED(result)) + { + driverIsValid = driverIsValid && CheckShaderModel(device); + driverIsValid = driverIsValid && CheckResourceTypeTier(device); + + ID3D12Device5_Release(device); + } + else + { + Log(LogLevel_Warning, LogCategory_Graphics, "DX12: Failed to create a D3D12Device with feature level %s.", + kD3DFeatureLevelStr); + driverIsValid = false; + } + IDXGIAdapter1_Release(adapter); + IDXGIFactory1_Release(factory1); + } + } + } + } + } + + return driverIsValid; +} + +internal void DestroyGraphicsRootSignature(D3D12GraphicsRootSignature* rootSignature) +{ + if (rootSignature != NULL) + { + if (rootSignature->Handle != NULL) + { + ID3D12RootSignature_Release(rootSignature->Handle); + } + FreeMemory(rootSignature); + } +} + +internal D3D12GraphicsRootSignature* CreateGraphicsRootSignature(D3D12Driver* d3d12Driver) +{ + Assert(d3d12Driver != NULL); + D3D12GraphicsRootSignature* d3d12GraphicsRootSignature = + (D3D12GraphicsRootSignature*)Calloc(1, sizeof(D3D12GraphicsRootSignature)); + if (d3d12GraphicsRootSignature != NULL) + { + D3D12_ROOT_PARAMETER1 parameters[RootParameters_Count] = { 0 }; + parameters[RootParameters_Constants32Bits].ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS; + parameters[RootParameters_Constants32Bits].Constants.ShaderRegister = 0; + parameters[RootParameters_Constants32Bits].Constants.RegisterSpace = 0; + parameters[RootParameters_Constants32Bits].Constants.Num32BitValues = 58; + parameters[RootParameters_Constants32Bits].ShaderVisibility = D3D12_SHADER_VISIBILITY_ALL; + + D3D12_STATIC_SAMPLER_DESC samplers[] = { + { + .Filter = D3D12_FILTER_MIN_MAG_POINT_MIP_LINEAR, + .AddressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + .AddressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + .AddressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP, + .MipLODBias = 0.0f, + .MaxAnisotropy = 0, + .ComparisonFunc = D3D12_COMPARISON_FUNC_NONE, + .BorderColor = D3D12_STATIC_BORDER_COLOR_TRANSPARENT_BLACK, + .MinLOD = 0.0f, + .MaxLOD = D3D12_FLOAT32_MAX, + .ShaderRegister = 0, + .RegisterSpace = 0, + .ShaderVisibility = D3D12_SHADER_VISIBILITY_ALL, + }, + }; + + D3D12_VERSIONED_ROOT_SIGNATURE_DESC rootSignatureDesc = { + .Version = D3D_ROOT_SIGNATURE_VERSION_1_1, + .Desc_1_1 = { + .NumParameters = ArraySize(parameters), + .pParameters = parameters, + .NumStaticSamplers = ArraySize(samplers), + .pStaticSamplers = samplers, + .Flags = D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT | + D3D12_ROOT_SIGNATURE_FLAG_CBV_SRV_UAV_HEAP_DIRECTLY_INDEXED | + D3D12_ROOT_SIGNATURE_FLAG_SAMPLER_HEAP_DIRECTLY_INDEXED, + }, + }; + + ID3DBlob* serializedRootSignature = NULL; + ID3DBlob* errorBlob = NULL; + HRESULT res = d3d12Driver->D3D12SerializeVersionedRootSignatureFct(&rootSignatureDesc, &serializedRootSignature, &errorBlob); + if (FAILED(res)) + { + if (errorBlob != NULL) + { + const char* errorBuffer = (const char*)ID3D10Blob_GetBufferPointer(errorBlob); + LogError(LogCategory_Graphics, "Failed to serialize RootSignature: %s", errorBuffer); + ID3D10Blob_Release(errorBlob); + } + DestroyGraphicsRootSignature(d3d12GraphicsRootSignature); + d3d12GraphicsRootSignature = NULL; + } + else + { + ID3D12RootSignature* rootSignature = NULL; + res = ID3D12Device5_CreateRootSignature(d3d12Driver->D3D12Device, 0, + ID3D10Blob_GetBufferPointer(serializedRootSignature), + ID3D10Blob_GetBufferSize(serializedRootSignature), + &IID_ID3D12RootSignature, (void**)&rootSignature); + if (FAILED(res)) + { + if (errorBlob != NULL) + { + LogError(LogCategory_Graphics, "Failed to create RootSignature: %s", + (const char*)ID3D10Blob_GetBufferPointer(errorBlob)); + ID3D10Blob_Release(errorBlob); + } + DestroyGraphicsRootSignature(d3d12GraphicsRootSignature); + d3d12GraphicsRootSignature = NULL; + } + else + { + d3d12GraphicsRootSignature->Handle = rootSignature; + } + } + } + + return d3d12GraphicsRootSignature; +} + +#if JULIET_DEBUG + +#ifdef IDXGIINFOQUEUE_SUPPORTED + +#define DXGIDEBUG_DLL "dxgidebug.dll" +#define DXGI_GET_DEBUG_INTERFACE_FUNC "DXGIGetDebugInterface" + +typedef HRESULT(WINAPI* LPDXGIGETDEBUGINTERFACE)(REFIID, void**); + +internal void InitializeDXGIDebug(D3D12Driver* driver) +{ + Assert(driver != NULL); + driver->DXGIDebugDLL = LoadDynamicLibrary(DXGIDEBUG_DLL); + if (driver->DXGIDebugDLL != NULL) + { + LPDXGIGETDEBUGINTERFACE dxgiGetDebugInterface = + TOD3D12FuncPtr(LPDXGIGETDEBUGINTERFACE, LoadFunction(driver->DXGIDebugDLL, DXGI_GET_DEBUG_INTERFACE_FUNC)); + + HRESULT result = dxgiGetDebugInterface(&IID_IDXGIDebug, (void**)&driver->DXGIDebug); + if (FAILED(result)) + { + Log(LogLevel_Warning, LogCategory_Graphics, "Could not get IDXGIDebug interface"); + } + + result = dxgiGetDebugInterface(&IID_IDXGIInfoQueue, (void**)&driver->DXGIInfoQueue); + if (FAILED(result)) + { + Log(LogLevel_Warning, LogCategory_Graphics, "Could not get IDXGIInfoQueue interface"); + } + else + { + IDXGIInfoQueue_SetBreakOnSeverity(driver->DXGIInfoQueue, DXGI_DEBUG_ALL, DXGI_INFO_QUEUE_MESSAGE_SEVERITY_ERROR, TRUE); + IDXGIInfoQueue_SetBreakOnSeverity(driver->DXGIInfoQueue, DXGI_DEBUG_ALL, DXGI_INFO_QUEUE_MESSAGE_SEVERITY_CORRUPTION, TRUE); + IDXGIInfoQueue_SetBreakOnSeverity(driver->DXGIInfoQueue, DXGI_DEBUG_ALL, DXGI_INFO_QUEUE_MESSAGE_SEVERITY_WARNING, TRUE); + } + } +} + +internal void ShutdownDXGIDebug(D3D12Driver* driver) +{ + Assert(driver != NULL); + if (driver->DXGIDebug != NULL) + { + IDXGIDebug_ReportLiveObjects(driver->DXGIDebug, DXGI_DEBUG_ALL, + (DXGI_DEBUG_RLO_FLAGS)(DXGI_DEBUG_RLO_SUMMARY | DXGI_DEBUG_RLO_DETAIL)); + IDXGIDebug_Release(driver->DXGIDebug); + driver->DXGIDebug = NULL; + } + + if (driver->DXGIDebugDLL != NULL) + { + UnloadDynamicLibrary(driver->DXGIDebugDLL); + driver->DXGIDebugDLL = NULL; + } +} +#endif + +#define D3D12_GET_DEBUG_INTERFACE_FUNC "D3D12GetDebugInterface" + +internal void InitializeD3D12DebugLayer(D3D12Driver* driver) +{ + Assert(driver != NULL); + PFN_D3D12_GET_DEBUG_INTERFACE D3D12GetDebugInterfaceFunc = + TOD3D12FuncPtr(PFN_D3D12_GET_DEBUG_INTERFACE, LoadFunction(driver->D3D12DLL, D3D12_GET_DEBUG_INTERFACE_FUNC)); + + if (D3D12GetDebugInterfaceFunc == NULL) + { + LogWarning(LogCategory_Graphics, "Could not load function: " D3D12_GET_DEBUG_INTERFACE_FUNC); + } + else + { + HRESULT result = D3D12GetDebugInterfaceFunc(&IID_ID3D12Debug1, (void**)&driver->D3D12Debug); + if (FAILED(result)) + { + LogWarning(LogCategory_Graphics, "Could not get ID3D12Debug interface"); + } + else + { + ID3D12Debug1_EnableDebugLayer(driver->D3D12Debug); + } + } +} + +internal bool8 InitializeD3D12DebugInfoQueue(D3D12Driver* driver) +{ + Assert(driver != NULL); + bool8 ok = false; + ID3D12InfoQueue* infoQueue = NULL; + D3D12_MESSAGE_SEVERITY severities[] = { D3D12_MESSAGE_SEVERITY_INFO }; + + HRESULT result = ID3D12Device5_QueryInterface(driver->D3D12Device, &IID_ID3D12InfoQueue, (void**)&infoQueue); + if (FAILED(result)) + { + D3D12_LogError(driver->D3D12Device, "Failed to convert ID3D12Device to ID3D12InfoQueue", result); + } + else + { + D3D12_INFO_QUEUE_FILTER filter = { 0 }; + filter.DenyList.NumSeverities = 1; + filter.DenyList.pSeverityList = severities; + ID3D12InfoQueue_PushStorageFilter(infoQueue, &filter); + ID3D12InfoQueue_Release(infoQueue); + ok = true; + } + + return ok; +} + +internal void WINAPI OnD3D12DebugInfoMsg(D3D12_MESSAGE_CATEGORY category, D3D12_MESSAGE_SEVERITY severity, + D3D12_MESSAGE_ID id, LPCSTR description, void* context) +{ + (void)context; + String catStr = WrapString("UNKNOWN"); + switch (category) + { + case D3D12_MESSAGE_CATEGORY_APPLICATION_DEFINED: catStr = WrapString("APPLICATION_DEFINED"); break; + case D3D12_MESSAGE_CATEGORY_MISCELLANEOUS: catStr = WrapString("MISCELLANEOUS"); break; + case D3D12_MESSAGE_CATEGORY_INITIALIZATION: catStr = WrapString("INITIALIZATION"); break; + case D3D12_MESSAGE_CATEGORY_CLEANUP: catStr = WrapString("CLEANUP"); break; + case D3D12_MESSAGE_CATEGORY_COMPILATION: catStr = WrapString("COMPILATION"); break; + case D3D12_MESSAGE_CATEGORY_STATE_CREATION: catStr = WrapString("STATE_CREATION"); break; + case D3D12_MESSAGE_CATEGORY_STATE_SETTING: catStr = WrapString("STATE_SETTING"); break; + case D3D12_MESSAGE_CATEGORY_STATE_GETTING: catStr = WrapString("STATE_GETTING"); break; + case D3D12_MESSAGE_CATEGORY_RESOURCE_MANIPULATION: catStr = WrapString("RESOURCE_MANIPULATION"); break; + case D3D12_MESSAGE_CATEGORY_EXECUTION: catStr = WrapString("EXECUTION"); break; + case D3D12_MESSAGE_CATEGORY_SHADER: catStr = WrapString("SHADER"); break; + } + + String severityStr = WrapString("UNKNOWN"); + switch (severity) + { + case D3D12_MESSAGE_SEVERITY_CORRUPTION: severityStr = WrapString("CORRUPTION"); break; + case D3D12_MESSAGE_SEVERITY_ERROR: severityStr = WrapString("ERROR"); break; + case D3D12_MESSAGE_SEVERITY_WARNING: severityStr = WrapString("WARNING"); break; + case D3D12_MESSAGE_SEVERITY_INFO: severityStr = WrapString("INFO"); break; + case D3D12_MESSAGE_SEVERITY_MESSAGE: severityStr = WrapString("MESSAGE"); break; + } + + if (severity <= D3D12_MESSAGE_SEVERITY_ERROR) + { + LogWarning(LogCategory_Graphics, "D3D12 ERROR: %s [%s %s #%d]", description, CStr(catStr), CStr(severityStr), id); + } + else + { + LogWarning(LogCategory_Graphics, "D3D12 WARNING: %s [%s %s #%d]", description, CStr(catStr), CStr(severityStr), id); + } +} + +internal void InitializeD3D12DebugInfoLogger(D3D12Driver* driver) +{ + Assert(driver != NULL); + ID3D12InfoQueue1* infoQueue = NULL; + HRESULT result = ID3D12Device5_QueryInterface(driver->D3D12Device, &IID_ID3D12InfoQueue1, (void**)&infoQueue); + if (SUCCEEDED(result)) + { + DWORD callbackCookie = 0; + ID3D12InfoQueue1_RegisterMessageCallback(infoQueue, OnD3D12DebugInfoMsg, D3D12_MESSAGE_CALLBACK_FLAG_NONE, NULL, &callbackCookie); + ID3D12InfoQueue1_Release(infoQueue); + Log(LogLevel_Message, LogCategory_Graphics, "DX12: Debug Info Logger Initialized"); + } +} +#endif + +// Begin Shaders +internal Shader* D3D12_CreateShader(GPUDriver* driver, ByteBuffer shaderByteCode, + ShaderCreateInfo* shaderCreateInfo JULIET_DEBUG_PARAM(String filename)) +{ + Assert(driver != NULL); + (void)shaderCreateInfo; +#if JULIET_DEBUG + (void)filename; +#endif + Shader* result = NULL; + if (!IsValidByteBuffer(shaderByteCode)) + { + LogError(LogCategory_Graphics, "Invalid shader byte code"); + } + else + { + size_t allocSize = sizeof(D3D12Shader) + shaderByteCode.Size; + D3D12Shader* shader = (D3D12Shader*)ArenaPushSize( + driver->DriverArena, allocSize, AlignOf(D3D12Shader), true JULIET_DEBUG_PARAM("D3D12Shader")); + if (shader == NULL) + { + LogError(LogCategory_Graphics, "Cannot allocate a new D3D12Shader: Out of memory"); + } + else + { + shader->ByteCode.Data = (Byte*)(shader + 1); + shader->ByteCode.Size = shaderByteCode.Size; + MemCopy(shader->ByteCode.Data, shaderByteCode.Data, shaderByteCode.Size); + + if (MemCompare(shader->ByteCode.Data, shaderByteCode.Data, shaderByteCode.Size) != 0) + { + LogError(LogCategory_Graphics, "Memory copy failed"); + FreeMemory(shader); + } + else + { + result = (Shader*)shader; + } + } + } + + return result; +} + +internal void D3D12_DestroyShader(GPUDriver* driver, Shader* shader) +{ + (void)driver; + (void)shader; +} +// End Shaders + +// Begin Graphics Pipeline +internal bool8 ConvertVertexInputState(const VertexInputState* vertexInputState, D3D12_INPUT_ELEMENT_DESC* desc, String semantic) +{ + Assert(vertexInputState != NULL); + bool8 result = false; + if (desc != NULL && vertexInputState->NumVertexAttributes > 0) + { + for (uint32 idx = 0; idx < vertexInputState->NumVertexAttributes; ++idx) + { + VertexAttribute attribute = vertexInputState->VertexAttributes[idx]; + + desc[idx].SemanticName = CStr(semantic); + desc[idx].SemanticIndex = attribute.Location; + desc[idx].Format = JulietToD3D12_VertexFormat[attribute.Format]; + desc[idx].InputSlot = attribute.BufferSlot; + desc[idx].AlignedByteOffset = attribute.Offset; + desc[idx].InputSlotClass = + JulietToD3D12_InputRate[vertexInputState->VertexBufferDescriptions[attribute.BufferSlot].InputRate]; + desc[idx].InstanceDataStepRate = + (vertexInputState->VertexBufferDescriptions[attribute.BufferSlot].InputRate == VertexInputRate_Instance) + ? vertexInputState->VertexBufferDescriptions[attribute.BufferSlot].InstanceStepRate + : 0; + } + result = true; + } + + return result; +} + +internal bool8 ConvertRasterizerState(const RasterizerState* rasterizerState, D3D12_RASTERIZER_DESC* desc) +{ + Assert(rasterizerState != NULL); + Assert(desc != NULL); + bool8 ok = true; + desc->FillMode = JulietToD3D12_FillMode[rasterizerState->FillMode]; + desc->CullMode = JulietToD3D12_CullMode[rasterizerState->CullMode]; + + switch (rasterizerState->FrontFace) + { + case FrontFace_CounterClockwise: desc->FrontCounterClockwise = TRUE; break; + case FrontFace_Clockwise: desc->FrontCounterClockwise = FALSE; break; + default: ok = false; break; + } + StaticAssert(FrontFace_Count == 2, FrontFaceCountCheck); + + if (ok) + { + if (rasterizerState->EnableDepthBias) + { + desc->DepthBias = LRoundF(rasterizerState->DepthBiasConstantFactor); + desc->DepthBiasClamp = rasterizerState->DepthBiasClamp; + desc->SlopeScaledDepthBias = rasterizerState->DepthBiasSlopeFactor; + } + else + { + desc->DepthBias = 0; + desc->DepthBiasClamp = 0.0f; + desc->SlopeScaledDepthBias = 0.0f; + } + + desc->DepthClipEnable = rasterizerState->EnableDepthClip; + desc->MultisampleEnable = FALSE; + desc->AntialiasedLineEnable = FALSE; + desc->ForcedSampleCount = 0; + desc->ConservativeRaster = D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF; + } + return ok; +} + +internal bool8 ConvertBlendState(const GraphicsPipelineCreateInfo* createInfo, D3D12_BLEND_DESC* blendDesc) +{ + Assert(createInfo != NULL); + Assert(blendDesc != NULL); + ZeroStruct(*blendDesc); + blendDesc->AlphaToCoverageEnable = FALSE; + blendDesc->IndependentBlendEnable = FALSE; + + for (UINT i = 0; i < kGPUDriver_MaxColorTargetInfo; i += 1) + { + D3D12_RENDER_TARGET_BLEND_DESC rtBlendDesc; + rtBlendDesc.BlendEnable = FALSE; + rtBlendDesc.LogicOpEnable = FALSE; + rtBlendDesc.SrcBlend = D3D12_BLEND_ONE; + rtBlendDesc.DestBlend = D3D12_BLEND_ZERO; + rtBlendDesc.BlendOp = D3D12_BLEND_OP_ADD; + rtBlendDesc.SrcBlendAlpha = D3D12_BLEND_ONE; + rtBlendDesc.DestBlendAlpha = D3D12_BLEND_ZERO; + rtBlendDesc.BlendOpAlpha = D3D12_BLEND_OP_ADD; + rtBlendDesc.LogicOp = D3D12_LOGIC_OP_NOOP; + rtBlendDesc.RenderTargetWriteMask = D3D12_COLOR_WRITE_ENABLE_ALL; + + if (i < createInfo->TargetInfo.NumColorTargets) + { + ColorTargetBlendState blendState = createInfo->TargetInfo.ColorTargetDescriptions[i].BlendState; + ColorComponentFlags colorWriteMask = + blendState.EnableColorWriteMask ? blendState.ColorWriteMask : (ColorComponentFlags)0xF; + + rtBlendDesc.BlendEnable = blendState.EnableBlend; + rtBlendDesc.SrcBlend = JulietToD3D12_BlendFactor[blendState.SourceColorBlendFactor]; + rtBlendDesc.DestBlend = JulietToD3D12_BlendFactor[blendState.DestinationColorBlendFactor]; + rtBlendDesc.BlendOp = JulietToD3D12_BlendOperation[blendState.ColorBlendOperation]; + rtBlendDesc.SrcBlendAlpha = JulietToD3D12_BlendFactorAlpha[blendState.SourceAlphaBlendFactor]; + rtBlendDesc.DestBlendAlpha = JulietToD3D12_BlendFactorAlpha[blendState.DestinationAlphaBlendFactor]; + rtBlendDesc.BlendOpAlpha = JulietToD3D12_BlendOperation[blendState.AlphaBlendOperation]; + rtBlendDesc.RenderTargetWriteMask = colorWriteMask; + + if (i > 0) + { + blendDesc->IndependentBlendEnable = TRUE; + } + } + + blendDesc->RenderTarget[i] = rtBlendDesc; + } + + return true; +} + +internal bool8 ConvertDepthStencilState(DepthStencilState depthStencilState, D3D12_DEPTH_STENCIL_DESC* desc) +{ + Assert(desc != NULL); + desc->DepthEnable = depthStencilState.EnableDepthTest ? TRUE : FALSE; + desc->DepthWriteMask = depthStencilState.EnableDepthWrite ? D3D12_DEPTH_WRITE_MASK_ALL : D3D12_DEPTH_WRITE_MASK_ZERO; + desc->DepthFunc = JulietToD3D12_CompareOperation[depthStencilState.CompareOperation]; + desc->StencilEnable = depthStencilState.EnableStencilTest ? TRUE : FALSE; + desc->StencilReadMask = depthStencilState.CompareMask; + desc->StencilWriteMask = depthStencilState.WriteMask; + + desc->FrontFace.StencilFailOp = JulietToD3D12_StencilOperation[depthStencilState.FrontStencilState.FailOperation]; + desc->FrontFace.StencilDepthFailOp = JulietToD3D12_StencilOperation[depthStencilState.FrontStencilState.DepthFailOperation]; + desc->FrontFace.StencilPassOp = JulietToD3D12_StencilOperation[depthStencilState.FrontStencilState.PassOperation]; + desc->FrontFace.StencilFunc = JulietToD3D12_CompareOperation[depthStencilState.FrontStencilState.CompareOperation]; + + desc->BackFace.StencilFailOp = JulietToD3D12_StencilOperation[depthStencilState.BackStencilState.FailOperation]; + desc->BackFace.StencilDepthFailOp = JulietToD3D12_StencilOperation[depthStencilState.BackStencilState.DepthFailOperation]; + desc->BackFace.StencilPassOp = JulietToD3D12_StencilOperation[depthStencilState.BackStencilState.PassOperation]; + desc->BackFace.StencilFunc = JulietToD3D12_CompareOperation[depthStencilState.BackStencilState.CompareOperation]; + + return true; +} + +#if ALLOW_SHADER_HOT_RELOAD +internal void CopyShader(D3D12Shader* dst, D3D12Shader* src) +{ + Assert(dst != NULL); + Assert(src != NULL); + + ByteBuffer dstBuffer = dst->ByteCode; + + if (src->ByteCode.Size != dstBuffer.Size) + { + dstBuffer.Data = (Byte*)Realloc(dstBuffer.Data, src->ByteCode.Size); + dstBuffer.Size = src->ByteCode.Size; + } + MemCopy(dst, src, sizeof(D3D12Shader)); + dst->ByteCode = dstBuffer; + + MemCopy(dst->ByteCode.Data, src->ByteCode.Data, src->ByteCode.Size); +} +#endif + +internal void ReleaseGraphicsPipeline(D3D12GraphicsPipeline* d3d12GraphicsPipeline) +{ + Assert(d3d12GraphicsPipeline != NULL); + if (d3d12GraphicsPipeline->PipelineState != NULL) + { + ID3D12PipelineState_Release(d3d12GraphicsPipeline->PipelineState); + } + +#if ALLOW_SHADER_HOT_RELOAD + SafeFree(d3d12GraphicsPipeline->VertexShaderCache); + SafeFree(d3d12GraphicsPipeline->FragmentShaderCache); +#endif + + FreeMemory(d3d12GraphicsPipeline); +} + +internal GraphicsPipeline* D3D12_CreateGraphicsPipeline(GPUDriver* driver, const GraphicsPipelineCreateInfo* createInfo) +{ + Assert(driver != NULL); + Assert(createInfo != NULL); + D3D12Driver* d3d12Driver = (D3D12Driver*)driver; + D3D12Shader* vertexShader = (D3D12Shader*)createInfo->VertexShader; + D3D12Shader* fragmentShader = (D3D12Shader*)createInfo->FragmentShader; + + D3D12_GRAPHICS_PIPELINE_STATE_DESC psoDesc = { 0 }; + psoDesc.VS.pShaderBytecode = vertexShader->ByteCode.Data; + psoDesc.VS.BytecodeLength = vertexShader->ByteCode.Size; + psoDesc.PS.pShaderBytecode = fragmentShader->ByteCode.Data; + psoDesc.PS.BytecodeLength = fragmentShader->ByteCode.Size; + + D3D12_INPUT_ELEMENT_DESC inputElementDescs[D3D12_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT]; + if (createInfo->VertexInputState.NumVertexAttributes > 0) + { + psoDesc.InputLayout.pInputElementDescs = inputElementDescs; + psoDesc.InputLayout.NumElements = createInfo->VertexInputState.NumVertexAttributes; + ConvertVertexInputState(&createInfo->VertexInputState, inputElementDescs, d3d12Driver->Semantic); + } + + psoDesc.PrimitiveTopologyType = JulietToD3D12_PrimitiveTopologyType[createInfo->PrimitiveType]; + + GraphicsPipeline* result = NULL; + if (ConvertRasterizerState(&createInfo->RasterizerState, &psoDesc.RasterizerState) && + ConvertBlendState(createInfo, &psoDesc.BlendState) && + ConvertDepthStencilState(createInfo->DepthStencilState, &psoDesc.DepthStencilState)) + { + D3D12GraphicsPipeline* pipeline = (D3D12GraphicsPipeline*)Calloc(1, sizeof(D3D12GraphicsPipeline)); + if (pipeline != NULL) + { + uint32 sampleMask = createInfo->MultisampleState.EnableMask ? createInfo->MultisampleState.SampleMask : 0xFFFFFFFF; + + psoDesc.SampleMask = sampleMask; + psoDesc.SampleDesc.Count = JulietToD3D12_SampleCount[createInfo->MultisampleState.SampleCount]; + psoDesc.SampleDesc.Quality = + (createInfo->MultisampleState.SampleCount > TextureSampleCount_One) ? DXGI_STANDARD_MULTISAMPLE_QUALITY_PATTERN : 0; + + psoDesc.DSVFormat = ConvertToD3D12DepthFormat(createInfo->TargetInfo.DepthStencilFormat); + psoDesc.NumRenderTargets = (uint32)createInfo->TargetInfo.NumColorTargets; + for (uint32 idx = 0; idx < createInfo->TargetInfo.NumColorTargets; ++idx) + { + psoDesc.RTVFormats[idx] = ConvertToD3D12TextureFormat(createInfo->TargetInfo.ColorTargetDescriptions[idx].Format); + } + + psoDesc.Flags = D3D12_PIPELINE_STATE_FLAG_NONE; + psoDesc.CachedPSO.CachedBlobSizeInBytes = 0; + psoDesc.CachedPSO.pCachedBlob = NULL; + psoDesc.NodeMask = 0; + + pipeline->RootSignature = d3d12Driver->BindlessRootSignature; + psoDesc.pRootSignature = d3d12Driver->BindlessRootSignature->Handle; + + ID3D12PipelineState* pipelineState = NULL; + HRESULT res = ID3D12Device5_CreateGraphicsPipelineState(d3d12Driver->D3D12Device, &psoDesc, + &IID_ID3D12PipelineState, (void**)&pipelineState); + if (FAILED(res)) + { + D3D12_LogError(d3d12Driver->D3D12Device, "Could not create graphics pipeline state", res); + ReleaseGraphicsPipeline(pipeline); + } + else + { + pipeline->PipelineState = pipelineState; + + for (uint32 i = 0; i < createInfo->VertexInputState.NumVertexBufferDescriptions; i += 1) + { + pipeline->VertexStrides[createInfo->VertexInputState.VertexBufferDescriptions[i].Slot] = + createInfo->VertexInputState.VertexBufferDescriptions[i].PitchInBytes; + } + + pipeline->PrimitiveType = createInfo->PrimitiveType; + + pipeline->VertexSamplerCount = vertexShader->NumSamplers; + pipeline->VertexStorageTextureCount = vertexShader->NumStorageTextures; + pipeline->VertexStorageBufferCount = vertexShader->NumStorageBuffers; + pipeline->VertexUniformBufferCount = vertexShader->NumUniformBuffers; + + pipeline->FragmentSamplerCount = fragmentShader->NumSamplers; + pipeline->FragmentStorageTextureCount = fragmentShader->NumStorageTextures; + pipeline->FragmentStorageBufferCount = fragmentShader->NumStorageBuffers; + pipeline->FragmentUniformBufferCount = fragmentShader->NumUniformBuffers; + + pipeline->ReferenceCount = 0; + +#if ALLOW_SHADER_HOT_RELOAD + pipeline->PSODescTemplate = psoDesc; + pipeline->VertexShaderCache = (D3D12Shader*)Calloc(1, sizeof(D3D12Shader)); + pipeline->FragmentShaderCache = (D3D12Shader*)Calloc(1, sizeof(D3D12Shader)); + CopyShader(pipeline->VertexShaderCache, vertexShader); + CopyShader(pipeline->FragmentShaderCache, fragmentShader); +#endif + + result = (GraphicsPipeline*)pipeline; + } + } + } + + return result; +} + +#if ALLOW_SHADER_HOT_RELOAD +internal bool8 D3D12_UpdateGraphicsPipelineShaders(GPUDriver* driver, GraphicsPipeline* graphicsPipeline, + Shader* optional_vertexShader, Shader* optional_fragmentShader) +{ + Assert(driver != NULL); + Assert(graphicsPipeline != NULL); + D3D12Driver* d3d12Driver = (D3D12Driver*)driver; + D3D12GraphicsPipeline* d3d12GraphicsPipeline = (D3D12GraphicsPipeline*)graphicsPipeline; + + Assert(d3d12GraphicsPipeline->ReferenceCount == 0 && + "Trying to update a d3d12 graphics pipeline that is currently being used! Call WaitUntilGPUIsIdle before updating!"); + + D3D12Shader* vertexShader = (D3D12Shader*)optional_vertexShader; + D3D12Shader* fragmentShader = (D3D12Shader*)optional_fragmentShader; + + if (vertexShader == NULL) + { + vertexShader = d3d12GraphicsPipeline->VertexShaderCache; + } + + if (fragmentShader == NULL) + { + fragmentShader = d3d12GraphicsPipeline->FragmentShaderCache; + } + + D3D12_GRAPHICS_PIPELINE_STATE_DESC psoDesc = d3d12GraphicsPipeline->PSODescTemplate; + psoDesc.VS.pShaderBytecode = vertexShader->ByteCode.Data; + psoDesc.VS.BytecodeLength = vertexShader->ByteCode.Size; + psoDesc.PS.pShaderBytecode = fragmentShader->ByteCode.Data; + psoDesc.PS.BytecodeLength = fragmentShader->ByteCode.Size; + + psoDesc.pRootSignature = d3d12Driver->BindlessRootSignature->Handle; + + bool8 ok = false; + ID3D12PipelineState* pipelineState = NULL; + HRESULT res = ID3D12Device5_CreateGraphicsPipelineState(d3d12Driver->D3D12Device, &psoDesc, + &IID_ID3D12PipelineState, (void**)&pipelineState); + if (FAILED(res)) + { + D3D12_LogError(d3d12Driver->D3D12Device, "Could not create graphics pipeline state", res); + } + else + { + d3d12GraphicsPipeline->VertexSamplerCount = vertexShader->NumSamplers; + d3d12GraphicsPipeline->VertexStorageTextureCount = vertexShader->NumStorageTextures; + d3d12GraphicsPipeline->VertexStorageBufferCount = vertexShader->NumStorageBuffers; + d3d12GraphicsPipeline->VertexUniformBufferCount = vertexShader->NumUniformBuffers; + + d3d12GraphicsPipeline->FragmentSamplerCount = fragmentShader->NumSamplers; + d3d12GraphicsPipeline->FragmentStorageTextureCount = fragmentShader->NumStorageTextures; + d3d12GraphicsPipeline->FragmentStorageBufferCount = fragmentShader->NumStorageBuffers; + d3d12GraphicsPipeline->FragmentUniformBufferCount = fragmentShader->NumUniformBuffers; + + if (d3d12GraphicsPipeline->PipelineState != NULL) + { + ID3D12PipelineState_Release(d3d12GraphicsPipeline->PipelineState); + } + d3d12GraphicsPipeline->PipelineState = pipelineState; + + if (vertexShader != d3d12GraphicsPipeline->VertexShaderCache) + { + CopyShader(d3d12GraphicsPipeline->VertexShaderCache, vertexShader); + } + if (fragmentShader != d3d12GraphicsPipeline->FragmentShaderCache) + { + CopyShader(d3d12GraphicsPipeline->FragmentShaderCache, fragmentShader); + } + + ok = true; + } + + return ok; +} +#endif +// End Graphics Pipeline + +// Begin Descriptor Heap +internal void DestroyDescriptorHeap(D3D12DescriptorHeap* heap) +{ + Assert(heap != NULL); + vector_arena_destroy(&heap->FreeIndices); + if (heap->Handle != NULL) + { + ID3D12DescriptorHeap_Release(heap->Handle); + } +} + +internal D3D12DescriptorHeap* CreateDescriptorHeap(D3D12Driver* driver, D3D12_DESCRIPTOR_HEAP_TYPE type, uint32 count, bool8 isStaging) +{ + Assert(driver != NULL); +#if JULIET_DEBUG + String typeName = GetDescriptorTypeName(type); + D3D12DescriptorHeap* heap = ArenaPushStructTag(driver->DriverArena, D3D12DescriptorHeap, CStr(typeName)); +#else + D3D12DescriptorHeap* heap = ArenaPushStruct(driver->DriverArena, D3D12DescriptorHeap); +#endif + Assert(heap != NULL); + + heap->CurrentDescriptorIndex = 0; + + VectorArenaCreate(&heap->FreeIndices, uint32, driver->DriverArena, kVectorArenaDefaultReserveSize JULIET_DEBUG_PARAM("DescriptorHeap Free Indices")); + vector_arena_resize(&heap->FreeIndices, 16); + heap->CurrentFreeIndex = 0; + + D3D12_DESCRIPTOR_HEAP_DESC heapDesc; + heapDesc.NumDescriptors = count; + heapDesc.Type = type; + heapDesc.Flags = isStaging ? D3D12_DESCRIPTOR_HEAP_FLAG_NONE : D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE; + heapDesc.NodeMask = 0; + + ID3D12DescriptorHeap* handle = NULL; + HRESULT result = + ID3D12Device5_CreateDescriptorHeap(driver->D3D12Device, &heapDesc, &IID_ID3D12DescriptorHeap, (void**)&handle); + if (FAILED(result)) + { + D3D12_LogError(driver->D3D12Device, "Failed to create descriptor heap!", result); + DestroyDescriptorHeap(heap); + heap = NULL; + } + else + { + heap->Handle = handle; + heap->HeapType = type; + heap->MaxDescriptors = count; + heap->Staging = isStaging; + heap->DescriptorSize = ID3D12Device5_GetDescriptorHandleIncrementSize(driver->D3D12Device, type); + ID3D12DescriptorHeap_GetCPUDescriptorHandleForHeapStart(handle, &heap->DescriptorHeapCPUStart); + if (!isStaging) + { + ID3D12DescriptorHeap_GetGPUDescriptorHandleForHeapStart(handle, &heap->DescriptorHeapGPUStart); + } + } + + return heap; +} + +internal void CreateDescriptorHeapPool(D3D12Driver* driver, D3D12DescriptorHeapPool* heapPool, + D3D12_DESCRIPTOR_HEAP_TYPE type, uint32 count) +{ + Assert(driver != NULL); + Assert(heapPool != NULL); + const size_t kInitialCapacity = 4; + heapPool->FirstFreeDescriptorHeap = NULL; + + for (uint32 i = 0; i < kInitialCapacity; ++i) + { + D3D12DescriptorHeap* descriptorHeap = CreateDescriptorHeap(driver, type, count, false); + descriptorHeap->Next = heapPool->FirstFreeDescriptorHeap; + heapPool->FirstFreeDescriptorHeap = descriptorHeap; + } +} + +internal void D3D12_DestroyDescriptorHeapPool(D3D12DescriptorHeapPool* heapPool) +{ + Assert(heapPool != NULL); + D3D12DescriptorHeap* current = heapPool->FirstFreeDescriptorHeap; + while (current != NULL) + { + D3D12DescriptorHeap* next = current->Next; + DestroyDescriptorHeap(current); + current = next; + } +} + +internal bool8 AssignDescriptor(D3D12DescriptorHeap* heap, D3D12Descriptor* outDescriptor) +{ + Assert(heap != NULL); + Assert(outDescriptor != NULL); + bool8 ok = true; + uint32 index = UINT32_MAX; + + if (heap->CurrentFreeIndex > 0) + { + heap->CurrentFreeIndex -= 1; + index = VectorArenaAt(uint32, &heap->FreeIndices, heap->CurrentFreeIndex); + } + else if (heap->CurrentDescriptorIndex < heap->MaxDescriptors) + { + index = heap->CurrentDescriptorIndex; + heap->CurrentDescriptorIndex++; + } + else + { + Assert(false && "Descriptor Heap Full!"); + ok = false; + } + + if (ok) + { + outDescriptor->Heap = heap; + outDescriptor->Index = index; + outDescriptor->CpuHandle = heap->DescriptorHeapCPUStart; + outDescriptor->CpuHandle.ptr += heap->DescriptorSize * index; + outDescriptor->GpuHandle = heap->DescriptorHeapGPUStart; + outDescriptor->GpuHandle.ptr += heap->DescriptorSize * index; + } + + return ok; +} + +internal void ReleaseDescriptor(const D3D12Descriptor* descriptor) +{ + Assert(descriptor != NULL); + if (descriptor->Index != UINT32_MAX && descriptor->Heap != NULL) + { + D3D12DescriptorHeap* heap = descriptor->Heap; + + if (heap->CurrentFreeIndex >= heap->FreeIndices.Count) + { + VectorArenaPushVal(uint32, &heap->FreeIndices, descriptor->Index); + } + else + { + VectorArenaAt(uint32, &heap->FreeIndices, heap->CurrentFreeIndex) = descriptor->Index; + heap->CurrentFreeIndex++; + } + } +} + +internal D3D12DescriptorHeap* AcquireSamplerHeapFromPool(D3D12Driver* d3d12Driver) +{ + Assert(d3d12Driver != NULL); + D3D12DescriptorHeapPool* pool = &d3d12Driver->SamplerHeapPool; + + D3D12DescriptorHeap* result = pool->FirstFreeDescriptorHeap; + if (result != NULL) + { + pool->FirstFreeDescriptorHeap = pool->FirstFreeDescriptorHeap->Next; + } + else + { + result = CreateDescriptorHeap(d3d12Driver, D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER, + kGPUDriver_Sampler_HeapDescriptorCount, false); + } + + return result; +} + +internal void D3D12_ReturnSamplerHeapToPool(D3D12Driver* d3d12Driver, D3D12DescriptorHeap* heap) +{ + Assert(d3d12Driver != NULL); + Assert(heap != NULL); + D3D12DescriptorHeapPool* pool = &d3d12Driver->SamplerHeapPool; + + heap->CurrentDescriptorIndex = 0; + + heap->Next = pool->FirstFreeDescriptorHeap; + pool->FirstFreeDescriptorHeap = heap; +} +// End Descriptor Heap + +// Begin Staging Descriptors +internal void InitStagingDescriptorPool(D3D12DescriptorHeap* heap, D3D12StagingDescriptorPool* pool) +{ + Assert(heap != NULL); + Assert(pool != NULL); + for (uint32 idx = 0; idx < kStagingHeapDescriptorExpectedCount; ++idx) + { + pool->FreeDescriptors[idx].Pool = pool; + pool->FreeDescriptors[idx].Heap = heap; + pool->FreeDescriptors[idx].CpuHandleIndex = idx; + pool->FreeDescriptors[idx].CpuHandle.ptr = heap->DescriptorHeapCPUStart.ptr + (idx * heap->DescriptorSize); + } +} + +internal bool8 ExtendStagingDescriptorPool(D3D12Driver* driver, D3D12StagingDescriptorPool* pool) +{ + Assert(driver != NULL); + Assert(pool != NULL); + bool8 ok = false; + D3D12DescriptorHeap* heap = + CreateDescriptorHeap(driver, pool->Heaps[0]->HeapType, kStagingHeapDescriptorExpectedCount, true); + if (heap != NULL) + { + pool->HeapCount += 1; + pool->Heaps = (D3D12DescriptorHeap**)Realloc(pool->Heaps, pool->HeapCount * sizeof(D3D12DescriptorHeap*)); + pool->Heaps[pool->HeapCount - 1] = heap; + + pool->FreeDescriptorCapacity += kStagingHeapDescriptorExpectedCount; + pool->FreeDescriptorCount += kStagingHeapDescriptorExpectedCount; + pool->FreeDescriptors = (D3D12StagingDescriptor*) + Realloc(pool->FreeDescriptors, pool->FreeDescriptorCapacity * sizeof(D3D12StagingDescriptor)); + + InitStagingDescriptorPool(heap, pool); + ok = true; + } + + return ok; +} + +internal D3D12StagingDescriptorPool* CreateStagingDescriptorPool(D3D12Driver* driver, D3D12_DESCRIPTOR_HEAP_TYPE type) +{ + Assert(driver != NULL); + D3D12StagingDescriptorPool* pool = NULL; + D3D12DescriptorHeap* heap = CreateDescriptorHeap(driver, type, kStagingHeapDescriptorExpectedCount, true); + if (heap != NULL) + { + pool = (D3D12StagingDescriptorPool*)Calloc(1, sizeof(D3D12StagingDescriptorPool)); + + pool->HeapCount = 1; + pool->Heaps = (D3D12DescriptorHeap**)Malloc(sizeof(D3D12DescriptorHeap*)); + pool->Heaps[0] = heap; + + pool->FreeDescriptorCapacity = kStagingHeapDescriptorExpectedCount; + pool->FreeDescriptorCount = kStagingHeapDescriptorExpectedCount; + pool->FreeDescriptors = (D3D12StagingDescriptor*)Malloc(kStagingHeapDescriptorExpectedCount * sizeof(D3D12StagingDescriptor)); + + InitStagingDescriptorPool(heap, pool); + } + + return pool; +} + +internal bool8 AssignStagingDescriptor(D3D12Driver* driver, D3D12_DESCRIPTOR_HEAP_TYPE type, D3D12StagingDescriptor* outDescriptor) +{ + Assert(driver != NULL); + Assert(outDescriptor != NULL); + bool8 ok = true; + D3D12StagingDescriptorPool* pool = driver->StagingDescriptorPools[type]; + + if (pool->FreeDescriptorCount == 0) + { + if (!ExtendStagingDescriptorPool(driver, pool)) + { + ok = false; + } + } + + if (ok) + { + D3D12StagingDescriptor* descriptor = &pool->FreeDescriptors[pool->FreeDescriptorCount - 1]; + MemCopy(outDescriptor, descriptor, sizeof(D3D12StagingDescriptor)); + pool->FreeDescriptorCount -= 1; + } + + return ok; +} + +internal void ReleaseStagingDescriptor(D3D12Driver* driver, const D3D12StagingDescriptor* cpuDescriptor) +{ + (void)driver; + Assert(cpuDescriptor != NULL); + D3D12StagingDescriptorPool* pool = cpuDescriptor->Pool; + + if (pool != NULL) + { + MemCopy(&pool->FreeDescriptors[pool->FreeDescriptorCount], cpuDescriptor, sizeof(D3D12StagingDescriptor)); + pool->FreeDescriptorCount += 1; + } +} + +internal void DestroyStagingDescriptorPool(D3D12StagingDescriptorPool* pool) +{ + Assert(pool != NULL); + for (uint32 i = 0; i < pool->HeapCount; i += 1) + { + DestroyDescriptorHeap(pool->Heaps[i]); + } + + FreeMemory(pool->Heaps); + FreeMemory(pool->FreeDescriptors); + FreeMemory(pool); +} +// End Staging Descriptors + +// Begin Buffers +internal D3D12Buffer* g_FreeBuffers = NULL; + +typedef uint8 D3D12BufferType; +enum +{ + D3D12BufferType_Base, + D3D12BufferType_TransferDownload, + D3D12BufferType_TransferUpload, +}; + +internal const char* D3D12BufferTypeToString(D3D12BufferType type) +{ + const char* result = "Unknown"; + switch (type) + { + case D3D12BufferType_Base: result = "Base"; break; + case D3D12BufferType_TransferDownload: result = "TransferDownload"; break; + case D3D12BufferType_TransferUpload: result = "TransferUpload"; break; + } + return result; +} + +internal const char* BufferUsageToString(BufferUsage usage) +{ + const char* result = "Unknown"; + switch (usage) + { + case BufferUsage_None: result = "None"; break; + case BufferUsage_ConstantBuffer: result = "ConstantBuffer"; break; + case BufferUsage_StructuredBuffer: result = "StructuredBuffer"; break; + case BufferUsage_IndexBuffer: result = "IndexBuffer"; break; + } + return result; +} + +internal void DestroyBuffer(D3D12Buffer* buffer) +{ + if (buffer != NULL) + { + if (buffer->Descriptor.Index != UINT32_MAX) + { + ReleaseDescriptor(&buffer->Descriptor); + } + ZeroStruct(buffer->Descriptor); + + if (buffer->Handle != NULL) + { + ID3D12Resource_Release(buffer->Handle); + buffer->Handle = NULL; + } + buffer->CurrentState = D3D12_RESOURCE_STATE_COMMON; + buffer->Size = 0; + + buffer->Next = g_FreeBuffers; + g_FreeBuffers = buffer; + } +} + +internal D3D12Buffer* CreateBuffer(D3D12Driver* d3d12Driver, size_t size, size_t stride, BufferUsage usage, + D3D12BufferType type, bool8 isDynamic) +{ + Assert(d3d12Driver != NULL); + D3D12Buffer* buffer = NULL; + if (g_FreeBuffers != NULL) + { + buffer = g_FreeBuffers; + g_FreeBuffers = buffer->Next; + buffer->Next = NULL; + } + + if (buffer == NULL) + { + buffer = ArenaPushStructTag(d3d12Driver->DriverArena, D3D12Buffer, "D3D12Buffer"); + } + + if (buffer != NULL) + { + if (type == D3D12BufferType_Base && usage == BufferUsage_None) + { + Assert(false && "Creating Base buffer with BufferUsage_None is invalid"); + DestroyBuffer(buffer); + buffer = NULL; + } + else + { + if (usage == BufferUsage_ConstantBuffer) + { + size = (size + 255U) & ~255U; + } + + D3D12_HEAP_PROPERTIES heapProperties = { 0 }; + heapProperties.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + heapProperties.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + + D3D12_RESOURCE_STATES initialState = D3D12_RESOURCE_STATE_COMMON; + D3D12_HEAP_FLAGS heapFlags = D3D12_HEAP_FLAG_NONE; + + const bool8 isUpload = isDynamic || (type == D3D12BufferType_TransferUpload) || (usage == BufferUsage_ConstantBuffer); + + if (type == D3D12BufferType_TransferDownload) + { + heapProperties.Type = D3D12_HEAP_TYPE_READBACK; + initialState = D3D12_RESOURCE_STATE_COPY_DEST; + } + else if (isUpload) + { + if (d3d12Driver->GPUUploadHeapSupported) + { + heapProperties.Type = D3D12_HEAP_TYPE_GPU_UPLOAD; + initialState = D3D12_RESOURCE_STATE_COMMON; + } + else + { + heapProperties.Type = D3D12_HEAP_TYPE_UPLOAD; + initialState = D3D12_RESOURCE_STATE_GENERIC_READ; + } + } + else + { + heapProperties.Type = D3D12_HEAP_TYPE_DEFAULT; + initialState = D3D12_RESOURCE_STATE_COMMON; + } + + D3D12_RESOURCE_DESC desc = { 0 }; + desc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + desc.Alignment = 0; + desc.Width = size; + desc.Height = 1; + desc.DepthOrArraySize = 1; + desc.MipLevels = 1; + desc.Format = DXGI_FORMAT_UNKNOWN; + desc.SampleDesc.Count = 1; + desc.SampleDesc.Quality = 0; + desc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + desc.Flags = D3D12_RESOURCE_FLAG_NONE; + + Log(LogLevel_Message, LogCategory_Graphics, "CreateBuffer: Device=%p, Size=%zu, Type=%s Use=%s", + (void*)d3d12Driver->D3D12Device, size, D3D12BufferTypeToString(type), BufferUsageToString(usage)); + + ID3D12Resource* handle = NULL; + HRESULT result = + ID3D12Device5_CreateCommittedResource(d3d12Driver->D3D12Device, &heapProperties, heapFlags, &desc, + initialState, NULL, &IID_ID3D12Resource, (void**)&handle); + + if (FAILED(result)) + { + Log(LogLevel_Error, LogCategory_Graphics, "Could not create buffer! HRESULT=0x%08X", (uint32)result); + Log(LogLevel_Error, LogCategory_Graphics, "Failed Desc: Width=%llu Layout=%d HeapType=%d", + (unsigned long long)desc.Width, (int)desc.Layout, (int)heapProperties.Type); + + HRESULT removeReason = ID3D12Device5_GetDeviceRemovedReason(d3d12Driver->D3D12Device); + if (FAILED(removeReason)) + { + Log(LogLevel_Error, LogCategory_Graphics, "Device Removed Reason: 0x%08X", (uint32)removeReason); + } + + DestroyBuffer(buffer); + buffer = NULL; + } + else + { + buffer->Handle = handle; + buffer->CurrentState = initialState; + buffer->Descriptor.Index = UINT32_MAX; + buffer->Size = size; + + if (usage == BufferUsage_ConstantBuffer || usage == BufferUsage_StructuredBuffer) + { + D3D12DescriptorHeap* heap = d3d12Driver->BindlessDescriptorHeap; + + D3D12Descriptor descriptor; + if (AssignDescriptor(heap, &descriptor)) + { + buffer->Descriptor = descriptor; + + D3D12_CPU_DESCRIPTOR_HANDLE cpuHandle = descriptor.CpuHandle; + + if (usage == BufferUsage_ConstantBuffer) + { + D3D12_CONSTANT_BUFFER_VIEW_DESC cbvDesc = { 0 }; + cbvDesc.BufferLocation = ID3D12Resource_GetGPUVirtualAddress(handle); + cbvDesc.SizeInBytes = (uint32)size; + ID3D12Device5_CreateConstantBufferView(d3d12Driver->D3D12Device, &cbvDesc, cpuHandle); + } + else if (usage == BufferUsage_StructuredBuffer) + { + D3D12_SHADER_RESOURCE_VIEW_DESC srvDesc = { 0 }; + srvDesc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER; + srvDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + srvDesc.Buffer.FirstElement = 0; + + if (stride > 0) + { + srvDesc.Format = DXGI_FORMAT_UNKNOWN; + srvDesc.Buffer.NumElements = (uint32)(size / stride); + srvDesc.Buffer.StructureByteStride = (uint32)stride; + srvDesc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_NONE; + } + else + { + srvDesc.Format = DXGI_FORMAT_R32_TYPELESS; + srvDesc.Buffer.NumElements = (uint32)(size / 4); + srvDesc.Buffer.StructureByteStride = 0; + srvDesc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_RAW; + } + + ID3D12Device5_CreateShaderResourceView(d3d12Driver->D3D12Device, handle, &srvDesc, cpuHandle); + Log(LogLevel_Message, LogCategory_Graphics, " -> SRV DescriptorIndex=%u", descriptor.Index); + } + } + else + { + LogError(LogCategory_Graphics, "Bindless Heap Full or Invalid!"); + } + } + } + } + } + + return buffer; +} + +internal GraphicsBuffer* D3D12_CreateGraphicsBuffer(GPUDriver* driver, size_t size, size_t stride, BufferUsage usage, bool8 isDynamic) +{ + Assert(driver != NULL); + D3D12Driver* d3d12Driver = (D3D12Driver*)driver; + return (GraphicsBuffer*)CreateBuffer(d3d12Driver, size, stride, usage, D3D12BufferType_Base, isDynamic); +} + +internal void D3D12_DestroyGraphicsBuffer(GraphicsBuffer* buffer) +{ + Assert(buffer != NULL); + DestroyBuffer((D3D12Buffer*)buffer); +} + +internal GraphicsTransferBuffer* D3D12_CreateGraphicsTransferBuffer(GPUDriver* driver, size_t size, TransferBufferUsage usage) +{ + Assert(driver != NULL); + D3D12Driver* d3d12Driver = (D3D12Driver*)driver; + return (GraphicsTransferBuffer*)CreateBuffer( + d3d12Driver, size, 0, BufferUsage_None, + usage == TransferBufferUsage_Upload ? D3D12BufferType_TransferUpload : D3D12BufferType_TransferDownload, false); +} + +internal void D3D12_DestroyGraphicsTransferBuffer(GraphicsTransferBuffer* buffer) +{ + Assert(buffer != NULL); + DestroyBuffer((D3D12Buffer*)buffer); +} + +internal void* D3D12_MapGraphicsTransferBuffer(GPUDriver* driver, GraphicsTransferBuffer* buffer) +{ + (void)driver; + Assert(buffer != NULL); + D3D12Buffer* d3d12Buffer = (D3D12Buffer*)buffer; + void* ptr = NULL; + + D3D12_RANGE readRange = { 0, 0 }; + if (FAILED(ID3D12Resource_Map(d3d12Buffer->Handle, 0, &readRange, &ptr))) + { + ptr = NULL; + } + return ptr; +} + +internal void D3D12_UnmapGraphicsTransferBuffer(GPUDriver* driver, GraphicsTransferBuffer* buffer) +{ + (void)driver; + Assert(buffer != NULL); + D3D12Buffer* d3d12Buffer = (D3D12Buffer*)buffer; + ID3D12Resource_Unmap(d3d12Buffer->Handle, 0, NULL); +} + +internal void* D3D12_MapGraphicsBuffer(GPUDriver* driver, GraphicsBuffer* buffer) +{ + (void)driver; + Assert(buffer != NULL); + D3D12Buffer* d3d12Buffer = (D3D12Buffer*)buffer; + void* ptr = NULL; + D3D12_RANGE readRange = { 0, 0 }; + if (FAILED(ID3D12Resource_Map(d3d12Buffer->Handle, 0, &readRange, &ptr))) + { + ptr = NULL; + } + return ptr; +} + +internal void D3D12_UnmapGraphicsBuffer(GPUDriver* driver, GraphicsBuffer* buffer) +{ + (void)driver; + Assert(buffer != NULL); + D3D12Buffer* d3d12Buffer = (D3D12Buffer*)buffer; + ID3D12Resource_Unmap(d3d12Buffer->Handle, 0, NULL); +} + +internal uint32 GetDescriptorIndex(GPUDriver* driver, GraphicsBuffer* buffer) +{ + (void)driver; + Assert(buffer != NULL); + D3D12Buffer* d3d12Buffer = (D3D12Buffer*)buffer; + return d3d12Buffer->Descriptor.Index; +} + +internal void D3D12_CopyBuffer(CommandList* commandList, GraphicsBuffer* dst, + GraphicsTransferBuffer* src, size_t size, size_t dstOffset, size_t srcOffset) +{ + Assert(commandList != NULL); + Assert(dst != NULL); + Assert(src != NULL); + D3D12CommandList* d3d12CmdList = (D3D12CommandList*)commandList; + D3D12Buffer* d3d12Dst = (D3D12Buffer*)dst; + D3D12Buffer* d3d12Src = (D3D12Buffer*)src; + + if (d3d12Dst->CurrentState != D3D12_RESOURCE_STATE_COPY_DEST) + { + D3D12_RESOURCE_BARRIER barrier = { 0 }; + barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; + barrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; + barrier.Transition.pResource = d3d12Dst->Handle; + barrier.Transition.StateBefore = d3d12Dst->CurrentState; + barrier.Transition.StateAfter = D3D12_RESOURCE_STATE_COPY_DEST; + barrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; + + ID3D12GraphicsCommandList6_ResourceBarrier(d3d12CmdList->GraphicsCommandList.CommandList, 1, &barrier); + d3d12Dst->CurrentState = D3D12_RESOURCE_STATE_COPY_DEST; + } + + ID3D12GraphicsCommandList6_CopyBufferRegion(d3d12CmdList->GraphicsCommandList.CommandList, + d3d12Dst->Handle, dstOffset, d3d12Src->Handle, srcOffset, size); +} + +internal void D3D12_TransitionBufferToReadable(CommandList* commandList, GraphicsBuffer* buffer) +{ + Assert(commandList != NULL); + Assert(buffer != NULL); + D3D12CommandList* d3d12CmdList = (D3D12CommandList*)commandList; + D3D12Buffer* d3d12Buffer = (D3D12Buffer*)buffer; + + D3D12_RESOURCE_STATES neededState = D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE | D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE; + + if (d3d12Buffer->CurrentState != neededState) + { + D3D12_RESOURCE_BARRIER barrier = { 0 }; + barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; + barrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; + barrier.Transition.pResource = d3d12Buffer->Handle; + barrier.Transition.StateBefore = d3d12Buffer->CurrentState; + barrier.Transition.StateAfter = neededState; + barrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; + + ID3D12GraphicsCommandList6_ResourceBarrier(d3d12CmdList->GraphicsCommandList.CommandList, 1, &barrier); + d3d12Buffer->CurrentState = neededState; + } +} +// End Buffers + +// Begin Fences +internal void DisposePendingResources(D3D12Driver* driver) +{ + Assert(driver != NULL); + uint32 idx = 0; + while (idx < driver->GraphicsPipelinesToDisposeCount) + { + if (driver->GraphicsPipelinesToDispose[idx]->ReferenceCount == 0) + { + ReleaseGraphicsPipeline(driver->GraphicsPipelinesToDispose[idx]); + + driver->GraphicsPipelinesToDispose[idx] = + driver->GraphicsPipelinesToDispose[driver->GraphicsPipelinesToDisposeCount - 1]; + driver->GraphicsPipelinesToDisposeCount -= 1; + } + else + { + idx++; + } + } +} + +internal void ReleaseFenceToPool(D3D12Driver* driver, D3D12Fence* fence) +{ + Assert(driver != NULL); + Assert(fence != NULL); + Assert(driver->AvailableFenceCount + 1 <= driver->AvailableFenceCapacity); + + driver->AvailableFences[driver->AvailableFenceCount] = fence; + driver->AvailableFenceCount += 1; + + LogDebug(LogCategory_Graphics, "ReleaseFenceToPool %p fence. Handle %p | Event %p | Refcount %d", + (void*)fence, (void*)fence->Handle, (void*)fence->Event, fence->ReferenceCount); +} + +internal void D3D12_ReleaseFence(GPUDriver* driver, Fence* fence JULIET_DEBUG_PARAM(String querier)) +{ + Assert(driver != NULL); + Assert(fence != NULL); + D3D12Driver* d3d12driver = (D3D12Driver*)driver; + D3D12Fence* d3d12Fence = (D3D12Fence*)fence; + +#if JULIET_DEBUG + LogDebug(LogCategory_Graphics, "ReleaseFence | %p fence. Handle %p | Event %p | Refcount %d | Querier %s", + (void*)d3d12Fence, (void*)d3d12Fence->Handle, (void*)d3d12Fence->Event, d3d12Fence->ReferenceCount, CStr(querier)); +#endif + if (--d3d12Fence->ReferenceCount == 0) + { + ReleaseFenceToPool(d3d12driver, d3d12Fence); + } +} + +internal D3D12Fence* D3D12_AcquireFence(D3D12Driver* driver JULIET_DEBUG_PARAM(String querier)) +{ + Assert(driver != NULL); + D3D12Fence* fence = NULL; + ID3D12Fence* handle = NULL; + + if (driver->AvailableFenceCount == 0) + { + HRESULT result = ID3D12Device5_CreateFence(driver->D3D12Device, D3D12_FENCE_UNSIGNALED_VALUE, + D3D12_FENCE_FLAG_NONE, &IID_ID3D12Fence, (void**)&handle); + if (FAILED(result)) + { + D3D12_LogError(driver->D3D12Device, "Failed to create fence!", result); + } + else + { + fence = ArenaPushStructTag(driver->DriverArena, D3D12Fence, "D3D12Fence"); + if (fence == NULL) + { + ID3D12Fence_Release(handle); + } + else + { + fence->Handle = handle; + fence->Event = CreateEvent(NULL, FALSE, FALSE, NULL); + fence->ReferenceCount = 0; +#if JULIET_DEBUG + LogDebug(LogCategory_Graphics, "Acquire Querier %s | Setting Signal to 0 NEW fence", CStr(querier)); +#endif + } + } + } + else + { + fence = driver->AvailableFences[driver->AvailableFenceCount - 1]; + driver->AvailableFenceCount -= 1; + ID3D12Fence_Signal(fence->Handle, D3D12_FENCE_UNSIGNALED_VALUE); +#if JULIET_DEBUG + LogDebug(LogCategory_Graphics, "Acquire Querier %s | Setting Signal to 0, RECYCLING", CStr(querier)); +#endif + } + + if (fence != NULL) + { + fence->ReferenceCount += 1; + Assert(fence->ReferenceCount == 1); + +#if JULIET_DEBUG + LogDebug(LogCategory_Graphics, "Acquire Querier %s | %p fence. Handle %p | Event %p | Refcount %d", + CStr(querier), (void*)fence, (void*)fence->Handle, (void*)fence->Event, fence->ReferenceCount); +#endif + } + + return fence; +} + +internal bool8 D3D12_CleanCommandList(D3D12Driver* driver, D3D12CommandList* commandList, bool8 cancel) +{ + Assert(driver != NULL); + Assert(commandList != NULL); + bool8 ok = false; + commandList->PresentDataCount = 0; + + HRESULT result = ID3D12CommandAllocator_Reset(commandList->GraphicsCommandList.Allocator); + if (FAILED(result)) + { + D3D12_LogError(driver->D3D12Device, "Could not reset command allocator", result); + } + else + { + result = ID3D12GraphicsCommandList6_Reset(commandList->GraphicsCommandList.CommandList, + commandList->GraphicsCommandList.Allocator, NULL); + if (FAILED(result)) + { + D3D12_LogError(driver->D3D12Device, "Could not reset command list", result); + } + else + { + if (commandList->Sampler_Heap != NULL) + { + D3D12_ReturnSamplerHeapToPool(driver, commandList->Sampler_Heap); + commandList->Sampler_Heap = NULL; + } + commandList->CRB_SRV_UAV_Heap = NULL; + + for (uint32 idx = 0; idx < commandList->UsedTextureCount; ++idx) + { + --commandList->UsedTextures[idx]->ReferenceCount; + } + commandList->UsedTextureCount = 0; + + for (uint32 idx = 0; idx < commandList->UsedGraphicsPipelineCount; ++idx) + { + --commandList->UsedGraphicsPipelines[idx]->ReferenceCount; + } + commandList->UsedGraphicsPipelineCount = 0; + + if (commandList->AutoReleaseFence) + { + D3D12_ReleaseFence((GPUDriver*)driver, (Fence*)commandList->InFlightFence + JULIET_DEBUG_PARAM(ConstString("CleanCommandList"))); + commandList->InFlightFence = NULL; + } + + Assert(driver->AvailableCommandListCount + 1 <= driver->AvailableCommandListCapacity); + driver->AvailableCommandLists[driver->AvailableCommandListCount] = commandList; + driver->AvailableCommandListCount += 1; + + if (!cancel) + { + for (uint32 idx = 0; idx < driver->SubmittedCommandListCount; idx += 1) + { + if (driver->SubmittedCommandLists[idx] == commandList) + { + driver->SubmittedCommandLists[idx] = driver->SubmittedCommandLists[driver->SubmittedCommandListCount - 1]; + driver->SubmittedCommandListCount -= 1; + break; + } + } + } + + ok = true; + } + } + + return ok; +} + +internal bool8 D3D12_WaitUntilGPUIsIdle(GPUDriver* driver) +{ + Assert(driver != NULL); + bool8 ok = false; + D3D12Driver* d3d12driver = (D3D12Driver*)driver; + D3D12Fence* fence = D3D12_AcquireFence(d3d12driver JULIET_DEBUG_PARAM(ConstString("WaitUntilGPUIsIdle"))); + if (fence != NULL) + { + bool8 waitOk = true; + if (d3d12driver->GraphicsQueue != NULL) + { + ID3D12CommandQueue_Signal(d3d12driver->GraphicsQueue, fence->Handle, D3D12_FENCE_SIGNAL_VALUE); + + if (ID3D12Fence_GetCompletedValue(fence->Handle) != D3D12_FENCE_SIGNAL_VALUE) + { + HRESULT result = ID3D12Fence_SetEventOnCompletion(fence->Handle, D3D12_FENCE_SIGNAL_VALUE, fence->Event); + if (FAILED(result)) + { + D3D12_LogError(d3d12driver->D3D12Device, "Setting fence event failed!", result); + waitOk = false; + } + else + { + DWORD waitResult = WaitForSingleObject(fence->Event, INFINITE); + if (waitResult == WAIT_FAILED) + { + D3D12_LogError(d3d12driver->D3D12Device, "Wait failed!", result); + waitOk = false; + } + } + } + } + + if (waitOk) + { + D3D12_ReleaseFence(driver, (Fence*)fence JULIET_DEBUG_PARAM(ConstString("WaitUntilGPUIsIdle"))); + + ok = true; + int32 idx = 0; + while (idx < d3d12driver->SubmittedCommandListCount) + { + ok = ok && D3D12_CleanCommandList(d3d12driver, d3d12driver->SubmittedCommandLists[idx], false); + } + + DisposePendingResources(d3d12driver); + } + } + + return ok; +} + +internal bool8 Wait(GPUDriver* driver, bool8 waitForAll, Fence* const* fences, uint32 numFences JULIET_DEBUG_PARAM(String querier)) +{ + Assert(driver != NULL); + bool8 ok = false; + D3D12Driver* d3d12driver = (D3D12Driver*)driver; + + TempArena tempArena = ArenaTempBegin(d3d12driver->DriverArena); + + HANDLE* events = ArenaPushArrayTag(tempArena.Arena, HANDLE, numFences, "Wait() HANDLE - JUST IN CASE"); + MemoryZero(events, sizeof(HANDLE) * numFences); + + bool8 setupOk = true; + for (uint32 i = 0; i < numFences; ++i) + { + D3D12Fence* fence = (D3D12Fence*)fences[i]; + + HRESULT res = ID3D12Fence_SetEventOnCompletion(fence->Handle, D3D12_FENCE_SIGNAL_VALUE, fence->Event); + if (FAILED(res)) + { + D3D12_LogError(d3d12driver->D3D12Device, "Setting fence event failed!", res); + setupOk = false; + break; + } + + events[i] = fence->Event; + } + + if (!setupOk) + { + ArenaTempEnd(tempArena); + } + else + { +#if JULIET_DEBUG + LogDebug(LogCategory_Graphics, "Waiting for %d fences. Querier %s", numFences, CStr(querier)); +#endif + for (uint32 i = 0; i < numFences; ++i) + { + D3D12Fence* d3d12fence = (D3D12Fence*)fences[i]; + LogDebug(LogCategory_Graphics, "Waiting for %p fence. Handle %p | Event %p | Refcount %d", + (void*)d3d12fence, (void*)d3d12fence->Handle, (void*)d3d12fence->Event, d3d12fence->ReferenceCount); + } + + DWORD waitResult = WaitForMultipleObjects(numFences, events, waitForAll, INFINITE); + + ArenaTempEnd(tempArena); + + if (waitResult == WAIT_FAILED) + { + LogError(LogCategory_Graphics, "Wait failed"); + } + else + { + ok = true; + int32 idx = 0; + while (idx < d3d12driver->SubmittedCommandListCount) + { + uint64 fenceValue = ID3D12Fence_GetCompletedValue(d3d12driver->SubmittedCommandLists[idx]->InFlightFence->Handle); + if (fenceValue == D3D12_FENCE_SIGNAL_VALUE) + { + ok = ok && D3D12_CleanCommandList(d3d12driver, d3d12driver->SubmittedCommandLists[idx], false); + } + else + { + idx += 1; + } + } + + DisposePendingResources(d3d12driver); + } + } + + return ok; +} + +internal bool8 D3D12_QueryFence(GPUDriver* driver, Fence* fence) +{ + (void)driver; + (void)fence; + Unimplemented(); + return true; +} + +internal void ResourceBarrier(D3D12CommandList* commandList, D3D12_RESOURCE_STATES sourceState, + D3D12_RESOURCE_STATES destinationState, ID3D12Resource* resource, uint32 subresourceIndex, bool8 needsUavBarrier) +{ + Assert(commandList != NULL); + D3D12_RESOURCE_BARRIER barrierDesc[2]; + uint32 numBarriers = 0; + + if (sourceState != destinationState) + { + barrierDesc[numBarriers].Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; + barrierDesc[numBarriers].Flags = (D3D12_RESOURCE_BARRIER_FLAGS)0; + barrierDesc[numBarriers].Transition.StateBefore = sourceState; + barrierDesc[numBarriers].Transition.StateAfter = destinationState; + barrierDesc[numBarriers].Transition.pResource = resource; + barrierDesc[numBarriers].Transition.Subresource = subresourceIndex; + + numBarriers += 1; + } + + if (needsUavBarrier) + { + barrierDesc[numBarriers].Type = D3D12_RESOURCE_BARRIER_TYPE_UAV; + barrierDesc[numBarriers].Flags = (D3D12_RESOURCE_BARRIER_FLAGS)0; + barrierDesc[numBarriers].UAV.pResource = resource; + + numBarriers += 1; + } + + if (numBarriers > 0) + { + ID3D12GraphicsCommandList6_ResourceBarrier(commandList->GraphicsCommandList.CommandList, numBarriers, barrierDesc); + } +} + +internal void DestroyFence(D3D12Fence* fence) +{ + Assert(fence != NULL); + if (fence->Handle != NULL) + { + ID3D12Fence_Release(fence->Handle); + } + + if (fence->Event != NULL) + { + CloseHandle(fence->Event); + } +} +// End Fences + +// Begin Swapchain +internal bool8 CreateSwapChainTexture(D3D12Driver* driver, IDXGISwapChain3* swapChain, + SwapChainComposition composition, D3D12TextureContainer* textureContainer, uint8 index) +{ + Assert(driver != NULL); + Assert(swapChain != NULL); + Assert(textureContainer != NULL); + bool8 ok = false; + ID3D12Resource* swapChainTexture = NULL; + HRESULT result = IDXGISwapChain3_GetBuffer(swapChain, index, &IID_ID3D12Resource, (void**)&swapChainTexture); + if (FAILED(result)) + { + D3D12_LogError(driver->D3D12Device, "Cannot get buffer from SwapChain", result); + } + else + { + D3D12Texture* texture = (D3D12Texture*)Calloc(1, sizeof(D3D12Texture)); + if (texture == NULL) + { + D3D12_LogError(driver->D3D12Device, "Cannot allocate D3D12Texture (out of memory)", result); + ID3D12Resource_Release(swapChainTexture); + } + else + { + texture->ReferenceCount += 1; + texture->SubresourceCount = 1; + texture->Subresources = (D3D12TextureSubresource*)Calloc(1, sizeof(D3D12TextureSubresource)); + if (texture->Subresources == NULL) + { + D3D12_LogError(driver->D3D12Device, "Cannot allocate D3D12TextureSubresource (out of memory)", result); + FreeMemory(texture); + ID3D12Resource_Release(swapChainTexture); + } + else + { + texture->Subresources[0].RTVHandles = (D3D12StagingDescriptor*)Calloc(1, sizeof(D3D12StagingDescriptor)); + texture->Subresources[0].UAVHandle.Heap = NULL; + texture->Subresources[0].Parent = texture; + texture->Subresources[0].Index = 0; + texture->Subresources[0].Layer = 0; + texture->Subresources[0].Depth = 1; + texture->Subresources[0].Level = 0; + + D3D12_RESOURCE_DESC textureDesc; + ID3D12Resource_GetDesc(swapChainTexture, &textureDesc); + textureContainer->Header.CreateInfo.Width = (uint32)textureDesc.Width; + textureContainer->Header.CreateInfo.Height = (uint32)textureDesc.Height; + textureContainer->Header.CreateInfo.LayerCount = 1; + textureContainer->Header.CreateInfo.MipLevelCount = 1; + textureContainer->Header.CreateInfo.Type = TextureType_2D; + textureContainer->Header.CreateInfo.Flags = TextureUsageFlag_ColorTarget; + textureContainer->Header.CreateInfo.SampleCount = TextureSampleCount_One; + textureContainer->Header.CreateInfo.Format = SwapchainCompositionToJulietTextureFormat[composition]; + + textureContainer->Textures = (D3D12Texture**)Calloc(1, sizeof(D3D12Texture*)); + if (textureContainer->Textures == NULL) + { + FreeMemory(texture->Subresources[0].RTVHandles); + FreeMemory(texture->Subresources); + FreeMemory(texture); + ID3D12Resource_Release(swapChainTexture); + } + else + { + textureContainer->Capacity = 1; + textureContainer->Count = 1; + textureContainer->Textures[0] = texture; + textureContainer->ActiveTexture = texture; + textureContainer->CanBeCycled = false; + + texture->Container = textureContainer; + texture->IndexInContainer = 0; + + DXGI_FORMAT swapchainFormat = SwapchainCompositionToTextureFormat[composition]; + AssignStagingDescriptor(driver, D3D12_DESCRIPTOR_HEAP_TYPE_RTV, &texture->Subresources[0].RTVHandles[0]); + D3D12_RENDER_TARGET_VIEW_DESC rtvDesc; + rtvDesc.Format = (composition == SwapChainComposition_SDR_LINEAR) ? DXGI_FORMAT_B8G8R8A8_UNORM_SRGB : swapchainFormat; + rtvDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2D; + rtvDesc.Texture2D.MipSlice = 0; + rtvDesc.Texture2D.PlaneSlice = 0; + + ID3D12Device5_CreateRenderTargetView(driver->D3D12Device, swapChainTexture, &rtvDesc, + texture->Subresources[0].RTVHandles[0].CpuHandle); + + ID3D12Resource_Release(swapChainTexture); + ok = true; + } + } + } + } + + return ok; +} + +internal bool8 D3D12_AcquireSwapChainTextureInternal(bool8 block, CommandList* commandList, Window* window, Texture** swapchainTexture) +{ + Assert(commandList != NULL); + Assert(window != NULL); + Assert(swapchainTexture != NULL); + D3D12CommandList* d3d12CommandList = (D3D12CommandList*)commandList; + + D3D12Driver* driver = d3d12CommandList->Driver; + Assert(driver->WindowData != NULL); + + (void)window; + D3D12WindowData* windowData = driver->WindowData; + Assert(windowData->Window == window); + + bool8 ok = true; + bool8 proceed = true; + if (windowData->InFlightFences[windowData->WindowFrameCounter] != NULL) + { + if (block) + { + if (!Wait((GPUDriver*)driver, true, &windowData->InFlightFences[windowData->WindowFrameCounter], + 1 JULIET_DEBUG_PARAM(ConstString("AcquireSwapChainTexture")))) + { + ok = false; + proceed = false; + } + } + else + { + if (!D3D12_QueryFence((GPUDriver*)driver, windowData->InFlightFences[windowData->WindowFrameCounter])) + { + proceed = false; + } + } + + if (proceed) + { + D3D12_ReleaseFence((GPUDriver*)driver, windowData->InFlightFences[windowData->WindowFrameCounter] JULIET_DEBUG_PARAM( + ConstString("AcquireSwapChainTexture"))); + windowData->InFlightFences[windowData->WindowFrameCounter] = NULL; + } + } + + if (ok && proceed) + { + uint32 swapchainIndex = IDXGISwapChain3_GetCurrentBackBufferIndex(windowData->SwapChain); + HRESULT result = IDXGISwapChain3_GetBuffer( + windowData->SwapChain, swapchainIndex, &IID_ID3D12Resource, + (void**)&windowData->SwapChainTextureContainers[swapchainIndex].ActiveTexture->Resource); + if (FAILED(result)) + { + D3D12_LogError(driver->D3D12Device, "Could not acquire swapchain", result); + ok = false; + } + else + { + Assert(d3d12CommandList->PresentDataCount + 1 <= d3d12CommandList->PresentDataCapacity); + d3d12CommandList->PresentDatas[d3d12CommandList->PresentDataCount].WindowData = windowData; + d3d12CommandList->PresentDatas[d3d12CommandList->PresentDataCount].SwapChainImageIndex = swapchainIndex; + d3d12CommandList->PresentDataCount += 1; + + D3D12_RESOURCE_BARRIER barrierDesc; + barrierDesc.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; + barrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; + barrierDesc.Transition.StateBefore = D3D12_RESOURCE_STATE_PRESENT; + barrierDesc.Transition.StateAfter = D3D12_RESOURCE_STATE_RENDER_TARGET; + barrierDesc.Transition.pResource = windowData->SwapChainTextureContainers[swapchainIndex].ActiveTexture->Resource; + barrierDesc.Transition.Subresource = 0; + + ID3D12GraphicsCommandList6_ResourceBarrier(d3d12CommandList->GraphicsCommandList.CommandList, 1, &barrierDesc); + + *swapchainTexture = (Texture*)&windowData->SwapChainTextureContainers[swapchainIndex]; + } + } + + return ok; +} + +internal bool8 CreateSwapChain(D3D12Driver* driver, D3D12WindowData* windowData, + SwapChainComposition composition, PresentMode presentMode) +{ + Assert(driver != NULL); + Assert(windowData != NULL); + bool8 ok = false; + Window32State* windowWin32State = (Window32State*)windowData->Window->State; + HWND windowHandle = windowWin32State->Handle; + if (!IsWindow(windowHandle)) + { + Assert(false && "windowWin32State->Handle is not a window handle ???"); + } + else + { + DXGI_FORMAT swapChainFormat = SwapchainCompositionToTextureFormat[composition]; + + windowData->SwapChainTextureCount = Clamp(driver->FramesInFlight, (uint8)2, (uint8)3); + + DXGI_SWAP_CHAIN_DESC1 swapChainDesc = { 0 }; + swapChainDesc.Width = 0; + swapChainDesc.Height = 0; + swapChainDesc.Format = swapChainFormat; + swapChainDesc.Stereo = 0; + swapChainDesc.SampleDesc.Count = 1; + swapChainDesc.SampleDesc.Quality = 0; + swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; + swapChainDesc.BufferCount = windowData->SwapChainTextureCount; + swapChainDesc.Scaling = DXGI_SCALING_STRETCH; + swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_DISCARD; + swapChainDesc.AlphaMode = DXGI_ALPHA_MODE_UNSPECIFIED; + swapChainDesc.Flags = driver->IsTearingSupported ? DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING : 0; + + DXGI_SWAP_CHAIN_FULLSCREEN_DESC swapChainFullscreenDesc = { 0 }; + swapChainFullscreenDesc.RefreshRate.Numerator = 0; + swapChainFullscreenDesc.RefreshRate.Denominator = 0; + swapChainFullscreenDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED; + swapChainFullscreenDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED; + swapChainFullscreenDesc.Windowed = TRUE; + + IDXGISwapChain1* swapChain = NULL; + HRESULT result = + IDXGIFactory4_CreateSwapChainForHwnd(driver->DXGIFactory, (IUnknown*)driver->GraphicsQueue, windowHandle, + &swapChainDesc, &swapChainFullscreenDesc, NULL, &swapChain); + if (FAILED(result)) + { + D3D12_LogError(driver->D3D12Device, "Failed to create SwapChain", result); + } + else + { + IDXGISwapChain3* swapChain3 = NULL; + result = IDXGISwapChain1_QueryInterface(swapChain, &IID_IDXGISwapChain3, (void**)&swapChain3); + IDXGISwapChain1_Release(swapChain); + if (FAILED(result)) + { + D3D12_LogError(driver->D3D12Device, "Could not query IDXGISwapChain3 interface", result); + } + else + { + if (composition != SwapChainComposition_SDR) + { + IDXGISwapChain3_SetColorSpace1(swapChain3, SwapchainCompositionToColorSpace[composition]); + } + + IDXGIFactory1* parentFactory = NULL; + result = IDXGISwapChain3_GetParent(swapChain3, &IID_IDXGIFactory1, (void**)&parentFactory); + if (FAILED(result)) + { + Log(LogLevel_Warning, LogCategory_Graphics, "Cannot get SwapChain Parent! Error Code: " HRESULT_FMT, result); + } + else + { + result = IDXGIFactory1_MakeWindowAssociation(parentFactory, windowHandle, DXGI_MWA_NO_WINDOW_CHANGES); + if (FAILED(result)) + { + Log(LogLevel_Warning, LogCategory_Graphics, "MakeWindowAssociation failed! Error Code: " HRESULT_FMT, result); + } + IDXGIFactory1_Release(parentFactory); + } + + result = IDXGISwapChain3_GetDesc1(swapChain3, &swapChainDesc); + if (FAILED(result)) + { + D3D12_LogError(driver->D3D12Device, "Failed to retrieve SwapChain descriptor", result); + } + else + { + windowData->SwapChain = swapChain3; + windowData->SwapChainColorSpace = SwapchainCompositionToColorSpace[composition]; + windowData->SwapChainComposition = composition; + windowData->WindowFrameCounter = 0; + windowData->Width = swapChainDesc.Width; + windowData->Height = swapChainDesc.Height; + windowData->PresentMode = presentMode; + + ok = true; + for (uint8 idx = 0; idx < windowData->SwapChainTextureCount; ++idx) + { + if (!CreateSwapChainTexture(driver, swapChain3, composition, &windowData->SwapChainTextureContainers[idx], idx)) + { + IDXGISwapChain3_Release(swapChain3); + ok = false; + break; + } + } + } + } + } + } + + return ok; +} + +internal void DestroySwapChain(D3D12Driver* driver, D3D12WindowData* windowData) +{ + Assert(driver != NULL); + Assert(windowData != NULL); + for (uint32 idx = 0; idx < windowData->SwapChainTextureCount; ++idx) + { + ReleaseStagingDescriptor(driver, &windowData->SwapChainTextureContainers[idx].ActiveTexture->Subresources[0].RTVHandles[0]); + + FreeMemory(windowData->SwapChainTextureContainers[idx].ActiveTexture->Subresources[0].RTVHandles); + FreeMemory(windowData->SwapChainTextureContainers[idx].ActiveTexture->Subresources); + FreeMemory(windowData->SwapChainTextureContainers[idx].ActiveTexture); + FreeMemory(windowData->SwapChainTextureContainers[idx].Textures); + } + + IDXGISwapChain3_Release(windowData->SwapChain); + windowData->SwapChain = NULL; +} + +internal bool8 D3D12_AcquireSwapChainTexture(CommandList* commandList, Window* window, Texture** swapChainTexture) +{ + return D3D12_AcquireSwapChainTextureInternal(false, commandList, window, swapChainTexture); +} + +internal bool8 D3D12_WaitAndAcquireSwapChainTexture(CommandList* commandList, Window* window, Texture** swapChainTexture) +{ + return D3D12_AcquireSwapChainTextureInternal(true, commandList, window, swapChainTexture); +} + +internal bool8 D3D12_WaitForSwapchain(GPUDriver* driver, Window* window) +{ + (void)window; + Assert(driver != NULL); + bool8 ok = true; + D3D12Driver* d3d12Driver = (D3D12Driver*)driver; + D3D12WindowData* windowData = d3d12Driver->WindowData; + if (windowData == NULL) + { + LogError(LogCategory_Graphics, "Cannot wait for swapchain. Window has no Swapchain"); + ok = false; + } + else if (windowData->InFlightFences[windowData->WindowFrameCounter] != NULL) + { + if (!Wait(driver, true, &windowData->InFlightFences[windowData->WindowFrameCounter], + 1 JULIET_DEBUG_PARAM(ConstString("WaitForSwapchain")))) + { + ok = false; + } + } + + return ok; +} + +internal TextureFormat D3D12_GetSwapChainTextureFormat(GPUDriver* driver, Window* window) +{ + Assert(driver != NULL); + Assert(window != NULL); + TextureFormat format = TextureFormat_Invalid; + D3D12Driver* d3d12Driver = (D3D12Driver*)driver; + D3D12WindowData* windowData = d3d12Driver->WindowData; + if (windowData == NULL) + { + LogError(LogCategory_Graphics, "Cannot get swapchain format. Window has no Swapchain"); + } + else + { + Assert(windowData->Window == window); + format = windowData->SwapChainTextureContainers[windowData->WindowFrameCounter].Header.CreateInfo.Format; + } + return format; +} +// End Swapchain + +// Begin Texture +internal uint32 ComputeSubresourceIndex(uint32 mipLevel, uint32 layer, uint32 numLevels) +{ + return mipLevel + (layer * numLevels); +} + +internal D3D12_RESOURCE_STATES GetDefaultTextureResourceState(TextureUsageFlag usageFlags) +{ + D3D12_RESOURCE_STATES state = D3D12_RESOURCE_STATE_ALL_SHADER_RESOURCE; + if ((usageFlags & TextureUsageFlag_Sampler) != TextureUsageFlag_None) + { + state = D3D12_RESOURCE_STATE_ALL_SHADER_RESOURCE; + } + else if ((usageFlags & TextureUsageFlag_GraphicsStorageRead) != TextureUsageFlag_None) + { + state = D3D12_RESOURCE_STATE_ALL_SHADER_RESOURCE; + } + else if ((usageFlags & TextureUsageFlag_ColorTarget) != TextureUsageFlag_None) + { + state = D3D12_RESOURCE_STATE_RENDER_TARGET; + } + else if ((usageFlags & TextureUsageFlag_DepthStencilTarget) != TextureUsageFlag_None) + { + state = D3D12_RESOURCE_STATE_DEPTH_WRITE; + } + else if ((usageFlags & TextureUsageFlag_ComputeStorageRead) != TextureUsageFlag_None) + { + state = D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE; + } + else if ((usageFlags & TextureUsageFlag_ComputeStorageWrite) != TextureUsageFlag_None) + { + state = D3D12_RESOURCE_STATE_UNORDERED_ACCESS; + } + else if ((usageFlags & TextureUsageFlag_ComputeStorageSimultaneousReadWrite) != TextureUsageFlag_None) + { + state = D3D12_RESOURCE_STATE_UNORDERED_ACCESS; + } + else + { + Log(LogLevel_Error, LogCategory_Graphics, "Texture has no default usage mode!"); + } + return state; +} + +internal D3D12TextureSubresource* FetchTextureSubresource(D3D12TextureContainer* container, uint32 layer, uint32 level) +{ + Assert(container != NULL); + uint32 index = ComputeSubresourceIndex(level, layer, container->Header.CreateInfo.MipLevelCount); + return &container->ActiveTexture->Subresources[index]; +} + +internal void TextureSubresourceBarrier(D3D12CommandList* commandList, D3D12_RESOURCE_STATES sourceState, + D3D12_RESOURCE_STATES destinationState, D3D12TextureSubresource* textureSubresource) +{ + Assert(commandList != NULL); + Assert(textureSubresource != NULL); + TextureUsageFlag currentFlag = textureSubresource->Parent->Container->Header.CreateInfo.Flags; + bool8 needsUAVBarrier = ((currentFlag & TextureUsageFlag_ComputeStorageWrite) != TextureUsageFlag_None) || + ((currentFlag & TextureUsageFlag_ComputeStorageSimultaneousReadWrite) != TextureUsageFlag_None); + ResourceBarrier(commandList, sourceState, destinationState, textureSubresource->Parent->Resource, + textureSubresource->Index, needsUAVBarrier); +} + +internal void TextureSubresourceTransitionFromDefaultUsage(D3D12CommandList* commandList, + D3D12TextureSubresource* subresource, + D3D12_RESOURCE_STATES toTextureUsage) +{ + Assert(commandList != NULL); + Assert(subresource != NULL); + D3D12_RESOURCE_STATES defaultUsage = + GetDefaultTextureResourceState(subresource->Parent->Container->Header.CreateInfo.Flags); + TextureSubresourceBarrier(commandList, defaultUsage, toTextureUsage, subresource); +} + +internal void TextureTransitionFromDefaultUsage(D3D12CommandList* commandList, D3D12Texture* texture, + D3D12_RESOURCE_STATES toTextureUsage) +{ + Assert(commandList != NULL); + Assert(texture != NULL); + for (uint32 i = 0; i < texture->SubresourceCount; ++i) + { + TextureSubresourceTransitionFromDefaultUsage(commandList, &texture->Subresources[i], toTextureUsage); + } +} + +internal void TextureSubresourceTransitionToDefaultUsage(D3D12CommandList* commandList, + D3D12TextureSubresource* subresource, D3D12_RESOURCE_STATES fromTextureUsage) +{ + Assert(commandList != NULL); + Assert(subresource != NULL); + D3D12_RESOURCE_STATES defaultUsage = + GetDefaultTextureResourceState(subresource->Parent->Container->Header.CreateInfo.Flags); + TextureSubresourceBarrier(commandList, fromTextureUsage, defaultUsage, subresource); +} + +internal void TextureTransitionToDefaultUsage(D3D12CommandList* commandList, D3D12Texture* texture, + D3D12_RESOURCE_STATES fromTextureUsage) +{ + Assert(commandList != NULL); + Assert(texture != NULL); + for (uint32 i = 0; i < texture->SubresourceCount; ++i) + { + TextureSubresourceTransitionToDefaultUsage(commandList, &texture->Subresources[i], fromTextureUsage); + } +} + +internal D3D12TextureSubresource* PrepareTextureSubresourceForWrite(D3D12CommandList* commandList, + D3D12TextureContainer* container, uint32 layer, + uint32 level, bool8 shouldCycle, D3D12_RESOURCE_STATES newTextureUsage) +{ + Assert(commandList != NULL); + Assert(container != NULL); + D3D12TextureSubresource* subresource = FetchTextureSubresource(container, layer, level); + if (shouldCycle && container->CanBeCycled && subresource->Parent->ReferenceCount > 0) + { + subresource = FetchTextureSubresource(container, layer, level); + } + + TextureSubresourceTransitionFromDefaultUsage(commandList, subresource, newTextureUsage); + + return subresource; +} + +internal Texture* D3D12_CreateTexture(GPUDriver* driver, const TextureCreateInfo* createInfo) +{ + Assert(driver != NULL); + Assert(createInfo != NULL); + D3D12Driver* d3d12Driver = (D3D12Driver*)driver; + + D3D12_RESOURCE_DESC desc = { 0 }; + switch (createInfo->Type) + { + case TextureType_2D: + case TextureType_2DArray: + case TextureType_Cube: + case TextureType_CubeArray: desc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D; break; + case TextureType_3D: + case TextureType_3DArray: desc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE3D; break; + } + + desc.Alignment = 0; + desc.Width = createInfo->Width; + desc.Height = createInfo->Height; + desc.DepthOrArraySize = (uint16)createInfo->LayerCount; + desc.MipLevels = (uint16)createInfo->MipLevelCount; + desc.Format = ConvertToD3D12TextureFormat(createInfo->Format); + desc.SampleDesc.Count = JulietToD3D12_SampleCount[createInfo->SampleCount]; + desc.SampleDesc.Quality = 0; + desc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN; + desc.Flags = D3D12_RESOURCE_FLAG_NONE; + + if ((createInfo->Flags & TextureUsageFlag_ColorTarget) != TextureUsageFlag_None) + { + desc.Flags |= D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET; + } + if ((createInfo->Flags & TextureUsageFlag_DepthStencilTarget) != TextureUsageFlag_None) + { + desc.Flags |= D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL; + } + if ((createInfo->Flags & TextureUsageFlag_ComputeStorageWrite) != TextureUsageFlag_None) + { + desc.Flags |= D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; + } + + D3D12_HEAP_PROPERTIES heapProps = { 0 }; + heapProps.Type = D3D12_HEAP_TYPE_DEFAULT; + heapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + heapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + heapProps.CreationNodeMask = 0; + heapProps.VisibleNodeMask = 0; + + ID3D12Resource* resource = NULL; + D3D12_CLEAR_VALUE clearValue = { 0 }; + D3D12_CLEAR_VALUE* pClearValue = NULL; + + if (desc.Flags & D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL) + { + clearValue.Format = ConvertToD3D12DepthFormat(createInfo->Format); + clearValue.DepthStencil.Depth = 1.0f; + clearValue.DepthStencil.Stencil = 0; + pClearValue = &clearValue; + } + else if (desc.Flags & D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET) + { + clearValue.Format = desc.Format; + clearValue.Color[0] = 0.0f; + clearValue.Color[1] = 0.0f; + clearValue.Color[2] = 0.0f; + clearValue.Color[3] = 0.0f; + pClearValue = &clearValue; + } + + Texture* resultTexture = NULL; + D3D12_RESOURCE_STATES initialState = GetDefaultTextureResourceState(createInfo->Flags); + HRESULT hr = ID3D12Device5_CreateCommittedResource(d3d12Driver->D3D12Device, &heapProps, D3D12_HEAP_FLAG_NONE, &desc, + initialState, pClearValue, &IID_ID3D12Resource, (void**)&resource); + + if (FAILED(hr)) + { + D3D12_LogError(d3d12Driver->D3D12Device, "Failed to create D3D12 committed resource for texture", hr); + } + else + { + D3D12TextureContainer* textureContainer = (D3D12TextureContainer*)Calloc(1, sizeof(D3D12TextureContainer)); + D3D12Texture* texture = (D3D12Texture*)Calloc(1, sizeof(D3D12Texture)); + + textureContainer->Header.CreateInfo = *createInfo; + textureContainer->ActiveTexture = texture; + textureContainer->Textures = (D3D12Texture**)Malloc(sizeof(D3D12Texture*)); + textureContainer->Textures[0] = texture; + textureContainer->Capacity = 1; + textureContainer->Count = 1; + textureContainer->CanBeCycled = true; + + texture->Container = textureContainer; + texture->Resource = resource; + texture->ReferenceCount = 1; + + uint32 numLayers = Max((uint32)1, createInfo->LayerCount); + uint32 numMips = Max((uint32)1, createInfo->MipLevelCount); + texture->SubresourceCount = numLayers * numMips; + texture->Subresources = (D3D12TextureSubresource*)Calloc(texture->SubresourceCount, sizeof(D3D12TextureSubresource)); + + for (uint32 layer = 0; layer < numLayers; ++layer) + { + for (uint32 mip = 0; mip < numMips; ++mip) + { + uint32 index = mip + (layer * numMips); + D3D12TextureSubresource* sub = &texture->Subresources[index]; + sub->Parent = texture; + sub->Layer = layer; + sub->Level = mip; + sub->Index = index; + sub->Depth = 1; + + if ((createInfo->Flags & TextureUsageFlag_ColorTarget) != TextureUsageFlag_None) + { + sub->RTVHandles = (D3D12StagingDescriptor*)Calloc(1, sizeof(D3D12StagingDescriptor)); + AssignStagingDescriptor(d3d12Driver, D3D12_DESCRIPTOR_HEAP_TYPE_RTV, &sub->RTVHandles[0]); + + D3D12_RENDER_TARGET_VIEW_DESC rtvDesc = { 0 }; + rtvDesc.Format = desc.Format; + rtvDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2D; + rtvDesc.Texture2D.MipSlice = mip; + ID3D12Device5_CreateRenderTargetView(d3d12Driver->D3D12Device, resource, &rtvDesc, + sub->RTVHandles[0].CpuHandle); + } + + if ((createInfo->Flags & TextureUsageFlag_DepthStencilTarget) != TextureUsageFlag_None) + { + AssignStagingDescriptor(d3d12Driver, D3D12_DESCRIPTOR_HEAP_TYPE_DSV, &sub->DSVHandle); + + D3D12_DEPTH_STENCIL_VIEW_DESC dsvDesc = { 0 }; + dsvDesc.Format = ConvertToD3D12DepthFormat(createInfo->Format); + dsvDesc.ViewDimension = D3D12_DSV_DIMENSION_TEXTURE2D; + dsvDesc.Texture2D.MipSlice = mip; + ID3D12Device5_CreateDepthStencilView(d3d12Driver->D3D12Device, resource, &dsvDesc, + sub->DSVHandle.CpuHandle); + } + } + } + + { + D3D12Descriptor descriptor; + if (AssignDescriptor(d3d12Driver->BindlessDescriptorHeap, &descriptor)) + { + ZeroStruct(texture->SRVHandle); + texture->SRVHandle.CpuHandleIndex = descriptor.Index; + texture->SRVHandle.CpuHandle = descriptor.CpuHandle; + texture->SRVHandle.Heap = descriptor.Heap; + + D3D12_SHADER_RESOURCE_VIEW_DESC srvDesc = { 0 }; + srvDesc.Format = desc.Format; + + if (createInfo->Format == TextureFormat_D32_FLOAT) + { + srvDesc.Format = DXGI_FORMAT_R32_FLOAT; + } + else if (createInfo->Format == TextureFormat_D16_UNORM) + { + srvDesc.Format = DXGI_FORMAT_R16_UNORM; + } + else if (createInfo->Format == TextureFormat_D24_UNORM_S8_UINT) + { + srvDesc.Format = DXGI_FORMAT_R24_UNORM_X8_TYPELESS; + } + else if (createInfo->Format == TextureFormat_D32_FLOAT_S8_UINT) + { + srvDesc.Format = DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS; + } + + srvDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + srvDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; + srvDesc.Texture2D.MostDetailedMip = 0; + srvDesc.Texture2D.MipLevels = numMips; + srvDesc.Texture2D.PlaneSlice = 0; + srvDesc.Texture2D.ResourceMinLODClamp = 0.0f; + + ID3D12Device5_CreateShaderResourceView(d3d12Driver->D3D12Device, resource, &srvDesc, descriptor.CpuHandle); + } + } + + resultTexture = (Texture*)textureContainer; + } + + return resultTexture; +} + +internal void D3D12_DestroyTexture(GPUDriver* driver, Texture* texture) +{ + Assert(driver != NULL); + Assert(texture != NULL); + D3D12Driver* d3d12Driver = (D3D12Driver*)driver; + D3D12TextureContainer* textureContainer = (D3D12TextureContainer*)texture; + + for (uint32 i = 0; i < textureContainer->Count; ++i) + { + D3D12Texture* d3d12Texture = textureContainer->Textures[i]; + for (uint32 j = 0; j < d3d12Texture->SubresourceCount; ++j) + { + D3D12TextureSubresource* sub = &d3d12Texture->Subresources[j]; + if (sub->RTVHandles != NULL) + { + ReleaseStagingDescriptor(d3d12Driver, &sub->RTVHandles[0]); + FreeMemory(sub->RTVHandles); + } + if (sub->DSVHandle.Heap != NULL) + { + ReleaseStagingDescriptor(d3d12Driver, &sub->DSVHandle); + } + } + ID3D12Resource_Release(d3d12Texture->Resource); + FreeMemory(d3d12Texture->Subresources); + FreeMemory(d3d12Texture); + } + + FreeMemory(textureContainer->Textures); + FreeMemory(textureContainer); +} +// End Texture + +// Begin Command list +internal index_t GetNewCommandListID(void) +{ + return g_CommandListID++; +} + +internal bool8 HasD3D12CommandListForQueueType(D3D12CommandList* commandList, QueueType queueType) +{ + Assert(commandList != NULL); + bool8 has = false; + switch (queueType) + { + case QueueType_Graphics: has = (commandList->GraphicsCommandList.CommandList != NULL); break; + case QueueType_Compute: has = (commandList->ComputeCommandList.CommandList != NULL); break; + case QueueType_Copy: has = (commandList->CopyCommandList.CommandList != NULL); break; + default: has = false; break; + } + return has; +} + +internal void DestroyCommandList(D3D12CommandList* commandList) +{ + Assert(commandList != NULL); + if (commandList->GraphicsCommandList.CommandList != NULL) + { + ID3D12GraphicsCommandList6_Release(commandList->GraphicsCommandList.CommandList); + } + + if (commandList->GraphicsCommandList.Allocator != NULL) + { + ID3D12CommandAllocator_Release(commandList->GraphicsCommandList.Allocator); + } +} + +internal bool8 CreateAllocator(D3D12Driver* driver, ID3D12CommandAllocator** outAllocator, D3D12_COMMAND_QUEUE_DESC queueDesc) +{ + Assert(driver != NULL); + Assert(outAllocator != NULL); + bool8 ok = false; + HRESULT result = ID3D12Device5_CreateCommandAllocator(driver->D3D12Device, queueDesc.Type, &IID_ID3D12CommandAllocator, + (void**)outAllocator); + if (FAILED(result)) + { + AssertHR(result, "Cannot create ID3D12CommandAllocator"); + } + else + { + ID3D12CommandAllocator_Reset(*outAllocator); + ok = true; + } + return ok; +} + +internal bool8 CreateD3D12CommandListForQueueType(D3D12Driver* driver, D3D12CommandList* commandList, QueueType queueType) +{ + Assert(driver != NULL); + Assert(commandList != NULL); + wchar_t wide_str[64]; + swprintf(wide_str, ArraySize(wide_str), L"CommandList ID:%zu", commandList->ID); + + bool8 ok = false; + D3D12_COMMAND_QUEUE_DESC queueDesc = driver->QueueDesc[queueType]; + switch (queueType) + { + case QueueType_Graphics: + { + CreateAllocator(driver, &commandList->GraphicsCommandList.Allocator, queueDesc); + ID3D12GraphicsCommandList6* d3d12GraphicsCommandList = NULL; + HRESULT result = + ID3D12Device5_CreateCommandList1(driver->D3D12Device, queueDesc.NodeMask, queueDesc.Type, + D3D12_COMMAND_LIST_FLAG_NONE, &IID_ID3D12GraphicsCommandList6, + (void**)&d3d12GraphicsCommandList); + if (FAILED(result)) + { + Assert(false && "Error not implemented: cannot create ID3D12GraphicsCommandList6 (graphics or compute command list)"); + } + else + { + commandList->GraphicsCommandList.CommandList = d3d12GraphicsCommandList; + ID3D12GraphicsCommandList6_SetName(d3d12GraphicsCommandList, wide_str); + ID3D12GraphicsCommandList6_Reset(d3d12GraphicsCommandList, commandList->GraphicsCommandList.Allocator, NULL); + ok = true; + } + break; + } + case QueueType_Compute: + { + CreateAllocator(driver, &commandList->ComputeCommandList.Allocator, queueDesc); + ID3D12GraphicsCommandList6* d3d12GraphicsCommandList = NULL; + HRESULT result = + ID3D12Device5_CreateCommandList1(driver->D3D12Device, queueDesc.NodeMask, queueDesc.Type, + D3D12_COMMAND_LIST_FLAG_NONE, &IID_ID3D12GraphicsCommandList6, + (void**)&d3d12GraphicsCommandList); + if (FAILED(result)) + { + Assert(false && "Error not implemented: cannot create ID3D12GraphicsCommandList6 (graphics or compute command list)"); + } + else + { + commandList->ComputeCommandList.CommandList = d3d12GraphicsCommandList; + ID3D12GraphicsCommandList6_SetName(d3d12GraphicsCommandList, wide_str); + ID3D12GraphicsCommandList6_Reset(d3d12GraphicsCommandList, commandList->ComputeCommandList.Allocator, NULL); + ok = true; + } + break; + } + case QueueType_Copy: + { + CreateAllocator(driver, &commandList->CopyCommandList.Allocator, queueDesc); + ID3D12GraphicsCommandList* d3d12CopyCommandList = NULL; + HRESULT result = + ID3D12Device5_CreateCommandList1(driver->D3D12Device, queueDesc.NodeMask, queueDesc.Type, + D3D12_COMMAND_LIST_FLAG_NONE, &IID_ID3D12GraphicsCommandList, + (void**)&d3d12CopyCommandList); + + if (FAILED(result)) + { + AssertHR(result, "cannot create ID3D12GraphicsCommandList (copy command list)"); + } + else + { + commandList->CopyCommandList.CommandList = d3d12CopyCommandList; + ID3D12GraphicsCommandList_SetName(d3d12CopyCommandList, wide_str); + ID3D12GraphicsCommandList_Reset(d3d12CopyCommandList, commandList->CopyCommandList.Allocator, NULL); + ok = true; + } + break; + } + default: + { + ok = false; + break; + } + } + + return ok; +} + +internal bool8 AllocateCommandList(D3D12Driver* driver, QueueType queueType) +{ + Assert(driver != NULL); + bool8 ok = false; + if (driver->AvailableCommandLists == NULL) + { + driver->AvailableCommandLists = + ArenaPushArrayTag(driver->DriverArena, D3D12CommandList*, kMaxCommandListCount, "AvailableCommandLists"); + driver->AvailableCommandListCapacity = kMaxCommandListCount; + } + const index_t id = GetNewCommandListID(); + + D3D12CommandList* commandList = ArenaPushStructTag(driver->DriverArena, D3D12CommandList, "D3D12CommandList"); + if (commandList == NULL) + { + Log(LogLevel_Error, LogCategory_Graphics, "Cannot allocate D3D12CommandList: Out of memory"); + } + else + { + driver->AvailableCommandLists[driver->AvailableCommandListCount] = commandList; + driver->AvailableCommandListCount += 1; + + commandList->ID = id; + commandList->Driver = driver; + + commandList->PresentDataCapacity = kMaxPresentDataPerCommandList; + commandList->PresentDataCount = 0; + commandList->PresentDatas = ArenaPushArrayTag(driver->DriverArena, D3D12PresentData, + kMaxPresentDataPerCommandList, "Command list D3D12PresentData"); + + commandList->UsedTextureCapacity = kMaxTexturePerCommandList; + commandList->UsedTextureCount = 0; + commandList->UsedTextures = ArenaPushArrayTag(driver->DriverArena, D3D12Texture*, + kMaxTexturePerCommandList, "Command list D3D12Texture"); + + commandList->UsedGraphicsPipelineCapacity = kMaxGraphicsPipelinePerCommandList; + commandList->UsedGraphicsPipelineCount = 0; + commandList->UsedGraphicsPipelines = ArenaPushArrayTag(driver->DriverArena, D3D12GraphicsPipeline*, + kMaxTexturePerCommandList, "Command list D3D12GraphicsPipeline"); + + ok = true; + if (!HasD3D12CommandListForQueueType(commandList, queueType)) + { + if (!CreateD3D12CommandListForQueueType(driver, commandList, queueType)) + { + Log(LogLevel_Error, LogCategory_Graphics, "Cannot Create D3D12 command list"); + DestroyCommandList(commandList); + ok = false; + } + } + } + + return ok; +} + +internal D3D12CommandList* AcquireCommandListFromPool(D3D12Driver* driver, QueueType queueType) +{ + Assert(driver != NULL); + D3D12CommandList* commandList = NULL; + bool8 ok = true; + if (driver->AvailableCommandListCount == 0) + { + if (!AllocateCommandList(driver, queueType)) + { + ok = false; + } + } + + if (ok) + { + commandList = driver->AvailableCommandLists[driver->AvailableCommandListCount - 1]; + driver->AvailableCommandListCount -= 1; + } + + return commandList; +} + +internal CommandList* D3D12_AcquireCommandList(GPUDriver* driver, QueueType queueType) +{ + Assert(driver != NULL); + D3D12Driver* d3d12Driver = (D3D12Driver*)driver; + + D3D12CommandList* commandList = AcquireCommandListFromPool(d3d12Driver, queueType); + if (commandList != NULL) + { + commandList->AutoReleaseFence = true; + } + + return (CommandList*)commandList; +} + +internal void D3D12_SetViewPort(CommandList* commandList, const GraphicsViewPort* viewPort) +{ + Assert(commandList != NULL); + Assert(viewPort != NULL); + D3D12CommandList* d3d12CommandList = (D3D12CommandList*)commandList; + + D3D12_VIEWPORT d3d12Viewport; + d3d12Viewport.TopLeftX = viewPort->X; + d3d12Viewport.TopLeftY = viewPort->Y; + d3d12Viewport.Width = viewPort->Width; + d3d12Viewport.Height = viewPort->Height; + d3d12Viewport.MinDepth = viewPort->MinDepth; + d3d12Viewport.MaxDepth = viewPort->MaxDepth; + ID3D12GraphicsCommandList6_RSSetViewports(d3d12CommandList->GraphicsCommandList.CommandList, 1, &d3d12Viewport); +} + +internal void D3D12_SetScissorRect(CommandList* commandList, const struct Rectangle* rectangle) +{ + Assert(commandList != NULL); + Assert(rectangle != NULL); + D3D12CommandList* d3d12CommandList = (D3D12CommandList*)commandList; + D3D12_RECT scissorRect; + scissorRect.left = rectangle->X; + scissorRect.top = rectangle->Y; + scissorRect.right = rectangle->X + rectangle->Width; + scissorRect.bottom = rectangle->Y + rectangle->Height; + ID3D12GraphicsCommandList6_RSSetScissorRects(d3d12CommandList->GraphicsCommandList.CommandList, 1, &scissorRect); +} + +internal void D3D12_SetBlendConstants(CommandList* commandList, FColor blendConstants) +{ + Assert(commandList != NULL); + D3D12CommandList* d3d12CommandList = (D3D12CommandList*)commandList; + FLOAT blendFactor[4] = { blendConstants.R, blendConstants.G, blendConstants.B, blendConstants.A }; + ID3D12GraphicsCommandList6_OMSetBlendFactor(d3d12CommandList->GraphicsCommandList.CommandList, blendFactor); +} + +internal void D3D12_SetStencilReference(CommandList* commandList, uint8 reference) +{ + Assert(commandList != NULL); + D3D12CommandList* d3d12CommandList = (D3D12CommandList*)commandList; + ID3D12GraphicsCommandList6_OMSetStencilRef(d3d12CommandList->GraphicsCommandList.CommandList, reference); +} + +internal void D3D12_SetIndexBuffer(CommandList* commandList, GraphicsBuffer* buffer, + IndexFormat format, size_t indexCount, index_t offset) +{ + Assert(commandList != NULL); + Assert(buffer != NULL); + D3D12CommandList* d3d12CommandList = (D3D12CommandList*)commandList; + D3D12Buffer* d3d12Buffer = (D3D12Buffer*)buffer; + + if (d3d12Buffer->CurrentState != D3D12_RESOURCE_STATE_GENERIC_READ) + { + D3D12_RESOURCE_BARRIER barrier = { 0 }; + barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; + barrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; + barrier.Transition.pResource = d3d12Buffer->Handle; + barrier.Transition.StateBefore = d3d12Buffer->CurrentState; + barrier.Transition.StateAfter = D3D12_RESOURCE_STATE_GENERIC_READ; + barrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; + + ID3D12GraphicsCommandList6_ResourceBarrier(d3d12CommandList->GraphicsCommandList.CommandList, 1, &barrier); + d3d12Buffer->CurrentState = D3D12_RESOURCE_STATE_GENERIC_READ; + } + + D3D12_INDEX_BUFFER_VIEW ibView; + ibView.BufferLocation = ID3D12Resource_GetGPUVirtualAddress(d3d12Buffer->Handle) + offset; + if (format == IndexFormat_UInt16) + { + ibView.SizeInBytes = (UINT)(indexCount * sizeof(uint16)); + ibView.Format = DXGI_FORMAT_R16_UINT; + } + else + { + ibView.SizeInBytes = (UINT)(indexCount * sizeof(uint32)); + ibView.Format = DXGI_FORMAT_R32_UINT; + } + + ID3D12GraphicsCommandList6_IASetIndexBuffer(d3d12CommandList->GraphicsCommandList.CommandList, &ibView); +} + +internal void D3D12_SetPushConstants(CommandList* commandList, ShaderStage stage, uint32 rootParameterIndex, + uint32 numConstants, const void* constants) +{ + (void)stage; + Assert(commandList != NULL); + D3D12CommandList* d3d12CommandList = (D3D12CommandList*)commandList; + ID3D12GraphicsCommandList6_SetGraphicsRoot32BitConstants(d3d12CommandList->GraphicsCommandList.CommandList, + rootParameterIndex, numConstants, constants, 0); +} + +internal void SetDescriptorHeaps(D3D12CommandList* commandList) +{ + Assert(commandList != NULL); + ID3D12DescriptorHeap* heaps[2]; + D3D12DescriptorHeap* viewHeap = commandList->Driver->BindlessDescriptorHeap; + D3D12DescriptorHeap* samplerHeap = AcquireSamplerHeapFromPool(commandList->Driver); + + commandList->CRB_SRV_UAV_Heap = viewHeap; + commandList->Sampler_Heap = samplerHeap; + + heaps[0] = viewHeap->Handle; + heaps[1] = samplerHeap->Handle; + + ID3D12GraphicsCommandList6_SetDescriptorHeaps(commandList->GraphicsCommandList.CommandList, 2, heaps); +} + +#define TRACK_RESOURCE(resource, array, count, capacity) \ + bool8 alreadyTracked = false; \ + for (uint32 i = 0; i < commandList->count; i += 1) \ + { \ + if (commandList->array[i] == (resource)) \ + { \ + alreadyTracked = true; \ + break; \ + } \ + } \ + if (!alreadyTracked) \ + { \ + Assert(commandList->count + 1 <= commandList->capacity); \ + commandList->array[commandList->count] = (resource); \ + commandList->count += 1; \ + ++(resource)->ReferenceCount; \ + } + +internal void TrackGraphicsPipeline(D3D12CommandList* commandList, D3D12GraphicsPipeline* pipeline) +{ + Assert(commandList != NULL); + Assert(pipeline != NULL); + TRACK_RESOURCE(pipeline, UsedGraphicsPipelines, UsedGraphicsPipelineCount, UsedGraphicsPipelineCapacity) +} + +internal void TrackTexture(D3D12CommandList* commandList, D3D12Texture* texture) +{ + Assert(commandList != NULL); + Assert(texture != NULL); + TRACK_RESOURCE(texture, UsedTextures, UsedTextureCount, UsedTextureCapacity) +} + +internal bool8 D3D12_SubmitCommandLists(CommandList* commandList) +{ + Assert(commandList != NULL); + bool8 success = false; + D3D12CommandList* d3d12CommandList = (D3D12CommandList*)commandList; + D3D12Driver* d3d12Driver = d3d12CommandList->Driver; + + for (uint32 i = 0; i < d3d12CommandList->PresentDataCount; i += 1) + { + uint32 swapchainIndex = d3d12CommandList->PresentDatas[i].SwapChainImageIndex; + D3D12TextureContainer* container = + &d3d12CommandList->PresentDatas[i].WindowData->SwapChainTextureContainers[swapchainIndex]; + D3D12TextureSubresource* subresource = FetchTextureSubresource(container, 0, 0); + + D3D12_RESOURCE_BARRIER barrierDesc; + barrierDesc.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; + barrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; + barrierDesc.Transition.StateBefore = D3D12_RESOURCE_STATE_RENDER_TARGET; + barrierDesc.Transition.StateAfter = D3D12_RESOURCE_STATE_PRESENT; + barrierDesc.Transition.pResource = subresource->Parent->Resource; + barrierDesc.Transition.Subresource = subresource->Index; + + ID3D12GraphicsCommandList6_ResourceBarrier(d3d12CommandList->GraphicsCommandList.CommandList, 1, &barrierDesc); + } + + HRESULT result = ID3D12GraphicsCommandList6_Close(d3d12CommandList->GraphicsCommandList.CommandList); + if (FAILED(result)) + { + D3D12_LogError(d3d12Driver->D3D12Device, "Failed to close command list!", result); + } + else + { + ID3D12CommandList* ppCommandLists[] = { (ID3D12CommandList*)d3d12CommandList->GraphicsCommandList.CommandList }; + + ID3D12CommandQueue_ExecuteCommandLists(d3d12Driver->GraphicsQueue, 1, ppCommandLists); + + d3d12CommandList->InFlightFence = + D3D12_AcquireFence(d3d12Driver JULIET_DEBUG_PARAM(ConstString("SubmitCommandLists"))); + if (d3d12CommandList->InFlightFence != NULL) + { + result = ID3D12CommandQueue_Signal(d3d12Driver->GraphicsQueue, d3d12CommandList->InFlightFence->Handle, + D3D12_FENCE_SIGNAL_VALUE); + if (FAILED(result)) + { + D3D12_LogError(d3d12Driver->D3D12Device, "Failed to enqueue fence signal!", result); + } + else + { + const uint32 newValue = (uint32)d3d12Driver->SubmittedCommandListCount + 1U; + Assert(newValue <= 0xFF && "Command List count exceeded uint8 capacity!"); + Assert(newValue <= d3d12Driver->SubmittedCommandListCapacity); + (void)newValue; + + d3d12Driver->SubmittedCommandLists[d3d12Driver->SubmittedCommandListCount] = d3d12CommandList; + d3d12Driver->SubmittedCommandListCount += 1; + + success = true; + for (uint32 i = 0; i < d3d12CommandList->PresentDataCount; i += 1) + { + D3D12PresentData* presentData = &d3d12CommandList->PresentDatas[i]; + D3D12WindowData* windowData = presentData->WindowData; + + uint32 syncInterval = 1; + if (windowData->PresentMode == PresentMode_Immediate || windowData->PresentMode == PresentMode_Mailbox) + { + syncInterval = 0; + } + + uint32 presentFlags = 0; + if (d3d12Driver->IsTearingSupported && windowData->PresentMode == PresentMode_Immediate) + { + presentFlags = DXGI_PRESENT_ALLOW_TEARING; + } + + result = IDXGISwapChain3_Present(windowData->SwapChain, syncInterval, presentFlags); + if (FAILED(result)) + { + success = false; + } + + ID3D12Resource_Release(windowData->SwapChainTextureContainers[presentData->SwapChainImageIndex].ActiveTexture->Resource); + + windowData->InFlightFences[windowData->WindowFrameCounter] = (Fence*)d3d12CommandList->InFlightFence; + d3d12CommandList->InFlightFence->ReferenceCount += 1; + windowData->WindowFrameCounter = (windowData->WindowFrameCounter + 1) % d3d12Driver->FramesInFlight; + } + + { + int32 i = 0; + while (i < d3d12Driver->SubmittedCommandListCount) + { + uint64 fenceValue = ID3D12Fence_GetCompletedValue(d3d12Driver->SubmittedCommandLists[i]->InFlightFence->Handle); + if (fenceValue == D3D12_FENCE_SIGNAL_VALUE) + { + success = success && D3D12_CleanCommandList(d3d12Driver, d3d12Driver->SubmittedCommandLists[i], false); + } + else + { + i += 1; + } + } + } + + DisposePendingResources(d3d12Driver); + ++d3d12Driver->FrameCounter; + } + } + } + + return success; +} +// End Command List + +// Begin Render Pass +internal void D3D12_BeginRenderPass(CommandList* commandList, const ColorTargetInfo* colorTargetInfos, + uint32 colorTargetInfoCount, const DepthStencilTargetInfo* depthStencilTargetInfo) +{ + Assert(commandList != NULL); + Assert(colorTargetInfos != NULL); + D3D12CommandList* d3d12CommandList = (D3D12CommandList*)commandList; + + uint32 frameBufferWidth = uint32Max; + uint32 frameBufferHeight = uint32Max; + + for (uint32 idx = 0; idx < colorTargetInfoCount; ++idx) + { + D3D12TextureContainer* container = (D3D12TextureContainer*)colorTargetInfos[idx].TargetTexture; + uint32 width = container->Header.CreateInfo.Width >> colorTargetInfos[idx].MipLevel; + uint32 height = container->Header.CreateInfo.Height >> colorTargetInfos[idx].MipLevel; + + frameBufferWidth = Min(width, frameBufferWidth); + frameBufferHeight = Min(height, frameBufferHeight); + } + + D3D12_CPU_DESCRIPTOR_HANDLE DSV = { 0 }; + bool8 hasDSV = false; + if (depthStencilTargetInfo != NULL && depthStencilTargetInfo->TargetTexture != NULL) + { + D3D12TextureContainer* container = (D3D12TextureContainer*)depthStencilTargetInfo->TargetTexture; + uint32 width = container->Header.CreateInfo.Width; + uint32 height = container->Header.CreateInfo.Height; + + frameBufferWidth = Min(width, frameBufferWidth); + frameBufferHeight = Min(height, frameBufferHeight); + + D3D12TextureSubresource* subresource = + PrepareTextureSubresourceForWrite(d3d12CommandList, container, 0, 0, false, D3D12_RESOURCE_STATE_DEPTH_WRITE); + + DSV = subresource->DSVHandle.CpuHandle; + hasDSV = true; + d3d12CommandList->DepthStencilSubresource = subresource; + + TrackTexture(d3d12CommandList, subresource->Parent); + + if (depthStencilTargetInfo->LoadOperation == LoadOperation_Clear) + { + D3D12_CLEAR_FLAGS clearFlags = D3D12_CLEAR_FLAG_DEPTH; + ID3D12GraphicsCommandList6_ClearDepthStencilView(d3d12CommandList->GraphicsCommandList.CommandList, DSV, + clearFlags, depthStencilTargetInfo->ClearDepth, + depthStencilTargetInfo->ClearStencil, 0, NULL); + } + } + + D3D12_CPU_DESCRIPTOR_HANDLE RTVs[kGPUDriver_MaxColorTargetInfo]; + for (uint32 idx = 0; idx < colorTargetInfoCount; ++idx) + { + D3D12TextureContainer* container = (D3D12TextureContainer*)colorTargetInfos[idx].TargetTexture; + D3D12TextureSubresource* subresource = PrepareTextureSubresourceForWrite( + d3d12CommandList, container, + container->Header.CreateInfo.Type == TextureType_3D ? 0 : colorTargetInfos[idx].LayerIndex, + colorTargetInfos[idx].MipLevel, colorTargetInfos[idx].CycleTexture, D3D12_RESOURCE_STATE_RENDER_TARGET); + + uint32 RTVIndex = container->Header.CreateInfo.Type == TextureType_3D ? colorTargetInfos[idx].DepthPlane : 0; + D3D12_CPU_DESCRIPTOR_HANDLE rtv = subresource->RTVHandles[RTVIndex].CpuHandle; + + if (colorTargetInfos[idx].LoadOperation == LoadOperation_Clear) + { + float clearColor[4]; + clearColor[0] = colorTargetInfos[idx].ClearColor.R; + clearColor[1] = colorTargetInfos[idx].ClearColor.G; + clearColor[2] = colorTargetInfos[idx].ClearColor.B; + clearColor[3] = colorTargetInfos[idx].ClearColor.A; + + ID3D12GraphicsCommandList6_ClearRenderTargetView(d3d12CommandList->GraphicsCommandList.CommandList, rtv, + clearColor, 0, NULL); + } + + RTVs[idx] = rtv; + d3d12CommandList->ColorTargetSubresources[idx] = subresource; + + TrackTexture(d3d12CommandList, subresource->Parent); + + if (colorTargetInfos[idx].StoreOperation == StoreOperation_Resolve || + colorTargetInfos[idx].StoreOperation == StoreOperation_ResolveAndStore) + { + D3D12TextureContainer* resolveContainer = (D3D12TextureContainer*)colorTargetInfos[idx].ResolveTexture; + D3D12TextureSubresource* resolveSubresource = + PrepareTextureSubresourceForWrite(d3d12CommandList, resolveContainer, colorTargetInfos[idx].ResolveLayerIndex, + colorTargetInfos[idx].ResolveMipLevel, colorTargetInfos[idx].CycleResolveTexture, + D3D12_RESOURCE_STATE_RESOLVE_DEST); + + d3d12CommandList->ColorResolveSubresources[idx] = resolveSubresource; + + TrackTexture(d3d12CommandList, resolveSubresource->Parent); + } + } + + ID3D12GraphicsCommandList6_OMSetRenderTargets(d3d12CommandList->GraphicsCommandList.CommandList, + colorTargetInfoCount, RTVs, FALSE, hasDSV ? &DSV : NULL); + + GraphicsViewPort defaultViewport; + defaultViewport.X = 0.f; + defaultViewport.Y = 0.f; + defaultViewport.Width = (float)frameBufferWidth; + defaultViewport.Height = (float)frameBufferHeight; + defaultViewport.MinDepth = 0.f; + defaultViewport.MaxDepth = 1.f; + D3D12_SetViewPort(commandList, &defaultViewport); + + struct Rectangle defaultScissor; + defaultScissor.X = 0; + defaultScissor.Y = 0; + defaultScissor.Width = (int32)frameBufferWidth; + defaultScissor.Height = (int32)frameBufferHeight; + D3D12_SetScissorRect(commandList, &defaultScissor); + + D3D12_SetStencilReference(commandList, 0); + + FColor blendConstants; + blendConstants.R = 1.0f; + blendConstants.G = 1.0f; + blendConstants.B = 1.0f; + blendConstants.A = 1.0f; + D3D12_SetBlendConstants(commandList, blendConstants); +} + +internal void D3D12_EndRenderPass(CommandList* commandList) +{ + Assert(commandList != NULL); + D3D12CommandList* d3d12CommandList = (D3D12CommandList*)commandList; + + for (uint32 idx = 0; idx < kGPUDriver_MaxColorTargetInfo; ++idx) + { + if (d3d12CommandList->ColorTargetSubresources[idx] != NULL) + { + if (d3d12CommandList->ColorResolveSubresources[idx] != NULL) + { + TextureSubresourceBarrier(d3d12CommandList, D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_RESOLVE_SOURCE, + d3d12CommandList->ColorTargetSubresources[idx]); + ID3D12GraphicsCommandList6_ResolveSubresource( + d3d12CommandList->GraphicsCommandList.CommandList, + d3d12CommandList->ColorResolveSubresources[idx]->Parent->Resource, + d3d12CommandList->ColorResolveSubresources[idx]->Index, + d3d12CommandList->ColorTargetSubresources[idx]->Parent->Resource, + d3d12CommandList->ColorTargetSubresources[idx]->Index, + ConvertToD3D12TextureFormat( + d3d12CommandList->ColorTargetSubresources[idx]->Parent->Container->Header.CreateInfo.Format)); + + TextureSubresourceTransitionToDefaultUsage(d3d12CommandList, d3d12CommandList->ColorTargetSubresources[idx], + D3D12_RESOURCE_STATE_RESOLVE_SOURCE); + + TextureSubresourceTransitionToDefaultUsage(d3d12CommandList, d3d12CommandList->ColorResolveSubresources[idx], + D3D12_RESOURCE_STATE_RESOLVE_DEST); + } + else + { + TextureSubresourceTransitionToDefaultUsage(d3d12CommandList, d3d12CommandList->ColorTargetSubresources[idx], + D3D12_RESOURCE_STATE_RENDER_TARGET); + } + } + } + + if (d3d12CommandList->DepthStencilSubresource != NULL) + { + TextureSubresourceTransitionToDefaultUsage(d3d12CommandList, d3d12CommandList->DepthStencilSubresource, + D3D12_RESOURCE_STATE_DEPTH_WRITE); + d3d12CommandList->DepthStencilSubresource = NULL; + } + d3d12CommandList->CurrentGraphicsPipeline = NULL; + + ID3D12GraphicsCommandList6_OMSetRenderTargets(d3d12CommandList->GraphicsCommandList.CommandList, 0, NULL, FALSE, NULL); + + ZeroArray(d3d12CommandList->ColorTargetSubresources); + ZeroArray(d3d12CommandList->ColorResolveSubresources); +} + +internal void D3D12_BindGraphicsPipeline(CommandList* commandList, GraphicsPipeline* graphicsPipeline) +{ + Assert(commandList != NULL); + Assert(graphicsPipeline != NULL); + D3D12CommandList* d3d12CommandList = (D3D12CommandList*)commandList; + D3D12GraphicsPipeline* pipeline = (D3D12GraphicsPipeline*)graphicsPipeline; + + d3d12CommandList->CurrentGraphicsPipeline = pipeline; + + if (d3d12CommandList->CRB_SRV_UAV_Heap == NULL) + { + SetDescriptorHeaps(d3d12CommandList); + } + + ID3D12GraphicsCommandList6_SetPipelineState(d3d12CommandList->GraphicsCommandList.CommandList, pipeline->PipelineState); + ID3D12GraphicsCommandList6_SetGraphicsRootSignature(d3d12CommandList->GraphicsCommandList.CommandList, + pipeline->RootSignature->Handle); + ID3D12GraphicsCommandList6_IASetPrimitiveTopology(d3d12CommandList->GraphicsCommandList.CommandList, + JulietToD3D12_PrimitiveType[pipeline->PrimitiveType]); + + d3d12CommandList->NeedVertexSamplerBind = true; + d3d12CommandList->NeedVertexStorageTextureBind = true; + d3d12CommandList->NeedVertexStorageBufferBind = true; + d3d12CommandList->NeedFragmentSamplerBind = true; + d3d12CommandList->NeedFragmentStorageTextureBind = true; + d3d12CommandList->NeedFragmentStorageBufferBind = true; + + for (uint32 idx = 0; idx < kGPUDriver_MaxUniformBuffersPerStage; ++idx) + { + d3d12CommandList->NeedVertexUniformBufferBind[idx] = true; + d3d12CommandList->NeedFragmentUniformBufferBind[idx] = true; + } + + TrackGraphicsPipeline(d3d12CommandList, pipeline); +} + +internal void D3D12_DrawPrimitives(CommandList* commandList, uint32 numVertices, uint32 numInstances, + uint32 firstVertex, uint32 firstInstance) +{ + Assert(commandList != NULL); + D3D12CommandList* d3d12CommandList = (D3D12CommandList*)commandList; + ID3D12GraphicsCommandList6_DrawInstanced(d3d12CommandList->GraphicsCommandList.CommandList, numVertices, + numInstances, firstVertex, firstInstance); +} + +internal void D3D12_DrawIndexedPrimitives(CommandList* commandList, uint32 numIndices, uint32 numInstances, + uint32 firstIndex, uint32 vertexOffset, uint32 firstInstance) +{ + Assert(commandList != NULL); + D3D12CommandList* d3d12CommandList = (D3D12CommandList*)commandList; + ID3D12GraphicsCommandList6_DrawIndexedInstanced(d3d12CommandList->GraphicsCommandList.CommandList, numIndices, + numInstances, firstIndex, (INT)vertexOffset, firstInstance); +} +// End Render Pass + +internal bool8 D3D12_AttachToWindow(GPUDriver* driver, Window* window) +{ + Assert(driver != NULL); + Assert(window != NULL); + bool8 ok = false; + D3D12Driver* d3d12Driver = (D3D12Driver*)driver; + + if (d3d12Driver->WindowData != NULL) + { + Assert(false && "D3D12 renderer already attached to the window. Right now we handle only one Window."); + } + else + { + D3D12WindowData* windowData = (D3D12WindowData*)Calloc(1, sizeof(D3D12WindowData)); + if (windowData == NULL) + { + Log(LogLevel_Error, LogCategory_Graphics, "OOM: D3D12WindowData"); + } + else + { + d3d12Driver->WindowData = windowData; + windowData->Window = window; + + if (!CreateSwapChain(d3d12Driver, windowData, SwapChainComposition_SDR, PresentMode_VSync)) + { + Log(LogLevel_Error, LogCategory_Graphics, "AttachToWindow failure: Cannot create Swap Chain."); + FreeMemory(windowData); + d3d12Driver->WindowData = NULL; + } + else + { + d3d12Driver->WindowData = windowData; + ok = true; + } + } + } + + return ok; +} + +internal void D3D12_DetachFromWindow(GPUDriver* driver, Window* window) +{ + (void)window; + Assert(driver != NULL); + D3D12Driver* d3d12Driver = (D3D12Driver*)driver; + D3D12WindowData* windowData = d3d12Driver->WindowData; + Assert(windowData != NULL && "Trying to destroy a swapchain but no Window Data exists"); + + D3D12_WaitUntilGPUIsIdle(driver); + + for (uint32 idx = 0; idx < kGPUDriver_MaxFramesInFlight; idx += 1) + { + if (windowData->InFlightFences[idx] != NULL) + { + D3D12_ReleaseFence(driver, windowData->InFlightFences[idx] JULIET_DEBUG_PARAM(ConstString("DetachFromWindow"))); + windowData->InFlightFences[idx] = NULL; + } + } + + DestroySwapChain(d3d12Driver, d3d12Driver->WindowData); + + SafeFree(d3d12Driver->WindowData); + d3d12Driver->WindowData = NULL; +} + +internal void DestroyDriver_Internal(D3D12Driver* driver) +{ + Assert(driver != NULL); + for (uint32 i = 0; i < D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES; i += 1) + { + if (driver->StagingDescriptorPools[i] != NULL) + { + DestroyStagingDescriptorPool(driver->StagingDescriptorPools[i]); + driver->StagingDescriptorPools[i] = NULL; + } + } + + D3D12_DestroyDescriptorHeapPool(&driver->SamplerHeapPool); + + for (uint32 i = 0; i < driver->AvailableCommandListCount; i += 1) + { + if (driver->AvailableCommandLists[i] != NULL) + { + DestroyCommandList(driver->AvailableCommandLists[i]); + driver->AvailableCommandLists[i] = NULL; + } + } + + for (uint32 i = 0; i < driver->AvailableFenceCount; i += 1) + { + if (driver->AvailableFences[i] != NULL) + { + DestroyFence(driver->AvailableFences[i]); + driver->AvailableFences[i] = NULL; + } + } + + DestroyGraphicsRootSignature(driver->BindlessRootSignature); + if (driver->BindlessDescriptorHeap != NULL) + { + DestroyDescriptorHeap(driver->BindlessDescriptorHeap); + } + + SafeFree(driver->GraphicsPipelinesToDispose); + + if (driver->IndirectDrawCommandSignature != NULL) + { + ID3D12CommandSignature_Release(driver->IndirectDrawCommandSignature); + } + if (driver->IndirectIndexedDrawCommandSignature != NULL) + { + ID3D12CommandSignature_Release(driver->IndirectIndexedDrawCommandSignature); + driver->IndirectIndexedDrawCommandSignature = NULL; + } + if (driver->IndirectDispatchCommandSignature != NULL) + { + ID3D12CommandSignature_Release(driver->IndirectDispatchCommandSignature); + driver->IndirectDispatchCommandSignature = NULL; + } + + if (driver->GraphicsQueue != NULL) + { + ID3D12CommandQueue_Release(driver->GraphicsQueue); + driver->GraphicsQueue = NULL; + } + + if (driver->D3D12Device != NULL) + { + ID3D12Device5_Release(driver->D3D12Device); + driver->D3D12Device = NULL; + } + + if (driver->DXGIAdapter != NULL) + { + IDXGIAdapter1_Release(driver->DXGIAdapter); + driver->DXGIAdapter = NULL; + } + + if (driver->DXGIFactory != NULL) + { + IDXGIFactory4_Release(driver->DXGIFactory); + driver->DXGIFactory = NULL; + } + +#if JULIET_DEBUG +#ifdef IDXGIINFOQUEUE_SUPPORTED + ShutdownDXGIDebug(driver); +#endif +#endif + + if (driver->D3D12DLL != NULL) + { + UnloadDynamicLibrary(driver->D3D12DLL); + driver->D3D12DLL = NULL; + } + + driver->D3D12SerializeVersionedRootSignatureFct = NULL; + + ArenaRelease(driver->DriverArena); +} + +internal void D3D12_DestroyGraphicsDevice(GraphicsDevice* device) +{ + Assert(device != NULL); + D3D12Driver* driver = (D3D12Driver*)device->Driver; + DestroyDriver_Internal(driver); +} + +internal void D3D12_DestroyGraphicsPipeline(GPUDriver* driver, GraphicsPipeline* pipeline) +{ + Assert(driver != NULL); + Assert(pipeline != NULL); + D3D12Driver* d3d12Driver = (D3D12Driver*)driver; + d3d12Driver->GraphicsPipelinesToDispose[d3d12Driver->GraphicsPipelinesToDisposeCount] = (D3D12GraphicsPipeline*)pipeline; + d3d12Driver->GraphicsPipelinesToDisposeCount += 1; + if (d3d12Driver->GraphicsPipelinesToDisposeCount >= d3d12Driver->GraphicsPipelinesToDisposeCapacity) + { + ReleaseGraphicsPipeline((D3D12GraphicsPipeline*)pipeline); + } +} + +internal void D3D12_CopyBufferToTexture(CommandList* commandList, Texture* dst, GraphicsTransferBuffer* src) +{ + Assert(commandList != NULL); + Assert(dst != NULL); + Assert(src != NULL); + D3D12CommandList* d3d12CommandList = (D3D12CommandList*)commandList; + D3D12TextureContainer* d3d12TextureContainer = (D3D12TextureContainer*)dst; + D3D12Texture* d3d12Texture = d3d12TextureContainer->ActiveTexture; + + TextureTransitionFromDefaultUsage(d3d12CommandList, d3d12Texture, D3D12_RESOURCE_STATE_COPY_DEST); + + D3D12_RESOURCE_DESC desc; + ID3D12Resource_GetDesc(d3d12Texture->Resource, &desc); + + D3D12_TEXTURE_COPY_LOCATION dstLoc = { 0 }; + dstLoc.pResource = d3d12Texture->Resource; + dstLoc.Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX; + dstLoc.SubresourceIndex = 0; + + D3D12Buffer* d3d12BufferSrc = (D3D12Buffer*)src; + + D3D12_TEXTURE_COPY_LOCATION srcLoc = { 0 }; + srcLoc.pResource = d3d12BufferSrc->Handle; + srcLoc.Type = D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT; + srcLoc.PlacedFootprint.Offset = 0; + srcLoc.PlacedFootprint.Footprint.Format = desc.Format; + srcLoc.PlacedFootprint.Footprint.Width = (UINT)desc.Width; + srcLoc.PlacedFootprint.Footprint.Height = desc.Height; + srcLoc.PlacedFootprint.Footprint.Depth = 1; + + uint32 rowPitch = (uint32)desc.Width * 4; + rowPitch = (rowPitch + 255u) & ~255u; + + srcLoc.PlacedFootprint.Footprint.RowPitch = rowPitch; + + ID3D12GraphicsCommandList6_CopyTextureRegion(d3d12CommandList->GraphicsCommandList.CommandList, &dstLoc, 0, 0, 0, &srcLoc, NULL); + + TextureTransitionToDefaultUsage(d3d12CommandList, d3d12Texture, D3D12_RESOURCE_STATE_COPY_DEST); +} + +internal uint32 D3D12_GetDescriptorIndex(GraphicsDevice* device, GraphicsBuffer* buffer) +{ + Assert(device != NULL); + Assert(buffer != NULL); + return GetDescriptorIndex(device->Driver, buffer); +} + +internal uint32 D3D12_GetDescriptorIndexTexture(GraphicsDevice* device, Texture* texture) +{ + (void)device; + Assert(texture != NULL); + D3D12TextureContainer* textureContainer = (D3D12TextureContainer*)texture; + return textureContainer->ActiveTexture->SRVHandle.CpuHandleIndex; +} + +internal GraphicsDevice* D3D12_CreateGraphicsDevice(bool8 enableDebug) +{ + Arena* driverArena = ArenaAllocate((ArenaParams){ .Name = "D3D12 Driver Arena" }); + D3D12Driver* driver = ArenaPushStructTag(driverArena, D3D12Driver, "D3D12Driver struct"); + GraphicsDevice* device = NULL; + + driver->DriverArena = driverArena; + +#if JULIET_DEBUG +#ifdef IDXGIINFOQUEUE_SUPPORTED + if (enableDebug) + { + InitializeDXGIDebug(driver); + } +#endif +#endif + + IDXGIFactory1* factory1 = NULL; + HRESULT result = CreateDXGIFactory1(&IID_IDXGIFactory1, (void**)&factory1); + if (FAILED(result)) + { + DestroyDriver_Internal(driver); + Assert(false && "DX12: Cannot create DXGIFactory1"); + } + else + { + result = IDXGIFactory1_QueryInterface(factory1, &IID_IDXGIFactory4, (void**)&driver->DXGIFactory); + if (FAILED(result)) + { + DestroyDriver_Internal(driver); + Assert(false && "DX12: Cannot create DXGIFactory4. Need DXGI1.4 support."); + } + else + { + IDXGIFactory1_Release(factory1); + + IDXGIFactory5* factory5 = NULL; + result = IDXGIFactory4_QueryInterface(driver->DXGIFactory, &IID_IDXGIFactory5, (void**)&factory5); + if (SUCCEEDED(result)) + { + BOOL isTearingSupported = FALSE; + result = IDXGIFactory5_CheckFeatureSupport(factory5, DXGI_FEATURE_PRESENT_ALLOW_TEARING, &isTearingSupported, + sizeof(isTearingSupported)); + driver->IsTearingSupported = SUCCEEDED(result) && (isTearingSupported != FALSE); + IDXGIFactory5_Release(factory5); + } + + IDXGIFactory6* factory6 = NULL; + result = IDXGIFactory4_QueryInterface(driver->DXGIFactory, &IID_IDXGIFactory6, (void**)&factory6); + if (SUCCEEDED(result)) + { + const bool8 useLowPower = false; + result = IDXGIFactory6_EnumAdapterByGpuPreference( + factory6, 0, useLowPower ? DXGI_GPU_PREFERENCE_MINIMUM_POWER : DXGI_GPU_PREFERENCE_HIGH_PERFORMANCE, + &IID_IDXGIAdapter1, (void**)&driver->DXGIAdapter); + IDXGIFactory6_Release(factory6); + } + else + { + result = IDXGIFactory4_EnumAdapters1(driver->DXGIFactory, 0, &driver->DXGIAdapter); + } + + if (FAILED(result)) + { + DestroyDriver_Internal(driver); + Assert(false && "Could not find adapter for D3D12Device"); + } + else + { + DXGI_ADAPTER_DESC1 adapterDesc; + result = IDXGIAdapter1_GetDesc1(driver->DXGIAdapter, &adapterDesc); + if (FAILED(result)) + { + DestroyDriver_Internal(driver); + Assert(false && "Could not get DXGIAdapter description"); + } + else + { + LARGE_INTEGER umdVersion; + result = IDXGIAdapter1_CheckInterfaceSupport(driver->DXGIAdapter, &IID_IDXGIDevice, &umdVersion); + if (FAILED(result)) + { + DestroyDriver_Internal(driver); + Assert(false && "Could not get DXGIAdapter driver version"); + } + else + { + Log(LogLevel_Message, LogCategory_Graphics, "D3D12 Driver Infos:"); + Log(LogLevel_Message, LogCategory_Graphics, "D3D12 Adapter: %S", adapterDesc.Description); + Log(LogLevel_Message, LogCategory_Graphics, "D3D12 Driver Version: %d.%d.%d.%d", + HIWORD(umdVersion.HighPart), LOWORD(umdVersion.HighPart), + HIWORD(umdVersion.LowPart), LOWORD(umdVersion.LowPart)); + + driver->D3D12DLL = LoadDynamicLibrary(D3D12_DLL); + if (driver->D3D12DLL == NULL) + { + Log(LogLevel_Error, LogCategory_Graphics, "DX12: Couldn't find " D3D12_DLL); + } + else + { + PFN_D3D12_CREATE_DEVICE D3D12CreateDeviceFuncPtr = + TOD3D12FuncPtr(PFN_D3D12_CREATE_DEVICE, LoadFunction(driver->D3D12DLL, D3D12_CREATEDEVICE_FUNC)); + driver->D3D12SerializeVersionedRootSignatureFct = + TOD3D12FuncPtr(PFN_D3D12_SERIALIZE_VERSIONED_ROOT_SIGNATURE, + LoadFunction(driver->D3D12DLL, D3D12_SERIALIZE_VERSIONED_ROOT_SIGNATURE_FUNC)); + + if (D3D12CreateDeviceFuncPtr == NULL || driver->D3D12SerializeVersionedRootSignatureFct == NULL) + { + Log(LogLevel_Error, LogCategory_Graphics, "DX12: Couldn't load D3D12 functions in " D3D12_DLL); + DestroyDriver_Internal(driver); + } + else + { +#if JULIET_DEBUG + if (enableDebug) + { + InitializeD3D12DebugLayer(driver); + } +#endif + result = D3D12CreateDeviceFuncPtr((IUnknown*)driver->DXGIAdapter, kD3DFeatureLevel, + &IID_ID3D12Device5, (void**)&driver->D3D12Device); + if (FAILED(result)) + { + DestroyDriver_Internal(driver); + Log(LogLevel_Error, LogCategory_Graphics, "DX12: Could not create D3D12Device5"); + } + else + { + Log(LogLevel_Message, LogCategory_Graphics, "DX12: D3D12Device Created: %p", (void*)driver->D3D12Device); + + bool8 debugOk = true; +#if JULIET_DEBUG + if (enableDebug) + { + if (!InitializeD3D12DebugInfoQueue(driver)) + { + debugOk = false; + } + else + { + InitializeD3D12DebugInfoLogger(driver); + } + } +#endif + if (debugOk) + { + D3D12_FEATURE_DATA_ARCHITECTURE architecture; + architecture.NodeIndex = 0; + result = ID3D12Device5_CheckFeatureSupport(driver->D3D12Device, D3D12_FEATURE_ARCHITECTURE, + &architecture, sizeof(D3D12_FEATURE_DATA_ARCHITECTURE)); + if (FAILED(result)) + { + DestroyDriver_Internal(driver); + Log(LogLevel_Error, LogCategory_Graphics, "DX12: Could not get the device architecture"); + } + else + { + driver->IsUMAAvailable = (bool8)architecture.UMA; + driver->IsUMACacheCoherent = (bool8)architecture.CacheCoherentUMA; + + D3D12_FEATURE_DATA_D3D12_OPTIONS16 options16; + driver->GPUUploadHeapSupported = false; + result = ID3D12Device5_CheckFeatureSupport(driver->D3D12Device, + D3D12_FEATURE_D3D12_OPTIONS16, + &options16, sizeof(options16)); + if (SUCCEEDED(result)) + { + driver->GPUUploadHeapSupported = (bool8)options16.GPUUploadHeapSupported; + } + + driver->BindlessRootSignature = CreateGraphicsRootSignature(driver); + + D3D12_COMMAND_QUEUE_DESC queueDesc = { 0 }; + queueDesc.Flags = D3D12_COMMAND_QUEUE_FLAG_NONE; + queueDesc.Type = D3D12_COMMAND_LIST_TYPE_DIRECT; + queueDesc.NodeMask = 0; + queueDesc.Priority = D3D12_COMMAND_QUEUE_PRIORITY_NORMAL; + result = ID3D12Device5_CreateCommandQueue(driver->D3D12Device, &queueDesc, + &IID_ID3D12CommandQueue, + (void**)&driver->GraphicsQueue); + if (FAILED(result)) + { + DestroyDriver_Internal(driver); + Log(LogLevel_Error, LogCategory_Graphics, "DX12: Could not create D3D12CommandQueue: Graphics"); + } + else + { + ID3D12CommandQueue_SetName(driver->GraphicsQueue, L"GRAPHICS_QUEUE"); + driver->QueueDesc[QueueType_Graphics] = queueDesc; + + queueDesc.Type = D3D12_COMMAND_LIST_TYPE_COMPUTE; + driver->QueueDesc[QueueType_Compute] = queueDesc; + + queueDesc.Type = D3D12_COMMAND_LIST_TYPE_COPY; + driver->QueueDesc[QueueType_Copy] = queueDesc; + + D3D12_COMMAND_SIGNATURE_DESC commandSignatureDesc; + D3D12_INDIRECT_ARGUMENT_DESC indirectArgumentDesc; + ZeroStruct(indirectArgumentDesc); + + indirectArgumentDesc.Type = D3D12_INDIRECT_ARGUMENT_TYPE_DRAW; + commandSignatureDesc.NodeMask = 0; + commandSignatureDesc.ByteStride = sizeof(IndirectDrawCommand); + commandSignatureDesc.NumArgumentDescs = 1; + commandSignatureDesc.pArgumentDescs = &indirectArgumentDesc; + result = ID3D12Device5_CreateCommandSignature( + driver->D3D12Device, &commandSignatureDesc, NULL, + &IID_ID3D12CommandSignature, (void**)&driver->IndirectDrawCommandSignature); + if (FAILED(result)) + { + DestroyDriver_Internal(driver); + Log(LogLevel_Error, LogCategory_Graphics, "DX12: Could not create indirect draw command signature"); + } + else + { + indirectArgumentDesc.Type = D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED; + commandSignatureDesc.ByteStride = sizeof(IndexedIndirectDrawCommand); + commandSignatureDesc.pArgumentDescs = &indirectArgumentDesc; + + result = ID3D12Device5_CreateCommandSignature( + driver->D3D12Device, &commandSignatureDesc, NULL, + &IID_ID3D12CommandSignature, (void**)&driver->IndirectIndexedDrawCommandSignature); + if (FAILED(result)) + { + DestroyDriver_Internal(driver); + Log(LogLevel_Error, LogCategory_Graphics, "DX12: Could not create INDEXED Indirect draw command signature"); + } + else + { + indirectArgumentDesc.Type = D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH; + commandSignatureDesc.ByteStride = sizeof(IndirectDispatchCommand); + commandSignatureDesc.pArgumentDescs = &indirectArgumentDesc; + + result = ID3D12Device5_CreateCommandSignature( + driver->D3D12Device, &commandSignatureDesc, NULL, + &IID_ID3D12CommandSignature, (void**)&driver->IndirectDispatchCommandSignature); + if (FAILED(result)) + { + DestroyDriver_Internal(driver); + Log(LogLevel_Error, LogCategory_Graphics, "DX12: Could not create Indirect dispatch command signature"); + } + else + { + const size_t kMaxCommandListNumber = 16; + driver->SubmittedCommandListCapacity = (uint8)kMaxCommandListNumber; + driver->SubmittedCommandListCount = 0; + driver->SubmittedCommandLists = ArenaPushArrayTag( + driver->DriverArena, D3D12CommandList*, kMaxCommandListNumber, "SubmittedCommandLists"); + + const size_t kMaxFencesNumber = 16; + driver->AvailableFenceCapacity = (uint32)kMaxFencesNumber; + driver->AvailableFenceCount = 0; + driver->AvailableFences = ArenaPushArrayTag( + driver->DriverArena, D3D12Fence*, kMaxFencesNumber, "AvailableFences"); + + bool8 poolsOk = (driver->SubmittedCommandLists != NULL) && (driver->AvailableFences != NULL); + if (poolsOk) + { + for (uint32 i = 0; i < D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES; i += 1) + { + driver->StagingDescriptorPools[i] = + CreateStagingDescriptorPool(driver, (D3D12_DESCRIPTOR_HEAP_TYPE)i); + if (driver->StagingDescriptorPools[i] == NULL) + { + poolsOk = false; + break; + } + } + } + + if (!poolsOk) + { + DestroyDriver_Internal(driver); + } + else + { + CreateDescriptorHeapPool(driver, &driver->SamplerHeapPool, + D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER, + kGPUDriver_Sampler_HeapDescriptorCount); + + driver->GraphicsPipelinesToDisposeCapacity = 4; + driver->GraphicsPipelinesToDisposeCount = 0; + driver->GraphicsPipelinesToDispose = (D3D12GraphicsPipeline**) + Calloc(driver->GraphicsPipelinesToDisposeCapacity, sizeof(D3D12GraphicsPipeline*)); + + driver->Semantic = WrapString("TEXCOORD"); + driver->FramesInFlight = 2; + + device = ArenaPushStructTag(driverArena, GraphicsDevice, "GraphicsDevice"); + if (device == NULL || driver->GraphicsPipelinesToDispose == NULL) + { + DestroyDriver_Internal(driver); + device = NULL; + } + else + { + device->DestroyDevice = D3D12_DestroyGraphicsDevice; + device->AttachToWindow = D3D12_AttachToWindow; + device->DetachFromWindow = D3D12_DetachFromWindow; + device->AcquireSwapChainTexture = D3D12_AcquireSwapChainTexture; + device->WaitAndAcquireSwapChainTexture = D3D12_WaitAndAcquireSwapChainTexture; + device->WaitForSwapchain = D3D12_WaitForSwapchain; + device->GetSwapChainTextureFormat = D3D12_GetSwapChainTextureFormat; + device->AcquireCommandList = D3D12_AcquireCommandList; + device->SubmitCommandLists = D3D12_SubmitCommandLists; + device->BeginRenderPass = D3D12_BeginRenderPass; + device->EndRenderPass = D3D12_EndRenderPass; + device->SetViewPort = D3D12_SetViewPort; + device->SetScissorRect = D3D12_SetScissorRect; + device->SetBlendConstants = D3D12_SetBlendConstants; + device->SetStencilReference = D3D12_SetStencilReference; + device->BindGraphicsPipeline = D3D12_BindGraphicsPipeline; + device->DrawPrimitives = D3D12_DrawPrimitives; + device->DrawIndexedPrimitives = D3D12_DrawIndexedPrimitives; + device->SetIndexBuffer = D3D12_SetIndexBuffer; + device->WaitUntilGPUIsIdle = D3D12_WaitUntilGPUIsIdle; + device->SetPushConstants = D3D12_SetPushConstants; + device->QueryFence = D3D12_QueryFence; + device->ReleaseFence = D3D12_ReleaseFence; + device->CreateShader = D3D12_CreateShader; + device->DestroyShader = D3D12_DestroyShader; + device->CreateGraphicsPipeline = D3D12_CreateGraphicsPipeline; + device->DestroyGraphicsPipeline = D3D12_DestroyGraphicsPipeline; + device->CreateGraphicsBuffer = D3D12_CreateGraphicsBuffer; + device->DestroyGraphicsBuffer = D3D12_DestroyGraphicsBuffer; + device->MapGraphicsBuffer = D3D12_MapGraphicsBuffer; + device->UnmapGraphicsBuffer = D3D12_UnmapGraphicsBuffer; + device->CreateGraphicsTransferBuffer = D3D12_CreateGraphicsTransferBuffer; + device->DestroyGraphicsTransferBuffer = D3D12_DestroyGraphicsTransferBuffer; + device->MapGraphicsTransferBuffer = D3D12_MapGraphicsTransferBuffer; + device->UnmapGraphicsTransferBuffer = D3D12_UnmapGraphicsTransferBuffer; + device->CopyBuffer = D3D12_CopyBuffer; + device->CopyBufferToTexture = D3D12_CopyBufferToTexture; + device->TransitionBufferToReadable = D3D12_TransitionBufferToReadable; + device->GetDescriptorIndex = D3D12_GetDescriptorIndex; + device->GetDescriptorIndexTexture = D3D12_GetDescriptorIndexTexture; + device->CreateTexture = D3D12_CreateTexture; + device->DestroyTexture = D3D12_DestroyTexture; + +#if ALLOW_SHADER_HOT_RELOAD + device->UpdateGraphicsPipelineShaders = D3D12_UpdateGraphicsPipelineShaders; +#endif + + device->Driver = (GPUDriver*)driver; + device->DebugEnabled = enableDebug; + + driver->GraphicsDevice = device; + + driver->BindlessDescriptorHeap = CreateDescriptorHeap( + driver, D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV, + kGPUDriver_CBV_SRV_UAV_HeapDescriptorCount, false); + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + + return device; +} + +GraphicsDeviceFactory DX12DeviceFactory = { + .Name = "DirectX12", + .Type = GraphicsDriverType_DX12, + .CheckDriver = D3D12_CheckDriver, + .CreateGraphicsDevice = D3D12_CreateGraphicsDevice +}; diff --git a/Juliet/src/Graphics/D3D12/D3D12GraphicsDevice.cpp b/Juliet/src/Graphics/D3D12/D3D12GraphicsDevice.cpp deleted file mode 100644 index e5fcdba..0000000 --- a/Juliet/src/Graphics/D3D12/D3D12GraphicsDevice.cpp +++ /dev/null @@ -1,4664 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define D3D12_DLL "d3d12.dll" -#define D3D12_CREATEDEVICE_FUNC "D3D12CreateDevice" -#define D3D12_SERIALIZE_VERSIONED_ROOT_SIGNATURE_FUNC "D3D12SerializeVersionedRootSignature" - -#define D3D12_FENCE_UNSIGNALED_VALUE 0 -#define D3D12_FENCE_SIGNAL_VALUE 1 - -#ifdef _WIN32 -#define HRESULT_FMT "(0x%08lX)" -#else -#define HRESULT_FMT "(0x%08X)" -#endif - -#define TOD3D12FuncPtr(type, ptr) reinterpret_cast(reinterpret_cast(ptr)) - -// Definitions: -// RTV = Render Target View -// DSV = Depth Stencil View -// SRV = Shader Resource View -// UAV = Unordered Access View -// CBV = Constant Buffer View -// PSO = Pipeline State Object - -// Inspired (copy pasted a lot) by SDL GPU - -// TODO : Use LoadLibrary and not link to the lib. Allows failing earlier if Dx12 is not installed for some reason -// + Will load the dll when needed -// This will prevent us from using IID_ variables as they are defined in dxguid.lib -namespace -{ - struct D3D12GraphicsRootSignature; - struct D3D12GraphicsPipeline; - struct D3D12Texture; - struct D3D12TextureSubresource; - struct D3D12Fence; - struct D3D12CommandList; - struct D3D12StagingDescriptorPool; - - // Note: This is the highest my Gfx Card supports (5700XT) - // https://en.wikipedia.org/wiki/Feature_levels_in_Direct3D#Direct3D_12 - // 12_2 Adds RayTracing and others feature supported by RDNA2 and greater and Gefore 20xx and greater - constexpr D3D_FEATURE_LEVEL kD3DFeatureLevel = D3D_FEATURE_LEVEL_12_1; - constexpr auto kD3DFeatureLevelStr = "12_1"; - constexpr size_t kStagingHeapDescriptorExpectedCount = 1024; - constexpr size_t kMaxTexturePerCommandList = 1024; - constexpr size_t kMaxGraphicsPipelinePerCommandList = 1024; - constexpr size_t kMaxPresentDataPerCommandList = 1; - constexpr size_t kMaxCommandListCount = 4; - - index_t CommandListID = 0; - - uint32 JulietToD3D12_SampleCount[] = { - 1, // MSAA 1x - 2, // MSAA 2x - 4, // MSAA 4x - 8, // MSAA 8x - }; - - DXGI_COLOR_SPACE_TYPE SwapchainCompositionToColorSpace[] = { - DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709, // SDR - DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709, // SDR_LINEAR - DXGI_COLOR_SPACE_RGB_FULL_G10_NONE_P709, // HDR_EXTENDED_LINEAR - DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020 // HDR10_ST2084 - }; - - DXGI_FORMAT SwapchainCompositionToTextureFormat[] = { - DXGI_FORMAT_B8G8R8A8_UNORM, // SDR - DXGI_FORMAT_B8G8R8A8_UNORM, // SDR_LINEAR (NOTE: The RTV uses the sRGB format) - DXGI_FORMAT_R16G16B16A16_FLOAT, // HDR_EXTENDED_LINEAR - DXGI_FORMAT_R10G10B10A2_UNORM, // HDR10_ST2084 - }; - - TextureFormat SwapchainCompositionToJulietTextureFormat[] = { - TextureFormat::B8G8R8A8_UNORM, // SDR - TextureFormat::B8G8R8A8_UNORM_SRGB, // SDR_LINEAR - TextureFormat::R16G16B16A16_FLOAT, // HDR_EXTENDED_LINEAR - TextureFormat::R10G10B10A2_UNORM, // HDR10_ST2084 - }; - - DXGI_FORMAT JulietToD3D12_TextureFormat[] = { - DXGI_FORMAT_UNKNOWN, // INVALID - DXGI_FORMAT_A8_UNORM, // A8_UNORM - DXGI_FORMAT_R8_UNORM, // R8_UNORM - DXGI_FORMAT_R8G8_UNORM, // R8G8_UNORM - DXGI_FORMAT_R8G8B8A8_UNORM, // R8G8B8A8_UNORM - DXGI_FORMAT_R16_UNORM, // R16_UNORM - DXGI_FORMAT_R16G16_UNORM, // R16G16_UNORM - DXGI_FORMAT_R16G16B16A16_UNORM, // R16G16B16A16_UNORM - DXGI_FORMAT_R10G10B10A2_UNORM, // R10G10B10A2_UNORM - DXGI_FORMAT_B5G6R5_UNORM, // B5G6R5_UNORM - DXGI_FORMAT_B5G5R5A1_UNORM, // B5G5R5A1_UNORM - DXGI_FORMAT_B4G4R4A4_UNORM, // B4G4R4A4_UNORM - DXGI_FORMAT_B8G8R8A8_UNORM, // B8G8R8A8_UNORM - DXGI_FORMAT_BC1_UNORM, // BC1_UNORM - DXGI_FORMAT_BC2_UNORM, // BC2_UNORM - DXGI_FORMAT_BC3_UNORM, // BC3_UNORM - DXGI_FORMAT_BC4_UNORM, // BC4_UNORM - DXGI_FORMAT_BC5_UNORM, // BC5_UNORM - DXGI_FORMAT_BC7_UNORM, // BC7_UNORM - DXGI_FORMAT_BC6H_SF16, // BC6H_FLOAT - DXGI_FORMAT_BC6H_UF16, // BC6H_UFLOAT - DXGI_FORMAT_R8_SNORM, // R8_SNORM - DXGI_FORMAT_R8G8_SNORM, // R8G8_SNORM - DXGI_FORMAT_R8G8B8A8_SNORM, // R8G8B8A8_SNORM - DXGI_FORMAT_R16_SNORM, // R16_SNORM - DXGI_FORMAT_R16G16_SNORM, // R16G16_SNORM - DXGI_FORMAT_R16G16B16A16_SNORM, // R16G16B16A16_SNORM - DXGI_FORMAT_R16_FLOAT, // R16_FLOAT - DXGI_FORMAT_R16G16_FLOAT, // R16G16_FLOAT - DXGI_FORMAT_R16G16B16A16_FLOAT, // R16G16B16A16_FLOAT - DXGI_FORMAT_R32_FLOAT, // R32_FLOAT - DXGI_FORMAT_R32G32_FLOAT, // R32G32_FLOAT - DXGI_FORMAT_R32G32B32A32_FLOAT, // R32G32B32A32_FLOAT - DXGI_FORMAT_R11G11B10_FLOAT, // R11G11B10_UFLOAT - DXGI_FORMAT_R8_UINT, // R8_UINT - DXGI_FORMAT_R8G8_UINT, // R8G8_UINT - DXGI_FORMAT_R8G8B8A8_UINT, // R8G8B8A8_UINT - DXGI_FORMAT_R16_UINT, // R16_UINT - DXGI_FORMAT_R16G16_UINT, // R16G16_UINT - DXGI_FORMAT_R16G16B16A16_UINT, // R16G16B16A16_UINT - DXGI_FORMAT_R32_UINT, // R32_UINT - DXGI_FORMAT_R32G32_UINT, // R32G32_UINT - DXGI_FORMAT_R32G32B32A32_UINT, // R32G32B32A32_UINT - DXGI_FORMAT_R8_SINT, // R8_INT - DXGI_FORMAT_R8G8_SINT, // R8G8_INT - DXGI_FORMAT_R8G8B8A8_SINT, // R8G8B8A8_INT - DXGI_FORMAT_R16_SINT, // R16_INT - DXGI_FORMAT_R16G16_SINT, // R16G16_INT - DXGI_FORMAT_R16G16B16A16_SINT, // R16G16B16A16_INT - DXGI_FORMAT_R32_SINT, // R32_INT - DXGI_FORMAT_R32G32_SINT, // R32G32_INT - DXGI_FORMAT_R32G32B32A32_SINT, // R32G32B32A32_INT - DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, // R8G8B8A8_UNORM_SRGB - DXGI_FORMAT_B8G8R8A8_UNORM_SRGB, // B8G8R8A8_UNORM_SRGB - DXGI_FORMAT_BC1_UNORM_SRGB, // BC1_UNORM_SRGB - DXGI_FORMAT_BC2_UNORM_SRGB, // BC2_UNORM_SRGB - DXGI_FORMAT_BC3_UNORM_SRGB, // BC3_UNORM_SRGB - DXGI_FORMAT_BC7_UNORM_SRGB, // BC7_UNORM_SRGB - DXGI_FORMAT_R16_TYPELESS, // D16_UNORM - DXGI_FORMAT_R24G8_TYPELESS, // D24_UNORM - DXGI_FORMAT_R32_TYPELESS, // D32_FLOAT - DXGI_FORMAT_R24G8_TYPELESS, // D24_UNORM_S8_UINT - DXGI_FORMAT_R32G8X24_TYPELESS, // D32_FLOAT_S8_UINT - DXGI_FORMAT_UNKNOWN, // ASTC_4x4_UNORM - DXGI_FORMAT_UNKNOWN, // ASTC_5x4_UNORM - DXGI_FORMAT_UNKNOWN, // ASTC_5x5_UNORM - DXGI_FORMAT_UNKNOWN, // ASTC_6x5_UNORM - DXGI_FORMAT_UNKNOWN, // ASTC_6x6_UNORM - DXGI_FORMAT_UNKNOWN, // ASTC_8x5_UNORM - DXGI_FORMAT_UNKNOWN, // ASTC_8x6_UNORM - DXGI_FORMAT_UNKNOWN, // ASTC_8x8_UNORM - DXGI_FORMAT_UNKNOWN, // ASTC_10x5_UNORM - DXGI_FORMAT_UNKNOWN, // ASTC_10x6_UNORM - DXGI_FORMAT_UNKNOWN, // ASTC_10x8_UNORM - DXGI_FORMAT_UNKNOWN, // ASTC_10x10_UNORM - DXGI_FORMAT_UNKNOWN, // ASTC_12x10_UNORM - DXGI_FORMAT_UNKNOWN, // ASTC_12x12_UNORM - DXGI_FORMAT_UNKNOWN, // ASTC_4x4_UNORM_SRGB - DXGI_FORMAT_UNKNOWN, // ASTC_5x4_UNORM_SRGB - DXGI_FORMAT_UNKNOWN, // ASTC_5x5_UNORM_SRGB - DXGI_FORMAT_UNKNOWN, // ASTC_6x5_UNORM_SRGB - DXGI_FORMAT_UNKNOWN, // ASTC_6x6_UNORM_SRGB - DXGI_FORMAT_UNKNOWN, // ASTC_8x5_UNORM_SRGB - DXGI_FORMAT_UNKNOWN, // ASTC_8x6_UNORM_SRGB - DXGI_FORMAT_UNKNOWN, // ASTC_8x8_UNORM_SRGB - DXGI_FORMAT_UNKNOWN, // ASTC_10x5_UNORM_SRGB - DXGI_FORMAT_UNKNOWN, // ASTC_10x6_UNORM_SRGB - DXGI_FORMAT_UNKNOWN, // ASTC_10x8_UNORM_SRGB - DXGI_FORMAT_UNKNOWN, // ASTC_10x10_UNORM_SRGB - DXGI_FORMAT_UNKNOWN, // ASTC_12x10_UNORM_SRGB - DXGI_FORMAT_UNKNOWN, // ASTC_12x12_UNORM_SRGB - DXGI_FORMAT_UNKNOWN, // ASTC_4x4_FLOAT - DXGI_FORMAT_UNKNOWN, // ASTC_5x4_FLOAT - DXGI_FORMAT_UNKNOWN, // ASTC_5x5_FLOAT - DXGI_FORMAT_UNKNOWN, // ASTC_6x5_FLOAT - DXGI_FORMAT_UNKNOWN, // ASTC_6x6_FLOAT - DXGI_FORMAT_UNKNOWN, // ASTC_8x5_FLOAT - DXGI_FORMAT_UNKNOWN, // ASTC_8x6_FLOAT - DXGI_FORMAT_UNKNOWN, // ASTC_8x8_FLOAT - DXGI_FORMAT_UNKNOWN, // ASTC_10x5_FLOAT - DXGI_FORMAT_UNKNOWN, // ASTC_10x6_FLOAT - DXGI_FORMAT_UNKNOWN, // ASTC_10x8_FLOAT - DXGI_FORMAT_UNKNOWN, // ASTC_10x10_FLOAT - DXGI_FORMAT_UNKNOWN, // ASTC_12x10_FLOAT - DXGI_FORMAT_UNKNOWN, // ASTC_12x12_FLOAT - }; - static_assert(sizeof(JulietToD3D12_TextureFormat) / sizeof(JulietToD3D12_TextureFormat[0]) == ToUnderlying(TextureFormat::Count)); - - DXGI_FORMAT JulietToD3D12_DepthFormat[] = { - DXGI_FORMAT_UNKNOWN, // INVALID - DXGI_FORMAT_UNKNOWN, // A8_UNORM - DXGI_FORMAT_UNKNOWN, // R8_UNORM - DXGI_FORMAT_UNKNOWN, // R8G8_UNORM - DXGI_FORMAT_UNKNOWN, // R8G8B8A8_UNORM - DXGI_FORMAT_UNKNOWN, // R16_UNORM - DXGI_FORMAT_UNKNOWN, // R16G16_UNORM - DXGI_FORMAT_UNKNOWN, // R16G16B16A16_UNORM - DXGI_FORMAT_UNKNOWN, // R10G10B10A2_UNORM - DXGI_FORMAT_UNKNOWN, // B5G6R5_UNORM - DXGI_FORMAT_UNKNOWN, // B5G5R5A1_UNORM - DXGI_FORMAT_UNKNOWN, // B4G4R4A4_UNORM - DXGI_FORMAT_UNKNOWN, // B8G8R8A8_UNORM - DXGI_FORMAT_UNKNOWN, // BC1_UNORM - DXGI_FORMAT_UNKNOWN, // BC2_UNORM - DXGI_FORMAT_UNKNOWN, // BC3_UNORM - DXGI_FORMAT_UNKNOWN, // BC4_UNORM - DXGI_FORMAT_UNKNOWN, // BC5_UNORM - DXGI_FORMAT_UNKNOWN, // BC7_UNORM - DXGI_FORMAT_UNKNOWN, // BC6H_FLOAT - DXGI_FORMAT_UNKNOWN, // BC6H_UFLOAT - DXGI_FORMAT_UNKNOWN, // R8_SNORM - DXGI_FORMAT_UNKNOWN, // R8G8_SNORM - DXGI_FORMAT_UNKNOWN, // R8G8B8A8_SNORM - DXGI_FORMAT_UNKNOWN, // R16_SNORM - DXGI_FORMAT_UNKNOWN, // R16G16_SNORM - DXGI_FORMAT_UNKNOWN, // R16G16B16A16_SNORM - DXGI_FORMAT_UNKNOWN, // R16_FLOAT - DXGI_FORMAT_UNKNOWN, // R16G16_FLOAT - DXGI_FORMAT_UNKNOWN, // R16G16B16A16_FLOAT - DXGI_FORMAT_UNKNOWN, // R32_FLOAT - DXGI_FORMAT_UNKNOWN, // R32G32_FLOAT - DXGI_FORMAT_UNKNOWN, // R32G32B32A32_FLOAT - DXGI_FORMAT_UNKNOWN, // R11G11B10_UFLOAT - DXGI_FORMAT_UNKNOWN, // R8_UINT - DXGI_FORMAT_UNKNOWN, // R8G8_UINT - DXGI_FORMAT_UNKNOWN, // R8G8B8A8_UINT - DXGI_FORMAT_UNKNOWN, // R16_UINT - DXGI_FORMAT_UNKNOWN, // R16G16_UINT - DXGI_FORMAT_UNKNOWN, // R16G16B16A16_UINT - DXGI_FORMAT_UNKNOWN, // R32_UINT - DXGI_FORMAT_UNKNOWN, // R32G32_UINT - DXGI_FORMAT_UNKNOWN, // R32G32B32A32_UINT - DXGI_FORMAT_UNKNOWN, // R8_INT - DXGI_FORMAT_UNKNOWN, // R8G8_INT - DXGI_FORMAT_UNKNOWN, // R8G8B8A8_INT - DXGI_FORMAT_UNKNOWN, // R16_INT - DXGI_FORMAT_UNKNOWN, // R16G16_INT - DXGI_FORMAT_UNKNOWN, // R16G16B16A16_INT - DXGI_FORMAT_UNKNOWN, // R32_INT - DXGI_FORMAT_UNKNOWN, // R32G32_INT - DXGI_FORMAT_UNKNOWN, // R32G32B32A32_INT - DXGI_FORMAT_UNKNOWN, // R8G8B8A8_UNORM_SRGB - DXGI_FORMAT_UNKNOWN, // B8G8R8A8_UNORM_SRGB - DXGI_FORMAT_UNKNOWN, // BC1_UNORM_SRGB - DXGI_FORMAT_UNKNOWN, // BC2_UNORM_SRGB - DXGI_FORMAT_UNKNOWN, // BC3_UNORM_SRGB - DXGI_FORMAT_UNKNOWN, // BC7_UNORM_SRGB - DXGI_FORMAT_D16_UNORM, // D16_UNORM - DXGI_FORMAT_D24_UNORM_S8_UINT, // D24_UNORM - DXGI_FORMAT_D32_FLOAT, // D32_FLOAT - DXGI_FORMAT_D24_UNORM_S8_UINT, // D24_UNORM_S8_UINT - DXGI_FORMAT_D32_FLOAT_S8X24_UINT, // D32_FLOAT_S8_UINT - DXGI_FORMAT_UNKNOWN, // ASTC_4x4_UNORM - DXGI_FORMAT_UNKNOWN, // ASTC_5x4_UNORM - DXGI_FORMAT_UNKNOWN, // ASTC_5x5_UNORM - DXGI_FORMAT_UNKNOWN, // ASTC_6x5_UNORM - DXGI_FORMAT_UNKNOWN, // ASTC_6x6_UNORM - DXGI_FORMAT_UNKNOWN, // ASTC_8x5_UNORM - DXGI_FORMAT_UNKNOWN, // ASTC_8x6_UNORM - DXGI_FORMAT_UNKNOWN, // ASTC_8x8_UNORM - DXGI_FORMAT_UNKNOWN, // ASTC_10x5_UNORM - DXGI_FORMAT_UNKNOWN, // ASTC_10x6_UNORM - DXGI_FORMAT_UNKNOWN, // ASTC_10x8_UNORM - DXGI_FORMAT_UNKNOWN, // ASTC_10x10_UNORM - DXGI_FORMAT_UNKNOWN, // ASTC_12x10_UNORM - DXGI_FORMAT_UNKNOWN, // ASTC_12x12_UNORM - DXGI_FORMAT_UNKNOWN, // ASTC_4x4_UNORM_SRGB - DXGI_FORMAT_UNKNOWN, // ASTC_5x4_UNORM_SRGB - DXGI_FORMAT_UNKNOWN, // ASTC_5x5_UNORM_SRGB - DXGI_FORMAT_UNKNOWN, // ASTC_6x5_UNORM_SRGB - DXGI_FORMAT_UNKNOWN, // ASTC_6x6_UNORM_SRGB - DXGI_FORMAT_UNKNOWN, // ASTC_8x5_UNORM_SRGB - DXGI_FORMAT_UNKNOWN, // ASTC_8x6_UNORM_SRGB - DXGI_FORMAT_UNKNOWN, // ASTC_8x8_UNORM_SRGB - DXGI_FORMAT_UNKNOWN, // ASTC_10x5_UNORM_SRGB - DXGI_FORMAT_UNKNOWN, // ASTC_10x6_UNORM_SRGB - DXGI_FORMAT_UNKNOWN, // ASTC_10x8_UNORM_SRGB - DXGI_FORMAT_UNKNOWN, // ASTC_10x10_UNORM_SRGB - DXGI_FORMAT_UNKNOWN, // ASTC_12x10_UNORM_SRGB - DXGI_FORMAT_UNKNOWN, // ASTC_12x12_UNORM_SRGB - DXGI_FORMAT_UNKNOWN, // ASTC_4x4_FLOAT - DXGI_FORMAT_UNKNOWN, // ASTC_5x4_FLOAT - DXGI_FORMAT_UNKNOWN, // ASTC_5x5_FLOAT - DXGI_FORMAT_UNKNOWN, // ASTC_6x5_FLOAT - DXGI_FORMAT_UNKNOWN, // ASTC_6x6_FLOAT - DXGI_FORMAT_UNKNOWN, // ASTC_8x5_FLOAT - DXGI_FORMAT_UNKNOWN, // ASTC_8x6_FLOAT - DXGI_FORMAT_UNKNOWN, // ASTC_8x8_FLOAT - DXGI_FORMAT_UNKNOWN, // ASTC_10x5_FLOAT - DXGI_FORMAT_UNKNOWN, // ASTC_10x6_FLOAT - DXGI_FORMAT_UNKNOWN, // ASTC_10x8_FLOAT - DXGI_FORMAT_UNKNOWN, // ASTC_10x10_FLOAT - DXGI_FORMAT_UNKNOWN, // ASTC_12x10_FLOAT - DXGI_FORMAT_UNKNOWN, // ASTC_12x12_FLOAT - }; - static_assert(sizeof(JulietToD3D12_DepthFormat) / sizeof(JulietToD3D12_DepthFormat[0]) == ToUnderlying(TextureFormat::Count)); - - // clang-format off - D3D12_INPUT_CLASSIFICATION JulietToD3D12_InputRate[] = - { - D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, // VERTEX - D3D12_INPUT_CLASSIFICATION_PER_INSTANCE_DATA // INSTANCE - }; - // clang-format on - static_assert(sizeof(JulietToD3D12_InputRate) / sizeof(JulietToD3D12_InputRate[0]) == ToUnderlying(VertexInputRate::Count)); - - // clang-format off - D3D12_CULL_MODE JulietToD3D12_CullMode[] = - { - D3D12_CULL_MODE_NONE, - D3D12_CULL_MODE_FRONT, - D3D12_CULL_MODE_BACK - }; - // clang-format on - static_assert(sizeof(JulietToD3D12_CullMode) / sizeof(JulietToD3D12_CullMode[0]) == ToUnderlying(CullMode::Count)); - - // clang-format off - D3D12_FILL_MODE JulietToD3D12_FillMode[] = - { - D3D12_FILL_MODE_SOLID, - D3D12_FILL_MODE_WIREFRAME - }; - // clang-format on - static_assert(sizeof(JulietToD3D12_FillMode) / sizeof(JulietToD3D12_FillMode[0]) == ToUnderlying(FillMode::Count)); - - DXGI_FORMAT JulietToD3D12_VertexFormat[] = { - DXGI_FORMAT_UNKNOWN, // Unknown - DXGI_FORMAT_R32_SINT, // Int - DXGI_FORMAT_R32G32_SINT, // Int2 - DXGI_FORMAT_R32G32B32_SINT, // Int3 - DXGI_FORMAT_R32G32B32A32_SINT, // Int4 - DXGI_FORMAT_R32_UINT, // UInt - DXGI_FORMAT_R32G32_UINT, // UInt2 - DXGI_FORMAT_R32G32B32_UINT, // UInt3 - DXGI_FORMAT_R32G32B32A32_UINT, // UInt4 - DXGI_FORMAT_R32_FLOAT, // Float - DXGI_FORMAT_R32G32_FLOAT, // Float2 - DXGI_FORMAT_R32G32B32_FLOAT, // Float3 - DXGI_FORMAT_R32G32B32A32_FLOAT, // Float4 - DXGI_FORMAT_R8G8_SINT, // Byte2 - DXGI_FORMAT_R8G8B8A8_SINT, // Byte4 - DXGI_FORMAT_R8G8_UINT, // UByte2 - DXGI_FORMAT_R8G8B8A8_UINT, // UByte4 - DXGI_FORMAT_R8G8_SNORM, // Byte2_Norm - DXGI_FORMAT_R8G8B8A8_SNORM, // Byte4_Norm - DXGI_FORMAT_R8G8_UNORM, // UByte2_Norm - DXGI_FORMAT_R8G8B8A8_UNORM, // UByte4_Norm - DXGI_FORMAT_R16G16_SINT, // Short2 - DXGI_FORMAT_R16G16B16A16_SINT, // Short4 - DXGI_FORMAT_R16G16_UINT, // UShort2 - DXGI_FORMAT_R16G16B16A16_UINT, // UShort4 - DXGI_FORMAT_R16G16_SNORM, // Short2_Norm - DXGI_FORMAT_R16G16B16A16_SNORM, // Short4_Norm - DXGI_FORMAT_R16G16_UNORM, // UShort2_Norm - DXGI_FORMAT_R16G16B16A16_UNORM, // UShort4_Norm - DXGI_FORMAT_R16G16_FLOAT, // Half2 - DXGI_FORMAT_R16G16B16A16_FLOAT // Half4 - }; - static_assert(sizeof(JulietToD3D12_VertexFormat) / sizeof(JulietToD3D12_VertexFormat[0]) == - ToUnderlying(VertexElementFormat::Count)); - - // clang-format off - D3D12_PRIMITIVE_TOPOLOGY_TYPE JulietToD3D12_PrimitiveTopologyType[] = { - D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE, - D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE, - D3D12_PRIMITIVE_TOPOLOGY_TYPE_LINE, - D3D12_PRIMITIVE_TOPOLOGY_TYPE_LINE, - D3D12_PRIMITIVE_TOPOLOGY_TYPE_POINT - }; - // clang-format on - static_assert(sizeof(JulietToD3D12_PrimitiveTopologyType) / sizeof(JulietToD3D12_PrimitiveTopologyType[0]) == - ToUnderlying(PrimitiveType::Count)); - - // clang-format off - D3D12_BLEND JulietToD3D12_BlendFactor[] = - { - D3D12_BLEND_ZERO, - D3D12_BLEND_ZERO, - D3D12_BLEND_ONE, - D3D12_BLEND_SRC_COLOR, - D3D12_BLEND_INV_SRC_COLOR, - D3D12_BLEND_DEST_COLOR, - D3D12_BLEND_INV_DEST_COLOR, - D3D12_BLEND_SRC_ALPHA, - D3D12_BLEND_INV_SRC_ALPHA, - D3D12_BLEND_DEST_ALPHA, - D3D12_BLEND_INV_DEST_ALPHA, - D3D12_BLEND_BLEND_FACTOR, - D3D12_BLEND_INV_BLEND_FACTOR, - D3D12_BLEND_SRC_ALPHA_SAT, - }; - // clang-format on - static_assert(sizeof(JulietToD3D12_BlendFactor) / sizeof(JulietToD3D12_BlendFactor[0]) == ToUnderlying(BlendFactor::Count)); - - // clang-format off - D3D12_BLEND JulietToD3D12_BlendFactorAlpha[] = - { - D3D12_BLEND_ZERO, - D3D12_BLEND_ZERO, - D3D12_BLEND_ONE, - D3D12_BLEND_SRC_ALPHA, - D3D12_BLEND_INV_SRC_ALPHA, - D3D12_BLEND_DEST_ALPHA, - D3D12_BLEND_INV_DEST_ALPHA, - D3D12_BLEND_SRC_ALPHA, - D3D12_BLEND_INV_SRC_ALPHA, - D3D12_BLEND_DEST_ALPHA, - D3D12_BLEND_INV_DEST_ALPHA, - D3D12_BLEND_BLEND_FACTOR, - D3D12_BLEND_INV_BLEND_FACTOR, - D3D12_BLEND_SRC_ALPHA_SAT, - }; - // clang-format on - static_assert(sizeof(JulietToD3D12_BlendFactorAlpha) / sizeof(JulietToD3D12_BlendFactorAlpha[0]) == - ToUnderlying(BlendFactor::Count)); - - // clang-format off - D3D12_BLEND_OP JulietToD3D12_BlendOperation[] = - { - D3D12_BLEND_OP_ADD, - D3D12_BLEND_OP_ADD, - D3D12_BLEND_OP_SUBTRACT, - D3D12_BLEND_OP_REV_SUBTRACT, - D3D12_BLEND_OP_MIN, - D3D12_BLEND_OP_MAX - }; - // clang-format on - static_assert(sizeof(JulietToD3D12_BlendOperation) / sizeof(JulietToD3D12_BlendOperation[0]) == - ToUnderlying(BlendOperation::Count)); - - // clang-format off - D3D12_COMPARISON_FUNC JulietToD3D12_CompareOperation[] = - { - D3D12_COMPARISON_FUNC_NEVER, - D3D12_COMPARISON_FUNC_NEVER, - D3D12_COMPARISON_FUNC_LESS, - D3D12_COMPARISON_FUNC_EQUAL, - D3D12_COMPARISON_FUNC_LESS_EQUAL, - D3D12_COMPARISON_FUNC_GREATER, - D3D12_COMPARISON_FUNC_NOT_EQUAL, - D3D12_COMPARISON_FUNC_GREATER_EQUAL, - D3D12_COMPARISON_FUNC_ALWAYS - }; - // clang-format on - static_assert(sizeof(JulietToD3D12_CompareOperation) / sizeof(JulietToD3D12_CompareOperation[0]) == - ToUnderlying(CompareOperation::Count)); - - // clang-format off - D3D12_STENCIL_OP JulietToD3D12_StencilOperation[] = - { - D3D12_STENCIL_OP_KEEP, - D3D12_STENCIL_OP_KEEP, - D3D12_STENCIL_OP_ZERO, - D3D12_STENCIL_OP_REPLACE, - D3D12_STENCIL_OP_INCR_SAT, - D3D12_STENCIL_OP_DECR_SAT, - D3D12_STENCIL_OP_INVERT, - D3D12_STENCIL_OP_INCR, - D3D12_STENCIL_OP_DECR - }; - // clang-format on - static_assert(sizeof(JulietToD3D12_StencilOperation) / sizeof(JulietToD3D12_StencilOperation[0]) == - ToUnderlying(StencilOperation::Count)); - - // clang-format off -D3D12_PRIMITIVE_TOPOLOGY JulietToD3D12_PrimitiveType[] = -{ - D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST, - D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP, - D3D_PRIMITIVE_TOPOLOGY_LINELIST, - D3D_PRIMITIVE_TOPOLOGY_LINESTRIP, - D3D_PRIMITIVE_TOPOLOGY_POINTLIST -}; - // clang-format on - static_assert(sizeof(JulietToD3D12_PrimitiveType) / sizeof(JulietToD3D12_PrimitiveType[0]) == ToUnderlying(PrimitiveType::Count)); - - enum class RootParameters : uint8 - { - Constants32Bits, - Count, - }; - - struct D3D12TextureContainer - { - TextureHeader Header; - - D3D12Texture* ActiveTexture; - D3D12Texture** Textures; - uint32 Capacity; - uint32 Count; - - // Note: Swapchain images cannot be cycled - bool CanBeCycled; - -#if JULIET_DEBUG - char* DebugName; -#endif - }; - - struct D3D12WindowData - { - Window* Window; - - IDXGISwapChain3* SwapChain; - D3D12TextureContainer SwapChainTextureContainers[GPUDriver::kMaxFramesInFlight]; - DXGI_COLOR_SPACE_TYPE SwapChainColorSpace; - SwapChainComposition SwapChainComposition; - uint8 SwapChainTextureCount; - - PresentMode PresentMode; - - Fence* InFlightFences[GPUDriver::kMaxFramesInFlight]; - - uint32 WindowFrameCounter; // Specific to that window. See GraphicsDevice for global counter - uint32 Width; - uint32 Height; - }; - - struct D3D12CommandListBaseData - { - ID3D12CommandAllocator* Allocator; - }; - - struct D3D12CopyCommandListData : D3D12CommandListBaseData - { - ID3D12GraphicsCommandList* CommandList; - }; - - struct D3D12GraphicsCommandListData : D3D12CommandListBaseData - { - ID3D12GraphicsCommandList6* CommandList; - }; - - struct D3D12Shader - { - ByteBuffer ByteCode; - - uint32 NumSamplers; - uint32 NumUniformBuffers; - uint32 NumStorageBuffers; - uint32 NumStorageTextures; - }; - - struct D3D12PresentData - { - D3D12WindowData* WindowData; - uint32 SwapChainImageIndex; - }; - - // https://learn.microsoft.com/en-us/windows/win32/direct3d12/descriptor-heaps - struct D3D12DescriptorHeap - { - D3D12DescriptorHeap* Next; - ID3D12DescriptorHeap* Handle; - D3D12_DESCRIPTOR_HEAP_TYPE HeapType; - D3D12_CPU_DESCRIPTOR_HANDLE DescriptorHeapCPUStart; - D3D12_GPU_DESCRIPTOR_HANDLE DescriptorHeapGPUStart; // only used by GPU heaps - uint32 MaxDescriptors; - uint32 DescriptorSize; - uint32 CurrentDescriptorIndex; // only used by GPU heaps - - VectorArena FreeIndices; - index_t CurrentFreeIndex; - - bool Staging : 1; - }; - - struct D3D12Descriptor - { - D3D12DescriptorHeap* Heap; - uint32 Index; - D3D12_CPU_DESCRIPTOR_HANDLE CpuHandle; - D3D12_GPU_DESCRIPTOR_HANDLE GpuHandle; - }; - - struct D3D12DescriptorHeapPool - { - D3D12DescriptorHeap* FirstFreeDescriptorHeap; - }; - - // https://learn.microsoft.com/en-us/windows/win32/direct3d12/descriptors-overview - struct D3D12StagingDescriptor - { - D3D12StagingDescriptorPool* Pool; - D3D12DescriptorHeap* Heap; - D3D12_CPU_DESCRIPTOR_HANDLE CpuHandle; - uint32 CpuHandleIndex; - }; - - struct D3D12StagingDescriptorPool - { - D3D12DescriptorHeap** Heaps; - uint32 HeapCount; - - // Descriptor handles are owned by resources, so these can be thought of as descriptions of a free index within a heap. - uint32 FreeDescriptorCapacity; - uint32 FreeDescriptorCount; - D3D12StagingDescriptor* FreeDescriptors; - }; - - struct D3D12Buffer - { - // Note: This three variables need to stay at the top and in this order - D3D12Descriptor Descriptor; - ID3D12Resource* Handle; - D3D12_RESOURCE_STATES CurrentState; - - // Anything here can be any order - D3D12Buffer* Next; - size_t Size; - }; - - struct D3D12Driver : GPUDriver - { - GraphicsDevice* GraphicsDevice; - - // D3D12 - DynamicLibrary* D3D12DLL; - ID3D12Device5* D3D12Device; - PFN_D3D12_SERIALIZE_VERSIONED_ROOT_SIGNATURE D3D12SerializeVersionedRootSignatureFct; - ID3D12CommandQueue* GraphicsQueue; - D3D12_COMMAND_QUEUE_DESC QueueDesc[ToUnderlying(QueueType::Count)]; -#if JULIET_DEBUG - ID3D12Debug1* D3D12Debug; -#endif - - // Indirect commands signature - ID3D12CommandSignature* IndirectDrawCommandSignature; - ID3D12CommandSignature* IndirectIndexedDrawCommandSignature; - ID3D12CommandSignature* IndirectDispatchCommandSignature; - - // DXGI - IDXGIFactory4* DXGIFactory; - IDXGIAdapter1* DXGIAdapter; -#if JULIET_DEBUG - DynamicLibrary* DXGIDebugDLL; - IDXGIDebug* DXGIDebug; -#ifdef IDXGIINFOQUEUE_SUPPORTED - IDXGIInfoQueue* DXGIInfoQueue; -#endif -#endif - - // Windows - // TODO: Support more than one window - D3D12WindowData* WindowData; - - // Resources - D3D12CommandList** AvailableCommandLists; - uint8 AvailableCommandListCapacity; - uint8 AvailableCommandListCount; - - D3D12CommandList** SubmittedCommandLists; - uint8 SubmittedCommandListCapacity; - uint8 SubmittedCommandListCount; - - D3D12Fence** AvailableFences; - uint32 AvailableFenceCount; - uint32 AvailableFenceCapacity; - - D3D12GraphicsPipeline** GraphicsPipelinesToDispose; - uint32 GraphicsPipelinesToDisposeCount; - uint32 GraphicsPipelinesToDisposeCapacity; - - D3D12GraphicsRootSignature* BindlessRootSignature; - - D3D12StagingDescriptorPool* StagingDescriptorPools[D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES]; - D3D12DescriptorHeap* BindlessDescriptorHeap; - D3D12DescriptorHeapPool SamplerHeapPool; - - String Semantic; - - uint8 FramesInFlight; - uint64 FrameCounter = 0; // Number of frame since inception - - bool IsTearingSupported : 1; - bool IsUMAAvailable : 1; - bool IsUMACacheCoherent : 1; - bool GPUUploadHeapSupported : 1; - }; - - struct D3D12GraphicsRootSignature - { - ID3D12RootSignature* Handle; - }; - - struct D3D12GraphicsPipeline - { -#if ALLOW_SHADER_HOT_RELOAD - // Template to recreate an ID3D12PipelineState when shader are hot reloaded - // Stripped out in shipping build as the struct is huge - D3D12_GRAPHICS_PIPELINE_STATE_DESC PSODescTemplate; - - // Keeping shaders byte code to make it easier to recreate the ID3D12PipelineState - // Those will be freed when the pipeline is destroyed or updated - D3D12Shader* VertexShaderCache; - D3D12Shader* FragmentShaderCache; -#endif - - ID3D12PipelineState* PipelineState; - D3D12GraphicsRootSignature* RootSignature; - PrimitiveType PrimitiveType; - - uint32 VertexStrides[GPUDriver::kMaxVertexBuffers]; - - uint32 VertexSamplerCount; - uint32 VertexUniformBufferCount; - uint32 VertexStorageBufferCount; - uint32 VertexStorageTextureCount; - - uint32 FragmentSamplerCount; - uint32 FragmentUniformBufferCount; - uint32 FragmentStorageBufferCount; - uint32 FragmentStorageTextureCount; - - int ReferenceCount; - }; - - struct D3D12CommandList - { - CommandListHeader Common; - - index_t ID; - - D3D12Driver* Driver; - - D3D12PresentData* PresentDatas; - uint32 PresentDataCapacity; - uint32 PresentDataCount; - - D3D12Fence* InFlightFence; - bool AutoReleaseFence; - - D3D12GraphicsCommandListData GraphicsCommandList; - D3D12GraphicsCommandListData ComputeCommandList; - D3D12CopyCommandListData CopyCommandList; - - D3D12GraphicsPipeline* CurrentGraphicsPipeline; - - D3D12TextureSubresource* ColorTargetSubresources[GPUDriver::kMaxColorTargetInfo]; - D3D12TextureSubresource* ColorResolveSubresources[GPUDriver::kMaxColorTargetInfo]; - D3D12TextureSubresource* DepthStencilSubresource; - - bool NeedVertexBufferBind : 1; - bool NeedVertexSamplerBind : 1; - bool NeedVertexStorageTextureBind : 1; - bool NeedVertexStorageBufferBind : 1; - - bool NeedFragmentSamplerBind : 1; - bool NeedFragmentStorageTextureBind : 1; - bool NeedFragmentStorageBufferBind : 1; - - bool NeedVertexUniformBufferBind[GPUDriver::kMaxUniformBuffersPerStage]; - bool NeedFragmentUniformBufferBind[GPUDriver::kMaxUniformBuffersPerStage]; - - // D3D12UniformBuffer *vertexUniformBuffers[GPUDriver::kMaxUniformBuffersPerStage]; - // D3D12UniformBuffer *fragmentUniformBuffers[GPUDriver::kMaxUniformBuffersPerStage]; - - D3D12DescriptorHeap* CRB_SRV_UAV_Heap; - D3D12DescriptorHeap* Sampler_Heap; - - // Resource Tracking - D3D12Texture** UsedTextures; - uint32 UsedTextureCount; - uint32 UsedTextureCapacity; - - D3D12GraphicsPipeline** UsedGraphicsPipelines; - uint32 UsedGraphicsPipelineCount; - uint32 UsedGraphicsPipelineCapacity; - }; - - // D3D12 subresourcces: https://learn.microsoft.com/en-us/windows/win32/direct3d12/subresources (mipmaps, etc..) - struct D3D12TextureSubresource - { - D3D12Texture* Parent; - uint32 Layer; - uint32 Level; - uint32 Depth; - uint32 Index; - - // One per depth slice - D3D12StagingDescriptor* RTVHandles; // NULL if not a color target - - D3D12StagingDescriptor UAVHandle; // NULL if not a compute storage write texture - D3D12StagingDescriptor DSVHandle; // NULL if not a depth stencil target - }; - - struct D3D12Texture - { - D3D12TextureContainer* Container; - uint32 IndexInContainer; - - ID3D12Resource* Resource; - - D3D12TextureSubresource* Subresources; - uint32 SubresourceCount; // Layer Count * number of Levels - - D3D12StagingDescriptor SRVHandle; - - // TODO: Should be atomic to support multithreading - int32 ReferenceCount; - }; - - struct D3D12Fence - { - ID3D12Fence* Handle; - HANDLE Event; // used for blocking - int32 ReferenceCount; // TODO : Atomic - }; - - // -------------- - // End Data Types - - // ------------- - - DXGI_FORMAT ConvertToD3D12TextureFormat(TextureFormat format) - { - return JulietToD3D12_TextureFormat[ToUnderlying(format)]; - } - - DXGI_FORMAT ConvertToD3D12DepthFormat(TextureFormat format) - { - return JulietToD3D12_DepthFormat[ToUnderlying(format)]; - } - - // From SDLGPU - // TODO Do my own version. - void D3D12_LogError(NonNullPtr D3D12Device, const char* errorMessage, HRESULT result) - { -#define MAX_ERROR_LEN 1024 // FIXME: Arbitrary! - - // Buffer for text, ensure space for \0 terminator after buffer - char wszMsgBuff[MAX_ERROR_LEN + 1]; - // Number of chars returned. - - if (result == DXGI_ERROR_DEVICE_REMOVED) - { - result = D3D12Device->GetDeviceRemovedReason(); - } - - // Try to get the message from the system errors. - DWORD dwChars = FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, nullptr, - static_cast(result), 0, wszMsgBuff, MAX_ERROR_LEN, nullptr); - - // No message? Screw it, just post the code. - if (dwChars == 0) - { - Log(LogLevel::Error, LogCategory::Graphics, "%s! Error: " HRESULT_FMT, errorMessage, result); - return; - } - - // Ensure valid range - dwChars = Min(dwChars, MAX_ERROR_LEN); - - // Trim whitespace from tail of message - while (dwChars > 0) - { - if (wszMsgBuff[dwChars - 1] <= ' ') - { - dwChars--; - } - else - { - break; - } - } - - // Ensure null-terminated string - wszMsgBuff[dwChars] = '\0'; - - Log(LogLevel::Error, LogCategory::Graphics, "%s! Error: %s" HRESULT_FMT, errorMessage, wszMsgBuff, result); - } - -#if JULIET_DEBUG - String GetDescriptorTypeNane(D3D12_DESCRIPTOR_HEAP_TYPE type) - { - switch (type) - { - case D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV: return WrapString("D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV"); - case D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER: return WrapString("D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER"); - case D3D12_DESCRIPTOR_HEAP_TYPE_RTV: return WrapString("D3D12_DESCRIPTOR_HEAP_TYPE_RTV"); - case D3D12_DESCRIPTOR_HEAP_TYPE_DSV: return WrapString("D3D12_DESCRIPTOR_HEAP_TYPE_DSV"); - case D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES: return WrapString("Invalid"); - } - return WrapString("Invalid"); - } -#endif - - bool CheckResourceTypeTier(ID3D12Device5* device) - { - D3D12_FEATURE_DATA_D3D12_OPTIONS options = {}; - HRESULT result = - device->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS, &options, sizeof(D3D12_FEATURE_DATA_D3D12_OPTIONS)); - if (SUCCEEDED(result)) - { - if (options.ResourceBindingTier < D3D12_RESOURCE_BINDING_TIER_3) - { - LogError(LogCategory::Graphics, "Resource Binding Tier 3 not supported. :("); - return false; - } - return true; - } - - LogError(LogCategory::Graphics, "Couldn't fetch D3D12_FEATURE_D3D12_OPTIONS :("); - return false; - } - - bool CheckShaderModel(ID3D12Device5* device) - { - // Check Shader Model - bool foundShaderModel = false; - D3D12_FEATURE_DATA_SHADER_MODEL shaderModel = {}; - constexpr D3D_SHADER_MODEL allModelVersions[] = { -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612) - D3D_SHADER_MODEL_6_9, -#endif -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 606) - D3D_SHADER_MODEL_6_8, -#endif -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 3) - D3D_SHADER_MODEL_6_7, -#endif - D3D_SHADER_MODEL_6_6, D3D_SHADER_MODEL_6_5, D3D_SHADER_MODEL_6_4, D3D_SHADER_MODEL_6_3, - D3D_SHADER_MODEL_6_2, D3D_SHADER_MODEL_6_1, D3D_SHADER_MODEL_6_0, D3D_SHADER_MODEL_5_1 - }; - for (auto allModelVersion : allModelVersions) - { - shaderModel.HighestShaderModel = allModelVersion; - HRESULT result = device->CheckFeatureSupport(D3D12_FEATURE_SHADER_MODEL, &shaderModel, - sizeof(D3D12_FEATURE_DATA_SHADER_MODEL)); - if (result != E_INVALIDARG) - { - if (FAILED(result)) - { - shaderModel.HighestShaderModel = static_cast(0); - } - else - { - foundShaderModel = true; - break; - } - } - } - - if (!foundShaderModel) - { - shaderModel.HighestShaderModel = static_cast(0); - } - - if (shaderModel.HighestShaderModel < D3D_SHADER_MODEL_6_6) - { - LogError(LogCategory::Graphics, "Shader Model 6.6 not supported. :("); - return false; - } - return true; - } - - bool D3D12_CheckDriver() - { - // Can we Load D3D12.dll and the create device function - DynamicLibrary* d3d12_dll = LoadDynamicLibrary(D3D12_DLL); - if (d3d12_dll == nullptr) - { - Log(LogLevel::Warning, LogCategory::Graphics, "DX12: Couldn't find " D3D12_DLL); - return false; - } - - auto* D3D12CreateDeviceFuncPtr = - TOD3D12FuncPtr(PFN_D3D12_CREATE_DEVICE, LoadFunction(d3d12_dll, D3D12_CREATEDEVICE_FUNC)); - if (D3D12CreateDeviceFuncPtr == nullptr) - { - Log(LogLevel::Warning, LogCategory::Graphics, "DX12: Couldn't find function " D3D12_CREATEDEVICE_FUNC " in " D3D12_DLL); - UnloadDynamicLibrary(d3d12_dll); - return false; - } - - // Can create DXGI factory ? - IDXGIFactory1* factory1 = nullptr; - HRESULT result = CreateDXGIFactory1(IID_IDXGIFactory1, reinterpret_cast(&factory1)); - if (FAILED(result)) - { - Log(LogLevel::Warning, LogCategory::Graphics, "DX12: Cannot create DXGIFactory1"); - return false; - } - - // Can query the 1.4 factory ? - IDXGIFactory4* factory4 = nullptr; - result = factory1->QueryInterface(IID_IDXGIFactory4, reinterpret_cast(&factory4)); - if (FAILED(result)) - { - factory1->Release(); - Log(LogLevel::Warning, LogCategory::Graphics, "DX12: Failed to query DXGI1.4."); - return false; - } - factory4->Release(); - - // Check for 1.6. (It's not mandatory). - IDXGIAdapter1* adapter = nullptr; - IDXGIFactory6* factory6 = nullptr; - result = factory1->QueryInterface(IID_IDXGIFactory6, reinterpret_cast(&factory6)); - if (SUCCEEDED(result)) - { - result = factory6->EnumAdapterByGpuPreference(0, DXGI_GPU_PREFERENCE_HIGH_PERFORMANCE, IID_IDXGIAdapter1, - reinterpret_cast(&adapter)); - factory6->Release(); - } - else - { - result = factory1->EnumAdapters1(0, &adapter); - } - - if (FAILED(result)) - { - Log(LogLevel::Warning, LogCategory::Graphics, "DX12: Failed to find an adapter for D3D12."); - - factory1->Release(); - return false; - } - - ID3D12Device5* device = nullptr; - result = D3D12CreateDeviceFuncPtr(static_cast(adapter), kD3DFeatureLevel, IID_ID3D12Device5, - reinterpret_cast(&device)); - - bool driverIsValid = true; - if (SUCCEEDED(result)) - { - driverIsValid &= CheckShaderModel(device); - driverIsValid &= CheckResourceTypeTier(device); - - device->Release(); - } - else - { - Log(LogLevel::Warning, LogCategory::Graphics, "DX12: Failed to create a D3D12Device with feature level %s.", - kD3DFeatureLevelStr); - driverIsValid = false; - } - adapter->Release(); - factory1->Release(); - - return driverIsValid; - } - - void DestroyGraphicsRootSignature(D3D12GraphicsRootSignature* rootSignature) - { - if (!rootSignature) - { - return; - } - if (rootSignature->Handle) - { - rootSignature->Handle->Release(); - } - Free(rootSignature); - } - - D3D12GraphicsRootSignature* CreateGraphicsRootSignature(NonNullPtr d3d12Driver) - { - auto d3d12GraphicsRootSignature = - static_cast(Calloc(1, sizeof(D3D12GraphicsRootSignature))); - if (!d3d12GraphicsRootSignature) - { - return nullptr; - } - - D3D12_ROOT_PARAMETER1 parameters[ToUnderlying(RootParameters::Count)] = {}; - parameters[ToUnderlying(RootParameters::Constants32Bits)] = { - .ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS, - .Constants = { - .ShaderRegister = 0, - .RegisterSpace = 0, - .Num32BitValues = 58, // 58 because each root cbv takes 2 uints, and the max is 64 - }, - .ShaderVisibility = D3D12_SHADER_VISIBILITY_ALL - }; - - D3D12_STATIC_SAMPLER_DESC samplers[] = { - { - // s_nearest - .Filter = D3D12_FILTER_MIN_MAG_POINT_MIP_LINEAR, - .AddressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP, - .AddressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP, - .AddressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP, - .MipLODBias = 0.0f, - .MaxAnisotropy = 0, - .ComparisonFunc = D3D12_COMPARISON_FUNC_NONE, - .BorderColor = D3D12_STATIC_BORDER_COLOR_TRANSPARENT_BLACK, - .MinLOD = 0.0f, - .MaxLOD = D3D12_FLOAT32_MAX, - .ShaderRegister = 0, - .RegisterSpace = 0, - .ShaderVisibility = D3D12_SHADER_VISIBILITY_ALL, - }, - }; - - D3D12_VERSIONED_ROOT_SIGNATURE_DESC rootSignatureDesc = { - .Version = D3D_ROOT_SIGNATURE_VERSION_1_1, - .Desc_1_1 = { - .NumParameters = ArraySize(parameters), - .pParameters = parameters, - .NumStaticSamplers = ArraySize(samplers), - .pStaticSamplers = samplers, - .Flags = D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT | - D3D12_ROOT_SIGNATURE_FLAG_CBV_SRV_UAV_HEAP_DIRECTLY_INDEXED | - D3D12_ROOT_SIGNATURE_FLAG_SAMPLER_HEAP_DIRECTLY_INDEXED, - }, - }; - - // Serialize the root signature - ID3DBlob* serializedRootSignature; - ID3DBlob* errorBlob; - HRESULT res = d3d12Driver->D3D12SerializeVersionedRootSignatureFct(&rootSignatureDesc, &serializedRootSignature, &errorBlob); - if (FAILED(res)) - { - if (errorBlob) - { - auto errorBuffer = errorBlob->GetBufferPointer(); - LogError(LogCategory::Graphics, "Failed to serialize RootSignature: %s", errorBuffer); - - errorBlob->Release(); - } - DestroyGraphicsRootSignature(d3d12GraphicsRootSignature); - return nullptr; - } - - // Create the root signature - ID3D12RootSignature* rootSignature; - res = d3d12Driver->D3D12Device->CreateRootSignature(0, serializedRootSignature->GetBufferPointer(), - serializedRootSignature->GetBufferSize(), IID_ID3D12RootSignature, - reinterpret_cast(&rootSignature)); - if (FAILED(res)) - { - if (errorBlob) - { - LogError(LogCategory::Graphics, "Failed to create RootSignature: %s", (const char*)errorBlob->GetBufferPointer()); - errorBlob->Release(); - } - DestroyGraphicsRootSignature(d3d12GraphicsRootSignature); - return nullptr; - } - - d3d12GraphicsRootSignature->Handle = rootSignature; - return d3d12GraphicsRootSignature; - } -#if JULIET_DEBUG - -#ifdef IDXGIINFOQUEUE_SUPPORTED - -#define DXGIDEBUG_DLL "dxgidebug.dll" -#define DXGI_GET_DEBUG_INTERFACE_FUNC "DXGIGetDebugInterface" - - void InitializeDXGIDebug(NonNullPtr driver) - { - // See https://github.com/microsoft/DirectX-Graphics-Samples/blob/7aa24663f26e547a5bc437db028dfcfdb4b3c8f3/TechniqueDemos/D3D12MemoryManagement/src/Framework.cpp#L957 - // For win10 only we can just use dxgiGetDebugInterface1 - using LPDXGIGETDEBUGINTERFACE = HRESULT(WINAPI*)(REFIID, void**); - - driver->DXGIDebugDLL = LoadDynamicLibrary(DXGIDEBUG_DLL); - if (driver->DXGIDebugDLL) - { - auto dxgiGetDebugInterface = - TOD3D12FuncPtr(LPDXGIGETDEBUGINTERFACE, LoadFunction(driver->DXGIDebugDLL, DXGI_GET_DEBUG_INTERFACE_FUNC)); - - HRESULT result = dxgiGetDebugInterface(IID_IDXGIDebug, (void**)&driver->DXGIDebug); - if (FAILED(result)) - { - Log(LogLevel::Warning, LogCategory::Graphics, "Could not get IDXGIDebug interface"); - } - - result = dxgiGetDebugInterface(IID_IDXGIInfoQueue, (void**)&driver->DXGIInfoQueue); - if (FAILED(result)) - { - Log(LogLevel::Warning, LogCategory::Graphics, "Could not get IDXGIInfoQueue interface"); - } - else - { - driver->DXGIInfoQueue->SetBreakOnSeverity(DXGI_DEBUG_ALL, DXGI_INFO_QUEUE_MESSAGE_SEVERITY_ERROR, TRUE); - driver->DXGIInfoQueue->SetBreakOnSeverity(DXGI_DEBUG_ALL, DXGI_INFO_QUEUE_MESSAGE_SEVERITY_CORRUPTION, TRUE); - driver->DXGIInfoQueue->SetBreakOnSeverity(DXGI_DEBUG_ALL, DXGI_INFO_QUEUE_MESSAGE_SEVERITY_WARNING, TRUE); - } - } - } - - void ShutdownDXGIDebug(NonNullPtr driver) - { - if (driver->DXGIDebug) - { - driver->DXGIDebug->ReportLiveObjects(DXGI_DEBUG_ALL, static_cast(DXGI_DEBUG_RLO_SUMMARY | - DXGI_DEBUG_RLO_DETAIL)); - driver->DXGIDebug->Release(); - driver->DXGIDebug = nullptr; - } - - if (driver->DXGIDebugDLL) - { - UnloadDynamicLibrary(driver->DXGIDebugDLL); - driver->DXGIDebugDLL = nullptr; - } - } -#endif - -#define D3D12_GET_DEBUG_INTERFACE_FUNC "D3D12GetDebugInterface" - - void InitializeD3D12DebugLayer(NonNullPtr driver) - { - auto D3D12GetDebugInterfaceFunc = - TOD3D12FuncPtr(PFN_D3D12_GET_DEBUG_INTERFACE, LoadFunction(driver->D3D12DLL, D3D12_GET_DEBUG_INTERFACE_FUNC)); - - if (D3D12GetDebugInterfaceFunc == nullptr) - { - LogWarning(LogCategory::Graphics, "Could not load function: " D3D12_GET_DEBUG_INTERFACE_FUNC); - return; - } - - HRESULT result = D3D12GetDebugInterfaceFunc(IID_ID3D12Debug1, reinterpret_cast(&driver->D3D12Debug)); - if (FAILED(result)) - { - LogWarning(LogCategory::Graphics, "Could not get ID3D12Debug interface"); - return; - } - - driver->D3D12Debug->EnableDebugLayer(); - } - - bool InitializeD3D12DebugInfoQueue(NonNullPtr driver) - { - ID3D12InfoQueue* infoQueue = nullptr; - D3D12_MESSAGE_SEVERITY severities[] = { D3D12_MESSAGE_SEVERITY_INFO }; - - HRESULT result = driver->D3D12Device->QueryInterface(IID_ID3D12InfoQueue, reinterpret_cast(&infoQueue)); - if (FAILED(result)) - { - D3D12_LogError(driver->D3D12Device, "Failed to convert ID3D12Device to ID3D12InfoQueue", result); - return false; - } - - D3D12_INFO_QUEUE_FILTER filter = {}; - filter.DenyList.NumSeverities = 1; - filter.DenyList.pSeverityList = severities; - infoQueue->PushStorageFilter(&filter); - // infoQueue->SetBreakOnSeverity(D3D12_MESSAGE_SEVERITY_CORRUPTION, true); - infoQueue->Release(); - - return true; - } - - void WINAPI OnD3D12DebugInfoMsg(D3D12_MESSAGE_CATEGORY category, D3D12_MESSAGE_SEVERITY severity, - D3D12_MESSAGE_ID id, LPCSTR description, void* /*context*/) - { - String catStr = WrapString("UNKNOWN"); - switch (category) - { - case D3D12_MESSAGE_CATEGORY_APPLICATION_DEFINED: catStr = WrapString("APPLICATION_DEFINED"); break; - case D3D12_MESSAGE_CATEGORY_MISCELLANEOUS: catStr = WrapString("MISCELLANEOUS"); break; - case D3D12_MESSAGE_CATEGORY_INITIALIZATION: catStr = WrapString("INITIALIZATION"); break; - case D3D12_MESSAGE_CATEGORY_CLEANUP: catStr = WrapString("CLEANUP"); break; - case D3D12_MESSAGE_CATEGORY_COMPILATION: catStr = WrapString("COMPILATION"); break; - case D3D12_MESSAGE_CATEGORY_STATE_CREATION: catStr = WrapString("STATE_CREATION"); break; - case D3D12_MESSAGE_CATEGORY_STATE_SETTING: catStr = WrapString("STATE_SETTING"); break; - case D3D12_MESSAGE_CATEGORY_STATE_GETTING: catStr = WrapString("STATE_GETTING"); break; - case D3D12_MESSAGE_CATEGORY_RESOURCE_MANIPULATION: catStr = WrapString("RESOURCE_MANIPULATION"); break; - case D3D12_MESSAGE_CATEGORY_EXECUTION: catStr = WrapString("EXECUTION"); break; - case D3D12_MESSAGE_CATEGORY_SHADER: catStr = WrapString("SHADER"); break; - } - - String severityStr = WrapString("UNKNOWN"); - switch (severity) - { - case D3D12_MESSAGE_SEVERITY_CORRUPTION: severityStr = WrapString("CORRUPTION"); break; - case D3D12_MESSAGE_SEVERITY_ERROR: severityStr = WrapString("ERROR"); break; - case D3D12_MESSAGE_SEVERITY_WARNING: severityStr = WrapString("WARNING"); break; - case D3D12_MESSAGE_SEVERITY_INFO: severityStr = WrapString("INFO"); break; - case D3D12_MESSAGE_SEVERITY_MESSAGE: severityStr = WrapString("MESSAGE"); break; - } - - if (severity <= D3D12_MESSAGE_SEVERITY_ERROR) - { - LogWarning(LogCategory::Graphics, "D3D12 ERROR: %s [%s %s #%d]", description, CStr(catStr), CStr(severityStr), id); - } - else - { - LogWarning(LogCategory::Graphics, "D3D12 WARNING: %s [%s %s #%d]", description, CStr(catStr), CStr(severityStr), id); - } - } - - void InitializeD3D12DebugInfoLogger(NonNullPtr driver) - { - // Only supported on Win 11 apparently - ID3D12InfoQueue1* infoQueue = nullptr; - HRESULT result = driver->D3D12Device->QueryInterface(IID_ID3D12InfoQueue1, reinterpret_cast(&infoQueue)); - if (FAILED(result)) - { - return; - } - - infoQueue->RegisterMessageCallback(OnD3D12DebugInfoMsg, D3D12_MESSAGE_CALLBACK_FLAG_NONE, nullptr, nullptr); - infoQueue->Release(); - Log(LogLevel::Message, LogCategory::Graphics, "DX12: Debug Info Logger Initialized"); - } -#endif - - // Begin Shaders - Shader* D3D12_CreateShader(NonNullPtr driver, ByteBuffer shaderByteCode, - ShaderCreateInfo& /*shaderCreateInfo*/ JULIET_DEBUG_PARAM(String filename)) - { - if (!IsValid(shaderByteCode)) - { - LogError(LogCategory::Graphics, "Invalid shader byte code"); - return nullptr; - } - - size_t allocSize = sizeof(D3D12Shader) + shaderByteCode.Size; - auto* shader = static_cast( - ArenaPushSize(driver->DriverArena, allocSize, AlignOf(D3D12Shader), - true JULIET_DEBUG_PARAM("D3D12Shader [{}] | Size [{}]", CStr(filename), shaderByteCode.Size))); - if (!shader) - { - LogError(LogCategory::Graphics, "Cannot allocate a new D3D12Shader: Out of memory"); - return nullptr; - } - - // Uses the bytes after the struct to store the shader byte code. - shader->ByteCode.Data = reinterpret_cast(shader + 1); - shader->ByteCode.Size = shaderByteCode.Size; - MemCopy(shader->ByteCode.Data, shaderByteCode.Data, shaderByteCode.Size); - - // Make sure the data is correctly copied - if (MemCompare(shader->ByteCode.Data, shaderByteCode.Data, shaderByteCode.Size) != 0) - { - LogError(LogCategory::Graphics, "Memory copy failed"); - Free(shader); - return nullptr; - } - - return reinterpret_cast(shader); - } - - void D3D12_DestroyShader(NonNullPtr /*driver*/, NonNullPtr /*shader*/) - { - // For now we never destroy the shader, it stays in the arena. - // If we create too many and need to switch dynamically we will need a way to release the slot for other asset - } - // End Shaders - - // Begin Graphics Pipeline - bool ConvertVertexInputState(const VertexInputState& vertexInputState, D3D12_INPUT_ELEMENT_DESC* desc, String semantic) - { - if (desc == nullptr || vertexInputState.NumVertexAttributes == 0) - { - return false; - } - - for (uint32 idx = 0; idx < vertexInputState.NumVertexAttributes; ++idx) - { - VertexAttribute attribute = vertexInputState.VertexAttributes[idx]; - - desc[idx].SemanticName = CStr(semantic); - desc[idx].SemanticIndex = attribute.Location; - desc[idx].Format = JulietToD3D12_VertexFormat[ToUnderlying(attribute.Format)]; - desc[idx].InputSlot = attribute.BufferSlot; - desc[idx].AlignedByteOffset = attribute.Offset; - desc[idx].InputSlotClass = - JulietToD3D12_InputRate[ToUnderlying(vertexInputState.VertexBufferDescriptions[attribute.BufferSlot].InputRate)]; - desc[idx].InstanceDataStepRate = - (vertexInputState.VertexBufferDescriptions[attribute.BufferSlot].InputRate == VertexInputRate::Instance) - ? vertexInputState.VertexBufferDescriptions[attribute.BufferSlot].InstanceStepRate - : 0; - } - - return true; - } - - bool ConvertRasterizerState(const RasterizerState& rasterizerState, D3D12_RASTERIZER_DESC& desc) - { - desc.FillMode = JulietToD3D12_FillMode[ToUnderlying(rasterizerState.FillMode)]; - desc.CullMode = JulietToD3D12_CullMode[ToUnderlying(rasterizerState.CullMode)]; - - switch (rasterizerState.FrontFace) - { - case FrontFace::CounterClockwise: desc.FrontCounterClockwise = TRUE; break; - case FrontFace::Clockwise: desc.FrontCounterClockwise = FALSE; break; - default: return false; - } - static_assert(ToUnderlying(FrontFace::Count) == 2); - - if (rasterizerState.EnableDepthBias) - { - desc.DepthBias = LRoundF(rasterizerState.DepthBiasConstantFactor); - desc.DepthBiasClamp = rasterizerState.DepthBiasClamp; - desc.SlopeScaledDepthBias = rasterizerState.DepthBiasSlopeFactor; - } - else - { - desc.DepthBias = 0; - desc.DepthBiasClamp = 0.0f; - desc.SlopeScaledDepthBias = 0.0f; - } - - desc.DepthClipEnable = rasterizerState.EnableDepthClip; - desc.MultisampleEnable = FALSE; - desc.AntialiasedLineEnable = FALSE; - desc.ForcedSampleCount = 0; - desc.ConservativeRaster = D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF; - return true; - } - - bool ConvertBlendState(const GraphicsPipelineCreateInfo& createInfo, D3D12_BLEND_DESC& blendDesc) - { - ZeroStruct(blendDesc); - blendDesc.AlphaToCoverageEnable = FALSE; - blendDesc.IndependentBlendEnable = FALSE; - - for (UINT i = 0; i < GPUDriver::kMaxColorTargetInfo; i += 1) - { - D3D12_RENDER_TARGET_BLEND_DESC rtBlendDesc; - rtBlendDesc.BlendEnable = FALSE; - rtBlendDesc.LogicOpEnable = FALSE; - rtBlendDesc.SrcBlend = D3D12_BLEND_ONE; - rtBlendDesc.DestBlend = D3D12_BLEND_ZERO; - rtBlendDesc.BlendOp = D3D12_BLEND_OP_ADD; - rtBlendDesc.SrcBlendAlpha = D3D12_BLEND_ONE; - rtBlendDesc.DestBlendAlpha = D3D12_BLEND_ZERO; - rtBlendDesc.BlendOpAlpha = D3D12_BLEND_OP_ADD; - rtBlendDesc.LogicOp = D3D12_LOGIC_OP_NOOP; - rtBlendDesc.RenderTargetWriteMask = D3D12_COLOR_WRITE_ENABLE_ALL; - - // If target_info has more blend states, you can set IndependentBlendEnable to TRUE and assign different blend states to each render target slot - if (i < createInfo.TargetInfo.NumColorTargets) - { - ColorTargetBlendState blendState = createInfo.TargetInfo.ColorTargetDescriptions[i].BlendState; - ColorComponentFlags colorWriteMask = - blendState.EnableColorWriteMask ? blendState.ColorWriteMask : static_cast(0xF); - - rtBlendDesc.BlendEnable = blendState.EnableBlend; - rtBlendDesc.SrcBlend = JulietToD3D12_BlendFactor[ToUnderlying(blendState.SourceColorBlendFactor)]; - rtBlendDesc.DestBlend = JulietToD3D12_BlendFactor[ToUnderlying(blendState.DestinationColorBlendFactor)]; - rtBlendDesc.BlendOp = JulietToD3D12_BlendOperation[ToUnderlying(blendState.ColorBlendOperation)]; - rtBlendDesc.SrcBlendAlpha = JulietToD3D12_BlendFactorAlpha[ToUnderlying(blendState.SourceAlphaBlendFactor)]; - rtBlendDesc.DestBlendAlpha = JulietToD3D12_BlendFactorAlpha[ToUnderlying(blendState.DestinationAlphaBlendFactor)]; - rtBlendDesc.BlendOpAlpha = JulietToD3D12_BlendOperation[ToUnderlying(blendState.AlphaBlendOperation)]; - rtBlendDesc.RenderTargetWriteMask = ToUnderlying(colorWriteMask); - - if (i > 0) - { - blendDesc.IndependentBlendEnable = TRUE; - } - } - - blendDesc.RenderTarget[i] = rtBlendDesc; - } - - return true; - } - - bool ConvertDepthStencilState(DepthStencilState depthStencilState, D3D12_DEPTH_STENCIL_DESC& desc) - { - desc.DepthEnable = depthStencilState.EnableDepthTest == true ? TRUE : FALSE; - desc.DepthWriteMask = depthStencilState.EnableDepthWrite == true ? D3D12_DEPTH_WRITE_MASK_ALL : D3D12_DEPTH_WRITE_MASK_ZERO; - desc.DepthFunc = JulietToD3D12_CompareOperation[ToUnderlying(depthStencilState.CompareOperation)]; - desc.StencilEnable = depthStencilState.EnableStencilTest == true ? TRUE : FALSE; - desc.StencilReadMask = depthStencilState.CompareMask; - desc.StencilWriteMask = depthStencilState.WriteMask; - - desc.FrontFace.StencilFailOp = - JulietToD3D12_StencilOperation[ToUnderlying(depthStencilState.FrontStencilState.FailOperation)]; - desc.FrontFace.StencilDepthFailOp = - JulietToD3D12_StencilOperation[ToUnderlying(depthStencilState.FrontStencilState.DepthFailOperation)]; - desc.FrontFace.StencilPassOp = - JulietToD3D12_StencilOperation[ToUnderlying(depthStencilState.FrontStencilState.PassOperation)]; - desc.FrontFace.StencilFunc = - JulietToD3D12_CompareOperation[ToUnderlying(depthStencilState.FrontStencilState.CompareOperation)]; - - desc.BackFace.StencilFailOp = - JulietToD3D12_StencilOperation[ToUnderlying(depthStencilState.BackStencilState.FailOperation)]; - desc.BackFace.StencilDepthFailOp = - JulietToD3D12_StencilOperation[ToUnderlying(depthStencilState.BackStencilState.DepthFailOperation)]; - desc.BackFace.StencilPassOp = - JulietToD3D12_StencilOperation[ToUnderlying(depthStencilState.BackStencilState.PassOperation)]; - desc.BackFace.StencilFunc = - JulietToD3D12_CompareOperation[ToUnderlying(depthStencilState.BackStencilState.CompareOperation)]; - - return true; - } - -#if ALLOW_SHADER_HOT_RELOAD - void CopyShader(NonNullPtr destination, NonNullPtr source) - { - D3D12Shader* src = source.Get(); - D3D12Shader* dst = destination.Get(); - - ByteBuffer dstBuffer = dst->ByteCode; - - if (src->ByteCode.Size != dstBuffer.Size) - { - dstBuffer.Data = static_cast(Realloc(dstBuffer.Data, src->ByteCode.Size)); - dstBuffer.Size = src->ByteCode.Size; - } - // Copy the shader data. Infortunately this will overwrite the bytecode if it exists so we patch it back just after - MemCopy(dst, src, sizeof(D3D12Shader)); - dst->ByteCode = dstBuffer; - - MemCopy(dst->ByteCode.Data, src->ByteCode.Data, src->ByteCode.Size); - } -#endif - - void ReleaseGraphicsPipeline(NonNullPtr d3d12GraphicsPipeline) - { - if (d3d12GraphicsPipeline->PipelineState) - { - d3d12GraphicsPipeline->PipelineState->Release(); - } - -#if ALLOW_SHADER_HOT_RELOAD - SafeFree(d3d12GraphicsPipeline->VertexShaderCache); - SafeFree(d3d12GraphicsPipeline->FragmentShaderCache); -#endif - - Free(d3d12GraphicsPipeline.Get()); - } - - GraphicsPipeline* D3D12_CreateGraphicsPipeline(NonNullPtr driver, const GraphicsPipelineCreateInfo& createInfo) - { - auto d3d12Driver = static_cast(driver.Get()); - auto vertexShader = reinterpret_cast(createInfo.VertexShader); - auto fragmentShader = reinterpret_cast(createInfo.FragmentShader); - - D3D12_GRAPHICS_PIPELINE_STATE_DESC psoDesc = {}; - psoDesc.VS.pShaderBytecode = vertexShader->ByteCode.Data; - psoDesc.VS.BytecodeLength = vertexShader->ByteCode.Size; - psoDesc.PS.pShaderBytecode = fragmentShader->ByteCode.Data; // PS == Pixel Shader == Fragment Shader - psoDesc.PS.BytecodeLength = fragmentShader->ByteCode.Size; - - if (createInfo.VertexInputState.NumVertexAttributes > 0) - { - D3D12_INPUT_ELEMENT_DESC inputElementDescs[D3D12_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT]; - psoDesc.InputLayout.pInputElementDescs = inputElementDescs; - psoDesc.InputLayout.NumElements = createInfo.VertexInputState.NumVertexAttributes; - ConvertVertexInputState(createInfo.VertexInputState, inputElementDescs, d3d12Driver->Semantic); - } - - psoDesc.PrimitiveTopologyType = JulietToD3D12_PrimitiveTopologyType[ToUnderlying(createInfo.PrimitiveType)]; - - if (!ConvertRasterizerState(createInfo.RasterizerState, psoDesc.RasterizerState)) - { - return nullptr; - } - if (!ConvertBlendState(createInfo, psoDesc.BlendState)) - { - return nullptr; - } - if (!ConvertDepthStencilState(createInfo.DepthStencilState, psoDesc.DepthStencilState)) - { - return nullptr; - } - - auto pipeline = static_cast(Calloc(1, sizeof(D3D12GraphicsPipeline))); - if (!pipeline) - { - return nullptr; - } - - uint32 sampleMask = createInfo.MultisampleState.EnableMask ? createInfo.MultisampleState.SampleMask : 0xFFFFFFFF; - - psoDesc.SampleMask = sampleMask; - psoDesc.SampleDesc.Count = JulietToD3D12_SampleCount[ToUnderlying(createInfo.MultisampleState.SampleCount)]; - psoDesc.SampleDesc.Quality = - (createInfo.MultisampleState.SampleCount > TextureSampleCount::One) ? DXGI_STANDARD_MULTISAMPLE_QUALITY_PATTERN : 0; - - psoDesc.DSVFormat = ConvertToD3D12DepthFormat(createInfo.TargetInfo.DepthStencilFormat); - psoDesc.NumRenderTargets = static_cast(createInfo.TargetInfo.NumColorTargets); - for (uint32_t idx = 0; idx < createInfo.TargetInfo.NumColorTargets; ++idx) - { - psoDesc.RTVFormats[idx] = ConvertToD3D12TextureFormat(createInfo.TargetInfo.ColorTargetDescriptions[idx].Format); - } - - // Assuming some default values or further initialization - psoDesc.Flags = D3D12_PIPELINE_STATE_FLAG_NONE; - psoDesc.CachedPSO.CachedBlobSizeInBytes = 0; - psoDesc.CachedPSO.pCachedBlob = nullptr; - - psoDesc.NodeMask = 0; - - pipeline->RootSignature = d3d12Driver->BindlessRootSignature; - psoDesc.pRootSignature = d3d12Driver->BindlessRootSignature->Handle; - - ID3D12PipelineState* pipelineState; - HRESULT res = d3d12Driver->D3D12Device->CreateGraphicsPipelineState(&psoDesc, IID_ID3D12PipelineState, - reinterpret_cast(&pipelineState)); - if (FAILED(res)) - { - D3D12_LogError(d3d12Driver->D3D12Device, "Could not create graphics pipeline state", res); - ReleaseGraphicsPipeline(pipeline); - return nullptr; - } - - pipeline->PipelineState = pipelineState; - - for (uint32 i = 0; i < createInfo.VertexInputState.NumVertexBufferDescriptions; i += 1) - { - pipeline->VertexStrides[createInfo.VertexInputState.VertexBufferDescriptions[i].Slot] = - createInfo.VertexInputState.VertexBufferDescriptions[i].PitchInBytes; - } - - pipeline->PrimitiveType = createInfo.PrimitiveType; - - pipeline->VertexSamplerCount = vertexShader->NumSamplers; - pipeline->VertexStorageTextureCount = vertexShader->NumStorageTextures; - pipeline->VertexStorageBufferCount = vertexShader->NumStorageBuffers; - pipeline->VertexUniformBufferCount = vertexShader->NumUniformBuffers; - - pipeline->FragmentSamplerCount = fragmentShader->NumSamplers; - pipeline->FragmentStorageTextureCount = fragmentShader->NumStorageTextures; - pipeline->FragmentStorageBufferCount = fragmentShader->NumStorageBuffers; - pipeline->FragmentUniformBufferCount = fragmentShader->NumUniformBuffers; - - pipeline->ReferenceCount = 0; - -#if ALLOW_SHADER_HOT_RELOAD - // Save the PSODesc and shaders to be able to recreate the graphics pipeline when needed - pipeline->PSODescTemplate = psoDesc; - - pipeline->VertexShaderCache = static_cast(Calloc(1, sizeof(D3D12Shader))); - pipeline->FragmentShaderCache = static_cast(Calloc(1, sizeof(D3D12Shader))); - CopyShader(pipeline->VertexShaderCache, vertexShader); - CopyShader(pipeline->FragmentShaderCache, fragmentShader); -#endif - - return reinterpret_cast(pipeline); - } - -#if ALLOW_SHADER_HOT_RELOAD - bool D3D12_UpdateGraphicsPipelineShaders(NonNullPtr driver, NonNullPtr graphicsPipeline, - Shader* optional_vertexShader, Shader* optional_fragmentShader) - { - auto d3d12Driver = static_cast(driver.Get()); - auto d3d12GraphicsPipeline = reinterpret_cast(graphicsPipeline.Get()); - - Assert(d3d12GraphicsPipeline->ReferenceCount == 0 && - "Trying to update a d3d12 graphics pipeline that is currently being used! Call WaitUntilGPUIsIdle " - "before updating!"); - - auto vertexShader = reinterpret_cast(optional_vertexShader); - auto fragmentShader = reinterpret_cast(optional_fragmentShader); - - if (!vertexShader) - { - vertexShader = d3d12GraphicsPipeline->VertexShaderCache; - } - - if (!fragmentShader) - { - fragmentShader = d3d12GraphicsPipeline->FragmentShaderCache; - } - - auto psoDesc = d3d12GraphicsPipeline->PSODescTemplate; - psoDesc.VS.pShaderBytecode = vertexShader->ByteCode.Data; - psoDesc.VS.BytecodeLength = vertexShader->ByteCode.Size; - psoDesc.PS.pShaderBytecode = fragmentShader->ByteCode.Data; - psoDesc.PS.BytecodeLength = fragmentShader->ByteCode.Size; - - psoDesc.pRootSignature = d3d12Driver->BindlessRootSignature->Handle; - - ID3D12PipelineState* pipelineState; - HRESULT res = d3d12Driver->D3D12Device->CreateGraphicsPipelineState(&psoDesc, IID_ID3D12PipelineState, - reinterpret_cast(&pipelineState)); - if (FAILED(res)) - { - D3D12_LogError(d3d12Driver->D3D12Device, "Could not create graphics pipeline state", res); - return false; - } - - d3d12GraphicsPipeline->VertexSamplerCount = vertexShader->NumSamplers; - d3d12GraphicsPipeline->VertexStorageTextureCount = vertexShader->NumStorageTextures; - d3d12GraphicsPipeline->VertexStorageBufferCount = vertexShader->NumStorageBuffers; - d3d12GraphicsPipeline->VertexUniformBufferCount = vertexShader->NumUniformBuffers; - - d3d12GraphicsPipeline->FragmentSamplerCount = fragmentShader->NumSamplers; - d3d12GraphicsPipeline->FragmentStorageTextureCount = fragmentShader->NumStorageTextures; - d3d12GraphicsPipeline->FragmentStorageBufferCount = fragmentShader->NumStorageBuffers; - d3d12GraphicsPipeline->FragmentUniformBufferCount = fragmentShader->NumUniformBuffers; - - // If everything worked, we patch the graphics pipeline and destroy everything irrelevant - if (d3d12GraphicsPipeline->PipelineState) - { - d3d12GraphicsPipeline->PipelineState->Release(); - } - d3d12GraphicsPipeline->PipelineState = pipelineState; - - if (vertexShader != d3d12GraphicsPipeline->VertexShaderCache) - { - CopyShader(d3d12GraphicsPipeline->VertexShaderCache, vertexShader); - } - if (fragmentShader != d3d12GraphicsPipeline->FragmentShaderCache) - { - CopyShader(d3d12GraphicsPipeline->FragmentShaderCache, fragmentShader); - } - - return true; - } -#endif - - // End Graphics Pipeline - - // Begin Descriptor Heap - void DestroyDescriptorHeap(NonNullPtr heap) - { - heap->FreeIndices.Destroy(); - if (heap->Handle) - { - heap->Handle->Release(); - } - } - - D3D12DescriptorHeap* CreateDescriptorHeap(NonNullPtr driver, D3D12_DESCRIPTOR_HEAP_TYPE type, uint32 count, bool isStaging) - { - D3D12DescriptorHeap* heap = ArenaPushStruct( - driver->DriverArena JULIET_DEBUG_PARAM("Descriptor Heap Type {}", CStr(GetDescriptorTypeNane(type)))); - Assert(heap); - - heap->CurrentDescriptorIndex = 0; - - heap->FreeIndices.Create(driver->DriverArena JULIET_DEBUG_PARAM("DescriptorHeap Free Indices")); - heap->FreeIndices.Resize(16); - heap->CurrentFreeIndex = 0; - - D3D12_DESCRIPTOR_HEAP_DESC heapDesc; - heapDesc.NumDescriptors = count; - heapDesc.Type = type; - heapDesc.Flags = isStaging ? D3D12_DESCRIPTOR_HEAP_FLAG_NONE : D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE; - heapDesc.NodeMask = 0; - - ID3D12DescriptorHeap* handle; - HRESULT result = - driver->D3D12Device->CreateDescriptorHeap(&heapDesc, IID_ID3D12DescriptorHeap, reinterpret_cast(&handle)); - if (FAILED(result)) - { - D3D12_LogError(driver->D3D12Device, "Failed to create descriptor heap!", result); - DestroyDescriptorHeap(heap); - return nullptr; - } - - heap->Handle = handle; - heap->HeapType = type; - heap->MaxDescriptors = count; - heap->Staging = isStaging; - heap->DescriptorSize = driver->D3D12Device->GetDescriptorHandleIncrementSize(type); - heap->DescriptorHeapCPUStart = handle->GetCPUDescriptorHandleForHeapStart(); - if (!isStaging) - { - heap->DescriptorHeapGPUStart = handle->GetGPUDescriptorHandleForHeapStart(); - } - - return heap; - } - - void CreateDescriptorHeapPool(NonNullPtr driver, D3D12DescriptorHeapPool& heapPool, - D3D12_DESCRIPTOR_HEAP_TYPE type, uint32 count) - { - // Heap pool is just single linked list of free elements - constexpr size_t kInitialCapacity = 4; - heapPool.FirstFreeDescriptorHeap = nullptr; - - // Pre allocate 4 - for (uint32 i = 0; i < kInitialCapacity; ++i) - { - D3D12DescriptorHeap* descriptorHeap = CreateDescriptorHeap(driver, type, count, false); - descriptorHeap->Next = heapPool.FirstFreeDescriptorHeap; - heapPool.FirstFreeDescriptorHeap = descriptorHeap; - } - } - - void D3D12_DestroyDescriptorHeapPool(D3D12DescriptorHeapPool& heapPool) - { - D3D12DescriptorHeap* current = heapPool.FirstFreeDescriptorHeap; - while (current != nullptr) - { - D3D12DescriptorHeap* next = current->Next; - DestroyDescriptorHeap(current); - current = next; - } - } - - bool AssignDescriptor(D3D12DescriptorHeap* heap, D3D12Descriptor& outDescriptor) - { - uint32 index = UINT32_MAX; - - if (heap->CurrentFreeIndex > 0) - { - heap->CurrentFreeIndex -= 1; - index = heap->FreeIndices[heap->CurrentFreeIndex]; - } - else if (heap->CurrentDescriptorIndex < heap->MaxDescriptors) - { - index = heap->CurrentDescriptorIndex; - heap->CurrentDescriptorIndex++; - } - else - { - Assert(false, "Descriptor Heap Full!"); - return false; - } - - outDescriptor.Heap = heap; - outDescriptor.Index = index; - outDescriptor.CpuHandle = heap->DescriptorHeapCPUStart; - outDescriptor.CpuHandle.ptr += heap->DescriptorSize * index; - outDescriptor.GpuHandle = heap->DescriptorHeapGPUStart; - outDescriptor.GpuHandle.ptr += heap->DescriptorSize * index; - - return true; - } - - void ReleaseDescriptor(const D3D12Descriptor& descriptor) - { - if (descriptor.Index == UINT32_MAX || descriptor.Heap == nullptr) - { - return; - } - - D3D12DescriptorHeap* heap = descriptor.Heap; - - if (heap->CurrentFreeIndex >= heap->FreeIndices.Count) - { - heap->FreeIndices.PushBack(descriptor.Index); - } - else - { - heap->FreeIndices[heap->CurrentFreeIndex] = descriptor.Index; - heap->CurrentFreeIndex++; - } - } - - D3D12DescriptorHeap* AcquireSamplerHeapFromPool(NonNullPtr d3d12Driver) - { - D3D12DescriptorHeapPool& pool = d3d12Driver->SamplerHeapPool; - - D3D12DescriptorHeap* result = pool.FirstFreeDescriptorHeap; - if (result) - { - pool.FirstFreeDescriptorHeap = pool.FirstFreeDescriptorHeap->Next; - } - else - { - result = CreateDescriptorHeap(d3d12Driver, D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER, - GPUDriver::kSampler_HeapDescriptorCount, false); - } - - return result; - } - - void D3D12_ReturnSamplerHeapToPool(NonNullPtr d3d12Driver, NonNullPtr heap) - { - D3D12DescriptorHeapPool& pool = d3d12Driver->SamplerHeapPool; - - heap->CurrentDescriptorIndex = 0; - - heap->Next = pool.FirstFreeDescriptorHeap; - pool.FirstFreeDescriptorHeap = heap; - } - // End Descriptor Heap - - // Begin Staging Descriptors - void InitStagingDescriptorPool(NonNullPtr heap, NonNullPtr pool) - { - for (uint32 idx = 0; idx < kStagingHeapDescriptorExpectedCount; ++idx) - { - pool->FreeDescriptors[idx].Pool = pool; - pool->FreeDescriptors[idx].Heap = heap.Get(); - pool->FreeDescriptors[idx].CpuHandleIndex = idx; - pool->FreeDescriptors[idx].CpuHandle.ptr = heap->DescriptorHeapCPUStart.ptr + (idx * heap->DescriptorSize); - } - } - - bool ExtendStagingDescriptorPool(NonNullPtr driver, D3D12StagingDescriptorPool& pool) - { - D3D12DescriptorHeap* heap = - CreateDescriptorHeap(driver, pool.Heaps[0]->HeapType, kStagingHeapDescriptorExpectedCount, true); - if (!heap) - { - return false; - } - - pool.HeapCount += 1; - pool.Heaps = static_cast(Realloc(pool.Heaps, pool.HeapCount * sizeof(D3D12DescriptorHeap*))); - pool.Heaps[pool.HeapCount - 1] = heap; - - pool.FreeDescriptorCapacity += kStagingHeapDescriptorExpectedCount; - pool.FreeDescriptorCount += kStagingHeapDescriptorExpectedCount; - pool.FreeDescriptors = static_cast( - Realloc(pool.FreeDescriptors, pool.FreeDescriptorCapacity * sizeof(D3D12StagingDescriptor))); - - InitStagingDescriptorPool(heap, &pool); - - return true; - } - - D3D12StagingDescriptorPool* CreateStagingDescriptorPool(NonNullPtr driver, D3D12_DESCRIPTOR_HEAP_TYPE type) - { - D3D12DescriptorHeap* heap = CreateDescriptorHeap(driver, type, kStagingHeapDescriptorExpectedCount, true); - if (!heap) - { - return nullptr; - } - - auto pool = static_cast(Calloc(1, sizeof(D3D12StagingDescriptorPool))); - - // First create the heaps - pool->HeapCount = 1; - pool->Heaps = static_cast(Malloc(sizeof(D3D12DescriptorHeap*))); - pool->Heaps[0] = heap; - - pool->FreeDescriptorCapacity = kStagingHeapDescriptorExpectedCount; - pool->FreeDescriptorCount = kStagingHeapDescriptorExpectedCount; - pool->FreeDescriptors = - static_cast(Malloc(kStagingHeapDescriptorExpectedCount * sizeof(D3D12StagingDescriptor))); - - InitStagingDescriptorPool(heap, pool); - - return pool; - } - - bool AssignStagingDescriptor(NonNullPtr driver, D3D12_DESCRIPTOR_HEAP_TYPE type, D3D12StagingDescriptor& outDescriptor) - { - // TODO: Make it thread safe - D3D12StagingDescriptor* descriptor = nullptr; - D3D12StagingDescriptorPool* pool = driver->StagingDescriptorPools[type]; - - if (pool->FreeDescriptorCount == 0) - { - if (!ExtendStagingDescriptorPool(driver, *pool)) - { - return false; - } - } - - descriptor = &pool->FreeDescriptors[pool->FreeDescriptorCount - 1]; - MemCopy(&outDescriptor, descriptor, sizeof(D3D12StagingDescriptor)); - pool->FreeDescriptorCount -= 1; - - return true; - } - - void ReleaseStagingDescriptor(NonNullPtr /*driver*/, D3D12StagingDescriptor& cpuDescriptor) - { - D3D12StagingDescriptorPool* pool = cpuDescriptor.Pool; - - if (pool != nullptr) - { - MemCopy(&pool->FreeDescriptors[pool->FreeDescriptorCount], &cpuDescriptor, sizeof(D3D12StagingDescriptor)); - pool->FreeDescriptorCount += 1; - } - } - - void DestroyStagingDescriptorPool(NonNullPtr pool) - { - for (uint32 i = 0; i < pool->HeapCount; i += 1) - { - DestroyDescriptorHeap(pool->Heaps[i]); - } - - Free(pool->Heaps); - Free(pool->FreeDescriptors); - - Free(pool.Get()); - } - // End Staging Descriptors - - // Begin Buffers - // Linked List of free buffers - D3D12Buffer* FreeBuffers = nullptr; - - enum class D3D12BufferType : uint8 - { - Base, - TransferDownload, - TransferUpload, - }; - - [[nodiscard]] const char* D3D12BufferTypeToString(D3D12BufferType type) - { - switch (type) - { - case D3D12BufferType::Base: return "Base"; - case D3D12BufferType::TransferDownload: return "TransferDownload"; - case D3D12BufferType::TransferUpload: return "TransferUpload"; - } - return "Unknown"; - } - - [[nodiscard]] const char* BufferUsageToString(BufferUsage usage) - { - switch (usage) - { - case BufferUsage::None: return "None"; - case BufferUsage::ConstantBuffer: return "ConstantBuffer"; - case BufferUsage::StructuredBuffer: return "StructuredBuffer"; - case BufferUsage::IndexBuffer: return "IndexBuffer"; - } - return "Unknown"; - } - - void DestroyBuffer(D3D12Buffer* buffer) - { - if (!buffer) - { - return; - } - - if (buffer->Descriptor.Index != UINT32_MAX) - { - ReleaseDescriptor(buffer->Descriptor); - } - buffer->Descriptor = {}; - - if (buffer->Handle) - { - buffer->Handle->Release(); - buffer->Handle = nullptr; - } - buffer->CurrentState = D3D12_RESOURCE_STATE_COMMON; - buffer->Size = 0; - - buffer->Next = FreeBuffers; - FreeBuffers = buffer; - } - - D3D12Buffer* CreateBuffer(NonNullPtr d3d12Driver, size_t size, size_t stride, BufferUsage usage, - D3D12BufferType type, bool isDynamic) - { - D3D12Buffer* buffer = nullptr; - if (FreeBuffers) - { - buffer = FreeBuffers; - FreeBuffers = buffer->Next; - buffer->Next = nullptr; - } - - if (!buffer) - { - buffer = ArenaPushStruct(d3d12Driver->DriverArena JULIET_DEBUG_PARAM("D3D12Buffer")); - } - - if (!buffer) - { - return nullptr; - } - - if (type == D3D12BufferType::Base && usage == BufferUsage::None) - { - Assert(false, "Creating Base buffer with BufferUsage::None is invalid"); - DestroyBuffer(buffer); - return nullptr; - } - - // Align size for Constant Buffers - if (usage == BufferUsage::ConstantBuffer) - { - size = (size + 255U) & ~255U; - } - - D3D12_HEAP_PROPERTIES heapProperties = {}; - heapProperties.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; - heapProperties.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; - - D3D12_RESOURCE_STATES initialState = D3D12_RESOURCE_STATE_COMMON; - D3D12_HEAP_FLAGS heapFlags = D3D12_HEAP_FLAG_NONE; - - // Constant buffers or Dynamic buffers generally need to be uploaded every frame - const bool isUpload = isDynamic || (type == D3D12BufferType::TransferUpload) || (usage == BufferUsage::ConstantBuffer); - - if (type == D3D12BufferType::TransferDownload) - { - heapProperties.Type = D3D12_HEAP_TYPE_READBACK; - initialState = D3D12_RESOURCE_STATE_COPY_DEST; - } - else if (isUpload) - { - if (d3d12Driver->GPUUploadHeapSupported) - { - heapProperties.Type = D3D12_HEAP_TYPE_GPU_UPLOAD; - initialState = D3D12_RESOURCE_STATE_COMMON; - } - else - { - heapProperties.Type = D3D12_HEAP_TYPE_UPLOAD; - initialState = D3D12_RESOURCE_STATE_GENERIC_READ; - } - } - else - { - // Must be a static buffer (Base type) - heapProperties.Type = D3D12_HEAP_TYPE_DEFAULT; - initialState = D3D12_RESOURCE_STATE_COMMON; - } - - D3D12_RESOURCE_DESC desc = {}; - desc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; - desc.Alignment = 0; - desc.Width = size; - desc.Height = 1; - desc.DepthOrArraySize = 1; - desc.MipLevels = 1; - desc.Format = DXGI_FORMAT_UNKNOWN; - desc.SampleDesc.Count = 1; - desc.SampleDesc.Quality = 0; - desc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; - desc.Flags = D3D12_RESOURCE_FLAG_NONE; - - Log(LogLevel::Message, LogCategory::Graphics, "CreateBuffer: Device=%p, Size=%zu, Type=%s Use=%s", - (void*)d3d12Driver->D3D12Device, size, D3D12BufferTypeToString(type), BufferUsageToString(usage)); - - ID3D12Resource* handle = nullptr; - HRESULT result = - d3d12Driver->D3D12Device->CreateCommittedResource(&heapProperties, heapFlags, &desc, initialState, nullptr, - IID_ID3D12Resource, reinterpret_cast(&handle)); - - if (FAILED(result)) - { - Log(LogLevel::Error, LogCategory::Graphics, "Could not create buffer! HRESULT=0x%08X", static_cast(result)); - Log(LogLevel::Error, LogCategory::Graphics, "Failed Desc: Width=%llu Layout=%d HeapType=%d", - (unsigned long long)desc.Width, (int)desc.Layout, (int)heapProperties.Type); - - HRESULT removeReason = d3d12Driver->D3D12Device->GetDeviceRemovedReason(); - if (FAILED(removeReason)) - { - Log(LogLevel::Error, LogCategory::Graphics, "Device Removed Reason: 0x%08X", static_cast(removeReason)); - } - - DestroyBuffer(buffer); - return nullptr; - } - - buffer->Handle = handle; - buffer->CurrentState = initialState; - buffer->Descriptor.Index = UINT32_MAX; - buffer->Size = size; - - if (usage == BufferUsage::ConstantBuffer || usage == BufferUsage::StructuredBuffer) - { - auto& heap = d3d12Driver->BindlessDescriptorHeap; - - D3D12Descriptor descriptor; - if (AssignDescriptor(heap, descriptor)) - { - buffer->Descriptor = descriptor; - - D3D12_CPU_DESCRIPTOR_HANDLE cpuHandle = descriptor.CpuHandle; - - if (usage == BufferUsage::ConstantBuffer) - { - D3D12_CONSTANT_BUFFER_VIEW_DESC cbvDesc = {}; - cbvDesc.BufferLocation = handle->GetGPUVirtualAddress(); - cbvDesc.SizeInBytes = static_cast(size); - d3d12Driver->D3D12Device->CreateConstantBufferView(&cbvDesc, cpuHandle); - } - else if (usage == BufferUsage::StructuredBuffer) - { - D3D12_SHADER_RESOURCE_VIEW_DESC srvDesc = {}; - srvDesc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER; - srvDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; - srvDesc.Buffer.FirstElement = 0; - - if (stride > 0) - { - srvDesc.Format = DXGI_FORMAT_UNKNOWN; - srvDesc.Buffer.NumElements = static_cast(size / stride); - srvDesc.Buffer.StructureByteStride = static_cast(stride); - srvDesc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_NONE; - } - else - { - srvDesc.Format = DXGI_FORMAT_R32_TYPELESS; - srvDesc.Buffer.NumElements = static_cast(size / 4); - srvDesc.Buffer.StructureByteStride = 0; - srvDesc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_RAW; - } - - d3d12Driver->D3D12Device->CreateShaderResourceView(handle, &srvDesc, cpuHandle); - Log(LogLevel::Message, LogCategory::Graphics, " -> SRV DescriptorIndex=%u", descriptor.Index); - } - } - else - { - LogError(LogCategory::Graphics, "Bindless Heap Full or Invalid!"); - } - } - - return buffer; - } - - GraphicsBuffer* D3D12_CreateGraphicsBuffer(NonNullPtr driver, size_t size, size_t stride, BufferUsage usage, bool isDynamic) - { - auto d3d12Driver = static_cast(driver.Get()); - return reinterpret_cast(CreateBuffer(d3d12Driver, size, stride, usage, D3D12BufferType::Base, isDynamic)); - } - - void D3D12_DestroyGraphicsBuffer(NonNullPtr buffer) - { - DestroyBuffer(reinterpret_cast(buffer.Get())); - } - - GraphicsTransferBuffer* D3D12_CreateGraphicsTransferBuffer(NonNullPtr driver, size_t size, TransferBufferUsage usage) - { - auto d3d12Driver = static_cast(driver.Get()); - return reinterpret_cast( - CreateBuffer(d3d12Driver, size, 0, BufferUsage::None, - usage == TransferBufferUsage::Upload ? D3D12BufferType::TransferUpload : D3D12BufferType::TransferDownload, - false)); - } - - void D3D12_DestroyGraphicsTransferBuffer(NonNullPtr buffer) - { - DestroyBuffer(reinterpret_cast(buffer.Get())); - } - - void* D3D12_MapBuffer(NonNullPtr /*driver*/, NonNullPtr buffer) - { - auto d3d12Buffer = reinterpret_cast(buffer.Get()); - void* ptr = nullptr; - - // 0-0 range means we don't intend to read anything. - D3D12_RANGE readRange = { 0, 0 }; - if (FAILED(d3d12Buffer->Handle->Map(0, &readRange, &ptr))) - { - return nullptr; - } - return ptr; - } - - void D3D12_UnmapBuffer(NonNullPtr /*driver*/, NonNullPtr buffer) - { - auto d3d12Buffer = reinterpret_cast(buffer.Get()); - d3d12Buffer->Handle->Unmap(0, nullptr); - } - - void* D3D12_MapBuffer(NonNullPtr /*driver*/, NonNullPtr buffer) - { - auto d3d12Buffer = reinterpret_cast(buffer.Get()); - void* ptr = nullptr; - D3D12_RANGE readRange = { 0, 0 }; - if (FAILED(d3d12Buffer->Handle->Map(0, &readRange, &ptr))) - { - return nullptr; - } - return ptr; - } - - void D3D12_UnmapBuffer(NonNullPtr /*driver*/, NonNullPtr buffer) - { - auto d3d12Buffer = reinterpret_cast(buffer.Get()); - d3d12Buffer->Handle->Unmap(0, nullptr); - } - - uint32 GetDescriptorIndex(NonNullPtr /*driver*/, NonNullPtr buffer) - { - auto d3d12Buffer = reinterpret_cast(buffer.Get()); - return d3d12Buffer->Descriptor.Index; - } - - void D3D12_CopyBuffer(NonNullPtr commandList, NonNullPtr dst, - NonNullPtr src, size_t size, size_t dstOffset, size_t srcOffset) - { - auto d3d12CmdList = reinterpret_cast(commandList.Get()); - auto d3d12Dst = reinterpret_cast(dst.Get()); - auto d3d12Src = reinterpret_cast(src.Get()); - - // Transition DST to COPY_DEST if needed - if (d3d12Dst->CurrentState != D3D12_RESOURCE_STATE_COPY_DEST) - { - D3D12_RESOURCE_BARRIER barrier = {}; - barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; - barrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; - barrier.Transition.pResource = d3d12Dst->Handle; - barrier.Transition.StateBefore = d3d12Dst->CurrentState; - barrier.Transition.StateAfter = D3D12_RESOURCE_STATE_COPY_DEST; - barrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; - - d3d12CmdList->GraphicsCommandList.CommandList->ResourceBarrier(1, &barrier); - d3d12Dst->CurrentState = D3D12_RESOURCE_STATE_COPY_DEST; - } - - // Src is Upload Buffer, usually effectively GenericRead/Common but for Upload heaps it's simpler. - // We assume Upload buffers are always in state GENERIC_READ or similar suitable for CopySrc. - // D3D12 Upload heaps start in GENERIC_READ and cannot transition. - - d3d12CmdList->GraphicsCommandList.CommandList->CopyBufferRegion(d3d12Dst->Handle, dstOffset, d3d12Src->Handle, - srcOffset, size); - } - - void D3D12_TransitionBufferToReadable(NonNullPtr commandList, NonNullPtr buffer) - { - auto d3d12CmdList = reinterpret_cast(commandList.Get()); - auto d3d12Buffer = reinterpret_cast(buffer.Get()); - - D3D12_RESOURCE_STATES neededState = D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE | D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE; - - if (d3d12Buffer->CurrentState != neededState) - { - D3D12_RESOURCE_BARRIER barrier = {}; - barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; - barrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; - barrier.Transition.pResource = d3d12Buffer->Handle; - barrier.Transition.StateBefore = d3d12Buffer->CurrentState; - barrier.Transition.StateAfter = neededState; - barrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; - - d3d12CmdList->GraphicsCommandList.CommandList->ResourceBarrier(1, &barrier); - d3d12Buffer->CurrentState = neededState; - } - } - // End Buffers - - // Begin Fences - void DisposePendingResourcces(NonNullPtr driver) - { - // TODO Destroy anything (buffer, texture, etc...) - uint32 idx = 0; - while (idx < driver->GraphicsPipelinesToDisposeCount) - { - if (driver->GraphicsPipelinesToDispose[idx]->ReferenceCount == 0) - { - ReleaseGraphicsPipeline(driver->GraphicsPipelinesToDispose[idx]); - - driver->GraphicsPipelinesToDispose[idx] = - driver->GraphicsPipelinesToDispose[driver->GraphicsPipelinesToDisposeCount - 1]; - driver->GraphicsPipelinesToDisposeCount -= 1; - } - else - { - idx++; - } - } - } - - void ReleaseFenceToPool(NonNullPtr driver, NonNullPtr fence) - { - Assert(driver->AvailableFenceCount + 1 <= driver->AvailableFenceCapacity); - - driver->AvailableFences[driver->AvailableFenceCount] = fence; - driver->AvailableFenceCount += 1; - - LogDebug(LogCategory::Graphics, "ReleaseFenceToPool %x fence. Handle %x | Event %x | Refcount %d", fence.Get(), - fence->Handle, fence->Event, fence->ReferenceCount); - } - - void D3D12_ReleaseFence(NonNullPtr driver, NonNullPtr fence JULIET_DEBUG_PARAM(String querier)) - { - auto d3d12driver = static_cast(driver.Get()); - auto d3d12Fence = reinterpret_cast(fence.Get()); - -#if JULIET_DEBUG - LogDebug(LogCategory::Graphics, "ReleaseFence | %x fence. Handle %x | Event %x | Refcount %d | Querier %s", - d3d12Fence, d3d12Fence->Handle, d3d12Fence->Event, d3d12Fence->ReferenceCount, CStr(querier)); -#endif - if (--d3d12Fence->ReferenceCount == 0) - { - ReleaseFenceToPool(d3d12driver, d3d12Fence); - } - } - - D3D12Fence* D3D12_AcquireFence(NonNullPtr driver JULIET_DEBUG_PARAM(String querier)) - { - D3D12Fence* fence; - ID3D12Fence* handle; - - // TODO :Thread safe (lock + atomic) - - if (driver->AvailableFenceCount == 0) - { - HRESULT result = driver->D3D12Device->CreateFence(D3D12_FENCE_UNSIGNALED_VALUE, D3D12_FENCE_FLAG_NONE, - IID_ID3D12Fence, reinterpret_cast(&handle)); - if (FAILED(result)) - { - D3D12_LogError(driver->D3D12Device, "Failed to create fence!", result); - return nullptr; - } - - fence = ArenaPushStruct(driver->DriverArena JULIET_DEBUG_PARAM("D3D12Fence")); - if (!fence) - { - handle->Release(); - - return nullptr; - } - fence->Handle = handle; - fence->Event = CreateEvent(nullptr, false, false, nullptr); - fence->ReferenceCount = 0; -#if JULIET_DEBUG - LogDebug(LogCategory::Graphics, "Acquire Querier %s | Setting Signal to 0 NEW fence", CStr(querier)); -#endif - } - else - { - fence = driver->AvailableFences[driver->AvailableFenceCount - 1]; - driver->AvailableFenceCount -= 1; - fence->Handle->Signal(D3D12_FENCE_UNSIGNALED_VALUE); -#if JULIET_DEBUG - LogDebug(LogCategory::Graphics, "Acquire Querier %s | Setting Signal to 0, RECYCLING", CStr(querier)); -#endif - } - - fence->ReferenceCount += 1; - Assert(fence->ReferenceCount == 1); - -#if JULIET_DEBUG - LogDebug(LogCategory::Graphics, "Acquire Querier %s | %x fence. Handle %x | Event %x | Refcount %d", - CStr(querier), fence, fence->Handle, fence->Event, fence->ReferenceCount); -#endif - - return fence; - } - - bool D3D12_CleanCommandList(NonNullPtr driver, NonNullPtr commandList, bool cancel) - { - // No more presentation data - commandList->PresentDataCount = 0; - - HRESULT result = commandList->GraphicsCommandList.Allocator->Reset(); - if (FAILED(result)) - { - D3D12_LogError(driver->D3D12Device, "Could not reset command allocator", result); - return false; - } - - result = commandList->GraphicsCommandList.CommandList->Reset(commandList->GraphicsCommandList.Allocator, nullptr); - if (FAILED(result)) - { - D3D12_LogError(driver->D3D12Device, "Could not reset command list", result); - return false; - } - - if (commandList->Sampler_Heap) [[likely]] - { - D3D12_ReturnSamplerHeapToPool(driver, commandList->Sampler_Heap); - commandList->Sampler_Heap = nullptr; - } - commandList->CRB_SRV_UAV_Heap = nullptr; - - // Clean up resource tracking - for (uint32 idx = 0; idx < commandList->UsedTextureCount; ++idx) - { - --commandList->UsedTextures[idx]->ReferenceCount; - } - commandList->UsedTextureCount = 0; - - for (uint32 idx = 0; idx < commandList->UsedGraphicsPipelineCount; ++idx) - { - --commandList->UsedGraphicsPipelines[idx]->ReferenceCount; - } - commandList->UsedGraphicsPipelineCount = 0; - - // Release Fence if needed - if (commandList->AutoReleaseFence) - { - D3D12_ReleaseFence(driver.Get(), reinterpret_cast(commandList->InFlightFence) - JULIET_DEBUG_PARAM(ConstString("CleanCommandList"))); - commandList->InFlightFence = nullptr; - } - - // Return the command list to the pool - Assert(driver->AvailableCommandListCount + 1 <= driver->AvailableCommandListCapacity); - driver->AvailableCommandLists[driver->AvailableCommandListCount] = commandList; - driver->AvailableCommandListCount += 1; - - // Remove this command list from the submitted list - if (!cancel) - { - for (uint32 idx = 0; idx < driver->SubmittedCommandListCount; idx += 1) - { - if (driver->SubmittedCommandLists[idx] == commandList) - { - driver->SubmittedCommandLists[idx] = driver->SubmittedCommandLists[driver->SubmittedCommandListCount - 1]; - driver->SubmittedCommandListCount -= 1; - break; - } - } - } - - return true; - } - - bool D3D12_WaitUntilGPUIsIdle(NonNullPtr driver) - { - auto d3d12driver = static_cast(driver.Get()); - D3D12Fence* fence = D3D12_AcquireFence(d3d12driver JULIET_DEBUG_PARAM(ConstString("WaitUntilGPUIsIdle"))); - if (!fence) - { - return false; - } - - if (d3d12driver->GraphicsQueue) - { - // Insert a signal into the end of the command queue... - d3d12driver->GraphicsQueue->Signal(fence->Handle, D3D12_FENCE_SIGNAL_VALUE); - - // ...and then block on it. - if (fence->Handle->GetCompletedValue() != D3D12_FENCE_SIGNAL_VALUE) - { - HRESULT result = fence->Handle->SetEventOnCompletion(D3D12_FENCE_SIGNAL_VALUE, fence->Event); - if (FAILED(result)) - { - D3D12_LogError(d3d12driver->D3D12Device, "Setting fence event failed!", result); - return false; - } - - DWORD waitResult = WaitForSingleObject(fence->Event, INFINITE); - if (waitResult == WAIT_FAILED) - { - D3D12_LogError(d3d12driver->D3D12Device, "Wait failed!", result); - return false; - } - } - } - - D3D12_ReleaseFence(driver, - reinterpret_cast(fence) JULIET_DEBUG_PARAM(ConstString("WaitUntilGPUIsIdle"))); - - bool result = true; - - // Clean up - { - int32 idx = 0; - while (idx < d3d12driver->SubmittedCommandListCount) - { - result &= D3D12_CleanCommandList(d3d12driver, d3d12driver->SubmittedCommandLists[idx], false); - // CleanCommandList swaps [idx] with last and decrements count. - // Don't increment — re-check the swapped-in element. - } - } - - DisposePendingResourcces(d3d12driver); - - return result; - } - - bool Wait(NonNullPtr driver, bool waitForAll, Fence* const* fences, uint32 numFences JULIET_DEBUG_PARAM(String querier)) - { - auto d3d12driver = static_cast(driver.Get()); - - TempArena tempArena = ArenaTempBegin(d3d12driver->DriverArena); - - HANDLE* events = - ArenaPushArray(tempArena.Arena, numFences JULIET_DEBUG_PARAM("Wait() HANDLE - JUST IN CASE")); - MemoryZero(events, sizeof(HANDLE) * numFences); - - for (uint32 i = 0; i < numFences; ++i) - { - D3D12Fence* fence = reinterpret_cast(fences[i]); - - HRESULT res = fence->Handle->SetEventOnCompletion(D3D12_FENCE_SIGNAL_VALUE, fence->Event); - if (FAILED(res)) - { - D3D12_LogError(d3d12driver->D3D12Device, "Setting fence event failed!", res); - ArenaTempEnd(tempArena); - return false; - } - - events[i] = fence->Event; - } -#if JULIET_DEBUG - LogDebug(LogCategory::Graphics, "Waiting for %d fences. Querier %s", numFences, CStr(querier)); -#endif - for (uint32 i = 0; i < numFences; ++i) - { - D3D12Fence* d3d12fence = reinterpret_cast(fences[i]); - LogDebug(LogCategory::Graphics, "Waiting for %x fence. Handle %x | Event %x | Refcount %d", d3d12fence, - d3d12fence->Handle, d3d12fence->Event, d3d12fence->ReferenceCount); - } - - DWORD waitResult = WaitForMultipleObjects(numFences, events, waitForAll, INFINITE); - - ArenaTempEnd(tempArena); - - if (waitResult == WAIT_FAILED) - { - LogError(LogCategory::Graphics, "Wait failed"); - return false; - } - - bool result = true; - - // Clean up - { - int32 idx = 0; - while (idx < d3d12driver->SubmittedCommandListCount) - { - uint64 fenceValue = d3d12driver->SubmittedCommandLists[idx]->InFlightFence->Handle->GetCompletedValue(); - if (fenceValue == D3D12_FENCE_SIGNAL_VALUE) - { - result &= D3D12_CleanCommandList(d3d12driver, d3d12driver->SubmittedCommandLists[idx], false); - } - else - { - idx += 1; - } - } - } - - DisposePendingResourcces(d3d12driver); - - return result; - } - - bool D3D12_QueryFence(NonNullPtr /*driver*/, NonNullPtr /*fence*/) - { - Unimplemented(); - return true; - } - - void ResourceBarrier(NonNullPtr commandList, D3D12_RESOURCE_STATES sourceState, - D3D12_RESOURCE_STATES destinationState, ID3D12Resource* resource, uint32 subresourceIndex, bool needsUavBarrier) - { - D3D12_RESOURCE_BARRIER barrierDesc[2]; - uint32 numBarriers = 0; - - // No transition barrier is needed if the state is not changing. - if (sourceState != destinationState) - { - barrierDesc[numBarriers].Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; - barrierDesc[numBarriers].Flags = static_cast(0); - barrierDesc[numBarriers].Transition.StateBefore = sourceState; - barrierDesc[numBarriers].Transition.StateAfter = destinationState; - barrierDesc[numBarriers].Transition.pResource = resource; - barrierDesc[numBarriers].Transition.Subresource = subresourceIndex; - - numBarriers += 1; - } - - if (needsUavBarrier) - { - barrierDesc[numBarriers].Type = D3D12_RESOURCE_BARRIER_TYPE_UAV; - barrierDesc[numBarriers].Flags = static_cast(0); - barrierDesc[numBarriers].UAV.pResource = resource; - - numBarriers += 1; - } - - if (numBarriers > 0) - { - commandList->GraphicsCommandList.CommandList->ResourceBarrier(numBarriers, barrierDesc); - } - } - - void DestroyFence(NonNullPtr fence) - { - if (fence->Handle) - { - fence->Handle->Release(); - } - - if (fence->Event) - { - CloseHandle(fence->Event); - } - } - // End Fences - - // Begin Swapchain - bool CreateSwapChainTexture(NonNullPtr driver, NonNullPtr swapChain, - SwapChainComposition composition, NonNullPtr textureContainer, uint8 index) - { - ID3D12Resource* swapChainTexture = nullptr; - HRESULT result = swapChain->GetBuffer(index, IID_ID3D12Resource, reinterpret_cast(&swapChainTexture)); - if (FAILED(result)) - { - D3D12_LogError(driver->D3D12Device, "Cannot get buffer from SwapChain", result); - return false; - } - - auto texture = static_cast(Calloc(1, sizeof(D3D12Texture))); - if (!texture) - { - D3D12_LogError(driver->D3D12Device, "Cannot allocate D3D12Texture (out of memory)", result); - swapChainTexture->Release(); - return false; - } - - texture->ReferenceCount += 1; - texture->SubresourceCount = 1; - texture->Subresources = static_cast(Calloc(1, sizeof(D3D12TextureSubresource))); - if (!texture->Subresources) - { - D3D12_LogError(driver->D3D12Device, "Cannot allocate D3D12TextureSubresource (out of memory)", result); - Free(texture); - swapChainTexture->Release(); - return false; - } - texture->Subresources[0].RTVHandles = static_cast(Calloc(1, sizeof(D3D12StagingDescriptor))); - texture->Subresources[0].UAVHandle.Heap = nullptr; - texture->Subresources[0].UAVHandle.Heap = nullptr; - texture->Subresources[0].Parent = texture; - texture->Subresources[0].Index = 0; - texture->Subresources[0].Layer = 0; - texture->Subresources[0].Depth = 1; - texture->Subresources[0].Level = 0; - - D3D12_RESOURCE_DESC textureDesc = swapChainTexture->GetDesc(); - textureContainer->Header.CreateInfo.Width = static_cast(textureDesc.Width); - textureContainer->Header.CreateInfo.Height = static_cast(textureDesc.Height); - textureContainer->Header.CreateInfo.LayerCount = 1; - textureContainer->Header.CreateInfo.MipLevelCount = 1; - textureContainer->Header.CreateInfo.Type = TextureType::Texture_2D; - textureContainer->Header.CreateInfo.Flags = TextureUsageFlag::ColorTarget; - textureContainer->Header.CreateInfo.SampleCount = TextureSampleCount::One; - textureContainer->Header.CreateInfo.Format = SwapchainCompositionToJulietTextureFormat[ToUnderlying(composition)]; - - textureContainer->Textures = static_cast(Calloc(1, sizeof(D3D12Texture*))); - if (!textureContainer->Textures) - { - Free(texture->Subresources); - Free(texture); - swapChainTexture->Release(); - return false; - } - - textureContainer->Capacity = 1; - textureContainer->Count = 1; - textureContainer->Textures[0] = texture; - textureContainer->ActiveTexture = texture; - textureContainer->CanBeCycled = false; - - texture->Container = textureContainer; - texture->IndexInContainer = 0; - - // Assign RTV to the swapchain texture - DXGI_FORMAT swapchainFormat = SwapchainCompositionToTextureFormat[ToUnderlying(composition)]; - AssignStagingDescriptor(driver, D3D12_DESCRIPTOR_HEAP_TYPE_RTV, texture->Subresources[0].RTVHandles[0]); - D3D12_RENDER_TARGET_VIEW_DESC rtvDesc; - rtvDesc.Format = (composition == SwapChainComposition::SDR_LINEAR) ? DXGI_FORMAT_B8G8R8A8_UNORM_SRGB : swapchainFormat; - rtvDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2D; - rtvDesc.Texture2D.MipSlice = 0; - rtvDesc.Texture2D.PlaneSlice = 0; - - driver->D3D12Device->CreateRenderTargetView(swapChainTexture, &rtvDesc, texture->Subresources[0].RTVHandles[0].CpuHandle); - - swapChainTexture->Release(); - - return true; - } - - bool D3D12_AcquireSwapChainTexture(bool block, NonNullPtr commandList, NonNullPtr window, Texture** swapchainTexture) - { - auto d3d12CommandList = reinterpret_cast(commandList.Get()); - - auto* driver = d3d12CommandList->Driver; - Assert(driver->WindowData); - - // TODO: Find a way to fetch window data more smoothly from the window ptr - // In the mean time i will just void it or the variable is unused and cause a warning - (void)window; - auto* windowData = driver->WindowData; - Assert(windowData->Window == window.Get()); - - if (windowData->InFlightFences[windowData->WindowFrameCounter] != nullptr) - { - if (block) - { - // Wait until the fence for the frame is signaled. - // In VSYNC this means waiting that the least recent presented frame is done - if (!Wait(driver, true, &windowData->InFlightFences[windowData->WindowFrameCounter], - 1 JULIET_DEBUG_PARAM(ConstString("AcquireSwapChainTexture")))) - { - return false; - } - } - else - { - // If work is not done, the least recent fence wont be signaled. - // In that case we return true to notify that there is no error, but rendering should be skipped as their will be no swapchainTexture - if (!D3D12_QueryFence(driver, windowData->InFlightFences[windowData->WindowFrameCounter])) - { - return true; - } - } - - D3D12_ReleaseFence(driver, windowData->InFlightFences[windowData->WindowFrameCounter] JULIET_DEBUG_PARAM( - ConstString("AcquireSwapChainTexture"))); - windowData->InFlightFences[windowData->WindowFrameCounter] = nullptr; - } - - uint32 swapchainIndex = windowData->SwapChain->GetCurrentBackBufferIndex(); - HRESULT result = windowData->SwapChain->GetBuffer( - swapchainIndex, IID_ID3D12Resource, - reinterpret_cast(&windowData->SwapChainTextureContainers[swapchainIndex].ActiveTexture->Resource)); - if (FAILED(result)) - { - D3D12_LogError(driver->D3D12Device, "Could not acquire swapchain", result); - return false; - } - - // When the swap chain texture is acquired it's time to present - Assert(d3d12CommandList->PresentDataCount + 1 <= d3d12CommandList->PresentDataCapacity); - d3d12CommandList->PresentDatas[d3d12CommandList->PresentDataCount].WindowData = windowData; - d3d12CommandList->PresentDatas[d3d12CommandList->PresentDataCount].SwapChainImageIndex = swapchainIndex; - d3d12CommandList->PresentDataCount += 1; - - // Create the presentation barrier. - D3D12_RESOURCE_BARRIER barrierDesc; - barrierDesc.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; - barrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; - barrierDesc.Transition.StateBefore = D3D12_RESOURCE_STATE_PRESENT; - barrierDesc.Transition.StateAfter = D3D12_RESOURCE_STATE_RENDER_TARGET; - barrierDesc.Transition.pResource = windowData->SwapChainTextureContainers[swapchainIndex].ActiveTexture->Resource; - barrierDesc.Transition.Subresource = 0; - - d3d12CommandList->GraphicsCommandList.CommandList->ResourceBarrier(1, &barrierDesc); - - *swapchainTexture = reinterpret_cast(&windowData->SwapChainTextureContainers[swapchainIndex]); - - return true; - } - - bool CreateSwapChain(NonNullPtr driver, NonNullPtr windowData, - SwapChainComposition composition, PresentMode presentMode) - { - auto windowWin32State = static_cast(windowData->Window->State); - HWND windowHandle = windowWin32State->Handle; - if (!IsWindow(windowHandle)) - { - Assert(false, "windowWin32State->Handle is not a window handle ???"); - return false; - } - - // TODO: I have no way to test HDR easily except the steamdeck - DXGI_FORMAT swapChainFormat = SwapchainCompositionToTextureFormat[ToUnderlying(composition)]; - - windowData->SwapChainTextureCount = std::clamp(driver->FramesInFlight, 2, 3); - - DXGI_SWAP_CHAIN_DESC1 swapChainDesc = {}; - swapChainDesc.Width = 0; // Use the whole width - swapChainDesc.Height = 0; // Use the whole height - swapChainDesc.Format = swapChainFormat; - swapChainDesc.Stereo = 0; - swapChainDesc.SampleDesc.Count = 1; - swapChainDesc.SampleDesc.Quality = 0; - swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; - swapChainDesc.BufferCount = windowData->SwapChainTextureCount; - swapChainDesc.Scaling = DXGI_SCALING_STRETCH; - swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_DISCARD; - swapChainDesc.AlphaMode = DXGI_ALPHA_MODE_UNSPECIFIED; - if (driver->IsTearingSupported) - { - swapChainDesc.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING; - } - else - { - swapChainDesc.Flags = 0; - } - - DXGI_SWAP_CHAIN_FULLSCREEN_DESC swapChainFullscreenDesc = {}; - swapChainFullscreenDesc.RefreshRate.Numerator = 0; - swapChainFullscreenDesc.RefreshRate.Denominator = 0; - swapChainFullscreenDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED; - swapChainFullscreenDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED; - swapChainFullscreenDesc.Windowed = true; - - IDXGISwapChain1* swapChain = nullptr; - HRESULT result = - driver->DXGIFactory->CreateSwapChainForHwnd(static_cast(driver->GraphicsQueue), windowHandle, - &swapChainDesc, &swapChainFullscreenDesc, nullptr, &swapChain); - if (FAILED(result)) - { - D3D12_LogError(driver->D3D12Device, "Failed to create SwapChain", result); - return false; - } - - IDXGISwapChain3* swapChain3 = nullptr; - result = swapChain->QueryInterface(IID_IDXGISwapChain3, reinterpret_cast(&swapChain3)); - swapChain->Release(); - if (FAILED(result)) - { - D3D12_LogError(driver->D3D12Device, "Could not query IDXGISwapChain3 interface", result); - return false; - } - - if (composition != SwapChainComposition::SDR) - { - swapChain3->SetColorSpace1(SwapchainCompositionToColorSpace[ToUnderlying(composition)]); - } - - IDXGIFactory1* parentFactory = nullptr; - result = swapChain3->GetParent(IID_IDXGIFactory1, reinterpret_cast(&parentFactory)); - if (FAILED(result)) - { - Log(LogLevel::Warning, LogCategory::Graphics, "Cannot get SwapChain Parent! Error Code: " HRESULT_FMT, result); - } - else - { - // Disable DXGI window crap - result = parentFactory->MakeWindowAssociation(windowHandle, DXGI_MWA_NO_WINDOW_CHANGES); - if (FAILED(result)) - { - Log(LogLevel::Warning, LogCategory::Graphics, "MakeWindowAssociation failed! Error Code: " HRESULT_FMT, result); - } - parentFactory->Release(); - } - - swapChain3->GetDesc1(&swapChainDesc); - if (FAILED(result)) - { - D3D12_LogError(driver->D3D12Device, "Failed to retrieve SwapChain descriptor", result); - return false; - } - windowData->SwapChain = swapChain3; - windowData->SwapChainColorSpace = SwapchainCompositionToColorSpace[ToUnderlying(composition)]; - windowData->SwapChainComposition = composition; - windowData->WindowFrameCounter = 0; - windowData->Width = swapChainDesc.Width; - windowData->Height = swapChainDesc.Height; - windowData->PresentMode = presentMode; - - for (uint8 idx = 0; idx < windowData->SwapChainTextureCount; ++idx) - { - if (!CreateSwapChainTexture(driver, swapChain3, composition, &windowData->SwapChainTextureContainers[idx], idx)) - { - swapChain3->Release(); - return false; - } - } - - return true; - } - - void DestroySwapChain(NonNullPtr driver, NonNullPtr windowData) - { - for (uint32 idx = 0; idx < windowData->SwapChainTextureCount; ++idx) - { - ReleaseStagingDescriptor(driver, windowData->SwapChainTextureContainers[idx].ActiveTexture->Subresources[0].RTVHandles[0]); - - Free(windowData->SwapChainTextureContainers[idx].ActiveTexture->Subresources[0].RTVHandles); - Free(windowData->SwapChainTextureContainers[idx].ActiveTexture->Subresources); - Free(windowData->SwapChainTextureContainers[idx].ActiveTexture); - Free(windowData->SwapChainTextureContainers[idx].Textures); - } - - windowData->SwapChain->Release(); - windowData->SwapChain = nullptr; - } - - bool D3D12_AcquireSwapChainTexture(NonNullPtr commandList, NonNullPtr window, Texture** swapChainTexture) - { - return D3D12_AcquireSwapChainTexture(false, commandList, window, swapChainTexture); - } - - bool D3D12_WaitAndAcquireSwapChainTexture(NonNullPtr commandList, NonNullPtr window, Texture** swapChainTexture) - { - return D3D12_AcquireSwapChainTexture(true, commandList, window, swapChainTexture); - } - - bool D3D12_WaitForSwapchain(NonNullPtr driver, NonNullPtr /*window*/) - { - auto* d3d12Driver = static_cast(driver.Get()); - auto* windowData = d3d12Driver->WindowData; - if (!windowData) - { - LogError(LogCategory::Graphics, "Cannot wait for swapchain. Window has no Swapchain"); - return false; - } - - if (windowData->InFlightFences[windowData->WindowFrameCounter] != nullptr) - { - if (!Wait(d3d12Driver, true, &windowData->InFlightFences[windowData->WindowFrameCounter], - 1 JULIET_DEBUG_PARAM(ConstString("WaitForSwapchain")))) - { - return false; - } - } - - return true; - } - - TextureFormat D3D12_GetSwapChainTextureFormat(NonNullPtr driver, [[maybe_unused]] NonNullPtr window) - { - auto* d3d12Driver = static_cast(driver.Get()); - - auto* windowData = d3d12Driver->WindowData; - if (!windowData) - { - LogError(LogCategory::Graphics, "Cannot get swapchain format. Window has no Swapchain"); - return TextureFormat::Invalid; - } - - Assert(windowData->Window == window.Get()); - return windowData->SwapChainTextureContainers[windowData->WindowFrameCounter].Header.CreateInfo.Format; - } - // End Swapchain - - // Begin Texture - - uint32 ComputeSubresourceIndex(uint32 mipLevel, uint32 layer, uint32 numLevels) - { - return mipLevel + (layer * numLevels); - } - - D3D12_RESOURCE_STATES GetDefaultTextureResourceState(TextureUsageFlag usageFlags) - { - if ((usageFlags & TextureUsageFlag::Sampler) != TextureUsageFlag::None) - { - return D3D12_RESOURCE_STATE_ALL_SHADER_RESOURCE; - } - if ((usageFlags & TextureUsageFlag::GraphicsStorageRead) != TextureUsageFlag::None) - { - return D3D12_RESOURCE_STATE_ALL_SHADER_RESOURCE; - } - if ((usageFlags & TextureUsageFlag::ColorTarget) != TextureUsageFlag::None) - { - return D3D12_RESOURCE_STATE_RENDER_TARGET; - } - if ((usageFlags & TextureUsageFlag::DepthStencilTarget) != TextureUsageFlag::None) - { - return D3D12_RESOURCE_STATE_DEPTH_WRITE; - } - if ((usageFlags & TextureUsageFlag::ComputeStorageRead) != TextureUsageFlag::None) - { - return D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE; - } - if ((usageFlags & TextureUsageFlag::ComputeStorageWrite) != TextureUsageFlag::None) - { - return D3D12_RESOURCE_STATE_UNORDERED_ACCESS; - } - if ((usageFlags & TextureUsageFlag::ComputeStorageSimultaneousReadWrite) != TextureUsageFlag::None) - { - return D3D12_RESOURCE_STATE_UNORDERED_ACCESS; - } - Log(LogLevel::Error, LogCategory::Graphics, "Texture has no default usage mode!"); - return D3D12_RESOURCE_STATE_ALL_SHADER_RESOURCE; - } - - D3D12TextureSubresource* FetchTextureSubresource(NonNullPtr container, uint32 layer, uint32 level) - { - uint32 index = ComputeSubresourceIndex(level, layer, container->Header.CreateInfo.MipLevelCount); - return &container->ActiveTexture->Subresources[index]; - } - - void TextureSubresourceBarrier(NonNullPtr commandList, D3D12_RESOURCE_STATES sourceState, - D3D12_RESOURCE_STATES destinationState, NonNullPtr textureSubresource) - { - TextureUsageFlag currentFlag = textureSubresource->Parent->Container->Header.CreateInfo.Flags; - bool needsUAVBarrier = ((currentFlag & TextureUsageFlag::ComputeStorageWrite) != TextureUsageFlag::None) || - ((currentFlag & TextureUsageFlag::ComputeStorageSimultaneousReadWrite) != TextureUsageFlag::None); - ResourceBarrier(commandList, sourceState, destinationState, textureSubresource->Parent->Resource, - textureSubresource->Index, needsUAVBarrier); - } - - void TextureSubresourceTransitionFromDefaultUsage(NonNullPtr commandList, - NonNullPtr subresource, - D3D12_RESOURCE_STATES toTextureUsage) - { - D3D12_RESOURCE_STATES defaultUsage = - GetDefaultTextureResourceState(subresource->Parent->Container->Header.CreateInfo.Flags); - TextureSubresourceBarrier(commandList, defaultUsage, toTextureUsage, subresource); - } - - void TextureTransitionFromDefaultUsage(NonNullPtr commandList, NonNullPtr texture, - D3D12_RESOURCE_STATES toTextureUsage) - { - for (uint32 i = 0; i < texture->SubresourceCount; ++i) - { - TextureSubresourceTransitionFromDefaultUsage(commandList, &texture->Subresources[i], toTextureUsage); - } - } - - void TextureSubresourceTransitionToDefaultUsage(NonNullPtr commandList, - NonNullPtr subresource, D3D12_RESOURCE_STATES fromTextureUsage) - { - D3D12_RESOURCE_STATES defaultUsage = - GetDefaultTextureResourceState(subresource->Parent->Container->Header.CreateInfo.Flags); - TextureSubresourceBarrier(commandList, fromTextureUsage, defaultUsage, subresource); - } - - void TextureTransitionToDefaultUsage(NonNullPtr commandList, NonNullPtr texture, - D3D12_RESOURCE_STATES fromTextureUsage) - { - for (uint32 i = 0; i < texture->SubresourceCount; ++i) - { - TextureSubresourceTransitionToDefaultUsage(commandList, &texture->Subresources[i], fromTextureUsage); - } - } - - D3D12TextureSubresource* PrepareTextureSubresourceForWrite(NonNullPtr commandList, - NonNullPtr container, uint32 layer, - uint32 level, bool shouldCycle, D3D12_RESOURCE_STATES newTextureUsage) - { - D3D12TextureSubresource* subresource = FetchTextureSubresource(container, layer, level); - if (shouldCycle and container->CanBeCycled and subresource->Parent->ReferenceCount > 0) - { - // TODO: Cycle the active texture to an available one. Not needed for swap chain (current objective) - // CycleActiveTexture(commandList->Driver, container); - - subresource = FetchTextureSubresource(container, layer, level); - } - - TextureSubresourceTransitionFromDefaultUsage(commandList, subresource, newTextureUsage); - - return subresource; - } - - Texture* D3D12_CreateTexture(NonNullPtr driver, const TextureCreateInfo& createInfo) - { - auto* d3d12Driver = static_cast(driver.Get()); - - D3D12_RESOURCE_DESC desc = {}; - switch (createInfo.Type) - { - case TextureType::Texture_2D: - case TextureType::Texture_2DArray: - case TextureType::Texture_Cube: - case TextureType::Texture_CubeArray: desc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D; break; - case TextureType::Texture_3D: - case TextureType::Texture_3DArray: desc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE3D; break; - } - - desc.Alignment = 0; - desc.Width = createInfo.Width; - desc.Height = createInfo.Height; - desc.DepthOrArraySize = static_cast(createInfo.LayerCount); - desc.MipLevels = static_cast(createInfo.MipLevelCount); - desc.Format = ConvertToD3D12TextureFormat(createInfo.Format); - desc.SampleDesc.Count = JulietToD3D12_SampleCount[ToUnderlying(createInfo.SampleCount)]; - desc.SampleDesc.Quality = 0; - desc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN; - desc.Flags = D3D12_RESOURCE_FLAG_NONE; - - if ((createInfo.Flags & TextureUsageFlag::ColorTarget) != TextureUsageFlag::None) - { - desc.Flags |= D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET; - } - if ((createInfo.Flags & TextureUsageFlag::DepthStencilTarget) != TextureUsageFlag::None) - { - desc.Flags |= D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL; - } - if ((createInfo.Flags & TextureUsageFlag::ComputeStorageWrite) != TextureUsageFlag::None) - { - desc.Flags |= D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; - } - - D3D12_HEAP_PROPERTIES heapProps = {}; - heapProps.Type = D3D12_HEAP_TYPE_DEFAULT; - heapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; - heapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; - heapProps.CreationNodeMask = 0; // We don't do multi-adapter operation - heapProps.VisibleNodeMask = 0; // We don't do multi-adapter operation - - ID3D12Resource* resource = nullptr; - D3D12_CLEAR_VALUE clearValue = {}; - D3D12_CLEAR_VALUE* pClearValue = nullptr; - - if (desc.Flags & D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL) - { - clearValue.Format = ConvertToD3D12DepthFormat(createInfo.Format); - clearValue.DepthStencil.Depth = 1.0f; - clearValue.DepthStencil.Stencil = 0; - pClearValue = &clearValue; - } - else if (desc.Flags & D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET) - { - clearValue.Format = desc.Format; - clearValue.Color[0] = 0.0f; - clearValue.Color[1] = 0.0f; - clearValue.Color[2] = 0.0f; - clearValue.Color[3] = 0.0f; - pClearValue = &clearValue; - } - - D3D12_RESOURCE_STATES initialState = GetDefaultTextureResourceState(createInfo.Flags); - HRESULT hr = d3d12Driver->D3D12Device->CreateCommittedResource(&heapProps, D3D12_HEAP_FLAG_NONE, &desc, - initialState, pClearValue, IID_ID3D12Resource, - reinterpret_cast(&resource)); - - if (FAILED(hr)) - { - D3D12_LogError(d3d12Driver->D3D12Device, "Failed to create D3D12 committed resource for texture", hr); - return nullptr; - } - - auto* textureContainer = static_cast(Calloc(1, sizeof(D3D12TextureContainer))); - auto* texture = static_cast(Calloc(1, sizeof(D3D12Texture))); - - textureContainer->Header.CreateInfo = createInfo; - textureContainer->ActiveTexture = texture; - textureContainer->Textures = static_cast(Malloc(sizeof(D3D12Texture*))); - textureContainer->Textures[0] = texture; - textureContainer->Capacity = 1; - textureContainer->Count = 1; - textureContainer->CanBeCycled = true; - - texture->Container = textureContainer; - texture->Resource = resource; - texture->ReferenceCount = 1; - - uint32 numLayers = std::max(1, createInfo.LayerCount); - uint32 numMips = std::max(1, createInfo.MipLevelCount); - texture->SubresourceCount = numLayers * numMips; - texture->Subresources = - static_cast(Calloc(texture->SubresourceCount, sizeof(D3D12TextureSubresource))); - - for (uint32 layer = 0; layer < numLayers; ++layer) - { - for (uint32 mip = 0; mip < numMips; ++mip) - { - uint32 index = mip + (layer * numMips); - auto& sub = texture->Subresources[index]; - sub.Parent = texture; - sub.Layer = layer; - sub.Level = mip; - sub.Index = index; - sub.Depth = 1; // 3D texture depth handling would go here - - if ((createInfo.Flags & TextureUsageFlag::ColorTarget) != TextureUsageFlag::None) - { - sub.RTVHandles = static_cast(Calloc(1, sizeof(D3D12StagingDescriptor))); - AssignStagingDescriptor(d3d12Driver, D3D12_DESCRIPTOR_HEAP_TYPE_RTV, sub.RTVHandles[0]); - - D3D12_RENDER_TARGET_VIEW_DESC rtvDesc = {}; - rtvDesc.Format = desc.Format; - rtvDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2D; - rtvDesc.Texture2D.MipSlice = mip; - d3d12Driver->D3D12Device->CreateRenderTargetView(resource, &rtvDesc, sub.RTVHandles[0].CpuHandle); - } - - if ((createInfo.Flags & TextureUsageFlag::DepthStencilTarget) != TextureUsageFlag::None) - { - AssignStagingDescriptor(d3d12Driver, D3D12_DESCRIPTOR_HEAP_TYPE_DSV, sub.DSVHandle); - - D3D12_DEPTH_STENCIL_VIEW_DESC dsvDesc = {}; - dsvDesc.Format = ConvertToD3D12DepthFormat(createInfo.Format); - dsvDesc.ViewDimension = D3D12_DSV_DIMENSION_TEXTURE2D; - dsvDesc.Texture2D.MipSlice = mip; - d3d12Driver->D3D12Device->CreateDepthStencilView(resource, &dsvDesc, sub.DSVHandle.CpuHandle); - } - } - } - - // Create SRV for sampled/readable textures (bindless access) - // Assign to the bindless CBV_SRV_UAV heap - { - D3D12Descriptor descriptor; - if (AssignDescriptor(d3d12Driver->BindlessDescriptorHeap, descriptor)) - { - texture->SRVHandle = D3D12StagingDescriptor{}; - texture->SRVHandle.CpuHandleIndex = descriptor.Index; - texture->SRVHandle.CpuHandle = descriptor.CpuHandle; - texture->SRVHandle.Heap = descriptor.Heap; - - D3D12_SHADER_RESOURCE_VIEW_DESC srvDesc = {}; - srvDesc.Format = desc.Format; - - // Fix SRV format for Depth Buffers (TypeLess -> Typed) - if (createInfo.Format == TextureFormat::D32_FLOAT) - { - srvDesc.Format = DXGI_FORMAT_R32_FLOAT; - } - else if (createInfo.Format == TextureFormat::D16_UNORM) - { - srvDesc.Format = DXGI_FORMAT_R16_UNORM; - } - else if (createInfo.Format == TextureFormat::D24_UNORM_S8_UINT) - { - srvDesc.Format = DXGI_FORMAT_R24_UNORM_X8_TYPELESS; - } - else if (createInfo.Format == TextureFormat::D32_FLOAT_S8_UINT) - { - srvDesc.Format = DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS; - } - - srvDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; - srvDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; - srvDesc.Texture2D.MostDetailedMip = 0; - srvDesc.Texture2D.MipLevels = numMips; - srvDesc.Texture2D.PlaneSlice = 0; - srvDesc.Texture2D.ResourceMinLODClamp = 0.0f; - - d3d12Driver->D3D12Device->CreateShaderResourceView(resource, &srvDesc, descriptor.CpuHandle); - } - } - - return reinterpret_cast(textureContainer); - } - - void D3D12_DestroyTexture(NonNullPtr driver, NonNullPtr texture) - { - auto* d3d12Driver = static_cast(driver.Get()); - auto* textureContainer = reinterpret_cast(texture.Get()); - - for (uint32 i = 0; i < textureContainer->Count; ++i) - { - D3D12Texture* d3d12Texture = textureContainer->Textures[i]; - for (uint32 j = 0; j < d3d12Texture->SubresourceCount; ++j) - { - D3D12TextureSubresource& sub = d3d12Texture->Subresources[j]; - if (sub.RTVHandles) - { - ReleaseStagingDescriptor(d3d12Driver, sub.RTVHandles[0]); - Free(sub.RTVHandles); - } - if (sub.DSVHandle.Heap) - { - ReleaseStagingDescriptor(d3d12Driver, sub.DSVHandle); - } - } - d3d12Texture->Resource->Release(); - Free(d3d12Texture->Subresources); - Free(d3d12Texture); - } - - Free(textureContainer->Textures); - Free(textureContainer); - } - // End Texture - - // Begin Command list - index_t GetNewCommandListID() - { - return CommandListID++; - } - - bool HasD3D12CommandListForQueueType(NonNullPtr commandList, QueueType queueType) - { - switch (queueType) - { - case QueueType::Graphics: return commandList->GraphicsCommandList.CommandList != nullptr; - case QueueType::Compute: return commandList->ComputeCommandList.CommandList != nullptr; - case QueueType::Copy: return commandList->CopyCommandList.CommandList != nullptr; - default: return false; - } - } - - void DestroyCommandList(NonNullPtr commandList) - { - // TODO : Handle other kind of command list (copy compute) - if (commandList->GraphicsCommandList.CommandList) - { - commandList->GraphicsCommandList.CommandList->Release(); - } - - commandList->GraphicsCommandList.Allocator->Release(); - } - - bool CreateAllocator(NonNullPtr driver, NonNullPtr baseData, D3D12_COMMAND_QUEUE_DESC queueDesc) - { - HRESULT result = driver->D3D12Device->CreateCommandAllocator(queueDesc.Type, IID_ID3D12CommandAllocator, - reinterpret_cast(&baseData->Allocator)); - if (FAILED(result)) - { - AssertHR(result, "Cannot create ID3D12CommandAllocator"); - return false; - } - - baseData->Allocator->Reset(); - return true; - } - - bool CreateD3D12CommandListForQueueType(NonNullPtr driver, NonNullPtr commandList, QueueType queueType) - { - // TODO: String library - std::wstring wide_str = L"CommandList ID:" + std::to_wstring(commandList->ID); - - // TODO: Factorize this. Flemme - - // Get Proper allocator for the frame. Reset all allocators and the command list with current frame allocator - auto& queueDesc = driver->QueueDesc[ToUnderlying(queueType)]; - switch (queueType) - { - case QueueType::Graphics: - { - CreateAllocator(driver, &commandList->GraphicsCommandList, queueDesc); - ID3D12GraphicsCommandList6* d3d12GraphicsCommandList = nullptr; - HRESULT result = - driver->D3D12Device->CreateCommandList1(queueDesc.NodeMask, queueDesc.Type, - D3D12_COMMAND_LIST_FLAG_NONE, IID_ID3D12GraphicsCommandList6, - reinterpret_cast(&d3d12GraphicsCommandList)); - if (FAILED(result)) - { - Assert(false, "Error not implemented: cannot create ID3D12GraphicsCommandList6 (graphics or " - "compute command list"); - return false; - } - - commandList->GraphicsCommandList.CommandList = d3d12GraphicsCommandList; - d3d12GraphicsCommandList->SetName(wide_str.c_str()); - d3d12GraphicsCommandList->Reset(commandList->GraphicsCommandList.Allocator, nullptr); - - return true; - } - case QueueType::Compute: - { - CreateAllocator(driver, &commandList->ComputeCommandList, queueDesc); - ID3D12GraphicsCommandList6* d3d12GraphicsCommandList = nullptr; - HRESULT result = - driver->D3D12Device->CreateCommandList1(queueDesc.NodeMask, queueDesc.Type, - D3D12_COMMAND_LIST_FLAG_NONE, IID_ID3D12GraphicsCommandList6, - reinterpret_cast(&d3d12GraphicsCommandList)); - if (FAILED(result)) - { - Assert(false, "Error not implemented: cannot create ID3D12GraphicsCommandList6 (graphics or " - "compute command list"); - return false; - } - - commandList->ComputeCommandList.CommandList = d3d12GraphicsCommandList; - d3d12GraphicsCommandList->SetName(wide_str.c_str()); - d3d12GraphicsCommandList->Reset(commandList->ComputeCommandList.Allocator, nullptr); - - return true; - } - case QueueType::Copy: - { - CreateAllocator(driver, &commandList->CopyCommandList, queueDesc); - ID3D12GraphicsCommandList* d3d12CopyCommandList = nullptr; - HRESULT result = driver->D3D12Device->CreateCommandList1(queueDesc.NodeMask, queueDesc.Type, - D3D12_COMMAND_LIST_FLAG_NONE, IID_ID3D12GraphicsCommandList, - reinterpret_cast(&d3d12CopyCommandList)); - - if (FAILED(result)) - { - AssertHR(result, "cannot create ID3D12GraphicsCommandList (copy command list)"); - return false; - } - commandList->CopyCommandList.CommandList = d3d12CopyCommandList; - d3d12CopyCommandList->SetName(wide_str.c_str()); - d3d12CopyCommandList->Reset(commandList->CopyCommandList.Allocator, nullptr); - - return true; - } - default: return false; - } - } - - bool AllocateCommandList(NonNullPtr driver, QueueType queueType) - { - if (driver->AvailableCommandLists == nullptr) - { - driver->AvailableCommandLists = - ArenaPushArray(driver->DriverArena, - kMaxCommandListCount JULIET_DEBUG_PARAM("Command list count {}", kMaxCommandListCount)); - driver->AvailableCommandListCapacity = kMaxCommandListCount; - } - const index_t id = GetNewCommandListID(); - - auto* commandList = - ArenaPushStruct(driver->DriverArena JULIET_DEBUG_PARAM("D3D12CommandList [{}]", id)); - if (!commandList) - { - Log(LogLevel::Error, LogCategory::Graphics, "Cannot allocate D3D12CommandList: Out of memory"); - DestroyCommandList(commandList); - return false; - } - - driver->AvailableCommandLists[driver->AvailableCommandListCount] = commandList; - driver->AvailableCommandListCount += 1; - - commandList->ID = id; - commandList->Driver = driver; - - // Window Handling - commandList->PresentDataCapacity = kMaxPresentDataPerCommandList; - commandList->PresentDataCount = 0; - commandList->PresentDatas = ArenaPushArray( - driver->DriverArena, - kMaxPresentDataPerCommandList JULIET_DEBUG_PARAM("Command list [{}] D3D12PresentData ptr array count " - "{}", - id, kMaxPresentDataPerCommandList)); - - // Resource tracking - commandList->UsedTextureCapacity = kMaxTexturePerCommandList; - commandList->UsedTextureCount = 0; - commandList->UsedTextures = - ArenaPushArray(driver->DriverArena, - kMaxTexturePerCommandList JULIET_DEBUG_PARAM("Command list [{}] D3D12Texture " - "ptr array count " - "{}", - id, kMaxTexturePerCommandList)); - - commandList->UsedGraphicsPipelineCapacity = kMaxGraphicsPipelinePerCommandList; - commandList->UsedGraphicsPipelineCount = 0; - commandList->UsedGraphicsPipelines = ArenaPushArray( - driver->DriverArena, - kMaxTexturePerCommandList JULIET_DEBUG_PARAM("Command list [{}] D3D12GraphicsPipeline ptr array count " - "{}", - id, kMaxTexturePerCommandList)); - - // TODO : Simplify this - if (!HasD3D12CommandListForQueueType(commandList, queueType)) - { - if (!CreateD3D12CommandListForQueueType(driver, commandList, queueType)) - { - Log(LogLevel::Error, LogCategory::Graphics, "Cannot Create D3D12 command list"); - DestroyCommandList(commandList); - return false; - } - } - - return true; - } - - D3D12CommandList* AcquireCommandListFromPool(NonNullPtr driver, QueueType queueType) - { - if (driver->AvailableCommandListCount == 0) - { - if (!AllocateCommandList(driver, queueType)) - { - return nullptr; - } - } - - D3D12CommandList* commandList = driver->AvailableCommandLists[driver->AvailableCommandListCount - 1]; - driver->AvailableCommandListCount -= 1; - - return commandList; - } - - CommandList* D3D12_AcquireCommandList(NonNullPtr driver, QueueType queueType) - { - auto* d3d12Driver = static_cast(driver.Get()); - - D3D12CommandList* commandList = AcquireCommandListFromPool(d3d12Driver, queueType); - - commandList->AutoReleaseFence = true; - - return reinterpret_cast(commandList); - } - - void D3D12_SetViewPort(NonNullPtr commandList, const GraphicsViewPort& viewPort) - { - auto* d3d12CommandList = reinterpret_cast(commandList.Get()); - - D3D12_VIEWPORT d3d12Viewport; - d3d12Viewport.TopLeftX = viewPort.X; - d3d12Viewport.TopLeftY = viewPort.Y; - d3d12Viewport.Width = viewPort.Width; - d3d12Viewport.Height = viewPort.Height; - d3d12Viewport.MinDepth = viewPort.MinDepth; - d3d12Viewport.MaxDepth = viewPort.MaxDepth; - d3d12CommandList->GraphicsCommandList.CommandList->RSSetViewports(1, &d3d12Viewport); - } - - void D3D12_SetScissorRect(NonNullPtr commandList, const struct Rectangle& rectangle) - { - auto* d3d12CommandList = reinterpret_cast(commandList.Get()); - D3D12_RECT scissorRect; - scissorRect.left = rectangle.X; - scissorRect.top = rectangle.Y; - scissorRect.right = rectangle.X + rectangle.Width; - scissorRect.bottom = rectangle.Y + rectangle.Height; - d3d12CommandList->GraphicsCommandList.CommandList->RSSetScissorRects(1, &scissorRect); - } - - void D3D12_SetBlendConstants(NonNullPtr commandList, FColor blendConstants) - { - auto* d3d12CommandList = reinterpret_cast(commandList.Get()); - FLOAT blendFactor[4] = { blendConstants.R, blendConstants.G, blendConstants.B, blendConstants.A }; - d3d12CommandList->GraphicsCommandList.CommandList->OMSetBlendFactor(blendFactor); - } - - void D3D12_SetStencilReference(NonNullPtr commandList, uint8 reference) - { - auto* d3d12CommandList = reinterpret_cast(commandList.Get()); - d3d12CommandList->GraphicsCommandList.CommandList->OMSetStencilRef(reference); - } - - void D3D12_SetIndexBuffer(NonNullPtr commandList, NonNullPtr buffer, - IndexFormat format, size_t indexCount, index_t offset) - { - auto* d3d12CommandList = reinterpret_cast(commandList.Get()); - auto* d3d12Buffer = reinterpret_cast(buffer.Get()); - - // Transition to INDEX_BUFFER state if needed - if (d3d12Buffer->CurrentState != D3D12_RESOURCE_STATE_GENERIC_READ) - { - D3D12_RESOURCE_BARRIER barrier = {}; - barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; - barrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; - barrier.Transition.pResource = d3d12Buffer->Handle; - barrier.Transition.StateBefore = d3d12Buffer->CurrentState; - barrier.Transition.StateAfter = - D3D12_RESOURCE_STATE_GENERIC_READ; // Since we use a mega buffer we use the generic read that includes D3D12_RESOURCE_STATE_INDEX_BUFFER - barrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; - - d3d12CommandList->GraphicsCommandList.CommandList->ResourceBarrier(1, &barrier); - d3d12Buffer->CurrentState = D3D12_RESOURCE_STATE_GENERIC_READ; - } - - D3D12_INDEX_BUFFER_VIEW ibView; - ibView.BufferLocation = d3d12Buffer->Handle->GetGPUVirtualAddress() + offset; - if (format == IndexFormat::UInt16) - { - ibView.SizeInBytes = static_cast(indexCount * sizeof(uint16)); - ibView.Format = DXGI_FORMAT_R16_UINT; - } - else - { - ibView.SizeInBytes = static_cast(indexCount * sizeof(uint32)); - ibView.Format = DXGI_FORMAT_R32_UINT; - } - - d3d12CommandList->GraphicsCommandList.CommandList->IASetIndexBuffer(&ibView); - } - - void D3D12_SetPushConstants(NonNullPtr commandList, ShaderStage /*stage*/, uint32 rootParameterIndex, - uint32 numConstants, const void* constants) - { - auto d3d12CommandList = reinterpret_cast(commandList.Get()); - // For now we assume Graphics Root Signature. Compute support would need a check or separate function. - d3d12CommandList->GraphicsCommandList.CommandList->SetGraphicsRoot32BitConstants(rootParameterIndex, - numConstants, constants, 0); - } - - void SetDescriptorHeaps(NonNullPtr commandList) - { - ID3D12DescriptorHeap* heaps[2]; - D3D12DescriptorHeap* viewHeap = nullptr; - D3D12DescriptorHeap* samplerHeap = nullptr; - - viewHeap = commandList->Driver->BindlessDescriptorHeap; - - samplerHeap = AcquireSamplerHeapFromPool(commandList->Driver); - - commandList->CRB_SRV_UAV_Heap = viewHeap; - commandList->Sampler_Heap = samplerHeap; - - heaps[0] = viewHeap->Handle; - heaps[1] = samplerHeap->Handle; - - commandList->GraphicsCommandList.CommandList->SetDescriptorHeaps(2, heaps); - } - -#define TRACK_RESOURCE(resource, type, array, count, capacity) \ - uint32 i; \ - \ - for (i = 0; i < commandList->count; i += 1) \ - { \ - if (commandList->array[i] == (resource)) \ - { \ - return; \ - } \ - } \ - \ - Assert(commandList->count + 1 <= commandList->capacity); \ - commandList->array[commandList->count] = resource; \ - commandList->count += 1; \ - ++(resource)->ReferenceCount; - - void TrackGraphicsPipeline(NonNullPtr commandList, NonNullPtr pipeline) - { - TRACK_RESOURCE(pipeline, D3D12GraphicsPipeline*, UsedGraphicsPipelines, UsedGraphicsPipelineCount, UsedGraphicsPipelineCapacity) - } - - void TrackTexture(NonNullPtr commandList, NonNullPtr texture) - { - TRACK_RESOURCE(texture, D3D12Texture*, UsedTextures, UsedTextureCount, UsedTextureCapacity) - } - - bool D3D12_SubmitCommandLists(NonNullPtr commandList) - { - auto* d3d12CommandList = reinterpret_cast(commandList.Get()); - auto* d3d12Driver = d3d12CommandList->Driver; - // TODO : Use QueueType to choose the correct CommandList and Command Queue - // Only use graphics for now - - // Transition present textures to present mode - for (uint32 i = 0; i < d3d12CommandList->PresentDataCount; i += 1) - { - uint32 swapchainIndex = d3d12CommandList->PresentDatas[i].SwapChainImageIndex; - D3D12TextureContainer* container = - &d3d12CommandList->PresentDatas[i].WindowData->SwapChainTextureContainers[swapchainIndex]; - D3D12TextureSubresource* subresource = FetchTextureSubresource(container, 0, 0); - - D3D12_RESOURCE_BARRIER barrierDesc; - barrierDesc.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; - barrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; - barrierDesc.Transition.StateBefore = D3D12_RESOURCE_STATE_RENDER_TARGET; - barrierDesc.Transition.StateAfter = D3D12_RESOURCE_STATE_PRESENT; - barrierDesc.Transition.pResource = subresource->Parent->Resource; - barrierDesc.Transition.Subresource = subresource->Index; - - d3d12CommandList->GraphicsCommandList.CommandList->ResourceBarrier(1, &barrierDesc); - } - - // Notify the command buffer that we have completed recording - HRESULT result = d3d12CommandList->GraphicsCommandList.CommandList->Close(); - if (FAILED(result)) - { - D3D12_LogError(d3d12Driver->D3D12Device, "Failed to close command list!", result); - return false; - } - - ID3D12CommandList* ppCommandLists[] = { d3d12CommandList->GraphicsCommandList.CommandList }; - - // Submit the command list to the queue - d3d12Driver->GraphicsQueue->ExecuteCommandLists(1, ppCommandLists); - - // Acquire a fence and set it to the in-flight fence - d3d12CommandList->InFlightFence = - D3D12_AcquireFence(d3d12Driver JULIET_DEBUG_PARAM(ConstString("SubmitCommandLists"))); - if (!d3d12CommandList->InFlightFence) - { - return false; - } - - // Mark that a fence should be signaled after command list execution - result = d3d12Driver->GraphicsQueue->Signal(d3d12CommandList->InFlightFence->Handle, D3D12_FENCE_SIGNAL_VALUE); - if (FAILED(result)) - { - D3D12_LogError(d3d12Driver->D3D12Device, "Failed to enqueue fence signal!", result); - return false; - } - - // Mark the command list as submitted - [[maybe_unused]] const uint32 newValue = static_cast(d3d12Driver->SubmittedCommandListCount) + 1U; - Assert(newValue <= 0xFF && "Command List count exceeded uint8 capacity!"); - Assert(newValue <= d3d12Driver->SubmittedCommandListCapacity); - - d3d12Driver->SubmittedCommandLists[d3d12Driver->SubmittedCommandListCount] = d3d12CommandList; - d3d12Driver->SubmittedCommandListCount += 1; - - bool success = true; - for (uint32 i = 0; i < d3d12CommandList->PresentDataCount; i += 1) - { - D3D12PresentData* presentData = &d3d12CommandList->PresentDatas[i]; - auto* windowData = presentData->WindowData; - - // NOTE: flip discard always supported since DXGI 1.4 is required - uint32 syncInterval = 1; - if (windowData->PresentMode == PresentMode::Immediate || windowData->PresentMode == PresentMode::Mailbox) - { - syncInterval = 0; - } - - uint32 presentFlags = 0; - if (d3d12Driver->IsTearingSupported && windowData->PresentMode == PresentMode::Immediate) - { - presentFlags = DXGI_PRESENT_ALLOW_TEARING; - } - - result = windowData->SwapChain->Present(syncInterval, presentFlags); - if (FAILED(result)) - { - success = false; - } - - windowData->SwapChainTextureContainers[presentData->SwapChainImageIndex].ActiveTexture->Resource->Release(); - - windowData->InFlightFences[windowData->WindowFrameCounter] = reinterpret_cast(d3d12CommandList->InFlightFence); - d3d12CommandList->InFlightFence->ReferenceCount += 1; - windowData->WindowFrameCounter = (windowData->WindowFrameCounter + 1) % d3d12Driver->FramesInFlight; - } - - // Check for cleanups - { - int32 i = 0; - while (i < d3d12Driver->SubmittedCommandListCount) - { - uint64 fenceValue = d3d12Driver->SubmittedCommandLists[i]->InFlightFence->Handle->GetCompletedValue(); - if (fenceValue == D3D12_FENCE_SIGNAL_VALUE) - { - success &= D3D12_CleanCommandList(d3d12Driver, d3d12Driver->SubmittedCommandLists[i], false); - // CleanCommandList swaps [i] with last and decrements count. - // Don't increment — re-check the swapped-in element. - } - else - { - i += 1; - } - } - } - - DisposePendingResourcces(d3d12Driver); - - ++d3d12Driver->FrameCounter; - - return success; - } - // End Command List - - // Begin Render Pass - void D3D12_BeginRenderPass(NonNullPtr commandList, NonNullPtr colorTargetInfos, - uint32 colorTargetInfoCount, const DepthStencilTargetInfo* depthStencilTargetInfo) - { - auto* d3d12CommandList = reinterpret_cast(commandList.Get()); - - uint32 frameBufferWidth = uint32Max; - uint32 frameBufferHeight = uint32Max; - - for (uint32 idx = 0; idx < colorTargetInfoCount; ++idx) - { - auto* container = reinterpret_cast(colorTargetInfos[idx].TargetTexture); - uint32 width = container->Header.CreateInfo.Width >> colorTargetInfos[idx].MipLevel; - uint32 height = container->Header.CreateInfo.Height >> colorTargetInfos[idx].MipLevel; - - // Scale the framebuffer to fit the smallest target. - frameBufferWidth = Min(width, frameBufferWidth); - frameBufferHeight = Min(height, frameBufferHeight); - } - - // Depth Stencil and DSV - D3D12_CPU_DESCRIPTOR_HANDLE DSV; - bool hasDSV = false; - if (depthStencilTargetInfo && depthStencilTargetInfo->TargetTexture) - { - auto* container = reinterpret_cast(depthStencilTargetInfo->TargetTexture); - uint32 width = container->Header.CreateInfo.Width; - uint32 height = container->Header.CreateInfo.Height; - - frameBufferWidth = Min(width, frameBufferWidth); - frameBufferHeight = Min(height, frameBufferHeight); - - D3D12TextureSubresource* subresource = - PrepareTextureSubresourceForWrite(d3d12CommandList, container, 0, 0, false, D3D12_RESOURCE_STATE_DEPTH_WRITE); - - DSV = subresource->DSVHandle.CpuHandle; - hasDSV = true; - d3d12CommandList->DepthStencilSubresource = subresource; - - TrackTexture(d3d12CommandList, subresource->Parent); - - if (depthStencilTargetInfo->LoadOperation == LoadOperation::Clear) - { - D3D12_CLEAR_FLAGS clearFlags = D3D12_CLEAR_FLAG_DEPTH; - // TODO: Check if texture has stencil - // if (HasStencil(container->Header.CreateInfo.Format)) clearFlags |= D3D12_CLEAR_FLAG_STENCIL; - - d3d12CommandList->GraphicsCommandList.CommandList->ClearDepthStencilView(DSV, clearFlags, - depthStencilTargetInfo->ClearDepth, - depthStencilTargetInfo->ClearStencil, - 0, nullptr); - } - } - - D3D12_CPU_DESCRIPTOR_HANDLE RTVs[GPUDriver::kMaxColorTargetInfo]; - for (uint32 idx = 0; idx < colorTargetInfoCount; ++idx) - { - auto* container = reinterpret_cast(colorTargetInfos[idx].TargetTexture); - D3D12TextureSubresource* subresource = PrepareTextureSubresourceForWrite( - d3d12CommandList, container, - container->Header.CreateInfo.Type == TextureType::Texture_3D ? 0 : colorTargetInfos[idx].LayerIndex, - colorTargetInfos[idx].MipLevel, colorTargetInfos[idx].CycleTexture, D3D12_RESOURCE_STATE_RENDER_TARGET); - - uint32 RTVIndex = container->Header.CreateInfo.Type == TextureType::Texture_3D ? colorTargetInfos[idx].DepthPlane : 0; - D3D12_CPU_DESCRIPTOR_HANDLE rtv = subresource->RTVHandles[RTVIndex].CpuHandle; - - if (colorTargetInfos[idx].LoadOperation == LoadOperation::Clear) - { - float clearColor[4]; - clearColor[0] = colorTargetInfos[idx].ClearColor.R; - clearColor[1] = colorTargetInfos[idx].ClearColor.G; - clearColor[2] = colorTargetInfos[idx].ClearColor.B; - clearColor[3] = colorTargetInfos[idx].ClearColor.A; - - d3d12CommandList->GraphicsCommandList.CommandList->ClearRenderTargetView(rtv, clearColor, 0, nullptr); - } - - RTVs[idx] = rtv; - d3d12CommandList->ColorTargetSubresources[idx] = subresource; - - TrackTexture(d3d12CommandList, subresource->Parent); - - if (colorTargetInfos[idx].StoreOperation == StoreOperation::Resolve || - colorTargetInfos[idx].StoreOperation == StoreOperation::ResolveAndStore) - { - auto resolveContainer = reinterpret_cast(colorTargetInfos[idx].ResolveTexture); - D3D12TextureSubresource* resolveSubresource = - PrepareTextureSubresourceForWrite(d3d12CommandList, resolveContainer, colorTargetInfos[idx].ResolveLayerIndex, - colorTargetInfos[idx].ResolveMipLevel, colorTargetInfos[idx].CycleResolveTexture, - D3D12_RESOURCE_STATE_RESOLVE_DEST); - - d3d12CommandList->ColorResolveSubresources[idx] = resolveSubresource; - - TrackTexture(d3d12CommandList, resolveSubresource->Parent); - } - } - - d3d12CommandList->GraphicsCommandList.CommandList->OMSetRenderTargets(colorTargetInfoCount, RTVs, false, - hasDSV ? &DSV : nullptr); - - // Set defaults graphics states - GraphicsViewPort defaultViewport; - defaultViewport.X = 0.f; - defaultViewport.Y = 0.f; - defaultViewport.Width = static_cast(frameBufferWidth); - defaultViewport.Height = static_cast(frameBufferHeight); - defaultViewport.MinDepth = 0.f; - defaultViewport.MaxDepth = 1.f; - D3D12_SetViewPort(commandList, defaultViewport); - - struct Rectangle defaultScissor; - defaultScissor.X = 0; - defaultScissor.Y = 0; - defaultScissor.Width = static_cast(frameBufferWidth); - defaultScissor.Height = static_cast(frameBufferHeight); - D3D12_SetScissorRect(commandList, defaultScissor); - - D3D12_SetStencilReference(commandList, 0); - - FColor blendConstants; - blendConstants.R = 1.0f; - blendConstants.G = 1.0f; - blendConstants.B = 1.0f; - blendConstants.A = 1.0f; - D3D12_SetBlendConstants(commandList, blendConstants); - } - - void D3D12_EndRenderPass(NonNullPtr commandList) - { - auto* d3d12CommandList = reinterpret_cast(commandList.Get()); - - // Reset Color Target state and optionally resolve color texture - for (uint32 idx = 0; idx < GPUDriver::kMaxColorTargetInfo; ++idx) - { - if (d3d12CommandList->ColorTargetSubresources[idx]) - { - if (d3d12CommandList->ColorResolveSubresources[idx]) - { - TextureSubresourceBarrier(d3d12CommandList, D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_RESOLVE_SOURCE, - d3d12CommandList->ColorTargetSubresources[idx]); - d3d12CommandList->GraphicsCommandList.CommandList->ResolveSubresource( - d3d12CommandList->ColorResolveSubresources[idx]->Parent->Resource, - d3d12CommandList->ColorResolveSubresources[idx]->Index, - d3d12CommandList->ColorTargetSubresources[idx]->Parent->Resource, - d3d12CommandList->ColorTargetSubresources[idx]->Index, - ConvertToD3D12TextureFormat( - d3d12CommandList->ColorTargetSubresources[idx]->Parent->Container->Header.CreateInfo.Format)); - - TextureSubresourceTransitionToDefaultUsage(d3d12CommandList, d3d12CommandList->ColorTargetSubresources[idx], - D3D12_RESOURCE_STATE_RESOLVE_SOURCE); - - TextureSubresourceTransitionToDefaultUsage(d3d12CommandList, d3d12CommandList->ColorResolveSubresources[idx], - D3D12_RESOURCE_STATE_RESOLVE_DEST); - } - else - { - TextureSubresourceTransitionToDefaultUsage(d3d12CommandList, d3d12CommandList->ColorTargetSubresources[idx], - D3D12_RESOURCE_STATE_RENDER_TARGET); - } - } - } - - // Reset Depth Stencil state - if (d3d12CommandList->DepthStencilSubresource) - { - TextureSubresourceTransitionToDefaultUsage(d3d12CommandList, d3d12CommandList->DepthStencilSubresource, - D3D12_RESOURCE_STATE_DEPTH_WRITE); - d3d12CommandList->DepthStencilSubresource = nullptr; - } - d3d12CommandList->CurrentGraphicsPipeline = nullptr; - - d3d12CommandList->GraphicsCommandList.CommandList->OMSetRenderTargets(0, nullptr, false, nullptr); - - // Reset bind states - ZeroArray(d3d12CommandList->ColorTargetSubresources); - ZeroArray(d3d12CommandList->ColorResolveSubresources); - // TODO : reset depth stencil subresources - // d3d12CommandList->DepthStencilTextureSubresource = NULL; - - // TODO : vertex buffer - // TODO :Vertex sampler and fragment sampler - - // ZeroArray(d3d12CommandList->VertexBuffers); - // ZeroArray(d3d12CommandList->VertexBufferOffsets); - // d3d12CommandList->VertexBufferCount = 0; - // - // ZeroArray(d3d12CommandList->VertexSamplerTextures); - // ZeroArray(d3d12CommandList->VertexSamplers); - // ZeroArray(d3d12CommandList->VertexStorageTextures); - // ZeroArray(d3d12CommandList->VertexStorageBuffers); - // - // ZeroArray(d3d12CommandList->FragmentSamplerTextures); - // ZeroArray(d3d12CommandList->FragmentSamplers); - // ZeroArray(d3d12CommandList->FragmentStorageTextures); - // ZeroArray(d3d12CommandList->FragmentStorageBuffers); - } - - void D3D12_BindGraphicsPipeline(NonNullPtr commandList, NonNullPtr graphicsPipeline) - { - auto* d3d12CommandList = reinterpret_cast(commandList.Get()); - auto pipeline = reinterpret_cast(graphicsPipeline.Get()); - - d3d12CommandList->CurrentGraphicsPipeline = pipeline; - - // Set the Descriptor heap - if (d3d12CommandList->CRB_SRV_UAV_Heap == nullptr) - { - SetDescriptorHeaps(d3d12CommandList); - } - - // Set the pipeline state - d3d12CommandList->GraphicsCommandList.CommandList->SetPipelineState(pipeline->PipelineState); - d3d12CommandList->GraphicsCommandList.CommandList->SetGraphicsRootSignature(pipeline->RootSignature->Handle); - d3d12CommandList->GraphicsCommandList.CommandList->IASetPrimitiveTopology( - JulietToD3D12_PrimitiveType[ToUnderlying(pipeline->PrimitiveType)]); - - // Mark that bindings are needed - d3d12CommandList->NeedVertexSamplerBind = true; - d3d12CommandList->NeedVertexStorageTextureBind = true; - d3d12CommandList->NeedVertexStorageBufferBind = true; - d3d12CommandList->NeedFragmentSamplerBind = true; - d3d12CommandList->NeedFragmentStorageTextureBind = true; - d3d12CommandList->NeedFragmentStorageBufferBind = true; - - for (uint32 idx = 0; idx < GPUDriver::kMaxUniformBuffersPerStage; ++idx) - { - d3d12CommandList->NeedVertexUniformBufferBind[idx] = true; - d3d12CommandList->NeedFragmentUniformBufferBind[idx] = true; - } - - for (uint32 idx = 0; idx < pipeline->VertexUniformBufferCount; ++idx) - { - // if (d3d12CommandList->VertexUniformBuffers[i] == NULL) - // { - // d3d12CommandList->VertexUniformBuffers[i] = D3D12_INTERNAL_AcquireUniformBufferFromPool(d3d12CommandBuffer); - // } - } - - for (uint32 idx = 0; idx < pipeline->FragmentUniformBufferCount; ++idx) - { - // if (d3d12CommandList->FragmentUniformBuffers[i] == NULL) - // { - // d3d12CommandList->FragmentUniformBuffers[i] = D3D12_INTERNAL_AcquireUniformBufferFromPool(d3d12CommandBuffer); - // } - } - - TrackGraphicsPipeline(d3d12CommandList, pipeline); - } - - void D3D12_DrawPrimitives(NonNullPtr commandList, uint32 numVertices, uint32 numInstances, - uint32 firstVertex, uint32 firstInstance) - { - auto* d3d12CommandList = reinterpret_cast(commandList.Get()); - // TODO : Last missing piece - // D3D12_INTERNAL_BindGraphicsResources(d3d12CommandBuffer); - - d3d12CommandList->GraphicsCommandList.CommandList->DrawInstanced(numVertices, numInstances, firstVertex, firstInstance); - } - - void D3D12_DrawIndexedPrimitives(NonNullPtr commandList, uint32 numIndices, uint32 numInstances, - uint32 firstIndex, uint32 vertexOffset, uint32 firstInstance) - { - auto* d3d12CommandList = reinterpret_cast(commandList.Get()); - d3d12CommandList->GraphicsCommandList.CommandList->DrawIndexedInstanced(numIndices, numInstances, firstIndex, - static_cast(vertexOffset), firstInstance); - } - // End Render Pass - - bool D3D12_AttachToWindow(NonNullPtr driver, NonNullPtr window) - { - auto* d3d12Driver = static_cast(driver.Get()); - - // TODO : Support more than one window - if (d3d12Driver->WindowData) - { - Assert(false, "D3D12 renderer already attached to the window. Right now we handle only one Window."); - return false; - } - - auto* windowData = static_cast(Calloc(1, sizeof(D3D12WindowData))); - if (!windowData) - { - Log(LogLevel::Error, LogCategory::Graphics, "OOM: D3D12WindowData"); - return false; - } - d3d12Driver->WindowData = windowData; - - windowData->Window = window; - - if (!CreateSwapChain(d3d12Driver, windowData, SwapChainComposition::SDR, PresentMode::VSync)) - { - Log(LogLevel::Error, LogCategory::Graphics, "AttachToWindow failure: Cannot create Swap Chain."); - Free(windowData); - return false; - } - - d3d12Driver->WindowData = windowData; - - return true; - } - - void D3D12_DetachFromWindow(NonNullPtr driver, NonNullPtr /*window*/) - { - auto* d3d12Driver = static_cast(driver.Get()); - auto* windowData = d3d12Driver->WindowData; - Assert(windowData && "Trying to destroy a swapchain but no Window Data exists"); - - D3D12_WaitUntilGPUIsIdle(driver); - - for (uint32 idx = 0; idx < GPUDriver::kMaxFramesInFlight; idx += 1) - { - if (windowData->InFlightFences[idx] != nullptr) - { - D3D12_ReleaseFence(driver, - windowData->InFlightFences[idx] JULIET_DEBUG_PARAM(ConstString("DeatchFromWindow"))); - windowData->InFlightFences[idx] = nullptr; - } - } - - DestroySwapChain(d3d12Driver, d3d12Driver->WindowData); - - SafeFree(d3d12Driver->WindowData); - d3d12Driver->WindowData = nullptr; - } - - void DestroyDriver_Internal(NonNullPtr driver) - { - // Destroy Descriptor pools - for (uint32 i = 0; i < D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES; i += 1) - { - if (driver->StagingDescriptorPools[i]) - { - DestroyStagingDescriptorPool(driver->StagingDescriptorPools[i]); - driver->StagingDescriptorPools[i] = nullptr; - } - } - - D3D12_DestroyDescriptorHeapPool(driver->SamplerHeapPool); - - // Release command buffers - for (uint32 i = 0; i < driver->AvailableCommandListCount; i += 1) - { - if (driver->AvailableCommandLists[i]) - { - DestroyCommandList(driver->AvailableCommandLists[i]); - driver->AvailableCommandLists[i] = nullptr; - } - } - - // Release fences - for (uint32 i = 0; i < driver->AvailableFenceCount; i += 1) - { - if (driver->AvailableFences[i]) - { - DestroyFence(driver->AvailableFences[i]); - driver->AvailableFences[i] = nullptr; - } - } - - DestroyGraphicsRootSignature(driver->BindlessRootSignature); - - DestroyDescriptorHeap(driver->BindlessDescriptorHeap); - - // Clean allocations - - SafeFree(driver->GraphicsPipelinesToDispose); - // Free(driver->WindowData); // TODO Should free the vector of WindowData, but we have only one for now - - if (driver->IndirectDrawCommandSignature) - { - driver->IndirectDrawCommandSignature->Release(); - } - if (driver->IndirectIndexedDrawCommandSignature) - { - driver->IndirectIndexedDrawCommandSignature->Release(); - driver->IndirectIndexedDrawCommandSignature = nullptr; - } - if (driver->IndirectDispatchCommandSignature) - { - driver->IndirectDispatchCommandSignature->Release(); - driver->IndirectDispatchCommandSignature = nullptr; - } - - if (driver->GraphicsQueue) - { - driver->GraphicsQueue->Release(); - driver->GraphicsQueue = nullptr; - } - - if (driver->D3D12Device) - { - driver->D3D12Device->Release(); - driver->D3D12Device = nullptr; - } - - if (driver->DXGIAdapter) - { - driver->DXGIAdapter->Release(); - driver->DXGIAdapter = nullptr; - } - - if (driver->DXGIFactory) - { - driver->DXGIFactory->Release(); - driver->DXGIFactory = nullptr; - } - -#if JULIET_DEBUG - ShutdownDXGIDebug(driver); -#endif - - if (driver->D3D12DLL) - { - UnloadDynamicLibrary(driver->D3D12DLL); - driver->D3D12DLL = nullptr; - } - - driver->D3D12SerializeVersionedRootSignatureFct = nullptr; - - ArenaRelease(driver->DriverArena); - } - - void D3D12_DestroyGraphicsDevice(NonNullPtr device) - { - // Note: Its a down cast so clang suggest not to do it but we are totally sure about it. - auto* driver = static_cast(device->Driver); - DestroyDriver_Internal(driver); - } - - void D3D12_DestroyGraphicsPipeline(NonNullPtr driver, NonNullPtr pipeline) - { - auto* d3d12Driver = static_cast(driver.Get()); - d3d12Driver->GraphicsPipelinesToDispose[d3d12Driver->GraphicsPipelinesToDisposeCount] = - reinterpret_cast(pipeline.Get()); - d3d12Driver->GraphicsPipelinesToDisposeCount += 1; - if (d3d12Driver->GraphicsPipelinesToDisposeCount >= d3d12Driver->GraphicsPipelinesToDisposeCapacity) - { - ReleaseGraphicsPipeline(reinterpret_cast(pipeline.Get())); - } - } - - void D3D12_CopyBufferToTexture(NonNullPtr commandList, NonNullPtr dst, NonNullPtr src) - { - auto* d3d12CommandList = reinterpret_cast(commandList.Get()); - auto* d3d12TextureContainer = reinterpret_cast(dst.Get()); - auto* d3d12Texture = d3d12TextureContainer->ActiveTexture; - - TextureTransitionFromDefaultUsage(d3d12CommandList, d3d12Texture, D3D12_RESOURCE_STATE_COPY_DEST); - - // Get resource desc using C++ API - D3D12_RESOURCE_DESC desc = d3d12Texture->Resource->GetDesc(); - - D3D12_TEXTURE_COPY_LOCATION dstLoc = {}; - dstLoc.pResource = d3d12Texture->Resource; - dstLoc.Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX; - dstLoc.SubresourceIndex = 0; - - // Get buffer resource - D3D12Buffer is anonymous, access Handle directly - // The GraphicsTransferBuffer IS a D3D12Buffer internally - struct D3D12TransferBuffer - { - D3D12Descriptor Descriptor; - ID3D12Resource* Handle; - D3D12_RESOURCE_STATES CurrentState; - }; - auto* d3d12BufferSrc = reinterpret_cast(src.Get()); - - D3D12_TEXTURE_COPY_LOCATION srcLoc = {}; - srcLoc.pResource = d3d12BufferSrc->Handle; - srcLoc.Type = D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT; - srcLoc.PlacedFootprint.Offset = 0; - srcLoc.PlacedFootprint.Footprint.Format = desc.Format; - srcLoc.PlacedFootprint.Footprint.Width = (UINT)desc.Width; - srcLoc.PlacedFootprint.Footprint.Height = desc.Height; - srcLoc.PlacedFootprint.Footprint.Depth = 1; - - uint32 rowPitch = (uint32)desc.Width * 4; - rowPitch = (rowPitch + 255u) & ~255u; - - srcLoc.PlacedFootprint.Footprint.RowPitch = rowPitch; - - d3d12CommandList->GraphicsCommandList.CommandList->CopyTextureRegion(&dstLoc, 0, 0, 0, &srcLoc, nullptr); - - TextureTransitionToDefaultUsage(d3d12CommandList, d3d12Texture, D3D12_RESOURCE_STATE_COPY_DEST); - } - - uint32 D3D12_GetDescriptorIndex(NonNullPtr device, NonNullPtr buffer) - { - auto* driver = static_cast(device->Driver); - return GetDescriptorIndex(driver, buffer); - } - - uint32 D3D12_GetDescriptorIndexTexture(NonNullPtr /*device*/, NonNullPtr texture) - { - auto* textureContainer = reinterpret_cast(texture.Get()); - return textureContainer->ActiveTexture->SRVHandle.CpuHandleIndex; - } - - GraphicsDevice* D3D12_CreateGraphicsDevice(bool enableDebug) - { - Arena* driverArena = ArenaAllocate({ .Name = "D3D12 Driver Arena" }); - D3D12Driver* driver = ArenaPushStruct(driverArena JULIET_DEBUG_PARAM("D3D12Driver struct")); - - driver->DriverArena = driverArena; - -#if JULIET_DEBUG -#ifdef IDXGIINFOQUEUE_SUPPORTED - if (enableDebug) - { - InitializeDXGIDebug(driver); - } -#endif -#endif - IDXGIFactory1* factory1 = nullptr; - HRESULT result = CreateDXGIFactory1(IID_IDXGIFactory1, reinterpret_cast(&factory1)); - if (FAILED(result)) - { - DestroyDriver_Internal(driver); - Assert(false, "DX12: Cannot create DXGIFactory1"); - return nullptr; - } - - result = factory1->QueryInterface(IID_IDXGIFactory4, reinterpret_cast(&driver->DXGIFactory)); - if (FAILED(result)) - { - DestroyDriver_Internal(driver); - Assert(false, "DX12: Cannot create DXGIFactory4. Need DXGI1.4 support. Weird because it has been " - "checked in CheckDriver"); - return nullptr; - } - factory1->Release(); - - // Query DXGI1.5 and check for monitor Tearing support - IDXGIFactory5* factory5 = nullptr; - result = driver->DXGIFactory->QueryInterface(IID_IDXGIFactory5, reinterpret_cast(&factory5)); - if (SUCCEEDED(result)) - { - bool isTearingSupported = false; - result = factory5->CheckFeatureSupport(DXGI_FEATURE_PRESENT_ALLOW_TEARING, &isTearingSupported, - sizeof(isTearingSupported)); - driver->IsTearingSupported = isTearingSupported; - if (FAILED(result)) - { - driver->IsTearingSupported = false; - } - factory5->Release(); - } - - // If available use DXGI1.6 to fetch the good graphics card. - // 1.6 should be available on most Win10 PC if they didnt their windows update. - // Lets support not having it for now... - IDXGIFactory6* factory6 = nullptr; - result = driver->DXGIFactory->QueryInterface(IID_IDXGIFactory6, reinterpret_cast(&factory6)); - if (SUCCEEDED(result)) - { - // TODO: Put into the config - static constexpr bool useLowPower = false; - result = factory6->EnumAdapterByGpuPreference(0, useLowPower ? DXGI_GPU_PREFERENCE_MINIMUM_POWER : DXGI_GPU_PREFERENCE_HIGH_PERFORMANCE, - IID_IDXGIAdapter1, reinterpret_cast(&driver->DXGIAdapter)); - factory6->Release(); - } - else - { - result = driver->DXGIFactory->EnumAdapters1(0, &driver->DXGIAdapter); - } - - if (FAILED(result)) - { - DestroyDriver_Internal(driver); - Assert(false, "Could not find adapter for D3D12Device"); - return nullptr; - } - - // Adapter is setup, get all the relevant info in the descriptor - DXGI_ADAPTER_DESC1 adapterDesc; - result = driver->DXGIAdapter->GetDesc1(&adapterDesc); - if (FAILED(result)) - { - DestroyDriver_Internal(driver); - Assert(false, "Could not get DXGIAdapter description"); - return nullptr; - } - - // Driver version - LARGE_INTEGER umdVersion; - result = driver->DXGIAdapter->CheckInterfaceSupport(IID_IDXGIDevice, &umdVersion); - if (FAILED(result)) - { - DestroyDriver_Internal(driver); - Assert(false, "Could not get DXGIAdapter driver version"); - return nullptr; - } - - Log(LogLevel::Message, LogCategory::Graphics, "D3D12 Driver Infos:"); - Log(LogLevel::Message, LogCategory::Graphics, "D3D12 Adapter: %S", adapterDesc.Description); - Log(LogLevel::Message, LogCategory::Graphics, "D3D12 Driver Version: %d.%d.%d.%d", HIWORD(umdVersion.HighPart), - LOWORD(umdVersion.HighPart), HIWORD(umdVersion.LowPart), LOWORD(umdVersion.LowPart)); - - driver->D3D12DLL = LoadDynamicLibrary(D3D12_DLL); - if (driver->D3D12DLL == nullptr) - { - Log(LogLevel::Error, LogCategory::Graphics, "DX12: Couldn't find " D3D12_DLL); - return nullptr; - } - - auto* D3D12CreateDeviceFuncPtr = - TOD3D12FuncPtr(PFN_D3D12_CREATE_DEVICE, LoadFunction(driver->D3D12DLL, D3D12_CREATEDEVICE_FUNC)); - if (D3D12CreateDeviceFuncPtr == nullptr) - { - Log(LogLevel::Error, LogCategory::Graphics, "DX12: Couldn't Load function " D3D12_CREATEDEVICE_FUNC " in " D3D12_DLL); - DestroyDriver_Internal(driver); - return nullptr; - } - - driver->D3D12SerializeVersionedRootSignatureFct = - TOD3D12FuncPtr(PFN_D3D12_SERIALIZE_VERSIONED_ROOT_SIGNATURE, - LoadFunction(driver->D3D12DLL, D3D12_SERIALIZE_VERSIONED_ROOT_SIGNATURE_FUNC)); - if (driver->D3D12SerializeVersionedRootSignatureFct == nullptr) - { - Log(LogLevel::Error, LogCategory::Graphics, - "DX12: Couldn't Load function " D3D12_SERIALIZE_VERSIONED_ROOT_SIGNATURE_FUNC " in " D3D12_DLL); - DestroyDriver_Internal(driver); - return nullptr; - } - -#if JULIET_DEBUG - if (enableDebug) - { - InitializeD3D12DebugLayer(driver); - } -#endif - - result = D3D12CreateDeviceFuncPtr(static_cast(driver->DXGIAdapter), kD3DFeatureLevel, - IID_ID3D12Device5, reinterpret_cast(&driver->D3D12Device)); - if (FAILED(result)) - { - DestroyDriver_Internal(driver); - Log(LogLevel::Error, LogCategory::Graphics, "DX12: Could not create D3D12Device5"); - return nullptr; - } - - Log(LogLevel::Message, LogCategory::Graphics, "DX12: D3D12Device Created: %p", (void*)driver->D3D12Device); - -#if JULIET_DEBUG - if (enableDebug) - { - if (!InitializeD3D12DebugInfoQueue(driver)) - { - return nullptr; - } - InitializeD3D12DebugInfoLogger(driver); - } -#endif - - // Check if UMA (unified memory architecture) is available. Used on APU i think ?? - D3D12_FEATURE_DATA_ARCHITECTURE architecture; - architecture.NodeIndex = 0; - result = driver->D3D12Device->CheckFeatureSupport(D3D12_FEATURE_ARCHITECTURE, &architecture, - sizeof(D3D12_FEATURE_DATA_ARCHITECTURE)); - if (FAILED(result)) - { - DestroyDriver_Internal(driver); - Log(LogLevel::Error, LogCategory::Graphics, "DX12: Could not get the device architecture"); - return nullptr; - } - driver->IsUMAAvailable = architecture.UMA; - driver->IsUMACacheCoherent = architecture.CacheCoherentUMA; - - // Check "GPU Upload Heap" support (for fast uniform buffers. Not supported on my 5700xt - D3D12_FEATURE_DATA_D3D12_OPTIONS16 options16; - driver->GPUUploadHeapSupported = false; - result = driver->D3D12Device->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS16, &options16, sizeof(options16)); - if (SUCCEEDED(result)) - { - driver->GPUUploadHeapSupported = options16.GPUUploadHeapSupported; - } - - // Create bindless root signature - driver->BindlessRootSignature = CreateGraphicsRootSignature(driver); - - // Command Queues - // Graphics Queue only for now - D3D12_COMMAND_QUEUE_DESC queueDesc = {}; - queueDesc.Flags = D3D12_COMMAND_QUEUE_FLAG_NONE; - queueDesc.Type = D3D12_COMMAND_LIST_TYPE_DIRECT; - queueDesc.NodeMask = 0; - queueDesc.Priority = D3D12_COMMAND_QUEUE_PRIORITY_NORMAL; - result = driver->D3D12Device->CreateCommandQueue(&queueDesc, IID_ID3D12CommandQueue, - reinterpret_cast(&driver->GraphicsQueue)); - if (FAILED(result)) - { - DestroyDriver_Internal(driver); - Log(LogLevel::Error, LogCategory::Graphics, "DX12: Could not create D3D12CommandQueue: Graphics"); - return nullptr; - } - driver->GraphicsQueue->SetName(L"GRAPHICS_QUEUE"); - driver->QueueDesc[ToUnderlying(QueueType::Graphics)] = queueDesc; - - queueDesc.Type = D3D12_COMMAND_LIST_TYPE_COMPUTE; - driver->QueueDesc[ToUnderlying(QueueType::Compute)] = queueDesc; - - queueDesc.Type = D3D12_COMMAND_LIST_TYPE_COPY; - driver->QueueDesc[ToUnderlying(QueueType::Copy)] = queueDesc; - - // Indirect Commands - D3D12_COMMAND_SIGNATURE_DESC commandSignatureDesc; - D3D12_INDIRECT_ARGUMENT_DESC indirectArgumentDesc; - ZeroStruct(indirectArgumentDesc); - - indirectArgumentDesc.Type = D3D12_INDIRECT_ARGUMENT_TYPE_DRAW; - commandSignatureDesc.NodeMask = 0; - commandSignatureDesc.ByteStride = sizeof(IndirectDrawCommand); - commandSignatureDesc.NumArgumentDescs = 1; - commandSignatureDesc.pArgumentDescs = &indirectArgumentDesc; - result = driver->D3D12Device->CreateCommandSignature(&commandSignatureDesc, nullptr, IID_ID3D12CommandSignature, - reinterpret_cast(&driver->IndirectDrawCommandSignature)); - if (FAILED(result)) - { - DestroyDriver_Internal(driver); - Log(LogLevel::Error, LogCategory::Graphics, "DX12: Could not create indirect draw command signature"); - return nullptr; - } - - indirectArgumentDesc.Type = D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED; - commandSignatureDesc.ByteStride = sizeof(IndexedIndirectDrawCommand); - commandSignatureDesc.pArgumentDescs = &indirectArgumentDesc; - - result = driver->D3D12Device->CreateCommandSignature(&commandSignatureDesc, nullptr, IID_ID3D12CommandSignature, - reinterpret_cast(&driver->IndirectIndexedDrawCommandSignature)); - if (FAILED(result)) - { - - DestroyDriver_Internal(driver); - Log(LogLevel::Error, LogCategory::Graphics, "DX12: Could not create INDEXED Indirect draw command signature"); - return nullptr; - } - - indirectArgumentDesc.Type = D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH; - commandSignatureDesc.ByteStride = sizeof(IndirectDispatchCommand); - commandSignatureDesc.pArgumentDescs = &indirectArgumentDesc; - - result = driver->D3D12Device->CreateCommandSignature(&commandSignatureDesc, nullptr, IID_ID3D12CommandSignature, - reinterpret_cast(&driver->IndirectDispatchCommandSignature)); - if (FAILED(result)) - { - DestroyDriver_Internal(driver); - Log(LogLevel::Error, LogCategory::Graphics, "DX12: Could not create Indirect dispatch command signature"); - return nullptr; - } - - // Create Pools - constexpr static size_t kMaxCommandListNumber = 16; - driver->SubmittedCommandListCapacity = kMaxCommandListNumber; - driver->SubmittedCommandListCount = 0; - driver->SubmittedCommandLists = ArenaPushArray( - driver->DriverArena, kMaxCommandListNumber JULIET_DEBUG_PARAM("Command list Ptr Array Count: {}", kMaxCommandListNumber)); - if (!driver->SubmittedCommandLists) - { - DestroyDriver_Internal(driver); - return nullptr; - } - - constexpr static size_t kMaxFencesNumber = 16; - driver->AvailableFenceCapacity = kMaxFencesNumber; - driver->AvailableFenceCount = 0; - driver->AvailableFences = - ArenaPushArray(driver->DriverArena, - kMaxFencesNumber JULIET_DEBUG_PARAM("Fence Ptr Array Count: {}", kMaxFencesNumber)); - if (!driver->AvailableFences) - { - DestroyDriver_Internal(driver); - return nullptr; - } - - // Staging descriptor pools - for (uint32 i = 0; i < D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES; i += 1) - { - driver->StagingDescriptorPools[i] = CreateStagingDescriptorPool(driver, static_cast(i)); - - if (driver->StagingDescriptorPools[i] == nullptr) - { - DestroyDriver_Internal(driver); - return nullptr; - } - } - - CreateDescriptorHeapPool(driver, driver->SamplerHeapPool, D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER, - GPUDriver::kSampler_HeapDescriptorCount); - - // Deferred dispose vectors - driver->GraphicsPipelinesToDisposeCapacity = 4; - driver->GraphicsPipelinesToDisposeCount = 0; - driver->GraphicsPipelinesToDispose = static_cast( - Calloc(driver->GraphicsPipelinesToDisposeCapacity, sizeof(D3D12GraphicsPipeline*))); - if (!driver->GraphicsPipelinesToDispose) - { - DestroyDriver_Internal(driver); - return nullptr; - } - - driver->Semantic = WrapString("TEXCOORD"); - driver->FramesInFlight = 2; - - GraphicsDevice* device = ArenaPushStruct(driverArena JULIET_DEBUG_PARAM("GraphicsDevice")); - if (!device) - { - DestroyDriver_Internal(driver); - return nullptr; - } - - // Assign Functions to the device - device->DestroyDevice = D3D12_DestroyGraphicsDevice; - device->AttachToWindow = D3D12_AttachToWindow; - device->DetachFromWindow = D3D12_DetachFromWindow; - device->AcquireSwapChainTexture = D3D12_AcquireSwapChainTexture; - device->WaitAndAcquireSwapChainTexture = D3D12_WaitAndAcquireSwapChainTexture; - device->WaitForSwapchain = D3D12_WaitForSwapchain; - device->GetSwapChainTextureFormat = D3D12_GetSwapChainTextureFormat; - device->AcquireCommandList = D3D12_AcquireCommandList; - device->SubmitCommandLists = D3D12_SubmitCommandLists; - device->BeginRenderPass = D3D12_BeginRenderPass; - device->EndRenderPass = D3D12_EndRenderPass; - device->SetViewPort = D3D12_SetViewPort; - device->SetScissorRect = D3D12_SetScissorRect; - device->SetBlendConstants = D3D12_SetBlendConstants; - device->SetStencilReference = D3D12_SetStencilReference; - device->BindGraphicsPipeline = D3D12_BindGraphicsPipeline; - device->DrawPrimitives = D3D12_DrawPrimitives; - device->DrawIndexedPrimitives = D3D12_DrawIndexedPrimitives; - device->SetIndexBuffer = D3D12_SetIndexBuffer; - device->WaitUntilGPUIsIdle = D3D12_WaitUntilGPUIsIdle; - device->SetPushConstants = D3D12_SetPushConstants; - device->QueryFence = D3D12_QueryFence; - device->ReleaseFence = D3D12_ReleaseFence; - device->CreateShader = D3D12_CreateShader; - device->DestroyShader = D3D12_DestroyShader; - device->CreateGraphicsPipeline = D3D12_CreateGraphicsPipeline; - device->DestroyGraphicsPipeline = D3D12_DestroyGraphicsPipeline; - device->CreateGraphicsBuffer = D3D12_CreateGraphicsBuffer; - device->DestroyGraphicsBuffer = D3D12_DestroyGraphicsBuffer; - device->MapGraphicsBuffer = D3D12_MapBuffer; - device->UnmapGraphicsBuffer = D3D12_UnmapBuffer; - device->CreateGraphicsTransferBuffer = D3D12_CreateGraphicsTransferBuffer; - device->DestroyGraphicsTransferBuffer = D3D12_DestroyGraphicsTransferBuffer; - device->MapGraphicsTransferBuffer = D3D12_MapBuffer; - device->UnmapGraphicsTransferBuffer = D3D12_UnmapBuffer; - device->CopyBuffer = D3D12_CopyBuffer; - device->CopyBufferToTexture = D3D12_CopyBufferToTexture; - device->TransitionBufferToReadable = D3D12_TransitionBufferToReadable; - device->GetDescriptorIndex = D3D12_GetDescriptorIndex; - device->GetDescriptorIndexTexture = D3D12_GetDescriptorIndexTexture; - device->CreateTexture = D3D12_CreateTexture; - device->DestroyTexture = D3D12_DestroyTexture; - -#if ALLOW_SHADER_HOT_RELOAD - device->UpdateGraphicsPipelineShaders = D3D12_UpdateGraphicsPipelineShaders; -#endif - - device->Driver = driver; - device->DebugEnabled = enableDebug; - - driver->GraphicsDevice = device; - - // Create Global Bindless Heap that stays alive for the driver whole lifetime - driver->BindlessDescriptorHeap = CreateDescriptorHeap(driver, D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV, - GPUDriver::kCBV_SRV_UAV_HeapDescriptorCount, false); - - return device; - } - -} // namespace - -// clang-format off -GraphicsDeviceFactory DX12DeviceFactory = { - .Name="DirectX12", - .Type=GraphicsDriverType::DX12, - .CheckDriver = D3D12_CheckDriver, - .CreateGraphicsDevice = D3D12_CreateGraphicsDevice }; -// clang-format on diff --git a/Juliet/src/Graphics/D3D12/D3D12Includes.h b/Juliet/src/Graphics/D3D12/D3D12Includes.h index 1d96082..e3dff5d 100644 --- a/Juliet/src/Graphics/D3D12/D3D12Includes.h +++ b/Juliet/src/Graphics/D3D12/D3D12Includes.h @@ -1,12 +1,12 @@ #pragma once -// Might now use it -// // Windows Runtime Library to handle ComPtr -// #include -// namespace wrl = Microsoft::WRL; +#ifndef CINTERFACE +#define CINTERFACE +#endif +#ifndef COBJMACROS +#define COBJMACROS +#endif -// Because Microsoft respects nothing -// TODO: Create an external dependency with its one fbuild.bff #ifdef __clang__ #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wreserved-macro-identifier" @@ -14,13 +14,13 @@ #pragma clang diagnostic ignored "-Wnonportable-system-include-path" #pragma clang diagnostic ignored "-Wmicrosoft-enum-value" #pragma clang diagnostic ignored "-Wnested-anon-types" -#pragma clang diagnostic ignored "-Wnon-virtual-dtor" #endif #include -#include +#include #if JULIET_DEBUG +#include #include #endif diff --git a/Juliet/src/Graphics/DebugDisplayRenderer.c b/Juliet/src/Graphics/DebugDisplayRenderer.c new file mode 100644 index 0000000..6af5543 --- /dev/null +++ b/Juliet/src/Graphics/DebugDisplayRenderer.c @@ -0,0 +1,355 @@ +#include + +#include +#include +#include +#include +#include +#include +#include + +#define kMaxDebugVertices 16384 + +typedef struct DebugVertex DebugVertex; +struct DebugVertex +{ + Vector3 Position; + FColor Color; +}; + +typedef struct DebugDisplayState DebugDisplayState; +struct DebugDisplayState +{ + GraphicsDevice* Device; + + // Pipelines + GraphicsPipeline* DepthTestedPipeline; + GraphicsPipeline* OverlayPipeline; + + // Vertex data (CPU side - single array with two regions) + DebugVertex* Vertices; // Single allocation for all vertices + uint32 DepthTestedVertexCount; + uint32 OverlayVertexCount; + + // GPU buffers (consolidated - single buffer pair) + GraphicsBuffer* VertexBuffer; + GraphicsTransferBuffer* TransferBuffer; + + bool8 Initialized; +}; + +global DebugDisplayState g_DebugState = { 0 }; + +internal void AddLine(DebugVertex* vertices, uint32* count, Vector3 start, Vector3 end, FColor color) +{ + Assert(vertices != NULL); + Assert(count != NULL); + if (*count + 2 <= kMaxDebugVertices) + { + vertices[(*count)++] = (DebugVertex){ .Position = start, .Color = color }; + vertices[(*count)++] = (DebugVertex){ .Position = end, .Color = color }; + } +} + +internal void AddSphereWireframe(DebugVertex* vertices, uint32* count, Vector3 center, float radius, FColor color) +{ + Assert(vertices != NULL); + Assert(count != NULL); + const int segments = 16; + const float pi = 3.14159265358979f; + + // Draw 3 circles (XY, XZ, YZ planes) + for (int i = 0; i < segments; ++i) + { + float a1 = (float)i / (float)segments * 2.0f * pi; + float a2 = (float)(i + 1) / (float)segments * 2.0f * pi; + + // XY circle + Vector3 p1 = { .x = center.x + cosf(a1) * radius, .y = center.y + sinf(a1) * radius, .z = center.z }; + Vector3 p2 = { .x = center.x + cosf(a2) * radius, .y = center.y + sinf(a2) * radius, .z = center.z }; + AddLine(vertices, count, p1, p2, color); + + // XZ circle + p1 = (Vector3){ .x = center.x + cosf(a1) * radius, .y = center.y, .z = center.z + sinf(a1) * radius }; + p2 = (Vector3){ .x = center.x + cosf(a2) * radius, .y = center.y, .z = center.z + sinf(a2) * radius }; + AddLine(vertices, count, p1, p2, color); + + // YZ circle + p1 = (Vector3){ .x = center.x, .y = center.y + cosf(a1) * radius, .z = center.z + sinf(a1) * radius }; + p2 = (Vector3){ .x = center.x, .y = center.y + cosf(a2) * radius, .z = center.z + sinf(a2) * radius }; + AddLine(vertices, count, p1, p2, color); + } +} + +internal GraphicsPipeline* CreateDebugPipeline(GraphicsDevice* device, TextureFormat colorFormat, bool8 enableDepthTest) +{ + GraphicsPipeline* pipeline = NULL; + String entryPoint = WrapString("main"); + ShaderCreateInfo shaderCI = { 0 }; + shaderCI.EntryPoint = entryPoint; + + TempArena path = scratch_begin(NULL, 0); + + Path vertPath = GetAssetPath(path.Arena, AssetType_Shader, ConstString("Debug.vert.dxil")); + shaderCI.Stage = ShaderStage_Vertex; + Shader* vertexShader = CreateShader(device, vertPath.FullPath, &shaderCI); + + Path fragPath = GetAssetPath(path.Arena, AssetType_Shader, ConstString("Debug.frag.dxil")); + shaderCI.Stage = ShaderStage_Fragment; + Shader* fragmentShader = CreateShader(device, fragPath.FullPath, &shaderCI); + + scratch_end(path); + + if (vertexShader == NULL || fragmentShader == NULL) + { + LogError(LogCategory_Graphics, "Failed to create debug shaders"); + if (vertexShader != NULL) + { + DestroyShader(device, vertexShader); + } + if (fragmentShader != NULL) + { + DestroyShader(device, fragmentShader); + } + } + else + { + ColorTargetDescription colorDesc = { 0 }; + colorDesc.Format = colorFormat; + + GraphicsPipelineCreateInfo createInfo = { 0 }; + createInfo.VertexShader = vertexShader; + createInfo.FragmentShader = fragmentShader; + createInfo.PrimitiveType = PrimitiveType_LineList; + createInfo.RasterizerState.FillMode = FillMode_Solid; + createInfo.RasterizerState.CullMode = CullMode_None; + createInfo.RasterizerState.FrontFace = FrontFace_CounterClockwise; + createInfo.MultisampleState.SampleCount = TextureSampleCount_One; + + // No vertex input state - using bindless buffer access via SV_VertexID + + createInfo.TargetInfo.ColorTargetDescriptions = &colorDesc; + createInfo.TargetInfo.NumColorTargets = 1; + + // Now that we support depth-stencil targets in the backend, we can enable them. + createInfo.TargetInfo.HasDepthStencilTarget = true; + createInfo.TargetInfo.DepthStencilFormat = TextureFormat_D32_FLOAT; + + if (enableDepthTest) + { + createInfo.DepthStencilState.EnableDepthTest = true; + createInfo.DepthStencilState.EnableDepthWrite = true; + createInfo.DepthStencilState.CompareOperation = CompareOperation_Less; + } + else + { + // Overlay pipeline: depth test/write off, so it draws on top + createInfo.DepthStencilState.EnableDepthTest = false; + createInfo.DepthStencilState.EnableDepthWrite = false; + createInfo.DepthStencilState.CompareOperation = CompareOperation_Always; + } + + pipeline = CreateGraphicsPipeline(device, &createInfo); + + DestroyShader(device, vertexShader); + DestroyShader(device, fragmentShader); + } + + return pipeline; +} + +void DebugDisplay_Initialize(Arena* arena, GraphicsDevice* device) +{ + Assert(arena != NULL); + if (!g_DebugState.Initialized) + { + g_DebugState.Device = device; + + // Allocate single CPU vertex array (depth-tested in first half, overlay in second half) + g_DebugState.Vertices = ArenaPushArrayTag(arena, DebugVertex, kMaxDebugVertices, "Debug Display Renderer Vertices"); + g_DebugState.DepthTestedVertexCount = 0; + g_DebugState.OverlayVertexCount = 0; + + // Create single GPU buffer pair (consolidated) + BufferCreateInfo bufferCI = { 0 }; + bufferCI.Size = kMaxDebugVertices * sizeof(DebugVertex); + bufferCI.Usage = BufferUsage_StructuredBuffer; + + g_DebugState.VertexBuffer = CreateGraphicsBuffer(device, &bufferCI); + + TransferBufferCreateInfo transferCI = { 0 }; + transferCI.Size = kMaxDebugVertices * sizeof(DebugVertex); + transferCI.Usage = TransferBufferUsage_Upload; + + g_DebugState.TransferBuffer = CreateGraphicsTransferBuffer(device, &transferCI); + + g_DebugState.Initialized = true; + } +} + +void DebugDisplay_Shutdown(GraphicsDevice* device) +{ + if (g_DebugState.Initialized) + { + if (g_DebugState.DepthTestedPipeline != NULL) + { + DestroyGraphicsPipeline(device, g_DebugState.DepthTestedPipeline); + } + if (g_DebugState.OverlayPipeline != NULL) + { + DestroyGraphicsPipeline(device, g_DebugState.OverlayPipeline); + } + + if (g_DebugState.VertexBuffer != NULL) + { + DestroyGraphicsBuffer(device, g_DebugState.VertexBuffer); + } + if (g_DebugState.TransferBuffer != NULL) + { + DestroyGraphicsTransferBuffer(device, g_DebugState.TransferBuffer); + } + + g_DebugState = (DebugDisplayState){ 0 }; + } +} + +void DebugDisplay_DrawLine(Vector3 start, Vector3 end, FColor color, bool8 overlay) +{ + // Depth-tested vertices at beginning, overlay vertices at end (growing backward) + if (overlay) + { + // Overlay vertices grow from end of buffer backward + uint32 halfMax = kMaxDebugVertices / 2; + AddLine(g_DebugState.Vertices + halfMax, &g_DebugState.OverlayVertexCount, start, end, color); + } + else + { + // Depth-tested vertices grow from start of buffer forward + AddLine(g_DebugState.Vertices, &g_DebugState.DepthTestedVertexCount, start, end, color); + } +} + +void DebugDisplay_DrawSphere(Vector3 center, float radius, FColor color, bool8 overlay) +{ + if (overlay) + { + uint32 halfMax = kMaxDebugVertices / 2; + AddSphereWireframe(g_DebugState.Vertices + halfMax, &g_DebugState.OverlayVertexCount, center, radius, color); + } + else + { + AddSphereWireframe(g_DebugState.Vertices, &g_DebugState.DepthTestedVertexCount, center, radius, color); + } +} + +void DebugDisplay_Prepare(CommandList* cmdList) +{ + if (g_DebugState.Initialized) + { + uint32 totalVertices = g_DebugState.DepthTestedVertexCount + g_DebugState.OverlayVertexCount; + if (totalVertices > 0 && g_DebugState.VertexBuffer != NULL) + { + // Upload all vertex data in one copy (depth-tested at start, overlay at kMaxDebugVertices/2) + void* ptr = MapGraphicsTransferBuffer(g_DebugState.Device, g_DebugState.TransferBuffer); + if (ptr != NULL) + { + // Copy depth-tested vertices (at start) + if (g_DebugState.DepthTestedVertexCount > 0) + { + MemCopy(ptr, g_DebugState.Vertices, g_DebugState.DepthTestedVertexCount * sizeof(DebugVertex)); + } + // Copy overlay vertices (at kMaxDebugVertices/2 offset) + if (g_DebugState.OverlayVertexCount > 0) + { + uint32 halfMax = kMaxDebugVertices / 2; + uint8* overlayDest = (uint8*)ptr + halfMax * sizeof(DebugVertex); + DebugVertex* overlaySrc = g_DebugState.Vertices + halfMax; + MemCopy(overlayDest, overlaySrc, g_DebugState.OverlayVertexCount * sizeof(DebugVertex)); + } + UnmapGraphicsTransferBuffer(g_DebugState.Device, g_DebugState.TransferBuffer); + + // Single buffer copy (full buffer to ensure both regions are uploaded) + size_t copySize = kMaxDebugVertices * sizeof(DebugVertex); + CopyBuffer(cmdList, g_DebugState.VertexBuffer, g_DebugState.TransferBuffer, copySize, 0, 0); + TransitionBufferToReadable(cmdList, g_DebugState.VertexBuffer); + } + } + } +} + +void DebugDisplay_Flush(CommandList* cmdList, RenderPass* renderPass, const Camera* camera) +{ + Assert(camera != NULL); + if (g_DebugState.Initialized) + { + // Lazy-create pipelines (need swapchain format) + if (g_DebugState.DepthTestedPipeline == NULL) + { + // Use B8G8R8A8_UNORM which matches the SDR swapchain + g_DebugState.DepthTestedPipeline = CreateDebugPipeline(g_DebugState.Device, TextureFormat_B8G8R8A8_UNORM, true); + g_DebugState.OverlayPipeline = CreateDebugPipeline(g_DebugState.Device, TextureFormat_B8G8R8A8_UNORM, false); + } + + uint32 bufferIndex = GetBufferDescriptorIndex(g_DebugState.Device, g_DebugState.VertexBuffer); + + // Render depth-tested primitives (vertices at offset 0 in buffer) + if (g_DebugState.DepthTestedVertexCount > 0 && g_DebugState.DepthTestedPipeline != NULL && g_DebugState.VertexBuffer != NULL) + { + BindGraphicsPipeline(renderPass, g_DebugState.DepthTestedPipeline); + + // Pack VP matrix + buffer index into push constants + PushData pushData = { 0 }; + pushData.ViewProjection = Camera_GetViewProjectionMatrix(camera); + pushData.MeshIndex = 0; + pushData.TransformsBufferIndex = 0; // Not used by debug shader but layout must match + pushData.BufferIndex = bufferIndex; + pushData.TextureIndex = 0; + pushData.VertexOffset = 0; // Depth-tested vertices start at 0 + pushData.Scale[0] = 1.0f; + pushData.Scale[1] = 1.0f; + pushData.Translate[0] = 0.0f; + pushData.Translate[1] = 0.0f; + + // Dummy light data as we don't light debug primitives + pushData.GlobalLightDirection = (Vector3){ .x = 0.0f, .y = 0.0f, .z = -1.0f }; + pushData.GlobalLightColor = (Vector3){ .x = 1.0f, .y = 1.0f, .z = 1.0f }; + pushData.GlobalAmbientIntensity = 1.0f; + + SetPushConstants(cmdList, ShaderStage_Vertex, 0, sizeof(pushData) / sizeof(uint32), &pushData); + + DrawPrimitives(renderPass, g_DebugState.DepthTestedVertexCount, 1, 0, 0); + } + + // Render overlay primitives (vertices at offset kMaxDebugVertices/2 in buffer) + if (g_DebugState.OverlayVertexCount > 0 && g_DebugState.OverlayPipeline != NULL && g_DebugState.VertexBuffer != NULL) + { + BindGraphicsPipeline(renderPass, g_DebugState.OverlayPipeline); + + // Pack VP matrix + buffer index into push constants + PushData pushData = { 0 }; + pushData.ViewProjection = Camera_GetViewProjectionMatrix(camera); + pushData.MeshIndex = 0; + pushData.TransformsBufferIndex = 0; + pushData.BufferIndex = bufferIndex; + pushData.TextureIndex = 0; + pushData.VertexOffset = kMaxDebugVertices / 2; // Overlay vertices start at half + pushData.Scale[0] = 1.0f; + pushData.Scale[1] = 1.0f; + pushData.Translate[0] = 0.0f; + pushData.Translate[1] = 0.0f; + + // Dummy light data as we don't light debug primitives + pushData.GlobalLightDirection = (Vector3){ .x = 0.0f, .y = 0.0f, .z = -1.0f }; + pushData.GlobalLightColor = (Vector3){ .x = 1.0f, .y = 1.0f, .z = 1.0f }; + pushData.GlobalAmbientIntensity = 1.0f; + + SetPushConstants(cmdList, ShaderStage_Vertex, 0, sizeof(pushData) / sizeof(uint32), &pushData); + + DrawPrimitives(renderPass, g_DebugState.OverlayVertexCount, 1, 0, 0); + } + + // Clear for next frame + g_DebugState.DepthTestedVertexCount = 0; + g_DebugState.OverlayVertexCount = 0; + } +} diff --git a/Juliet/src/Graphics/DebugDisplayRenderer.cpp b/Juliet/src/Graphics/DebugDisplayRenderer.cpp deleted file mode 100644 index b0b9595..0000000 --- a/Juliet/src/Graphics/DebugDisplayRenderer.cpp +++ /dev/null @@ -1,360 +0,0 @@ -#include - -#include -#include -#include -#include -#include -#include - -namespace -{ - constexpr uint32 kMaxDebugVertices = 16384; // 16K vertices = ~450KB per buffer - - struct DebugVertex - { - Vector3 Position; - FColor Color; - }; - - struct DebugDisplayState - { - GraphicsDevice* Device; - - // Pipelines - GraphicsPipeline* DepthTestedPipeline; - GraphicsPipeline* OverlayPipeline; - - // Vertex data (CPU side - single array with two regions) - DebugVertex* Vertices; // Single allocation for all vertices - uint32 DepthTestedVertexCount; - uint32 OverlayVertexCount; - - // GPU buffers (consolidated - single buffer pair) - GraphicsBuffer* VertexBuffer; - GraphicsTransferBuffer* TransferBuffer; - - bool Initialized; - }; - - DebugDisplayState g_DebugState = {}; - - void AddLine(DebugVertex* vertices, uint32& count, const Vector3& start, const Vector3& end, const FColor& color) - { - if (count + 2 > kMaxDebugVertices) - { - return; - } - - vertices[count++] = { start, color }; - vertices[count++] = { end, color }; - } - - void AddSphereWireframe(DebugVertex* vertices, uint32& count, const Vector3& center, float radius, const FColor& color) - { - constexpr int segments = 16; - constexpr float pi = 3.14159265358979f; - - // Draw 3 circles (XY, XZ, YZ planes) - for (int i = 0; i < segments; ++i) - { - float a1 = (float)i / segments * 2.0f * pi; - float a2 = (float)(i + 1) / segments * 2.0f * pi; - - // XY circle - Vector3 p1 = { center.x + cosf(a1) * radius, center.y + sinf(a1) * radius, center.z }; - Vector3 p2 = { center.x + cosf(a2) * radius, center.y + sinf(a2) * radius, center.z }; - AddLine(vertices, count, p1, p2, color); - - // XZ circle - p1 = { center.x + cosf(a1) * radius, center.y, center.z + sinf(a1) * radius }; - p2 = { center.x + cosf(a2) * radius, center.y, center.z + sinf(a2) * radius }; - AddLine(vertices, count, p1, p2, color); - - // YZ circle - p1 = { center.x, center.y + cosf(a1) * radius, center.z + sinf(a1) * radius }; - p2 = { center.x, center.y + cosf(a2) * radius, center.z + sinf(a2) * radius }; - AddLine(vertices, count, p1, p2, color); - } - } - - GraphicsPipeline* CreateDebugPipeline(GraphicsDevice* device, TextureFormat colorFormat, bool enableDepthTest) - { - String entryPoint = WrapString("main"); - ShaderCreateInfo shaderCI = {}; - shaderCI.EntryPoint = entryPoint; - - TempArena path = scratch_begin(0, 0); - - Path vertPath = GetAssetPath(path.Arena, AssetType::Shader, ConstString("Debug.vert.dxil")); - shaderCI.Stage = ShaderStage::Vertex; - Shader* vertexShader = CreateShader(device, vertPath.FullPath, shaderCI); - - Path fragPath = GetAssetPath(path.Arena, AssetType::Shader, ConstString("Debug.frag.dxil")); - shaderCI.Stage = ShaderStage::Fragment; - Shader* fragmentShader = CreateShader(device, fragPath.FullPath, shaderCI); - - scratch_end(path); - - if (!vertexShader || !fragmentShader) - { - LogError(LogCategory::Graphics, "Failed to create debug shaders"); - if (vertexShader) - { - DestroyShader(device, vertexShader); - } - if (fragmentShader) - { - DestroyShader(device, fragmentShader); - } - return nullptr; - } - - ColorTargetDescription colorDesc = {}; - colorDesc.Format = colorFormat; - - GraphicsPipelineCreateInfo createInfo = {}; - createInfo.VertexShader = vertexShader; - createInfo.FragmentShader = fragmentShader; - createInfo.PrimitiveType = PrimitiveType::LineList; - createInfo.RasterizerState.FillMode = FillMode::Solid; - createInfo.RasterizerState.CullMode = CullMode::None; - createInfo.RasterizerState.FrontFace = FrontFace::CounterClockwise; - createInfo.MultisampleState.SampleCount = TextureSampleCount::One; - - // No vertex input state - using bindless buffer access via SV_VertexID - - createInfo.TargetInfo.ColorTargetDescriptions = &colorDesc; - createInfo.TargetInfo.NumColorTargets = 1; - - // Now that we support depth-stencil targets in the backend, we can enable them. - createInfo.TargetInfo.HasDepthStencilTarget = true; - createInfo.TargetInfo.DepthStencilFormat = TextureFormat::D32_FLOAT; - - if (enableDepthTest) - { - createInfo.DepthStencilState.EnableDepthTest = true; - createInfo.DepthStencilState.EnableDepthWrite = true; - createInfo.DepthStencilState.CompareOperation = CompareOperation::Less; - } - else - { - // Overlay pipeline: depth test/write off, so it draws on top - createInfo.DepthStencilState.EnableDepthTest = false; - createInfo.DepthStencilState.EnableDepthWrite = false; - createInfo.DepthStencilState.CompareOperation = CompareOperation::Always; - } - - GraphicsPipeline* pipeline = CreateGraphicsPipeline(device, createInfo); - - DestroyShader(device, vertexShader); - DestroyShader(device, fragmentShader); - - return pipeline; - } -} // namespace - -void DebugDisplay_Initialize(NonNullPtr arena, GraphicsDevice* device) -{ - if (g_DebugState.Initialized) - { - return; - } - - g_DebugState.Device = device; - - // Allocate single CPU vertex array (depth-tested in first half, overlay in second half) - g_DebugState.Vertices = - ArenaPushArray(arena, kMaxDebugVertices JULIET_DEBUG_PARAM("Debug Display Renderer Vertices")); - g_DebugState.DepthTestedVertexCount = 0; - g_DebugState.OverlayVertexCount = 0; - - // Create single GPU buffer pair (consolidated) - BufferCreateInfo bufferCI = {}; - bufferCI.Size = kMaxDebugVertices * sizeof(DebugVertex); - bufferCI.Usage = BufferUsage::StructuredBuffer; - - g_DebugState.VertexBuffer = CreateGraphicsBuffer(device, bufferCI); - - TransferBufferCreateInfo transferCI = {}; - transferCI.Size = kMaxDebugVertices * sizeof(DebugVertex); - transferCI.Usage = TransferBufferUsage::Upload; - - g_DebugState.TransferBuffer = CreateGraphicsTransferBuffer(device, transferCI); - - g_DebugState.Initialized = true; -} - -void DebugDisplay_Shutdown(GraphicsDevice* device) -{ - if (!g_DebugState.Initialized) - { - return; - } - - if (g_DebugState.DepthTestedPipeline) - { - DestroyGraphicsPipeline(device, g_DebugState.DepthTestedPipeline); - } - if (g_DebugState.OverlayPipeline) - { - DestroyGraphicsPipeline(device, g_DebugState.OverlayPipeline); - } - - if (g_DebugState.VertexBuffer) - { - DestroyGraphicsBuffer(device, g_DebugState.VertexBuffer); - } - if (g_DebugState.TransferBuffer) - { - DestroyGraphicsTransferBuffer(device, g_DebugState.TransferBuffer); - } - - g_DebugState = {}; -} - -void DebugDisplay_DrawLine(const Vector3& start, const Vector3& end, const FColor& color, bool overlay) -{ - // Depth-tested vertices at beginning, overlay vertices at end (growing backward) - if (overlay) - { - // Overlay vertices grow from end of buffer backward - uint32 halfMax = kMaxDebugVertices / 2; - AddLine(g_DebugState.Vertices + halfMax, g_DebugState.OverlayVertexCount, start, end, color); - } - else - { - // Depth-tested vertices grow from start of buffer forward - AddLine(g_DebugState.Vertices, g_DebugState.DepthTestedVertexCount, start, end, color); - } -} - -void DebugDisplay_DrawSphere(const Vector3& center, float radius, const FColor& color, bool overlay) -{ - if (overlay) - { - uint32 halfMax = kMaxDebugVertices / 2; - AddSphereWireframe(g_DebugState.Vertices + halfMax, g_DebugState.OverlayVertexCount, center, radius, color); - } - else - { - AddSphereWireframe(g_DebugState.Vertices, g_DebugState.DepthTestedVertexCount, center, radius, color); - } -} - -void DebugDisplay_Prepare(CommandList* cmdList) -{ - if (!g_DebugState.Initialized) - { - return; - } - - uint32 totalVertices = g_DebugState.DepthTestedVertexCount + g_DebugState.OverlayVertexCount; - if (totalVertices == 0 || !g_DebugState.VertexBuffer) - { - return; - } - - // Upload all vertex data in one copy (depth-tested at start, overlay at kMaxDebugVertices/2) - void* ptr = MapGraphicsTransferBuffer(g_DebugState.Device, g_DebugState.TransferBuffer); - if (ptr) - { - // Copy depth-tested vertices (at start) - if (g_DebugState.DepthTestedVertexCount > 0) - { - MemCopy(ptr, g_DebugState.Vertices, g_DebugState.DepthTestedVertexCount * sizeof(DebugVertex)); - } - // Copy overlay vertices (at kMaxDebugVertices/2 offset) - if (g_DebugState.OverlayVertexCount > 0) - { - uint32 halfMax = kMaxDebugVertices / 2; - auto* overlayDest = static_cast(ptr) + halfMax * sizeof(DebugVertex); - auto* overlaySrc = g_DebugState.Vertices + halfMax; - MemCopy(overlayDest, overlaySrc, g_DebugState.OverlayVertexCount * sizeof(DebugVertex)); - } - UnmapGraphicsTransferBuffer(g_DebugState.Device, g_DebugState.TransferBuffer); - - // Single buffer copy (full buffer to ensure both regions are uploaded) - size_t copySize = kMaxDebugVertices * sizeof(DebugVertex); - CopyBuffer(cmdList, g_DebugState.VertexBuffer, g_DebugState.TransferBuffer, copySize); - TransitionBufferToReadable(cmdList, g_DebugState.VertexBuffer); - } -} - -void DebugDisplay_Flush(CommandList* cmdList, RenderPass* renderPass, const Camera& camera) -{ - if (!g_DebugState.Initialized) - { - return; - } - - // Lazy-create pipelines (need swapchain format) - if (!g_DebugState.DepthTestedPipeline) - { - // Use B8G8R8A8_UNORM which matches the SDR swapchain - g_DebugState.DepthTestedPipeline = CreateDebugPipeline(g_DebugState.Device, TextureFormat::B8G8R8A8_UNORM, true); - g_DebugState.OverlayPipeline = CreateDebugPipeline(g_DebugState.Device, TextureFormat::B8G8R8A8_UNORM, false); - } - - uint32 bufferIndex = GetDescriptorIndex(g_DebugState.Device, g_DebugState.VertexBuffer); - - // Render depth-tested primitives (vertices at offset 0 in buffer) - if (g_DebugState.DepthTestedVertexCount > 0 && g_DebugState.DepthTestedPipeline && g_DebugState.VertexBuffer) - { - BindGraphicsPipeline(renderPass, g_DebugState.DepthTestedPipeline); - - // Pack VP matrix + buffer index into push constants - PushData pushData = {}; - pushData.ViewProjection = Camera_GetViewProjectionMatrix(camera); - pushData.MeshIndex = 0; - pushData.TransformsBufferIndex = 0; // Not used by debug shader but layout must match - pushData.BufferIndex = bufferIndex; - pushData.TextureIndex = 0; - pushData.VertexOffset = 0; // Depth-tested vertices start at 0 - pushData.Scale[0] = 1.0f; - pushData.Scale[1] = 1.0f; - pushData.Translate[0] = 0.0f; - pushData.Translate[1] = 0.0f; - - // Dummy light data as we don't light debug primitives - pushData.GlobalLightDirection = { 0, 0, -1 }; - pushData.GlobalLightColor = { 1, 1, 1 }; - pushData.GlobalAmbientIntensity = 1.0f; - - SetPushConstants(cmdList, ShaderStage::Vertex, 0, sizeof(pushData) / sizeof(uint32), &pushData); - - DrawPrimitives(renderPass, g_DebugState.DepthTestedVertexCount, 1, 0, 0); - } - - // Render overlay primitives (vertices at offset kMaxDebugVertices/2 in buffer) - if (g_DebugState.OverlayVertexCount > 0 && g_DebugState.OverlayPipeline && g_DebugState.VertexBuffer) - { - BindGraphicsPipeline(renderPass, g_DebugState.OverlayPipeline); - - // Pack VP matrix + buffer index into push constants - PushData pushData = {}; - pushData.ViewProjection = Camera_GetViewProjectionMatrix(camera); - pushData.MeshIndex = 0; - pushData.TransformsBufferIndex = 0; - pushData.BufferIndex = bufferIndex; - pushData.TextureIndex = 0; - pushData.VertexOffset = kMaxDebugVertices / 2; // Overlay vertices start at half - pushData.Scale[0] = 1.0f; - pushData.Scale[1] = 1.0f; - pushData.Translate[0] = 0.0f; - pushData.Translate[1] = 0.0f; - - // Dummy light data as we don't light debug primitives - pushData.GlobalLightDirection = { 0, 0, -1 }; - pushData.GlobalLightColor = { 1, 1, 1 }; - pushData.GlobalAmbientIntensity = 1.0f; - - SetPushConstants(cmdList, ShaderStage::Vertex, 0, sizeof(pushData) / sizeof(uint32), &pushData); - - DrawPrimitives(renderPass, g_DebugState.OverlayVertexCount, 1, 0, 0); - } - - // Clear for next frame - g_DebugState.DepthTestedVertexCount = 0; - g_DebugState.OverlayVertexCount = 0; -} diff --git a/Juliet/src/Graphics/Graphics.c b/Juliet/src/Graphics/Graphics.c new file mode 100644 index 0000000..95fe23e --- /dev/null +++ b/Juliet/src/Graphics/Graphics.c @@ -0,0 +1,524 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +global GraphicsDeviceFactory* g_GraphicsFactories[] = { &DX12DeviceFactory }; + +internal const GraphicsDeviceFactory* ChooseFactory(GraphicsConfig config) +{ + const GraphicsDeviceFactory* result = NULL; + + // First try to check the preferred renderer from the config if any. + if (config.PreferredDriver != GraphicsDriverType_Any) + { + for (size_t i = 0; i < ArraySize(g_GraphicsFactories); ++i) + { + const GraphicsDeviceFactory* factory = g_GraphicsFactories[i]; + // If the config has a preferred renderer, immediately pick it up. + if (factory->Type == config.PreferredDriver) + { + if (factory->CheckDriver()) + { + result = factory; + break; + } + } + } + } + + // If not preferred renderer was set, use the first one that works in the list + if (result == NULL) + { + for (size_t i = 0; i < ArraySize(g_GraphicsFactories); ++i) + { + const GraphicsDeviceFactory* factory = g_GraphicsFactories[i]; + if (factory->Type == config.PreferredDriver) + { + continue; + } + + if (factory->CheckDriver()) + { + result = factory; + break; + } + } + } + + if (result == NULL) + { + Log(LogLevel_Error, LogCategory_Graphics, "CreateGraphicsDevice::ChooseFactory: No valid driver found"); + } + + return result; +} + +GraphicsDevice* CreateGraphicsDevice(GraphicsConfig config) +{ + GraphicsDevice* result = NULL; + const GraphicsDeviceFactory* chosenFactory = ChooseFactory(config); + if (chosenFactory != NULL) + { + GraphicsDevice* newDevice = chosenFactory->CreateGraphicsDevice(config.EnableDebug); + if (newDevice != NULL) + { + newDevice->Name = chosenFactory->Name; + result = newDevice; + } + } + return result; +} + +void DestroyGraphicsDevice(GraphicsDevice* device) +{ + Assert(device != NULL); + device->DestroyDevice(device); +} + +bool8 AttachToWindow(GraphicsDevice* device, Window* window) +{ + Assert(device != NULL); + Assert(window != NULL); + GPUDriver* driver = device->Driver; + return device->AttachToWindow(driver, window); +} + +void DetachFromWindow(GraphicsDevice* device, Window* window) +{ + Assert(device != NULL); + Assert(window != NULL); + GPUDriver* driver = device->Driver; + device->DetachFromWindow(driver, window); +} + +bool8 AcquireSwapChainTexture(CommandList* commandList, Window* window, Texture** swapChainTexture) +{ + Assert(commandList != NULL); + Assert(window != NULL); + CommandListHeader* header = (CommandListHeader*)commandList; + bool8 result = true; + + if (header->Device->DebugEnabled) + { + bool8 error = false; + if (header->Submitted) + { + error = true; + Assert(false && "Cannot submit command list twice"); + } + + if (header->RenderPass.IsInProgress) + { + error = true; + Assert(false && "Cannot submit command list twice"); + } + + if (error) + { + result = false; + } + } + + if (result) + { + header->Device->AcquireSwapChainTexture(commandList, window, swapChainTexture); + if (swapChainTexture != NULL) + { + header->AcquiredSwapChain = true; + } + } + + return result; +} + +bool8 WaitAndAcquireSwapChainTexture(CommandList* commandList, Window* window, Texture** swapChainTexture) +{ + Assert(commandList != NULL); + Assert(window != NULL); + CommandListHeader* header = (CommandListHeader*)commandList; + bool8 result = true; + + if (header->Device->DebugEnabled) + { + bool8 error = false; + if (header->Submitted) + { + error = true; + Assert(false && "Cannot submit command list twice"); + } + + if (header->RenderPass.IsInProgress) + { + error = true; + Assert(false && "Cannot submit command list twice"); + } + + if (error) + { + result = false; + } + } + + if (result) + { + header->Device->WaitAndAcquireSwapChainTexture(commandList, window, swapChainTexture); + if (swapChainTexture != NULL) + { + header->AcquiredSwapChain = true; + } + } + + return result; +} + +bool8 WaitForSwapchain(GraphicsDevice* device, Window* window) +{ + Assert(device != NULL); + Assert(window != NULL); + return device->WaitForSwapchain(device->Driver, window); +} + +TextureFormat GetSwapChainTextureFormat(GraphicsDevice* device, Window* window) +{ + Assert(device != NULL); + Assert(window != NULL); + return device->GetSwapChainTextureFormat(device->Driver, window); +} + +Texture* CreateTexture(GraphicsDevice* device, const TextureCreateInfo* createInfo) +{ + Assert(device != NULL); + Assert(createInfo != NULL); + return device->CreateTexture(device->Driver, createInfo); +} + +void DestroyTexture(GraphicsDevice* device, Texture* texture) +{ + Assert(device != NULL); + Assert(texture != NULL); + device->DestroyTexture(device->Driver, texture); +} + +CommandList* AcquireCommandList(GraphicsDevice* device, QueueType queueType) +{ + Assert(device != NULL); + GPUDriver* driver = device->Driver; + CommandList* cmdList = device->AcquireCommandList(driver, queueType); + if (cmdList != NULL) + { + CommandListHeader* header = (CommandListHeader*)cmdList; + header->Device = device; + header->RenderPass.CommandList = cmdList; + header->Submitted = false; + } + + return cmdList; +} + +void SubmitCommandLists(CommandList* commandList) +{ + Assert(commandList != NULL); + CommandListHeader* commandListHeader = (CommandListHeader*)commandList; + + commandListHeader->Submitted = true; + + commandListHeader->Device->SubmitCommandLists(commandList); +} + +RenderPass* BeginRenderPass(CommandList* commandList, const ColorTargetInfo* colorTargetInfo, DepthStencilTargetInfo* depthStencilTargetInfo) +{ + return BeginRenderPassTargets(commandList, colorTargetInfo, 1, depthStencilTargetInfo); +} + +RenderPass* BeginRenderPassTargets(CommandList* commandList, const ColorTargetInfo* colorTargetInfos, + uint32 colorTargetInfoCount, DepthStencilTargetInfo* depthStencilTargetInfo) +{ + Assert(commandList != NULL); + Assert(colorTargetInfos != NULL); + RenderPass* result = NULL; + + if (colorTargetInfoCount > kGPUDriver_MaxColorTargetInfo) + { + Log(LogLevel_Error, LogCategory_Graphics, "BeginRenderPass: ColorTargetInfoCount is > than kMaxColorTargetInfo"); + } + else + { + CommandListHeader* header = (CommandListHeader*)commandList; + header->Device->BeginRenderPass(commandList, colorTargetInfos, colorTargetInfoCount, depthStencilTargetInfo); + + header->RenderPass.IsInProgress = true; + result = (RenderPass*)&header->RenderPass; + } + + return result; +} + +void EndRenderPass(RenderPass* renderPass) +{ + Assert(renderPass != NULL); + CommandList* commandList = ((GPUPass*)renderPass)->CommandList; + CommandListHeader* commandListHeader = (CommandListHeader*)commandList; + + commandListHeader->Device->EndRenderPass(commandList); + + commandListHeader->RenderPass.IsInProgress = false; +} + +void SetGraphicsViewPort(RenderPass* renderPass, const GraphicsViewPort* viewPort) +{ + Assert(renderPass != NULL); + Assert(viewPort != NULL); + CommandList* commandList = ((GPUPass*)renderPass)->CommandList; + CommandListHeader* commandListHeader = (CommandListHeader*)commandList; + + commandListHeader->Device->SetViewPort(commandList, viewPort); +} + +void SetScissorRect(RenderPass* renderPass, const struct Rectangle* rectangle) +{ + Assert(renderPass != NULL); + Assert(rectangle != NULL); + CommandList* commandList = ((GPUPass*)renderPass)->CommandList; + CommandListHeader* commandListHeader = (CommandListHeader*)commandList; + + commandListHeader->Device->SetScissorRect(commandList, rectangle); +} + +void SetBlendConstants(RenderPass* renderPass, FColor blendConstants) +{ + Assert(renderPass != NULL); + CommandList* commandList = ((GPUPass*)renderPass)->CommandList; + CommandListHeader* commandListHeader = (CommandListHeader*)commandList; + + commandListHeader->Device->SetBlendConstants(commandList, blendConstants); +} + +void SetStencilReference(RenderPass* renderPass, uint8 reference) +{ + Assert(renderPass != NULL); + CommandList* commandList = ((GPUPass*)renderPass)->CommandList; + CommandListHeader* commandListHeader = (CommandListHeader*)commandList; + + commandListHeader->Device->SetStencilReference(commandList, reference); +} + +void SetIndexBuffer(CommandList* commandList, GraphicsBuffer* buffer, IndexFormat format, + size_t indexCount, index_t offset) +{ + Assert(commandList != NULL); + Assert(buffer != NULL); + CommandListHeader* commandListHeader = (CommandListHeader*)commandList; + + if (commandListHeader->Device->SetIndexBuffer != NULL) + { + commandListHeader->Device->SetIndexBuffer(commandList, buffer, format, indexCount, offset); + } +} + +void BindGraphicsPipeline(RenderPass* renderPass, GraphicsPipeline* graphicsPipeline) +{ + Assert(renderPass != NULL); + Assert(graphicsPipeline != NULL); + CommandList* commandList = ((GPUPass*)renderPass)->CommandList; + CommandListHeader* commandListHeader = (CommandListHeader*)commandList; + + commandListHeader->Device->BindGraphicsPipeline(commandList, graphicsPipeline); +} + +void DrawPrimitives(RenderPass* renderPass, uint32 numVertices, uint32 numInstances, uint32 firstVertex, uint32 firstInstance) +{ + Assert(renderPass != NULL); + CommandList* commandList = ((GPUPass*)renderPass)->CommandList; + CommandListHeader* commandListHeader = (CommandListHeader*)commandList; + + commandListHeader->Device->DrawPrimitives(commandList, numVertices, numInstances, firstVertex, firstInstance); +} + +void DrawIndexedPrimitives(RenderPass* renderPass, uint32 numIndices, uint32 numInstances, uint32 firstIndex, + uint32 vertexOffset, uint32 firstInstance) +{ + Assert(renderPass != NULL); + CommandList* commandList = ((GPUPass*)renderPass)->CommandList; + CommandListHeader* commandListHeader = (CommandListHeader*)commandList; + + if (commandListHeader->Device->DrawIndexedPrimitives != NULL) + { + commandListHeader->Device->DrawIndexedPrimitives(commandList, numIndices, numInstances, firstIndex, vertexOffset, firstInstance); + } +} + +void SetPushConstants(CommandList* commandList, ShaderStage stage, uint32 rootParameterIndex, + uint32 numConstants, const void* constants) +{ + Assert(commandList != NULL); + CommandListHeader* header = (CommandListHeader*)commandList; + header->Device->SetPushConstants(commandList, stage, rootParameterIndex, numConstants, constants); +} + +// Fences +bool8 WaitUntilGPUIsIdle(GraphicsDevice* device) +{ + Assert(device != NULL); + return device->WaitUntilGPUIsIdle(device->Driver); +} + +// Shaders +Shader* CreateShader(GraphicsDevice* device, String filename, ShaderCreateInfo* shaderCreateInfo) +{ + Assert(device != NULL); + Assert(shaderCreateInfo != NULL); + Shader* shader = NULL; + TempArena fileArena = scratch_begin(NULL, 0); + ByteBuffer shaderByteCode = { 0 }; + + // Create path from filename + if (IsAbsolutePath(filename)) + { + shaderByteCode = LoadFile(fileArena.Arena, filename); + } + + if (IsValidByteBuffer(shaderByteCode)) + { + shader = device->CreateShader(device->Driver, shaderByteCode, shaderCreateInfo JULIET_DEBUG_PARAM(filename)); + } + + scratch_end(fileArena); + + return shader; +} + +void DestroyShader(GraphicsDevice* device, Shader* shader) +{ + Assert(device != NULL); + Assert(shader != NULL); + device->DestroyShader(device->Driver, shader); +} + +GraphicsPipeline* CreateGraphicsPipeline(GraphicsDevice* device, const GraphicsPipelineCreateInfo* createInfo) +{ + Assert(device != NULL); + Assert(createInfo != NULL); + return device->CreateGraphicsPipeline(device->Driver, createInfo); +} + +void DestroyGraphicsPipeline(GraphicsDevice* device, GraphicsPipeline* graphicsPipeline) +{ + Assert(device != NULL); + Assert(graphicsPipeline != NULL); + device->DestroyGraphicsPipeline(device->Driver, graphicsPipeline); +} + +#if ALLOW_SHADER_HOT_RELOAD +bool8 UpdateGraphicsPipelineShaders(GraphicsDevice* device, GraphicsPipeline* graphicsPipeline, + Shader* optional_vertexShader, Shader* optional_fragmentShader) +{ + Assert(device != NULL); + Assert(graphicsPipeline != NULL); + return device->UpdateGraphicsPipelineShaders(device->Driver, graphicsPipeline, optional_vertexShader, optional_fragmentShader); +} +#endif + +GraphicsBuffer* CreateGraphicsBuffer(GraphicsDevice* device, const BufferCreateInfo* createInfo) +{ + Assert(device != NULL); + Assert(createInfo != NULL); + return device->CreateGraphicsBuffer(device->Driver, createInfo->Size, createInfo->Stride, createInfo->Usage, createInfo->IsDynamic); +} + +GraphicsTransferBuffer* CreateGraphicsTransferBuffer(GraphicsDevice* device, const TransferBufferCreateInfo* createInfo) +{ + Assert(device != NULL); + Assert(createInfo != NULL); + return device->CreateGraphicsTransferBuffer(device->Driver, createInfo->Size, createInfo->Usage); +} + +void* MapGraphicsBuffer(GraphicsDevice* device, GraphicsBuffer* buffer) +{ + Assert(device != NULL); + Assert(buffer != NULL); + return device->MapGraphicsBuffer(device->Driver, buffer); +} + +void UnmapGraphicsBuffer(GraphicsDevice* device, GraphicsBuffer* buffer) +{ + Assert(device != NULL); + Assert(buffer != NULL); + device->UnmapGraphicsBuffer(device->Driver, buffer); +} + +void* MapGraphicsTransferBuffer(GraphicsDevice* device, GraphicsTransferBuffer* buffer) +{ + Assert(device != NULL); + Assert(buffer != NULL); + return device->MapGraphicsTransferBuffer(device->Driver, buffer); +} + +void UnmapGraphicsTransferBuffer(GraphicsDevice* device, GraphicsTransferBuffer* buffer) +{ + Assert(device != NULL); + Assert(buffer != NULL); + device->UnmapGraphicsTransferBuffer(device->Driver, buffer); +} + +void CopyBuffer(CommandList* commandList, GraphicsBuffer* dst, + GraphicsTransferBuffer* src, size_t size, size_t dstOffset, size_t srcOffset) +{ + Assert(commandList != NULL); + Assert(dst != NULL); + Assert(src != NULL); + CommandListHeader* headers = (CommandListHeader*)commandList; + headers->Device->CopyBuffer(commandList, dst, src, size, dstOffset, srcOffset); +} + +void CopyBufferToTexture(CommandList* commandList, Texture* dst, GraphicsTransferBuffer* src) +{ + Assert(commandList != NULL); + Assert(dst != NULL); + Assert(src != NULL); + CommandListHeader* headers = (CommandListHeader*)commandList; + if (headers->Device->CopyBufferToTexture != NULL) + { + headers->Device->CopyBufferToTexture(commandList, dst, src); + } +} + +void TransitionBufferToReadable(CommandList* commandList, GraphicsBuffer* buffer) +{ + Assert(commandList != NULL); + Assert(buffer != NULL); + CommandListHeader* header = (CommandListHeader*)commandList; + header->Device->TransitionBufferToReadable(commandList, buffer); +} + +uint32 GetBufferDescriptorIndex(GraphicsDevice* device, GraphicsBuffer* buffer) +{ + Assert(device != NULL); + Assert(buffer != NULL); + return device->GetDescriptorIndex(device, buffer); +} + +uint32 GetTextureDescriptorIndex(GraphicsDevice* device, Texture* texture) +{ + Assert(device != NULL); + Assert(texture != NULL); + return device->GetDescriptorIndexTexture(device, texture); +} + +void DestroyGraphicsBuffer(GraphicsDevice* device, GraphicsBuffer* buffer) +{ + Assert(device != NULL); + Assert(buffer != NULL); + device->DestroyGraphicsBuffer(buffer); +} + +void DestroyGraphicsTransferBuffer(GraphicsDevice* device, GraphicsTransferBuffer* buffer) +{ + Assert(device != NULL); + Assert(buffer != NULL); + device->DestroyGraphicsTransferBuffer(buffer); +} diff --git a/Juliet/src/Graphics/Graphics.cpp b/Juliet/src/Graphics/Graphics.cpp deleted file mode 100644 index 8b45a8d..0000000 --- a/Juliet/src/Graphics/Graphics.cpp +++ /dev/null @@ -1,431 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#include -#include - -namespace Internal::Graphics -{ - // TODO : IfDef new factories that are not compatible - // Low chance of porting on something else than windows though. May be linux but will use vulkan that works on windows - constexpr GraphicsDeviceFactory* Factories[] = { &DX12DeviceFactory }; - - const GraphicsDeviceFactory* ChooseFactory(GraphicsConfig config) - { - // First try to check the preferred renderer from the config if any. - if (config.PreferredDriver != GraphicsDriverType::Any) - { - for (const GraphicsDeviceFactory* factory : Factories) - { - // If the config has a preferred renderer, immediately pick it up. - if (factory->Type == config.PreferredDriver) - { - if (factory->CheckDriver()) - { - return factory; - } - } - } - } - - // If not preferred renderer was set, use the first one that works in the list - for (const GraphicsDeviceFactory* factory : Factories) - { - if (factory->Type == config.PreferredDriver) - { - continue; - } - - // TODO : Make sure it's supported by querying it first. If supported -> Lets go - if (factory->CheckDriver()) - { - return factory; - } - } - - Log(LogLevel::Error, LogCategory::Graphics, "CreateGraphicsDevice::ChooseFactory: No valid driver found"); - return nullptr; - } -} // namespace Internal::Graphics - -GraphicsDevice* CreateGraphicsDevice(GraphicsConfig config) -{ - if (const GraphicsDeviceFactory* chosenFactory = Internal::Graphics::ChooseFactory(config)) - { - if (GraphicsDevice* newDevice = chosenFactory->CreateGraphicsDevice(config.EnableDebug)) - { - newDevice->Name = chosenFactory->Name; - return newDevice; - } - } - return nullptr; -} - -void DestroyGraphicsDevice(NonNullPtr device) -{ - device->DestroyDevice(device); -} - -bool AttachToWindow(NonNullPtr device, NonNullPtr window) -{ - GPUDriver* driver = device->Driver; - return device->AttachToWindow(driver, window); -} - -void DetachFromWindow(NonNullPtr device, NonNullPtr window) -{ - GPUDriver* driver = device->Driver; - device->DetachFromWindow(driver, window); -} - -bool AcquireSwapChainTexture(NonNullPtr commandList, NonNullPtr window, Texture** swapChainTexture) -{ - auto header = reinterpret_cast(commandList.Get()); - - if (header->Device->DebugEnabled) - { - bool error = false; - if (header->Submitted) - { - error = true; - Assert(false, "Cannot submit command list twice"); - } - - if (header->RenderPass.IsInProgress) - { - error = true; - Assert(false, "Cannot submit command list twice"); - } - - if (error) - { - return false; - } - } - - header->Device->AcquireSwapChainTexture(commandList, window, swapChainTexture); - if (swapChainTexture) - { - header->AcquiredSwapChain = true; - } - - return true; -} - -bool WaitAndAcquireSwapChainTexture(NonNullPtr commandList, NonNullPtr window, Texture** swapChainTexture) -{ - auto header = reinterpret_cast(commandList.Get()); - - if (header->Device->DebugEnabled) - { - bool error = false; - if (header->Submitted) - { - error = true; - Assert(false, "Cannot submit command list twice"); - } - - if (header->RenderPass.IsInProgress) - { - error = true; - Assert(false, "Cannot submit command list twice"); - } - - if (error) - { - return false; - } - } - - header->Device->WaitAndAcquireSwapChainTexture(commandList, window, swapChainTexture); - if (swapChainTexture) - { - header->AcquiredSwapChain = true; - } - - return true; -} - -bool WaitForSwapchain(NonNullPtr device, NonNullPtr window) -{ - return device->WaitForSwapchain(device->Driver, window); -} - -TextureFormat GetSwapChainTextureFormat(NonNullPtr device, NonNullPtr window) -{ - return device->GetSwapChainTextureFormat(device->Driver, window); -} - -Texture* CreateTexture(NonNullPtr device, const TextureCreateInfo& createInfo) -{ - return device->CreateTexture(device->Driver, createInfo); -} - -void DestroyTexture(NonNullPtr device, NonNullPtr texture) -{ - device->DestroyTexture(device->Driver, texture); -} - -CommandList* AcquireCommandList(NonNullPtr device, QueueType queueType /* = QueueType::Graphics */) -{ - GPUDriver* driver = device->Driver; - CommandList* cmdList = device->AcquireCommandList(driver, queueType); - if (!cmdList) - { - return nullptr; - } - - auto header = reinterpret_cast(cmdList); - header->Device = device.Get(); - header->RenderPass.CommandList = cmdList; - header->Submitted = false; - - return cmdList; -} - -void SubmitCommandLists(NonNullPtr commandList) -{ - auto* commandListHeader = reinterpret_cast(commandList.Get()); - - commandListHeader->Submitted = true; - - commandListHeader->Device->SubmitCommandLists(commandList); -} - -RenderPass* BeginRenderPass(NonNullPtr commandList, ColorTargetInfo& colorTargetInfo, DepthStencilTargetInfo* depthStencilTargetInfo) -{ - return BeginRenderPass(commandList, &colorTargetInfo, 1, depthStencilTargetInfo); -} - -RenderPass* BeginRenderPass(NonNullPtr commandList, NonNullPtr colorTargetInfos, - uint32 colorTargetInfoCount, DepthStencilTargetInfo* depthStencilTargetInfo) -{ - if (colorTargetInfoCount > GPUDriver::kMaxColorTargetInfo) - { - Log(LogLevel::Error, LogCategory::Graphics, "BeginRenderPass: ColorTargetInfoCount is > than kMaxColorTargetInfo"); - return nullptr; - } - - auto* header = reinterpret_cast(commandList.Get()); - header->Device->BeginRenderPass(commandList, colorTargetInfos, colorTargetInfoCount, depthStencilTargetInfo); - - header->RenderPass.IsInProgress = true; - return reinterpret_cast(&header->RenderPass); -} - -void EndRenderPass(NonNullPtr renderPass) -{ - auto* commandList = reinterpret_cast(renderPass.Get())->CommandList; - auto* commandListHeader = reinterpret_cast(commandList); - - commandListHeader->Device->EndRenderPass(commandList); - - commandListHeader->RenderPass.IsInProgress = false; -} - -void SetGraphicsViewPort(NonNullPtr renderPass, const GraphicsViewPort& viewPort) -{ - auto* commandList = reinterpret_cast(renderPass.Get())->CommandList; - auto* commandListHeader = reinterpret_cast(commandList); - - commandListHeader->Device->SetViewPort(commandList, viewPort); -} - -void SetScissorRect(NonNullPtr renderPass, const struct Rectangle& rectangle) -{ - auto* commandList = reinterpret_cast(renderPass.Get())->CommandList; - auto* commandListHeader = reinterpret_cast(commandList); - - commandListHeader->Device->SetScissorRect(commandList, rectangle); -} - -void SetBlendConstants(NonNullPtr renderPass, FColor blendConstants) -{ - auto* commandList = reinterpret_cast(renderPass.Get())->CommandList; - auto* commandListHeader = reinterpret_cast(commandList); - - commandListHeader->Device->SetBlendConstants(commandList, blendConstants); -} - -void SetStencilReference(NonNullPtr renderPass, uint8 reference) -{ - auto* commandList = reinterpret_cast(renderPass.Get())->CommandList; - auto* commandListHeader = reinterpret_cast(commandList); - - commandListHeader->Device->SetStencilReference(commandList, reference); -} - -void SetIndexBuffer(NonNullPtr commandList, NonNullPtr buffer, IndexFormat format, - size_t indexCount, index_t offset) -{ - auto* commandListHeader = reinterpret_cast(commandList.Get()); - - if (commandListHeader->Device->SetIndexBuffer) - { - commandListHeader->Device->SetIndexBuffer(commandList, buffer, format, indexCount, offset); - } -} - -void BindGraphicsPipeline(NonNullPtr renderPass, NonNullPtr graphicsPipeline) -{ - auto* commandList = reinterpret_cast(renderPass.Get())->CommandList; - auto* commandListHeader = reinterpret_cast(commandList); - - commandListHeader->Device->BindGraphicsPipeline(commandList, graphicsPipeline); -} - -void DrawPrimitives(NonNullPtr renderPass, uint32 numVertices, uint32 numInstances, uint32 firstVertex, uint32 firstInstance) -{ - auto* commandList = reinterpret_cast(renderPass.Get())->CommandList; - auto* commandListHeader = reinterpret_cast(commandList); - - commandListHeader->Device->DrawPrimitives(commandList, numVertices, numInstances, firstVertex, firstInstance); -} - -void DrawIndexedPrimitives(NonNullPtr renderPass, uint32 numIndices, uint32 numInstances, uint32 firstIndex, - uint32 vertexOffset, uint32 firstInstance) -{ - auto* commandList = reinterpret_cast(renderPass.Get())->CommandList; - auto* commandListHeader = reinterpret_cast(commandList); - - if (commandListHeader->Device->DrawIndexedPrimitives) - { - commandListHeader->Device->DrawIndexedPrimitives(commandList, numIndices, numInstances, firstIndex, vertexOffset, firstInstance); - } -} - -void SetPushConstants(NonNullPtr commandList, ShaderStage stage, uint32 rootParameterIndex, - uint32 numConstants, const void* constants) -{ - auto* header = reinterpret_cast(commandList.Get()); - header->Device->SetPushConstants(commandList, stage, rootParameterIndex, numConstants, constants); -} - -// Fences -bool WaitUntilGPUIsIdle(NonNullPtr device) -{ - return device->WaitUntilGPUIsIdle(device->Driver); -} - -// Shaders -Shader* CreateShader(NonNullPtr device, String filename, ShaderCreateInfo& shaderCreateInfo) -{ - TempArena fileArena = scratch_begin(0, 0); - ByteBuffer shaderByteCode = {}; - - // Create path from filename - if (IsAbsolutePath(filename)) - { - shaderByteCode = LoadFile(fileArena.Arena, filename); - } - - if (!IsValid(shaderByteCode)) - { - return nullptr; - } - - Shader* shader = device->CreateShader(device->Driver, shaderByteCode, shaderCreateInfo JULIET_DEBUG_PARAM(filename)); - - scratch_end(fileArena); - - return shader; -} - -void DestroyShader(NonNullPtr device, NonNullPtr shader) -{ - device->DestroyShader(device->Driver, shader); -} - -GraphicsPipeline* CreateGraphicsPipeline(NonNullPtr device, const GraphicsPipelineCreateInfo& createInfo) -{ - return device->CreateGraphicsPipeline(device->Driver, createInfo); -} - -void DestroyGraphicsPipeline(NonNullPtr device, NonNullPtr graphicsPipeline) -{ - device->DestroyGraphicsPipeline(device->Driver, graphicsPipeline); -} - -#if ALLOW_SHADER_HOT_RELOAD -bool UpdateGraphicsPipelineShaders(NonNullPtr device, NonNullPtr graphicsPipeline, - Shader* optional_vertexShader, Shader* optional_fragmentShader) -{ - return device->UpdateGraphicsPipelineShaders(device->Driver, graphicsPipeline, optional_vertexShader, optional_fragmentShader); -} -#endif - -GraphicsBuffer* CreateGraphicsBuffer(NonNullPtr device, const BufferCreateInfo& createInfo) -{ - return device->CreateGraphicsBuffer(device->Driver, createInfo.Size, createInfo.Stride, createInfo.Usage, createInfo.IsDynamic); -} - -GraphicsTransferBuffer* CreateGraphicsTransferBuffer(NonNullPtr device, const TransferBufferCreateInfo& createInfo) -{ - return device->CreateGraphicsTransferBuffer(device->Driver, createInfo.Size, createInfo.Usage); -} - -void* MapGraphicsBuffer(NonNullPtr device, NonNullPtr buffer) -{ - return device->MapGraphicsBuffer(device->Driver, buffer); -} - -void UnmapGraphicsBuffer(NonNullPtr device, NonNullPtr buffer) -{ - device->UnmapGraphicsBuffer(device->Driver, buffer); -} - -void* MapGraphicsTransferBuffer(NonNullPtr device, NonNullPtr buffer) -{ - return device->MapGraphicsTransferBuffer(device->Driver, buffer); -} - -void UnmapGraphicsTransferBuffer(NonNullPtr device, NonNullPtr buffer) -{ - device->UnmapGraphicsTransferBuffer(device->Driver, buffer); -} - -void CopyBuffer(NonNullPtr commandList, NonNullPtr dst, - NonNullPtr src, size_t size, size_t dstOffset, size_t srcOffset) -{ - auto* headers = reinterpret_cast(commandList.Get()); - headers->Device->CopyBuffer(commandList, dst, src, size, dstOffset, srcOffset); -} - -void CopyBufferToTexture(NonNullPtr commandList, NonNullPtr dst, NonNullPtr src) -{ - auto* headers = reinterpret_cast(commandList.Get()); - if (headers->Device->CopyBufferToTexture) - { - headers->Device->CopyBufferToTexture(commandList, dst, src); - } -} - -void TransitionBufferToReadable(NonNullPtr commandList, NonNullPtr buffer) -{ - auto* header = reinterpret_cast(commandList.Get()); - header->Device->TransitionBufferToReadable(commandList, buffer); -} - -uint32 GetDescriptorIndex(NonNullPtr device, NonNullPtr buffer) -{ - return device->GetDescriptorIndex(device, buffer); -} - -uint32 GetDescriptorIndex(NonNullPtr device, NonNullPtr texture) -{ - return device->GetDescriptorIndexTexture(device, texture); -} - -void DestroyGraphicsBuffer(NonNullPtr device, NonNullPtr buffer) -{ - device->DestroyGraphicsBuffer(buffer); -} - -void DestroyGraphicsTransferBuffer(NonNullPtr device, NonNullPtr buffer) -{ - device->DestroyGraphicsTransferBuffer(buffer); -} diff --git a/Juliet/src/Graphics/GraphicsDevice.h b/Juliet/src/Graphics/GraphicsDevice.h index 783c5e5..f871e07 100644 --- a/Juliet/src/Graphics/GraphicsDevice.h +++ b/Juliet/src/Graphics/GraphicsDevice.h @@ -1,136 +1,140 @@ #pragma once -#include #include #include #include #include +typedef struct TextureHeader TextureHeader; struct TextureHeader { TextureCreateInfo CreateInfo; }; +typedef struct GPUPass GPUPass; struct GPUPass { CommandList* CommandList; - bool IsInProgress : 1; + bool8 IsInProgress : 1; }; +typedef struct CommandListHeader CommandListHeader; struct CommandListHeader { - GraphicsDevice* Device = nullptr; - bool AcquiredSwapChain = false; - bool Submitted = false; + GraphicsDevice* Device; + bool8 AcquiredSwapChain; + bool8 Submitted; GPUPass RenderPass; }; +#define kGPUDriver_MaxFramesInFlight 3 +#define kGPUDriver_MaxColorTargetInfo 4 +#define kGPUDriver_MaxUniformBuffersPerStage 4 +#define kGPUDriver_MaxVertexBuffers 16 + +#define kGPUDriver_CBV_SRV_UAV_HeapDescriptorCount 65536 +#define kGPUDriver_Sampler_HeapDescriptorCount 2048 + +typedef struct GPUDriver GPUDriver; struct GPUDriver { - Arena* DriverArena = {}; - - static constexpr uint8 kMaxFramesInFlight = 3; - static constexpr uint8 kMaxColorTargetInfo = 4; - static constexpr uint8 kMaxUniformBuffersPerStage = 4; - static constexpr uint8 kMaxVertexBuffers = 16; - - static constexpr uint32 kCBV_SRV_UAV_HeapDescriptorCount = 65536; - static constexpr uint32 kSampler_HeapDescriptorCount = 2048; + Arena* DriverArena; }; struct GraphicsDevice { - void (*DestroyDevice)(NonNullPtr self); + void (*DestroyDevice)(GraphicsDevice* self); // Attach to window - bool (*AttachToWindow)(NonNullPtr driver, NonNullPtr window); - void (*DetachFromWindow)(NonNullPtr driver, NonNullPtr window); + bool8 (*AttachToWindow)(GPUDriver* driver, Window* window); + void (*DetachFromWindow)(GPUDriver* driver, Window* window); // SwapChain - bool (*AcquireSwapChainTexture)(NonNullPtr commandList, NonNullPtr window, Texture** swapChainTexture); - bool (*WaitAndAcquireSwapChainTexture)(NonNullPtr commandList, NonNullPtr window, Texture** swapChainTexture); - bool (*WaitForSwapchain)(NonNullPtr driver, NonNullPtr window); - TextureFormat (*GetSwapChainTextureFormat)(NonNullPtr driver, NonNullPtr window); + bool8 (*AcquireSwapChainTexture)(CommandList* commandList, Window* window, Texture** swapChainTexture); + bool8 (*WaitAndAcquireSwapChainTexture)(CommandList* commandList, Window* window, Texture** swapChainTexture); + bool8 (*WaitForSwapchain)(GPUDriver* driver, Window* window); + TextureFormat (*GetSwapChainTextureFormat)(GPUDriver* driver, Window* window); // CommandLists - CommandList* (*AcquireCommandList)(NonNullPtr driver, QueueType queueType); - bool (*SubmitCommandLists)(NonNullPtr commandList); + CommandList* (*AcquireCommandList)(GPUDriver* driver, QueueType queueType); + bool8 (*SubmitCommandLists)(CommandList* commandList); // RenderPass - void (*BeginRenderPass)(NonNullPtr commandList, NonNullPtr colorTargetInfos, + void (*BeginRenderPass)(CommandList* commandList, const ColorTargetInfo* colorTargetInfos, uint32 colorTargetInfoCount, const DepthStencilTargetInfo* depthStencilTargetInfo); - void (*EndRenderPass)(NonNullPtr commandList); + void (*EndRenderPass)(CommandList* commandList); - void (*SetViewPort)(NonNullPtr commandList, const GraphicsViewPort& viewPort); - void (*SetScissorRect)(NonNullPtr commandList, const struct Rectangle& viewPort); - void (*SetBlendConstants)(NonNullPtr commandList, FColor blendConstants); - void (*SetStencilReference)(NonNullPtr commandList, uint8 reference); - void (*SetIndexBuffer)(NonNullPtr commandList, NonNullPtr buffer, + void (*SetViewPort)(CommandList* commandList, const GraphicsViewPort* viewPort); + void (*SetScissorRect)(CommandList* commandList, const struct Rectangle* viewPort); + void (*SetBlendConstants)(CommandList* commandList, FColor blendConstants); + void (*SetStencilReference)(CommandList* commandList, uint8 reference); + void (*SetIndexBuffer)(CommandList* commandList, GraphicsBuffer* buffer, IndexFormat format, size_t indexCount, index_t offset); - void (*BindGraphicsPipeline)(NonNullPtr commandList, NonNullPtr graphicsPipeline); - void (*DrawPrimitives)(NonNullPtr commandList, uint32 numVertices, uint32 numInstances, + void (*BindGraphicsPipeline)(CommandList* commandList, GraphicsPipeline* graphicsPipeline); + void (*DrawPrimitives)(CommandList* commandList, uint32 numVertices, uint32 numInstances, uint32 firstVertex, uint32 firstInstance); - void (*DrawIndexedPrimitives)(NonNullPtr commandList, uint32 numIndices, uint32 numInstances, + void (*DrawIndexedPrimitives)(CommandList* commandList, uint32 numIndices, uint32 numInstances, uint32 firstIndex, uint32 vertexOffset, uint32 firstInstance); - void (*SetPushConstants)(NonNullPtr commandList, ShaderStage stage, uint32 rootParameterIndex, + void (*SetPushConstants)(CommandList* commandList, ShaderStage stage, uint32 rootParameterIndex, uint32 numConstants, const void* constants); // Fences - bool (*WaitUntilGPUIsIdle)(NonNullPtr driver); - bool (*QueryFence)(NonNullPtr driver, NonNullPtr fence); - void (*ReleaseFence)(NonNullPtr driver, NonNullPtr fence JULIET_DEBUG_PARAM(String querier)); + bool8 (*WaitUntilGPUIsIdle)(GPUDriver* driver); + bool8 (*QueryFence)(GPUDriver* driver, Fence* fence); + void (*ReleaseFence)(GPUDriver* driver, Fence* fence JULIET_DEBUG_PARAM(String querier)); // Shaders - Shader* (*CreateShader)(NonNullPtr driver, ByteBuffer shaderByteCode, - ShaderCreateInfo& shaderCreateInfo JULIET_DEBUG_PARAM(String filename)); - void (*DestroyShader)(NonNullPtr driver, NonNullPtr shader); + Shader* (*CreateShader)(GPUDriver* driver, ByteBuffer shaderByteCode, + ShaderCreateInfo* shaderCreateInfo JULIET_DEBUG_PARAM(String filename)); + void (*DestroyShader)(GPUDriver* driver, Shader* shader); // Pipeline - GraphicsPipeline* (*CreateGraphicsPipeline)(NonNullPtr driver, const GraphicsPipelineCreateInfo& createInfo); - void (*DestroyGraphicsPipeline)(NonNullPtr driver, NonNullPtr pipeline); - bool (*UpdateGraphicsPipelineShaders)(NonNullPtr driver, NonNullPtr graphicsPipeline, - Shader* optional_vertexShader, Shader* optional_fragmentShader); + GraphicsPipeline* (*CreateGraphicsPipeline)(GPUDriver* driver, const GraphicsPipelineCreateInfo* createInfo); + void (*DestroyGraphicsPipeline)(GPUDriver* driver, GraphicsPipeline* pipeline); + bool8 (*UpdateGraphicsPipelineShaders)(GPUDriver* driver, GraphicsPipeline* graphicsPipeline, + Shader* optional_vertexShader, Shader* optional_fragmentShader); // Textures - Texture* (*CreateTexture)(NonNullPtr driver, const TextureCreateInfo& createInfo); - void (*DestroyTexture)(NonNullPtr driver, NonNullPtr texture); + Texture* (*CreateTexture)(GPUDriver* driver, const TextureCreateInfo* createInfo); + void (*DestroyTexture)(GPUDriver* driver, Texture* texture); // Buffers - GraphicsBuffer* (*CreateGraphicsBuffer)(NonNullPtr driver, size_t size, size_t stride, - BufferUsage usage, bool isDynamic); - void (*DestroyGraphicsBuffer)(NonNullPtr buffer); + GraphicsBuffer* (*CreateGraphicsBuffer)(GPUDriver* driver, size_t size, size_t stride, + BufferUsage usage, bool8 isDynamic); + void (*DestroyGraphicsBuffer)(GraphicsBuffer* buffer); - void* (*MapGraphicsBuffer)(NonNullPtr driver, NonNullPtr buffer); - void (*UnmapGraphicsBuffer)(NonNullPtr driver, NonNullPtr buffer); + void* (*MapGraphicsBuffer)(GPUDriver* driver, GraphicsBuffer* buffer); + void (*UnmapGraphicsBuffer)(GPUDriver* driver, GraphicsBuffer* buffer); - GraphicsTransferBuffer* (*CreateGraphicsTransferBuffer)(NonNullPtr driver, size_t size, TransferBufferUsage usage); - void (*DestroyGraphicsTransferBuffer)(NonNullPtr buffer); + GraphicsTransferBuffer* (*CreateGraphicsTransferBuffer)(GPUDriver* driver, size_t size, TransferBufferUsage usage); + void (*DestroyGraphicsTransferBuffer)(GraphicsTransferBuffer* buffer); - void* (*MapGraphicsTransferBuffer)(NonNullPtr driver, NonNullPtr buffer); - void (*UnmapGraphicsTransferBuffer)(NonNullPtr driver, NonNullPtr buffer); - void (*CopyBuffer)(NonNullPtr commandList, NonNullPtr dst, - NonNullPtr src, size_t size, size_t dstOffset, size_t srcOffset); - void (*CopyBufferToTexture)(NonNullPtr commandList, NonNullPtr dst, - NonNullPtr src); // Assume full copy for now + void* (*MapGraphicsTransferBuffer)(GPUDriver* driver, GraphicsTransferBuffer* buffer); + void (*UnmapGraphicsTransferBuffer)(GPUDriver* driver, GraphicsTransferBuffer* buffer); + void (*CopyBuffer)(CommandList* commandList, GraphicsBuffer* dst, + GraphicsTransferBuffer* src, size_t size, size_t dstOffset, size_t srcOffset); + void (*CopyBufferToTexture)(CommandList* commandList, Texture* dst, + GraphicsTransferBuffer* src); // Assume full copy for now - void (*TransitionBufferToReadable)(NonNullPtr commandList, NonNullPtr buffer); - uint32 (*GetDescriptorIndex)(NonNullPtr device, NonNullPtr buffer); - uint32 (*GetDescriptorIndexTexture)(NonNullPtr device, NonNullPtr texture); + void (*TransitionBufferToReadable)(CommandList* commandList, GraphicsBuffer* buffer); + uint32 (*GetDescriptorIndex)(GraphicsDevice* device, GraphicsBuffer* buffer); + uint32 (*GetDescriptorIndexTexture)(GraphicsDevice* device, Texture* texture); - const char* Name = "Unknown"; - GPUDriver* Driver = nullptr; - bool DebugEnabled : 1; + const char* Name; + GPUDriver* Driver; + bool8 DebugEnabled : 1; }; +typedef struct GraphicsDeviceFactory GraphicsDeviceFactory; struct GraphicsDeviceFactory { - const char* Name = "Unknown"; - GraphicsDriverType Type = GraphicsDriverType::Any; - bool (*CheckDriver)(void); - GraphicsDevice* (*CreateGraphicsDevice)(bool enableDebug); + const char* Name; + GraphicsDriverType Type; + bool8 (*CheckDriver)(void); + GraphicsDevice* (*CreateGraphicsDevice)(bool8 enableDebug); }; extern GraphicsDeviceFactory DX12DeviceFactory; diff --git a/Juliet/src/Graphics/ImGuiRenderer.c b/Juliet/src/Graphics/ImGuiRenderer.c new file mode 100644 index 0000000..6464ccc --- /dev/null +++ b/Juliet/src/Graphics/ImGuiRenderer.c @@ -0,0 +1,436 @@ +#include + +#ifdef JULIET_ENABLE_IMGUI + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#define kImGuiMaxFramesInFlight 2 + +typedef struct FrameResources FrameResources; +struct FrameResources +{ + GraphicsBuffer* VertexBuffer; + GraphicsBuffer* IndexBuffer; + GraphicsTransferBuffer* VertexUpload; + GraphicsTransferBuffer* IndexUpload; + uint32 VertexBufferSize; // In bytes + uint32 IndexBufferSize; // In bytes +}; + +typedef struct ImGuiRendererState ImGuiRendererState; +struct ImGuiRendererState +{ + GraphicsDevice* Device; + GraphicsPipeline* Pipeline; + + // Resources + Texture* FontTexture; + Shader* VertexShader; + Shader* FragmentShader; + + // Frame Data + FrameResources Frames[kImGuiMaxFramesInFlight]; + uint32 FrameIndex; + + bool8 Initialized; +}; + +global ImGuiRendererState g_ImGuiState = { 0 }; + +// Helper to resize buffers for a specific frame +internal void EnsureBufferSize(FrameResources* frame, uint32 requiredVertexBytes, uint32 requiredIndexBytes) +{ + Assert(frame != NULL); + bool8 needVertexRealloc = requiredVertexBytes > frame->VertexBufferSize; + bool8 needIndexRealloc = requiredIndexBytes > frame->IndexBufferSize; + + // If any buffer needs reallocation, wait for GPU to finish using everybody to be safe. + if (needVertexRealloc || needIndexRealloc) + { + WaitUntilGPUIsIdle(g_ImGuiState.Device); + } + + if (needVertexRealloc) + { + if (frame->VertexBuffer != NULL) + { + DestroyGraphicsBuffer(g_ImGuiState.Device, frame->VertexBuffer); + } + if (frame->VertexUpload != NULL) + { + DestroyGraphicsTransferBuffer(g_ImGuiState.Device, frame->VertexUpload); + } + + frame->VertexBufferSize = requiredVertexBytes + 5000 * (uint32)sizeof(ImDrawVert_c); // Growth factor + + BufferCreateInfo vci = { 0 }; + vci.Size = frame->VertexBufferSize; + vci.Usage = BufferUsage_StructuredBuffer; + frame->VertexBuffer = CreateGraphicsBuffer(g_ImGuiState.Device, &vci); + + TransferBufferCreateInfo tvci = { 0 }; + tvci.Size = frame->VertexBufferSize; + tvci.Usage = TransferBufferUsage_Upload; + frame->VertexUpload = CreateGraphicsTransferBuffer(g_ImGuiState.Device, &tvci); + } + + if (needIndexRealloc) + { + if (frame->IndexBuffer != NULL) + { + DestroyGraphicsBuffer(g_ImGuiState.Device, frame->IndexBuffer); + } + if (frame->IndexUpload != NULL) + { + DestroyGraphicsTransferBuffer(g_ImGuiState.Device, frame->IndexUpload); + } + + frame->IndexBufferSize = requiredIndexBytes + 10000 * (uint32)sizeof(ImDrawIdx_c); + + BufferCreateInfo ici = { 0 }; + ici.Size = frame->IndexBufferSize; + ici.Usage = BufferUsage_IndexBuffer; + frame->IndexBuffer = CreateGraphicsBuffer(g_ImGuiState.Device, &ici); + + TransferBufferCreateInfo tici = { 0 }; + tici.Size = frame->IndexBufferSize; + tici.Usage = TransferBufferUsage_Upload; + frame->IndexUpload = CreateGraphicsTransferBuffer(g_ImGuiState.Device, &tici); + } +} + +bool8 ImGuiRenderer_Initialize(GraphicsDevice* device) +{ + bool8 result = true; + printf("ImGuiRenderer_Initialize: device=%p, g_ImGuiState=%p, Initialized=%d\n", (void*)device, + (void*)&g_ImGuiState, g_ImGuiState.Initialized); + + if (!g_ImGuiState.Initialized) + { + g_ImGuiState.Device = device; + + // Load Shaders + String entryPoint = WrapString("main"); + ShaderCreateInfo shaderCI = { 0 }; + shaderCI.EntryPoint = entryPoint; + + TempArena path = scratch_begin(NULL, 0); + + Path vertPath = GetAssetPath(path.Arena, AssetType_Shader, ConstString("ImGui.vert.dxil")); + shaderCI.Stage = ShaderStage_Vertex; + g_ImGuiState.VertexShader = CreateShader(device, vertPath.FullPath, &shaderCI); + + Path fragPath = GetAssetPath(path.Arena, AssetType_Shader, ConstString("ImGui.frag.dxil")); + shaderCI.Stage = ShaderStage_Fragment; + g_ImGuiState.FragmentShader = CreateShader(device, fragPath.FullPath, &shaderCI); + + scratch_end(path); + + if (g_ImGuiState.VertexShader == NULL || g_ImGuiState.FragmentShader == NULL) + { + LogError(LogCategory_Graphics, "Failed to load ImGui shaders"); + result = false; + } + else + { + // Build Font Texture + unsigned char* pixels = NULL; + int width = 0; + int height = 0; + ImGuiIO_FontsGetTexDataAsRGBA32(&pixels, &width, &height); + + TextureCreateInfo texCI = { 0 }; + texCI.Type = TextureType_2D; + texCI.Width = (uint32)width; + texCI.Height = (uint32)height; + + texCI.Format = TextureFormat_R8G8B8A8_UNORM; + texCI.Flags = TextureUsageFlag_Sampler; + texCI.LayerCount = 1; + texCI.MipLevelCount = 1; + texCI.SampleCount = TextureSampleCount_One; + + g_ImGuiState.FontTexture = CreateTexture(device, &texCI); + ImGuiIO_FontsSetTexID((ImTextureID)(uintptr_t)g_ImGuiState.FontTexture); + + // Upload data + uint32 rowPitch = (uint32)width * 4u; + uint32 alignedRowPitch = (rowPitch + 255u) & ~255u; + uint32 textureSize = alignedRowPitch * (uint32)height; + + TransferBufferCreateInfo tbci = { 0 }; + tbci.Size = textureSize; + tbci.Usage = TransferBufferUsage_Upload; + GraphicsTransferBuffer* tb = CreateGraphicsTransferBuffer(device, &tbci); + if (tb == NULL) + { + Log(LogLevel_Error, LogCategory_Graphics, "ImGuiRenderer: Failed to create font upload buffer"); + result = false; + } + else + { + uint8* dst = (uint8*)MapGraphicsTransferBuffer(device, tb); + + for (uint32 y = 0; y < (uint32)height; ++y) + { + MemCopy(dst + y * alignedRowPitch, pixels + y * rowPitch, rowPitch); + } + + UnmapGraphicsTransferBuffer(device, tb); + + CommandList* cmd = AcquireCommandList(device, QueueType_Graphics); + CopyBufferToTexture(cmd, g_ImGuiState.FontTexture, tb); + + SubmitCommandLists(cmd); + + WaitUntilGPUIsIdle(device); + + DestroyGraphicsTransferBuffer(device, tb); + + // Init Frame Data + g_ImGuiState.FrameIndex = 0; + for (uint32 i = 0; i < kImGuiMaxFramesInFlight; ++i) + { + g_ImGuiState.Frames[i] = (FrameResources){ 0 }; + } + + g_ImGuiState.Initialized = true; + } + } + } + + return result; +} + +void ImGuiRenderer_Shutdown(GraphicsDevice* device) +{ + if (g_ImGuiState.Initialized) + { + WaitUntilGPUIsIdle(device); + + if (g_ImGuiState.Pipeline != NULL) + { + DestroyGraphicsPipeline(device, g_ImGuiState.Pipeline); + } + if (g_ImGuiState.VertexShader != NULL) + { + DestroyShader(device, g_ImGuiState.VertexShader); + } + if (g_ImGuiState.FragmentShader != NULL) + { + DestroyShader(device, g_ImGuiState.FragmentShader); + } + if (g_ImGuiState.FontTexture != NULL) + { + DestroyTexture(device, g_ImGuiState.FontTexture); + } + + for (uint32 i = 0; i < kImGuiMaxFramesInFlight; ++i) + { + FrameResources* frame = &g_ImGuiState.Frames[i]; + if (frame->VertexBuffer != NULL) + { + DestroyGraphicsBuffer(device, frame->VertexBuffer); + } + if (frame->IndexBuffer != NULL) + { + DestroyGraphicsBuffer(device, frame->IndexBuffer); + } + if (frame->VertexUpload != NULL) + { + DestroyGraphicsTransferBuffer(device, frame->VertexUpload); + } + if (frame->IndexUpload != NULL) + { + DestroyGraphicsTransferBuffer(device, frame->IndexUpload); + } + *frame = (FrameResources){ 0 }; + } + + g_ImGuiState = (ImGuiRendererState){ 0 }; + } +} + +void ImGuiRenderer_NewFrame(void) +{ + ImGui_C_ImplWin32_NewFrame(); // Assumes Win32 initialized elsewhere + ImGui_NewFrame(); +} + +void ImGuiRenderer_Render(CommandList* cmdList, RenderPass* renderPass) +{ + if (g_ImGuiState.Initialized) + { + ImGui_Render(); + ImDrawData* drawData = ImGui_GetDrawData(); + + if (drawData != NULL && ImDrawData_GetCmdListsCount(drawData) > 0) + { + // Lazy create pipeline + if (g_ImGuiState.Pipeline == NULL) + { + // Assume B8G8R8A8_UNORM for SwapChain + GraphicsPipelineCreateInfo pci = { 0 }; + pci.VertexShader = g_ImGuiState.VertexShader; + pci.FragmentShader = g_ImGuiState.FragmentShader; + pci.PrimitiveType = PrimitiveType_TriangleList; + pci.RasterizerState.FillMode = FillMode_Solid; + pci.RasterizerState.CullMode = CullMode_None; + + ColorTargetDescription colorDesc = { 0 }; + colorDesc.Format = TextureFormat_B8G8R8A8_UNORM; // Match SwapChain + + // Blend State + colorDesc.BlendState.EnableBlend = true; + colorDesc.BlendState.SourceColorBlendFactor = BlendFactor_Src_Alpha; + colorDesc.BlendState.DestinationColorBlendFactor = BlendFactor_One_Minus_Src_Alpha; + colorDesc.BlendState.ColorBlendOperation = BlendOperation_Add; + colorDesc.BlendState.SourceAlphaBlendFactor = BlendFactor_One; + colorDesc.BlendState.DestinationAlphaBlendFactor = BlendFactor_One_Minus_Src_Alpha; + colorDesc.BlendState.AlphaBlendOperation = BlendOperation_Add; + colorDesc.BlendState.EnableColorWriteMask = true; + colorDesc.BlendState.ColorWriteMask = + ColorComponentFlags_R | ColorComponentFlags_G | ColorComponentFlags_B | ColorComponentFlags_A; + + pci.TargetInfo.ColorTargetDescriptions = &colorDesc; + pci.TargetInfo.NumColorTargets = 1; + + g_ImGuiState.Pipeline = CreateGraphicsPipeline(g_ImGuiState.Device, &pci); + } + + // Cycle Frame + g_ImGuiState.FrameIndex = (g_ImGuiState.FrameIndex + 1) % kImGuiMaxFramesInFlight; + FrameResources* currentFrame = &g_ImGuiState.Frames[g_ImGuiState.FrameIndex]; + + // Upload Buffers + uint32 totalVtx = (uint32)ImDrawData_GetTotalVtxCount(drawData); + uint32 totalIdx = (uint32)ImDrawData_GetTotalIdxCount(drawData); + size_t vtxSize = sizeof(ImDrawVert_c); + size_t idxSize = sizeof(ImDrawIdx_c); + + EnsureBufferSize(currentFrame, totalVtx * (uint32)vtxSize, totalIdx * (uint32)idxSize); + + uint8* vtxDst = (uint8*)MapGraphicsTransferBuffer(g_ImGuiState.Device, currentFrame->VertexUpload); + uint8* idxDst = (uint8*)MapGraphicsTransferBuffer(g_ImGuiState.Device, currentFrame->IndexUpload); + + int cmdListsCount = ImDrawData_GetCmdListsCount(drawData); + for (int n = 0; n < cmdListsCount; n++) + { + const ImDrawList* cmd_list = ImDrawData_GetCmdList(drawData, n); + size_t vtxBufferSize = (size_t)ImDrawList_GetVtxBufferSize(cmd_list); + size_t idxBufferSize = (size_t)ImDrawList_GetIdxBufferSize(cmd_list); + MemCopy(vtxDst, ImDrawList_GetVtxBufferData(cmd_list), vtxBufferSize * vtxSize); + MemCopy(idxDst, ImDrawList_GetIdxBufferData(cmd_list), idxBufferSize * idxSize); + vtxDst += vtxBufferSize * vtxSize; + idxDst += idxBufferSize * idxSize; + } + + UnmapGraphicsTransferBuffer(g_ImGuiState.Device, currentFrame->VertexUpload); + UnmapGraphicsTransferBuffer(g_ImGuiState.Device, currentFrame->IndexUpload); + + // Copy both vertex and index buffers to GPU + CopyBuffer(cmdList, currentFrame->VertexBuffer, currentFrame->VertexUpload, totalVtx * vtxSize, 0, 0); + CopyBuffer(cmdList, currentFrame->IndexBuffer, currentFrame->IndexUpload, totalIdx * idxSize, 0, 0); + + // Transition vertex buffer to SRV state (this barrier waits for copy to complete) + TransitionBufferToReadable(cmdList, currentFrame->VertexBuffer); + + // SetIndexBuffer transitions from COPY_DEST to INDEX_BUFFER (barrier waits for copy to complete) + SetIndexBuffer(cmdList, currentFrame->IndexBuffer, IndexFormat_UInt16, totalIdx, 0); + + // Render + BindGraphicsPipeline(renderPass, g_ImGuiState.Pipeline); + + // Setup Viewport / Scale + ImVec2_c displayPos = ImDrawData_GetDisplayPos(drawData); + ImVec2_c displaySize = ImDrawData_GetDisplaySize(drawData); + float L = displayPos.x; + float R = displayPos.x + displaySize.x; + float T = displayPos.y; + float B = displayPos.y + displaySize.y; + + float scale[2]; + scale[0] = 2.0f / (R - L); + scale[1] = -2.0f / (B - T); + + float translate[2]; + translate[0] = -1.0f - L * scale[0]; + translate[1] = 1.0f - T * scale[1]; + + uint32 globalVtxOffset = 0; + uint32 globalIdxOffset = 0; + + ImVec2_c clip_off = displayPos; + ImVec2_c clip_scale = ImDrawData_GetFramebufferScale(drawData); + + for (int n = 0; n < cmdListsCount; n++) + { + const ImDrawList* cmd_list = ImDrawData_GetCmdList(drawData, n); + int cmdBufferSize = ImDrawList_GetCmdBufferSize(cmd_list); + for (int cmd_i = 0; cmd_i < cmdBufferSize; cmd_i++) + { + const ImDrawCmd* pcmd = ImDrawList_GetCmd(cmd_list, cmd_i); + if (ImDrawCmd_HasUserCallback(pcmd)) + { + ImDrawCmd_InvokeUserCallback(cmd_list, pcmd); + } + else + { + // Project scissor/clipping rectangles into framebuffer space + ImVec4_c clipRect = ImDrawCmd_GetClipRect(pcmd); + ImVec2_c clip_min = { (clipRect.x - clip_off.x) * clip_scale.x, + (clipRect.y - clip_off.y) * clip_scale.y }; + ImVec2_c clip_max = { (clipRect.z - clip_off.x) * clip_scale.x, + (clipRect.w - clip_off.y) * clip_scale.y }; + + // Skip draw commands with zero-sized scissor rectangles + if (clip_max.x <= clip_min.x || clip_max.y <= clip_min.y) + { + continue; + } + + // Set scissor rect (clipping rectangle) + struct Rectangle scissorRect = { 0 }; + scissorRect.X = (int32)clip_min.x; + scissorRect.Y = (int32)clip_min.y; + scissorRect.Width = (int32)(clip_max.x - clip_min.x); + scissorRect.Height = (int32)(clip_max.y - clip_min.y); + SetScissorRect(renderPass, &scissorRect); + + // Bind Texture + uint32 textureIndex = GetTextureDescriptorIndex(g_ImGuiState.Device, (Texture*)(uintptr_t)ImDrawCmd_GetTexID(pcmd)); + + // Push Constants + PushData pushData = { 0 }; // Zero-initialize all fields + + pushData.BufferIndex = GetBufferDescriptorIndex(g_ImGuiState.Device, currentFrame->VertexBuffer); + pushData.TextureIndex = textureIndex; + pushData.VertexOffset = ImDrawCmd_GetVtxOffset(pcmd) + globalVtxOffset; // Pass vertex offset for bindless + pushData.Scale[0] = scale[0]; + pushData.Scale[1] = scale[1]; + pushData.Translate[0] = translate[0]; + pushData.Translate[1] = translate[1]; + + SetPushConstants(cmdList, ShaderStage_Vertex, 0, sizeof(pushData) / 4, &pushData); + + // Draw - pass 0 for vertexOffset since shader handles it via push constants + DrawIndexedPrimitives(renderPass, ImDrawCmd_GetElemCount(pcmd), 1, ImDrawCmd_GetIdxOffset(pcmd) + globalIdxOffset, 0, 0); + } + } + globalIdxOffset += (uint32)ImDrawList_GetIdxBufferSize(cmd_list); + globalVtxOffset += (uint32)ImDrawList_GetVtxBufferSize(cmd_list); + } + } + } +} + +#endif // JULIET_ENABLE_IMGUI diff --git a/Juliet/src/Graphics/ImGuiRenderer.cpp b/Juliet/src/Graphics/ImGuiRenderer.cpp deleted file mode 100644 index e407b5c..0000000 --- a/Juliet/src/Graphics/ImGuiRenderer.cpp +++ /dev/null @@ -1,435 +0,0 @@ -#include - -#ifdef JULIET_ENABLE_IMGUI - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace -{ - constexpr uint32 kMaxFramesInFlight = 2; - - struct FrameResources - { - GraphicsBuffer* VertexBuffer = nullptr; - GraphicsBuffer* IndexBuffer = nullptr; - GraphicsTransferBuffer* VertexUpload = nullptr; - GraphicsTransferBuffer* IndexUpload = nullptr; - uint32 VertexBufferSize = 0; // In bytes - uint32 IndexBufferSize = 0; // In bytes - }; - - struct ImGuiRendererState - { - GraphicsDevice* Device; - GraphicsPipeline* Pipeline; - - // Resources - Texture* FontTexture; - Shader* VertexShader; - Shader* FragmentShader; - - // Frame Data - FrameResources Frames[kMaxFramesInFlight]; - uint32 FrameIndex; - - bool Initialized; - }; - - ImGuiRendererState g_ImGuiState = {}; - - // Helper to resize buffers for a specific frame - void EnsureBufferSize(FrameResources& frame, uint32 requiredVertexBytes, uint32 requiredIndexBytes) - { - bool needVertexRealloc = requiredVertexBytes > frame.VertexBufferSize; - bool needIndexRealloc = requiredIndexBytes > frame.IndexBufferSize; - - // If any buffer needs reallocation, wait for GPU to finish using everybody to be safe. - // Ideally we only wait for this specific frame's fence, but we don't have that granularity easily exposed - // here. Resizing is rare, so global wait is acceptable. - if (needVertexRealloc || needIndexRealloc) - { - WaitUntilGPUIsIdle(g_ImGuiState.Device); - } - - if (needVertexRealloc) - { - if (frame.VertexBuffer) - { - DestroyGraphicsBuffer(g_ImGuiState.Device, frame.VertexBuffer); - } - if (frame.VertexUpload) - { - DestroyGraphicsTransferBuffer(g_ImGuiState.Device, frame.VertexUpload); - } - - frame.VertexBufferSize = requiredVertexBytes + 5000 * sizeof(ImDrawVert); // Growth factor - - BufferCreateInfo vci = {}; - vci.Size = frame.VertexBufferSize; - vci.Usage = BufferUsage::StructuredBuffer; - frame.VertexBuffer = CreateGraphicsBuffer(g_ImGuiState.Device, vci); - - TransferBufferCreateInfo tvci = {}; - tvci.Size = frame.VertexBufferSize; - tvci.Usage = TransferBufferUsage::Upload; - frame.VertexUpload = CreateGraphicsTransferBuffer(g_ImGuiState.Device, tvci); - } - - if (needIndexRealloc) - { - if (frame.IndexBuffer) - { - DestroyGraphicsBuffer(g_ImGuiState.Device, frame.IndexBuffer); - } - if (frame.IndexUpload) - { - DestroyGraphicsTransferBuffer(g_ImGuiState.Device, frame.IndexUpload); - } - - frame.IndexBufferSize = requiredIndexBytes + 10000 * sizeof(ImDrawIdx); - - BufferCreateInfo ici = {}; - ici.Size = frame.IndexBufferSize; - ici.Usage = BufferUsage::IndexBuffer; - frame.IndexBuffer = CreateGraphicsBuffer(g_ImGuiState.Device, ici); - - TransferBufferCreateInfo tici = {}; - tici.Size = frame.IndexBufferSize; - tici.Usage = TransferBufferUsage::Upload; - frame.IndexUpload = CreateGraphicsTransferBuffer(g_ImGuiState.Device, tici); - } - } - -} // namespace - -bool ImGuiRenderer_Initialize(GraphicsDevice* device) -{ - printf("ImGuiRenderer_Initialize: device=%p, g_ImGuiState=%p, Initialized=%d\n", (void*)device, - (void*)&g_ImGuiState, g_ImGuiState.Initialized); - if (g_ImGuiState.Initialized) - { - return true; - } - - g_ImGuiState.Device = device; - - // Load Shaders - String entryPoint = WrapString("main"); - ShaderCreateInfo shaderCI = {}; - shaderCI.EntryPoint = entryPoint; - - TempArena path = scratch_begin(0, 0); - - Path vertPath = GetAssetPath(path.Arena, AssetType::Shader, ConstString("ImGui.vert.dxil")); - shaderCI.Stage = ShaderStage::Vertex; - g_ImGuiState.VertexShader = CreateShader(device, vertPath.FullPath, shaderCI); - - Path fragPath = GetAssetPath(path.Arena, AssetType::Shader, ConstString("ImGui.frag.dxil")); - shaderCI.Stage = ShaderStage::Fragment; - g_ImGuiState.FragmentShader = CreateShader(device, fragPath.FullPath, shaderCI); - - scratch_end(path); - - if (!g_ImGuiState.VertexShader || !g_ImGuiState.FragmentShader) - { - LogError(LogCategory::Graphics, "Failed to load ImGui shaders"); - return false; - } - - // Build Font Texture - ImGuiIO& io = ImGui::GetIO(); - unsigned char* pixels; - int width, height; - io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height); - - TextureCreateInfo texCI = {}; - texCI.Type = TextureType::Texture_2D; - texCI.Width = static_cast(width); - texCI.Height = static_cast(height); - - texCI.Format = TextureFormat::R8G8B8A8_UNORM; - texCI.Flags = TextureUsageFlag::Sampler; - texCI.LayerCount = 1; - texCI.MipLevelCount = 1; - texCI.SampleCount = TextureSampleCount::One; - - g_ImGuiState.FontTexture = CreateTexture(device, texCI); - io.Fonts->SetTexID(reinterpret_cast(g_ImGuiState.FontTexture)); - - // Upload data - uint32 rowPitch = static_cast(width) * 4u; - uint32 alignedRowPitch = (rowPitch + 255u) & ~255u; - uint32 textureSize = alignedRowPitch * static_cast(height); - - TransferBufferCreateInfo tbci = {}; - tbci.Size = textureSize; - tbci.Usage = TransferBufferUsage::Upload; - GraphicsTransferBuffer* tb = CreateGraphicsTransferBuffer(device, tbci); - if (!tb) - { - Log(LogLevel::Error, LogCategory::Graphics, "ImGuiRenderer: Failed to create font upload buffer"); - return false; - } - - auto* dst = static_cast(MapGraphicsTransferBuffer(device, tb)); - - for (uint32 y = 0; y < static_cast(height); ++y) - { - MemCopy(dst + y * alignedRowPitch, pixels + y * rowPitch, rowPitch); - } - - UnmapGraphicsTransferBuffer(device, tb); - - CommandList* cmd = AcquireCommandList(device); - CopyBufferToTexture(cmd, g_ImGuiState.FontTexture, tb); - - SubmitCommandLists(cmd); - - WaitUntilGPUIsIdle(device); - - DestroyGraphicsTransferBuffer(device, tb); - - // Init Frame Data - g_ImGuiState.FrameIndex = 0; - for (uint32 i = 0; i < kMaxFramesInFlight; ++i) - { - g_ImGuiState.Frames[i] = {}; - } - - g_ImGuiState.Initialized = true; - return true; -} - -void ImGuiRenderer_Shutdown(GraphicsDevice* device) -{ - if (!g_ImGuiState.Initialized) - { - return; - } - - WaitUntilGPUIsIdle(device); - - if (g_ImGuiState.Pipeline) - { - DestroyGraphicsPipeline(device, g_ImGuiState.Pipeline); - } - if (g_ImGuiState.VertexShader) - { - DestroyShader(device, g_ImGuiState.VertexShader); - } - if (g_ImGuiState.FragmentShader) - { - DestroyShader(device, g_ImGuiState.FragmentShader); - } - if (g_ImGuiState.FontTexture) - { - DestroyTexture(device, g_ImGuiState.FontTexture); - } - - for (uint32 i = 0; i < kMaxFramesInFlight; ++i) - { - FrameResources& frame = g_ImGuiState.Frames[i]; - if (frame.VertexBuffer) - { - DestroyGraphicsBuffer(device, frame.VertexBuffer); - } - if (frame.IndexBuffer) - { - DestroyGraphicsBuffer(device, frame.IndexBuffer); - } - if (frame.VertexUpload) - { - DestroyGraphicsTransferBuffer(device, frame.VertexUpload); - } - if (frame.IndexUpload) - { - DestroyGraphicsTransferBuffer(device, frame.IndexUpload); - } - frame = {}; - } - - g_ImGuiState = {}; -} - -void ImGuiRenderer_NewFrame() -{ - ImGui_ImplWin32_NewFrame(); // Assumes Win32 initialized elsewhere - ImGui::NewFrame(); -} - -void ImGuiRenderer_Render(CommandList* cmdList, RenderPass* renderPass) -{ - if (!g_ImGuiState.Initialized) - { - return; - } - - ImGui::Render(); - ImDrawData* drawData = ImGui::GetDrawData(); - - if (!drawData || drawData->CmdListsCount == 0) - { - return; - } - - // Lazy create pipeline - if (!g_ImGuiState.Pipeline) - { - // Assume B8G8R8A8_UNORM for SwapChain - GraphicsPipelineCreateInfo pci = {}; - pci.VertexShader = g_ImGuiState.VertexShader; - pci.FragmentShader = g_ImGuiState.FragmentShader; - pci.PrimitiveType = PrimitiveType::TriangleList; - pci.RasterizerState.FillMode = FillMode::Solid; - pci.RasterizerState.CullMode = CullMode::None; - - ColorTargetDescription colorDesc = {}; - colorDesc.Format = TextureFormat::B8G8R8A8_UNORM; // Match SwapChain - - // Blend State - colorDesc.BlendState.EnableBlend = true; - colorDesc.BlendState.SourceColorBlendFactor = BlendFactor::Src_Alpha; - colorDesc.BlendState.DestinationColorBlendFactor = BlendFactor::One_Minus_Src_Alpha; - colorDesc.BlendState.ColorBlendOperation = BlendOperation::Add; - colorDesc.BlendState.SourceAlphaBlendFactor = BlendFactor::One; - colorDesc.BlendState.DestinationAlphaBlendFactor = BlendFactor::One_Minus_Src_Alpha; - colorDesc.BlendState.AlphaBlendOperation = BlendOperation::Add; - colorDesc.BlendState.EnableColorWriteMask = true; - colorDesc.BlendState.ColorWriteMask = - ColorComponentFlags::R | ColorComponentFlags::G | ColorComponentFlags::B | ColorComponentFlags::A; - - pci.TargetInfo.ColorTargetDescriptions = &colorDesc; - pci.TargetInfo.NumColorTargets = 1; - - g_ImGuiState.Pipeline = CreateGraphicsPipeline(g_ImGuiState.Device, pci); - } - - // Cycle Frame - g_ImGuiState.FrameIndex = (g_ImGuiState.FrameIndex + 1) % kMaxFramesInFlight; - FrameResources& currentFrame = g_ImGuiState.Frames[g_ImGuiState.FrameIndex]; - - // Upload Buffers - uint32 totalVtx = static_cast(drawData->TotalVtxCount); - uint32 totalIdx = static_cast(drawData->TotalIdxCount); - - EnsureBufferSize(currentFrame, totalVtx * sizeof(ImDrawVert), totalIdx * sizeof(ImDrawIdx)); - - auto* vtxDst = static_cast(MapGraphicsTransferBuffer(g_ImGuiState.Device, currentFrame.VertexUpload)); - auto* idxDst = static_cast(MapGraphicsTransferBuffer(g_ImGuiState.Device, currentFrame.IndexUpload)); - - for (int n = 0; n < drawData->CmdListsCount; n++) - { - const ImDrawList* cmd_list = drawData->CmdLists[n]; - MemCopy(vtxDst, cmd_list->VtxBuffer.Data, static_cast(cmd_list->VtxBuffer.Size) * sizeof(ImDrawVert)); - MemCopy(idxDst, cmd_list->IdxBuffer.Data, static_cast(cmd_list->IdxBuffer.Size) * sizeof(ImDrawIdx)); - vtxDst += cmd_list->VtxBuffer.Size; - idxDst += cmd_list->IdxBuffer.Size; - } - - UnmapGraphicsTransferBuffer(g_ImGuiState.Device, currentFrame.VertexUpload); - UnmapGraphicsTransferBuffer(g_ImGuiState.Device, currentFrame.IndexUpload); - - // Copy both vertex and index buffers to GPU - CopyBuffer(cmdList, currentFrame.VertexBuffer, currentFrame.VertexUpload, totalVtx * sizeof(ImDrawVert)); - CopyBuffer(cmdList, currentFrame.IndexBuffer, currentFrame.IndexUpload, totalIdx * sizeof(ImDrawIdx)); - - // Transition vertex buffer to SRV state (this barrier waits for copy to complete) - TransitionBufferToReadable(cmdList, currentFrame.VertexBuffer); - - // SetIndexBuffer transitions from COPY_DEST to INDEX_BUFFER (barrier waits for copy to complete) - SetIndexBuffer(cmdList, currentFrame.IndexBuffer, IndexFormat::UInt16, totalIdx, 0); - - // Render - BindGraphicsPipeline(renderPass, g_ImGuiState.Pipeline); - - // Setup Viewport / Scale - float L = drawData->DisplayPos.x; - float R = drawData->DisplayPos.x + drawData->DisplaySize.x; - float T = drawData->DisplayPos.y; - float B = drawData->DisplayPos.y + drawData->DisplaySize.y; - - float scale[2]; - scale[0] = 2.0f / (R - L); - scale[1] = -2.0f / (B - T); - - float translate[2]; - translate[0] = -1.0f - L * scale[0]; - translate[1] = 1.0f - T * scale[1]; - - // Global State (Display Size, etc) - - uint32 globalVtxOffset = 0; - uint32 globalIdxOffset = 0; - - ImVec2 clip_off = drawData->DisplayPos; - ImVec2 clip_scale = drawData->FramebufferScale; - - for (int n = 0; n < drawData->CmdListsCount; n++) - { - const ImDrawList* cmd_list = drawData->CmdLists[n]; - for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.Size; cmd_i++) - { - const ImDrawCmd* pcmd = &cmd_list->CmdBuffer[cmd_i]; - if (pcmd->UserCallback != nullptr) - { - pcmd->UserCallback(cmd_list, pcmd); - } - else - { - // Project scissor/clipping rectangles into framebuffer space - ImVec2 clip_min((pcmd->ClipRect.x - clip_off.x) * clip_scale.x, - (pcmd->ClipRect.y - clip_off.y) * clip_scale.y); - ImVec2 clip_max((pcmd->ClipRect.z - clip_off.x) * clip_scale.x, - (pcmd->ClipRect.w - clip_off.y) * clip_scale.y); - - // Skip draw commands with zero-sized scissor rectangles - if (clip_max.x <= clip_min.x || clip_max.y <= clip_min.y) - { - continue; - } - - // Set scissor rect (clipping rectangle) - struct Rectangle scissorRect = {}; - scissorRect.X = static_cast(clip_min.x); - scissorRect.Y = static_cast(clip_min.y); - scissorRect.Width = static_cast(clip_max.x - clip_min.x); - scissorRect.Height = static_cast(clip_max.y - clip_min.y); - SetScissorRect(renderPass, scissorRect); - - // Bind Texture - uint32 textureIndex = GetDescriptorIndex(g_ImGuiState.Device, reinterpret_cast(pcmd->GetTexID())); - - // Push Constants - PushData pushData = {}; // Zero-initialize all fields - - pushData.BufferIndex = GetDescriptorIndex(g_ImGuiState.Device, currentFrame.VertexBuffer); - pushData.TextureIndex = textureIndex; - pushData.VertexOffset = pcmd->VtxOffset + globalVtxOffset; // Pass vertex offset for bindless - pushData.Scale[0] = scale[0]; - pushData.Scale[1] = scale[1]; - pushData.Translate[0] = translate[0]; - pushData.Translate[1] = translate[1]; - - SetPushConstants(cmdList, ShaderStage::Vertex, 0, sizeof(pushData) / 4, &pushData); - - // Draw - pass 0 for vertexOffset since shader handles it via push constants - DrawIndexedPrimitives(renderPass, pcmd->ElemCount, 1, pcmd->IdxOffset + globalIdxOffset, 0, 0); - } - } - globalIdxOffset += static_cast(cmd_list->IdxBuffer.Size); - globalVtxOffset += static_cast(cmd_list->VtxBuffer.Size); - } -} - -#endif // JULIET_ENABLE_IMGUI diff --git a/Juliet/src/Graphics/Mesh.cpp b/Juliet/src/Graphics/Mesh.c similarity index 68% rename from Juliet/src/Graphics/Mesh.cpp rename to Juliet/src/Graphics/Mesh.c index 2988f46..42e0d4e 100644 --- a/Juliet/src/Graphics/Mesh.cpp +++ b/Juliet/src/Graphics/Mesh.c @@ -1,6 +1,4 @@ -#include +#include #include #include - - diff --git a/Juliet/src/Graphics/MeshRenderer.c b/Juliet/src/Graphics/MeshRenderer.c new file mode 100644 index 0000000..9602fe7 --- /dev/null +++ b/Juliet/src/Graphics/MeshRenderer.c @@ -0,0 +1,583 @@ +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +typedef struct MeshRendererState MeshRendererState; +struct MeshRendererState +{ + GraphicsDevice* Device; + GraphicsPipeline* Pipeline; + GraphicsBuffer* VertexBuffer; + GraphicsBuffer* IndexBuffer; + GraphicsBuffer* LightsBuffer; + GraphicsBuffer* TransformsBuffer; + GraphicsTransferBuffer* LoadCopyBuffer; + + VectorArena MeshAssets; + VectorArena MaterialAssets; + VectorArena MeshInstances; + + VectorArena Vertices; + VectorArena Indices; + VectorArena PointLights; + + PointLight* MappedLights; + Matrix* MappedTransforms; + + Vector3 GlobalLightDirection; + Vector3 GlobalLightColor; + float GlobalAmbientIntensity; +}; + +global MeshRendererState g_MeshRenderer = { 0 }; +global MeshAssetID g_CubePrimitiveMeshAssetID = (MeshAssetID)(-1); +global MeshAssetID g_QuadPrimitiveMeshAssetID = (MeshAssetID)(-1); +global MeshAssetID g_SpherePrimitiveMeshAssetID = (MeshAssetID)(-1); + +MeshAssetID CreateCubePrimitive(void); +MeshAssetID CreateQuadPrimitive(void); +MeshAssetID CreateSpherePrimitive(void); + +void InitializeMeshRenderer(Arena* assetArena, Arena* instanceArena) +{ + Assert(assetArena != NULL); + Assert(instanceArena != NULL); + + g_MeshRenderer.GlobalLightDirection = (Vector3){ .x = 0.0f, .y = -1.0f, .z = 0.0f }; + + VectorArenaCreate(&g_MeshRenderer.MeshAssets, MeshAsset, assetArena, kDefaultMeshNumber JULIET_DEBUG_PARAM("MeshAssets")); + VectorArenaCreate(&g_MeshRenderer.MaterialAssets, MaterialAsset, assetArena, kDefaultMeshNumber JULIET_DEBUG_PARAM("MaterialAssets")); + VectorArenaCreate(&g_MeshRenderer.MeshInstances, MeshInstance, instanceArena, kDefaultMeshNumber JULIET_DEBUG_PARAM("MeshInstances")); + VectorArenaCreate(&g_MeshRenderer.Vertices, Vertex, assetArena, kDefaultVertexCount JULIET_DEBUG_PARAM("Vertices")); + VectorArenaCreate(&g_MeshRenderer.Indices, Index, assetArena, kDefaultIndexCount JULIET_DEBUG_PARAM("Indices")); + VectorArenaCreate(&g_MeshRenderer.PointLights, PointLight, instanceArena, kDefaultLightCount JULIET_DEBUG_PARAM("PointLights")); + + // Create primitives + g_CubePrimitiveMeshAssetID = CreateCubePrimitive(); + g_QuadPrimitiveMeshAssetID = CreateQuadPrimitive(); + + // Create default material asset (ID = 0) + MaterialAsset defaultMaterial = { .AlbedoColor = { .x = 1.0f, .y = 1.0f, .z = 1.0f, .w = 1.0f } }; + vector_arena_push_elem(&g_MeshRenderer.MaterialAssets, &defaultMaterial); +} + +bool8 InitializeMeshRendererGraphics(GraphicsDevice* device, Window* window) +{ + Assert(device != NULL); + Assert(window != NULL); + bool8 result = true; + + GraphicsDevice* graphicsDevice = g_MeshRenderer.Device = device; + + // Create graphics pipeline + String entryPoint = WrapString("main"); + ShaderCreateInfo shaderCI = { 0 }; + shaderCI.EntryPoint = entryPoint; + + TempArena path = scratch_begin(NULL, 0); + + Path shaderPath = GetAssetPath(path.Arena, AssetType_Shader, ConstString("Triangle.vert.dxil")); + shaderCI.Stage = ShaderStage_Vertex; + Shader* vertexShader = CreateShader(graphicsDevice, shaderPath.FullPath, &shaderCI); + + shaderPath = GetAssetPath(path.Arena, AssetType_Shader, ConstString("SolidColor.frag.dxil")); + shaderCI.Stage = ShaderStage_Fragment; + Shader* fragmentShader = CreateShader(graphicsDevice, shaderPath.FullPath, &shaderCI); + + scratch_end(path); + + ColorTargetDescription colorTargetDescription = { 0 }; + colorTargetDescription.Format = GetSwapChainTextureFormat(graphicsDevice, window); + + GraphicsPipelineCreateInfo pipelineCI = { 0 }; + pipelineCI.VertexShader = vertexShader; + pipelineCI.FragmentShader = fragmentShader; + pipelineCI.PrimitiveType = PrimitiveType_TriangleList; + pipelineCI.TargetInfo = (GraphicsPipelineTargetInfo){ .ColorTargetDescriptions = &colorTargetDescription, + .NumColorTargets = 1, + .DepthStencilFormat = TextureFormat_D32_FLOAT, + .HasDepthStencilTarget = true }; + pipelineCI.RasterizerState.FillMode = FillMode_Solid; + pipelineCI.RasterizerState.CullMode = CullMode_None; + pipelineCI.RasterizerState.FrontFace = FrontFace_Clockwise; + pipelineCI.DepthStencilState.EnableDepthTest = true; + pipelineCI.DepthStencilState.EnableDepthWrite = true; + pipelineCI.DepthStencilState.CompareOperation = CompareOperation_Less; + + g_MeshRenderer.Pipeline = CreateGraphicsPipeline(graphicsDevice, &pipelineCI); + if (g_MeshRenderer.Pipeline == NULL) + { + LogError(LogCategory_Graphics, "Failed to create graphics pipeline!"); + result = false; + } + + // Create the vertex and index buffers + BufferCreateInfo vertexBufferCI = { 0 }; + vertexBufferCI.Size = kGeometryPage; + vertexBufferCI.Stride = 0; + vertexBufferCI.Usage = BufferUsage_StructuredBuffer; + g_MeshRenderer.VertexBuffer = CreateGraphicsBuffer(graphicsDevice, &vertexBufferCI); + Assert(g_MeshRenderer.VertexBuffer != NULL); + + BufferCreateInfo indexBufferCI = { 0 }; + indexBufferCI.Size = kIndexPage; + indexBufferCI.Usage = BufferUsage_IndexBuffer; + g_MeshRenderer.IndexBuffer = CreateGraphicsBuffer(graphicsDevice, &indexBufferCI); + Assert(g_MeshRenderer.IndexBuffer != NULL); + + // Lights Buffer + BufferCreateInfo lightsBufferCI = { 0 }; + lightsBufferCI.Size = 1024 * sizeof(PointLight); // Max 1024 lights for now + lightsBufferCI.Stride = sizeof(PointLight); + lightsBufferCI.Usage = BufferUsage_StructuredBuffer; + lightsBufferCI.IsDynamic = true; + g_MeshRenderer.LightsBuffer = CreateGraphicsBuffer(graphicsDevice, &lightsBufferCI); + Assert(g_MeshRenderer.LightsBuffer != NULL); + g_MeshRenderer.MappedLights = (PointLight*)MapGraphicsBuffer(graphicsDevice, g_MeshRenderer.LightsBuffer); + Assert(g_MeshRenderer.MappedLights != NULL); + + // Transforms Buffer + BufferCreateInfo transformsBufferCI = { 0 }; + transformsBufferCI.Size = 10000 * sizeof(Matrix); // Max 10000 meshes for now + transformsBufferCI.Stride = sizeof(Matrix); + transformsBufferCI.Usage = BufferUsage_StructuredBuffer; + transformsBufferCI.IsDynamic = true; + g_MeshRenderer.TransformsBuffer = CreateGraphicsBuffer(graphicsDevice, &transformsBufferCI); + Assert(g_MeshRenderer.TransformsBuffer != NULL); + g_MeshRenderer.MappedTransforms = (Matrix*)MapGraphicsBuffer(graphicsDevice, g_MeshRenderer.TransformsBuffer); + Assert(g_MeshRenderer.MappedTransforms != NULL); + + // Sync existing lights that might have been added before graphics initialization + for (index_t i = 0; i < g_MeshRenderer.PointLights.Size; ++i) + { + g_MeshRenderer.MappedLights[i] = VectorArenaAt(PointLight, &g_MeshRenderer.PointLights, i); + } + + if (vertexShader != NULL) + { + DestroyShader(graphicsDevice, vertexShader); + } + if (fragmentShader != NULL) + { + DestroyShader(graphicsDevice, fragmentShader); + } + + // Load everything that is already in the vectors + CommandList* loadCmd = AcquireCommandList(device, QueueType_Graphics); + LoadMeshesOnGPU(loadCmd); + SubmitCommandLists(loadCmd); + return result; +} + +void ShutdownMeshRendererGraphics(void) +{ + if (g_MeshRenderer.LoadCopyBuffer != NULL) + { + UnmapGraphicsTransferBuffer(g_MeshRenderer.Device, g_MeshRenderer.LoadCopyBuffer); + DestroyGraphicsTransferBuffer(g_MeshRenderer.Device, g_MeshRenderer.LoadCopyBuffer); + g_MeshRenderer.LoadCopyBuffer = NULL; + } + + DestroyGraphicsBuffer(g_MeshRenderer.Device, g_MeshRenderer.IndexBuffer); + DestroyGraphicsBuffer(g_MeshRenderer.Device, g_MeshRenderer.VertexBuffer); + + if (g_MeshRenderer.LightsBuffer != NULL) + { + UnmapGraphicsBuffer(g_MeshRenderer.Device, g_MeshRenderer.LightsBuffer); + DestroyGraphicsBuffer(g_MeshRenderer.Device, g_MeshRenderer.LightsBuffer); + g_MeshRenderer.LightsBuffer = NULL; + } + + if (g_MeshRenderer.TransformsBuffer != NULL) + { + UnmapGraphicsBuffer(g_MeshRenderer.Device, g_MeshRenderer.TransformsBuffer); + DestroyGraphicsBuffer(g_MeshRenderer.Device, g_MeshRenderer.TransformsBuffer); + g_MeshRenderer.TransformsBuffer = NULL; + } +} + +void ShutdownMeshRenderer(void) +{ + vector_arena_destroy(&g_MeshRenderer.Indices); + vector_arena_destroy(&g_MeshRenderer.Vertices); + vector_arena_destroy(&g_MeshRenderer.MeshInstances); + vector_arena_destroy(&g_MeshRenderer.MaterialAssets); + vector_arena_destroy(&g_MeshRenderer.MeshAssets); + vector_arena_destroy(&g_MeshRenderer.PointLights); +} + +void LoadMeshesOnGPU(CommandList* cmdList) +{ + Assert(cmdList != NULL); + if (!vector_arena_is_empty(&g_MeshRenderer.MeshAssets)) + { + // Loading everything in one go. + // Destroy the buffer at the end + TransferBufferCreateInfo uploadBCI = { 0 }; + uploadBCI.Usage = TransferBufferUsage_Upload; + uploadBCI.Size = kGeometryPage + kIndexPage; + g_MeshRenderer.LoadCopyBuffer = CreateGraphicsTransferBuffer(g_MeshRenderer.Device, &uploadBCI); + + void* map = MapGraphicsTransferBuffer(g_MeshRenderer.Device, g_MeshRenderer.LoadCopyBuffer); + Vertex* vertices = VectorArenaData(Vertex, &g_MeshRenderer.Vertices); + Index* indices = VectorArenaData(Index, &g_MeshRenderer.Indices); + + if (vertices == NULL || indices == NULL) + { + UnmapGraphicsTransferBuffer(g_MeshRenderer.Device, g_MeshRenderer.LoadCopyBuffer); + DestroyGraphicsTransferBuffer(g_MeshRenderer.Device, g_MeshRenderer.LoadCopyBuffer); + g_MeshRenderer.LoadCopyBuffer = NULL; + } + else + { + // Copy all meshes! This supports only one page for now + // Copy ALL Vertices in one block + size_t totalVertexBytes = g_MeshRenderer.Vertices.Size * sizeof(Vertex); + MemCopy(map, vertices, totalVertexBytes); + + // Copy ALL Indices in one block + size_t indexOfByteOffset = (kGeometryPage + 255) & ~(size_t)255; + uint8* ptrOneByte = (uint8*)map; + size_t totalIndexBytes = g_MeshRenderer.Indices.Size * sizeof(Index); + + MemCopy(ptrOneByte + indexOfByteOffset, indices, totalIndexBytes); + + UnmapGraphicsTransferBuffer(g_MeshRenderer.Device, g_MeshRenderer.LoadCopyBuffer); + + CopyBuffer(cmdList, g_MeshRenderer.VertexBuffer, g_MeshRenderer.LoadCopyBuffer, totalVertexBytes, 0, 0); + CopyBuffer(cmdList, g_MeshRenderer.IndexBuffer, g_MeshRenderer.LoadCopyBuffer, totalIndexBytes, 0, indexOfByteOffset); + + // Transition vertex buffer to SRV state (this barrier waits for copy to complete) + TransitionBufferToReadable(cmdList, g_MeshRenderer.VertexBuffer); + TransitionBufferToReadable(cmdList, g_MeshRenderer.IndexBuffer); + } + } +} + +void RenderMeshes(CommandList* cmdList, RenderPass* pass, const Matrix* viewProjection) +{ + Assert(cmdList != NULL); + Assert(pass != NULL); + Assert(viewProjection != NULL); + + // First destroy any buffer that needs to be + if (g_MeshRenderer.LoadCopyBuffer != NULL) + { + WaitUntilGPUIsIdle(g_MeshRenderer.Device); + UnmapGraphicsTransferBuffer(g_MeshRenderer.Device, g_MeshRenderer.LoadCopyBuffer); + DestroyGraphicsTransferBuffer(g_MeshRenderer.Device, g_MeshRenderer.LoadCopyBuffer); + g_MeshRenderer.LoadCopyBuffer = NULL; + } + + BindGraphicsPipeline(pass, g_MeshRenderer.Pipeline); + + uint32 vertexDescriptorIndex = GetBufferDescriptorIndex(g_MeshRenderer.Device, g_MeshRenderer.VertexBuffer); + uint32 lightDescriptorIndex = GetBufferDescriptorIndex(g_MeshRenderer.Device, g_MeshRenderer.LightsBuffer); + uint32 transformsDescriptorIndex = GetBufferDescriptorIndex(g_MeshRenderer.Device, g_MeshRenderer.TransformsBuffer); + + PushData pushData = { 0 }; + pushData.ViewProjection = *viewProjection; + pushData.BufferIndex = vertexDescriptorIndex; + pushData.LightBufferIndex = lightDescriptorIndex; + pushData.TransformsBufferIndex = transformsDescriptorIndex; + pushData.ActiveLightCount = (uint32)g_MeshRenderer.PointLights.Size; + pushData.GlobalLightDirection = g_MeshRenderer.GlobalLightDirection; + pushData.GlobalLightColor = g_MeshRenderer.GlobalLightColor; + pushData.GlobalAmbientIntensity = g_MeshRenderer.GlobalAmbientIntensity; + + SetIndexBuffer(cmdList, g_MeshRenderer.IndexBuffer, IndexFormat_UInt16, g_MeshRenderer.Indices.Size, 0); + + uint32 meshIndex = 0; + for (index_t i = 0; i < g_MeshRenderer.MeshInstances.Size; ++i) + { + MeshInstance* instance = &VectorArenaAt(MeshInstance, &g_MeshRenderer.MeshInstances, i); + if (g_MeshRenderer.MappedTransforms != NULL) + { + g_MeshRenderer.MappedTransforms[meshIndex] = instance->Transform; + } + + MeshAsset* meshAsset = &VectorArenaAt(MeshAsset, &g_MeshRenderer.MeshAssets, instance->MeshAsset); + MaterialAsset* materialAsset = &VectorArenaAt(MaterialAsset, &g_MeshRenderer.MaterialAssets, instance->MaterialAsset); + + pushData.MeshIndex = meshIndex; + pushData.TextureIndex = 0; // Would be instance->MaterialAsset.BaseColorTexture later + pushData.VertexOffset = (uint32)meshAsset->VertexOffset; + pushData.Scale[0] = 1.0f; + pushData.Scale[1] = 1.0f; + pushData.Translate[0] = 0.0f; + pushData.Translate[1] = 0.0f; + pushData.MeshAlbedo = materialAsset->AlbedoColor; + SetPushConstants(cmdList, ShaderStage_Vertex, 0, sizeof(pushData) / 4, &pushData); + DrawIndexedPrimitives(pass, (uint32)meshAsset->IndexCount, 1, + (uint32)meshAsset->IndexOffset, (uint32)meshAsset->VertexOffset, 0); + meshIndex++; + } +} + +LightID AddPointLight(const PointLight* light) +{ + Assert(light != NULL); + Assert(g_MeshRenderer.PointLights.Size < kDefaultLightCount); + LightID id = g_MeshRenderer.PointLights.Size; + vector_arena_push_elem(&g_MeshRenderer.PointLights, light); + if (g_MeshRenderer.MappedLights != NULL) + { + g_MeshRenderer.MappedLights[id] = *light; + } + return id; +} + +void SetPointLightPosition(LightID id, Vector3 position) +{ + Assert(id < (LightID)g_MeshRenderer.PointLights.Size); + VectorArenaAt(PointLight, &g_MeshRenderer.PointLights, id).Position = position; + if (g_MeshRenderer.MappedLights != NULL) + { + g_MeshRenderer.MappedLights[id].Position = position; + } +} + +void SetPointLightColor(LightID id, Vector3 color) +{ + Assert(id < (LightID)g_MeshRenderer.PointLights.Size); + VectorArenaAt(PointLight, &g_MeshRenderer.PointLights, id).Color = color; + if (g_MeshRenderer.MappedLights != NULL) + { + g_MeshRenderer.MappedLights[id].Color = color; + } +} + +void SetPointLightRadius(LightID id, float radius) +{ + Assert(id < (LightID)g_MeshRenderer.PointLights.Size); + VectorArenaAt(PointLight, &g_MeshRenderer.PointLights, id).Radius = radius; + if (g_MeshRenderer.MappedLights != NULL) + { + g_MeshRenderer.MappedLights[id].Radius = radius; + } +} + +void SetPointLightIntensity(LightID id, float intensity) +{ + Assert(id < (LightID)g_MeshRenderer.PointLights.Size); + VectorArenaAt(PointLight, &g_MeshRenderer.PointLights, id).Intensity = intensity; + if (g_MeshRenderer.MappedLights != NULL) + { + g_MeshRenderer.MappedLights[id].Intensity = intensity; + } +} + +void ClearPointLights(void) +{ + vector_arena_clear(&g_MeshRenderer.PointLights); +} + +void SetGlobalLight(Vector3 direction, Vector3 color, float ambientIntensity) +{ + g_MeshRenderer.GlobalLightDirection = direction; + g_MeshRenderer.GlobalLightColor = color; + g_MeshRenderer.GlobalAmbientIntensity = ambientIntensity; +} + +MeshAssetID GetCubePrimitiveMeshAssetID(void) +{ + Assert(g_CubePrimitiveMeshAssetID != (MeshAssetID)(-1)); + return g_CubePrimitiveMeshAssetID; +} + +MeshAssetID GetQuadPrimitiveMeshAssetID(void) +{ + Assert(g_QuadPrimitiveMeshAssetID != (MeshAssetID)(-1)); + return g_QuadPrimitiveMeshAssetID; +} + +MeshAssetID GetSpherePrimitiveMeshAssetID(void) +{ + Assert(g_SpherePrimitiveMeshAssetID != (MeshAssetID)(-1)); + return g_SpherePrimitiveMeshAssetID; +} + +MeshAssetID GetOrCreateMeshAsset(String name) +{ + MeshAssetID result = (MeshAssetID)(-1); + bool8 found = false; + for (index_t i = 0; i < g_MeshRenderer.MeshAssets.Size; ++i) + { + if (StringCompare(VectorArenaAt(MeshAsset, &g_MeshRenderer.MeshAssets, i).Name, name) == 0) + { + result = i; + found = true; + break; + } + } + + if (!found) + { + result = LoadMesh(name); + } + + return result; +} + +MeshInstanceID CreateMeshInstance(MeshAssetID meshAsset, MaterialAssetID materialAsset, const Matrix* transform) +{ + Assert(transform != NULL); + MeshInstance instance = { 0 }; + instance.MeshAsset = meshAsset; + instance.MaterialAsset = materialAsset; + instance.Transform = *transform; + MeshInstanceID id = g_MeshRenderer.MeshInstances.Size; + vector_arena_push_elem(&g_MeshRenderer.MeshInstances, &instance); + return id; +} + +void SetMeshInstanceTransform(MeshInstanceID id, const Matrix* transform) +{ + Assert(transform != NULL); + Assert(id < (MeshInstanceID)g_MeshRenderer.MeshInstances.Size); + VectorArenaAt(MeshInstance, &g_MeshRenderer.MeshInstances, id).Transform = *transform; +} + +MeshAssetID CreateCubePrimitive(void) +{ + MeshAsset result = { 0 }; + result.Name = WrapString("Cube"); + + const Vertex vertexData[] = { + // Front Face (Z = -0.5f) + { { -0.5f, 0.5f, -0.5f }, { 0.0f, 0.0f, -1.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, + { { 0.5f, 0.5f, -0.5f }, { 0.0f, 0.0f, -1.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, + { { 0.5f, -0.5f, -0.5f }, { 0.0f, 0.0f, -1.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, + { { -0.5f, -0.5f, -0.5f }, { 0.0f, 0.0f, -1.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, + + // Back Face (Z = 0.5f) + { { 0.5f, 0.5f, 0.5f }, { 0.0f, 0.0f, 1.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, + { { -0.5f, 0.5f, 0.5f }, { 0.0f, 0.0f, 1.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, + { { -0.5f, -0.5f, 0.5f }, { 0.0f, 0.0f, 1.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, + { { 0.5f, -0.5f, 0.5f }, { 0.0f, 0.0f, 1.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, + + // Top Face (Y = 0.5f) + { { -0.5f, 0.5f, 0.5f }, { 0.0f, 1.0f, 0.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, + { { 0.5f, 0.5f, 0.5f }, { 0.0f, 1.0f, 0.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, + { { 0.5f, 0.5f, -0.5f }, { 0.0f, 1.0f, 0.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, + { { -0.5f, 0.5f, -0.5f }, { 0.0f, 1.0f, 0.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, + + // Bottom Face (Y = -0.5f) + { { -0.5f, -0.5f, -0.5f }, { 0.0f, -1.0f, 0.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, + { { 0.5f, -0.5f, -0.5f }, { 0.0f, -1.0f, 0.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, + { { 0.5f, -0.5f, 0.5f }, { 0.0f, -1.0f, 0.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, + { { -0.5f, -0.5f, 0.5f }, { 0.0f, -1.0f, 0.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, + + // Right Face (X = 0.5f) + { { 0.5f, 0.5f, -0.5f }, { 1.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, + { { 0.5f, 0.5f, 0.5f }, { 1.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, + { { 0.5f, -0.5f, 0.5f }, { 1.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, + { { 0.5f, -0.5f, -0.5f }, { 1.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, + + // Left Face (X = -0.5f) + { { -0.5f, 0.5f, 0.5f }, { -1.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, + { { -0.5f, 0.5f, -0.5f }, { -1.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, + { { -0.5f, -0.5f, -0.5f }, { -1.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, + { { -0.5f, -0.5f, 0.5f }, { -1.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } } + }; + const size_t cubeVertexCount = ArraySize(vertexData); + result.VertexCount = cubeVertexCount; + result.VertexOffset = g_MeshRenderer.Vertices.Size; + vector_arena_push_array(&g_MeshRenderer.Vertices, vertexData, cubeVertexCount); + + const uint16 indices[] = { 0, 1, 2, 0, 2, 3, // Front + 4, 5, 6, 4, 6, 7, // Back + 8, 9, 10, 8, 10, 11, // Top + 12, 13, 14, 12, 14, 15, // Bottom + 16, 17, 18, 16, 18, 19, // Right + 20, 21, 22, 20, 22, 23 }; // Left + const size_t indexCubeCount = ArraySize(indices); + result.IndexCount = indexCubeCount; + result.IndexOffset = g_MeshRenderer.Indices.Size; + vector_arena_push_array(&g_MeshRenderer.Indices, indices, indexCubeCount); + + MeshAssetID id = g_MeshRenderer.MeshAssets.Size; + vector_arena_push_elem(&g_MeshRenderer.MeshAssets, &result); + return id; +} + +MeshAssetID CreateQuadPrimitive(void) +{ + MeshAsset result = { 0 }; + result.Name = WrapString("Quad"); + + const Vertex vertexData[] = { + // Triangle 1 (Clockwise) + { { -0.5f, -0.5f, 0.0f }, { 0.0f, 0.0f, -1.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, // 0 + { { 0.0f, 0.5f, 0.0f }, { 0.0f, 0.0f, -1.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, // 1 + { { 0.5f, -0.5f, 0.0f }, { 0.0f, 0.0f, -1.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, // 2 + + // Triangle 2 (Clockwise) + { { -0.5f, 0.5f, 0.0f }, { 0.0f, 0.0f, -1.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, // 3 + { { 0.0f, 0.8f, 0.0f }, { 0.0f, 0.0f, -1.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, // 4 + { { 0.5f, 0.5f, 0.0f }, { 0.0f, 0.0f, -1.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } } // 5 + }; + const size_t triVertexCount = ArraySize(vertexData); + result.VertexCount = triVertexCount; + result.VertexOffset = g_MeshRenderer.Vertices.Size; + vector_arena_push_array(&g_MeshRenderer.Vertices, vertexData, triVertexCount); + + const uint16 indices[] = { 0, 1, 2, 3, 4, 5 }; + const size_t triIndexCount = ArraySize(indices); + result.IndexCount = triIndexCount; + result.IndexOffset = g_MeshRenderer.Indices.Size; + vector_arena_push_array(&g_MeshRenderer.Indices, indices, triIndexCount); + + MeshAssetID id = g_MeshRenderer.MeshAssets.Size; + vector_arena_push_elem(&g_MeshRenderer.MeshAssets, &result); + return id; +} + +MeshAssetID CreateSpherePrimitive(void) +{ + MeshAssetID id = CreateCubePrimitive(); + VectorArenaAt(MeshAsset, &g_MeshRenderer.MeshAssets, id).Name = WrapString("Sphere"); + return id; +} + +#if ALLOW_SHADER_HOT_RELOAD +void ReloadMeshRendererShaders(void) +{ + GraphicsPipeline* pipeline = g_MeshRenderer.Pipeline; + GraphicsDevice* device = g_MeshRenderer.Device; + + TempArena path = scratch_begin(NULL, 0); + + String entryPoint = WrapString("main"); + ShaderCreateInfo shaderCI = { 0 }; + shaderCI.EntryPoint = entryPoint; + Path shaderPath = GetAssetPath(path.Arena, AssetType_Shader, ConstString("Triangle.vert.dxil")); + shaderCI.Stage = ShaderStage_Vertex; + Shader* vertexShader = CreateShader(device, shaderPath.FullPath, &shaderCI); + + shaderPath = GetAssetPath(path.Arena, AssetType_Shader, ConstString("SolidColor.frag.dxil")); + shaderCI.Stage = ShaderStage_Fragment; + Shader* fragmentShader = CreateShader(device, shaderPath.FullPath, &shaderCI); + + scratch_end(path); + + UpdateGraphicsPipelineShaders(device, pipeline, vertexShader, fragmentShader); + + if (vertexShader != NULL) + { + DestroyShader(device, vertexShader); + } + if (fragmentShader != NULL) + { + DestroyShader(device, fragmentShader); + } +} +#endif diff --git a/Juliet/src/Graphics/MeshRenderer.cpp b/Juliet/src/Graphics/MeshRenderer.cpp deleted file mode 100644 index 31d10bb..0000000 --- a/Juliet/src/Graphics/MeshRenderer.cpp +++ /dev/null @@ -1,574 +0,0 @@ -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace -{ - struct MeshRendererState - { - GraphicsDevice* Device = nullptr; - GraphicsPipeline* Pipeline = nullptr; - GraphicsBuffer* VertexBuffer = nullptr; - GraphicsBuffer* IndexBuffer = nullptr; - GraphicsBuffer* LightsBuffer = nullptr; - GraphicsBuffer* TransformsBuffer = nullptr; - GraphicsTransferBuffer* LoadCopyBuffer = nullptr; - - VectorArena MeshAssets; - VectorArena MaterialAssets; - VectorArena MeshInstances; - - VectorArena Vertices; - VectorArena Indices; - VectorArena PointLights; - - PointLight* MappedLights = nullptr; - Matrix* MappedTransforms = nullptr; - - Vector3 GlobalLightDirection = { 0.0f, -1.0f, 0.0f }; - Vector3 GlobalLightColor = { 0.0f, 0.0f, 0.0f }; - float GlobalAmbientIntensity = 0.0f; - }; - - MeshRendererState g_MeshRenderer; - - MeshAssetID CubePrimitiveMeshAssetID = static_cast(-1); - MeshAssetID QuadPrimitiveMeshAssetID = static_cast(-1); - MeshAssetID SpherePrimitiveMeshAssetID = static_cast(-1); -} // namespace - -MeshAssetID CreateCubePrimitive(); -MeshAssetID CreateQuadPrimitive(); -MeshAssetID CreateSpherePrimitive(); - -void InitializeMeshRenderer(NonNullPtr assetArena, NonNullPtr instanceArena) -{ - g_MeshRenderer.MeshAssets.Create(assetArena JULIET_DEBUG_PARAM("MeshAssets")); - g_MeshRenderer.MaterialAssets.Create(assetArena JULIET_DEBUG_PARAM("MaterialAssets")); - g_MeshRenderer.MeshInstances.Create(instanceArena JULIET_DEBUG_PARAM("MeshInstances")); - g_MeshRenderer.Vertices.Create(assetArena JULIET_DEBUG_PARAM("Vertices")); - g_MeshRenderer.Indices.Create(assetArena JULIET_DEBUG_PARAM("Indices")); - g_MeshRenderer.PointLights.Create(instanceArena JULIET_DEBUG_PARAM("PointLights")); - - // Create primitives - CubePrimitiveMeshAssetID = CreateCubePrimitive(); - QuadPrimitiveMeshAssetID = CreateQuadPrimitive(); - // SpherePrimitiveMeshAssetID = CreateSpherePrimitive(); // Will implement later - - // Create default material asset (ID = 0) - MaterialAsset defaultMaterial = {}; - g_MeshRenderer.MaterialAssets.PushBack(defaultMaterial); -} - -bool InitializeMeshRendererGraphics(NonNullPtr device, NonNullPtr window) -{ - bool result = true; - - GraphicsDevice* graphicsDevice = g_MeshRenderer.Device = device.Get(); - - // Create graphics pipeline - String entryPoint = WrapString("main"); - ShaderCreateInfo shaderCI = {}; - shaderCI.EntryPoint = entryPoint; - - TempArena path = scratch_begin(0, 0); - - Path shaderPath = GetAssetPath(path.Arena, AssetType::Shader, ConstString("Triangle.vert.dxil")); - shaderCI.Stage = ShaderStage::Vertex; - Shader* vertexShader = CreateShader(graphicsDevice, shaderPath.FullPath, shaderCI); - - shaderPath = GetAssetPath(path.Arena, AssetType::Shader, ConstString("SolidColor.frag.dxil")); - shaderCI.Stage = ShaderStage::Fragment; - Shader* fragmentShader = CreateShader(graphicsDevice, shaderPath.FullPath, shaderCI); - - scratch_end(path); - - ColorTargetDescription colorTargetDescription = {}; - colorTargetDescription.Format = GetSwapChainTextureFormat(graphicsDevice, window); - - GraphicsPipelineCreateInfo pipelineCI = {}; - pipelineCI.VertexShader = vertexShader; - pipelineCI.FragmentShader = fragmentShader; - pipelineCI.PrimitiveType = PrimitiveType::TriangleList; - pipelineCI.TargetInfo = { .ColorTargetDescriptions = &colorTargetDescription, - .NumColorTargets = 1, - .DepthStencilFormat = TextureFormat::D32_FLOAT, - .HasDepthStencilTarget = true }; - pipelineCI.RasterizerState.FillMode = FillMode::Solid; - pipelineCI.RasterizerState.CullMode = CullMode::None; - pipelineCI.RasterizerState.FrontFace = FrontFace::Clockwise; - pipelineCI.DepthStencilState.EnableDepthTest = true; - pipelineCI.DepthStencilState.EnableDepthWrite = true; - pipelineCI.DepthStencilState.CompareOperation = CompareOperation::Less; - - g_MeshRenderer.Pipeline = CreateGraphicsPipeline(graphicsDevice, pipelineCI); - if (g_MeshRenderer.Pipeline == nullptr) - { - LogError(LogCategory::Graphics, "Failed to create graphics pipeline!"); - result = false; - } - - // Create the vertex and index buffers - BufferCreateInfo vertexBufferCI = {}; - vertexBufferCI.Size = kGeometryPage; - vertexBufferCI.Stride = 0; - vertexBufferCI.Usage = BufferUsage::StructuredBuffer; - g_MeshRenderer.VertexBuffer = CreateGraphicsBuffer(graphicsDevice, vertexBufferCI); - Assert(g_MeshRenderer.VertexBuffer != nullptr); - - BufferCreateInfo indexBufferCI = {}; - indexBufferCI.Size = kIndexPage; - indexBufferCI.Usage = BufferUsage::IndexBuffer; - g_MeshRenderer.IndexBuffer = CreateGraphicsBuffer(graphicsDevice, indexBufferCI); - Assert(g_MeshRenderer.IndexBuffer != nullptr); - - // Lights Buffer - BufferCreateInfo lightsBufferCI = {}; - lightsBufferCI.Size = 1024 * sizeof(PointLight); // Max 1024 lights for now - lightsBufferCI.Stride = sizeof(PointLight); - lightsBufferCI.Usage = BufferUsage::StructuredBuffer; - lightsBufferCI.IsDynamic = true; - g_MeshRenderer.LightsBuffer = CreateGraphicsBuffer(graphicsDevice, lightsBufferCI); - Assert(g_MeshRenderer.LightsBuffer != nullptr); - g_MeshRenderer.MappedLights = static_cast(MapGraphicsBuffer(graphicsDevice, g_MeshRenderer.LightsBuffer)); - Assert(g_MeshRenderer.MappedLights != nullptr); - - // Transforms Buffer - BufferCreateInfo transformsBufferCI = {}; - transformsBufferCI.Size = 10000 * sizeof(Matrix); // Max 10000 meshes for now - transformsBufferCI.Stride = sizeof(Matrix); - transformsBufferCI.Usage = BufferUsage::StructuredBuffer; - transformsBufferCI.IsDynamic = true; - g_MeshRenderer.TransformsBuffer = CreateGraphicsBuffer(graphicsDevice, transformsBufferCI); - Assert(g_MeshRenderer.TransformsBuffer != nullptr); - g_MeshRenderer.MappedTransforms = static_cast(MapGraphicsBuffer(graphicsDevice, g_MeshRenderer.TransformsBuffer)); - Assert(g_MeshRenderer.MappedTransforms != nullptr); - - // Sync existing lights that might have been added before graphics initialization - for (index_t i = 0; i < g_MeshRenderer.PointLights.Count; ++i) - { - g_MeshRenderer.MappedLights[i] = g_MeshRenderer.PointLights.Data[i]; - } - - if (vertexShader) - { - DestroyShader(graphicsDevice, vertexShader); - } - if (fragmentShader) - { - DestroyShader(graphicsDevice, fragmentShader); - } - - // Load evereything that is already in the vectors - CommandList* loadCmd = AcquireCommandList(device); - LoadMeshesOnGPU(loadCmd); - SubmitCommandLists(loadCmd); - return result; -} - -void ShutdownMeshRendererGraphics() -{ - if (g_MeshRenderer.LoadCopyBuffer) - { - UnmapGraphicsTransferBuffer(g_MeshRenderer.Device, g_MeshRenderer.LoadCopyBuffer); - DestroyGraphicsTransferBuffer(g_MeshRenderer.Device, g_MeshRenderer.LoadCopyBuffer); - g_MeshRenderer.LoadCopyBuffer = nullptr; - } - - DestroyGraphicsBuffer(g_MeshRenderer.Device, g_MeshRenderer.IndexBuffer); - DestroyGraphicsBuffer(g_MeshRenderer.Device, g_MeshRenderer.VertexBuffer); - - if (g_MeshRenderer.LightsBuffer) - { - UnmapGraphicsBuffer(g_MeshRenderer.Device, g_MeshRenderer.LightsBuffer); - DestroyGraphicsBuffer(g_MeshRenderer.Device, g_MeshRenderer.LightsBuffer); - g_MeshRenderer.LightsBuffer = nullptr; - } - - if (g_MeshRenderer.TransformsBuffer) - { - UnmapGraphicsBuffer(g_MeshRenderer.Device, g_MeshRenderer.TransformsBuffer); - DestroyGraphicsBuffer(g_MeshRenderer.Device, g_MeshRenderer.TransformsBuffer); - g_MeshRenderer.TransformsBuffer = nullptr; - } -} - -void ShutdownMeshRenderer() -{ - g_MeshRenderer.Indices.Destroy(); - g_MeshRenderer.Vertices.Destroy(); - g_MeshRenderer.MeshInstances.Destroy(); - g_MeshRenderer.MaterialAssets.Destroy(); - g_MeshRenderer.MeshAssets.Destroy(); - g_MeshRenderer.PointLights.Destroy(); -} - -void LoadMeshesOnGPU(NonNullPtr cmdList) -{ - if (g_MeshRenderer.MeshAssets.IsEmpty()) - { - return; - } - - // Loading everything in one go. - // Destroy the buffer at the end - - TransferBufferCreateInfo uploadBCI = {}; - uploadBCI.Usage = TransferBufferUsage::Upload; - uploadBCI.Size = kGeometryPage + kIndexPage; - g_MeshRenderer.LoadCopyBuffer = CreateGraphicsTransferBuffer(g_MeshRenderer.Device, uploadBCI); - - void* map = MapGraphicsTransferBuffer(g_MeshRenderer.Device, g_MeshRenderer.LoadCopyBuffer); - - Vertex* vertices = g_MeshRenderer.Vertices.Data; - if (!vertices) - { - UnmapGraphicsTransferBuffer(g_MeshRenderer.Device, g_MeshRenderer.LoadCopyBuffer); - DestroyGraphicsTransferBuffer(g_MeshRenderer.Device, g_MeshRenderer.LoadCopyBuffer); - g_MeshRenderer.LoadCopyBuffer = nullptr; - return; - } - - Index* indices = g_MeshRenderer.Indices.Data; - if (!indices) - { - UnmapGraphicsTransferBuffer(g_MeshRenderer.Device, g_MeshRenderer.LoadCopyBuffer); - DestroyGraphicsTransferBuffer(g_MeshRenderer.Device, g_MeshRenderer.LoadCopyBuffer); - g_MeshRenderer.LoadCopyBuffer = nullptr; - return; - } - - // Copy all meshes! This supports only one page for now - // Copy ALL Vertices in one block - size_t totalVertexBytes = g_MeshRenderer.Vertices.Count * sizeof(Vertex); - MemCopy(map, g_MeshRenderer.Vertices.Data, totalVertexBytes); - - // Copy ALL Indices in one block - size_t indexOfByteOffset = (kGeometryPage + 255) & static_cast(~255); - uint8* ptrOneByte = static_cast(map); - size_t totalIndexBytes = g_MeshRenderer.Indices.Count * sizeof(Index); - - MemCopy(ptrOneByte + indexOfByteOffset, g_MeshRenderer.Indices.Data, totalIndexBytes); - - UnmapGraphicsTransferBuffer(g_MeshRenderer.Device, g_MeshRenderer.LoadCopyBuffer); - - CopyBuffer(cmdList, g_MeshRenderer.VertexBuffer, g_MeshRenderer.LoadCopyBuffer, totalVertexBytes, 0, 0); - CopyBuffer(cmdList, g_MeshRenderer.IndexBuffer, g_MeshRenderer.LoadCopyBuffer, totalIndexBytes, 0, indexOfByteOffset); - - // Transition vertex buffer to SRV state (this barrier waits for copy to complete) - TransitionBufferToReadable(cmdList, g_MeshRenderer.VertexBuffer); - TransitionBufferToReadable(cmdList, g_MeshRenderer.IndexBuffer); -} - -void RenderMeshes(NonNullPtr cmdList, NonNullPtr pass, const Matrix& viewProjection) -{ - // First destroy any buffer that needs to be - if (g_MeshRenderer.LoadCopyBuffer) - { - WaitUntilGPUIsIdle(g_MeshRenderer.Device); - UnmapGraphicsTransferBuffer(g_MeshRenderer.Device, g_MeshRenderer.LoadCopyBuffer); - DestroyGraphicsTransferBuffer(g_MeshRenderer.Device, g_MeshRenderer.LoadCopyBuffer); - g_MeshRenderer.LoadCopyBuffer = nullptr; - } - - BindGraphicsPipeline(pass, g_MeshRenderer.Pipeline); - - uint32 vertexDescriptorIndex = GetDescriptorIndex(g_MeshRenderer.Device, g_MeshRenderer.VertexBuffer); - uint32 lightDescriptorIndex = GetDescriptorIndex(g_MeshRenderer.Device, g_MeshRenderer.LightsBuffer); - - uint32 transformsDescriptorIndex = GetDescriptorIndex(g_MeshRenderer.Device, g_MeshRenderer.TransformsBuffer); - - PushData pushData = {}; - pushData.ViewProjection = viewProjection; - pushData.BufferIndex = vertexDescriptorIndex; - pushData.LightBufferIndex = lightDescriptorIndex; - pushData.TransformsBufferIndex = transformsDescriptorIndex; - pushData.ActiveLightCount = static_cast(g_MeshRenderer.PointLights.Count); - pushData.GlobalLightDirection = g_MeshRenderer.GlobalLightDirection; - pushData.GlobalLightColor = g_MeshRenderer.GlobalLightColor; - pushData.GlobalAmbientIntensity = g_MeshRenderer.GlobalAmbientIntensity; - - SetIndexBuffer(cmdList, g_MeshRenderer.IndexBuffer, IndexFormat::UInt16, g_MeshRenderer.Indices.Count, 0); - - uint32 meshIndex = 0; - for (MeshInstance& instance : g_MeshRenderer.MeshInstances) - { - if (g_MeshRenderer.MappedTransforms) - { - g_MeshRenderer.MappedTransforms[meshIndex] = instance.Transform; - } - - MeshAsset& meshAsset = g_MeshRenderer.MeshAssets.Data[instance.MeshAsset]; - MaterialAsset& materialAsset = g_MeshRenderer.MaterialAssets.Data[instance.MaterialAsset]; - - pushData.MeshIndex = meshIndex; - pushData.TextureIndex = 0; // Would be instance.MaterialAsset.BaseColorTexture later - pushData.VertexOffset = static_cast(meshAsset.VertexOffset); - pushData.Scale[0] = 1.0f; - pushData.Scale[1] = 1.0f; - pushData.Translate[0] = 0.0f; - pushData.Translate[1] = 0.0f; - pushData.MeshAlbedo = materialAsset.AlbedoColor; - SetPushConstants(cmdList, ShaderStage::Vertex, 0, sizeof(pushData) / 4, &pushData); - DrawIndexedPrimitives(pass, static_cast(meshAsset.IndexCount), 1, - static_cast(meshAsset.IndexOffset), static_cast(meshAsset.VertexOffset), 0); - meshIndex++; - } -} - -LightID AddPointLight(const PointLight& light) -{ - Assert(g_MeshRenderer.PointLights.Count < kDefaultLightCount); - LightID id = g_MeshRenderer.PointLights.Count; - g_MeshRenderer.PointLights.PushBack(light); - if (g_MeshRenderer.MappedLights) - { - g_MeshRenderer.MappedLights[id] = light; - } - return id; -} - -void SetPointLightPosition(LightID id, const Vector3& position) -{ - Assert(id < static_cast(g_MeshRenderer.PointLights.Count)); - g_MeshRenderer.PointLights.Data[id].Position = position; - if (g_MeshRenderer.MappedLights) - { - g_MeshRenderer.MappedLights[id].Position = position; - } -} - -void SetPointLightColor(LightID id, const Vector3& color) -{ - Assert(id < static_cast(g_MeshRenderer.PointLights.Count)); - g_MeshRenderer.PointLights.Data[id].Color = color; - if (g_MeshRenderer.MappedLights) - { - g_MeshRenderer.MappedLights[id].Color = color; - } -} - -void SetPointLightRadius(LightID id, float radius) -{ - Assert(id < static_cast(g_MeshRenderer.PointLights.Count)); - g_MeshRenderer.PointLights.Data[id].Radius = radius; - if (g_MeshRenderer.MappedLights) - { - g_MeshRenderer.MappedLights[id].Radius = radius; - } -} - -void SetPointLightIntensity(LightID id, float intensity) -{ - Assert(id < static_cast(g_MeshRenderer.PointLights.Count)); - g_MeshRenderer.PointLights.Data[id].Intensity = intensity; - if (g_MeshRenderer.MappedLights) - { - g_MeshRenderer.MappedLights[id].Intensity = intensity; - } -} - -void ClearPointLights() -{ - g_MeshRenderer.PointLights.Clear(); -} - -void SetGlobalLight(const Vector3& direction, const Vector3& color, float ambientIntensity) -{ - g_MeshRenderer.GlobalLightDirection = direction; - g_MeshRenderer.GlobalLightColor = color; - g_MeshRenderer.GlobalAmbientIntensity = ambientIntensity; -} - -MeshAssetID GetCubePrimitiveMeshAssetID() -{ - Assert(CubePrimitiveMeshAssetID != static_cast(-1)); - return CubePrimitiveMeshAssetID; -} - -MeshAssetID GetQuadPrimitiveMeshAssetID() -{ - Assert(QuadPrimitiveMeshAssetID != static_cast(-1)); - return QuadPrimitiveMeshAssetID; -} - -MeshAssetID GetSpherePrimitiveMeshAssetID() -{ - Assert(SpherePrimitiveMeshAssetID != static_cast(-1)); - return SpherePrimitiveMeshAssetID; -} - -MeshAssetID GetOrCreateMeshAsset(String name) -{ - for (index_t i = 0; i < g_MeshRenderer.MeshAssets.Count; ++i) - { - if (StringCompare(g_MeshRenderer.MeshAssets.Data[i].Name, name) == 0) - { - return i; - } - } - - return LoadMesh(name); -} - -MeshInstanceID CreateMeshInstance(MeshAssetID meshAsset, MaterialAssetID materialAsset, const Matrix& transform) -{ - MeshInstance instance = {}; - instance.MeshAsset = meshAsset; - instance.MaterialAsset = materialAsset; - instance.Transform = transform; - MeshInstanceID id = g_MeshRenderer.MeshInstances.Count; - g_MeshRenderer.MeshInstances.PushBack(instance); - return id; -} - -void SetMeshInstanceTransform(MeshInstanceID id, const Matrix& transform) -{ - Assert(id < static_cast(g_MeshRenderer.MeshInstances.Count)); - g_MeshRenderer.MeshInstances.Data[id].Transform = transform; -} - -MeshAssetID CreateCubePrimitive() -{ - MeshAsset result = {}; - result.Name = WrapString("Cube"); - - constexpr Vertex vertexData[] = { // Front Face (Z = -0.5f) — Red - { { -0.5f, 0.5f, -0.5f }, { 0.0f, 0.0f, -1.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, - { { 0.5f, 0.5f, -0.5f }, { 0.0f, 0.0f, -1.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, - { { 0.5f, -0.5f, -0.5f }, { 0.0f, 0.0f, -1.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, - { { -0.5f, -0.5f, -0.5f }, { 0.0f, 0.0f, -1.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, - - // Back Face (Z = 0.5f) — Green - { { 0.5f, 0.5f, 0.5f }, { 0.0f, 0.0f, 1.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, - { { -0.5f, 0.5f, 0.5f }, { 0.0f, 0.0f, 1.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, - { { -0.5f, -0.5f, 0.5f }, { 0.0f, 0.0f, 1.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, - { { 0.5f, -0.5f, 0.5f }, { 0.0f, 0.0f, 1.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, - - // Top Face (Y = 0.5f) — Blue - { { -0.5f, 0.5f, 0.5f }, { 0.0f, 1.0f, 0.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, - { { 0.5f, 0.5f, 0.5f }, { 0.0f, 1.0f, 0.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, - { { 0.5f, 0.5f, -0.5f }, { 0.0f, 1.0f, 0.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, - { { -0.5f, 0.5f, -0.5f }, { 0.0f, 1.0f, 0.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, - - // Bottom Face (Y = -0.5f) — Yellow - { { -0.5f, -0.5f, -0.5f }, { 0.0f, -1.0f, 0.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, - { { 0.5f, -0.5f, -0.5f }, { 0.0f, -1.0f, 0.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, - { { 0.5f, -0.5f, 0.5f }, { 0.0f, -1.0f, 0.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, - { { -0.5f, -0.5f, 0.5f }, { 0.0f, -1.0f, 0.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, - - // Right Face (X = 0.5f) — Cyan - { { 0.5f, 0.5f, -0.5f }, { 1.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, - { { 0.5f, 0.5f, 0.5f }, { 1.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, - { { 0.5f, -0.5f, 0.5f }, { 1.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, - { { 0.5f, -0.5f, -0.5f }, { 1.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, - - // Left Face (X = -0.5f) — Magenta - { { -0.5f, 0.5f, 0.5f }, { -1.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, - { { -0.5f, 0.5f, -0.5f }, { -1.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, - { { -0.5f, -0.5f, -0.5f }, { -1.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, - { { -0.5f, -0.5f, 0.5f }, { -1.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } } - }; - constexpr size_t cubeVertexCount = ArraySize(vertexData); - result.VertexCount = cubeVertexCount; - result.VertexOffset = g_MeshRenderer.Vertices.Count; - g_MeshRenderer.Vertices.PushBack(vertexData, cubeVertexCount); - - constexpr uint16 indices[] = { 0, 1, 2, 0, 2, 3, // Front - 4, 5, 6, 4, 6, 7, // Back - 8, 9, 10, 8, 10, 11, // Top - 12, 13, 14, 12, 14, 15, // Bottom - 16, 17, 18, 16, 18, 19, // Right - 20, 21, 22, 20, 22, 23 }; // Left - constexpr size_t indexCubeCount = ArraySize(indices); - result.IndexCount = indexCubeCount; - result.IndexOffset = g_MeshRenderer.Indices.Count; - g_MeshRenderer.Indices.PushBack(indices, indexCubeCount); - - MeshAssetID id = g_MeshRenderer.MeshAssets.Count; - g_MeshRenderer.MeshAssets.PushBack(result); - return id; -} - -MeshAssetID CreateQuadPrimitive() -{ - MeshAsset result = {}; - result.Name = WrapString("Quad"); - - constexpr Vertex vertexData[] = { - // Triangle 1 (Clockwise) - { { -0.5f, -0.5f, 0.0f }, { 0.0f, 0.0f, -1.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, // 0 - { { 0.0f, 0.5f, 0.0f }, { 0.0f, 0.0f, -1.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, // 1 - { { 0.5f, -0.5f, 0.0f }, { 0.0f, 0.0f, -1.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, // 2 - - // Triangle 2 (Clockwise) - { { -0.5f, 0.5f, 0.0f }, { 0.0f, 0.0f, -1.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, // 3 - { { 0.0f, 0.8f, 0.0f }, { 0.0f, 0.0f, -1.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, // 4 - { { 0.5f, 0.5f, 0.0f }, { 0.0f, 0.0f, -1.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } } // 5 - }; - constexpr size_t triVertexCount = ArraySize(vertexData); - result.VertexCount = triVertexCount; - result.VertexOffset = g_MeshRenderer.Vertices.Count; - g_MeshRenderer.Vertices.PushBack(vertexData, triVertexCount); - - constexpr uint16 indices[] = { 0, 1, 2, 3, 4, 5 }; - constexpr size_t triIndexCount = ArraySize(indices); - result.IndexCount = triIndexCount; - result.IndexOffset = g_MeshRenderer.Indices.Count; - g_MeshRenderer.Indices.PushBack(indices, triIndexCount); - - MeshAssetID id = g_MeshRenderer.MeshAssets.Count; - g_MeshRenderer.MeshAssets.PushBack(result); - return id; -} - -// Sphere primitive implementation omitted for brevity, returning Cube for now if called. -MeshAssetID CreateSpherePrimitive() -{ - // Just returning cube for now until proper sphere generation is written - MeshAssetID id = CreateCubePrimitive(); - g_MeshRenderer.MeshAssets.Data[id].Name = WrapString("Sphere"); // Rename just to pass cache - return id; -} - -#if ALLOW_SHADER_HOT_RELOAD -void ReloadMeshRendererShaders() -{ - auto* pipeline = g_MeshRenderer.Pipeline; - auto* device = g_MeshRenderer.Device; - - TempArena path = scratch_begin(0, 0); - - String entryPoint = WrapString("main"); - ShaderCreateInfo shaderCI = {}; - shaderCI.EntryPoint = entryPoint; - Path shaderPath = GetAssetPath(path.Arena, AssetType::Shader, ConstString("Triangle.vert.dxil")); - shaderCI.Stage = ShaderStage::Vertex; - Shader* vertexShader = CreateShader(device, shaderPath.FullPath, shaderCI); - - shaderPath = GetAssetPath(path.Arena, AssetType::Shader, ConstString("SolidColor.frag.dxil")); - shaderCI.Stage = ShaderStage::Fragment; - Shader* fragmentShader = CreateShader(device, shaderPath.FullPath, shaderCI); - - scratch_end(path); - - UpdateGraphicsPipelineShaders(device, pipeline, vertexShader, fragmentShader); - - if (vertexShader) - { - DestroyShader(device, vertexShader); - } - if (fragmentShader) - { - DestroyShader(device, fragmentShader); - } -} -#endif diff --git a/Juliet/src/Graphics/SkyboxRenderer.cpp b/Juliet/src/Graphics/SkyboxRenderer.c similarity index 51% rename from Juliet/src/Graphics/SkyboxRenderer.cpp rename to Juliet/src/Graphics/SkyboxRenderer.c index 244d68a..1380863 100644 --- a/Juliet/src/Graphics/SkyboxRenderer.cpp +++ b/Juliet/src/Graphics/SkyboxRenderer.c @@ -1,4 +1,4 @@ -#include +#include #include #include @@ -7,65 +7,64 @@ #include #include -namespace +global SkyboxRenderer g_SkyboxRenderer = { 0 }; + +bool8 InitializeSkyboxRenderer(GraphicsDevice* device, Window* window) { - SkyboxRenderer g_SkyboxRenderer; -} // namespace + Assert(device != NULL); + Assert(window != NULL); + bool8 result = true; -bool InitializeSkyboxRenderer(NonNullPtr device, NonNullPtr window) -{ - bool result = true; + GraphicsDevice* graphicsDevice = g_SkyboxRenderer.Device = device; - GraphicsDevice* graphicsDevice = g_SkyboxRenderer.Device = device.Get(); - - TempArena path = scratch_begin(0, 0); + TempArena path = scratch_begin(NULL, 0); String skyboxVSEntry = WrapString("main"); - ShaderCreateInfo skyboxVSCI = {}; + ShaderCreateInfo skyboxVSCI = { 0 }; skyboxVSCI.EntryPoint = skyboxVSEntry; - skyboxVSCI.Stage = ShaderStage::Vertex; - Path vsPath = GetAssetPath(path.Arena, AssetType::Shader, ConstString("Skybox.vert.dxil")); - Shader* skyboxVS = CreateShader(graphicsDevice, vsPath.FullPath, skyboxVSCI); + skyboxVSCI.Stage = ShaderStage_Vertex; + Path vsPath = GetAssetPath(path.Arena, AssetType_Shader, ConstString("Skybox.vert.dxil")); + Shader* skyboxVS = CreateShader(graphicsDevice, vsPath.FullPath, &skyboxVSCI); String skyboxFSEntry = WrapString("main"); - ShaderCreateInfo skyboxFSCI = {}; + ShaderCreateInfo skyboxFSCI = { 0 }; skyboxFSCI.EntryPoint = skyboxFSEntry; - skyboxFSCI.Stage = ShaderStage::Fragment; - Path fsPath = GetAssetPath(path.Arena, AssetType::Shader, ConstString("Skybox.frag.dxil")); - Shader* skyboxFS = CreateShader(graphicsDevice, fsPath.FullPath, skyboxFSCI); + skyboxFSCI.Stage = ShaderStage_Fragment; + Path fsPath = GetAssetPath(path.Arena, AssetType_Shader, ConstString("Skybox.frag.dxil")); + Shader* skyboxFS = CreateShader(graphicsDevice, fsPath.FullPath, &skyboxFSCI); scratch_end(path); - ColorTargetDescription colorTargetDesc = {}; + ColorTargetDescription colorTargetDesc = { 0 }; colorTargetDesc.Format = GetSwapChainTextureFormat(graphicsDevice, window); - GraphicsPipelineCreateInfo skyboxPipelineCI = {}; + GraphicsPipelineCreateInfo skyboxPipelineCI = { 0 }; skyboxPipelineCI.VertexShader = skyboxVS; skyboxPipelineCI.FragmentShader = skyboxFS; - skyboxPipelineCI.PrimitiveType = PrimitiveType::TriangleList; + skyboxPipelineCI.PrimitiveType = PrimitiveType_TriangleList; skyboxPipelineCI.TargetInfo.ColorTargetDescriptions = &colorTargetDesc; skyboxPipelineCI.TargetInfo.NumColorTargets = 1; - skyboxPipelineCI.TargetInfo.DepthStencilFormat = TextureFormat::D32_FLOAT; + skyboxPipelineCI.TargetInfo.DepthStencilFormat = TextureFormat_D32_FLOAT; skyboxPipelineCI.TargetInfo.HasDepthStencilTarget = true; - skyboxPipelineCI.RasterizerState.FillMode = FillMode::Solid; - skyboxPipelineCI.RasterizerState.CullMode = CullMode::None; - skyboxPipelineCI.RasterizerState.FrontFace = FrontFace::Clockwise; + skyboxPipelineCI.RasterizerState.FillMode = FillMode_Solid; + skyboxPipelineCI.RasterizerState.CullMode = CullMode_None; + skyboxPipelineCI.RasterizerState.FrontFace = FrontFace_Clockwise; skyboxPipelineCI.DepthStencilState.EnableDepthTest = true; skyboxPipelineCI.DepthStencilState.EnableDepthWrite = false; - skyboxPipelineCI.DepthStencilState.CompareOperation = CompareOperation::LessOrEqual; + skyboxPipelineCI.DepthStencilState.CompareOperation = CompareOperation_LessOrEqual; - g_SkyboxRenderer.Pipeline = CreateGraphicsPipeline(graphicsDevice, skyboxPipelineCI); - if (g_SkyboxRenderer.Pipeline == nullptr) + g_SkyboxRenderer.Pipeline = CreateGraphicsPipeline(graphicsDevice, &skyboxPipelineCI); + if (g_SkyboxRenderer.Pipeline == NULL) { - LogError(LogCategory::Graphics, "Failed to create skybox pipeline!"); + LogError(LogCategory_Graphics, "Failed to create skybox pipeline!"); result = false; } - if (skyboxVS) + if (skyboxVS != NULL) { DestroyShader(graphicsDevice, skyboxVS); } - if (skyboxFS) + if (skyboxFS != NULL) { DestroyShader(graphicsDevice, skyboxFS); } @@ -73,38 +72,40 @@ bool InitializeSkyboxRenderer(NonNullPtr device, NonNullPtr cmdList, NonNullPtr pass, const Matrix& viewProjection) +void RenderSkybox(CommandList* cmdList, RenderPass* pass, const Matrix* viewProjection) { - if (!g_SkyboxRenderer.Pipeline) + Assert(cmdList != NULL); + Assert(pass != NULL); + Assert(viewProjection != NULL); + + if (g_SkyboxRenderer.Pipeline != NULL) { - return; + PushData pushData = { 0 }; + pushData.ViewProjection = *viewProjection; + pushData.MeshIndex = 0; + pushData.TransformsBufferIndex = 0; + pushData.BufferIndex = 0; + + BindGraphicsPipeline(pass, g_SkyboxRenderer.Pipeline); + SetPushConstants(cmdList, ShaderStage_Vertex, 0, sizeof(pushData) / 4, &pushData); + SetPushConstants(cmdList, ShaderStage_Fragment, 0, sizeof(pushData) / 4, &pushData); + DrawPrimitives(pass, 3, 1, 0, 0); } - - PushData pushData = {}; - pushData.ViewProjection = viewProjection; - pushData.MeshIndex = 0; - pushData.TransformsBufferIndex = 0; - pushData.BufferIndex = 0; - - BindGraphicsPipeline(pass, g_SkyboxRenderer.Pipeline); - SetPushConstants(cmdList, ShaderStage::Vertex, 0, sizeof(pushData) / 4, &pushData); - SetPushConstants(cmdList, ShaderStage::Fragment, 0, sizeof(pushData) / 4, &pushData); - DrawPrimitives(pass, 3, 1, 0, 0); } #if ALLOW_SHADER_HOT_RELOAD -void ReloadSkyboxShaders() +void ReloadSkyboxShaders(void) { // TODO } diff --git a/Juliet/src/UnitTest/Container/VectorUnitTest.c b/Juliet/src/UnitTest/Container/VectorUnitTest.c new file mode 100644 index 0000000..3a13330 --- /dev/null +++ b/Juliet/src/UnitTest/Container/VectorUnitTest.c @@ -0,0 +1,182 @@ +#include +#if JULIET_DEBUG + +#include +#include + +typedef struct TestItem TestItem; +struct TestItem +{ + int32 A; + float B; +}; + +internal bool8 TestItemEquals(TestItem a, TestItem b) +{ + float diff = a.B - b.B; + return (a.A == b.A) && (diff > -0.0001f && diff < 0.0001f); +} + +internal void VerifyVectorState(const VectorArena* vec, size_t expectedCount) +{ + Assert(vec != NULL); + Assert(vec->Count == expectedCount); + + if (expectedCount == 0) + { + Assert(vector_arena_begin_const(vec) == NULL); + Assert(vector_arena_end_const(vec) == NULL); + } + else + { + Assert(vector_arena_begin_const(vec) != NULL); + Assert((const Byte*)vector_arena_end_const(vec) == (const Byte*)vector_arena_begin_const(vec) + (expectedCount * vec->ElemSize)); + } +} + +void UnitTest_VectorUnitTest(void) +{ + ArenaParams params = { .Name = "VectorUnitTestArena" }; + Arena* testArena = ArenaAllocate(params); + + // Test 1: Integer VectorArena (Basic Operations) + { + VectorArena vec = { 0 }; + VectorArenaCreate(&vec, int32, testArena, kVectorArenaDefaultReserveSize JULIET_DEBUG_PARAM("Test1Vec")); + VerifyVectorState(&vec, 0); + + VectorArenaPushVal(int32, &vec, 10); + VerifyVectorState(&vec, 1); + Assert(VectorArenaAt(int32, &vec, 0) == 10); + Assert(*VectorArenaBegin(int32, &vec) == 10); + Assert(*(VectorArenaEnd(int32, &vec) - 1) == 10); + + VectorArenaPushVal(int32, &vec, 20); + VerifyVectorState(&vec, 2); + Assert(VectorArenaAt(int32, &vec, 0) == 10); + Assert(VectorArenaAt(int32, &vec, 1) == 20); + Assert(*(VectorArenaEnd(int32, &vec) - 1) == 20); + + VectorArenaPushVal(int32, &vec, 30); + VerifyVectorState(&vec, 3); + Assert(VectorArenaAt(int32, &vec, 2) == 30); + Assert(*(VectorArenaEnd(int32, &vec) - 1) == 30); + + int32 sum = 0; + for (size_t i = 0; i < vec.Count; ++i) + { + sum += VectorArenaAt(int32, &vec, i); + } + Assert(sum == 60); + vector_arena_destroy(&vec); + } + + // Test 2: RemoveAtFast + { + VectorArena vec = { 0 }; + VectorArenaCreate(&vec, int32, testArena, kVectorArenaDefaultReserveSize JULIET_DEBUG_PARAM("Test2Vec")); + + VectorArenaPushVal(int32, &vec, 10); + VectorArenaPushVal(int32, &vec, 20); + VectorArenaPushVal(int32, &vec, 30); + VerifyVectorState(&vec, 3); + + vector_arena_remove_at_fast(&vec, 0); + VerifyVectorState(&vec, 2); + Assert(VectorArenaAt(int32, &vec, 0) == 30); + Assert(VectorArenaAt(int32, &vec, 1) == 20); + Assert(*(VectorArenaEnd(int32, &vec) - 1) == 20); + + vector_arena_remove_at_fast(&vec, 1); + VerifyVectorState(&vec, 1); + Assert(VectorArenaAt(int32, &vec, 0) == 30); + Assert(*(VectorArenaEnd(int32, &vec) - 1) == 30); + + vector_arena_remove_at_fast(&vec, 0); + VerifyVectorState(&vec, 0); + + vector_arena_destroy(&vec); + } + + // Test 3: Clear and Reuse + { + VectorArena vec = { 0 }; + VectorArenaCreate(&vec, int32, testArena, kVectorArenaDefaultReserveSize JULIET_DEBUG_PARAM("Test3Vec")); + + VectorArenaPushVal(int32, &vec, 100); + VectorArenaPushVal(int32, &vec, 200); + VerifyVectorState(&vec, 2); + + vector_arena_clear(&vec); + VerifyVectorState(&vec, 0); + + VectorArenaPushVal(int32, &vec, 300); + VerifyVectorState(&vec, 1); + Assert(VectorArenaAt(int32, &vec, 0) == 300); + Assert(*(VectorArenaEnd(int32, &vec) - 1) == 300); + + vector_arena_destroy(&vec); + } + + // Test 4: Struct VectorArena + { + VectorArena vec = { 0 }; + VectorArenaCreate(&vec, TestItem, testArena, kVectorArenaDefaultReserveSize JULIET_DEBUG_PARAM("Test4Vec")); + + VerifyVectorState(&vec, 0); + + VectorArenaPushVal(TestItem, &vec, ((TestItem){ 1, 1.0f })); + VectorArenaPushVal(TestItem, &vec, ((TestItem){ 2, 2.0f })); + VectorArenaPushVal(TestItem, &vec, ((TestItem){ 3, 3.0f })); + VerifyVectorState(&vec, 3); + + vector_arena_remove_at_fast(&vec, 1); + VerifyVectorState(&vec, 2); + Assert(TestItemEquals(VectorArenaAt(TestItem, &vec, 0), (TestItem){ 1, 1.0f })); + Assert(TestItemEquals(VectorArenaAt(TestItem, &vec, 1), (TestItem){ 3, 3.0f })); + + vector_arena_destroy(&vec); + } + + // Test 5: Resize Behavior + { + VectorArena vec = { 0 }; + VectorArenaCreate(&vec, int32, testArena, 4 JULIET_DEBUG_PARAM("Test5Vec")); + + VectorArenaPushVal(int32, &vec, 1); + VectorArenaPushVal(int32, &vec, 2); + Assert(vec.Count == 2); + + vector_arena_resize(&vec, 1); + Assert(vec.Count == 1); + Assert(VectorArenaAt(int32, &vec, 0) == 1); + + vector_arena_resize(&vec, 4); + Assert(vec.Count == 4); + Assert(VectorArenaAt(int32, &vec, 0) == 1); + + vector_arena_destroy(&vec); + } + + // Test 6: External Arena Usage & Volume Test within capacity + { + VectorArena vec = { 0 }; + VectorArenaCreate(&vec, int32, testArena, 100 JULIET_DEBUG_PARAM("Test6Vec")); + + for (int32 i = 0; i < 100; ++i) + { + VectorArenaPushVal(int32, &vec, i); + } + VerifyVectorState(&vec, 100); + + for (int32 i = 0; i < 100; ++i) + { + Assert(VectorArenaAt(int32, &vec, (size_t)i) == i); + } + + vector_arena_destroy(&vec); + } + + ArenaRelease(testArena); +} +#endif diff --git a/Juliet/src/UnitTest/Container/VectorUnitTest.cpp b/Juliet/src/UnitTest/Container/VectorUnitTest.cpp deleted file mode 100644 index b89066e..0000000 --- a/Juliet/src/UnitTest/Container/VectorUnitTest.cpp +++ /dev/null @@ -1,243 +0,0 @@ -#include -#if JULIET_DEBUG - -#include -#include - -namespace UnitTest -{ - namespace - { - template - inline void VerifyVectorState(const VectorArena& vec, size_t expectedCount) - { - Assert(vec.Size() == expectedCount); - - if (expectedCount == 0) - { - Assert(vec.begin() == nullptr); - Assert(vec.end() == nullptr); - } - else - { - Assert(vec.begin() != nullptr); - Assert(vec.end() == vec.begin() + expectedCount); - } - } - } // namespace - - void VectorUnitTest() - { - ArenaParams params{ .Name = "VectorUnitTestArena" }; - Arena* testArena = ArenaAllocate(params); - - // Test 1: Integer VectorArena (Basic Operations) - { - VectorArena vec = {}; - vec.Create(testArena); - VerifyVectorState(vec, 0); - - vec.PushBack(10); - VerifyVectorState(vec, 1); - Assert(vec[0] == 10); - Assert(*vec.begin() == 10); - Assert(*(vec.end() - 1) == 10); - - vec.PushBack(20); - VerifyVectorState(vec, 2); - Assert(vec[0] == 10); - Assert(vec[1] == 20); - Assert(*(vec.end() - 1) == 20); - - vec.PushBack(30); - VerifyVectorState(vec, 3); - Assert(vec[2] == 30); - Assert(*(vec.end() - 1) == 30); - - // Test Iteration - int sum = 0; - for (int val : vec) - { - sum += val; - } - Assert(sum == 60); - vec.Destroy(); - } - - // Test 2: RemoveAtFast - { - VectorArena vec = {}; - vec.Create(testArena); - - vec.PushBack(10); - vec.PushBack(20); - vec.PushBack(30); - VerifyVectorState(vec, 3); - - // Remove index 0 (value 10). Should swap with Last (30). - vec.RemoveAtFast(0); - VerifyVectorState(vec, 2); - Assert(vec[0] == 30); - Assert(vec[1] == 20); - Assert(*(vec.end() - 1) == 20); - - // Remove index 1 (value 20). - vec.RemoveAtFast(1); - VerifyVectorState(vec, 1); - Assert(vec[0] == 30); - Assert(*(vec.end() - 1) == 30); - - // Remove remaining element - vec.RemoveAtFast(0); - VerifyVectorState(vec, 0); - - vec.Destroy(); - } - - // Test 3: Clear and Reuse (Pointer State Check) - { - VectorArena vec = {}; - vec.Create(testArena); - - vec.PushBack(100); - vec.PushBack(200); - VerifyVectorState(vec, 2); - - vec.Clear(); - VerifyVectorState(vec, 0); // Should verify begin/end are nullptr - - vec.PushBack(300); - VerifyVectorState(vec, 1); - Assert(vec[0] == 300); - Assert(*(vec.end() - 1) == 300); - - vec.Destroy(); - } - - // Test 4: Struct VectorArena - { - struct TestItem - { - int A; - float B; - - bool operator==(const TestItem& other) const - { - float diff = B - other.B; - return A == other.A && (diff > -0.0001f && diff < 0.0001f); - } - }; - - VectorArena vec = {}; - vec.Create(testArena); - - VerifyVectorState(vec, 0); - - vec.PushBack({ 1, 1.0f }); - vec.PushBack({ 2, 2.0f }); - vec.PushBack({ 3, 3.0f }); - VerifyVectorState(vec, 3); - - // Remove middle element (index 1) - vec.RemoveAtFast(1); - VerifyVectorState(vec, 2); - Assert(vec[0] == (TestItem{ 1, 1.0f })); - Assert(vec[1] == (TestItem{ 3, 3.0f })); - - vec.Destroy(); - } - - // Test 5: Move Semantics - { - struct MoveOnly - { - int Value; - bool MovedFrom = false; - - MoveOnly(int v) - : Value(v) - { - } - MoveOnly(const MoveOnly&) = delete; // No copy - [[maybe_unused]] MoveOnly(MoveOnly&& other) noexcept - : Value(other.Value) - , MovedFrom(false) - { - other.MovedFrom = true; - other.Value = -1; - } - MoveOnly& operator=(const MoveOnly&) = delete; - [[maybe_unused]] MoveOnly& operator=(MoveOnly&& other) noexcept - { - Value = other.Value; - MovedFrom = false; - other.MovedFrom = true; - other.Value = -1; - return *this; - } - }; - - VectorArena vec = {}; - NonNullPtr validArena(testArena); - vec.Create(validArena); - - MoveOnly item1(10); - vec.PushBack(std::move(item1)); - - Assert(item1.MovedFrom); // Verify original was moved from - Assert(vec.Size() == 1); - Assert(vec[0].Value == 10); - Assert(!vec[0].MovedFrom); - - vec.Destroy(); - } - - // Test 6: Resize Behavior - { - NonNullPtr validArena(testArena); - - VectorArena vec = {}; - vec.Create(validArena); - - vec.PushBack(1); - vec.PushBack(2); - Assert(vec.Size() == 2); - - // Resize smaller - vec.Resize(1); - Assert(vec.Size() == 1); - Assert(vec[0] == 1); - - // Resize larger up to max capacity - vec.Resize(4); - Assert(vec.Size() == 4); - Assert(vec[0] == 1); - - vec.Destroy(); - } - - // Test 7: External Arena Usage & Volume Test within capacity - { - NonNullPtr validArena(testArena); - - VectorArena vec = {}; - vec.Create(validArena); // Pass external arena - - for (int i = 0; i < 100; ++i) - { - vec.PushBack(i); - } - VerifyVectorState(vec, 100); - - for (int i = 0; i < 100; ++i) - { - Assert(vec[static_cast(i)] == i); - } - - vec.Destroy(); - } - - ArenaRelease(testArena); - } -} // namespace UnitTest -#endif diff --git a/Juliet/src/UnitTest/RunUnitTests.c b/Juliet/src/UnitTest/RunUnitTests.c new file mode 100644 index 0000000..11015ee --- /dev/null +++ b/Juliet/src/UnitTest/RunUnitTests.c @@ -0,0 +1,27 @@ +#include + +#if JULIET_DEBUG + +#include +#include + +void UnitTest_VectorUnitTest(void); +void UnitTest_TestMemoryArena(void); +void UnitTest_SerializationUnitTest(void); +void UnitTest_os_unit_test(void); +void UnitTest_iostream_unit_test(void); + +void UnitTest_RunUnitTests(void) +{ + LogMessage(LogCategory_Core, "Starting Unit Tests..."); + + UnitTest_os_unit_test(); + UnitTest_TestMemoryArena(); + UnitTest_VectorUnitTest(); + UnitTest_SerializationUnitTest(); + UnitTest_iostream_unit_test(); + + LogMessage(LogCategory_Core, "Unit Tests Completed Successfully."); +} + +#endif diff --git a/Juliet/src/UnitTest/RunUnitTests.cpp b/Juliet/src/UnitTest/RunUnitTests.cpp deleted file mode 100644 index e918c43..0000000 --- a/Juliet/src/UnitTest/RunUnitTests.cpp +++ /dev/null @@ -1,31 +0,0 @@ -#include - -#if JULIET_DEBUG - -#include -#include - -namespace UnitTest -{ - // Forward declare the VectorUnitTest function - void VectorUnitTest(); - void TestMemoryArena(); - void SerializationUnitTest(); - void os_unit_test(); - void iostream_unit_test(); - - void RunUnitTests() - { - LogMessage(LogCategory::Core, "Starting Unit Tests..."); - - os_unit_test(); - TestMemoryArena(); - VectorUnitTest(); - SerializationUnitTest(); - iostream_unit_test(); - - LogMessage(LogCategory::Core, "Unit Tests Completed Successfully."); - } -} // namespace UnitTest - -#endif diff --git a/Juliet/src/UnitTest/iostream_test.c b/Juliet/src/UnitTest/iostream_test.c new file mode 100644 index 0000000..9a56439 --- /dev/null +++ b/Juliet/src/UnitTest/iostream_test.c @@ -0,0 +1,478 @@ +#if JULIET_DEBUG + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +typedef struct IOStreamTestMemoryPayload IOStreamTestMemoryPayload; +struct IOStreamTestMemoryPayload +{ + Byte* data; + size_t capacity; + size_t size; + size_t position; + bool8 is_closed; +}; + +internal IOStreamTestMemoryPayload* iostream_test_get_payload(IOStreamDataPayload* payload) +{ + Assert(payload != NULL); + return (IOStreamTestMemoryPayload*)payload; +} + +internal int64 iostream_test_mem_size(IOStreamDataPayload* payload) +{ + Assert(payload != NULL); + return (int64)iostream_test_get_payload(payload)->size; +} + +internal int64 iostream_test_mem_seek(IOStreamDataPayload* payload, int64 offset, IOStreamSeekPivot pivot) +{ + Assert(payload != NULL); + IOStreamTestMemoryPayload* memory = iostream_test_get_payload(payload); + + int64 result = -1; + int64 base = 0; + bool8 valid = true; + switch (pivot) + { + case IOStreamSeekPivot_Begin: base = 0; break; + case IOStreamSeekPivot_Current: base = (int64)memory->position; break; + case IOStreamSeekPivot_End: base = (int64)memory->size; break; + default: valid = false; break; + } + + if (valid) + { + int64 new_position = base + offset; + if ((new_position >= 0) && (new_position <= (int64)memory->size)) + { + memory->position = (size_t)new_position; + result = new_position; + } + } + + return result; +} + +internal size_t iostream_test_mem_read(IOStreamDataPayload* payload, void* out_buffer, size_t size, + IOStreamStatus* status) +{ + (void)status; + Assert(payload != NULL); + Assert(out_buffer != NULL); + + IOStreamTestMemoryPayload* memory = iostream_test_get_payload(payload); + size_t bytes_left = memory->size - memory->position; + size_t to_read = Min(size, bytes_left); + MemCopy(out_buffer, memory->data + memory->position, to_read); + memory->position += to_read; + return to_read; +} + +internal size_t iostream_test_mem_write(IOStreamDataPayload* payload, ByteBuffer in_buffer, + IOStreamStatus* status) +{ + (void)status; + Assert(payload != NULL); + Assert(IsValidByteBuffer(in_buffer)); + + IOStreamTestMemoryPayload* memory = iostream_test_get_payload(payload); + size_t space_left = memory->capacity - memory->position; + size_t to_write = Min(in_buffer.Size, space_left); + MemCopy(memory->data + memory->position, in_buffer.Data, to_write); + memory->position += to_write; + memory->size = Max(memory->size, memory->position); + return to_write; +} + +internal bool8 iostream_test_mem_flush(IOStreamDataPayload* payload, IOStreamStatus* status) +{ + (void)payload; + (void)status; + return true; +} + +internal bool8 iostream_test_mem_close(IOStreamDataPayload* payload) +{ + Assert(payload != NULL); + iostream_test_get_payload(payload)->is_closed = true; + return true; +} + +internal IOStreamInterface iostream_test_make_full_interface(void) +{ + IOStreamInterface stream_interface = { 0 }; + stream_interface.Version = sizeof(IOStreamInterface); + stream_interface.Size = iostream_test_mem_size; + stream_interface.Seek = iostream_test_mem_seek; + stream_interface.Read = iostream_test_mem_read; + stream_interface.Write = iostream_test_mem_write; + stream_interface.Flush = iostream_test_mem_flush; + stream_interface.Close = iostream_test_mem_close; + return stream_interface; +} + +internal IOStreamTestMemoryPayload iostream_test_make_payload(Arena* arena, size_t capacity) +{ + Assert(arena != NULL); + Assert(capacity > 0); + + IOStreamTestMemoryPayload payload = { 0 }; + payload.data = ArenaPushArray(arena, Byte, capacity); + payload.capacity = capacity; + Assert(payload.data != NULL); + return payload; +} + +internal ByteBuffer iostream_test_buffer_from_string(String str) +{ + Assert(IsValidString(str)); + ByteBuffer result = { .Data = (Byte*)str.Str, .Size = str.Size }; + return result; +} + +internal bool8 iostream_test_buffer_equals(ByteBuffer buffer, String expected) +{ + return (buffer.Size == expected.Size) && (MemCompare(buffer.Data, expected.Str, expected.Size) == 0); +} + +internal String iostream_test_append_suffix(Arena* arena, String str, String suffix) +{ + Assert(arena != NULL); + Assert(IsValidString(str)); + Assert(IsValidString(suffix)); + + size_t total_size = str.Size + suffix.Size; + char* buffer = ArenaPushArray(arena, char, total_size + 1); + Assert(buffer != NULL); + + MemCopy(buffer, str.Str, str.Size); + MemCopy(buffer + str.Size, suffix.Str, suffix.Size); + buffer[total_size] = '\0'; + String result = { buffer, total_size }; + return result; +} + +internal void iostream_test_delete_file(String filename) +{ + Assert(IsValidString(filename)); + if (fs_path_exists(filename)) + { + Assert(fs_delete_file(filename)); + } + Assert(!fs_path_exists(filename)); +} + +internal Path iostream_test_make_path(Arena* arena, String filename) +{ + Assert(arena != NULL); + Assert(IsValidString(filename)); + + Path base_path = GetBasePath(); + String raw_directory = iostream_test_append_suffix(arena, base_path.Directories, + ConstString("..\\..\\Intermediate\\UnitTest\\")); + Path test_directory = fs_create_clean_path(arena, raw_directory); + Assert(IsValidPath(test_directory)); + + if (!fs_path_exists(test_directory.FullPath)) + { + Assert(fs_create_directory(test_directory.FullPath, true)); + } + + Path file_path = fs_create_clean_path(arena, iostream_test_append_suffix(arena, test_directory.FullPath, filename)); + Assert(IsValidPath(file_path)); + return file_path; +} + +internal void iostream_test_write_file(String filename, String mode, String content) +{ + TempArena scratch = scratch_begin(NULL, 0); + + IOStream* stream = IOFromFile(scratch.Arena, filename, mode); + Assert(stream != NULL); + Assert(IOWrite(stream, iostream_test_buffer_from_string(content)) == content.Size); + Assert(IOClose(stream)); + + scratch_end(scratch); +} + +internal void iostream_test_memory_stream(void) +{ + TempArena scratch = scratch_begin(NULL, 0); + + IOStreamInterface stream_interface = iostream_test_make_full_interface(); + IOStreamTestMemoryPayload payload = iostream_test_make_payload(scratch.Arena, 256); + + IOStream* stream = IOFromInterface(scratch.Arena, &stream_interface, (IOStreamDataPayload*)&payload); + Assert(stream != NULL); + + String hello = ConstString("Hello"); + Assert(IOWrite(stream, iostream_test_buffer_from_string(hello)) == hello.Size); + Assert(IOWrite(stream, (ByteBuffer){ 0 }) == 0); + Assert(IOPrintf(stream, " %s %d", "World", 42) == 9); + + String expected = ConstString("Hello World 42"); + Assert(IOSize(stream) == (int64)expected.Size); + + Assert(IOSeek(stream, 0, IOStreamSeekPivot_Begin) == 0); + char read_buffer[64] = { 0 }; + Assert(IORead(stream, read_buffer, expected.Size) == expected.Size); + Assert(MemCompare(read_buffer, expected.Str, expected.Size) == 0); + + Assert(IORead(stream, read_buffer, sizeof(read_buffer)) == 0); + Assert(IORead(stream, read_buffer, 0) == 0); + + Assert(IOSeek(stream, -2, IOStreamSeekPivot_End) == (int64)(expected.Size - 2)); + Assert(IORead(stream, read_buffer, 2) == 2); + Assert(MemCompare(read_buffer, "42", 2) == 0); + + Assert(IOSeek(stream, -8, IOStreamSeekPivot_Current) == 6); + Assert(IORead(stream, read_buffer, 5) == 5); + Assert(MemCompare(read_buffer, "World", 5) == 0); + + Assert(!payload.is_closed); + Assert(IOClose(stream)); + Assert(payload.is_closed); + + scratch_end(scratch); + LogMessage(LogCategory_Core, "iostream_test_memory_stream passed."); +} + +internal void iostream_test_capability_fallbacks(void) +{ + TempArena scratch = scratch_begin(NULL, 0); + + String content = ConstString("Hello World 42"); + + // Read only, no seek, no size, no close + { + IOStreamInterface read_only_interface = { 0 }; + read_only_interface.Version = sizeof(IOStreamInterface); + read_only_interface.Read = iostream_test_mem_read; + + IOStreamTestMemoryPayload payload = iostream_test_make_payload(scratch.Arena, 64); + MemCopy(payload.data, content.Str, content.Size); + payload.size = content.Size; + + IOStream* stream = IOFromInterface(scratch.Arena, &read_only_interface, (IOStreamDataPayload*)&payload); + Assert(stream != NULL); + + Assert(IOWrite(stream, iostream_test_buffer_from_string(content)) == 0); + Assert(IOSeek(stream, 0, IOStreamSeekPivot_Begin) == -1); + Assert(IOSize(stream) == -1); + + char read_buffer[64] = { 0 }; + Assert(IORead(stream, read_buffer, content.Size) == content.Size); + Assert(MemCompare(read_buffer, content.Str, content.Size) == 0); + + Assert(IOClose(stream)); + Assert(!payload.is_closed); + } + + // Write only + { + IOStreamInterface write_only_interface = { 0 }; + write_only_interface.Version = sizeof(IOStreamInterface); + write_only_interface.Write = iostream_test_mem_write; + + IOStreamTestMemoryPayload payload = iostream_test_make_payload(scratch.Arena, 64); + + IOStream* stream = IOFromInterface(scratch.Arena, &write_only_interface, (IOStreamDataPayload*)&payload); + Assert(stream != NULL); + + Assert(IOWrite(stream, iostream_test_buffer_from_string(content)) == content.Size); + + char read_buffer[64] = { 0 }; + Assert(IORead(stream, read_buffer, content.Size) == 0); + Assert(IOClose(stream)); + } + + // No Size function: IOSize falls back on Seek and restores the position + { + IOStreamInterface seek_interface = iostream_test_make_full_interface(); + seek_interface.Size = NULL; + + IOStreamTestMemoryPayload payload = iostream_test_make_payload(scratch.Arena, 64); + MemCopy(payload.data, content.Str, content.Size); + payload.size = content.Size; + + IOStream* stream = IOFromInterface(scratch.Arena, &seek_interface, (IOStreamDataPayload*)&payload); + Assert(stream != NULL); + + Assert(IOSeek(stream, 3, IOStreamSeekPivot_Begin) == 3); + Assert(IOSize(stream) == (int64)content.Size); + Assert(IOSeek(stream, 0, IOStreamSeekPivot_Current) == 3); + Assert(IOClose(stream)); + } + + scratch_end(scratch); + LogMessage(LogCategory_Core, "iostream_test_capability_fallbacks passed."); +} + +internal void iostream_test_load_file_from_stream(void) +{ + TempArena scratch = scratch_begin(NULL, 0); + + String content = ConstString("Juliet LoadFile content"); + + // Known size, stream closed when done + { + IOStreamInterface stream_interface = iostream_test_make_full_interface(); + IOStreamTestMemoryPayload payload = iostream_test_make_payload(scratch.Arena, 64); + MemCopy(payload.data, content.Str, content.Size); + payload.size = content.Size; + + IOStream* stream = IOFromInterface(scratch.Arena, &stream_interface, (IOStreamDataPayload*)&payload); + Assert(stream != NULL); + + ByteBuffer loaded = LoadFileFromStream(scratch.Arena, stream, true); + Assert(iostream_test_buffer_equals(loaded, content)); + Assert(loaded.Data[loaded.Size] == 0); + Assert(payload.is_closed); + } + + // Known size, stream kept open + { + IOStreamInterface stream_interface = iostream_test_make_full_interface(); + IOStreamTestMemoryPayload payload = iostream_test_make_payload(scratch.Arena, 64); + MemCopy(payload.data, content.Str, content.Size); + payload.size = content.Size; + + IOStream* stream = IOFromInterface(scratch.Arena, &stream_interface, (IOStreamDataPayload*)&payload); + Assert(stream != NULL); + + ByteBuffer loaded = LoadFileFromStream(scratch.Arena, stream, false); + Assert(iostream_test_buffer_equals(loaded, content)); + Assert(!payload.is_closed); + Assert(IOClose(stream)); + } + + // Unknown size (no Size / Seek): loaded chunk by chunk, bigger than one chunk + { + const size_t k_big_content_size = 3000; + + IOStreamInterface stream_interface = iostream_test_make_full_interface(); + stream_interface.Size = NULL; + stream_interface.Seek = NULL; + + IOStreamTestMemoryPayload payload = iostream_test_make_payload(scratch.Arena, k_big_content_size); + for (size_t index = 0; index < k_big_content_size; ++index) + { + payload.data[index] = (Byte)('a' + (index % 26)); + } + payload.size = k_big_content_size; + + IOStream* stream = IOFromInterface(scratch.Arena, &stream_interface, (IOStreamDataPayload*)&payload); + Assert(stream != NULL); + + ByteBuffer loaded = LoadFileFromStream(scratch.Arena, stream, true); + Assert(loaded.Size == k_big_content_size); + Assert(MemCompare(loaded.Data, payload.data, k_big_content_size) == 0); + Assert(loaded.Data[loaded.Size] == 0); + Assert(payload.is_closed); + } + + scratch_end(scratch); + LogMessage(LogCategory_Core, "iostream_test_load_file_from_stream passed."); +} + +internal void iostream_test_file_stream(void) +{ + TempArena scratch = scratch_begin(NULL, 0); + + Path file_path = iostream_test_make_path(scratch.Arena, ConstString("juliet_iostream_unit_test.bin")); + Assert(IsValidPath(file_path)); + iostream_test_delete_file(file_path.FullPath); + + Assert(IOFromFile(scratch.Arena, (String){ 0 }, ConstString("rb")) == NULL); + Assert(IOFromFile(scratch.Arena, file_path.FullPath, (String){ 0 }) == NULL); + Assert(IOFromFile(scratch.Arena, file_path.FullPath, ConstString("rb")) == NULL); + + String first_part = ConstString("First part."); + String second_part = ConstString(" Second part."); + String full = ConstString("First part. Second part."); + + iostream_test_write_file(file_path.FullPath, ConstString("wb"), first_part); + Assert(fs_path_exists(file_path.FullPath)); + Assert(iostream_test_buffer_equals(LoadFile(scratch.Arena, file_path.FullPath), first_part)); + + iostream_test_write_file(file_path.FullPath, ConstString("ab"), second_part); + Assert(iostream_test_buffer_equals(LoadFile(scratch.Arena, file_path.FullPath), full)); + + { + IOStream* stream = IOFromFile(scratch.Arena, file_path.FullPath, ConstString("rb")); + Assert(stream != NULL); + Assert(IOSize(stream) == (int64)full.Size); + Assert(IOSeek(stream, (int64)first_part.Size, IOStreamSeekPivot_Begin) == (int64)first_part.Size); + + char read_buffer[64] = { 0 }; + Assert(IORead(stream, read_buffer, second_part.Size) == second_part.Size); + Assert(MemCompare(read_buffer, second_part.Str, second_part.Size) == 0); + Assert(IORead(stream, read_buffer, sizeof(read_buffer)) == 0); + Assert(IOWrite(stream, iostream_test_buffer_from_string(first_part)) == 0); + Assert(IOClose(stream)); + } + + iostream_test_write_file(file_path.FullPath, ConstString("wb"), second_part); + Assert(iostream_test_buffer_equals(LoadFile(scratch.Arena, file_path.FullPath), second_part)); + + iostream_test_delete_file(file_path.FullPath); + + scratch_end(scratch); + LogMessage(LogCategory_Core, "iostream_test_file_stream passed."); +} + +internal void iostream_test_atomic_file_write(void) +{ + TempArena scratch = scratch_begin(NULL, 0); + + Path file_path = iostream_test_make_path(scratch.Arena, ConstString("juliet_iostream_atomic_unit_test.bin")); + Assert(IsValidPath(file_path)); + String temp_filename = iostream_test_append_suffix(scratch.Arena, file_path.FullPath, ConstString(".tmp")); + + iostream_test_delete_file(file_path.FullPath); + iostream_test_delete_file(temp_filename); + + String first_content = ConstString("Atomic content that is long enough"); + Assert(IO_atomic_file_write(file_path, iostream_test_buffer_from_string(first_content)) == first_content.Size); + Assert(fs_path_exists(file_path.FullPath)); + Assert(!fs_path_exists(temp_filename)); + Assert(iostream_test_buffer_equals(LoadFile(scratch.Arena, file_path.FullPath), first_content)); + + String second_content = ConstString("Shorter"); + Assert(IO_atomic_file_write(file_path, iostream_test_buffer_from_string(second_content)) == second_content.Size); + Assert(!fs_path_exists(temp_filename)); + Assert(iostream_test_buffer_equals(LoadFile(scratch.Arena, file_path.FullPath), second_content)); + + iostream_test_write_file(temp_filename, ConstString("wb"), ConstString("Stale temp data")); + Assert(IO_atomic_file_write(file_path, iostream_test_buffer_from_string(first_content)) == first_content.Size); + Assert(!fs_path_exists(temp_filename)); + Assert(iostream_test_buffer_equals(LoadFile(scratch.Arena, file_path.FullPath), first_content)); + + iostream_test_delete_file(file_path.FullPath); + + scratch_end(scratch); + LogMessage(LogCategory_Core, "iostream_test_atomic_file_write passed."); +} + +void UnitTest_iostream_unit_test(void) +{ + LogMessage(LogCategory_Core, "=== Running IOStream Unit Tests ==="); + + iostream_test_memory_stream(); + iostream_test_capability_fallbacks(); + iostream_test_load_file_from_stream(); + iostream_test_file_stream(); + iostream_test_atomic_file_write(); + + LogMessage(LogCategory_Core, "=== All IOStream Unit Tests Passed Successfully ==="); +} + +#endif diff --git a/Juliet/src/UnitTest/iostream_test.cpp b/Juliet/src/UnitTest/iostream_test.cpp deleted file mode 100644 index 83aed10..0000000 --- a/Juliet/src/UnitTest/iostream_test.cpp +++ /dev/null @@ -1,472 +0,0 @@ -#if JULIET_DEBUG - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace UnitTest -{ - struct IOStreamTestMemoryPayload : IOStreamDataPayload - { - Byte* data; - size_t capacity; - size_t size; - size_t position; - bool is_closed; - }; - - internal IOStreamTestMemoryPayload* iostream_test_get_payload(NonNullPtr payload) - { - return static_cast(payload.Get()); - } - - internal int64 iostream_test_mem_size(NonNullPtr payload) - { - return static_cast(iostream_test_get_payload(payload)->size); - } - - internal int64 iostream_test_mem_seek(NonNullPtr payload, int64 offset, IOStreamSeekPivot pivot) - { - auto* memory = iostream_test_get_payload(payload); - - int64 base = 0; - switch (pivot) - { - case IOStreamSeekPivot::Begin: base = 0; break; - case IOStreamSeekPivot::Current: base = static_cast(memory->position); break; - case IOStreamSeekPivot::End: base = static_cast(memory->size); break; - case IOStreamSeekPivot::Count: return -1; - } - - int64 new_position = base + offset; - if ((new_position < 0) || (new_position > static_cast(memory->size))) - { - return -1; - } - - memory->position = static_cast(new_position); - return new_position; - } - - internal size_t iostream_test_mem_read(NonNullPtr payload, void* out_buffer, size_t size, - NonNullPtr /*status*/) - { - Assert(out_buffer != nullptr); - - auto* memory = iostream_test_get_payload(payload); - size_t bytes_left = memory->size - memory->position; - size_t to_read = Min(size, bytes_left); - MemCopy(out_buffer, memory->data + memory->position, to_read); - memory->position += to_read; - return to_read; - } - - internal size_t iostream_test_mem_write(NonNullPtr payload, ByteBuffer in_buffer, - NonNullPtr /*status*/) - { - Assert(IsValid(in_buffer)); - - auto* memory = iostream_test_get_payload(payload); - size_t space_left = memory->capacity - memory->position; - size_t to_write = Min(in_buffer.Size, space_left); - MemCopy(memory->data + memory->position, in_buffer.Data, to_write); - memory->position += to_write; - memory->size = Max(memory->size, memory->position); - return to_write; - } - - internal bool iostream_test_mem_flush(NonNullPtr /*payload*/, NonNullPtr /*status*/) - { - return true; - } - - internal bool iostream_test_mem_close(NonNullPtr payload) - { - iostream_test_get_payload(payload)->is_closed = true; - return true; - } - - internal IOStreamInterface iostream_test_make_full_interface() - { - IOStreamInterface stream_interface = {}; - stream_interface.Version = sizeof(IOStreamInterface); - stream_interface.Size = iostream_test_mem_size; - stream_interface.Seek = iostream_test_mem_seek; - stream_interface.Read = iostream_test_mem_read; - stream_interface.Write = iostream_test_mem_write; - stream_interface.Flush = iostream_test_mem_flush; - stream_interface.Close = iostream_test_mem_close; - return stream_interface; - } - - internal IOStreamTestMemoryPayload iostream_test_make_payload(NonNullPtr arena, size_t capacity) - { - Assert(capacity > 0); - - IOStreamTestMemoryPayload payload = {}; - payload.data = ArenaPushArray(arena, capacity); - payload.capacity = capacity; - Assert(payload.data != nullptr); - return payload; - } - - internal ByteBuffer iostream_test_buffer_from_string(String str) - { - Assert(IsValid(str)); - return { .Data = reinterpret_cast(str.Str), .Size = str.Size }; - } - - internal bool iostream_test_buffer_equals(ByteBuffer buffer, String expected) - { - return (buffer.Size == expected.Size) && (MemCompare(buffer.Data, expected.Str, expected.Size) == 0); - } - - internal String iostream_test_append_suffix(NonNullPtr arena, String str, String suffix) - { - Assert(IsValid(str)); - Assert(IsValid(suffix)); - - size_t total_size = str.Size + suffix.Size; - char* buffer = ArenaPushArray(arena, total_size + 1); - Assert(buffer != nullptr); - - MemCopy(buffer, str.Str, str.Size); - MemCopy(buffer + str.Size, suffix.Str, suffix.Size); - buffer[total_size] = '\0'; - return { buffer, total_size }; - } - - internal void iostream_test_delete_file(String filename) - { - Assert(IsValid(filename)); - if (fs_path_exists(filename)) - { - Assert(fs_delete_file(filename)); - } - Assert(!fs_path_exists(filename)); - } - - // Test files live in /Intermediate/UnitTest/ (exe is in /bin/x64-/) - internal Path iostream_test_make_path(NonNullPtr arena, String filename) - { - Assert(IsValid(filename)); - - Path base_path = GetBasePath(); - String raw_directory = iostream_test_append_suffix(arena, base_path.Directories, - ConstString("..\\..\\Intermediate\\UnitTest\\")); - Path test_directory = fs_create_clean_path(arena, raw_directory); - Assert(IsValid(test_directory)); - - if (!fs_path_exists(test_directory.FullPath)) - { - Assert(fs_create_directory(test_directory.FullPath, true)); - } - - Path file_path = fs_create_clean_path(arena, iostream_test_append_suffix(arena, test_directory.FullPath, filename)); - Assert(IsValid(file_path)); - return file_path; - } - - internal void iostream_test_write_file(String filename, String mode, String content) - { - TempArena scratch = scratch_begin(nullptr, 0); - - IOStream* stream = IOFromFile(scratch.Arena, filename, mode); - Assert(stream != nullptr); - Assert(IOWrite(stream, iostream_test_buffer_from_string(content)) == content.Size); - Assert(IOClose(stream)); - - scratch_end(scratch); - } - - // IOFromInterface + IOWrite / IOPrintf / IOSize / IOSeek / IORead / IOClose on a full interface - internal void iostream_test_memory_stream() - { - TempArena scratch = scratch_begin(nullptr, 0); - - IOStreamInterface stream_interface = iostream_test_make_full_interface(); - IOStreamTestMemoryPayload payload = iostream_test_make_payload(scratch.Arena, 256); - - IOStream* stream = IOFromInterface(scratch.Arena, &stream_interface, &payload); - Assert(stream != nullptr); - - String hello = ConstString("Hello"); - Assert(IOWrite(stream, iostream_test_buffer_from_string(hello)) == hello.Size); - Assert(IOWrite(stream, {}) == 0); - Assert(IOPrintf(stream, " %s %d", "World", 42) == 9); - - String expected = ConstString("Hello World 42"); - Assert(IOSize(stream) == static_cast(expected.Size)); - - Assert(IOSeek(stream, 0, IOStreamSeekPivot::Begin) == 0); - char read_buffer[64] = {}; - Assert(IORead(stream, read_buffer, expected.Size) == expected.Size); - Assert(MemCompare(read_buffer, expected.Str, expected.Size) == 0); - - Assert(IORead(stream, read_buffer, sizeof(read_buffer)) == 0); - Assert(IORead(stream, read_buffer, 0) == 0); - - Assert(IOSeek(stream, -2, IOStreamSeekPivot::End) == static_cast(expected.Size - 2)); - Assert(IORead(stream, read_buffer, 2) == 2); - Assert(MemCompare(read_buffer, "42", 2) == 0); - - Assert(IOSeek(stream, -8, IOStreamSeekPivot::Current) == 6); - Assert(IORead(stream, read_buffer, 5) == 5); - Assert(MemCompare(read_buffer, "World", 5) == 0); - - Assert(!payload.is_closed); - Assert(IOClose(stream)); - Assert(payload.is_closed); - - scratch_end(scratch); - LogMessage(LogCategory::Core, "iostream_test_memory_stream passed."); - } - - // Behavior when the interface is missing some functions - internal void iostream_test_capability_fallbacks() - { - TempArena scratch = scratch_begin(nullptr, 0); - - String content = ConstString("Hello World 42"); - - // Read only, no seek, no size, no close - { - IOStreamInterface read_only_interface = {}; - read_only_interface.Version = sizeof(IOStreamInterface); - read_only_interface.Read = iostream_test_mem_read; - - IOStreamTestMemoryPayload payload = iostream_test_make_payload(scratch.Arena, 64); - MemCopy(payload.data, content.Str, content.Size); - payload.size = content.Size; - - IOStream* stream = IOFromInterface(scratch.Arena, &read_only_interface, &payload); - Assert(stream != nullptr); - - Assert(IOWrite(stream, iostream_test_buffer_from_string(content)) == 0); - Assert(IOSeek(stream, 0, IOStreamSeekPivot::Begin) == -1); - Assert(IOSize(stream) == -1); - - char read_buffer[64] = {}; - Assert(IORead(stream, read_buffer, content.Size) == content.Size); - Assert(MemCompare(read_buffer, content.Str, content.Size) == 0); - - Assert(IOClose(stream)); - Assert(!payload.is_closed); - } - - // Write only - { - IOStreamInterface write_only_interface = {}; - write_only_interface.Version = sizeof(IOStreamInterface); - write_only_interface.Write = iostream_test_mem_write; - - IOStreamTestMemoryPayload payload = iostream_test_make_payload(scratch.Arena, 64); - - IOStream* stream = IOFromInterface(scratch.Arena, &write_only_interface, &payload); - Assert(stream != nullptr); - - Assert(IOWrite(stream, iostream_test_buffer_from_string(content)) == content.Size); - - char read_buffer[64] = {}; - Assert(IORead(stream, read_buffer, content.Size) == 0); - Assert(IOClose(stream)); - } - - // No Size function: IOSize falls back on Seek and restores the position - { - IOStreamInterface seek_interface = iostream_test_make_full_interface(); - seek_interface.Size = nullptr; - - IOStreamTestMemoryPayload payload = iostream_test_make_payload(scratch.Arena, 64); - MemCopy(payload.data, content.Str, content.Size); - payload.size = content.Size; - - IOStream* stream = IOFromInterface(scratch.Arena, &seek_interface, &payload); - Assert(stream != nullptr); - - Assert(IOSeek(stream, 3, IOStreamSeekPivot::Begin) == 3); - Assert(IOSize(stream) == static_cast(content.Size)); - Assert(IOSeek(stream, 0, IOStreamSeekPivot::Current) == 3); - Assert(IOClose(stream)); - } - - scratch_end(scratch); - LogMessage(LogCategory::Core, "iostream_test_capability_fallbacks passed."); - } - - // LoadFile(arena, stream, closeStreamWhenDone) with known size and chunked fallback - internal void iostream_test_load_file_from_stream() - { - TempArena scratch = scratch_begin(nullptr, 0); - - String content = ConstString("Juliet LoadFile content"); - - // Known size, stream closed when done - { - IOStreamInterface stream_interface = iostream_test_make_full_interface(); - IOStreamTestMemoryPayload payload = iostream_test_make_payload(scratch.Arena, 64); - MemCopy(payload.data, content.Str, content.Size); - payload.size = content.Size; - - IOStream* stream = IOFromInterface(scratch.Arena, &stream_interface, &payload); - Assert(stream != nullptr); - - ByteBuffer loaded = LoadFile(scratch.Arena, stream, true); - Assert(iostream_test_buffer_equals(loaded, content)); - Assert(loaded.Data[loaded.Size] == Byte{ 0 }); - Assert(payload.is_closed); - } - - // Known size, stream kept open - { - IOStreamInterface stream_interface = iostream_test_make_full_interface(); - IOStreamTestMemoryPayload payload = iostream_test_make_payload(scratch.Arena, 64); - MemCopy(payload.data, content.Str, content.Size); - payload.size = content.Size; - - IOStream* stream = IOFromInterface(scratch.Arena, &stream_interface, &payload); - Assert(stream != nullptr); - - ByteBuffer loaded = LoadFile(scratch.Arena, stream, false); - Assert(iostream_test_buffer_equals(loaded, content)); - Assert(!payload.is_closed); - Assert(IOClose(stream)); - } - - // Unknown size (no Size / Seek): loaded chunk by chunk, bigger than one chunk - { - constexpr size_t k_big_content_size = 3000; - - IOStreamInterface stream_interface = iostream_test_make_full_interface(); - stream_interface.Size = nullptr; - stream_interface.Seek = nullptr; - - IOStreamTestMemoryPayload payload = iostream_test_make_payload(scratch.Arena, k_big_content_size); - for (size_t index = 0; index < k_big_content_size; ++index) - { - payload.data[index] = static_cast('a' + (index % 26)); - } - payload.size = k_big_content_size; - - IOStream* stream = IOFromInterface(scratch.Arena, &stream_interface, &payload); - Assert(stream != nullptr); - - ByteBuffer loaded = LoadFile(scratch.Arena, stream, true); - Assert(loaded.Size == k_big_content_size); - Assert(MemCompare(loaded.Data, payload.data, k_big_content_size) == 0); - Assert(loaded.Data[loaded.Size] == Byte{ 0 }); - Assert(payload.is_closed); - } - - scratch_end(scratch); - LogMessage(LogCategory::Core, "iostream_test_load_file_from_stream passed."); - } - - // IOFromFile + LoadFile(arena, filename) on a real file - internal void iostream_test_file_stream() - { - TempArena scratch = scratch_begin(nullptr, 0); - - Path file_path = iostream_test_make_path(scratch.Arena, ConstString("juliet_iostream_unit_test.bin")); - Assert(IsValid(file_path)); - iostream_test_delete_file(file_path.FullPath); - - Assert(IOFromFile(scratch.Arena, {}, ConstString("rb")) == nullptr); - Assert(IOFromFile(scratch.Arena, file_path.FullPath, {}) == nullptr); - Assert(IOFromFile(scratch.Arena, file_path.FullPath, ConstString("rb")) == nullptr); - - String first_part = ConstString("First part."); - String second_part = ConstString(" Second part."); - String full = ConstString("First part. Second part."); - - iostream_test_write_file(file_path.FullPath, ConstString("wb"), first_part); - Assert(fs_path_exists(file_path.FullPath)); - Assert(iostream_test_buffer_equals(LoadFile(scratch.Arena, file_path.FullPath), first_part)); - - iostream_test_write_file(file_path.FullPath, ConstString("ab"), second_part); - Assert(iostream_test_buffer_equals(LoadFile(scratch.Arena, file_path.FullPath), full)); - - // Seek / Size / partial read on a file stream - { - IOStream* stream = IOFromFile(scratch.Arena, file_path.FullPath, ConstString("rb")); - Assert(stream != nullptr); - Assert(IOSize(stream) == static_cast(full.Size)); - Assert(IOSeek(stream, static_cast(first_part.Size), IOStreamSeekPivot::Begin) == - static_cast(first_part.Size)); - - char read_buffer[64] = {}; - Assert(IORead(stream, read_buffer, second_part.Size) == second_part.Size); - Assert(MemCompare(read_buffer, second_part.Str, second_part.Size) == 0); - Assert(IORead(stream, read_buffer, sizeof(read_buffer)) == 0); - Assert(IOWrite(stream, iostream_test_buffer_from_string(first_part)) == 0); - Assert(IOClose(stream)); - } - - // "w" truncates - iostream_test_write_file(file_path.FullPath, ConstString("wb"), second_part); - Assert(iostream_test_buffer_equals(LoadFile(scratch.Arena, file_path.FullPath), second_part)); - - iostream_test_delete_file(file_path.FullPath); - - scratch_end(scratch); - LogMessage(LogCategory::Core, "iostream_test_file_stream passed."); - } - - // IO_atomic_file_write: writes to .tmp then moves it to - internal void iostream_test_atomic_file_write() - { - TempArena scratch = scratch_begin(nullptr, 0); - - Path file_path = iostream_test_make_path(scratch.Arena, ConstString("juliet_iostream_atomic_unit_test.bin")); - Assert(IsValid(file_path)); - String temp_filename = iostream_test_append_suffix(scratch.Arena, file_path.FullPath, ConstString(".tmp")); - - iostream_test_delete_file(file_path.FullPath); - iostream_test_delete_file(temp_filename); - - // Create a new file - String first_content = ConstString("Atomic content that is long enough"); - Assert(IO_atomic_file_write(file_path, iostream_test_buffer_from_string(first_content)) == first_content.Size); - Assert(fs_path_exists(file_path.FullPath)); - Assert(!fs_path_exists(temp_filename)); - Assert(iostream_test_buffer_equals(LoadFile(scratch.Arena, file_path.FullPath), first_content)); - - // Replace an existing file with shorter content - String second_content = ConstString("Shorter"); - Assert(IO_atomic_file_write(file_path, iostream_test_buffer_from_string(second_content)) == second_content.Size); - Assert(!fs_path_exists(temp_filename)); - Assert(iostream_test_buffer_equals(LoadFile(scratch.Arena, file_path.FullPath), second_content)); - - // A leftover temp file from a previous crash must not break the write - iostream_test_write_file(temp_filename, ConstString("wb"), ConstString("Stale temp data")); - Assert(IO_atomic_file_write(file_path, iostream_test_buffer_from_string(first_content)) == first_content.Size); - Assert(!fs_path_exists(temp_filename)); - Assert(iostream_test_buffer_equals(LoadFile(scratch.Arena, file_path.FullPath), first_content)); - - iostream_test_delete_file(file_path.FullPath); - - scratch_end(scratch); - LogMessage(LogCategory::Core, "iostream_test_atomic_file_write passed."); - } - - void iostream_unit_test() - { - LogMessage(LogCategory::Core, "=== Running IOStream Unit Tests ==="); - - iostream_test_memory_stream(); - iostream_test_capability_fallbacks(); - iostream_test_load_file_from_stream(); - iostream_test_file_stream(); - iostream_test_atomic_file_write(); - - LogMessage(LogCategory::Core, "=== All IOStream Unit Tests Passed Successfully ==="); - } -} // namespace UnitTest - -#endif diff --git a/Juliet/src/UnitTest/os_test.c b/Juliet/src/UnitTest/os_test.c new file mode 100644 index 0000000..4a62cd7 --- /dev/null +++ b/Juliet/src/UnitTest/os_test.c @@ -0,0 +1,31 @@ +#if JULIET_DEBUG + +#include +#include +#include +#include + +void UnitTest_os_unit_test(void) +{ + LogMessage(LogCategory_Core, "=== Running OS Unit Tests (Juliet) ==="); + + TempArena scratch = scratch_begin(NULL, 0); + String username = os_get_username(scratch.Arena); + + Assert(IsValidString(username)); + + String env = os_get_env_var(scratch.Arena, ConstString("JULIET_UNIT_TEST")); + + os_set_env_var(ConstString("JULIET_UNIT_TEST"), username); + + String env2 = os_get_env_var(scratch.Arena, ConstString("JULIET_UNIT_TEST")); + + os_set_env_var(ConstString("JULIET_UNIT_TEST"), env); + + Assert(StringCompare(env, env2) != 0); + + scratch_end(scratch); + LogMessage(LogCategory_Core, "=== All OS Unit Tests Passed Successfully ==="); +} + +#endif diff --git a/Juliet/src/UnitTest/os_test.cpp b/Juliet/src/UnitTest/os_test.cpp deleted file mode 100644 index 09654c8..0000000 --- a/Juliet/src/UnitTest/os_test.cpp +++ /dev/null @@ -1,51 +0,0 @@ -#if JULIET_DEBUG - -#include -#include -#include -#include - -namespace UnitTest -{ - void os_unit_test() - { - LogMessage(LogCategory::Core, "=== Running OS Unit Tests (Juliet) ==="); - - TempArena scratch = scratch_begin(nullptr, 0); - String username = os_get_username(scratch.Arena); - - Assert(IsValid(username)); - - String env = os_get_env_var(scratch.Arena, ConstString("JULIET_UNIT_TEST")); - - os_set_env_var(ConstString("JULIET_UNIT_TEST"), username); - - String env2 = os_get_env_var(scratch.Arena, ConstString("JULIET_UNIT_TEST")); - - os_set_env_var(ConstString("JULIET_UNIT_TEST"), env); - - Assert(StringCompare(env, env2) != 0); - - // String os_get_env_var(NonNullPtr arena, const String& name) - // { - // String result = Internal::os_get_env_var(arena, name); - // return result; - // } - // - // void os_set_env_var(const String& name, const String& value) - // { - // Internal::os_set_env_var(name, value); - // } - // - // String os_get_username(NonNullPtr arena) - // { - // Internal::os_get_username(arena); - // } - // - - scratch_end(scratch); - LogMessage(LogCategory::Core, "=== All OS Unit Tests Passed Successfully ==="); - } -} // namespace UnitTest - -#endif diff --git a/Juliet/src/UnitTest/serialization_test.c b/Juliet/src/UnitTest/serialization_test.c new file mode 100644 index 0000000..d03c61a --- /dev/null +++ b/Juliet/src/UnitTest/serialization_test.c @@ -0,0 +1,281 @@ +#if JULIET_DEBUG + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +internal void test_parser_tokenization(void) +{ + TempArena temp = scratch_begin(NULL, 0); + + String test_content = ConstString("# Header Comment\r\n" + "// Secondary comment\n" + "\n" + "; Health\r\n" + " 100.500000 \r\n" + "\n" + "; Name\n" + "\"Paladin Hero\"\n" + "\n" + "; Position\r\n" + "1.0 2.0 3.0 4.0\r\n"); + + ByteBuffer buffer = { .Data = (Byte*)test_content.Str, .Size = test_content.Size }; + + ParsedArchive parsed = tokenize_archive(temp.Arena, buffer); + Assert(parsed.property_count == 3); + + ArchivePropertyNode* health_node = find_property(&parsed, crc32_str(ConstString("Health"))); + Assert(health_node != NULL); + Assert(StringCompare(health_node->value, WrapString("100.500000")) == 0); + + ArchivePropertyNode* name_node = find_property(&parsed, crc32_str(ConstString("Name"))); + Assert(name_node != NULL); + Assert(StringCompare(name_node->value, WrapString("\"Paladin Hero\"")) == 0); + + ArchivePropertyNode* pos_node = find_property(&parsed, crc32_str(ConstString("Position"))); + Assert(pos_node != NULL); + Assert(StringCompare(pos_node->value, WrapString("1.0 2.0 3.0 4.0")) == 0); + + scratch_end(temp); + LogMessage(LogCategory_Core, "test_parser_tokenization passed."); +} + +typedef struct DummyVehicle DummyVehicle; +struct DummyVehicle +{ + float max_speed; + int32 gear_count; + uint64 chassis_uuid; + bool8 turbo; + float pos_x; +}; + +DECLARE_CLASS(DummyVehicle) + +void init_DummyVehicle(void* payload) +{ + Assert(payload != NULL); + DummyVehicle* vehicle = (DummyVehicle*)payload; + vehicle->max_speed = 120.0f; + vehicle->gear_count = 6; + vehicle->chassis_uuid = 0xABCDEF0123456789ULL; + vehicle->turbo = true; + vehicle->pos_x = 10.0f; +} + +void serialize_DummyVehicle(Archive* ar, uint16 version, void* payload) +{ + (void)version; + Assert(ar != NULL); + Assert(payload != NULL); + DummyVehicle* vehicle = (DummyVehicle*)payload; + SERIALIZE_F32(ar, max_speed, &vehicle->max_speed); + SERIALIZE_I32(ar, gear_count, &vehicle->gear_count); + SERIALIZE_U64(ar, chassis_uuid, &vehicle->chassis_uuid); + SERIALIZE_BOOL(ar, turbo, &vehicle->turbo); + SERIALIZE_F32(ar, pos_x, &vehicle->pos_x); +} + +DEFINE_CLASS_VERSIONED(DummyVehicle, 1, NULL) + +internal void test_default_value_retention(void) +{ + TempArena temp = scratch_begin(NULL, 0); + + String incomplete_content = ConstString("; version\n" + "1\n" + "; max_speed\n" + "180.000000\n"); + + ByteBuffer buffer = { .Data = (Byte*)incomplete_content.Str, .Size = incomplete_content.Size }; + + ParsedArchive parsed = tokenize_archive(temp.Arena, buffer); + + Archive ar = { 0 }; + ar.arena = temp.Arena; + ar.loading = true; + ar.base = parsed; + + DummyVehicle vehicle; + init_DummyVehicle(&vehicle); + serialize_class(&ar, ClassKind(DummyVehicle), &vehicle); + + Assert(vehicle.max_speed == 180.0f); + Assert(vehicle.gear_count == 6); + Assert(vehicle.turbo == true); + Assert(vehicle.pos_x == 10.0f); + + scratch_end(temp); + LogMessage(LogCategory_Core, "test_default_value_retention passed."); +} + +typedef struct DummyWeaponBase DummyWeaponBase; +struct DummyWeaponBase +{ + float base_damage; +}; + +DECLARE_CLASS(DummyWeaponBase) + +void init_DummyWeaponBase(void* payload) +{ + Assert(payload != NULL); + DummyWeaponBase* base_weapon = (DummyWeaponBase*)payload; + base_weapon->base_damage = 25.0f; +} + +void serialize_DummyWeaponBase(Archive* ar, uint16 version, void* payload) +{ + (void)version; + Assert(ar != NULL); + Assert(payload != NULL); + DummyWeaponBase* base_weapon = (DummyWeaponBase*)payload; + SERIALIZE_F32(ar, base_damage, &base_weapon->base_damage); +} + +DEFINE_CLASS_VERSIONED(DummyWeaponBase, 1, NULL) + +typedef struct LegacyWeapon LegacyWeapon; +struct LegacyWeapon +{ + DummyWeaponBase base; + float velocity_x; + float velocity_y; +}; + +DECLARE_CLASS(LegacyWeapon) + +void init_LegacyWeapon(void* payload) +{ + Assert(payload != NULL); + LegacyWeapon* weapon = (LegacyWeapon*)payload; + init_DummyWeaponBase(&weapon->base); + weapon->velocity_x = 0.0f; + weapon->velocity_y = 0.0f; +} + +void serialize_LegacyWeapon(Archive* ar, uint16 version, void* payload) +{ + Assert(ar != NULL); + Assert(payload != NULL); + LegacyWeapon* weapon = (LegacyWeapon*)payload; + if (ar->loading) + { + if (version < 2) + { + float deprecated_speed = 0.0f; + if (SERIALIZE_F32(ar, speed, &deprecated_speed)) + { + weapon->velocity_x = deprecated_speed; + weapon->velocity_y = 0.0f; + } + } + else + { + SERIALIZE_F32(ar, velocity_x, &weapon->velocity_x); + SERIALIZE_F32(ar, velocity_y, &weapon->velocity_y); + } + } + else + { + SERIALIZE_F32(ar, velocity_x, &weapon->velocity_x); + SERIALIZE_F32(ar, velocity_y, &weapon->velocity_y); + } +} + +DEFINE_CLASS_VERSIONED(LegacyWeapon, 2, &class_kind_DummyWeaponBase) + +internal void test_deprecation_migration(void) +{ + TempArena temp = scratch_begin(NULL, 0); + + String v1_content = ConstString("; class_version\n" + "1\n" + "; speed\n" + "75.500000\n"); + + ByteBuffer buffer = { .Data = (Byte*)v1_content.Str, .Size = v1_content.Size }; + + ParsedArchive parsed = tokenize_archive(temp.Arena, buffer); + + Archive ar = { 0 }; + ar.arena = temp.Arena; + ar.loading = true; + ar.base = parsed; + + LegacyWeapon weapon; + init_LegacyWeapon(&weapon); + serialize_class(&ar, ClassKind(LegacyWeapon), &weapon); + + Assert(weapon.velocity_x == 75.5f); + Assert(weapon.velocity_y == 0.0f); + + scratch_end(temp); + LogMessage(LogCategory_Core, "test_deprecation_migration passed."); +} + +internal void test_class_inheritance(void) +{ + Assert(IsClassA(ClassKind(LegacyWeapon), DummyWeaponBase)); + Assert(!IsClassA(ClassKind(DummyWeaponBase), LegacyWeapon)); + Assert(!IsClassA(ClassKind(DummyVehicle), DummyWeaponBase)); + LogMessage(LogCategory_Core, "test_class_inheritance passed."); +} + +internal void test_string_and_vector4(void) +{ + TempArena temp = scratch_begin(NULL, 0); + + String content = ConstString("; title\n" + "\"Sword of Destiny\"\n" + "; position\n" + "10.0 20.0 30.0 1.0\n"); + + ByteBuffer buffer = { .Data = (Byte*)content.Str, .Size = content.Size }; + + ParsedArchive parsed = tokenize_archive(temp.Arena, buffer); + + Archive ar = { 0 }; + ar.arena = temp.Arena; + ar.loading = true; + ar.base = parsed; + + String title = { 0 }; + Vector4 position = { 0 }; + + bool8 read_title = SERIALIZE_STR(&ar, title, &title); + bool8 read_pos = SERIALIZE_VEC4(&ar, position, &position); + + Assert(read_title); + Assert(StringCompare(title, WrapString("Sword of Destiny")) == 0); + + Assert(read_pos); + Assert(position.x == 10.0f); + Assert(position.y == 20.0f); + Assert(position.z == 30.0f); + Assert(position.w == 1.0f); + + scratch_end(temp); + LogMessage(LogCategory_Core, "test_string_and_vector4 passed."); +} + +void UnitTest_SerializationUnitTest(void) +{ + LogMessage(LogCategory_Core, "=== Running Serialization & .jasset Unit Tests (Juliet) ==="); + test_parser_tokenization(); + test_default_value_retention(); + test_deprecation_migration(); + test_class_inheritance(); + test_string_and_vector4(); + LogMessage(LogCategory_Core, "=== All Serialization Unit Tests Passed Successfully ==="); +} + +#endif diff --git a/Juliet/src/UnitTest/serialization_test.cpp b/Juliet/src/UnitTest/serialization_test.cpp deleted file mode 100644 index 9037d7e..0000000 --- a/Juliet/src/UnitTest/serialization_test.cpp +++ /dev/null @@ -1,251 +0,0 @@ -#if JULIET_DEBUG - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace UnitTest -{ - // Test 1: Parser tokenization with whitespace, comments (# and //), and CRLF / LF line endings - internal void test_parser_tokenization() - { - TempArena temp = scratch_begin(nullptr, 0); - - String test_content = ConstString("# Header Comment\r\n" - "// Secondary comment\n" - "\n" - "; Health\r\n" - " 100.500000 \r\n" - "\n" - "; Name\n" - "\"Paladin Hero\"\n" - "\n" - "; Position\r\n" - "1.0 2.0 3.0 4.0\r\n"); - - ByteBuffer buffer = { .Data = (Byte*)test_content.Str, .Size = test_content.Size }; - - ParsedArchive parsed = tokenize_archive(temp.Arena, buffer); - Assert(parsed.property_count == 3); - - auto* health_node = find_property(&parsed, "Health"_crc32); - Assert(health_node != nullptr); - Assert(StringCompare(health_node->value, WrapString("100.500000")) == 0); - - auto* name_node = find_property(&parsed, "Name"_crc32); - Assert(name_node != nullptr); - Assert(StringCompare(name_node->value, WrapString("\"Paladin Hero\"")) == 0); - - auto* pos_node = find_property(&parsed, "Position"_crc32); - Assert(pos_node != nullptr); - Assert(StringCompare(pos_node->value, WrapString("1.0 2.0 3.0 4.0")) == 0); - - scratch_end(temp); - LogMessage(LogCategory::Core, "test_parser_tokenization passed."); - } - - // Test 2: Missing properties retain default struct values - struct DummyVehicle - { - DECLARE_CLASS() - - float max_speed = 120.0f; - int32 gear_count = 6; - uint64 chassis_uuid = 0xABCDEF0123456789ULL; - bool turbo = true; - float pos_x = 10.0f; - }; - - DEFINE_CLASS_VERSIONED(DummyVehicle, 1, nullptr) - - internal void serialize(Archive& ar, uint16 /*version*/, DummyVehicle& vehicle) - { - SERIALIZE(ar, max_speed, vehicle.max_speed); - SERIALIZE(ar, gear_count, vehicle.gear_count); - SERIALIZE(ar, chassis_uuid, vehicle.chassis_uuid); - SERIALIZE(ar, turbo, vehicle.turbo); - SERIALIZE(ar, pos_x, vehicle.pos_x); - } - - internal void test_default_value_retention() - { - TempArena temp = scratch_begin(nullptr, 0); - - String incomplete_content = ConstString("; version\n" - "1\n" - "; max_speed\n" - "180.000000\n"); - - ByteBuffer buffer = { .Data = (Byte*)incomplete_content.Str, .Size = incomplete_content.Size }; - - ParsedArchive parsed = tokenize_archive(temp.Arena, buffer); - - Archive ar = {}; - ar.arena = temp.Arena; - ar.loading = true; - ar.base = parsed; - - DummyVehicle vehicle; - // Defaults: max_speed=120, gear_count=6, turbo=true, pos_x=10 - serialize(ar, DummyVehicle::kind, &vehicle); - - Assert(vehicle.max_speed == 180.0f); // Overwritten by archive - Assert(vehicle.gear_count == 6); // Preserved default - Assert(vehicle.turbo == true); // Preserved default - Assert(vehicle.pos_x == 10.0f); // Preserved default - - scratch_end(temp); - LogMessage(LogCategory::Core, "test_default_value_retention passed."); - } - - // Base test class for testing hierarchy - struct DummyWeaponBase - { - DECLARE_CLASS() - - float base_damage = 25.0f; - }; - - DEFINE_CLASS_VERSIONED(DummyWeaponBase, 1, nullptr) - - internal void serialize(Archive& ar, uint16 /*version*/, DummyWeaponBase& base_weapon) - { - SERIALIZE(ar, base_damage, base_weapon.base_damage); - } - - // Derived test class for testing version migration (v1 -> v2) - struct LegacyWeapon - { - DECLARE_CLASS() - - float velocity_x = 0.0f; - float velocity_y = 0.0f; - }; - - // Inherits from DummyWeaponBase (base_class != nullptr) to verify derived class_version handling - DEFINE_CLASS_VERSIONED(LegacyWeapon, 2, &class_kind_DummyWeaponBase) - - internal void serialize(Archive& ar, uint16 version, LegacyWeapon& weapon) - { - if (ar.loading) - { - if (version < 2) - { - // Migration from v1: scalar 'speed' converted to 'velocity_x' on the stack - float deprecated_speed = 0.0f; - if (SERIALIZE(ar, speed, deprecated_speed)) - { - weapon.velocity_x = deprecated_speed; - weapon.velocity_y = 0.0f; - } - } - else - { - SERIALIZE(ar, velocity_x, weapon.velocity_x); - SERIALIZE(ar, velocity_y, weapon.velocity_y); - } - } - else - { - SERIALIZE(ar, velocity_x, weapon.velocity_x); - SERIALIZE(ar, velocity_y, weapon.velocity_y); - } - } - - // Test 3: Deprecation migration from v1 to v2 via stack variable - internal void test_deprecation_migration() - { - TempArena temp = scratch_begin(nullptr, 0); - - // Simulated v1 file containing obsolete 'speed' and class_version 1 - String v1_content = ConstString("; class_version\n" - "1\n" - "; speed\n" - "75.500000\n"); - - ByteBuffer buffer = { .Data = (Byte*)v1_content.Str, .Size = v1_content.Size }; - - ParsedArchive parsed = tokenize_archive(temp.Arena, buffer); - - Archive ar = {}; - ar.arena = temp.Arena; - ar.loading = true; - ar.base = parsed; - - LegacyWeapon weapon; - serialize(ar, LegacyWeapon::kind, &weapon); - - Assert(weapon.velocity_x == 75.5f); - Assert(weapon.velocity_y == 0.0f); - - scratch_end(temp); - LogMessage(LogCategory::Core, "test_deprecation_migration passed."); - } - - // Test 4: Hierarchical type query (IsA) - internal void test_class_inheritance() - { - Assert(IsA(*LegacyWeapon::kind)); - Assert(!IsA(*DummyWeaponBase::kind)); - Assert(!IsA(*DummyVehicle::kind)); - LogMessage(LogCategory::Core, "test_class_inheritance passed."); - } - - // Test 5: String and Vector4 read_prop serialization - internal void test_string_and_vector4() - { - TempArena temp = scratch_begin(nullptr, 0); - - String content = ConstString("; title\n" - "\"Sword of Destiny\"\n" - "; position\n" - "10.0 20.0 30.0 1.0\n"); - - ByteBuffer buffer = { .Data = (Byte*)content.Str, .Size = content.Size }; - - ParsedArchive parsed = tokenize_archive(temp.Arena, buffer); - - Archive ar = {}; - ar.arena = temp.Arena; - ar.loading = true; - ar.base = parsed; - - String title = {}; - Vector4 position = {}; - - bool read_title = SERIALIZE_SIMPLE(ar, title); - bool read_pos = SERIALIZE_SIMPLE(ar, position); - - Assert(read_title); - Assert(StringCompare(title, WrapString("Sword of Destiny")) == 0); - - Assert(read_pos); - Assert(position.x == 10.0f); - Assert(position.y == 20.0f); - Assert(position.z == 30.0f); - Assert(position.w == 1.0f); - - scratch_end(temp); - LogMessage(LogCategory::Core, "test_string_and_vector4 passed."); - } - - void SerializationUnitTest() - { - LogMessage(LogCategory::Core, "=== Running Serialization & .jasset Unit Tests (Juliet) ==="); - test_parser_tokenization(); - test_default_value_retention(); - test_deprecation_migration(); - test_class_inheritance(); - test_string_and_vector4(); - LogMessage(LogCategory::Core, "=== All Serialization Unit Tests Passed Successfully ==="); - } -} // namespace UnitTest - -#endif diff --git a/JulietApp/main.c b/JulietApp/main.c new file mode 100644 index 0000000..ddc8d88 --- /dev/null +++ b/JulietApp/main.c @@ -0,0 +1,348 @@ +#ifdef _WIN32 +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef JULIET_ENABLE_IMGUI +#include +#endif + +#include +#include +#include + +global bool8 g_show_memory_debugger = false; + +typedef void (*GameShutdown_t)(void); +typedef void (*GameUpdate_t)(GameData* params, float deltaTime); + +typedef struct GameFunctionTableStruct GameFunctionTableStruct; +struct GameFunctionTableStruct +{ + GameShutdown_t Shutdown; + GameUpdate_t Update; +}; + +global GameFunctionTableStruct g_game = { 0 }; +global GameData g_game_data = { 0 }; +global const char* g_game_function_names[] = { "GameShutdown", "GameUpdate" }; + +typedef struct JulietAppState JulietAppState; +struct JulietAppState +{ + Window* MainWindow; + GraphicsDevice* GraphicsDevice; + GraphicsPipeline* GraphicsPipeline; + Texture* DepthBuffer; + HotReloadCode GameCode; + bool8 Running; + float CameraTime; + int AutoCloseFrameCount; +}; + +global JulietAppState g_app = { + .MainWindow = NULL, + .GraphicsDevice = NULL, + .GraphicsPipeline = NULL, + .DepthBuffer = NULL, + .Running = false, + .CameraTime = 0.0f, + .AutoCloseFrameCount = -1 +}; + +internal void App_Init(Arena* platformArena) +{ + Assert(platformArena != NULL); + + Log(LogLevel_Message, LogCategory_Tool, "Initializing Juliet Application..."); + Log(LogLevel_Message, LogCategory_Tool, "%s", CStr(GetBasePath().Directories)); + + GraphicsConfig config = { 0 }; +#if JULIET_DEBUG + config.EnableDebug = true; +#endif + + g_app.GraphicsDevice = CreateGraphicsDevice(config); + + g_app.MainWindow = CreatePlatformWindow("Juliet", 1920, 1080, 0); + + g_app.Running = (g_app.MainWindow != NULL && g_app.GraphicsDevice != NULL); + + if (g_app.Running) + { + AttachToWindow(g_app.GraphicsDevice, g_app.MainWindow); + { + // Create Depth Buffer + TextureCreateInfo depthCI = { 0 }; + depthCI.Type = TextureType_2D; + depthCI.Width = 1920; + depthCI.Height = 1080; + depthCI.Format = TextureFormat_D32_FLOAT; + depthCI.Flags = TextureUsageFlag_DepthStencilTarget; + depthCI.LayerCount = 1; + depthCI.MipLevelCount = 1; + depthCI.SampleCount = TextureSampleCount_One; + g_app.DepthBuffer = CreateTexture(g_app.GraphicsDevice, &depthCI); + if (g_app.DepthBuffer == NULL) + { + LogError(LogCategory_Game, "Failed to create depth buffer!"); + g_app.Running = false; + } + } + + g_app.GameCode.Functions = (void**)&g_game; + g_app.GameCode.FunctionCount = ArraySize(g_game_function_names); + g_app.GameCode.FunctionNames = g_game_function_names; + InitHotReloadCode(platformArena, &g_app.GameCode, ConstString("Game.dll"), ConstString("Game_Temp.dll"), + ConstString("lock.tmp")); + g_app.Running = g_app.GameCode.IsValid; + } +} + +internal void App_Shutdown(void) +{ + Log(LogLevel_Message, LogCategory_Tool, "Shutting down Juliet Application..."); + + if (g_app.GameCode.IsValid) + { + g_game.Shutdown(); + ShutdownHotReloadCode(&g_app.GameCode); + } + + if (g_app.GraphicsPipeline != NULL) + { + DestroyGraphicsPipeline(g_app.GraphicsDevice, g_app.GraphicsPipeline); + } + + if (g_app.DepthBuffer != NULL) + { + DestroyTexture(g_app.GraphicsDevice, g_app.DepthBuffer); + } + + if (g_app.MainWindow != NULL && g_app.GraphicsDevice != NULL) + { + DetachFromWindow(g_app.GraphicsDevice, g_app.MainWindow); + } + + if (g_app.MainWindow != NULL) + { + DestroyPlatformWindow(g_app.MainWindow); + } + + if (g_app.GraphicsDevice != NULL) + { + DestroyGraphicsDevice(g_app.GraphicsDevice); + } + + Log(LogLevel_Message, LogCategory_Tool, "Juliet App shutdown Completed"); +} + +internal void App_Update(float deltaTime) +{ + g_app.CameraTime += deltaTime; + + static float fpsTimer = 0.0f; + static int fpsFrames = 0; + fpsTimer += deltaTime; + fpsFrames++; + if (fpsTimer >= 0.5f) + { + float fps = (float)fpsFrames / fpsTimer; + float ms = (fpsTimer / (float)fpsFrames) * 1000.0f; + char title[64]; + snprintf(title, sizeof(title), "Juliet | %.1f FPS | %.2f ms", (double)fps, (double)ms); + SetWindowTitle(g_app.MainWindow, WrapString(title)); + fpsTimer = 0.0f; + fpsFrames = 0; + } + + bool8 reloadShaders = false; + static bool8 reloadShadersDebounce = false; + + SystemEvent evt = { 0 }; + while (GetEvent(&evt)) + { + if (evt.Type == EventType_Window_Close_Request) + { + if (evt.Data.Window.AssociatedWindowID == GetWindowID(g_app.MainWindow)) + { + g_app.Running = false; + } + } + + // Shader hot reload using keyboard. + if (!reloadShadersDebounce && ((GetKeyModState() & KeyMod_Alt) != KeyMod_None) && IsKeyDown(ScanCode_R)) + { + reloadShaders = true; + reloadShadersDebounce = true; + } + + if (reloadShadersDebounce && !IsKeyDown(ScanCode_R)) + { + reloadShadersDebounce = false; + } + } + + Vector3 origin = { 0.0f, 0.0f, 0.0f }; + Vector3 xAxis = { 1.0f, 0.0f, 0.0f }; + Vector3 yAxis = { 0.0f, 1.0f, 0.0f }; + Vector3 zAxis = { 0.0f, 0.0f, 1.0f }; + FColor redCol = { 1.0f, 0.0f, 0.0f, 1.0f }; + FColor greenCol = { 0.0f, 1.0f, 0.0f, 1.0f }; + FColor blueCol = { 0.0f, 0.0f, 1.0f, 1.0f }; + FColor yelCol = { 1.0f, 1.0f, 0.0f, 1.0f }; + + DebugDisplay_DrawLine(origin, xAxis, redCol, false); + DebugDisplay_DrawLine(origin, yAxis, greenCol, true); + DebugDisplay_DrawLine(origin, zAxis, blueCol, true); + DebugDisplay_DrawSphere(origin, 0.5f, yelCol, true); + + g_game.Update(&g_game_data, deltaTime); + + if (ShouldReloadCode(&g_app.GameCode)) + { + ReloadCode(&g_app.GameCode); + } + + if (reloadShaders) + { + WaitUntilGPUIsIdle(g_app.GraphicsDevice); + +#if ALLOW_SHADER_HOT_RELOAD + ReloadMeshRendererShaders(); +#endif + } + + // Memory debugger toggle + static bool8 toggleDebounce = false; + if (IsKeyDown(ScanCode_Home)) + { + if (!toggleDebounce) + { + g_show_memory_debugger = !g_show_memory_debugger; + toggleDebounce = true; + } + } + else + { + toggleDebounce = false; + } + + // Auto-close logic + if (g_app.AutoCloseFrameCount > 0) + { + g_app.AutoCloseFrameCount--; + if (g_app.AutoCloseFrameCount == 0) + { + Log(LogLevel_Message, LogCategory_Tool, "Auto-closing application as requested."); + g_app.Running = false; + } + } + + if (g_show_memory_debugger) + { +#if JULIET_DEBUG + Debug_DebugDrawMemoryArena(); +#endif + } +} + +internal ColorTargetInfo App_GetColorTargetInfo(Texture* swapchainTexture) +{ + ColorTargetInfo info = { 0 }; + info.TargetTexture = swapchainTexture; + info.ClearColor = (FColor){ .R = 0.0f, .G = 0.0f, .B = 0.0f, .A = 1.0f }; + info.LoadOperation = LoadOperation_Clear; + info.StoreOperation = StoreOperation_Store; + return info; +} + +internal DepthStencilTargetInfo* App_GetDepthTargetInfo(void) +{ + static DepthStencilTargetInfo info = { 0 }; + info.TargetTexture = g_app.DepthBuffer; + info.ClearDepth = 1.0f; + info.LoadOperation = LoadOperation_Clear; + info.StoreOperation = StoreOperation_Store; + return &info; +} + +internal bool8 App_IsRunning(void) +{ + return g_app.Running; +} + +internal Window* App_GetPlatformWindow(void) +{ + return g_app.MainWindow; +} + +internal GraphicsDevice* App_GetGraphicsDevice(void) +{ + return g_app.GraphicsDevice; +} + +int JulietMain(int argc, wchar_t** argv) +{ + if (argc > 1) + { + for (int i = 1; i < argc; ++i) + { + if (wcscmp(argv[i], L"-autoclose") == 0 && (i + 1 < argc)) + { + int frames = _wtoi(argv[i + 1]); + g_app.AutoCloseFrameCount = frames; + } + } + } + + ApplicationCallbacks appCallbacks = { + .Init = App_Init, + .Shutdown = App_Shutdown, + .Update = App_Update, + .IsRunning = App_IsRunning, + .GetPlatformWindow = App_GetPlatformWindow, + .GetGraphicsDevice = App_GetGraphicsDevice, + .GetColorTargetInfo = App_GetColorTargetInfo, + .GetDepthTargetInfo = App_GetDepthTargetInfo, + }; + + StartApplication(appCallbacks, JulietInit_Flags_Display); + + // Pause here to not close the console window immediately on stop + // Only pause if not in auto-close mode + if (g_app.AutoCloseFrameCount == -1 && !Debug_IsDebuggerPresent()) + { + system("PAUSE"); + } + + return EXIT_SUCCESS; +} diff --git a/JulietApp/main.cpp b/JulietApp/main.cpp deleted file mode 100644 index 01d2bc9..0000000 --- a/JulietApp/main.cpp +++ /dev/null @@ -1,655 +0,0 @@ -#include "main.h" - -#ifdef global -#undef global -#endif - -#define global static - -#ifdef _WIN32 -#ifndef WIN32_LEAN_AND_MEAN -#define WIN32_LEAN_AND_MEAN -#endif -#include -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef JULIET_ENABLE_IMGUI -#include -#endif - -static bool ShowMemoryDebugger = false; - -#if 0 -static bool animateCubes = true; -static bool animateLights = true; -static bool animateCamera = true; - -static bool freeCameraMode = false; -static float camYaw = 0.0f; -static float camPitch = 0.0f; -static Vector3 camPos = { 25.0f, 0.0f, 12.5f }; - -static float animateCubesTime = 0.0f; -static float animateLightsTime = 0.0f; -static float animateCameraTime = 0.0f; - -static float redLightRadius = 10.0f; -static float redLightIntensity = 5.0f; -static float redLightColor[3] = { 1.0f, 0.2f, 0.2f }; -static bool redLightFollowsCamera = false; - -static bool enableGlobalLight = true; -static float globalLightDir[3] = { 0.5f, -1.0f, -0.5f }; -static float globalLightColor[3] = { 1.0f, 0.95f, 0.8f }; -static float globalAmbientIntensity = 0.2f; - -static float blueLightRadius = 15.0f; -static float blueLightIntensity = 8.0f; -static float blueLightColor[3] = { 0.2f, 0.2f, 1.0f }; -#endif - -// TODO : Replace with message box from framework + call main and not winmain + subsystem -// TODO : Think how to do the draw pipeline. -// Ex: Expose a Draw method ? -// Store a graphics context ? -// For now. Put everything in Update down below. -// Should split update from draw, update should have a != timestep than graphics (60fps or more) - -// TODO : Remove main.h. Useless -// May be remove that Application class, useless too. - -namespace -{ - using GameShutdown_t = void (*)(void); - using GameUpdate_t = void (*)(GameData* params, float deltaTime); - struct GameFunctionTable - { - GameShutdown_t Shutdown = nullptr; - GameUpdate_t Update = nullptr; - } Game; - GameData Data; - - const char* GameFunctionTable[] = { "GameShutdown", "GameUpdate" }; - -#if 0 - LightID RedLightID = 0; - LightID BlueLightID = 0; -#endif - -} // namespace - -void JulietApplication::Init(NonNullPtr platformArena) -{ - Log(LogLevel::Message, LogCategory::Tool, "Initializing Juliet Application..."); - Log(LogLevel::Message, LogCategory::Tool, "%s", CStr(GetBasePath().Directories)); - - GraphicsConfig config; -#if JULIET_DEBUG - config.EnableDebug = true; -#endif - - GraphicsDevice = CreateGraphicsDevice(config); - - MainWindow = CreatePlatformWindow("Juliet", 1920, 1080); - - Running = MainWindow != nullptr && GraphicsDevice != nullptr; - - if (Running) - { - AttachToWindow(GraphicsDevice, MainWindow); - { - // Create Depth Buffer - TextureCreateInfo depthCI = {}; - depthCI.Type = TextureType::Texture_2D; - depthCI.Width = 1920; - depthCI.Height = 1080; - depthCI.Format = TextureFormat::D32_FLOAT; - depthCI.Flags = TextureUsageFlag::DepthStencilTarget; - depthCI.LayerCount = 1; - depthCI.MipLevelCount = 1; - depthCI.SampleCount = TextureSampleCount::One; - DepthBuffer = CreateTexture(GraphicsDevice, depthCI); - if (DepthBuffer == nullptr) - { - LogError(LogCategory::Game, "Failed to create depth buffer!"); - Running = false; - } - -#if 0 - constexpr int kGridSize = 10; - constexpr float kSpacing = 2.5f; - constexpr float kOffset = (kGridSize - 1) * kSpacing * 0.5f; - - for (int row = 0; row < kGridSize; ++row) - { - for (int col = 0; col < kGridSize; ++col) - { - MeshAssetID cubeAsset = GetCubePrimitiveMeshAssetID(); - float x = static_cast(col) * kSpacing - kOffset; - float y = static_cast(row) * kSpacing - kOffset; - - float seed = static_cast(row * kGridSize + col); - Matrix rotation = MatrixRotation(seed * 0.73f, seed * 1.17f, seed * 0.53f); - CreateMeshInstance(cubeAsset, 0, MatrixTranslation(x, y, 0.0f) * rotation); - } - } - - // Start with some default test lights - PointLight redLight = {}; - redLight.Position = { 5.0f, 5.0f, 2.0f }; - redLight.Radius = redLightRadius; - redLight.Color = { redLightColor[0], redLightColor[1], redLightColor[2] }; - redLight.Intensity = redLightIntensity; - RedLightID = AddPointLight(redLight); - - PointLight blueLight = {}; - blueLight.Position = { -5.0f, 0.0f, 2.0f }; - blueLight.Radius = blueLightRadius; - blueLight.Color = { blueLightColor[0], blueLightColor[1], blueLightColor[2] }; - blueLight.Intensity = blueLightIntensity; - BlueLightID = AddPointLight(blueLight); -#endif - } - - GameCode.Functions = reinterpret_cast(&Game); - GameCode.FunctionCount = ArraySize(GameFunctionTable); - GameCode.FunctionNames = GameFunctionTable; - InitHotReloadCode(platformArena, GameCode, ConstString("Game.dll"), ConstString("Game_Temp.dll"), ConstString("lock.tmp")); - Running = GameCode.IsValid; - } -} - -void JulietApplication::Shutdown() -{ - Log(LogLevel::Message, LogCategory::Tool, "Shutting down Juliet Application..."); - - if (GameCode.IsValid) - { - Game.Shutdown(); - ShutdownHotReloadCode(GameCode); - } - - if (GraphicsPipeline) - { - DestroyGraphicsPipeline(GraphicsDevice, GraphicsPipeline); - } - - if (DepthBuffer) - { - DestroyTexture(GraphicsDevice, DepthBuffer); - } - - if (MainWindow && GraphicsDevice) - { - DetachFromWindow(GraphicsDevice, MainWindow); - } - - if (MainWindow) - { - DestroyPlatformWindow(MainWindow); - } - - if (GraphicsDevice) - { - DestroyGraphicsDevice(GraphicsDevice); - } - - Log(LogLevel::Message, LogCategory::Tool, "Juliet App shutdown Completed"); -} - -void JulietApplication::Update(float deltaTime) -{ - - CameraTime += deltaTime; - - static float fpsTimer = 0.0f; - static int fpsFrames = 0; - fpsTimer += deltaTime; - fpsFrames++; - if (fpsTimer >= 0.5f) - { - float fps = static_cast(fpsFrames) / fpsTimer; - float ms = (fpsTimer / static_cast(fpsFrames)) * 1000.0f; - char title[64]; - snprintf(title, sizeof(title), "Juliet | %.1f FPS | %.2f ms", static_cast(fps), static_cast(ms)); - SetWindowTitle(MainWindow, WrapString(title)); - fpsTimer = 0.0f; - fpsFrames = 0; - } - - bool reloadShaders = false; - static bool reloadShadersDebounce = false; - -#if 0 - static bool f1Debounce = false; -#endif - - SystemEvent evt; - while (GetEvent(evt)) - { - if (evt.Type == EventType::Window_Close_Request) - { - if (evt.Data.Window.AssociatedWindowID == GetWindowID(MainWindow)) - { - Running = false; - } - } - - // Shader hot reload using keyboard. - if (!reloadShadersDebounce && ((GetKeyModState() & KeyMod::Alt) != KeyMod::None) && IsKeyDown(ScanCode::R)) - { - reloadShaders = true; - reloadShadersDebounce = true; - } - - if (reloadShadersDebounce && !IsKeyDown(ScanCode::R)) - { - reloadShadersDebounce = false; - } - } - -#if 0 - static bool firstFreeFrame = false; - - if (IsKeyDown(ScanCode::F1)) - { - if (!f1Debounce) - { - freeCameraMode = !freeCameraMode; - if (freeCameraMode) - { - firstFreeFrame = true; - } - f1Debounce = true; - } - } - else - { - f1Debounce = false; - } - - // Confine and hide the mouse for Free Camera mode - if (freeCameraMode) - { -#ifdef JULIET_ENABLE_IMGUI - ImGui::SetMouseCursor(ImGuiMouseCursor_None); -#endif - -#ifdef _WIN32 - HWND hwnd = GetForegroundWindow(); - if (hwnd) - { - RECT rect; - GetClientRect(hwnd, &rect); - POINT ptCenterClient = { (rect.right - rect.left) / 2, (rect.bottom - rect.top) / 2 }; - - if (!firstFreeFrame) - { - POINT currentPos; - GetCursorPos(¤tPos); - ScreenToClient(hwnd, ¤tPos); - - float deltaX = static_cast(currentPos.x - ptCenterClient.x); - float deltaY = static_cast(currentPos.y - ptCenterClient.y); - - float sensitivity = 0.005f; - // Plus because the mouse is inverted inherently by windows to screen coordinate - camYaw += deltaX * sensitivity; - camPitch -= deltaY * sensitivity; - - camPitch = std::min(camPitch, 1.5f); - camPitch = std::max(camPitch, -1.5f); - } - firstFreeFrame = false; - - POINT ptCenterScreen = ptCenterClient; - ClientToScreen(hwnd, &ptCenterScreen); - SetCursorPos(ptCenterScreen.x, ptCenterScreen.y); - } -#endif - } - - if (freeCameraMode) - { - float speed = 10.0f * deltaTime; - if ((GetKeyModState() & KeyMod::Shift) != KeyMod::None) - { - speed *= 3.0f; - } - - Vector3 forward = { cosf(camYaw) * cosf(camPitch), sinf(camYaw) * cosf(camPitch), sinf(camPitch) }; - Vector3 right = { cosf(camYaw + 1.5708f), sinf(camYaw + 1.5708f), 0.0f }; - Vector3 up = { 0.0f, 0.0f, 1.0f }; - - if (IsKeyDown(ScanCode::W)) - { - camPos = camPos + forward * speed; - } - if (IsKeyDown(ScanCode::S)) - { - camPos = camPos - forward * speed; - } - if (IsKeyDown(ScanCode::D)) - { - camPos = camPos + right * speed; - } - if (IsKeyDown(ScanCode::A)) - { - camPos = camPos - right * speed; - } - if (IsKeyDown(ScanCode::E)) - { - camPos = camPos + up * speed; - } - if (IsKeyDown(ScanCode::Q)) - { - camPos = camPos - up * speed; - } - } - - if (animateCubes) - { - animateCubesTime += deltaTime; - } - if (animateLights) - { - animateLightsTime += deltaTime; - } - if (animateCamera) - { - animateCameraTime += deltaTime; - } - -#ifdef JULIET_ENABLE_IMGUI - ImGui::Begin("Debug Controls"); - ImGui::Checkbox("Animate Cubes", &animateCubes); - ImGui::Checkbox("Animate Lights", &animateLights); - ImGui::Checkbox("Animate Camera", &animateCamera); - - ImGui::Separator(); - ImGui::Text("Global Light"); - ImGui::Checkbox("Enable Global Light", &enableGlobalLight); - if (enableGlobalLight) - { - ImGui::SliderFloat3("Direction", globalLightDir, -1.0f, 1.0f); - ImGui::ColorEdit3("Color", globalLightColor); - ImGui::SliderFloat("Ambient Intensity", &globalAmbientIntensity, 0.0f, 1.0f); - } - - ImGui::Separator(); - ImGui::Text("Red Point Light"); - ImGui::ColorEdit3("Red Color", redLightColor); - ImGui::SliderFloat("Red Radius", &redLightRadius, 1.0f, 50.0f); - ImGui::SliderFloat("Red Intensity", &redLightIntensity, 0.0f, 50.0f); - ImGui::Checkbox("Red Light Follows Camera", &redLightFollowsCamera); - - ImGui::Separator(); - ImGui::Text("Blue Point Light"); - ImGui::ColorEdit3("Blue Color", blueLightColor); - ImGui::SliderFloat("Blue Radius", &blueLightRadius, 1.0f, 50.0f); - ImGui::SliderFloat("Blue Intensity", &blueLightIntensity, 0.0f, 50.0f); - - ImGui::End(); -#endif - - Vector3 redLightPos = { 5.0f, 5.0f, 2.0f }; - Vector3 blueLightPos = { -5.0f, 0.0f, 2.0f }; - - if (animateLights || animateLightsTime > 0.0f) - { - redLightPos = { cosf(animateLightsTime * 2.0f) * 5.0f, sinf(animateLightsTime * 2.0f) * 5.0f, 2.0f }; - blueLightPos = { -5.0f, cosf(animateLightsTime) * 3.0f, 2.0f }; - } - - if (redLightFollowsCamera) - { - Camera cam = GetDebugCamera(); - redLightPos = cam.Position; - } - - SetPointLightPosition(RedLightID, redLightPos); - SetPointLightPosition(BlueLightID, blueLightPos); - - SetPointLightColor(RedLightID, { redLightColor[0], redLightColor[1], redLightColor[2] }); - SetPointLightRadius(RedLightID, redLightRadius); - SetPointLightIntensity(RedLightID, redLightIntensity); - - SetPointLightColor(BlueLightID, { blueLightColor[0], blueLightColor[1], blueLightColor[2] }); - SetPointLightRadius(BlueLightID, blueLightRadius); - SetPointLightIntensity(BlueLightID, blueLightIntensity); - - // Animate the 100 cubes (10x10 grid) - constexpr int kGridSize = 10; - constexpr float kSpacing = 2.5f; - constexpr float kOffset = (kGridSize - 1) * kSpacing * 0.5f; - - for (int row = 0; row < kGridSize; ++row) - { - for (int col = 0; col < kGridSize; ++col) - { - MeshID cube = static_cast(row * kGridSize + col); // Assuming they were added first - float x = static_cast(col) * kSpacing - kOffset; - float y = static_cast(row) * kSpacing - kOffset; - - float seed = static_cast(cube); - float timeZ = animateCubesTime * 2.0f + seed * 0.5f; - float z = 0.0f; - - float scaleF = 1.0f; - Matrix rotation = MatrixIdentity(); - - if (animateCubes || animateCubesTime > 0.0f) - { - z = sinf(timeZ) * 1.5f; // Oscillate up and down - scaleF = 1.0f + sinf(animateCubesTime * 1.5f + seed) * 0.3f; // Pulse scale - rotation = MatrixRotation(animateCubesTime * 1.2f + seed * 0.73f, animateCubesTime * 0.8f + seed * 1.17f, - animateCubesTime * 0.5f + seed * 0.53f); - } - Matrix scale = MatrixScale(scaleF, scaleF, scaleF); - - SetMeshTransform(cube, MatrixTranslation(x, y, z) * rotation * scale); - } - } - DebugDisplay_DrawSphere(blueLightPos, 0.5f, { 0.0f, 0.0f, 1.0f, 1.0f }, true); - DebugDisplay_DrawSphere(redLightPos, 0.5f, { 1.0f, 0.0f, 0.0f, 1.0f }, true); -#endif - - DebugDisplay_DrawLine({ 0.0f, 0.0f, 0.0f }, { 1.0f, 0.0f, 0.0f }, { 1.0f, 0.0f, 0.0f, 1.0f }, false); - DebugDisplay_DrawLine({ 0.0f, 0.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, { 0.0f, 1.0f, 0.0f, 1.0f }, true); - DebugDisplay_DrawLine({ 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 1.0f }, { 0.0f, 0.0f, 1.0f, 1.0f }, true); - DebugDisplay_DrawSphere({ 0.0f, 0.0f, 0.0f }, 0.5f, { 1.0f, 1.0f, 0.0f, 1.0f }, true); - - Game.Update(&Data, deltaTime); - - if (ShouldReloadCode(GameCode)) - { - ReloadCode(GameCode); - } - - if (reloadShaders) - { - WaitUntilGPUIsIdle(GraphicsDevice); - -#if ALLOW_SHADER_HOT_RELOAD - ReloadMeshRendererShaders(); -#endif - } - - // Memory debugger toggle - static bool toggleDebounce = false; - if (IsKeyDown(ScanCode::Home)) - { - if (!toggleDebounce) - { - ShowMemoryDebugger = !ShowMemoryDebugger; - toggleDebounce = true; - } - } - else - { - toggleDebounce = false; - } - - // Auto-close logic - if (AutoCloseFrameCount > 0) - { - AutoCloseFrameCount--; - if (AutoCloseFrameCount == 0) - { - Log(LogLevel::Message, LogCategory::Tool, "Auto-closing application as requested."); - Running = false; - } - } - - if (ShowMemoryDebugger) - { -#if JULIET_DEBUG - Debug::DebugDrawMemoryArena(); -#endif - } -} - -ColorTargetInfo JulietApplication::GetColorTargetInfo(Texture* swapchainTexture) -{ - ColorTargetInfo info = {}; - info.TargetTexture = swapchainTexture; - info.ClearColor = { .R = 0.0f, .G = 0.0f, .B = 0.0f, .A = 1.0f }; - info.LoadOperation = LoadOperation::Clear; - info.StoreOperation = StoreOperation::Store; - return info; -} - -DepthStencilTargetInfo* JulietApplication::GetDepthTargetInfo() -{ - static DepthStencilTargetInfo info = {}; - info.TargetTexture = DepthBuffer; - info.ClearDepth = 1.0f; - info.LoadOperation = LoadOperation::Clear; - info.StoreOperation = StoreOperation::Store; - return &info; -} - -#if 0 -Camera JulietApplication::GetDebugCamera() -{ - if (freeCameraMode) - { - Camera cam = {}; - cam.Position = camPos; - cam.Target = camPos + Vector3{ cosf(camYaw) * cosf(camPitch), sinf(camYaw) * cosf(camPitch), sinf(camPitch) }; - cam.Up = { 0.0f, 0.0f, 1.0f }; - cam.FOV = 1.047f; - cam.AspectRatio = 1200.0f / 800.0f; - cam.NearPlane = 0.1f; - cam.FarPlane = 1000.0f; - return cam; - } - - // --- Adjusted for 1-Meter Scale --- - float baseRadius = 25.0f; // Increased to see 10x10 cube grid - - float radius = baseRadius; - - if (animateCamera || animateCameraTime > 0.0f) - { - float orbitSpeed = 0.5f; - float currentOrbitTime = animateCameraTime * orbitSpeed; - - float zoomAmplitude = 15.0f; - float zoomSpeed = 0.5f; - radius = baseRadius + (sinf(animateCameraTime * zoomSpeed) * zoomAmplitude); - - float zHeight = radius * 0.5f; // Keep a nice downward viewing angle - - Camera cam = {}; - cam.Position = { cosf(currentOrbitTime) * radius, sinf(currentOrbitTime) * radius, zHeight }; - cam.Target = { 0.0f, 0.0f, 0.0f }; - cam.Up = { 0.0f, 0.0f, 1.0f }; - cam.FOV = 1.047f; - cam.AspectRatio = 1200.0f / 800.0f; - cam.NearPlane = 0.1f; - cam.FarPlane = 1000.0f; - - return cam; - } - - float zHeight = radius * 0.5f; // Keep a nice downward viewing angle - - Camera cam = {}; - cam.Position = { radius, 0.0f, zHeight }; - cam.Target = { 0.0f, 0.0f, 0.0f }; - cam.Up = { 0.0f, 0.0f, 1.0f }; - cam.FOV = 1.047f; - cam.AspectRatio = 1200.0f / 800.0f; - cam.NearPlane = 0.1f; - cam.FarPlane = 1000.0f; - - return cam; -} -#endif - -bool JulietApplication::IsRunning() -{ - return Running; -} -namespace -{ - JulietApplication Application; -} - -JulietApplication& GetApplication() -{ - return Application; -} - -int JulietMain(int argc, wchar_t** argv) -{ - if (argc > 1) - { - for (int i = 1; i < argc; ++i) - { - if (wcscmp(argv[i], L"-autoclose") == 0 && (i + 1 < argc)) - { - int frames = _wtoi(argv[i + 1]); - Application.SetAutoCloseFrameCount(frames); - } - } - } - - StartApplication(Application, JulietInit_Flags::Display); - - // Pause here to not close the console window immediatly on stop - // Only pause if not in auto-close mode - if (Application.GetAutoCloseFrameCount() == -1 && !Debug::IsDebuggerPresent()) - { - system("PAUSE"); - } - - return EXIT_SUCCESS; -} diff --git a/JulietApp/main.h b/JulietApp/main.h deleted file mode 100644 index 4a90a73..0000000 --- a/JulietApp/main.h +++ /dev/null @@ -1,50 +0,0 @@ -#pragma once - -#include -#include -#include -#include -#include - -struct Mesh; -struct GraphicsTransferBuffer; -struct GraphicsBuffer; -struct GraphicsDevice; -struct Window; - -class JulietApplication : public IApplication -{ - protected: - void Init(NonNullPtr arena) override; - void Shutdown() override; - void Update(float deltaTime) override; - bool IsRunning() override; - - Window* GetPlatformWindow() override { return MainWindow; } - GraphicsDevice* GetGraphicsDevice() override { return GraphicsDevice; } - - // Render Lifecycle - ColorTargetInfo GetColorTargetInfo(Texture* swapchainTexture) override; - DepthStencilTargetInfo* GetDepthTargetInfo() override; - -#if 0 - Camera GetDebugCamera() override; -#endif - - public: - void SetAutoCloseFrameCount(int count) { AutoCloseFrameCount = count; } - int GetAutoCloseFrameCount() const { return AutoCloseFrameCount; } - - private: - Window* MainWindow = {}; - GraphicsDevice* GraphicsDevice = {}; - HotReloadCode GameCode = {}; - GraphicsPipeline* GraphicsPipeline = {}; - Texture* DepthBuffer = {}; - - int AutoCloseFrameCount = -1; - bool Running = false; - float CameraTime = 0.0f; -}; - -JulietApplication& GetApplication(); diff --git a/JulietShaderCompiler/DXShaderCompiler/DXCompiler.h b/JulietShaderCompiler/DXShaderCompiler/DXCompiler.h index b680a65..91c4382 100644 --- a/JulietShaderCompiler/DXShaderCompiler/DXCompiler.h +++ b/JulietShaderCompiler/DXShaderCompiler/DXCompiler.h @@ -1,31 +1,32 @@ #pragma once -/* Win32 Type Definitions */ +#include +#include -using HRESULT = int; -using LPCVOID = const void*; -using SIZE_T = size_t; -using LPCSTR = const char*; -using UINT = unsigned int; -using ULONG = unsigned long; -using LPVOID = void*; -using REFIID = void*; +/* Win32 Type Definitions */ +typedef int HRESULT; +typedef const void* LPCVOID; +typedef size_t SIZE_T; +typedef const char* LPCSTR; +typedef unsigned int UINT; +typedef unsigned long ULONG; +typedef void* LPVOID; +typedef void* REFIID; /* dxcompiler Type Definitions */ -using BOOL = int; -using REFCLSID = void*; -using LPCWSTR = wchar_t*; -using IDxcBlobEncoding = void; /* hack, unused */ -using IDxcBlobWide = void; /* hack, unused */ -using IDxcIncludeHandler = void; /* hack, unused */ +typedef int BOOL; +typedef void* REFCLSID; +typedef const wchar_t* LPCWSTR; +typedef void IDxcBlobEncoding; +typedef void IDxcBlobWide; +typedef void IDxcIncludeHandler; -/* Unlike vkd3d-utils, libdxcompiler.so does not use msabi */ #if !defined(_WIN32) #define __stdcall #endif -/* Compiler Interface, _technically_ unofficial but it's MS C++, come on */ -using DXC_OUT_KIND = enum DXC_OUT_KIND { +typedef enum DXC_OUT_KIND +{ DXC_OUT_NONE = 0, DXC_OUT_OBJECT = 1, DXC_OUT_ERRORS = 2, @@ -41,125 +42,106 @@ using DXC_OUT_KIND = enum DXC_OUT_KIND { DXC_OUT_TIME_REPORT = 12, DXC_OUT_TIME_TRACE = 13, DXC_OUT_LAST = DXC_OUT_TIME_TRACE, - DXC_OUT_NUM_ENUMS, - // DXC_OUT_FORCE_DWORD = 0xFFFFFFFF -}; + DXC_OUT_NUM_ENUMS +} DXC_OUT_KIND; -#define DXC_CP_UTF8 65001 +#define DXC_CP_UTF8 65001 #define DXC_CP_UTF16 1200 #define DXC_CP_UTF32 12000 -/* This is for binary, ANSI-text, or to tell the compiler to try autodetecting UTF using the BOM */ -#define DXC_CP_ACP 0 +#define DXC_CP_ACP 0 -using DxcBuffer = struct DxcBuffer +typedef struct DxcBuffer DxcBuffer; +struct DxcBuffer { LPCVOID Ptr; SIZE_T Size; UINT Encoding; }; -/* *INDENT-OFF* */ // clang-format off - static uint8 IID_IDxcBlob[] = { 0x08, 0xFB, 0xA5, 0x8B, 0x95, 0x51, 0xE2, 0x40, - 0xAC, - 0x58, - 0x0D, - 0x98, - 0x9C, - 0x3A, - 0x01, - 0x02 + 0xAC, 0x58, 0x0D, 0x98, 0x9C, 0x3A, 0x01, 0x02 }; -using IDxcBlob = struct IDxcBlob; -using IDxcBlobVtbl = struct IDxcBlobVtbl -{ - HRESULT(__stdcall *QueryInterface)(IDxcBlob *This, REFIID riid, void **ppvObject); - ULONG(__stdcall *AddRef)(IDxcBlob *This); - ULONG(__stdcall *Release)(IDxcBlob *This); - LPVOID(__stdcall *GetBufferPointer)(IDxcBlob *This); - SIZE_T(__stdcall *GetBufferSize)(IDxcBlob *This); +typedef struct IDxcBlob IDxcBlob; +typedef struct IDxcBlobVtbl IDxcBlobVtbl; +struct IDxcBlobVtbl +{ + HRESULT(__stdcall* QueryInterface)(IDxcBlob* This, REFIID riid, void** ppvObject); + ULONG(__stdcall* AddRef)(IDxcBlob* This); + ULONG(__stdcall* Release)(IDxcBlob* This); + + LPVOID(__stdcall* GetBufferPointer)(IDxcBlob* This); + SIZE_T(__stdcall* GetBufferSize)(IDxcBlob* This); }; struct IDxcBlob { - IDxcBlobVtbl *lpVtbl; + IDxcBlobVtbl* lpVtbl; }; static uint8 IID_IDxcBlobUtf8[] = { 0xC9, 0x36, 0xA6, 0x3D, 0x71, 0xBA, 0x24, 0x40, - 0xA3, - 0x01, - 0x30, - 0xCB, - 0xF1, - 0x25, - 0x30, - 0x5B + 0xA3, 0x01, 0x30, 0xCB, 0xF1, 0x25, 0x30, 0x5B }; -using IDxcBlobUtf8 = struct IDxcBlobUtf8; -using IDxcBlobUtf8Vtbl = struct IDxcBlobUtf8Vtbl + +typedef struct IDxcBlobUtf8 IDxcBlobUtf8; +typedef struct IDxcBlobUtf8Vtbl IDxcBlobUtf8Vtbl; +struct IDxcBlobUtf8Vtbl { - HRESULT(__stdcall *QueryInterface)(IDxcBlobUtf8 *This, REFIID riid, void **ppvObject); - ULONG(__stdcall *AddRef)(IDxcBlobUtf8 *This); - ULONG(__stdcall *Release)(IDxcBlobUtf8 *This); + HRESULT(__stdcall* QueryInterface)(IDxcBlobUtf8* This, REFIID riid, void** ppvObject); + ULONG(__stdcall* AddRef)(IDxcBlobUtf8* This); + ULONG(__stdcall* Release)(IDxcBlobUtf8* This); - LPVOID(__stdcall *GetBufferPointer)(IDxcBlobUtf8 *This); - SIZE_T(__stdcall *GetBufferSize)(IDxcBlobUtf8 *This); + LPVOID(__stdcall* GetBufferPointer)(IDxcBlobUtf8* This); + SIZE_T(__stdcall* GetBufferSize)(IDxcBlobUtf8* This); - HRESULT(__stdcall *GetEncoding)(IDxcBlobUtf8 *This, BOOL *pKnown, uint32 *pCodePage); + HRESULT(__stdcall* GetEncoding)(IDxcBlobUtf8* This, BOOL* pKnown, uint32* pCodePage); - LPCSTR(__stdcall *GetStringPointer)(IDxcBlobUtf8 *This); - SIZE_T(__stdcall *GetStringLength)(IDxcBlobUtf8 *This); + LPCSTR(__stdcall* GetStringPointer)(IDxcBlobUtf8* This); + SIZE_T(__stdcall* GetStringLength)(IDxcBlobUtf8* This); }; struct IDxcBlobUtf8 { - IDxcBlobUtf8Vtbl *lpVtbl; + IDxcBlobUtf8Vtbl* lpVtbl; }; static uint8 IID_IDxcResult[] = { 0xDA, 0x6C, 0x34, 0x58, 0xE7, 0xDD, 0x97, 0x44, - 0x94, - 0x61, - 0x6F, - 0x87, - 0xAF, - 0x5E, - 0x06, - 0x59 + 0x94, 0x61, 0x6F, 0x87, 0xAF, 0x5E, 0x06, 0x59 }; -using IDxcResult = struct IDxcResult; -using IDxcResultVtbl = struct IDxcResultVtbl + +typedef struct IDxcResult IDxcResult; +typedef struct IDxcResultVtbl IDxcResultVtbl; +struct IDxcResultVtbl { - HRESULT(__stdcall *QueryInterface)(IDxcResult *This, REFIID riid, void **ppvObject); - ULONG(__stdcall *AddRef)(IDxcResult *This); - ULONG(__stdcall *Release)(IDxcResult *This); + HRESULT(__stdcall* QueryInterface)(IDxcResult* This, REFIID riid, void** ppvObject); + ULONG(__stdcall* AddRef)(IDxcResult* This); + ULONG(__stdcall* Release)(IDxcResult* This); - HRESULT(__stdcall *GetStatus)(IDxcResult *This, HRESULT *pStatus); - HRESULT(__stdcall *GetResult)(IDxcResult *This, IDxcBlob **ppResult); - HRESULT(__stdcall *GetErrorBuffer)(IDxcResult *This, IDxcBlobEncoding **ppErrors); + HRESULT(__stdcall* GetStatus)(IDxcResult* This, HRESULT* pStatus); + HRESULT(__stdcall* GetResult)(IDxcResult* This, IDxcBlob** ppResult); + HRESULT(__stdcall* GetErrorBuffer)(IDxcResult* This, IDxcBlobEncoding** ppErrors); - BOOL(__stdcall *HasOutput)(IDxcResult *This, DXC_OUT_KIND dxcOutKind); - HRESULT(__stdcall *GetOutput)( - IDxcResult *This, - DXC_OUT_KIND dxcOutKind, - REFIID iid, - void **ppvObject, - IDxcBlobWide **ppOutputName - ); - uint32(__stdcall *GetNumOutputs)(IDxcResult *This); - DXC_OUT_KIND(__stdcall *GetOutputByIndex)(IDxcResult *This, uint32 Index); - DXC_OUT_KIND(__stdcall *PrimaryOutput)(IDxcResult *This); + BOOL(__stdcall* HasOutput)(IDxcResult* This, DXC_OUT_KIND dxcOutKind); + HRESULT(__stdcall* GetOutput)( + IDxcResult* This, + DXC_OUT_KIND dxcOutKind, + REFIID iid, + void** ppvObject, + IDxcBlobWide** ppOutputName); + uint32(__stdcall* GetNumOutputs)(IDxcResult* This); + DXC_OUT_KIND(__stdcall* GetOutputByIndex)(IDxcResult* This, uint32 Index); + DXC_OUT_KIND(__stdcall* PrimaryOutput)(IDxcResult* This); }; struct IDxcResult { - IDxcResultVtbl *lpVtbl; + IDxcResultVtbl* lpVtbl; }; static struct @@ -167,117 +149,105 @@ static struct uint32 Data1; uint16 Data2; uint16 Data3; - uint8 Data4[8]; + uint8 Data4[8]; } CLSID_DxcCompiler = { .Data1 = 0x73e22d93, .Data2 = 0xe6ce, .Data3 = 0x47f3, .Data4 = { 0xb5, 0xbf, 0xf0, 0x66, 0x4f, 0x39, 0xc1, 0xb0 } }; + static uint8 IID_IDxcCompiler3[] = { 0x87, 0x46, 0x8B, 0x22, 0x6A, 0x5A, 0x30, 0x47, - 0x90, - 0x0C, - 0x97, - 0x02, - 0xB2, - 0x20, - 0x3F, - 0x54 + 0x90, 0x0C, 0x97, 0x02, 0xB2, 0x20, 0x3F, 0x54 }; -using IDxcCompiler3 = struct IDxcCompiler3; -using IDxcCompiler3Vtbl = struct IDxcCompiler3Vtbl + +typedef struct IDxcCompiler3 IDxcCompiler3; +typedef struct IDxcCompiler3Vtbl IDxcCompiler3Vtbl; +struct IDxcCompiler3Vtbl { - HRESULT(__stdcall *QueryInterface)(IDxcCompiler3 *This, REFIID riid, void **ppvObject); - ULONG(__stdcall *AddRef)(IDxcCompiler3 *This); - ULONG(__stdcall *Release)(IDxcCompiler3 *This); + HRESULT(__stdcall* QueryInterface)(IDxcCompiler3* This, REFIID riid, void** ppvObject); + ULONG(__stdcall* AddRef)(IDxcCompiler3* This); + ULONG(__stdcall* Release)(IDxcCompiler3* This); - HRESULT(__stdcall *Compile)( - IDxcCompiler3 *This, - const DxcBuffer *pSource, - LPCWSTR *pArguments, - uint32 argCount, - IDxcIncludeHandler *pIncludeHandler, - REFIID riid, - LPVOID *ppResult - ); + HRESULT(__stdcall* Compile)( + IDxcCompiler3* This, + const DxcBuffer* pSource, + LPCWSTR* pArguments, + uint32 argCount, + IDxcIncludeHandler* pIncludeHandler, + REFIID riid, + LPVOID* ppResult); - HRESULT(__stdcall *Disassemble)( - IDxcCompiler3 *This, - const DxcBuffer *pObject, - REFIID riid, - LPVOID *ppResult - ); + HRESULT(__stdcall* Disassemble)( + IDxcCompiler3* This, + const DxcBuffer* pObject, + REFIID riid, + LPVOID* ppResult); }; struct IDxcCompiler3 { - const IDxcCompiler3Vtbl *lpVtbl; + const IDxcCompiler3Vtbl* lpVtbl; }; -// We need all this DxcUtils garbage for DXC include dir support. Thanks Microsoft! -using IMalloc = struct IMalloc; -using IStream = struct IStream; -using DxcDefine = struct DxcDefine; -using IDxcCompilerArgs = struct IDxcCompilerArgs; +typedef struct IMalloc IMalloc; +typedef struct IStream IStream; +typedef struct DxcDefine DxcDefine; +typedef struct IDxcCompilerArgs IDxcCompilerArgs; static struct { uint32 Data1; uint16 Data2; uint16 Data3; - uint8 Data4[8]; + uint8 Data4[8]; } CLSID_DxcUtils = { .Data1 = 0x6245d6af, .Data2 = 0x66e0, .Data3 = 0x48fd, - .Data4 = {0x80, 0xb4, 0x4d, 0x27, 0x17, 0x96, 0x74, 0x8c}}; + .Data4 = { 0x80, 0xb4, 0x4d, 0x27, 0x17, 0x96, 0x74, 0x8c } +}; + static uint8 IID_IDxcUtils[] = { 0xcb, 0xc4, 0x05, 0x46, 0x19, 0x20, 0x2a, 0x49, - 0xad, - 0xa4, - 0x65, - 0xf2, - 0x0b, - 0xb7, - 0xd6, - 0x7f + 0xad, 0xa4, 0x65, 0xf2, 0x0b, 0xb7, 0xd6, 0x7f }; -using IDxcUtilsVtbl = struct IDxcUtilsVtbl + +typedef struct IDxcUtils IDxcUtils; +typedef struct IDxcUtilsVtbl IDxcUtilsVtbl; +struct IDxcUtilsVtbl { - HRESULT (__stdcall *QueryInterface)(void *pSelf, REFIID riid, void **ppvObject); - ULONG (__stdcall *AddRef)(void *pSelf); - ULONG (__stdcall *Release)(void *pSelf); + HRESULT(__stdcall* QueryInterface)(void* pSelf, REFIID riid, void** ppvObject); + ULONG(__stdcall* AddRef)(void* pSelf); + ULONG(__stdcall* Release)(void* pSelf); - HRESULT (__stdcall *CreateBlobFromBlob)(void *pSelf, IDxcBlob *pBlob, UINT offset, UINT length, IDxcBlob **ppResult); - HRESULT (__stdcall *CreateBlobFromPinned)(void *pSelf, LPCVOID pData, UINT size, UINT codePage, IDxcBlobEncoding **pBlobEncoding); - HRESULT (__stdcall *MoveToBlob)(void *pSelf, LPCVOID pData, IMalloc *pIMalloc, UINT size, UINT codePage, IDxcBlobEncoding **pBlobEncoding); - HRESULT (__stdcall *CreateBlob)(void *pSelf, LPCVOID pData, UINT size, UINT codePage, IDxcBlobEncoding **pBlobEncoding); - HRESULT (__stdcall *LoadFile)(void *pSelf, LPCWSTR pFileName, UINT *pCodePage, IDxcBlobEncoding **pBlobEncoding); - HRESULT (__stdcall *CreateReadOnlyStreamFromBlob)(void *pSelf, IDxcBlob *pBlob, IStream **ppStream); - HRESULT (__stdcall *CreateDefaultIncludeHandler)(void *pSelf, IDxcIncludeHandler **ppResult); - HRESULT (__stdcall *GetBlobAsUtf8)(void *pSelf, IDxcBlob *pBlob, IDxcBlobUtf8 **pBlobEncoding); - HRESULT (__stdcall *GetBlobAsWide)(void *pSelf, IDxcBlob *pBlob, IDxcBlobWide **pBlobEncoding); - HRESULT (__stdcall *GetDxilContainerPart)(void *pSelf, const DxcBuffer *pShader, UINT DxcPart, void **ppPartData, UINT *pPartSizeInBytes); - HRESULT (__stdcall *CreateReflection)(void *pSelf, const DxcBuffer *pData, REFIID iid, void **ppvReflection); - HRESULT (__stdcall *BuildArguments)(void *pSelf, LPCWSTR pSourceName, LPCWSTR pEntryPoint, LPCWSTR pTargetProfile, LPCWSTR *pArguments, UINT argCount, const DxcDefine *pDefines, UINT defineCount, IDxcCompilerArgs **ppArgs); - HRESULT (__stdcall *GetPDBContents)(void *pSelf, IDxcBlob *pPDBBlob, IDxcBlob **ppHash, IDxcBlob **ppContainer); + HRESULT(__stdcall* CreateBlobFromBlob)(void* pSelf, IDxcBlob* pBlob, UINT offset, UINT length, IDxcBlob** ppResult); + HRESULT(__stdcall* CreateBlobFromPinned)(void* pSelf, LPCVOID pData, UINT size, UINT codePage, IDxcBlobEncoding** pBlobEncoding); + HRESULT(__stdcall* MoveToBlob)(void* pSelf, LPCVOID pData, IMalloc* pIMalloc, UINT size, UINT codePage, IDxcBlobEncoding** pBlobEncoding); + HRESULT(__stdcall* CreateBlob)(void* pSelf, LPCVOID pData, UINT size, UINT codePage, IDxcBlobEncoding** pBlobEncoding); + HRESULT(__stdcall* LoadFile)(void* pSelf, LPCWSTR pFileName, UINT* pCodePage, IDxcBlobEncoding** pBlobEncoding); + HRESULT(__stdcall* CreateReadOnlyStreamFromBlob)(void* pSelf, IDxcBlob* pBlob, IStream** ppStream); + HRESULT(__stdcall* CreateDefaultIncludeHandler)(void* pSelf, IDxcIncludeHandler** ppResult); + HRESULT(__stdcall* GetBlobAsUtf8)(void* pSelf, IDxcBlob* pBlob, IDxcBlobUtf8** pBlobEncoding); + HRESULT(__stdcall* GetBlobAsWide)(void* pSelf, IDxcBlob* pBlob, IDxcBlobWide** pBlobEncoding); + HRESULT(__stdcall* GetDxilContainerPart)(void* pSelf, const DxcBuffer* pShader, UINT DxcPart, void** ppPartData, UINT* pPartSizeInBytes); + HRESULT(__stdcall* CreateReflection)(void* pSelf, const DxcBuffer* pData, REFIID iid, void** ppvReflection); + HRESULT(__stdcall* BuildArguments)(void* pSelf, LPCWSTR pSourceName, LPCWSTR pEntryPoint, LPCWSTR pTargetProfile, LPCWSTR* pArguments, UINT argCount, const DxcDefine* pDefines, UINT defineCount, IDxcCompilerArgs** ppArgs); + HRESULT(__stdcall* GetPDBContents)(void* pSelf, IDxcBlob* pPDBBlob, IDxcBlob** ppHash, IDxcBlob** ppContainer); }; - -using IDxcUtils = struct IDxcUtils; struct IDxcUtils { - const IDxcUtilsVtbl *lpVtbl; + const IDxcUtilsVtbl* lpVtbl; }; -/* *INDENT-ON* */ // clang-format on - -/* DXCompiler */ -#if defined(SDL_PLATFORM_XBOXONE) || defined(SDL_PLATFORM_XBOXSERIES) || defined(SDL_PLATFORM_WINDOWS) -extern "C" HRESULT __stdcall DxcCreateInstance(REFCLSID rclsid, REFIID riid, LPVOID* ppv); -#else -extern "C" HRESULT DxcCreateInstance(REFCLSID rclsid, REFIID riid, LPVOID* ppv); +#ifdef __cplusplus +extern "C" { +#endif +HRESULT __stdcall DxcCreateInstance(REFCLSID rclsid, REFIID riid, LPVOID* ppv); +#ifdef __cplusplus +} #endif diff --git a/JulietShaderCompiler/ShaderCompiler.c b/JulietShaderCompiler/ShaderCompiler.c new file mode 100644 index 0000000..2365827 --- /dev/null +++ b/JulietShaderCompiler/ShaderCompiler.c @@ -0,0 +1,189 @@ +#include + +#include +#include +#include +#include +#include + +internal ByteBuffer CompileWithDXC(const HLSLShaderInfo* info, bool8 compileToSpirv) +{ + Assert(info != NULL); + Assert(!compileToSpirv && "SPIRV is not supported yet"); + + ByteBuffer outBuffer = { 0 }; + IDxcCompiler3* compiler = NULL; + DxcCreateInstance(&CLSID_DxcCompiler, IID_IDxcCompiler3, (void**)&compiler); + + IDxcUtils* utils = NULL; + DxcCreateInstance(&CLSID_DxcUtils, IID_IDxcUtils, (void**)&utils); + + IDxcResult* dxcResult = NULL; + LPCWSTR* args = NULL; + + if (compiler == NULL) + { + LogError(LogCategory_Tool, "Cannot create DXCompiler instance"); + } + else if (utils == NULL) + { + LogError(LogCategory_Graphics, "Cannot create IDxcUtils instance"); + } + else + { + IDxcIncludeHandler* includeHandler = NULL; + utils->lpVtbl->CreateDefaultIncludeHandler(utils, &includeHandler); + if (includeHandler == NULL) + { + LogError(LogCategory_Graphics, "Cannot create Default include handler"); + } + else + { + StringBuffer convertedBuffer = { 0 }; + char inplaceBuffer[1024]; + convertedBuffer.Str = inplaceBuffer; + convertedBuffer.Capacity = sizeof(inplaceBuffer); + const bool8 kAddNullTerminator = true; + if (!ConvertString(StringEncoding_UTF8, StringEncoding_UTF16, info->EntryPoint, &convertedBuffer, kAddNullTerminator)) + { + LogError(LogCategory_Tool, "Cannot convert entry point string to utf16"); + } + else + { + const size_t kExpectedArgCount = 32; + uint32 argCount = 0; + args = (LPCWSTR*)Calloc(kExpectedArgCount, sizeof(LPCWSTR)); + if (args == NULL) + { + LogError(LogCategory_Tool, "Couldn't allocate Args array"); + } + else + { + args[argCount++] = L"-E"; + args[argCount++] = (LPCWSTR)inplaceBuffer; + + DxcBuffer source; + source.Ptr = info->ByteCodeBuffer.Data; + source.Size = info->ByteCodeBuffer.Size; + source.Encoding = DXC_CP_ACP; + + bool8 stageValid = true; + switch (info->Stage) + { + case ShaderStage_Vertex: + { + args[argCount++] = L"-T"; + args[argCount++] = L"vs_6_6"; + break; + } + case ShaderStage_Fragment: + { + args[argCount++] = L"-T"; + args[argCount++] = L"ps_6_6"; + break; + } + case ShaderStage_Compute: + { + args[argCount++] = L"-T"; + args[argCount++] = L"cs_6_6"; + break; + } + default: + { + Assert(false && "Invalid shader stage"); + stageValid = false; + break; + } + } + + if (stageValid) + { + if (compileToSpirv) + { + args[argCount++] = L"-spirv"; + args[argCount++] = L"-fspv-flatten-resource-arrays"; + } + + char nameInplaceBuffer[1024]; + if (IsValidString(info->Name)) + { + StringBuffer nameUtf16 = { 0 }; + nameUtf16.Str = nameInplaceBuffer; + nameUtf16.Capacity = sizeof(nameInplaceBuffer); + if (ConvertString(StringEncoding_UTF8, StringEncoding_UTF16, info->Name, &nameUtf16, kAddNullTerminator)) + { + args[argCount++] = (LPCWSTR)nameInplaceBuffer; + } + } + + HRESULT result = compiler->lpVtbl->Compile(compiler, &source, args, argCount, includeHandler, + IID_IDxcResult, (void**)&dxcResult); + if (result < 0) + { + LogError(LogCategory_Tool, "IDxcShaderCompiler3::Compile failed: %X", result); + } + else if (dxcResult == NULL) + { + LogError(LogCategory_Tool, "%s", "HLSL compilation failed with no IDxcResult"); + } + else + { + IDxcBlob* blob = NULL; + IDxcBlobUtf8* errors = NULL; + result = dxcResult->lpVtbl->GetOutput(dxcResult, DXC_OUT_OBJECT, IID_IDxcBlob, (void**)&blob, NULL); + if (result < 0) + { + dxcResult->lpVtbl->GetOutput(dxcResult, DXC_OUT_ERRORS, IID_IDxcBlobUtf8, (void**)&errors, NULL); + if (errors != NULL && errors->lpVtbl->GetBufferSize(errors) != 0) + { + LogError(LogCategory_Tool, "HLSL compilation failed: %s", + (char*)errors->lpVtbl->GetBufferPointer(errors)); + } + else + { + LogError(LogCategory_Tool, "Compilation failed with unknown error"); + } + } + else + { + dxcResult->lpVtbl->GetOutput(dxcResult, DXC_OUT_ERRORS, IID_IDxcBlobUtf8, (void**)&errors, NULL); + if (errors != NULL && errors->lpVtbl->GetBufferSize(errors) != 0) + { + LogWarning(LogCategory_Tool, "HLSL compiled with warnings: %s", + (char*)errors->lpVtbl->GetBufferPointer(errors)); + } + + outBuffer.Size = blob->lpVtbl->GetBufferSize(blob); + outBuffer.Data = (Byte*)Malloc(outBuffer.Size); + MemCopy(outBuffer.Data, blob->lpVtbl->GetBufferPointer(blob), outBuffer.Size); + + blob->lpVtbl->Release(blob); + } + } + } + } + } + } + } + + SafeFree(args); + if (dxcResult != NULL) + { + dxcResult->lpVtbl->Release(dxcResult); + } + if (compiler != NULL) + { + compiler->lpVtbl->Release(compiler); + } + if (utils != NULL) + { + utils->lpVtbl->Release(utils); + } + + return outBuffer; +} + +ByteBuffer CompileDXIL(const HLSLShaderInfo* info) +{ + return CompileWithDXC(info, false); +} diff --git a/JulietShaderCompiler/ShaderCompiler.cpp b/JulietShaderCompiler/ShaderCompiler.cpp deleted file mode 100644 index 177977a..0000000 --- a/JulietShaderCompiler/ShaderCompiler.cpp +++ /dev/null @@ -1,198 +0,0 @@ -#include - -#include -#include -#include -#include -#include - - -namespace -{ - ByteBuffer CompileWithDXC(HLSLShaderInfo& info, bool compileToSpirv) - { - Assert(!compileToSpirv && "SPIRV is not supported yet"); - - IDxcCompiler3* compiler = nullptr; - DxcCreateInstance(&CLSID_DxcCompiler, IID_IDxcCompiler3, reinterpret_cast(&compiler)); - - IDxcUtils* utils = nullptr; - DxcCreateInstance(&CLSID_DxcUtils, &IID_IDxcUtils, reinterpret_cast(&utils)); - - if (compiler == nullptr) - { - LogError(LogCategory::Tool, "Cannot create DXCompiler instance"); - return {}; - } - - IDxcResult* dxcResult = nullptr; - LPCWSTR* args = nullptr; - auto deferred = Defer( - [&]() - { - SafeFree(args); - if (dxcResult) - { - dxcResult->lpVtbl->Release(dxcResult); - } - if (compiler) - { - compiler->lpVtbl->Release(compiler); - } - if (utils) - { - utils->lpVtbl->Release(utils); - } - }); - - if (utils == nullptr) - { - LogError(LogCategory::Graphics, "Cannot create IDxcUtils instance"); - return {}; - } - - IDxcIncludeHandler* includeHandler; - utils->lpVtbl->CreateDefaultIncludeHandler(utils, &includeHandler); - if (includeHandler == nullptr) - { - LogError(LogCategory::Graphics, "Cannot create Default include handler"); - return {}; - } - - StringBuffer convertedBuffer = {}; - char inplaceBuffer[1024]; - convertedBuffer.Data = inplaceBuffer; - convertedBuffer.Capacity = sizeof(inplaceBuffer); - constexpr bool kAddNullTerminator = true; - if (!ConvertString(StringEncoding::UTF8, StringEncoding::UTF16, info.EntryPoint, convertedBuffer, kAddNullTerminator)) - { - LogError(LogCategory::Tool, "Cannot convert entry point string to utf16"); - return {}; - } - - // Creating args for the compiler - // Allocating enough to fit them all - static constexpr size_t kExpectedArgCount = 32; - uint32 argCount = 0; - args = static_cast(Calloc(kExpectedArgCount, sizeof(LPCWSTR))); - if (!args) - { - LogError(LogCategory::Tool, "Couldn't allocate Args array"); - return {}; - } - - args[argCount++] = const_cast(L"-E"); - args[argCount++] = reinterpret_cast(inplaceBuffer); - - DxcBuffer source; - source.Ptr = info.ByteCodeBuffer.Data; - source.Size = info.ByteCodeBuffer.Size; - source.Encoding = DXC_CP_ACP; - - switch (info.Stage) - { - case ShaderStage::Vertex: - { - args[argCount++] = const_cast(L"-T"); - args[argCount++] = const_cast(L"vs_6_6"); - break; - } - case ShaderStage::Fragment: - { - args[argCount++] = const_cast(L"-T"); - args[argCount++] = const_cast(L"ps_6_6"); - break; - } - case ShaderStage::Compute: - { - args[argCount++] = const_cast(L"-T"); - args[argCount++] = const_cast(L"cs_6_6"); - break; - } - case ShaderStage::Invalid: - { - Assert(false , "Invalid shader stage"); - return {}; - } - } - - if (compileToSpirv) - { - args[argCount++] = const_cast(L"-spirv"); - args[argCount++] = const_cast(L"-fspv-flatten-resource-arrays"); - } - - char nameInplaceBuffer[1024]; - if (IsValid(info.Name)) - { - StringBuffer nameUtf16 = {}; - nameUtf16.Data = nameInplaceBuffer; - nameUtf16.Capacity = sizeof(nameInplaceBuffer); - if (ConvertString(StringEncoding::UTF8, StringEncoding::UTF16, info.Name, nameUtf16, kAddNullTerminator)) - { - args[argCount++] = reinterpret_cast(nameInplaceBuffer); - } - } - - HRESULT result = compiler->lpVtbl->Compile(compiler, &source, args, argCount, includeHandler, IID_IDxcResult, - reinterpret_cast(&dxcResult)); - if (result < 0) - { - LogError(LogCategory::Tool, "IDxcShaderCompiler3::Compile failed: %X", result); - return {}; - } - - if (dxcResult == nullptr) - { - LogError(LogCategory::Tool, "%s", "HLSL compilation failed with no IDxcResult"); - return {}; - } - - IDxcBlob* blob = nullptr; - IDxcBlobUtf8* errors = nullptr; - result = dxcResult->lpVtbl->GetOutput(dxcResult, DXC_OUT_OBJECT, IID_IDxcBlob, reinterpret_cast(&blob), nullptr); - if (result < 0) - { - // Compilation failed, display errors - dxcResult->lpVtbl->GetOutput(dxcResult, DXC_OUT_ERRORS, IID_IDxcBlobUtf8, reinterpret_cast(&errors), nullptr); - if (errors != nullptr && errors->lpVtbl->GetBufferSize(errors) != 0) - { - LogError(LogCategory::Tool, "HLSL compilation failed: %s", - static_cast(errors->lpVtbl->GetBufferPointer(errors))); - } - else - { - LogError(LogCategory::Tool, "Compilation failed with unknown error"); - } - - return {}; - } - - // If compilation succeeded, but there are errors, those are warnings - dxcResult->lpVtbl->GetOutput(dxcResult, DXC_OUT_ERRORS, IID_IDxcBlobUtf8, reinterpret_cast(&errors), nullptr); - if (errors != nullptr && errors->lpVtbl->GetBufferSize(errors) != 0) - { - LogWarning(LogCategory::Tool, "HLSL compiled with warnings: %s", - static_cast(errors->lpVtbl->GetBufferPointer(errors))); - } - - // TODO: Scratch allocator. No malloc - ByteBuffer buffer = {}; - buffer.Size = blob->lpVtbl->GetBufferSize(blob); - buffer.Data = static_cast(Malloc(buffer.Size)); - MemCopy(buffer.Data, blob->lpVtbl->GetBufferPointer(blob), buffer.Size); - - blob->lpVtbl->Release(blob); - - return buffer; - } -} // namespace - -ByteBuffer CompileDXIL(HLSLShaderInfo& info) -{ - // TODO: Use SPIRV an do hlsl -> spirv -> hlsl -> dxil. - // This is from Shadercross SDL_ShaderCross_CompileDXILFromHLSL. - // Not sure why yet. - - return CompileWithDXC(info, false); -} diff --git a/JulietShaderCompiler/ShaderCompiler.h b/JulietShaderCompiler/ShaderCompiler.h index 9a68166..d286078 100644 --- a/JulietShaderCompiler/ShaderCompiler.h +++ b/JulietShaderCompiler/ShaderCompiler.h @@ -1,42 +1,43 @@ -#pragma once +#pragma once #include #include -enum class SourceLanguage : uint8 +typedef uint8 SourceLanguage; +enum { - HLSL = 0, - Count = 1, - Invalid = Count + SourceLanguage_HLSL = 0, + SourceLanguage_Count = 1, + SourceLanguage_Invalid = SourceLanguage_Count }; -enum class ShaderFormat : uint8 +typedef uint8 ShaderFormat; +enum { - DXIL = 0, - Count = 1, - Invalid = Count + ShaderFormat_DXIL = 0, + ShaderFormat_Count = 1, + ShaderFormat_Invalid = ShaderFormat_Count }; -enum class ShaderStage : uint8 +typedef uint8 ShaderStage; +enum { - Vertex = 0, - Fragment = 1, - Compute = 2, - Count = 3, - Invalid = Count + ShaderStage_Vertex = 0, + ShaderStage_Fragment = 1, + ShaderStage_Compute = 2, + ShaderStage_Count = 3, + ShaderStage_Invalid = ShaderStage_Count }; +typedef struct ShaderInfo ShaderInfo; struct ShaderInfo { - ByteBuffer ByteCodeBuffer; - String EntryPoint; - String Name; - ShaderStage Stage; + ByteBuffer ByteCodeBuffer; + String EntryPoint; + String Name; + ShaderStage Stage; }; -struct HLSLShaderInfo : ShaderInfo -{ - // TODO Defines and includes -}; +typedef ShaderInfo HLSLShaderInfo; -ByteBuffer CompileDXIL(HLSLShaderInfo& info); +ByteBuffer CompileDXIL(const HLSLShaderInfo* info); diff --git a/JulietShaderCompiler/main.c b/JulietShaderCompiler/main.c new file mode 100644 index 0000000..808e2df --- /dev/null +++ b/JulietShaderCompiler/main.c @@ -0,0 +1,231 @@ +#include +#include +#include +#include +#include +#include +#include + +internal void PrintHelp(void) +{ + LogMessage(LogCategory_Tool, "Usage: JulietShaderCompiler.exe [options]"); + LogMessage(LogCategory_Tool, "Required Parameters:"); + const int kColumnWidth = 32; + LogMessage(LogCategory_Tool, " %-*s %s", kColumnWidth, "-o | --output ", "Output file."); +} + +int main(int argc, char* argv[]) +{ + int exitCode = 0; + String filename = { 0 }; + ByteBuffer fileData = { 0 }; + String outputFilename = { 0 }; + String entryPoint = WrapString("main"); + + bool8 sourceLangDetected = false; + SourceLanguage srcLanguage = SourceLanguage_Invalid; + bool8 dstShaderFormatDetected = false; + ShaderFormat dstShaderFormat = ShaderFormat_Invalid; + bool8 shaderStageDetected = false; + ShaderStage shaderStage = ShaderStage_Invalid; + + IOStream* outStream = NULL; + Arena* arena = ArenaAllocate((ArenaParams){ .Name = "ShaderCompilerArena" }); + + for (int idx = 1; idx < argc; ++idx) + { + String arg = WrapString(argv[idx]); + if (CStr(arg)[0] == '-') + { + if (StringCompareCaseInsensitive(arg, ConstString("-h")) == 0 || + StringCompareCaseInsensitive(arg, ConstString("--help")) == 0) + { + PrintHelp(); + exitCode = 1; + break; + } + + if (StringCompareCaseInsensitive(arg, ConstString("-o")) == 0 || + StringCompareCaseInsensitive(arg, ConstString("--output")) == 0) + { + if (idx + 1 >= argc) + { + LogError(LogCategory_Tool, "%s requires an argument", argv[idx]); + PrintHelp(); + exitCode = 1; + break; + } + idx += 1; + outputFilename = WrapString(argv[idx]); + } + } + else if (!IsValidString(filename)) + { + filename = arg; + } + else + { + LogError(LogCategory_Tool, "%s: Unknown parameter: %s", argv[0], CStr(arg)); + PrintHelp(); + exitCode = 1; + break; + } + } + + if (exitCode == 0) + { + if (!IsValidString(filename)) + { + LogError(LogCategory_Tool, "%s: missing input filename path", argv[0]); + PrintHelp(); + exitCode = 1; + } + else if (!IsValidString(outputFilename)) + { + LogError(LogCategory_Tool, "%s: missing output path", argv[0]); + PrintHelp(); + exitCode = 1; + } + } + + if (exitCode == 0) + { + fileData = LoadFile(arena, filename); + if (!IsValidByteBuffer(fileData)) + { + LogError(LogCategory_Tool, "Invalid file: %s", CStr(filename)); + exitCode = 1; + } + } + + if (exitCode == 0) + { + if (!sourceLangDetected) + { + if (IsValidString(FindString(filename, WrapString("hlsl")))) + { + srcLanguage = SourceLanguage_HLSL; + } + StaticAssert(SourceLanguage_Count == 1, SourceLanguageCountCheck); + } + + if (srcLanguage == SourceLanguage_Invalid) + { + LogError(LogCategory_Tool, + "%s: Invalid source language. Please either have a valid file extension or use -s/--src", argv[0]); + PrintHelp(); + exitCode = 1; + } + } + + if (exitCode == 0) + { + if (!dstShaderFormatDetected) + { + if (IsValidString(FindString(outputFilename, WrapString("dxil")))) + { + dstShaderFormat = ShaderFormat_DXIL; + } + StaticAssert(ShaderFormat_Count == 1, ShaderFormatCountCheck); + + if (dstShaderFormat == ShaderFormat_Invalid) + { + LogError(LogCategory_Tool, + "%s: Invalid shader format. Please either have a valid file extension or use -d/--dest", argv[0]); + PrintHelp(); + exitCode = 1; + } + } + } + + if (exitCode == 0) + { + if (!shaderStageDetected) + { + if (IsValidString(FindString(filename, WrapString("vert")))) + { + shaderStage = ShaderStage_Vertex; + } + else if (IsValidString(FindString(filename, WrapString("frag")))) + { + shaderStage = ShaderStage_Fragment; + } + else if (IsValidString(FindString(filename, WrapString("comp")))) + { + shaderStage = ShaderStage_Compute; + } + StaticAssert(ShaderFormat_Count == 1, ShaderStageFormatCountCheck); + + if (shaderStage == ShaderStage_Invalid) + { + LogError(LogCategory_Tool, "%s: Invalid shader stage. Please include it in the filename", argv[0]); + PrintHelp(); + exitCode = 1; + } + } + } + + if (exitCode == 0) + { + outStream = IOFromFile(arena, outputFilename, WrapString("wb")); + if (outStream == NULL) + { + LogError(LogCategory_Tool, "%s: Failed to open %s for writing", argv[0], CStr(outputFilename)); + exitCode = 1; + } + } + + if (exitCode == 0) + { + switch (srcLanguage) + { + case SourceLanguage_HLSL: + { + HLSLShaderInfo hlslInfo = { 0 }; + hlslInfo.ByteCodeBuffer = fileData; + hlslInfo.EntryPoint = entryPoint; + hlslInfo.Name = filename; + hlslInfo.Stage = shaderStage; + + switch (dstShaderFormat) + { + case ShaderFormat_DXIL: + { + ByteBuffer compiledBuffer = CompileDXIL(&hlslInfo); + if (!IsValidByteBuffer(compiledBuffer)) + { + LogError(LogCategory_Tool, "Failed to compile DXBC from HLSL. Error: %s", "Unknown"); + } + else + { + IOWrite(outStream, compiledBuffer); + FreeByteBuffer(&compiledBuffer); + } + break; + } + default: + { + Assert(false && "Shader format is invalid"); + exitCode = 1; + break; + } + } + break; + } + default: + { + Assert(false && "Source Language is invalid"); + exitCode = 1; + break; + } + } + } + + if (outStream != NULL) + { + IOClose(outStream); + } + ArenaRelease(arena); + + return exitCode; +} diff --git a/JulietShaderCompiler/main.cpp b/JulietShaderCompiler/main.cpp deleted file mode 100644 index 1f3049a..0000000 --- a/JulietShaderCompiler/main.cpp +++ /dev/null @@ -1,224 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include - - -void PrintHelp() -{ - LogMessage(LogCategory::Tool, "Usage: JulietShaderCompiler.exe [options]"); - LogMessage(LogCategory::Tool, "Required Parameters:"); - static constexpr int kColumnWdith = 32; - LogMessage(LogCategory::Tool, " %-*s %s", kColumnWdith, "-o | --output ", "Output file."); - // LogMessage(LogCategory::Tool, "\n"); - // LogMessage(LogCategory::Tool, "Required Parameters that can be inferred from filename:"); - // LogMessage(LogCategory::Tool, " %-*s %s", kColumnWdith, "-s | --src ", "Source Language. Values: [HLSL*] | * Default"); - // LogMessage(LogCategory::Tool, " %-*s %s", kColumnWdith, "-d | --dest ", "Destination Format. Values: [DXIL*] | * Default"); -} - -int main(int argc, char* argv[]) -{ - String filename = {}; - ByteBuffer fileData = {}; - - String outputFilename = {}; - - String entryPoint = WrapString("main"); - - bool sourceLangDetected = false; - auto srcLanguage = SourceLanguage::Invalid; - - bool dstShaderFormatDetected = false; - auto dstShaderFormat = ShaderFormat::Invalid; - - bool shaderStageDetected = false; - auto shaderStage = ShaderStage::Invalid; - - IOStream* outStream = nullptr; - - auto deferred = Defer( - [&]() - { - if (IsValid(fileData)) - { - Free(fileData); - } - if (outStream) - { - IOClose(outStream); - } - // Pause here to not close the console window immediately on stop while debugging - // __asm int 3; - }); - - for (int idx = 1; idx < argc; ++idx) - { - String arg = WrapString(argv[idx]); - if (CStr(arg)[0] == '-') - { - if (StringCompareCaseInsensitive(arg, ConstString("-h")) == 0 || - StringCompareCaseInsensitive(arg, ConstString("--help")) == 0) - { - PrintHelp(); - return 1; - } - - if (StringCompareCaseInsensitive(arg, ConstString("-o")) == 0 || - StringCompareCaseInsensitive(arg, ConstString("--output")) == 0) - { - if (idx + 1 >= argc) - { - LogError(LogCategory::Tool, "%s requires an argument", argv); - PrintHelp(); - return 1; - } - idx += 1; - outputFilename = WrapString(argv[idx]); - } - } - else if (IsValid(filename) == false) - { - filename = arg; - } - else - { - LogError(LogCategory::Tool, "%s: Unknown parameter: %s", argv[0], CStr(arg)); - PrintHelp(); - return 1; - } - } - - if (!IsValid(filename)) - { - LogError(LogCategory::Tool, "%s: missing input filename path", argv[0]); - PrintHelp(); - return 1; - } - if (!IsValid(outputFilename)) - { - LogError(LogCategory::Tool, "%s: missing output path", argv[0]); - PrintHelp(); - return 1; - } - - fileData = LoadFile(filename); - if (!IsValid(fileData)) - { - LogError(LogCategory::Tool, "Invalid file: %s", CStr(filename)); - return 1; - } - - // Find the source language from filename - { - if (!sourceLangDetected) - { - if (IsValid(FindString(filename, WrapString("hlsl")))) - { - srcLanguage = SourceLanguage::HLSL; - } - static_assert(ToUnderlying(SourceLanguage::Count) == 1, "SourceLanguage must be one of: HLSL"); - } - - if (srcLanguage == SourceLanguage::Invalid) - { - LogError(LogCategory::Tool, - "%s: Invalid source language. Please either have a valid file extension or use -s/--src", argv[0]); - PrintHelp(); - return 1; - } - } - - // Find the destination format from output file name - { - if (!dstShaderFormatDetected) - { - if (IsValid(FindString(outputFilename, WrapString("dxil")))) - { - dstShaderFormat = ShaderFormat::DXIL; - } - static_assert(ToUnderlying(ShaderFormat::Count) == 1, "ShaderFormat must be one of: DXIL"); - - if (dstShaderFormat == ShaderFormat::Invalid) - { - LogError(LogCategory::Tool, - "%s: Invalid shader format. Please either have a valid file extension or use -d/--dest", argv[0]); - PrintHelp(); - return 1; - } - } - } - - // Find shader stage from filename - { - if (!shaderStageDetected) - { - // TODO Need a case insensitive FindString - if (IsValid(FindString(filename, WrapString("vert")))) - { - shaderStage = ShaderStage::Vertex; - } - else if (IsValid(FindString(filename, WrapString("frag")))) - { - shaderStage = ShaderStage::Fragment; - } - else if (IsValid(FindString(filename, WrapString("comp")))) - { - shaderStage = ShaderStage::Compute; - } - static_assert(ToUnderlying(ShaderFormat::Count) == 1, "ShaderStage must be one of: vert, frag, comp"); - - if (shaderStage == ShaderStage::Invalid) - { - LogError(LogCategory::Tool, "%s: Invalid shader stage. Please include it in the filename", argv[0]); - PrintHelp(); - return 1; - } - } - } - - outStream = IOFromFile(outputFilename, WrapString("w")); - if (!outStream) - { - LogError(LogCategory::Tool, "%s: Failed to open %s for writing", argv[0], CStr(outputFilename)); - return 1; - } - - switch (srcLanguage) - { - case SourceLanguage::HLSL: - { - HLSLShaderInfo hlslInfo = {}; - hlslInfo.ByteCodeBuffer = fileData; - hlslInfo.EntryPoint = entryPoint; - hlslInfo.Name = filename; - hlslInfo.Stage = shaderStage; - - switch (dstShaderFormat) - { - case ShaderFormat::DXIL: - { - ByteBuffer compiledBuffer = CompileDXIL(hlslInfo); - if (!IsValid(compiledBuffer)) - { - LogError(LogCategory::Tool, "Failed to compile DXBC from HLSL. Error: %s", "Unknown"); - } - else - { - IOWrite(outStream, compiledBuffer); - Free(compiledBuffer); - } - break; - } - case ShaderFormat::Invalid: Assert(false , "Shader format is invalid"); return 1; - } - - break; - } - case SourceLanguage::Invalid: Assert(false , "Source Language is invalid"); return 1; - } - - return 0; -} diff --git a/Romeo/Romeo.vcxproj.filters b/Romeo/Romeo.vcxproj.filters deleted file mode 100644 index d41ebac..0000000 --- a/Romeo/Romeo.vcxproj.filters +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - src - - - src - - - src - - - src - - - src - - - src - - - src - - - src - - - src - - - src - - - src - - - diff --git a/Romeo/docs/Juliet_include_Core_Application_ApplicationManager.md b/Romeo/docs/Juliet_include_Core_Application_ApplicationManager.md deleted file mode 100644 index d4a5149..0000000 --- a/Romeo/docs/Juliet_include_Core_Application_ApplicationManager.md +++ /dev/null @@ -1,19 +0,0 @@ -# Juliet\include\Core\Application\ApplicationManager - -## Source Files -- Header: `Juliet\include\Core\Application\ApplicationManager.h` -- Source: `Juliet\src\Core\Application\ApplicationManager.cpp` - -## AI Description -The `ApplicationManager` class in the Juliet project is designed to manage the lifecycle of an application. It encapsulates the initialization, loading, running, unloading, and shutdown processes for a given application instance. The `StartApplication` function orchestrates these steps by calling various helper functions within the `Juliet` namespace, such as `InitializeEngine`, `LoadApplication`, `RunEngine`, `UnloadApplication`, and `ShutdownEngine`. This class provides a structured approach to managing the application's lifecycle, ensuring that all necessary resources are properly initialized, loaded, executed, and cleaned up. - -## Symbols - -### Namespace `Juliet` - -#### Enums -- `enum class JulietInit_Flags` - -#### Functions & Methods -- `extern JULIET_API void StartApplication(IApplication& app, JulietInit_Flags flags)` - diff --git a/Romeo/docs/Juliet_include_Core_Application_IApplication.md b/Romeo/docs/Juliet_include_Core_Application_IApplication.md deleted file mode 100644 index 24d41c1..0000000 --- a/Romeo/docs/Juliet_include_Core_Application_IApplication.md +++ /dev/null @@ -1,40 +0,0 @@ -# Juliet\include\Core\Application\IApplication - -## Source Files -- Header: `Juliet\include\Core\Application\IApplication.h` - -## AI Description -The `IApplication` class in the provided C++ component serves as a central interface for managing the lifecycle of an application. It encapsulates the core functionalities required to initialize, shutdown, and update the application state. The class provides methods for accessing engine systems such as the platform window and graphics device. - -Key features include: -- Initialization and shutdown methods (`Init` and `Shutdown`) that manage resources and clean up. -- Update method (`Update`) where game logic is executed. -- Accessors for engine systems like the platform window and graphics device. -- Render lifecycle methods (`OnPreRender`, `OnRender`, `GetColorTargetInfo`, `GetDepthTargetInfo`, and `GetDebugCamera`) that handle rendering tasks. - -This design ensures that all application components are managed efficiently, facilitating a smooth and organized development process. - -## Symbols - -### Namespace `Juliet` - -#### Classes, Structs & Unions -- `class IApplication` - -#### Functions & Methods -- `public: - virtual IApplication::~IApplication()` -- `virtual void IApplication::Init(NonNullPtr arena)` -- `virtual void IApplication::Shutdown()` -- `virtual void IApplication::Update()` -- `virtual bool IApplication::IsRunning()` -- `// Accessors for Engine Systems - virtual struct Window* IApplication::GetPlatformWindow()` -- `virtual struct GraphicsDevice* IApplication::GetGraphicsDevice()` -- `// Render Lifecycle (Engine-Managed Render Loop) - virtual void IApplication::OnPreRender(CommandList* cmd)` -- `virtual void IApplication::OnRender(RenderPass* pass, CommandList* cmd)` -- `virtual ColorTargetInfo IApplication::GetColorTargetInfo(Texture* swapchainTexture)` -- `virtual DepthStencilTargetInfo* IApplication::GetDepthTargetInfo()` -- `virtual struct Camera IApplication::GetDebugCamera()` - diff --git a/Romeo/docs/Juliet_include_Core_Common_CRC32.md b/Romeo/docs/Juliet_include_Core_Common_CRC32.md deleted file mode 100644 index 45693e2..0000000 --- a/Romeo/docs/Juliet_include_Core_Common_CRC32.md +++ /dev/null @@ -1,15 +0,0 @@ -# Juliet\include\Core\Common\CRC32 - -## Source Files -- Header: `Juliet\include\Core\Common\CRC32.h` - -## AI Description -The `CRC32.h` header file in the Juliet library provides a constant-time CRC-32 checksum calculation function. The `crc32` function takes a pointer to a string and its length as input and returns the corresponding CRC-32 checksum value. The `operator""_crc32` is a constexpr operator that allows for easy usage of the CRC-32 checksum in constant expressions, such as in template arguments or initialization lists. This makes it convenient to integrate CRC-32 checksums into various parts of the Juliet library without needing to manually calculate them. - -## Symbols - -### Namespace `Juliet` - -#### Functions & Methods -- `return anonymous::crc32(str, length)` - diff --git a/Romeo/docs/Juliet_include_Core_Common_CoreTypes.md b/Romeo/docs/Juliet_include_Core_Common_CoreTypes.md deleted file mode 100644 index 1248db4..0000000 --- a/Romeo/docs/Juliet_include_Core_Common_CoreTypes.md +++ /dev/null @@ -1,40 +0,0 @@ -# Juliet\include\Core\Common\CoreTypes - -## Source Files -- Header: `Juliet\include\Core\Common\CoreTypes.h` - -## AI Description -The `CoreTypes.h` header file in the Juliet project is designed to provide a unified set of fundamental data types and utilities for common operations such as byte manipulation, size calculations, and limits. The primary purpose of this component is to ensure consistency and ease of use across different parts of the application by providing clear and standardized definitions for basic data types like `uint8`, `int8`, `size_t`, etc. - -The header file includes several key components: - -1. **Data Types**: - - `Byte`: A byte type aliasing `std::byte` from the C++ Standard Library, which is a portable way to represent bytes. - - `uint8`, `uint16`, `uint32`, `uint64`: Aliases for unsigned 8-bit, 16-bit, 32-bit, and 64-bit integers, respectively. These types are used for representing data in various formats such as network packets or file sizes. - - `int8`, `int16`, `int32`, `int64`: Aliases for signed 8-bit, 16-bit, 32-bit, and 64-bit integers. These types are suitable for handling integer values in applications that require signed data. - -2. **Size and Index Types**: - - `size_t` and `index_t`: Aliasing `std::size_t` from the C++ Standard Library, which is a type used to represent the size of objects or collections. This type ensures that all sizes are handled consistently across different platforms. - - These types are used for indexing arrays, managing memory allocations, and other operations where size information is crucial. - -3. **ByteBuffer**: - - A struct `ByteBuffer` is defined to encapsulate a byte buffer along with its size. This structure is useful for handling binary data efficiently in applications that require dynamic memory management or serialization/deserialization of data. - -4. **Function Pointer Type**: - - A function pointer type `FunctionPtr` is defined using `auto (*)(void) -? void`. This type is used to represent pointers to functions that take no arguments and return void, which is commonly used for callbacks or event handlers in applications. - -5. **Limits Calculation Functions**: - - The `MaxValueOf?Type?` template function calculates the maximum value that can be represented by a given integer type using `std::numeric_limits`. This utility function simplifies the process of finding the upper limit of different data types, making it easier to handle and validate data within the application. - -6. **Size Conversion Macros**: - - The macros `Kilobytes` and `Megabytes` are defined to convert between kilobytes and megabytes. These macros provide a convenient way to perform size calculations without having to manually multiply by 1024 each time. - -The design of this header file is aimed at promoting consistency in data types across the project, ensuring that all parts of - -## Symbols - -### Global Scope - -#### Classes, Structs & Unions -- `struct ByteBuffer` - diff --git a/Romeo/docs/Juliet_include_Core_Common_CoreUtils.md b/Romeo/docs/Juliet_include_Core_Common_CoreUtils.md deleted file mode 100644 index 3c7e436..0000000 --- a/Romeo/docs/Juliet_include_Core_Common_CoreUtils.md +++ /dev/null @@ -1,55 +0,0 @@ -# Juliet\include\Core\Common\CoreUtils - -## Source Files -- Header: `Juliet\include\Core\Common\CoreUtils.h` -- Source: `Juliet\src\Core\Common\CoreUtils.cpp` - -## AI Description -This C++ component provides a collection of utility functions and macros designed to enhance the robustness, performance, and debugging capabilities of applications. The primary purpose is to simplify common tasks such as stringification, pragma handling, assertion checks, memory management, and more. - -The design includes several key features: - -1. **Stringify Helpers**: Macros like `JULIET_STR` and `JULIET_TOSTRING` are used to convert C++ literals into strings at compile time, which is particularly useful for logging and debugging purposes. - -2. **Pragma Operator**: The `JULIET_PRAGMA` macro allows for conditional compilation based on the compiler being used. This includes suppressing warnings and errors specific to MSVC and Clang compilers. - -3. **Agnostic "Push/Pop"**: The `JULIET_WARNING_PUSH` and `JULIET_WARNING_POP` macros are used to manage compiler warnings during macro expansion, ensuring that only the necessary warnings are suppressed. - -4. **Assert Macros**: The `Assert`, `AssertHR`, and `Unimplemented` macros provide a consistent way to assert conditions in the code. They include additional information such as the source location and handle result for better debugging. - -5. **Zeroing Functions**: The `ZeroStruct`, `ZeroArray`, and `ZeroDynArray` functions are used to zero out memory, ensuring that any uninitialized data is properly cleaned up. - -6. **Deferred Function Handling**: The `DeferredFunction` class allows for deferred execution of functions, which can be useful in scenarios where the function needs to be executed after a certain condition is met. - -7. **Alignment and Swap Functions**: The `AlignPow2`, `Swap`, and `AlignOf` macros provide utilities for aligning memory addresses and swapping values between variables. - -8. **Compiler Detection**: The `COMPILER_CLANG` and `COMPILER_MSVC` macros are used to detect the compiler being used, allowing for conditional compilation based on the specific compiler features available. - -9. **Memory Management**: The `Free` function ensures that a `ByteBuffer` is properly deallocated, freeing up memory resources. - -This component aims to provide a comprehensive set of tools for developers to enhance their code quality and performance, while maintaining a clean and maintainable structure. - -## Symbols - -### Namespace `Juliet` - -#### Classes, Structs & Unions -- `class DeferredFunction` -- `class Function` - -#### Functions & Methods -- `\ - while (0) - -#else -#define Assert(...) ((void)0) -#define AssertHR(hr_expression, message) ((void)(hr_expression)) -#define Unimplemented() ((void)0) -#endif - - JULIET_API extern void JulietAssert(const char* expression, const char* message, - std::source_location location = std::source_location::current(), long handleResult = 0)` -- `DeferredFunction::DeferredFunction(const DeferredFunction&)` -- `DeferredFunction::DeferredFunction(const DeferredFunction&&)` -- `extern JULIET_API void Free(ByteBuffer& buffer)` - diff --git a/Romeo/docs/Juliet_include_Core_Common_EnumUtils.md b/Romeo/docs/Juliet_include_Core_Common_EnumUtils.md deleted file mode 100644 index 4ef6ff0..0000000 --- a/Romeo/docs/Juliet_include_Core_Common_EnumUtils.md +++ /dev/null @@ -1,15 +0,0 @@ -# Juliet\include\Core\Common\EnumUtils - -## Source Files -- Header: `Juliet\include\Core\Common\EnumUtils.h` - -## AI Description -The `EnumUtils.h` header file in the Juliet project provides a collection of utility functions for working with enums in C++. The primary purpose is to provide a set of operators that allow for bitwise operations, arithmetic operations, and conversion between enum values and their underlying integer representations. This makes it easier to manipulate enum values programmatically without having to manually cast them between different types. - -The `IsEnum` concept checks if a type is an enum, ensuring that the template functions only operate on valid enum types. The provided operators include bitwise NOT (`~`), OR (`|`), AND (`?`), XOR (`^`), and subtraction (`-`). Additionally, there are overloaded assignment operators for each of these operations to allow chaining assignments. - -The `ToUnderlying` function converts an enum value to its underlying integer representation, while the `ToEnum` function converts an integer back to the corresponding enum value. These utility functions simplify common tasks related to enum manipulation in C++, making the code more readable and maintainable. - -## Symbols - -*No symbols detected.* diff --git a/Romeo/docs/Juliet_include_Core_Common_NonCopyable.md b/Romeo/docs/Juliet_include_Core_Common_NonCopyable.md deleted file mode 100644 index 7f779d8..0000000 --- a/Romeo/docs/Juliet_include_Core_Common_NonCopyable.md +++ /dev/null @@ -1,20 +0,0 @@ -# Juliet\include\Core\Common\NonCopyable - -## Source Files -- Header: `Juliet\include\Core\Common\NonCopyable.h` - -## AI Description -The `NonCopyable` class in the Juliet library is designed to prevent instances of a class from being copied. This is achieved by deleting the copy constructor and assignment operator, which are public members of the class. By doing so, we ensure that any attempt to create a copy of an instance of `NonCopyable` will result in a compilation error, thereby enforcing immutability or preventing unintended modifications to the object. This design pattern is particularly useful for classes that represent immutable data structures or objects where copying would lead to unexpected behavior. - -## Symbols - -### Namespace `Juliet` - -#### Classes, Structs & Unions -- `class NonCopyable` - -#### Functions & Methods -- `public: NonCopyable::NonCopyable()` -- `virtual NonCopyable::~NonCopyable()` -- `NonCopyable::NonCopyable(const NonCopyable&)` - diff --git a/Romeo/docs/Juliet_include_Core_Common_NonMovable.md b/Romeo/docs/Juliet_include_Core_Common_NonMovable.md deleted file mode 100644 index 533b553..0000000 --- a/Romeo/docs/Juliet_include_Core_Common_NonMovable.md +++ /dev/null @@ -1,20 +0,0 @@ -# Juliet\include\Core\Common\NonMovable - -## Source Files -- Header: `Juliet\include\Core\Common\NonMovable.h` - -## AI Description -The `NonMovable` class in the Juliet project is designed to prevent instances of this class from being copied or moved. This is achieved by using the C++11 move semantics and deleting the copy constructor and assignment operator. The class ensures that any attempt to create a copy or move of an instance will result in a compilation error, thereby enforcing immutability. This design is particularly useful for classes that represent immutable data structures or objects where copying or moving would lead to unintended side effects. - -## Symbols - -### Namespace `Juliet` - -#### Classes, Structs & Unions -- `class NonMovable` - -#### Functions & Methods -- `public: NonMovable::NonMovable()` -- `virtual NonMovable::~NonMovable()` -- `NonMovable::NonMovable(const NonMovable&&)` - diff --git a/Romeo/docs/Juliet_include_Core_Common_NonNullPtr.md b/Romeo/docs/Juliet_include_Core_Common_NonNullPtr.md deleted file mode 100644 index f0bed45..0000000 --- a/Romeo/docs/Juliet_include_Core_Common_NonNullPtr.md +++ /dev/null @@ -1,15 +0,0 @@ -# Juliet\include\Core\Common\NonNullPtr - -## Source Files -- Header: `Juliet\include\Core\Common\NonNullPtr.h` - -## AI Description -The `NonNullPtr` class in the provided C++ component is designed to ensure that a pointer passed to it is never null. It provides a safe way to handle pointers without having to explicitly check for null values, thus reducing potential runtime errors and improving code safety. The class template `NonNullPtr` includes constructors, assignment operators, accessors, and comparison methods to manage the internal pointer safely. Additionally, it prevents assigning a nullptr at compile time by using static assertions in its constructor and assignment operator. This ensures that the pointer is always valid before any operations are performed on it. - -## Symbols - -### Namespace `Juliet` - -#### Classes, Structs & Unions -- `class NonNullPtr` - diff --git a/Romeo/docs/Juliet_include_Core_Common_Singleton.md b/Romeo/docs/Juliet_include_Core_Common_Singleton.md deleted file mode 100644 index 9499c3f..0000000 --- a/Romeo/docs/Juliet_include_Core_Common_Singleton.md +++ /dev/null @@ -1,34 +0,0 @@ -# Juliet\include\Core\Common\Singleton - -## Source Files -- Header: `Juliet\include\Core\Common\Singleton.h` - -## AI Description -The `Singleton.h` header file defines a C++ class template named `Singleton` that provides a global instance of a type, ensuring that only one instance exists throughout the program. The class is designed to be used in two ways: - -1. **Inheritance**: By inheriting from `Singleton::AutoRegister`, you can automatically register your class with the singleton system when it is instantiated. - -2. **Static Methods**: You can use the static methods `Register` and `Unregister` to manually control the registration of your class instance. - -The `Singleton` class uses the `NonMovable` and `NonCopyable` classes from the `Core/Common` namespace to prevent instances from being copied or moved, ensuring that only one instance is created. The `AutoRegister` class is a helper class that automatically registers itself with the singleton system when it is instantiated. - -The `Register` method checks if an instance already exists and asserts that it does not, preventing multiple registrations. Similarly, the `Unregister` method checks if the instance being unregistered matches the currently registered instance and asserts that they match, preventing incorrect unregistrations. - -The `Get` method returns a pointer to the singleton instance, which can be used to access the singleton's methods and properties. The `AutoRegister` class ensures that the singleton instance is properly managed throughout the program, preventing memory leaks or other issues related to singleton usage. - -## Symbols - -### Namespace `Juliet` - -#### Classes, Structs & Unions -- `class Singleton` -- `class Singleton::AutoRegister` - -#### Functions & Methods -- `public: - static void Singleton::Register(NonNullPtr type)` -- `static void Singleton::Unregister(NonNullPtr type)` -- `static Type* Singleton::Get()` -- `public: Singleton::AutoRegister::AutoRegister()` -- `virtual Singleton::AutoRegister::~AutoRegister()` - diff --git a/Romeo/docs/Juliet_include_Core_Common_String.md b/Romeo/docs/Juliet_include_Core_Common_String.md deleted file mode 100644 index f5826d8..0000000 --- a/Romeo/docs/Juliet_include_Core_Common_String.md +++ /dev/null @@ -1,108 +0,0 @@ -# Juliet\include\Core\Common\String - -## Source Files -- Header: `Juliet\include\Core\Common\String.h` -- Source: `Juliet\src\Core\Common\String.cpp` - -## AI Description -The provided code snippet is a part of a library for string manipulation and encoding in C++. It includes functions to convert strings between different encodings, such as UTF-8, ASCII, Latin1, and others. The `ConvertString` function takes two strings (from and to) and converts the from string into the to string format. It supports various encodings including UTF-8, ASCII, Latin1, and others. - -Here's a breakdown of the key components: - -### Function Definitions - -1. **CaseFoldUnicode**: This function is used to fold Unicode characters according to a specific case folding rule. For simplicity, it only supports low ASCII characters (0-127). - - ```cpp - int CaseFoldUnicode(const char* str, uint32* folded); - ``` - -2. **ConvertString**: This function converts a string from one encoding to another. It first determines the source and destination encodings based on the provided strings. - - ```cpp - bool ConvertString(StringEncoding from, StringEncoding to, String src, StringBuffer? dst, bool nullTerminate); - ``` - -3. **ConvertString**: This is an overloaded version of `ConvertString` that takes a `String` object instead of a `const char*`. - - ```cpp - bool ConvertString(String from, String to, String src, StringBuffer? dst, bool nullTerminate); - ``` - -4. **StringCopy**: This function creates a new string in the provided arena with the same content as the input string. - - ```cpp - String StringCopy(NonNullPtr?Arena? arena, String str); - ``` - -### Helper Functions - -1. **StepUTF8**: This function is used to step through UTF-8 encoded characters. - - ```cpp - const char* StepUTF8(const char* str, size_t? remainingSize); - ``` - -2. **StringCompareCaseInsensitive**: This function compares two strings in a case-insensitive manner. - - ```cpp - int StringCompareCaseInsensitive(String str1, String str2); - ``` - -### Encodings - -The `Encodings` array contains information about different string encodings supported by the library: - -```cpp -const Encoding Encodings[] = { - { "UTF8", StringEncoding::UTF8 }, - { "Unknown", StringEncoding::Unknown }, - { "ASCII", StringEncoding::ASCII }, - { "LATIN1", StringEncoding::LATIN1 }, - { "UTF16", StringEncoding::UTF16 }, - { "UTF32", StringEncoding::UTF32 }, - { "UCS2", StringEncoding::UCS2 }, - { "UCS4", StringEncoding::UCS4 } -}; -``` - -### Usage Example - -Here's an example of how to use the `ConvertString` function: - -```cpp -NonNullPtr?Arena? arena = ArenaCreate(); -String str1 = "Hello, World!"; -String str2 - -## Symbols - -### Namespace `Juliet` - -#### Classes, Structs & Unions -- `struct String` -- `struct StringBuffer` -- `struct StringListNode` -- `struct StringList` - -#### Enums -- `enum class StringEncoding` - -#### Functions & Methods -- `\ MemSet(name##_, 0, sizeof(uint32))` -- `return anonymous::IsValid(FindChar(str, c))` -- `JULIET_API uint32 StepUTF8(String& inStr)` -- `JULIET_API String FindString(String strLeft, String strRight)` -- `// Case insensitive compare. Supports ASCII only - // TODO: Support UNICODE - extern JULIET_API int8 StringCompareCaseInsensitive(String str1, String str2)` -- `// Do not allocate anything, you must allocate your out buffer yourself - // TODO: Version taking arena that can allocate - // Do not take String type because we dont know the string encoding we are going from/to - // src and dst will be casted based on the encoding. - // size will correspond to the number of characters - // Will convert \0 character if present. - extern JULIET_API bool ConvertString(StringEncoding from, StringEncoding to, String src, StringBuffer& dst, bool nullTerminate)` -- `extern JULIET_API bool ConvertString(String from, String to, String src, StringBuffer& dst, bool nullTerminate)` -- `JULIET_API String StringCopy(NonNullPtr arena, String str)` - diff --git a/Romeo/docs/Juliet_include_Core_Container_Vector.md b/Romeo/docs/Juliet_include_Core_Container_Vector.md deleted file mode 100644 index 43c3222..0000000 --- a/Romeo/docs/Juliet_include_Core_Container_Vector.md +++ /dev/null @@ -1,62 +0,0 @@ -# Juliet\include\Core\Container\Vector - -## Source Files -- Header: `Juliet\include\Core\Container\Vector.h` -- Source: `Juliet\src\Core\Container\Vector.cpp` - -## AI Description -The `VectorArena` class in the Juliet library is designed to manage a dynamic array of elements within an arena, which is a memory pool that allocates contiguous blocks of memory. This approach helps in reducing fragmentation and improving performance by minimizing the overhead associated with allocating and deallocating individual memory blocks. - -**Main Purpose:** -- **Memory Management:** The `VectorArena` class provides a flexible way to manage arrays of elements without worrying about memory allocation and deallocation, which can be time-consuming and resource-intensive. -- **Efficiency:** By using an arena, the `VectorArena` minimizes the overhead associated with each memory allocation and deallocation, resulting in faster execution times. -- **Resource Efficiency:** The use of an arena helps in reducing the number of system calls made during memory management operations, which can lead to improved system performance. - -**Design:** -The `VectorArena` class is a template that allows for customization through template parameters such as `Type`, `ReserveSize`, and `AllowRealloc`. It includes methods for creating, destroying, resizing, pushing elements, removing elements, and accessing elements. The class also provides accessors for loop support and index-based access. - -**Key Features:** -- **Arena Management:** The `VectorArena` uses an arena to allocate memory blocks, which helps in reducing fragmentation. -- **Dynamic Resizing:** The `Reserve` method allows for dynamic resizing of the array, ensuring that it can handle varying amounts of data efficiently. -- **Fast Removal:** The `RemoveAtFast` method provides a fast way to remove elements from the array without shifting elements, which is particularly useful in scenarios where performance is critical. - -**Usage:** -To use the `VectorArena`, you can include the header file and create an instance of the class. For example: -```cpp -#include "Juliet/Core/Container/Vector.h" - -int main() -{ - Juliet::Vector?int? vec; - vec.Create(); - - for (int i = 0; i ? 10; ++i) - { - vec.PushBack(i); - } - - // Access elements using index-based access - int firstElement = vec[0]; - - // Remove an element from the array - vec.RemoveAtFast(2); - - return 0; -} -``` - -This example demonstrates how to create a `VectorArena`, push elements onto it, and remove an element. The use of the arena ensures that memory management is efficient and resource-friendly. - -## Symbols - -### Namespace `Juliet` - -#### Classes, Structs & Unions -- `struct VectorArena` - -### Namespace `Juliet::anonymous` - -#### Functions & Methods -- `Arena = VectorArena::ArenaAllocate(params JULIET_DEBUG_PARAM(Name))` -- `Arena = arena. VectorArena::Get()` - diff --git a/Romeo/docs/Juliet_include_Core_HAL_Display_Display.md b/Romeo/docs/Juliet_include_Core_HAL_Display_Display.md deleted file mode 100644 index 47c7b1a..0000000 --- a/Romeo/docs/Juliet_include_Core_HAL_Display_Display.md +++ /dev/null @@ -1,21 +0,0 @@ -# Juliet\include\Core\HAL\Display\Display - -## Source Files -- Header: `Juliet\include\Core\HAL\Display\Display.h` -- Source: `Juliet\src\Core\HAL\Display\Display.cpp` - -## AI Description -The `Display` component in this C++ code is designed to manage and interact with display devices on a platform. It provides functions for creating, destroying, showing, hiding, and managing windows on the display. The component uses an arena-based memory allocator to allocate and deallocate resources efficiently. The `DisplayDeviceFactory` pattern is used to create different types of display devices such as Win32-specific displays. The `InitializeDisplaySystem` function initializes the display system by creating a suitable display device, while the `ShutdownDisplaySystem` function cleans up all resources when the application exits. - -## Symbols - -### Namespace `Juliet` - -#### Functions & Methods -- `extern JULIET_API Window* CreatePlatformWindow(const char* title, uint16 width, uint16 height, int flags = 0 /* unused */)` -- `extern JULIET_API void DestroyPlatformWindow(NonNullPtr window)` -- `extern JULIET_API void ShowWindow(NonNullPtr window)` -- `extern JULIET_API void HideWindow(NonNullPtr window)` -- `extern JULIET_API WindowID GetWindowID(NonNullPtr window)` -- `extern JULIET_API void SetWindowTitle(NonNullPtr window, String title)` - diff --git a/Romeo/docs/Juliet_include_Core_HAL_DynLib_DynamicLibrary.md b/Romeo/docs/Juliet_include_Core_HAL_DynLib_DynamicLibrary.md deleted file mode 100644 index 8d984a7..0000000 --- a/Romeo/docs/Juliet_include_Core_HAL_DynLib_DynamicLibrary.md +++ /dev/null @@ -1,17 +0,0 @@ -# Juliet\include\Core\HAL\DynLib\DynamicLibrary - -## Source Files -- Header: `Juliet\include\Core\HAL\DynLib\DynamicLibrary.h` - -## AI Description -The `DynamicLibrary` class in the Juliet library is designed to provide a high-level interface for loading and managing dynamic libraries (DLLs) in C++. It encapsulates the functionality required to load a DLL, retrieve function pointers from it, and unload the DLL when it's no longer needed. The class uses non-null pointers to ensure that the DLL and its functions are properly managed throughout the application. This design allows for easy integration of various libraries into applications without having to manually manage the loading and unloading process. - -## Symbols - -### Namespace `Juliet` - -#### Functions & Methods -- `extern JULIET_API DynamicLibrary* LoadDynamicLibrary(const char* filename)` -- `extern JULIET_API FunctionPtr LoadFunction(NonNullPtr lib, const char* functionName)` -- `extern JULIET_API void UnloadDynamicLibrary(NonNullPtr lib)` - diff --git a/Romeo/docs/Juliet_include_Core_HAL_Event_SystemEvent.md b/Romeo/docs/Juliet_include_Core_HAL_Event_SystemEvent.md deleted file mode 100644 index 4396a6a..0000000 --- a/Romeo/docs/Juliet_include_Core_HAL_Event_SystemEvent.md +++ /dev/null @@ -1,63 +0,0 @@ -# Juliet\include\Core\HAL\Event\SystemEvent - -## Source Files -- Header: `Juliet\include\Core\HAL\Event\SystemEvent.h` -- Source: `Juliet\src\Core\HAL\Event\SystemEvent.cpp` - -## AI Description -The `SystemEvent` class in the Juliet library is designed to handle all events from systems responsible for hardware interactions, such as the display and keyboard/mouse. It provides a unified interface for retrieving and managing system events efficiently. - -### Main Purpose: -- **Unifies Event Handling**: The class consolidates various types of system events into a single `SystemEvent` structure, making it easier to manage and process all events in a consistent manner. -- **Efficient Event Queue Management**: The use of a queue allows for efficient retrieval and processing of events without blocking the main thread. This is particularly useful in real-time applications where timely event handling is crucial. - -### Design: -1. **Event Types**: - - `EventType`: A simple enumeration that defines different types of system events, such as application exit, window close request, key down/up, mouse move/button press/release. - - `WindowEvent`, `KeyboardEvent`, `MouseMovementEvent`, and `MouseButtonEvent`: Structs that encapsulate specific details about each type of event, including the associated window ID, keyboard/mouse ID, key state, button state, etc. - -2. **Union for All System Events**: - - `AllSystemEventUnion`: A tagged union that can hold any of the above event types along with additional data if needed. This ensures that all events are handled uniformly and efficiently. - - `Padding`: An array of bytes to make sure the union is fixed in size and big enough on all platforms. - -3. **Event Queue**: - - `eventQueue`: A static queue that stores system events. The queue is used to retrieve events from the main thread without blocking, allowing for efficient event handling in real-time applications. - - `PumpEvents()`: A helper function that updates all systems' event loops and gathers events into the main queue. - -4. **Event Retrieval Functions**: - - `GetEvent(SystemEvent? event)`: Retrieves an event from the queue if available, otherwise returns false. - - `WaitEvent(SystemEvent? event, int32 timeoutInNS = -1)`: Waits for an event to be available in the queue within a specified time period. If no event is available, it returns false. - -### Usage: -To use the `SystemEvent` class, you can simply include the header file and call the appropriate functions to retrieve or wait for events. This ensures that all system events are handled consistently and efficiently, making it easier to manage and respond to hardware interactions in your applications. - -## Symbols - -### Namespace `Juliet` - -#### Classes, Structs & Unions -- `struct WindowEvent` -- `struct KeyboardEvent` -- `struct MouseMovementEvent` -- `struct MouseButtonEvent` -- `union AllSystemEventUnion` -- `struct SystemEvent` - -#### Enums -- `enum class EventType` - -#### Functions & Methods -- `// Make sure we do not bust the union size static_assert(sizeof(AllSystemEventUnion) == sizeof(((AllSystemEventUnion*)nullptr)->Padding))` -- `// Poll for any event, return false if no event is available. - // Equivalent to WaitEvent(event, 0); - // Will not block - extern JULIET_API bool GetEvent(SystemEvent& event)` -- `// TODO : use chrono to tag the timeout correctly with nanosec - // timeout == -1 means wait for any event before pursuing - // timeout == 0 means checking once for the frame and getting out - // timeout > 0 means wait until time is out - extern JULIET_API bool WaitEvent(SystemEvent& event, int32 timeoutInNS = -1)` -- `// Add an event onto the event queue. - // TODO : support array of events - extern JULIET_API bool AddEvent(SystemEvent& event)` - diff --git a/Romeo/docs/Juliet_include_Core_HAL_Filesystem_Filesystem.md b/Romeo/docs/Juliet_include_Core_HAL_Filesystem_Filesystem.md deleted file mode 100644 index 2fc5cc9..0000000 --- a/Romeo/docs/Juliet_include_Core_HAL_Filesystem_Filesystem.md +++ /dev/null @@ -1,25 +0,0 @@ -# Juliet\include\Core\HAL\Filesystem\Filesystem - -## Source Files -- Header: `Juliet\include\Core\HAL\Filesystem\Filesystem.h` -- Source: `Juliet\src\Core\HAL\Filesystem\Filesystem.cpp` - -## AI Description -The `Filesystem` component in the Juliet library is designed to manage file paths and operations within a game engine. It provides functions to retrieve the base path of the application directory, the resolved base path for compiled shaders, and build full paths to asset files based on their filenames. The component also includes functionality to check if a given path is absolute and initializes the filesystem by probing candidate paths for the compiled shader directory. This ensures that the engine can locate necessary resources correctly during runtime. - -## Symbols - -### Namespace `Juliet` - -#### Functions & Methods -- `// Returns the path to the application directory - [[nodiscard]] extern JULIET_API String GetBasePath()` -- `// Returns the resolved base path to the compiled shaders directory. - // In dev, this resolves to ../../Assets/compiled/ relative to the exe. - // In shipping, this resolves to Assets/Shaders/ next to the exe. - [[nodiscard]] extern JULIET_API String GetAssetBasePath()` -- `// Builds a full path to an asset file given its filename (e.g. "Triangle.vert.dxil"). - // The caller owns the returned buffer and must free it. - [[nodiscard]] extern JULIET_API String GetAssetPath(String filename)` -- `[[nodiscard]]extern JULIET_API bool IsAbsolutePath(String path)` - diff --git a/Romeo/docs/Juliet_include_Core_HAL_IO_IOStream.md b/Romeo/docs/Juliet_include_Core_HAL_IO_IOStream.md deleted file mode 100644 index da2fed9..0000000 --- a/Romeo/docs/Juliet_include_Core_HAL_IO_IOStream.md +++ /dev/null @@ -1,46 +0,0 @@ -# Juliet\include\Core\HAL\IO\IOStream - -## Source Files -- Header: `Juliet\include\Core\HAL\IO\IOStream.h` -- Source: `Juliet\src\Core\HAL\IO\IOStream.cpp` - -## AI Description -The `IOStream` component in the Juliet library is designed to provide a unified interface for reading and writing data from various sources, such as files or memory buffers. It supports both file-based and memory-based operations, allowing developers to interact with different types of data sources in a consistent manner. - -The `IOStream` class encapsulates the functionality required to manage the stream's state, including its status (ready, error, end of file), position within the stream, and the ability to read from or write to the stream. It also provides methods for seeking within the stream and determining its size. - -The `IOFromFile` function allows developers to open a file by providing the filename and mode as parameters. The `IOFromInterface` function enables developers to use an existing interface to open any I/O stream, which can be particularly useful when integrating with external libraries or frameworks that provide custom I/O interfaces. - -The `IOPrintf`, `IOWrite`, `IORead`, `IOSeek`, and `IOSize` functions are used to perform various operations on the I/O stream. These functions handle file reading and writing, as well as seeking within the stream, and return the number of bytes read or written. - -The `LoadFile` function is a utility function that loads data from a file into a ByteBuffer. It uses the `IOFromFile` function to open the file and then reads its contents into a buffer. The `LoadFile` function also provides an option to close the stream after loading the data, which can be useful for freeing up resources. - -The `IOClose` function is used to close the I/O stream and free any associated resources. It ensures that the stream is properly closed before it is deleted, preventing memory leaks or other issues. - -## Symbols - -### Namespace `Juliet` - -#### Classes, Structs & Unions -- `struct IOStreamDataPayload` -- `struct IOStreamInterface` - -#### Enums -- `enum class IOStreamStatus` -- `enum class IOStreamSeekPivot` - -#### Functions & Methods -- `extern JULIET_API IOStream* IOFromFile(String filename, String mode)` -- `// Let you use an interface to open any io. Is used internally by IOFromFile - extern JULIET_API IOStream* IOFromInterface(NonNullPtr streamInterface, NonNullPtr payload)` -- `// Write formatted string into the stream. - extern JULIET_API size_t IOPrintf(NonNullPtr stream, _Printf_format_string_ const char* format, ...)` -- `extern JULIET_API size_t IOWrite(NonNullPtr stream, ByteBuffer inBuffer)` -- `extern JULIET_API size_t IORead(NonNullPtr stream, void* ptr, size_t size)` -- `extern JULIET_API int64 IOSeek(NonNullPtr stream, int64 offset, IOStreamSeekPivot pivot)` -- `extern JULIET_API int64 IOSize(NonNullPtr stream)` -- `// TODO : Use memory arena because that Allocates - extern JULIET_API ByteBuffer LoadFile(String filename)` -- `extern JULIET_API ByteBuffer LoadFile(NonNullPtr stream, bool closeStreamWhenDone)` -- `extern JULIET_API bool IOClose(NonNullPtr stream)` - diff --git a/Romeo/docs/Juliet_include_Core_HAL_Keyboard_KeyCode.md b/Romeo/docs/Juliet_include_Core_HAL_Keyboard_KeyCode.md deleted file mode 100644 index ae29a7e..0000000 --- a/Romeo/docs/Juliet_include_Core_HAL_Keyboard_KeyCode.md +++ /dev/null @@ -1,16 +0,0 @@ -# Juliet\include\Core\HAL\Keyboard\KeyCode - -## Source Files -- Header: `Juliet\include\Core\HAL\Keyboard\KeyCode.h` - -## AI Description -The `KeyCode` enum in the provided C++ header file represents a virtual key corresponding to a physical key, localized using the keyboard layout. It includes both ASCII and non-ASCII characters, with some keys mapped to specific scan codes for different keyboards (e.g., WASD keys on French keyboards). The `KeyMod` enum is used to represent modifier keys such as Shift, Control, Alt, and OSCommand, which can be combined using bitwise operations. This component is designed to facilitate input handling in applications that require keyboard input management. - -## Symbols - -### Namespace `Juliet` - -#### Enums -- `enum class KeyCode` -- `enum class KeyMod` - diff --git a/Romeo/docs/Juliet_include_Core_HAL_Keyboard_Keyboard.md b/Romeo/docs/Juliet_include_Core_HAL_Keyboard_Keyboard.md deleted file mode 100644 index 4f105c3..0000000 --- a/Romeo/docs/Juliet_include_Core_HAL_Keyboard_Keyboard.md +++ /dev/null @@ -1,27 +0,0 @@ -# Juliet\include\Core\HAL\Keyboard\Keyboard - -## Source Files -- Header: `Juliet\include\Core\HAL\Keyboard\Keyboard.h` - -## AI Description -The `Keyboard.h` header file in the Juliet project is designed to provide a robust interface for handling keyboard input. It includes the necessary headers and defines structures to represent keys on the keyboard, such as their scan codes, key codes, and raw values. - -The main purpose of this component is to facilitate easy access to keyboard state information within the Juliet framework. The `IsKeyDown` function allows developers to check if a specific key is currently pressed, while `GetKeyModState` provides the current state of modifier keys like Shift, Ctrl, and Alt. The `GetKeyCodeFromScanCode` function maps a scan code to its corresponding key code, which can be useful for applications that require precise control over keyboard input. - -This component is crucial for any application that needs to interact with the user's keyboard, such as text entry, gaming, or automation tasks. By providing a clear and efficient interface, it enables developers to focus on the core functionality of their application without worrying about low-level keyboard interactions. - -## Symbols - -### Namespace `Juliet` - -#### Classes, Structs & Unions -- `struct Key` - -#### Enums -- `enum class KeyState` - -#### Functions & Methods -- `extern JULIET_API bool IsKeyDown(ScanCode scanCode)` -- `extern JULIET_API KeyMod GetKeyModState()` -- `extern JULIET_API KeyCode GetKeyCodeFromScanCode(ScanCode scanCode, KeyMod keyModState)` - diff --git a/Romeo/docs/Juliet_include_Core_HAL_Keyboard_ScanCode.md b/Romeo/docs/Juliet_include_Core_HAL_Keyboard_ScanCode.md deleted file mode 100644 index d505544..0000000 --- a/Romeo/docs/Juliet_include_Core_HAL_Keyboard_ScanCode.md +++ /dev/null @@ -1,15 +0,0 @@ -# Juliet\include\Core\HAL\Keyboard\ScanCode - -## Source Files -- Header: `Juliet\include\Core\HAL\Keyboard\ScanCode.h` - -## AI Description -The `ScanCode` enum in the `Juliet::HAL::Keyboard` header file is designed to represent physical keys and buttons on a keyboard. It follows the HID Usage page for USB, which categorizes these codes into two main groups: Keyboard Usage Page (0x07) and Consumer Usage Page (0xC). The enum includes a range of predefined key codes, such as letters, numbers, special characters, arrow keys, and function keys. Additionally, it provides constants for power management and media controls. This enumeration is crucial for applications that need to interact with keyboards in a standardized way across different platforms. - -## Symbols - -### Namespace `Juliet` - -#### Enums -- `enum class ScanCode` - diff --git a/Romeo/docs/Juliet_include_Core_HAL_Mouse_Mouse.md b/Romeo/docs/Juliet_include_Core_HAL_Mouse_Mouse.md deleted file mode 100644 index a7651e9..0000000 --- a/Romeo/docs/Juliet_include_Core_HAL_Mouse_Mouse.md +++ /dev/null @@ -1,23 +0,0 @@ -# Juliet\include\Core\HAL\Mouse\Mouse - -## Source Files -- Header: `Juliet\include\Core\HAL\Mouse\Mouse.h` - -## AI Description -The `Mouse.h` header file in the Juliet project defines a C++ component for handling mouse input. It includes the necessary namespaces and enumerations to represent different mouse buttons and their states. The `MousePosition` struct is used to store the current position of the mouse cursor on the screen. The functions `IsMouseButtonDown`, `GetMousePosition`, and `GetMouseButtonState` are provided to interact with the mouse, allowing developers to check if a specific button is pressed or retrieve its current state. This component is essential for applications that require precise control over user input, such as games or interactive interfaces. - -## Symbols - -### Namespace `Juliet` - -#### Classes, Structs & Unions -- `struct MousePosition` - -#### Enums -- `enum class MouseButton` - -#### Functions & Methods -- `extern bool IsMouseButtonDown(MouseButton button)` -- `extern MousePosition GetMousePosition()` -- `extern MouseButton GetMouseButtonState()` - diff --git a/Romeo/docs/Juliet_include_Core_HAL_OS_OS.md b/Romeo/docs/Juliet_include_Core_HAL_OS_OS.md deleted file mode 100644 index c912377..0000000 --- a/Romeo/docs/Juliet_include_Core_HAL_OS_OS.md +++ /dev/null @@ -1,28 +0,0 @@ -# Juliet\include\Core\HAL\OS\OS - -## Source Files -- Header: `Juliet\include\Core\HAL\OS\OS.h` -- Source: `Juliet\src\Core\HAL\OS\OS.cpp` - -## AI Description -This C++ component provides a set of functions for managing memory in the Juliet framework. It includes functions to reserve, commit, and release memory, as well as a function to check if a debugger is present. The `OS` class encapsulates these functionalities within its own namespace, ensuring that they are isolated from other parts of the codebase. - -## Symbols - -### Namespace `Juliet::Memory` - -#### Functions & Methods -- `Byte* OS_Reserve(size_t size)` -- `bool OS_Commit(Byte* ptr, size_t size)` -- `void OS_Release(Byte* ptr, size_t size)` - -### Namespace `Juliet::Debug` - -#### Functions & Methods -- `JULIET_API bool IsDebuggerPresent()` - -### Namespace `Juliet` - -#### Functions & Methods -- `JULIET_API int Bootstrap(EntryPointFunc entryPointFunc, int argc, wchar_t** argv)` - diff --git a/Romeo/docs/Juliet_include_Core_HotReload_HotReload.md b/Romeo/docs/Juliet_include_Core_HotReload_HotReload.md deleted file mode 100644 index fdb8e5c..0000000 --- a/Romeo/docs/Juliet_include_Core_HotReload_HotReload.md +++ /dev/null @@ -1,30 +0,0 @@ -# Juliet\include\Core\HotReload\HotReload - -## Source Files -- Header: `Juliet\include\Core\HotReload\HotReload.h` -- Source: `Juliet\src\Core\HotReload\HotReload.cpp` - -## AI Description -The `HotReload` component in the Juliet library is designed to facilitate hot code reloading for applications. It provides a set of functions to initialize, shutdown, load, and unload code dynamically. The main purpose of this component is to allow developers to modify their application's code without having to restart the entire application, which can be time-consuming and disruptive. - -The `HotReloadCode` struct encapsulates all the necessary information for managing the hot reload process, including paths to the DLLs, lock files, and memory arenas. The `InitHotReloadCode` function initializes these paths based on the base path of the application and creates the required full paths. It also loads the code into an arena. - -The `ShutdownHotReloadCode` function releases all resources associated with the hot reload process, including the arena and any allocated memory. The `ReloadCode` function attempts to load the code again after a specified number of tries, ensuring that the application can continue running without interruption. - -This component is particularly useful for development environments where changes are frequent or when debugging issues in real-time. - -## Symbols - -### Namespace `Juliet` - -#### Classes, Structs & Unions -- `struct HotReloadCode` - -#### Functions & Methods -- `extern JULIET_API void InitHotReloadCode(HotReloadCode& code, String dllName, String transientDllName, String lockFilename)` -- `extern JULIET_API void ShutdownHotReloadCode(HotReloadCode& code)` -- `extern JULIET_API void LoadCode(HotReloadCode& code)` -- `extern JULIET_API void UnloadCode(HotReloadCode& code)` -- `extern JULIET_API void ReloadCode(HotReloadCode& code)` -- `extern JULIET_API bool ShouldReloadCode(const HotReloadCode& code)` - diff --git a/Romeo/docs/Juliet_include_Core_ImGui_ImGuiService.md b/Romeo/docs/Juliet_include_Core_ImGui_ImGuiService.md deleted file mode 100644 index f06f621..0000000 --- a/Romeo/docs/Juliet_include_Core_ImGui_ImGuiService.md +++ /dev/null @@ -1,54 +0,0 @@ -# Juliet\include\Core\ImGui\ImGuiService - -## Source Files -- Header: `Juliet\include\Core\ImGui\ImGuiService.h` -- Source: `Juliet\src\Core\ImGui\ImGuiService.cpp` - -## AI Description -The `ImGuIService` class in the Juliet project is designed to integrate and manage the functionality of the ImGui library within a game engine. This component provides a high-level interface for rendering user interfaces (UI) directly on the graphics device, allowing developers to create interactive applications with minimal overhead. - -### Main Purpose: -- **Integration**: The `ImGuIService` class facilitates the integration of ImGui into the Juliet project, enabling developers to use ImGui's UI components within their game logic. -- **Performance**: By using a dedicated Paged Arena for ImGui, the service ensures efficient memory management and reduces the overhead associated with creating and destroying ImGui elements. -- **Platform Compatibility**: The implementation supports Windows-specific features through the `Win32Window` class, ensuring compatibility across different platforms. - -### Design: -1. **Initialization**: - - Initializes the ImGui context using an Engine Pool for memory allocation. - - Sets up allocator functions to manage memory allocations and deallocations. - - Configures ImGui with keyboard controls enabled. - -2. **Shutdown**: - - Cleans up resources by shutting down ImGui, destroying the context, and releasing the arena. - -3. **New Frame**: - - Prepares the environment for a new frame by calling `ImGui_ImplWin32_NewFrame` and `ImGui::NewFrame`. - -4. **Render**: - - Renders the UI elements using `ImGui::Render`. - -5. **Initialization Check**: - - Checks if the service is initialized before performing any operations. - -6. **Context Access**: - - Provides a method to access the current ImGui context for advanced customization or debugging purposes. - -7. **Unit Tests**: - - Contains a function to run internal unit tests, ensuring the service functions as expected. - -This component is crucial for creating interactive user interfaces in games, enhancing the user experience by providing a flexible and powerful UI framework. - -## Symbols - -### Namespace `Juliet::ImGuiService` - -#### Functions & Methods -- `JULIET_API void Initialize(NonNullPtr window)` -- `JULIET_API void Shutdown()` -- `JULIET_API void NewFrame()` -- `JULIET_API void Render()` -- `JULIET_API bool IsInitialized()` -- `JULIET_API ImGuiContext* GetContext()` -- `// Run internal unit tests - JULIET_API void RunTests()` - diff --git a/Romeo/docs/Juliet_include_Core_ImGui_ImGuiTests.md b/Romeo/docs/Juliet_include_Core_ImGui_ImGuiTests.md deleted file mode 100644 index 2d00606..0000000 --- a/Romeo/docs/Juliet_include_Core_ImGui_ImGuiTests.md +++ /dev/null @@ -1,20 +0,0 @@ -# Juliet\include\Core\ImGui\ImGuiTests - -## Source Files -- Header: `Juliet\include\Core\ImGui\ImGuiTests.h` -- Source: `Juliet\src\Core\ImGui\ImGuiTests.cpp` - -## AI Description -The `ImGuiTests.h` header file defines a C++ class named `Juliet::UnitTest::TestImGui` that serves as a test suite for the ImGui library within the Juliet framework. The primary purpose of this component is to verify the correctness and functionality of the ImGui rendering engine, ensuring compatibility with the Juliet graphics system. - -The source file `ImGuiTests.cpp` contains the implementation of the `TestImGui` function, which performs several checks to validate the various aspects of the ImGui context, fonts, style, and drawing list functionalities. The test suite includes assertions to ensure that the ImGui context is properly set up, that the font atlas is built correctly, and that the ImGui rendering engine functions as expected. - -The tests cover essential components such as the backend platform name, version, fonts, style, and draw list access. By running this test suite, developers can confirm that the ImGui library is integrated seamlessly with the Juliet framework and meets the required standards for rendering graphics in a user interface. - -## Symbols - -### Namespace `Juliet::UnitTest` - -#### Functions & Methods -- `void TestImGui()` - diff --git a/Romeo/docs/Juliet_include_Core_JulietInit.md b/Romeo/docs/Juliet_include_Core_JulietInit.md deleted file mode 100644 index b6a6f4a..0000000 --- a/Romeo/docs/Juliet_include_Core_JulietInit.md +++ /dev/null @@ -1,22 +0,0 @@ -# Juliet\include\Core\JulietInit - -## Source Files -- Header: `Juliet\include\Core\JulietInit.h` - -## AI Description -This C++ component, `JulietInit`, is designed to initialize the core functionalities of a game engine. It includes settings for enabling various subsystems such as display and audio, along with an enumeration to manage different initialization flags. The `GameInitParams` structure holds pointers to arenas used by the game engine, which are essential for managing memory allocations during runtime. The `JulietInit` function initializes these subsystems based on the provided flags, while `JulietShutdown` is responsible for cleaning up resources when the game engine is shut down. - -## Symbols - -### Namespace `Juliet` - -#### Classes, Structs & Unions -- `struct GameInitParams` - -#### Enums -- `enum class JulietInit_Flags` - -#### Functions & Methods -- `void JulietInit(JulietInit_Flags flags)` -- `void JulietShutdown()` - diff --git a/Romeo/docs/Juliet_include_Core_Logging_LogManager.md b/Romeo/docs/Juliet_include_Core_Logging_LogManager.md deleted file mode 100644 index 50c367c..0000000 --- a/Romeo/docs/Juliet_include_Core_Logging_LogManager.md +++ /dev/null @@ -1,29 +0,0 @@ -# Juliet\include\Core\Logging\LogManager - -## Source Files -- Header: `Juliet\include\Core\Logging\LogManager.h` -- Source: `Juliet\src\Core\Logging\LogManager.cpp` - -## AI Description -The `LogManager` component in the Juliet library is designed to manage and output log messages. It provides a flexible framework for logging at different levels (Debug, Message, Warning, Error) with categories to categorize logs based on their importance. The component uses an arena-based memory management system to efficiently allocate and deallocate memory for log entries. Logs are accumulated in scopes until the scope is ended, which then writes them to a file or other output destination. The `LogManager` also includes functions to initialize and shutdown the logging system, as well as to log messages with specific levels and categories. - -## Symbols - -### Namespace `Juliet` - -#### Enums -- `enum class LogLevel` -- `enum class LogCategory` - -#### Functions & Methods -- `extern void JULIET_API InitializeLogManager()` -- `extern void JULIET_API ShutdownLogManager()` -- `extern void JULIET_API LogScopeBegin()` -- `// TODO everything that happened in there to export them to file or something - extern void JULIET_API LogScopeEnd()` -- `extern void JULIET_API Log(LogLevel level, LogCategory category, const char* fmt, ...)` -- `extern void JULIET_API LogDebug(LogCategory category, const char* fmt, ...)` -- `extern void JULIET_API LogMessage(LogCategory category, const char* fmt, ...)` -- `extern void JULIET_API LogWarning(LogCategory category, const char* fmt, ...)` -- `extern void JULIET_API LogError(LogCategory category, const char* fmt, ...)` - diff --git a/Romeo/docs/Juliet_include_Core_Logging_LogTypes.md b/Romeo/docs/Juliet_include_Core_Logging_LogTypes.md deleted file mode 100644 index b31f025..0000000 --- a/Romeo/docs/Juliet_include_Core_Logging_LogTypes.md +++ /dev/null @@ -1,16 +0,0 @@ -# Juliet\include\Core\Logging\LogTypes - -## Source Files -- Header: `Juliet\include\Core\Logging\LogTypes.h` - -## AI Description -This C++ component defines two enumerations, `LogLevel` and `LogCategory`, which are used to categorize log messages in a game development context. The `LogLevel` enum represents different severity levels of logs (Debug, Message, Warning, Error), while the `LogCategory` enum specifies the type of log message (Core, Graphics, Networking, Engine, Tool, Game). This design allows for flexible logging that can be easily adjusted based on the needs of different parts of a game. - -## Symbols - -### Namespace `Juliet` - -#### Enums -- `enum class LogLevel` -- `enum class LogCategory` - diff --git a/Romeo/docs/Juliet_include_Core_Main.md b/Romeo/docs/Juliet_include_Core_Main.md deleted file mode 100644 index 8c183a1..0000000 --- a/Romeo/docs/Juliet_include_Core_Main.md +++ /dev/null @@ -1,19 +0,0 @@ -# Juliet\include\Core\Main - -## Source Files -- Header: `Juliet\include\Core\Main.h` - -## AI Description -This C++ component provides a unified entry point for the application, handling both Windows and non-Windows platforms. It includes a `JulietMain` function that serves as the entry point for the application, which is called by the operating system. The main function is designed to be compatible with both Unicode and ANSI environments, using `wmain` on Windows and `main` on Unix-like systems. The component also provides a C-style interface through the `extern "C"` block, allowing other libraries or applications to call the `JulietMain` function directly. - -## Symbols - -### Global Scope - -#### Functions & Methods -- `#pragma once - -#include - -extern int JulietMain(int, wchar_t**)` - diff --git a/Romeo/docs/Juliet_include_Core_Math_MathUtils.md b/Romeo/docs/Juliet_include_Core_Math_MathUtils.md deleted file mode 100644 index 434227d..0000000 --- a/Romeo/docs/Juliet_include_Core_Math_MathUtils.md +++ /dev/null @@ -1,15 +0,0 @@ -# Juliet\include\Core\Math\MathUtils - -## Source Files -- Header: `Juliet\include\Core\Math\MathUtils.h` - -## AI Description -The `MathUtils.h` header file in the Juliet project is designed to provide a collection of utility functions for mathematical operations. It includes functions such as rounding, clamping, and finding the minimum and maximum values among two numbers. These utilities are essential for various computational tasks within the Juliet framework, ensuring that numerical computations are handled correctly and efficiently. The `MathUtils` class encapsulates these functionalities in a namespace to maintain code organization and avoid naming conflicts with other parts of the project. - -## Symbols - -### Namespace `Juliet` - -#### Functions & Methods -- `extern JULIET_API float RoundF(float value)` - diff --git a/Romeo/docs/Juliet_include_Core_Math_Matrix.md b/Romeo/docs/Juliet_include_Core_Math_Matrix.md deleted file mode 100644 index 311015d..0000000 --- a/Romeo/docs/Juliet_include_Core_Math_Matrix.md +++ /dev/null @@ -1,15 +0,0 @@ -# Juliet\include\Core\Math\Matrix - -## Source Files -- Header: `Juliet\include\Core\Math\Matrix.h` - -## AI Description -The `Matrix` class in the provided C++ component is designed to represent a 4x4 matrix, which is fundamental for various mathematical operations such as transformations in computer graphics and physics simulations. The class includes methods to create identity matrices, perform matrix multiplication, handle translations, scaling, rotations, and look-at transformations. It also provides an inverse method to compute the multiplicative inverse of a given matrix. This component is essential for handling transformations in 3D space, enabling applications such as game development, physics simulations, and computer graphics rendering. - -## Symbols - -### Namespace `Juliet` - -#### Classes, Structs & Unions -- `struct Matrix` - diff --git a/Romeo/docs/Juliet_include_Core_Math_Shape.md b/Romeo/docs/Juliet_include_Core_Math_Shape.md deleted file mode 100644 index 92145e8..0000000 --- a/Romeo/docs/Juliet_include_Core_Math_Shape.md +++ /dev/null @@ -1,15 +0,0 @@ -# Juliet\include\Core\Math\Shape - -## Source Files -- Header: `Juliet\include\Core\Math\Shape.h` - -## AI Description -The `Rectangle` structure in the `Juliet::Math` namespace is designed to encapsulate a geometric rectangle with properties such as its top-left corner coordinates (`X`, `Y`) and dimensions (`Width`, `Height`). This structure provides a clear and organized way to represent rectangles, facilitating operations like area calculation, position manipulation, and collision detection within a game or application. - -## Symbols - -### Namespace `Juliet` - -#### Classes, Structs & Unions -- `struct Rectangle` - diff --git a/Romeo/docs/Juliet_include_Core_Math_Vector.md b/Romeo/docs/Juliet_include_Core_Math_Vector.md deleted file mode 100644 index 2fcaba5..0000000 --- a/Romeo/docs/Juliet_include_Core_Math_Vector.md +++ /dev/null @@ -1,16 +0,0 @@ -# Juliet\include\Core\Math\Vector - -## Source Files -- Header: `Juliet\include\Core\Math\Vector.h` - -## AI Description -The `Vector.h` header file in the Juliet project defines two classes, `Vector3` and `Vector4`, which are used to represent 3D and 4D vectors respectively. These classes provide basic arithmetic operations such as addition, subtraction, scalar multiplication, normalization, cross product, and dot product. The `Normalize` function calculates the magnitude of a vector and returns a normalized version of it if the magnitude is greater than a small threshold (0.0001f). This utility function simplifies vector manipulation in 3D graphics and physics simulations. - -## Symbols - -### Namespace `Juliet` - -#### Classes, Structs & Unions -- `struct Vector3` -- `struct Vector4` - diff --git a/Romeo/docs/Juliet_include_Core_Memory_Allocator.md b/Romeo/docs/Juliet_include_Core_Memory_Allocator.md deleted file mode 100644 index 8178390..0000000 --- a/Romeo/docs/Juliet_include_Core_Memory_Allocator.md +++ /dev/null @@ -1,20 +0,0 @@ -# Juliet\include\Core\Memory\Allocator - -## Source Files -- Header: `Juliet\include\Core\Memory\Allocator.h` -- Source: `Juliet\src\Core\Memory\Allocator.cpp` - -## AI Description -This C++ component provides a set of functions for managing dynamic memory allocation and deallocation in the Juliet framework. The primary purpose is to ensure that memory is allocated correctly and safely, handling edge cases such as zero-sized allocations. The `Malloc` function allocates uninitialized memory, while `Calloc` initializes it to zero. The `Realloc` function allows resizing existing memory blocks. The component includes a template version of the `Free` function to handle different types of pointers, ensuring that the pointer is set to `nullptr` after deallocation. - -## Symbols - -### Namespace `Juliet` - -#### Functions & Methods -- `// Uninitialized allocation - JULIET_API void* Malloc(size_t elem_size)` -- `// Initialized to 0 allocation - JULIET_API void* Calloc(size_t nb_elem, size_t elem_size)` -- `JULIET_API void* Realloc(void* memory, size_t newSize)` - diff --git a/Romeo/docs/Juliet_include_Core_Memory_MemoryArena.md b/Romeo/docs/Juliet_include_Core_Memory_MemoryArena.md deleted file mode 100644 index 15976e7..0000000 --- a/Romeo/docs/Juliet_include_Core_Memory_MemoryArena.md +++ /dev/null @@ -1,37 +0,0 @@ -# Juliet\include\Core\Memory\MemoryArena - -## Source Files -- Header: `Juliet\include\Core\Memory\MemoryArena.h` -- Source: `Juliet\src\Core\Memory\MemoryArena.cpp` - -## AI Description -This C++ component is designed to manage memory allocations and deallocations in a high-performance manner. It provides an efficient way to allocate, reallocate, and free memory blocks within a single arena, which can be particularly useful for optimizing memory usage in applications that require frequent memory management. The component includes features such as automatic memory allocation, reallocation, and deallocation, as well as support for debugging information to help identify memory leaks or other issues. - -## Symbols - -### Namespace `Juliet` - -#### Classes, Structs & Unions -- `struct Arena` -- `struct TempArena` -- `struct ArenaParams` - -#### Functions & Methods -- `constexpr global uint64 g_Arena_Default_Reserve_Size = Megabytes(64)` -- `constexpr global uint64 g_Arena_Default_Commit_Size = Kilobytes(64)` -- `[[nodiscard]] JULIET_API Arena* ArenaAllocate(const ArenaParams& params JULIET_DEBUG_ONLY(, const char* name), - const std::source_location& loc = std::source_location::current())` -- `JULIET_API void ArenaRelease(NonNullPtr arena)` -- `// Raw Push, can be used but templated helpers exists below - // Raw Push, can be used but templated helpers exists below - [[nodiscard]] JULIET_API void* ArenaPush(NonNullPtr arena, size_t size, size_t align, - bool shouldBeZeroed JULIET_DEBUG_ONLY(, const char* tag))` -- `[[nodiscard]] JULIET_API void* ArenaReallocate(NonNullPtr arena, void* oldPtr, size_t oldSize, size_t newSize, - size_t align, bool shouldBeZeroed JULIET_DEBUG_ONLY(, const char* tag))` -- `JULIET_API void ArenaPopTo(NonNullPtr arena, size_t position)` -- `JULIET_API void ArenaPop(NonNullPtr arena, size_t amount)` -- `JULIET_API void ArenaClear(NonNullPtr arena)` -- `[[nodiscard]] JULIET_API size_t ArenaPos(NonNullPtr arena)` -- `TempArena ArenaTempBegin(NonNullPtr arena)` -- `void ArenaTempEnd(TempArena temp)` - diff --git a/Romeo/docs/Juliet_include_Core_Memory_MemoryArenaDebug.md b/Romeo/docs/Juliet_include_Core_Memory_MemoryArenaDebug.md deleted file mode 100644 index c4f770d..0000000 --- a/Romeo/docs/Juliet_include_Core_Memory_MemoryArenaDebug.md +++ /dev/null @@ -1,38 +0,0 @@ -# Juliet\include\Core\Memory\MemoryArenaDebug - -## Source Files -- Header: `Juliet\include\Core\Memory\MemoryArenaDebug.h` -- Source: `Juliet\src\Core\Memory\MemoryArenaDebug.cpp` - -## AI Description -The `MemoryArenaDebug.h` header file provides a debug mechanism for managing memory allocations within an arena, allowing developers to track and manage the allocation history of memory blocks. The `MemoryArenaDebug.cpp` source file implements these functionalities, including registering and unregistering arenas, setting debug names, freeing debug information from blocks, removing allocations, popping allocations to a new position, and adding debug information for each allocation. - -The `ArenaDebugInfo` struct is used to store detailed information about each memory block, such as the tag associated with it, its size, offset within the arena, and pointers to the next debug information entry. The `ArenaAllocation` struct represents individual allocations within an arena, including their size, offset, and a reference to the tag. - -The `DebugRegisterArena`, `DebugUnregisterArena`, `DebugArenaSetDebugName`, `IsDebugInfoArena`, `DebugArenaFreeBlock`, `DebugArenaRemoveAllocation`, `DebugArenaPopTo`, and `DebugArenaAddDebugInfo` functions handle various aspects of arena management, ensuring that debug information is correctly tracked and managed throughout the application. - -## Symbols - -### Namespace `Juliet` - -#### Classes, Structs & Unions -- `struct ArenaDebugInfo` -- `struct ArenaAllocation` - -#### Functions & Methods -- `// Arena (Struct) - void DebugRegisterArena(NonNullPtr arena)` -- `void DebugUnregisterArena(NonNullPtr arena)` -- `void DebugArenaSetDebugName(NonNullPtr arena, const char* name)` -- `bool IsDebugInfoArena(const Arena* arena)` -- `// To prevent recursion - void DebugArenaFreeBlock(Arena* block)` -- `// To clear all debug infos in a block - void DebugArenaRemoveAllocation(Arena* block, size_t oldOffset)` -- `void DebugArenaPopTo(Arena* block, size_t newPosition)` -- `void DebugArenaAddDebugInfo(Arena* block, size_t size, size_t offset, const char* tag)` -- `// MemoryArena (Pool-based) - void DebugFreeArenaAllocations(MemoryBlock* blk)` -- `void DebugArenaAddAllocation(MemoryBlock* blk, size_t size, size_t offset, String tag)` -- `void DebugArenaRemoveLastAllocation(MemoryBlock* blk)` - diff --git a/Romeo/docs/Juliet_include_Core_Memory_ScratchArena.md b/Romeo/docs/Juliet_include_Core_Memory_ScratchArena.md deleted file mode 100644 index 6575ade..0000000 --- a/Romeo/docs/Juliet_include_Core_Memory_ScratchArena.md +++ /dev/null @@ -1,12 +0,0 @@ -# Juliet\include\Core\Memory\ScratchArena - -## Source Files -- Header: `Juliet\include\Core\Memory\ScratchArena.h` -- Source: `Juliet\src\Core\Memory\ScratchArena.cpp` - -## AI Description -*File is empty.* - -## Symbols - -*No symbols detected.* diff --git a/Romeo/docs/Juliet_include_Core_Memory_Utils.md b/Romeo/docs/Juliet_include_Core_Memory_Utils.md deleted file mode 100644 index c06301b..0000000 --- a/Romeo/docs/Juliet_include_Core_Memory_Utils.md +++ /dev/null @@ -1,17 +0,0 @@ -# Juliet\include\Core\Memory\Utils - -## Source Files -- Header: `Juliet\include\Core\Memory\Utils.h` - -## AI Description -The `Utils.h` header file in the Juliet project is designed to provide utility functions and data structures for memory management. It includes functions such as `MemCompare`, which compares two blocks of memory, and a single linked list implementation with push and pop operations. Additionally, it defines a template-based queue structure that can be used to manage a collection of elements. The source file contains implementations for these functions and the queue structure, along with macros for setting up queues and pushing nodes into them. - -## Symbols - -### Namespace `Juliet` - -#### Classes, Structs & Unions -- `struct SingleLinkedListNode` -- `struct QueueNode` -- `struct type` - diff --git a/Romeo/docs/Juliet_include_Core_Networking_IPAddress.md b/Romeo/docs/Juliet_include_Core_Networking_IPAddress.md deleted file mode 100644 index 3c19d17..0000000 --- a/Romeo/docs/Juliet_include_Core_Networking_IPAddress.md +++ /dev/null @@ -1,11 +0,0 @@ -# Juliet\include\Core\Networking\IPAddress - -## Source Files -- Header: `Juliet\include\Core\Networking\IPAddress.h` - -## AI Description -The `IPAddress.h` header file in the Juliet project is designed to provide a simple and efficient way to handle IP addresses in C++. It includes constants for common IP addresses such as localhost, any IP address, and broadcast IP address. The class encapsulates these values using a 32-bit unsigned integer, which allows for easy manipulation and comparison of IP addresses. The use of constexpr ensures that the values are defined at compile time, making them suitable for use in constant expressions and template parameters. - -## Symbols - -*No symbols detected.* diff --git a/Romeo/docs/Juliet_include_Core_Networking_NetworkPacket.md b/Romeo/docs/Juliet_include_Core_Networking_NetworkPacket.md deleted file mode 100644 index b72cb1f..0000000 --- a/Romeo/docs/Juliet_include_Core_Networking_NetworkPacket.md +++ /dev/null @@ -1,26 +0,0 @@ -# Juliet\include\Core\Networking\NetworkPacket - -## Source Files -- Header: `Juliet\include\Core\Networking\NetworkPacket.h` -- Source: `Juliet\src\Core\Networking\NetworkPacket.cpp` - -## AI Description -The `NetworkPacket` class in the Juliet library is designed to handle network data packets efficiently. It uses a `Vector?Byte?` to store the raw bytes of the packet, which allows for dynamic resizing and efficient memory management. The class provides methods to serialize and deserialize various types of data into the packet, such as integers and strings. The `GetRawData` method returns the entire packet as a `ByteBuffer`, which can be used for transmission over a network or saved to a file. The class also includes friend functions for easy serialization and deserialization of specific data types. - -## Symbols - -### Namespace `Juliet` - -#### Classes, Structs & Unions -- `class Vector` -- `class NetworkPacket` - -#### Functions & Methods -- `public: NetworkPacket::NetworkPacket()` -- `virtual NetworkPacket::~NetworkPacket()` -- `NetworkPacket::NetworkPacket(NetworkPacket&)` -- `NetworkPacket::NetworkPacket(NetworkPacket&&)` -- `ByteBuffer NetworkPacket::GetRawData()` -- `protected: - void NetworkPacket::Append(ByteBuffer buffer)` - diff --git a/Romeo/docs/Juliet_include_Core_Networking_Socket.md b/Romeo/docs/Juliet_include_Core_Networking_Socket.md deleted file mode 100644 index 9e84dcd..0000000 --- a/Romeo/docs/Juliet_include_Core_Networking_Socket.md +++ /dev/null @@ -1,31 +0,0 @@ -# Juliet\include\Core\Networking\Socket - -## Source Files -- Header: `Juliet\include\Core\Networking\Socket.h` -- Source: `Juliet\src\Core\Networking\Socket.cpp` - -## AI Description -The `Socket` class in the Juliet project is designed to manage network connections, providing a high-level interface for sending and receiving data over TCP or UDP protocols. It encapsulates socket operations such as creation, handling of socket errors, and managing the underlying socket handle. The class ensures that sockets are properly closed when they are no longer needed, preventing resource leaks. - -## Symbols - -### Namespace `Juliet` - -#### Classes, Structs & Unions -- `class Socket` -- `struct Socket::RequestStatus` - -#### Enums -- `enum class Socket::Status` -- `enum class Socket::Protocol` - -#### Functions & Methods -- `public: Socket::~Socket()` -- `Socket::Socket(Socket&& other)` -- `Socket::Socket(const Socket&)` -- `bool Socket::IsValid() const` -- `explicit Socket::Socket(Protocol protocol)` -- `void Socket::Create()` -- `void Socket::CreateFromHandle(SocketHandle handle)` -- `void Socket::Close()` - diff --git a/Romeo/docs/Juliet_include_Core_Networking_SocketHandle.md b/Romeo/docs/Juliet_include_Core_Networking_SocketHandle.md deleted file mode 100644 index 057a027..0000000 --- a/Romeo/docs/Juliet_include_Core_Networking_SocketHandle.md +++ /dev/null @@ -1,17 +0,0 @@ -# Juliet\include\Core\Networking\SocketHandle - -## Source Files -- Header: `Juliet\include\Core\Networking\SocketHandle.h` - -## AI Description -The `SocketHandle` class in the Juliet library is designed to represent a handle for network sockets. It encapsulates the underlying socket descriptor, which is used by the operating system to manage network connections. The class provides a unified interface for interacting with different types of sockets across various platforms, ensuring compatibility and abstraction. - -The design decision to use `UINT_PTR` on Windows and `int` on non-Windows systems allows for flexibility in handling different sizes of socket descriptors, which can be crucial depending on the specific requirements of the application. This approach ensures that the class is portable and can be used across different operating systems without significant modifications. - -The class provides methods for creating sockets, connecting to remote servers, sending and receiving data over the network, and managing socket events. It also includes error handling mechanisms to manage potential issues such as connection failures or network errors. - -Overall, the `SocketHandle` class serves as a robust foundation for network programming in Juliet, providing a clean and efficient interface for interacting with sockets across different platforms. - -## Symbols - -*No symbols detected.* diff --git a/Romeo/docs/Juliet_include_Core_Networking_TcpListener.md b/Romeo/docs/Juliet_include_Core_Networking_TcpListener.md deleted file mode 100644 index 6f3c3a5..0000000 --- a/Romeo/docs/Juliet_include_Core_Networking_TcpListener.md +++ /dev/null @@ -1,27 +0,0 @@ -# Juliet\include\Core\Networking\TcpListener - -## Source Files -- Header: `Juliet\include\Core\Networking\TcpListener.h` -- Source: `Juliet\src\Core\Networking\TcpListener.cpp` - -## AI Description -The `TcpListener` class in the Juliet library is designed to facilitate TCP server functionality. It encapsulates the necessary components for creating, listening on, and accepting connections over a network. The class inherits from the `Socket` class, which provides common socket functionalities such as creation, binding, listening, and closing sockets. - -The main purpose of this component is to allow developers to easily set up and manage TCP servers in their applications. It supports both IPv4 and IPv6 addresses, allowing for flexibility in network communication. The `Listen` method allows the server to start accepting connections on a specified port and address, while the `Accept` method is used to accept incoming connections and create new `TcpSocket` instances for handling each connection. - -The class also includes error handling mechanisms through logging, which provides feedback on any issues that occur during socket operations. This ensures that developers can quickly identify and resolve problems related to network connectivity. - -## Symbols - -### Namespace `Juliet` - -#### Classes, Structs & Unions -- `class TcpListener` - -#### Functions & Methods -- `public: TcpListener::TcpListener()` -- `TcpListener::TcpListener(const TcpListener&)` -- `Status TcpListener::Listen(uint16 port, uint32 address = kAnyIp)` -- `Status TcpListener::Accept(TcpSocket& socket)` -- `void TcpListener::Close()` - diff --git a/Romeo/docs/Juliet_include_Core_Networking_TcpSocket.md b/Romeo/docs/Juliet_include_Core_Networking_TcpSocket.md deleted file mode 100644 index e281934..0000000 --- a/Romeo/docs/Juliet_include_Core_Networking_TcpSocket.md +++ /dev/null @@ -1,23 +0,0 @@ -# Juliet\include\Core\Networking\TcpSocket - -## Source Files -- Header: `Juliet\include\Core\Networking\TcpSocket.h` -- Source: `Juliet\src\Core\Networking\TcpSocket.cpp` - -## AI Description -The `TcpSocket` class in the Juliet library is designed to facilitate TCP communication over a network. It inherits from the base `Socket` class and provides methods for sending and receiving data packets. The primary purpose of this component is to handle low-level TCP socket operations, including opening connections, sending data, and receiving responses. The class uses a scratch allocator to manage the buffer used for sending data, ensuring that the packet size is correctly transmitted before actual data is sent. Additionally, it includes error handling mechanisms to manage network issues and partial sends. - -## Symbols - -### Namespace `Juliet` - -#### Classes, Structs & Unions -- `class TcpSocket` - -#### Functions & Methods -- `public: TcpSocket::TcpSocket()` -- `TcpSocket::TcpSocket(const TcpSocket&)` -- `RequestStatus TcpSocket::Send(NetworkPacket& packet)` -- `RequestStatus TcpSocket::Send(ByteBuffer buffer)` -- `Status TcpSocket::Receive(NetworkPacket& outPacket)` - diff --git a/Romeo/docs/Juliet_include_Core_Thread_Mutex.md b/Romeo/docs/Juliet_include_Core_Thread_Mutex.md deleted file mode 100644 index 88429c2..0000000 --- a/Romeo/docs/Juliet_include_Core_Thread_Mutex.md +++ /dev/null @@ -1,11 +0,0 @@ -# Juliet\include\Core\Thread\Mutex - -## Source Files -- Header: `Juliet\include\Core\Thread\Mutex.h` - -## AI Description -The `Mutex` class in the Juliet library is designed to provide mutual exclusion for critical sections of code, ensuring that only one thread can execute a piece of code at a time. This is crucial for maintaining data integrity and preventing race conditions in multi-threaded applications. The `LockGuard` class is used to manage the locking and unlocking of the mutex automatically when it goes out of scope, which simplifies the management of locks and reduces the risk of forgetting to unlock them. - -## Symbols - -*No symbols detected.* diff --git a/Romeo/docs/Juliet_include_Core_Thread_Thread.md b/Romeo/docs/Juliet_include_Core_Thread_Thread.md deleted file mode 100644 index 11f3b06..0000000 --- a/Romeo/docs/Juliet_include_Core_Thread_Thread.md +++ /dev/null @@ -1,23 +0,0 @@ -# Juliet\include\Core\Thread\Thread - -## Source Files -- Header: `Juliet\include\Core\Thread\Thread.h` - -## AI Description -The `Thread.h` header file defines a C++ class named `Thread` that encapsulates the functionality of creating and managing threads. The main purpose of this component is to provide a simple interface for creating, starting, and stopping threads in a multi-threaded environment. - -The design of the `Thread` class includes the following key features: - -1. **Thread Creation**: The `Thread` class provides a constructor that takes a function pointer as an argument and creates a new thread by calling the provided function. - -2. **Thread Execution**: Once a thread is created, it can be started using the `start()` method of the `std::thread` class. This method begins executing the function passed to the constructor in a separate thread. - -3. **Thread Management**: The `Thread` class also includes methods for stopping threads. The `stop()` method allows you to request that a thread stop its execution, and the `join()` method waits for a thread to complete its execution before proceeding. - -4. **Wait Function**: The `wait_ms` function is provided as an inline function within the `Thread.h` header file. It takes an integer parameter representing the number of milliseconds to wait before continuing execution. This function uses the `?chrono?` library to sleep for the specified duration. - -5. **Namespace and Naming Convention**: The `Thread` class is defined in a namespace named `Juliet`, which follows the standard C++ naming convention for namespaces. - -## Symbols - -*No symbols detected.* diff --git a/Romeo/docs/Juliet_include_Engine_Class.md b/Romeo/docs/Juliet_include_Engine_Class.md deleted file mode 100644 index 6146aa2..0000000 --- a/Romeo/docs/Juliet_include_Engine_Class.md +++ /dev/null @@ -1,19 +0,0 @@ -# Juliet\include\Engine\Class - -## Source Files -- Header: `Juliet\include\Engine\Class.h` - -## AI Description -The `Class` struct in the provided C++ component serves as a unique identifier for different classes within the Juliet engine. It includes a CRC32 hash of the class name, which is used to quickly determine if an object belongs to a specific class type. The CRC32 hash ensures that even if two classes have identical names but are implemented differently, they will be considered distinct by the `IsA` function. - -The `Class` struct also includes debug information for debugging purposes, such as the class name and its length. This allows developers to inspect and verify the class hierarchy within the engine. - -In summary, the main purpose of this component is to provide a robust way to identify and manage different classes in the Juliet engine using their unique CRC32 hash. - -## Symbols - -### Namespace `Juliet` - -#### Classes, Structs & Unions -- `struct Class` - diff --git a/Romeo/docs/Juliet_include_Engine_Debug_MemoryDebugger.md b/Romeo/docs/Juliet_include_Engine_Debug_MemoryDebugger.md deleted file mode 100644 index 1d55e7b..0000000 --- a/Romeo/docs/Juliet_include_Engine_Debug_MemoryDebugger.md +++ /dev/null @@ -1,16 +0,0 @@ -# Juliet\include\Engine\Debug\MemoryDebugger - -## Source Files -- Header: `Juliet\include\Engine\Debug\MemoryDebugger.h` -- Source: `Juliet\src\Engine\Debug\MemoryDebugger.cpp` - -## AI Description -This C++ component provides a visual debugger for memory allocations within an arena-based system, allowing developers to inspect and manage memory usage in real-time. The component includes features such as zooming, panning, and jumping to specific allocations, making it easier to identify and debug memory leaks or inefficiencies. - -## Symbols - -### Namespace `Juliet::Debug` - -#### Functions & Methods -- `JULIET_API void DebugDrawMemoryArena()` - diff --git a/Romeo/docs/Juliet_include_Engine_Engine.md b/Romeo/docs/Juliet_include_Engine_Engine.md deleted file mode 100644 index c8ee999..0000000 --- a/Romeo/docs/Juliet_include_Engine_Engine.md +++ /dev/null @@ -1,26 +0,0 @@ -# Juliet\include\Engine\Engine - -## Source Files -- Header: `Juliet\include\Engine\Engine.h` -- Source: `Juliet\src\Engine\Engine.cpp` - -## AI Description -The `Engine` class in the Juliet project serves as a central hub for managing and coordinating various components of the game engine. It encapsulates the initialization, shutdown, loading, and running of the application. The class manages resources such as the platform arena, logging system, filesystem, and graphics device. It also initializes and shuts down dependent systems like mesh rendering and skybox rendering, ensuring that all necessary systems are ready for use during runtime. The `RunEngine` method is responsible for orchestrating the game loop, which includes updating the application logic and rendering frames. - -## Symbols - -### Namespace `Juliet` - -#### Classes, Structs & Unions -- `struct Engine` - -#### Enums -- `enum class JulietInit_Flags` - -#### Functions & Methods -- `void InitializeEngine(JulietInit_Flags flags)` -- `void ShutdownEngine()` -- `void LoadApplication(IApplication& app)` -- `void UnloadApplication()` -- `void RunEngine()` - diff --git a/Romeo/docs/Juliet_include_Graphics_Camera.md b/Romeo/docs/Juliet_include_Graphics_Camera.md deleted file mode 100644 index 962b701..0000000 --- a/Romeo/docs/Juliet_include_Graphics_Camera.md +++ /dev/null @@ -1,15 +0,0 @@ -# Juliet\include\Graphics\Camera - -## Source Files -- Header: `Juliet\include\Graphics\Camera.h` - -## AI Description -This C++ component is designed to encapsulate and manage the camera properties for a 3D graphics application. It includes methods to calculate the view matrix, projection matrix, and combined view-projection matrix based on the camera's position, target, up vector, field of view (FOV), aspect ratio, near plane, and far plane. The `Camera` struct holds these parameters, and the provided functions (`Camera_GetViewMatrix`, `Camera_GetProjectionMatrix`, and `Camera_GetViewProjectionMatrix`) compute these matrices using the appropriate mathematical functions from the Core Math library. This component is crucial for rendering 3D scenes in a graphics engine, allowing for camera manipulation and projection transformations. - -## Symbols - -### Namespace `Juliet` - -#### Classes, Structs & Unions -- `struct Camera` - diff --git a/Romeo/docs/Juliet_include_Graphics_Colors.md b/Romeo/docs/Juliet_include_Graphics_Colors.md deleted file mode 100644 index 6ddf497..0000000 --- a/Romeo/docs/Juliet_include_Graphics_Colors.md +++ /dev/null @@ -1,15 +0,0 @@ -# Juliet\include\Graphics\Colors - -## Source Files -- Header: `Juliet\include\Graphics\Colors.h` - -## AI Description -The `Colors.h` header file in the Juliet library defines a template class `ColorType` that encapsulates the RGBA color components. The class is designed to be used for handling colors in various applications, such as graphics rendering and user interface design. The `FColor` type uses floating-point numbers (`float`) for each component, providing high precision for color manipulation. The `Color` type uses 8-bit unsigned integers (`uint8`) for each component, which is suitable for simpler applications where precision is not critical. This design allows for easy integration with other parts of the Juliet library and provides a flexible way to manage colors in different contexts. - -## Symbols - -### Namespace `Juliet` - -#### Classes, Structs & Unions -- `struct ColorType` - diff --git a/Romeo/docs/Juliet_include_Graphics_DebugDisplay.md b/Romeo/docs/Juliet_include_Graphics_DebugDisplay.md deleted file mode 100644 index 08a6e35..0000000 --- a/Romeo/docs/Juliet_include_Graphics_DebugDisplay.md +++ /dev/null @@ -1,20 +0,0 @@ -# Juliet\include\Graphics\DebugDisplay - -## Source Files -- Header: `Juliet\include\Graphics\DebugDisplay.h` - -## AI Description -This C++ component is designed to provide debugging and visualization tools for a game engine. It includes functions to initialize, shutdown, draw lines, spheres, and prepare commands for rendering in a graphics device. The DebugDisplay class is part of the Juliet namespace and utilizes various classes such as Vector3, Camera, Colors, Graphics, and CommandList from different modules within the game engine. The component is intended to be used during development and testing phases to visualize the state of the game world and debug issues. - -## Symbols - -### Namespace `Juliet` - -#### Functions & Methods -- `extern JULIET_API void DebugDisplay_Initialize(GraphicsDevice* device)` -- `extern JULIET_API void DebugDisplay_Shutdown(GraphicsDevice* device)` -- `extern JULIET_API void DebugDisplay_DrawLine(const Vector3& start, const Vector3& end, const FColor& color, bool overlay)` -- `extern JULIET_API void DebugDisplay_DrawSphere(const Vector3& center, float radius, const FColor& color, bool overlay)` -- `extern JULIET_API void DebugDisplay_Prepare(CommandList* cmdList)` -- `extern JULIET_API void DebugDisplay_Flush(CommandList* cmdList, RenderPass* renderPass, const Camera& camera)` - diff --git a/Romeo/docs/Juliet_include_Graphics_Graphics.md b/Romeo/docs/Juliet_include_Graphics_Graphics.md deleted file mode 100644 index 7967abd..0000000 --- a/Romeo/docs/Juliet_include_Graphics_Graphics.md +++ /dev/null @@ -1,126 +0,0 @@ -# Juliet\include\Graphics\Graphics - -## Source Files -- Header: `Juliet\include\Graphics\Graphics.h` -- Source: `Juliet\src\Graphics\Graphics.cpp` - -## AI Description -The provided code snippet is a C++ implementation of a graphics rendering engine using the Juliet library. It includes functions for managing render passes, shaders, and graphics buffers. The `RenderPass` class represents a set of commands that can be executed together to draw graphics. The `CommandList` class manages a list of commands that are executed on a GPU. - -Here's a brief overview of the key functionalities: - -1. **Rendering Pass Management**: - - `BeginRenderPass`: Begins a new render pass with specified color and depth/stencil targets. - - `EndRenderPass`: Ends the current render pass. - - `SetGraphicsViewPort`, `SetScissorRect`, `SetBlendConstants`, `SetStencilReference`: Set various rendering state parameters. - -2. **Shader Management**: - - `CreateShader`: Loads a shader from a file and creates a shader object. - - `DestroyShader`: Destroys a previously created shader object. - -3. **Graphics Pipeline Management**: - - `CreateGraphicsPipeline`: Creates a graphics pipeline with specified create information. - - `DestroyGraphicsPipeline`: Destroys a previously created graphics pipeline object. - -4. **Buffer Management**: - - `CreateGraphicsBuffer`, `CreateGraphicsTransferBuffer`: Create buffers for storing graphics data. - - `MapGraphicsBuffer`, `UnmapGraphicsBuffer`, `MapGraphicsTransferBuffer`, `UnmapGraphicsTransferBuffer`: Map and unmap memory from the GPU. - - `CopyBuffer`, `CopyBufferToTexture`, `TransitionBufferToReadable`: Copy data between buffers or transfer data to/from textures. - -5. **Descriptor Management**: - - `GetDescriptorIndex`: Retrieve the descriptor index for a buffer or texture. - -6. **Resource Destruction**: - - `DestroyGraphicsBuffer`, `DestroyGraphicsTransferBuffer`: Destroy previously created graphics buffer and transfer buffer objects. - -This code snippet provides a comprehensive set of tools for managing graphics resources in a C++ application using the Juliet library, allowing developers to create complex 3D scenes efficiently. - -## Symbols - -### Namespace `Juliet` - -#### Classes, Structs & Unions -- `struct IndirectDrawCommand` -- `struct IndexedIndirectDrawCommand` -- `struct IndirectDispatchCommand` -- `struct GraphicsViewPort` - -#### Enums -- `enum class QueueType` -- `enum class IndexFormat` -- `enum struct` -- `enum struct` - -#### Functions & Methods -- `extern JULIET_API GraphicsDevice* CreateGraphicsDevice(GraphicsConfig config)` -- `extern JULIET_API void DestroyGraphicsDevice(NonNullPtr device)` -- `// Attach To Window - extern JULIET_API bool AttachToWindow(NonNullPtr device, NonNullPtr window)` -- `extern JULIET_API void DetachFromWindow(NonNullPtr device, NonNullPtr window)` -- `// SwapChain - extern JULIET_API bool AcquireSwapChainTexture(NonNullPtr commandList, NonNullPtr window, - Texture** swapChainTexture)` -- `extern JULIET_API bool WaitAndAcquireSwapChainTexture(NonNullPtr commandList, - NonNullPtr window, Texture** swapChainTexture)` -- `extern JULIET_API bool WaitForSwapchain(NonNullPtr device, NonNullPtr window)` -- `extern JULIET_API TextureFormat GetSwapChainTextureFormat(NonNullPtr device, NonNullPtr window)` -- `// Textures - extern JULIET_API Texture* CreateTexture(NonNullPtr device, const TextureCreateInfo& createInfo)` -- `extern JULIET_API void DestroyTexture(NonNullPtr device, NonNullPtr texture)` -- `// Command List - extern JULIET_API CommandList* AcquireCommandList(NonNullPtr device, QueueType queueType = QueueType::Graphics)` -- `extern JULIET_API void SubmitCommandLists(NonNullPtr commandList)` -- `// RenderPass - extern JULIET_API RenderPass* BeginRenderPass(NonNullPtr commandList, ColorTargetInfo& colorTargetInfo, - DepthStencilTargetInfo* depthStencilTargetInfo = nullptr)` -- `extern JULIET_API RenderPass* BeginRenderPass(NonNullPtr commandList, - NonNullPtr colorTargetInfos, uint32 colorTargetInfoCount, - DepthStencilTargetInfo* depthStencilTargetInfo = nullptr)` -- `extern JULIET_API void EndRenderPass(NonNullPtr renderPass)` -- `extern JULIET_API void SetGraphicsViewPort(NonNullPtr renderPass, const GraphicsViewPort& viewPort)` -- `extern JULIET_API void SetScissorRect(NonNullPtr renderPass, const Rectangle& rectangle)` -- `extern JULIET_API void SetBlendConstants(NonNullPtr renderPass, FColor blendConstants)` -- `extern JULIET_API void SetStencilReference(NonNullPtr renderPass, uint8 reference)` -- `extern JULIET_API void BindGraphicsPipeline(NonNullPtr renderPass, NonNullPtr graphicsPipeline)` -- `extern JULIET_API void DrawPrimitives(NonNullPtr renderPass, uint32 numVertices, uint32 numInstances, - uint32 firstVertex, uint32 firstInstance)` -- `extern JULIET_API void DrawIndexedPrimitives(NonNullPtr renderPass, uint32 numIndices, uint32 numInstances, - uint32 firstIndex, uint32 vertexOffset, uint32 firstInstance)` -- `extern JULIET_API void SetIndexBuffer(NonNullPtr commandList, NonNullPtr buffer, - IndexFormat format, size_t indexCount, index_t offset)` -- `extern JULIET_API void SetPushConstants(NonNullPtr commandList, ShaderStage stage, - uint32 rootParameterIndex, uint32 numConstants, const void* constants)` -- `// Fences - extern JULIET_API bool WaitUntilGPUIsIdle(NonNullPtr device)` -- `// Shaders - extern JULIET_API Shader* CreateShader(NonNullPtr device, String filename, ShaderCreateInfo& shaderCreateInfo)` -- `extern JULIET_API void DestroyShader(NonNullPtr device, NonNullPtr shader)` -- `// Pipelines - extern JULIET_API GraphicsPipeline* CreateGraphicsPipeline(NonNullPtr device, - const GraphicsPipelineCreateInfo& createInfo)` -- `extern JULIET_API void DestroyGraphicsPipeline(NonNullPtr device, NonNullPtr graphicsPipeline)` -- `#if ALLOW_SHADER_HOT_RELOAD - // Allows updating the graphics pipeline shaders. Can update either one or both shaders. - extern JULIET_API bool UpdateGraphicsPipelineShaders(NonNullPtr device, NonNullPtr graphicsPipeline, - Shader* optional_vertexShader, Shader* optional_fragmentShader)` -- `#endif - - // Buffers - extern JULIET_API GraphicsBuffer* CreateGraphicsBuffer(NonNullPtr device, const BufferCreateInfo& createInfo)` -- `extern JULIET_API GraphicsTransferBuffer* CreateGraphicsTransferBuffer(NonNullPtr device, - const TransferBufferCreateInfo& createInfo)` -- `extern JULIET_API void* MapGraphicsBuffer(NonNullPtr device, NonNullPtr buffer)` -- `extern JULIET_API void UnmapGraphicsBuffer(NonNullPtr device, NonNullPtr buffer)` -- `extern JULIET_API void* MapGraphicsTransferBuffer(NonNullPtr device, NonNullPtr buffer)` -- `extern JULIET_API void UnmapGraphicsTransferBuffer(NonNullPtr device, NonNullPtr buffer)` -- `extern JULIET_API void CopyBuffer(NonNullPtr commandList, NonNullPtr dst, - NonNullPtr src, size_t size, size_t dstOffset = 0, - size_t srcOffset = 0)` -- `extern JULIET_API void CopyBufferToTexture(NonNullPtr commandList, NonNullPtr dst, - NonNullPtr src)` -- `extern JULIET_API void TransitionBufferToReadable(NonNullPtr commandList, NonNullPtr buffer)` -- `extern JULIET_API uint32 GetDescriptorIndex(NonNullPtr device, NonNullPtr buffer)` -- `extern JULIET_API uint32 GetDescriptorIndex(NonNullPtr device, NonNullPtr texture)` -- `extern JULIET_API void DestroyGraphicsBuffer(NonNullPtr device, NonNullPtr buffer)` -- `extern JULIET_API void DestroyGraphicsTransferBuffer(NonNullPtr device, NonNullPtr buffer)` - diff --git a/Romeo/docs/Juliet_include_Graphics_GraphicsBuffer.md b/Romeo/docs/Juliet_include_Graphics_GraphicsBuffer.md deleted file mode 100644 index eba3b43..0000000 --- a/Romeo/docs/Juliet_include_Graphics_GraphicsBuffer.md +++ /dev/null @@ -1,53 +0,0 @@ -# Juliet\include\Graphics\GraphicsBuffer - -## Source Files -- Header: `Juliet\include\Graphics\GraphicsBuffer.h` - -## AI Description -The `GraphicsBuffer` and `GraphicsTransferBuffer` classes in the Juliet library are designed to manage graphics buffers, which are essential for storing data that is used by shaders during rendering. These buffers can be either read from or written to by the GPU, depending on their usage. - -The main purpose of these classes is to encapsulate the creation, management, and operations related to graphics buffers. They provide a high-level interface for developers to interact with graphics resources efficiently. - -### Key Features: - -1. **Buffer Usage**: The `GraphicsBuffer` class supports various buffer usages such as index buffers, constant buffers, structured buffers, and none. This allows developers to choose the appropriate buffer type based on their specific requirements. - -2. **Transfer Buffer Usage**: The `GraphicsTransferBuffer` class is used for transferring data between host memory and graphics memory. It provides methods for downloading data from the GPU to host memory and uploading data from host memory to the GPU. - -3. **Buffer Create Info**: The `BufferCreateInfo` struct allows developers to specify various properties of a buffer, such as its size, stride, usage, and whether it is dynamic. This flexibility enables developers to create buffers with specific characteristics tailored to their needs. - -4. **Opaque Data**: Both classes are designed to be opaque, meaning that they do not expose any internal implementation details. This ensures that the library remains flexible and can evolve without affecting existing code. - -### Usage: - -To use these classes, developers first need to include the `GraphicsBuffer.h` header file in their source files. They can then create a buffer using the `CreateBuffer` function, passing in the necessary parameters such as size, stride, usage, and dynamic flag. - -```cpp -// Include the GraphicsBuffer header file -#include "W:\Classified\Juliet\Juliet\include\Graphics\GraphicsBuffer.h" - -int main() { - // Create a buffer with specific properties - Juliet::BufferCreateInfo createInfo = {1024, 4, Juliet::BufferUsage::IndexBuffer, false}; - Juliet::GraphicsBuffer buffer = Juliet::CreateBuffer(createInfo); - - // Use the buffer for rendering - - return 0; -} -``` - -By using these classes, developers can efficiently manage graphics buffers in their applications, ensuring that they are used correctly and effectively. - -## Symbols - -### Namespace `Juliet` - -#### Classes, Structs & Unions -- `struct BufferCreateInfo` -- `struct TransferBufferCreateInfo` - -#### Enums -- `enum class BufferUsage` -- `enum class TransferBufferUsage` - diff --git a/Romeo/docs/Juliet_include_Graphics_GraphicsConfig.md b/Romeo/docs/Juliet_include_Graphics_GraphicsConfig.md deleted file mode 100644 index 4f61dab..0000000 --- a/Romeo/docs/Juliet_include_Graphics_GraphicsConfig.md +++ /dev/null @@ -1,18 +0,0 @@ -# Juliet\include\Graphics\GraphicsConfig - -## Source Files -- Header: `Juliet\include\Graphics\GraphicsConfig.h` - -## AI Description -This C++ component is designed to manage graphics configuration settings for a game or application. It includes an enumeration `DriverType` with two possible values: `Any` and `DX12`, which represent different types of graphics drivers. The `GraphicsConfig` struct contains two members: `PreferredDriver`, which specifies the preferred graphics driver, and `EnableDebug`, which indicates whether debug mode should be enabled for graphics operations. This configuration is essential for controlling how graphics are rendered in a game or application, allowing developers to optimize performance and troubleshoot issues effectively. - -## Symbols - -### Namespace `Juliet` - -#### Classes, Structs & Unions -- `struct GraphicsConfig` - -#### Enums -- `enum class DriverType` - diff --git a/Romeo/docs/Juliet_include_Graphics_GraphicsPipeline.md b/Romeo/docs/Juliet_include_Graphics_GraphicsPipeline.md deleted file mode 100644 index cbdf561..0000000 --- a/Romeo/docs/Juliet_include_Graphics_GraphicsPipeline.md +++ /dev/null @@ -1,37 +0,0 @@ -# Juliet\include\Graphics\GraphicsPipeline - -## Source Files -- Header: `Juliet\include\Graphics\GraphicsPipeline.h` - -## AI Description -The `GraphicsPipeline` class in the provided C++ header file is designed to encapsulate the configuration and management of a graphics pipeline for rendering 3D scenes. It includes various components such as shaders, rasterizer state, vertex input state, depth stencil state, and multisample state to control how vertices are processed and rendered on the screen. - -The class provides methods to create a new `GraphicsPipeline` instance using the provided configuration information, which includes pointers to vertex and fragment shaders, primitive type, target information, rasterizer state, multisample state, vertex input state, depth stencil state, and graphics pipeline create info. The class also manages the lifecycle of the pipeline, ensuring that resources are properly allocated and deallocated when necessary. - -The `GraphicsPipeline` class is intended to be used by higher-level rendering systems or applications that need to configure and manage graphics pipelines for complex 3D scenes. - -## Symbols - -### Namespace `Juliet` - -#### Classes, Structs & Unions -- `struct RasterizerState` -- `struct VertexBufferDescription` -- `struct VertexAttribute` -- `struct VertexInputState` -- `struct GraphicsPipelineTargetInfo` -- `struct StencilOperationState` -- `struct DepthStencilState` -- `struct MultisampleState` -- `struct GraphicsPipelineCreateInfo` - -#### Enums -- `enum class FillMode` -- `enum class CullMode` -- `enum class FrontFace` -- `enum class PrimitiveType` -- `enum class VertexInputRate` -- `enum class VertexElementFormat` -- `enum class CompareOperation` -- `enum class StencilOperation` - diff --git a/Romeo/docs/Juliet_include_Graphics_ImGuiRenderer.md b/Romeo/docs/Juliet_include_Graphics_ImGuiRenderer.md deleted file mode 100644 index 76cf2ac..0000000 --- a/Romeo/docs/Juliet_include_Graphics_ImGuiRenderer.md +++ /dev/null @@ -1,19 +0,0 @@ -# Juliet\include\Graphics\ImGuiRenderer - -## Source Files -- Header: `Juliet\include\Graphics\ImGuiRenderer.h` -- Source: `Juliet\src\Graphics\ImGuiRenderer.cpp` - -## AI Description -The `ImGuiRenderer` component in the Juliet graphics library is designed to handle rendering of ImGui UI elements directly within a graphics pipeline. It initializes, manages, and renders ImGui windows and controls on the GPU using DirectX 12. The component includes functions for initializing, shutting down, starting a new frame, and rendering the ImGui content into a command list. It uses a set of buffers and transfer buffers to manage vertex and index data efficiently, ensuring smooth and responsive UI interactions. - -## Symbols - -### Namespace `Juliet` - -#### Functions & Methods -- `extern bool ImGuiRenderer_Initialize(GraphicsDevice* device)` -- `extern void ImGuiRenderer_Shutdown(GraphicsDevice* device)` -- `extern void ImGuiRenderer_NewFrame()` -- `extern JULIET_API void ImGuiRenderer_Render(CommandList* cmdList, RenderPass* renderPass)` - diff --git a/Romeo/docs/Juliet_include_Graphics_Lighting.md b/Romeo/docs/Juliet_include_Graphics_Lighting.md deleted file mode 100644 index 91881ce..0000000 --- a/Romeo/docs/Juliet_include_Graphics_Lighting.md +++ /dev/null @@ -1,22 +0,0 @@ -# Juliet\include\Graphics\Lighting - -## Source Files -- Header: `Juliet\include\Graphics\Lighting.h` - -## AI Description -The `Graphics\Lighting.h` header file in the Juliet project defines a class `PointLight` that encapsulates the properties of a point light source used in 3D graphics. The class includes the following components: - -- **Position**: A `Vector3` representing the position of the light source in world space. -- **Radius**: A float indicating the radius of the light's influence, which determines how far the light can affect objects. -- **Color**: A `Vector3` specifying the color of the light, typically represented as RGB values. -- **Intensity**: A float representing the intensity of the light, controlling the brightness and darkness of the affected objects. - -The class is designed to be used in conjunction with other graphics rendering components to simulate realistic lighting effects. The header file includes necessary headers such as `Juliet.h` for global namespace access and `Core/Math/Vector3.h` for vector operations. - -## Symbols - -### Namespace `Juliet` - -#### Classes, Structs & Unions -- `struct PointLight` - diff --git a/Romeo/docs/Juliet_include_Graphics_Mesh.md b/Romeo/docs/Juliet_include_Graphics_Mesh.md deleted file mode 100644 index bc480d0..0000000 --- a/Romeo/docs/Juliet_include_Graphics_Mesh.md +++ /dev/null @@ -1,19 +0,0 @@ -# Juliet\include\Graphics\Mesh - -## Source Files -- Header: `Juliet\include\Graphics\Mesh.h` -- Source: `Juliet\src\Graphics\Mesh.cpp` - -## AI Description -The `Mesh` class in the Juliet graphics library is designed to represent a collection of vertices and indices that define a 3D object. It encapsulates the necessary data structures such as vertex count, index count, and offsets for accessing these elements within an arena. The class also includes a transformation matrix that allows for scaling, rotation, or translation of the mesh in 3D space. This structure is crucial for rendering 3D models in applications using the Juliet graphics engine. - -## Symbols - -### Namespace `Juliet` - -#### Classes, Structs & Unions -- `struct Mesh` - -#### Functions & Methods -- `Matrix Transform = Mesh::MatrixIdentity()` - diff --git a/Romeo/docs/Juliet_include_Graphics_MeshRenderer.md b/Romeo/docs/Juliet_include_Graphics_MeshRenderer.md deleted file mode 100644 index e6b13a9..0000000 --- a/Romeo/docs/Juliet_include_Graphics_MeshRenderer.md +++ /dev/null @@ -1,69 +0,0 @@ -# Juliet\include\Graphics\MeshRenderer - -## Source Files -- Header: `Juliet\include\Graphics\MeshRenderer.h` -- Source: `Juliet\src\Graphics\MeshRenderer.cpp` - -## AI Description -It looks like you're trying to create a simple cube and a quad using vertex data in a graphics programming context. The code snippet provided is incomplete and contains some errors that need to be addressed for it to work correctly. Here's a revised version of the code with corrections: - -```cpp -#include ?vector? - -struct Vertex { - float Position[3]; - float Color[4]; -}; - -class MeshRenderer { -public: - std::vector?Vertex? Vertices; - std::vector?uint16_t? Indices; - std::vector?MeshID? Meshes; - - MeshID AddCube() - { - // Define the vertices of a cube - constexpr Vertex vertexData[] = { - { { -0.5f, -0.5f, -0.5f }, { 1.0f, 0.0f, 0.0f, 1.0f } }, // Front bottom left - { { 0.5f, -0.5f, -0.5f }, { 0.0f, 1.0f, 0.0f, 1.0f } }, // Front bottom right - { { 0.5f, 0.5f, -0.5f }, { 0.0f, 0.0f, 1.0f, 1.0f } }, // Front top right - { { -0.5f, 0.5f, -0.5f }, { 0.0f, 1.0f, 0.0f, 1.0f } }, // Front top left - - { { -0.5f, -0.5f, 0.5f }, { 1.0f, 0.0f, 0.0f, 1.0f } }, // Back bottom left - { { 0.5f, -0.5f, 0.5f }, { 0.0f, 1.0f, 0.0f, 1.0f } }, // Back bottom right - { { 0.5f, 0.5f, 0.5f }, { 0.0f, 0.0f, 1.0f, 1.0f } }, // Back top right - { { -0.5f, 0.5f, 0.5f }, { 0.0f, 1.0f, 0.0f, 1.0f } }, // Back top left - - { { -0.5f, -0.5f, 0.5f }, { 1.0f, 0.0f, 0.0f - -## Symbols - -### Namespace `Juliet` - -#### Classes, Structs & Unions -- `struct MeshRenderer` - -#### Functions & Methods -- `constexpr size_t kGeometryPage = Megabytes(64)` -- `constexpr size_t kIndexPage = Megabytes(32)` -- `JULIET_API void InitializeMeshRenderer(NonNullPtr arena)` -- `[[nodiscard]] JULIET_API bool InitializeMeshRendererGraphics(NonNullPtr device, NonNullPtr window)` -- `JULIET_API void ShutdownMeshRendererGraphics()` -- `JULIET_API void ShutdownMeshRenderer()` -- `JULIET_API void LoadMeshesOnGPU(NonNullPtr cmdList)` -- `JULIET_API void RenderMeshes(NonNullPtr pass, NonNullPtr cmdList, PushData& pushData)` -- `// Lights - [[nodiscard]] JULIET_API LightID AddPointLight(const PointLight& light)` -- `JULIET_API void SetPointLightPosition(LightID id, const Vector3& position)` -- `JULIET_API void SetPointLightColor(LightID id, const Vector3& color)` -- `JULIET_API void SetPointLightRadius(LightID id, float radius)` -- `JULIET_API void SetPointLightIntensity(LightID id, float intensity)` -- `JULIET_API void ClearPointLights()` -- `// Utils - [[nodiscard]] JULIET_API MeshID AddCube()` -- `[[nodiscard]] JULIET_API MeshID AddQuad()` -- `JULIET_API void SetMeshTransform(MeshID id, const Matrix& transform)` -- `#if ALLOW_SHADER_HOT_RELOAD - JULIET_API void ReloadMeshRendererShaders()` - diff --git a/Romeo/docs/Juliet_include_Graphics_PushConstants.md b/Romeo/docs/Juliet_include_Graphics_PushConstants.md deleted file mode 100644 index d800942..0000000 --- a/Romeo/docs/Juliet_include_Graphics_PushConstants.md +++ /dev/null @@ -1,15 +0,0 @@ -# Juliet\include\Graphics\PushConstants - -## Source Files -- Header: `Juliet\include\Graphics\PushConstants.h` - -## AI Description -The `PushConstants` struct in the Juliet library is designed to hold a set of constant data that can be passed to shaders for rendering operations. This structure includes various properties such as the view-projection matrix, mesh index, transforms buffer index, buffer index, texture index, vertex offset, padding, scale, translate, padding2, global light direction, global light pad, global light color, global ambient intensity, light buffer index, and active light count. The use of `PushConstants` allows for efficient data transfer between the CPU and GPU, reducing the number of draw calls and improving rendering performance. - -## Symbols - -### Namespace `Juliet` - -#### Classes, Structs & Unions -- `struct PushData` - diff --git a/Romeo/docs/Juliet_include_Graphics_RenderPass.md b/Romeo/docs/Juliet_include_Graphics_RenderPass.md deleted file mode 100644 index c58cf37..0000000 --- a/Romeo/docs/Juliet_include_Graphics_RenderPass.md +++ /dev/null @@ -1,65 +0,0 @@ -# Juliet\include\Graphics\RenderPass - -## Source Files -- Header: `Juliet\include\Graphics\RenderPass.h` - -## AI Description -The `RenderPass` class in the Juliet graphics library is designed to encapsulate the functionality required for rendering a single pass of a scene. It manages the setup and execution of the render pipeline, including color targets, depth stencil targets, blend states, and other necessary parameters. - -### Main Purpose - -The primary purpose of the `RenderPass` class is to provide a structured way to define and execute rendering operations in a graphics application. This allows for better organization and management of rendering logic, making it easier to maintain and extend the graphics system. - -### Design - -#### Color Targets - -- **TargetTexture**: A pointer to the texture where the rendered output will be stored. -- **MipLevel**: The mip level at which the target texture should be accessed. -- **CycleTexture**: A boolean flag indicating whether the texture should be cycled if already bound (and load operation != LOAD). -- **ResolveTexture**: A pointer to a texture used for resolving MipMaps into non-mip-map textures. Discard MipMap content if not specified. -- **ResolveMipLevel**: The mip level at which the resolve texture should be accessed. -- **ResolveLayerIndex**: The layer index within the resolve texture (if applicable). -- **CycleResolveTexture**: A boolean flag indicating whether the resolve texture should be cycled if already bound. -- **ClearColor**: The color to clear the target texture with before rendering. -- **LoadOperation**: Specifies how the texture should be loaded from memory (e.g., LOAD, CLEAR, IGNORE). -- **StoreOperation**: Specifies how the result of the render pass should be stored into memory (e.g., STORE, IGNORE, RESOLVE, RESOLVE_AND_STORE). - -#### Depth Stencil Targets - -- **TargetTexture**: A pointer to the texture where the depth and stencil information will be stored. -- **MipLevel**: The mip level at which the target texture should be accessed. -- **LayerIndex**: The layer index within the target texture (if applicable). -- **ClearDepth**: The depth value to clear the target texture with before rendering. -- **ClearStencil**: The stencil value to clear the target texture with before rendering. -- **LoadOperation**: Specifies how the texture should be loaded from memory (e.g., LOAD, CLEAR, IGNORE). -- **StoreOperation**: Specifies how the result of the render pass should be stored into memory (e.g., STORE, IGNORE, RESOLVE, RESOLVE_AND_STORE). - -#### Blend States - -- **SourceColorBlendFactor**: The blend factor for the source RGB value. -- **DestinationColorBlendFactor**: The blend factor for the destination RGB value. -- **ColorBlendOperation**: The blend operation for the RGB components. -- **SourceAlphaBlendFactor**: The blend factor for the source alpha. -- **DestinationAlphaBlendFactor**: The blend factor for the destination alpha. -- **AlphaBlendOperation**: The blend operation for the alpha component. -- **ColorWriteMask**: A bitmask specifying which of the RGBA - -## Symbols - -### Namespace `Juliet` - -#### Classes, Structs & Unions -- `struct ColorTargetInfo` -- `union ColorTargetInfo::anonymous` -- `struct DepthStencilTargetInfo` -- `struct ColorTargetBlendState` -- `struct ColorTargetDescription` - -#### Enums -- `enum struct` -- `enum struct` -- `enum class BlendFactor` -- `enum class BlendOperation` -- `enum class ColorComponentFlags` - diff --git a/Romeo/docs/Juliet_include_Graphics_Shader.md b/Romeo/docs/Juliet_include_Graphics_Shader.md deleted file mode 100644 index 48f4489..0000000 --- a/Romeo/docs/Juliet_include_Graphics_Shader.md +++ /dev/null @@ -1,18 +0,0 @@ -# Juliet\include\Graphics\Shader - -## Source Files -- Header: `Juliet\include\Graphics\Shader.h` - -## AI Description -The `Shader` class in the Juliet library is designed to encapsulate shader code and metadata for different stages of a graphics pipeline. It provides an opaque type to manage shaders, allowing for easy access and manipulation within the application. The class includes an enumeration for specifying shader stages (Vertex, Fragment, Compute), which helps in organizing and managing shader resources effectively. Additionally, it utilizes a `String` object to store the entry point name of each shader stage, facilitating easier identification and management of shader code within the graphics pipeline. This design ensures that shaders are properly managed and can be easily integrated into larger applications for rendering graphics. - -## Symbols - -### Namespace `Juliet` - -#### Classes, Structs & Unions -- `struct ShaderCreateInfo` - -#### Enums -- `enum class ShaderStage` - diff --git a/Romeo/docs/Juliet_include_Graphics_SkyboxRenderer.md b/Romeo/docs/Juliet_include_Graphics_SkyboxRenderer.md deleted file mode 100644 index 1daabf9..0000000 --- a/Romeo/docs/Juliet_include_Graphics_SkyboxRenderer.md +++ /dev/null @@ -1,32 +0,0 @@ -# Juliet\include\Graphics\SkyboxRenderer - -## Source Files -- Header: `Juliet\include\Graphics\SkyboxRenderer.h` -- Source: `Juliet\src\Graphics\SkyboxRenderer.cpp` - -## AI Description -The `SkyboxRenderer` class in the given C++ code is designed to manage the rendering of a skybox using DirectX 12. It encapsulates the necessary components such as the graphics device, pipeline, and shader resources. The main purpose of this component is to initialize, shutdown, and render a skybox in a game or application. - -The class provides methods for initializing the renderer with a graphics device and window, shutting it down, and rendering the skybox using a specified render pass and command list. It also includes functionality to reload shaders if needed, although this feature is commented out in the source file. - -The `InitializeSkyboxRenderer` method sets up the pipeline by creating vertex and fragment shaders from DXIL files, configuring the graphics pipeline with the appropriate settings, and binding it to the render pass. The `ShutdownSkyboxRenderer` method cleans up the resources associated with the renderer, including destroying the graphics pipeline and resetting the state. - -The `RenderSkybox` method sets up push constants for the shader and uses them to draw a triangle list representing the skybox. It binds the graphics pipeline and executes the draw call using the provided render pass and command list. - -This class is part of a larger system that handles rendering in a game or application, providing a reusable component for managing the skybox rendering process. - -## Symbols - -### Namespace `Juliet` - -#### Classes, Structs & Unions -- `struct SkyboxRenderer` - -#### Functions & Methods -- `[[nodiscard]] JULIET_API bool InitializeSkyboxRenderer(NonNullPtr device, - NonNullPtr window)` -- `JULIET_API void ShutdownSkyboxRenderer()` -- `JULIET_API void RenderSkybox(NonNullPtr pass, NonNullPtr cmdList, const Matrix& viewProjection)` -- `#if ALLOW_SHADER_HOT_RELOAD - JULIET_API void ReloadSkyboxShaders()` - diff --git a/Romeo/docs/Juliet_include_Graphics_Texture.md b/Romeo/docs/Juliet_include_Graphics_Texture.md deleted file mode 100644 index 346dc17..0000000 --- a/Romeo/docs/Juliet_include_Graphics_Texture.md +++ /dev/null @@ -1,22 +0,0 @@ -# Juliet\include\Graphics\Texture - -## Source Files -- Header: `Juliet\include\Graphics\Texture.h` - -## AI Description -This C++ component defines a set of enums and structs to represent different types of textures in a graphics application. It includes information about texture formats, usage flags, types, sample counts, and create information structures. The `Texture` type is an opaque pointer that represents the actual texture data. This design allows for flexible and efficient management of textures within a graphics engine or application. - -## Symbols - -### Namespace `Juliet` - -#### Classes, Structs & Unions -- `struct TextureCreateInfo` -- `union TextureCreateInfo::anonymous` - -#### Enums -- `enum struct` -- `enum struct` -- `enum struct` -- `enum struct` - diff --git a/Romeo/docs/Juliet_include_Graphics_VertexData.md b/Romeo/docs/Juliet_include_Graphics_VertexData.md deleted file mode 100644 index 3fe240e..0000000 --- a/Romeo/docs/Juliet_include_Graphics_VertexData.md +++ /dev/null @@ -1,15 +0,0 @@ -# Juliet\include\Graphics\VertexData - -## Source Files -- Header: `Juliet\include\Graphics\VertexData.h` - -## AI Description -This C++ component defines a `Vertex` structure and an `Index` type for handling vertex data in graphics applications. The `Vertex` structure includes three arrays to store the position, normal, and color of each vertex, respectively. The `Index` type is defined as an unsigned 16-bit integer to represent indices into the vertex array. This component is part of a larger graphics library designed to facilitate efficient rendering of 3D models in applications such as video games or scientific visualization. - -## Symbols - -### Namespace `Juliet` - -#### Classes, Structs & Unions -- `struct Vertex` - diff --git a/Romeo/docs/Juliet_include_Juliet.md b/Romeo/docs/Juliet_include_Juliet.md deleted file mode 100644 index 50f8736..0000000 --- a/Romeo/docs/Juliet_include_Juliet.md +++ /dev/null @@ -1,11 +0,0 @@ -# Juliet\include\Juliet - -## Source Files -- Header: `Juliet\include\Juliet.h` - -## AI Description -The `Juliet.h` header file serves as the primary interface for defining basic includes and macros in a C++ project. It includes conditional compilation directives to support Windows-specific features and provides macros for debugging and disabling ImGui, which is a popular cross-platform GUI library. The use of `#pragma once` ensures that the header file is included only once per compilation unit, optimizing performance. - -## Symbols - -*No symbols detected.* diff --git a/Romeo/docs/Juliet_src_Core_HAL_Display_Win32_Win32DisplayDevice.md b/Romeo/docs/Juliet_src_Core_HAL_Display_Win32_Win32DisplayDevice.md deleted file mode 100644 index 5b928b0..0000000 --- a/Romeo/docs/Juliet_src_Core_HAL_Display_Win32_Win32DisplayDevice.md +++ /dev/null @@ -1,11 +0,0 @@ -# Juliet\src\Core\HAL\Display\Win32\Win32DisplayDevice - -## Source Files -- Source: `Juliet\src\Core\HAL\Display\Win32\Win32DisplayDevice.cpp` - -## AI Description -The `Win32DisplayDevice` class is a concrete implementation of the `DisplayDevice` interface in the Juliet framework, designed to manage display-related functionalities on Windows. It encapsulates the necessary components for creating and managing windows that represent the display devices. The class provides methods such as initializing, shutting down, freeing resources, creating platform-specific windows, and handling window events. The factory function `Win32DisplayDeviceFactory` is used to create instances of this device, which can be registered with the framework to handle display-related tasks. - -## Symbols - -*No symbols detected.* diff --git a/Romeo/docs/Juliet_src_Core_HAL_Display_Win32_Win32DisplayEvent.md b/Romeo/docs/Juliet_src_Core_HAL_Display_Win32_Win32DisplayEvent.md deleted file mode 100644 index 917573b..0000000 --- a/Romeo/docs/Juliet_src_Core_HAL_Display_Win32_Win32DisplayEvent.md +++ /dev/null @@ -1,17 +0,0 @@ -# Juliet\src\Core\HAL\Display\Win32\Win32DisplayEvent - -## Source Files -- Header: `Juliet\src\Core\HAL\Display\Win32\Win32DisplayEvent.h` -- Source: `Juliet\src\Core\HAL\Display\Win32\Win32DisplayEvent.cpp` - -## AI Description -The `Win32DisplayEvent` class in the provided C++ component is designed to manage and dispatch events for a Windows-based display device. It includes functions to pump messages from the operating system, process keyboard and mouse input, and handle window-related events such as close requests and mouse movements. The class utilizes the Win32 API to interact with the operating system's message queue and event handling mechanisms. The `PumpEvents` function is responsible for polling the message queue and dispatching them to appropriate handlers, while the `Win32MainWindowCallback` function processes messages specific to the main window of the display device. This component is crucial for managing user interactions and ensuring smooth operation within a Windows-based environment. - -## Symbols - -### Namespace `Juliet::Win32` - -#### Functions & Methods -- `extern void PumpEvents(NonNullPtr self)` -- `extern LRESULT CALLBACK Win32MainWindowCallback(HWND Handle, UINT Message, WPARAM WParam, LPARAM LParam)` - diff --git a/Romeo/docs/Juliet_src_Core_HAL_Display_Win32_Win32Window.md b/Romeo/docs/Juliet_src_Core_HAL_Display_Win32_Win32Window.md deleted file mode 100644 index b0d4ba8..0000000 --- a/Romeo/docs/Juliet_src_Core_HAL_Display_Win32_Win32Window.md +++ /dev/null @@ -1,23 +0,0 @@ -# Juliet\src\Core\HAL\Display\Win32\Win32Window - -## Source Files -- Header: `Juliet\src\Core\HAL\Display\Win32\Win32Window.h` -- Source: `Juliet\src\Core\HAL\Display\Win32\Win32Window.cpp` - -## AI Description -The `Win32Window` class in the Juliet project is a platform-specific implementation of the `Window` interface for Windows. It provides methods to create, destroy, show, hide, and set the title of windows on the operating system. The class uses Win32 API functions such as `CreateWindowExA`, `ShowWindow`, and `SetWindowTextA` to interact with the window handle. The `SetupWindowState` and `CleanUpWindowState` helper functions manage the lifecycle of the `Window32State` structure, which holds additional state information specific to the Win32 platform. - -## Symbols - -### Namespace `Juliet::Win32` - -#### Classes, Structs & Unions -- `struct Window32State` - -#### Functions & Methods -- `extern bool CreatePlatformWindow(NonNullPtr self, NonNullPtr window)` -- `extern void DestroyPlatformWindow(NonNullPtr self, NonNullPtr window)` -- `extern void ShowWindow(NonNullPtr self, NonNullPtr window)` -- `extern void HideWindow(NonNullPtr self, NonNullPtr window)` -- `extern void SetWindowTitle(NonNullPtr self, NonNullPtr window, String title)` - diff --git a/Romeo/docs/Juliet_src_Core_HAL_DynLib_Win32_DynamicLibrary.md b/Romeo/docs/Juliet_src_Core_HAL_DynLib_Win32_DynamicLibrary.md deleted file mode 100644 index 7202242..0000000 --- a/Romeo/docs/Juliet_src_Core_HAL_DynLib_Win32_DynamicLibrary.md +++ /dev/null @@ -1,11 +0,0 @@ -# Juliet\src\Core\HAL\DynLib\Win32\DynamicLibrary - -## Source Files -- Source: `Juliet\src\Core\HAL\DynLib\Win32\DynamicLibrary.cpp` - -## AI Description -The `DynamicLibrary` class in the Juliet project is designed to facilitate dynamic loading of shared libraries on Windows systems. It provides methods for loading a library by its filename, retrieving function pointers from the loaded library, and unloading the library when it's no longer needed. The class uses the Windows API functions `LoadLibraryA`, `GetProcAddress`, and `FreeLibrary` to handle these operations. The `LogManager` is utilized to log any errors that occur during the loading process, ensuring robust error handling in the application. - -## Symbols - -*No symbols detected.* diff --git a/Romeo/docs/Juliet_src_Core_HAL_Event_Keyboard.md b/Romeo/docs/Juliet_src_Core_HAL_Event_Keyboard.md deleted file mode 100644 index d095b2e..0000000 --- a/Romeo/docs/Juliet_src_Core_HAL_Event_Keyboard.md +++ /dev/null @@ -1,22 +0,0 @@ -# Juliet\src\Core\HAL\Event\Keyboard - -## Source Files -- Source: `Juliet\src\Core\HAL\Event\Keyboard.cpp` - -## AI Description -This C++ component is designed to manage keyboard events in a game engine. It includes functions for sending key presses and releases, checking if a specific key is down, retrieving the current state of all keys, and converting scan codes to corresponding key codes based on modifiers. The implementation uses an anonymous namespace to encapsulate the internal workings, ensuring that the code remains clean and modular. - -## Symbols - -### Namespace `Juliet::anonymous` - -#### Classes, Structs & Unions -- `struct KeyboardState` - -### Namespace `Juliet` - -#### Functions & Methods -- `static_assert( ToUnderlying(KeyState::Down)` -- `static_assert( ToUnderlying(KeyState::Up)` -- `static_assert( ToUnderlying(ScanCode::Count)` - diff --git a/Romeo/docs/Juliet_src_Core_HAL_Event_KeyboardMapping.md b/Romeo/docs/Juliet_src_Core_HAL_Event_KeyboardMapping.md deleted file mode 100644 index 750315c..0000000 --- a/Romeo/docs/Juliet_src_Core_HAL_Event_KeyboardMapping.md +++ /dev/null @@ -1,17 +0,0 @@ -# Juliet\src\Core\HAL\Event\KeyboardMapping - -## Source Files -- Header: `Juliet\src\Core\HAL\Event\KeyboardMapping.h` -- Source: `Juliet\src\Core\HAL\Event\KeyboardMapping.cpp` - -## AI Description -The `KeyboardMapping.h` header file defines a function `GetKeyCodeFromDefaultMapping` that takes a `ScanCode` and a `KeyModState` as input and returns the corresponding `KeyCode`. The function uses a default US ASCII mapping to convert scan codes into key codes. It handles special keys such as delete, caps lock, F1-F24, and power by returning specific key codes. For other characters that do not convert to ASCII code, it calls `GetNonPrintableKeys` to determine the appropriate key code based on the scan code. The source file `KeyboardMapping.cpp` contains the implementation of these functions, including the default US ASCII mapping and additional logic for handling special keys. - -## Symbols - -### Namespace `Juliet` - -#### Functions & Methods -- `// Transforms ScanCode into KeyCode using the default US ASCII Mapping - extern KeyCode GetKeyCodeFromDefaultMapping(ScanCode scanCode, KeyMod keyModState)` - diff --git a/Romeo/docs/Juliet_src_Core_HAL_Event_Mouse.md b/Romeo/docs/Juliet_src_Core_HAL_Event_Mouse.md deleted file mode 100644 index bfb553e..0000000 --- a/Romeo/docs/Juliet_src_Core_HAL_Event_Mouse.md +++ /dev/null @@ -1,11 +0,0 @@ -# Juliet\src\Core\HAL\Event\Mouse - -## Source Files -- Source: `Juliet\src\Core\HAL\Event\Mouse.cpp` - -## AI Description -The `Mouse` class in the Juliet project is designed to handle mouse input and events. It provides methods for sending mouse motion, button press/release events, checking if a specific mouse button is pressed, and retrieving the current mouse position. The class uses private member variables to store the state of the mouse, including its position, previous position, and button state. The `SendMouseMotion` function is responsible for updating the mouse state based on the timestamp, window, and mouse ID, while also ensuring that the mouse position stays within the bounds of the window. The class uses a static instance to manage the global mouse state across different parts of the application. - -## Symbols - -*No symbols detected.* diff --git a/Romeo/docs/Juliet_src_Core_HAL_Event_WindowEvent.md b/Romeo/docs/Juliet_src_Core_HAL_Event_WindowEvent.md deleted file mode 100644 index 7cb0ef3..0000000 --- a/Romeo/docs/Juliet_src_Core_HAL_Event_WindowEvent.md +++ /dev/null @@ -1,19 +0,0 @@ -# Juliet\src\Core\HAL\Event\WindowEvent - -## Source Files -- Header: `Juliet\src\Core\HAL\Event\WindowEvent.h` -- Source: `Juliet\src\Core\HAL\Event\WindowEvent.cpp` - -## AI Description -The `WindowEvent` class in the Juliet project is designed to facilitate communication between different components of a graphical user interface (GUI) system. It encapsulates information about events related to windows, such as creation, destruction, and changes in state. The class provides a method `SendWindowEvent` that takes a pointer to a `Window` object and an event type as parameters. This method constructs a `SystemEvent` object with the necessary data and adds it to the system's event queue using the `AddEvent` function. The purpose of this component is to ensure that all GUI-related events are handled uniformly and efficiently, facilitating smooth interactions between different parts of the application. - -## Symbols - -### Namespace `Juliet` - -#### Enums -- `enum class EventType` - -#### Functions & Methods -- `extern bool SendWindowEvent(Window* window, EventType type)` - diff --git a/Romeo/docs/Juliet_src_Core_HAL_Filesystem_Win32_Win32Filesystem.md b/Romeo/docs/Juliet_src_Core_HAL_Filesystem_Win32_Win32Filesystem.md deleted file mode 100644 index bdf2658..0000000 --- a/Romeo/docs/Juliet_src_Core_HAL_Filesystem_Win32_Win32Filesystem.md +++ /dev/null @@ -1,11 +0,0 @@ -# Juliet\src\Core\HAL\Filesystem\Win32\Win32Filesystem - -## Source Files -- Source: `Juliet\src\Core\HAL\Filesystem\Win32\Win32Filesystem.cpp` - -## AI Description -The `GetBasePath` function in the provided C++ code is designed to retrieve the base path of the executable file. It allocates a buffer that can hold the module size and iteratively searches for the backslash character, which marks the end of the base path. The `IsAbsolutePath` function checks if a given string is an absolute path by verifying if it starts with either two backslashes or a disk designator followed by a colon and a backslash. This ensures that the function correctly identifies the base directory of the executable file, regardless of its location in the file system. - -## Symbols - -*No symbols detected.* diff --git a/Romeo/docs/Juliet_src_Core_HAL_IO_Win32_Win32IOStream.md b/Romeo/docs/Juliet_src_Core_HAL_IO_Win32_Win32IOStream.md deleted file mode 100644 index 81299eb..0000000 --- a/Romeo/docs/Juliet_src_Core_HAL_IO_Win32_Win32IOStream.md +++ /dev/null @@ -1,15 +0,0 @@ -# Juliet\src\Core\HAL\IO\Win32\Win32IOStream - -## Source Files -- Source: `Juliet\src\Core\HAL\IO\Win32\Win32IOStream.cpp` - -## AI Description -The `Win32IOStream.cpp` file is a C++ implementation of an I/O stream for Windows systems. It provides functionality to read from and write to files, including support for seeking within the file and handling different modes such as reading, writing, appending, and reading/writing in append mode. The class uses the Win32 API to interact with the operating system's file system, ensuring compatibility across various platforms. The implementation includes methods to open a file, read from it, write to it, seek within the file, and close the stream. The `IOFromFile` function is used to create an instance of this I/O stream interface for a given file path and mode, which can be useful in applications that require file I/O operations on Windows systems. - -## Symbols - -### Namespace `Juliet::Internal::anonymous` - -#### Classes, Structs & Unions -- `struct Win32IOStreamDataPayload` - diff --git a/Romeo/docs/Juliet_src_Core_HAL_OS_Win32_Win32OS.md b/Romeo/docs/Juliet_src_Core_HAL_OS_Win32_Win32OS.md deleted file mode 100644 index 34d8da9..0000000 --- a/Romeo/docs/Juliet_src_Core_HAL_OS_Win32_Win32OS.md +++ /dev/null @@ -1,11 +0,0 @@ -# Juliet\src\Core\HAL\OS\Win32\Win32OS - -## Source Files -- Source: `Juliet\src\Core\HAL\OS\Win32\Win32OS.cpp` - -## AI Description -This C++ component is designed to provide a high-level interface for interacting with the Windows operating system. It includes functions for memory management, debugging utilities, and handling exceptions. The `OS` class encapsulates these functionalities, providing a clean and efficient way to interact with the underlying operating system APIs. The `Internal` namespace contains implementation details that are not exposed to the public API. - -## Symbols - -*No symbols detected.* diff --git a/Romeo/docs/Juliet_src_Core_HotReload_Win32_Win32HotReload.md b/Romeo/docs/Juliet_src_Core_HotReload_Win32_Win32HotReload.md deleted file mode 100644 index ee60a7d..0000000 --- a/Romeo/docs/Juliet_src_Core_HotReload_Win32_Win32HotReload.md +++ /dev/null @@ -1,11 +0,0 @@ -# Juliet\src\Core\HotReload\Win32\Win32HotReload - -## Source Files -- Source: `Juliet\src\Core\HotReload\Win32\Win32HotReload.cpp` - -## AI Description -This C++ component is designed to manage the loading and unloading of DLL files dynamically within a Juliet application. It includes functions to load code from a specified DLL file into memory, handle errors during the process, and provide functionality to check if the loaded code needs to be reloaded based on its last write time. The component uses a transient allocator for temporary memory allocation and ensures that the DLLs are properly unloaded when they are no longer needed. - -## Symbols - -*No symbols detected.* diff --git a/Romeo/docs/Juliet_src_Core_Juliet.md b/Romeo/docs/Juliet_src_Core_Juliet.md deleted file mode 100644 index 0cc0d4a..0000000 --- a/Romeo/docs/Juliet_src_Core_Juliet.md +++ /dev/null @@ -1,11 +0,0 @@ -# Juliet\src\Core\Juliet - -## Source Files -- Source: `Juliet\src\Core\Juliet.cpp` - -## AI Description -This C++ component, `Juliet`, is designed to manage the initialization and shutdown of various systems within a classified application. It includes functionalities for initializing and shutting down display systems, as well as managing system references and ensuring proper resource management during the lifecycle of the application. The component utilizes a static array `SystemInitRefCount` to track the number of times each system has been initialized, allowing for efficient reference counting and preventing premature shutdowns. - -## Symbols - -*No symbols detected.* diff --git a/Romeo/docs/Juliet_src_Core_Math_MathRound.md b/Romeo/docs/Juliet_src_Core_Math_MathRound.md deleted file mode 100644 index 4e85a56..0000000 --- a/Romeo/docs/Juliet_src_Core_Math_MathRound.md +++ /dev/null @@ -1,15 +0,0 @@ -# Juliet\src\Core\Math\MathRound - -## Source Files -- Source: `Juliet\src\Core\Math\MathRound.cpp` - -## AI Description -The `MathRound.cpp` file in the Juliet project is a C++ implementation of the `RoundF` function, which rounds a floating-point number to the nearest integer. The function uses bitwise operations and arithmetic to achieve this rounding without using built-in functions like `std::round`. It handles special cases such as NaN (Not-a-Number), infinity, and zero separately. The `GetEps` function calculates the smallest positive floating-point number that is greater than or equal to 1, which is used in the rounding process. - -## Symbols - -### Namespace `Juliet::anonymous` - -#### Functions & Methods -- `constexpr float EPS = GetEps()` - diff --git a/Romeo/docs/Juliet_src_Core_Memory_MemoryArenaTests.md b/Romeo/docs/Juliet_src_Core_Memory_MemoryArenaTests.md deleted file mode 100644 index 6e9e294..0000000 --- a/Romeo/docs/Juliet_src_Core_Memory_MemoryArenaTests.md +++ /dev/null @@ -1,15 +0,0 @@ -# Juliet\src\Core\Memory\MemoryArenaTests - -## Source Files -- Source: `Juliet\src\Core\Memory\MemoryArenaTests.cpp` - -## AI Description -The `MemoryArenaTests.cpp` file is a test suite for the `MemoryArena` class in the Juliet project, designed to verify its functionality and performance. It includes various scenarios such as allocating and deallocating memory blocks, pushing structures into arenas, testing commit and reserve operations, and handling reallocation with buffer overflow checks. The tests ensure that the arena behaves correctly under different conditions, including managing memory efficiently and avoiding potential issues related to memory corruption. - -## Symbols - -### Namespace `Juliet::UnitTest` - -#### Classes, Structs & Unions -- `struct TestStruct` - diff --git a/Romeo/docs/Juliet_src_Core_Networking_Win32_Win32SocketPlatformImpl.md b/Romeo/docs/Juliet_src_Core_Networking_Win32_Win32SocketPlatformImpl.md deleted file mode 100644 index 9990a74..0000000 --- a/Romeo/docs/Juliet_src_Core_Networking_Win32_Win32SocketPlatformImpl.md +++ /dev/null @@ -1,29 +0,0 @@ -# Juliet\src\Core\Networking\Win32\Win32SocketPlatformImpl - -## Source Files -- Source: `Juliet\src\Core\Networking\Win32\Win32SocketPlatformImpl.cpp` - -## AI Description -The `Win32SocketPlatformImpl.cpp` file is a C++ implementation of the `SocketPlatformImpl` class, which provides platform-specific functionality for socket operations in the Juliet framework. The primary purpose of this component is to handle low-level socket operations such as creating and managing sockets, connecting to remote servers, sending and receiving data over sockets, and closing sockets. - -The design of this component includes several key functions: - -1. **CreateAddress**: This function takes an IP address and a port number as input and returns a `sockaddr_in` structure that represents the socket address in network byte order. It uses the `htonl` function to convert the host's IPv4 address to network byte order. - -2. **GetInvalidSocketHandle**: This function returns the invalid socket handle value, which is used to indicate that no valid socket has been created yet. - -3. **Close**: This function takes a socket handle as input and closes the socket using the `closesocket` function from the Windows Socket API. - -4. **GetErrorString**: This function retrieves the error string corresponding to the last Winsock2 error code using the `WSAGetLastError` function. It returns a string that describes the error, which can be useful for debugging and logging purposes. - -5. **GetErrorStatus**: This function also retrieves the error status corresponding to the last Winsock2 error code. It returns an enum value of type `Socket::Status`, which indicates whether the operation was successful or if there was an error. - -The `WSAAutoRelease` struct is used to ensure that the WinSock2 DLL is properly initialized and cleaned up when the program exits, preventing potential issues related to socket operations. - -## Symbols - -### Namespace `Juliet` - -#### Classes, Structs & Unions -- `struct WSAAutoRelease` - diff --git a/Romeo/docs/Juliet_src_Graphics_D3D12_AgilitySDK_d3dx12_d3dx12_property_format_table.md b/Romeo/docs/Juliet_src_Graphics_D3D12_AgilitySDK_d3dx12_d3dx12_property_format_table.md deleted file mode 100644 index 0ab3884..0000000 --- a/Romeo/docs/Juliet_src_Graphics_D3D12_AgilitySDK_d3dx12_d3dx12_property_format_table.md +++ /dev/null @@ -1,127 +0,0 @@ -# Juliet\src\Graphics\D3D12\AgilitySDK\d3dx12\d3dx12_property_format_table - -## Source Files -- Header: `Juliet\src\Graphics\D3D12\AgilitySDK\d3dx12\d3dx12_property_format_table.h` -- Source: `Juliet\src\Graphics\D3D12\AgilitySDK\d3dx12\d3dx12_property_format_table.cpp` - -## AI Description -The provided code snippet defines a set of constants for different DXGI (DirectX Graphics Interface) formats, including their properties such as bit depth, sRGB status, alignment requirements, and type level. These constants are used in various parts of the DirectX API to specify the format of data being processed or rendered. - -Here's a breakdown of some key points from the code: - -1. **DXGI_FORMAT**: - - This is the main enumeration that defines all possible DXGI formats. - - Each entry in this enumeration corresponds to a specific pixel format supported by Direct3D. - -2. **Cast Sets**: - - The `D3DFCS_R10G10B10A2`, `D3DFCS_BC6H`, `D3DFCS_BC7`, and `D3DFCS_AYUV` arrays define different color formats that can be used in the cast set. - - These formats are part of the DirectX 12 API and are used for advanced graphics features. - -3. **Bits Per Component**: - - The `BitsPerComponent` array specifies the number of bits per component in each channel of a format. - - For example, `D3DFCS_R32G32B32A32` has 32 bits per component for each channel. - -4. **Alignment Requirements**: - - The `WidthAlignment`, `HeightAlignment`, and `DepthAlignment` arrays specify the alignment requirements for different dimensions of a format. - - For example, `D3DFCS_R32G32B32A32` has 128 bits per element. - -5. **Layout**: - - The `Layout` field specifies the layout of the format in memory. - - For example, `D3DFC_UNKNOWN` indicates that the format is unknown or not specified. - -6. **Type Level**: - - The `TypeLevel` field specifies the type level of the format. - - For example, `D3DFTL_PARTIAL_TYPE` indicates that the format can be used for partial data types. - -7. **Component Name and Interpretation**: - - The `ComponentName` and `ComponentInterpretation` arrays specify the names and interpretations of each channel in a format. - - For example, `R`, `G`, `B`, and `A` are the names of the channels in `D3DFCS_R32G32B32A32`. - -8. **Flags**: - - The `bDX9VertexOrIndexFormat`, `bDX9TextureFormat`, `bFloatNormFormat`, `bPlanar`, `bYUV`, `bDependantFormatCastSet`, and `bInternal` fields specify various properties of the format. - - For example, `D3DFL_CUSTOM` indicates that the format is custom and not part of a standard set. - -This code snippet - -## Symbols - -### Global Scope - -#### Classes, Structs & Unions -- `struct D3D12_PROPERTY_LAYOUT_FORMAT_TABLE` -- `struct D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::FORMAT_DETAIL` - -#### Functions & Methods -- `// separate from above structure so it can be compiled out of runtime. -public: - static UINT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetNumFormats()` -- `static const FORMAT_DETAIL* D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetFormatTable()` -- `static D3D_FEATURE_LEVEL D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetHighestDefinedFeatureLevel()` -- `static DXGI_FORMAT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetFormat(SIZE_T Index)` -- `static bool D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::FormatExists(DXGI_FORMAT Format)` -- `static bool D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::FormatExistsInHeader(DXGI_FORMAT Format, bool bExternalHeader = true)` -- `static UINT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetByteAlignment(DXGI_FORMAT Format)` -- `static bool D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::IsBlockCompressFormat(DXGI_FORMAT Format)` -- `static LPCSTR D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetName(DXGI_FORMAT Format, bool bHideInternalFormats = true)` -- `static bool D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::IsSRGBFormat(DXGI_FORMAT Format)` -- `static UINT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetBitsPerStencil(DXGI_FORMAT Format)` -- `static UINT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetBitsPerDepth(DXGI_FORMAT Format)` -- `static void D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetFormatReturnTypes(DXGI_FORMAT Format, D3D_FORMAT_COMPONENT_INTERPRETATION* pInterpretations)` -- `// return array of 4 components - static UINT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetNumComponentsInFormat(DXGI_FORMAT Format)` -- `static UINT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetMinNumComponentsInFormats(DXGI_FORMAT FormatA, DXGI_FORMAT FormatB)` -- `// Converts the sequential component index (range from 0 to GetNumComponentsInFormat()) to - // the absolute component index (range 0 to 3). - static UINT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::Sequential2AbsoluteComponentIndex(DXGI_FORMAT Format, UINT SequentialComponentIndex)` -- `static bool D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::CanBeCastEvenFullyTyped(DXGI_FORMAT Format, D3D_FEATURE_LEVEL fl)` -- `static UINT8 D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetAddressingBitsPerAlignedSize(DXGI_FORMAT Format)` -- `static DXGI_FORMAT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetParentFormat(DXGI_FORMAT Format)` -- `static const DXGI_FORMAT* D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetFormatCastSet(DXGI_FORMAT Format)` -- `static D3D_FORMAT_LAYOUT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetLayout(DXGI_FORMAT Format)` -- `static D3D_FORMAT_TYPE_LEVEL D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetTypeLevel(DXGI_FORMAT Format)` -- `static UINT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetBitsPerUnit(DXGI_FORMAT Format)` -- `static UINT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetBitsPerUnitThrow(DXGI_FORMAT Format)` -- `static UINT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetBitsPerElement(DXGI_FORMAT Format)` -- `// Legacy function used to support D3D10on9 only. Do not use. - static UINT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetWidthAlignment(DXGI_FORMAT Format)` -- `static UINT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetHeightAlignment(DXGI_FORMAT Format)` -- `static UINT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetDepthAlignment(DXGI_FORMAT Format)` -- `static BOOL D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::Planar(DXGI_FORMAT Format)` -- `static BOOL D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::NonOpaquePlanar(DXGI_FORMAT Format)` -- `static BOOL D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::YUV(DXGI_FORMAT Format)` -- `static BOOL D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::Opaque(DXGI_FORMAT Format)` -- `static bool D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::FamilySupportsStencil(DXGI_FORMAT Format)` -- `static UINT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::NonOpaquePlaneCount(DXGI_FORMAT Format)` -- `static BOOL D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::DX9VertexOrIndexFormat(DXGI_FORMAT Format)` -- `static BOOL D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::DX9TextureFormat(DXGI_FORMAT Format)` -- `static BOOL D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::FloatNormTextureFormat(DXGI_FORMAT Format)` -- `static bool D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::DepthOnlyFormat(DXGI_FORMAT format)` -- `static UINT8 D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetPlaneCount(DXGI_FORMAT Format)` -- `static bool D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::MotionEstimatorAllowedInputFormat(DXGI_FORMAT Format)` -- `static bool D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::SupportsSamplerFeedback(DXGI_FORMAT Format)` -- `static bool D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::DecodeHistogramAllowedForOutputFormatSupport(DXGI_FORMAT Format)` -- `static UINT8 D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetPlaneSliceFromViewFormat(DXGI_FORMAT ResourceFormat, DXGI_FORMAT ViewFormat)` -- `static bool D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::FloatAndNotFloatFormats(DXGI_FORMAT FormatA, DXGI_FORMAT FormatB)` -- `static bool D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::SNORMAndUNORMFormats(DXGI_FORMAT FormatA, DXGI_FORMAT FormatB)` -- `static bool D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::ValidCastToR32UAV(DXGI_FORMAT from, DXGI_FORMAT to)` -- `static bool D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::IsSupportedTextureDisplayableFormat(DXGI_FORMAT, bool bMediaFormatOnly)` -- `static D3D_FORMAT_COMPONENT_INTERPRETATION D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetFormatComponentInterpretation(DXGI_FORMAT Format, UINT AbsoluteComponentIndex)` -- `static UINT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetBitsPerComponent(DXGI_FORMAT Format, UINT AbsoluteComponentIndex)` -- `static D3D_FORMAT_COMPONENT_NAME D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetComponentName(DXGI_FORMAT Format, UINT AbsoluteComponentIndex)` -- `static HRESULT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::CalculateExtraPlanarRows(DXGI_FORMAT format, UINT plane0Height, _Out_ UINT& totalHeight)` -- `static HRESULT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::CalculateMinimumRowMajorRowPitch(DXGI_FORMAT Format, UINT Width, _Out_ UINT& RowPitch)` -- `static HRESULT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::CalculateMinimumRowMajorSlicePitch(DXGI_FORMAT Format, UINT ContextBasedRowPitch, UINT Height, _Out_ UINT& SlicePitch)` -- `static void D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetYCbCrChromaSubsampling(DXGI_FORMAT Format, _Out_ UINT& HorizontalSubsampling, _Out_ UINT& VerticalSubsampling)` -- `static HRESULT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::CalculateResourceSize(UINT width, UINT height, UINT depth, DXGI_FORMAT format, UINT mipLevels, UINT subresources, _Out_ SIZE_T& totalByteSize, _Out_writes_opt_(subresources) D3D12_MEMCPY_DEST* pDst = nullptr)` -- `static void D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetTileShape(D3D12_TILE_SHAPE* pTileShape, DXGI_FORMAT Format, D3D12_RESOURCE_DIMENSION Dimension, UINT SampleCount)` -- `static void D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::Get4KTileShape(D3D12_TILE_SHAPE* pTileShape, DXGI_FORMAT Format, D3D12_RESOURCE_DIMENSION Dimension, UINT SampleCount)` -- `static void D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetMipDimensions(UINT8 mipSlice, _Inout_ UINT64* pWidth, _Inout_opt_ UINT64* pHeight = nullptr, _Inout_opt_ UINT64* pDepth = nullptr)` -- `static void D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetPlaneSubsampledSizeAndFormatForCopyableLayout(UINT PlaneSlice, DXGI_FORMAT Format, UINT Width, UINT Height, _Out_ DXGI_FORMAT& PlaneFormat, _Out_ UINT& MinPlanePitchWidth, _Out_ UINT& PlaneWidth, _Out_ UINT& PlaneHeight)` -- `static UINT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetDetailTableIndex(DXGI_FORMAT Format)` -- `static UINT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetDetailTableIndexNoThrow(DXGI_FORMAT Format)` -- `static UINT D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetDetailTableIndexThrow(DXGI_FORMAT Format)` -- `static bool D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::SupportsDepth(DXGI_FORMAT Format)` -- `static bool D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::SupportsStencil(DXGI_FORMAT Format)` -- `private: - static const FORMAT_DETAIL* D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetFormatDetail(DXGI_FORMAT Format)` - diff --git a/Romeo/docs/Juliet_src_Graphics_D3D12_D3D12Buffer.md b/Romeo/docs/Juliet_src_Graphics_D3D12_D3D12Buffer.md deleted file mode 100644 index d30eb38..0000000 --- a/Romeo/docs/Juliet_src_Graphics_D3D12_D3D12Buffer.md +++ /dev/null @@ -1,28 +0,0 @@ -# Juliet\src\Graphics\D3D12\D3D12Buffer - -## Source Files -- Header: `Juliet\src\Graphics\D3D12\D3D12Buffer.h` -- Source: `Juliet\src\Graphics\D3D12\D3D12Buffer.cpp` - -## AI Description -The `D3D12Buffer` class in the provided C++ component is designed to manage DirectX 12 buffers efficiently. It encapsulates various aspects of buffer creation, management, and operations such as mapping, unmapping, copying, and transitioning between states. The class uses a bindless descriptor heap for constant buffers and structured buffers, which allows for efficient resource management and access. The `CreateGraphicsBuffer` function is used to create a base buffer, while the `CreateGraphicsTransferBuffer` function creates transfer buffers for upload and download operations. The `DestroyGraphicsBuffer` function ensures proper cleanup of resources when they are no longer needed. - -## Symbols - -### Namespace `Juliet::D3D12` - -#### Classes, Structs & Unions -- `struct D3D12Buffer` - -#### Functions & Methods -- `extern GraphicsBuffer* CreateGraphicsBuffer(NonNullPtr driver, size_t size, size_t stride, BufferUsage usage, bool isDynamic)` -- `extern void DestroyGraphicsBuffer(NonNullPtr buffer)` -- `extern GraphicsTransferBuffer* CreateGraphicsTransferBuffer(NonNullPtr driver, size_t size, TransferBufferUsage usage)` -- `extern void DestroyGraphicsTransferBuffer(NonNullPtr buffer)` -- `extern void* MapBuffer(NonNullPtr driver, NonNullPtr buffer)` -- `extern void UnmapBuffer(NonNullPtr driver, NonNullPtr buffer)` -- `extern uint32 GetDescriptorIndex(NonNullPtr driver, NonNullPtr buffer)` -- `extern void CopyBuffer(NonNullPtr commandList, NonNullPtr dst, - NonNullPtr src, size_t size, size_t dstOffset, size_t srcOffset)` -- `extern void TransitionBufferToReadable(NonNullPtr commandList, NonNullPtr buffer)` - diff --git a/Romeo/docs/Juliet_src_Graphics_D3D12_D3D12CommandList.md b/Romeo/docs/Juliet_src_Graphics_D3D12_D3D12CommandList.md deleted file mode 100644 index 258679a..0000000 --- a/Romeo/docs/Juliet_src_Graphics_D3D12_D3D12CommandList.md +++ /dev/null @@ -1,76 +0,0 @@ -# Juliet\src\Graphics\D3D12\D3D12CommandList - -## Source Files -- Header: `Juliet\src\Graphics\D3D12\D3D12CommandList.h` -- Source: `Juliet\src\Graphics\D3D12\D3D12CommandList.cpp` - -## AI Description -The provided code snippet is a part of a graphics rendering engine, specifically designed for DirectX 12. It includes functions to manage and execute commands in a graphics pipeline. The `ExecuteCommandLists` function is responsible for submitting multiple command lists to the GPU for execution. Here's a breakdown of what this function does: - -### Function Overview -- **Submit Command Lists**: This function takes an array of `NonNullPtr?CommandList?` objects, each representing a command list that needs to be executed. -- **Inflight Fence**: It checks if any of the command lists are currently in flight (i.e., they have been submitted but not yet completed). -- **Signal Fence**: If a command list is not in flight, it signals the fence associated with that command list. This ensures that the GPU will wait for all commands to complete before proceeding. -- **Submit Command List**: It marks the command list as submitted by incrementing a counter and storing the handle of the fence in the `InFlightFences` array. -- **Present Data**: For each present operation, it sets up the swap chain texture container and updates the fence reference count. -- **Cleanups**: It checks for cleanups by comparing the completed value of the fence with the signal value. If they match, it cleanses the command list. -- **Index Buffer**: It sets the index buffer for rendering operations. -- **Push Constants**: It sets push constants for shaders. -- **Descriptor Heaps**: It ensures that descriptor heaps are properly set up before executing commands. - -### Key Points -1. **Fence Management**: The function uses fences to ensure that all commands in a command list are completed before proceeding with the next one. -2. **Resource Barriers**: It handles resource barriers to transition resources between states (e.g., from `GENERIC_READ` to `INDEX_BUFFER`). -3. **Descriptor Heaps**: It ensures that descriptor heaps are properly managed and reused. -4. **Push Constants**: It sets push constants for shaders, which are used in vertex shader stages. - -### Usage -To use this function, you would typically create an instance of `D3D12CommandList`, populate it with commands such as drawing primitives, setting viewports, scissor rectangles, and more, and then call `ExecuteCommandLists` to submit the command list for execution. - -```cpp -// Create a command list -NonNullPtr?CommandList? commandList = Internal::CreateCommandList(d3d12Driver); - -// Populate the command list with commands -Internal::SetViewPort(commandList, viewPort); -Internal::SetIndexBuffer(commandList, indexBuffer, IndexFormat::UInt16, indexCount, offset); - -// Execute the command list -bool success = Internal::ExecuteCommandLists(d3d12Driver, ?commandList); -``` - -This setup ensures that all commands in a command list are executed efficiently and correctly, leveraging DirectX 12's features for efficient resource management and - -## Symbols - -### Namespace `Juliet::D3D12` - -#### Classes, Structs & Unions -- `struct D3D12CommandListBaseData` -- `struct D3D12CopyCommandListData` -- `struct D3D12GraphicsCommandListData` -- `struct D3D12PresentData` -- `struct D3D12CommandList` - -#### Functions & Methods -- `extern CommandList* AcquireCommandList(NonNullPtr driver, QueueType queueType)` -- `extern bool SubmitCommandLists(NonNullPtr commandList)` -- `extern void SetViewPort(NonNullPtr commandList, const GraphicsViewPort& viewPort)` -- `extern void SetScissorRect(NonNullPtr commandList, const Rectangle& rectangle)` -- `extern void SetBlendConstants(NonNullPtr commandList, FColor blendConstants)` -- `extern void SetBlendConstants(NonNullPtr commandList, FColor blendConstants)` -- `extern void SetStencilReference(NonNullPtr commandList, uint8 reference)` -- `extern void SetIndexBuffer(NonNullPtr commandList, NonNullPtr buffer, - IndexFormat format, size_t indexCount, index_t offset)` -- `extern void SetPushConstants(NonNullPtr commandList, ShaderStage stage, uint32 rootParameterIndex, - uint32 numConstants, const void* constants)` - -### Namespace `Juliet::D3D12::Internal` - -#### Functions & Methods -- `extern void SetDescriptorHeaps(NonNullPtr commandList)` -- `extern void DestroyCommandList(NonNullPtr commandList)` -- `extern bool CleanCommandList(NonNullPtr driver, NonNullPtr commandList, bool cancel)` -- `extern void TrackGraphicsPipeline(NonNullPtr commandList, NonNullPtr pipeline)` -- `extern void TrackTexture(NonNullPtr commandList, NonNullPtr texture)` - diff --git a/Romeo/docs/Juliet_src_Graphics_D3D12_D3D12Common.md b/Romeo/docs/Juliet_src_Graphics_D3D12_D3D12Common.md deleted file mode 100644 index c7b0d80..0000000 --- a/Romeo/docs/Juliet_src_Graphics_D3D12_D3D12Common.md +++ /dev/null @@ -1,26 +0,0 @@ -# Juliet\src\Graphics\D3D12\D3D12Common - -## Source Files -- Header: `Juliet\src\Graphics\D3D12\D3D12Common.h` -- Source: `Juliet\src\Graphics\D3D12\D3D12Common.cpp` - -## AI Description -The `D3D12StagingDescriptorPool` class in the provided C++ component is designed to manage a pool of staging descriptors for Direct3D 12. It uses an arena-based memory allocator to efficiently allocate and deallocate descriptor handles, ensuring that resources are managed efficiently without fragmentation. The pool supports creating new heaps as needed when the existing ones run out of free descriptors. This class is crucial for transferring data between CPU and GPU in a high-performance graphics application using Direct3D 12. - -## Symbols - -### Namespace `Juliet::D3D12` - -#### Classes, Structs & Unions -- `struct D3D12StagingDescriptorPool` -- `struct D3D12StagingDescriptor` - -### Namespace `Juliet::D3D12::Internal` - -#### Functions & Methods -- `extern D3D12StagingDescriptorPool* CreateStagingDescriptorPool(NonNullPtr driver, D3D12_DESCRIPTOR_HEAP_TYPE type)` -- `extern bool AssignStagingDescriptor(NonNullPtr driver, D3D12_DESCRIPTOR_HEAP_TYPE type, - D3D12StagingDescriptor& outDescriptor)` -- `extern void ReleaseStagingDescriptor(NonNullPtr driver, D3D12StagingDescriptor& cpuDescriptor)` -- `extern void DestroyStagingDescriptorPool(NonNullPtr pool)` - diff --git a/Romeo/docs/Juliet_src_Graphics_D3D12_D3D12DescriptorHeap.md b/Romeo/docs/Juliet_src_Graphics_D3D12_D3D12DescriptorHeap.md deleted file mode 100644 index c1907cf..0000000 --- a/Romeo/docs/Juliet_src_Graphics_D3D12_D3D12DescriptorHeap.md +++ /dev/null @@ -1,30 +0,0 @@ -# Juliet\src\Graphics\D3D12\D3D12DescriptorHeap - -## Source Files -- Header: `Juliet\src\Graphics\D3D12\D3D12DescriptorHeap.h` -- Source: `Juliet\src\Graphics\D3D12\D3D12DescriptorHeap.cpp` - -## AI Description -This C++ component is designed to manage descriptor heaps in a DirectX 12 graphics environment. It includes functions for creating, destroying, and managing descriptor heaps, including CPU and GPU heaps. The component uses an arena-based memory allocator to efficiently allocate and deallocate descriptors, ensuring that the heap management is both efficient and easy to use. The component also provides functions for acquiring and releasing sampler heaps from a pool, which helps in optimizing resource usage by reusing descriptor heaps. - -## Symbols - -### Namespace `Juliet::D3D12::Internal` - -#### Classes, Structs & Unions -- `struct D3D12DescriptorHeap` -- `struct D3D12Descriptor` -- `struct D3D12DescriptorHeapPool` - -#### Functions & Methods -- `extern void CreateDescriptorHeapPool(NonNullPtr driver, D3D12DescriptorHeapPool& heapPool, - D3D12_DESCRIPTOR_HEAP_TYPE type, uint32 count)` -- `extern void DestroyDescriptorHeapPool(D3D12DescriptorHeapPool& pool)` -- `extern D3D12DescriptorHeap* CreateDescriptorHeap(NonNullPtr driver, NonNullPtr arena, - D3D12_DESCRIPTOR_HEAP_TYPE type, uint32 count, bool isStaging)` -- `extern void DestroyDescriptorHeap(NonNullPtr heap)` -- `extern D3D12DescriptorHeap* AcquireSamplerHeapFromPool(NonNullPtr d3d12Driver)` -- `extern void ReturnSamplerHeapToPool(NonNullPtr d3d12Driver, NonNullPtr heap)` -- `extern bool AssignDescriptor(D3D12DescriptorHeap* heap, D3D12Descriptor& outDescriptor)` -- `extern void ReleaseDescriptor(const D3D12Descriptor& descriptor)` - diff --git a/Romeo/docs/Juliet_src_Graphics_D3D12_D3D12GraphicsDevice.md b/Romeo/docs/Juliet_src_Graphics_D3D12_D3D12GraphicsDevice.md deleted file mode 100644 index e9395c3..0000000 --- a/Romeo/docs/Juliet_src_Graphics_D3D12_D3D12GraphicsDevice.md +++ /dev/null @@ -1,48 +0,0 @@ -# Juliet\src\Graphics\D3D12\D3D12GraphicsDevice - -## Source Files -- Header: `Juliet\src\Graphics\D3D12\D3D12GraphicsDevice.h` -- Source: `Juliet\src\Graphics\D3D12\D3D12GraphicsDevice.cpp` - -## AI Description -The provided code snippet is a part of a graphics driver implementation for DirectX 12. It includes functions to initialize and shutdown debugging features for the graphics device. The `InitializeDXGIDebug` function sets up the debug interface for DXGI (DirectX Graphics Infrastructure), while the `InitializeD3D12DebugLayer` function enables the debug layer in D3D12. - -The `OnD3D12DebugInfoMsg` callback function is used to handle debug messages generated by the graphics driver. It logs these messages at different severity levels, such as ERROR and WARNING, using the `LogWarning` function from the `Log` module. - -Here's a breakdown of the key functions and their functionalities: - -1. **InitializeDXGIDebug**: - - Loads the DXGI debug DLL. - - Retrieves the IDXGIDebug interface. - - Sets up the break-on-severity for different message severities. - - Reports live objects to the debug interface. - -2. **ShutdownDXGIDebug**: - - Releases the IDXGIDebug interface and the debug DLL. - -3. **InitializeD3D12DebugLayer**: - - Retrieves the ID3D12Debug interface using `D3D12GetDebugInterfaceFunc`. - - Enables the debug layer in D3D12. - -4. **OnD3D12DebugInfoMsg**: - - Registers a message callback for handling debug messages. - - Logs debug messages at different severity levels. - -This setup is crucial for debugging issues related to DirectX 12, such as resource management, shader compilation, and execution errors. - -## Symbols - -### Namespace `Juliet::D3D12` - -#### Classes, Structs & Unions -- `struct D3D12WindowData` -- `struct D3D12Driver` - -#### Enums -- `enum class RootParameters` - -### Namespace `Juliet::D3D12::Internal` - -#### Functions & Methods -- `void DisposePendingResourcces(NonNullPtr driver)` - diff --git a/Romeo/docs/Juliet_src_Graphics_D3D12_D3D12GraphicsPipeline.md b/Romeo/docs/Juliet_src_Graphics_D3D12_D3D12GraphicsPipeline.md deleted file mode 100644 index 4ddc009..0000000 --- a/Romeo/docs/Juliet_src_Graphics_D3D12_D3D12GraphicsPipeline.md +++ /dev/null @@ -1,50 +0,0 @@ -# Juliet\src\Graphics\D3D12\D3D12GraphicsPipeline - -## Source Files -- Header: `Juliet\src\Graphics\D3D12\D3D12GraphicsPipeline.h` -- Source: `Juliet\src\Graphics\D3D12\D3D12GraphicsPipeline.cpp` - -## AI Description -The provided code snippet is a part of a graphics rendering system, specifically for creating and managing graphics pipelines in a DirectX 12 environment. The `CreateGraphicsPipeline` function takes a `GPUDriver` object and a `GraphicsPipelineCreateInfo` structure as input parameters and returns a pointer to the created `GraphicsPipeline`. This pipeline is responsible for handling vertex and fragment shaders, rasterization, blending, depth/stencil operations, and other rendering states. - -Here's a breakdown of the key components and functionalities: - -1. **Shader Conversion**: The function converts the provided vertex and fragment shaders from their Juliet shader format to DirectX 12 shader bytecode. This involves copying the shader data and patching it back after overwriting the bytecode if necessary. - -2. **Rasterizer State**: The rasterizer state is converted from a `GraphicsPipelineCreateInfo` structure to a `D3D12_RASTERIZER_DESC`. This includes settings such as line width, fill mode, depth testing, stencil testing, etc. - -3. **Blend State**: Similar to the rasterizer state, the blend state is converted from a `GraphicsPipelineCreateInfo` structure to a `D3D12_BLEND_STATE`. This involves setting up blending factors, operations, and write masks for different color channels. - -4. **Depth Stencil State**: The depth stencil state is also converted from a `GraphicsPipelineCreateInfo` structure to a `D3D12_DEPTH_STENCIL_DESC`. This includes settings such as depth enable, write mask, depth function, stencil enable, stencil read/write masks, and stencil operations. - -5. **Pipeline Creation**: After converting all the necessary states, the pipeline state is created using the DirectX 12 device's `CreateGraphicsPipelineState` method. The resulting pipeline state is stored in the `GraphicsPipeline` object. - -6. **Vertex Strides**: The function also sets up vertex strides for each vertex buffer description in the `GraphicsPipelineCreateInfo`. This helps in determining how much data to read from each vertex buffer when rendering. - -7. **Primitive Type**: The primitive type of the pipeline is set based on the provided `GraphicsPipelineCreateInfo`. - -8. **Root Signature**: The root signature is bound to the pipeline using the `BindlessRootSignature` object, which likely contains the necessary shader resources and parameters. - -9. **Memory Management**: The function handles memory allocation for the `GraphicsPipeline` object and its associated resources such as shaders, vertex buffers, and render targets. - -This code snippet is crucial for setting up the rendering pipeline in a DirectX 12 application, ensuring that the graphics are rendered correctly according to the specified requirements. - -## Symbols - -### Namespace `Juliet::D3D12` - -#### Classes, Structs & Unions -- `struct D3D12GraphicsRootSignature` -- `struct D3D12GraphicsPipeline` - -#### Functions & Methods -- `extern GraphicsPipeline* CreateGraphicsPipeline(NonNullPtr driver, const GraphicsPipelineCreateInfo& createInfo)` -- `extern void DestroyGraphicsPipeline(NonNullPtr driver, NonNullPtr graphicsPipeline)` -- `extern bool UpdateGraphicsPipelineShaders(NonNullPtr driver, NonNullPtr graphicsPipeline, - Shader* optional_vertexShader, Shader* optional_fragmentShader)` - -### Namespace `Juliet::D3D12::Internal` - -#### Functions & Methods -- `extern void ReleaseGraphicsPipeline(NonNullPtr d3d12GraphicsPipeline)` - diff --git a/Romeo/docs/Juliet_src_Graphics_D3D12_D3D12InternalTests.md b/Romeo/docs/Juliet_src_Graphics_D3D12_D3D12InternalTests.md deleted file mode 100644 index cf92e67..0000000 --- a/Romeo/docs/Juliet_src_Graphics_D3D12_D3D12InternalTests.md +++ /dev/null @@ -1,12 +0,0 @@ -# Juliet\src\Graphics\D3D12\D3D12InternalTests - -## Source Files -- Header: `Juliet\src\Graphics\D3D12\D3D12InternalTests.h` -- Source: `Juliet\src\Graphics\D3D12\D3D12InternalTests.cpp` - -## AI Description -The `D3D12InternalTests.h` header file serves as a testing framework for the D3D12 graphics device in the Juliet engine. It includes necessary headers and namespaces to facilitate the creation of test cases that validate the functionality of the D3D12 graphics device within the engine. The `D3D12InternalTests.cpp` source file contains the implementation of these tests, ensuring that the D3D12 graphics device operates correctly under various conditions. - -## Symbols - -*No symbols detected.* diff --git a/Romeo/docs/Juliet_src_Graphics_D3D12_D3D12RenderPass.md b/Romeo/docs/Juliet_src_Graphics_D3D12_D3D12RenderPass.md deleted file mode 100644 index fe9e55a..0000000 --- a/Romeo/docs/Juliet_src_Graphics_D3D12_D3D12RenderPass.md +++ /dev/null @@ -1,23 +0,0 @@ -# Juliet\src\Graphics\D3D12\D3D12RenderPass - -## Source Files -- Header: `Juliet\src\Graphics\D3D12\D3D12RenderPass.h` -- Source: `Juliet\src\Graphics\D3D12\D3D12RenderPass.cpp` - -## AI Description -This C++ component is designed to manage the rendering process in a DirectX 12 graphics application. It provides functions to begin and end a render pass, bind a graphics pipeline, draw primitives, and resolve color textures if necessary. The class encapsulates the logic for setting up the render target, depth stencil, and primitive topology, as well as managing vertex and fragment shaders. The component also handles resource management and synchronization between different stages of the rendering pipeline. - -## Symbols - -### Namespace `Juliet::D3D12` - -#### Functions & Methods -- `extern void BeginRenderPass(NonNullPtr commandList, NonNullPtr colorTargetInfos, - uint32 colorTargetInfoCount, const DepthStencilTargetInfo* depthStencilTargetInfo)` -- `extern void EndRenderPass(NonNullPtr commandList)` -- `extern void BindGraphicsPipeline(NonNullPtr commandList, NonNullPtr graphicsPipeline)` -- `extern void DrawPrimitives(NonNullPtr commandList, uint32 numVertices, uint32 numInstances, - uint32 firstVertex, uint32 firstInstance)` -- `void DrawIndexedPrimitives(NonNullPtr commandList, uint32 numIndices, uint32 numInstances, - uint32 firstIndex, uint32 vertexOffset, uint32 firstInstance)` - diff --git a/Romeo/docs/Juliet_src_Graphics_D3D12_D3D12Shader.md b/Romeo/docs/Juliet_src_Graphics_D3D12_D3D12Shader.md deleted file mode 100644 index 44c5a8e..0000000 --- a/Romeo/docs/Juliet_src_Graphics_D3D12_D3D12Shader.md +++ /dev/null @@ -1,20 +0,0 @@ -# Juliet\src\Graphics\D3D12\D3D12Shader - -## Source Files -- Header: `Juliet\src\Graphics\D3D12\D3D12Shader.h` -- Source: `Juliet\src\Graphics\D3D12\D3D12Shader.cpp` - -## AI Description -The `D3D12Shader` class in the provided C++ component is designed to encapsulate a shader program for use with Direct3D 12. It includes a ByteBuffer to store the shader bytecode and metadata about its components such as samplers, uniform buffers, storage buffers, and storage textures. The class provides methods to create and destroy shader objects, ensuring that memory management and error handling are handled properly. - -## Symbols - -### Namespace `Juliet::D3D12` - -#### Classes, Structs & Unions -- `struct D3D12Shader` - -#### Functions & Methods -- `extern Shader* CreateShader(NonNullPtr driver, ByteBuffer shaderByteCode, ShaderCreateInfo& shaderCreateInfo)` -- `extern void DestroyShader(NonNullPtr driver, NonNullPtr shader)` - diff --git a/Romeo/docs/Juliet_src_Graphics_D3D12_D3D12SwapChain.md b/Romeo/docs/Juliet_src_Graphics_D3D12_D3D12SwapChain.md deleted file mode 100644 index 90dfa25..0000000 --- a/Romeo/docs/Juliet_src_Graphics_D3D12_D3D12SwapChain.md +++ /dev/null @@ -1,80 +0,0 @@ -# Juliet\src\Graphics\D3D12\D3D12SwapChain - -## Source Files -- Header: `Juliet\src\Graphics\D3D12\D3D12SwapChain.h` -- Source: `Juliet\src\Graphics\D3D12\D3D12SwapChain.cpp` - -## AI Description -This code snippet is a part of a graphics driver for the Juliet operating system, specifically designed to handle DirectX 12 graphics. It includes functions for creating and managing swapchains, as well as acquiring and releasing textures from these swapchains. - -Here's a breakdown of what each function does: - -### `AcquireSwapChainTexture` - -This function is responsible for acquiring a texture from the swapchain. It takes a command list, a window, and a pointer to a texture pointer. The function first checks if there are any pending fences that need to be waited on before acquiring the texture. If so, it waits for those fences. - -Then, it creates a presentation barrier to transition the resource state from `D3D12_RESOURCE_STATE_PRESENT` to `D3D12_RESOURCE_STATE_RENDER_TARGET`. After setting up the barrier, it retrieves the swapchain texture container and acquires the active texture. - -Finally, it returns the acquired texture pointer. - -### `WaitAndAcquireSwapChainTexture` - -This function is similar to `AcquireSwapChainTexture`, but it waits for a fence before acquiring the texture. This can be useful in scenarios where you need to ensure that certain operations are completed before proceeding with rendering. - -### `WaitForSwapchain` - -This function waits for the current frame to complete by checking if there are any pending fences. It then returns true if the wait was successful, otherwise false. - -### `GetSwapChainTextureFormat` - -This function retrieves the format of the swapchain texture based on the specified composition and present mode. - -### `Internal::CreateSwapChain` - -This is a private helper function that creates a swapchain for a given window and composition. It initializes the swapchain descriptor, queries the parent factory to make the window association, and then creates the swapchain object. - -### `Internal::DestroySwapChain` - -This is another private helper function that destroys the swapchain and frees all associated resources. - -### Usage - -To use this code, you would typically create a `D3D12Driver` object and pass it to the functions. You would also need to handle the window state and synchronization mechanisms for your application. - -```cpp -// Create a D3D12 driver instance -auto driver = new Juliet::D3D12Driver(); - -// Create a swapchain for a window -NonNullPtr?Window? window = ...; // Initialize your window object -SwapChainComposition composition = SwapChainComposition::SDR; -PresentMode presentMode = PresentMode::FIFO; -if (!Internal::CreateSwapChain(driver, windowData, composition, presentMode)) -{ - LogError(LogCategory::Graphics, "Failed to create swapchain"); -} - -// Acquire a texture from the swapchain -NonNullPtr?CommandList? commandList = ...; // Initialize your command list object -Texture* swapChainTexture; -if (!AcquireSwapChainTexture(commandList, window, ?swapChainTexture)) -{ - LogError(LogCategory::Graphics, "Failed - -## Symbols - -### Namespace `Juliet::D3D12` - -#### Functions & Methods -- `extern bool AcquireSwapChainTexture(NonNullPtr commandList, NonNullPtr window, Texture** swapChainTexture)` -- `extern bool WaitAndAcquireSwapChainTexture(NonNullPtr commandList, NonNullPtr window, Texture** swapChainTexture)` -- `extern bool WaitForSwapchain(NonNullPtr driver, NonNullPtr window)` -- `extern TextureFormat GetSwapChainTextureFormat(NonNullPtr driver, NonNullPtr window)` - -### Namespace `Juliet::D3D12::Internal` - -#### Functions & Methods -- `extern bool CreateSwapChain(NonNullPtr driver, NonNullPtr windowData, - SwapChainComposition composition, PresentMode presentMode)` -- `extern void DestroySwapChain(NonNullPtr driver, NonNullPtr windowData)` - diff --git a/Romeo/docs/Juliet_src_Graphics_D3D12_D3D12Synchronization.md b/Romeo/docs/Juliet_src_Graphics_D3D12_D3D12Synchronization.md deleted file mode 100644 index 31d4de7..0000000 --- a/Romeo/docs/Juliet_src_Graphics_D3D12_D3D12Synchronization.md +++ /dev/null @@ -1,32 +0,0 @@ -# Juliet\src\Graphics\D3D12\D3D12Synchronization - -## Source Files -- Header: `Juliet\src\Graphics\D3D12\D3D12Synchronization.h` -- Source: `Juliet\src\Graphics\D3D12\D3D12Synchronization.cpp` - -## AI Description -This C++ component provides synchronization primitives for managing GPU operations in a DirectX 12 environment. It includes functions to wait until the GPU is idle, wait for multiple fences, query fence values, and release fences. The implementation uses a pool of available fences to efficiently manage resources and ensure that commands are executed on the correct GPU. - -## Symbols - -### Namespace `Juliet::D3D12` - -#### Classes, Structs & Unions -- `struct D3D12Fence` - -#### Functions & Methods -- `extern bool WaitUntilGPUIsIdle(NonNullPtr driver)` -- `extern bool Wait(NonNullPtr driver, bool waitForAll, Fence* const* fences, - uint32 numFences JULIET_DEBUG_PARAM(String querier))` -- `extern bool QueryFence(NonNullPtr driver, NonNullPtr fence)` -- `extern void ReleaseFence(NonNullPtr driver, NonNullPtr fence JULIET_DEBUG_PARAM(String querier))` - -### Namespace `Juliet::D3D12::Internal` - -#### Functions & Methods -- `extern void ResourceBarrier(NonNullPtr commandList, D3D12_RESOURCE_STATES sourceState, - D3D12_RESOURCE_STATES destinationState, ID3D12Resource* resource, - uint32 subresourceIndex, bool needsUavBarrier)` -- `extern D3D12Fence* AcquireFence(NonNullPtr driver JULIET_DEBUG_PARAM(String querier))` -- `extern void DestroyFence(NonNullPtr fence)` - diff --git a/Romeo/docs/Juliet_src_Graphics_D3D12_D3D12Texture.md b/Romeo/docs/Juliet_src_Graphics_D3D12_D3D12Texture.md deleted file mode 100644 index adc827a..0000000 --- a/Romeo/docs/Juliet_src_Graphics_D3D12_D3D12Texture.md +++ /dev/null @@ -1,96 +0,0 @@ -# Juliet\src\Graphics\D3D12\D3D12Texture - -## Source Files -- Header: `Juliet\src\Graphics\D3D12\D3D12Texture.h` -- Source: `Juliet\src\Graphics\D3D12\D3D12Texture.cpp` - -## AI Description -It looks like you're working with a graphics library that handles DirectX 12 resources, specifically textures. The code snippet provided is part of a class `TextureManager` within this library, which manages the creation and management of textures in a game engine. - -Here's a breakdown of what the code does: - -### Texture Management - -1. **Texture Formats**: - - The `JulietToD3D12_DepthFormat` array maps Juliet texture formats to their corresponding D3D12 depth formats. - - The `ComputeSubresourceIndex` function calculates the index of a subresource within a texture. - -2. **Resource States**: - - The `GetDefaultTextureResourceState` function determines the default resource state based on the usage flags of the texture. - - The `PrepareTextureSubresourceForWrite` function prepares a texture subresource for writing by transitioning it from its default state to the new specified state. - -3. **Fetching Subresources**: - - The `FetchTextureSubresource` function retrieves a specific subresource from a texture container. - -4. **Resource Barriers**: - - The `TextureSubresourceBarrier` function applies a resource barrier to transition between different resource states. - - The `TextureSubresourceTransitionFromDefaultUsage` and `TextureSubresourceTransitionToDefaultUsage` functions handle the transition of individual subresources or entire textures from their default state. - -### Usage - -- **Prepare Texture Subresource for Write**: This function prepares a texture subresource for writing by transitioning it to the specified usage state. -- **Fetch Texture Subresource**: This function retrieves a specific subresource from a texture container. -- **Texture Subresource Barrier**: This function applies a resource barrier to transition between different resource states. - -### Example Usage - -Here's an example of how you might use these functions in a game engine: - -```cpp -NonNullPtr?D3D12CommandList? commandList = ...; // Get the command list -NonNullPtr?D3D12TextureContainer? container = ...; // Get the texture container - -// Prepare a texture subresource for writing -NonNullPtr?D3D12TextureSubresource? subresource = Internal::PrepareTextureSubresourceForWrite(commandList, container, 0, 0, true, D3D12_RESOURCE_STATE_RENDER_TARGET); - -// Fetch a specific subresource from the texture container -NonNullPtr?D3D12TextureSubresource? fetchedSubresource = Internal::FetchTextureSubresource(container, 0, 0); - -// Apply a resource barrier to transition the subresource to render target state -Internal::TextureSubresourceBarrier(commandList, D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_UNORDERED_ACCESS, fetchedSubresource); -``` - -This code snippet demonstrates how to prepare and manage texture resources in a game engine using DirectX 12. - -## Symbols - -### Namespace `Juliet::D3D12` - -#### Classes, Structs & Unions -- `struct D3D12TextureContainer` -- `struct D3D12TextureSubresource` -- `struct D3D12Texture` - -#### Functions & Methods -- `// namespace Internal - - extern Texture* CreateTexture(NonNullPtr driver, const TextureCreateInfo& createInfo)` -- `extern void DestroyTexture(NonNullPtr driver, NonNullPtr texture)` - -### Namespace `Juliet::D3D12::Internal` - -#### Functions & Methods -- `extern D3D12TextureSubresource* PrepareTextureSubresourceForWrite(NonNullPtr, - NonNullPtr container, - uint32 layer, uint32 level, bool shouldCycle, - D3D12_RESOURCE_STATES newTextureUsage)` -- `extern D3D12TextureSubresource* FetchTextureSubresource(NonNullPtr container, - uint32 layer, uint32 level)` -- `extern void TextureSubresourceBarrier(NonNullPtr commandList, - D3D12_RESOURCE_STATES sourceState, D3D12_RESOURCE_STATES destinationState, - NonNullPtr textureSubresource)` -- `// Texture usage transition - extern void TextureSubresourceTransitionFromDefaultUsage(NonNullPtr commandList, - NonNullPtr subresource, - D3D12_RESOURCE_STATES toTextureUsage)` -- `extern void TextureTransitionFromDefaultUsage(NonNullPtr commandList, - NonNullPtr texture, D3D12_RESOURCE_STATES toTextureUsage)` -- `extern void TextureSubresourceTransitionToDefaultUsage(NonNullPtr commandList, - NonNullPtr subresource, - D3D12_RESOURCE_STATES fromTextureUsage)` -- `extern void TextureTransitionToDefaultUsage(NonNullPtr commandList, NonNullPtr texture, - D3D12_RESOURCE_STATES fromTextureUsage)` -- `// Utils - extern DXGI_FORMAT ConvertToD3D12TextureFormat(TextureFormat format)` -- `extern DXGI_FORMAT ConvertToD3D12DepthFormat(TextureFormat format)` - diff --git a/Romeo/docs/Juliet_src_Graphics_D3D12_D3D12Utils.md b/Romeo/docs/Juliet_src_Graphics_D3D12_D3D12Utils.md deleted file mode 100644 index 903d5d5..0000000 --- a/Romeo/docs/Juliet_src_Graphics_D3D12_D3D12Utils.md +++ /dev/null @@ -1,16 +0,0 @@ -# Juliet\src\Graphics\D3D12\D3D12Utils - -## Source Files -- Header: `Juliet\src\Graphics\D3D12\D3D12Utils.h` -- Source: `Juliet\src\Graphics\D3D12\D3D12Utils.cpp` - -## AI Description -The `D3D12Utils.h` header file defines a utility class for handling DirectX 12 errors in C++. It includes functions to log error messages and retrieve the device removed reason when the device is removed. The `LogError` function takes an `ID3D12Device5` pointer, an error message, and an HRESULT result as parameters. It uses the Windows API's `FormatMessageA` function to convert the HRESULT into a human-readable string and logs it using the `LogManager`. If no error message can be retrieved from the system errors, it posts the code instead. The `D3D12Utils.cpp` source file provides the implementation of the `LogError` function, which uses SDLGPU's `FormatMessageA` function to convert the HRESULT into a human-readable string and logs it using the `LogManager`. - -## Symbols - -### Namespace `Juliet::D3D12` - -#### Functions & Methods -- `extern void LogError(NonNullPtr D3D12Device, const char* errorMessage, HRESULT result)` - diff --git a/Romeo/docs/Juliet_src_Graphics_DebugDisplayRenderer.md b/Romeo/docs/Juliet_src_Graphics_DebugDisplayRenderer.md deleted file mode 100644 index 0dfe666..0000000 --- a/Romeo/docs/Juliet_src_Graphics_DebugDisplayRenderer.md +++ /dev/null @@ -1,16 +0,0 @@ -# Juliet\src\Graphics\DebugDisplayRenderer - -## Source Files -- Source: `Juliet\src\Graphics\DebugDisplayRenderer.cpp` - -## AI Description -The `DebugDisplayRenderer` class in the provided C++ code is designed to render debug visualizations such as lines and spheres on a graphics device. It manages the creation, initialization, and cleanup of resources required for rendering these debug elements. The component includes functions to add lines and spheres to the debug state, prepare the GPU buffers for rendering, and flush the debug data to the graphics pipeline during rendering passes. The class uses push constants to pass necessary transformation matrices and lighting information to the shaders, ensuring that the debug visualizations are rendered correctly on the screen. - -## Symbols - -### Namespace `Juliet::anonymous` - -#### Classes, Structs & Unions -- `struct DebugVertex` -- `struct DebugDisplayState` - diff --git a/Romeo/docs/Juliet_src_UnitTest_Container_VectorUnitTest.md b/Romeo/docs/Juliet_src_UnitTest_Container_VectorUnitTest.md deleted file mode 100644 index 528a1e4..0000000 --- a/Romeo/docs/Juliet_src_UnitTest_Container_VectorUnitTest.md +++ /dev/null @@ -1,11 +0,0 @@ -# Juliet\src\UnitTest\Container\VectorUnitTest - -## Source Files -- Source: `Juliet\src\UnitTest\Container\VectorUnitTest.cpp` - -## AI Description -This C++ component is designed to test various functionalities of a `VectorArena` class within the Juliet framework. It includes tests for basic operations such as creating, pushing back elements, removing elements using `RemoveAtFast`, clearing and reusing the vector, testing with different types including structs and move semantics, and verifying the behavior under external arena usage and volume constraints. The component uses assertions to ensure that the vector behaves as expected throughout its lifecycle. - -## Symbols - -*No symbols detected.* diff --git a/Romeo/docs/Juliet_src_UnitTest_RunUnitTests.md b/Romeo/docs/Juliet_src_UnitTest_RunUnitTests.md deleted file mode 100644 index 9ea4283..0000000 --- a/Romeo/docs/Juliet_src_UnitTest_RunUnitTests.md +++ /dev/null @@ -1,17 +0,0 @@ -# Juliet\src\UnitTest\RunUnitTests - -## Source Files -- Source: `Juliet\src\UnitTest\RunUnitTests.cpp` - -## AI Description -The `RunUnitTests` function in the provided C++ component is designed to execute a series of unit tests for the Juliet library. It leverages the `LogManager` and `LogTypes` classes from the Core module to log messages indicating the start and completion of the tests, providing feedback on their execution status. The function calls two specific test functions: `TestMemoryArena` and `VectorUnitTest`, which are responsible for testing memory management and vector operations within the Juliet library, respectively. This approach ensures that the library's functionality is thoroughly tested before release. - -## Symbols - -### Namespace `Juliet::UnitTest` - -#### Functions & Methods -- `// Forward declare the VectorUnitTest function - void VectorUnitTest()` -- `void TestMemoryArena()` - diff --git a/Romeo/docs/overview.md b/Romeo/docs/overview.md deleted file mode 100644 index cf3df4e..0000000 --- a/Romeo/docs/overview.md +++ /dev/null @@ -1,106 +0,0 @@ -# Juliet C++ Codebase Overview - -This is an auto-generated index of all C++ sources in the workspace. - -## Files - -- [Juliet\include\Core\Application\ApplicationManager](Juliet_include_Core_Application_ApplicationManager.md) -- [Juliet\include\Core\Common\CoreUtils](Juliet_include_Core_Common_CoreUtils.md) -- [Juliet\include\Core\Common\String](Juliet_include_Core_Common_String.md) -- [Juliet\include\Core\Container\Vector](Juliet_include_Core_Container_Vector.md) -- [Juliet\include\Core\HAL\Display\Display](Juliet_include_Core_HAL_Display_Display.md) -- [Juliet\src\Core\HAL\Display\Win32\Win32DisplayDevice](Juliet_src_Core_HAL_Display_Win32_Win32DisplayDevice.md) -- [Juliet\src\Core\HAL\Display\Win32\Win32DisplayEvent](Juliet_src_Core_HAL_Display_Win32_Win32DisplayEvent.md) -- [Juliet\src\Core\HAL\Display\Win32\Win32Window](Juliet_src_Core_HAL_Display_Win32_Win32Window.md) -- [Juliet\src\Core\HAL\DynLib\Win32\DynamicLibrary](Juliet_src_Core_HAL_DynLib_Win32_DynamicLibrary.md) -- [Juliet\src\Core\HAL\Event\Keyboard](Juliet_src_Core_HAL_Event_Keyboard.md) -- [Juliet\src\Core\HAL\Event\KeyboardMapping](Juliet_src_Core_HAL_Event_KeyboardMapping.md) -- [Juliet\src\Core\HAL\Event\Mouse](Juliet_src_Core_HAL_Event_Mouse.md) -- [Juliet\include\Core\HAL\Event\SystemEvent](Juliet_include_Core_HAL_Event_SystemEvent.md) -- [Juliet\src\Core\HAL\Event\WindowEvent](Juliet_src_Core_HAL_Event_WindowEvent.md) -- [Juliet\include\Core\HAL\Filesystem\Filesystem](Juliet_include_Core_HAL_Filesystem_Filesystem.md) -- [Juliet\src\Core\HAL\Filesystem\Win32\Win32Filesystem](Juliet_src_Core_HAL_Filesystem_Win32_Win32Filesystem.md) -- [Juliet\include\Core\HAL\IO\IOStream](Juliet_include_Core_HAL_IO_IOStream.md) -- [Juliet\src\Core\HAL\IO\Win32\Win32IOStream](Juliet_src_Core_HAL_IO_Win32_Win32IOStream.md) -- [Juliet\include\Core\HAL\OS\OS](Juliet_include_Core_HAL_OS_OS.md) -- [Juliet\src\Core\HAL\OS\Win32\Win32OS](Juliet_src_Core_HAL_OS_Win32_Win32OS.md) -- [Juliet\include\Core\HotReload\HotReload](Juliet_include_Core_HotReload_HotReload.md) -- [Juliet\src\Core\HotReload\Win32\Win32HotReload](Juliet_src_Core_HotReload_Win32_Win32HotReload.md) -- [Juliet\include\Core\ImGui\ImGuiService](Juliet_include_Core_ImGui_ImGuiService.md) -- [Juliet\include\Core\ImGui\ImGuiTests](Juliet_include_Core_ImGui_ImGuiTests.md) -- [Juliet\src\Core\Juliet](Juliet_src_Core_Juliet.md) -- [Juliet\include\Core\Logging\LogManager](Juliet_include_Core_Logging_LogManager.md) -- [Juliet\src\Core\Math\MathRound](Juliet_src_Core_Math_MathRound.md) -- [Juliet\include\Core\Memory\Allocator](Juliet_include_Core_Memory_Allocator.md) -- [Juliet\include\Core\Memory\MemoryArena](Juliet_include_Core_Memory_MemoryArena.md) -- [Juliet\include\Core\Memory\MemoryArenaDebug](Juliet_include_Core_Memory_MemoryArenaDebug.md) -- [Juliet\src\Core\Memory\MemoryArenaTests](Juliet_src_Core_Memory_MemoryArenaTests.md) -- [Juliet\include\Core\Memory\ScratchArena](Juliet_include_Core_Memory_ScratchArena.md) -- [Juliet\include\Core\Networking\NetworkPacket](Juliet_include_Core_Networking_NetworkPacket.md) -- [Juliet\include\Core\Networking\Socket](Juliet_include_Core_Networking_Socket.md) -- [Juliet\include\Core\Networking\TcpListener](Juliet_include_Core_Networking_TcpListener.md) -- [Juliet\include\Core\Networking\TcpSocket](Juliet_include_Core_Networking_TcpSocket.md) -- [Juliet\src\Core\Networking\Win32\Win32SocketPlatformImpl](Juliet_src_Core_Networking_Win32_Win32SocketPlatformImpl.md) -- [Juliet\include\Engine\Debug\MemoryDebugger](Juliet_include_Engine_Debug_MemoryDebugger.md) -- [Juliet\include\Engine\Engine](Juliet_include_Engine_Engine.md) -- [Juliet\src\Graphics\D3D12\AgilitySDK\d3dx12\d3dx12_property_format_table](Juliet_src_Graphics_D3D12_AgilitySDK_d3dx12_d3dx12_property_format_table.md) -- [Juliet\src\Graphics\D3D12\D3D12Buffer](Juliet_src_Graphics_D3D12_D3D12Buffer.md) -- [Juliet\src\Graphics\D3D12\D3D12CommandList](Juliet_src_Graphics_D3D12_D3D12CommandList.md) -- [Juliet\src\Graphics\D3D12\D3D12Common](Juliet_src_Graphics_D3D12_D3D12Common.md) -- [Juliet\src\Graphics\D3D12\D3D12DescriptorHeap](Juliet_src_Graphics_D3D12_D3D12DescriptorHeap.md) -- [Juliet\src\Graphics\D3D12\D3D12GraphicsDevice](Juliet_src_Graphics_D3D12_D3D12GraphicsDevice.md) -- [Juliet\src\Graphics\D3D12\D3D12GraphicsPipeline](Juliet_src_Graphics_D3D12_D3D12GraphicsPipeline.md) -- [Juliet\src\Graphics\D3D12\D3D12InternalTests](Juliet_src_Graphics_D3D12_D3D12InternalTests.md) -- [Juliet\src\Graphics\D3D12\D3D12RenderPass](Juliet_src_Graphics_D3D12_D3D12RenderPass.md) -- [Juliet\src\Graphics\D3D12\D3D12Shader](Juliet_src_Graphics_D3D12_D3D12Shader.md) -- [Juliet\src\Graphics\D3D12\D3D12SwapChain](Juliet_src_Graphics_D3D12_D3D12SwapChain.md) -- [Juliet\src\Graphics\D3D12\D3D12Synchronization](Juliet_src_Graphics_D3D12_D3D12Synchronization.md) -- [Juliet\src\Graphics\D3D12\D3D12Texture](Juliet_src_Graphics_D3D12_D3D12Texture.md) -- [Juliet\src\Graphics\D3D12\D3D12Utils](Juliet_src_Graphics_D3D12_D3D12Utils.md) -- [Juliet\src\Graphics\DebugDisplayRenderer](Juliet_src_Graphics_DebugDisplayRenderer.md) -- [Juliet\include\Graphics\Graphics](Juliet_include_Graphics_Graphics.md) -- [Juliet\include\Graphics\ImGuiRenderer](Juliet_include_Graphics_ImGuiRenderer.md) -- [Juliet\include\Graphics\Mesh](Juliet_include_Graphics_Mesh.md) -- [Juliet\include\Graphics\MeshRenderer](Juliet_include_Graphics_MeshRenderer.md) -- [Juliet\include\Graphics\SkyboxRenderer](Juliet_include_Graphics_SkyboxRenderer.md) -- [Juliet\src\UnitTest\Container\VectorUnitTest](Juliet_src_UnitTest_Container_VectorUnitTest.md) -- [Juliet\src\UnitTest\RunUnitTests](Juliet_src_UnitTest_RunUnitTests.md) -- [Juliet\include\Core\Application\IApplication](Juliet_include_Core_Application_IApplication.md) -- [Juliet\include\Core\Common\CoreTypes](Juliet_include_Core_Common_CoreTypes.md) -- [Juliet\include\Core\Common\CRC32](Juliet_include_Core_Common_CRC32.md) -- [Juliet\include\Core\Common\EnumUtils](Juliet_include_Core_Common_EnumUtils.md) -- [Juliet\include\Core\Common\NonCopyable](Juliet_include_Core_Common_NonCopyable.md) -- [Juliet\include\Core\Common\NonMovable](Juliet_include_Core_Common_NonMovable.md) -- [Juliet\include\Core\Common\NonNullPtr](Juliet_include_Core_Common_NonNullPtr.md) -- [Juliet\include\Core\Common\Singleton](Juliet_include_Core_Common_Singleton.md) -- [Juliet\include\Core\HAL\DynLib\DynamicLibrary](Juliet_include_Core_HAL_DynLib_DynamicLibrary.md) -- [Juliet\include\Core\HAL\Keyboard\Keyboard](Juliet_include_Core_HAL_Keyboard_Keyboard.md) -- [Juliet\include\Core\HAL\Keyboard\KeyCode](Juliet_include_Core_HAL_Keyboard_KeyCode.md) -- [Juliet\include\Core\HAL\Keyboard\ScanCode](Juliet_include_Core_HAL_Keyboard_ScanCode.md) -- [Juliet\include\Core\HAL\Mouse\Mouse](Juliet_include_Core_HAL_Mouse_Mouse.md) -- [Juliet\include\Core\JulietInit](Juliet_include_Core_JulietInit.md) -- [Juliet\include\Core\Logging\LogTypes](Juliet_include_Core_Logging_LogTypes.md) -- [Juliet\include\Core\Main](Juliet_include_Core_Main.md) -- [Juliet\include\Core\Math\MathUtils](Juliet_include_Core_Math_MathUtils.md) -- [Juliet\include\Core\Math\Matrix](Juliet_include_Core_Math_Matrix.md) -- [Juliet\include\Core\Math\Shape](Juliet_include_Core_Math_Shape.md) -- [Juliet\include\Core\Math\Vector](Juliet_include_Core_Math_Vector.md) -- [Juliet\include\Core\Memory\Utils](Juliet_include_Core_Memory_Utils.md) -- [Juliet\include\Core\Networking\IPAddress](Juliet_include_Core_Networking_IPAddress.md) -- [Juliet\include\Core\Networking\SocketHandle](Juliet_include_Core_Networking_SocketHandle.md) -- [Juliet\include\Core\Thread\Mutex](Juliet_include_Core_Thread_Mutex.md) -- [Juliet\include\Core\Thread\Thread](Juliet_include_Core_Thread_Thread.md) -- [Juliet\include\Engine\Class](Juliet_include_Engine_Class.md) -- [Juliet\include\Graphics\Camera](Juliet_include_Graphics_Camera.md) -- [Juliet\include\Graphics\Colors](Juliet_include_Graphics_Colors.md) -- [Juliet\include\Graphics\DebugDisplay](Juliet_include_Graphics_DebugDisplay.md) -- [Juliet\include\Graphics\GraphicsBuffer](Juliet_include_Graphics_GraphicsBuffer.md) -- [Juliet\include\Graphics\GraphicsConfig](Juliet_include_Graphics_GraphicsConfig.md) -- [Juliet\include\Graphics\GraphicsPipeline](Juliet_include_Graphics_GraphicsPipeline.md) -- [Juliet\include\Graphics\Lighting](Juliet_include_Graphics_Lighting.md) -- [Juliet\include\Graphics\PushConstants](Juliet_include_Graphics_PushConstants.md) -- [Juliet\include\Graphics\RenderPass](Juliet_include_Graphics_RenderPass.md) -- [Juliet\include\Graphics\Shader](Juliet_include_Graphics_Shader.md) -- [Juliet\include\Graphics\Texture](Juliet_include_Graphics_Texture.md) -- [Juliet\include\Graphics\VertexData](Juliet_include_Graphics_VertexData.md) -- [Juliet\include\Juliet](Juliet_include_Juliet.md) diff --git a/Romeo/docs/romeo.db b/Romeo/docs/romeo.db deleted file mode 100644 index 2bd6c3fb4a485d1ec7b6d81c355b460bf2262527..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113970 zcmc${3v{IESspkO9P9{of#Buhg`A%;C+;41tEaoiy z&hGO(@B4n=_g9tFrJgyvgK0@s|NmXy@4er?uY1J)TlSyN&)r!iMg>J8PbN=99uf5qEw7Z@1_p8lLbEnmt-Mu`;fc@U)RD*3E9Q>V6 z{jP6*+Yf&1(Tnq6^)3AQ-+s}}v(@W9o_@ac=WM?9-B#5o*5>PJRGZvY)$UXSJYoB) z4tm`$Yi$mycE8$c_1in0)>bv>R{Pq69^7khw>Ix@?zO7!cGc`u&AjW`YI#t#I-AXd z{&253X!Z3%yVD-Dn|tl|2r{Rty>4@>-Pt)+^@g2}ei?SsXU)!5)!!Wswz_vaT+C*x z-^V!H-CotKcG`DZwF$BK{-D{}Y|U2M<=UXx8x&h@RNKSOCJ&_Q_BMB0{Xs95)o)e( zLF=GjZQQRmn|pg$NOh;#Yj=nJYPYp_(CVdk`_S^YU@&Gr`>5aPF0O7*lxKbe6%|3^9)oBsr&EEa0 z*XnnNJ^WQQdo7*?V6t}~Aot^JZP{7!XX{>Tb2#8{Tsn}WNyHf*%sw*(&ew=&p}W5i z`XNEx7_|5Lv%7DZVu(aGW3Piy{{9dAt>&5U`q-m$&)wbsd*3-uD8K!hAQZrN;f-&s zHoN-=-A=1B;I0GCo87%VP=;`6yBcC`?ZN#5N4W9*=4P*3r<_)2mk6q3=yf-S{Xqxt zJyijiKx)tx5s2?@wKj%3K$;z(<3V$S!?yu@5?MaIz9ITSuf5MBIvDm2y1-velLg@e{6PnuY9b?vzYeFq^% z7xG2nz6myG^X6>r}!o>?o52-Ry3e93qbt zIaJN9blmNZ$X&-B@`5`v9t)vpWT{n&BwJ*_!@Ysfa-%f>erFzm?Y@cIeP^rJB@!&T zm=j3}75NPa4x)kE=3n!@Uh{tJn;$IR@7QN07c1!NJ$R<-4hPN#Mh~ai0p$Sok~pZg znuDf@D`Z6>2xexU;(`}j+rUvEd#t#6*7;95tav1z2t}o!qpcXltMjz_|0;xzQd_3bhIGbuwcAO(o8^R%5U1G~rs zD4>DLeT;X&Z|^kshWHF9bGHR`iAqg#W3NSmf0|2Oa1Kx{wgx8966hDMUtL+ga%uI} z!j*Y(Tarlnkennfv1G(s8t5?Q1xh0apV`J3T>9`J zzz&$3UW5ghN|w}xW_w>4RPv8~aOz!54c!&eaX^7S=yoBg2#hU=%RMSqdackE+62^A ztNQXGG-v1;JmH$k01Ssz+Xqe(FS$Y>DfKQr8lMwRSwozCdJ0u)k~U_Ndv^D!Dc&Dd z#r$39VPF1FKKEa}4hG5_&i>L*{HO03*TX*a7eWt{x=FVX zvA|%0h2L0TI{oyiYJP2DdHGaz1@m^!nrP{Qxj@RAVz6Li8!QTx95ineA@63D<-~Tc zyRVfGx+nG1*M-N(t@y3)RjLj@Od1a%vELkMla!6!-k_hXnzVWsPXx*Xmp?P}EcOng zp;>M8TFu+C%ZS35mO38kQ>rqxyw|_}^@;0&yKGA~K!Cdbw*W0?sk^rYnafi(GR2X` zDe!nhaoEOll|NW*?lybPO)z3CV{^0H(|J-9XGLcdV`KMw`l>escc_+#6;g>eK|!ag zHfWFfL;?($k{w(*!HFkMpFQ{Hlc4Pi|1}y7Ag+D|w5yRFoWRlap<-frkMmGYRYN>= z{@mkQNo(umGckzkjWskF-+wx3S#>-g9XH^cP){02N4TX^-fs7>0y5y0C)0)S(z5#w!)z*H(F!@pt7uR{J8u@V0jgKlYh4|e#?uBZr z4{JgrcZPd=>smipZV5B#r?q(#%*Y8~)PrE@Isl)*Z`2^k7#g)#8piL9(!lj?k&UXm zVU7-*V5*WbU?9?Si<8PGmDjP3n}#LxZ64Bf=l&%B2(VL7Ra1I+%4M{Y@hpmVj^p zJE#3(VnZTxg9?8Zc^H{|D6ba@>wzN>m`^&w^9PI%D1D4xV(&OSBa zL496-?)Tu^ZGFLG z<=5vP!U-s?w$;1&94wSBeCNk>0*<^68UB&CzWL_|@RGmrS8kvA$_Y-uzgj4t4VzW_ z4eJwBOl)^Id1#(sRukOh&1&mD+{5sx7^UGDTIOR&u4L-z#yXQrsu>2x0mZEuDQ<_r z?F+`;-Wk$6y#d<bl<1Z5XS1t}Uz zM0>ye9)82^Qo!y~Ji<5F-E7k&GKu0A5}z|Qqxhf=&j^%vST3<6TQZm(tTnKlYQ_AP zbB{khb9#~mhc8TTo^TK@-zfaH_geSbv~b)tz>w2(3`60o6hj5*1*$Z&p9TC<0(0qY z4<;PoC3+HB#UDn!nXnG&E_Bx`oMy%*_PfIlY-qeG=Vr@^da!rj*0ltxs#bYM&Annx z_`5Yf;FoD(CEwyp&a-sBup-}G7twRNzi znU_pIlxH&Zz%3vs3|k9+yG9siRcD>Xf?^Foe1_B79`|!x&1*EC<08VAN}Cg6ka0g_ zxh|+oHp@c}LL11oyw!U}@M`O)V`Rx3an~Uu}SpEI@IlKEsQ;d?_ zm6Jw*-uS)WzV@Sk33}u3&t3Tr{v6G+_{uWN!dC#DG2CL5yvQAhxH7~cexIZ=f_i`@ z5Qs>=V7dWpFzp5p-)S=lPk&}bQAT4;5+-q!P~wl0F?}4nM9glRJ~9vFl9N;3;466c zGzpK<=XQ~j_EKZ)E-~tQ2*`_mx#0IT)ldN~&nQUekFz#S&q24S-7WzN2s}5y+8Fl& zJIS6w$J=b84j`3{Lytf#)KR>Z+a7jWpWp*4kq5SyR@c|)8?ZBaipp{u6MMeM=y7r(y z`z0?E)eY{myFSb#-|@+B`YS~D_&d-({*Ip){gdu7TPwZx9jIq{=6A1N{_Hou z_|XT>94ol`uqzN++|<8*5Do-TeGLAp*Z%(AB&xqvQvLW4$!Meo3UdMY0Sz=onoZ?& zZKP3~9FZt;foyTM_*>+*IDe}UZG$#vO9F_=V-lpQ#`rlVJ~YmMLctN|5r;QM z9eSC^o_nnwrVlXUEv`-orIRGDbcJ*D{FJ*h`?gmOw=Z$)v%6Pb=@CIJzqRx&U-g}Xf1R& z*$IR(GKvl(QGDRqCK6|mvnpgtOb>_KOHhUf#m-8~F1OX+?;{KS)-%K*y`MA z_qs|JnO%GZ$kBi^ySwztjRm59%?H-MhLZ2Ae(96{<|GOD_?QH=b&Qa+`%7_7kyf0Q z*vzyKk&H277KubO`_$wZ#J5FAfjvRU|tPklsRm(O6*S$Bp_I^sCS~kJK=RoER_Q)>8^_kOcWMNbLMM z9~H);Wfg}!+eK_02%i($ka$gtzJJ&ea^*0yosLI@{$P!P zvjqx)$BPsT$>`B{kB6AlOX>WMYL=uUvC(b0#Q6~sc=DFO#JevL|d+8VO)B%liS&8>PmO#sz}4~z+A%035|4M z5ZL|5tChOj-P{}^b1U-ZK}=TA5IRBOS+s<2dpnC*xdb45b6WRopz1V{vYI(1$$S&O zT4^CAcK*S?{_*a{SB_)n4?5jQ=+(2`Co5S=#c{m_%SR~&vk6)%ayU$#BA&r2P(}{M z0C;k;BFvN)BH|GDN;M~vwV8mCSO{O>a%2G%s7TZR_z^l|-U3Mjq(CbfFJLq>L)cr) zEwmQVH)x zDNOXH&4$HbbxBna9%(DgZi8D5ItoiWz{Ir$EQG1)$G7V1=y26CLT7i6ZKY2h2fXje zwSW7e&)N9sqaXf-ul>!&1nm0ZlJ~vc(K4;0QS%rhi&rU22;@bTP6PCew-x}FC8QJ~ zhpdSRmcKui$%E77lO_X^y@NNecDF(v?fNI#Gu49?!`KI@|`Lru4xr(7^!Amex4<$R>>Y zrL(7(&OK?Ue9*lME(z9b>laE#YCpy?)HbiWQo@R~7;F{suB|S(EsG#5wGoT6YzQL0 zGU8bJgu*3&9dUp7V&HT~Kou~7wvVS%VwoU^ttW*&rmxp7Bv2SMJrPau0Rmb~DzE|A z1aW9?emj{Ff-?sRICh{1NXVSN1O$)r(9_|W7rF}AID+wHNIH!KM?a3)`QvH`b@~{0 zVhz6TGrqpxoZg8wO=9i@zJHYlXUX)x{5wB*usDG%f2t%)y>%>2#N}sU--@bCAPCFH z6!DV#+k5+6CgmdM58fSEM-m5TToAbNeyBLG5&TWa1(PLSZgz-xuy;@&1rJ!aV+dI& z88AHQc!c4o&~-|aC)y)2?9~BD#t_{!Vu^#)m|_C@1fVWaF657hhrVi!mE;!JrfB{EX+KcdrOF!zvFDc;rN%Q#$H?%w9J0q^ z-IT0gQbpAxvL!lD|BWJjf-#6PYZWWq1d-ww6}{CeM|bwR8=$yy3o8DCm`^FzjAf>I zN)2h6h|pmaGESeL@;`m-!Xi;;Pj*a%};z_T($d&GKZ;ncQUQJ&OREDa$2WOW%O-sFmrs3V<)VTE!1Su613JaG9(6w4GDoW!h$;MXtJD$Mb`XyP68{^y%cqfxNq{cePrDJm?UVDb8l`YC-olB8};M@38x$?|{p}Wx1Qgh}` z`1%l(^D@K)ssJshvRDY$3QG5-kP9#aK}j2l4biEFoEgOb$p*l+$do74RN^r_w0D~9 zskC@f1r|O>PQK>K!Wo0P2M*Z@OlDoQWFM;|wbNrV4oj;T{yvTLR{FPYvs%k9N1VK{kLZ(NxNBJv)Q;> zIo(8|Af*qknustjaD2*xYUrDb5~TL|T!nN@cxauvQiJp$^hwV1;4DTdhQP%k;;Vv& z^h$%rIcVSha`Bn1J=F=P{+_4ZKhl+?HwEDYQl?_%64_^m1sW`f%dM?1U47P=Ia;Oq}agx zup~V_?tXrI2&;isBG-p=T?c64@}aSc4UqN)+LAdy=^&dSo8VC=5RDP|VQe8mGDRIu zoYY=MyqSgtQjGvxLdf>ie}hlOG&g(!VD2;lZ6v?hZYf)ez<{<5997AM!F1Kc4S3>G zxK1;KVJPXT69t}Lu%Wq5f0s)_B9AaJ1(6)Wa92bH9br0-@{NifwT;48g;E{YP>8Yv_+*zh4Ttx02wws zW$i9F{4$6IYNPf86iK6C4Fk%Ma^>RJmQOabUSyLM0CRmL=ai{TE0;}^I>u7Vc*f#N zg%O$zLsC~lSZw<)0ALu%H4DYD?lBs#(E;;v6RBs}J5KH3??(%C_cC!&6V)REAL(>B zo$LbaPnGjDLBoX*f!E$$A=yd(bMODE@A_;wYQnR4n3Me2IZ{G@`o%TL0AB!$^gy6=)DxF)ET44#BaOC@zH~xSW?0IHOJ3n5@O2M5rg-gLL9P6LM|WlJ+GS>dcDVAe5oQka@GU`Y-{HJm&2iK+0P*>kBh zj?6Rj4{8c18_RjouK4*xBpBB~SY#&wBlJkak;#aHbFPUbv8LIAbqSKiI!NP2mk1RY z%P}Tp8J7II0e8QT9UQ=*5dBbOr-I=21Y6DPPcK%v3cq+sq+GBFC-??Hr^DH^g|%Az^zUfzCLI0b&YWBpNm8 zh?(QU>(Enm5o&|^EVy=e?+yquzeEYj?O<(eOT}bo5UDh@VH?UP+Dbq*)1pa1=*7T1 zUmQ%$D~eiveyD~~POS+<^2hk$LSnnZVKx64Qqd6$jac(5PDW&IZeX$KxTM9T^eIft zooETB;=y+eFl`V^AtJV9*7}OMIX*qI!3-8B@S4=*3l{cKGPt!#fF?}?mZkUvqBV_@ zn|%|B@)0USyDusgv(xldtI4?~LR8x+Q1sTyo~Od5oWQ<}98K2RT#4ZFh0`d>o=FL!)4KG?$7QXJNi++4N>*JFZ|t~`U*rn ze&ctZ{dN8fT{nJyp+-BOnYoW<@A74p-7X3 z4G__4ZN?b7Xqm7$iI9s&cS1?XqneoJ-_}b{y}RVI&~bp$ct-HVxW;Ly$Oe}6;<-pH zqqOX|T5{yNxtu4{nMbTtJb>#51A}K_-H?vq>?JI^;Ind-uo|R1B^)Fn&;5}F7}9Y_ z&c;uvMrc0p$q5>{Fr1SuM;>`GBVI;ycXUdaGZ>KGP4)_5v1nwV130!GIN6rZT=xSD z21~9DpTZ=!uO<6n92iX+)A-;$49t`W3q2@l2^=pH+sUkhSS1t)YeG!IE@Sm@NgLW;p+0rxa956#1tukdGnGR09YV6 zx`ko}9F|Uu2u2WcQs)6!0mJ}`y%R+FpOosW#wg#$0g`Wu0+`x1o=^guDo&A1-JBjEO<5Qwcbx@I zFvzk52@;nG;k32v6qnr6QzsC;mdO#sJb1iW9+R(QIo?y)ISTOFR0=Q(v_ex>UGNOC zoHPDCH8gvIinKRIF47)ID1zIu$_BJvgAhfqHw~uc2==aCwV(p_zRe-i9I>d@G3Urp zB$GGfYp@ezNz_3RUJ#RF^(i+eK=Tj6vlRGToWUZKsu5Z!`IGopN#U4GrZj*Dt%I2h z;Xx{pB?%!NYILI(WMl;JI0^E}EXa-}x-h$_bG^v0mQ&Rw&nRj>IR%}KIf|~Y-Mqdw zyL)bmcWX3i??Jo%nWz5t=imCik3HJ`<{$i}cjISh)$y}&ctUBSBgDw9^6z0vPBO8GaNh>~m~3p0!^V zM*5Q`?vP5{t3^~5#oXA^KX3!%n^q%9uMRL62)X+^WDGlY4<0%CH{xQ zkqCrZdhkO%MCa=E&hF_wYR`qrO0*KCqP&loCB@U39wHVv7EAxeSH{l{LoVSb>gGrK zU*|U6sX43hp2W#p_cmKnTRgJbI1U0)@c+tULdYV#@N4Ruk44A_l*ve#5bZdsLBwLPfJs56)t8s?eCyt9LLX#Y` zT7Bo<#ZSEd!I(KsHdUPub_c7lgqvG8pN-#++Z`a@D@FiX|MjO{_iaz36y=5gEs{vp^C;E}&X--rkf(mpfVJ~CY_=K> zAO>dg;uDywUaYSSfCt4|WZjM!w-Ar)PY<+#PrO(%TmYJh#L9Gn-KOeJjK9;7CX8nh;mHUpieD2T?=%?3+u?J|g06I`SK z9tnbZKrcd_p71i0hPna7y}20{uUx^GO!St__h5pn_7Df1W+v12U}ULDa^=I5f#x2~ zdeA`;h(kjk)K#ob&P=@Ipve&p@kJSA+?hS5Ljvc4wFoVf%MGZ;Wfg}l+4Fp1ngX`T zNGdI-#Hf!3CjqXRWrE52a;I{5#9V9}!P_Ax$g!Qo{sDwDwx9#!aN1RKhiNU*?mOo} zWILQmh&ZsM{e~Pb5mG@BTD|QK%4_|C6R~KbwRpDB5&6hOM~F7+(011Z{+Q%SA-cJX zNZnJ4^3h15i;yt&2^ggamm&iSugMFO1(w;0SOt}9OUX-xN5{IGCLMBV#ib8RasQn+ zzv=b|zjs_`{Jp8gec>()en;fZHD=J%K~+XhC94Vxp&32<3chie%nz&(M!1J0qe4u> zb3`(ibOY3tVmYum{pN+DEG+Q?uGiUd(mux{e8fcV5Rz5Xm+k0{yD%sKMNk(-$SJQj zQf3)3uqHbz=3Y^XiQ=%?O1)^G#X@0UN7%o9=31l-!-WB=zlZ2d#uv92?Ib{SI>UiKV?Y!cfS4o z|I4IC1^?jHg|y}n%RYM;0CoEWaF~>0LMo@*lfEI(RQ7FD%_fDJ4 zFh)iN8~K(6S$ViiZ4BY%MK-3IM}pNchj%<3dpR7$-A*JeHzt8St3M`&0>VU9fYCrG zqU2ucCFf+=aC(n#1#q!9p?us}&V1N5VJ8hOMTL&4AF_sTEBW3YuK8l>>j+3~F_{SD zu!1t{Eo+x5Qqux0$$-`>0Gy~R>-A2B#_z=Gi9YJ#>3-ON=a|&AY#~|o;eps6z|9$lHE}S<3{t^8@#h=_0kt_DobquL-A|THMqVwnMStpr7UXnA7d5f~! zEBlKkq9i~4DeY9{{aRX9oe&(VHOjFWQriP=-IN;;**)(^Vp>>y6$;#W-lB00jl`E2iAj^L zpsx=eF_J5^4tIaC^SC@T3{$a;ki#}~0=JgYb5po*3&Uzu?^B?!=jPI<*s(HiSH-T< z)b^*%4B89~_7k;9=H~1v_G#B$I0+eqBh>3j-p{y^nj_7ooZ&NP3ld|sr4MEV*5WZ$6DMIdxEtFD_5gF5X!B0yKcn zd{|Yqit`m-XUrE-Op|PAl8!UvyK{5=S3`MiG!GFJi<4vLTXY#^J31Hz)b{{r!@MZ` za%F>GjC)+y@hM6qYuC($Q#|XKzyjd7<-Rz(QR)frxD!_lY?`3+WEI5{$_jj}i;83! z`YMyM;to7B>}$2g1$c2X^tU)=aI+&q&K0pn0n1o*_!pcbFn)`@f{HvlhdsrAKSCPz5)4Rv3i z4#D(w90Ee<`K*0XhQyNEPFFmul+vSI5bnwYs`0rEq&Bi-+;fP`AC#W8y^Nk+TJ$*A z0A$E*Fd#rz0WavrAqd0p&9N>nn^{iG@d$N5F7#7GF}omcGVly?-o2PgS(x4f+SnO* z6pty}g82)84;r(g9aSA{K_YlLluZyIvd{LJ6$QO{6ekla64vjxs7Y`;$+5z?(iXC+ ztSlqLFCjCSBf|DLQRCInd0WXkKXV+%s!>U4g@5D={_78){nl|S{IgOp75l8U0zp=V z4TA&IXG=WHlS)3P)NBRbf3$Hp0M%w*(Vi zz8Y2=p_NUGv{@{RNw@%mL}^YgK*S3r3am_v1MJTp+iFK29X6A_iJw=kpUyF@_6Y-k zd;f3UKVJX(zw@z2|84UFKlzRL8F9z>`PUK_!ve{3AKS_9h)u}AS;x*Hd+7cXedUCm zh2@=;l1%voI$lvjT`=Kn+9*Z^%X^Vmyq>DAf`!0B#9bM7b?2$-60hw%X-tJC3x$Cgy6)nIbqZ02JHDtpPWJw|m$u%kx4>z~CQOvD1*{CLaHBB_bZ3|?Ksj@$>jN?rs{2T9vAZvT>u8ooKbCl= z^#-(m6u6Q=)zC&B%f=*N!Vq zK;3XwHO1=>(SkJpQqF{mL&7CY>;OS+ybE^U**UG+pv#EAUXySS!xg
  • Ck(ON)?brQTWIN6$7tf~ zX=Wdzd@uR*Bd&N=A7%QEN5rQymyBSVa1Y^)#)7|>AAxGDf;~>>%y`u=KuIL2(UEik zreK!}r6gnDs^1JW61vDH4s>_Fzr`(pu&EmC@mFjEkn~7Qmb)plJ^B_FCT3FjqXZH_ zr(uL~8oZG3V1RCb77i>=`1o3pW3By|hvMHnrdBjz03iO?|N3wK7e9i?+Bg4KAN=&& z6B24Z`EbO?PA4ezejo+LjG;G;AxHoP9o!^VvK$l&b|7&^NSY{y*-_hW; z@(Lf^++|Mf$@#$-r_e=e{;{jZs_locR?6$_?w3q4QpzJdY!u+{rT71WGG_kl#pi$a zRex`saeq(gEgN4(-Dg(l<$@M~;a#lF-yhdp?2kJBQ?MuU8E^_fOgUo;PXT~!W*HC7 z?F91qOe`P@_SR4@5}&1HZH=)V00c-rQLUt@x=A0C5rz3&~a|=*N7!z#{u3&nxCtFA%WJ#LK%H}BOy@zbN#i} z8t9>G@ItG!rmsJFMiZW!F2u7mJw;L#=+`;pdv1~x0pX1FZ=D-- zO-4bAxSipZ)I&a-ln=5EIdZ)gnI38wX?NYdZ(^S_&|%?yo7}r@c(&0(rXn=wj6h1l zEnGkFFK?;;B-WbgS0aQ<@!cj(iOv_GUh_`ZQh*P-te>LM>d9M(;KIVRLP`^6oSPYr zh+-c*FV;}#=GrDK+s$2(+%fZFCyfBn_5<6e-usvS+Q%M^pJ9&0&rf$P;_)R%S7zni zpM88`3hkn%r(A2Hs#^V(Z~Ct*3?Sg9llduzN{Y&%!(cCe>pP!+^%KbPeeGAzy!p}u z6Z2gqQPvhQnZ%0NLaBzk_0q8oS&`m>_5$n+O`6_^Wja8BbZE2kocdQ>VBy{cIgfMW zQbd#xM+NeR!DM5F0!Jo;Z7v%6bk|a0KtS63+Kyf^X?)F{?h%5Ry!%>iJnPj3fq7d4Q=G= zM#!0(6(QwQABwe;=gq{-6A@!3~hWwfFqg zwRcP)g>O%3osduV+GH9iypbghxN03R2lGT{5wbQ)f}$?s(6l!M7gPN$S|GG=4>7o` z;HdLlUs&Nu-dJ4Wc!MtbD*&ZHQMLSUTy+e96#^vbke22^V=hS(9+*9EDWE275{D;Z z7nK?Qs1bXKK_+0_B(zfBx)CUzlhTRJf$=1t3fXT1E`Frnv0T}$V zcmMcnCp8=UywdzE-kprjhp_aVw^$MJq?RE0wruhq6O4w5udK0ZS-k1o+>ue;$T#hRMwqA8&l%H}O)nj9M<<65D z1HU}QrlFuA2wN;X+yWF77X0JoENohsWCWE^)77e#&ZdOC~F*XB{ zI?i9zSgp=vgv*J;gceB}J3^GZT5J?H8dXuwm5lnLum(it`Zd&EuNf747?t#;m4*mq zXM|YjR5J~OI)$;btY-j&cqLxsY!y}aAYrqy!s~?%VolDdNW5->CS9~XkC2&b$zcnb z2G%8O)P>RM!xkpydQ%CcV=|T~H3-jQXw){tw<5z790~Cx*v^ispd4l+OeWg2umoN=io}=Jj`jGNk>BClEWQ0=FKY;N*?jt|`fBo7Usey!P89#rbZ2F|pCXZ9P zOeXh?5N{oS*@SP+JRoW?fC)oh!VQj@Y}qPRD;-;C2bwRSf5hWHkfz#Rj8Lb`m?nfh}x z)&qV)(Q@E00zdC3WuN7H7aX$|j!EU$DOVUgc zvHkG~CJgJ<0` zP~N54^2?rzW=h0Xbsxs&%*=UK6)do=&iGQI{j5XJr>`A{teqN+i~g_nrFL5YQUMHt z7}Ty(e}jig)4k4sNgL#DYw{+HFDzOb+Qh~P>SBKJs@Nn1Bjrg7H7#blk`}XPm0u zD;E3w+B~Mcf+sa~Ua;^YPKDWls@D>h0sl99?G4~CXVE(1Ts-s%K@pvedpWu3#%iHaz2cV-hEvaA*V$$#*cF4Ivu1<_NTg$ zDs)RLZ@Q^S$xU;}>UZ3*IK91m)F6 zopxV}2!k-Z|B-s0yTEA}nc*}R`SR?=l%5xsSfSL5NzqC&G;=8B&Ing z+ZqhcWzJYY|2W*h)6Q2Y#RapVgr*K#Mg`si$nPWQ_LRM z;kl=GlbQeLr_h~7kid>{cK7TQuhOXSWB1o^(0}wtfAkOEhJ2ELwDJQV{;~;qCBxE? zu-7JA5ugMm9LmfEUE+V$CNxiq^xfe`Juojlp$loLFGEH&50)cVrcb zOl5{cS*f+RNM{%o0@9`6t1iNNvfNF3H%w9jlU!-p&%voe)w7NSZ0um!zk#ZB6UXn| zVoLT0>awVro<}#Bp^M9DP7Y>??a0zmR(p%>z5uw$YlrIx*N7l5c^7(FRQc+q+qhfl zUjA@2_6ZDy8bQX%PR+J1Ob5mZ!q|e61!@FS9PQUEXf#%boj7f?(#S&H;7NCYch#I1 zM=UoKA>`$=U0zFu=K1Jd9i&#f)~tX&fk<)!6!P|zNjDu=BvxOxR{i~(i{}^5p1V1} zBUjDZ;@fX-o!>fpF1s%u`CkWfyYG8&r@L!YlG6hwCN={$)-dh(t9aWhvx@%KZInsy zn$y%eds;Y5+a}@xaIjYD$De-ME6yJruLSt%Hi2{S*pQ#LYxnc=7qI$D>^?8x)&|O8bl2{&L2>I9UWtnNZn@~c<^JH~1Lzgu5e0ytaHH*o@AZ*s zDRf$Y%anL>%dc2H{z6{qQ#xoLv`}N-x&@c?fd4{hp?COk;q!_wOX0b}{acWp$V9uP z`*UY^o3AjAnh`QO4fM5VKK$CJ_TcdSj3527Z}@+D{VzN*m%qC!Nrt1UZlu9OSIKLo z9wU5@!}V=Nq<>gZ50#a+$FeBIo;e54yKt{iKot^@-QP%u?Qh49a|dM!9; z(2yS(cw0IeUhH?#mYc3B2FXS(VhV6_irxOgUCI;4vBdJtx!U02k1yGX@S1al8Zi$ml)3 zUm48KFT$EuXNm>-JCF~Udkzq<8c?&A7S?X9o_*r-*(WZZePaHclK1aYyf*)i8_yxvp4a6uGo9F2U>&bOkflh>0+g`C>;g%}FsOjQ(&>0o;|;8e8MKCu z7Di`?&2|02gtO<=1ea?`*h7?0?HG1kkF3Hj48PVz#!XjX!7fA094k zfZY8$xxf>|07nDHqlW11z~IQ>fijV~gX6*4k$0jU`6idJ)Yd&*`O7l$0OsoXbC=Jb zyLkTG{P}Z8l7`uZJK`n`&wZBTV`u8bF`vk9)tdH;{OY@VzP&ZrO%L*HpKYNR=b-$^ z4w&?vKaDdkNw1maE6JT3EpT89^{;4R1-|s~U^sj3=?n+&D1uGPH+H3o>)3d4YQmnX zVV^NN(85hWPAh(JP@kC&>gZ&L0-oo-jKh!T){Sd#zjpokYmBU#OVu%>@3VDff{ zrXOIyhMO@ryKt!g$U6OJSKwLNt1p?K>*L9*&fK%U@|qNc@x&vw4d8mL!^}m`^N5APEAuIwSzjxW1?KxU!FpZ=}!aFD4#R;+N9i z^%~R3dTAD6Qb_KC_Y?bLFP3)RD6bDS*O|4J7lhUSAGPD zb$g7Q9E?16vLR5aEvyh8ehxXdaIuYFfn1328r~m@Jy&im+*n(`e)TA{f!y_0< z>_i+Ra_S)Lm|$!@`p;y=<;E+lVws4)b%3@S$5$)g`HC;bQnzl|y{8Ycq8DE26?MCV zTXszm@bCB#dhQiokC_484LTW*znWLTlW=cGw*xjGV)kjWIVbqBXzFzDw9r5`l%cAc32YF9O?<~|W%X%13 zaIQIZg98<19-b|cbIr_8OI^iu%N$BciD~|;TSTz#fQ>bAYwdw_m#|Abufx5%>NO1Nfo`o+gjr)=Q3ektT+Tk; zghaY3(!9W<%r9$!@Hk{cjvQhv<6IV=rQL%1cVB?!kMyznQ0wd)iejR%A#EHeF8)C5 zMf)Beu!pJSEiEJckLk9if29uRYap)W}Xv3JH5yYvK-5b}soolETUm5f+6njQ7h6yGRxOB`^?Z|i484yq;g#)ERqppo|e|^(-CblY?u@6+14zZf5BJ5>LqI< zPao3D{I>T3%_bCcb0S*0wf4T z_~iXrK_D2rT10*!*9C3eP{`Acawdd<)?1cx*#2DzADAAT#jFGXMt$#mc?!9?3A?QY z<#JJVhO#B7+vxB>1dwr!yh9le_(m;18Out$4XAGwSsqxD&EiLl6&n615d_>v-SJSl z&f+ueM&q-#iQ6d;!4@WSs4{`%X9ky#Jq=;py62)ud?NG2LjH)NR)z?jE`*b_9EjD1 zgc(f_jLR+it-rPa2(FOy&qC4%glbqiq74`!nk36v>W-Vv%YZSySz5{DQf~)wu5@9s z_AT8_h=LBv9rTSN>T%KQgl}*&cs{XSo~ekyRs=ADtZD=T+!&!)8nF5F#)!rWBzYbx zc7|_i)?9(BQCxD-133;z!}}aDhq_^b9y%SfidBg6x~5f~XwB|`LCJyIxP0l_rPbwy zTdSAm7ggcbSiZJ+>4jStZ!9fcT5W(YDbMWX9}M`ux;B%Hdo4PWXU!q@FxZmRy3!{t zo8Iw>-fmpt?x%f&%_(NqyNbTcZyV=&s)D1by4xMX1qCk(Z=VMeg(k;-GelLpuZoU_ zv*#9!iBf{WwnxFfS`sn8S5z2ymbBt%J;^j`=)S0CWqPLxWQs@ng89)VGJQb~yjK?Y z&qMDuof-GzK-(bDfFfw8NMvhFR08O7H`Y5!+#_OrW~R|-KwX+SbEYztbOdE*4iUOR zMBIDzR*OqOT+PkdCT{Vl@?13E8nONy%C(lbtM2xIBu*mtk;b^r3n(yZew{E(wy6v4GWo z_D#JH9004o?l;f=;mHY?y1Xu7HJ~<)BPavik4=Ef93bb*747E_vs$H}A|gw*yzGMS za*E=;P6ak6c`K7Y`CWO2!Xv{r@I#NuNy~~>L9ZBz&`69cHIt#k`Ahx=kg7m2QHZcj zMdhGLENpbG$}4m?0tns}MI-&@Chz0smWi_YR)D^OiRQ+_lMG=S9|?tq-e`FMiVj;r z$yfx`7@7vupC-Y2>I&rW43$31_-xTqCtntBkBkM}{?+^c@t=PP4J&Rm{^5)7nUMDS zEr0%DeKT9qGDe$@6I(N)ABNL7*_6#{JT{V9!C{$0O(@rdB(;~sXd=sW9UsExj1*I* z4k$sq@Ds|8f^_HmmYWRY!_qn=d=Jh20C$En4_Bzct%=T=aA$@)v6zsGsb)k_wS~TV zfsMd>yO2Cji_j{pRWJfEAt=aN{Pm9WBy5^}hpzT_ARHlXR3e&&1Cda3r={WMx9ugG z_*OeDG^&%^0cgreGpuw>ItV17%BF;uG`$ErDks9IGKsanN=2b|>@B7)t*%~Q6-_-q zzj|%?+T~MN56_5Gu~n^i{4F4m@C{2b>QP~_&Kt!D# zvm@uEIEFZPSZWsNzLIWs)A<^(aL<#+^j2GJ@XH1_oOe0l4UWfg!ykky49FYyC@bc4 zw{to{iMXDD=ODH6F0C}pCR+nuKQ`}CTt~Jn=N>^xz(?sQYo6MjR+e_=^&W?>JOJlI zYtv>+767Z`Z83NqF6prh7(aKj$xwPD?3XpbOsOSsW87P!RFz8)CIKa8Odx?`K|4@x zkkJcv9q`T60q~0&j3u-GRiL#m0hq@qM)?h{11Qcc9i<_>s1meh1_6F4RV0lg#^kl3 zMHzMGc$sFB_%I!injXH~#YJeA4b$F};%8#qj0re@t;nZ8`*Jj#kOC{=!rp!MW$0dG zqd}^C$4lSyD|e8b_l@8C%;k?jxZbOsQy?0X@3If{R5#Ujyo|nbqL|*X*dN9DUh_BrlJeEC>+l?N*Tq z*CMh*45g)_K)xXRhuVmkkDN(h4AT9<@yEtT>t}h8W1Ex86%tjz4FHd+mKxSZIR4NI z5dsd4GT!58h~5Ay0i=$J?4~pL5;xhv(n9){9&yiz^(`;XiD|3!_#DmIld_4;V&jJ} z^);gpI5DwwCPsl3)E$EGVscl;08=#Sh>fO zQCG?y3g8G9Se4-LM`bQ?Pbh&vdvD+(oKlkC)@GLtdg2m$^86T@^?j*qB{=`89}1WR zOy_~un4*#;e-67BQ2=r$0|l_eHQF&`nT(9sFc4RY$F0@*wRJcm-+5{E*5akLg}|;9 zJp(JG;gQROn5qny8xrN<%4ER8u7(%RMAtg-IY%CEV+TWEu!$|or+JZxmUp)X|J+_v zZ376M(TysiQwcd~@xO9Azj)=+wZ&U&>+|cE@~-`qeb*HIK^7I{8=@c}f>DA{hkuwf z{o7`QWR<{DJR@le`SrqWh9U>BRO3{GEga_n1SHtR9Bh&xL-FOn>Dl)q&g?4Gg#jHJks(>9oB_BnDT`(kY#Tw#d zJVDm8WyEm6G+rEHxDZ&q$QXu2CQUvSxM_kdltL4NSs4JJ-om^|t8zXnAm(mIPst?} zczLl&Ypime zjCKNe0AZK|MOXA1n@BCvrDuEE3%oR3C0uwl@+DF{wB0o&A!R zfrqQA&R$VI@x@nW9Kh#uKjn8G`)PRJ|NZeslq zn5tv!VSIZ{QuyUXLwyWj?7#cP&;Fw?g%{*M&A$8f>`@n(ntqP)OndjC!k@+I1I0{8 z6Gwq;`@#V@h%FVu)Y=^XOtxGT7f23T7LO;3%uSVjxMZ2~yy2y2nrW*G2&gxt!_MZQ zM^=E*Xb?$*IyZ(> zvyMl}FGAJ96e(Ek-iLOowugrz7E;s}n4va(f9}imUJhdEYiSsu*C&2@=IQr+06iRD z`smWn{lGYST})}U@&)7q66&-Q(`h|qLyke_=n~cqFsS+yU2Xt-YM5^@o5Vir0y>1K z*(WA@X|fTmB4Ej^J|*>$8)nvXSO_l=Cb@Hf?s*7kqLbZEN}83O5^E}xX3<%c0mD{; z`?}>9MrKHQ2M~p(%qEDbCrGi-l$Mx+9%*HQOL!4MKiIzI|6{=Z<^teu155jFbu7V=0cx;q>;iC#q=rb5tVye-=LE*95IW|ZvYP<&CD#JvrlxI#JKY2a)X8*1p3HHS|ViQdBAkO zvvmvv>}N;Wp?C`&1eqmFic3d^+CRvSls25vwszQN#~}p(2m(pM4rI`C@)Z}b>w#TN z+6zo7Q!zK;zyR|rTw_8;$_u4gV^lC5W&eB5vWcoB-hoR@4;56F(8ex!!x$mveR27o z2X3YXu`Fg(A}`5L zVWXS`n}LscY#Vh91Z?Ptb_d8fKC-YSxj?cxD{5+{kg`pS8f@yuR zB$E{g64L;(qP*nN1K6-E6TzhIyfUm9fA1io$(u&V#k7KAMJ^B`HgD9E2M7mMw|5F% zixGyP)rJ#=ON3c(=4?eMn~hn~6^dWQJf32YT^r}bcSz852E+&RET$uj!(!1?iHX2K znm-N~z&rvZu8NFqiig0gE5J&6bgBhNUKU@9CC1h=W9dUVIxE%<%L!p9S|22OvRUju z!~`XKt+-5H0G>U?wNN;80pT zVK9LwQ5#uQ3+7@Wy8M7rl@pviIrCmd*m*m#8gHJ!FAJbvT&{e7ZZ6cyQ`KWjP2{Xd z>Kk=r!gvfYeo5)UE`I>#kW=G2ObKd$iYg2ff-jKU#vg#yVLRi~6d%`; zq&WL04yr@MVm-aspoPR<5_~zxaY6KQJZWoni*|PRAzO)={y#DptbpIT@Xa5i_Wzb2 zd-a!o?t}!celjw_$?M69$%8RU(#iTar7o%D%<;_Om@!vLEq)FUNir-G!yyNvgoZH~ zS7R%06x<0VrND1~M=p{|;!Kq^8GufG(o|GNlYAs-BAHcAxkECxAYuG#U+_uO_?#Q#+XnUQkFMlEZL>|nVAkd)s?A-8H|qZ)AunAx-L@( zV-TRppYHwr-|c+O#~$7K@ppdekAB~{vG_lFMh1>;uiJ&ypk|9;=5N3z{iZ3f9|R@~ z|5aT7AvM5cM!z)v5)5JNd%IBT!of2%4# ziidqI5pA(kGyyE`7D|wPq11V~dSyld|LFEBTWlU_Fxp9D*+qe+FRqBqc+2kiVo6#Y z!*`YdwGMP?n1EaFn&G0*uRRx?b5OF~4@-RDrUEDg`XDwZd5*jVVO{D`?7~%HWPj8X zo-`#`^Z`m$QTiF@v&<@sBC7={ROOA{5IRT_0koju<(C5bNislpQF7X96i6v3IiGx(86Ow%}4Z(5YAVbpK3vaYWHLZv_~ zAss@QBE|AX0I5gDH&HA;+Ym*|tJ?A{&pCGHAqO;1_C$m@nyRRDD^PcQa(}K^gA_r* z4^Xu5h8x;K-UP4-j^6ZwAcI(9G`PY|Ek*|gaMsgEOW4$6OBg0C8gvByedH^kzS;{} zTorn7K3w7!NCH=EZLz6y0a2hGidO9oHis%CD4`670Wz(jL0#29jo_|hX64(fiv39_ z3Og-K4Tcx1q;mOkkkqj;W1^9f<0IE4RGYM_@wL1Roa0QBcJ4?uKG!RWTe8nDSx>Rb zt*>Xj-yL!;{RL01jU{sPIAKB~rit;_N=qYq%uuE4fvS+YV zw>6GKZ6Ru&sdz{Eb5^@!C`ZivjFkZz5%1bA?{J!4~LgHdzx*kEpC%Vx3-FH*LHdcd&d6!WNb^m(0SO)C=Sfh zZ8DSOY72Hl7HS?c59OIqEQ&83Gm1qzHPzw#V1OP1^c&Z%ufnx@Y4O(l!osDsHKhEF zfdyO4rIa;YZwt4p!1QNb0(og&8pZSJKiO`RHk}Y(dx}c81XRoJAKyV_bX~a}OB%`QsNlpA9aVt_P(Ks`6D710&Rkwspa$iEE%m#;>)@n4sOk z7fm$k2lAc9Ubkc^GMf$%rX~T9$(L57e_^Xv-6X+U5S@oXsjH-NNrL?50ankB6E)vQ z*d4cK@NrnQuzulaqGpesh*ntWj#W5N3k(5r)iXwtHP3fPOki3%#IW&0342NKTU)#W zyY>GMusOLta{Ts1tln5`_i-b^{Z-|iKz{{nV!+!U|HI$B_;<(c-LFpBA|$*CgB%@% zhv^3utPFiRBerT1yYIu37;-S2xzQkEI#CZ8aDcujvopG_8Z8N*jrY~pME4XS0T=bt zvu~b4Qu&eO>m5So%b5%IA0(=RwhPn%Cfvv_3AQVjUaYrAvmJDTp9xe6a$$4QrmKc57RAOtQB|I5o;b$dRH)+bE&L%@)3>$K4c-96~$v#F0tA|=RP`#8*>$2PEA~GSA>hWRH;3r zl1f$HnINZoFhk5DO>4q4jBCZCz#2>0mVIwGql>j$EJbK#4_GuQb{e6@7|s9Y^T5bE z?e4J8EO7<5ASdcWn0F{3Rjqgd-^6paRmZdODAsRZaKgagoNFx)Z*k%lV=H*!$TlVn zfAogNrws5|@r!4l9exZkqdmyeuWwYIpxnMOwp$ZJOfn-bq{UG1#LliZ560)X!Pc4M z9~aM#%!_r^-WmCN4o7BpHmfOTWb22oNZ|u>cr_MKQC4g={k7h8>y9wc@NzxcqwBc% z&2(2DINpf{|JJl)!&2_(t{Ox)OBcRpYz^jNV+OxUZg8m40Bq9H$g3Mqm^XQ@TJqmG*xF-k4y+cIjnORx8uDxIRmk;ZrVdn`)J0?O{_I;GR&_ADE!Q^uKMOCcP<`<6 z9tkxf{*Is1^eGxsb(Z%p58EbBc&*>uaTi^GA4<>nZ~Wow{t7BF{_Kyx^aJ-MC_SH2 zS_ZYZA=a4)(1CEEX-zHF)t7XT5fK|P4&0BNr4Y0Y4PD(>u0jz<-8s9Af%|)0YXXCI z1u13C@Wws%Z*%p>Ccq`C1R931>p+Rg^gH#4fUbQ~GdB}9yA52EF7`O)Ga%I_BLsLy z^=oKN)7bVFe?l2h(VJ-#s_8IgKX0CZvlVhx22CJsy+5CJDt$ibXTh~5P^PfnKoNCG ze9BmjI9q}Fg#zE-N68jqns^p8sQgV(EDi;J0F*V0?Hunu!r)1`kg~r!{e6V>*MO#f z`6C~E?+>F{?wL>jgWuVj5U~Bj6xW9V%eg}7JRW8yJy_u1+XDj9CIWuaHImFC08+n8 zGd6D&UI1Tl>0KdiTx6h|zLza7odBFD)-EL*#9lt29-OppDH!|@9!Yn58_d&~Cd#(p z#38E#`oM@yR1?GkOByKFEX_gXG$nf$F+9n-WY)>>yJyXs=0fMXIK$dUX$Crh!7i*Ip^wRj29 zG@i{dCQAHRl?_B5dThpDdmXs>hWB0jsZT>g=kHm0^W`s^;9S}9ra=>v32;r1wwR<8 z=v&q!vNe%h%5!fbPurGIAcigtSx~880z1C!C=}B*Jk)b{92Fcria^(Wy!;S@g42go?mK;QGO%STws6 zgvF)>Nw@Zw@Ese~cwp%DeqhywJD|UA@50QCAyM_5RsLE+*EYI}574mDV$3g|f7dfq z5z*h6A20B_pckLSXD^|#qq&F6bF1Dvb1>Z4Yi}z107$wuH|Mk2Bo{OpsoaJwpBRE2 zo_*>TQo5Fn5sW{=xt13%RQ$;yv^4v$n%~-5z}cQSsSj;4TsboE5P4<80Fo0AT1*Dy z1zCU>^f({HLBS1r@1Pd|;j^uKi%{ENd>7&_c}PC}Ui{zbCuZNYeX91Odg&CtI6M0U zK7XS4m!DKG@ms8C3B^a~&d?nU5VhTFZ4c5KV&uaHwjs;m^T66_ZRj53hlh+^%wTIC zUF|9D!q%J@jY_R*@~{q!L&kmJk~y$IF}B`1lsW!XK)%@AygfaP^RN#DaXIj0P#6sI zztaI&<4y_R<1Y8*LwA};)tE?F)1|ptC`=<)YL3K_0U#Fsm{vtH$lUwgUcV>cE zxL5R&Yt&yKQC=)@+_DwNUG1*tk!NI)DyGr5n}Ej^+oRQ!q}FH6go7uo-u&`#ZM(n4 z6k7MqB-_nokFK)wJLrx5QwzvCwKUbFLL-_To$X338T`+;ViFILF6tnKrXUj(l5TQg z+^Cu^{%Wv7YPAGWAxCX{l8BKqo3wgFq)f3l6&V_uJSPNC4cJ()W%wyX$j8jtzv=qbpMx{b-!UyEF{G5ZbJFWlvL@yKIfR!J0#;W+5jNh6E;Ob5j6K z3(WP@4z5N{_#VYSzuZ~+rgwCU<5sZa+O5@)dTzp-l$4wcXws zCXgkJN<-@`xLBMm3JrU_8z9Pc-Kb;LFlWY5cp$<~QUErjYeYl1Lw05T<)c$w!dS#n zQwc&^NT3Pz@n{gbW%Ur!+e*Sn+c4|^@B||PpQZHy_EqVgwz%k$!dZ>t}-xz>{z6H7GY6t)q5W{`}7pQF16-X4)>pDpAHO+0Ck1>9YK zED$?&Y9x`o6~|l;yuF zxl;g>dj2^+0Ai)$QFb#(4*QZRu=Ypnyi7>*;V%f;=wFtDIIvjX6%2bwau0yKl8hL-HC0nDhqZRQjP-)P}plQz)7 zx;nrdYV~++iR@yml*QH@2~Dhq5GYcrd$51dEX2*G@NSvk1<_S#9-igi0 z*eQIA_aFhtf(NMJ2a^^j2FUl?+pW#}07*i?X${c8vzx2KPW;|4k?t$L;zJXWu91)q z&XMxvA_2saCK30MxamBCa@lIpfR96vhYr%Pia?nV&GZ)U01+Qx2FBG$U*}oy1NJ2;a9OAfgy9G~TO=V$x3h_%evJGh}#5P|b z5>st^e23w&q2oi)pc>9%{deQ?U{H^UH6G~CF~PQvG#gxtaNo&OyQ}jHP=;UorO0@_ zUOGr(a)G`PPD!-mgr7SXFPvp`*J6zkgi-Cj&KoB@b%)h4?vGc^k z73}Ph^sELG@O2vkc}W9E=zVv_i$s$eVv0AEBwl-y+FASQ&Ed|Tq^{b!NK#=gfE55e zq1c>|QtN5%p$9fj8iEV5qs2_p2B8e{Zl4z=y6-w}0`*K1wf#?(^P zK2;e_?Nc!$MJbUkwg4@w*9;Ji#byTV)F{n0DJU-eoNG`!EYT(DVqi1m*y8WCdq0pD z8||jZu^~lr+@agsX`F+9~Kh0ZpOSzaUe1z1Ae4pcUjxaj)f#9{u!554nE z{{$LZaGW6T`1vD6Q(i=!)BE*Q)Vi*PW%3@<(PTIms@N!mB<|G(+FFVYSnL*{54Y={ z_Y342MHQCWN?nf{Entdml>9!FG&Z3jjN7`m1~LmKG{8q8rJ^M&EM`mZ@n#>FWh`lI z;)3`GS>~?hP&Z;{>CUFz*`gXl%6vo~nwvdbMqhM^rlv0ql^9Hv~YS07wG?6}ja?iJ@Yg*@2@@8vxCfn0>NB~nUtO0E% z4P``)Ch7E`s^?;^E^4p|5V8j5)ri(wFM_K=XT~NP@(S|^ph*Frdb$cED(oftu8d6OOD&UnKXf^8o5cr!=y3R^SCv zc3RMm(76s_pxZQSfx&bE2s6|E;^^@6>{EW0wmEzH4<0kJROR@-5qH7G`KmE(lL86}8R6@;rZGx) zX&y%ks;dD!A&+*>{pyB8AYD>%T)kzy(Xqn<}E?rdlU2d2xf? zAqX5Nb{0?x4L>Rl3@sY*8g4VKLCO5c4Yj2>@%YITce?GZlhx@9u%O#p(G*&k1=#59 zYsl#>+ktOrH<`;WWO%S?3F-u(xxf@x7AhzT1p?>~q|pohX`&D|NWw1qr)a`fh0=cx*}OvEo32?ZiLOOpF*T@wR!Kk=H9S%eft8TcL9x+T1X?JmKd8z zvKGWcnYZ7(*WMrQ8%Ht4)3aw2r2^+54dHZFOPF9mf}KNIlBEM^AQ}6XiS7V#6uqSR z6)>h^Ve`APL~MXCm8*=)8XmyHf>H@BK#0=bR&ppj+LU^nTZCynfRMic5r^k-SO!e- zu+;lg?-Vv?A?E>O<*codGs0H}uZ)7fSEVT=^dofl^-udbQQK@y9c6_pQDJ|H$ zM`^~93Faq3HHbTgnlv~~uvHl2^!an%qz%MVoJ1ltoodzC>}^6%NS~tG?>5C&=3-2q z0&kYU0XmUuqlx|wGn>c}Q0^~mG5%sS1FM;e5Ier&s7Dtg-N0uznbhq)_Sh|72)Lc^ zMltz#z$l-REv|HL_Q|#AcNAWXZyE<5P@(@2Dr&cxJH?-nJ2YY zAT3NKi38uMA^0;BWKS z7V+x^{`!JGeK&t4+)<|tPoHHIo@kuLjm1m@lA%jz=@te^I+|R(0EH1>N(j*Zj&9&7 zRzeL^Ejo>fK;zEnLG&{8QLj*Oz%+(=aRAo!?hS^dg#ZN~HS__qbdZJu173j-ABZ#3 z(de5e*{yf&eCQa!;DK}Ux?{zBqt1YJAerl8kK^>`T952_I!ENFg3`DLp5`h& zPBoz`-T7djpiP<|(sFEGWK{6_V!Y|)tvoO0Eif65_Tp5Xize|dbU0wKfyPLFr$71N zw}0rH-hn=~{$Fsd_<5z2ti=c;-sKTa3_>V_hY%gogX3aoAilE5#s zqlokvfW(A8D|l1dDH1ZlWvKY*cu+I}1Tm8b7)T&ZK+jOriO7~}SNiTEz_l%p|= z-pa_N;OK0cdN+(w%tZ!>uB^=gsaG+6Pv57E#Ui+oksGgTP`b-ob|5)f7>)DhTl)uo zdzd9PIZ?sv$NE95Tv17-H`^G{*M^XWki7DeIY2@WpM?gd8(Mp!?@ z1??Vrj0osdO~4O9;H%v`b^QJK=Rfzaj>6y18o^&5U^4oK*qsJ_rAS+b&lm>N!^DX2 zA*gIN6%PyKfA*{%g((f*z~HfP`Ju4gq=l`i?oBxogKe#&nEdh)*Xh`C@c$FsGq_K} z!bCKENK#hXz;Nlm98A16+}ndoBHJjh`RH$d`M*EHgZ~X9nCJtHV4`bdTSsSOl=1#- zX{hK{R7aO8FPnz!t~yw#Vskz;5UlDqx0Aou?djwX8P}9R!HB-K>2y=qYAJ&p)>S!j zupwJaYz@V|4!W!xfn$glTFadB>}_&sWRo*x28_ZI!LgEo;=mBPk_SmmYUGwYaQyhC zEhX2db1tb9StY@z5&jBAbRTT5&CVDRmxGuGxzY9^84@{^j1l+v5k8Dg*Oekb)fq8h zsEN4^)Y1SH2LlKp8a3qZ7?nmOSh|rqLzYmG@lNDyKon4mnL>m)71ijOYmTMjoSS=a z9`s##jJDt)`9cws05sPE1P67G!9&|XYuGhpF)yYMt>Je+?H~R0_aC7}{IgneX@0+M z1La04O82N^122eyFD6Y6&liPrfz&(j+9-NWJ08Jn=@?X_N0o8Yx{=r(`UtFBTBsN? z<;DoaW<->1bwn~)zipN>DFK7W5W$<}4w^{7!;h7~$wURCZJ!WlBr)<{=H}+nTz3_< z--v4U5PV=0D>~`u+{`vi&mXXMxJE5<1aq;B0O?dBl}$}xj1kyAL6J~JVa(VqwT6>d zEl|xRzQZSlRv@ZytPPTBr1eQcp@KHnqwek?Cv!#tr&-LVA?yjefs*HeeIa_NgALe+ zaaA0wJ%DBKM4-Kc4PBHEu~f|9su@GZD{c_p^7m&PRA8Dsk6E09j_m!P;vqg!PXAFDyc z!#PmXEl^<*uJOx}^Ney8&MrF3e}3-f0_j)@1UJq6iyt-J{n_~|Hy7`B5P9YghLSu8 zou$VgKX&6s-tbosw?UsQHK+O@Bihr0%uxAJNRKG+Ijw7>flFnw6FnWoM;?(B1pW~r zF!LHSu5ki4bN5f;U8-r56Q9D>0FMq5=gW*I<tinf#7oHMSp&TJ zd$A2PKB0b*PJ+8I!=elzVJ@B1xVQ@UPmS)RSVxixwu>e|N=TPlM}KfW4#T;qt|$ws z%Gzpq&@yEMsi3)&UkU2MYdE8`(gViT18>8!b?61&A#EPa3suUe*bf|puJZ3tlZmg& z52U(n=OAWYq<5vfhfGeWrQx9TE75IPw(8jKZo;s2GJpz^`LwZh9H@~(0l&ny5RI{F z>Za~sL*UItPVCE;5Pb|Tyj)I2)X0qL4?aHsiK7_RnNp~}y>;IZOP+40CP!p*MU)}q z#3hJ&ciO!HJ1rZIl~_l1ULEY-M?Hsqe+r@szakJH<>Tan2^we;hzL!cfuYuSx0+vD zSYDPGq%gC;5Kv$MLpfuzfm9`qv3UO>QVZk;Nkp9J!vs=}@5JN~>8;tF*;Cc?^J|M- zl1_aIwJf+hIX#3hi5SY;MehwD4P5$Q4x#rYz>JW2#7l$H%|b$eX3xd@^);F+V4Ncq z3U>mMb`rQE+LH}?E{NQzq&ySA27!X3TBJFN4IFZTw669C(Z`NWrnp|oRG6u*9v##F z056lL!ND?`{^TG2F$!MCCFZ>FOcR&FD4jnQ*r?X$~^)`}V)b$F2&1-r3!F(039bWs8uo)-JWv5?>q zUqY#d#NiIK^aGS<#FBl$6%KgfiF;4H`J@)KfYmVbX5{My$3`bvFQh^h8Y=JP`~c^U zR27_O2Q}COq z7nlsnoY)StY{pZB_pA({KRZnWqcQBhimq_2oBB87^^NcS@4om)8;9fd-zf3g-yK2O ziArMVZPwT^(>(!{XnUV4GTN=PQ(|t`2a{{W5WfJupG%r9-^AQ7G-hNLP;-6u?0 zZ6`WmpbxHPI~II0-(4E|QM$p&Br5nPcYtsE*q6&+@5w0^9C(N(!pnWlcTr?3Ezjx< z>Z>sHr9xFa?HZfgITmB50#!pN!c5D-5QjAM;$3yDgf7%Z1Cd$h(ia&MO4goKG;g>l z&`sjwe9heGld(UT^+XK~;A0vNEP|{(v0emxjh`F6umPHWhnT?WP1CNlhW*BPSqGC5 z|HoeV1y%jIHk0~|ML>BeAwCd7e%_E>IJP_>oS^u=6lE!=$h?zd+8FI}U=Okwu}z3( zG}1(7>@w{p=Z#(g?M5jTK5B*h3Aq)v%0{MPGQ`kqeGiIpX|4l7JIEEonJN@cj4U=8LWgKv#~H1M zdmPVeP7Ql4LgR}n;GbE2+5`ZMsX>J0z~051m|*)88@nUy*p96yGEicTQL&dsRo%!vD%%dIEB9zDGdL)`dA3Rewr zJtGv*fn+aG0y2{oq*rKCcq%FWjN9IT;kn*YM+*!>);X_&W3K96y`nS_yR1W^t3CBq zDyHHZvMmoXO3Ae~*omhbNbn5>t?|ecm&#pQy%tF$Nvy>pjmuZ9DLsidAx(zZI zVt4hQ6!f1;SM^K>3cFrczxp%XT~)s7n(5A<3lS9mppyg{!Ho++7a4?X+$gBoLw3WK zAFZLWffnj{Z(dUN*4LpdKPmstDnCx=Rv8XcF13UPQ803Hc)ZJIqI2}p=T5}=m^CTa zuIi|8Q`jR{tgd9t^v(0TujJW7*)*t2t4IRcQ7fXI0X4dtxVNT>FWy|GFXJAL=e{MQ zA!d=K{+`C(kiC$L7cn-i2#c$dD?j<RsJj(QAjQrqL5pwVXFwWP;$-8RX(DUUaBb1=}tx``j1iSESCelbCKC$2$gdYVKwT9Gvy)UV!~z!QKo{o5hk4pCxH{)CXE?S zm@jHbd>L6C5{ZIwY+yvI-)6iEA3?yJCKowidn>WCq^B*F1_?Nf{6xf8 zlQb!Di#=k;HV<<={KsyyTjh~YSW>97B>e)N5na2sIJ&)AiM`cMS^YjGaADzh^lsuG zW=BweEa2*8Z0X7+;+OUKF!fv zE3#`1e$+@+aV_(OTMN`FO;yhjO3bL{LyvP3)%rSiJMWCfNouOqHEEq#yH+HodoDdo zK2&>nm)*ns1+|^GU#Z&eD?j`3^#g8!ou%#GXtiBFe3GL%F(aLHrcb0KqFvMZa7=u> z3saqvN^gWq1iElJdL_9dClX~h7sEQ07yvJ%4d7MtQ!7OZU(v|b$`6EAl-dMWOGA)D z(x-Pz3y=luTcUqicgpE+HUGSh1jInpAM9Ihm_87fAvZVUnKpcu9KmFDdOaR) zXPQ!qwl-RE%?Zg@W9CSIDUY8Y6F~z1>5hTSZJUl(%QXBG&>c|m9_OR^D@K8n&xS?2Q+7`s%Q#co}x(sQPlA+y3hK{N24Qk zj*70_;-KQ?CRpGLo-nbq{h9N9TH$&8O^tLfIl3#cG=DL4Zzgha zN(Fipw8|t3a7_S?J>lDxt=jf*-emq@5-{fDb8`nfD_pR?yh2(oJH<7CsVZ-NZteHK zeRuW&`f|&f&GVmtJ;e;7qH$$0&a;fyZTP|RO6gE-#$RR&6?={yQG6o8B=De0hdNKC zy<(x$9qykKFFtF2!~N){RJXNKk2xut z4jLLBD<}!t7OdJ9rF^LZ27pPiuXC5?^->xxT*ciVJ^3;#rzEQ|;@J;==Nrc{;$OAt zLG2Jdzr_IoG>r9Y>7yj|Kqi&VW?&MWeNJc_sy-)Xqxbin{moiCYMt~uf$VX8Ozt%r z*>nsE?9u?C!3vJkK;8LD$WC0z`VqEV*VuE}Yp6mg(i--cG9Vb-RACR6U)iC zUHV=H*J@mA<3X?^FPsur4)3EwJ;fq&Jw2wts!40n>5WPf?`+&zzPWa9W$pGPe#9j0 z!xmM`P(dRWj!gQi;Y8aQt*b6cMg4ZFOi&(!%t5pOGBbOIyS#8U%%XK9yreWl^hZkE zhSWwij*fPLZR8Ua133&6!WNFD0u9ms$As8%RNMWDIBA~`YKERvhLxhx$e>e|7Bu&l z6>dl`RveIRJ#(9}=7N_X9ebm$o@9I(B56_TpoeCQ`9I>OZ_!w0fu$yi4#AbK8SRwR zZ-VHS0q(-lZFOu#Ds|f)j|hbC?H*D@%{1byt)(rIDx2y#Ck;bw4R;?|7eiK;^5F$A zP~#RxBRsQUg0->QD3R0v6?-L?@0ovF!nqui5y^5;=!xy;S1iDAt}~S7s~EgijLSoU zFP0~?sz=mwB(NuLm3xc8&2=rJaR2o+Oy1#x^&3ZoE2^^mo0tFcH;+@6KWyDzdp2nl z?(XqgGT060!4i~4PYDB>#5>#JZU}8W47KHF(}UT?A~M^lX_SE0hNIN0dZme@(-ezZ z=}$->0+@oVcP7+U7*;#6O_2x@3wDS&uBv49EgH)*?%XFb)4^PzMV|z=XCvx?6cLu$ ze0c4MOou|Hnwb>rE8!4MZOp+dl`rdmp=b3aw4!ZP=F>qRqA6KOvaNyu)zC{PQ|$?< zTxT_2ij84~RZ>j)rC#8+pw)-Tz~((vV?ETjkYzjjQlp1$I{Lxmb3Z@t*&ICP|EWy& z?(%2eKMq^@^R_f8AMV9H6H2>7;A%P+?bOGgz%UHl)Y7wupS))f+A8S zJr@m|Oq`4eu$$j?J#VQF|CzI%I zR&Njr_JJ)%GIKdM{RJ%RytTY2*)F| z9vhhRg@Ag*a+OPeV`oyWXX71;@tg798(L)oY)~F&Tv>ahv0?XP0+msS1EW=JZ#TUW z46DDO)xXUsrLk67xyHVy42(iswl+F&jGhKIkIMZmn+px z&%>p~^}upL+go~%Nh2nUW#LIBKBi*;3D<0?r$=jkxh6j3e4y_lP0o`wgKNs{vE5w9 zZhUEzVCCNamo|zY0nrX0jYbFQ@MoGkob=$xv+f|4^(4EAf-@l9go(fO(k1KJlL9eC zcp;r@ORI@&LrtMD{m3q;OPf+DM_7q^78&Q~dLaw8Gf`%hET5dz;knPxaXwtJ`~ojn zswcyp-+t+bci*248hq*{e}ye`Nm@SNLet{CiDab;$v(2m8VWL?>YDW%pTsRectzhzEJ z)C}rkMZi%@004r(NwpuT6F;Q^;fa#$cd-g8tU6_Hy1L8n{%-3lO>3t<~wmp1{hd_rL3AvlnP&Lg&@ZopOJqUK3k<>eMp5 z-H%8BS6zd?n9~RdHzC3!!E0_*hT&JJodJMk;SRIaW6QcS8Ryo`pDWgti9YMz&$&w7 z5AJ^Vk9Booi0?#x;6D|p4mR$}l_{4%r{L|z+%lRsHtr_UFsAsR#;>&Nb|+#*%WFZ3 zY3qW?<#DGICL%^2z_e?=Jw|C>mLlCk5b`4#b(~3_v9BL5GJ)=ox*176O)6b77{%^e zyKFLA4$5^DXboZoNV~oN%+*_Osf&~In(1ufA>3%8cHVpF0L@}6|BT}~nra8092tf% z8n{O}lMn$tD)uXSEe{n%?|h7VWYFpoZ~}~qwi8FHpRbhFmTxs;^9wyW@vF0TkmGph z-OR|yNg%s&qr(_+{|;Z*T#-7#QvNN6lM9?l8Vd9*WLDNfTo2oI%Ste}xr*0}sKP2P zr_d+!f5lC{d9vb5_|OR0?0GLd{el9dy8|1n`~E+E^GDAglN9k$5g_cSrFghwob+Tr zLB{Il6s*+sppUY~c`(b-xqa=@MRt*i+Flx&!=LdXdZL?s6GX>?liBm;lO)8~I=NLr zmu;yVCpP2A3p`QT%tAE*rGo#j8XcHDYtRqDu_+sstG#G>wwV9~o7)#euQfI6YgYKC zMOIWmjF=>bX#8NyZ`mP*PhYg}wtmk0F{E1&t*$H&Ccf4T_B^G=vp6TFn>f>z2Uq7=ME(_{RbygB@s%=4(FFk=}m zBRwD6SgdM$pT%8;Q>PS~1oL+qNS-Qio{CjFW%;iunKrps^Ir0bw(AO#nsTnY4n)kg zIUS?7$!GW37qL_DLk^U+JcE3xJ8)R!Av7sGetzL;>hl9^WM07oxnF*W<7IHtgzao^ zrB0LcRZ|XQ@$e9Lb*?shg(LGH-txQh; z4S^i6&~Qoml4-HDYBPl>Zbuq+G!=)_T)T+Rx~W!p=}u}=9`(a{E@8b`p$@1c{}TkTWW_*{Ozz)p1I9wqoq8#c5?!ZL{oJy15uvp>u|DCb+c2O3hUJNr*q z2&!12aIu)EKl0JRpR@QBF9)2!YgyI8b=rlW!G(J8y{U->usqQDbVcg1P^tf+Ms zl*xT)Lx^G2t!9>-UIi?T5AZ3KWpAY+(v(;jCdRN};o@2n zYejFyO&eV`(Ss`EoxOJC)Tv9^>2NlC8sl%#u2#1lfJn};L@GCSoj;Q@XE|&TUIV;^v0|18 zX~;?hW>85O$Ek1`OGtg8%eRw)fZf~=Ty3~t`IG;C>7Tzo8!vwM#C}D8?V#Lt6S1q8 zPMPZTgyX?7dN%`a3P@Wyi9fz^dCcO+?yeg{Dx(pl=GB&-WW}A37x$ipX?gkX8@k2G zO~4YFs0gk1BA3m)op$2`dq=qVMZY-3$}z;UJl#+e;3!p_0baZ^9$`zM(S4%j%^^23 z+R>tTul}q4OWkIplfD|Zn2%FN(Dfp!pv1F?^T{oG{0%ZlP`23loB@6)`9)G?Mb!w5 zW30O=QuLjAY%Pv9hZaiQp+`a)NNnkrFlUx~XZT4fyKXqT!IByk&gs8@K=^ zFi8_6Gt;5DV|c=1?}&wnP%U?HBeIeFSnj&+XsZh7brIg;*(M}djpA@=sDt5F06_e& z;joy?xS(`zB}aH4mG}%l1$)EpqT79xKeU-DWBrh#G%`fpHIlE&R!Pcz?+T}oq z_FAbHineL%(t{$JbN{+^fn~be2UTS1Bav;$*Ni<$WJ_~t={6_bCpjX>qW78$7f^_W ziJYHY;dHJxH4PL((c~AJwOBp3*g8a2XAj`8lutql^>0g{DdrDW%o>|IWrKWc(KOTG z4!mPIoTG6xkt)u16xWiP)6pQEVsY#tNwfPi!u;&}$y;ctQ>dKhpHm zCN?_*WljN1a#+huMLNVcH3_C*Sn}c*$v{|%q9b`K7n>5Ca_FW}odKZ)sydTl9*$XA zd|vmxzWVBI`c@w4vM|Oq2pcBqTtYpzA9The@Pt%wn;3~LDd#0nd}vxqfh4WT-!B`^ zy_LMr&tGl;V1G^FZ{~^&{q4LSmGJC9Id}+9A%Mi^a6mi(Kb4u$K2WP$7XEig5>>mv z@=U(M#74jBy{0{?wV3;3Z7oQvaywK~GJa@(1Sse$WFj6U&klw~IvqFXdvtDsk!%TX zc_(kUYjE>qm(c2(Yh?=!0fMiRPrLC$6(yA68MXCGw`If3>YSWu{1vqlUQa#AHrykS zx2Hofx??w3uQ#a`1qkqrN3SVn_F90u`BYRLHOA2|MBsKVcWUM6aAzq?9jZR~we^4b z`!Byg^YP7ezUk07JN5IMxc054A9!*t)`i}1+uXS5#x zAHZyQv6R=)Z?JruoVx=XkB8z7+F`<#(_pO`F{&xS<2 zmF!u>k3N5P&-zA=TYSV?WKiXzV-oPHa!n-k4y)49`{sy<+$tvk|qdNLE(o`#h{o$)L% z*X(L>ciKhGu5(j2hDJBLo2Bvz#I?Qs458EdeK!;&Gj&)PBpR=HSmCnyTK4bL9<&>* zS-Q!gTPOau18h%%0PW1{ zsGAxG4;@C2X85#eg??v5OQH02dk3HW;^6wNiH5L{`g3&BA8@HY=VYe184P#oG&m!^O>3n(?DG= zhR$u>cdxGTwtVZt;P#c(Ti4&>gZRfiE)TqCzhOoSN}e8EHmqY6X50kp_{5sSPXGy9 z!Y2(h@PD93PR!hXI2D%-m1mDOiS38S20uf$4PNFNysVVGxMY*DhOd&(Ro6EZ zm~v}uRvm31P399THb|M9CRJTbAI6t>@ex@ub1reHXC{_6*GTR1n&IjgCtjL8T^HAo z=xy>yMmK2wu5G)hdr=?rMby@Wfv)WL?fRKnss?M{nrPv;&|)2m(o>HqxR4}Ri< z*+HR?TNl!EvEX=))5l&w6Rx;q|k+@2l z^WHY)-}en&ghF`|B8WpdQgQQ|>#%3&1wxlq*7YtxU6*{nW#p%v}AC zu0>p8JxstVNuK(Ld&rL9^ZC1B^8R#LDxk|Pd44Qy7M*|h~}4w zu-7e?W-f1hVUZ(If~}q|nn2+cKEz{22u$i_+{B7)vcWFJo>0s-Q;3Iy&=G|ud5Af8 zF%4dX<)oe%Lbxke6~9Wlj-ZMn^gwb#GHO{)#j;hTOGYMfbPIDGS`vvGPL$+cGrG<# z%mGd(JRXny$cNwhuMb~6=Kj_{Eeys^=fmBIR4x1y854#Q(Z^6hks;3M5gViv%DbW! z2Js_6oy?31rr;u`)m1#;0eMrqSweZ4bilXj+bjO^9MEipyBM&+W+}=x#y9Yj&EnX% zH~R$JWOrJiM;FEA$JdT_GfX56#L0J{i=+uWlU%Zx?I8x&?kpz|?{bmo?&$*^;q>Vs s-lQu$4y{W@X5h7HTjH{y3^2?d0U|x4oQTenDXs+Rj+6<}w1sZ}7pRf;ga7~l diff --git a/Romeo/src/AiGenerator.cpp b/Romeo/src/AiGenerator.cpp deleted file mode 100644 index 441ddc0..0000000 --- a/Romeo/src/AiGenerator.cpp +++ /dev/null @@ -1,370 +0,0 @@ -#include "AiGenerator.h" -#include "HttpClient.h" -#include "JsonParser.h" -#include -#include -#include -#include -#include -#include - -namespace Romeo -{ - static String ReadFileContent(Arena* arena, const String& path) - { - Assert(arena != nullptr); - if (path.Size == 0) - { - return {}; - } - - char pathBuf[512]; - size_t copyLen = path.Size < 511 ? path.Size : 511; - memcpy(pathBuf, path.Str, copyLen); - pathBuf[copyLen] = '\0'; - - FILE* f = nullptr; - if (fopen_s(&f, pathBuf, "rb") != 0 || !f) - { - return {}; - } - - fseek(f, 0, SEEK_END); - long size = ftell(f); - fseek(f, 0, SEEK_SET); - - if (size <= 0) - { - fclose(f); - return {}; - } - - // Limit to 20KB to keep prompt token size reasonable - if (size > 20480) - { - size = 20480; - } - - char* buf = ArenaPushArray(arena, static_cast(size + 1) JULIET_DEBUG_PARAM("FileReadContent")); - size_t readBytes = fread(buf, 1, static_cast(size), f); - buf[readBytes] = '\0'; - - fclose(f); - return { buf, readBytes }; - } - - static String GetEnvironmentVar(Arena* arena, const char* varName) - { - Assert(arena != nullptr); - Assert(varName != nullptr); - - DWORD size = GetEnvironmentVariableA(varName, nullptr, 0); - if (size == 0) - { - return {}; - } - - char* buf = ArenaPushArray(arena, size JULIET_DEBUG_PARAM("EnvVar")); - GetEnvironmentVariableA(varName, buf, size); - return { buf, static_cast(size - 1) }; - } - - static bool G_OllamaReady = false; - - static bool PostWithRetry( - Arena* arena, - const String& host, - int port, - const String& path, - bool isHttps, - const String& requestBody, - String& outResponse - ) - { - if (isHttps) - { - return HttpClient::Post(arena, host, port, path, isHttps, requestBody, outResponse); - } - - if (G_OllamaReady) - { - return HttpClient::Post(arena, host, port, path, isHttps, requestBody, outResponse); - } - - int retries = 15; - while (retries > 0) - { - if (HttpClient::Post(arena, host, port, path, isHttps, requestBody, outResponse)) - { - G_OllamaReady = true; - return true; - } - retries--; - if (retries > 0) - { - printf("Romeo AI: Local Ollama serve not ready yet. Retrying in 1s (%d retries remaining)...\n", retries); - Sleep(1000); - } - } - return false; - } - - static bool PullOllamaModelIfNeeded(Arena* arena, const String& host, int port, const String& modelName) - { - size_t bodyCap = modelName.Size + 64; - char* showBodyBuf = ArenaPushArray(arena, bodyCap JULIET_DEBUG_PARAM("ShowBody")); - int showLen = snprintf(showBodyBuf, bodyCap, "{\"name\":\"%.*s\"}", static_cast(modelName.Size), CStr(modelName)); - String showBody = { showBodyBuf, static_cast(showLen > 0 ? showLen : 0) }; - - String showResponse = {}; - bool showSuccess = PostWithRetry(arena, host, port, ConstString("/api/show"), false, showBody, showResponse); - - bool needsPull = false; - if (!showSuccess || showResponse.Size == 0) - { - needsPull = true; - } - else - { - JsonValue root = {}; - if (Json_Parse(arena, showResponse, root)) - { - String errorMsg = {}; - if (Json_Query(root, "error", errorMsg)) - { - needsPull = true; - } - } - else - { - needsPull = true; - } - } - - if (needsPull) - { - printf("Romeo AI: Ollama model '%.*s' not found. Pulling model automatically (this may take a few minutes)...\n", - static_cast(modelName.Size), CStr(modelName)); - OutputDebugStringA("Romeo AI: Model not found. Pulling model...\n"); - - char* pullBodyBuf = ArenaPushArray(arena, bodyCap + 32 JULIET_DEBUG_PARAM("PullBody")); - int pullLen = snprintf(pullBodyBuf, bodyCap + 32, "{\"name\":\"%.*s\",\"stream\":false}", static_cast(modelName.Size), CStr(modelName)); - String pullBody = { pullBodyBuf, static_cast(pullLen > 0 ? pullLen : 0) }; - - String pullResponse = {}; - bool pullSuccess = PostWithRetry(arena, host, port, ConstString("/api/pull"), false, pullBody, pullResponse); - if (pullSuccess) - { - printf("Romeo AI: Model '%.*s' pulled successfully!\n", static_cast(modelName.Size), CStr(modelName)); - OutputDebugStringA("Romeo AI: Model pulled successfully!\n"); - return true; - } - else - { - printf("Romeo AI: Failed to pull model '%.*s' from Ollama API.\n", static_cast(modelName.Size), CStr(modelName)); - OutputDebugStringA("Romeo AI: Failed to pull model.\n"); - return false; - } - } - - return true; - } - - static String CleanAndFormatDescription(Arena* arena, const String& rawResponse, bool enableCoT) - { - Assert(arena != nullptr); - if (rawResponse.Size == 0) - { - return {}; - } - - const char* pStr = CStr(rawResponse); - size_t len = rawResponse.Size; - - const char* thinkStart = strstr(pStr, ""); - const char* thinkEnd = thinkStart ? strstr(thinkStart, "") : nullptr; - - String thinkContent = {}; - String mainContent = {}; - - if (thinkStart && thinkEnd && thinkEnd > thinkStart) - { - const char* thinkTextStart = thinkStart + 7; - size_t thinkLen = static_cast(thinkEnd - thinkTextStart); - thinkContent = { const_cast(thinkTextStart), thinkLen }; - - const char* afterThink = thinkEnd + 8; - size_t remainingLen = len - static_cast(afterThink - pStr); - mainContent = { const_cast(afterThink), remainingLen }; - } - else - { - mainContent = rawResponse; - } - - // Clean mainContent (remove titles, markdown headers, leading quotes/fences) - const char* mPtr = CStr(mainContent); - size_t mLen = mainContent.Size; - - while (mLen > 0 && (*mPtr == ' ' || *mPtr == '\t' || *mPtr == '\r' || *mPtr == '\n' || *mPtr == '#' || *mPtr == '`')) - { - mPtr++; - mLen--; - } - - while (mLen > 0 && (mPtr[mLen - 1] == ' ' || mPtr[mLen - 1] == '\t' || mPtr[mLen - 1] == '\r' || mPtr[mLen - 1] == '\n' || mPtr[mLen - 1] == '`')) - { - mLen--; - } - - if (enableCoT && thinkContent.Size > 0) - { - size_t resultCap = thinkContent.Size + mLen + 256; - char* resultBuf = ArenaPushArray(arena, resultCap JULIET_DEBUG_PARAM("CoTFormattedDesc")); - int written = snprintf(resultBuf, resultCap, - "
    \nChain of Thought\n\n%.*s\n\n
    \n\n%.*s", - static_cast(thinkContent.Size), CStr(thinkContent), - static_cast(mLen), mPtr - ); - return { resultBuf, static_cast(written > 0 ? written : 0) }; - } - - char* resultBuf = ArenaPushArray(arena, mLen + 1 JULIET_DEBUG_PARAM("CleanedDesc")); - memcpy(resultBuf, mPtr, mLen); - resultBuf[mLen] = '\0'; - return { resultBuf, mLen }; - } - - bool AI_GenerateDescription( - Arena* arena, - FileEntry& entry - ) - { - Assert(arena != nullptr); - - String headerContent = ReadFileContent(arena, entry.HeaderPath); - String cppContent = ReadFileContent(arena, entry.CppPath); - - if (headerContent.Size == 0 && cppContent.Size == 0) - { - entry.Description = StringCopy(arena, ConstString("*File is empty.*")); - return true; - } - - String cotEnv = GetEnvironmentVar(arena, "ROMEO_ENABLE_COT"); - bool enableCoT = (cotEnv.Size > 0 && (cotEnv.Str[0] == '1' || cotEnv.Str[0] == 't' || cotEnv.Str[0] == 'T' || cotEnv.Str[0] == 'y' || cotEnv.Str[0] == 'Y')); - - const char* sysPromptNoCoT = "You are a technical documentation assistant. Provide a single, concise, unified paragraph overview (50-80 words) describing the main purpose and design of this C++ component.\n" - "Rules:\n" - "1. Do NOT split your output by header file or source file.\n" - "2. Do NOT include titles, markdown headers (e.g. # or ##), bullet lists, or code blocks.\n" - "3. Do NOT include tags or reasoning text.\n" - "4. Return ONLY the description paragraph."; - - const char* sysPromptCoT = "You are a technical documentation assistant. Provide a single, concise, unified paragraph overview (50-80 words) describing the main purpose and design of this C++ component.\n" - "Rules:\n" - "1. You may include your reasoning inside ... tags.\n" - "2. Following the reasoning, output ONLY the final description paragraph.\n" - "3. Do NOT split your final output by header file or source file."; - - const char* sysPrompt = enableCoT ? sysPromptCoT : sysPromptNoCoT; - - size_t promptCap = strlen(sysPrompt) + entry.HeaderPath.Size + headerContent.Size + entry.CppPath.Size + cppContent.Size + entry.Description.Size + 512; - char* promptBuf = ArenaPushArray(arena, promptCap JULIET_DEBUG_PARAM("PromptBuf")); - - int written = 0; - if (entry.Description.Size > 0) - { - written = snprintf(promptBuf, promptCap, - "%s\n\n" - "Current description:\n%.*s\n\n" - "Header file: %.*s\n" - "%.*s\n\n" - "Source file: %.*s\n" - "%.*s\n", - sysPrompt, - static_cast(entry.Description.Size), CStr(entry.Description), - static_cast(entry.HeaderPath.Size), CStr(entry.HeaderPath), - static_cast(headerContent.Size), CStr(headerContent), - static_cast(entry.CppPath.Size), CStr(entry.CppPath), - static_cast(cppContent.Size), CStr(cppContent) - ); - } - else - { - written = snprintf(promptBuf, promptCap, - "%s\n\n" - "Header file: %.*s\n" - "%.*s\n\n" - "Source file: %.*s\n" - "%.*s\n", - sysPrompt, - static_cast(entry.HeaderPath.Size), CStr(entry.HeaderPath), - static_cast(headerContent.Size), CStr(headerContent), - static_cast(entry.CppPath.Size), CStr(entry.CppPath), - static_cast(cppContent.Size), CStr(cppContent) - ); - } - - String prompt = { promptBuf, static_cast(written > 0 ? written : 0) }; - String escapedPrompt = Json_EscapeString(arena, prompt); - - String host = ConstString("127.0.0.1"); - int port = 11434; - String modelName = GetEnvironmentVar(arena, "ROMEO_LLM_MODEL"); - if (modelName.Size == 0) - { - modelName = ConstString("qwen2.5-coder:1.5b"); - } - - if (!PullOllamaModelIfNeeded(arena, host, port, modelName)) - { - return false; - } - - printf("Romeo AI: Querying local Ollama (%.*s) [CoT: %s] for '%.*s'...\n", - static_cast(modelName.Size), CStr(modelName), - enableCoT ? "ON" : "OFF", - static_cast(entry.HeaderPath.Size > 0 ? entry.HeaderPath.Size : entry.CppPath.Size), - CStr(entry.HeaderPath.Size > 0 ? entry.HeaderPath : entry.CppPath)); - - int maxPredictTokens = enableCoT ? 600 : 300; - size_t bodyCap = modelName.Size + escapedPrompt.Size + 512; - char* bodyBuf = ArenaPushArray(arena, bodyCap JULIET_DEBUG_PARAM("OllamaBody")); - int bodyLen = snprintf(bodyBuf, bodyCap, - "{\"model\":\"%.*s\",\"prompt\":\"%.*s\",\"stream\":false,\"options\":{\"temperature\":0.2,\"num_predict\":%d}}", - static_cast(modelName.Size), CStr(modelName), - static_cast(escapedPrompt.Size), CStr(escapedPrompt), - maxPredictTokens - ); - String body = { bodyBuf, static_cast(bodyLen > 0 ? bodyLen : 0) }; - - String response = {}; - bool success = PostWithRetry( - arena, - host, - port, - ConstString("/api/generate"), - false, - body, - response - ); - - if (success && response.Size > 0) - { - JsonValue root = {}; - if (Json_Parse(arena, response, root)) - { - String desc = {}; - if (Json_Query(root, "response", desc)) - { - entry.Description = CleanAndFormatDescription(arena, desc, enableCoT); - return true; - } - } - } - - printf("Romeo AI: Failed to communicate with local Ollama.\n"); - return false; - } -} diff --git a/Romeo/src/AiGenerator.h b/Romeo/src/AiGenerator.h deleted file mode 100644 index 2b41e0d..0000000 --- a/Romeo/src/AiGenerator.h +++ /dev/null @@ -1,14 +0,0 @@ -#pragma once - -#include -#include "Database.h" - -namespace Romeo -{ - // Generates a description for the file entry using local Ollama or cloud Gemini API. - // Returns true if generation was successful and entry.Description was populated. - [[nodiscard]] bool AI_GenerateDescription( - Arena* arena, - FileEntry& entry - ); -} diff --git a/Romeo/src/Database.cpp b/Romeo/src/Database.cpp deleted file mode 100644 index 3e77d1e..0000000 --- a/Romeo/src/Database.cpp +++ /dev/null @@ -1,302 +0,0 @@ -#include "Database.h" - -#include -#include -#include - -namespace Romeo -{ - void DB_Init(Database& db, Arena* arena) - { - printf("Entering DB_Init...\n"); - db.DbArena = arena; - db.Entries.Create(arena JULIET_DEBUG_ONLY(, "RomeoDB")); - printf("Exiting DB_Init...\n"); - } - - struct ScanContext - { - Database* Db; - Arena* TempArena; - }; - - static void ProcessFile(ScanContext& ctx, const String& path, const WIN32_FIND_DATAW& findData) - { - // Simple filter: only .h and .cpp - const char* pPath = CStr(path); - size_t len = StringLength(path); - - if (len < 3) - { - return; - } - - bool isHeader = false; - bool isCpp = false; - - if (pPath[len - 2] == '.' && pPath[len - 1] == 'h') - { - isHeader = true; - } - else if (len >= 4 && pPath[len - 4] == '.' && pPath[len - 3] == 'c' && pPath[len - 2] == 'p' && pPath[len - 1] == 'p') - { - isCpp = true; - } - - if (!isHeader && !isCpp) - { - return; - } - - uint64_t lastModified = (static_cast(findData.ftLastWriteTime.dwHighDateTime) << 32) | findData.ftLastWriteTime.dwLowDateTime; - - // Try to find if we already have it in the DB (ignoring \include\ or \src\ offset) - const char* relStart = pPath; - if (const char* p1 = strstr(pPath, "\\include\\")) - { - relStart = p1 + 9; - } - else if (const char* p2 = strstr(pPath, "\\src\\")) - { - relStart = p2 + 5; - } - - size_t baseLen = len - static_cast(relStart - pPath); - baseLen -= (isHeader ? 2 : 4); - - FileEntry* entry = nullptr; - for (FileEntry& e : ctx.Db->Entries) - { - String dbPath = e.HeaderPath.Size > 0 ? e.HeaderPath : e.CppPath; - if (dbPath.Size > 0) - { - const char* pDbPath = CStr(dbPath); - const char* dbRelStart = pDbPath; - if (const char* p1 = strstr(pDbPath, "\\include\\")) - { - dbRelStart = p1 + 9; - } - else if (const char* p2 = strstr(pDbPath, "\\src\\")) - { - dbRelStart = p2 + 5; - } - - bool dbIsHeader = (pDbPath[dbPath.Size - 1] == 'h'); - size_t dbBaseLen = dbPath.Size - static_cast(dbRelStart - pDbPath); - dbBaseLen -= (dbIsHeader ? 2 : 4); - - if (baseLen == dbBaseLen && strncmp(relStart, dbRelStart, baseLen) == 0) - { - entry = &e; - break; - } - } - } - - if (!entry) - { - FileEntry newEntry = {}; - ctx.Db->Entries.PushBack(newEntry); - entry = ctx.Db->Entries.Back(); - } - - if (isHeader) - { - entry->HeaderPath = StringCopy(ctx.Db->DbArena, path); - entry->LastModifiedHeader = lastModified; - } - else - { - entry->CppPath = StringCopy(ctx.Db->DbArena, path); - entry->LastModifiedCpp = lastModified; - } - } - - static void ScanDirectoryRecursive(ScanContext& ctx, const String& currentDir) - { - size_t searchPathLen = currentDir.Size + 3; // "\*" + null - char* searchPathBuf = ArenaPushArray(ctx.TempArena, searchPathLen JULIET_DEBUG_PARAM("RomeoDbSearchPathBuf")); - snprintf(searchPathBuf, searchPathLen, "%s\\*", CStr(currentDir)); - String searchPath = {searchPathBuf, searchPathLen - 1}; - - // Convert to wide string for Win32 - int wLen = MultiByteToWideChar(CP_UTF8, 0, CStr(searchPath), -1, nullptr, 0); - if (wLen <= 0) - { - return; - } - - wchar_t* wSearchPath = ArenaPushArray(ctx.TempArena, static_cast(wLen) JULIET_DEBUG_PARAM("RomeoDbWSearch")); - MultiByteToWideChar(CP_UTF8, 0, CStr(searchPath), -1, wSearchPath, wLen); - - WIN32_FIND_DATAW findData; - HANDLE hFind = FindFirstFileExW(wSearchPath, FindExInfoBasic, &findData, FindExSearchNameMatch, nullptr, 0); - - if (hFind == INVALID_HANDLE_VALUE) - { - return; - } - - do - { - if (wcscmp(findData.cFileName, L".") == 0 || wcscmp(findData.cFileName, L"..") == 0) - { - continue; - } - - // Convert filename back to UTF8 - int uLen = WideCharToMultiByte(CP_UTF8, 0, findData.cFileName, -1, nullptr, 0, nullptr, nullptr); - char* uFileName = ArenaPushArray(ctx.TempArena, static_cast(uLen) JULIET_DEBUG_PARAM("RomeoDbUFileName")); - WideCharToMultiByte(CP_UTF8, 0, findData.cFileName, -1, uFileName, uLen, nullptr, nullptr); - - size_t fullPathLen = currentDir.Size + 1 + static_cast(uLen); // "\" + null - char* fullPathBuf = ArenaPushArray(ctx.TempArena, fullPathLen JULIET_DEBUG_PARAM("RomeoDbFullPathBuf")); - snprintf(fullPathBuf, fullPathLen, "%s\\%s", CStr(currentDir), uFileName); - String fullPath = {fullPathBuf, fullPathLen - 1}; - - if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) - { - // Skip external/build dirs - if (strcmp(uFileName, "External") != 0 && strcmp(uFileName, "Intermediate") != 0 && strcmp(uFileName, "bin") != 0 && strcmp(uFileName, ".git") != 0) - { - ScanDirectoryRecursive(ctx, fullPath); - } - } - else - { - ProcessFile(ctx, fullPath, findData); - } - } while (FindNextFileW(hFind, &findData) != 0); - - FindClose(hFind); - } - - void DB_ScanWorkspace(Database& db, Arena* tempArena, const String& rootDir) - { - Assert(tempArena != nullptr); - ScanContext ctx; - ctx.Db = &db; - ctx.TempArena = tempArena; - - // Check if src and include are directly under rootDir or under rootDir\Juliet - char srcDirBuf[512]; - snprintf(srcDirBuf, sizeof(srcDirBuf), "%s\\src", CStr(rootDir)); - DWORD srcAttribs = GetFileAttributesA(srcDirBuf); - if (srcAttribs == INVALID_FILE_ATTRIBUTES || !(srcAttribs & FILE_ATTRIBUTE_DIRECTORY)) - { - snprintf(srcDirBuf, sizeof(srcDirBuf), "%s\\Juliet\\src", CStr(rootDir)); - } - String srcDir = StringCopy(tempArena, WrapString(srcDirBuf)); - - char incDirBuf[512]; - snprintf(incDirBuf, sizeof(incDirBuf), "%s\\include", CStr(rootDir)); - DWORD incAttribs = GetFileAttributesA(incDirBuf); - if (incAttribs == INVALID_FILE_ATTRIBUTES || !(incAttribs & FILE_ATTRIBUTE_DIRECTORY)) - { - snprintf(incDirBuf, sizeof(incDirBuf), "%s\\Juliet\\include", CStr(rootDir)); - } - String incDir = StringCopy(tempArena, WrapString(incDirBuf)); - - ScanDirectoryRecursive(ctx, srcDir); - ScanDirectoryRecursive(ctx, incDir); - } - - bool DB_Save(const Database& db, const String& filePath) - { - FILE* file = nullptr; - if (fopen_s(&file, CStr(filePath), "wb") != 0 || !file) - { - return false; - } - - uint64_t entryCount = db.Entries.Size(); - fwrite(&entryCount, sizeof(uint64_t), 1, file); - - for (const FileEntry& entry : db.Entries) - { - uint64_t hLen = entry.HeaderPath.Size; - fwrite(&hLen, sizeof(uint64_t), 1, file); - if (hLen > 0) fwrite(entry.HeaderPath.Str, 1, static_cast(hLen), file); - - uint64_t cLen = entry.CppPath.Size; - fwrite(&cLen, sizeof(uint64_t), 1, file); - if (cLen > 0) fwrite(entry.CppPath.Str, 1, static_cast(cLen), file); - - fwrite(&entry.LastModifiedHeader, sizeof(uint64_t), 1, file); - fwrite(&entry.LastModifiedCpp, sizeof(uint64_t), 1, file); - fwrite(&entry.LastMarkdownCreatedTime, sizeof(uint64_t), 1, file); - fwrite(&entry.LastAIGeneratedTime, sizeof(uint64_t), 1, file); - - uint64_t dLen = entry.Description.Size; - fwrite(&dLen, sizeof(uint64_t), 1, file); - if (dLen > 0) fwrite(entry.Description.Str, 1, static_cast(dLen), file); - } - - fclose(file); - return true; - } - - bool DB_Load(Database& db, const String& filePath) - { - FILE* file = nullptr; - if (fopen_s(&file, CStr(filePath), "rb") != 0 || !file) - { - return false; - } - - db.Entries.Clear(); - - uint64_t entryCount = 0; - if (fread(&entryCount, sizeof(uint64_t), 1, file) != 1) - { - fclose(file); - return false; - } - - for (uint64_t i = 0; i < entryCount; ++i) - { - FileEntry entry = {}; - - uint64_t hLen = 0; - if (fread(&hLen, sizeof(uint64_t), 1, file) != 1) break; - if (hLen > 0) - { - entry.HeaderPath.Str = ArenaPushArray(db.DbArena, static_cast(hLen + 1) JULIET_DEBUG_PARAM("DbLoadHeader")); - entry.HeaderPath.Size = static_cast(hLen); - fread(entry.HeaderPath.Str, 1, static_cast(hLen), file); - entry.HeaderPath.Str[hLen] = '\0'; - } - - uint64_t cLen = 0; - if (fread(&cLen, sizeof(uint64_t), 1, file) != 1) break; - if (cLen > 0) - { - entry.CppPath.Str = ArenaPushArray(db.DbArena, static_cast(cLen + 1) JULIET_DEBUG_PARAM("DbLoadCpp")); - entry.CppPath.Size = static_cast(cLen); - fread(entry.CppPath.Str, 1, static_cast(cLen), file); - entry.CppPath.Str[cLen] = '\0'; - } - - fread(&entry.LastModifiedHeader, sizeof(uint64_t), 1, file); - fread(&entry.LastModifiedCpp, sizeof(uint64_t), 1, file); - fread(&entry.LastMarkdownCreatedTime, sizeof(uint64_t), 1, file); - fread(&entry.LastAIGeneratedTime, sizeof(uint64_t), 1, file); - - uint64_t dLen = 0; - if (fread(&dLen, sizeof(uint64_t), 1, file) != 1) break; - if (dLen > 0) - { - entry.Description.Str = ArenaPushArray(db.DbArena, static_cast(dLen + 1) JULIET_DEBUG_PARAM("DbLoadDesc")); - entry.Description.Size = static_cast(dLen); - fread(entry.Description.Str, 1, static_cast(dLen), file); - entry.Description.Str[dLen] = '\0'; - } - - db.Entries.PushBack(entry); - } - - fclose(file); - return true; - } - -} // namespace Romeo diff --git a/Romeo/src/Database.h b/Romeo/src/Database.h deleted file mode 100644 index 65463f0..0000000 --- a/Romeo/src/Database.h +++ /dev/null @@ -1,43 +0,0 @@ -#pragma once - -#include -#include -#include - -#include - -namespace Romeo -{ - struct FileEntry - { - String HeaderPath; - String CppPath; - - // Stored as Windows FILETIME (uint64_t) for easy comparison - uint64_t LastModifiedHeader = 0; - uint64_t LastModifiedCpp = 0; - - uint64_t LastMarkdownCreatedTime = 0; - uint64_t LastAIGeneratedTime = 0; - - String Description; - }; - - struct Database - { - VectorArena Entries = {}; - Arena* DbArena = nullptr; - Mutex Mutex; - }; - - // Initialize the DB using the provided memory arena - void DB_Init(Database& db, Arena* arena); - - // Scan a workspace directory for pairs of .h/.cpp and update the database structure. - void DB_ScanWorkspace(Database& db, Arena* tempArena, const String& rootDir); - - // Save and load DB state from disk (e.g. Romeo/docs/romeo_db.json or .bin) - bool DB_Save(const Database& db, const String& filePath); - bool DB_Load(Database& db, const String& filePath); - -} // namespace Romeo diff --git a/Romeo/src/HttpClient.cpp b/Romeo/src/HttpClient.cpp deleted file mode 100644 index 22b7470..0000000 --- a/Romeo/src/HttpClient.cpp +++ /dev/null @@ -1,196 +0,0 @@ -#include "HttpClient.h" -#include -#include -#include -#include - -namespace Romeo -{ - static wchar_t* ConvertToWide(Arena* arena, const String& str) - { - Assert(arena != nullptr); - if (str.Size == 0) - { - return const_cast(L""); - } - int wLen = MultiByteToWideChar(CP_UTF8, 0, CStr(str), static_cast(str.Size), nullptr, 0); - if (wLen <= 0) - { - return const_cast(L""); - } - wchar_t* wBuf = ArenaPushArray(arena, static_cast(wLen + 1) JULIET_DEBUG_PARAM("WideStr")); - MultiByteToWideChar(CP_UTF8, 0, CStr(str), static_cast(str.Size), wBuf, wLen); - wBuf[wLen] = L'\0'; - return wBuf; - } - - bool HttpClient::Post( - Arena* arena, - const String& host, - int port, - const String& path, - bool isHttps, - const String& requestBody, - String& outResponse - ) - { - Assert(arena != nullptr); - Assert(host.Size > 0); - - bool success = false; - HINTERNET hSession = nullptr; - HINTERNET hConnect = nullptr; - HINTERNET hRequest = nullptr; - - hSession = WinHttpOpen( - L"Romeo/1.0", - WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, - nullptr, - nullptr, - 0 - ); - - if (hSession != nullptr) - { - WinHttpSetTimeouts(hSession, 60000, 60000, 60000, 1800000); - wchar_t* wHost = ConvertToWide(arena, host); - hConnect = WinHttpConnect( - hSession, - wHost, - static_cast(port), - 0 - ); - } - - if (hConnect != nullptr) - { - wchar_t* wPath = ConvertToWide(arena, path); - hRequest = WinHttpOpenRequest( - hConnect, - L"POST", - wPath, - nullptr, - nullptr, - nullptr, - isHttps ? WINHTTP_FLAG_SECURE : 0 - ); - } - - if (hRequest != nullptr) - { - const wchar_t* headers = L"Content-Type: application/json\r\n"; - DWORD headersLen = static_cast(-1); - - BOOL sendRes = WinHttpSendRequest( - hRequest, - headers, - headersLen, - const_cast(CStr(requestBody)), - static_cast(requestBody.Size), - static_cast(requestBody.Size), - 0 - ); - - if (sendRes != 0) - { - BOOL recvRes = WinHttpReceiveResponse(hRequest, nullptr); - if (recvRes != 0) - { - DWORD dwSize = 0; - DWORD dwDownloaded = 0; - - size_t totalBytes = 0; - size_t capacity = 1024; - char* responseData = ArenaPushArray(arena, capacity JULIET_DEBUG_PARAM("HttpResponse")); - - do - { - dwSize = 0; - if (WinHttpQueryDataAvailable(hRequest, &dwSize) == 0) - { - break; - } - - if (dwSize == 0) - { - break; - } - - if (totalBytes + dwSize >= capacity) - { - size_t newCapacity = capacity * 2; - if (newCapacity < totalBytes + dwSize + 1) - { - newCapacity = totalBytes + dwSize + 1; - } - - char* newBuf = ArenaPushArray(arena, newCapacity JULIET_DEBUG_PARAM("HttpResponseGrow")); - memcpy(newBuf, responseData, totalBytes); - responseData = newBuf; - capacity = newCapacity; - } - - dwDownloaded = 0; - if (WinHttpReadData(hRequest, responseData + totalBytes, dwSize, &dwDownloaded) != 0) - { - totalBytes += dwDownloaded; - } - else - { - break; - } - } while (dwSize > 0); - - DWORD dwStatusCode = 0; - DWORD dwHeaderSize = sizeof(dwStatusCode); - WinHttpQueryHeaders( - hRequest, - WINHTTP_QUERY_STATUS_CODE | WINHTTP_QUERY_FLAG_NUMBER, - nullptr, - &dwStatusCode, - &dwHeaderSize, - nullptr - ); - - if (dwStatusCode == 200) - { - if (totalBytes > 0) - { - responseData[totalBytes] = '\0'; - outResponse.Str = responseData; - outResponse.Size = totalBytes; - success = true; - } - } - else - { - if (totalBytes > 0) - { - responseData[totalBytes] = '\0'; - printf("Romeo HttpClient: HTTP Error Status %u. Response: %s\n", static_cast(dwStatusCode), responseData); - } - else - { - printf("Romeo HttpClient: HTTP Error Status %u. Empty response.\n", static_cast(dwStatusCode)); - } - } - } - } - } - - if (hRequest != nullptr) - { - WinHttpCloseHandle(hRequest); - } - if (hConnect != nullptr) - { - WinHttpCloseHandle(hConnect); - } - if (hSession != nullptr) - { - WinHttpCloseHandle(hSession); - } - - return success; - } -} diff --git a/Romeo/src/HttpClient.h b/Romeo/src/HttpClient.h deleted file mode 100644 index 6fcd6bb..0000000 --- a/Romeo/src/HttpClient.h +++ /dev/null @@ -1,22 +0,0 @@ -#pragma once - -#include - -namespace Romeo -{ - class HttpClient - { - public: - // Sends a POST request over HTTP/HTTPS. - // Response data is allocated on the provided arena and returned in outResponse. - [[nodiscard]] static bool Post( - Arena* arena, - const String& host, - int port, - const String& path, - bool isHttps, - const String& requestBody, - String& outResponse - ); - }; -} diff --git a/Romeo/src/JsonParser.cpp b/Romeo/src/JsonParser.cpp deleted file mode 100644 index 1c0b879..0000000 --- a/Romeo/src/JsonParser.cpp +++ /dev/null @@ -1,477 +0,0 @@ -#include "JsonParser.h" -#include -#include -#include -#include -#include - -namespace Romeo -{ - struct JsonParserState - { - Arena* Arena; - const char* Ptr; - const char* End; - }; - - static void SkipWhitespace(JsonParserState& state) - { - while (state.Ptr < state.End) - { - char c = *state.Ptr; - if (c == ' ' || c == '\t' || c == '\n' || c == '\r') - { - state.Ptr++; - } - else - { - break; - } - } - } - - static bool ParseString(JsonParserState& state, String& outStr) - { - if (state.Ptr >= state.End || *state.Ptr != '"') - { - return false; - } - state.Ptr++; - const char* start = state.Ptr; - - size_t len = 0; - bool hasEscape = false; - while (state.Ptr < state.End) - { - char c = *state.Ptr; - if (c == '"') - { - break; - } - else if (c == '\\') - { - hasEscape = true; - state.Ptr++; - if (state.Ptr >= state.End) - { - return false; - } - } - state.Ptr++; - len++; - } - - if (state.Ptr >= state.End) - { - return false; - } - - const char* endQuote = state.Ptr; - state.Ptr++; - - char* buf = ArenaPushArray(state.Arena, len + 1 JULIET_DEBUG_PARAM("JsonParsedStr")); - - if (hasEscape) - { - size_t writeIdx = 0; - const char* readPtr = start; - while (readPtr < endQuote) - { - char c = *readPtr; - if (c == '\\') - { - readPtr++; - if (readPtr >= endQuote) - { - break; - } - char esc = *readPtr; - if (esc == 'n') { buf[writeIdx++] = '\n'; } - else if (esc == 'r') { buf[writeIdx++] = '\r'; } - else if (esc == 't') { buf[writeIdx++] = '\t'; } - else if (esc == 'b') { buf[writeIdx++] = '\b'; } - else if (esc == 'f') { buf[writeIdx++] = '\f'; } - else if (esc == '"') { buf[writeIdx++] = '"'; } - else if (esc == '\\') { buf[writeIdx++] = '\\'; } - else if (esc == '/') { buf[writeIdx++] = '/'; } - else if (esc == 'u') - { - if (readPtr + 4 < endQuote) - { - buf[writeIdx++] = '?'; - readPtr += 4; - } - } - else - { - buf[writeIdx++] = esc; - } - } - else - { - buf[writeIdx++] = c; - } - readPtr++; - } - buf[writeIdx] = '\0'; - outStr.Str = buf; - outStr.Size = writeIdx; - } - else - { - memcpy(buf, start, len); - buf[len] = '\0'; - outStr.Str = buf; - outStr.Size = len; - } - - return true; - } - - static bool ParseValue(JsonParserState& state, JsonValue& outVal); - - static bool ParseObject(JsonParserState& state, JsonValue& outVal) - { - if (state.Ptr >= state.End || *state.Ptr != '{') - { - return false; - } - state.Ptr++; - outVal.Type = JsonType::Object; - outVal.ObjectVal.Create(state.Arena JULIET_DEBUG_ONLY(, "JsonObject")); - - while (state.Ptr < state.End) - { - SkipWhitespace(state); - if (state.Ptr < state.End && *state.Ptr == '}') - { - state.Ptr++; - return true; - } - - String key = {}; - if (!ParseString(state, key)) - { - return false; - } - - SkipWhitespace(state); - if (state.Ptr >= state.End || *state.Ptr != ':') - { - return false; - } - state.Ptr++; - - JsonKeyValue kv = {}; - kv.Key = key; - kv.Value = ArenaPushArray(state.Arena, 1 JULIET_DEBUG_PARAM("JsonValueRef")); - new (kv.Value) JsonValue(); - - if (!ParseValue(state, *kv.Value)) - { - return false; - } - - outVal.ObjectVal.PushBack(kv); - - SkipWhitespace(state); - if (state.Ptr < state.End && *state.Ptr == ',') - { - state.Ptr++; - } - else if (state.Ptr < state.End && *state.Ptr == '}') - { - state.Ptr++; - return true; - } - else - { - return false; - } - } - return false; - } - - static bool ParseArray(JsonParserState& state, JsonValue& outVal) - { - if (state.Ptr >= state.End || *state.Ptr != '[') - { - return false; - } - state.Ptr++; - outVal.Type = JsonType::Array; - outVal.ArrayVal.Create(state.Arena JULIET_DEBUG_ONLY(, "JsonArray")); - - while (state.Ptr < state.End) - { - SkipWhitespace(state); - if (state.Ptr < state.End && *state.Ptr == ']') - { - state.Ptr++; - return true; - } - - JsonValue val = {}; - if (!ParseValue(state, val)) - { - return false; - } - - outVal.ArrayVal.PushBack(val); - - SkipWhitespace(state); - if (state.Ptr < state.End && *state.Ptr == ',') - { - state.Ptr++; - } - else if (state.Ptr < state.End && *state.Ptr == ']') - { - state.Ptr++; - return true; - } - else - { - return false; - } - } - return false; - } - - static bool ParseNumber(JsonParserState& state, JsonValue& outVal) - { - const char* start = state.Ptr; - while (state.Ptr < state.End) - { - char c = *state.Ptr; - if (isdigit(c) || c == '-' || c == '+' || c == '.' || c == 'e' || c == 'E') - { - state.Ptr++; - } - else - { - break; - } - } - size_t len = static_cast(state.Ptr - start); - if (len == 0) - { - return false; - } - - char temp[64]; - if (len >= sizeof(temp)) - { - return false; - } - memcpy(temp, start, len); - temp[len] = '\0'; - - char* endPtr = nullptr; - outVal.NumVal = strtod(temp, &endPtr); - if (endPtr == temp) - { - return false; - } - outVal.Type = JsonType::Number; - return true; - } - - static bool ParseValue(JsonParserState& state, JsonValue& outVal) - { - SkipWhitespace(state); - if (state.Ptr >= state.End) - { - return false; - } - - char c = *state.Ptr; - if (c == '{') - { - return ParseObject(state, outVal); - } - else if (c == '[') - { - return ParseArray(state, outVal); - } - else if (c == '"') - { - outVal.Type = JsonType::String; - return ParseString(state, outVal.StrVal); - } - else if (c == 't' || c == 'f') - { - size_t remaining = static_cast(state.End - state.Ptr); - if (c == 't' && remaining >= 4 && strncmp(state.Ptr, "true", 4) == 0) - { - outVal.Type = JsonType::Bool; - outVal.BoolVal = true; - state.Ptr += 4; - return true; - } - else if (c == 'f' && remaining >= 5 && strncmp(state.Ptr, "false", 5) == 0) - { - outVal.Type = JsonType::Bool; - outVal.BoolVal = false; - state.Ptr += 5; - return true; - } - } - else if (c == 'n') - { - size_t remaining = static_cast(state.End - state.Ptr); - if (remaining >= 4 && strncmp(state.Ptr, "null", 4) == 0) - { - outVal.Type = JsonType::Null; - state.Ptr += 4; - return true; - } - } - else if (isdigit(c) || c == '-') - { - return ParseNumber(state, outVal); - } - - return false; - } - - bool Json_Parse(Arena* arena, const String& jsonStr, JsonValue& outValue) - { - Assert(arena != nullptr); - if (jsonStr.Size == 0) - { - return false; - } - - JsonParserState state; - state.Arena = arena; - state.Ptr = CStr(jsonStr); - state.End = state.Ptr + jsonStr.Size; - - return ParseValue(state, outValue); - } - - bool Json_Query(const JsonValue& root, const char* path, String& outResult) - { - Assert(path != nullptr); - - const JsonValue* current = &root; - const char* p = path; - - while (*p) - { - const char* start = p; - while (*p && *p != '/') - { - p++; - } - size_t len = static_cast(p - start); - if (len == 0) - { - if (*p == '/') { p++; } - continue; - } - - if (current->Type == JsonType::Object) - { - const JsonValue* next = nullptr; - for (const JsonKeyValue& kv : current->ObjectVal) - { - if (kv.Key.Size == len && strncmp(CStr(kv.Key), start, len) == 0) - { - next = kv.Value; - break; - } - } - if (!next) - { - return false; - } - current = next; - } - else if (current->Type == JsonType::Array) - { - char tempIndex[32]; - if (len >= sizeof(tempIndex)) - { - return false; - } - memcpy(tempIndex, start, len); - tempIndex[len] = '\0'; - - int index = atoi(tempIndex); - if (index < 0 || static_cast(index) >= current->ArrayVal.Size()) - { - return false; - } - current = ¤t->ArrayVal[static_cast(index)]; - } - else - { - return false; - } - - if (*p == '/') - { - p++; - } - } - - if (current->Type == JsonType::String) - { - outResult = current->StrVal; - return true; - } - - return false; - } - - String Json_EscapeString(Arena* arena, const String& str) - { - Assert(arena != nullptr); - - size_t escLen = 0; - const unsigned char* p = reinterpret_cast(CStr(str)); - const unsigned char* end = p + str.Size; - while (p < end) - { - unsigned char c = *p; - if (c == '"' || c == '\\' || c == '\n' || c == '\r' || c == '\t' || c == '\b' || c == '\f') - { - escLen += 2; - } - else if (c < 32) - { - escLen += 6; - } - else - { - escLen += 1; - } - p++; - } - - char* buf = ArenaPushArray(arena, escLen + 1 JULIET_DEBUG_PARAM("JsonEscapedStr")); - char* dst = buf; - p = reinterpret_cast(CStr(str)); - while (p < end) - { - unsigned char c = *p; - if (c == '"') { *dst++ = '\\'; *dst++ = '"'; } - else if (c == '\\') { *dst++ = '\\'; *dst++ = '\\'; } - else if (c == '\n') { *dst++ = '\\'; *dst++ = 'n'; } - else if (c == '\r') { *dst++ = '\\'; *dst++ = 'r'; } - else if (c == '\t') { *dst++ = '\\'; *dst++ = 't'; } - else if (c == '\b') { *dst++ = '\\'; *dst++ = 'b'; } - else if (c == '\f') { *dst++ = '\\'; *dst++ = 'f'; } - else if (c < 32) - { - snprintf(dst, 7, "\\u00%02x", static_cast(c)); - dst += 6; - } - else { *dst++ = static_cast(c); } - p++; - } - *dst = '\0'; - return { buf, escLen }; - } -} diff --git a/Romeo/src/JsonParser.h b/Romeo/src/JsonParser.h deleted file mode 100644 index 5c1fbb5..0000000 --- a/Romeo/src/JsonParser.h +++ /dev/null @@ -1,46 +0,0 @@ -#pragma once - -#include -#include - -namespace Romeo -{ - enum class JsonType - { - Null, - Bool, - Number, - String, - Array, - Object - }; - - struct JsonValue; - - struct JsonKeyValue - { - String Key; - // Pointer is used here since JsonValue contains JsonKeyValue, forming mutual dependency - JsonValue* Value = nullptr; - }; - - struct JsonValue - { - JsonType Type = JsonType::Null; - bool BoolVal = false; - double NumVal = 0.0; - String StrVal = {}; - - VectorArena ArrayVal = {}; - VectorArena ObjectVal = {}; - }; - - // Parses a JSON string. Memory is allocated on the provided arena. - [[nodiscard]] bool Json_Parse(Arena* arena, const String& jsonStr, JsonValue& outValue); - - // Queries a nested string value by path (e.g., "candidates/0/content/parts/0/text" or "response"). - [[nodiscard]] bool Json_Query(const JsonValue& root, const char* path, String& outResult); - - // Escapes a string to be safely embedded inside JSON. - [[nodiscard]] String Json_EscapeString(Arena* arena, const String& str); -} diff --git a/Romeo/src/MarkdownGenerator.cpp b/Romeo/src/MarkdownGenerator.cpp deleted file mode 100644 index 1f3bf24..0000000 --- a/Romeo/src/MarkdownGenerator.cpp +++ /dev/null @@ -1,1085 +0,0 @@ -#include "MarkdownGenerator.h" -#include "AiGenerator.h" -#include -#include -#include -#include -#include -#include -#include - -namespace Romeo -{ - struct ParsedSymbol - { - String Name; - String ReturnType; - String Parameters; - String Type; // "class", "struct", "union", "enum", "enum class", "function" - String Namespace; - String ClassContext; - bool IsConst = false; - }; - - struct Token - { - const char* Start = nullptr; - size_t Length = 0; - bool IsIdentifier = false; - }; - - static void EnsureDirectoryExists(const char* dir) - { - CreateDirectoryA(dir, nullptr); - } - - struct StringBuilder - { - Arena* Arena; - char* Buffer = nullptr; - size_t Size = 0; - size_t Capacity = 0; - -#if COMPILER_CLANG -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wformat-nonliteral" -#endif - void Append(const char* format, ...) - { - va_list args; - va_start(args, format); - int len = vsnprintf(nullptr, 0, format, args); - va_end(args); - - if (len <= 0) return; - - size_t uLen = static_cast(len); - - if (Size + uLen + 1 > Capacity) - { - size_t newCap = Capacity == 0 ? 4096 : Capacity * 2; - while (Size + uLen + 1 > newCap) - { - newCap *= 2; - } - char* newBuf = ArenaPushArray(Arena, newCap JULIET_DEBUG_PARAM("StringBuilder")); - if (Buffer) - { - memcpy(newBuf, Buffer, Size); - } - Buffer = newBuf; - Capacity = newCap; - } - - va_start(args, format); - vsnprintf(Buffer + Size, uLen + 1, format, args); - va_end(args); - Size += uLen; - Buffer[Size] = '\0'; - } -#if COMPILER_CLANG -#pragma clang diagnostic pop -#endif - }; - - static String ReadFileContent(Arena* arena, const char* pathBuf) - { - FILE* f = nullptr; - if (fopen_s(&f, pathBuf, "rb") != 0 || !f) - { - return {}; - } - - fseek(f, 0, SEEK_END); - long size = ftell(f); - fseek(f, 0, SEEK_SET); - - if (size <= 0) - { - fclose(f); - return {}; - } - - char* buf = ArenaPushArray(arena, static_cast(size + 1) JULIET_DEBUG_PARAM("FileReadContent")); - size_t readBytes = fread(buf, 1, static_cast(size), f); - buf[readBytes] = '\0'; - - fclose(f); - return { buf, readBytes }; - } - - static String GetRelativeString(const String& absolutePath, const String& workspaceRoot) - { - if (absolutePath.Size > workspaceRoot.Size) - { - const char* absPtr = CStr(absolutePath); - const char* rootPtr = CStr(workspaceRoot); - size_t rootSize = workspaceRoot.Size; - - size_t matched = 0; - while (matched < rootSize && matched < absolutePath.Size) - { - char c1 = absPtr[matched]; - char c2 = rootPtr[matched]; - if (c1 == '/') - { - c1 = '\\'; - } - if (c2 == '/') - { - c2 = '\\'; - } - if (tolower(static_cast(c1)) != tolower(static_cast(c2))) - { - break; - } - matched++; - } - - if (matched == rootSize) - { - const char* rel = absPtr + rootSize; - size_t newSize = absolutePath.Size - rootSize; - if (*rel == '\\' || *rel == '/') - { - rel++; - newSize--; - } - return { const_cast(rel), newSize }; - } - } - return absolutePath; - } - - static String BuildMarkdownFileName(Arena* arena, const char* relativeBaseName, size_t baseLen) - { - char* buf = ArenaPushArray(arena, baseLen + 4 JULIET_DEBUG_PARAM("MdFileName")); - for (size_t i = 0; i < baseLen; ++i) - { - char c = relativeBaseName[i]; - if (c == '\\' || c == '/' || c == ':') - { - buf[i] = '_'; - } - else - { - buf[i] = c; - } - } - buf[baseLen] = '.'; buf[baseLen+1] = 'm'; buf[baseLen+2] = 'd'; buf[baseLen+3] = '\0'; - return {buf, baseLen + 3}; - } - - static String Trim(const char* start, const char* end) - { - if (end < start) - { - return {}; - } - while (start < end && (*start == ' ' || *start == '\t' || *start == '\n' || *start == '\r')) - { - start++; - } - while (end > start && (*(end - 1) == ' ' || *(end - 1) == '\t' || *(end - 1) == '\n' || *(end - 1) == '\r')) - { - end--; - } - return { const_cast(start), static_cast(end - start) }; - } - - static const char* SkipCommentsAndStrings(const char* p, const char* end) - { - while (p < end) - { - if (*p == '/' && p + 1 < end && *(p + 1) == '/') - { - p += 2; - while (p < end && *p != '\n' && *p != '\r') { p++; } - } - else if (*p == '/' && p + 1 < end && *(p + 1) == '*') - { - p += 2; - while (p < end && !(*p == '*' && p + 1 < end && *(p + 1) == '/')) { p++; } - if (p < end) { p += 2; } - } - else if (*p == '"') - { - p++; - while (p < end && *p != '"') - { - if (*p == '\\') { p += 2; } - else { p++; } - } - if (p < end) { p++; } - } - else if (*p == '\'') - { - p++; - while (p < end && *p != '\'') - { - if (*p == '\\') { p += 2; } - else { p++; } - } - if (p < end) { p++; } - } - else - { - break; - } - } - return p; - } - - static const char* GetNextToken(const char* p, const char* end, Token& token) - { - p = SkipCommentsAndStrings(p, end); - while (p < end && (*p == ' ' || *p == '\t' || *p == '\n' || *p == '\r')) - { - p = SkipCommentsAndStrings(p + 1, end); - } - - if (p >= end) - { - token.Start = nullptr; - token.Length = 0; - token.IsIdentifier = false; - return end; - } - - token.Start = p; - - char first = *p; - if (isalpha(first) || first == '_' || first == '~') - { - token.IsIdentifier = true; - p++; - while (p < end && (isalnum(*p) || *p == '_' || *p == ':')) - { - p++; - } - token.Length = static_cast(p - token.Start); - } - else - { - token.IsIdentifier = false; - p++; - token.Length = 1; - } - - return p; - } - - static bool IsForwardDeclaration(const char* p, const char* end) - { - p = SkipCommentsAndStrings(p, end); - while (p < end) - { - char c = *p; - if (c == ';') - { - return true; - } - if (c == '{' || c == ':') - { - return false; - } - p = SkipCommentsAndStrings(p + 1, end); - } - return false; - } - - static const char* FindMatchingParen(const char* p, const char* end) - { - if (p == nullptr) { return nullptr; } - int parenDepth = 1; - p = SkipCommentsAndStrings(p, end); - while (p < end && parenDepth > 0) - { - char c = *p; - if (c == '(') { parenDepth++; } - else if (c == ')') { parenDepth--; } - p = SkipCommentsAndStrings(p + 1, end); - } - return p; - } - - static bool IsKeyword(const Token& tk) - { - if (!tk.IsIdentifier) { return false; } - const char* keywords[] = { "if", "for", "while", "switch", "catch", "template", "return", "throw", "sizeof", "decltype" }; - for (const char* kw : keywords) - { - if (tk.Length == strlen(kw) && strncmp(tk.Start, kw, tk.Length) == 0) - { - return true; - } - } - return false; - } - - static bool IsFunctionFollowup(const char* p, const char* end, bool& opensBody, bool& isConst) - { - if (p == nullptr) { return false; } - p = SkipCommentsAndStrings(p, end); - if (p >= end) { return false; } - - char c = *p; - if (c == ';') { opensBody = false; return true; } - if (c == '{') { opensBody = true; return true; } - if (c == ':') { opensBody = true; return true; } - - Token t; - const char* next = GetNextToken(p, end, t); - if (t.Length > 0) - { - if (t.IsIdentifier) - { - const char* kw[] = { "const", "override", "final", "noexcept", "throw" }; - for (const char* k : kw) - { - if (t.Length == strlen(k) && strncmp(t.Start, k, t.Length) == 0) - { - if (strcmp(k, "const") == 0) { isConst = true; } - return IsFunctionFollowup(next, end, opensBody, isConst); - } - } - } - else if (t.Length == 1 && t.Start[0] == '=') - { - opensBody = false; - return true; - } - } - return false; - } - - struct NamespaceScope - { - char Name[64]; - int OpenBraceDepth; - }; - - struct ClassScope - { - char Name[64]; - int OpenBraceDepth; - }; - - static void GetCurrentNamespace(char* buf, size_t maxLen, NamespaceScope* stack, int count) - { - buf[0] = '\0'; - size_t written = 0; - for (int i = 0; i < count; ++i) - { - if (i > 0) - { - if (written + 2 < maxLen) - { - strcat_s(buf, maxLen, "::"); - written += 2; - } - } - size_t nameLen = strlen(stack[i].Name); - if (written + nameLen < maxLen) - { - strcat_s(buf, maxLen, stack[i].Name); - written += nameLen; - } - } - } - - static void GetCurrentClassContext(char* buf, size_t maxLen, ClassScope* stack, int count) - { - buf[0] = '\0'; - size_t written = 0; - for (int i = 0; i < count; ++i) - { - if (i > 0) - { - if (written + 2 < maxLen) - { - strcat_s(buf, maxLen, "::"); - written += 2; - } - } - size_t nameLen = strlen(stack[i].Name); - if (written + nameLen < maxLen) - { - strcat_s(buf, maxLen, stack[i].Name); - written += nameLen; - } - } - } - - static void ParseSymbolsFromFile( - Arena* arena, - const String& filePath, - VectorArena& outSymbols - ) - { - Assert(arena != nullptr); - - char pathBuf[512]; - size_t copyLen = filePath.Size < 511 ? filePath.Size : 511; - memcpy(pathBuf, filePath.Str, copyLen); - pathBuf[copyLen] = '\0'; - - FILE* srcFile = nullptr; - if (fopen_s(&srcFile, pathBuf, "rb") != 0 || !srcFile) { return; } - - fseek(srcFile, 0, SEEK_END); - long fileSize = ftell(srcFile); - fseek(srcFile, 0, SEEK_SET); - - if (fileSize <= 0) - { - fclose(srcFile); - return; - } - - char* buffer = ArenaPushArray(arena, static_cast(fileSize) + 1 JULIET_DEBUG_PARAM("SourceFileBuffer")); - size_t readBytes = fread(buffer, 1, static_cast(fileSize), srcFile); - buffer[readBytes] = '\0'; - fclose(srcFile); - - const char* start = buffer; - const char* end = buffer + readBytes; - const char* cursor = start; - - Token tokenHistory[8] = {}; - - NamespaceScope namespaceStack[16] = {}; - int namespaceStackCount = 0; - - ClassScope classStack[16] = {}; - int classStackCount = 0; - - char pendingNamespace[64] = ""; - char pendingClass[64] = ""; - char pendingClassType[16] = ""; - - int braceDepth = 0; - bool inFunctionBody = false; - int functionStartBraceDepth = -1; - - const char* lastStatementEnd = start; - - Token t; - while (cursor < end) - { - cursor = GetNextToken(cursor, end, t); - if (t.Length == 0) { break; } - - // Shift token history - for (int i = 7; i > 0; --i) - { - tokenHistory[i] = tokenHistory[i - 1]; - } - tokenHistory[0] = t; - - if (t.IsIdentifier) - { - if (strncmp(t.Start, "namespace", t.Length) == 0 && !inFunctionBody) - { - Token nameT; - cursor = GetNextToken(cursor, end, nameT); - if (nameT.Length > 0 && nameT.IsIdentifier) - { - size_t copySize = nameT.Length < 63 ? nameT.Length : 63; - memcpy(pendingNamespace, nameT.Start, copySize); - pendingNamespace[copySize] = '\0'; - } - else - { - strcpy_s(pendingNamespace, "anonymous"); - // backtracking cursor if we read a brace or something else - cursor = nameT.Start; - } - } - else if ((strncmp(t.Start, "class", t.Length) == 0 || - strncmp(t.Start, "struct", t.Length) == 0 || - strncmp(t.Start, "union", t.Length) == 0) && !inFunctionBody) - { - // Check if friend declaration - bool isFriend = false; - if (tokenHistory[1].Length == 6 && strncmp(tokenHistory[1].Start, "friend", 6) == 0) - { - isFriend = true; - } - - if (!isFriend) - { - size_t typeLen = t.Length < 15 ? t.Length : 15; - memcpy(pendingClassType, t.Start, typeLen); - pendingClassType[typeLen] = '\0'; - - Token nameT; - cursor = GetNextToken(cursor, end, nameT); - - // Handle API export macros (e.g. JULIET_API) by skipping them - if (nameT.Length > 0 && nameT.IsIdentifier && - nameT.Length > 4 && strncmp(nameT.Start + nameT.Length - 4, "_API", 4) == 0) - { - cursor = GetNextToken(cursor, end, nameT); - } - - if (nameT.Length > 0 && nameT.IsIdentifier) - { - if (!IsForwardDeclaration(nameT.Start + nameT.Length, end)) - { - size_t copySize = nameT.Length < 63 ? nameT.Length : 63; - memcpy(pendingClass, nameT.Start, copySize); - pendingClass[copySize] = '\0'; - } - } - else - { - strcpy_s(pendingClass, "anonymous"); - cursor = nameT.Start; - } - } - } - else if (strncmp(t.Start, "enum", t.Length) == 0 && !inFunctionBody) - { - Token classT; - const char* nextCursor = GetNextToken(cursor, end, classT); - bool isEnumClass = false; - if (classT.Length == 5 && strncmp(classT.Start, "class", 5) == 0) - { - isEnumClass = true; - cursor = nextCursor; - } - - Token nameT; - cursor = GetNextToken(cursor, end, nameT); - if (nameT.Length > 0 && nameT.IsIdentifier) - { - ParsedSymbol sym = {}; - sym.Name = StringCopy(arena, { const_cast(nameT.Start), nameT.Length }); - if (isEnumClass) - { - sym.Type = ConstString("enum class"); - } - else - { - sym.Type = ConstString("enum"); - } - - char nsBuf[128]; - GetCurrentNamespace(nsBuf, sizeof(nsBuf), namespaceStack, namespaceStackCount); - sym.Namespace = StringCopy(arena, WrapString(nsBuf)); - - char clBuf[128]; - GetCurrentClassContext(clBuf, sizeof(clBuf), classStack, classStackCount); - sym.ClassContext = StringCopy(arena, WrapString(clBuf)); - - outSymbols.PushBack(sym); - } - } - else if ((strncmp(t.Start, "public", t.Length) == 0 || - strncmp(t.Start, "private", t.Length) == 0 || - strncmp(t.Start, "protected", t.Length) == 0) && !inFunctionBody) - { - // Check for trailing colon - Token colonT; - const char* tempC = GetNextToken(cursor, end, colonT); - if (colonT.Length == 1 && colonT.Start[0] == ':') - { - cursor = tempC; - lastStatementEnd = cursor; - } - } - } - else if (t.Length == 1) - { - char sym = t.Start[0]; - if (sym == '{') - { - braceDepth++; - if (!inFunctionBody) - { - if (pendingNamespace[0] != '\0' && namespaceStackCount < 16) - { - strcpy_s(namespaceStack[namespaceStackCount].Name, pendingNamespace); - namespaceStack[namespaceStackCount].OpenBraceDepth = braceDepth; - namespaceStackCount++; - pendingNamespace[0] = '\0'; - } - else if (pendingClass[0] != '\0' && classStackCount < 16) - { - strcpy_s(classStack[classStackCount].Name, pendingClass); - classStack[classStackCount].OpenBraceDepth = braceDepth; - classStackCount++; - - // Also store the class itself as a symbol! - ParsedSymbol classSym = {}; - classSym.Name = StringCopy(arena, WrapString(classStack[classStackCount-1].Name)); - classSym.Type = StringCopy(arena, WrapString(pendingClassType)); - - char nsBuf[128]; - GetCurrentNamespace(nsBuf, sizeof(nsBuf), namespaceStack, namespaceStackCount); - classSym.Namespace = StringCopy(arena, WrapString(nsBuf)); - - char clBuf[128]; - // Get class context *excluding* the one we just pushed - GetCurrentClassContext(clBuf, sizeof(clBuf), classStack, classStackCount - 1); - classSym.ClassContext = StringCopy(arena, WrapString(clBuf)); - - outSymbols.PushBack(classSym); - - pendingClass[0] = '\0'; - } - else - { - inFunctionBody = true; - functionStartBraceDepth = braceDepth; - } - } - lastStatementEnd = cursor; - } - else if (sym == '}') - { - if (inFunctionBody) - { - if (braceDepth == functionStartBraceDepth) - { - inFunctionBody = false; - functionStartBraceDepth = -1; - } - } - else - { - if (classStackCount > 0 && classStack[classStackCount - 1].OpenBraceDepth == braceDepth) - { - classStackCount--; - } - else if (namespaceStackCount > 0 && namespaceStack[namespaceStackCount - 1].OpenBraceDepth == braceDepth) - { - namespaceStackCount--; - } - } - braceDepth--; - lastStatementEnd = cursor; - } - else if (sym == ';') - { - pendingNamespace[0] = '\0'; - pendingClass[0] = '\0'; - lastStatementEnd = cursor; - } - else if (sym == '(' && !inFunctionBody) - { - Token funcNameT = tokenHistory[1]; - if (funcNameT.Length > 0 && funcNameT.IsIdentifier && !IsKeyword(funcNameT)) - { - const char* matchingParen = FindMatchingParen(t.Start + 1, end); - - bool opensBody = false; - bool isConst = false; - if (matchingParen != nullptr && IsFunctionFollowup(matchingParen, end, opensBody, isConst)) - { - String returnTypeRaw = Trim(lastStatementEnd, funcNameT.Start); - String paramsRaw = Trim(t.Start + 1, matchingParen - 1); - - char activeClass[128] = ""; - GetCurrentClassContext(activeClass, sizeof(activeClass), classStack, classStackCount); - - bool hasReturnType = (returnTypeRaw.Size > 0); - bool isConstructorOrDestructor = false; - - if (classStackCount > 0) - { - const char* className = classStack[classStackCount - 1].Name; - size_t cNameLen = strlen(className); - - if (funcNameT.Length == cNameLen && strncmp(funcNameT.Start, className, cNameLen) == 0) - { - isConstructorOrDestructor = true; - } - else if (funcNameT.Length == cNameLen + 1 && funcNameT.Start[0] == '~' && - strncmp(funcNameT.Start + 1, className, cNameLen) == 0) - { - isConstructorOrDestructor = true; - } - } - - if (hasReturnType || isConstructorOrDestructor) - { - ParsedSymbol funcSym = {}; - funcSym.Name = StringCopy(arena, { const_cast(funcNameT.Start), funcNameT.Length }); - funcSym.ReturnType = StringCopy(arena, returnTypeRaw); - funcSym.Parameters = StringCopy(arena, paramsRaw); - funcSym.Type = ConstString("function"); - funcSym.IsConst = isConst; - - char nsBuf[128]; - GetCurrentNamespace(nsBuf, sizeof(nsBuf), namespaceStack, namespaceStackCount); - funcSym.Namespace = StringCopy(arena, WrapString(nsBuf)); - - funcSym.ClassContext = StringCopy(arena, WrapString(activeClass)); - - outSymbols.PushBack(funcSym); - } - } - } - } - } - } - } - - static void FormatAndWriteSymbols(StringBuilder& sb, Arena* arena, const String& filePath) - { - printf("Romeo: FormatAndWriteSymbols start for %.*s\n", static_cast(filePath.Size), CStr(filePath)); - VectorArena symbols = {}; - symbols.Create(arena JULIET_DEBUG_ONLY(, "ParsedSymbols")); - - printf("Romeo: Calling ParseSymbolsFromFile...\n"); - ParseSymbolsFromFile(arena, filePath, symbols); - printf("Romeo: ParseSymbolsFromFile returned, symbols count: %zu\n", symbols.Size()); - - if (symbols.Size() == 0) - { - sb.Append("*No symbols detected.*\n"); - return; - } - - // Collect all distinct namespaces - printf("Romeo: Collecting namespaces...\n"); - VectorArena namespaces = {}; - namespaces.Create(arena JULIET_DEBUG_ONLY(, "NamespacesList")); - - for (const ParsedSymbol& sym : symbols) - { - bool found = false; - for (const String& ns : namespaces) - { - if (StringCompare(ns, sym.Namespace) == 0) - { - found = true; - break; - } - } - if (!found) - { - namespaces.PushBack(sym.Namespace); - } - } - printf("Romeo: Namespace collection done.\n"); - - for (const String& ns : namespaces) - { - printf("Romeo: Formatting namespace %.*s...\n", static_cast(ns.Size), CStr(ns)); - if (ns.Size > 0) - { - sb.Append("### Namespace `%.*s`\n\n", static_cast(ns.Size), CStr(ns)); - } - else - { - sb.Append("### Global Scope\n\n"); - } - - // Print Structs/Classes/Unions - bool hasTypes = false; - for (const ParsedSymbol& sym : symbols) - { - if (StringCompare(sym.Namespace, ns) == 0 && - (StringCompare(sym.Type, ConstString("class")) == 0 || - StringCompare(sym.Type, ConstString("struct")) == 0 || - StringCompare(sym.Type, ConstString("union")) == 0)) - { - if (!hasTypes) - { - sb.Append("#### Classes, Structs & Unions\n"); - hasTypes = true; - } - if (sym.ClassContext.Size > 0) - { - sb.Append("- `%.*s %.*s::%.*s`\n", - static_cast(sym.Type.Size), CStr(sym.Type), - static_cast(sym.ClassContext.Size), CStr(sym.ClassContext), - static_cast(sym.Name.Size), CStr(sym.Name)); - } - else - { - sb.Append("- `%.*s %.*s`\n", - static_cast(sym.Type.Size), CStr(sym.Type), - static_cast(sym.Name.Size), CStr(sym.Name)); - } - } - } - if (hasTypes) { sb.Append("\n"); } - - // Print Enums - bool hasEnums = false; - for (const ParsedSymbol& sym : symbols) - { - if (StringCompare(sym.Namespace, ns) == 0 && - (StringCompare(sym.Type, ConstString("enum")) == 0 || - StringCompare(sym.Type, ConstString("enum class")) == 0)) - { - if (!hasEnums) - { - sb.Append("#### Enums\n"); - hasEnums = true; - } - if (sym.ClassContext.Size > 0) - { - sb.Append("- `%.*s %.*s::%.*s`\n", - static_cast(sym.Type.Size), CStr(sym.Type), - static_cast(sym.ClassContext.Size), CStr(sym.ClassContext), - static_cast(sym.Name.Size), CStr(sym.Name)); - } - else - { - sb.Append("- `%.*s %.*s`\n", - static_cast(sym.Type.Size), CStr(sym.Type), - static_cast(sym.Name.Size), CStr(sym.Name)); - } - } - } - if (hasEnums) { sb.Append("\n"); } - - // Print Functions/Methods - bool hasFuncs = false; - for (const ParsedSymbol& sym : symbols) - { - if (StringCompare(sym.Namespace, ns) == 0 && - StringCompare(sym.Type, ConstString("function")) == 0) - { - if (!hasFuncs) - { - sb.Append("#### Functions & Methods\n"); - hasFuncs = true; - } - - sb.Append("- `"); - if (sym.ReturnType.Size > 0) - { - sb.Append("%.*s ", static_cast(sym.ReturnType.Size), CStr(sym.ReturnType)); - } - if (sym.ClassContext.Size > 0) - { - sb.Append("%.*s::", static_cast(sym.ClassContext.Size), CStr(sym.ClassContext)); - } - sb.Append("%.*s(%.*s)%s`\n", - static_cast(sym.Name.Size), CStr(sym.Name), - static_cast(sym.Parameters.Size), CStr(sym.Parameters), - sym.IsConst ? " const" : ""); - } - } - if (hasFuncs) { sb.Append("\n"); } - } - } - - void MD_GenerateDocumentation(Database& db, const String& workspaceRoot, const String& docsDir) - { - EnsureDirectoryExists(CStr(docsDir)); - - // Clean up any stale broken C__*.md files from prior runs - { - char searchPattern[512]; - snprintf(searchPattern, sizeof(searchPattern), "%s\\C__*.md", CStr(docsDir)); - - WIN32_FIND_DATAA findData; - HANDLE hFind = FindFirstFileA(searchPattern, &findData); - if (hFind != INVALID_HANDLE_VALUE) - { - do - { - char filePath[512]; - snprintf(filePath, sizeof(filePath), "%s\\%s", CStr(docsDir), findData.cFileName); - DeleteFileA(filePath); - } while (FindNextFileA(hFind, &findData) != 0); - FindClose(hFind); - } - } - - char overviewPath[512]; - snprintf(overviewPath, sizeof(overviewPath), "%s\\overview.md", CStr(docsDir)); - - FILE* overviewFile = nullptr; - if (fopen_s(&overviewFile, overviewPath, "w") != 0 || !overviewFile) - { - return; - } - - fprintf(overviewFile, "# Juliet C++ Codebase Overview\n\n"); - fprintf(overviewFile, "This is an auto-generated index of all C++ sources in the workspace.\n\n"); - fprintf(overviewFile, "## Files\n\n"); - - FILETIME ft; - GetSystemTimeAsFileTime(&ft); - uint64_t currentTime = (static_cast(ft.dwHighDateTime) << 32) | ft.dwLowDateTime; - - // Temporary arena for parsing symbols and formatting - ArenaParams params{}; - Arena* tempArena = ArenaAllocate(params); - Assert(tempArena != nullptr); - - // Separate arena for AI generation (gets cleared after each file to prevent exhaustion) - ArenaParams aiParams{}; - Arena* aiArena = ArenaAllocate(aiParams); - Assert(aiArena != nullptr); - - size_t fileIndex = 0; - size_t totalFiles = db.Entries.Size(); - - for (FileEntry& entry : db.Entries) - { - fileIndex++; - const String& primaryPath = (entry.HeaderPath.Size > 0) ? entry.HeaderPath : entry.CppPath; - if (primaryPath.Size == 0) - { - continue; - } - - bool hasCpp = (entry.CppPath.Size > 0); - bool isHeaderInSrc = (entry.HeaderPath.Size > 0 && strstr(CStr(entry.HeaderPath), "\\src\\") != nullptr); - if (isHeaderInSrc && !hasCpp) - { - entry.LastMarkdownCreatedTime = currentTime; - continue; - } - - String relStr = GetRelativeString(primaryPath, workspaceRoot); - - char baseName[512]; - size_t copyLen = relStr.Size < 511 ? relStr.Size : 511; - memcpy(baseName, relStr.Str, copyLen); - baseName[copyLen] = '\0'; - - size_t baseLen = strlen(baseName); - if (baseLen > 4 && strcmp(baseName + baseLen - 4, ".cpp") == 0) - { - baseName[baseLen - 4] = '\0'; - baseLen -= 4; - } - if (baseLen > 2 && strcmp(baseName + baseLen - 2, ".h") == 0) - { - baseName[baseLen - 2] = '\0'; - baseLen -= 2; - } - - String mdFileName = BuildMarkdownFileName(db.DbArena, baseName, baseLen); - - fprintf(overviewFile, "- [%s](%s)\n", baseName, CStr(mdFileName)); - - bool needsUpdate = (entry.LastMarkdownCreatedTime == 0) || - (entry.Description.Size == 0) || - (entry.LastModifiedHeader > entry.LastMarkdownCreatedTime) || - (entry.LastModifiedCpp > entry.LastMarkdownCreatedTime); - - if (needsUpdate) - { - bool aiNeedsUpdate = false; - if (entry.Description.Size == 0) - { - aiNeedsUpdate = true; - } - else if (entry.HeaderPath.Size > 0) - { - if (entry.LastModifiedHeader > entry.LastAIGeneratedTime) - { - aiNeedsUpdate = true; - } - } - else if (entry.CppPath.Size > 0) - { - if (entry.LastModifiedCpp > entry.LastAIGeneratedTime) - { - aiNeedsUpdate = true; - } - } - - if (aiNeedsUpdate) - { - printf("Romeo: [%zu/%zu] Generating AI description for '%s'...\n", - fileIndex, totalFiles, baseName); - - ArenaClear(aiArena); - if (AI_GenerateDescription(aiArena, entry)) - { - // Copy the description to the persistent db arena so it survives aiArena clear - entry.Description = StringCopy(db.DbArena, entry.Description); - entry.LastAIGeneratedTime = currentTime; - printf("Romeo: [%zu/%zu] Done.\n", fileIndex, totalFiles); - } - else - { - entry.LastAIGeneratedTime = currentTime; - printf("Romeo: [%zu/%zu] AI generation failed.\n", fileIndex, totalFiles); - } - } - - ArenaClear(tempArena); - - char mdFilePath[512]; - snprintf(mdFilePath, sizeof(mdFilePath), "%s\\%s", CStr(docsDir), CStr(mdFileName)); - - StringBuilder sb = { tempArena }; - sb.Append("# %s\n\n", baseName); - - sb.Append("## Source Files\n"); - if (entry.HeaderPath.Size > 0) - { - String hRel = GetRelativeString(entry.HeaderPath, workspaceRoot); - sb.Append("- Header: `%.*s`\n", static_cast(hRel.Size), hRel.Str); - } - if (entry.CppPath.Size > 0) - { - String cRel = GetRelativeString(entry.CppPath, workspaceRoot); - sb.Append("- Source: `%.*s`\n", static_cast(cRel.Size), cRel.Str); - } - sb.Append("\n"); - - sb.Append("## AI Description\n"); - if (entry.Description.Size > 0) - { - sb.Append("%.*s\n", static_cast(entry.Description.Size), entry.Description.Str); - } - else - { - sb.Append("*No AI description generated yet.*\n"); - } - sb.Append("\n"); - - sb.Append("## Symbols\n\n"); - printf("Romeo: [%zu/%zu] Parsing symbols...\n", fileIndex, totalFiles); - if (entry.HeaderPath.Size > 0) - { - FormatAndWriteSymbols(sb, tempArena, entry.HeaderPath); - } - else if (entry.CppPath.Size > 0) - { - FormatAndWriteSymbols(sb, tempArena, entry.CppPath); - } - printf("Romeo: [%zu/%zu] Symbols done.\n", fileIndex, totalFiles); - - // Compare with existing file to decide if we write to disk - String existing = ReadFileContent(tempArena, mdFilePath); - String newContent = { sb.Buffer, sb.Size }; - if (existing.Size == 0 || StringCompare(existing, newContent) != 0) - { - FILE* mdFile = nullptr; - if (fopen_s(&mdFile, mdFilePath, "wb") == 0 && mdFile) - { - fwrite(sb.Buffer, 1, sb.Size, mdFile); - fclose(mdFile); - printf("Romeo: [%zu/%zu] File written/updated.\n", fileIndex, totalFiles); - } - } - else - { - printf("Romeo: [%zu/%zu] File unchanged. No modification made.\n", fileIndex, totalFiles); - } - entry.LastMarkdownCreatedTime = currentTime; - } - } - - printf("Rome: Done processing batch\n"); - - ArenaRelease(aiArena); - ArenaRelease(tempArena); - fclose(overviewFile); - } -} diff --git a/Romeo/src/MarkdownGenerator.h b/Romeo/src/MarkdownGenerator.h deleted file mode 100644 index aa49d37..0000000 --- a/Romeo/src/MarkdownGenerator.h +++ /dev/null @@ -1,7 +0,0 @@ -#pragma once -#include "Database.h" - -namespace Romeo -{ - void MD_GenerateDocumentation(Database& db, const String& workspaceRoot, const String& docsDir); -} diff --git a/Romeo/src/main.cpp b/Romeo/src/main.cpp deleted file mode 100644 index 2312ce6..0000000 --- a/Romeo/src/main.cpp +++ /dev/null @@ -1,568 +0,0 @@ -#ifndef WIN32_LEAN_AND_MEAN -#define WIN32_LEAN_AND_MEAN -#endif -#ifndef NOMINMAX -#define NOMINMAX -#endif -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#include "Database.h" -#include "MarkdownGenerator.h" - -#define ROMEO_TRAY_ICON_ID 1 -#define ROMEO_WM_TRAYICON (WM_USER + 1) - -static Romeo::Database G_Db; -static Arena* G_ScratchArena = nullptr; -static String G_WorkspaceRoot; -static String G_DocsDir; -static String G_DbFilePath; - -static String GetWorkspaceRoot(Arena* arena) -{ - Assert(arena != nullptr); - String base = GetBasePath(); - - // Copy to arena so we can safely modify it - char* buf = ArenaPushArray(arena, base.Size + 1 JULIET_DEBUG_PARAM("WorkspaceRootPath")); - memcpy(buf, base.Str, base.Size); - buf[base.Size] = '\0'; - - // Normalize slashes - for (size_t i = 0; i < base.Size; ++i) - { - if (buf[i] == '/') - { - buf[i] = '\\'; - } - } - - // Search for \bin to find workspace root - char* binPtr = strstr(buf, "\\bin"); - if (binPtr != nullptr) - { - *binPtr = '\0'; - return { buf, static_cast(binPtr - buf) }; - } - - size_t count = 0; - for (size_t i = base.Size; i > 0; --i) - { - size_t idx = i - 1; - if (buf[idx] == '\\') - { - count++; - if (count == 2) - { - buf[idx] = '\0'; - return { buf, idx }; - } - } - } - return { buf, base.Size }; -} - -static HANDLE G_ExitEvent = INVALID_HANDLE_VALUE; -static std::thread G_MonitorThread; -static bool G_MonitorRunning = false; -static HANDLE G_OllamaProcessHandle = INVALID_HANDLE_VALUE; -static HANDLE G_OllamaJobHandle = nullptr; - -static void MonitorThreadProc() -{ - int wLen = MultiByteToWideChar(CP_UTF8, 0, CStr(G_WorkspaceRoot), -1, nullptr, 0); - if (wLen <= 0) - { - return; - } - - wchar_t* wRoot = new wchar_t[static_cast(wLen + 1)]; - MultiByteToWideChar(CP_UTF8, 0, CStr(G_WorkspaceRoot), -1, wRoot, wLen); - - HANDLE hDir = CreateFileW( - wRoot, - FILE_LIST_DIRECTORY, - FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, - nullptr, - OPEN_EXISTING, - FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OVERLAPPED, - nullptr - ); - - delete[] wRoot; - - if (hDir == INVALID_HANDLE_VALUE) - { - return; - } - - HANDLE hEvent = CreateEventW(nullptr, TRUE, FALSE, nullptr); - if (hEvent == nullptr) - { - CloseHandle(hDir); - return; - } - - OVERLAPPED overlapped = {}; - overlapped.hEvent = hEvent; - - alignas(FILE_NOTIFY_INFORMATION) BYTE buffer[64 * 1024]; - bool pendingChanges = false; - - BOOL readRes = ReadDirectoryChangesW( - hDir, - buffer, - sizeof(buffer), - TRUE, - FILE_NOTIFY_CHANGE_LAST_WRITE | FILE_NOTIFY_CHANGE_FILE_NAME, - nullptr, - &overlapped, - nullptr - ); - - if (readRes == 0) - { - CloseHandle(hEvent); - CloseHandle(hDir); - return; - } - - HANDLE waitHandles[2] = { G_ExitEvent, hEvent }; - - while (G_MonitorRunning) - { - DWORD timeout = pendingChanges ? 500 : INFINITE; - DWORD waitRes = WaitForMultipleObjects(2, waitHandles, FALSE, timeout); - - if (waitRes == WAIT_OBJECT_0) - { - break; - } - else if (waitRes == WAIT_OBJECT_0 + 1) - { - DWORD bytesTransferred = 0; - if (GetOverlappedResult(hDir, &overlapped, &bytesTransferred, FALSE) != 0) - { - FILE_NOTIFY_INFORMATION* info = reinterpret_cast(buffer); - while (info != nullptr) - { - size_t wCharCount = info->FileNameLength / sizeof(WCHAR); - if (wCharCount > 2) - { - const WCHAR* fName = info->FileName; - if ((fName[wCharCount - 1] == L'h' && fName[wCharCount - 2] == L'.') || - (wCharCount > 4 && fName[wCharCount - 1] == L'p' && fName[wCharCount - 2] == L'p' && fName[wCharCount - 3] == L'c' && fName[wCharCount - 4] == L'.')) - { - bool ignore = false; - for (size_t i = 0; i < wCharCount; ++i) - { - if (i + 12 <= wCharCount && wcsncmp(fName + i, L"Intermediate", 12) == 0) { ignore = true; } - if (i + 3 <= wCharCount && wcsncmp(fName + i, L"bin", 3) == 0) { ignore = true; } - if (i + 8 <= wCharCount && wcsncmp(fName + i, L"External", 8) == 0) { ignore = true; } - if (i + 4 <= wCharCount && wcsncmp(fName + i, L".git", 4) == 0) { ignore = true; } - if (ignore) { break; } - } - - if (!ignore) - { - pendingChanges = true; - } - } - } - - if (info->NextEntryOffset == 0) - { - break; - } - info = reinterpret_cast(reinterpret_cast(info) + info->NextEntryOffset); - } - } - - ResetEvent(hEvent); - ReadDirectoryChangesW( - hDir, - buffer, - sizeof(buffer), - TRUE, - FILE_NOTIFY_CHANGE_LAST_WRITE | FILE_NOTIFY_CHANGE_FILE_NAME, - nullptr, - &overlapped, - nullptr - ); - } - else if (waitRes == WAIT_TIMEOUT) - { - printf("Romeo Monitor: Change detected, updating documentation...\n"); - OutputDebugStringA("Romeo Monitor: Change detected, updating...\n"); - - { - LockGuard lock(G_Db.Mutex); - ArenaClear(G_ScratchArena); - - Romeo::DB_ScanWorkspace(G_Db, G_ScratchArena, G_WorkspaceRoot); - - bool anyChanged = false; - for (const Romeo::FileEntry& entry : G_Db.Entries) - { - if (entry.LastModifiedHeader > entry.LastMarkdownCreatedTime || - entry.LastModifiedCpp > entry.LastMarkdownCreatedTime) - { - anyChanged = true; - break; - } - } - - if (anyChanged) - { - Romeo::MD_GenerateDocumentation(G_Db, G_WorkspaceRoot, G_DocsDir); - Romeo::DB_Save(G_Db, G_DbFilePath); - } - } - - pendingChanges = false; - } - } - - CancelIo(hDir); - CloseHandle(hEvent); - CloseHandle(hDir); -} - -LRESULT CALLBACK RomeoWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) -{ - switch (uMsg) - { - case ROMEO_WM_TRAYICON: - if (LOWORD(lParam) == WM_RBUTTONUP) - { - POINT pt; - GetCursorPos(&pt); - HMENU hMenu = CreatePopupMenu(); - if (hMenu) - { - InsertMenuW(hMenu, 0, MF_BYPOSITION | MF_STRING, 1001, L"Exit"); - SetForegroundWindow(hwnd); - TrackPopupMenu(hMenu, TPM_BOTTOMALIGN | TPM_LEFTALIGN, pt.x, pt.y, 0, hwnd, nullptr); - DestroyMenu(hMenu); - } - } - else if (LOWORD(lParam) == WM_LBUTTONUP) - { - OutputDebugStringA("Tray icon left-clicked!\n"); - } - return 0; - - case WM_COMMAND: - if (LOWORD(wParam) == 1001) - { - DestroyWindow(hwnd); - } - return 0; - - case WM_DESTROY: - PostQuitMessage(0); - return 0; - } - return DefWindowProc(hwnd, uMsg, wParam, lParam); -} - -int JulietMain(int argc, wchar_t** argv) -{ - printf("JulietMain Entry!\n"); - - // Single instance mutex check - HANDLE hMutex = CreateMutexW(nullptr, TRUE, L"RomeoSingleInstanceMutex"); - if (hMutex == nullptr || GetLastError() == ERROR_ALREADY_EXISTS) - { - printf("Romeo is already running. Exiting.\n"); - if (hMutex != nullptr) - { - CloseHandle(hMutex); - } - return 0; - } - - // Launch Ollama serve subprocess - { - // Try to find ollama.exe - check common install locations - char ollamaPath[512] = {}; - bool foundOllama = false; - - // 1. Try PATH first via SearchPathA - if (SearchPathA(nullptr, "ollama.exe", nullptr, sizeof(ollamaPath), ollamaPath, nullptr) > 0) - { - foundOllama = true; - } - - // 2. Check %LOCALAPPDATA%\Programs\Ollama\ollama.exe - if (!foundOllama) - { - char localAppData[256] = {}; - DWORD envLen = GetEnvironmentVariableA("LOCALAPPDATA", localAppData, sizeof(localAppData)); - if (envLen > 0 && envLen < sizeof(localAppData)) - { - snprintf(ollamaPath, sizeof(ollamaPath), "%s\\Programs\\Ollama\\ollama.exe", localAppData); - DWORD attribs = GetFileAttributesA(ollamaPath); - if (attribs != INVALID_FILE_ATTRIBUTES) - { - foundOllama = true; - } - } - } - - // 3. Check %USERPROFILE%\AppData\Local\Programs\Ollama\ollama.exe - if (!foundOllama) - { - char userProfile[256] = {}; - DWORD envLen = GetEnvironmentVariableA("USERPROFILE", userProfile, sizeof(userProfile)); - if (envLen > 0 && envLen < sizeof(userProfile)) - { - snprintf(ollamaPath, sizeof(ollamaPath), "%s\\AppData\\Local\\Programs\\Ollama\\ollama.exe", userProfile); - DWORD attribs = GetFileAttributesA(ollamaPath); - if (attribs != INVALID_FILE_ATTRIBUTES) - { - foundOllama = true; - } - } - } - - if (foundOllama) - { - printf("Romeo: Found Ollama at: %s\n", ollamaPath); - - // Create a Job Object so child processes auto-terminate when Romeo exits (even on crash) - G_OllamaJobHandle = CreateJobObjectA(nullptr, nullptr); - if (G_OllamaJobHandle != nullptr) - { - JOBOBJECT_EXTENDED_LIMIT_INFORMATION jobInfo = {}; - jobInfo.BasicLimitInformation.LimitFlags = JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE; - SetInformationJobObject(G_OllamaJobHandle, JobObjectExtendedLimitInformation, - &jobInfo, sizeof(jobInfo)); - } - - // Build a command line for cmd.exe /k so the console window remains open - char cmdLine[600] = {}; - snprintf(cmdLine, sizeof(cmdLine), "cmd.exe /k \"\"%s\" serve\"", ollamaPath); - - STARTUPINFOA si = {}; - si.cb = sizeof(si); - si.dwFlags = STARTF_USESHOWWINDOW; - si.wShowWindow = SW_SHOW; - PROCESS_INFORMATION pi = {}; - BOOL createRes = CreateProcessA( - nullptr, - cmdLine, - nullptr, - nullptr, - FALSE, - CREATE_NEW_CONSOLE | CREATE_SUSPENDED, - nullptr, - nullptr, - &si, - &pi - ); - if (createRes != 0) - { - // Assign to job object before resuming so it cannot escape - if (G_OllamaJobHandle != nullptr) - { - AssignProcessToJobObject(G_OllamaJobHandle, pi.hProcess); - } - ResumeThread(pi.hThread); - - // Wait briefly to check if the process crashed immediately - DWORD waitResult = WaitForSingleObject(pi.hProcess, 2000); - if (waitResult == WAIT_TIMEOUT) - { - // Process is still running after 2 seconds - good - G_OllamaProcessHandle = pi.hProcess; - CloseHandle(pi.hThread); - printf("Romeo: Launched local Ollama serve subprocess (PID: %lu).\n", pi.dwProcessId); - } - else - { - // Process exited within 2 seconds - likely crashed or port in use - DWORD exitCode = 0; - GetExitCodeProcess(pi.hProcess, &exitCode); - printf("Romeo: WARNING - Ollama serve process exited immediately (exit code: %lu).\n", exitCode); - printf("Romeo: This may mean Ollama is already running or the port 11434 is in use.\n"); - CloseHandle(pi.hProcess); - CloseHandle(pi.hThread); - } - } - else - { - DWORD err = GetLastError(); - printf("Romeo: ERROR - Failed to launch Ollama serve (Win32 error: %lu).\n", err); - } - } - else - { - printf("Romeo: WARNING - Could not find ollama.exe. Searched PATH and common install locations.\n"); - printf("Romeo: Please ensure Ollama is installed (https://ollama.com) and available in your PATH.\n"); - printf("Romeo: Continuing without auto-launching Ollama serve...\n"); - } - } - - ArenaParams params{}; - Arena* mainArena = ArenaAllocate(params); - Assert(mainArena != nullptr); - - G_ScratchArena = ArenaAllocate(params); - Assert(G_ScratchArena != nullptr); - - printf("Arena Allocated! Pointer: %p\n", static_cast(mainArena)); - - G_WorkspaceRoot = GetWorkspaceRoot(mainArena); - - char docsDirBuf[512]; - snprintf(docsDirBuf, sizeof(docsDirBuf), "%s\\Romeo\\docs", CStr(G_WorkspaceRoot)); - G_DocsDir = StringCopy(mainArena, WrapString(docsDirBuf)); - - char dbFilePathBuf[512]; - snprintf(dbFilePathBuf, sizeof(dbFilePathBuf), "%s\\Romeo\\docs\\romeo.db", CStr(G_WorkspaceRoot)); - G_DbFilePath = StringCopy(mainArena, WrapString(dbFilePathBuf)); - - Romeo::DB_Init(G_Db, mainArena); - - printf("DB Init!\n"); - - bool forceRegenerate = false; - if (argc > 1 && (wcscmp(argv[1], L"-force") == 0 || wcscmp(argv[1], L"-f") == 0)) - { - forceRegenerate = true; - } - - { - LockGuard lock(G_Db.Mutex); - if (!forceRegenerate) - { - Romeo::DB_Load(G_Db, G_DbFilePath); - } - else - { - printf("Romeo: Force flag detected, clearing cache and rebuilding all documentation...\n"); - } - - Romeo::DB_ScanWorkspace(G_Db, G_ScratchArena, G_WorkspaceRoot); - - if (forceRegenerate) - { - for (Romeo::FileEntry& entry : G_Db.Entries) - { - entry.Description = {}; - entry.LastMarkdownCreatedTime = 0; - entry.LastAIGeneratedTime = 0; - } - } - - Romeo::MD_GenerateDocumentation(G_Db, G_WorkspaceRoot, G_DocsDir); - Romeo::DB_Save(G_Db, G_DbFilePath); - } - - char debugMsg[256]; - snprintf(debugMsg, sizeof(debugMsg), "Romeo scanned workspace. Found %llu C++ files.\n", static_cast(G_Db.Entries.Size())); - printf("%s", debugMsg); - - // Register hidden window class - const wchar_t CLASS_NAME[] = L"RomeoHiddenWindowClass"; - WNDCLASSW wc = {}; - HINSTANCE hInstance = GetModuleHandleW(nullptr); - wc.lpfnWndProc = RomeoWindowProc; - wc.hInstance = hInstance; - wc.lpszClassName = CLASS_NAME; - - RegisterClassW(&wc); - - // Create hidden window to receive messages - HWND hwnd = CreateWindowExW( - 0, - CLASS_NAME, - L"Romeo Tool", - 0, - CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, - nullptr, - nullptr, - hInstance, - nullptr - ); - - if (hwnd == nullptr) - { - CloseHandle(hMutex); - return 0; - } - - G_ExitEvent = CreateEventW(nullptr, TRUE, FALSE, nullptr); - if (G_ExitEvent != INVALID_HANDLE_VALUE) - { - G_MonitorRunning = true; - G_MonitorThread = std::thread(MonitorThreadProc); - } - - // Add tray icon - NOTIFYICONDATAW nid = {}; - nid.cbSize = sizeof(NOTIFYICONDATAW); - nid.hWnd = hwnd; - nid.uID = ROMEO_TRAY_ICON_ID; - nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; - nid.uCallbackMessage = ROMEO_WM_TRAYICON; - nid.hIcon = LoadIcon(nullptr, IDI_APPLICATION); - wcscpy_s(nid.szTip, L"Romeo Documentation Tool"); - - Shell_NotifyIconW(NIM_ADD, &nid); - - // Message loop - MSG msg = {}; - while (GetMessage(&msg, nullptr, 0, 0)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - - // Cleanup - Shell_NotifyIconW(NIM_DELETE, &nid); - - G_MonitorRunning = false; - if (G_ExitEvent != INVALID_HANDLE_VALUE) - { - SetEvent(G_ExitEvent); - } - if (G_MonitorThread.joinable()) - { - G_MonitorThread.join(); - } - if (G_ExitEvent != INVALID_HANDLE_VALUE) - { - CloseHandle(G_ExitEvent); - G_ExitEvent = INVALID_HANDLE_VALUE; - } - - if (G_OllamaProcessHandle != INVALID_HANDLE_VALUE) - { - TerminateProcess(G_OllamaProcessHandle, 0); - CloseHandle(G_OllamaProcessHandle); - G_OllamaProcessHandle = INVALID_HANDLE_VALUE; - } - if (G_OllamaJobHandle != nullptr) - { - CloseHandle(G_OllamaJobHandle); - G_OllamaJobHandle = nullptr; - } - - ArenaRelease(mainArena); - ArenaRelease(G_ScratchArena); - - CloseHandle(hMutex); - - return 0; -} diff --git a/misc/Generate.bat b/misc/Generate.bat index 22a019e..3d130bc 100644 --- a/misc/Generate.bat +++ b/misc/Generate.bat @@ -19,21 +19,18 @@ if exist "%PLAN%" del /f /q "%PLAN%" >>"%PLAN%" echo PROJECT Juliet >>"%PLAN%" echo EXTRA_DEF JULIET_EXPORT; ->>"%PLAN%" echo PCH Core/PCH.h Juliet\src\Core\PCH.cpp +>>"%PLAN%" echo PCH Core/PCH.h Juliet\src\Core\PCH.c >>"%PLAN%" echo PROJECT Game >>"%PLAN%" echo EXTRA_DEF JULIET_EXPORT; ->>"%PLAN%" echo PCH Core/PCH.h Juliet\src\Core\PCH.cpp +>>"%PLAN%" echo PCH Core/PCH.h Juliet\src\Core\PCH.c >>"%PLAN%" echo PROJECT JulietApp ->>"%PLAN%" echo PCH Core/PCH.h Juliet\src\Core\PCH.cpp - ->>"%PLAN%" echo PROJECT Romeo ->>"%PLAN%" echo PCH Core/PCH.h Juliet\src\Core\PCH.cpp +>>"%PLAN%" echo PCH Core/PCH.h Juliet\src\Core\PCH.c >>"%PLAN%" echo PROJECT JulietShaderCompiler >>"%PLAN%" echo INCLUDE_SEARCH $(SolutionDir)..\Juliet\include;$(SolutionDir)..\Juliet\src;$(SolutionDir)..\External\imgui;$(SolutionDir)..\JulietShaderCompiler; ->>"%PLAN%" echo PCH Core/PCH.h Juliet\src\Core\PCH.cpp +>>"%PLAN%" echo PCH Core/PCH.h Juliet\src\Core\PCH.c >>"%PLAN%" echo DEBUG_CMD ..\..\Assets\source\SolidColor.frag.hlsl -o ..\..\Assets\compiled\SolidColor.frag.dxil >>"%PLAN%" echo PROJECT ImGui Intermediate @@ -44,14 +41,14 @@ if exist "%PLAN%" del /f /q "%PLAN%" >>"%PLAN%" echo PROJECT_SRC ..\External\imgui\imgui_tables.cpp >>"%PLAN%" echo PROJECT_SRC ..\External\imgui\imgui_widgets.cpp >>"%PLAN%" echo PROJECT_SRC ..\External\imgui\backends\imgui_impl_win32.cpp ->>"%PLAN%" echo PROJECT_SRC ..\External\imgui\backends\imgui_impl_dx12.cpp +>>"%PLAN%" echo PROJECT_SRC ..\External\imgui\dcimgui.cpp +>>"%PLAN%" echo PROJECT_SRC ..\External\imgui\dcimgui.h >>"%PLAN%" echo PROJECT_SRC ..\External\imgui\imgui.h >>"%PLAN%" echo PROJECT_SRC ..\External\imgui\imgui_internal.h >>"%PLAN%" echo PROJECT_SRC ..\External\imgui\imstb_rectpack.h >>"%PLAN%" echo PROJECT_SRC ..\External\imgui\imstb_textedit.h >>"%PLAN%" echo PROJECT_SRC ..\External\imgui\imstb_truetype.h >>"%PLAN%" echo PROJECT_SRC ..\External\imgui\backends\imgui_impl_win32.h ->>"%PLAN%" echo PROJECT_SRC ..\External\imgui\backends\imgui_impl_dx12.h >>"%PLAN%" echo SOLUTION Juliet >>"%PLAN%" echo SLN_PROJ JulietApp @@ -59,11 +56,6 @@ if exist "%PLAN%" del /f /q "%PLAN%" >>"%PLAN%" echo SLN_PROJ Game >>"%PLAN%" echo SLN_PROJ ImGui ->>"%PLAN%" echo SOLUTION Romeo ->>"%PLAN%" echo SLN_PROJ Romeo ->>"%PLAN%" echo SLN_PROJ Juliet ->>"%PLAN%" echo SLN_PROJ ImGui - >>"%PLAN%" echo SOLUTION JulietShaderCompiler >>"%PLAN%" echo SLN_PROJ JulietShaderCompiler >>"%PLAN%" echo SLN_PROJ Juliet @@ -78,7 +70,6 @@ if %ERRORLEVEL% neq 0 ( echo Solutions and LSP configuration generated successfully: echo - Juliet.sln -echo - Romeo.sln echo - JulietShaderCompiler.sln echo - compile_commands.json exit /b 0 \ No newline at end of file diff --git a/misc/build.bat b/misc/build.bat index c02d2f8..39ca5a7 100644 --- a/misc/build.bat +++ b/misc/build.bat @@ -9,13 +9,12 @@ cd /d "%~dp0\.." set BUILD_TOOL=misc\build_system.exe set BUILD_SRC=tools\build_system.c -set BUILD_TOOL_VER=1.7 +set BUILD_TOOL_VER=1.9 set COMMAND_GEN_VS=0 set TARGET_JULIET=0 set TARGET_GAME=0 -set TARGET_ROMEO=0 set TARGET_SHADER=0 set TARGET_SPECIFIED=0 @@ -49,14 +48,13 @@ if /i "%~1"=="release" set CONFIG_RELEASE=1& set CONFIG_SPECIFIED=1 if /i "%~1"=="profile" set CONFIG_PROFILE=1& set CONFIG_SPECIFIED=1 if /i "%~1"=="juliet" set TARGET_JULIET=1& set TARGET_SPECIFIED=1 if /i "%~1"=="game" set TARGET_GAME=1& set TARGET_SPECIFIED=1 -if /i "%~1"=="romeo" set TARGET_ROMEO=1& set TARGET_SPECIFIED=1 if /i "%~1"=="shadercompiler" set TARGET_SHADER=1& set TARGET_SPECIFIED=1 shift goto parse_args :check_defaults if !CONFIG_SPECIFIED! equ 0 set CONFIG_DEBUG=1& if !TARGET_SPECIFIED! equ 0 set CONFIG_RELEASE=1& set CONFIG_PROFILE=1 -if !TARGET_SPECIFIED! equ 0 set TARGET_JULIET=1& set TARGET_GAME=1& set TARGET_ROMEO=1& set TARGET_SHADER=1 +if !TARGET_SPECIFIED! equ 0 set TARGET_JULIET=1& set TARGET_GAME=1& set TARGET_SHADER=1 :do_compile_build_tool @@ -96,7 +94,7 @@ if !RECOMPILE_BUILD_TOOL! equ 1 ( exit /b 1 ) ) else ( - echo [BUILD] Compiling fast native build orchestrator [tools\build_system.c -^> misc\build.exe]... + echo [BUILD] Compiling fast native build orchestrator [tools\build_system.c -^> misc\build_system.exe]... %COMPILER% /nologo /MT /O2 /W4 "%BUILD_SRC%" /Fe"%BUILD_TOOL%" if !ERRORLEVEL! neq 0 ( echo [BUILD FAILED] Could not compile build orchestrator. @@ -159,34 +157,41 @@ if !TARGET_GAME! equ 1 set BUILD_GAME_DLL=1 if !TARGET_JULIET! equ 1 echo UNITY Juliet Intermediate\Juliet Juliet_Unity !UNITY_MAX_FILES!>>"!PLAN_FILE!" if !TARGET_JULIET! equ 1 echo UNITY JulietApp Intermediate\JulietApp JulietApp_Unity !UNITY_MAX_FILES!>>"!PLAN_FILE!" if !BUILD_GAME_DLL! equ 1 echo UNITY Game Intermediate\Game Game_Unity !UNITY_MAX_FILES!>>"!PLAN_FILE!" -if !TARGET_ROMEO! equ 1 echo UNITY Romeo Intermediate\Romeo Romeo_Unity !UNITY_MAX_FILES!>>"!PLAN_FILE!" if !TARGET_SHADER! equ 1 echo UNITY JulietShaderCompiler Intermediate\JulietShaderCompiler JulietShaderCompiler_Unity !UNITY_MAX_FILES!>>"!PLAN_FILE!" -if !TARGET_JULIET! equ 1 echo UNITY_EXPLICIT Intermediate\External\imgui ImGui_Unity !UNITY_MAX_FILES! External\imgui\imgui.cpp^|External\imgui\imgui_demo.cpp^|External\imgui\imgui_draw.cpp^|External\imgui\imgui_tables.cpp^|External\imgui\imgui_widgets.cpp^|External\imgui\backends\imgui_impl_win32.cpp^|External\imgui\backends\imgui_impl_dx12.cpp>>"!PLAN_FILE!" +if !TARGET_JULIET! equ 1 echo UNITY_EXPLICIT Intermediate\External\imgui ImGui_Unity !UNITY_MAX_FILES! External\imgui\imgui.cpp^|External\imgui\imgui_demo.cpp^|External\imgui\imgui_draw.cpp^|External\imgui\imgui_tables.cpp^|External\imgui\imgui_widgets.cpp^|External\imgui\backends\imgui_impl_win32.cpp^|External\imgui\dcimgui.cpp>>"!PLAN_FILE!" -set COMMON_FLAGS=/nologo /std:c++20 /W4 /utf-8 /DUNICODE /D_UNICODE /DWIN32_LEAN_AND_MEAN /D_CRT_SECURE_NO_WARNINGS /I"Juliet/include" /I"Juliet/src" /I"Game" /I"External/imgui" /I"External/imgui/backends" /DJULIET_WIN32 /DIMGUI_DEFINE_MATH_OPERATORS /wd5267 /wd4061 /wd4505 /wd4514 /wd4577 /wd4625 /wd4710 /wd4711 /wd4746 /wd4820 /wd5045 /wd5220 /wd5245 /wd4626 /wd5026 /wd5027 /wd4530 +set BASE_FLAGS=/nologo /W4 /WX /utf-8 /DUNICODE /D_UNICODE /DWIN32_LEAN_AND_MEAN /D_CRT_SECURE_NO_WARNINGS /I"Juliet/include" /I"Juliet/src" /I"Game" /I"External/imgui" /I"External/imgui/backends" /DJULIET_WIN32 /DIMGUI_DEFINE_MATH_OPERATORS /wd5267 /wd4061 /wd4505 /wd4514 /wd4577 /wd4625 /wd4710 /wd4711 /wd4746 /wd4820 /wd5045 /wd5220 /wd5245 /wd4626 /wd5026 /wd5027 /wd4530 /wd4201 /wd4204 /wd4221 /wd4100 /wd4189 +set C_STD_FLAG=/TC set COMPILE_ONLY_FLAGS=/Bt+ /EHa- echo !COMPILER! | findstr /i "clang-cl" >nul if !errorlevel! equ 0 ( - set COMPILE_ONLY_FLAGS=!COMPILE_ONLY_FLAGS! -Wno-unused-command-line-argument + set C_STD_FLAG=/clang:-std=c99 + set COMPILE_ONLY_FLAGS=!COMPILE_ONLY_FLAGS! -Wno-unused-command-line-argument -Wno-unused-function -Wno-unused-parameter -Wno-unused-variable -Wno-missing-field-initializers -Wno-gnu-zero-variadic-macro-arguments -Wno-c11-extensions -Wno-microsoft-anon-tag ) +set C_COMMON_FLAGS=!BASE_FLAGS! !C_STD_FLAG! +set CPP_COMMON_FLAGS=!BASE_FLAGS! /std:c++20 + if /i "!CFG!"=="Debug" ( - set COMPILER_FLAGS=!COMMON_FLAGS! !COMPILE_ONLY_FLAGS! /MDd /Od /Zi /Gw /Gy /Zc:inline /DDEBUG /DPROFILING_ENABLED /DJULIET_ENABLE_IMGUI /DJULIET_DEBUG - set LINK_FLAGS=!COMMON_FLAGS! /MDd /Od /Zi /Gw /Gy /Zc:inline /DDEBUG /DPROFILING_ENABLED /DJULIET_ENABLE_IMGUI /DJULIET_DEBUG + set COMPILER_FLAGS=!C_COMMON_FLAGS! !COMPILE_ONLY_FLAGS! /MDd /Od /Zi /Gw /Gy /Zc:inline /DDEBUG /DPROFILING_ENABLED /DJULIET_ENABLE_IMGUI /DJULIET_DEBUG + set CPP_COMPILER_FLAGS=!CPP_COMMON_FLAGS! !COMPILE_ONLY_FLAGS! /MDd /Od /Zi /Gw /Gy /Zc:inline /DDEBUG /DPROFILING_ENABLED /DJULIET_ENABLE_IMGUI /DJULIET_DEBUG + set LINK_FLAGS=!BASE_FLAGS! /MDd /Od /Zi /Gw /Gy /Zc:inline /DDEBUG /DPROFILING_ENABLED /DJULIET_ENABLE_IMGUI /DJULIET_DEBUG set IMGUI_UNITY_SRCS=Intermediate\External\imgui\*.cpp ) else if /i "!CFG!"=="Profile" ( - set COMPILER_FLAGS=!COMMON_FLAGS! !COMPILE_ONLY_FLAGS! /MD /O2 /Zi /Gw /Gy /Zc:inline /DRELEASE /DPROFILING_ENABLED /DJULIET_ENABLE_IMGUI - set LINK_FLAGS=!COMMON_FLAGS! /MD /O2 /Zi /Gw /Gy /Zc:inline /DRELEASE /DPROFILING_ENABLED /DJULIET_ENABLE_IMGUI + set COMPILER_FLAGS=!C_COMMON_FLAGS! !COMPILE_ONLY_FLAGS! /MD /O2 /Zi /Gw /Gy /Zc:inline /DRELEASE /DPROFILING_ENABLED /DJULIET_ENABLE_IMGUI + set CPP_COMPILER_FLAGS=!CPP_COMMON_FLAGS! !COMPILE_ONLY_FLAGS! /MD /O2 /Zi /Gw /Gy /Zc:inline /DRELEASE /DPROFILING_ENABLED /DJULIET_ENABLE_IMGUI + set LINK_FLAGS=!BASE_FLAGS! /MD /O2 /Zi /Gw /Gy /Zc:inline /DRELEASE /DPROFILING_ENABLED /DJULIET_ENABLE_IMGUI set IMGUI_UNITY_SRCS=Intermediate\External\imgui\*.cpp ) else ( - set COMPILER_FLAGS=!COMMON_FLAGS! !COMPILE_ONLY_FLAGS! /MD /O2 /Gw /Gy /Zc:inline /DRELEASE - set LINK_FLAGS=!COMMON_FLAGS! /MD /O2 /Gw /Gy /Zc:inline /DRELEASE + set COMPILER_FLAGS=!C_COMMON_FLAGS! !COMPILE_ONLY_FLAGS! /MD /O2 /Gw /Gy /Zc:inline /DRELEASE + set CPP_COMPILER_FLAGS=!CPP_COMMON_FLAGS! !COMPILE_ONLY_FLAGS! /MD /O2 /Gw /Gy /Zc:inline /DRELEASE + set LINK_FLAGS=!BASE_FLAGS! /MD /O2 /Gw /Gy /Zc:inline /DRELEASE set IMGUI_UNITY_SRCS= ) -set COMMON_LIBS=kernel32.lib user32.lib Advapi32.lib gdi32.lib dxguid.lib Ws2_32.lib dxgi.lib imm32.lib dwmapi.lib d3dcompiler.lib dxcompiler.lib shell32.lib winhttp.lib delayimp.lib +set COMMON_LIBS=kernel32.lib user32.lib Advapi32.lib gdi32.lib d3d12.lib dxguid.lib dxgi.lib imm32.lib dwmapi.lib d3dcompiler.lib dxcompiler.lib shell32.lib winhttp.lib delayimp.lib set NATVIS_LINK_FLAGS= for %%F in (Natvis\*.natvis) do ( @@ -198,19 +203,21 @@ if exist External\imgui\misc\debuggers\imgui.natvis ( if defined IMGUI_UNITY_SRCS ( echo STEP Compiling ImGui Shared Objs [!CFG!]>>"!PLAN_FILE!" - echo OUTPUT Intermediate\x64-!CFG!\ImGui_Unity1.obj>>"!PLAN_FILE!" + echo OUTPUT Intermediate\x64-!CFG!\ImGui_Objs>>"!PLAN_FILE!" echo DEPENDS External\imgui>>"!PLAN_FILE!" - echo COMMAND %COMPILER% %COMPILER_FLAGS% /DIMGUI_API=__declspec^(dllexport^) /c !IMGUI_UNITY_SRCS! /Fo"Intermediate\x64-!CFG!\\">>"!PLAN_FILE!" + echo INC_SRC Intermediate\External\imgui>>"!PLAN_FILE!" + echo INC_OBJ Intermediate\x64-!CFG!\ImGui_Objs>>"!PLAN_FILE!" + echo COMMAND %COMPILER% !CPP_COMPILER_FLAGS! /MP /DIMGUI_API=__declspec^(dllexport^) /c /Fo"Intermediate\x64-!CFG!\ImGui_Objs\\">>"!PLAN_FILE!" ) set IMGUI_OBJS= -if defined IMGUI_UNITY_SRCS set IMGUI_OBJS=Intermediate\x64-!CFG!\ImGui_Unity*.obj +if defined IMGUI_UNITY_SRCS set IMGUI_OBJS=Intermediate\x64-!CFG!\ImGui_Objs\*.obj :: --- Juliet PCH --- echo STEP Building Juliet PCH [!CFG!]>>"!PLAN_FILE!" echo OUTPUT Intermediate\x64-!CFG!\Juliet_PCH.obj^|Intermediate\x64-!CFG!\Juliet.pch>>"!PLAN_FILE!" -echo DEPENDS Juliet\src\Core\PCH.cpp^|Juliet\include\Core\PCH.h>>"!PLAN_FILE!" -echo COMMAND %COMPILER% %COMPILER_FLAGS% /DIMGUI_API=__declspec^(dllexport^) /DJULIET_EXPORT /Yc"Core/PCH.h" /Fp"Intermediate\x64-!CFG!\Juliet.pch" /c Juliet\src\Core\PCH.cpp /Fo"Intermediate\x64-!CFG!\Juliet_PCH.obj">>"!PLAN_FILE!" +echo DEPENDS Juliet\src\Core\PCH.c^|Juliet\include\Core\PCH.h>>"!PLAN_FILE!" +echo COMMAND %COMPILER% %COMPILER_FLAGS% /DIMGUI_API=__declspec^(dllexport^) /DJULIET_EXPORT /Yc"Core/PCH.h" /Fp"Intermediate\x64-!CFG!\Juliet.pch" /c Juliet\src\Core\PCH.c /Fo"Intermediate\x64-!CFG!\Juliet_PCH.obj">>"!PLAN_FILE!" echo STEP Compiling Juliet Objs [!CFG!]>>"!PLAN_FILE!" echo OUTPUT Intermediate\x64-!CFG!\Juliet_Objs>>"!PLAN_FILE!" @@ -235,8 +242,8 @@ if !BUILD_GAME_DLL! equ 1 ( :: --- Game PCH --- echo STEP Building Game PCH [!CFG!]>>"!PLAN_FILE!" echo OUTPUT Intermediate\x64-!CFG!\Game_PCH.obj^|Intermediate\x64-!CFG!\Game.pch>>"!PLAN_FILE!" - echo DEPENDS Juliet\src\Core\PCH.cpp^|Juliet\include\Core\PCH.h>>"!PLAN_FILE!" - echo COMMAND %COMPILER% %COMPILER_FLAGS% /DIMGUI_API=__declspec^(dllimport^) /DJULIET_EXPORT /Yc"Core/PCH.h" /Fp"Intermediate\x64-!CFG!\Game.pch" /c Juliet\src\Core\PCH.cpp /Fo"Intermediate\x64-!CFG!\Game_PCH.obj">>"!PLAN_FILE!" + echo DEPENDS Juliet\src\Core\PCH.c^|Juliet\include\Core\PCH.h>>"!PLAN_FILE!" + echo COMMAND %COMPILER% %COMPILER_FLAGS% /DIMGUI_API=__declspec^(dllimport^) /DJULIET_EXPORT /Yc"Core/PCH.h" /Fp"Intermediate\x64-!CFG!\Game.pch" /c Juliet\src\Core\PCH.c /Fo"Intermediate\x64-!CFG!\Game_PCH.obj">>"!PLAN_FILE!" echo STEP Compiling Game Objs [!CFG!]>>"!PLAN_FILE!" echo OUTPUT Intermediate\x64-!CFG!\Game_Objs>>"!PLAN_FILE!" @@ -258,8 +265,8 @@ if !TARGET_JULIET! equ 1 ( :: --- JulietApp PCH --- echo STEP Building JulietApp PCH [!CFG!]>>"!PLAN_FILE!" echo OUTPUT Intermediate\x64-!CFG!\JulietApp_PCH.obj^|Intermediate\x64-!CFG!\JulietApp.pch>>"!PLAN_FILE!" - echo DEPENDS Juliet\src\Core\PCH.cpp^|Juliet\include\Core\PCH.h>>"!PLAN_FILE!" - echo COMMAND %COMPILER% %COMPILER_FLAGS% /DIMGUI_API=__declspec^(dllimport^) /Yc"Core/PCH.h" /Fp"Intermediate\x64-!CFG!\JulietApp.pch" /c Juliet\src\Core\PCH.cpp /Fo"Intermediate\x64-!CFG!\JulietApp_PCH.obj">>"!PLAN_FILE!" + echo DEPENDS Juliet\src\Core\PCH.c^|Juliet\include\Core\PCH.h>>"!PLAN_FILE!" + echo COMMAND %COMPILER% %COMPILER_FLAGS% /DIMGUI_API=__declspec^(dllimport^) /Yc"Core/PCH.h" /Fp"Intermediate\x64-!CFG!\JulietApp.pch" /c Juliet\src\Core\PCH.c /Fo"Intermediate\x64-!CFG!\JulietApp_PCH.obj">>"!PLAN_FILE!" echo STEP Compiling JulietApp Objs [!CFG!]>>"!PLAN_FILE!" echo OUTPUT Intermediate\x64-!CFG!\JulietApp_Objs>>"!PLAN_FILE!" @@ -276,36 +283,13 @@ if !TARGET_JULIET! equ 1 ( echo COMMAND %COMPILER% !APP_LINK_CMD! /DIMGUI_API=__declspec^(dllimport^) /Fe"bin\x64-!CFG!\JulietApp.exe" !APP_INPUTS! Intermediate\x64-!CFG!\JulietApp_PCH.obj /link %COMMON_LIBS% bin\x64-!CFG!\Juliet.lib !NATVIS_LINK_FLAGS! /SUBSYSTEM:CONSOLE /INCREMENTAL /ILK:Intermediate\x64-!CFG!\JulietApp.ilk /PDB:Intermediate\x64-!CFG!\JulietApp.pdb>>"!PLAN_FILE!" ) -:: --- Romeo.exe --- -if !TARGET_ROMEO! equ 1 ( - :: --- Romeo PCH --- - echo STEP Building Romeo PCH [!CFG!]>>"!PLAN_FILE!" - echo OUTPUT Intermediate\x64-!CFG!\Romeo_PCH.obj^|Intermediate\x64-!CFG!\Romeo.pch>>"!PLAN_FILE!" - echo DEPENDS Juliet\src\Core\PCH.cpp^|Juliet\include\Core\PCH.h>>"!PLAN_FILE!" - echo COMMAND %COMPILER% %COMPILER_FLAGS% /DIMGUI_API=__declspec^(dllimport^) /Yc"Core/PCH.h" /Fp"Intermediate\x64-!CFG!\Romeo.pch" /c Juliet\src\Core\PCH.cpp /Fo"Intermediate\x64-!CFG!\Romeo_PCH.obj">>"!PLAN_FILE!" - - echo STEP Compiling Romeo Objs [!CFG!]>>"!PLAN_FILE!" - echo OUTPUT Intermediate\x64-!CFG!\Romeo_Objs>>"!PLAN_FILE!" - echo DEPENDS Romeo^|Juliet^|Intermediate\x64-!CFG!\Romeo.pch>>"!PLAN_FILE!" - echo INC_SRC Intermediate\Romeo>>"!PLAN_FILE!" - echo INC_OBJ Intermediate\x64-!CFG!\Romeo_Objs>>"!PLAN_FILE!" - echo COMMAND %COMPILER% %COMPILER_FLAGS% /MP /DIMGUI_API=__declspec^(dllimport^) /FI"Core/PCH.h" /Yu"Core/PCH.h" /Fp"Intermediate\x64-!CFG!\Romeo.pch" /c /Fo"Intermediate\x64-!CFG!\Romeo_Objs\\">>"!PLAN_FILE!" - set "ROMEO_INPUTS=Intermediate\x64-!CFG!\Romeo_Objs\*.obj" - set "ROMEO_LINK_CMD=!LINK_FLAGS!" - - echo STEP Building Romeo.exe [!CFG!]>>"!PLAN_FILE!" - echo OUTPUT bin\x64-!CFG!\Romeo.exe>>"!PLAN_FILE!" - echo DEPENDS Romeo^|Juliet^|External\imgui^|Intermediate\x64-!CFG!\Romeo_PCH.obj>>"!PLAN_FILE!" - echo COMMAND %COMPILER% !ROMEO_LINK_CMD! /DIMGUI_API=__declspec^(dllimport^) /Fe"bin\x64-!CFG!\Romeo.exe" !ROMEO_INPUTS! Intermediate\x64-!CFG!\Romeo_PCH.obj /link %COMMON_LIBS% bin\x64-!CFG!\Juliet.lib !NATVIS_LINK_FLAGS! /SUBSYSTEM:WINDOWS /INCREMENTAL /ILK:Intermediate\x64-!CFG!\Romeo.ilk /PDB:Intermediate\x64-!CFG!\Romeo.pdb>>"!PLAN_FILE!" -) - :: --- JulietShaderCompiler.exe --- if !TARGET_SHADER! equ 1 ( :: --- JulietShaderCompiler PCH --- echo STEP Building JulietShaderCompiler PCH [!CFG!]>>"!PLAN_FILE!" echo OUTPUT Intermediate\x64-!CFG!\JulietShaderCompiler_PCH.obj^|Intermediate\x64-!CFG!\JulietShaderCompiler.pch>>"!PLAN_FILE!" - echo DEPENDS Juliet\src\Core\PCH.cpp^|Juliet\include\Core\PCH.h>>"!PLAN_FILE!" - echo COMMAND %COMPILER% %COMPILER_FLAGS% /DIMGUI_API=__declspec^(dllimport^) /IJulietShaderCompiler /Yc"Core/PCH.h" /Fp"Intermediate\x64-!CFG!\JulietShaderCompiler.pch" /c Juliet\src\Core\PCH.cpp /Fo"Intermediate\x64-!CFG!\JulietShaderCompiler_PCH.obj">>"!PLAN_FILE!" + echo DEPENDS Juliet\src\Core\PCH.c^|Juliet\include\Core\PCH.h>>"!PLAN_FILE!" + echo COMMAND %COMPILER% %COMPILER_FLAGS% /DIMGUI_API=__declspec^(dllimport^) /IJulietShaderCompiler /Yc"Core/PCH.h" /Fp"Intermediate\x64-!CFG!\JulietShaderCompiler.pch" /c Juliet\src\Core\PCH.c /Fo"Intermediate\x64-!CFG!\JulietShaderCompiler_PCH.obj">>"!PLAN_FILE!" echo STEP Compiling JulietShaderCompiler Objs [!CFG!]>>"!PLAN_FILE!" echo OUTPUT Intermediate\x64-!CFG!\JulietShaderCompiler_Objs>>"!PLAN_FILE!" diff --git a/tools/build_system.c b/tools/build_system.c index 6e339b3..a4f0caf 100644 --- a/tools/build_system.c +++ b/tools/build_system.c @@ -298,10 +298,13 @@ static int CompareFilePaths(const void* a, const void* b) static bool GenerateUnityFiles(const UnityConfig* ucfg) { + const char* unityExt = (ucfg->SourceDir[0] != '\0') ? ".c" : ".cpp"; + const char* staleExt = (ucfg->SourceDir[0] != '\0') ? ".cpp" : ".c"; + FilePathList* srcFiles = CreateFilePathList(); if (ucfg->SourceDir[0] != '\0') { - CollectFiles(ucfg->SourceDir, NULL, ".cpp", srcFiles); + CollectFiles(ucfg->SourceDir, NULL, ".c", srcFiles); } else { @@ -328,6 +331,7 @@ static bool GenerateUnityFiles(const UnityConfig* ucfg) bool anyChanged = false; char currentUnityPath[MAX_PATH_LEN]; + char staleUnityPath[MAX_PATH_LEN]; char* memBuf = (char*)ArenaPush(1024 * 1024); // Determine hot/cold for each file @@ -376,7 +380,13 @@ static bool GenerateUnityFiles(const UnityConfig* ucfg) memOffset += sprintf_s(memBuf + memOffset, (1024 * 1024) - memOffset, "// Empty bucket\n"); } - snprintf(currentUnityPath, sizeof(currentUnityPath), "%s\\%s%d.cpp", ucfg->OutputDir, ucfg->Prefix, b + 1); + snprintf(staleUnityPath, sizeof(staleUnityPath), "%s\\%s%d%s", ucfg->OutputDir, ucfg->Prefix, b + 1, staleExt); + if (FileExists(staleUnityPath)) { + DeleteFileA(staleUnityPath); + anyChanged = true; + } + + snprintf(currentUnityPath, sizeof(currentUnityPath), "%s\\%s%d%s", ucfg->OutputDir, ucfg->Prefix, b + 1, unityExt); FileContent exist = ReadEntireFile(currentUnityPath); bool write = true; if (exist.Data && exist.Size == memOffset && memcmp(exist.Data, memBuf, memOffset) == 0) write = false; @@ -410,8 +420,14 @@ static bool GenerateUnityFiles(const UnityConfig* ucfg) for (int k = 0; absPath[k]; k++) { if (absPath[k] == '\\') absPath[k] = '/'; } int memOffset = sprintf_s(memBuf, (1024 * 1024), "#include \"%s\"\n", absPath); + + snprintf(staleUnityPath, sizeof(staleUnityPath), "%s\\%s_Hot%d%s", ucfg->OutputDir, ucfg->Prefix, i, staleExt); + if (FileExists(staleUnityPath)) { + DeleteFileA(staleUnityPath); + anyChanged = true; + } - snprintf(currentUnityPath, sizeof(currentUnityPath), "%s\\%s_Hot%d.cpp", ucfg->OutputDir, ucfg->Prefix, i); + snprintf(currentUnityPath, sizeof(currentUnityPath), "%s\\%s_Hot%d%s", ucfg->OutputDir, ucfg->Prefix, i, unityExt); FileContent exist = ReadEntireFile(currentUnityPath); bool write = true; if (exist.Data && exist.Size == memOffset && memcmp(exist.Data, memBuf, memOffset) == 0) write = false; @@ -438,7 +454,12 @@ static bool GenerateUnityFiles(const UnityConfig* ucfg) // Cleanup unused cold buckets for (int b = numBuckets; b < numBuckets + 100; b++) { - snprintf(currentUnityPath, sizeof(currentUnityPath), "%s\\%s%d.cpp", ucfg->OutputDir, ucfg->Prefix, b + 1); + snprintf(staleUnityPath, sizeof(staleUnityPath), "%s\\%s%d%s", ucfg->OutputDir, ucfg->Prefix, b + 1, staleExt); + if (FileExists(staleUnityPath)) { + DeleteFileA(staleUnityPath); + anyChanged = true; + } + snprintf(currentUnityPath, sizeof(currentUnityPath), "%s\\%s%d%s", ucfg->OutputDir, ucfg->Prefix, b + 1, unityExt); if (FileExists(currentUnityPath)) { DeleteFileA(currentUnityPath); anyChanged = true; @@ -450,10 +471,15 @@ static bool GenerateUnityFiles(const UnityConfig* ucfg) // Cleanup unused hot files for (int i = 0; i < srcFiles->Count + 1000; i++) { + snprintf(staleUnityPath, sizeof(staleUnityPath), "%s\\%s_Hot%d%s", ucfg->OutputDir, ucfg->Prefix, i, staleExt); + if (FileExists(staleUnityPath)) { + DeleteFileA(staleUnityPath); + anyChanged = true; + } bool shouldExist = (i < srcFiles->Count && isHot[i]); if (!shouldExist) { - snprintf(currentUnityPath, sizeof(currentUnityPath), "%s\\%s_Hot%d.cpp", ucfg->OutputDir, ucfg->Prefix, i); + snprintf(currentUnityPath, sizeof(currentUnityPath), "%s\\%s_Hot%d%s", ucfg->OutputDir, ucfg->Prefix, i, unityExt); if (FileExists(currentUnityPath)) { DeleteFileA(currentUnityPath); anyChanged = true; @@ -1770,6 +1796,8 @@ static void generate_compile_commands( } is_first_entry = false; + const char* lang_flag = EndsWithNoCase(full_path, ".c") ? "/clang:-std=c99" : "/std:c++20"; + offset += sprintf_s(json_buf + offset, buffer_size - offset, " {\n" " \"directory\": \"%s\",\n" @@ -1778,10 +1806,10 @@ static void generate_compile_commands( " \"clang-cl.exe\",\n" " \"--driver-mode=cl\",\n" " \"/nologo\",\n" - " \"/std:c++20\",\n" + " \"%s\",\n" " \"/W4\",\n" " \"/utf-8\",\n", - cwd, full_path); + cwd, full_path, lang_flag); for (int d = 0; d < def_common_count; d++) { -- 2.54.0