imm_atomic_cmp_exch (sm5 - asm)

메모리를 즉시 비교하고 교환합니다.

imm_atomic_cmp_exch dst0[.single_component_mask], dst1, dstAddress[.swizzle], src0[.select_component], src1[.select_component]
항목 설명
dst0
[out] 쓰기 전에 dst1을 포함합니다.
dst1
[in] UAV(순서가 지정되지 않은 액세스 뷰)(u#)입니다. 컴퓨팅 셰이더에서 이는 스레드 그룹 공유 메모리(g#)일 수도 있습니다.
dstAddress
[in] 대상 메모리입니다.
src0
[in] dst1과 비교할 값입니다.
src1
[in] 비교된 값이 동일한 경우 대상 메모리에 기록되는 값입니다.

이 명령은 구성 요소 주소 dstAddress당 32비트에서 피연산자 src0dst1의 단일 구성 요소 32비트 값 비교를 수행합니다.

dst1이 u#인 경우 원시, 형식 또는 구조화로 선언되었을 수 있습니다. 입력된 경우 바인딩된 리소스 형식이 R32_UINT/_SINT인 UINT/SINT로 선언되어야 합니다.

dst1이 g#인 경우 원시 또는 구조화로 선언해야 합니다.

비교된 값이 동일하면 src1의 단일 구성 요소 32비트 값이 대상 메모리에 쓰입니다. 그러지 않으면 대상 메모리가 변경되지 않습니다.

대상 메모리의 원래 32비트 값은 항상 dst0에 기록됩니다.

전체 연산은 원자성으로 수행됩니다.

셰이더 호출이 비활성화된 경우(예: 픽셀이 실행 초기에 삭제되었거나 픽셀/샘플 호출이 도함수에 대한 실제 픽셀/샘플에 대한 도우미 역할만 하는 경우) 이 명령은 dst1 메모리이고 반환된 값은 정의되지 않습니다.

u#의 범위를 벗어나면 u#이 구조화되고 구조체(주소의 두 번째 성분)에 대한 바이트 오프셋으로 인해 범위를 벗어난 액세스가 발생하는 경우 UAV의 전체 내용이 정의되지 않는 경우를 제외하고는 메모리에 기록되지 않습니다.

u# 또는 g#에서 범위를 벗어난 주소 지정으로 인해 정의되지 않은 결과가 dst0의 셰이더로 반환됩니다.

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

꼭짓점 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)