[DirectX12] 기본 개념 정리

WIGWAG·2023년 4월 11일
0

DirectX12

목록 보기
1/2

백터

XMVECTOR
XMFLOAT234
load float234 벡터변환
store float234 플로트변환
get set xyzw
FFFGHHC
XMVECTOR32

행렬

XMMATRIX
XMFLOAT4x4
Scaling
Rotation xyz axis
translation
translation from vec
transform coord 점변환
transform normal 벡터변환

COM

Com객체 = 클래스 역할
Comptr<T>::Get()
Comptr<T>::GetAddressOf()
Comptr<T>::Reset()

텍스처

DXGI_FORMAT_RnGnBnAn_T
무형식 TYPELESS

교환 사슬과 페이지 전환

IDXGISwapChain::ResizeBuffers
IDXGISwapChain::Present

깊이 버퍼링

DXGI_FORMAT_Dn_T(_Sn_T) 괄호 생략가능

자원과 서술자

CBV/SRV/UAV서술자
표본추출기 서술자
RTV서술자
DSV서술자
서술자 힙

다중표본화의 이론

앨리어싱(계단 현상)
앨리어싱 제거
초과표본화 : 비용 높음 그 대신 정확
다중표본화 : 이미지 색상이 픽셀당 한번만 계산

다렉의 다중표본화

DXGI_SAMPLE_DESC 구조체의 Count, Quality 채우기
ID3D12Device::CheckFeatureSupport로 지원여부점검

기능 수준

D3D_FEATURE_LEVEL 9~11버전

DXGI

다렉과 함께 쓰이는 API
IDXGIFactory : 밑에 두개 관리
IDXGISwapChain : 교환사슬
IDXGIAdapter : 디스플레이 어댑터
IDXGIOutput : 디스플레이 출력
DXGI_MODE_DESC : 하나의 디스플레이 모드 서술

기능 지원 점검

ID3D12Device::CheckFeatureSupport의 데이터 3개
Feature : 지원 여부 점검할 기능 종류
pFeatureSupportData : 기능 관련 구조체 가리키는 포인터(읽기, 쓰기 가능)
FeatureSupportDataSize : 구조체 크기

상주성

화면에 보이는 자원만 사용 - 퇴거, 입주
ID3D12Device::MakeResident
ID3D12Device::Evict
둘다 매개변수 같음
첫번째 인수 : 자원들의 개수
두번째 인수 : ID3D12Pageable 자원들의 배열

명령 대기열과 명령 목록

ID3D12CommandQueue : 명령 대기열을 대표함
D3D12_COMMAND_QUEUE_DESC : 대기열 서술 구조체
ExecuteCommandLists : 명령들을 대기열에 추가함
ID3D12CommandList : 명령 목록을 대표함
ID3D12GraphicsCommandList : 그래픽 작업을 위한 명령 목록을 대표함
ID3D12GraphicsCommandList::Close : 대기열에 추가하기 전에 명령 목록을 반드시 닫아야 한다.
ID3D12CommandAllocator : 명령 메모리 할당자
ID3D12Device::CreateCommandAllocator : 명령 메모리 할당자 생성
ID3D12Device::CreateCommandList : 명령 목록 생성
ID3D12CommandList::Reset : 제출한 명령목록을 새로운 명령 기록하는 데 재사용
ID3D12CommandAllocator::Reset : 명령할당자 메모리 재사용

CPU/GPU 동기화

ID3D12Fence : 울타리를 대표
ID3D12Device::CreateFence : 울타리 객체 생성

자원 상태 전이

기록되지 않은 자원 읽는 상황 피하기
D3D12_RESOURCE_BARRIOR_DESC : 자원장벽 서술 구조체
위에서 C붙으면 확장 버전

명령 목록을 이용한 다중 스레드 활용

명령 목록 : 자유 스레드X
명령 할당자 : 자유 스레드X
명령 대기열 : 자유 스레드

다렉 초기화

  1. D3D12CreateDevice 함수를 이용해서 ID3D12Device를 생성한다.
  2. ID3D12Fence 객체를 생성하고 서술자들의 크기를 얻는다.
  3. 4X MSAA* 품질 수준 지원 여부를 점검한다.
  4. 명령 대기열과 명령 목록 할당자, 그리고 주 명령 목록을 생성한다.
  5. 교환 사슬을 서술하고 생성한다.
  6. 응용 프로그램에 필요한 서술자 힙들을 생성한다.
  7. 후면 버퍼의 크기를 설정하고, 후면 버퍼에 대한 렌더 대상 뷰를 생성한다.
  8. 깊이 스텐실 버퍼를 생성하고, 그와 연관된 깊이 스텐실 뷰를 생성한다.
  9. 뷰포트와 가위 판정용 사각형을 설정한다.

성능 타이머

window.h에서 가져온다.
QueryPerformanceCounter함수 : 틱 수 단위의 현재 시간얻기
QueryPerformanceFrequency함수 : 타이머의 주파수 얻기 -> 역수는 틱당 초수
틱 단위의 현재 시간 X 틱당 초 수 = 초 단위의 현재 시간
(작업 전 - 작업 후) X 틱당 토 수 = 작업 시간

profile
프로그래밍 공부 기록 노트

0개의 댓글