Advertisement
Guest User

Untitled

a guest
Sep 1st, 2019
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. HRESULT LILY_API DxApplication::LoadPipeLine()
  2. {
  3.     HRESULT Result;
  4.    
  5.     #ifdef DEBUG
  6.     ID3D12Debug* DebugController;
  7.     Result = D3D12GetDebugInterface(IID_PPV_ARGS(&DebugController));
  8.     if (FAILED(Result))
  9.         return Result;
  10.  
  11.     DebugController->EnableDebugLayer();
  12.     #endif
  13.  
  14.     Result = CreateDXGIFactory(IID_PPV_ARGS(&m_Factory));
  15.     if (FAILED(Result))
  16.         return Result;
  17.  
  18.     Result = D3D12CreateDevice(NULL, D3D_FEATURE_LEVEL_12_1, IID_PPV_ARGS(&m_Device));
  19.     if (FAILED(Result))
  20.         return Result;
  21.  
  22.     D3D12_COMMAND_QUEUE_DESC CommandQueueDesc = {};
  23.     CommandQueueDesc.Flags = D3D12_COMMAND_QUEUE_FLAG_NONE;
  24.     CommandQueueDesc.Type = D3D12_COMMAND_LIST_TYPE_DIRECT;
  25.  
  26.     Result = m_Device->CreateCommandQueue(&CommandQueueDesc, IID_PPV_ARGS(&m_CommandQueue));
  27.     if(FAILED(Result))
  28.         return Result;
  29.  
  30.  
  31.     DXGI_SWAP_CHAIN_DESC1 SwapChainDesc = {};
  32.     SwapChainDesc.SampleDesc.Count = 1;
  33.     SwapChainDesc.SampleDesc.Quality = 0;
  34.     SwapChainDesc.BufferCount = g_BufferCount;
  35.     SwapChainDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
  36.     SwapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_DISCARD;
  37.     SwapChainDesc.Width = m_ClientWidth;
  38.     SwapChainDesc.Height = m_ClientHeight;
  39.  
  40.     IDXGISwapChain1* OldSwapChain;
  41.     Result = m_Factory->CreateSwapChainForHwnd(m_CommandQueue.Get(), m_hAppWindow, &SwapChainDesc, NULL, NULL, &OldSwapChain);
  42.     if (FAILED(Result))
  43.         return Result;
  44.  
  45.     Result = OldSwapChain->QueryInterface(IID_PPV_ARGS(&m_SwapChain));
  46.     if (FAILED(Result))
  47.         return Result;
  48.  
  49.     /* aaaaaaaaaaaaaaaa */
  50.  
  51.     ID3DBlob* VertexShader;
  52.     ID3DBlob* PixelShader;
  53.  
  54.     Result = D3DCompileFromFile(L"Shaders\\DefaultShader.hlsl", 0, 0, "vs_main", "vs_5_0", D3DCOMPILE_DEBUG, NULL, &VertexShader, nullptr);
  55.     if (FAILED(Result))
  56.         return Result;
  57.  
  58.     Result = D3DCompileFromFile(L"Shaders\\DefaultShader.hlsl", 0, 0, "ps_main", "ps_5_0", D3DCOMPILE_DEBUG, NULL, &PixelShader, nullptr);
  59.     if (FAILED(Result))
  60.         return Result;
  61.  
  62.     /* aaaaaaaaaaaaaaaa */
  63.  
  64.     CD3DX12_ROOT_SIGNATURE_DESC RootSignatureDesc = {};
  65.     RootSignatureDesc.Init(NULL, nullptr, NULL, nullptr, D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT);
  66.  
  67.     ID3DBlob* RootSignatureBlob;
  68.     ID3DBlob* RootSignatureBlobError;
  69.     Result = D3D12SerializeRootSignature(&RootSignatureDesc, D3D_ROOT_SIGNATURE_VERSION_1, &RootSignatureBlob, &RootSignatureBlobError);
  70.     if (FAILED(Result))
  71.         return Result;
  72.  
  73.     Result = m_Device->CreateRootSignature(NULL, RootSignatureBlob->GetBufferPointer(), RootSignatureBlob->GetBufferSize(), IID_PPV_ARGS(&m_RootSignature));
  74.         if (FAILED(Result))
  75.             return Result;
  76.  
  77.     D3D12_GRAPHICS_PIPELINE_STATE_DESC PipeLineDesc = {0};
  78.     PipeLineDesc.VS.pShaderBytecode = VertexShader->GetBufferPointer();
  79.     PipeLineDesc.VS.BytecodeLength = VertexShader->GetBufferSize();
  80.     PipeLineDesc.pRootSignature = m_RootSignature.Get();
  81.     PipeLineDesc.SampleMask = UINT_MAX;
  82.     PipeLineDesc.NumRenderTargets = 1;
  83.     PipeLineDesc.SampleDesc.Count = 1;
  84.     PipeLineDesc.RTVFormats[0] = DXGI_FORMAT_R8G8B8A8_UNORM;
  85.     PipeLineDesc.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC(D3D12_DEFAULT);
  86.     PipeLineDesc.RasterizerState = CD3DX12_RASTERIZER_DESC(D3D12_DEFAULT);
  87.     PipeLineDesc.BlendState = CD3DX12_BLEND_DESC(D3D12_DEFAULT);
  88.     PipeLineDesc.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE;
  89.  
  90.     Result = m_Device->CreateGraphicsPipelineState(&PipeLineDesc, IID_PPV_ARGS(&m_PipelineState));
  91.     if (FAILED(Result))
  92.         return Result;
  93.  
  94.     D3D12_DESCRIPTOR_HEAP_DESC DescriptorHeadDesc = {};
  95.     DescriptorHeadDesc.NumDescriptors = g_BufferCount;
  96.     DescriptorHeadDesc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_RTV;
  97.  
  98.     Result = m_Device->CreateDescriptorHeap(&DescriptorHeadDesc, IID_PPV_ARGS(&m_DescriptorHeap));
  99.     if (FAILED(Result))
  100.         return Result;
  101.  
  102.     D3D12_CPU_DESCRIPTOR_HANDLE RtvHandleDesc = m_DescriptorHeap->GetCPUDescriptorHandleForHeapStart();
  103.  
  104.     for (int Buffer = 0; Buffer < g_BufferCount; Buffer++)
  105.     {
  106.         //ID3D12Resource* BufferResource;
  107.  
  108.         Result = m_SwapChain->GetBuffer(Buffer, IID_PPV_ARGS(&m_RenderTarget[Buffer]));
  109.         if (FAILED(Result))
  110.             return Result;
  111.  
  112.         m_Device->CreateRenderTargetView(m_RenderTarget[Buffer].Get(), nullptr, RtvHandleDesc);
  113.  
  114.         m_DescriptorHandle[Buffer] = RtvHandleDesc;
  115.  
  116.         RtvHandleDesc.ptr += m_Device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_RTV);
  117.  
  118.         Result = m_Device->CreateCommandAllocator(CommandQueueDesc.Type, IID_PPV_ARGS(&m_CommandAllocator[Buffer]));
  119.         if (FAILED(Result))
  120.             return Result;
  121.     }
  122.  
  123.     return Result;
  124. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement