store_raw(sm5 - asm)
1-4 32비트 성분을 무형식 메모리에 임의로 기록합니다.
store_raw dest[.write_mask], dstByteOffset[.select_component], src0[.swizzle] |
---|
항목 | 설명 |
---|---|
dest |
[in] 메모리 주소입니다. |
dstByteOffset |
[in] 오프셋입니다. |
src0 |
[in] 작성할 구성 요소입니다. |
설명
이 명령은 dstByteOffset의 오프셋에서 src0에서 dest로 작성된 1-4 구성 요소 *32비트 구성 요소를 수행합니다. 형식 변환은 없습니다.
dest 는 UAV(u#)이거나 컴퓨팅 셰이더에서 스레드 그룹 공유 메모리(g#)일 수도 있습니다.
dstByteOffset은 다른 매개 변수의 swizzle 및 마스크에 따라 데이터가 기록될 수 있는 4개의 순차적 32비트 값 창에 대한 메모리의 기본 32비트 값을 지정합니다.
기록된 데이터의 위치는 주소, 버퍼 콘텐츠에 대한 포인터 및 선형으로 저장된 데이터를 보여 주는 다음 의사 코드와 동등합니다.
BYTE *BufferContents; // from src0
UINT dstByteOffset; // source register
BYTE *WriteLocation; // value to calculate
// calculate writing location
WriteLocation = BufferContents
+ 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(UINT32));
이 의사 코드는 작동 함수를 보여 주지만 실제 데이터는 선형으로 저장될 필요가 없습니다. dest 에는 .x, .xy, .xyz, .xyzw 중 하나인 쓰기 마스크만 있을 수 있습니다. 쓰기 마스크는 간격 없이 쓸 32비트 성분의 수를 결정합니다.
u#의 범위를 벗어난 주소 지정은 범위를 벗어난 메모리에 아무 것도 기록되지 않음을 의미합니다. 범위 내에 있는 모든 부분이 올바르게 기록됩니다.
지정된 32비트 성분에 대해 g#(모든 공유 메모리가 아닌 특정 g#의 범위)에 대한 주소 지정 범위를 벗어나면 모든 공유 메모리의 전체 콘텐츠가 정의되지 않습니다.
cs_4_0 및 cs_4_1은 UAV에 대해 이 명령을 지원합니다.
이 명령은 다음 셰이더 단계에 적용됩니다.
꼭짓점 | 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) | 아니요 |