packoffset
다음 구문을 사용하는 선택적 셰이더 상수 압축 키워드:
: packoffset( c[Subcomponent][.component] )
매개 변수
항목 | 설명 |
---|---|
packoffset |
필수 키워드입니다. |
c |
압축은 상수 레지스터(c)에만 적용됩니다. |
[Subcomponent][.component] |
선택적 하위 성분 및 성분입니다. 하위 성분은 정수인 레지스터 번호입니다. 성분은 [.xyzw] 형식입니다. |
설명
이 키워드를 사용하여 변수 형식을 선언할 때 셰이더 상수를 수동으로 압축합니다.
상수를 압축할 때 상수 형식을 혼합할 수 없습니다.
컴파일러는 전역 상수와 균일 상수에 대해 약간 다르게 동작합니다.
- 전역 상수입니다. 전역 변수는 컴파일러에 의해 $Global cbuffer에 전역 상수로 추가됩니다. 자동으로 압축된 요소(packoffset 없이 선언된 요소)는 마지막으로 수동으로 압축된 변수 뒤에 나타납니다. 전역 상수를 압축할 때 형식을 혼합할 수 있습니다.
- 균일한 상수입니다. 함수의 매개 변수 목록에 있는 균일한 매개 변수는 셰이더가 효과 프레임워크 외부에서 컴파일될 때 컴파일러에 의해 $Param 상수 버퍼에 추가됩니다. 효과 프레임워크 내에서 컴파일될 때 균일 상수는 전역 범위에 정의된 균일 변수로 확인되어야 합니다. 균일 상수는 수동으로 오프셋할 수 없습니다. 권장 사용은 애플리케이션 데이터를 셰이더에 전달하는 수단이 아니라 전역으로 다시 별칭을 지정하는 셰이더의 특수화에만 사용하는 것입니다.
다음은 몇 가지 추가 예입니다. 셰이더 모델 4를 사용하여 상수 압축.
예제
다음은 셰이더 상수를 수동으로 압축하는 몇 가지 예입니다.
레지스터 경계를 넘지 않도록 크기가 충분히 큰 벡터 및 스칼라의 하위 성분을 압축합니다. 예를 들어, 다음은 모두 유효합니다.
cbuffer MyBuffer
{
float4 Element1 : packoffset(c0);
float1 Element2 : packoffset(c1);
float1 Element3 : packoffset(c1.y);
}