하위 하드웨어의 컴퓨팅 셰이더
Direct3D 11은 대부분의 Direct3D 10.x 하드웨어에서 작동하는 컴퓨팅 셰이더 를 사용하는 기능을 제공하며 작업에는 몇 가지 제한 사항이 있습니다. 컴퓨팅 셰이더 기술을 DirectCompute 기술이라고도 합니다. 이 항목에서는 Direct3D 10 하드웨어의 Direct3D 11 앱에서 컴퓨팅 셰이더 를 사용하는 방법에 대해 설명합니다.
하위 하드웨어에서 컴퓨팅 셰이더를 지원하는 것은 Direct3D 10.x와 호환되는 디바이스에만 해당됩니다. Direct3D 9.x 하드웨어에서는 컴퓨팅 셰이더를 사용할 수 없습니다.
Direct3D 10.x 하드웨어가 컴퓨팅 셰이더를 지원하는지 검사 ID3D11Device::CheckFeatureSupport를 호출합니다. CheckFeatureSupport 호출에서 D3D11_FEATURE_D3D10_X_HARDWARE_OPTIONS 값을 Feature 매개 변수에 전달하고, D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS 구조체에 대한 포인터를 pFeatureSupportData 매개 변수에 전달하고, D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS 구조체의 크기를 FeatureSupportDataSize 매개 변수에 전달합니다. Direct3D 10.x 하드웨어가 컴퓨팅 셰이더를 지원하는 경우 CheckFeatureSupport는 D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS ComputeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x멤버에서TRUE를 반환합니다.
10Level9 참조 섹션에는 다양한 ID3D11Device 및 ID3D11DeviceContext 메서드가 다양한 10Level9 기능 수준에서 작동하는 방식의 차이점이 나열되어 있습니다.
UAV(순서가 지정되지 않은 액세스 뷰)
원시(RWByteAddressBuffer) 및 Structured(RWStructuredBuffer) 순서가 지정되지 않은 액세스 뷰는 하위 하드웨어에서 지원되며 다음과 같은 제한 사항이 있습니다.
- ID3D11DeviceContext::CSSetUnorderedAccessViews를 통해 한 번에 하나의 UAV만 파이프라인에 바인딩될 수 있습니다.
- 원시 UAV의 기본 오프셋은 Direct3D 11 하드웨어에 필요한 16바이트 맞춤 대신 256바이트 경계에 맞춰야 합니다.
형식화된 UAV는 하위 하드웨어에서 지원되지 않습니다. 여기에는 Texture1D, Texture2D 및 Texture3D UAV가 포함됩니다.
하위 하드웨어의 픽셀 셰이더는 순서가 지정되지 않은 액세스를 지원하지 않습니다.
셰이더 리소스 뷰(SRV)
셰이더 리소스 뷰로서의 원시 및 구조적 버퍼는 Direct3D 11 하드웨어에 있는 것처럼 읽기 전용 액세스를 위해 하위 하드웨어에서 지원됩니다. 이러한 리소스 유형은 꼭짓점 셰이더, 기하 도형 셰이더, 픽셀 셰이더 및 컴퓨팅 셰이더에 대해 지원됩니다.
스레드 그룹
컴퓨팅 셰이더는 스레드 그룹 내에서 여러 스레드에서 병렬로 실행할 수 있습니다.
스레드 그룹은 다음과 같은 제한 사항과 함께 하위 하드웨어에서 지원됩니다.
스레드 그룹 차원
하위 하드웨어에 대해 정의된 스레드 그룹은 X 및 Y 차원 768로 제한됩니다. Direct3D 11 하드웨어의 최대값인 1024보다 작습니다. 최대 Z 차원 64는 변경되지 않습니다.
그룹의 총 스레드 수(X × Y × Z)는 768개로 제한됩니다. 이는 Direct3D 11 하드웨어의 경우 1024의 제한보다 작습니다.
이러한 숫자를 초과하면 셰이더 컴파일이 실패합니다.
Two-Dimensional 스레드 인덱스
스레드 그룹 내의 특정 스레드는 (x,y,z)에 의해 지정된 3D 벡터를 사용하여 인덱싱됩니다.
하위 하드웨어에서 작동하는 컴퓨팅 셰이더의 경우 스레드 그룹은 두 차원만 지원합니다. 즉, 3D 벡터의 Z 값은 항상 1이어야 합니다.
이 제한은 특히 다음 사항에 적용됩니다.
- ID3D11DeviceContext::D ispatch— ThreadGroupCountZ 인수는 1이어야 합니다.
- ID3D11DeviceContext::D ispatchIndirect— 이 함수는 하위 하드웨어에서 지원되지 않습니다.
- numthreads - Z 값은 1이어야 합니다.
스레드 그룹 공유 메모리(TGSM)
스레드 그룹 공유 메모리는 하위 하드웨어에서 16Kb로 제한됩니다. 이는 Direct3D 11 하드웨어에서 사용할 수 있는 32Kb보다 작습니다.
컴퓨팅 셰이더 스레드는 자체 TGSM 지역에만 쓸 수 있습니다. 이 쓰기 전용 지역은 최대 크기가 256바이트 이하이며 그룹에 대해 선언된 스레드 수가 증가함에 따라 최대 크기가 감소합니다.
다음 표에서는 그룹의 스레드 수에 대한 TGSM 영역의 스레드당 최대 크기를 정의합니다.
그룹의 스레드 수 | 스레드당 최대 TGSM 크기 |
---|---|
0-64 | 256 |
65-68 | 240 |
69-72 | 224 |
73-76 | 208 |
77-84 | 192 |
85-92 | 176 |
93-100 | 160 |
101-112 | 144 |
113-128 | 128 |
129-144 | 112 |
145-168 | 96 |
169-204 | 80 |
205-256 | 64 |
257-340 | 48 |
341-512 | 32 |
513-768 | 16 |
컴퓨팅 셰이더 스레드는 모든 위치에서 TGSM을 읽을 수 있습니다.
D3DCompile with D3DCOMPILE_SKIP_OPTIMIZATION
D3DCompile 은 D3DCOMPILE_SKIP_OPTIMIZATION 컴파일 옵션과 함께 cs_4_0 셰이더 대상으로 전달할 때 E_NOTIMPL 반환합니다. cs_5_0 셰이더 대상은 D3DCOMPILE_SKIP_OPTIMIZATION 작동합니다.
관련 항목