본문 바로가기

Library/Computer Graphics

Uniform Shader Inputs (HLSL in Direct3D 9)

버텍스 쉐이더와 픽셀 쉐이더는 2 종류의 입력을 받아들이는데, 그때 그때 상황에 맞는 입력(varying inputs)과, 상황에 상관없이 고정적인 값(uniform inputs)이 그것이다. 전자는 쉐이더의 각 실행 시점에서의 고유한 값이며. 버텍스 쉐이더에 있어서 이런 값들은 버텍스 스트림에서 넘어온 것이다. 고정적인 입력값들은 복수의 쉐이더 실행에서도 변하지 않는 상수이다. 어셈블리 쉐이더 모델과 비슷하게, 이런 고정 값들은 상수 레지스터(constant register)에 정의되며, 변하는 값들은 v, t 레지스터에 정의된다.

고정적 입력값은 두 가지 방식으로 정의될 수 있는데, 가장 일반적인 방법은 전역 변수를 선언하고 그것을 쉐이더 코드 내부에서 사용하는 것이다. 쉐이더 내부에서의 이들 전역 변수의 사용은, 쉐이더에 의해 요청된 고정적 입력값들의 목록에 이들 전역 변수를 추가하는 결과를 가져온다. (즉, 쉐이더 코드를 작성하고 클라이언트 코드에서 이 변수에 대한 핸들을 얻으려고 했을 때 실패했다면, 쓰지도 않는 변수이기 때문에 컴파일러가 목적 코드에서 제거했기 때문이다). 또 다른 방법은, 변수의 최상위 쉐이더 레벨에서 고정 입력값으로 이 변수를 사용하겠다고 쉐이더 컴파일러에게 알려주는 것이다. 이것 역시 위와 마찬가지로 고정 입력값 목록에 이 변수가 추가된다.

쉐이더에 의해 사용되는 고정 입력값들은 상수 테이블(ID3DXConstantTable과 같은)을 통해 애플리케이션과 연결될 수 있다. 상수 테이블은 이 변수들이 쉐이더가 상수 레지스터에 맞춘 고정값 변수들을 정의한 심벌이다. 고정적 함수들은 이들 고정값 전역 변수와 달리, 상수 테이블에 $ 기호를 붙여 표시된다. 이 기호는 지역 고정값 입력 변수들과 같은 이름의 전역 변수들을 구별하기 위한 것이다.

상수 테이블은 쉐이더에 의한 모든 고정값 변수들의 상수 레지스터 위치를 가지고 있으며, 만약 정의되었다면 타입 정보와 디폴트 값들 역시 포함하고 있다.


Translated from
http://msdn.microsoft.com/en-us/library/ee418534(VS.85).aspx