추가된 D3D12_RESOURCE_STATES 열거형 – D3D12_RESOURCE_STATE_ALL_SHADER_RESOURCE

초기(VS2015시절) D3D12와 현재 최신 D3D12 SDK의 D3D12_RESOURCE_STATES 열거형 비교. 요 몇 일 전에 ID3D12Debug5::SetEnableGPUBasedValidation()함수의 존재를 알게 되어 GPU Validation을 켜고 테스트를 돌렸다.이전까지 d3d validation을 다 통과해왔는데 ID3D12Debug5의 GPU validation을 켜니 새로운 에러가 쏟아져 나왔다. 가장 이해가 안됐던게 Texture Layout Barrier가 호환되지 않는다는 에러.구글링 해봐도 전혀 정보가 없다. 어제 하루종일 삽질한 끝에 Resource Barrier문제란걸 알았다.이게 D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE와 … More 추가된 D3D12_RESOURCE_STATES 열거형 – D3D12_RESOURCE_STATE_ALL_SHADER_RESOURCE

DXR의 BLAS 할당 최적화

최근 기술방송 -D3D12게임프로젝트 로딩성능 개선 ( https://www.youtube.com/live/R_sMY_jjZnE?si=qGerBiAmCkMehLbp )- 에서 언급했다시피 CreateCommittedResource()함수가 엄청 느리기 때문에 할당하는 버퍼 수가 많다면 성능에 상당한 영향을 준다. 이 문제를 해결하기 위해 D3D12Resource를 Heap에 맵핑한 D3DResourceBufferHeap를 만들었고 주요 매시 데이터는 D3DResourceBufferHeap에서 할당하도록 했다. 다만 RayTracing을 위한 BLAS메모리는 아직 처리하지 못했다. DXR렌더러에서 BLAS생성하느라 D3D12Resource를 엄청 많이 할당하는데 이게 성능에 적지 않게 영향을 … More DXR의 BLAS 할당 최적화

VOXEL HORIZON iPhone XBOX PC 네트워크 플레이 테스트

VOXEL HORIZON의 XBOX와 PC와 iPhone간의 네트워크 플레이 테스트. [지원 플랫폼]Windows Desktop(DX11/DX12/DXR)XBOX ONE(UWP on XBOX-DirectX11 feature level 11)XBOX Series S/X(UWP on XBOX-DirectX12 feature level 11)iPhone/iPad Devices(A12 Processor 이상 필요)mac(Apple Silicon) [사용된 기술]iOS/macOS – macOS API + metal API + BSD Socket + C++Windows Desktop – DirectX 11/12/DXR + winsock + IOCP + C++XBOX(UWP on XBOX) – … More VOXEL HORIZON iPhone XBOX PC 네트워크 플레이 테스트

DXR – Update Acceleration Structure

건물 오브젝트에 이어 스키닝된 동적 매쉬들을 실시간으로 Acceleration Structure에 반영시켰다.Acceleration Structure 업데이트에 많은 비용이 들어갈걸로 추측하고 있기 때문에 일단 60FPS제한을 걸었다. 캐릭터 오브젝트의 변환(애니메이션, 위치, 스케일, 회전)을 Compute Shader에서 처리. 변환된 버텍스 데이터는 UAV로 전달된 ID3D12Resource에 저장. ID3D12Resource와 연관된 Bottom Level Acceleration Structure를 갱신. Top Level Acceleration Structure를 갱신. DXR의 가장 중요한 포인트는 ‘렌더링할 장면을 … More DXR – Update Acceleration Structure

Surface Book에서 60프레임 락 해결방법

이전 포스팅 참고. https://megayuchi.com/2018/03/29/surface-book%ec%97%90%ec%84%9c-%eb%82%98%ed%83%80%eb%82%98%eb%8a%94-60fps-%ec%a0%9c%ed%95%9c-%ed%98%84%ec%83%81/ 이 빌어먹을 현상이 dGPU + 내장 GPU 구성을 가지는 다른 노트북에선 이 현상이 발생하지 않는다. 적어도 내가 테스트한 바로는 오직 서피스북에서만 발생했다. 하여간 엊그제 트위터 타임라인에 DX12개발자 계정이 BLT대신 FLIP방식을 사용하라는 문서를 공유했다. 혹시나 해서 읽어보다가 DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING옵션을 처음 알게 됐다. 오늘 SwapChain만들때 DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING값을 넣어보니 서피스북에서 60프레임 락이 드디어 풀리는걸 확인했다. 이 … More Surface Book에서 60프레임 락 해결방법

D3D12예제에서 Constant Buffer를 System Memory에 두는 이유.

D3D12 예제를 보면 Constant Buffer를 system memory에 만들어 사용하고 있다. (CPU write, GPU read). D3D11에선 Constant Buffer를 GPU메모리에 두느냐, 시스템 메모리에 두느냐에 따라 성능차이가 꽤 난다. 20-30%정도는 차이가 나는것 같다. D3D12에서 테스트해보면 대략 10%정도 성능 차이가 난다. 당연히 GPU메모리에 두는 쪽이 빠르다. 크다면 크고 작다면 작은 수치다. 그럼 왜 D3D12예제에선 시스템 메모리에 Constant Buffer를 잡았을까. … More D3D12예제에서 Constant Buffer를 System Memory에 두는 이유.

DX12에서 Shader에 사용할 resource 하나 세팅하려면..

DX12에서 shader에서 쓸 resource(texture, Constant Buffer, RW Buffer등) 하나 만들려면 다음과 같은 작업이 필요하다. 1. Descriptor heap 생성 (Depth Buffer와 Render Target으로 사용하는 경우 각각에 대해 또 따로 만들어야함) 2. D3DResource생성 3. Descriptor Heap으로 부터 descriptor할당 4. D3DResource로부터 descriptor의 내용 업데이트.(gpu측 억세스 정보를 descriptor에 write) 5. Shader Reosurce View, Constant Buffer View , Unordered Access … More DX12에서 Shader에 사용할 resource 하나 세팅하려면..