Add d3d
This commit is contained in:
Родитель
99ed044bfd
Коммит
4d007aa287
|
@ -10,7 +10,6 @@
|
|||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.AI.MachineLearning" Version="1.9.1" />
|
||||
<PackageReference Include="Microsoft.ML.OnnxRuntime.DirectML" Version="1.10.0" />
|
||||
<PackageReference Include="Microsoft.Windows.CsWinRT" Version="1.3.5" />
|
||||
</ItemGroup>
|
||||
|
||||
|
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -0,0 +1,14 @@
|
|||
Texture2D t1 : register(t0);
|
||||
SamplerState s1 : register(s0);
|
||||
|
||||
struct VS_OUTPUT
|
||||
{
|
||||
float4 pos: SV_POSITION;
|
||||
float2 texCoord: TEXCOORD;
|
||||
};
|
||||
|
||||
float4 main(VS_OUTPUT input) : SV_TARGET
|
||||
{
|
||||
// return interpolated color
|
||||
return t1.Sample(s1, input.texCoord);
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
struct VS_INPUT
|
||||
{
|
||||
float4 pos : POSITION;
|
||||
float2 texCoord: TEXCOORD;
|
||||
};
|
||||
|
||||
struct VS_OUTPUT
|
||||
{
|
||||
float4 pos: SV_POSITION;
|
||||
float2 texCoord: TEXCOORD;
|
||||
};
|
||||
|
||||
cbuffer ConstantBuffer : register(b0)
|
||||
{
|
||||
float4x4 wvpMat;
|
||||
};
|
||||
|
||||
VS_OUTPUT main(VS_INPUT input)
|
||||
{
|
||||
VS_OUTPUT output;
|
||||
output.pos = mul(input.pos, wvpMat);
|
||||
output.texCoord = input.texCoord;
|
||||
return output;
|
||||
}
|
|
@ -1,6 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="..\packages\Microsoft.ML.OnnxRuntime.DirectML.1.10.0\build\native\Microsoft.ML.OnnxRuntime.DirectML.props" Condition="Exists('..\packages\Microsoft.ML.OnnxRuntime.DirectML.1.10.0\build\native\Microsoft.ML.OnnxRuntime.DirectML.props')" />
|
||||
<Import Project="..\packages\Microsoft.AI.DirectML.1.8.0\build\Microsoft.AI.DirectML.props" Condition="Exists('..\packages\Microsoft.AI.DirectML.1.8.0\build\Microsoft.AI.DirectML.props')" />
|
||||
<Import Project="..\packages\Microsoft.AI.MachineLearning.1.9.1\build\native\Microsoft.AI.MachineLearning.props" Condition="Exists('..\packages\Microsoft.AI.MachineLearning.1.9.1\build\native\Microsoft.AI.MachineLearning.props')" />
|
||||
<Import Project="..\packages\Microsoft.Windows.CppWinRT.2.0.210930.14\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\packages\Microsoft.Windows.CppWinRT.2.0.210930.14\build\native\Microsoft.Windows.CppWinRT.props')" />
|
||||
|
@ -94,7 +93,7 @@
|
|||
<AdditionalUsingDirectories>$(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
|
||||
<ModuleDefinitionFile>WinMLSamplesGalleryNative.def</ModuleDefinitionFile>
|
||||
</Link>
|
||||
|
@ -112,6 +111,10 @@
|
|||
<UseOpenCV>False</UseOpenCV>
|
||||
<UseOpenCV Condition="Exists('$(OpenCVLibFullPath)')">True</UseOpenCV>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<IncludePath>C:\Program Files %28x86%29\Windows Kits\10\Include\10.0.19041.0\um;C:\Program Files %28x86%29\Windows Kits\10\Include\10.0.19041.0\shared;$(IncludePath)</IncludePath>
|
||||
<LibraryPath>C:\Program Files %28x86%29\Windows Kits\10\Lib\10.0.19041.0\um\x64;$(LibraryPath)</LibraryPath>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="$(UseOpenCV)">
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)..\..\build\external\opencv\cmake_config\$(PlatformString)\install\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
|
@ -126,10 +129,14 @@
|
|||
<ClCompile>
|
||||
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<LanguageStandard Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">stdcpp20</LanguageStandard>
|
||||
<ConformanceMode Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ConformanceMode>
|
||||
</ClCompile>
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>$(MSBuildThisFileDirectory)../WinMLSamplesGallery/Models/;$(MSBuildThisFileDirectory)../../build/native/include/;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ResourceCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">d3d12.lib;dxgi.lib;d3dcompiler.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)'=='Release'">
|
||||
<ClCompile>
|
||||
|
@ -145,11 +152,13 @@
|
|||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="AdapterList.h" />
|
||||
<ClInclude Include="d3dx12.h" />
|
||||
<ClInclude Include="DXResourceBinding.h" />
|
||||
<ClInclude Include="EncryptedModels.h" />
|
||||
<ClInclude Include="OpenCVImage.h" />
|
||||
<ClInclude Include="pch.h" />
|
||||
<ClInclude Include="RandomAccessStream.h" />
|
||||
<ClInclude Include="stdafx.h" />
|
||||
<ClInclude Include="WeakBuffer.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
@ -180,12 +189,29 @@
|
|||
<ItemGroup>
|
||||
<ResourceCompile Include="Resource.rc" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<FxCompile Include="PixelShader.hlsl">
|
||||
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Pixel</ShaderType>
|
||||
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">Pixel</ShaderType>
|
||||
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Pixel</ShaderType>
|
||||
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Pixel</ShaderType>
|
||||
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">Pixel</ShaderType>
|
||||
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Pixel</ShaderType>
|
||||
</FxCompile>
|
||||
<FxCompile Include="VertexShader.hlsl">
|
||||
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Vertex</ShaderType>
|
||||
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">Vertex</ShaderType>
|
||||
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Vertex</ShaderType>
|
||||
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Vertex</ShaderType>
|
||||
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">Vertex</ShaderType>
|
||||
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Vertex</ShaderType>
|
||||
</FxCompile>
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
<Import Project="..\packages\Microsoft.Windows.CppWinRT.2.0.210930.14\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\packages\Microsoft.Windows.CppWinRT.2.0.210930.14\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
||||
<Import Project="..\packages\Microsoft.AI.MachineLearning.1.9.1\build\native\Microsoft.AI.MachineLearning.targets" Condition="Exists('..\packages\Microsoft.AI.MachineLearning.1.9.1\build\native\Microsoft.AI.MachineLearning.targets')" />
|
||||
<Import Project="..\packages\Microsoft.AI.DirectML.1.8.0\build\Microsoft.AI.DirectML.targets" Condition="Exists('..\packages\Microsoft.AI.DirectML.1.8.0\build\Microsoft.AI.DirectML.targets')" />
|
||||
<Import Project="..\packages\Microsoft.ML.OnnxRuntime.DirectML.1.10.0\build\native\Microsoft.ML.OnnxRuntime.DirectML.targets" Condition="Exists('..\packages\Microsoft.ML.OnnxRuntime.DirectML.1.10.0\build\native\Microsoft.ML.OnnxRuntime.DirectML.targets')" />
|
||||
</ImportGroup>
|
||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||
<PropertyGroup>
|
||||
|
@ -197,8 +223,6 @@
|
|||
<Error Condition="!Exists('..\packages\Microsoft.AI.MachineLearning.1.9.1\build\native\Microsoft.AI.MachineLearning.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.AI.MachineLearning.1.9.1\build\native\Microsoft.AI.MachineLearning.targets'))" />
|
||||
<Error Condition="!Exists('..\packages\Microsoft.AI.DirectML.1.8.0\build\Microsoft.AI.DirectML.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.AI.DirectML.1.8.0\build\Microsoft.AI.DirectML.props'))" />
|
||||
<Error Condition="!Exists('..\packages\Microsoft.AI.DirectML.1.8.0\build\Microsoft.AI.DirectML.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.AI.DirectML.1.8.0\build\Microsoft.AI.DirectML.targets'))" />
|
||||
<Error Condition="!Exists('..\packages\Microsoft.ML.OnnxRuntime.DirectML.1.10.0\build\native\Microsoft.ML.OnnxRuntime.DirectML.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.ML.OnnxRuntime.DirectML.1.10.0\build\native\Microsoft.ML.OnnxRuntime.DirectML.props'))" />
|
||||
<Error Condition="!Exists('..\packages\Microsoft.ML.OnnxRuntime.DirectML.1.10.0\build\native\Microsoft.ML.OnnxRuntime.DirectML.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.ML.OnnxRuntime.DirectML.1.10.0\build\native\Microsoft.ML.OnnxRuntime.DirectML.targets'))" />
|
||||
</Target>
|
||||
<Target Name="CopyNeutral" AfterTargets="Build">
|
||||
<Copy SourceFiles="$(OutDir)\WinMLSamplesGalleryNative.winmd" DestinationFolder="$(SolutionDir)$(MSBuildProjectName)\bin\neutral\WinMLSamplesGalleryNative.winmd" />
|
||||
|
|
|
@ -36,6 +36,12 @@
|
|||
<ClInclude Include="DXResourceBinding.h">
|
||||
<Filter>DXResourceBinding</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="d3dx12.h">
|
||||
<Filter>DXResourceBinding</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="stdafx.h">
|
||||
<Filter>DXResourceBinding</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="Resource.rc" />
|
||||
|
@ -70,4 +76,12 @@
|
|||
<UniqueIdentifier>{393a0b12-622a-4d4c-b4a6-ed0bb1b2e285}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<FxCompile Include="VertexShader.hlsl">
|
||||
<Filter>DXResourceBinding</Filter>
|
||||
</FxCompile>
|
||||
<FxCompile Include="PixelShader.hlsl">
|
||||
<Filter>DXResourceBinding</Filter>
|
||||
</FxCompile>
|
||||
</ItemGroup>
|
||||
</Project>
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -2,6 +2,5 @@
|
|||
<packages>
|
||||
<package id="Microsoft.AI.DirectML" version="1.8.0" targetFramework="native" />
|
||||
<package id="Microsoft.AI.MachineLearning" version="1.9.1" targetFramework="native" />
|
||||
<package id="Microsoft.ML.OnnxRuntime.DirectML" version="1.10.0" targetFramework="native" />
|
||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.210930.14" targetFramework="native" />
|
||||
</packages>
|
|
@ -0,0 +1,166 @@
|
|||
#pragma once
|
||||
|
||||
#ifndef WIN32_LEAN_AND_MEAN
|
||||
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers.
|
||||
#endif
|
||||
|
||||
#include <windows.h>
|
||||
#include <d3d12.h>
|
||||
#include <dxgi1_4.h>
|
||||
#include <D3Dcompiler.h>
|
||||
#include <DirectXMath.h>
|
||||
#include "d3dx12.h"
|
||||
#include <string>
|
||||
#include <wincodec.h>
|
||||
|
||||
// this will only call release if an object exists (prevents exceptions calling release on non existant objects)
|
||||
#define SAFE_RELEASE(p) { if ( (p) ) { (p)->Release(); (p) = 0; } }
|
||||
|
||||
using namespace DirectX; // we will be using the directxmath library
|
||||
|
||||
// Handle to the window
|
||||
HWND hwnd = NULL;
|
||||
|
||||
// name of the window (not the title)
|
||||
LPCTSTR WindowName = L"BzTutsApp";
|
||||
|
||||
// title of the window
|
||||
LPCTSTR WindowTitle = L"Bz Window";
|
||||
|
||||
// width and height of the window
|
||||
int Width = 800;
|
||||
int Height = 600;
|
||||
|
||||
// is window full screen?
|
||||
bool FullScreen = false;
|
||||
|
||||
// we will exit the program when this becomes false
|
||||
bool Running = true;
|
||||
|
||||
int WINAPI StartHWind(HINSTANCE hInstance, //Main windows function
|
||||
int nShowCmd);
|
||||
|
||||
// create a window
|
||||
bool InitializeWindow(HINSTANCE hInstance,
|
||||
int ShowWnd,
|
||||
bool fullscreen);
|
||||
|
||||
// main application loop
|
||||
void mainloop();
|
||||
|
||||
// callback function for windows messages
|
||||
LRESULT CALLBACK WndProc(HWND hWnd,
|
||||
UINT msg,
|
||||
WPARAM wParam,
|
||||
LPARAM lParam);
|
||||
|
||||
// direct3d stuff
|
||||
const int frameBufferCount = 3; // number of buffers we want, 2 for double buffering, 3 for tripple buffering
|
||||
|
||||
ID3D12Device* device; // direct3d device
|
||||
|
||||
IDXGISwapChain3* swapChain; // swapchain used to switch between render targets
|
||||
|
||||
ID3D12CommandQueue* commandQueue; // container for command lists
|
||||
|
||||
ID3D12DescriptorHeap* rtvDescriptorHeap; // a descriptor heap to hold resources like the render targets
|
||||
|
||||
ID3D12Resource* renderTargets[frameBufferCount]; // number of render targets equal to buffer count
|
||||
|
||||
ID3D12CommandAllocator* commandAllocator[frameBufferCount]; // we want enough allocators for each buffer * number of threads (we only have one thread)
|
||||
|
||||
ID3D12GraphicsCommandList* commandList; // a command list we can record commands into, then execute them to render the frame
|
||||
|
||||
ID3D12Fence* fence[frameBufferCount]; // an object that is locked while our command list is being executed by the gpu. We need as many
|
||||
//as we have allocators (more if we want to know when the gpu is finished with an asset)
|
||||
|
||||
HANDLE fenceEvent; // a handle to an event when our fence is unlocked by the gpu
|
||||
|
||||
UINT64 fenceValue[frameBufferCount]; // this value is incremented each frame. each fence will have its own value
|
||||
|
||||
int frameIndex; // current rtv we are on
|
||||
|
||||
int rtvDescriptorSize; // size of the rtv descriptor on the device (all front and back buffers will be the same size)
|
||||
// function declarations
|
||||
|
||||
bool InitD3D(); // initializes direct3d 12
|
||||
|
||||
void Update(); // update the game logic
|
||||
|
||||
void UpdatePipeline(); // update the direct3d pipeline (update command lists)
|
||||
|
||||
void Render(); // execute the command list
|
||||
|
||||
void Cleanup(); // release com ojects and clean up memory
|
||||
|
||||
void WaitForPreviousFrame(); // wait until gpu is finished with command list
|
||||
|
||||
ID3D12PipelineState* pipelineStateObject; // pso containing a pipeline state
|
||||
|
||||
ID3D12RootSignature* rootSignature; // root signature defines data shaders will access
|
||||
|
||||
D3D12_VIEWPORT viewport; // area that output from rasterizer will be stretched to.
|
||||
|
||||
D3D12_RECT scissorRect; // the area to draw in. pixels outside that area will not be drawn onto
|
||||
|
||||
ID3D12Resource* vertexBuffer; // a default buffer in GPU memory that we will load vertex data for our triangle into
|
||||
ID3D12Resource* indexBuffer; // a default buffer in GPU memory that we will load index data for our triangle into
|
||||
|
||||
D3D12_VERTEX_BUFFER_VIEW vertexBufferView; // a structure containing a pointer to the vertex data in gpu memory
|
||||
// the total size of the buffer, and the size of each element (vertex)
|
||||
|
||||
D3D12_INDEX_BUFFER_VIEW indexBufferView; // a structure holding information about the index buffer
|
||||
|
||||
ID3D12Resource* depthStencilBuffer; // This is the memory for our depth buffer. it will also be used for a stencil buffer in a later tutorial
|
||||
ID3D12DescriptorHeap* dsDescriptorHeap; // This is a heap for our depth/stencil buffer descriptor
|
||||
|
||||
// this is the structure of our constant buffer.
|
||||
struct ConstantBufferPerObject {
|
||||
XMFLOAT4X4 wvpMat;
|
||||
};
|
||||
|
||||
// Constant buffers must be 256-byte aligned which has to do with constant reads on the GPU.
|
||||
// We are only able to read at 256 byte intervals from the start of a resource heap, so we will
|
||||
// make sure that we add padding between the two constant buffers in the heap (one for cube1 and one for cube2)
|
||||
// Another way to do this would be to add a float array in the constant buffer structure for padding. In this case
|
||||
// we would need to add a float padding[50]; after the wvpMat variable. This would align our structure to 256 bytes (4 bytes per float)
|
||||
// The reason i didn't go with this way, was because there would actually be wasted cpu cycles when memcpy our constant
|
||||
// buffer data to the gpu virtual address. currently we memcpy the size of our structure, which is 16 bytes here, but if we
|
||||
// were to add the padding array, we would memcpy 64 bytes if we memcpy the size of our structure, which is 50 wasted bytes
|
||||
// being copied.
|
||||
int ConstantBufferPerObjectAlignedSize = (sizeof(ConstantBufferPerObject) + 255) & ~255;
|
||||
|
||||
ConstantBufferPerObject cbPerObject; // this is the constant buffer data we will send to the gpu
|
||||
// (which will be placed in the resource we created above)
|
||||
|
||||
ID3D12Resource* constantBufferUploadHeaps[frameBufferCount]; // this is the memory on the gpu where constant buffers for each frame will be placed
|
||||
|
||||
UINT8* cbvGPUAddress[frameBufferCount]; // this is a pointer to each of the constant buffer resource heaps
|
||||
|
||||
XMFLOAT4X4 cameraProjMat; // this will store our projection matrix
|
||||
XMFLOAT4X4 cameraViewMat; // this will store our view matrix
|
||||
|
||||
XMFLOAT4 cameraPosition; // this is our cameras position vector
|
||||
XMFLOAT4 cameraTarget; // a vector describing the point in space our camera is looking at
|
||||
XMFLOAT4 cameraUp; // the worlds up vector
|
||||
|
||||
XMFLOAT4X4 cube1WorldMat; // our first cubes world matrix (transformation matrix)
|
||||
XMFLOAT4X4 cube1RotMat; // this will keep track of our rotation for the first cube
|
||||
XMFLOAT4 cube1Position; // our first cubes position in space
|
||||
|
||||
XMFLOAT4X4 cube2WorldMat; // our first cubes world matrix (transformation matrix)
|
||||
XMFLOAT4X4 cube2RotMat; // this will keep track of our rotation for the second cube
|
||||
XMFLOAT4 cube2PositionOffset; // our second cube will rotate around the first cube, so this is the position offset from the first cube
|
||||
|
||||
int numCubeIndices; // the number of indices to draw the cube
|
||||
|
||||
ID3D12Resource* textureBuffer; // the resource heap containing our texture
|
||||
|
||||
int LoadImageDataFromFile(BYTE** imageData, D3D12_RESOURCE_DESC& resourceDescription, LPCWSTR filename, int& bytesPerRow);
|
||||
|
||||
DXGI_FORMAT GetDXGIFormatFromWICFormat(WICPixelFormatGUID& wicFormatGUID);
|
||||
WICPixelFormatGUID GetConvertToWICFormat(WICPixelFormatGUID& wicFormatGUID);
|
||||
int GetDXGIFormatBitsPerPixel(DXGI_FORMAT& dxgiFormat);
|
||||
|
||||
ID3D12DescriptorHeap* mainDescriptorHeap;
|
||||
ID3D12Resource* textureBufferUploadHeap;
|
Загрузка…
Ссылка в новой задаче