ld_structured (sm5 - asm)
구조화된 버퍼에서 1-4개 32비트 구성 요소를 임의로 읽습니다.
ld_structured dest[.mask], srcAddress[.select_component], srcByteOffset[.select_component], src0[.swizzle] |
---|
항목 | 설명 |
---|---|
dest |
[in] 작업 결과의 주소입니다. |
srcAddress |
[in] 읽을 구조체의 인덱스를 지정합니다. |
srcByteOffset |
[in] 읽어오기를 시작할 구조체에서 바이트 오프셋을 지정합니다. |
src0 |
읽어올 버퍼입니다. 이 매개 변수는 SRV(t#), UAV(u#)여야 합니다. 컴퓨팅 셰이더에서는 스레드 그룹 공유 메모리(g#)일 수도 있습니다. |
설명
구조체에서 읽은 데이터는 다음 의사 코드와 동등합니다. 오프셋, 주소, 버퍼 콘텐츠에 대한 포인터, 원본의 스트라이드 및 선형으로 저장된 데이터가 있습니다.
BYTE *BufferContents; // from SRV or UAV
UINT BufferStride; // from base resource
UINT srcAddress, srcByteOffset; // from source registers
BYTE *ReadLocation; // value to calculate
ReadLocation = BufferContents
+ BufferStride * srcAddress
+ srcByteOffset;
UINT32 Temp[4]; // used to make code shorter
// apply the source resource swizzle on source data
Temp = read_and_swizzle(ReadLocation, srcSwizzle);
// write the components to the output based on mask
ApplyWriteMask(dstRegister, dstWriteMask, Temp);
이 의사 코드는 작업이 작동하는 방식을 보여 주지만 실제 데이터를 선형으로 저장할 필요는 없습니다. 데이터가 선형으로 저장되지 않은 경우, 명령의 실제 연산이 위 연산의 동작과 일치해야 합니다.
지정된 32비트 구성 요소의 u#/t#에 대해 범위를 벗어나는 주소를 지정하면 해당 구성 요소에 대해 0이 반환됩니다. 스위즐과 srcByteOffset으로 인해 u#/t#에 대해 범위를 벗어난 액세스가 발생하는 경우를 제외하고 모든 구성 요소에 대해 반환되는 값은 정의되어 있지 않습니다.
지정된 32비트 성분에 대해 g#(모든 공유 메모리와 반대되는 특정 g#의 범위)에 대한 범위를 벗어난 주소 지정은 정의되지 않은 결과를 반환합니다.
srcByteOffset은 일반적으로 리터럴이므로 srcAddress와 별개의 인수입니다. 이 매개 변수 분리는 구조적 메모리의 원자성에 대해 수행되지 않았습니다.
cs_4_0 및 cs_4_1은 UAV, SRV 및 TGSM에 대해 이 명령을 지원합니다.
이 명령은 다음 셰이더 단계에 적용됩니다.
꼭짓점 | Hull | 도메인 | 기하 도형 | 픽셀 | 컴퓨팅 |
---|---|---|---|---|---|
X | X | X | X | X | X |
UAV는 Direct3D 11.1의 모든 셰이더 단계에서 사용할 수 있으므로 이 명령은 Windows 8부터 사용할 수 있는 Direct3D 11.1 런타임용 UAV의 모든 셰이더 단계에 적용됩니다.
꼭짓점 | Hull | 도메인 | 기하 도형 | 픽셀 | 컴퓨팅 |
---|---|---|---|---|---|
X | X | X | X | X | X |
최소 셰이더 모델
이 명령은 다음 셰이더 모델에서 지원됩니다.
셰이더 모델 | 지원됨 |
---|---|
셰이더 모델 5 | 예 |
셰이더 모델 4.1 | 아니요 |
셰이더 모델 4 | 아니요 |
셰이더 모델 3(DirectX HLSL) | 아니요 |
셰이더 모델 2(DirectX HLSL) | 아니요 |
셰이더 모델 1(DirectX HLSL) | 아니요 |
cs_4_0 및 cs_4_1은 UAV, SRV 및 TGSM에 대해 이 명령을 지원합니다.