1. Direct3D Compute Shader
1.1 Compute Shader
1.1.1 Compute Shader
- GPU는 하나의 장소 & 연속된 장소들에 대량의 메모리를 읽어서 처리하는 작업에 최적화
- 임의 메모리 접근을 염두에 두고 설계된 CPU와 대조적인 특징
- 정점들과 픽셀들이 개별적으로 처리된다는 특징 때문에 GPU는 대규모 벙렬 처리에 맞게 설계
- Compute Shader는 Direct3D가 저공하는 프로그램 기능 셰이더
- 렌더링 파이프라인에 직접 포함되어 있는 것이 아닌 옆에 존재, GPU 자원에서 직접 자료를 읽거나 기록 가능
1.1.2 Thread & Thread Group
- GPU 프로그래밍에서 작업을 실행할 다수의 스레드들이 스레드 그룹들로 묶여 일종의 격자를 형성
- 하나의 스레드 그룹은 하나의 다중처리기에서 실행, 각 스레드 그룹 마다 공유 메모리를 가짐
- 하나의 스레드 그룹은 여러 개의 스레드들로 이루어짐
- 밑의 코드를 통해 Direct3D 스레드 그룹을 실행할 수 있음
void ID3D11DeviceContext::Dispatch;
1.1.3 Compute Shader Program
- 크기가 같은 두 Texture의 합을 구하는 계산 셰이더
- CPU 데이터로 부터 전달된 두 Texture의 Vector를 입력 자원, 두 Texture의 합을 구하고 출력하는 출력 자원 생성
StructuredBuffer<Data> gInputA; StructuredBuffer<Data> gInputB;
RWStructuredBuffer<Data> gOutput;
- 스레드 그룹 하나의 스레드 개수와 구성
[numthreads(32, 1, 1)]
void CS(int3 dtid : SV_DispatchThreadID)
{
gOutput[dtid.x].v1 = gInputA[dtid.x].v1 + gInputB[dtid.x].v1;
gOutput[dtid.x].v2 = gInputA[dtid.x].v2 + gInputB[dtid.x].v2;
}
'C++ Algorithm & Study > Game Math & DirectX 11' 카테고리의 다른 글
[Direct11] 28. Direct3D Compute Shader - Blur System (0) | 2023.06.21 |
---|---|
[Direct11] 27. Direct3D Compute Shader - I/O Resource (0) | 2023.06.21 |
[Direct11] 25. EX App Program - Billboard (0) | 2023.06.20 |
[Direct11] 24. Direct3D Geometry Shader (0) | 2023.06.20 |
[Direct11] 23. EX App Program - Mirror (0) | 2023.06.19 |