다음을 통해 공유


store_structured(sm5 - asm)

1~4개의 32비트 구성 요소를 구조적 버퍼 UAV(정렬되지 않은 액세스 뷰)에 임의로 씁니다.

store_structured dest[.write_mask], dstAddress[.select_component], dstByteOffset[.select_component], src0[.swizzle]
항목 설명
dest
[in] 작업 결과의 주소입니다.
dstAddress
[in] 쓸 주소입니다.
dstByteOffset
[in] 쓸 구조체의 인덱스입니다.
src0
[in] 작성할 구성 요소입니다.

설명

이 명령은 dstAddressdstByteOffset의 주소에서 destsrc0에서 작성된 1-4개 구성 요소 *32비트 구성 요소를 수행합니다. 형식 변환이 없습니다.

dest 는 UAV(u#)여야 합니다. 컴퓨팅 셰이더에서는 스레드 그룹 공유 메모리(g#)일 수도 있습니다.

dstAddress는 쓸 구조체의 인덱스를 지정합니다.

기록된 데이터의 위치는 오프셋, 주소, 버퍼 내용에 대한 포인터, 원본의 보폭 및 선형으로 저장된 데이터를 보여주는 다음 의사 코드와 동일합니다.

                    BYTE *BufferContents;             // from dest
                    UINT BufferStride;                // from dest
                    UINT dstAddress, dstByteOffset;   // source registers
                    BYTE *WriteLocation;              // value to calculate

                    // calculate writing location
                     WriteLocation = BufferContents 
                                + BufferStride * dstAddress 
                                + dstByteOffset;

                    // calculate the number of components to write
                    switch (dstWriteMask)
                    {
                        x:    WriteComponents = 1; break;
                        xy:   WriteComponents = 2; break;
                        xyz:  WriteComponents = 3; break;
                        xyzw: WriteComponents = 4; break;
                        default:  // only these masks are valid                              
                    }

                    // copy the data from the source register with
                    //    the swizzle applied
                    memcpy(WriteLocation, swizzle(src0, src0.swizzle), 
                             WriteComponents * sizeof(INT32));

이 의사 코드는 작업이 작동하는 방식을 보여 주지만 실제 데이터를 선형으로 저장할 필요는 없습니다. 데이터가 선형으로 저장되지 않은 경우, 명령의 실제 연산이 위 연산의 동작과 일치해야 합니다.

dest 에는 .x, .xy, .xyz, .xyzw 중 하나인 쓰기 마스크만 있을 수 있습니다. 쓰기 마스크는 간격 없이 쓸 32비트 구성 요소의 수를 결정합니다.

dstAddress 때문에 u#에 범위를 벗어나는 주소를 지정하는 것은 범위를 벗어난 메모리에 아무것도 기록되지 않음을 의미합니다.

dstWriteMask를 포함한 dstByteOffset이 u#에 대해 범위를 벗어난 액세스를 발생시키는 경우 UAV의 전체 콘텐츠가 정의되지 않습니다.

지정된 32비트 구성 요소를 위한 g#에 범위(모든 공유 메모리가 아닌 특정 g#의 범위)를 벗어난 주소를 지정하면 모든 공유 메모리의 모든 콘텐츠가 정의되지 않습니다.

dstByteOffset은 일반적으로 리터럴이므로 dstAddress와 별개의 인수입니다. 이 매개 변수 분리는 구조적 메모리의 원자성에서 수행되지 않았습니다.

cs_4_0 및 cs_4_1은 UAV 및 TGSM에 대해 이 명령을 지원합니다.

이 명령은 다음 셰이더 단계에 적용됩니다.

꼭짓점 Hull 도메인 기하 도형 픽셀 컴퓨팅
X X

UAV는 Direct3D 11.1의 모든 셰이더 단계에서 사용할 수 있으므로 이 명령은 Windows 8부터 사용할 수 있는 Direct3D 11.1 런타임의 모든 셰이더 단계에 적용됩니다.

꼭짓점 Hull 도메인 기하 도형 픽셀 컴퓨팅
X X X X X X

최소 셰이더 모델

이 명령은 다음 셰이더 모델에서 지원됩니다.

셰이더 모델 지원됨
셰이더 모델 5
셰이더 모델 4.1 아니요
셰이더 모델 4 아니요
셰이더 모델 3(DirectX HLSL) 아니요
셰이더 모델 2(DirectX HLSL) 아니요
셰이더 모델 1(DirectX HLSL) 아니요

셰이더 모델 5 어셈블리(DirectX HLSL)