새 리소스 종류
Direct3D 11에 몇 가지 새로운 리소스 종류가 추가되었습니다.
읽기/쓰기 버퍼 및 텍스처
셰이더 모델 4 리소스는 읽기 전용입니다. 셰이더 모델 5는 해당하는 새 읽기/쓰기 리소스 집합을 구현합니다.
- RWBuffer
- RWTexture1D RWTexture1DArray
- RWTexture2D RWTexture2DArray
- RWTexture3D
이러한 리소스에는 메모리에 직접 액세스하는 방법이 없기 때문에 인덱싱을 통해 메모리에 액세스하려면 리소스 변수가 필요합니다. 수식의 왼쪽과 오른쪽에 리소스 변수를 사용할 수 있습니다. 오른쪽에 사용되는 경우 템플릿 형식은 단일 구성 요소(float, int 또는 uint)여야 합니다.
구조적 버퍼
구조화된 버퍼는 같은 크기의 요소를 포함하는 버퍼입니다. 하나 이상의 멤버 형식이 있는 구조를 사용하여 요소를 정의합니다. 세 멤버가 있는 구조체는 다음과 같습니다.
struct MyStruct
{
float4 Color;
float4 Normal;
bool isAwesome;
};
다음과 같이 구조화된 버퍼를 선언하려면 이 구조를 사용합니다.
StructuredBuffer<MyStruct> mySB;
구조화된 버퍼는 인덱싱 외에도 다음과 같은 단일 멤버 액세스를 지원합니다.
float4 myColor = mySb[27].Color;
다음 개체 형식을 사용하여 구조화된 버퍼에 액세스합니다.
- StructuredBuffer 읽기 전용 구조적 버퍼입니다.
- RWStructuredBuffer 읽기/쓰기 구조화된 버퍼입니다.
연동 연산을 구현하는 Atomic 함수는 RWStructuredBufferint 및 uint 요소에 대해 허용됩니다.
바이트 주소 버퍼
바이트 주소 버퍼는 바이트 오프셋으로 콘텐츠를 주소 지정할 수 있는 버퍼입니다. 일반적으로 버퍼 내용은 S*N에서 지정한 각 요소(S) 및 요소 번호(N)에 대한 스트라이드를 사용하여 요소별로 인덱싱됩니다. 원시 버퍼라고도 할 수 있는 바이트 주소 버퍼는 버퍼의 시작 부분에서 바이트 값 오프셋을 사용하여 데이터에 액세스합니다. 바이트 값은 DWORD가 정렬되도록 4의 배수여야 합니다. 다른 값이 제공되면 동작이 정의되지 않습니다.
셰이더 모델 5에는 읽기 전용 바이트 주소 버퍼 액세스하기 위한 개체와 읽기-쓰기 바이트 주소 버퍼도입되었습니다. 바이트 주소 버퍼의 내용은 32비트 부호 없는 정수로 설계되었습니다. 버퍼의 값이 실제로 부호 없는 정수가 아니면 asfloat 같은 함수를 사용하여 읽습니다.
순서가 지정되지 않은 액세스 버퍼 또는 텍스처
순서가 지정되지 않은 액세스 리소스(다중 샘플링 없이 버퍼, 텍스처 및 텍스처 배열 포함)를 사용하면 여러 스레드에서 임시로 순서가 지정되지 않은 읽기/쓰기 액세스를 허용합니다. 즉, Atomic Functions사용하여 메모리 충돌을 생성하지 않고도 여러 스레드에서 이 리소스 유형을 동시에 읽거나 쓸 수 있습니다.
ID3D11Device::CreateBuffer 또는 ID3D11Device::CreateTexture2D 같은 함수를 호출하고 D3D11_BIND_FLAG 열거형에서 D3D11_BIND_UNORDERED_ACCESS 플래그를 전달하여 순서가 지정되지 않은 액세스 버퍼 또는 텍스처를 만듭니다.
정렬되지 않은 액세스 리소스는 픽셀 셰이더 및 컴퓨팅 셰이더에만 바인딩할 수 있습니다. 실행하는 동안 병렬로 실행되는 픽셀 셰이더 또는 컴퓨팅 셰이더에는 순서가 지정되지 않은 액세스 리소스가 바인딩됩니다.
버퍼 추가 및 사용
추가 및 사용 버퍼는 스택 작동 방식과 유사하게 버퍼의 끝에서 값을 추가하고 제거할 수 있도록 지원하는 정렬되지 않은 리소스의 특수 형식입니다.
추가 및 사용 버퍼는 구조화된 버퍼여야 합니다.
해당 메서드를 통해 이러한 리소스를 사용하며, 이러한 리소스는 리소스 변수를 사용하지 않습니다.
관련 항목