다음을 통해 공유


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);
}

추가 정보

변수 구문

변수(DirectX HLSL)