전체 글

전체 글

    DescripterAllocator Pool

    DescripterAllocator Pool

    개요Dx11 까지는 ID3D11ShaderResourceView 이런 객체를 만들려면 드라이버가 관리해줬지만... Dx12 부터는 없다. 개발자가 직접 해야 한다.이전에 MeshRendering 쪽을 보면 // Texture 전달 if(_texture != nullptr) { ID3D12DescriptorHeap* heaps[] = { _texture->GetDescHeap().Get() }; COMMAND_LIST->SetDescriptorHeaps(1, heaps); COMMAND_LIST->SetGraphicsRootDescriptorTable(2, _texture->GetHandle()); }이 부분이다. 저기 Texture는 각 텍스처 클래스 마다 ID3D12DescriptorHeap을 할..

    Cpu Memory Pool

    Cpu Memory Pool

    Cpu의 메모리를 관리 하기 위한 메모리 풀이다.Git!https://github.com/aszd0708/DirecX12_Rendering/tree/master/CpuMemoryPool DirecX12_Rendering/CpuMemoryPool at master · aszd0708/DirecX12_Renderingdeveloping simple rendering engine by DirectX12. Contribute to aszd0708/DirecX12_Rendering development by creating an account on GitHub.github.com해당 풀의 코드이다.설계Pool일단, CPU가 한번에 캐시에서 읽는 최소한의 크기는 64바이트 이다. (어떤 CPU를 사용하는지에 따라 ..

    Texture!

    Texture!

    그러하다. Texture다.Dx11과 굉장히 다르다.너무 다르다... 일단. 진행 해보자... 이론Dx11과 다른점은 Dx11때에는 그냥 ShaderResourceView로 그냥 넘겼다.Dx12에서는 조금 아니! 매우 큰 다른 방법으로 넘겨줘야 한다.이런식으로 CPU와 GPU 그리고 GPU에서 원하는 Texture가 있다고 하자Dx11에서는 그냥 읽고 메모리에 태우면 알아서 ㅃㅃ 했겠지만...Dx12에서는 다르다!! 이런식으로 CPU에서 텍스처를 읽고-> CPU와 GPU가 공유하는 메모리에 넣고-> 그걸 GPU에서 GPU만 들고 있는 메모리에 넣어준다. 그럼 왜 중간 공유 메모리에 두면 다 되는거 아니냐! 라고 할수 있지만...메모리 대역폭 차이CPU의 메모리와 GPU의 메모리를 계속해서 이동하게 되면 ..

    Mesh Rendering - 2

    Mesh Rendering - 2

    이전에 너무 코드만 있었지만... 어쩔수 없다 ㅠMeshRenderer이제 여기서!! 이전 포스트에서 만든 모든 것들을 잘 조립해서 Mesh를 표시한다. class MeshRenderer : public Renderer{ DECLARE_COMPONENT_TYPE(eComponentType::Renderer);public: MeshRenderer(); virtual ~MeshRenderer() override;public: void Init(shared_ptr> mesh, shared_ptr shader); virtual void Render() override;public: const D3D12_VERTEX_BUFFER_VIEW& GetVertexBuffer() { return _mesh->GetVert..

    Mesh Rendering - 1 (Shader, ConstantBuffer, Vertex Index Buffer)

    이젠 저 삼각형을 좀 이렇게 저렇게 해서 만든 Mesh다. 우선 이전 포스트에서 사용했던 코드를 바탕으로 약간의 구조를 잡아본다. Shader여기서 Shader는HLSL 에서 PixelShader, VertexShader 매핑RootSignature, PSO 제작 이 정도만 한다.그리고, 각 Model이나 Mesh마다 각각 다른 Shader정보를 갖고있기 때문에 해당 정보를 담은 ShaderInfo 클래스를 만들어 Shader를 만들 때, 해당 정보에서 읽는다. ShaderInfo#pragma oncestruct ShaderInfo{ wstring _path; vector _inputLayoutDesc; D3D12_ROOT_PARAMETER* _signatureRootParam; uint32 _signa..

    삼각형 출력

    삼각형 출력

    삼각형이다. DirectX11에서는 데이터 넘기고 셰이더에서 처리하고 출력하고 가 끝이었다.하지만... DirectX12에선... 아니다... 삼각형!일단 간단한 삼각형을 그릴 때 필요한 것들은준비물삼각형 데이터(Vertex, Color)셰이더 데이터를 전달할 ResourceShader에서 어떤 데이터를 받을 것인지에 따른 SignaturePSO(Pipeline State Object)가 필요하다.삼각형 데이터void TriagleDemo::CreateTriangle(){ { Vec3 vertex = Vec3(0.0f, 0.5f, 0.0f); Vec4 color = Vec4(1.0f, 0.0f, 0.0f, 1.0f); VertexData data = {vertex, color}; _vertexDa..

    기본

    Githttps://github.com/aszd0708/DirecX12_Rendering GitHub - aszd0708/DirecX12_Rendering: developing simple rendering engine by DirectX12developing simple rendering engine by DirectX12. Contribute to aszd0708/DirecX12_Rendering development by creating an account on GitHub.github.com 서론DirectX11에서는 Device와 DeviceContext 만 부르면 어느정도 내가 원하는 것들을 만들 수 있다.하지만! DirectX12는 다르다! 필요한 것들기본적으로 Device는 같지만... 나..

    DirectX12, DirectX11의 차이

    생각보다 DirectX11과 DirectX12이 개발 방향이 너무 달라서 따로 카테고리를 생성했다. 일단, 차이점들을 간단히 살펴보자. 차이점렌더링 명령 하달 방식DirectX11기본적으로 단일 통로(Immediate Context)를 통해 GPU에 명령멀티 스레딩을 지원했지만, 드라이버 내부에서 병목현상이 발생해 CPU를 100% 활용하기 어려움DirectX12CommandList와 CommandQueue를 도입각 CPU의 CommandList에 명령을 해 멀티 스레딩 사용 원할마지막에 CommandQueue에 한번에 명령들을 입력하여 GPU가 처리이로 인해 CPU의 멀티스레딩 효율이 높아지고, 드로우콜 성능이 높아짐상태관리DirectX11필요한 상태들만 개별적으로 변경 가능 (VSSetShader, ..